1
#ifndef __WINBOND_WBHAL_S_H
2
#define __WINBOND_WBHAL_S_H
4
#include <linux/types.h>
5
#include <linux/if_ether.h> /* for ETH_ALEN */
7
#define HAL_LED_SET_MASK 0x001c
8
#define HAL_LED_SET_SHIFT 2
10
/* supported RF type */
11
#define RF_MAXIM_2825 0
12
#define RF_MAXIM_2827 1
13
#define RF_MAXIM_2828 2
14
#define RF_MAXIM_2829 3
15
#define RF_MAXIM_V1 15
16
#define RF_AIROHA_2230 16
17
#define RF_AIROHA_7230 17
18
#define RF_AIROHA_2230S 18
20
#define RF_WB_242_1 34
21
#define RF_DECIDE_BY_INF 255
24
* ----------------------------------------------------------------
25
* The follow define connect to upper layer
26
* User must modify for connection between HAL and upper layer
27
* ----------------------------------------------------------------
31
* ==============================
33
* ==============================
36
#define HAL_USB_MODE_BURST(_H) (_H->SoftwareSet & 0x20)
39
#define SCAN_MAX_CHNL_TIME (50)
41
/* For TxL2 Frame typr recognise */
42
#define FRAME_TYPE_802_3_DATA 0
43
#define FRAME_TYPE_802_11_MANAGEMENT 1
44
#define FRAME_TYPE_802_11_MANAGEMENT_CHALLENGE 2
45
#define FRAME_TYPE_802_11_CONTROL 3
46
#define FRAME_TYPE_802_11_DATA 4
47
#define FRAME_TYPE_PROMISCUOUS 5
49
/* The follow definition is used for convert the frame------------ */
50
#define DOT_11_SEQUENCE_OFFSET 22 /* Sequence control offset */
51
#define DOT_3_TYPE_OFFSET 12
52
#define DOT_11_MAC_HEADER_SIZE 24
53
#define DOT_11_SNAP_SIZE 6
54
#define DOT_11_TYPE_OFFSET 30 /* The start offset of 802.11 Frame. Type encapsulation. */
55
#define DEFAULT_SIFSTIME 10
56
#define DEFAULT_FRAGMENT_THRESHOLD 2346 /* No fragment */
57
#define DEFAULT_MSDU_LIFE_TIME 0xffff
59
#define LONG_PREAMBLE_PLUS_PLCPHEADER_TIME (144 + 48)
60
#define SHORT_PREAMBLE_PLUS_PLCPHEADER_TIME (72 + 24)
61
#define PREAMBLE_PLUS_SIGNAL_PLUS_SIGNALEXTENSION (16 + 4 + 6)
64
/* Frame Type of Bits (2, 3)----------------------------------- */
65
#define MAC_TYPE_MANAGEMENT 0x00
66
#define MAC_TYPE_CONTROL 0x04
67
#define MAC_TYPE_DATA 0x08
68
#define MASK_FRAGMENT_NUMBER 0x000F
69
#define SEQUENCE_NUMBER_SHIFT 4
71
#define HAL_WOL_TYPE_WAKEUP_FRAME 0x01
72
#define HAL_WOL_TYPE_MAGIC_PACKET 0x02
74
#define HAL_KEYTYPE_WEP40 0
75
#define HAL_KEYTYPE_WEP104 1
76
#define HAL_KEYTYPE_TKIP 2 /* 128 bit key */
77
#define HAL_KEYTYPE_AES_CCMP 3 /* 128 bit key */
87
* ================================
88
* Normal Key table format
89
* ================================
92
/* The order of KEY index is MAPPING_KEY_START_INDEX > GROUP_KEY_START_INDEX */
93
#define MAX_KEY_TABLE 24 /* 24 entry for storing key data */
94
#define GROUP_KEY_START_INDEX 4
95
#define MAPPING_KEY_START_INDEX 8
98
* =========================================
100
* =========================================
102
#define MAX_DESCRIPTOR_BUFFER_INDEX 8 /* Have to multiple of 2 */
103
#define FLAG_ERROR_TX_MASK 0x000000bf
104
#define FLAG_ERROR_RX_MASK 0x0000083f
106
#define FLAG_BAND_RX_MASK 0x10000000 /* Bit 28 */
108
struct R00_descriptor {
113
u32 R00_packet_or_buffer_status:1;
114
u32 R00_packet_in_fifo:1;
116
u32 R00_receive_byte_count:12;
117
u32 R00_receive_time_index:16;
121
u32 R00_receive_time_index:16;
122
u32 R00_receive_byte_count:12;
124
u32 R00_packet_in_fifo:1;
125
u32 R00_packet_or_buffer_status:1;
131
struct T00_descriptor {
136
u32 T00_first_mpdu:1; /* for hardware use */
137
u32 T00_last_mpdu:1; /* for hardware use */
138
u32 T00_IsLastMpdu:1;/* 0:not 1:Yes for software used */
139
u32 T00_IgnoreResult:1;/* The same mechanism with T00 setting. */
140
u32 T00_RESERVED_ID:2;/* 3 bit ID reserved */
141
u32 T00_tx_packet_id:4;
143
u32 T00_header_length:6;
144
u32 T00_frame_length:12;
148
u32 T00_frame_length:12;
149
u32 T00_header_length:6;
151
u32 T00_tx_packet_id:4;
152
u32 T00_RESERVED_ID:2; /* 3 bit ID reserved */
153
u32 T00_IgnoreResult:1; /* The same mechanism with T00 setting. */
154
u32 T00_IsLastMpdu:1; /* 0:not 1:Yes for software used */
155
u32 T00_last_mpdu:1; /* for hardware use */
156
u32 T00_first_mpdu:1; /* for hardware use */
162
struct R01_descriptor {
173
u32 R01_decryption_method:2;
176
u32 R01_broadcast_frame:1;
177
u32 R01_multicast_frame:1;
178
u32 R01_directed_frame:1;
179
u32 R01_receive_frame_antenna_selection:1;
180
u32 R01_frame_receive_during_atim_window:1;
181
u32 R01_protocol_version_error:1;
182
u32 R01_authentication_frame_icv_error:1;
183
u32 R01_null_key_to_authentication_frame:1;
191
u32 R01_null_key_to_authentication_frame:1;
192
u32 R01_authentication_frame_icv_error:1;
193
u32 R01_protocol_version_error:1;
194
u32 R01_frame_receive_during_atim_window:1;
195
u32 R01_receive_frame_antenna_selection:1;
196
u32 R01_directed_frame:1;
197
u32 R01_multicast_frame:1;
198
u32 R01_broadcast_frame:1;
201
u32 R01_decryption_method:2;
213
struct T01_descriptor {
218
u32 T01_rts_cts_duration:16;
219
u32 T01_fall_back_rate:3;
222
u32 T01_modulation_type:1;
223
u32 T01_plcp_header_length:1;
224
u32 T01_transmit_rate:3;
226
u32 T01_add_challenge_text:1;
227
u32 T01_inhibit_crc:1;
228
u32 T01_loop_back_wep_mode:1;
229
u32 T01_retry_abort_ebable:1;
233
u32 T01_retry_abort_ebable:1;
234
u32 T01_loop_back_wep_mode:1;
235
u32 T01_inhibit_crc:1;
236
u32 T01_add_challenge_text:1;
238
u32 T01_transmit_rate:3;
239
u32 T01_plcp_header_length:1;
240
u32 T01_modulation_type:1;
243
u32 T01_fall_back_rate:3;
244
u32 T01_rts_cts_duration:16;
250
struct T02_descriptor {
255
u32 T02_IsLastMpdu:1; /* The same mechanism with T00 setting */
256
u32 T02_IgnoreResult:1; /* The same mechanism with T00 setting. */
257
u32 T02_RESERVED_ID:2; /* The same mechanism with T00 setting */
262
u32 T02_transmit_complete:1;
263
u32 T02_transmit_abort_due_to_TBTT:1;
264
u32 T02_effective_transmission_rate:1;
265
u32 T02_transmit_without_encryption_due_to_wep_on_false:1;
266
u32 T02_discard_due_to_null_wep_key:1;
267
u32 T02_RESERVED_1:1;
268
u32 T02_out_of_MaxTxMSDULiftTime:1;
269
u32 T02_transmit_abort:1;
270
u32 T02_transmit_fail:1;
274
u32 T02_transmit_fail:1;
275
u32 T02_transmit_abort:1;
276
u32 T02_out_of_MaxTxMSDULiftTime:1;
277
u32 T02_RESERVED_1:1;
278
u32 T02_discard_due_to_null_wep_key:1;
279
u32 T02_transmit_without_encryption_due_to_wep_on_false:1;
280
u32 T02_effective_transmission_rate:1;
281
u32 T02_transmit_abort_due_to_TBTT:1;
282
u32 T02_transmit_complete:1;
287
u32 T02_RESERVED_ID:2; /* The same mechanism with T00 setting */
288
u32 T02_IgnoreResult:1; /* The same mechanism with T00 setting. */
289
u32 T02_IsLastMpdu:1; /* The same mechanism with T00 setting */
295
struct wb35_descriptor { /* Skip length = 8 DWORD */
296
/* ID for descriptor ---, The field doesn't be cleard in the operation of Descriptor definition */
298
/* ----------------------The above region doesn't be cleared by DESCRIPTOR_RESET------ */
301
u16 FragmentThreshold;
302
u8 InternalUsed; /* Only can be used by operation of descriptor definition */
303
u8 Type; /* 0: 802.3 1:802.11 data frame 2:802.11 management frame */
305
u8 PreambleMode;/* 0: short 1:long */
308
u8 EapFix; /* For speed up key install */
310
/* For R00 and T00 ------------------------------ */
312
struct R00_descriptor R00;
313
struct T00_descriptor T00;
316
/* For R01 and T01 ------------------------------ */
318
struct R01_descriptor R01;
319
struct T01_descriptor T01;
322
/* For R02 and T02 ------------------------------ */
325
struct T02_descriptor T02;
328
/* For R03 and T03 ------------------------------ */
329
/* For software used */
335
u8 buffer_start_index;
336
u16 buffer_total_size;
340
/* For storing the buffer */
341
u16 buffer_size[MAX_DESCRIPTOR_BUFFER_INDEX];
342
void *buffer_address[MAX_DESCRIPTOR_BUFFER_INDEX];
345
#define MAX_TXVGA_EEPROM 9 /* How many word(u16) of EEPROM will be used for TxVGA */
346
#define MAX_RF_PARAMETER 32
348
struct txvga_for_50 {
354
* ==============================================
355
* Device related include
356
* ==============================================
359
#include "wb35reg_s.h"
360
#include "wb35tx_s.h"
361
#include "wb35rx_s.h"
363
/* For Hal using ============================================ */
365
/* For compatible with 33 */
367
u32 BB3c_cal; /* The value for Tx calibration comes from EEPROM */
368
u32 BB54_cal; /* The value for Rx calibration comes from EEPROM */
370
/* For surprise remove */
371
u32 SurpriseRemove; /* 0: Normal 1: Surprise remove */
378
u32 DMAFix; /* V1_DMA_FIX The variable can be removed if driver want to save mem space for V2. */
381
* ===============================================
382
* Definition for MAC address
383
* ===============================================
385
u8 PermanentMacAddress[ETH_ALEN + 2]; /* The Ethernet addr that are stored in EEPROM. + 2 to 8-byte alignment */
386
u8 CurrentMacAddress[ETH_ALEN + 2]; /* The Enthernet addr that are in used. + 2 to 8-byte alignment */
389
* =========================================
390
* Definition for 802.11
391
* =========================================
393
u8 *bssid_pointer; /* Used by hal_get_bssid for return value */
394
u8 bssid[8]; /* Only 6 byte will be used. 8 byte is required for read buffer */
395
u8 ssid[32]; /* maximum ssid length is 32 byte */
402
u16 CapabilityInformation;
407
u8 bss_type;/* 0: IBSS_NET or 1:ESS_NET */
408
u8 preamble;/* 0: short preamble, 1: long preamble */
409
u8 slot_time_select; /* 9 or 20 value */
410
u8 phy_type; /* Phy select */
412
u32 phy_para[MAX_RF_PARAMETER];
415
u32 CurrentRadioSw; /* 0:On 1:Off */
416
u32 CurrentRadioHw; /* 0:On 1:Off */
418
u8 *power_save_point; /* Used by hal_get_power_save_mode for return value */
420
u8 desired_power_save;
421
u8 dtim; /* Is running dtim */
422
u8 mapping_key_replace_index; /* In Key table, the next index be replaced */
424
u16 MaxReceiveLifeTime;
425
u16 FragmentThreshold;
426
u16 FragmentThreshold_tmp;
429
u8 Key_slot[MAX_KEY_TABLE][8]; /* Ownership record for key slot. For Alignment */
430
u32 Key_content[MAX_KEY_TABLE][12]; /* 10DW for each entry + 2 for burst command (Off and On valid bit) */
431
u8 CurrentDefaultKeyIndex;
432
u32 CurrentDefaultKeyLength;
435
* ==================================================
436
* Variable for each module
437
* ==================================================
439
struct usb_device *udev;
440
struct wb35_reg reg; /* Need Wb35Reg.h */
441
struct wb35_tx Wb35Tx; /* Need Wb35Tx.h */
442
struct wb35_rx Wb35Rx; /* Need Wb35Rx.h */
444
struct timer_list LEDTimer; /* For LED */
446
u32 LEDpoint; /* For LED */
448
u32 dto_tx_retry_count;
449
u32 dto_tx_frag_count;
450
u32 rx_ok_count[13]; /* index=0: total rx ok */
451
u32 rx_err_count[13]; /* index=0: total rx err */
454
u32 tx_TBTT_start_count;
456
u32 tx_WepOn_false_count;
457
u32 tx_Null_key_count;
458
u32 tx_retry_count[8];
460
u8 PowerIndexFromEEPROM; /* For 2412MHz */
462
u8 IsWaitJoinComplete; /* TRUE: set join request */
468
u32 IsInitOK; /* 0: Driver starting 1: Driver init OK */
470
/* For Phy calibration */
471
s32 iq_rsdl_gain_tx_d2;
472
s32 iq_rsdl_phase_tx_d2;
473
u32 txvga_setting_for_cal;
475
u8 TxVgaSettingInEEPROM[(((MAX_TXVGA_EEPROM * 2) + 3) & ~0x03)]; /* For EEPROM value */
476
u8 TxVgaFor24[16]; /* Max is 14, 2 for alignment */
477
struct txvga_for_50 TxVgaFor50[36]; /* 35 channels in 5G. 35x2 = 70 byte. 2 for alignments */
485
* LED_control 4 byte: Gray_Led_1[3] Gray_Led_0[2] Led[1] Led[0]
487
* For Led gray setting
490
* LED behavior will decide by EEPROM setting
491
* 1: Turn off specific LED
492
* 2: Always on specific LED
493
* 3: slow blinking specific LED
494
* 4: fast blinking specific LED
495
* 5: WPS led control is set. Led0 is Red, Led1 id Green
497
* Led[1] is parameter for WPS LED mode
503
u32 LED_LinkOn; /* Turn LED on control */
504
u32 LED_Scanning; /* Let LED in scan process control */
505
u32 LED_Blinking; /* Temp variable for shining */
509
/* For global timer */
510
u32 time_count; /* TICK_TIME_100ms 1 = 100ms */