Merge tag 'dt-for-linus' of git://git.secretlab.ca/git/linux
[cascardo/linux.git] / drivers / staging / vt6656 / rxtx.h
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         u16 wTimeStamp;
221         u16 wFragCtl;
222         u16 wReserved;
223 } __packed;
224
225 struct vnt_tx_buffer {
226         u8 byType;
227         u8 byPKTNO;
228         u16 wTxByteCount;
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         u16 wTxByteCount;
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__ */