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 */