From: Arend van Spriel <[email protected]>

The HT operation mode is provided by mac80211 and they are now
stored in the driver.

Reviewed-by: Roland Vossen <[email protected]>
Reviewed-by: Brett Rudley <[email protected]>
Reviewed-by: Henry Ptasinski <[email protected]>
Signed-off-by: Arend van Spriel <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
 drivers/staging/brcm80211/brcmsmac/wl_mac80211.c  |    8 +++++++-
 drivers/staging/brcm80211/brcmsmac/wlc_mac80211.h |   14 --------------
 drivers/staging/brcm80211/brcmsmac/wlc_pub.h      |   14 ++++++++++++++
 3 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/drivers/staging/brcm80211/brcmsmac/wl_mac80211.c 
b/drivers/staging/brcm80211/brcmsmac/wl_mac80211.c
index a51e511..d02b6bb 100644
--- a/drivers/staging/brcm80211/brcmsmac/wl_mac80211.c
+++ b/drivers/staging/brcm80211/brcmsmac/wl_mac80211.c
@@ -357,7 +357,13 @@ wl_ops_bss_info_changed(struct ieee80211_hw *hw,
        if (changed & BSS_CHANGED_HT) {
                /* 802.11n parameters changed */
                u16 mode = info->ht_operation_mode;
-               WL_NONE("%s: HT mode: 0x%04X (implement)\n", __func__, mode);
+               WL_NONE("%s: HT mode: 0x%04X\n", __func__, mode);
+               wlc_protection_upd(wl->wlc, WLC_PROT_N_CFG,
+                       mode & IEEE80211_HT_OP_MODE_PROTECTION);
+               wlc_protection_upd(wl->wlc, WLC_PROT_N_NONGF,
+                       mode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT);
+               wlc_protection_upd(wl->wlc, WLC_PROT_N_OBSS,
+                       mode & IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT);
        }
        if (changed & BSS_CHANGED_BASIC_RATES) {
                /* Basic rateset changed */
diff --git a/drivers/staging/brcm80211/brcmsmac/wlc_mac80211.h 
b/drivers/staging/brcm80211/brcmsmac/wlc_mac80211.h
index 5817a49..0aeb9c6 100644
--- a/drivers/staging/brcm80211/brcmsmac/wlc_mac80211.h
+++ b/drivers/staging/brcm80211/brcmsmac/wlc_mac80211.h
@@ -29,19 +29,6 @@
 #define        MAXCOREREV              28      /* max # supported core 
revisions (0 .. MAXCOREREV - 1) */
 #define WLC_MAXMODULES         22      /* max #  wlc_module_register() calls */
 
-/* network protection config */
-#define        WLC_PROT_G_SPEC         1       /* SPEC g protection */
-#define        WLC_PROT_G_OVR          2       /* SPEC g prot override */
-#define        WLC_PROT_G_USER         3       /* gmode specified by user */
-#define        WLC_PROT_OVERLAP        4       /* overlap */
-#define        WLC_PROT_N_USER         10      /* nmode specified by user */
-#define        WLC_PROT_N_CFG          11      /* n protection */
-#define        WLC_PROT_N_CFG_OVR      12      /* n protection override */
-#define        WLC_PROT_N_NONGF        13      /* non-GF protection */
-#define        WLC_PROT_N_NONGF_OVR    14      /* non-GF protection override */
-#define        WLC_PROT_N_PAM_OVR      15      /* n preamble override */
-#define        WLC_PROT_N_OBSS         16      /* non-HT OBSS present */
-
 #define WLC_BITSCNT(x) bcm_bitcount((u8 *)&(x), sizeof(u8))
 
 /* Maximum wait time for a MAC suspend */
@@ -847,7 +834,6 @@ extern void wlc_set_cwmax(struct wlc_info *wlc, u16 newmax);
 extern void wlc_fifoerrors(struct wlc_info *wlc);
 extern void wlc_pllreq(struct wlc_info *wlc, bool set, mbool req_bit);
 extern void wlc_reset_bmac_done(struct wlc_info *wlc);
-extern void wlc_protection_upd(struct wlc_info *wlc, uint idx, int val);
 extern void wlc_hwtimer_gptimer_set(struct wlc_info *wlc, uint us);
 extern void wlc_hwtimer_gptimer_abort(struct wlc_info *wlc);
 
diff --git a/drivers/staging/brcm80211/brcmsmac/wlc_pub.h 
b/drivers/staging/brcm80211/brcmsmac/wlc_pub.h
index 4b43c3c..ded018a 100644
--- a/drivers/staging/brcm80211/brcmsmac/wlc_pub.h
+++ b/drivers/staging/brcm80211/brcmsmac/wlc_pub.h
@@ -481,6 +481,19 @@ extern const u8 wme_fifo2ac[];
 #define WLC_USE_COREFLAGS      0xffffffff      /* invalid core flags, use the 
saved coreflags */
 
 
+/* network protection config */
+#define        WLC_PROT_G_SPEC         1       /* SPEC g protection */
+#define        WLC_PROT_G_OVR          2       /* SPEC g prot override */
+#define        WLC_PROT_G_USER         3       /* gmode specified by user */
+#define        WLC_PROT_OVERLAP        4       /* overlap */
+#define        WLC_PROT_N_USER         10      /* nmode specified by user */
+#define        WLC_PROT_N_CFG          11      /* n protection */
+#define        WLC_PROT_N_CFG_OVR      12      /* n protection override */
+#define        WLC_PROT_N_NONGF        13      /* non-GF protection */
+#define        WLC_PROT_N_NONGF_OVR    14      /* non-GF protection override */
+#define        WLC_PROT_N_PAM_OVR      15      /* n preamble override */
+#define        WLC_PROT_N_OBSS         16      /* non-HT OBSS present */
+
 /* common functions for every port */
 extern void *wlc_attach(void *wl, u16 vendor, u16 device, uint unit,
                        bool piomode, struct osl_info *osh, void *regsva,
@@ -514,6 +527,7 @@ extern int wlc_ioctl(struct wlc_info *wlc, int cmd, void 
*arg, int len,
                     struct wlc_if *wlcif);
 /* helper functions */
 extern void wlc_statsupd(struct wlc_info *wlc);
+extern void wlc_protection_upd(struct wlc_info *wlc, uint idx, int val);
 extern int wlc_get_header_len(void);
 extern void wlc_mac_bcn_promisc_change(struct wlc_info *wlc, bool promisc);
 extern void wlc_set_addrmatch(struct wlc_info *wlc, int match_reg_offset,
-- 
1.7.4.1

_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to