staging: vt6656: use NULLFUCTION stack on mac80211
It appears that the drivers does not go into power save correctly the NULL data packets are not being transmitted because it not enabled in mac80211. The driver needs to capture ieee80211_is_nullfunc headers and copy the duration_id to it's own duration data header. Cc: stable <stable@vger.kernel.org> Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com> Link: https://lore.kernel.org/r/610971ae-555b-a6c3-61b3-444a0c1e35b4@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d971fdd341
commit
d579c43c82
|
@ -1014,6 +1014,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
ieee80211_hw_set(priv->hw, RX_INCLUDES_FCS);
|
||||
ieee80211_hw_set(priv->hw, REPORTS_TX_ACK_STATUS);
|
||||
ieee80211_hw_set(priv->hw, SUPPORTS_PS);
|
||||
ieee80211_hw_set(priv->hw, PS_NULLFUNC_STACK);
|
||||
|
||||
priv->hw->max_signal = 100;
|
||||
|
||||
|
|
|
@ -278,11 +278,9 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context,
|
|||
PK_TYPE_11B, &buf->b);
|
||||
|
||||
/* Get Duration and TimeStamp */
|
||||
if (ieee80211_is_pspoll(hdr->frame_control)) {
|
||||
__le16 dur = cpu_to_le16(priv->current_aid | BIT(14) | BIT(15));
|
||||
|
||||
buf->duration_a = dur;
|
||||
buf->duration_b = dur;
|
||||
if (ieee80211_is_nullfunc(hdr->frame_control)) {
|
||||
buf->duration_a = hdr->duration_id;
|
||||
buf->duration_b = hdr->duration_id;
|
||||
} else {
|
||||
buf->duration_a = vnt_get_duration_le(priv,
|
||||
tx_context->pkt_type, need_ack);
|
||||
|
@ -371,10 +369,8 @@ static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context,
|
|||
tx_context->pkt_type, &buf->ab);
|
||||
|
||||
/* Get Duration and TimeStampOff */
|
||||
if (ieee80211_is_pspoll(hdr->frame_control)) {
|
||||
__le16 dur = cpu_to_le16(priv->current_aid | BIT(14) | BIT(15));
|
||||
|
||||
buf->duration = dur;
|
||||
if (ieee80211_is_nullfunc(hdr->frame_control)) {
|
||||
buf->duration = hdr->duration_id;
|
||||
} else {
|
||||
buf->duration = vnt_get_duration_le(priv, tx_context->pkt_type,
|
||||
need_ack);
|
||||
|
|
Loading…
Reference in New Issue