• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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__ */
261