blob: b3ee6d01aa88a2af793b73754849592fe85f3ba9 [file] [log] [blame]
Forest Bond92b96792009-06-13 07:38:31 -04001/*
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
Forest Bond92b96792009-06-13 07:38:31 -040029#ifndef __RXTX_H__
30#define __RXTX_H__
31
Forest Bond92b96792009-06-13 07:38:31 -040032#include "device.h"
Forest Bond92b96792009-06-13 07:38:31 -040033#include "wcmd.h"
Malcolm Priestleyaed387c2013-08-20 22:52:30 +010034#include "baseband.h"
Forest Bond92b96792009-06-13 07:38:31 -040035
Malcolm Priestley5a5d6a82013-08-23 14:33:55 +010036/* MIC HDR data header */
37struct 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
Malcolm Priestley6398a592013-08-16 21:26:55 +010054/* RsvTime buffer header */
55struct vnt_rrv_time_rts {
56 u16 wRTSTxRrvTime_ba;
57 u16 wRTSTxRrvTime_aa;
58 u16 wRTSTxRrvTime_bb;
59 u16 wReserved;
60 u16 wTxRrvTime_b;
61 u16 wTxRrvTime_a;
62} __packed;
63
Malcolm Priestley4f990052013-08-16 23:38:57 +010064struct vnt_rrv_time_cts {
65 u16 wCTSTxRrvTime_ba;
66 u16 wReserved;
67 u16 wTxRrvTime_b;
68 u16 wTxRrvTime_a;
69} __packed;
70
Malcolm Priestley976467d2013-08-16 23:44:04 +010071struct vnt_rrv_time_ab {
72 u16 wRTSTxRrvTime;
73 u16 wTxRrvTime;
74} __packed;
75
Malcolm Priestley7e60a3de2013-08-16 23:48:03 +010076/* TX data header */
77struct vnt_tx_datahead_g {
Malcolm Priestleyaed387c2013-08-20 22:52:30 +010078 struct vnt_phy_field b;
79 struct vnt_phy_field a;
Malcolm Priestley7e60a3de2013-08-16 23:48:03 +010080 u16 wDuration_b;
81 u16 wDuration_a;
82 u16 wTimeStampOff_b;
83 u16 wTimeStampOff_a;
84} __packed;
85
Malcolm Priestley7c05c542013-08-16 23:49:15 +010086struct vnt_tx_datahead_g_fb {
Malcolm Priestleyaed387c2013-08-20 22:52:30 +010087 struct vnt_phy_field b;
88 struct vnt_phy_field a;
Malcolm Priestley7c05c542013-08-16 23:49:15 +010089 u16 wDuration_b;
90 u16 wDuration_a;
91 u16 wDuration_a_f0;
92 u16 wDuration_a_f1;
93 u16 wTimeStampOff_b;
94 u16 wTimeStampOff_a;
95} __packed;
96
Malcolm Priestley558becf2013-08-16 23:50:32 +010097struct vnt_tx_datahead_ab {
Malcolm Priestleyaed387c2013-08-20 22:52:30 +010098 struct vnt_phy_field ab;
Malcolm Priestley558becf2013-08-16 23:50:32 +010099 u16 wDuration;
100 u16 wTimeStampOff;
101} __packed;
102
Malcolm Priestley1da4ee22013-08-16 23:51:38 +0100103struct vnt_tx_datahead_a_fb {
Malcolm Priestleyaed387c2013-08-20 22:52:30 +0100104 struct vnt_phy_field a;
Malcolm Priestley1da4ee22013-08-16 23:51:38 +0100105 u16 wDuration;
106 u16 wTimeStampOff;
107 u16 wDuration_f0;
108 u16 wDuration_f1;
109} __packed;
110
Malcolm Priestleyc521cb52013-08-15 21:23:25 +0100111/* RTS buffer header */
112struct vnt_rts_g {
Malcolm Priestleyaed387c2013-08-20 22:52:30 +0100113 struct vnt_phy_field b;
114 struct vnt_phy_field a;
Malcolm Priestleyc521cb52013-08-15 21:23:25 +0100115 u16 wDuration_ba;
116 u16 wDuration_aa;
117 u16 wDuration_bb;
118 u16 wReserved;
119 struct ieee80211_rts data;
Malcolm Priestley78363fd2013-10-01 15:52:16 +0100120 struct vnt_tx_datahead_g data_head;
Malcolm Priestleyc521cb52013-08-15 21:23:25 +0100121} __packed;
122
123struct vnt_rts_g_fb {
Malcolm Priestleyaed387c2013-08-20 22:52:30 +0100124 struct vnt_phy_field b;
125 struct vnt_phy_field a;
Malcolm Priestleyc521cb52013-08-15 21:23:25 +0100126 u16 wDuration_ba;
127 u16 wDuration_aa;
128 u16 wDuration_bb;
129 u16 wReserved;
130 u16 wRTSDuration_ba_f0;
131 u16 wRTSDuration_aa_f0;
132 u16 wRTSDuration_ba_f1;
133 u16 wRTSDuration_aa_f1;
134 struct ieee80211_rts data;
Malcolm Priestley5b852f52013-10-01 15:54:56 +0100135 struct vnt_tx_datahead_g_fb data_head;
Malcolm Priestleyc521cb52013-08-15 21:23:25 +0100136} __packed;
137
138struct vnt_rts_ab {
Malcolm Priestleyaed387c2013-08-20 22:52:30 +0100139 struct vnt_phy_field ab;
Malcolm Priestleyc521cb52013-08-15 21:23:25 +0100140 u16 wDuration;
141 u16 wReserved;
142 struct ieee80211_rts data;
Malcolm Priestley5634a5a2013-10-01 16:00:20 +0100143 struct vnt_tx_datahead_ab data_head;
Malcolm Priestleyc521cb52013-08-15 21:23:25 +0100144} __packed;
145
146struct vnt_rts_a_fb {
Malcolm Priestleyaed387c2013-08-20 22:52:30 +0100147 struct vnt_phy_field a;
Malcolm Priestleyc521cb52013-08-15 21:23:25 +0100148 u16 wDuration;
149 u16 wReserved;
150 u16 wRTSDuration_f0;
151 u16 wRTSDuration_f1;
152 struct ieee80211_rts data;
Malcolm Priestleybd3f51f2013-10-01 15:56:48 +0100153 struct vnt_tx_datahead_a_fb data_head;
Malcolm Priestleyc521cb52013-08-15 21:23:25 +0100154} __packed;
155
Malcolm Priestleyf0c5ba22013-08-15 21:27:22 +0100156/* CTS buffer header */
157struct vnt_cts {
Malcolm Priestleyaed387c2013-08-20 22:52:30 +0100158 struct vnt_phy_field b;
Malcolm Priestleyf0c5ba22013-08-15 21:27:22 +0100159 u16 wDuration_ba;
160 u16 wReserved;
161 struct ieee80211_cts data;
162 u16 reserved2;
Malcolm Priestley78363fd2013-10-01 15:52:16 +0100163 struct vnt_tx_datahead_g data_head;
Malcolm Priestleyf0c5ba22013-08-15 21:27:22 +0100164} __packed;
165
166struct vnt_cts_fb {
Malcolm Priestleyaed387c2013-08-20 22:52:30 +0100167 struct vnt_phy_field b;
Malcolm Priestleyf0c5ba22013-08-15 21:27:22 +0100168 u16 wDuration_ba;
169 u16 wReserved;
170 u16 wCTSDuration_ba_f0;
171 u16 wCTSDuration_ba_f1;
172 struct ieee80211_cts data;
173 u16 reserved2;
Malcolm Priestley5b852f52013-10-01 15:54:56 +0100174 struct vnt_tx_datahead_g_fb data_head;
Malcolm Priestleyf0c5ba22013-08-15 21:27:22 +0100175} __packed;
176
Malcolm Priestley13fe62a2013-08-26 11:17:52 +0100177union 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;
Malcolm Priestleya90186e2013-10-01 15:58:54 +0100187 /* no rts/cts */
188 struct vnt_tx_datahead_a_fb data_head_a_fb;
Malcolm Priestleyc12dca02013-10-01 16:03:40 +0100189 struct vnt_tx_datahead_ab data_head_ab;
Malcolm Priestley13fe62a2013-08-26 11:17:52 +0100190};
191
Malcolm Priestley56c60e42013-09-26 18:49:44 +0100192struct vnt_tx_mic_hdr {
193 struct vnt_mic_hdr hdr;
194 union vnt_tx_data_head head;
195} __packed;
196
197union vnt_tx {
198 struct vnt_tx_mic_hdr mic;
199 union vnt_tx_data_head head;
200};
201
Malcolm Priestley9e38a5c2013-09-26 18:47:25 +0100202union vnt_tx_head {
Malcolm Priestley56c60e42013-09-26 18:49:44 +0100203 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;
Malcolm Priestley9e38a5c2013-09-26 18:47:25 +0100215};
216
Malcolm Priestleyd66caad2013-09-17 19:54:35 +0100217struct vnt_tx_fifo_head {
Malcolm Priestleyed743952012-11-11 15:34:51 +0000218 u32 adwTxKey[4];
Malcolm Priestleyf39c0d82013-08-15 19:34:37 +0100219 u16 wFIFOCtl;
220 u16 wTimeStamp;
221 u16 wFragCtl;
222 u16 wReserved;
223} __packed;
Forest Bond92b96792009-06-13 07:38:31 -0400224
Malcolm Priestleyd66caad2013-09-17 19:54:35 +0100225struct vnt_tx_buffer {
226 u8 byType;
227 u8 byPKTNO;
228 u16 wTxByteCount;
229 struct vnt_tx_fifo_head fifo_head;
Malcolm Priestley9e38a5c2013-09-26 18:47:25 +0100230 union vnt_tx_head tx_head;
Malcolm Priestleyd66caad2013-09-17 19:54:35 +0100231} __packed;
232
Malcolm Priestleyc7c57b22013-11-24 13:25:25 +0000233struct vnt_tx_short_buf_head {
234 u16 fifo_ctl;
235 u16 time_stamp;
236 struct vnt_phy_field ab;
237 u16 duration;
238 u16 time_stamp_off;
239} __packed;
240
Malcolm Priestley01f865b2013-08-15 19:40:08 +0100241struct vnt_beacon_buffer {
242 u8 byType;
243 u8 byPKTNO;
244 u16 wTxByteCount;
Malcolm Priestleyc7c57b22013-11-24 13:25:25 +0000245 struct vnt_tx_short_buf_head short_head;
Malcolm Priestley0b71fe32013-11-24 13:27:32 +0000246 struct ieee80211_hdr hdr;
Malcolm Priestley01f865b2013-08-15 19:40:08 +0100247} __packed;
Forest Bond92b96792009-06-13 07:38:31 -0400248
Malcolm Priestleyd56131d2013-01-17 23:15:22 +0000249void vDMA0_tx_80211(struct vnt_private *, struct sk_buff *skb);
250int nsDMA_tx_packet(struct vnt_private *, u32 uDMAIdx, struct sk_buff *skb);
251CMD_STATUS csMgmt_xmit(struct vnt_private *, struct vnt_tx_mgmt *);
252CMD_STATUS csBeacon_xmit(struct vnt_private *, struct vnt_tx_mgmt *);
253int bRelayPacketSend(struct vnt_private *, u8 *pbySkbData, u32 uDataLen,
254 u32 uNodeIndex);
Forest Bond92b96792009-06-13 07:38:31 -0400255
Andres Moree7b07d12010-05-01 19:12:26 -0300256#endif /* __RXTX_H__ */