blob: 39e84a0d9729863457a9b439f987608b243a9955 [file] [log] [blame]
Pekka Enberg80aba532008-10-30 13:04:29 +02001#ifndef __WINBOND_WBHAL_S_H
2#define __WINBOND_WBHAL_S_H
3
4#include <linux/types.h>
Pekka Enbergbd37b7f2009-01-08 11:56:53 +02005#include <linux/if_ether.h> /* for ETH_ALEN */
Pekka Enberg80aba532008-10-30 13:04:29 +02006
Lars Lindley5a7df3c2010-03-28 21:52:37 +02007#define HAL_LED_SET_MASK 0x001c
8#define HAL_LED_SET_SHIFT 2
Pavel Machek66101de2008-10-01 14:36:56 +02009
Lars Lindley5a7df3c2010-03-28 21:52:37 +020010/* supported RF type */
Pavel Machek66101de2008-10-01 14:36:56 +020011#define RF_MAXIM_2825 0
12#define RF_MAXIM_2827 1
13#define RF_MAXIM_2828 2
14#define RF_MAXIM_2829 3
Lars Lindley5a7df3c2010-03-28 21:52:37 +020015#define RF_MAXIM_V1 15
Pavel Machek66101de2008-10-01 14:36:56 +020016#define RF_AIROHA_2230 16
17#define RF_AIROHA_7230 17
Lars Lindley5a7df3c2010-03-28 21:52:37 +020018#define RF_AIROHA_2230S 18
19#define RF_WB_242 33
20#define RF_WB_242_1 34
Pavel Machek66101de2008-10-01 14:36:56 +020021#define RF_DECIDE_BY_INF 255
22
Lars Lindley5a7df3c2010-03-28 21:52:37 +020023/*
24 * ----------------------------------------------------------------
25 * The follow define connect to upper layer
26 * User must modify for connection between HAL and upper layer
27 * ----------------------------------------------------------------
28 */
Pavel Machek66101de2008-10-01 14:36:56 +020029
Lars Lindley5a7df3c2010-03-28 21:52:37 +020030/*
31 * ==============================
32 * Common define
33 * ==============================
34 */
35/* Bit 5 */
36#define HAL_USB_MODE_BURST(_H) (_H->SoftwareSet & 0x20)
Pavel Machek66101de2008-10-01 14:36:56 +020037
Lars Lindley5a7df3c2010-03-28 21:52:37 +020038/* Scan interval */
39#define SCAN_MAX_CHNL_TIME (50)
Pavel Machek66101de2008-10-01 14:36:56 +020040
Lars Lindley5a7df3c2010-03-28 21:52:37 +020041/* For TxL2 Frame typr recognise */
Pavel Machek66101de2008-10-01 14:36:56 +020042#define FRAME_TYPE_802_3_DATA 0
43#define FRAME_TYPE_802_11_MANAGEMENT 1
Lars Lindley5a7df3c2010-03-28 21:52:37 +020044#define FRAME_TYPE_802_11_MANAGEMENT_CHALLENGE 2
Pavel Machek66101de2008-10-01 14:36:56 +020045#define FRAME_TYPE_802_11_CONTROL 3
46#define FRAME_TYPE_802_11_DATA 4
47#define FRAME_TYPE_PROMISCUOUS 5
48
Lars Lindley5a7df3c2010-03-28 21:52:37 +020049/* The follow definition is used for convert the frame------------ */
50#define DOT_11_SEQUENCE_OFFSET 22 /* Sequence control offset */
Pavel Machek66101de2008-10-01 14:36:56 +020051#define DOT_3_TYPE_OFFSET 12
Lars Lindley5a7df3c2010-03-28 21:52:37 +020052#define DOT_11_MAC_HEADER_SIZE 24
Pavel Machek66101de2008-10-01 14:36:56 +020053#define DOT_11_SNAP_SIZE 6
Lars Lindley5a7df3c2010-03-28 21:52:37 +020054#define DOT_11_TYPE_OFFSET 30 /* The start offset of 802.11 Frame. Type encapsulation. */
Pavel Machek66101de2008-10-01 14:36:56 +020055#define DEFAULT_SIFSTIME 10
Lars Lindley5a7df3c2010-03-28 21:52:37 +020056#define DEFAULT_FRAGMENT_THRESHOLD 2346 /* No fragment */
Pavel Machek66101de2008-10-01 14:36:56 +020057#define DEFAULT_MSDU_LIFE_TIME 0xffff
58
Lars Lindley5a7df3c2010-03-28 21:52:37 +020059#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)
62#define Tsym 4
Pavel Machek66101de2008-10-01 14:36:56 +020063
Lars Lindley5a7df3c2010-03-28 21:52:37 +020064/* Frame Type of Bits (2, 3)----------------------------------- */
Pavel Machek66101de2008-10-01 14:36:56 +020065#define MAC_TYPE_MANAGEMENT 0x00
66#define MAC_TYPE_CONTROL 0x04
67#define MAC_TYPE_DATA 0x08
Lars Lindley5a7df3c2010-03-28 21:52:37 +020068#define MASK_FRAGMENT_NUMBER 0x000F
69#define SEQUENCE_NUMBER_SHIFT 4
Pavel Machek66101de2008-10-01 14:36:56 +020070
71#define HAL_WOL_TYPE_WAKEUP_FRAME 0x01
72#define HAL_WOL_TYPE_MAGIC_PACKET 0x02
73
Lars Lindley5a7df3c2010-03-28 21:52:37 +020074#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 */
Pavel Machek66101de2008-10-01 14:36:56 +020078
Lars Lindley5a7df3c2010-03-28 21:52:37 +020079/* For VM state */
Pavel Machek66101de2008-10-01 14:36:56 +020080enum {
81 VM_STOP = 0,
82 VM_RUNNING,
83 VM_COMPLETED
84};
85
Lars Lindley5a7df3c2010-03-28 21:52:37 +020086/*
87 * ================================
88 * Normal Key table format
89 * ================================
90 */
91
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 */
Pavel Machek66101de2008-10-01 14:36:56 +020094#define GROUP_KEY_START_INDEX 4
95#define MAPPING_KEY_START_INDEX 8
Pavel Machek66101de2008-10-01 14:36:56 +020096
Lars Lindley5a7df3c2010-03-28 21:52:37 +020097/*
98 * =========================================
99 * Descriptor
100 * =========================================
101 */
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
Pavel Machek66101de2008-10-01 14:36:56 +0200105
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200106#define FLAG_BAND_RX_MASK 0x10000000 /* Bit 28 */
Pavel Machek66101de2008-10-01 14:36:56 +0200107
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300108struct R00_descriptor {
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200109 union {
Pavel Machek66101de2008-10-01 14:36:56 +0200110 u32 value;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200111#ifdef _BIG_ENDIAN_
112 struct {
Pavel Machek66101de2008-10-01 14:36:56 +0200113 u32 R00_packet_or_buffer_status:1;
114 u32 R00_packet_in_fifo:1;
115 u32 R00_RESERVED:2;
116 u32 R00_receive_byte_count:12;
117 u32 R00_receive_time_index:16;
118 };
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200119#else
120 struct {
Pavel Machek66101de2008-10-01 14:36:56 +0200121 u32 R00_receive_time_index:16;
122 u32 R00_receive_byte_count:12;
123 u32 R00_RESERVED:2;
124 u32 R00_packet_in_fifo:1;
125 u32 R00_packet_or_buffer_status:1;
126 };
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200127#endif
Pavel Machek66101de2008-10-01 14:36:56 +0200128 };
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300129};
Pavel Machek66101de2008-10-01 14:36:56 +0200130
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300131struct T00_descriptor {
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200132 union {
Pavel Machek66101de2008-10-01 14:36:56 +0200133 u32 value;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200134#ifdef _BIG_ENDIAN_
135 struct {
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;
Pavel Machek66101de2008-10-01 14:36:56 +0200142 u32 T00_RESERVED:4;
143 u32 T00_header_length:6;
144 u32 T00_frame_length:12;
145 };
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200146#else
147 struct {
Pavel Machek66101de2008-10-01 14:36:56 +0200148 u32 T00_frame_length:12;
149 u32 T00_header_length:6;
150 u32 T00_RESERVED:4;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200151 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 */
Pavel Machek66101de2008-10-01 14:36:56 +0200157 };
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200158#endif
Pavel Machek66101de2008-10-01 14:36:56 +0200159 };
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300160};
Pavel Machek66101de2008-10-01 14:36:56 +0200161
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300162struct R01_descriptor {
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200163 union {
Pavel Machek66101de2008-10-01 14:36:56 +0200164 u32 value;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200165#ifdef _BIG_ENDIAN_
166 struct {
Pavel Machek66101de2008-10-01 14:36:56 +0200167 u32 R01_RESERVED:3;
168 u32 R01_mod_type:1;
169 u32 R01_pre_type:1;
170 u32 R01_data_rate:3;
171 u32 R01_AGC_state:8;
172 u32 R01_LNA_state:2;
173 u32 R01_decryption_method:2;
174 u32 R01_mic_error:1;
175 u32 R01_replay:1;
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;
184 u32 R01_icv_error:1;
185 u32 R01_crc_error:1;
186 };
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200187#else
188 struct {
Pavel Machek66101de2008-10-01 14:36:56 +0200189 u32 R01_crc_error:1;
190 u32 R01_icv_error: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;
199 u32 R01_replay:1;
200 u32 R01_mic_error:1;
201 u32 R01_decryption_method:2;
202 u32 R01_LNA_state:2;
203 u32 R01_AGC_state:8;
204 u32 R01_data_rate:3;
205 u32 R01_pre_type:1;
206 u32 R01_mod_type:1;
207 u32 R01_RESERVED:3;
208 };
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200209#endif
Pavel Machek66101de2008-10-01 14:36:56 +0200210 };
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300211};
Pavel Machek66101de2008-10-01 14:36:56 +0200212
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300213struct T01_descriptor {
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200214 union {
Pavel Machek66101de2008-10-01 14:36:56 +0200215 u32 value;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200216#ifdef _BIG_ENDIAN_
217 struct {
Pavel Machek66101de2008-10-01 14:36:56 +0200218 u32 T01_rts_cts_duration:16;
219 u32 T01_fall_back_rate:3;
220 u32 T01_add_rts:1;
221 u32 T01_add_cts:1;
222 u32 T01_modulation_type:1;
223 u32 T01_plcp_header_length:1;
224 u32 T01_transmit_rate:3;
225 u32 T01_wep_id:2;
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;
230 };
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200231#else
232 struct {
Pavel Machek66101de2008-10-01 14:36:56 +0200233 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;
237 u32 T01_wep_id:2;
238 u32 T01_transmit_rate:3;
239 u32 T01_plcp_header_length:1;
240 u32 T01_modulation_type:1;
241 u32 T01_add_cts:1;
242 u32 T01_add_rts:1;
243 u32 T01_fall_back_rate:3;
244 u32 T01_rts_cts_duration:16;
245 };
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200246#endif
Pavel Machek66101de2008-10-01 14:36:56 +0200247 };
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300248};
Pavel Machek66101de2008-10-01 14:36:56 +0200249
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300250struct T02_descriptor {
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200251 union {
Pavel Machek66101de2008-10-01 14:36:56 +0200252 u32 value;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200253#ifdef _BIG_ENDIAN_
254 struct {
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 */
Pavel Machek66101de2008-10-01 14:36:56 +0200258 u32 T02_Tx_PktID:4;
259 u32 T02_MPDU_Cnt:4;
260 u32 T02_RTS_Cnt:4;
261 u32 T02_RESERVED:7;
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;
271 };
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200272#else
273 struct {
Pavel Machek66101de2008-10-01 14:36:56 +0200274 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;
283 u32 T02_RESERVED:7;
284 u32 T02_RTS_Cnt:4;
285 u32 T02_MPDU_Cnt:4;
286 u32 T02_Tx_PktID:4;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200287 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 */
Pavel Machek66101de2008-10-01 14:36:56 +0200290 };
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200291#endif
Pavel Machek66101de2008-10-01 14:36:56 +0200292 };
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300293};
Pavel Machek66101de2008-10-01 14:36:56 +0200294
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200295struct wb35_descriptor { /* Skip length = 8 DWORD */
296 /* ID for descriptor ---, The field doesn't be cleard in the operation of Descriptor definition */
Pavel Machek66101de2008-10-01 14:36:56 +0200297 u8 Descriptor_ID;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200298 /* ----------------------The above region doesn't be cleared by DESCRIPTOR_RESET------ */
Pavel Machek66101de2008-10-01 14:36:56 +0200299 u8 RESERVED[3];
300
301 u16 FragmentThreshold;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200302 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 */
Pavel Machek66101de2008-10-01 14:36:56 +0200304
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200305 u8 PreambleMode;/* 0: short 1:long */
Pavel Machek66101de2008-10-01 14:36:56 +0200306 u8 TxRate;
307 u8 FragmentCount;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200308 u8 EapFix; /* For speed up key install */
Pavel Machek66101de2008-10-01 14:36:56 +0200309
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200310 /* For R00 and T00 ------------------------------ */
311 union {
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300312 struct R00_descriptor R00;
313 struct T00_descriptor T00;
Pavel Machek66101de2008-10-01 14:36:56 +0200314 };
315
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200316 /* For R01 and T01 ------------------------------ */
317 union {
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300318 struct R01_descriptor R01;
319 struct T01_descriptor T01;
Pavel Machek66101de2008-10-01 14:36:56 +0200320 };
321
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200322 /* For R02 and T02 ------------------------------ */
323 union {
324 u32 R02;
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300325 struct T02_descriptor T02;
Pavel Machek66101de2008-10-01 14:36:56 +0200326 };
327
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200328 /* For R03 and T03 ------------------------------ */
329 /* For software used */
330 union {
Pavel Machek66101de2008-10-01 14:36:56 +0200331 u32 R03;
332 u32 T03;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200333 struct {
Pavel Machek66101de2008-10-01 14:36:56 +0200334 u8 buffer_number;
335 u8 buffer_start_index;
336 u16 buffer_total_size;
337 };
338 };
339
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200340 /* For storing the buffer */
341 u16 buffer_size[MAX_DESCRIPTOR_BUFFER_INDEX];
342 void *buffer_address[MAX_DESCRIPTOR_BUFFER_INDEX];
Pekka Enberg27d46422009-08-12 11:03:36 +0300343};
Pavel Machek66101de2008-10-01 14:36:56 +0200344
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200345#define MAX_TXVGA_EEPROM 9 /* How many word(u16) of EEPROM will be used for TxVGA */
346#define MAX_RF_PARAMETER 32
Pavel Machek66101de2008-10-01 14:36:56 +0200347
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300348struct txvga_for_50 {
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200349 u8 ChanNo;
350 u8 TxVgaValue;
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300351};
Pavel Machek66101de2008-10-01 14:36:56 +0200352
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200353/*
354 * ==============================================
355 * Device related include
356 * ==============================================
357 */
Pavel Machek66101de2008-10-01 14:36:56 +0200358
Pekka Enberg9ce922f2008-10-30 13:05:42 +0200359#include "wb35reg_s.h"
360#include "wb35tx_s.h"
361#include "wb35rx_s.h"
Pavel Machek66101de2008-10-01 14:36:56 +0200362
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200363/* For Hal using ============================================ */
Pekka Enberg8e41b4b2009-01-12 18:02:47 +0200364struct hw_data {
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200365 /* For compatible with 33 */
Pavel Machek66101de2008-10-01 14:36:56 +0200366 u32 revision;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200367 u32 BB3c_cal; /* The value for Tx calibration comes from EEPROM */
368 u32 BB54_cal; /* The value for Rx calibration comes from EEPROM */
Pavel Machek66101de2008-10-01 14:36:56 +0200369
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200370 /* For surprise remove */
371 u32 SurpriseRemove; /* 0: Normal 1: Surprise remove */
Pavel Machek66101de2008-10-01 14:36:56 +0200372 u8 IsKeyPreSet;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200373 u8 CalOneTime;
Pavel Machek66101de2008-10-01 14:36:56 +0200374
375 u8 VCO_trim;
376
Pavel Machek66101de2008-10-01 14:36:56 +0200377 u32 FragCount;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200378 u32 DMAFix; /* V1_DMA_FIX The variable can be removed if driver want to save mem space for V2. */
Pavel Machek66101de2008-10-01 14:36:56 +0200379
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200380 /*
381 * ===============================================
382 * Definition for MAC address
383 * ===============================================
384 */
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 */
Pavel Machek66101de2008-10-01 14:36:56 +0200387
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200388 /*
389 * =========================================
390 * Definition for 802.11
391 * =========================================
392 */
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 */
Pavel Machek66101de2008-10-01 14:36:56 +0200396
397 u16 AID;
398 u8 ssid_length;
399 u8 Channel;
400
401 u16 ListenInterval;
402 u16 CapabilityInformation;
403
404 u16 BeaconPeriod;
405 u16 ProbeDelay;
406
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200407 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 */
Pavel Machek66101de2008-10-01 14:36:56 +0200411
412 u32 phy_para[MAX_RF_PARAMETER];
413 u32 phy_number;
414
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200415 u32 CurrentRadioSw; /* 0:On 1:Off */
416 u32 CurrentRadioHw; /* 0:On 1:Off */
Pavel Machek66101de2008-10-01 14:36:56 +0200417
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200418 u8 *power_save_point; /* Used by hal_get_power_save_mode for return value */
Pavel Machek66101de2008-10-01 14:36:56 +0200419 u8 cwmin;
420 u8 desired_power_save;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200421 u8 dtim; /* Is running dtim */
422 u8 mapping_key_replace_index; /* In Key table, the next index be replaced */
Pavel Machek66101de2008-10-01 14:36:56 +0200423
424 u16 MaxReceiveLifeTime;
425 u16 FragmentThreshold;
426 u16 FragmentThreshold_tmp;
427 u16 cwmax;
428
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200429 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) */
Pavel Machek66101de2008-10-01 14:36:56 +0200431 u8 CurrentDefaultKeyIndex;
432 u32 CurrentDefaultKeyLength;
433
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200434 /*
435 * ==================================================
436 * Variable for each module
437 * ==================================================
438 */
Pekka Enberg2894c6c2010-11-28 23:00:08 +0200439 struct usb_device *udev;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200440 struct wb35_reg reg; /* Need Wb35Reg.h */
441 struct wb35_tx Wb35Tx; /* Need Wb35Tx.h */
442 struct wb35_rx Wb35Rx; /* Need Wb35Rx.h */
Pavel Machek66101de2008-10-01 14:36:56 +0200443
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200444 struct timer_list LEDTimer; /* For LED */
Pavel Machek66101de2008-10-01 14:36:56 +0200445
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200446 u32 LEDpoint; /* For LED */
Pavel Machek66101de2008-10-01 14:36:56 +0200447
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200448 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 */
Pavel Machek66101de2008-10-01 14:36:56 +0200452
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200453 /* for Tx debug */
Pavel Machek66101de2008-10-01 14:36:56 +0200454 u32 tx_TBTT_start_count;
455 u32 tx_ETR_count;
456 u32 tx_WepOn_false_count;
457 u32 tx_Null_key_count;
458 u32 tx_retry_count[8];
459
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200460 u8 PowerIndexFromEEPROM; /* For 2412MHz */
461 u8 power_index;
462 u8 IsWaitJoinComplete; /* TRUE: set join request */
463 u8 band;
Pavel Machek66101de2008-10-01 14:36:56 +0200464
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200465 u16 SoftwareSet;
466 u16 Reserved_s;
Pavel Machek66101de2008-10-01 14:36:56 +0200467
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200468 u32 IsInitOK; /* 0: Driver starting 1: Driver init OK */
Pavel Machek66101de2008-10-01 14:36:56 +0200469
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200470 /* For Phy calibration */
471 s32 iq_rsdl_gain_tx_d2;
472 s32 iq_rsdl_phase_tx_d2;
473 u32 txvga_setting_for_cal;
Pavel Machek66101de2008-10-01 14:36:56 +0200474
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200475 u8 TxVgaSettingInEEPROM[(((MAX_TXVGA_EEPROM * 2) + 3) & ~0x03)]; /* For EEPROM value */
476 u8 TxVgaFor24[16]; /* Max is 14, 2 for alignment */
Pekka Enbergc4d562a2010-09-19 12:28:38 +0300477 struct txvga_for_50 TxVgaFor50[36]; /* 35 channels in 5G. 35x2 = 70 byte. 2 for alignments */
Pavel Machek66101de2008-10-01 14:36:56 +0200478
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200479 u16 Scan_Interval;
480 u16 RESERVED6;
Pavel Machek66101de2008-10-01 14:36:56 +0200481
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200482 /* LED control */
Pavel Machek66101de2008-10-01 14:36:56 +0200483 u32 LED_control;
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200484 /*
485 * LED_control 4 byte: Gray_Led_1[3] Gray_Led_0[2] Led[1] Led[0]
486 * Gray_Led
487 * For Led gray setting
488 * Led
489 * 0: normal control,
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
496 *
497 * Led[1] is parameter for WPS LED mode
498 * 1:InProgress
499 * 2: Error
500 * 3: Session overlap
501 * 4: Success control
502 */
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 */
Pavel Machek66101de2008-10-01 14:36:56 +0200506 u32 RxByteCountLast;
507 u32 TxByteCountLast;
508
Lars Lindley5a7df3c2010-03-28 21:52:37 +0200509 /* For global timer */
510 u32 time_count; /* TICK_TIME_100ms 1 = 100ms */
Pekka Enberg8e41b4b2009-01-12 18:02:47 +0200511};
Pavel Machek66101de2008-10-01 14:36:56 +0200512
Pekka Enberg80aba532008-10-30 13:04:29 +0200513#endif