wcn36xx: Print FW capabilities
authorPontus Fuchs <pontus.fuchs@gmail.com>
Wed, 12 Feb 2014 19:04:44 +0000 (19:04 +0000)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 13 Feb 2014 20:20:17 +0000 (15:20 -0500)
After fw caps exchange, print the FW's capabilities.

Signed-off-by: Pontus Fuchs <pontus.fuchs@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/wcn36xx/main.c
drivers/net/wireless/ath/wcn36xx/smd.c
drivers/net/wireless/ath/wcn36xx/smd.h

index a801aaa760379ec211aac264bd1eb3d01b4d969c..95fd5c6614b05becc7bf6e48e833845fc84056cc 100644 (file)
@@ -178,6 +178,49 @@ static inline u8 get_sta_index(struct ieee80211_vif *vif,
               sta_priv->sta_index;
 }
 
+static const char * const wcn36xx_caps_names[] = {
+       "MCC",                          /* 0 */
+       "P2P",                          /* 1 */
+       "DOT11AC",                      /* 2 */
+       "SLM_SESSIONIZATION",           /* 3 */
+       "DOT11AC_OPMODE",               /* 4 */
+       "SAP32STA",                     /* 5 */
+       "TDLS",                         /* 6 */
+       "P2P_GO_NOA_DECOUPLE_INIT_SCAN",/* 7 */
+       "WLANACTIVE_OFFLOAD",           /* 8 */
+       "BEACON_OFFLOAD",               /* 9 */
+       "SCAN_OFFLOAD",                 /* 10 */
+       "ROAM_OFFLOAD",                 /* 11 */
+       "BCN_MISS_OFFLOAD",             /* 12 */
+       "STA_POWERSAVE",                /* 13 */
+       "STA_ADVANCED_PWRSAVE",         /* 14 */
+       "AP_UAPSD",                     /* 15 */
+       "AP_DFS",                       /* 16 */
+       "BLOCKACK",                     /* 17 */
+       "PHY_ERR",                      /* 18 */
+       "BCN_FILTER",                   /* 19 */
+       "RTT",                          /* 20 */
+       "RATECTRL",                     /* 21 */
+       "WOW"                           /* 22 */
+};
+
+static const char *wcn36xx_get_cap_name(enum place_holder_in_cap_bitmap x)
+{
+       if (x >= ARRAY_SIZE(wcn36xx_caps_names))
+               return "UNKNOWN";
+       return wcn36xx_caps_names[x];
+}
+
+static void wcn36xx_feat_caps_info(struct wcn36xx *wcn)
+{
+       int i;
+
+       for (i = 0; i < MAX_FEATURE_SUPPORTED; i++) {
+               if (get_feat_caps(wcn->fw_feat_caps, i))
+                       wcn36xx_info("FW Cap %s\n", wcn36xx_get_cap_name(i));
+       }
+}
+
 static int wcn36xx_start(struct ieee80211_hw *hw)
 {
        struct wcn36xx *wcn = hw->priv;
@@ -237,6 +280,8 @@ static int wcn36xx_start(struct ieee80211_hw *hw)
                ret = wcn36xx_smd_feature_caps_exchange(wcn);
                if (ret)
                        wcn36xx_warn("Exchange feature caps failed\n");
+               else
+                       wcn36xx_feat_caps_info(wcn);
        }
        INIT_LIST_HEAD(&wcn->vif_list);
        return 0;
index d5e90c45a482289ac10f887df513cff2b76bbf93..ae36409656dba3971c82e57cc64b44154988718c 100644 (file)
@@ -1685,8 +1685,7 @@ out:
        return ret;
 }
 
-static inline void set_feat_caps(u32 *bitmap,
-                                enum place_holder_in_cap_bitmap cap)
+void set_feat_caps(u32 *bitmap, enum place_holder_in_cap_bitmap cap)
 {
        int arr_idx, bit_idx;
 
@@ -1700,8 +1699,7 @@ static inline void set_feat_caps(u32 *bitmap,
        bitmap[arr_idx] |= (1 << bit_idx);
 }
 
-static inline int get_feat_caps(u32 *bitmap,
-                               enum place_holder_in_cap_bitmap cap)
+int get_feat_caps(u32 *bitmap, enum place_holder_in_cap_bitmap cap)
 {
        int arr_idx, bit_idx;
        int ret = 0;
@@ -1717,8 +1715,7 @@ static inline int get_feat_caps(u32 *bitmap,
        return ret;
 }
 
-static inline void clear_feat_caps(u32 *bitmap,
-                               enum place_holder_in_cap_bitmap cap)
+void clear_feat_caps(u32 *bitmap, enum place_holder_in_cap_bitmap cap)
 {
        int arr_idx, bit_idx;
 
index c46246f8acb9e751298f67a8a52014dcdbb7de68..008d03423dbf460fc3316924147a872552d47a94 100644 (file)
@@ -112,6 +112,9 @@ int wcn36xx_smd_keep_alive_req(struct wcn36xx *wcn,
 int wcn36xx_smd_dump_cmd_req(struct wcn36xx *wcn, u32 arg1, u32 arg2,
                             u32 arg3, u32 arg4, u32 arg5);
 int wcn36xx_smd_feature_caps_exchange(struct wcn36xx *wcn);
+void set_feat_caps(u32 *bitmap, enum place_holder_in_cap_bitmap cap);
+int get_feat_caps(u32 *bitmap, enum place_holder_in_cap_bitmap cap);
+void clear_feat_caps(u32 *bitmap, enum place_holder_in_cap_bitmap cap);
 
 int wcn36xx_smd_add_ba_session(struct wcn36xx *wcn,
                struct ieee80211_sta *sta,