1 #ifndef __WINBOND_WB35REG_S_H
2 #define __WINBOND_WB35REG_S_H
3 
4 #include <linux/spinlock.h>
5 #include <linux/types.h>
6 #include <asm/atomic.h>
7 
8 struct hw_data;
9 
10 /* =========================================================================
11  *
12  *			HAL setting function
13  *
14  *		========================================
15  *		|Uxx| 	|Dxx|	|Mxx|	|BB|	|RF|
16  *		========================================
17  *			|					|
18  *		Wb35Reg_Read		Wb35Reg_Write
19  *
20  *		----------------------------------------
21  *				WbUsb_CallUSBDASync	supplied By WbUsb module
22  * ==========================================================================
23  */
24 #define GetBit(dwData, i)	(dwData & (0x00000001 << i))
25 #define SetBit(dwData, i)	(dwData | (0x00000001 << i))
26 #define ClearBit(dwData, i)	(dwData & ~(0x00000001 << i))
27 
28 #define	IGNORE_INCREMENT	0
29 #define	AUTO_INCREMENT		0
30 #define	NO_INCREMENT		1
31 #define REG_DIRECTION(_x, _y)	((_y)->DIRECT == 0 ? usb_rcvctrlpipe(_x, 0) : usb_sndctrlpipe(_x, 0))
32 #define REG_BUF_SIZE(_x)	((_x)->bRequest == 0x04 ? cpu_to_le16((_x)->wLength) : 4)
33 
34 #define BB48_DEFAULT_AL2230_11B		0x0033447c
35 #define BB4C_DEFAULT_AL2230_11B		0x0A00FEFF
36 #define BB48_DEFAULT_AL2230_11G		0x00332C1B
37 #define BB4C_DEFAULT_AL2230_11G		0x0A00FEFF
38 
39 
40 #define BB48_DEFAULT_WB242_11B		0x00292315	/* backoff  2dB */
41 #define BB4C_DEFAULT_WB242_11B		0x0800FEFF	/* backoff  2dB */
42 #define BB48_DEFAULT_WB242_11G		0x00453B24
43 #define BB4C_DEFAULT_WB242_11G		0x0E00FEFF
44 
45 /*
46  * ====================================
47  *  Default setting for Mxx
48  * ====================================
49  */
50 #define DEFAULT_CWMIN			31	/* (M2C) CWmin. Its value is in the range 0-31. */
51 #define DEFAULT_CWMAX			1023	/* (M2C) CWmax. Its value is in the range 0-1023. */
52 #define DEFAULT_AID			1	/* (M34) AID. Its value is in the range 1-2007. */
53 
54 #define DEFAULT_RATE_RETRY_LIMIT	2	/* (M38) as named */
55 
56 #define DEFAULT_LONG_RETRY_LIMIT	7	/* (M38) LongRetryLimit. Its value is in the range 0-15. */
57 #define DEFAULT_SHORT_RETRY_LIMIT	7	/* (M38) ShortRetryLimit. Its value is in the range 0-15. */
58 #define DEFAULT_PIFST			25	/* (M3C) PIFS Time. Its value is in the range 0-65535. */
59 #define DEFAULT_EIFST			354	/* (M3C) EIFS Time. Its value is in the range 0-1048575. */
60 #define DEFAULT_DIFST			45	/* (M3C) DIFS Time. Its value is in the range 0-65535. */
61 #define DEFAULT_SIFST			5	/* (M3C) SIFS Time. Its value is in the range 0-65535. */
62 #define DEFAULT_OSIFST			10	/* (M3C) Original SIFS Time. Its value is in the range 0-15. */
63 #define DEFAULT_ATIMWD			0	/* (M40) ATIM Window. Its value is in the range 0-65535. */
64 #define DEFAULT_SLOT_TIME		20	/* (M40) ($) SlotTime. Its value is in the range 0-255. */
65 #define DEFAULT_MAX_TX_MSDU_LIFE_TIME	512	/* (M44) MaxTxMSDULifeTime. Its value is in the range 0-4294967295. */
66 #define DEFAULT_BEACON_INTERVAL		500	/* (M48) Beacon Interval. Its value is in the range 0-65535. */
67 #define DEFAULT_PROBE_DELAY_TIME	200	/* (M48) Probe Delay Time. Its value is in the range 0-65535. */
68 #define DEFAULT_PROTOCOL_VERSION	0	/* (M4C) */
69 #define DEFAULT_MAC_POWER_STATE		2	/* (M4C) 2: MAC at power active */
70 #define DEFAULT_DTIM_ALERT_TIME		0
71 
72 
73 struct wb35_reg_queue {
74 	struct urb	*urb;
75 	void		*pUsbReq;
76 	void		*Next;
77 	union {
78 		u32	VALUE;
79 		u32	*pBuffer;
80 	};
81 	u8		RESERVED[4];	/* space reserved for communication */
82 	u16		INDEX;		/* For storing the register index */
83 	u8		RESERVED_VALID;	/* Indicate whether the RESERVED space is valid at this command. */
84 	u8		DIRECT;		/* 0:In   1:Out */
85 };
86 
87 /*
88  * ====================================
89  * Internal variable for module
90  * ====================================
91  */
92 #define MAX_SQ3_FILTER_SIZE		5
93 struct wb35_reg {
94 	/*
95 	 * ============================
96 	 *  Register Bank backup
97 	 * ============================
98 	 */
99 	u32	U1B0;			/* bit16 record the h/w radio on/off status */
100 	u32	U1BC_LEDConfigure;
101 	u32	D00_DmaControl;
102 	u32	M00_MacControl;
103 	union {
104 		struct {
105 			u32	M04_MulticastAddress1;
106 			u32	M08_MulticastAddress2;
107 		};
108 		u8		Multicast[8];	/* contents of card multicast registers */
109 	};
110 
111 	u32	M24_MacControl;
112 	u32	M28_MacControl;
113 	u32	M2C_MacControl;
114 	u32	M38_MacControl;
115 	u32	M3C_MacControl;
116 	u32	M40_MacControl;
117 	u32	M44_MacControl;
118 	u32	M48_MacControl;
119 	u32	M4C_MacStatus;
120 	u32	M60_MacControl;
121 	u32	M68_MacControl;
122 	u32	M70_MacControl;
123 	u32	M74_MacControl;
124 	u32	M78_ERPInformation;
125 	u32	M7C_MacControl;
126 	u32	M80_MacControl;
127 	u32	M84_MacControl;
128 	u32	M88_MacControl;
129 	u32	M98_MacControl;
130 
131 	/* Baseband register */
132 	u32	BB0C;	/* Used for LNA calculation */
133 	u32	BB2C;
134 	u32	BB30;	/* 11b acquisition control register */
135 	u32	BB3C;
136 	u32	BB48;
137 	u32	BB4C;
138 	u32	BB50;	/* mode control register */
139 	u32	BB54;
140 	u32	BB58;	/* IQ_ALPHA */
141 	u32	BB5C;	/* For test */
142 	u32	BB60;	/* for WTO read value */
143 
144 	/* VM */
145 	spinlock_t	EP0VM_spin_lock; /* 4B */
146 	u32		EP0VM_status; /* $$ */
147 	struct wb35_reg_queue *reg_first;
148 	struct wb35_reg_queue *reg_last;
149 	atomic_t	RegFireCount;
150 
151 	/* Hardware status */
152 	u8	EP0vm_state;
153 	u8	mac_power_save;
154 	u8	EEPROMPhyType; /*
155 				* 0 ~ 15 for Maxim (0 ĄV MAX2825, 1 ĄV MAX2827, 2 ĄV MAX2828, 3 ĄV MAX2829),
156 				* 16 ~ 31 for Airoha (16 ĄV AL2230, 11 - AL7230)
157 				* 32 ~ Reserved
158 				* 33 ~ 47 For WB242 ( 33 - WB242, 34 - WB242 with new Txvga 0.5 db step)
159 				* 48 ~ 255 ARE RESERVED.
160 				*/
161 	u8	EEPROMRegion;	/* Region setting in EEPROM */
162 
163 	u32	SyncIoPause; /* If user use the Sync Io to access Hw, then pause the async access */
164 
165 	u8	LNAValue[4]; /* Table for speed up running */
166 	u32	SQ3_filter[MAX_SQ3_FILTER_SIZE];
167 	u32	SQ3_index;
168 };
169 
170 /* =====================================================================
171  * Function declaration
172  * =====================================================================
173  */
174 void hal_remove_mapping_key(struct hw_data *hw_data, u8 *mac_addr);
175 void hal_remove_default_key(struct hw_data *hw_data, u32 index);
176 unsigned char hal_set_mapping_key(struct hw_data *adapter, u8 *mac_addr,
177 				  u8 null_key, u8 wep_on, u8 *tx_tsc,
178 				  u8 *rx_tsc, u8 key_type, u8 key_len,
179 				  u8 *key_data);
180 unsigned char hal_set_default_key(struct hw_data *adapter, u8 index,
181 				  u8 null_key, u8 wep_on, u8 *tx_tsc,
182 				  u8 *rx_tsc, u8 key_type, u8 key_len,
183 				  u8 *key_data);
184 void hal_clear_all_default_key(struct hw_data *hw_data);
185 void hal_clear_all_group_key(struct hw_data *hw_data);
186 void hal_clear_all_mapping_key(struct hw_data *hw_data);
187 void hal_clear_all_key(struct hw_data *hw_data);
188 void hal_set_power_save_mode(struct hw_data *hw_data, unsigned char power_save,
189 			     unsigned char wakeup, unsigned char dtim);
190 void hal_get_power_save_mode(struct hw_data *hw_data, u8 *in_pwr_save);
191 void hal_set_slot_time(struct hw_data *hw_data, u8 type);
192 
193 #define hal_set_atim_window(_A, _ATM)
194 
195 void hal_start_bss(struct hw_data *hw_data, u8 mac_op_mode);
196 
197 /* 0:BSS STA 1:IBSS STA */
198 void hal_join_request(struct hw_data *hw_data, u8 bss_type);
199 
200 void hal_stop_sync_bss(struct hw_data *hw_data);
201 void hal_resume_sync_bss(struct hw_data *hw_data);
202 void hal_set_aid(struct hw_data *hw_data, u16 aid);
203 void hal_set_bssid(struct hw_data *hw_data, u8 *bssid);
204 void hal_get_bssid(struct hw_data *hw_data, u8 *bssid);
205 void hal_set_listen_interval(struct hw_data *hw_data, u16 listen_interval);
206 void hal_set_cap_info(struct hw_data *hw_data, u16 capability_info);
207 void hal_set_ssid(struct hw_data *hw_data, u8 *ssid, u8 ssid_len);
208 void hal_start_tx0(struct hw_data *hw_data);
209 
210 #define hal_get_cwmin(_A)	((_A)->cwmin)
211 
212 void hal_set_cwmax(struct hw_data *hw_data, u16 cwin_max);
213 
214 #define hal_get_cwmax(_A)	((_A)->cwmax)
215 
216 void hal_set_rsn_wpa(struct hw_data *hw_data, u32 *rsn_ie_bitmap,
217 		     u32 *rsn_oui_type , unsigned char desired_auth_mode);
218 void hal_set_connect_info(struct hw_data *hw_data, unsigned char bo_connect);
219 u8 hal_get_est_sq3(struct hw_data *hw_data, u8 count);
220 void hal_descriptor_indicate(struct hw_data *hw_data,
221 			     struct wb35_descriptor *des);
222 u8 hal_get_antenna_number(struct hw_data *hw_data);
223 u32 hal_get_bss_pk_cnt(struct hw_data *hw_data);
224 
225 #define hal_get_region_from_EEPROM(_A)	((_A)->reg.EEPROMRegion)
226 #define hal_get_tx_buffer(_A, _B)	Wb35Tx_get_tx_buffer(_A, _B)
227 #define hal_software_set(_A)		(_A->SoftwareSet)
228 #define hal_driver_init_OK(_A)		(_A->IsInitOK)
229 #define hal_rssi_boundary_high(_A)	(_A->RSSI_high)
230 #define hal_rssi_boundary_low(_A)	(_A->RSSI_low)
231 #define hal_scan_interval(_A)		(_A->Scan_Interval)
232 
233 #define PHY_DEBUG(msg, args...)
234 
235 /* return 100ms count */
236 #define hal_get_time_count(_P)		(_P->time_count / 10)
237 
238 #define hal_ibss_disconnect(_A)		(hal_stop_sync_bss(_A))
239 
240 #endif
241