wlcore/wl12xx: expand functionality of cmd_trigger HW op
authorArik Nemtsov <arik@wizery.com>
Tue, 13 Dec 2011 10:27:22 +0000 (12:27 +0200)
committerLuciano Coelho <coelho@ti.com>
Thu, 12 Apr 2012 05:44:01 +0000 (08:44 +0300)
Change the cmd_trigger op to include the write of the command buffer.

Also, instead of letting the lower driver access the cmd_box_addr element
directly, we now pass the address in the trigger_cmd operation, so it
doesn't have to be exported.

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

index 564ca914bfcf6bc7713da5bbfada29269980ebb0..083e1d8be173d2d5b09f62feba20228e33818dde 100644 (file)
@@ -707,8 +707,10 @@ out:
        return ret;
 }
 
-static void wl12xx_trigger_cmd(struct wl1271 *wl)
+static void wl12xx_trigger_cmd(struct wl1271 *wl, int cmd_box_addr,
+                              void *buf, size_t len)
 {
+       wl1271_write(wl, cmd_box_addr, buf, len, false);
        wlcore_write_reg(wl, REG_INTERRUPT_TRIG, WL12XX_INTR_TRIG_CMD);
 }
 
index 8407590cf6cc93799548fb1dc3cc70f07523305f..5c4716c6f04057e9cee9226ec9f8274588d852bf 100644 (file)
@@ -70,7 +70,7 @@ int wl1271_cmd_send(struct wl1271 *wl, u16 id, void *buf, size_t len,
         * TODO: we just need this because one bit is in a different
         * place.  Is there any better way?
         */
-       wl->ops->trigger_cmd(wl);
+       wl->ops->trigger_cmd(wl, wl->cmd_box_addr, buf, len);
 
        timeout = jiffies + msecs_to_jiffies(WL1271_COMMAND_TIMEOUT);
 
index 7e2881d38860cf92f82d43244a05f27926b46206..83f1d7cfd7843d55187b4e0288e2980e0d02191b 100644 (file)
@@ -37,7 +37,8 @@ enum wl_rx_buf_align;
 struct wlcore_ops {
        int (*identify_chip)(struct wl1271 *wl);
        int (*boot)(struct wl1271 *wl);
-       void (*trigger_cmd)(struct wl1271 *wl);
+       void (*trigger_cmd)(struct wl1271 *wl, int cmd_box_addr,
+                           void *buf, size_t len);
        void (*ack_event)(struct wl1271 *wl);
        u32 (*calc_tx_blocks)(struct wl1271 *wl, u32 len, u32 spare_blks);
        void (*set_tx_desc_blocks)(struct wl1271 *wl,