Skip to content

Commit

Permalink
wl1251: use beacon interval and dtim period provided by mac80211
Browse files Browse the repository at this point in the history
wl1251 was using hardcoded beacon intervals and dtim periods, use the ones
provided by mac80211 instead.

Signed-off-by: Kalle Valo <kalle.valo@nokia.com>
Reviewed-by: Vidhya Govindan <vidhya.govindan@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Kalle Valo authored and John W. Linville committed Aug 14, 2009
1 parent 46e947b commit e2fd461
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 7 deletions.
6 changes: 6 additions & 0 deletions drivers/net/wireless/wl12xx/wl1251.h
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,9 @@ struct wl1251 {
/* PSM mode requested */
bool psm_requested;

u16 beacon_int;
u8 dtim_period;

/* in dBm */
int power_level;

Expand Down Expand Up @@ -392,6 +395,9 @@ void wl1251_disable_interrupts(struct wl1251 *wl);

#define WL1251_TX_QUEUE_MAX_LENGTH 20

#define WL1251_DEFAULT_BEACON_INT 100
#define WL1251_DEFAULT_DTIM_PERIOD 1

#define CHIP_ID_1251_PG10 (0x7010101)
#define CHIP_ID_1251_PG11 (0x7020101)
#define CHIP_ID_1251_PG12 (0x7030101)
Expand Down
5 changes: 4 additions & 1 deletion drivers/net/wireless/wl12xx/wl1251_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,10 @@ int wl1251_cmd_join(struct wl1251 *wl, u8 bss_type, u16 beacon_interval,
if (ret < 0)
goto out;

wl1251_debug(DEBUG_CMD, "cmd join");
wl1251_debug(DEBUG_CMD, "cmd join%s %d %d%s",
bss_type == BSS_TYPE_IBSS ? " ibss" : "",
beacon_interval, dtim_interval,
wait ? " wait" : "");

/* Reverse order BSSID */
bssid = (u8 *) &join->bssid_lsb;
Expand Down
26 changes: 20 additions & 6 deletions drivers/net/wireless/wl12xx/wl1251_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -324,8 +324,8 @@ static void wl1251_filter_work(struct work_struct *work)
if (ret < 0)
goto out;

/* FIXME: replace the magic numbers with proper definitions */
ret = wl1251_cmd_join(wl, wl->bss_type, 100, 1, false);
ret = wl1251_cmd_join(wl, wl->bss_type, wl->beacon_int,
wl->dtim_period, false);
if (ret < 0)
goto out_sleep;

Expand Down Expand Up @@ -564,8 +564,8 @@ static int wl1251_op_config(struct ieee80211_hw *hw, u32 changed)
goto out;

if (channel != wl->channel) {
/* FIXME: use beacon interval provided by mac80211 */
ret = wl1251_cmd_join(wl, wl->bss_type, 100, 1, false);
ret = wl1251_cmd_join(wl, wl->bss_type, wl->beacon_int,
wl->dtim_period, false);
if (ret < 0)
goto out_sleep;

Expand Down Expand Up @@ -1057,6 +1057,11 @@ static void wl1251_op_bss_info_changed(struct ieee80211_hw *hw,

if (changed & BSS_CHANGED_ASSOC) {
if (bss_conf->assoc) {
wl->beacon_int = bss_conf->beacon_int;
wl->dtim_period = bss_conf->dtim_period;

/* FIXME: call join */

wl->aid = bss_conf->aid;

ret = wl1251_build_ps_poll(wl, wl->aid);
Expand All @@ -1074,6 +1079,10 @@ static void wl1251_op_bss_info_changed(struct ieee80211_hw *hw,
if (ret < 0)
goto out_sleep;
}
} else {
/* use defaults when not associated */
wl->beacon_int = WL1251_DEFAULT_BEACON_INT;
wl->dtim_period = WL1251_DEFAULT_DTIM_PERIOD;
}
}
if (changed & BSS_CHANGED_ERP_SLOT) {
Expand Down Expand Up @@ -1113,7 +1122,9 @@ static void wl1251_op_bss_info_changed(struct ieee80211_hw *hw,
goto out;

if (wl->bss_type != BSS_TYPE_IBSS) {
ret = wl1251_cmd_join(wl, wl->bss_type, 100, 5, true);
ret = wl1251_cmd_join(wl, wl->bss_type,
wl->beacon_int,
wl->dtim_period, true);
if (ret < 0)
goto out_sleep;
wl1251_warning("Set ctsprotect failed %d", ret);
Expand All @@ -1139,7 +1150,8 @@ static void wl1251_op_bss_info_changed(struct ieee80211_hw *hw,
if (ret < 0)
goto out;

ret = wl1251_cmd_join(wl, wl->bss_type, 100, 1, false);
ret = wl1251_cmd_join(wl, wl->bss_type, wl->beacon_int,
wl->dtim_period, false);

if (ret < 0)
goto out;
Expand Down Expand Up @@ -1329,6 +1341,8 @@ struct ieee80211_hw *wl1251_alloc_hw(void)
wl->psm_requested = false;
wl->tx_queue_stopped = false;
wl->power_level = WL1251_DEFAULT_POWER_LEVEL;
wl->beacon_int = WL1251_DEFAULT_BEACON_INT;
wl->dtim_period = WL1251_DEFAULT_DTIM_PERIOD;

for (i = 0; i < FW_TX_CMPLT_BLOCK_SIZE; i++)
wl->tx_frames[i] = NULL;
Expand Down

0 comments on commit e2fd461

Please sign in to comment.