hc
2023-07-06 0d92c6001e626cf3cfa86b826ccc10a16115901e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
// SPDX-License-Identifier: GPL-2.0+
/*
 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
 * All rights reserved.
 *
 * File: mac.h
 *
 * Purpose: MAC routines
 *
 * Author: Tevin Chen
 *
 * Date: May 21, 1996
 *
 * Revision History:
 *      07-01-2003 Bryan YC Fan:  Re-write codes to support VT3253 spec.
 *      08-25-2003 Kyle Hsu:      Porting MAC functions from sim53.
 *      09-03-2003 Bryan YC Fan:  Add MACvDisableProtectMD & MACvEnableProtectMD
 */
 
#ifndef __MAC_H__
#define __MAC_H__
 
#include "device.h"
 
#define REV_ID_VT3253_A0    0x00
#define REV_ID_VT3253_A1    0x01
#define REV_ID_VT3253_B0    0x08
#define REV_ID_VT3253_B1    0x09
 
/* Registers in the MAC */
#define MAC_REG_BISTCMD        0x04
#define MAC_REG_BISTSR0        0x05
#define MAC_REG_BISTSR1        0x06
#define MAC_REG_BISTSR2        0x07
#define MAC_REG_I2MCSR        0x08
#define MAC_REG_I2MTGID        0x09
#define MAC_REG_I2MTGAD        0x0a
#define MAC_REG_I2MCFG        0x0b
#define MAC_REG_I2MDIPT        0x0c
#define MAC_REG_I2MDOPT        0x0e
#define MAC_REG_USBSUS        0x0f
 
#define MAC_REG_LOCALID        0x14
#define MAC_REG_TESTCFG        0x15
#define MAC_REG_JUMPER0        0x16
#define MAC_REG_JUMPER1        0x17
#define MAC_REG_TMCTL        0x18
#define MAC_REG_TMDATA0        0x1c
#define MAC_REG_TMDATA1        0x1d
#define MAC_REG_TMDATA2        0x1e
#define MAC_REG_TMDATA3        0x1f
 
/* MAC Parameter related */
#define MAC_REG_LRT        0x20
#define MAC_REG_SRT        0x21
#define MAC_REG_SIFS        0x22
#define MAC_REG_DIFS        0x23
#define MAC_REG_EIFS        0x24
#define MAC_REG_SLOT        0x25
#define MAC_REG_BI        0x26
#define MAC_REG_CWMAXMIN0    0x28
#define MAC_REG_LINKOFFTOTM    0x2a
#define MAC_REG_SWTMOT        0x2b
#define MAC_REG_RTSOKCNT    0x2c
#define MAC_REG_RTSFAILCNT    0x2d
#define MAC_REG_ACKFAILCNT    0x2e
#define MAC_REG_FCSERRCNT    0x2f
 
/* TSF Related */
#define MAC_REG_TSFCNTR        0x30
#define MAC_REG_NEXTTBTT    0x38
#define MAC_REG_TSFOFST        0x40
#define MAC_REG_TFTCTL        0x48
 
/* WMAC Control/Status Related */
#define MAC_REG_ENCFG0        0x4c
#define MAC_REG_ENCFG1        0x4d
#define MAC_REG_ENCFG2        0x4e
 
#define MAC_REG_CFG        0x50
#define MAC_REG_TEST        0x52
#define MAC_REG_HOSTCR        0x54
#define MAC_REG_MACCR        0x55
#define MAC_REG_RCR        0x56
#define MAC_REG_TCR        0x57
#define MAC_REG_IMR        0x58
#define MAC_REG_ISR        0x5c
#define MAC_REG_ISR1        0x5d
 
/* Power Saving Related */
#define MAC_REG_PSCFG        0x60
#define MAC_REG_PSCTL        0x61
#define MAC_REG_PSPWRSIG    0x62
#define MAC_REG_BBCR13        0x63
#define MAC_REG_AIDATIM        0x64
#define MAC_REG_PWBT        0x66
#define MAC_REG_WAKEOKTMR    0x68
#define MAC_REG_CALTMR        0x69
#define MAC_REG_SYNSPACCNT    0x6a
#define MAC_REG_WAKSYNOPT    0x6b
 
/* Baseband/IF Control Group */
#define MAC_REG_BBREGCTL    0x6c
#define MAC_REG_CHANNEL        0x6d
#define MAC_REG_BBREGADR    0x6e
#define MAC_REG_BBREGDATA    0x6f
#define MAC_REG_IFREGCTL    0x70
#define MAC_REG_IFDATA        0x71
#define MAC_REG_ITRTMSET    0x74
#define MAC_REG_PAPEDELAY    0x77
#define MAC_REG_SOFTPWRCTL    0x78
#define MAC_REG_SOFTPWRCTL2    0x79
#define MAC_REG_GPIOCTL0    0x7a
#define MAC_REG_GPIOCTL1    0x7b
 
/* MiscFF PIO related */
#define MAC_REG_MISCFFNDEX    0xbc
#define MAC_REG_MISCFFCTL    0xbe
#define MAC_REG_MISCFFDATA    0xc0
 
/* MAC Configuration Group */
#define MAC_REG_PAR0        0xc4
#define MAC_REG_PAR4        0xc8
#define MAC_REG_BSSID0        0xcc
#define MAC_REG_BSSID4        0xd0
#define MAC_REG_MAR0        0xd4
#define MAC_REG_MAR4        0xd8
 
/* MAC RSPPKT INFO Group */
#define MAC_REG_RSPINF_B_1    0xdC
#define MAC_REG_RSPINF_B_2    0xe0
#define MAC_REG_RSPINF_B_5    0xe4
#define MAC_REG_RSPINF_B_11    0xe8
#define MAC_REG_RSPINF_A_6    0xec
#define MAC_REG_RSPINF_A_9    0xee
#define MAC_REG_RSPINF_A_12    0xf0
#define MAC_REG_RSPINF_A_18    0xf2
#define MAC_REG_RSPINF_A_24    0xf4
#define MAC_REG_RSPINF_A_36    0xf6
#define MAC_REG_RSPINF_A_48    0xf8
#define MAC_REG_RSPINF_A_54    0xfa
#define MAC_REG_RSPINF_A_72    0xfc
 
/* Bits in the I2MCFG EEPROM register */
#define I2MCFG_BOUNDCTL        0x80
#define I2MCFG_WAITCTL        0x20
#define I2MCFG_SCLOECTL        0x10
#define I2MCFG_WBUSYCTL        0x08
#define I2MCFG_NORETRY        0x04
#define I2MCFG_I2MLDSEQ        0x02
#define I2MCFG_I2CMFAST        0x01
 
/* Bits in the I2MCSR EEPROM register */
#define I2MCSR_EEMW        0x80
#define I2MCSR_EEMR        0x40
#define I2MCSR_AUTOLD        0x08
#define I2MCSR_NACK        0x02
#define I2MCSR_DONE        0x01
 
/* Bits in the TMCTL register */
#define TMCTL_TSUSP        0x04
#define TMCTL_TMD        0x02
#define TMCTL_TE        0x01
 
/* Bits in the TFTCTL register */
#define TFTCTL_HWUTSF        0x80
#define TFTCTL_TBTTSYNC        0x40
#define TFTCTL_HWUTSFEN        0x20
#define TFTCTL_TSFCNTRRD    0x10
#define TFTCTL_TBTTSYNCEN    0x08
#define TFTCTL_TSFSYNCEN    0x04
#define TFTCTL_TSFCNTRST    0x02
#define TFTCTL_TSFCNTREN    0x01
 
/* Bits in the EnhanceCFG_0 register */
#define EnCFG_BBType_a        0x00
#define EnCFG_BBType_b        0x01
#define EnCFG_BBType_g        0x02
#define EnCFG_BBType_MASK    0x03
#define EnCFG_ProtectMd        0x20
 
/* Bits in the EnhanceCFG_1 register */
#define EnCFG_BcnSusInd        0x01
#define EnCFG_BcnSusClr        0x02
 
/* Bits in the EnhanceCFG_2 register */
#define EnCFG_NXTBTTCFPSTR    0x01
#define EnCFG_BarkerPream    0x02
#define EnCFG_PktBurstMode    0x04
 
/* Bits in the CFG register */
#define CFG_TKIPOPT        0x80
#define CFG_RXDMAOPT        0x40
#define CFG_TMOT_SW        0x20
#define CFG_TMOT_HWLONG        0x10
#define CFG_TMOT_HW        0x00
#define CFG_CFPENDOPT        0x08
#define CFG_BCNSUSEN        0x04
#define CFG_NOTXTIMEOUT        0x02
#define CFG_NOBUFOPT        0x01
 
/* Bits in the TEST register */
#define TEST_LBEXT        0x80
#define TEST_LBINT        0x40
#define TEST_LBNONE        0x00
#define TEST_SOFTINT        0x20
#define TEST_CONTTX        0x10
#define TEST_TXPE        0x08
#define TEST_NAVDIS        0x04
#define TEST_NOCTS        0x02
#define TEST_NOACK        0x01
 
/* Bits in the HOSTCR register */
#define HOSTCR_TXONST        0x80
#define HOSTCR_RXONST        0x40
#define HOSTCR_ADHOC        0x20
#define HOSTCR_AP        0x10
#define HOSTCR_TXON        0x08
#define HOSTCR_RXON        0x04
#define HOSTCR_MACEN        0x02
#define HOSTCR_SOFTRST        0x01
 
/* Bits in the MACCR register */
#define MACCR_SYNCFLUSHOK    0x04
#define MACCR_SYNCFLUSH        0x02
#define MACCR_CLRNAV        0x01
 
/* Bits in the RCR register */
#define RCR_SSID        0x80
#define RCR_RXALLTYPE        0x40
#define RCR_UNICAST        0x20
#define RCR_BROADCAST        0x10
#define RCR_MULTICAST        0x08
#define RCR_WPAERR        0x04
#define RCR_ERRCRC        0x02
#define RCR_BSSID        0x01
 
/* Bits in the TCR register */
#define TCR_SYNCDCFOPT        0x02
#define TCR_AUTOBCNTX        0x01
 
/* ISR1 */
#define ISR_GPIO3        0x40
#define ISR_RXNOBUF        0x08
#define ISR_MIBNEARFULL        0x04
#define ISR_SOFTINT        0x02
#define ISR_FETALERR        0x01
 
#define LEDSTS_STS        0x06
#define LEDSTS_TMLEN        0x78
#define LEDSTS_OFF        0x00
#define LEDSTS_ON        0x02
#define LEDSTS_SLOW        0x04
#define LEDSTS_INTER        0x06
 
/* ISR0 */
#define ISR_WATCHDOG        0x80
#define ISR_SOFTTIMER        0x40
#define ISR_GPIO0        0x20
#define ISR_TBTT        0x10
#define ISR_RXDMA0        0x08
#define ISR_BNTX        0x04
#define ISR_ACTX        0x01
 
/* Bits in the PSCFG register */
#define PSCFG_PHILIPMD        0x40
#define PSCFG_WAKECALEN        0x20
#define PSCFG_WAKETMREN        0x10
#define PSCFG_BBPSPROG        0x08
#define PSCFG_WAKESYN        0x04
#define PSCFG_SLEEPSYN        0x02
#define PSCFG_AUTOSLEEP        0x01
 
/* Bits in the PSCTL register */
#define PSCTL_WAKEDONE        0x20
#define PSCTL_PS        0x10
#define PSCTL_GO2DOZE        0x08
#define PSCTL_LNBCN        0x04
#define PSCTL_ALBCN        0x02
#define PSCTL_PSEN        0x01
 
/* Bits in the PSPWSIG register */
#define PSSIG_WPE3        0x80
#define PSSIG_WPE2        0x40
#define PSSIG_WPE1        0x20
#define PSSIG_WRADIOPE        0x10
#define PSSIG_SPE3        0x08
#define PSSIG_SPE2        0x04
#define PSSIG_SPE1        0x02
#define PSSIG_SRADIOPE        0x01
 
/* Bits in the BBREGCTL register */
#define BBREGCTL_DONE        0x04
#define BBREGCTL_REGR        0x02
#define BBREGCTL_REGW        0x01
 
/* Bits in the IFREGCTL register */
#define IFREGCTL_DONE        0x04
#define IFREGCTL_IFRF        0x02
#define IFREGCTL_REGW        0x01
 
/* Bits in the SOFTPWRCTL register */
#define SOFTPWRCTL_RFLEOPT    0x08
#define SOFTPWRCTL_TXPEINV    0x02
#define SOFTPWRCTL_SWPECTI    0x01
#define SOFTPWRCTL_SWPAPE    0x20
#define SOFTPWRCTL_SWCALEN    0x10
#define SOFTPWRCTL_SWRADIO_PE    0x08
#define SOFTPWRCTL_SWPE2    0x04
#define SOFTPWRCTL_SWPE1    0x02
#define SOFTPWRCTL_SWPE3    0x01
 
/* Bits in the GPIOCTL1 register */
#define GPIO3_MD        0x20
#define GPIO3_DATA        0x40
#define GPIO3_INTMD        0x80
 
/* Bits in the MISCFFCTL register */
#define MISCFFCTL_WRITE        0x0001
 
/* Loopback mode */
#define MAC_LB_EXT        0x02
#define MAC_LB_INTERNAL        0x01
#define MAC_LB_NONE        0x00
 
/* Ethernet address filter type */
#define PKT_TYPE_NONE        0x00 /* turn off receiver */
#define PKT_TYPE_ALL_MULTICAST    0x80
#define PKT_TYPE_PROMISCUOUS    0x40
#define PKT_TYPE_DIRECTED    0x20 /* obselete */
#define PKT_TYPE_BROADCAST    0x10
#define PKT_TYPE_MULTICAST    0x08
#define PKT_TYPE_ERROR_WPA    0x04
#define PKT_TYPE_ERROR_CRC    0x02
#define PKT_TYPE_BSSID        0x01
 
#define Default_BI              0x200
 
/* MiscFIFO Offset */
#define MISCFIFO_KEYETRY0    32
#define MISCFIFO_KEYENTRYSIZE    22
 
#define MAC_REVISION_A0        0x00
#define MAC_REVISION_A1        0x01
 
struct vnt_mac_set_key {
   union {
       struct {
           u8 addr[ETH_ALEN];
           __le16 key_ctl;
       } write __packed;
       u32 swap[2];
   } u;
   u8 key[WLAN_KEY_LEN_CCMP];
} __packed;
 
void vnt_mac_set_filter(struct vnt_private *priv, u64 mc_filter);
void vnt_mac_shutdown(struct vnt_private *priv);
void vnt_mac_set_bb_type(struct vnt_private *priv, u8 type);
void vnt_mac_disable_keyentry(struct vnt_private *priv, u8 entry_idx);
void vnt_mac_set_keyentry(struct vnt_private *priv, u16 key_ctl, u32 entry_idx,
             u32 key_idx, u8 *addr, u8 *key);
void vnt_mac_reg_bits_off(struct vnt_private *priv, u8 reg_ofs, u8 bits);
void vnt_mac_reg_bits_on(struct vnt_private *priv, u8 reg_ofs, u8 bits);
void vnt_mac_write_word(struct vnt_private *priv, u8 reg_ofs, u16 word);
void vnt_mac_set_bssid_addr(struct vnt_private *priv, u8 *addr);
void vnt_mac_enable_protect_mode(struct vnt_private *priv);
void vnt_mac_disable_protect_mode(struct vnt_private *priv);
void vnt_mac_enable_barker_preamble_mode(struct vnt_private *priv);
void vnt_mac_disable_barker_preamble_mode(struct vnt_private *priv);
void vnt_mac_set_beacon_interval(struct vnt_private *priv, u16 interval);
void vnt_mac_set_led(struct vnt_private *privpriv, u8 state, u8 led);
 
#endif /* __MAC_H__ */