|
@@ -73,6 +73,10 @@ ieee802154_set_channel(struct wpan_phy *wpan_phy, u8 page, u8 channel)
|
|
|
|
|
|
ASSERT_RTNL();
|
|
ASSERT_RTNL();
|
|
|
|
|
|
|
|
+ if (wpan_phy->current_page == page &&
|
|
|
|
+ wpan_phy->current_channel == channel)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
ret = drv_set_channel(local, page, channel);
|
|
ret = drv_set_channel(local, page, channel);
|
|
if (!ret) {
|
|
if (!ret) {
|
|
wpan_phy->current_page = page;
|
|
wpan_phy->current_page = page;
|
|
@@ -91,6 +95,9 @@ ieee802154_set_cca_mode(struct wpan_phy *wpan_phy,
|
|
|
|
|
|
ASSERT_RTNL();
|
|
ASSERT_RTNL();
|
|
|
|
|
|
|
|
+ if (wpan_phy_cca_cmp(&wpan_phy->cca, cca))
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
/* check if phy support this setting */
|
|
/* check if phy support this setting */
|
|
if (!(local->hw.flags & IEEE802154_HW_CCA_MODE))
|
|
if (!(local->hw.flags & IEEE802154_HW_CCA_MODE))
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
@@ -108,6 +115,9 @@ ieee802154_set_pan_id(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev,
|
|
{
|
|
{
|
|
ASSERT_RTNL();
|
|
ASSERT_RTNL();
|
|
|
|
|
|
|
|
+ if (wpan_dev->pan_id == pan_id)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
wpan_dev->pan_id = pan_id;
|
|
wpan_dev->pan_id = pan_id;
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -121,6 +131,10 @@ ieee802154_set_backoff_exponent(struct wpan_phy *wpan_phy,
|
|
|
|
|
|
ASSERT_RTNL();
|
|
ASSERT_RTNL();
|
|
|
|
|
|
|
|
+ if (wpan_dev->min_be == min_be &&
|
|
|
|
+ wpan_dev->max_be == max_be)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
if (!(local->hw.flags & IEEE802154_HW_CSMA_PARAMS))
|
|
if (!(local->hw.flags & IEEE802154_HW_CSMA_PARAMS))
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
@@ -135,6 +149,9 @@ ieee802154_set_short_addr(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev,
|
|
{
|
|
{
|
|
ASSERT_RTNL();
|
|
ASSERT_RTNL();
|
|
|
|
|
|
|
|
+ if (wpan_dev->short_addr == short_addr)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
wpan_dev->short_addr = short_addr;
|
|
wpan_dev->short_addr = short_addr;
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -148,6 +165,9 @@ ieee802154_set_max_csma_backoffs(struct wpan_phy *wpan_phy,
|
|
|
|
|
|
ASSERT_RTNL();
|
|
ASSERT_RTNL();
|
|
|
|
|
|
|
|
+ if (wpan_dev->csma_retries == max_csma_backoffs)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
if (!(local->hw.flags & IEEE802154_HW_CSMA_PARAMS))
|
|
if (!(local->hw.flags & IEEE802154_HW_CSMA_PARAMS))
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
@@ -164,6 +184,9 @@ ieee802154_set_max_frame_retries(struct wpan_phy *wpan_phy,
|
|
|
|
|
|
ASSERT_RTNL();
|
|
ASSERT_RTNL();
|
|
|
|
|
|
|
|
+ if (wpan_dev->frame_retries == max_frame_retries)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
if (!(local->hw.flags & IEEE802154_HW_FRAME_RETRIES))
|
|
if (!(local->hw.flags & IEEE802154_HW_FRAME_RETRIES))
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
@@ -179,6 +202,9 @@ ieee802154_set_lbt_mode(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev,
|
|
|
|
|
|
ASSERT_RTNL();
|
|
ASSERT_RTNL();
|
|
|
|
|
|
|
|
+ if (wpan_dev->lbt == mode)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
if (!(local->hw.flags & IEEE802154_HW_LBT))
|
|
if (!(local->hw.flags & IEEE802154_HW_LBT))
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
|
|
|