1/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
4 * All rights reserved.
5 *
6 * Purpose: MAC Data structure
7 *
8 * Author: Tevin Chen
9 *
10 * Date: Mar 17, 1997
11 *
12 */
13
14#ifndef __DEVICE_H__
15#define __DEVICE_H__
16
17#include <linux/module.h>
18#include <linux/types.h>
19#include <linux/pci.h>
20#include <linux/etherdevice.h>
21#include <linux/skbuff.h>
22#include <linux/interrupt.h>
23#include <linux/crc32.h>
24#include <net/mac80211.h>
25
26/* device specific */
27
28#include "device_cfg.h"
29#include "card.h"
30#include "srom.h"
31#include "desc.h"
32#include "key.h"
33#include "mac.h"
34
35/*---------------------  Export Definitions -------------------------*/
36
37#define RATE_1M		0
38#define RATE_2M		1
39#define RATE_5M		2
40#define RATE_11M	3
41#define RATE_6M		4
42#define RATE_9M		5
43#define RATE_12M	6
44#define RATE_18M	7
45#define RATE_24M	8
46#define RATE_36M	9
47#define RATE_48M	10
48#define RATE_54M	11
49#define MAX_RATE	12
50
51#define AUTO_FB_NONE            0
52#define AUTO_FB_0               1
53#define AUTO_FB_1               2
54
55#define FB_RATE0                0
56#define FB_RATE1                1
57
58/* Antenna Mode */
59#define ANT_A                   0
60#define ANT_B                   1
61#define ANT_DIVERSITY           2
62#define ANT_RXD_TXA             3
63#define ANT_RXD_TXB             4
64#define ANT_UNKNOWN             0xFF
65
66#define BB_VGA_LEVEL            4
67#define BB_VGA_CHANGE_THRESHOLD 16
68
69#define MAKE_BEACON_RESERVED	10  /* (us) */
70
71/* BUILD OBJ mode */
72
73#define	AVAIL_TD(p, q)	((p)->opts.tx_descs[(q)] - ((p)->iTDUsed[(q)]))
74
75/* 0:11A 1:11B 2:11G */
76#define BB_TYPE_11A    0
77#define BB_TYPE_11B    1
78#define BB_TYPE_11G    2
79
80/* 0:11a, 1:11b, 2:11gb (only CCK in BasicRate), 3:11ga (OFDM in BasicRate) */
81#define PK_TYPE_11A     0
82#define PK_TYPE_11B     1
83#define PK_TYPE_11GB    2
84#define PK_TYPE_11GA    3
85
86#define OWNED_BY_HOST	0
87#define	OWNED_BY_NIC	1
88
89struct vnt_options {
90	int rx_descs0;		/* Number of RX descriptors0 */
91	int rx_descs1;		/* Number of RX descriptors1 */
92	int tx_descs[2];	/* Number of TX descriptors 0, 1 */
93	int int_works;		/* interrupt limits */
94	int short_retry;
95	int long_retry;
96	int bbp_type;
97	u32 flags;
98};
99
100struct vnt_private {
101	struct pci_dev *pcid;
102	/* mac80211 */
103	struct ieee80211_hw *hw;
104	struct ieee80211_vif *vif;
105	unsigned long key_entry_inuse;
106	u32 basic_rates;
107	u16 current_aid;
108	int mc_list_count;
109	u8 mac_hw;
110
111/* dma addr, rx/tx pool */
112	dma_addr_t                  pool_dma;
113	dma_addr_t                  rd0_pool_dma;
114	dma_addr_t                  rd1_pool_dma;
115
116	dma_addr_t                  td0_pool_dma;
117	dma_addr_t                  td1_pool_dma;
118
119	dma_addr_t                  tx_bufs_dma0;
120	dma_addr_t                  tx_bufs_dma1;
121	dma_addr_t                  tx_beacon_dma;
122
123	unsigned char *tx0_bufs;
124	unsigned char *tx1_bufs;
125	unsigned char *tx_beacon_bufs;
126
127	void __iomem                *port_offset;
128	u32                         memaddr;
129	u32                         ioaddr;
130
131	spinlock_t                  lock;
132
133	volatile int                iTDUsed[TYPE_MAXTD];
134
135	struct vnt_tx_desc *apCurrTD[TYPE_MAXTD];
136	struct vnt_tx_desc *tail_td[TYPE_MAXTD];
137
138	struct vnt_tx_desc *apTD0Rings;
139	struct vnt_tx_desc *apTD1Rings;
140
141	struct vnt_rx_desc *aRD0Ring;
142	struct vnt_rx_desc *aRD1Ring;
143	struct vnt_rx_desc *pCurrRD[TYPE_MAXRD];
144
145	struct vnt_options opts;
146
147	u32                         flags;
148
149	u32                         rx_buf_sz;
150	u8 rx_rate;
151
152	u32                         rx_bytes;
153
154	/* Version control */
155	unsigned char local_id;
156	unsigned char rf_type;
157
158	unsigned char max_pwr_level;
159	unsigned char byZoneType;
160	bool bZoneRegExist;
161	unsigned char byOriginalZonetype;
162
163	unsigned char abyCurrentNetAddr[ETH_ALEN]; __aligned(2)
164	bool bLinkPass;          /* link status: OK or fail */
165
166	unsigned int current_rssi;
167	unsigned char byCurrSQ;
168
169	unsigned long dwTxAntennaSel;
170	unsigned long dwRxAntennaSel;
171	unsigned char byAntennaCount;
172	unsigned char byRxAntennaMode;
173	unsigned char byTxAntennaMode;
174	bool bTxRxAntInv;
175
176	unsigned char *pbyTmpBuff;
177	unsigned int	uSIFS;    /* Current SIFS */
178	unsigned int	uDIFS;    /* Current DIFS */
179	unsigned int	uEIFS;    /* Current EIFS */
180	unsigned int	uSlot;    /* Current SlotTime */
181	unsigned int	uCwMin;   /* Current CwMin */
182	unsigned int	uCwMax;   /* CwMax is fixed on 1023. */
183	/* PHY parameter */
184	unsigned char sifs;
185	unsigned char difs;
186	unsigned char eifs;
187	unsigned char slot;
188	unsigned char cw_max_min;
189
190	u8		byBBType; /* 0:11A, 1:11B, 2:11G */
191	u8		packet_type; /*
192				       * 0:11a,1:11b,2:11gb (only CCK
193				       * in BasicRate), 3:11ga (OFDM in
194				       * Basic Rate)
195				       */
196	unsigned short wBasicRate;
197	unsigned char byACKRate;
198	unsigned char byTopOFDMBasicRate;
199	unsigned char byTopCCKBasicRate;
200
201	unsigned char byMinChannel;
202	unsigned char byMaxChannel;
203
204	unsigned char preamble_type;
205	unsigned char byShortPreamble;
206
207	unsigned short wCurrentRate;
208	unsigned char byShortRetryLimit;
209	unsigned char byLongRetryLimit;
210	enum nl80211_iftype op_mode;
211	bool bBSSIDFilter;
212	unsigned short wMaxTransmitMSDULifetime;
213
214	bool bEncryptionEnable;
215	bool bLongHeader;
216	bool short_slot_time;
217	bool bProtectMode;
218	bool bNonERPPresent;
219	bool bBarkerPreambleMd;
220
221	bool bRadioControlOff;
222	bool radio_off;
223	bool bEnablePSMode;
224	unsigned short wListenInterval;
225	bool bPWBitOn;
226
227	/* GPIO Radio Control */
228	unsigned char byRadioCtl;
229	unsigned char byGPIO;
230	bool hw_radio_off;
231	bool bPrvActive4RadioOFF;
232	bool bGPIOBlockRead;
233
234	/* Beacon related */
235	unsigned short wSeqCounter;
236	unsigned short wBCNBufLen;
237	bool bBeaconBufReady;
238	bool bBeaconSent;
239	bool bIsBeaconBufReadySet;
240	unsigned int	cbBeaconBufReadySetCnt;
241	bool bFixRate;
242	u16 current_ch;
243
244	bool bAES;
245
246	unsigned char byAutoFBCtrl;
247
248	/* For Update BaseBand VGA Gain Offset */
249	bool update_bbvga;
250	unsigned int	uBBVGADiffCount;
251	unsigned char bbvga_new;
252	unsigned char bbvga_current;
253	unsigned char bbvga[BB_VGA_LEVEL];
254	long                    dbm_threshold[BB_VGA_LEVEL];
255
256	unsigned char bb_pre_edrssi;
257	unsigned char byBBPreEDIndex;
258
259	unsigned long dwDiagRefCount;
260
261	/* For FOE Tuning */
262	unsigned char byFOETuning;
263
264	/* For RF Power table */
265	unsigned char byCCKPwr;
266	unsigned char byOFDMPwrG;
267	unsigned char cur_pwr;
268	char	 byCurPwrdBm;
269	unsigned char abyCCKPwrTbl[CB_MAX_CHANNEL_24G + 1];
270	unsigned char abyOFDMPwrTbl[CB_MAX_CHANNEL + 1];
271	char	abyCCKDefaultPwr[CB_MAX_CHANNEL_24G + 1];
272	char	abyOFDMDefaultPwr[CB_MAX_CHANNEL + 1];
273	char	abyRegPwr[CB_MAX_CHANNEL + 1];
274	char	abyLocalPwr[CB_MAX_CHANNEL + 1];
275
276	/* BaseBand Loopback Use */
277	unsigned char byBBCR4d;
278	unsigned char byBBCRc9;
279	unsigned char byBBCR88;
280	unsigned char byBBCR09;
281
282	unsigned char abyEEPROM[EEP_MAX_CONTEXT_SIZE]; /* unsigned long alignment */
283
284	unsigned short beacon_interval;
285	u16 wake_up_count;
286
287	struct work_struct interrupt_work;
288
289	struct ieee80211_low_level_stats low_stats;
290};
291
292#endif
293