xref: /openbmc/linux/drivers/staging/vt6655/rxtx.h (revision 23c2b932)
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 */
45 struct 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 */
62 struct 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 
71 struct 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 
78 struct vnt_rrv_time_ab {
79 	__le16 rts_rrv_time;
80 	__le16 rrv_time;
81 } __packed;
82 
83 /* TX data header */
84 struct 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 
93 struct 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 
104 struct vnt_tx_datahead_ab {
105 	struct vnt_phy_field ab;
106 	__le16 duration;
107 	__le16 time_stamp_off;
108 } __packed;
109 
110 struct 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 */
119 struct 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 
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 } __packed;
142 
143 struct vnt_rts_ab {
144 	struct vnt_phy_field ab;
145 	__le16 duration;
146 	u16 reserved;
147 	struct ieee80211_rts data;
148 } __packed;
149 
150 struct 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 */
160 struct 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 
168 struct 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 
178 struct 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 
186 struct 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 
194 int vnt_generate_fifo_header(struct vnt_private *, u32,
195 			     struct vnt_tx_desc *head_td, struct sk_buff *);
196 int vnt_beacon_make(struct vnt_private *, struct ieee80211_vif *);
197 int vnt_beacon_enable(struct vnt_private *, struct ieee80211_vif *,
198 		      struct ieee80211_bss_conf *);
199 
200 #endif /* __RXTX_H__ */
201