wl18xx: send channel type to FW on role start
authorArik Nemtsov <arik@wizery.com>
Thu, 10 May 2012 09:13:31 +0000 (12:13 +0300)
committerLuciano Coelho <coelho@ti.com>
Tue, 5 Jun 2012 12:55:33 +0000 (15:55 +0300)
Translate the NL80211 channel type to a FW-specific channel type and send
it to the FW as part of the role-start command. For wl12xx this has no
effect - this element is treated as padding.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
drivers/net/wireless/ti/wlcore/cmd.c
drivers/net/wireless/ti/wlcore/cmd.h

index 5b128a971449a560911fab5e5a8c360338ea3576..8450f0eecc9b00270c8723b1dc9785b84d49bad3 100644 (file)
@@ -291,6 +291,23 @@ static int wl12xx_get_new_session_id(struct wl1271 *wl,
        return wlvif->session_counter;
 }
 
+static u8 wlcore_get_native_channel_type(u8 nl_channel_type)
+{
+       switch (nl_channel_type) {
+       case NL80211_CHAN_NO_HT:
+               return WLCORE_CHAN_NO_HT;
+       case NL80211_CHAN_HT20:
+               return WLCORE_CHAN_HT20;
+       case NL80211_CHAN_HT40MINUS:
+               return WLCORE_CHAN_HT40MINUS;
+       case NL80211_CHAN_HT40PLUS:
+               return WLCORE_CHAN_HT40PLUS;
+       default:
+               WARN_ON(1);
+               return WLCORE_CHAN_NO_HT;
+       }
+}
+
 static int wl12xx_cmd_role_start_dev(struct wl1271 *wl,
                                     struct wl12xx_vif *wlvif)
 {
@@ -407,6 +424,7 @@ int wl12xx_cmd_role_start_sta(struct wl1271 *wl, struct wl12xx_vif *wlvif)
        memcpy(cmd->sta.ssid, wlvif->ssid, wlvif->ssid_len);
        memcpy(cmd->sta.bssid, vif->bss_conf.bssid, ETH_ALEN);
        cmd->sta.local_rates = cpu_to_le32(wlvif->rate_set);
+       cmd->channel_type = wlcore_get_native_channel_type(wlvif->channel_type);
 
        if (wlvif->sta.hlid == WL12XX_INVALID_LINK_ID) {
                ret = wl12xx_allocate_link(wl, wlvif, &wlvif->sta.hlid);
@@ -519,6 +537,7 @@ int wl12xx_cmd_role_start_ap(struct wl1271 *wl, struct wl12xx_vif *wlvif)
        /* FIXME: Change when adding DFS */
        cmd->ap.reset_tsf = 1;  /* By default reset AP TSF */
        cmd->channel = wlvif->channel;
+       cmd->channel_type = wlcore_get_native_channel_type(wlvif->channel_type);
 
        if (!bss_conf->hidden_ssid) {
                /* take the SSID from the beacon for backward compatibility */
index a46ae07cb77eb8243a27251c7c5859916de908f4..2aafe3df0fb03450e096fd9d9072b5a5444f69f4 100644 (file)
@@ -266,13 +266,22 @@ enum wlcore_band {
        WLCORE_BAND_MAX_RADIO           = 0x7F,
 };
 
+enum wlcore_channel_type {
+       WLCORE_CHAN_NO_HT,
+       WLCORE_CHAN_HT20,
+       WLCORE_CHAN_HT40MINUS,
+       WLCORE_CHAN_HT40PLUS
+};
+
 struct wl12xx_cmd_role_start {
        struct wl1271_cmd_header header;
 
        u8 role_id;
        u8 band;
        u8 channel;
-       u8 padding;
+
+       /* enum wlcore_channel_type */
+       u8 channel_type;
 
        union {
                struct {