Linux 3.18-rc3
[cascardo/linux.git] / drivers / staging / vt6655 / 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 "ttype.h"
33 #include "device.h"
34 #include "wcmd.h"
35
36 /*---------------------  Export Definitions -------------------------*/
37
38 /*---------------------  Export Variables  --------------------------*/
39
40 /*---------------------  Export Functions  --------------------------*/
41
42 /* MIC HDR data header */
43 struct vnt_mic_hdr {
44         u8 id;
45         u8 tx_priority;
46         u8 mic_addr2[ETH_ALEN];
47         u8 ccmp_pn[IEEE80211_CCMP_PN_LEN];
48         __be16 payload_len;
49         __be16 hlen;
50         __le16 frame_control;
51         u8 addr1[ETH_ALEN];
52         u8 addr2[ETH_ALEN];
53         u8 addr3[ETH_ALEN];
54         __le16 seq_ctrl;
55         u8 addr4[ETH_ALEN];
56         u16 packing; /* packing to 48 bytes */
57 } __packed;
58
59 /* RsvTime buffer header */
60 struct vnt_rrv_time_rts {
61         __le16 rts_rrv_time_ba;
62         __le16 rts_rrv_time_aa;
63         __le16 rts_rrv_time_bb;
64         u16 reserved;
65         __le16 rrv_time_b;
66         __le16 rrv_time_a;
67 } __packed;
68
69 struct vnt_rrv_time_cts {
70         __le16 cts_rrv_time_ba;
71         u16 reserved;
72         __le16 rrv_time_b;
73         __le16 rrv_time_a;
74 } __packed;
75
76 struct vnt_rrv_time_ab {
77         __le16 rts_rrv_time;
78         __le16 rrv_time;
79 } __packed;
80
81 /* TX data header */
82 struct vnt_tx_datahead_g {
83         struct vnt_phy_field b;
84         struct vnt_phy_field a;
85         __le16 duration_b;
86         __le16 duration_a;
87         __le16 time_stamp_off_b;
88         __le16 time_stamp_off_a;
89 } __packed;
90
91 struct vnt_tx_datahead_g_fb {
92         struct vnt_phy_field b;
93         struct vnt_phy_field a;
94         __le16 duration_b;
95         __le16 duration_a;
96         __le16 duration_a_f0;
97         __le16 duration_a_f1;
98         __le16 time_stamp_off_b;
99         __le16 time_stamp_off_a;
100 } __packed;
101
102 struct vnt_tx_datahead_ab {
103         struct vnt_phy_field ab;
104         __le16 duration;
105         __le16 time_stamp_off;
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 } __packed;
115
116 /* RTS buffer header */
117 struct vnt_rts_g {
118         struct vnt_phy_field b;
119         struct vnt_phy_field a;
120         __le16 duration_ba;
121         __le16 duration_aa;
122         __le16 duration_bb;
123         u16 reserved;
124         struct ieee80211_rts data;
125 } __packed;
126
127 struct vnt_rts_g_fb {
128         struct vnt_phy_field b;
129         struct vnt_phy_field a;
130         __le16 duration_ba;
131         __le16 duration_aa;
132         __le16 duration_bb;
133         u16 wReserved;
134         __le16 rts_duration_ba_f0;
135         __le16 rts_duration_aa_f0;
136         __le16 rts_duration_ba_f1;
137         __le16 rts_duration_aa_f1;
138         struct ieee80211_rts data;
139 } __packed;
140
141 struct vnt_rts_ab {
142         struct vnt_phy_field ab;
143         __le16 duration;
144         u16 reserved;
145         struct ieee80211_rts data;
146 } __packed;
147
148 struct vnt_rts_a_fb {
149         struct vnt_phy_field a;
150         __le16 duration;
151         u16 reserved;
152         __le16 rts_duration_f0;
153         __le16 rts_duration_f1;
154         struct ieee80211_rts data;
155 } __packed;
156
157 /* CTS buffer header */
158 struct vnt_cts {
159         struct vnt_phy_field b;
160         __le16 duration_ba;
161         u16 reserved;
162         struct ieee80211_cts data;
163         u16 reserved2;
164 } __packed;
165
166 struct vnt_cts_fb {
167         struct vnt_phy_field b;
168         __le16 duration_ba;
169         u16 reserved;
170         __le16 cts_duration_ba_f0;
171         __le16 cts_duration_ba_f1;
172         struct ieee80211_cts data;
173         u16 reserved2;
174 } __packed;
175
176 struct vnt_tx_short_buf_head {
177         __le16 fifo_ctl;
178         u16 time_stamp;
179         struct vnt_phy_field ab;
180         __le16 duration;
181         __le16 time_stamp_off;
182 } __packed;
183
184 void
185 vGenerateMACHeader(
186         struct vnt_private *,
187         unsigned char *pbyBufferAddr,
188         unsigned short wDuration,
189         PSEthernetHeader psEthHeader,
190         bool bNeedEncrypt,
191         unsigned short wFragType,
192         unsigned int uDMAIdx,
193         unsigned int uFragIdx
194 );
195
196 unsigned int
197 cbGetFragCount(
198         struct vnt_private *,
199         PSKeyItem        pTransmitKey,
200         unsigned int    cbFrameBodySize,
201         PSEthernetHeader psEthHeader
202 );
203
204 void
205 vGenerateFIFOHeader(struct vnt_private *, unsigned char byPktTyp,
206                     unsigned char *pbyTxBufferAddr, bool bNeedEncrypt,
207                     unsigned int cbPayloadSize, unsigned int uDMAIdx,
208                     PSTxDesc pHeadTD, PSEthernetHeader psEthHeader,
209                     unsigned char *pPacket, PSKeyItem pTransmitKey,
210                     unsigned int uNodeIndex, unsigned int *puMACfragNum,
211                     unsigned int *pcbHeaderSize);
212
213 void vDMA0_tx_80211(struct vnt_private *, struct sk_buff *skb,
214                     unsigned char *pbMPDU, unsigned int cbMPDULen);
215 CMD_STATUS csMgmt_xmit(struct vnt_private *, PSTxMgmtPacket pPacket);
216 CMD_STATUS csBeacon_xmit(struct vnt_private *, PSTxMgmtPacket pPacket);
217
218 #endif // __RXTX_H__