Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b70ab2e8 authored by Phoebe Buckheister's avatar Phoebe Buckheister Committed by David S. Miller
Browse files

ieee802154: enforce consistent endianness in the 802.15.4 stack



Enable sparse warnings about endianness, replace the remaining fields
regarding network operations without explicit endianness annotations
with such that are annotated, and propagate this through the entire
stack.

Uses of ieee802154_addr_sa are not changed yet, this patch is only
concerned with all other fields (such as address filters, operation
parameters and the likes).

Signed-off-by: default avatarPhoebe Buckheister <phoebe.buckheister@itwm.fraunhofer.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 46ef0eb3
Loading
Loading
Loading
Loading
+13 −12
Original line number Original line Diff line number Diff line
@@ -745,30 +745,31 @@ at86rf230_set_hw_addr_filt(struct ieee802154_dev *dev,
	struct at86rf230_local *lp = dev->priv;
	struct at86rf230_local *lp = dev->priv;


	if (changed & IEEE802515_AFILT_SADDR_CHANGED) {
	if (changed & IEEE802515_AFILT_SADDR_CHANGED) {
		u16 addr = le16_to_cpu(filt->short_addr);

		dev_vdbg(&lp->spi->dev,
		dev_vdbg(&lp->spi->dev,
			"at86rf230_set_hw_addr_filt called for saddr\n");
			"at86rf230_set_hw_addr_filt called for saddr\n");
		__at86rf230_write(lp, RG_SHORT_ADDR_0, filt->short_addr);
		__at86rf230_write(lp, RG_SHORT_ADDR_0, addr);
		__at86rf230_write(lp, RG_SHORT_ADDR_1, filt->short_addr >> 8);
		__at86rf230_write(lp, RG_SHORT_ADDR_1, addr >> 8);
	}
	}


	if (changed & IEEE802515_AFILT_PANID_CHANGED) {
	if (changed & IEEE802515_AFILT_PANID_CHANGED) {
		u16 pan = le16_to_cpu(filt->pan_id);

		dev_vdbg(&lp->spi->dev,
		dev_vdbg(&lp->spi->dev,
			"at86rf230_set_hw_addr_filt called for pan id\n");
			"at86rf230_set_hw_addr_filt called for pan id\n");
		__at86rf230_write(lp, RG_PAN_ID_0, filt->pan_id);
		__at86rf230_write(lp, RG_PAN_ID_0, pan);
		__at86rf230_write(lp, RG_PAN_ID_1, filt->pan_id >> 8);
		__at86rf230_write(lp, RG_PAN_ID_1, pan >> 8);
	}
	}


	if (changed & IEEE802515_AFILT_IEEEADDR_CHANGED) {
	if (changed & IEEE802515_AFILT_IEEEADDR_CHANGED) {
		u8 i, addr[8];

		memcpy(addr, &filt->ieee_addr, 8);
		dev_vdbg(&lp->spi->dev,
		dev_vdbg(&lp->spi->dev,
			"at86rf230_set_hw_addr_filt called for IEEE addr\n");
			"at86rf230_set_hw_addr_filt called for IEEE addr\n");
		at86rf230_write_subreg(lp, SR_IEEE_ADDR_0, filt->ieee_addr[7]);
		for (i = 0; i < 8; i++)
		at86rf230_write_subreg(lp, SR_IEEE_ADDR_1, filt->ieee_addr[6]);
			__at86rf230_write(lp, RG_IEEE_ADDR_0 + i, addr[i]);
		at86rf230_write_subreg(lp, SR_IEEE_ADDR_2, filt->ieee_addr[5]);
		at86rf230_write_subreg(lp, SR_IEEE_ADDR_3, filt->ieee_addr[4]);
		at86rf230_write_subreg(lp, SR_IEEE_ADDR_4, filt->ieee_addr[3]);
		at86rf230_write_subreg(lp, SR_IEEE_ADDR_5, filt->ieee_addr[2]);
		at86rf230_write_subreg(lp, SR_IEEE_ADDR_6, filt->ieee_addr[1]);
		at86rf230_write_subreg(lp, SR_IEEE_ADDR_7, filt->ieee_addr[0]);
	}
	}


	if (changed & IEEE802515_AFILT_PANC_CHANGED) {
	if (changed & IEEE802515_AFILT_PANC_CHANGED) {
+7 −7
Original line number Original line Diff line number Diff line
@@ -63,11 +63,11 @@ static struct wpan_phy *fake_get_phy(const struct net_device *dev)
 *
 *
 * Return the ID of the PAN from the PIB.
 * Return the ID of the PAN from the PIB.
 */
 */
static u16 fake_get_pan_id(const struct net_device *dev)
static __le16 fake_get_pan_id(const struct net_device *dev)
{
{
	BUG_ON(dev->type != ARPHRD_IEEE802154);
	BUG_ON(dev->type != ARPHRD_IEEE802154);


	return 0xeba1;
	return cpu_to_le16(0xeba1);
}
}


/**
/**
@@ -78,11 +78,11 @@ static u16 fake_get_pan_id(const struct net_device *dev)
 * device. If the device has not yet had a short address assigned
 * device. If the device has not yet had a short address assigned
 * then this should return 0xFFFF to indicate a lack of association.
 * then this should return 0xFFFF to indicate a lack of association.
 */
 */
static u16 fake_get_short_addr(const struct net_device *dev)
static __le16 fake_get_short_addr(const struct net_device *dev)
{
{
	BUG_ON(dev->type != ARPHRD_IEEE802154);
	BUG_ON(dev->type != ARPHRD_IEEE802154);


	return 0x1;
	return cpu_to_le16(0x1);
}
}


/**
/**
@@ -149,7 +149,7 @@ static int fake_assoc_req(struct net_device *dev,
 *       802.15.4-2006 document.
 *       802.15.4-2006 document.
 */
 */
static int fake_assoc_resp(struct net_device *dev,
static int fake_assoc_resp(struct net_device *dev,
		struct ieee802154_addr_sa *addr, u16 short_addr, u8 status)
		struct ieee802154_addr_sa *addr, __le16 short_addr, u8 status)
{
{
	return 0;
	return 0;
}
}
@@ -281,8 +281,8 @@ static int ieee802154_fake_ioctl(struct net_device *dev, struct ifreq *ifr,
	switch (cmd) {
	switch (cmd) {
	case SIOCGIFADDR:
	case SIOCGIFADDR:
		/* FIXME: fixed here, get from device IRL */
		/* FIXME: fixed here, get from device IRL */
		pan_id = fake_get_pan_id(dev);
		pan_id = le16_to_cpu(fake_get_pan_id(dev));
		short_addr = fake_get_short_addr(dev);
		short_addr = le16_to_cpu(fake_get_short_addr(dev));
		if (pan_id == IEEE802154_PANID_BROADCAST ||
		if (pan_id == IEEE802154_PANID_BROADCAST ||
		    short_addr == IEEE802154_ADDR_BROADCAST)
		    short_addr == IEEE802154_ADDR_BROADCAST)
			return -EADDRNOTAVAIL;
			return -EADDRNOTAVAIL;
+9 −8
Original line number Original line Diff line number Diff line
@@ -465,8 +465,8 @@ static int mrf24j40_filter(struct ieee802154_dev *dev,
	if (changed & IEEE802515_AFILT_SADDR_CHANGED) {
	if (changed & IEEE802515_AFILT_SADDR_CHANGED) {
		/* Short Addr */
		/* Short Addr */
		u8 addrh, addrl;
		u8 addrh, addrl;
		addrh = filt->short_addr >> 8 & 0xff;
		addrh = le16_to_cpu(filt->short_addr) >> 8 & 0xff;
		addrl = filt->short_addr & 0xff;
		addrl = le16_to_cpu(filt->short_addr) & 0xff;


		write_short_reg(devrec, REG_SADRH, addrh);
		write_short_reg(devrec, REG_SADRH, addrh);
		write_short_reg(devrec, REG_SADRL, addrl);
		write_short_reg(devrec, REG_SADRL, addrl);
@@ -476,15 +476,16 @@ static int mrf24j40_filter(struct ieee802154_dev *dev,


	if (changed & IEEE802515_AFILT_IEEEADDR_CHANGED) {
	if (changed & IEEE802515_AFILT_IEEEADDR_CHANGED) {
		/* Device Address */
		/* Device Address */
		int i;
		u8 i, addr[8];

		memcpy(addr, &filt->ieee_addr, 8);
		for (i = 0; i < 8; i++)
		for (i = 0; i < 8; i++)
			write_short_reg(devrec, REG_EADR0+i,
			write_short_reg(devrec, REG_EADR0 + i, addr[i]);
					filt->ieee_addr[7-i]);


#ifdef DEBUG
#ifdef DEBUG
		printk(KERN_DEBUG "Set long addr to: ");
		printk(KERN_DEBUG "Set long addr to: ");
		for (i = 0; i < 8; i++)
		for (i = 0; i < 8; i++)
			printk("%02hhx ", filt->ieee_addr[i]);
			printk("%02hhx ", addr[7 - i]);
		printk(KERN_DEBUG "\n");
		printk(KERN_DEBUG "\n");
#endif
#endif
	}
	}
@@ -492,8 +493,8 @@ static int mrf24j40_filter(struct ieee802154_dev *dev,
	if (changed & IEEE802515_AFILT_PANID_CHANGED) {
	if (changed & IEEE802515_AFILT_PANID_CHANGED) {
		/* PAN ID */
		/* PAN ID */
		u8 panidl, panidh;
		u8 panidl, panidh;
		panidh = filt->pan_id >> 8 & 0xff;
		panidh = le16_to_cpu(filt->pan_id) >> 8 & 0xff;
		panidl = filt->pan_id & 0xff;
		panidl = le16_to_cpu(filt->pan_id) & 0xff;
		write_short_reg(devrec, REG_PANIDH, panidh);
		write_short_reg(devrec, REG_PANIDH, panidh);
		write_short_reg(devrec, REG_PANIDL, panidl);
		write_short_reg(devrec, REG_PANIDL, panidl);


+3 −3
Original line number Original line Diff line number Diff line
@@ -171,7 +171,7 @@ struct ieee802154_mlme_ops {
			u8 channel, u8 page, u8 cap);
			u8 channel, u8 page, u8 cap);
	int (*assoc_resp)(struct net_device *dev,
	int (*assoc_resp)(struct net_device *dev,
			struct ieee802154_addr_sa *addr,
			struct ieee802154_addr_sa *addr,
			u16 short_addr, u8 status);
			__le16 short_addr, u8 status);
	int (*disassoc_req)(struct net_device *dev,
	int (*disassoc_req)(struct net_device *dev,
			struct ieee802154_addr_sa *addr,
			struct ieee802154_addr_sa *addr,
			u8 reason);
			u8 reason);
@@ -190,8 +190,8 @@ struct ieee802154_mlme_ops {
	 * FIXME: these should become the part of PIB/MIB interface.
	 * FIXME: these should become the part of PIB/MIB interface.
	 * However we still don't have IB interface of any kind
	 * However we still don't have IB interface of any kind
	 */
	 */
	u16 (*get_pan_id)(const struct net_device *dev);
	__le16 (*get_pan_id)(const struct net_device *dev);
	u16 (*get_short_addr)(const struct net_device *dev);
	__le16 (*get_short_addr)(const struct net_device *dev);
	u8 (*get_dsn)(const struct net_device *dev);
	u8 (*get_dsn)(const struct net_device *dev);
};
};


+2 −3
Original line number Original line Diff line number Diff line
@@ -50,7 +50,7 @@ struct ieee802154_hw_addr_filt {
				 * devices across independent networks.
				 * devices across independent networks.
				 */
				 */
	__le16	short_addr;
	__le16	short_addr;
	u8	ieee_addr[IEEE802154_ADDR_LEN];
	__le64	ieee_addr;
	u8	pan_coord;
	u8	pan_coord;
};
};


@@ -153,8 +153,7 @@ struct ieee802154_ops {
	int		(*set_hw_addr_filt)(struct ieee802154_dev *dev,
	int		(*set_hw_addr_filt)(struct ieee802154_dev *dev,
					  struct ieee802154_hw_addr_filt *filt,
					  struct ieee802154_hw_addr_filt *filt,
					    unsigned long changed);
					    unsigned long changed);
	int		(*ieee_addr)(struct ieee802154_dev *dev,
	int		(*ieee_addr)(struct ieee802154_dev *dev, __le64 addr);
				     u8 addr[IEEE802154_ADDR_LEN]);
	int		(*set_txpower)(struct ieee802154_dev *dev, int db);
	int		(*set_txpower)(struct ieee802154_dev *dev, int db);
	int		(*set_lbt)(struct ieee802154_dev *dev, bool on);
	int		(*set_lbt)(struct ieee802154_dev *dev, bool on);
	int		(*set_cca_mode)(struct ieee802154_dev *dev, u8 mode);
	int		(*set_cca_mode)(struct ieee802154_dev *dev, u8 mode);
Loading