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