wl12xx: AP mode - add AP specific event
authorArik Nemtsov <arik@wizery.com>
Mon, 25 Oct 2010 09:17:44 +0000 (11:17 +0200)
committerLuciano Coelho <coelho@ti.com>
Mon, 24 Jan 2011 20:11:47 +0000 (22:11 +0200)
Add STA-remove completion event. Unmask it during boot if operating in
AP-mode.
Ignore unrelated events in AP-mode.

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

index 4df04f8..b504367 100644 (file)
@@ -431,6 +431,9 @@ static int wl1271_boot_run_firmware(struct wl1271 *wl)
                PSPOLL_DELIVERY_FAILURE_EVENT_ID |
                SOFT_GEMINI_SENSE_EVENT_ID;
 
+       if (wl->bss_type == BSS_TYPE_AP_BSS)
+               wl->event_mask |= STA_REMOVE_COMPLETE_EVENT_ID;
+
        ret = wl1271_event_unmask(wl);
        if (ret < 0) {
                wl1271_error("EVENT mask setting failed");
index f9146f5..3376a5d 100644 (file)
@@ -186,6 +186,7 @@ static int wl1271_event_process(struct wl1271 *wl, struct event_mailbox *mbox)
        int ret;
        u32 vector;
        bool beacon_loss = false;
+       bool is_ap = (wl->bss_type == BSS_TYPE_AP_BSS);
 
        wl1271_event_mbox_dump(mbox);
 
@@ -218,21 +219,21 @@ static int wl1271_event_process(struct wl1271 *wl, struct event_mailbox *mbox)
         * BSS_LOSE_EVENT, beacon loss has to be reported to the stack.
         *
         */
-       if (vector & BSS_LOSE_EVENT_ID) {
+       if ((vector & BSS_LOSE_EVENT_ID) && !is_ap) {
                wl1271_info("Beacon loss detected.");
 
                /* indicate to the stack, that beacons have been lost */
                beacon_loss = true;
        }
 
-       if (vector & PS_REPORT_EVENT_ID) {
+       if ((vector & PS_REPORT_EVENT_ID) && !is_ap) {
                wl1271_debug(DEBUG_EVENT, "PS_REPORT_EVENT");
                ret = wl1271_event_ps_report(wl, mbox, &beacon_loss);
                if (ret < 0)
                        return ret;
        }
 
-       if (vector & PSPOLL_DELIVERY_FAILURE_EVENT_ID)
+       if ((vector & PSPOLL_DELIVERY_FAILURE_EVENT_ID) && !is_ap)
                wl1271_event_pspoll_delivery_fail(wl);
 
        if (vector & RSSI_SNR_TRIGGER_0_EVENT_ID) {
index 6cce014..fd955f3 100644 (file)
@@ -59,6 +59,7 @@ enum {
        BSS_LOSE_EVENT_ID                        = BIT(18),
        REGAINED_BSS_EVENT_ID                    = BIT(19),
        ROAMING_TRIGGER_MAX_TX_RETRY_EVENT_ID    = BIT(20),
+       STA_REMOVE_COMPLETE_EVENT_ID             = BIT(21), /* AP */
        SOFT_GEMINI_SENSE_EVENT_ID               = BIT(22),
        SOFT_GEMINI_PREDICTION_EVENT_ID          = BIT(23),
        SOFT_GEMINI_AVALANCHE_EVENT_ID           = BIT(24),