From 6405f1b1084f714c35b5cfa8b843c1877c62900b Mon Sep 17 00:00:00 2001 From: Grazvydas Ignotas Date: Wed, 22 May 2013 03:36:21 +0300 Subject: [PATCH] wl1251: start handling powersave report and move beacon filter enable there, like wl1271+ driver has it. --- drivers/net/wireless/wl1251/boot.c | 3 ++- drivers/net/wireless/wl1251/event.c | 13 +++++++++++++ drivers/net/wireless/wl1251/event.h | 7 +++++++ drivers/net/wireless/wl1251/ps.c | 5 ----- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/wl1251/boot.c b/drivers/net/wireless/wl1251/boot.c index d729daf8e841..2ff2a00649f7 100644 --- a/drivers/net/wireless/wl1251/boot.c +++ b/drivers/net/wireless/wl1251/boot.c @@ -299,7 +299,8 @@ int wl1251_boot_run_firmware(struct wl1251 *wl) ROAMING_TRIGGER_LOW_RSSI_EVENT_ID | ROAMING_TRIGGER_REGAINED_RSSI_EVENT_ID | REGAINED_BSS_EVENT_ID | BT_PTA_SENSE_EVENT_ID | - BT_PTA_PREDICTION_EVENT_ID | JOIN_EVENT_COMPLETE_ID; + BT_PTA_PREDICTION_EVENT_ID | JOIN_EVENT_COMPLETE_ID | + PS_REPORT_EVENT_ID; ret = wl1251_event_unmask(wl); if (ret < 0) { diff --git a/drivers/net/wireless/wl1251/event.c b/drivers/net/wireless/wl1251/event.c index 6e10ee19488b..94932b1b1d8e 100644 --- a/drivers/net/wireless/wl1251/event.c +++ b/drivers/net/wireless/wl1251/event.c @@ -110,6 +110,19 @@ static int wl1251_event_process(struct wl1251 *wl, struct event_mailbox *mbox) } } + if (vector & PS_REPORT_EVENT_ID) { + if (mbox->ps_status == ENTER_POWER_SAVE_SUCCESS) { + /* enable beacon filtering */ + ret = wl1251_acx_beacon_filter_opt(wl, true); + if (ret < 0) + wl1251_error("beacon filter enable failed"); + + } else if (mbox->ps_status == ENTER_POWER_SAVE_FAIL) + wl->station_mode = STATION_ACTIVE_MODE; + else if (mbox->ps_status == EXIT_POWER_SAVE_FAIL) + wl->station_mode = STATION_POWER_SAVE_MODE; + } + return 0; } diff --git a/drivers/net/wireless/wl1251/event.h b/drivers/net/wireless/wl1251/event.h index 30eb5d150bf7..b638229139c8 100644 --- a/drivers/net/wireless/wl1251/event.h +++ b/drivers/net/wireless/wl1251/event.h @@ -73,6 +73,13 @@ enum { EVENT_MBOX_ALL_EVENT_ID = 0x7fffffff, }; +enum { + ENTER_POWER_SAVE_FAIL = 0, + ENTER_POWER_SAVE_SUCCESS = 1, + EXIT_POWER_SAVE_FAIL = 2, + EXIT_POWER_SAVE_SUCCESS = 3, +}; + struct event_debug_report { u8 debug_event_id; u8 num_params; diff --git a/drivers/net/wireless/wl1251/ps.c b/drivers/net/wireless/wl1251/ps.c index 8a1ff38f84fc..d258962daa08 100644 --- a/drivers/net/wireless/wl1251/ps.c +++ b/drivers/net/wireless/wl1251/ps.c @@ -112,11 +112,6 @@ int wl1251_ps_set_mode(struct wl1251 *wl, enum wl1251_station_mode mode) case STATION_POWER_SAVE_MODE: wl1251_debug(DEBUG_PSM, "entering psm"); - /* enable beacon filtering */ - ret = wl1251_acx_beacon_filter_opt(wl, true); - if (ret < 0) - return ret; - ret = wl1251_acx_wake_up_conditions(wl, WAKE_UP_EVENT_DTIM_BITMAP, wl->listen_int); -- 2.39.2