Skip to content

Commit

Permalink
wlcore/wl12xx: add command trigger and event ack operations
Browse files Browse the repository at this point in the history
Different chips may use different bits in the interrupt trigger
register.  Add operations to handle these differences.

Signed-off-by: Luciano Coelho <coelho@ti.com>
  • Loading branch information
Luciano Coelho committed Apr 12, 2012
1 parent 30d9b4a commit f16ff75
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 19 deletions.
12 changes: 12 additions & 0 deletions drivers/net/wireless/ti/wl12xx/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -571,6 +571,16 @@ static int wl12xx_boot(struct wl1271 *wl)
return ret;
}

static void wl12xx_trigger_cmd(struct wl1271 *wl)
{
wlcore_write_reg(wl, REG_INTERRUPT_TRIG, WL12XX_INTR_TRIG_CMD);
}

static void wl12xx_ack_event(struct wl1271 *wl)
{
wlcore_write_reg(wl, REG_INTERRUPT_TRIG, WL12XX_INTR_TRIG_EVENT_ACK);
}

static bool wl12xx_mac_in_fuse(struct wl1271 *wl)
{
bool supported = false;
Expand Down Expand Up @@ -637,6 +647,8 @@ static void wl12xx_get_mac(struct wl1271 *wl)
static struct wlcore_ops wl12xx_ops = {
.identify_chip = wl12xx_identify_chip,
.boot = wl12xx_boot,
.trigger_cmd = wl12xx_trigger_cmd,
.ack_event = wl12xx_ack_event,
.get_pg_ver = wl12xx_get_pg_ver,
.get_mac = wl12xx_get_mac,
};
Expand Down
16 changes: 16 additions & 0 deletions drivers/net/wireless/ti/wl12xx/reg.h
Original file line number Diff line number Diff line change
Expand Up @@ -490,6 +490,22 @@ enum {

/* end PLL configuration algorithm for wl128x */

/*
* Host Command Interrupt. Setting this bit masks
* the interrupt that the host issues to inform
* the FW that it has sent a command
* to the Wlan hardware Command Mailbox.
*/
#define WL12XX_INTR_TRIG_CMD BIT(0)

/*
* Host Event Acknowlegde Interrupt. The host
* sets this bit to acknowledge that it received
* the unsolicited information from the event
* mailbox.
*/
#define WL12XX_INTR_TRIG_EVENT_ACK BIT(1)

/*===============================================
HI_CFG Interface Configuration Register Values
------------------------------------------
Expand Down
6 changes: 5 additions & 1 deletion drivers/net/wireless/ti/wlcore/cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,11 @@ int wl1271_cmd_send(struct wl1271 *wl, u16 id, void *buf, size_t len,

wl1271_write(wl, wl->cmd_box_addr, buf, len, false);

wlcore_write_reg(wl, REG_INTERRUPT_TRIG, INTR_TRIG_CMD);
/*
* TODO: we just need this because one bit is in a different
* place. Is there any better way?
*/
wl->ops->trigger_cmd(wl);

timeout = jiffies + msecs_to_jiffies(WL1271_COMMAND_TIMEOUT);

Expand Down
7 changes: 5 additions & 2 deletions drivers/net/wireless/ti/wlcore/event.c
Original file line number Diff line number Diff line change
Expand Up @@ -305,8 +305,11 @@ int wl1271_event_handle(struct wl1271 *wl, u8 mbox_num)
if (ret < 0)
return ret;

/* then we let the firmware know it can go on...*/
wlcore_write_reg(wl, REG_INTERRUPT_TRIG, INTR_TRIG_EVENT_ACK);
/*
* TODO: we just need this because one bit is in a different
* place. Is there any better way?
*/
wl->ops->ack_event(wl);

return 0;
}
18 changes: 2 additions & 16 deletions drivers/net/wireless/ti/wlcore/wlcore.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
struct wlcore_ops {
int (*identify_chip)(struct wl1271 *wl);
int (*boot)(struct wl1271 *wl);
void (*trigger_cmd)(struct wl1271 *wl);
void (*ack_event)(struct wl1271 *wl);
s8 (*get_pg_ver)(struct wl1271 *wl);
void (*get_mac)(struct wl1271 *wl);
};
Expand Down Expand Up @@ -344,22 +346,6 @@ int wlcore_free_hw(struct wl1271 *wl);

/* Hardware to Embedded CPU Interrupts - first 32-bit register set */

/*
* Host Command Interrupt. Setting this bit masks
* the interrupt that the host issues to inform
* the FW that it has sent a command
* to the Wlan hardware Command Mailbox.
*/
#define INTR_TRIG_CMD BIT(0)

/*
* Host Event Acknowlegde Interrupt. The host
* sets this bit to acknowledge that it received
* the unsolicited information from the event
* mailbox.
*/
#define INTR_TRIG_EVENT_ACK BIT(1)

/*
* The host sets this bit to inform the Wlan
* FW that a TX packet is in the XFER
Expand Down

0 comments on commit f16ff75

Please sign in to comment.