Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 249311
b: refs/heads/master
c: 12392c6
h: refs/heads/master
i:
  249309: 10ac17b
  249307: 6887823
  249303: 0b30d54
  249295: ea648fd
  249279: 7f770ce
v: v3
  • Loading branch information
Arend van Spriel authored and Greg Kroah-Hartman committed May 3, 2011
1 parent 7e4739e commit e01c599
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: be2fee08bb876bd8156d5f0c3e2b2a6ae8885b97
refs/heads/master: 12392c6d4dff6db1cf10091c2515ac41bfa58c76
1 change: 1 addition & 0 deletions trunk/drivers/staging/brcm80211/brcmsmac/wl_export.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,5 +42,6 @@ extern void wl_free_timer(struct wl_info *wl, struct wl_timer *timer);
extern void wl_add_timer(struct wl_info *wl, struct wl_timer *timer, uint ms,
int periodic);
extern bool wl_del_timer(struct wl_info *wl, struct wl_timer *timer);
extern void wl_msleep(struct wl_info *wl, uint ms);

#endif /* _wl_export_h_ */
24 changes: 24 additions & 0 deletions trunk/drivers/staging/brcm80211/brcmsmac/wl_mac80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ static int wl_ops_ampdu_action(struct ieee80211_hw *hw,
struct ieee80211_sta *sta, u16 tid, u16 *ssn,
u8 buf_size);
static void wl_ops_rfkill_poll(struct ieee80211_hw *hw);
static void wl_ops_flush(struct ieee80211_hw *hw, bool drop);

static void wl_ops_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
{
Expand Down Expand Up @@ -667,6 +668,18 @@ static void wl_ops_rfkill_poll(struct ieee80211_hw *hw)
wiphy_rfkill_set_hw_state(wl->pub->ieee_hw->wiphy, blocked);
}

static void wl_ops_flush(struct ieee80211_hw *hw, bool drop)
{
struct wl_info *wl = HW_TO_WL(hw);

no_printk("%s: drop = %s\n", __func__, drop ? "true" : "false");

/* wait for packet queue and dma fifos to run empty */
WL_LOCK(wl);
wlc_wait_for_tx_completion(wl->wlc, drop);
WL_UNLOCK(wl);
}

static const struct ieee80211_ops wl_ops = {
.tx = wl_ops_tx,
.start = wl_ops_start,
Expand All @@ -688,6 +701,7 @@ static const struct ieee80211_ops wl_ops = {
.sta_remove = wl_ops_sta_remove,
.ampdu_action = wl_ops_ampdu_action,
.rfkill_poll = wl_ops_rfkill_poll,
.flush = wl_ops_flush,
};

/*
Expand Down Expand Up @@ -1947,3 +1961,13 @@ bool wl_rfkill_set_hw_state(struct wl_info *wl)
WL_LOCK(wl);
return blocked;
}

/*
* precondition: perimeter lock has been acquired
*/
void wl_msleep(struct wl_info *wl, uint ms)
{
WL_UNLOCK(wl);
msleep(ms);
WL_LOCK(wl);
}
13 changes: 13 additions & 0 deletions trunk/drivers/staging/brcm80211/brcmsmac/wlc_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -8104,3 +8104,16 @@ int wlc_get_curband(struct wlc_info *wlc)
{
return wlc->band->bandunit;
}

void wlc_wait_for_tx_completion(struct wlc_info *wlc, bool drop)
{
/* flush packet queue when requested */
if (drop)
pktq_flush(&wlc->active_queue->q, false, NULL, 0);

/* wait for queue and DMA fifos to run dry */
while (!pktq_empty(&wlc->active_queue->q) ||
TXPKTPENDTOT(wlc) > 0) {
wl_msleep(wlc->wl, 1);
}
}
1 change: 1 addition & 0 deletions trunk/drivers/staging/brcm80211/brcmsmac/wlc_pub.h
Original file line number Diff line number Diff line change
Expand Up @@ -569,6 +569,7 @@ extern void wlc_associate_upd(struct wlc_info *wlc, bool state);
extern void wlc_scan_start(struct wlc_info *wlc);
extern void wlc_scan_stop(struct wlc_info *wlc);
extern int wlc_get_curband(struct wlc_info *wlc);
extern void wlc_wait_for_tx_completion(struct wlc_info *wlc, bool drop);

static inline int wlc_iovar_getuint(struct wlc_info *wlc, const char *name,
uint *arg)
Expand Down

0 comments on commit e01c599

Please sign in to comment.