summaryrefslogtreecommitdiff
path: root/net/mac802154/mac_cmd.c
diff options
context:
space:
mode:
authorAlexander Aring <alex.aring@gmail.com>2014-11-02 06:18:44 +0300
committerMarcel Holtmann <marcel@holtmann.org>2014-11-02 06:51:07 +0300
commitf59f419d31ee27c131b44beda5b14b8ce0aaf519 (patch)
tree424c93e1b35f1c581398fa566ce4ff534d2b1dda /net/mac802154/mac_cmd.c
parent50c79075019e7b952327cfebf0681548573fd8e5 (diff)
downloadlinux-f59f419d31ee27c131b44beda5b14b8ce0aaf519.tar.xz
mac802154: move phy settings into netlink receive
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>
Diffstat (limited to 'net/mac802154/mac_cmd.c')
-rw-r--r--net/mac802154/mac_cmd.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/net/mac802154/mac_cmd.c b/net/mac802154/mac_cmd.c
index 90c1ad80a67d..9c2d6f61f194 100644
--- a/net/mac802154/mac_cmd.c
+++ b/net/mac802154/mac_cmd.c
@@ -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;
}