wl12xx: update rx/tx
authorEliad Peller <eliad@wizery.com>
Sun, 14 Aug 2011 10:17:11 +0000 (13:17 +0300)
committerLuciano Coelho <coelho@ti.com>
Mon, 22 Aug 2011 09:35:25 +0000 (12:35 +0300)
Update the rx/tx descriptors according to the new fw api
(fw >= 6/7.3.0.0.75)

Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
drivers/net/wireless/wl12xx/rx.h
drivers/net/wireless/wl12xx/tx.c
drivers/net/wireless/wl12xx/tx.h
drivers/net/wireless/wl12xx/wl12xx.h

index 00c1c1d27aaa9eadcae1b08eed9613ebbb232e46..86ba6b1d0cdc42a59889cb364d95f29d6c911d2b 100644 (file)
@@ -86,7 +86,7 @@
  * Bits 3-5 - process_id tag (AP mode FW)
  * Bits 6-7 - reserved
  */
-#define WL1271_RX_DESC_STATUS_MASK      0x07
+#define WL1271_RX_DESC_STATUS_MASK      0x03
 
 #define WL1271_RX_DESC_SUCCESS          0x00
 #define WL1271_RX_DESC_DECRYPT_FAIL     0x01
@@ -121,10 +121,7 @@ struct wl1271_rx_descriptor {
        u8  snr;
        __le32 timestamp;
        u8  packet_class;
-       union {
-               u8  process_id; /* STA FW */
-               u8  hlid; /* AP FW */
-       } __packed;
+       u8  hlid;
        u8  pad_len;
        u8  reserved;
 } __packed;
index f4973366a88bbed991868300ef89b2e1e144a28b..23ce7aaeb4c4e6bb206be84da163c25c7ce5ea10 100644 (file)
@@ -276,9 +276,9 @@ static void wl1271_tx_fill_hdr(struct wl1271 *wl, struct sk_buff *skb,
                        wl->session_counter << TX_HW_ATTR_OFST_SESSION_COUNTER;
        }
 
-       if (wl->bss_type != BSS_TYPE_AP_BSS) {
-               desc->aid = hlid;
+       desc->hlid = hlid;
 
+       if (wl->bss_type != BSS_TYPE_AP_BSS) {
                /* if the packets are destined for AP (have a STA entry)
                   send them with AP rate policies, otherwise use default
                   basic rates */
@@ -287,7 +287,6 @@ static void wl1271_tx_fill_hdr(struct wl1271 *wl, struct sk_buff *skb,
                else
                        rate_idx = ACX_TX_BASIC_RATE;
        } else {
-               desc->hlid = hlid;
                switch (hlid) {
                case WL1271_AP_GLOBAL_HLID:
                        rate_idx = ACX_TX_AP_MODE_MGMT_RATE;
@@ -375,7 +374,15 @@ static int wl1271_prepare_tx_frame(struct wl1271 *wl, struct sk_buff *skb,
        if (wl->bss_type == BSS_TYPE_AP_BSS)
                hlid = wl1271_tx_get_hlid(skb);
        else
-               hlid = TX_HW_DEFAULT_AID;
+               if (test_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags))
+                       hlid = wl->sta_hlid;
+               else
+                       hlid = wl->dev_hlid;
+
+       if (hlid == WL12XX_INVALID_LINK_ID) {
+               wl1271_error("invalid hlid. dropping skb 0x%p", skb);
+               return -EINVAL;
+       }
 
        ret = wl1271_tx_allocate(wl, skb, extra, buf_offset, hlid);
        if (ret < 0)
index 5d719b5a3d1d3066920fad117546681abb2ca31c..b712d7b058a8d55072ffedb0f6c52250e37bd94c 100644 (file)
@@ -29,9 +29,6 @@
 
 #define TX_HW_MGMT_PKT_LIFETIME_TU       2000
 #define TX_HW_AP_MODE_PKT_LIFETIME_TU    8000
-/* The chipset reference driver states, that the "aid" value 1
- * is for infra-BSS, but is still always used */
-#define TX_HW_DEFAULT_AID                1
 
 #define TX_HW_ATTR_SAVE_RETRIES          BIT(0)
 #define TX_HW_ATTR_HEADER_PAD            BIT(1)
@@ -116,12 +113,8 @@ struct wl1271_tx_hw_descr {
        u8 id;
        /* The packet TID value (as User-Priority) */
        u8 tid;
-       union {
-               /* STA - Identifier of the remote STA in IBSS, 1 in infra-BSS */
-               u8 aid;
-               /* AP - host link ID (HLID) */
-               u8 hlid;
-       } __packed;
+       /* host link ID (HLID) */
+       u8 hlid;
        u8 reserved;
 } __packed;
 
@@ -133,7 +126,8 @@ enum wl1271_tx_hw_res_status {
        TX_TIMEOUT          = 4,
        TX_KEY_NOT_FOUND    = 5,
        TX_PEER_NOT_FOUND   = 6,
-       TX_SESSION_MISMATCH = 7
+       TX_SESSION_MISMATCH = 7,
+       TX_LINK_NOT_VALID   = 8,
 };
 
 struct wl1271_tx_hw_res_descr {
index ab46664969ec88443db0351665eaedac40c814a0..93e689d1f46a5f10d4b5a11ae63779ffc29af825 100644 (file)
@@ -159,7 +159,7 @@ extern u32 wl12xx_debug_level;
 #define WL1271_AP_BSS_INDEX        0
 #define WL1271_AP_DEF_BEACON_EXP   20
 
-#define ACX_TX_DESCRIPTORS         32
+#define ACX_TX_DESCRIPTORS         16
 
 #define WL1271_AGGR_BUFFER_SIZE (4 * PAGE_SIZE)