Skip to contentSkip to conversation

ieee802154: add support for current cca ed level

PATCH In review Alexander Aring 3 participants 7 messages May 27, 2015

Subsystems (2)
lore
Share & tools
lore

Alexander Aring

author maintainer
#0 lore raw

cover ieee802154: add support for current cca ed level

Hi,

this patch series based on ("ieee802154: add set transmit power support") and support handling for setting current phy cca ed level. This value should only be necessary if cca_mode is something with an energy detection level threshold and max frame retries is 0 or above, which do the CSMA-CA handling. Currently this value is printed always out, doesn't depend if it's really used or not. It's just represent the current register setting when phy supports this handling.

- Alex

Alexander Aring (2):
nl802154: add support for cca ed level info
nl802154: add support to set cca ed level

 include/net/cfg802154.h   |  1 +
 net/ieee802154/nl802154.c | 37 +++++++++++++++++++++++++++++++++++++
 net/ieee802154/rdev-ops.h | 11 +++++++++++
 net/ieee802154/trace.h    | 15 +++++++++++++++
 net/mac802154/cfg.c       | 19 +++++++++++++++++++
 5 files changed, 83 insertions(+)
Signature · 1 line
2.4.1
author maintainer
#1 lore raw

PATCH 1/2 nl802154: add support for cca ed level info

This patch adds information about the current cca ed level when the phy is dumped over nl802154.

---
 net/ieee802154/nl802154.c | 7 +++++++
 1 file changed, 7 insertions(+)
net/ieee802154/nl802154.c +7 -0
index 5c9d524..a89d9d0 100644
@@ -211,6 +211,7 @@ static const struct nla_policy nl802154_policy[NL802154_ATTR_MAX+1] = {
 
 	[NL802154_ATTR_CCA_MODE] = { .type = NLA_U32, },
 	[NL802154_ATTR_CCA_OPT] = { .type = NLA_U32, },
+	[NL802154_ATTR_CCA_ED_LEVEL] = { .type = NLA_S32, },
 
 	[NL802154_ATTR_SUPPORTED_CHANNEL] = { .type = NLA_U32, },
 
@@ -421,6 +422,12 @@ static int nl802154_send_wpan_phy(struct cfg802154_registered_device *rdev,
 			goto nla_put_failure;
 	}
 
+	if (rdev->wpan_phy.flags & WPAN_PHY_FLAG_CCA_ED_LEVEL) {
+		if (nla_put_s32(msg, NL802154_ATTR_CCA_ED_LEVEL,
+				rdev->wpan_phy.cca_ed_level))
+			goto nla_put_failure;
+	}
+
 	if (nl802154_put_capabilities(msg, rdev))
 		goto nla_put_failure;
 
Signature · 1 line
2.4.1
Reviewed-by on v1 1/2
#2 lore raw

Re: [PATCH bluetooth-next 1/2] nl802154: add support for cca ed level info

Quoted 23 lines · Alexander Aring

This patch adds information about the current cca ed level when the phy is dumped over nl802154.

---
  net/ieee802154/nl802154.c | 7 +++++++
  1 file changed, 7 insertions(+)
net/ieee802154/nl802154.c +1 -0
index 5c9d524..a89d9d0 100644
@@ -211,6 +211,7 @@ static const struct nla_policy nl802154_policy[NL802154_ATTR_MAX+1] = {
 
  	[NL802154_ATTR_CCA_MODE] = { .type = NLA_U32, },
  	[NL802154_ATTR_CCA_OPT] = { .type = NLA_U32, },
+	[NL802154_ATTR_CCA_ED_LEVEL] = { .type = NLA_S32, },
 
  	[NL802154_ATTR_SUPPORTED_CHANNEL] = { .type = NLA_U32, },
 
@@ -421,6 +422,12 @@ static int nl802154_send_wpan_phy(struct cfg802154_registered_device *rdev,
  			goto nla_put_failure;
  	}

net/ieee802154/nl802154.c static int nl802154_send_wpan_phy(struct cfg802154_registered_device *rdev, · line 433

Quoted 10 lines
net/ieee802154/nl802154.c +6 -0
 
+	if (rdev->wpan_phy.flags & WPAN_PHY_FLAG_CCA_ED_LEVEL) {
+		if (nla_put_s32(msg, NL802154_ATTR_CCA_ED_LEVEL,
+				rdev->wpan_phy.cca_ed_level))
+			goto nla_put_failure;
+	}
+
  	if (nl802154_put_capabilities(msg, rdev))
  		goto nla_put_failure;
 
Signature · 1 line
Varka Bhadram
#3 lore raw

Re: [PATCH bluetooth-next 1/2] nl802154: add support for cca ed level info

In reply to Alexander Aring

Hi Alex,

Quoted 7 lines

This patch adds information about the current cca ed level when the phy is dumped over nl802154.

---
net/ieee802154/nl802154.c | 7 +++++++

1 file changed, 7 insertions(+)

patch has been applied to bluetooth-next tree.

Regards

Marcel

author maintainer
#4 lore raw

PATCH 2/2 nl802154: add support to set cca ed level

In reply to Alexander Aring

This patch adds support for setting the current cca ed level value over nl802154.

---
 include/net/cfg802154.h   |  1 +
 net/ieee802154/nl802154.c | 30 ++++++++++++++++++++++++++++++
 net/ieee802154/rdev-ops.h | 11 +++++++++++
 net/ieee802154/trace.h    | 15 +++++++++++++++
 net/mac802154/cfg.c       | 19 +++++++++++++++++++
 5 files changed, 76 insertions(+)
include/net/cfg802154.h +1 -0
index 2e3bb01..290a9a6 100644
@@ -44,6 +44,7 @@ struct cfg802154_ops {
 	int	(*set_channel)(struct wpan_phy *wpan_phy, u8 page, u8 channel);
 	int	(*set_cca_mode)(struct wpan_phy *wpan_phy,
 				const struct wpan_phy_cca *cca);
+	int     (*set_cca_ed_level)(struct wpan_phy *wpan_phy, s32 ed_level);
 	int     (*set_tx_power)(struct wpan_phy *wpan_phy, s32 power);
 	int	(*set_pan_id)(struct wpan_phy *wpan_phy,
 			      struct wpan_dev *wpan_dev, __le16 pan_id);
net/ieee802154/nl802154.c +30 -0
index a89d9d0..7dbb1f4 100644
@@ -790,6 +790,28 @@ static int nl802154_set_cca_mode(struct sk_buff *skb, struct genl_info *info)
 	return rdev_set_cca_mode(rdev, &cca);
 }
 
+static int nl802154_set_cca_ed_level(struct sk_buff *skb, struct genl_info *info)
+{
+	struct cfg802154_registered_device *rdev = info->user_ptr[0];
+	s32 ed_level;
+	int i;
+
+	if (!(rdev->wpan_phy.flags & WPAN_PHY_FLAG_CCA_ED_LEVEL))
+		return -EOPNOTSUPP;
+
+	if (!info->attrs[NL802154_ATTR_CCA_ED_LEVEL])
+		return -EINVAL;
+
+	ed_level = nla_get_s32(info->attrs[NL802154_ATTR_CCA_ED_LEVEL]);
+
+	for (i = 0; i < rdev->wpan_phy.supported.cca_ed_levels_size; i++) {
+		if (ed_level == rdev->wpan_phy.supported.cca_ed_levels[i])
+			return rdev_set_cca_ed_level(rdev, ed_level);
+	}
+
+	return -EINVAL;
+}
+
 static int nl802154_set_tx_power(struct sk_buff *skb, struct genl_info *info)
 {
 	struct cfg802154_registered_device *rdev = info->user_ptr[0];
@@ -1123,6 +1145,14 @@ static const struct genl_ops nl802154_ops[] = {
 				  NL802154_FLAG_NEED_RTNL,
 	},
 	{
+		.cmd = NL802154_CMD_SET_CCA_ED_LEVEL,
+		.doit = nl802154_set_cca_ed_level,
+		.policy = nl802154_policy,
+		.flags = GENL_ADMIN_PERM,
+		.internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
+				  NL802154_FLAG_NEED_RTNL,
+	},
+	{
 		.cmd = NL802154_CMD_SET_TX_POWER,
 		.doit = nl802154_set_tx_power,
 		.policy = nl802154_policy,
net/ieee802154/rdev-ops.h +11 -0
index 3645611..b2155a1 100644
@@ -75,6 +75,17 @@ rdev_set_cca_mode(struct cfg802154_registered_device *rdev,
 }
 
 static inline int
+rdev_set_cca_ed_level(struct cfg802154_registered_device *rdev, s32 ed_level)
+{
+	int ret;
+
+	trace_802154_rdev_set_cca_ed_level(&rdev->wpan_phy, ed_level);
+	ret = rdev->ops->set_cca_ed_level(&rdev->wpan_phy, ed_level);
+	trace_802154_rdev_return_int(&rdev->wpan_phy, ret);
+	return ret;
+}
+
+static inline int
 rdev_set_tx_power(struct cfg802154_registered_device *rdev,
 		  s32 power)
 {
net/ieee802154/trace.h +15 -0
index 1f1cecc..257806d 100644
@@ -123,6 +123,21 @@ TRACE_EVENT(802154_rdev_set_cca_mode,
 		  WPAN_CCA_PR_ARG)
 );
 
+TRACE_EVENT(802154_rdev_set_cca_ed_level,
+	TP_PROTO(struct wpan_phy *wpan_phy, s32 ed_level),
+	TP_ARGS(wpan_phy, ed_level),
+	TP_STRUCT__entry(
+		WPAN_PHY_ENTRY
+		__field(s32, ed_level)
+	),
+	TP_fast_assign(
+		WPAN_PHY_ASSIGN;
+		__entry->ed_level = ed_level;
+	),
+	TP_printk(WPAN_PHY_PR_FMT ", ed_level: %d", WPAN_PHY_PR_ARG,
+		  __entry->ed_level)
+);
+
 DECLARE_EVENT_CLASS(802154_le16_template,
 	TP_PROTO(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev,
 		 __le16 le16arg),
net/mac802154/cfg.c +19 -0
index ab12fa2..317c466 100644
@@ -106,6 +106,24 @@ ieee802154_set_cca_mode(struct wpan_phy *wpan_phy,
 }
 
 static int
+ieee802154_set_cca_ed_level(struct wpan_phy *wpan_phy, s32 ed_level)
+{
+	struct ieee802154_local *local = wpan_phy_priv(wpan_phy);
+	int ret;
+
+	ASSERT_RTNL();
+
+	if (wpan_phy->cca_ed_level == ed_level)
+		return 0;
+
+	ret = drv_set_cca_ed_level(local, ed_level);
+	if (!ret)
+		wpan_phy->cca_ed_level = ed_level;
+
+	return ret;
+}
+
+static int
 ieee802154_set_tx_power(struct wpan_phy *wpan_phy, s32 power)
 {
 	struct ieee802154_local *local = wpan_phy_priv(wpan_phy);
@@ -213,6 +231,7 @@ const struct cfg802154_ops mac802154_config_ops = {
 	.del_virtual_intf = ieee802154_del_iface,
 	.set_channel = ieee802154_set_channel,
 	.set_cca_mode = ieee802154_set_cca_mode,
+	.set_cca_ed_level = ieee802154_set_cca_ed_level,
 	.set_tx_power = ieee802154_set_tx_power,
 	.set_pan_id = ieee802154_set_pan_id,
 	.set_short_addr = ieee802154_set_short_addr,
Signature · 1 line
2.4.1
#6 lore raw

Re: [PATCH bluetooth-next 2/2] nl802154: add support to set cca ed level

In reply to Alexander Aring

Hi Alex,

Quoted 11 lines

This patch adds support for setting the current cca ed level value over nl802154.

---

include/net/cfg802154.h   |  1 +
net/ieee802154/nl802154.c | 30 ++++++++++++++++++++++++++++++
net/ieee802154/rdev-ops.h | 11 +++++++++++
net/ieee802154/trace.h    | 15 +++++++++++++++
net/mac802154/cfg.c       | 19 +++++++++++++++++++
5 files changed, 76 insertions(+)

patch has been applied to bluetooth-next tree.

Regards

Marcel