mac802154: move phy settings into netlink receive
authorAlexander Aring <alex.aring@gmail.com>
Sun, 2 Nov 2014 03:18:44 +0000 (04:18 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Sun, 2 Nov 2014 03:51:07 +0000 (04:51 +0100)
All PHY attributes should be directly set to the transceiver after netlink.
MAC attributes should be set by interface up. Currently the macparams
netlink cmd contains mixed attributes of phy and mac settings. This patch
moves all phy settings to the netlink receive function for setting macparams.
This is the only way which doesn't change the userspace API and keep the
deprecated netlink interface alive.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/mac802154/iface.c
net/mac802154/mac_cmd.c

index 5f94c70478f98390f5b8077b5e16945e7e69351f..eaad66590f10bd223043e47fb39541adf2b98501 100644 (file)
@@ -218,31 +218,12 @@ static int mac802154_wpan_open(struct net_device *dev)
                        goto out;
        }
 
-       if (local->hw.flags & IEEE802154_HW_TXPOWER) {
-               rc = drv_set_tx_power(local, sdata->mac_params.transmit_power);
-               if (rc < 0)
-                       goto out;
-       }
-
        if (local->hw.flags & IEEE802154_HW_LBT) {
                rc = drv_set_lbt_mode(local, sdata->mac_params.lbt);
                if (rc < 0)
                        goto out;
        }
 
-       if (local->hw.flags & IEEE802154_HW_CCA_MODE) {
-               rc = drv_set_cca_mode(local, sdata->mac_params.cca_mode);
-               if (rc < 0)
-                       goto out;
-       }
-
-       if (local->hw.flags & IEEE802154_HW_CCA_ED_LEVEL) {
-               rc = drv_set_cca_ed_level(local,
-                                         sdata->mac_params.cca_ed_level);
-               if (rc < 0)
-                       goto out;
-       }
-
        if (local->hw.flags & IEEE802154_HW_CSMA_PARAMS) {
                rc = drv_set_csma_params(local, sdata->mac_params.min_be,
                                         sdata->mac_params.max_be,
index 90c1ad80a67da4bf15565a7064708a5fd1e8717b..9c2d6f61f1949ee4a9a332843043bbbb1479ae5d 100644 (file)
@@ -28,6 +28,7 @@
 #include <net/nl802154.h>
 
 #include "ieee802154_i.h"
+#include "driver-ops.h"
 
 static int mac802154_mlme_start_req(struct net_device *dev,
                                    struct ieee802154_addr *addr,
@@ -85,11 +86,31 @@ static int mac802154_set_mac_params(struct net_device *dev,
                                    const struct ieee802154_mac_params *params)
 {
        struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
+       struct ieee802154_local *local = sdata->local;
+       int ret;
 
        mutex_lock(&sdata->local->iflist_mtx);
        sdata->mac_params = *params;
        mutex_unlock(&sdata->local->iflist_mtx);
 
+       if (local->hw.flags & IEEE802154_HW_TXPOWER) {
+               ret = drv_set_tx_power(local, params->transmit_power);
+               if (ret < 0)
+                       return ret;
+       }
+
+       if (local->hw.flags & IEEE802154_HW_CCA_MODE) {
+               ret = drv_set_cca_mode(local, params->cca_mode);
+               if (ret < 0)
+                       return ret;
+       }
+
+       if (local->hw.flags & IEEE802154_HW_CCA_ED_LEVEL) {
+               ret = drv_set_cca_ed_level(local, params->cca_ed_level);
+               if (ret < 0)
+                       return ret;
+       }
+
        return 0;
 }