1/* 2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. 3 * All rights reserved. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * File: rxtx.h 20 * 21 * Purpose: 22 * 23 * Author: Jerry Chen 24 * 25 * Date: Jun. 27, 2002 26 * 27 */ 28 29#ifndef __RXTX_H__ 30#define __RXTX_H__ 31 32#include "ttype.h" 33#include "device.h" 34#include "wcmd.h" 35 36/*--------------------- Export Definitions -------------------------*/ 37 38/*--------------------- Export Variables --------------------------*/ 39 40/*--------------------- Export Functions --------------------------*/ 41 42/* MIC HDR data header */ 43struct vnt_mic_hdr { 44 u8 id; 45 u8 tx_priority; 46 u8 mic_addr2[ETH_ALEN]; 47 u8 ccmp_pn[IEEE80211_CCMP_PN_LEN]; 48 __be16 payload_len; 49 __be16 hlen; 50 __le16 frame_control; 51 u8 addr1[ETH_ALEN]; 52 u8 addr2[ETH_ALEN]; 53 u8 addr3[ETH_ALEN]; 54 __le16 seq_ctrl; 55 u8 addr4[ETH_ALEN]; 56 u16 packing; /* packing to 48 bytes */ 57} __packed; 58 59/* RsvTime buffer header */ 60struct vnt_rrv_time_rts { 61 __le16 rts_rrv_time_ba; 62 __le16 rts_rrv_time_aa; 63 __le16 rts_rrv_time_bb; 64 u16 reserved; 65 __le16 rrv_time_b; 66 __le16 rrv_time_a; 67} __packed; 68 69struct vnt_rrv_time_cts { 70 __le16 cts_rrv_time_ba; 71 u16 reserved; 72 __le16 rrv_time_b; 73 __le16 rrv_time_a; 74} __packed; 75 76struct vnt_rrv_time_ab { 77 __le16 rts_rrv_time; 78 __le16 rrv_time; 79} __packed; 80 81/* TX data header */ 82struct vnt_tx_datahead_g { 83 struct vnt_phy_field b; 84 struct vnt_phy_field a; 85 __le16 duration_b; 86 __le16 duration_a; 87 __le16 time_stamp_off_b; 88 __le16 time_stamp_off_a; 89} __packed; 90 91struct vnt_tx_datahead_g_fb { 92 struct vnt_phy_field b; 93 struct vnt_phy_field a; 94 __le16 duration_b; 95 __le16 duration_a; 96 __le16 duration_a_f0; 97 __le16 duration_a_f1; 98 __le16 time_stamp_off_b; 99 __le16 time_stamp_off_a; 100} __packed; 101 102struct vnt_tx_datahead_ab { 103 struct vnt_phy_field ab; 104 __le16 duration; 105 __le16 time_stamp_off; 106} __packed; 107 108struct vnt_tx_datahead_a_fb { 109 struct vnt_phy_field a; 110 __le16 duration; 111 __le16 time_stamp_off; 112 __le16 duration_f0; 113 __le16 duration_f1; 114} __packed; 115 116/* RTS buffer header */ 117struct vnt_rts_g { 118 struct vnt_phy_field b; 119 struct vnt_phy_field a; 120 __le16 duration_ba; 121 __le16 duration_aa; 122 __le16 duration_bb; 123 u16 reserved; 124 struct ieee80211_rts data; 125} __packed; 126 127struct vnt_rts_g_fb { 128 struct vnt_phy_field b; 129 struct vnt_phy_field a; 130 __le16 duration_ba; 131 __le16 duration_aa; 132 __le16 duration_bb; 133 u16 wReserved; 134 __le16 rts_duration_ba_f0; 135 __le16 rts_duration_aa_f0; 136 __le16 rts_duration_ba_f1; 137 __le16 rts_duration_aa_f1; 138 struct ieee80211_rts data; 139} __packed; 140 141struct vnt_rts_ab { 142 struct vnt_phy_field ab; 143 __le16 duration; 144 u16 reserved; 145 struct ieee80211_rts data; 146} __packed; 147 148struct vnt_rts_a_fb { 149 struct vnt_phy_field a; 150 __le16 duration; 151 u16 reserved; 152 __le16 rts_duration_f0; 153 __le16 rts_duration_f1; 154 struct ieee80211_rts data; 155} __packed; 156 157/* CTS buffer header */ 158struct vnt_cts { 159 struct vnt_phy_field b; 160 __le16 duration_ba; 161 u16 reserved; 162 struct ieee80211_cts data; 163 u16 reserved2; 164} __packed; 165 166struct vnt_cts_fb { 167 struct vnt_phy_field b; 168 __le16 duration_ba; 169 u16 reserved; 170 __le16 cts_duration_ba_f0; 171 __le16 cts_duration_ba_f1; 172 struct ieee80211_cts data; 173 u16 reserved2; 174} __packed; 175 176struct vnt_tx_short_buf_head { 177 __le16 fifo_ctl; 178 u16 time_stamp; 179 struct vnt_phy_field ab; 180 __le16 duration; 181 __le16 time_stamp_off; 182} __packed; 183 184void 185vGenerateMACHeader( 186 struct vnt_private *, 187 unsigned char *pbyBufferAddr, 188 unsigned short wDuration, 189 PSEthernetHeader psEthHeader, 190 bool bNeedEncrypt, 191 unsigned short wFragType, 192 unsigned int uDMAIdx, 193 unsigned int uFragIdx 194); 195 196unsigned int 197cbGetFragCount( 198 struct vnt_private *, 199 PSKeyItem pTransmitKey, 200 unsigned int cbFrameBodySize, 201 PSEthernetHeader psEthHeader 202); 203 204void 205vGenerateFIFOHeader(struct vnt_private *, unsigned char byPktTyp, 206 unsigned char *pbyTxBufferAddr, bool bNeedEncrypt, 207 unsigned int cbPayloadSize, unsigned int uDMAIdx, 208 PSTxDesc pHeadTD, PSEthernetHeader psEthHeader, 209 unsigned char *pPacket, PSKeyItem pTransmitKey, 210 unsigned int uNodeIndex, unsigned int *puMACfragNum, 211 unsigned int *pcbHeaderSize); 212 213void vDMA0_tx_80211(struct vnt_private *, struct sk_buff *skb, 214 unsigned char *pbMPDU, unsigned int cbMPDULen); 215CMD_STATUS csMgmt_xmit(struct vnt_private *, PSTxMgmtPacket pPacket); 216CMD_STATUS csBeacon_xmit(struct vnt_private *, PSTxMgmtPacket pPacket); 217 218#endif // __RXTX_H__ 219