ath10k: add abstraction layer for peer flags
authorTamizh chelvam <c_traja@qti.qualcomm.com>
Thu, 29 Oct 2015 12:27:37 +0000 (14:27 +0200)
committerKalle Valo <kvalo@qca.qualcomm.com>
Wed, 4 Nov 2015 17:30:08 +0000 (19:30 +0200)
Abstraction layer for peer flags is added to fix ABI breakage.

Signed-off-by: Tamizh chelvam <c_traja@qti.qualcomm.com>
Signed-off-by: SenthilKumar Jegadeesan <sjegadee@qti.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/core.h
drivers/net/wireless/ath/ath10k/mac.c
drivers/net/wireless/ath/ath10k/wmi-tlv.c
drivers/net/wireless/ath/ath10k/wmi-tlv.h
drivers/net/wireless/ath/ath10k/wmi.c
drivers/net/wireless/ath/ath10k/wmi.h

index 4a230158990241f1a6ab27659f9a2817791c85d8..01a41730214939980fd65ac9f8a7dad652d2774a 100644 (file)
@@ -151,6 +151,7 @@ struct ath10k_wmi {
        struct wmi_vdev_param_map *vdev_param;
        struct wmi_pdev_param_map *pdev_param;
        const struct wmi_ops *ops;
+       const struct wmi_peer_flags_map *peer_flags;
 
        u32 num_mem_chunks;
        u32 rx_decap_mode;
index a7411fe90cc43ebcef7590538cb3d6cb73a6a13a..2ccda0ed91fa59f541b08fc16d9cefff7e0a7946 100644 (file)
@@ -1960,7 +1960,7 @@ static void ath10k_peer_assoc_h_basic(struct ath10k *ar,
        ether_addr_copy(arg->addr, sta->addr);
        arg->vdev_id = arvif->vdev_id;
        arg->peer_aid = aid;
-       arg->peer_flags |= WMI_PEER_AUTH;
+       arg->peer_flags |= arvif->ar->wmi.peer_flags->auth;
        arg->peer_listen_intval = ath10k_peer_assoc_h_listen_intval(ar, vif);
        arg->peer_num_spatial_streams = 1;
        arg->peer_caps = vif->bss_conf.assoc_capability;
@@ -2002,12 +2002,12 @@ static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
        /* FIXME: base on RSN IE/WPA IE is a correct idea? */
        if (rsnie || wpaie) {
                ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__);
-               arg->peer_flags |= WMI_PEER_NEED_PTK_4_WAY;
+               arg->peer_flags |= ar->wmi.peer_flags->need_ptk_4_way;
        }
 
        if (wpaie) {
                ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__);
-               arg->peer_flags |= WMI_PEER_NEED_GTK_2_WAY;
+               arg->peer_flags |= ar->wmi.peer_flags->need_gtk_2_way;
        }
 }
 
@@ -2104,7 +2104,7 @@ static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
            ath10k_peer_assoc_h_vht_masked(vht_mcs_mask))
                return;
 
-       arg->peer_flags |= WMI_PEER_HT;
+       arg->peer_flags |= ar->wmi.peer_flags->ht;
        arg->peer_max_mpdu = (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
                                    ht_cap->ampdu_factor)) - 1;
 
@@ -2115,10 +2115,10 @@ static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
        arg->peer_rate_caps |= WMI_RC_HT_FLAG;
 
        if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING)
-               arg->peer_flags |= WMI_PEER_LDPC;
+               arg->peer_flags |= ar->wmi.peer_flags->ldbc;
 
        if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) {
-               arg->peer_flags |= WMI_PEER_40MHZ;
+               arg->peer_flags |= ar->wmi.peer_flags->bw40;
                arg->peer_rate_caps |= WMI_RC_CW40_FLAG;
        }
 
@@ -2132,7 +2132,7 @@ static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
 
        if (ht_cap->cap & IEEE80211_HT_CAP_TX_STBC) {
                arg->peer_rate_caps |= WMI_RC_TX_STBC_FLAG;
-               arg->peer_flags |= WMI_PEER_STBC;
+               arg->peer_flags |= ar->wmi.peer_flags->stbc;
        }
 
        if (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC) {
@@ -2140,7 +2140,7 @@ static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
                stbc = stbc >> IEEE80211_HT_CAP_RX_STBC_SHIFT;
                stbc = stbc << WMI_RC_RX_STBC_FLAG_S;
                arg->peer_rate_caps |= stbc;
-               arg->peer_flags |= WMI_PEER_STBC;
+               arg->peer_flags |= ar->wmi.peer_flags->stbc;
        }
 
        if (ht_cap->mcs.rx_mask[1] && ht_cap->mcs.rx_mask[2])
@@ -2321,10 +2321,10 @@ static void ath10k_peer_assoc_h_vht(struct ath10k *ar,
        if (ath10k_peer_assoc_h_vht_masked(vht_mcs_mask))
                return;
 
-       arg->peer_flags |= WMI_PEER_VHT;
+       arg->peer_flags |= ar->wmi.peer_flags->vht;
 
        if (def.chan->band == IEEE80211_BAND_2GHZ)
-               arg->peer_flags |= WMI_PEER_VHT_2G;
+               arg->peer_flags |= ar->wmi.peer_flags->vht_2g;
 
        arg->peer_vht_caps = vht_cap->cap;
 
@@ -2341,7 +2341,7 @@ static void ath10k_peer_assoc_h_vht(struct ath10k *ar,
                                        ampdu_factor)) - 1);
 
        if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
-               arg->peer_flags |= WMI_PEER_80MHZ;
+               arg->peer_flags |= ar->wmi.peer_flags->bw80;
 
        arg->peer_vht_rates.rx_max_rate =
                __le16_to_cpu(vht_cap->vht_mcs.rx_highest);
@@ -2366,27 +2366,28 @@ static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
        switch (arvif->vdev_type) {
        case WMI_VDEV_TYPE_AP:
                if (sta->wme)
-                       arg->peer_flags |= WMI_PEER_QOS;
+                       arg->peer_flags |= arvif->ar->wmi.peer_flags->qos;
 
                if (sta->wme && sta->uapsd_queues) {
-                       arg->peer_flags |= WMI_PEER_APSD;
+                       arg->peer_flags |= arvif->ar->wmi.peer_flags->apsd;
                        arg->peer_rate_caps |= WMI_RC_UAPSD_FLAG;
                }
                break;
        case WMI_VDEV_TYPE_STA:
                if (vif->bss_conf.qos)
-                       arg->peer_flags |= WMI_PEER_QOS;
+                       arg->peer_flags |= arvif->ar->wmi.peer_flags->qos;
                break;
        case WMI_VDEV_TYPE_IBSS:
                if (sta->wme)
-                       arg->peer_flags |= WMI_PEER_QOS;
+                       arg->peer_flags |= arvif->ar->wmi.peer_flags->qos;
                break;
        default:
                break;
        }
 
        ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM qos %d\n",
-                  sta->addr, !!(arg->peer_flags & WMI_PEER_QOS));
+                  sta->addr, !!(arg->peer_flags &
+                  arvif->ar->wmi.peer_flags->qos));
 }
 
 static bool ath10k_mac_sta_has_ofdm_only(struct ieee80211_sta *sta)
index 6fbd17b69469b34b0ca434c35a554ffad7b44564..3b3a27b859f36fa4eae088465b44a4641bb26e40 100644 (file)
@@ -3485,6 +3485,24 @@ static const struct wmi_ops wmi_tlv_ops = {
        .fw_stats_fill = ath10k_wmi_main_op_fw_stats_fill,
 };
 
+static const struct wmi_peer_flags_map wmi_tlv_peer_flags_map = {
+       .auth = WMI_TLV_PEER_AUTH,
+       .qos = WMI_TLV_PEER_QOS,
+       .need_ptk_4_way = WMI_TLV_PEER_NEED_PTK_4_WAY,
+       .need_gtk_2_way = WMI_TLV_PEER_NEED_GTK_2_WAY,
+       .apsd = WMI_TLV_PEER_APSD,
+       .ht = WMI_TLV_PEER_HT,
+       .bw40 = WMI_TLV_PEER_40MHZ,
+       .stbc = WMI_TLV_PEER_STBC,
+       .ldbc = WMI_TLV_PEER_LDPC,
+       .dyn_mimops = WMI_TLV_PEER_DYN_MIMOPS,
+       .static_mimops = WMI_TLV_PEER_STATIC_MIMOPS,
+       .spatial_mux = WMI_TLV_PEER_SPATIAL_MUX,
+       .vht = WMI_TLV_PEER_VHT,
+       .bw80 = WMI_TLV_PEER_80MHZ,
+       .pmf = WMI_TLV_PEER_PMF,
+};
+
 /************/
 /* TLV init */
 /************/
@@ -3495,4 +3513,5 @@ void ath10k_wmi_tlv_attach(struct ath10k *ar)
        ar->wmi.vdev_param = &wmi_tlv_vdev_param_map;
        ar->wmi.pdev_param = &wmi_tlv_pdev_param_map;
        ar->wmi.ops = &wmi_tlv_ops;
+       ar->wmi.peer_flags = &wmi_tlv_peer_flags_map;
 }
index ad655c44afdb604572c36f70ca7a611f53f6c56b..dd678590531ae18d9ae195f4a8f10fcb362e4993 100644 (file)
@@ -527,6 +527,24 @@ enum wmi_tlv_vdev_param {
        WMI_TLV_VDEV_PARAM_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW_ENABLE,
 };
 
+enum wmi_tlv_peer_flags {
+       WMI_TLV_PEER_AUTH = 0x00000001,
+       WMI_TLV_PEER_QOS = 0x00000002,
+       WMI_TLV_PEER_NEED_PTK_4_WAY = 0x00000004,
+       WMI_TLV_PEER_NEED_GTK_2_WAY = 0x00000010,
+       WMI_TLV_PEER_APSD = 0x00000800,
+       WMI_TLV_PEER_HT = 0x00001000,
+       WMI_TLV_PEER_40MHZ = 0x00002000,
+       WMI_TLV_PEER_STBC = 0x00008000,
+       WMI_TLV_PEER_LDPC = 0x00010000,
+       WMI_TLV_PEER_DYN_MIMOPS = 0x00020000,
+       WMI_TLV_PEER_STATIC_MIMOPS = 0x00040000,
+       WMI_TLV_PEER_SPATIAL_MUX = 0x00200000,
+       WMI_TLV_PEER_VHT = 0x02000000,
+       WMI_TLV_PEER_80MHZ = 0x04000000,
+       WMI_TLV_PEER_PMF = 0x08000000,
+};
+
 enum wmi_tlv_tag {
        WMI_TLV_TAG_LAST_RESERVED = 15,
 
index 9e93ba3e916f1105543d644e8dd9a7a97afb990d..8cd068b5c2ad386111be9ada456153701223e528 100644 (file)
@@ -1546,6 +1546,61 @@ static struct wmi_pdev_param_map wmi_10_4_pdev_param_map = {
        .arp_dstaddr = WMI_10_4_PDEV_PARAM_ARP_DSTADDR,
 };
 
+static const struct wmi_peer_flags_map wmi_peer_flags_map = {
+       .auth = WMI_PEER_AUTH,
+       .qos = WMI_PEER_QOS,
+       .need_ptk_4_way = WMI_PEER_NEED_PTK_4_WAY,
+       .need_gtk_2_way = WMI_PEER_NEED_GTK_2_WAY,
+       .apsd = WMI_PEER_APSD,
+       .ht = WMI_PEER_HT,
+       .bw40 = WMI_PEER_40MHZ,
+       .stbc = WMI_PEER_STBC,
+       .ldbc = WMI_PEER_LDPC,
+       .dyn_mimops = WMI_PEER_DYN_MIMOPS,
+       .static_mimops = WMI_PEER_STATIC_MIMOPS,
+       .spatial_mux = WMI_PEER_SPATIAL_MUX,
+       .vht = WMI_PEER_VHT,
+       .bw80 = WMI_PEER_80MHZ,
+       .vht_2g = WMI_PEER_VHT_2G,
+       .pmf = WMI_PEER_PMF,
+};
+
+static const struct wmi_peer_flags_map wmi_10x_peer_flags_map = {
+       .auth = WMI_10X_PEER_AUTH,
+       .qos = WMI_10X_PEER_QOS,
+       .need_ptk_4_way = WMI_10X_PEER_NEED_PTK_4_WAY,
+       .need_gtk_2_way = WMI_10X_PEER_NEED_GTK_2_WAY,
+       .apsd = WMI_10X_PEER_APSD,
+       .ht = WMI_10X_PEER_HT,
+       .bw40 = WMI_10X_PEER_40MHZ,
+       .stbc = WMI_10X_PEER_STBC,
+       .ldbc = WMI_10X_PEER_LDPC,
+       .dyn_mimops = WMI_10X_PEER_DYN_MIMOPS,
+       .static_mimops = WMI_10X_PEER_STATIC_MIMOPS,
+       .spatial_mux = WMI_10X_PEER_SPATIAL_MUX,
+       .vht = WMI_10X_PEER_VHT,
+       .bw80 = WMI_10X_PEER_80MHZ,
+};
+
+static const struct wmi_peer_flags_map wmi_10_2_peer_flags_map = {
+       .auth = WMI_10_2_PEER_AUTH,
+       .qos = WMI_10_2_PEER_QOS,
+       .need_ptk_4_way = WMI_10_2_PEER_NEED_PTK_4_WAY,
+       .need_gtk_2_way = WMI_10_2_PEER_NEED_GTK_2_WAY,
+       .apsd = WMI_10_2_PEER_APSD,
+       .ht = WMI_10_2_PEER_HT,
+       .bw40 = WMI_10_2_PEER_40MHZ,
+       .stbc = WMI_10_2_PEER_STBC,
+       .ldbc = WMI_10_2_PEER_LDPC,
+       .dyn_mimops = WMI_10_2_PEER_DYN_MIMOPS,
+       .static_mimops = WMI_10_2_PEER_STATIC_MIMOPS,
+       .spatial_mux = WMI_10_2_PEER_SPATIAL_MUX,
+       .vht = WMI_10_2_PEER_VHT,
+       .bw80 = WMI_10_2_PEER_80MHZ,
+       .vht_2g = WMI_10_2_PEER_VHT_2G,
+       .pmf = WMI_10_2_PEER_PMF,
+};
+
 void ath10k_wmi_put_wmi_channel(struct wmi_channel *ch,
                                const struct wmi_channel_arg *arg)
 {
@@ -7554,30 +7609,35 @@ int ath10k_wmi_attach(struct ath10k *ar)
                ar->wmi.cmd = &wmi_10_4_cmd_map;
                ar->wmi.vdev_param = &wmi_10_4_vdev_param_map;
                ar->wmi.pdev_param = &wmi_10_4_pdev_param_map;
+               ar->wmi.peer_flags = &wmi_10_2_peer_flags_map;
                break;
        case ATH10K_FW_WMI_OP_VERSION_10_2_4:
                ar->wmi.cmd = &wmi_10_2_4_cmd_map;
                ar->wmi.ops = &wmi_10_2_4_ops;
                ar->wmi.vdev_param = &wmi_10_2_4_vdev_param_map;
                ar->wmi.pdev_param = &wmi_10_2_4_pdev_param_map;
+               ar->wmi.peer_flags = &wmi_10_2_peer_flags_map;
                break;
        case ATH10K_FW_WMI_OP_VERSION_10_2:
                ar->wmi.cmd = &wmi_10_2_cmd_map;
                ar->wmi.ops = &wmi_10_2_ops;
                ar->wmi.vdev_param = &wmi_10x_vdev_param_map;
                ar->wmi.pdev_param = &wmi_10x_pdev_param_map;
+               ar->wmi.peer_flags = &wmi_10_2_peer_flags_map;
                break;
        case ATH10K_FW_WMI_OP_VERSION_10_1:
                ar->wmi.cmd = &wmi_10x_cmd_map;
                ar->wmi.ops = &wmi_10_1_ops;
                ar->wmi.vdev_param = &wmi_10x_vdev_param_map;
                ar->wmi.pdev_param = &wmi_10x_pdev_param_map;
+               ar->wmi.peer_flags = &wmi_10x_peer_flags_map;
                break;
        case ATH10K_FW_WMI_OP_VERSION_MAIN:
                ar->wmi.cmd = &wmi_cmd_map;
                ar->wmi.ops = &wmi_ops;
                ar->wmi.vdev_param = &wmi_vdev_param_map;
                ar->wmi.pdev_param = &wmi_pdev_param_map;
+               ar->wmi.peer_flags = &wmi_peer_flags_map;
                break;
        case ATH10K_FW_WMI_OP_VERSION_TLV:
                ath10k_wmi_tlv_attach(ar);
index 72a4ef7095776b2d651ba594bd6411d86a860f3d..96dd98c6fcefd0df05d48249d64315f3c5bb55f9 100644 (file)
@@ -5641,21 +5641,79 @@ struct wmi_peer_set_q_empty_callback_cmd {
        __le32 callback_enable;
 } __packed;
 
-#define WMI_PEER_AUTH           0x00000001
-#define WMI_PEER_QOS            0x00000002
-#define WMI_PEER_NEED_PTK_4_WAY 0x00000004
-#define WMI_PEER_NEED_GTK_2_WAY 0x00000010
-#define WMI_PEER_APSD           0x00000800
-#define WMI_PEER_HT             0x00001000
-#define WMI_PEER_40MHZ          0x00002000
-#define WMI_PEER_STBC           0x00008000
-#define WMI_PEER_LDPC           0x00010000
-#define WMI_PEER_DYN_MIMOPS     0x00020000
-#define WMI_PEER_STATIC_MIMOPS  0x00040000
-#define WMI_PEER_SPATIAL_MUX    0x00200000
-#define WMI_PEER_VHT            0x02000000
-#define WMI_PEER_80MHZ          0x04000000
-#define WMI_PEER_VHT_2G         0x08000000
+struct wmi_peer_flags_map {
+       u32 auth;
+       u32 qos;
+       u32 need_ptk_4_way;
+       u32 need_gtk_2_way;
+       u32 apsd;
+       u32 ht;
+       u32 bw40;
+       u32 stbc;
+       u32 ldbc;
+       u32 dyn_mimops;
+       u32 static_mimops;
+       u32 spatial_mux;
+       u32 vht;
+       u32 bw80;
+       u32 vht_2g;
+       u32 pmf;
+};
+
+enum wmi_peer_flags {
+       WMI_PEER_AUTH = 0x00000001,
+       WMI_PEER_QOS = 0x00000002,
+       WMI_PEER_NEED_PTK_4_WAY = 0x00000004,
+       WMI_PEER_NEED_GTK_2_WAY = 0x00000010,
+       WMI_PEER_APSD = 0x00000800,
+       WMI_PEER_HT = 0x00001000,
+       WMI_PEER_40MHZ = 0x00002000,
+       WMI_PEER_STBC = 0x00008000,
+       WMI_PEER_LDPC = 0x00010000,
+       WMI_PEER_DYN_MIMOPS = 0x00020000,
+       WMI_PEER_STATIC_MIMOPS = 0x00040000,
+       WMI_PEER_SPATIAL_MUX = 0x00200000,
+       WMI_PEER_VHT = 0x02000000,
+       WMI_PEER_80MHZ = 0x04000000,
+       WMI_PEER_VHT_2G = 0x08000000,
+       WMI_PEER_PMF = 0x10000000,
+};
+
+enum wmi_10x_peer_flags {
+       WMI_10X_PEER_AUTH = 0x00000001,
+       WMI_10X_PEER_QOS = 0x00000002,
+       WMI_10X_PEER_NEED_PTK_4_WAY = 0x00000004,
+       WMI_10X_PEER_NEED_GTK_2_WAY = 0x00000010,
+       WMI_10X_PEER_APSD = 0x00000800,
+       WMI_10X_PEER_HT = 0x00001000,
+       WMI_10X_PEER_40MHZ = 0x00002000,
+       WMI_10X_PEER_STBC = 0x00008000,
+       WMI_10X_PEER_LDPC = 0x00010000,
+       WMI_10X_PEER_DYN_MIMOPS = 0x00020000,
+       WMI_10X_PEER_STATIC_MIMOPS = 0x00040000,
+       WMI_10X_PEER_SPATIAL_MUX = 0x00200000,
+       WMI_10X_PEER_VHT = 0x02000000,
+       WMI_10X_PEER_80MHZ = 0x04000000,
+};
+
+enum wmi_10_2_peer_flags {
+       WMI_10_2_PEER_AUTH = 0x00000001,
+       WMI_10_2_PEER_QOS = 0x00000002,
+       WMI_10_2_PEER_NEED_PTK_4_WAY = 0x00000004,
+       WMI_10_2_PEER_NEED_GTK_2_WAY = 0x00000010,
+       WMI_10_2_PEER_APSD = 0x00000800,
+       WMI_10_2_PEER_HT = 0x00001000,
+       WMI_10_2_PEER_40MHZ = 0x00002000,
+       WMI_10_2_PEER_STBC = 0x00008000,
+       WMI_10_2_PEER_LDPC = 0x00010000,
+       WMI_10_2_PEER_DYN_MIMOPS = 0x00020000,
+       WMI_10_2_PEER_STATIC_MIMOPS = 0x00040000,
+       WMI_10_2_PEER_SPATIAL_MUX = 0x00200000,
+       WMI_10_2_PEER_VHT = 0x02000000,
+       WMI_10_2_PEER_80MHZ = 0x04000000,
+       WMI_10_2_PEER_VHT_2G = 0x08000000,
+       WMI_10_2_PEER_PMF = 0x10000000,
+};
 
 /*
  * Peer rate capabilities.