Create room for vnt_tx_short_buf_head in sk_buff and vnt_tx_usb_header. The struct ieee80211_mgmt is not longer in the header and is at the initial skb->data point. Signed-off-by: Malcolm Priestley <tvboxspy@xxxxxxxxx> --- drivers/staging/vt6656/rxtx.c | 22 +++++++++------------- drivers/staging/vt6656/rxtx.h | 5 +---- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 792833f8192a..cf194c95df03 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -684,8 +684,9 @@ static int vnt_beacon_xmit(struct vnt_private *priv, struct sk_buff *skb) spin_unlock_irqrestore(&priv->lock, flags); - beacon_buffer = (struct vnt_beacon_buffer *)&context->data[0]; - short_head = &beacon_buffer->short_head; + mgmt_hdr = (struct ieee80211_mgmt *)skb->data; + short_head = skb_push(skb, sizeof(*short_head)); + count = skb->len; if (priv->bb_type == BB_TYPE_11A) { current_rate = RATE_6M; @@ -710,10 +711,6 @@ static int vnt_beacon_xmit(struct vnt_private *priv, struct sk_buff *skb) vnt_time_stamp_off(priv, current_rate); } - /* Generate Beacon Header */ - mgmt_hdr = &beacon_buffer->mgmt_hdr; - memcpy(mgmt_hdr, skb->data, skb->len); - /* Get Duration */ short_head->duration = mgmt_hdr->duration; @@ -732,15 +729,14 @@ static int vnt_beacon_xmit(struct vnt_private *priv, struct sk_buff *skb) if (priv->seq_counter > 0x0fff) priv->seq_counter = 0; - count = sizeof(struct vnt_tx_short_buf_head) + skb->len; - - beacon_buffer->tx_byte_count = cpu_to_le16(count); - beacon_buffer->pkt_no = context->pkt_no; - beacon_buffer->type = 0x01; + beacon_buffer = skb_push(skb, sizeof(struct vnt_tx_usb_header)); + beacon_buffer->usb.tx_byte_count = cpu_to_le16(count); + beacon_buffer->usb.pkt_no = context->pkt_no; + beacon_buffer->usb.type = 0x01; context->type = CONTEXT_BEACON_PACKET; - context->tx_buffer = &context->data; - context->buf_len = count + 4; /* USB header */ + context->tx_buffer = beacon_buffer; + context->buf_len = skb->len; spin_lock_irqsave(&priv->lock, flags); diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 819b45394673..fd64d0838e34 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -180,11 +180,8 @@ struct vnt_tx_short_buf_head { } __packed; struct vnt_beacon_buffer { - u8 type; - u8 pkt_no; - __le16 tx_byte_count; + struct vnt_tx_usb_header usb; struct vnt_tx_short_buf_head short_head; - struct ieee80211_mgmt mgmt_hdr; } __packed; int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb); -- 2.25.1