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
34#define DEFAULT_MSDU_LIFETIME_RES_64us	8000 /* 64us */
35#define DEFAULT_MGN_LIFETIME_RES_64us	125  /* 64us */
36
37
38/*---------------------  Export Definitions -------------------------*/
39
40/*---------------------  Export Variables  --------------------------*/
41
42/*---------------------  Export Functions  --------------------------*/
43
44/* MIC HDR data header */
45struct vnt_mic_hdr {
46	u8 id;
47	u8 tx_priority;
48	u8 mic_addr2[ETH_ALEN];
49	u8 ccmp_pn[IEEE80211_CCMP_PN_LEN];
50	__be16 payload_len;
51	__be16 hlen;
52	__le16 frame_control;
53	u8 addr1[ETH_ALEN];
54	u8 addr2[ETH_ALEN];
55	u8 addr3[ETH_ALEN];
56	__le16 seq_ctrl;
57	u8 addr4[ETH_ALEN];
58	u16 packing; /* packing to 48 bytes */
59} __packed;
60
61/* RsvTime buffer header */
62struct vnt_rrv_time_rts {
63	__le16 rts_rrv_time_ba;
64	__le16 rts_rrv_time_aa;
65	__le16 rts_rrv_time_bb;
66	u16 reserved;
67	__le16 rrv_time_b;
68	__le16 rrv_time_a;
69} __packed;
70
71struct vnt_rrv_time_cts {
72	__le16 cts_rrv_time_ba;
73	u16 reserved;
74	__le16 rrv_time_b;
75	__le16 rrv_time_a;
76} __packed;
77
78struct vnt_rrv_time_ab {
79	__le16 rts_rrv_time;
80	__le16 rrv_time;
81} __packed;
82
83/* TX data header */
84struct vnt_tx_datahead_g {
85	struct vnt_phy_field b;
86	struct vnt_phy_field a;
87	__le16 duration_b;
88	__le16 duration_a;
89	__le16 time_stamp_off_b;
90	__le16 time_stamp_off_a;
91} __packed;
92
93struct vnt_tx_datahead_g_fb {
94	struct vnt_phy_field b;
95	struct vnt_phy_field a;
96	__le16 duration_b;
97	__le16 duration_a;
98	__le16 duration_a_f0;
99	__le16 duration_a_f1;
100	__le16 time_stamp_off_b;
101	__le16 time_stamp_off_a;
102} __packed;
103
104struct vnt_tx_datahead_ab {
105	struct vnt_phy_field ab;
106	__le16 duration;
107	__le16 time_stamp_off;
108} __packed;
109
110struct vnt_tx_datahead_a_fb {
111	struct vnt_phy_field a;
112	__le16 duration;
113	__le16 time_stamp_off;
114	__le16 duration_f0;
115	__le16 duration_f1;
116} __packed;
117
118/* RTS buffer header */
119struct vnt_rts_g {
120	struct vnt_phy_field b;
121	struct vnt_phy_field a;
122	__le16 duration_ba;
123	__le16 duration_aa;
124	__le16 duration_bb;
125	u16 reserved;
126	struct ieee80211_rts data;
127} __packed;
128
129struct 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} __packed;
142
143struct vnt_rts_ab {
144	struct vnt_phy_field ab;
145	__le16 duration;
146	u16 reserved;
147	struct ieee80211_rts data;
148} __packed;
149
150struct vnt_rts_a_fb {
151	struct vnt_phy_field a;
152	__le16 duration;
153	u16 reserved;
154	__le16 rts_duration_f0;
155	__le16 rts_duration_f1;
156	struct ieee80211_rts data;
157} __packed;
158
159/* CTS buffer header */
160struct vnt_cts {
161	struct vnt_phy_field b;
162	__le16 duration_ba;
163	u16 reserved;
164	struct ieee80211_cts data;
165	u16 reserved2;
166} __packed;
167
168struct vnt_cts_fb {
169	struct vnt_phy_field b;
170	__le16 duration_ba;
171	u16 reserved;
172	__le16 cts_duration_ba_f0;
173	__le16 cts_duration_ba_f1;
174	struct ieee80211_cts data;
175	u16 reserved2;
176} __packed;
177
178struct vnt_tx_fifo_head {
179	u8 tx_key[WLAN_KEY_LEN_CCMP];
180	__le16 fifo_ctl;
181	__le16 time_stamp;
182	__le16 frag_ctl;
183	__le16 current_rate;
184} __packed;
185
186struct vnt_tx_short_buf_head {
187	__le16 fifo_ctl;
188	u16 time_stamp;
189	struct vnt_phy_field ab;
190	__le16 duration;
191	__le16 time_stamp_off;
192} __packed;
193
194int vnt_generate_fifo_header(struct vnt_private *, u32,
195			     PSTxDesc head_td, struct sk_buff *);
196int vnt_beacon_make(struct vnt_private *, struct ieee80211_vif *);
197int vnt_beacon_enable(struct vnt_private *, struct ieee80211_vif *,
198		      struct ieee80211_bss_conf *);
199
200#endif // __RXTX_H__
201