Commit d579c43c authored by Malcolm Priestley's avatar Malcolm Priestley Committed by Greg Kroah-Hartman

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: default avatarMalcolm Priestley <tvboxspy@gmail.com>
Link: https://lore.kernel.org/r/610971ae-555b-a6c3-61b3-444a0c1e35b4@gmail.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent d971fdd3
...@@ -1014,6 +1014,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) ...@@ -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, RX_INCLUDES_FCS);
ieee80211_hw_set(priv->hw, REPORTS_TX_ACK_STATUS); ieee80211_hw_set(priv->hw, REPORTS_TX_ACK_STATUS);
ieee80211_hw_set(priv->hw, SUPPORTS_PS); ieee80211_hw_set(priv->hw, SUPPORTS_PS);
ieee80211_hw_set(priv->hw, PS_NULLFUNC_STACK);
priv->hw->max_signal = 100; priv->hw->max_signal = 100;
......
...@@ -278,11 +278,9 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, ...@@ -278,11 +278,9 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context,
PK_TYPE_11B, &buf->b); PK_TYPE_11B, &buf->b);
/* Get Duration and TimeStamp */ /* Get Duration and TimeStamp */
if (ieee80211_is_pspoll(hdr->frame_control)) { if (ieee80211_is_nullfunc(hdr->frame_control)) {
__le16 dur = cpu_to_le16(priv->current_aid | BIT(14) | BIT(15)); buf->duration_a = hdr->duration_id;
buf->duration_b = hdr->duration_id;
buf->duration_a = dur;
buf->duration_b = dur;
} else { } else {
buf->duration_a = vnt_get_duration_le(priv, buf->duration_a = vnt_get_duration_le(priv,
tx_context->pkt_type, need_ack); tx_context->pkt_type, need_ack);
...@@ -371,10 +369,8 @@ static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, ...@@ -371,10 +369,8 @@ static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context,
tx_context->pkt_type, &buf->ab); tx_context->pkt_type, &buf->ab);
/* Get Duration and TimeStampOff */ /* Get Duration and TimeStampOff */
if (ieee80211_is_pspoll(hdr->frame_control)) { if (ieee80211_is_nullfunc(hdr->frame_control)) {
__le16 dur = cpu_to_le16(priv->current_aid | BIT(14) | BIT(15)); buf->duration = hdr->duration_id;
buf->duration = dur;
} else { } else {
buf->duration = vnt_get_duration_le(priv, tx_context->pkt_type, buf->duration = vnt_get_duration_le(priv, tx_context->pkt_type,
need_ack); need_ack);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment