Commit 32b23550 authored by Alexander Aring's avatar Alexander Aring Committed by Marcel Holtmann

ieee802154: change cca ed level to mbm

This patch change the handling of cca energy detection level from dbm to
mbm. This prepares to handle floating point cca energy detection levels
values. The old netlink 802.15.4 will convert the dbm value to mbm for
handling backward compatibility.
Signed-off-by: default avatarAlexander Aring <alex.aring@gmail.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent e2eb173a
...@@ -1268,9 +1268,10 @@ at86rf23x_get_desens_steps(struct at86rf230_local *lp, s32 level) ...@@ -1268,9 +1268,10 @@ at86rf23x_get_desens_steps(struct at86rf230_local *lp, s32 level)
} }
static int static int
at86rf230_set_cca_ed_level(struct ieee802154_hw *hw, s32 level) at86rf230_set_cca_ed_level(struct ieee802154_hw *hw, s32 mbm)
{ {
struct at86rf230_local *lp = hw->priv; struct at86rf230_local *lp = hw->priv;
s32 level = mbm / 100;
if (level < lp->data->rssi_base_val || level > 30) if (level < lp->data->rssi_base_val || level > 30)
return -EINVAL; return -EINVAL;
......
...@@ -91,6 +91,7 @@ struct wpan_phy { ...@@ -91,6 +91,7 @@ struct wpan_phy {
__le64 perm_extended_addr; __le64 perm_extended_addr;
/* current cca ed threshold in mBm */
s32 cca_ed_level; s32 cca_ed_level;
/* PHY depended MAC PIB values */ /* PHY depended MAC PIB values */
......
...@@ -184,7 +184,7 @@ struct ieee802154_hw { ...@@ -184,7 +184,7 @@ struct ieee802154_hw {
* Returns either zero, or negative errno. * Returns either zero, or negative errno.
* *
* set_cca_ed_level * set_cca_ed_level
* Sets the CCA energy detection threshold in dBm. Called with pib_lock * Sets the CCA energy detection threshold in mBm. Called with pib_lock
* held. * held.
* Returns either zero, or negative errno. * Returns either zero, or negative errno.
* *
...@@ -217,8 +217,7 @@ struct ieee802154_ops { ...@@ -217,8 +217,7 @@ struct ieee802154_ops {
int (*set_lbt)(struct ieee802154_hw *hw, bool on); int (*set_lbt)(struct ieee802154_hw *hw, bool on);
int (*set_cca_mode)(struct ieee802154_hw *hw, int (*set_cca_mode)(struct ieee802154_hw *hw,
const struct wpan_phy_cca *cca); const struct wpan_phy_cca *cca);
int (*set_cca_ed_level)(struct ieee802154_hw *hw, int (*set_cca_ed_level)(struct ieee802154_hw *hw, s32 mbm);
s32 level);
int (*set_csma_params)(struct ieee802154_hw *hw, int (*set_csma_params)(struct ieee802154_hw *hw,
u8 min_be, u8 max_be, u8 retries); u8 min_be, u8 max_be, u8 retries);
int (*set_frame_retries)(struct ieee802154_hw *hw, int (*set_frame_retries)(struct ieee802154_hw *hw,
......
...@@ -122,7 +122,7 @@ static int ieee802154_nl_fill_iface(struct sk_buff *msg, u32 portid, ...@@ -122,7 +122,7 @@ static int ieee802154_nl_fill_iface(struct sk_buff *msg, u32 portid,
nla_put_u8(msg, IEEE802154_ATTR_CCA_MODE, nla_put_u8(msg, IEEE802154_ATTR_CCA_MODE,
params.cca.mode) || params.cca.mode) ||
nla_put_s32(msg, IEEE802154_ATTR_CCA_ED_LEVEL, nla_put_s32(msg, IEEE802154_ATTR_CCA_ED_LEVEL,
params.cca_ed_level) || params.cca_ed_level / 100) ||
nla_put_u8(msg, IEEE802154_ATTR_CSMA_RETRIES, nla_put_u8(msg, IEEE802154_ATTR_CSMA_RETRIES,
params.csma_retries) || params.csma_retries) ||
nla_put_u8(msg, IEEE802154_ATTR_CSMA_MIN_BE, nla_put_u8(msg, IEEE802154_ATTR_CSMA_MIN_BE,
...@@ -519,7 +519,7 @@ int ieee802154_set_macparams(struct sk_buff *skb, struct genl_info *info) ...@@ -519,7 +519,7 @@ int ieee802154_set_macparams(struct sk_buff *skb, struct genl_info *info)
params.cca.mode = nla_get_u8(info->attrs[IEEE802154_ATTR_CCA_MODE]); params.cca.mode = nla_get_u8(info->attrs[IEEE802154_ATTR_CCA_MODE]);
if (info->attrs[IEEE802154_ATTR_CCA_ED_LEVEL]) if (info->attrs[IEEE802154_ATTR_CCA_ED_LEVEL])
params.cca_ed_level = nla_get_s32(info->attrs[IEEE802154_ATTR_CCA_ED_LEVEL]); params.cca_ed_level = nla_get_s32(info->attrs[IEEE802154_ATTR_CCA_ED_LEVEL]) * 100;
if (info->attrs[IEEE802154_ATTR_CSMA_RETRIES]) if (info->attrs[IEEE802154_ATTR_CSMA_RETRIES])
params.csma_retries = nla_get_u8(info->attrs[IEEE802154_ATTR_CSMA_RETRIES]); params.csma_retries = nla_get_u8(info->attrs[IEEE802154_ATTR_CSMA_RETRIES]);
......
...@@ -96,7 +96,7 @@ static inline int drv_set_lbt_mode(struct ieee802154_local *local, bool mode) ...@@ -96,7 +96,7 @@ static inline int drv_set_lbt_mode(struct ieee802154_local *local, bool mode)
} }
static inline int static inline int
drv_set_cca_ed_level(struct ieee802154_local *local, s32 ed_level) drv_set_cca_ed_level(struct ieee802154_local *local, s32 mbm)
{ {
might_sleep(); might_sleep();
...@@ -105,7 +105,7 @@ drv_set_cca_ed_level(struct ieee802154_local *local, s32 ed_level) ...@@ -105,7 +105,7 @@ drv_set_cca_ed_level(struct ieee802154_local *local, s32 ed_level)
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
return local->ops->set_cca_ed_level(&local->hw, ed_level); return local->ops->set_cca_ed_level(&local->hw, mbm);
} }
static inline int drv_set_pan_id(struct ieee802154_local *local, __le16 pan_id) static inline int drv_set_pan_id(struct ieee802154_local *local, __le16 pan_id)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment