wl18xx: implement hw op for setting blocks in hw_tx_desc
authorArik Nemtsov <arik@wizery.com>
Thu, 10 May 2012 09:13:18 +0000 (12:13 +0300)
committerLuciano Coelho <coelho@ti.com>
Tue, 5 Jun 2012 12:54:55 +0000 (15:54 +0300)
Add the 18xx variant to the HW Tx descriptor union and set the 18xx
specific values during Tx.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
drivers/net/wireless/ti/wl18xx/main.c
drivers/net/wireless/ti/wlcore/tx.h

index 055b194827b3e06de0f5466cc2d7b7c9b54f7cd9..c85492ead0f99ef80d31b0c511f4f88c0ed7b870 100644 (file)
@@ -26,6 +26,7 @@
 #include "../wlcore/debug.h"
 #include "../wlcore/io.h"
 #include "../wlcore/acx.h"
+#include "../wlcore/tx.h"
 #include "../wlcore/boot.h"
 
 #include "reg.h"
@@ -312,12 +313,21 @@ static u32 wl18xx_calc_tx_blocks(struct wl1271 *wl, u32 len, u32 spare_blks)
        return (len + blk_size - 1) / blk_size + spare_blks;
 }
 
+static void
+wl18xx_set_tx_desc_blocks(struct wl1271 *wl, struct wl1271_tx_hw_descr *desc,
+                         u32 blks, u32 spare_blks)
+{
+       desc->wl18xx_mem.total_mem_blocks = blks;
+       desc->wl18xx_mem.reserved = 0;
+}
+
 static struct wlcore_ops wl18xx_ops = {
        .identify_chip  = wl18xx_identify_chip,
        .boot           = wl18xx_boot,
        .trigger_cmd    = wl18xx_trigger_cmd,
        .ack_event      = wl18xx_ack_event,
        .calc_tx_blocks = wl18xx_calc_tx_blocks,
+       .set_tx_desc_blocks = wl18xx_set_tx_desc_blocks,
 };
 
 int __devinit wl18xx_probe(struct platform_device *pdev)
index 2fd6e5dc6f7567324d5e75c9dabd9975eb238c56..e440c313537d45cf3a51d188ed0abe76406954f9 100644 (file)
@@ -85,6 +85,19 @@ struct wl128x_tx_mem {
        u8 extra_bytes;
 } __packed;
 
+struct wl18xx_tx_mem {
+       /*
+        * Total number of memory blocks allocated by the host for
+        * this packet.
+        */
+       u8 total_mem_blocks;
+
+       /*
+        * always zero
+        */
+       u8 reserved;
+} __packed;
+
 /*
  * On wl128x based devices, when TX packets are aggregated, each packet
  * size must be aligned to the SDIO block size. The maximum block size
@@ -100,6 +113,7 @@ struct wl1271_tx_hw_descr {
        union {
                struct wl127x_tx_mem wl127x_mem;
                struct wl128x_tx_mem wl128x_mem;
+               struct wl18xx_tx_mem wl18xx_mem;
        } __packed;
        /* Device time (in us) when the packet arrived to the driver */
        __le32 start_time;