rt2x00: Don't enable broad- and multicast buffering on USB devices
Since rt2x00 USB devices have no chance to know when a beacon was sent out in AP mode currently all broad- and multicast traffic is buffered in mac80211 but never sent out at all. Unfortunately we have no chance in sending the traffic out after a DTIM beacon due to hw limitations. Hence, instead of never sending the buffered traffic out better send it out immediately. Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com> Reported-by: Lauri Hintsala <lauri.hintsala@bluegiga.com> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
c4c18a9dc1
commit
5a5b6ed6ce
3 changed files with 22 additions and 3 deletions
|
@ -1674,10 +1674,15 @@ static int rt2500usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize all hw fields.
|
* Initialize all hw fields.
|
||||||
|
*
|
||||||
|
* Don't set IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING unless we are
|
||||||
|
* capable of sending the buffered frames out after the DTIM
|
||||||
|
* transmission using rt2x00lib_beacondone. This will send out
|
||||||
|
* multicast and broadcast traffic immediately instead of buffering it
|
||||||
|
* infinitly and thus dropping it after some time.
|
||||||
*/
|
*/
|
||||||
rt2x00dev->hw->flags =
|
rt2x00dev->hw->flags =
|
||||||
IEEE80211_HW_RX_INCLUDES_FCS |
|
IEEE80211_HW_RX_INCLUDES_FCS |
|
||||||
IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
|
|
||||||
IEEE80211_HW_SIGNAL_DBM |
|
IEEE80211_HW_SIGNAL_DBM |
|
||||||
IEEE80211_HW_SUPPORTS_PS |
|
IEEE80211_HW_SUPPORTS_PS |
|
||||||
IEEE80211_HW_PS_NULLFUNC_STACK;
|
IEEE80211_HW_PS_NULLFUNC_STACK;
|
||||||
|
|
|
@ -3164,11 +3164,20 @@ int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
|
||||||
* Initialize all hw fields.
|
* Initialize all hw fields.
|
||||||
*/
|
*/
|
||||||
rt2x00dev->hw->flags =
|
rt2x00dev->hw->flags =
|
||||||
IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
|
|
||||||
IEEE80211_HW_SIGNAL_DBM |
|
IEEE80211_HW_SIGNAL_DBM |
|
||||||
IEEE80211_HW_SUPPORTS_PS |
|
IEEE80211_HW_SUPPORTS_PS |
|
||||||
IEEE80211_HW_PS_NULLFUNC_STACK |
|
IEEE80211_HW_PS_NULLFUNC_STACK |
|
||||||
IEEE80211_HW_AMPDU_AGGREGATION;
|
IEEE80211_HW_AMPDU_AGGREGATION;
|
||||||
|
/*
|
||||||
|
* Don't set IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING for USB devices
|
||||||
|
* unless we are capable of sending the buffered frames out after the
|
||||||
|
* DTIM transmission using rt2x00lib_beacondone. This will send out
|
||||||
|
* multicast and broadcast traffic immediately instead of buffering it
|
||||||
|
* infinitly and thus dropping it after some time.
|
||||||
|
*/
|
||||||
|
if (!rt2x00_is_usb(rt2x00dev))
|
||||||
|
rt2x00dev->hw->flags |=
|
||||||
|
IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING;
|
||||||
|
|
||||||
SET_IEEE80211_DEV(rt2x00dev->hw, rt2x00dev->dev);
|
SET_IEEE80211_DEV(rt2x00dev->hw, rt2x00dev->dev);
|
||||||
SET_IEEE80211_PERM_ADDR(rt2x00dev->hw,
|
SET_IEEE80211_PERM_ADDR(rt2x00dev->hw,
|
||||||
|
|
|
@ -2063,9 +2063,14 @@ static int rt73usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize all hw fields.
|
* Initialize all hw fields.
|
||||||
|
*
|
||||||
|
* Don't set IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING unless we are
|
||||||
|
* capable of sending the buffered frames out after the DTIM
|
||||||
|
* transmission using rt2x00lib_beacondone. This will send out
|
||||||
|
* multicast and broadcast traffic immediately instead of buffering it
|
||||||
|
* infinitly and thus dropping it after some time.
|
||||||
*/
|
*/
|
||||||
rt2x00dev->hw->flags =
|
rt2x00dev->hw->flags =
|
||||||
IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
|
|
||||||
IEEE80211_HW_SIGNAL_DBM |
|
IEEE80211_HW_SIGNAL_DBM |
|
||||||
IEEE80211_HW_SUPPORTS_PS |
|
IEEE80211_HW_SUPPORTS_PS |
|
||||||
IEEE80211_HW_PS_NULLFUNC_STACK;
|
IEEE80211_HW_PS_NULLFUNC_STACK;
|
||||||
|
|
Loading…
Reference in a new issue