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 "device.h" 33 #include "wcmd.h" 34 #include "baseband.h" 35 36 /* MIC HDR data header */ 37 struct vnt_mic_hdr { 38 u8 id; 39 u8 tx_priority; 40 u8 mic_addr2[6]; 41 __be32 tsc_47_16; 42 __be16 tsc_15_0; 43 __be16 payload_len; 44 __be16 hlen; 45 __le16 frame_control; 46 u8 addr1[6]; 47 u8 addr2[6]; 48 u8 addr3[6]; 49 __le16 seq_ctrl; 50 u8 addr4[6]; 51 u16 packing; /* packing to 48 bytes */ 52 } __packed; 53 54 /* RsvTime buffer header */ 55 struct vnt_rrv_time_rts { 56 __le16 rts_rrv_time_ba; 57 __le16 rts_rrv_time_aa; 58 __le16 rts_rrv_time_bb; 59 u16 wReserved; 60 __le16 rrv_time_b; 61 __le16 rrv_time_a; 62 } __packed; 63 64 struct vnt_rrv_time_cts { 65 __le16 cts_rrv_time_ba; 66 u16 wReserved; 67 __le16 rrv_time_b; 68 __le16 rrv_time_a; 69 } __packed; 70 71 struct vnt_rrv_time_ab { 72 __le16 rts_rrv_time; 73 __le16 rrv_time; 74 } __packed; 75 76 /* TX data header */ 77 struct vnt_tx_datahead_g { 78 struct vnt_phy_field b; 79 struct vnt_phy_field a; 80 __le16 duration_b; 81 __le16 duration_a; 82 __le16 time_stamp_off_b; 83 __le16 time_stamp_off_a; 84 } __packed; 85 86 struct vnt_tx_datahead_g_fb { 87 struct vnt_phy_field b; 88 struct vnt_phy_field a; 89 __le16 duration_b; 90 __le16 duration_a; 91 __le16 duration_a_f0; 92 __le16 duration_a_f1; 93 __le16 time_stamp_off_b; 94 __le16 time_stamp_off_a; 95 } __packed; 96 97 struct vnt_tx_datahead_ab { 98 struct vnt_phy_field ab; 99 __le16 duration; 100 __le16 time_stamp_off; 101 } __packed; 102 103 struct vnt_tx_datahead_a_fb { 104 struct vnt_phy_field a; 105 __le16 duration; 106 __le16 time_stamp_off; 107 __le16 duration_f0; 108 __le16 duration_f1; 109 } __packed; 110 111 /* RTS buffer header */ 112 struct vnt_rts_g { 113 struct vnt_phy_field b; 114 struct vnt_phy_field a; 115 __le16 duration_ba; 116 __le16 duration_aa; 117 __le16 duration_bb; 118 u16 wReserved; 119 struct ieee80211_rts data; 120 struct vnt_tx_datahead_g data_head; 121 } __packed; 122 123 struct vnt_rts_g_fb { 124 struct vnt_phy_field b; 125 struct vnt_phy_field a; 126 __le16 duration_ba; 127 __le16 duration_aa; 128 __le16 duration_bb; 129 u16 wReserved; 130 __le16 rts_duration_ba_f0; 131 __le16 rts_duration_aa_f0; 132 __le16 rts_duration_ba_f1; 133 __le16 rts_duration_aa_f1; 134 struct ieee80211_rts data; 135 struct vnt_tx_datahead_g_fb data_head; 136 } __packed; 137 138 struct vnt_rts_ab { 139 struct vnt_phy_field ab; 140 __le16 duration; 141 u16 wReserved; 142 struct ieee80211_rts data; 143 struct vnt_tx_datahead_ab data_head; 144 } __packed; 145 146 struct vnt_rts_a_fb { 147 struct vnt_phy_field a; 148 __le16 duration; 149 u16 wReserved; 150 __le16 rts_duration_f0; 151 __le16 rts_duration_f1; 152 struct ieee80211_rts data; 153 struct vnt_tx_datahead_a_fb data_head; 154 } __packed; 155 156 /* CTS buffer header */ 157 struct vnt_cts { 158 struct vnt_phy_field b; 159 __le16 duration_ba; 160 u16 wReserved; 161 struct ieee80211_cts data; 162 u16 reserved2; 163 struct vnt_tx_datahead_g data_head; 164 } __packed; 165 166 struct vnt_cts_fb { 167 struct vnt_phy_field b; 168 __le16 duration_ba; 169 u16 wReserved; 170 __le16 cts_duration_ba_f0; 171 __le16 cts_duration_ba_f1; 172 struct ieee80211_cts data; 173 u16 reserved2; 174 struct vnt_tx_datahead_g_fb data_head; 175 } __packed; 176 177 union vnt_tx_data_head { 178 /* rts g */ 179 struct vnt_rts_g rts_g; 180 struct vnt_rts_g_fb rts_g_fb; 181 /* rts a/b */ 182 struct vnt_rts_ab rts_ab; 183 struct vnt_rts_a_fb rts_a_fb; 184 /* cts g */ 185 struct vnt_cts cts_g; 186 struct vnt_cts_fb cts_g_fb; 187 /* no rts/cts */ 188 struct vnt_tx_datahead_a_fb data_head_a_fb; 189 struct vnt_tx_datahead_ab data_head_ab; 190 }; 191 192 struct vnt_tx_mic_hdr { 193 struct vnt_mic_hdr hdr; 194 union vnt_tx_data_head head; 195 } __packed; 196 197 union vnt_tx { 198 struct vnt_tx_mic_hdr mic; 199 union vnt_tx_data_head head; 200 }; 201 202 union vnt_tx_head { 203 struct { 204 struct vnt_rrv_time_rts rts; 205 union vnt_tx tx; 206 } __packed tx_rts; 207 struct { 208 struct vnt_rrv_time_cts cts; 209 union vnt_tx tx; 210 } __packed tx_cts; 211 struct { 212 struct vnt_rrv_time_ab ab; 213 union vnt_tx tx; 214 } __packed tx_ab; 215 }; 216 217 struct vnt_tx_fifo_head { 218 u32 adwTxKey[4]; 219 u16 wFIFOCtl; 220 __le16 time_stamp; 221 u16 wFragCtl; 222 __le16 current_rate; 223 } __packed; 224 225 struct vnt_tx_buffer { 226 u8 byType; 227 u8 byPKTNO; 228 __le16 tx_byte_count; 229 struct vnt_tx_fifo_head fifo_head; 230 union vnt_tx_head tx_head; 231 } __packed; 232 233 struct vnt_tx_short_buf_head { 234 u16 fifo_ctl; 235 u16 time_stamp; 236 struct vnt_phy_field ab; 237 __le16 duration; 238 __le16 time_stamp_off; 239 } __packed; 240 241 struct vnt_beacon_buffer { 242 u8 byType; 243 u8 byPKTNO; 244 __le16 tx_byte_count; 245 struct vnt_tx_short_buf_head short_head; 246 struct ieee80211_hdr hdr; 247 } __packed; 248 249 void vDMA0_tx_80211(struct vnt_private *, struct sk_buff *skb); 250 int nsDMA_tx_packet(struct vnt_private *, u32 uDMAIdx, struct sk_buff *skb); 251 CMD_STATUS csMgmt_xmit(struct vnt_private *, struct vnt_tx_mgmt *); 252 CMD_STATUS csBeacon_xmit(struct vnt_private *, struct vnt_tx_mgmt *); 253 int bRelayPacketSend(struct vnt_private *, u8 *pbySkbData, u32 uDataLen, 254 u32 uNodeIndex); 255 256 #endif /* __RXTX_H__ */ 257