diff options
| author | Phoebe Buckheister <phoebe.buckheister@itwm.fraunhofer.de> | 2014-02-17 05:34:08 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-02-17 16:42:38 -0500 |
| commit | 9b2777d6089bcd7fb035847f907280560fe233c8 (patch) | |
| tree | 868e579924e3c6cd154996acfef67fb9157e8b26 /include | |
| parent | 5b520bbb538da7f7122b1e5dc85f2b4c592d4781 (diff) | |
ieee802154: add TX power control to wpan_phy
Replace the current u8 transmit_power in wpan_phy with s8 transmit_power.
The u8 field contained the actual tx power and a tolerance field,
which no physical radio every used. Adjust sysfs entries to keep
compatibility with userspace, give tolerances of +-1dB statically there.
This patch only adds support for this in the at86rf230 driver and the
RF212 chip. Configuration calculation for RF212 is also somewhat basic,
but does the job - the RF212 datasheet gives a large table with
suggested values for combinations of TX power and page/channel, if this
does not work well, we might have to copy the whole table.
Signed-off-by: Phoebe Buckheister <phoebe.buckheister@itwm.fraunhofer.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/nl802154.h | 4 | ||||
| -rw-r--r-- | include/net/mac802154.h | 5 | ||||
| -rw-r--r-- | include/net/wpan-phy.h | 6 |
3 files changed, 13 insertions, 2 deletions
diff --git a/include/linux/nl802154.h b/include/linux/nl802154.h index fd4f2d1cdf6c..625d19e0a1de 100644 --- a/include/linux/nl802154.h +++ b/include/linux/nl802154.h | |||
| @@ -70,6 +70,8 @@ enum { | |||
| 70 | IEEE802154_ATTR_PHY_NAME, | 70 | IEEE802154_ATTR_PHY_NAME, |
| 71 | IEEE802154_ATTR_DEV_TYPE, | 71 | IEEE802154_ATTR_DEV_TYPE, |
| 72 | 72 | ||
| 73 | IEEE802154_ATTR_TXPOWER, | ||
| 74 | |||
| 73 | __IEEE802154_ATTR_MAX, | 75 | __IEEE802154_ATTR_MAX, |
| 74 | }; | 76 | }; |
| 75 | 77 | ||
| @@ -122,6 +124,8 @@ enum { | |||
| 122 | IEEE802154_ADD_IFACE, | 124 | IEEE802154_ADD_IFACE, |
| 123 | IEEE802154_DEL_IFACE, | 125 | IEEE802154_DEL_IFACE, |
| 124 | 126 | ||
| 127 | IEEE802154_SET_PHYPARAMS, | ||
| 128 | |||
| 125 | __IEEE802154_CMD_MAX, | 129 | __IEEE802154_CMD_MAX, |
| 126 | }; | 130 | }; |
| 127 | 131 | ||
diff --git a/include/net/mac802154.h b/include/net/mac802154.h index 807d6b7a943f..8bd2785a663c 100644 --- a/include/net/mac802154.h +++ b/include/net/mac802154.h | |||
| @@ -113,6 +113,10 @@ struct ieee802154_dev { | |||
| 113 | * Set radio for listening on specific address. | 113 | * Set radio for listening on specific address. |
| 114 | * Set the device for listening on specified address. | 114 | * Set the device for listening on specified address. |
| 115 | * Returns either zero, or negative errno. | 115 | * Returns either zero, or negative errno. |
| 116 | * | ||
| 117 | * set_txpower: | ||
| 118 | * Set radio transmit power in dB. Called with pib_lock held. | ||
| 119 | * Returns either zero, or negative errno. | ||
| 116 | */ | 120 | */ |
| 117 | struct ieee802154_ops { | 121 | struct ieee802154_ops { |
| 118 | struct module *owner; | 122 | struct module *owner; |
| @@ -129,6 +133,7 @@ struct ieee802154_ops { | |||
| 129 | unsigned long changed); | 133 | unsigned long changed); |
| 130 | int (*ieee_addr)(struct ieee802154_dev *dev, | 134 | int (*ieee_addr)(struct ieee802154_dev *dev, |
| 131 | u8 addr[IEEE802154_ADDR_LEN]); | 135 | u8 addr[IEEE802154_ADDR_LEN]); |
| 136 | int (*set_txpower)(struct ieee802154_dev *dev, int db); | ||
| 132 | }; | 137 | }; |
| 133 | 138 | ||
| 134 | /* Basic interface to register ieee802154 device */ | 139 | /* Basic interface to register ieee802154 device */ |
diff --git a/include/net/wpan-phy.h b/include/net/wpan-phy.h index b52bda8d13b1..47fc0c1bc3c7 100644 --- a/include/net/wpan-phy.h +++ b/include/net/wpan-phy.h | |||
| @@ -37,14 +37,14 @@ struct wpan_phy { | |||
| 37 | struct mutex pib_lock; | 37 | struct mutex pib_lock; |
| 38 | 38 | ||
| 39 | /* | 39 | /* |
| 40 | * This is a PIB according to 802.15.4-2006. | 40 | * This is a PIB according to 802.15.4-2011. |
| 41 | * We do not provide timing-related variables, as they | 41 | * We do not provide timing-related variables, as they |
| 42 | * aren't used outside of driver | 42 | * aren't used outside of driver |
| 43 | */ | 43 | */ |
| 44 | u8 current_channel; | 44 | u8 current_channel; |
| 45 | u8 current_page; | 45 | u8 current_page; |
| 46 | u32 channels_supported[32]; | 46 | u32 channels_supported[32]; |
| 47 | u8 transmit_power; | 47 | s8 transmit_power; |
| 48 | u8 cca_mode; | 48 | u8 cca_mode; |
| 49 | 49 | ||
| 50 | struct device dev; | 50 | struct device dev; |
| @@ -54,6 +54,8 @@ struct wpan_phy { | |||
| 54 | const char *name, int type); | 54 | const char *name, int type); |
| 55 | void (*del_iface)(struct wpan_phy *phy, struct net_device *dev); | 55 | void (*del_iface)(struct wpan_phy *phy, struct net_device *dev); |
| 56 | 56 | ||
| 57 | int (*set_txpower)(struct wpan_phy *phy, int db); | ||
| 58 | |||
| 57 | char priv[0] __attribute__((__aligned__(NETDEV_ALIGN))); | 59 | char priv[0] __attribute__((__aligned__(NETDEV_ALIGN))); |
| 58 | }; | 60 | }; |
| 59 | 61 | ||
