staging: vt6656: csBeacon_xmit merge structures.

Merge structures typedef struct tagSTxShortBufHead and the members of
struct vnt_tx_datahead_ab to form single structure vnt_tx_short_buf_head.

Remove the duplicate members in struct vnt_beacon_buffer already in
typedef struct tagSTxShortBufHead.

This removes the need for any pointer arithmetic.

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Malcolm Priestley 2013-11-24 13:25:25 +00:00 committed by Greg Kroah-Hartman
parent c47b0a3453
commit c7c57b24a5
3 changed files with 39 additions and 41 deletions

View File

@ -146,14 +146,6 @@
/*
* TX FIFO header
*/
typedef struct tagSTxShortBufHead {
u16 wFIFOCtl;
u16 wTimeStamp;
} __attribute__ ((__packed__))
STxShortBufHead, *PSTxShortBufHead;
typedef const STxShortBufHead *PCSTxShortBufHead;
typedef struct tagSBEACONCtl {
u32 BufReady:1;
u32 TSF:15;

View File

@ -1643,12 +1643,10 @@ CMD_STATUS csBeacon_xmit(struct vnt_private *pDevice,
struct vnt_tx_mgmt *pPacket)
{
struct vnt_beacon_buffer *pTX_Buffer;
struct vnt_tx_short_buf_head *short_head;
u32 cbFrameSize = pPacket->cbMPDULen + WLAN_FCS_LEN;
u32 cbHeaderSize = 0;
u16 wTxBufSize = sizeof(STxShortBufHead);
PSTxShortBufHead pTxBufHead;
struct ieee80211_hdr *pMACHeader;
struct vnt_tx_datahead_ab *pTxDataHead;
u16 wCurrentRate;
u32 cbFrameBodySize;
u32 cbReqCount;
@ -1664,39 +1662,40 @@ CMD_STATUS csBeacon_xmit(struct vnt_private *pDevice,
}
pTX_Buffer = (struct vnt_beacon_buffer *)&pContext->Data[0];
pbyTxBufferAddr = (u8 *)&(pTX_Buffer->wFIFOCtl);
short_head = &pTX_Buffer->short_head;
pbyTxBufferAddr = (u8 *)&short_head->fifo_ctl;
cbFrameBodySize = pPacket->cbPayloadLen;
pTxBufHead = (PSTxShortBufHead) pbyTxBufferAddr;
wTxBufSize = sizeof(STxShortBufHead);
cbHeaderSize = sizeof(struct vnt_tx_short_buf_head);
if (pDevice->byBBType == BB_TYPE_11A) {
wCurrentRate = RATE_6M;
pTxDataHead = (struct vnt_tx_datahead_ab *)
(pbyTxBufferAddr + wTxBufSize);
//Get SignalField,ServiceField,Length
BBvCalculateParameter(pDevice, cbFrameSize, wCurrentRate, PK_TYPE_11A,
&pTxDataHead->ab);
//Get Duration and TimeStampOff
pTxDataHead->wDuration = s_uGetDataDuration(pDevice,
PK_TYPE_11A, false);
pTxDataHead->wTimeStampOff = vnt_time_stamp_off(pDevice, wCurrentRate);
cbHeaderSize = wTxBufSize + sizeof(struct vnt_tx_datahead_ab);
} else {
wCurrentRate = RATE_1M;
pTxBufHead->wFIFOCtl |= FIFOCTL_11B;
pTxDataHead = (struct vnt_tx_datahead_ab *)
(pbyTxBufferAddr + wTxBufSize);
//Get SignalField,ServiceField,Length
BBvCalculateParameter(pDevice, cbFrameSize, wCurrentRate, PK_TYPE_11B,
&pTxDataHead->ab);
//Get Duration and TimeStampOff
pTxDataHead->wDuration = s_uGetDataDuration(pDevice,
if (pDevice->byBBType == BB_TYPE_11A) {
wCurrentRate = RATE_6M;
/* Get SignalField,ServiceField,Length */
BBvCalculateParameter(pDevice, cbFrameSize, wCurrentRate,
PK_TYPE_11A, &short_head->ab);
/* Get Duration and TimeStampOff */
short_head->duration = s_uGetDataDuration(pDevice,
PK_TYPE_11A, false);
short_head->time_stamp_off =
vnt_time_stamp_off(pDevice, wCurrentRate);
} else {
wCurrentRate = RATE_1M;
short_head->fifo_ctl |= FIFOCTL_11B;
/* Get SignalField,ServiceField,Length */
BBvCalculateParameter(pDevice, cbFrameSize, wCurrentRate,
PK_TYPE_11B, &short_head->ab);
/* Get Duration and TimeStampOff */
short_head->duration = s_uGetDataDuration(pDevice,
PK_TYPE_11B, false);
pTxDataHead->wTimeStampOff = vnt_time_stamp_off(pDevice, wCurrentRate);
cbHeaderSize = wTxBufSize + sizeof(struct vnt_tx_datahead_ab);
}
short_head->time_stamp_off =
vnt_time_stamp_off(pDevice, wCurrentRate);
}
//Generate Beacon Header
pMACHeader = (struct ieee80211_hdr *)(pbyTxBufferAddr + cbHeaderSize);

View File

@ -230,12 +230,19 @@ struct vnt_tx_buffer {
union vnt_tx_head tx_head;
} __packed;
struct vnt_tx_short_buf_head {
u16 fifo_ctl;
u16 time_stamp;
struct vnt_phy_field ab;
u16 duration;
u16 time_stamp_off;
} __packed;
struct vnt_beacon_buffer {
u8 byType;
u8 byPKTNO;
u16 wTxByteCount;
u16 wFIFOCtl;
u16 wTimeStamp;
struct vnt_tx_short_buf_head short_head;
} __packed;
void vDMA0_tx_80211(struct vnt_private *, struct sk_buff *skb);