ieee802154: change transmit power to mbm
authorAlexander Aring <alex.aring@gmail.com>
Sun, 17 May 2015 19:44:40 +0000 (21:44 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Tue, 19 May 2015 09:44:41 +0000 (11:44 +0200)
This patch change the handling of transmit power level from dbm to mbm.
This prepares to handle floating point transmit power levels values. The
old netlink 802.15.4 will convert the dbm value to mbm for handling
backward compatibility.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/net/ieee802154/at86rf230.c
include/net/cfg802154.h
include/net/mac802154.h
net/ieee802154/nl-mac.c
net/mac802154/driver-ops.h

index 02b6bb72304d0465ac2eaa5eaaa768d4fc445ea6..3a303e4a3c0787c7cbfd2717f9984eba6024b544 100644 (file)
@@ -1194,9 +1194,10 @@ at86rf230_set_hw_addr_filt(struct ieee802154_hw *hw,
 }
 
 static int
-at86rf230_set_txpower(struct ieee802154_hw *hw, s32 db)
+at86rf230_set_txpower(struct ieee802154_hw *hw, s32 mbm)
 {
        struct at86rf230_local *lp = hw->priv;
+       s8 db = mbm / 100;
 
        /* typical maximum output is 5dBm with RG_PHY_TX_PWR 0x60, lower five
         * bits decrease power in 1dB steps. 0x60 represents extra PA gain of
index 47804cddb46f313daa512fd6af21f215785e9ee5..b5b3f9f43084e9e6ba274b9b5139197c0b8c34ed 100644 (file)
@@ -85,6 +85,7 @@ struct wpan_phy {
        u8 current_channel;
        u8 current_page;
        u32 channels_supported[IEEE802154_MAX_PAGE + 1];
+       /* current transmit_power in mBm */
        s32 transmit_power;
        struct wpan_phy_cca cca;
 
index 400e4e85c53f07cdb9879289f400965b4c7e6103..e863a8557c0ad884e2882d5020fe087eed99b286 100644 (file)
@@ -171,7 +171,7 @@ struct ieee802154_hw {
  *       Returns either zero, or negative errno.
  *
  * set_txpower:
- *       Set radio transmit power in dB. Called with pib_lock held.
+ *       Set radio transmit power in mBm. Called with pib_lock held.
  *       Returns either zero, or negative errno.
  *
  * set_lbt
@@ -213,7 +213,7 @@ struct ieee802154_ops {
        int             (*set_hw_addr_filt)(struct ieee802154_hw *hw,
                                            struct ieee802154_hw_addr_filt *filt,
                                            unsigned long changed);
-       int             (*set_txpower)(struct ieee802154_hw *hw, s32 dbm);
+       int             (*set_txpower)(struct ieee802154_hw *hw, s32 mbm);
        int             (*set_lbt)(struct ieee802154_hw *hw, bool on);
        int             (*set_cca_mode)(struct ieee802154_hw *hw,
                                        const struct wpan_phy_cca *cca);
index 2b4955d7aae54b9b4e647e6b7de9b8fa7ef68c42..4ba2e13f7a0789ade79328a4206e6168ba2c7b15 100644 (file)
@@ -117,7 +117,7 @@ static int ieee802154_nl_fill_iface(struct sk_buff *msg, u32 portid,
                rtnl_unlock();
 
                if (nla_put_s8(msg, IEEE802154_ATTR_TXPOWER,
-                              params.transmit_power) ||
+                              params.transmit_power / 100) ||
                    nla_put_u8(msg, IEEE802154_ATTR_LBT_ENABLED, params.lbt) ||
                    nla_put_u8(msg, IEEE802154_ATTR_CCA_MODE,
                               params.cca.mode) ||
@@ -510,7 +510,7 @@ int ieee802154_set_macparams(struct sk_buff *skb, struct genl_info *info)
        ops->get_mac_params(dev, &params);
 
        if (info->attrs[IEEE802154_ATTR_TXPOWER])
-               params.transmit_power = nla_get_s8(info->attrs[IEEE802154_ATTR_TXPOWER]);
+               params.transmit_power = nla_get_s8(info->attrs[IEEE802154_ATTR_TXPOWER]) * 100;
 
        if (info->attrs[IEEE802154_ATTR_LBT_ENABLED])
                params.lbt = nla_get_u8(info->attrs[IEEE802154_ATTR_LBT_ENABLED]);
index 57c1bdbfaa919122b7afc597ef55d7ad16b9a735..d289ae3f1e93c49ed456b35e2fa4ca0aeb923a53 100644 (file)
@@ -58,7 +58,7 @@ drv_set_channel(struct ieee802154_local *local, u8 page, u8 channel)
        return local->ops->set_channel(&local->hw, page, channel);
 }
 
-static inline int drv_set_tx_power(struct ieee802154_local *local, s32 dbm)
+static inline int drv_set_tx_power(struct ieee802154_local *local, s32 mbm)
 {
        might_sleep();
 
@@ -67,7 +67,7 @@ static inline int drv_set_tx_power(struct ieee802154_local *local, s32 dbm)
                return -EOPNOTSUPP;
        }
 
-       return local->ops->set_txpower(&local->hw, dbm);
+       return local->ops->set_txpower(&local->hw, mbm);
 }
 
 static inline int drv_set_cca_mode(struct ieee802154_local *local,