xref: /linux/drivers/staging/vt6655/rxtx.h (revision 5b5ea312)
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
4  * All rights reserved.
5  *
6  * Purpose:
7  *
8  * Author: Jerry Chen
9  *
10  * Date: Jun. 27, 2002
11  *
12  */
13 
14 #ifndef __RXTX_H__
15 #define __RXTX_H__
16 
17 #include "device.h"
18 
19 #define DEFAULT_MSDU_LIFETIME_RES_64us	8000 /* 64us */
20 #define DEFAULT_MGN_LIFETIME_RES_64us	125  /* 64us */
21 
22 /*---------------------  Export Definitions -------------------------*/
23 
24 /*---------------------  Export Variables  --------------------------*/
25 
26 /*---------------------  Export Functions  --------------------------*/
27 
28 /* MIC HDR data header */
29 struct vnt_mic_hdr {
30 	u8 id;
31 	u8 tx_priority;
32 	u8 mic_addr2[ETH_ALEN];
33 	u8 ccmp_pn[IEEE80211_CCMP_PN_LEN];
34 	__be16 payload_len;
35 	__be16 hlen;
36 	__le16 frame_control;
37 	u8 addr1[ETH_ALEN];
38 	u8 addr2[ETH_ALEN];
39 	u8 addr3[ETH_ALEN];
40 	__le16 seq_ctrl;
41 	u8 addr4[ETH_ALEN];
42 	u16 packing; /* packing to 48 bytes */
43 } __packed;
44 
45 /* RsvTime buffer header */
46 struct vnt_rrv_time_rts {
47 	__le16 rts_rrv_time_ba;
48 	__le16 rts_rrv_time_aa;
49 	__le16 rts_rrv_time_bb;
50 	u16 reserved;
51 	__le16 rrv_time_b;
52 	__le16 rrv_time_a;
53 } __packed;
54 
55 struct vnt_rrv_time_cts {
56 	__le16 cts_rrv_time_ba;
57 	u16 reserved;
58 	__le16 rrv_time_b;
59 	__le16 rrv_time_a;
60 } __packed;
61 
62 struct vnt_rrv_time_ab {
63 	__le16 rts_rrv_time;
64 	__le16 rrv_time;
65 } __packed;
66 
67 /* TX data header */
68 struct vnt_tx_datahead_g {
69 	struct vnt_phy_field b;
70 	struct vnt_phy_field a;
71 	__le16 duration_b;
72 	__le16 duration_a;
73 	__le16 time_stamp_off_b;
74 	__le16 time_stamp_off_a;
75 } __packed;
76 
77 struct vnt_tx_datahead_g_fb {
78 	struct vnt_phy_field b;
79 	struct vnt_phy_field a;
80 	__le16 duration_b;
81 	__le16 duration_a;
82 	__le16 duration_a_f0;
83 	__le16 duration_a_f1;
84 	__le16 time_stamp_off_b;
85 	__le16 time_stamp_off_a;
86 } __packed;
87 
88 struct vnt_tx_datahead_ab {
89 	struct vnt_phy_field ab;
90 	__le16 duration;
91 	__le16 time_stamp_off;
92 } __packed;
93 
94 struct vnt_tx_datahead_a_fb {
95 	struct vnt_phy_field a;
96 	__le16 duration;
97 	__le16 time_stamp_off;
98 	__le16 duration_f0;
99 	__le16 duration_f1;
100 } __packed;
101 
102 /* RTS buffer header */
103 struct vnt_rts_g {
104 	struct vnt_phy_field b;
105 	struct vnt_phy_field a;
106 	__le16 duration_ba;
107 	__le16 duration_aa;
108 	__le16 duration_bb;
109 	u16 reserved;
110 	struct ieee80211_rts data;
111 } __packed __aligned(2);
112 
113 struct vnt_rts_g_fb {
114 	struct vnt_phy_field b;
115 	struct vnt_phy_field a;
116 	__le16 duration_ba;
117 	__le16 duration_aa;
118 	__le16 duration_bb;
119 	u16 wReserved;
120 	__le16 rts_duration_ba_f0;
121 	__le16 rts_duration_aa_f0;
122 	__le16 rts_duration_ba_f1;
123 	__le16 rts_duration_aa_f1;
124 	struct ieee80211_rts data;
125 } __packed __aligned(2);
126 
127 struct vnt_rts_ab {
128 	struct vnt_phy_field ab;
129 	__le16 duration;
130 	u16 reserved;
131 	struct ieee80211_rts data;
132 } __packed __aligned(2);
133 
134 struct vnt_rts_a_fb {
135 	struct vnt_phy_field a;
136 	__le16 duration;
137 	u16 reserved;
138 	__le16 rts_duration_f0;
139 	__le16 rts_duration_f1;
140 	struct ieee80211_rts data;
141 } __packed __aligned(2);
142 
143 /* CTS buffer header */
144 struct vnt_cts {
145 	struct vnt_phy_field b;
146 	__le16 duration_ba;
147 	u16 reserved;
148 	struct ieee80211_cts data;
149 	u16 reserved2;
150 } __packed __aligned(2);
151 
152 struct vnt_cts_fb {
153 	struct vnt_phy_field b;
154 	__le16 duration_ba;
155 	u16 reserved;
156 	__le16 cts_duration_ba_f0;
157 	__le16 cts_duration_ba_f1;
158 	struct ieee80211_cts data;
159 	u16 reserved2;
160 } __packed __aligned(2);
161 
162 struct vnt_tx_fifo_head {
163 	u8 tx_key[WLAN_KEY_LEN_CCMP];
164 	__le16 fifo_ctl;
165 	__le16 time_stamp;
166 	__le16 frag_ctl;
167 	__le16 current_rate;
168 } __packed;
169 
170 struct vnt_tx_short_buf_head {
171 	__le16 fifo_ctl;
172 	u16 time_stamp;
173 	struct vnt_phy_field ab;
174 	__le16 duration;
175 	__le16 time_stamp_off;
176 } __packed;
177 
178 int vnt_generate_fifo_header(struct vnt_private *priv, u32 dma_idx,
179 			     struct vnt_tx_desc *head_td, struct sk_buff *skb);
180 int vnt_beacon_make(struct vnt_private *priv, struct ieee80211_vif *vif);
181 int vnt_beacon_enable(struct vnt_private *priv, struct ieee80211_vif *vif,
182 		      struct ieee80211_bss_conf *conf);
183 
184 #endif /* __RXTX_H__ */
185