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 */
43struct 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 */
60struct 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
69struct 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
76struct vnt_rrv_time_ab {
77	__le16 rts_rrv_time;
78	__le16 rrv_time;
79} __packed;
80
81/* TX data header */
82struct 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
91struct 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
102struct vnt_tx_datahead_ab {
103	struct vnt_phy_field ab;
104	__le16 duration;
105	__le16 time_stamp_off;
106} __packed;
107
108struct 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 */
117struct 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
127struct 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
141struct vnt_rts_ab {
142	struct vnt_phy_field ab;
143	__le16 duration;
144	u16 reserved;
145	struct ieee80211_rts data;
146} __packed;
147
148struct 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 */
158struct 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
166struct 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
176struct 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
184void
185vGenerateMACHeader(
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
196unsigned int
197cbGetFragCount(
198	struct vnt_private *,
199	PSKeyItem        pTransmitKey,
200	unsigned int	cbFrameBodySize,
201	PSEthernetHeader psEthHeader
202);
203
204void
205vGenerateFIFOHeader(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
213void vDMA0_tx_80211(struct vnt_private *, struct sk_buff *skb,
214		    unsigned char *pbMPDU, unsigned int cbMPDULen);
215CMD_STATUS csMgmt_xmit(struct vnt_private *, PSTxMgmtPacket pPacket);
216CMD_STATUS csBeacon_xmit(struct vnt_private *, PSTxMgmtPacket pPacket);
217
218#endif // __RXTX_H__
219