summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/vt6656/rxtx.c72
-rw-r--r--drivers/staging/vt6656/rxtx.h7
2 files changed, 32 insertions, 47 deletions
diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c
index 2a9deb6273fc..7b05ee8b702c 100644
--- a/drivers/staging/vt6656/rxtx.c
+++ b/drivers/staging/vt6656/rxtx.c
@@ -100,8 +100,8 @@ static void *s_vGetFreeContext(struct vnt_private *pDevice);
100 100
101static void s_vGenerateTxParameter(struct vnt_private *pDevice, 101static void s_vGenerateTxParameter(struct vnt_private *pDevice,
102 u8 byPktType, u16 wCurrentRate, struct vnt_tx_buffer *tx_buffer, 102 u8 byPktType, u16 wCurrentRate, struct vnt_tx_buffer *tx_buffer,
103 void *pvRrvTime, void *rts_cts, u32 cbFrameSize, int bNeedACK, 103 void *rts_cts, u32 cbFrameSize, int bNeedACK, u32 uDMAIdx,
104 u32 uDMAIdx, struct ethhdr *psEthHeader, bool need_rts); 104 struct ethhdr *psEthHeader, bool need_rts);
105 105
106static u32 s_uFillDataHead(struct vnt_private *pDevice, 106static u32 s_uFillDataHead(struct vnt_private *pDevice,
107 u8 byPktType, u16 wCurrentRate, void *pTxDataHead, u32 cbFrameLength, 107 u8 byPktType, u16 wCurrentRate, void *pTxDataHead, u32 cbFrameLength,
@@ -841,8 +841,8 @@ static void s_vFillCTSHead(struct vnt_private *pDevice, u32 uDMAIdx,
841 841
842static void s_vGenerateTxParameter(struct vnt_private *pDevice, 842static void s_vGenerateTxParameter(struct vnt_private *pDevice,
843 u8 byPktType, u16 wCurrentRate, struct vnt_tx_buffer *tx_buffer, 843 u8 byPktType, u16 wCurrentRate, struct vnt_tx_buffer *tx_buffer,
844 void *pvRrvTime, void *rts_cts, u32 cbFrameSize, int bNeedACK, 844 void *rts_cts, u32 cbFrameSize, int bNeedACK, u32 uDMAIdx,
845 u32 uDMAIdx, struct ethhdr *psEthHeader, bool need_rts) 845 struct ethhdr *psEthHeader, bool need_rts)
846{ 846{
847 struct vnt_tx_fifo_head *pFifoHead = &tx_buffer->fifo_head; 847 struct vnt_tx_fifo_head *pFifoHead = &tx_buffer->fifo_head;
848 union vnt_tx_data_head *head = rts_cts; 848 union vnt_tx_data_head *head = rts_cts;
@@ -861,7 +861,7 @@ static void s_vGenerateTxParameter(struct vnt_private *pDevice,
861 byFBOption = AUTO_FB_1; 861 byFBOption = AUTO_FB_1;
862 } 862 }
863 863
864 if (!pvRrvTime) 864 if (!pFifoHead)
865 return; 865 return;
866 866
867 if (pDevice->bLongHeader) 867 if (pDevice->bLongHeader)
@@ -870,8 +870,8 @@ static void s_vGenerateTxParameter(struct vnt_private *pDevice,
870 if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) { 870 if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {
871 if (need_rts) { 871 if (need_rts) {
872 //Fill RsvTime 872 //Fill RsvTime
873 struct vnt_rrv_time_rts *pBuf = 873 struct vnt_rrv_time_rts *pBuf = &tx_buffer->tx_head.rts;
874 (struct vnt_rrv_time_rts *)pvRrvTime; 874
875 pBuf->wRTSTxRrvTime_aa = s_uGetRTSCTSRsvTime(pDevice, 2, 875 pBuf->wRTSTxRrvTime_aa = s_uGetRTSCTSRsvTime(pDevice, 2,
876 byPktType, cbFrameSize, wCurrentRate); 876 byPktType, cbFrameSize, wCurrentRate);
877 pBuf->wRTSTxRrvTime_ba = s_uGetRTSCTSRsvTime(pDevice, 1, 877 pBuf->wRTSTxRrvTime_ba = s_uGetRTSCTSRsvTime(pDevice, 1,
@@ -889,8 +889,8 @@ static void s_vGenerateTxParameter(struct vnt_private *pDevice,
889 } 889 }
890 else {//RTS_needless, PCF mode 890 else {//RTS_needless, PCF mode
891 //Fill RsvTime 891 //Fill RsvTime
892 struct vnt_rrv_time_cts *pBuf = 892 struct vnt_rrv_time_cts *pBuf = &tx_buffer->tx_head.cts;
893 (struct vnt_rrv_time_cts *)pvRrvTime; 893
894 pBuf->wTxRrvTime_a = vnt_rxtx_rsvtime_le16(pDevice, byPktType, 894 pBuf->wTxRrvTime_a = vnt_rxtx_rsvtime_le16(pDevice, byPktType,
895 cbFrameSize, wCurrentRate, bNeedACK); 895 cbFrameSize, wCurrentRate, bNeedACK);
896 pBuf->wTxRrvTime_b = vnt_rxtx_rsvtime_le16(pDevice, 896 pBuf->wTxRrvTime_b = vnt_rxtx_rsvtime_le16(pDevice,
@@ -906,8 +906,8 @@ static void s_vGenerateTxParameter(struct vnt_private *pDevice,
906 else if (byPktType == PK_TYPE_11A) { 906 else if (byPktType == PK_TYPE_11A) {
907 if (need_rts) { 907 if (need_rts) {
908 //Fill RsvTime 908 //Fill RsvTime
909 struct vnt_rrv_time_ab *pBuf = 909 struct vnt_rrv_time_ab *pBuf = &tx_buffer->tx_head.ab;
910 (struct vnt_rrv_time_ab *)pvRrvTime; 910
911 pBuf->wRTSTxRrvTime = s_uGetRTSCTSRsvTime(pDevice, 2, 911 pBuf->wRTSTxRrvTime = s_uGetRTSCTSRsvTime(pDevice, 2,
912 byPktType, cbFrameSize, wCurrentRate); 912 byPktType, cbFrameSize, wCurrentRate);
913 pBuf->wTxRrvTime = vnt_rxtx_rsvtime_le16(pDevice, byPktType, 913 pBuf->wTxRrvTime = vnt_rxtx_rsvtime_le16(pDevice, byPktType,
@@ -917,8 +917,8 @@ static void s_vGenerateTxParameter(struct vnt_private *pDevice,
917 bNeedACK, psEthHeader, wCurrentRate, byFBOption); 917 bNeedACK, psEthHeader, wCurrentRate, byFBOption);
918 } else { 918 } else {
919 //Fill RsvTime 919 //Fill RsvTime
920 struct vnt_rrv_time_ab *pBuf = 920 struct vnt_rrv_time_ab *pBuf = &tx_buffer->tx_head.ab;
921 (struct vnt_rrv_time_ab *)pvRrvTime; 921
922 pBuf->wTxRrvTime = vnt_rxtx_rsvtime_le16(pDevice, PK_TYPE_11A, 922 pBuf->wTxRrvTime = vnt_rxtx_rsvtime_le16(pDevice, PK_TYPE_11A,
923 cbFrameSize, wCurrentRate, bNeedACK); 923 cbFrameSize, wCurrentRate, bNeedACK);
924 } 924 }
@@ -926,8 +926,8 @@ static void s_vGenerateTxParameter(struct vnt_private *pDevice,
926 else if (byPktType == PK_TYPE_11B) { 926 else if (byPktType == PK_TYPE_11B) {
927 if (need_rts) { 927 if (need_rts) {
928 //Fill RsvTime 928 //Fill RsvTime
929 struct vnt_rrv_time_ab *pBuf = 929 struct vnt_rrv_time_ab *pBuf = &tx_buffer->tx_head.ab;
930 (struct vnt_rrv_time_ab *)pvRrvTime; 930
931 pBuf->wRTSTxRrvTime = s_uGetRTSCTSRsvTime(pDevice, 0, 931 pBuf->wRTSTxRrvTime = s_uGetRTSCTSRsvTime(pDevice, 0,
932 byPktType, cbFrameSize, wCurrentRate); 932 byPktType, cbFrameSize, wCurrentRate);
933 pBuf->wTxRrvTime = vnt_rxtx_rsvtime_le16(pDevice, PK_TYPE_11B, 933 pBuf->wTxRrvTime = vnt_rxtx_rsvtime_le16(pDevice, PK_TYPE_11B,
@@ -938,8 +938,8 @@ static void s_vGenerateTxParameter(struct vnt_private *pDevice,
938 } 938 }
939 else { //RTS_needless, non PCF mode 939 else { //RTS_needless, non PCF mode
940 //Fill RsvTime 940 //Fill RsvTime
941 struct vnt_rrv_time_ab *pBuf = 941 struct vnt_rrv_time_ab *pBuf = &tx_buffer->tx_head.ab;
942 (struct vnt_rrv_time_ab *)pvRrvTime; 942
943 pBuf->wTxRrvTime = vnt_rxtx_rsvtime_le16(pDevice, PK_TYPE_11B, 943 pBuf->wTxRrvTime = vnt_rxtx_rsvtime_le16(pDevice, PK_TYPE_11B,
944 cbFrameSize, wCurrentRate, bNeedACK); 944 cbFrameSize, wCurrentRate, bNeedACK);
945 } 945 }
@@ -972,7 +972,6 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
972 = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8}; 972 = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8};
973 u32 uDuration; 973 u32 uDuration;
974 u32 cbHeaderLength = 0, uPadding = 0; 974 u32 cbHeaderLength = 0, uPadding = 0;
975 void *pvRrvTime;
976 struct vnt_mic_hdr *pMICHDR; 975 struct vnt_mic_hdr *pMICHDR;
977 void *rts_cts = NULL; 976 void *rts_cts = NULL;
978 void *pvTxDataHd; 977 void *pvTxDataHd;
@@ -981,7 +980,8 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
981 u32 dwMICKey0, dwMICKey1, dwMIC_Priority; 980 u32 dwMICKey0, dwMICKey1, dwMIC_Priority;
982 u32 *pdwMIC_L, *pdwMIC_R; 981 u32 *pdwMIC_L, *pdwMIC_R;
983 int bSoftWEP = false; 982 int bSoftWEP = false;
984 pvRrvTime = pMICHDR = pvTxDataHd = NULL; 983
984 pMICHDR = pvTxDataHd = NULL;
985 985
986 if (bNeedEncryption && pTransmitKey->pvKeyTable) { 986 if (bNeedEncryption && pTransmitKey->pvKeyTable) {
987 if (((PSKeyTable)pTransmitKey->pvKeyTable)->bSoftWEP == true) 987 if (((PSKeyTable)pTransmitKey->pvKeyTable)->bSoftWEP == true)
@@ -1108,8 +1108,6 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
1108 if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {//802.11g packet 1108 if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {//802.11g packet
1109 if (byFBOption == AUTO_FB_NONE) { 1109 if (byFBOption == AUTO_FB_NONE) {
1110 if (bRTS == true) {//RTS_need 1110 if (bRTS == true) {//RTS_need
1111 pvRrvTime = (struct vnt_rrv_time_rts *)
1112 (pbyTxBufferAddr + wTxBufSize);
1113 pMICHDR = (struct vnt_mic_hdr *)(pbyTxBufferAddr + wTxBufSize + 1111 pMICHDR = (struct vnt_mic_hdr *)(pbyTxBufferAddr + wTxBufSize +
1114 sizeof(struct vnt_rrv_time_rts)); 1112 sizeof(struct vnt_rrv_time_rts));
1115 rts_cts = (struct vnt_rts_g *) (pbyTxBufferAddr + wTxBufSize + 1113 rts_cts = (struct vnt_rts_g *) (pbyTxBufferAddr + wTxBufSize +
@@ -1122,8 +1120,6 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
1122 sizeof(struct vnt_tx_datahead_g); 1120 sizeof(struct vnt_tx_datahead_g);
1123 } 1121 }
1124 else { //RTS_needless 1122 else { //RTS_needless
1125 pvRrvTime = (struct vnt_rrv_time_cts *)
1126 (pbyTxBufferAddr + wTxBufSize);
1127 pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr + wTxBufSize + 1123 pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr + wTxBufSize +
1128 sizeof(struct vnt_rrv_time_cts)); 1124 sizeof(struct vnt_rrv_time_cts));
1129 rts_cts = (struct vnt_cts *) (pbyTxBufferAddr + wTxBufSize + 1125 rts_cts = (struct vnt_cts *) (pbyTxBufferAddr + wTxBufSize +
@@ -1138,8 +1134,6 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
1138 } else { 1134 } else {
1139 // Auto Fall Back 1135 // Auto Fall Back
1140 if (bRTS == true) {//RTS_need 1136 if (bRTS == true) {//RTS_need
1141 pvRrvTime = (struct vnt_rrv_time_rts *)(pbyTxBufferAddr +
1142 wTxBufSize);
1143 pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr + wTxBufSize + 1137 pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr + wTxBufSize +
1144 sizeof(struct vnt_rrv_time_rts)); 1138 sizeof(struct vnt_rrv_time_rts));
1145 rts_cts = (struct vnt_rts_g_fb *)(pbyTxBufferAddr + wTxBufSize + 1139 rts_cts = (struct vnt_rts_g_fb *)(pbyTxBufferAddr + wTxBufSize +
@@ -1152,8 +1146,6 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
1152 sizeof(struct vnt_tx_datahead_g_fb); 1146 sizeof(struct vnt_tx_datahead_g_fb);
1153 } 1147 }
1154 else if (bRTS == false) { //RTS_needless 1148 else if (bRTS == false) { //RTS_needless
1155 pvRrvTime = (struct vnt_rrv_time_cts *)
1156 (pbyTxBufferAddr + wTxBufSize);
1157 pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr + wTxBufSize + 1149 pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr + wTxBufSize +
1158 sizeof(struct vnt_rrv_time_cts)); 1150 sizeof(struct vnt_rrv_time_cts));
1159 rts_cts = (struct vnt_cts_fb *) (pbyTxBufferAddr + wTxBufSize + 1151 rts_cts = (struct vnt_cts_fb *) (pbyTxBufferAddr + wTxBufSize +
@@ -1170,8 +1162,6 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
1170 else {//802.11a/b packet 1162 else {//802.11a/b packet
1171 if (byFBOption == AUTO_FB_NONE) { 1163 if (byFBOption == AUTO_FB_NONE) {
1172 if (bRTS == true) {//RTS_need 1164 if (bRTS == true) {//RTS_need
1173 pvRrvTime = (struct vnt_rrv_time_ab *) (pbyTxBufferAddr +
1174 wTxBufSize);
1175 pMICHDR = (struct vnt_mic_hdr *)(pbyTxBufferAddr + wTxBufSize + 1165 pMICHDR = (struct vnt_mic_hdr *)(pbyTxBufferAddr + wTxBufSize +
1176 sizeof(struct vnt_rrv_time_ab)); 1166 sizeof(struct vnt_rrv_time_ab));
1177 rts_cts = (struct vnt_rts_ab *) (pbyTxBufferAddr + wTxBufSize + 1167 rts_cts = (struct vnt_rts_ab *) (pbyTxBufferAddr + wTxBufSize +
@@ -1184,8 +1174,6 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
1184 sizeof(struct vnt_tx_datahead_ab); 1174 sizeof(struct vnt_tx_datahead_ab);
1185 } 1175 }
1186 else if (bRTS == false) { //RTS_needless, no MICHDR 1176 else if (bRTS == false) { //RTS_needless, no MICHDR
1187 pvRrvTime = (struct vnt_rrv_time_ab *)(pbyTxBufferAddr +
1188 wTxBufSize);
1189 pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr + wTxBufSize + 1177 pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr + wTxBufSize +
1190 sizeof(struct vnt_rrv_time_ab)); 1178 sizeof(struct vnt_rrv_time_ab));
1191 pvTxDataHd = (struct vnt_tx_datahead_ab *)(pbyTxBufferAddr + 1179 pvTxDataHd = (struct vnt_tx_datahead_ab *)(pbyTxBufferAddr +
@@ -1196,8 +1184,6 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
1196 } else { 1184 } else {
1197 // Auto Fall Back 1185 // Auto Fall Back
1198 if (bRTS == true) {//RTS_need 1186 if (bRTS == true) {//RTS_need
1199 pvRrvTime = (struct vnt_rrv_time_ab *)(pbyTxBufferAddr +
1200 wTxBufSize);
1201 pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr + wTxBufSize + 1187 pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr + wTxBufSize +
1202 sizeof(struct vnt_rrv_time_ab)); 1188 sizeof(struct vnt_rrv_time_ab));
1203 rts_cts = (struct vnt_rts_a_fb *)(pbyTxBufferAddr + wTxBufSize + 1189 rts_cts = (struct vnt_rts_a_fb *)(pbyTxBufferAddr + wTxBufSize +
@@ -1210,8 +1196,6 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
1210 sizeof(struct vnt_tx_datahead_a_fb); 1196 sizeof(struct vnt_tx_datahead_a_fb);
1211 } 1197 }
1212 else if (bRTS == false) { //RTS_needless 1198 else if (bRTS == false) { //RTS_needless
1213 pvRrvTime = (struct vnt_rrv_time_ab *)(pbyTxBufferAddr +
1214 wTxBufSize);
1215 pMICHDR = (struct vnt_mic_hdr *)(pbyTxBufferAddr + wTxBufSize + 1199 pMICHDR = (struct vnt_mic_hdr *)(pbyTxBufferAddr + wTxBufSize +
1216 sizeof(struct vnt_rrv_time_ab)); 1200 sizeof(struct vnt_rrv_time_ab));
1217 pvTxDataHd = (struct vnt_tx_datahead_a_fb *)(pbyTxBufferAddr + 1201 pvTxDataHd = (struct vnt_tx_datahead_a_fb *)(pbyTxBufferAddr +
@@ -1236,7 +1220,7 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType,
1236 1220
1237 //Fill FIFO,RrvTime,RTS,and CTS 1221 //Fill FIFO,RrvTime,RTS,and CTS
1238 s_vGenerateTxParameter(pDevice, byPktType, wCurrentRate, 1222 s_vGenerateTxParameter(pDevice, byPktType, wCurrentRate,
1239 tx_buffer, pvRrvTime, rts_cts, 1223 tx_buffer, rts_cts,
1240 cbFrameSize, bNeedACK, uDMAIdx, psEthHeader, bRTS); 1224 cbFrameSize, bNeedACK, uDMAIdx, psEthHeader, bRTS);
1241 //Fill DataHead 1225 //Fill DataHead
1242 uDuration = s_uFillDataHead(pDevice, byPktType, wCurrentRate, pvTxDataHd, cbFrameSize, uDMAIdx, bNeedACK, 1226 uDuration = s_uFillDataHead(pDevice, byPktType, wCurrentRate, pvTxDataHd, cbFrameSize, uDMAIdx, bNeedACK,
@@ -1474,7 +1458,7 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice,
1474 struct ethhdr sEthHeader; 1458 struct ethhdr sEthHeader;
1475 u8 byPktType, *pbyTxBufferAddr; 1459 u8 byPktType, *pbyTxBufferAddr;
1476 void *rts_cts = NULL; 1460 void *rts_cts = NULL;
1477 void *pvTxDataHd, *pvRrvTime, *pMICHDR; 1461 void *pvTxDataHd, *pMICHDR;
1478 u32 uDuration, cbReqCount, cbHeaderSize, cbFrameBodySize, cbFrameSize; 1462 u32 uDuration, cbReqCount, cbHeaderSize, cbFrameBodySize, cbFrameSize;
1479 int bNeedACK, bIsPSPOLL = false; 1463 int bNeedACK, bIsPSPOLL = false;
1480 u32 cbIVlen = 0, cbICVlen = 0, cbMIClen = 0, cbFCSlen = 4; 1464 u32 cbIVlen = 0, cbICVlen = 0, cbMIClen = 0, cbFCSlen = 4;
@@ -1606,8 +1590,6 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice,
1606 1590
1607 //Set RrvTime/RTS/CTS Buffer 1591 //Set RrvTime/RTS/CTS Buffer
1608 if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {//802.11g packet 1592 if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {//802.11g packet
1609
1610 pvRrvTime = (struct vnt_rrv_time_cts *) (pbyTxBufferAddr + wTxBufSize);
1611 pMICHDR = NULL; 1593 pMICHDR = NULL;
1612 rts_cts = (struct vnt_cts *) (pbyTxBufferAddr + wTxBufSize + 1594 rts_cts = (struct vnt_cts *) (pbyTxBufferAddr + wTxBufSize +
1613 sizeof(struct vnt_rrv_time_cts)); 1595 sizeof(struct vnt_rrv_time_cts));
@@ -1617,7 +1599,6 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice,
1617 sizeof(struct vnt_cts) + sizeof(struct vnt_tx_datahead_g); 1599 sizeof(struct vnt_cts) + sizeof(struct vnt_tx_datahead_g);
1618 } 1600 }
1619 else { // 802.11a/b packet 1601 else { // 802.11a/b packet
1620 pvRrvTime = (struct vnt_rrv_time_ab *) (pbyTxBufferAddr + wTxBufSize);
1621 pMICHDR = NULL; 1602 pMICHDR = NULL;
1622 pvTxDataHd = (struct vnt_tx_datahead_ab *) (pbyTxBufferAddr + 1603 pvTxDataHd = (struct vnt_tx_datahead_ab *) (pbyTxBufferAddr +
1623 wTxBufSize + sizeof(struct vnt_rrv_time_ab)); 1604 wTxBufSize + sizeof(struct vnt_rrv_time_ab));
@@ -1638,7 +1619,7 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice,
1638 1619
1639 /* Fill FIFO,RrvTime,RTS,and CTS */ 1620 /* Fill FIFO,RrvTime,RTS,and CTS */
1640 s_vGenerateTxParameter(pDevice, byPktType, wCurrentRate, 1621 s_vGenerateTxParameter(pDevice, byPktType, wCurrentRate,
1641 pTX_Buffer, pvRrvTime, rts_cts, 1622 pTX_Buffer, rts_cts,
1642 cbFrameSize, bNeedACK, TYPE_TXDMA0, &sEthHeader, false); 1623 cbFrameSize, bNeedACK, TYPE_TXDMA0, &sEthHeader, false);
1643 1624
1644 //Fill DataHead 1625 //Fill DataHead
@@ -1847,7 +1828,7 @@ void vDMA0_tx_80211(struct vnt_private *pDevice, struct sk_buff *skb)
1847 u16 wTxBufSize; 1828 u16 wTxBufSize;
1848 u32 cbMacHdLen; 1829 u32 cbMacHdLen;
1849 struct ethhdr sEthHeader; 1830 struct ethhdr sEthHeader;
1850 void *pvRrvTime, *pMICHDR; 1831 void *pMICHDR;
1851 u32 wCurrentRate = RATE_1M; 1832 u32 wCurrentRate = RATE_1M;
1852 PUWLAN_80211HDR p80211Header; 1833 PUWLAN_80211HDR p80211Header;
1853 u32 uNodeIndex = 0; 1834 u32 uNodeIndex = 0;
@@ -1858,7 +1839,7 @@ void vDMA0_tx_80211(struct vnt_private *pDevice, struct sk_buff *skb)
1858 u32 cbExtSuppRate = 0; 1839 u32 cbExtSuppRate = 0;
1859 struct vnt_usb_send_context *pContext; 1840 struct vnt_usb_send_context *pContext;
1860 1841
1861 pvRrvTime = pMICHDR = pvTxDataHd = NULL; 1842 pMICHDR = pvTxDataHd = NULL;
1862 1843
1863 if(skb->len <= WLAN_HDR_ADDR3_LEN) { 1844 if(skb->len <= WLAN_HDR_ADDR3_LEN) {
1864 cbFrameBodySize = 0; 1845 cbFrameBodySize = 0;
@@ -2017,7 +1998,6 @@ void vDMA0_tx_80211(struct vnt_private *pDevice, struct sk_buff *skb)
2017 //the rest of pTxBufHead->wFragCtl:FragTyp will be set later in s_vFillFragParameter() 1998 //the rest of pTxBufHead->wFragCtl:FragTyp will be set later in s_vFillFragParameter()
2018 1999
2019 if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {//802.11g packet 2000 if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {//802.11g packet
2020 pvRrvTime = (struct vnt_rrv_time_cts *) (pbyTxBufferAddr + wTxBufSize);
2021 pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr + wTxBufSize + 2001 pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr + wTxBufSize +
2022 sizeof(struct vnt_rrv_time_cts)); 2002 sizeof(struct vnt_rrv_time_cts));
2023 rts_cts = (struct vnt_cts *) (pbyTxBufferAddr + wTxBufSize + 2003 rts_cts = (struct vnt_cts *) (pbyTxBufferAddr + wTxBufSize +
@@ -2030,8 +2010,6 @@ void vDMA0_tx_80211(struct vnt_private *pDevice, struct sk_buff *skb)
2030 2010
2031 } 2011 }
2032 else {//802.11a/b packet 2012 else {//802.11a/b packet
2033
2034 pvRrvTime = (struct vnt_rrv_time_ab *) (pbyTxBufferAddr + wTxBufSize);
2035 pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr + wTxBufSize + 2013 pMICHDR = (struct vnt_mic_hdr *) (pbyTxBufferAddr + wTxBufSize +
2036 sizeof(struct vnt_rrv_time_ab)); 2014 sizeof(struct vnt_rrv_time_ab));
2037 pvTxDataHd = (struct vnt_tx_datahead_ab *)(pbyTxBufferAddr + 2015 pvTxDataHd = (struct vnt_tx_datahead_ab *)(pbyTxBufferAddr +
@@ -2052,7 +2030,7 @@ void vDMA0_tx_80211(struct vnt_private *pDevice, struct sk_buff *skb)
2052 2030
2053 /* Fill FIFO,RrvTime,RTS,and CTS */ 2031 /* Fill FIFO,RrvTime,RTS,and CTS */
2054 s_vGenerateTxParameter(pDevice, byPktType, wCurrentRate, 2032 s_vGenerateTxParameter(pDevice, byPktType, wCurrentRate,
2055 pTX_Buffer, pvRrvTime, rts_cts, 2033 pTX_Buffer, rts_cts,
2056 cbFrameSize, bNeedACK, TYPE_TXDMA0, &sEthHeader, false); 2034 cbFrameSize, bNeedACK, TYPE_TXDMA0, &sEthHeader, false);
2057 2035
2058 //Fill DataHead 2036 //Fill DataHead
diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h
index 137e62d47472..78b7b749ef96 100644
--- a/drivers/staging/vt6656/rxtx.h
+++ b/drivers/staging/vt6656/rxtx.h
@@ -180,6 +180,12 @@ union vnt_tx_data_head {
180 struct vnt_cts_fb cts_g_fb; 180 struct vnt_cts_fb cts_g_fb;
181}; 181};
182 182
183union vnt_tx_head {
184 struct vnt_rrv_time_rts rts;
185 struct vnt_rrv_time_cts cts;
186 struct vnt_rrv_time_ab ab;
187};
188
183struct vnt_tx_fifo_head { 189struct vnt_tx_fifo_head {
184 u32 adwTxKey[4]; 190 u32 adwTxKey[4];
185 u16 wFIFOCtl; 191 u16 wFIFOCtl;
@@ -193,6 +199,7 @@ struct vnt_tx_buffer {
193 u8 byPKTNO; 199 u8 byPKTNO;
194 u16 wTxByteCount; 200 u16 wTxByteCount;
195 struct vnt_tx_fifo_head fifo_head; 201 struct vnt_tx_fifo_head fifo_head;
202 union vnt_tx_head tx_head;
196} __packed; 203} __packed;
197 204
198struct vnt_beacon_buffer { 205struct vnt_beacon_buffer {