]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
rsi: update set_key command frame
authorPrameela Rani Garnepudi <prameela.j04cs@gmail.com>
Mon, 10 Jul 2017 12:40:41 +0000 (18:10 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Fri, 28 Jul 2017 14:25:41 +0000 (17:25 +0300)
TX command frame set_key is modified to use common descriptor
structure.

Signed-off-by: Prameela Rani Garnepudi <prameela.j04cs@gmail.com>
Signed-off-by: Amitkumar Karwar <amit.karwar@redpinesignals.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/rsi/rsi_91x_mgmt.c
drivers/net/wireless/rsi/rsi_mgmt.h

index 3ce1f71cf537be165d70bcb8f8d9cf2fbc943d82..9395d6deac15d7a5b7e35207edf135092124bd9b 100644 (file)
@@ -709,39 +709,39 @@ int rsi_hal_load_key(struct rsi_common *common,
        struct sk_buff *skb = NULL;
        struct rsi_set_key *set_key;
        u16 key_descriptor = 0;
+       u16 frame_len = sizeof(struct rsi_set_key);
 
        rsi_dbg(MGMT_TX_ZONE, "%s: Sending load key frame\n", __func__);
 
-       skb = dev_alloc_skb(sizeof(struct rsi_set_key));
+       skb = dev_alloc_skb(frame_len);
        if (!skb) {
                rsi_dbg(ERR_ZONE, "%s: Failed in allocation of skb\n",
                        __func__);
                return -ENOMEM;
        }
 
-       memset(skb->data, 0, sizeof(struct rsi_set_key));
+       memset(skb->data, 0, frame_len);
        set_key = (struct rsi_set_key *)skb->data;
 
        if ((cipher == WLAN_CIPHER_SUITE_WEP40) ||
            (cipher == WLAN_CIPHER_SUITE_WEP104)) {
                key_len += 1;
-               key_descriptor |= BIT(2);
+               key_descriptor |= RSI_WEP_KEY;
                if (key_len >= 13)
-                       key_descriptor |= BIT(3);
+                       key_descriptor |= RSI_WEP_KEY_104;
        } else if (cipher != KEY_TYPE_CLEAR) {
-               key_descriptor |= BIT(4);
+               key_descriptor |= RSI_CIPHER_WPA;
                if (key_type == RSI_PAIRWISE_KEY)
                        key_id = 0;
                if (cipher == WLAN_CIPHER_SUITE_TKIP)
-                       key_descriptor |= BIT(5);
+                       key_descriptor |= RSI_CIPHER_TKIP;
        }
-       key_descriptor |= (key_type | BIT(13) | (key_id << 14));
+       key_descriptor |= (key_type | RSI_PROTECT_DATA_FRAMES | (key_id << 14));
 
-       set_key->desc_word[0] = cpu_to_le16((sizeof(struct rsi_set_key) -
-                                           FRAME_DESC_SZ) |
-                                           (RSI_WIFI_MGMT_Q << 12));
-       set_key->desc_word[1] = cpu_to_le16(SET_KEY_REQ);
-       set_key->desc_word[4] = cpu_to_le16(key_descriptor);
+       rsi_set_len_qno(&set_key->desc_dword0.len_qno,
+                       (frame_len - FRAME_DESC_SZ), RSI_WIFI_MGMT_Q);
+       set_key->desc_dword0.frame_type = SET_KEY_REQ;
+       set_key->key_desc = cpu_to_le16(key_descriptor);
 
        if ((cipher == WLAN_CIPHER_SUITE_WEP40) ||
            (cipher == WLAN_CIPHER_SUITE_WEP104)) {
@@ -755,7 +755,7 @@ int rsi_hal_load_key(struct rsi_common *common,
        memcpy(set_key->tx_mic_key, &data[16], 8);
        memcpy(set_key->rx_mic_key, &data[24], 8);
 
-       skb_put(skb, sizeof(struct rsi_set_key));
+       skb_put(skb, frame_len);
 
        return rsi_send_internal_mgmt_frame(common, skb);
 }
index fcde44e966f170bf60aa896f499c770b5af78675..5df64d3c67dc2ea2d89396340da02c698812dbe7 100644 (file)
@@ -348,8 +348,22 @@ struct rsi_vap_caps {
        __le16 beacon_miss_threshold;
 } __packed;
 
+/* Key descriptor flags */
+#define RSI_KEY_TYPE_BROADCAST BIT(1)
+#define RSI_WEP_KEY            BIT(2)
+#define RSI_WEP_KEY_104                BIT(3)
+#define RSI_CIPHER_WPA         BIT(4)
+#define RSI_CIPHER_TKIP                BIT(5)
+#define RSI_PROTECT_DATA_FRAMES        BIT(13)
+#define RSI_KEY_ID_MASK                0xC0
+#define RSI_KEY_ID_OFFSET      14
 struct rsi_set_key {
-       __le16 desc_word[8];
+       struct rsi_cmd_desc_dword0 desc_dword0;
+       struct rsi_cmd_desc_dword1 desc_dword1;
+       __le16 key_desc;
+       __le32 bpn;
+       u8 sta_id;
+       u8 vap_id;
        u8 key[4][32];
        u8 tx_mic_key[8];
        u8 rx_mic_key[8];