Skip to content

Commit

Permalink
wl1251: get PS Poll and Nullfunc templates from mac80211
Browse files Browse the repository at this point in the history
Now that mac80211 creates templates for PS Poll and Nullfunc frames, use
them instead of creating our own.

Signed-off-by: Kalle Valo <kalle.valo@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Kalle Valo authored and John W. Linville committed Jan 12, 2010
1 parent d8cd189 commit f7f7057
Showing 1 changed file with 16 additions and 42 deletions.
58 changes: 16 additions & 42 deletions drivers/net/wireless/wl12xx/wl1251_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -563,45 +563,6 @@ static void wl1251_op_remove_interface(struct ieee80211_hw *hw,
mutex_unlock(&wl->mutex);
}

static int wl1251_build_null_data(struct wl1251 *wl)
{
struct wl12xx_null_data_template template;

if (!is_zero_ether_addr(wl->bssid)) {
memcpy(template.header.da, wl->bssid, ETH_ALEN);
memcpy(template.header.bssid, wl->bssid, ETH_ALEN);
} else {
memset(template.header.da, 0xff, ETH_ALEN);
memset(template.header.bssid, 0xff, ETH_ALEN);
}

memcpy(template.header.sa, wl->mac_addr, ETH_ALEN);
template.header.frame_ctl = cpu_to_le16(IEEE80211_FTYPE_DATA |
IEEE80211_STYPE_NULLFUNC |
IEEE80211_FCTL_TODS);

return wl1251_cmd_template_set(wl, CMD_NULL_DATA, &template,
sizeof(template));

}

static int wl1251_build_ps_poll(struct wl1251 *wl, u16 aid)
{
struct wl12xx_ps_poll_template template;

memcpy(template.bssid, wl->bssid, ETH_ALEN);
memcpy(template.ta, wl->mac_addr, ETH_ALEN);

/* aid in PS-Poll has its two MSBs each set to 1 */
template.aid = cpu_to_le16(1 << 15 | 1 << 14 | aid);

template.fc = cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_PSPOLL);

return wl1251_cmd_template_set(wl, CMD_PS_POLL, &template,
sizeof(template));

}

static int wl1251_op_config(struct ieee80211_hw *hw, u32 changed)
{
struct wl1251 *wl = hw->priv;
Expand Down Expand Up @@ -1101,7 +1062,7 @@ static void wl1251_op_bss_info_changed(struct ieee80211_hw *hw,
{
enum wl1251_cmd_ps_mode mode;
struct wl1251 *wl = hw->priv;
struct sk_buff *beacon;
struct sk_buff *beacon, *skb;
int ret;

wl1251_debug(DEBUG_MAC80211, "mac80211 bss info changed");
Expand All @@ -1115,7 +1076,13 @@ static void wl1251_op_bss_info_changed(struct ieee80211_hw *hw,
if (changed & BSS_CHANGED_BSSID) {
memcpy(wl->bssid, bss_conf->bssid, ETH_ALEN);

ret = wl1251_build_null_data(wl);
skb = ieee80211_nullfunc_get(wl->hw, wl->vif);
if (!skb)
goto out_sleep;

ret = wl1251_cmd_template_set(wl, CMD_NULL_DATA,
skb->data, skb->len);
dev_kfree_skb(skb);
if (ret < 0)
goto out;

Expand All @@ -1136,7 +1103,14 @@ static void wl1251_op_bss_info_changed(struct ieee80211_hw *hw,
wl->dtim_period);
wl->aid = bss_conf->aid;

ret = wl1251_build_ps_poll(wl, wl->aid);
skb = ieee80211_pspoll_get(wl->hw, wl->vif);
if (!skb)
goto out_sleep;

ret = wl1251_cmd_template_set(wl, CMD_PS_POLL,
skb->data,
skb->len);
dev_kfree_skb(skb);
if (ret < 0)
goto out_sleep;

Expand Down

0 comments on commit f7f7057

Please sign in to comment.