xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/ti/wl1251/wl1251.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * This file is part of wl1251
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (c) 1998-2007 Texas Instruments Incorporated
6*4882a593Smuzhiyun  * Copyright (C) 2008-2009 Nokia Corporation
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #ifndef __WL1251_H__
10*4882a593Smuzhiyun #define __WL1251_H__
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include <linux/mutex.h>
13*4882a593Smuzhiyun #include <linux/list.h>
14*4882a593Smuzhiyun #include <linux/bitops.h>
15*4882a593Smuzhiyun #include <net/mac80211.h>
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #define DRIVER_NAME "wl1251"
18*4882a593Smuzhiyun #define DRIVER_PREFIX DRIVER_NAME ": "
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun enum {
21*4882a593Smuzhiyun 	DEBUG_NONE	= 0,
22*4882a593Smuzhiyun 	DEBUG_IRQ	= BIT(0),
23*4882a593Smuzhiyun 	DEBUG_SPI	= BIT(1),
24*4882a593Smuzhiyun 	DEBUG_BOOT	= BIT(2),
25*4882a593Smuzhiyun 	DEBUG_MAILBOX	= BIT(3),
26*4882a593Smuzhiyun 	DEBUG_NETLINK	= BIT(4),
27*4882a593Smuzhiyun 	DEBUG_EVENT	= BIT(5),
28*4882a593Smuzhiyun 	DEBUG_TX	= BIT(6),
29*4882a593Smuzhiyun 	DEBUG_RX	= BIT(7),
30*4882a593Smuzhiyun 	DEBUG_SCAN	= BIT(8),
31*4882a593Smuzhiyun 	DEBUG_CRYPT	= BIT(9),
32*4882a593Smuzhiyun 	DEBUG_PSM	= BIT(10),
33*4882a593Smuzhiyun 	DEBUG_MAC80211	= BIT(11),
34*4882a593Smuzhiyun 	DEBUG_CMD	= BIT(12),
35*4882a593Smuzhiyun 	DEBUG_ACX	= BIT(13),
36*4882a593Smuzhiyun 	DEBUG_ALL	= ~0,
37*4882a593Smuzhiyun };
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun #define DEBUG_LEVEL (DEBUG_NONE)
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun #define DEBUG_DUMP_LIMIT 1024
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun #define wl1251_error(fmt, arg...) \
44*4882a593Smuzhiyun 	printk(KERN_ERR DRIVER_PREFIX "ERROR " fmt "\n", ##arg)
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #define wl1251_warning(fmt, arg...) \
47*4882a593Smuzhiyun 	printk(KERN_WARNING DRIVER_PREFIX "WARNING " fmt "\n", ##arg)
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun #define wl1251_notice(fmt, arg...) \
50*4882a593Smuzhiyun 	printk(KERN_INFO DRIVER_PREFIX fmt "\n", ##arg)
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun #define wl1251_info(fmt, arg...) \
53*4882a593Smuzhiyun 	printk(KERN_DEBUG DRIVER_PREFIX fmt "\n", ##arg)
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun #define wl1251_debug(level, fmt, arg...) \
56*4882a593Smuzhiyun 	do { \
57*4882a593Smuzhiyun 		if (level & DEBUG_LEVEL) \
58*4882a593Smuzhiyun 			printk(KERN_DEBUG DRIVER_PREFIX fmt "\n", ##arg); \
59*4882a593Smuzhiyun 	} while (0)
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun #define wl1251_dump(level, prefix, buf, len)	\
62*4882a593Smuzhiyun 	do { \
63*4882a593Smuzhiyun 		if (level & DEBUG_LEVEL) \
64*4882a593Smuzhiyun 			print_hex_dump(KERN_DEBUG, DRIVER_PREFIX prefix, \
65*4882a593Smuzhiyun 				       DUMP_PREFIX_OFFSET, 16, 1,	\
66*4882a593Smuzhiyun 				       buf,				\
67*4882a593Smuzhiyun 				       min_t(size_t, len, DEBUG_DUMP_LIMIT), \
68*4882a593Smuzhiyun 				       0);				\
69*4882a593Smuzhiyun 	} while (0)
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun #define wl1251_dump_ascii(level, prefix, buf, len)	\
72*4882a593Smuzhiyun 	do { \
73*4882a593Smuzhiyun 		if (level & DEBUG_LEVEL) \
74*4882a593Smuzhiyun 			print_hex_dump(KERN_DEBUG, DRIVER_PREFIX prefix, \
75*4882a593Smuzhiyun 				       DUMP_PREFIX_OFFSET, 16, 1,	\
76*4882a593Smuzhiyun 				       buf,				\
77*4882a593Smuzhiyun 				       min_t(size_t, len, DEBUG_DUMP_LIMIT), \
78*4882a593Smuzhiyun 				       true);				\
79*4882a593Smuzhiyun 	} while (0)
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun #define WL1251_DEFAULT_RX_CONFIG (CFG_UNI_FILTER_EN |	\
82*4882a593Smuzhiyun 				  CFG_MC_FILTER_EN |	\
83*4882a593Smuzhiyun 				  CFG_BSSID_FILTER_EN)
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun #define WL1251_DEFAULT_RX_FILTER (CFG_RX_PRSP_EN |  \
86*4882a593Smuzhiyun 				  CFG_RX_MGMT_EN |  \
87*4882a593Smuzhiyun 				  CFG_RX_DATA_EN |  \
88*4882a593Smuzhiyun 				  CFG_RX_CTL_EN |   \
89*4882a593Smuzhiyun 				  CFG_RX_BCN_EN |   \
90*4882a593Smuzhiyun 				  CFG_RX_AUTH_EN |  \
91*4882a593Smuzhiyun 				  CFG_RX_ASSOC_EN)
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun #define WL1251_BUSY_WORD_LEN 8
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun struct boot_attr {
96*4882a593Smuzhiyun 	u32 radio_type;
97*4882a593Smuzhiyun 	u8 mac_clock;
98*4882a593Smuzhiyun 	u8 arm_clock;
99*4882a593Smuzhiyun 	int firmware_debug;
100*4882a593Smuzhiyun 	u32 minor;
101*4882a593Smuzhiyun 	u32 major;
102*4882a593Smuzhiyun 	u32 bugfix;
103*4882a593Smuzhiyun };
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun enum wl1251_state {
106*4882a593Smuzhiyun 	WL1251_STATE_OFF,
107*4882a593Smuzhiyun 	WL1251_STATE_ON,
108*4882a593Smuzhiyun 	WL1251_STATE_PLT,
109*4882a593Smuzhiyun };
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun enum wl1251_partition_type {
112*4882a593Smuzhiyun 	PART_DOWN,
113*4882a593Smuzhiyun 	PART_WORK,
114*4882a593Smuzhiyun 	PART_DRPW,
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun 	PART_TABLE_LEN
117*4882a593Smuzhiyun };
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun enum wl1251_station_mode {
120*4882a593Smuzhiyun 	STATION_ACTIVE_MODE,
121*4882a593Smuzhiyun 	STATION_POWER_SAVE_MODE,
122*4882a593Smuzhiyun 	STATION_IDLE,
123*4882a593Smuzhiyun };
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun struct wl1251_partition {
126*4882a593Smuzhiyun 	u32 size;
127*4882a593Smuzhiyun 	u32 start;
128*4882a593Smuzhiyun };
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun struct wl1251_partition_set {
131*4882a593Smuzhiyun 	struct wl1251_partition mem;
132*4882a593Smuzhiyun 	struct wl1251_partition reg;
133*4882a593Smuzhiyun };
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun struct wl1251;
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun struct wl1251_stats {
138*4882a593Smuzhiyun 	struct acx_statistics *fw_stats;
139*4882a593Smuzhiyun 	unsigned long fw_stats_update;
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun 	unsigned int retry_count;
142*4882a593Smuzhiyun 	unsigned int excessive_retries;
143*4882a593Smuzhiyun };
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun struct wl1251_debugfs {
146*4882a593Smuzhiyun 	struct dentry *rootdir;
147*4882a593Smuzhiyun 	struct dentry *fw_statistics;
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun 	struct dentry *tx_internal_desc_overflow;
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun 	struct dentry *rx_out_of_mem;
152*4882a593Smuzhiyun 	struct dentry *rx_hdr_overflow;
153*4882a593Smuzhiyun 	struct dentry *rx_hw_stuck;
154*4882a593Smuzhiyun 	struct dentry *rx_dropped;
155*4882a593Smuzhiyun 	struct dentry *rx_fcs_err;
156*4882a593Smuzhiyun 	struct dentry *rx_xfr_hint_trig;
157*4882a593Smuzhiyun 	struct dentry *rx_path_reset;
158*4882a593Smuzhiyun 	struct dentry *rx_reset_counter;
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun 	struct dentry *dma_rx_requested;
161*4882a593Smuzhiyun 	struct dentry *dma_rx_errors;
162*4882a593Smuzhiyun 	struct dentry *dma_tx_requested;
163*4882a593Smuzhiyun 	struct dentry *dma_tx_errors;
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun 	struct dentry *isr_cmd_cmplt;
166*4882a593Smuzhiyun 	struct dentry *isr_fiqs;
167*4882a593Smuzhiyun 	struct dentry *isr_rx_headers;
168*4882a593Smuzhiyun 	struct dentry *isr_rx_mem_overflow;
169*4882a593Smuzhiyun 	struct dentry *isr_rx_rdys;
170*4882a593Smuzhiyun 	struct dentry *isr_irqs;
171*4882a593Smuzhiyun 	struct dentry *isr_tx_procs;
172*4882a593Smuzhiyun 	struct dentry *isr_decrypt_done;
173*4882a593Smuzhiyun 	struct dentry *isr_dma0_done;
174*4882a593Smuzhiyun 	struct dentry *isr_dma1_done;
175*4882a593Smuzhiyun 	struct dentry *isr_tx_exch_complete;
176*4882a593Smuzhiyun 	struct dentry *isr_commands;
177*4882a593Smuzhiyun 	struct dentry *isr_rx_procs;
178*4882a593Smuzhiyun 	struct dentry *isr_hw_pm_mode_changes;
179*4882a593Smuzhiyun 	struct dentry *isr_host_acknowledges;
180*4882a593Smuzhiyun 	struct dentry *isr_pci_pm;
181*4882a593Smuzhiyun 	struct dentry *isr_wakeups;
182*4882a593Smuzhiyun 	struct dentry *isr_low_rssi;
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun 	struct dentry *wep_addr_key_count;
185*4882a593Smuzhiyun 	struct dentry *wep_default_key_count;
186*4882a593Smuzhiyun 	/* skipping wep.reserved */
187*4882a593Smuzhiyun 	struct dentry *wep_key_not_found;
188*4882a593Smuzhiyun 	struct dentry *wep_decrypt_fail;
189*4882a593Smuzhiyun 	struct dentry *wep_packets;
190*4882a593Smuzhiyun 	struct dentry *wep_interrupt;
191*4882a593Smuzhiyun 
192*4882a593Smuzhiyun 	struct dentry *pwr_ps_enter;
193*4882a593Smuzhiyun 	struct dentry *pwr_elp_enter;
194*4882a593Smuzhiyun 	struct dentry *pwr_missing_bcns;
195*4882a593Smuzhiyun 	struct dentry *pwr_wake_on_host;
196*4882a593Smuzhiyun 	struct dentry *pwr_wake_on_timer_exp;
197*4882a593Smuzhiyun 	struct dentry *pwr_tx_with_ps;
198*4882a593Smuzhiyun 	struct dentry *pwr_tx_without_ps;
199*4882a593Smuzhiyun 	struct dentry *pwr_rcvd_beacons;
200*4882a593Smuzhiyun 	struct dentry *pwr_power_save_off;
201*4882a593Smuzhiyun 	struct dentry *pwr_enable_ps;
202*4882a593Smuzhiyun 	struct dentry *pwr_disable_ps;
203*4882a593Smuzhiyun 	struct dentry *pwr_fix_tsf_ps;
204*4882a593Smuzhiyun 	/* skipping cont_miss_bcns_spread for now */
205*4882a593Smuzhiyun 	struct dentry *pwr_rcvd_awake_beacons;
206*4882a593Smuzhiyun 
207*4882a593Smuzhiyun 	struct dentry *mic_rx_pkts;
208*4882a593Smuzhiyun 	struct dentry *mic_calc_failure;
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun 	struct dentry *aes_encrypt_fail;
211*4882a593Smuzhiyun 	struct dentry *aes_decrypt_fail;
212*4882a593Smuzhiyun 	struct dentry *aes_encrypt_packets;
213*4882a593Smuzhiyun 	struct dentry *aes_decrypt_packets;
214*4882a593Smuzhiyun 	struct dentry *aes_encrypt_interrupt;
215*4882a593Smuzhiyun 	struct dentry *aes_decrypt_interrupt;
216*4882a593Smuzhiyun 
217*4882a593Smuzhiyun 	struct dentry *event_heart_beat;
218*4882a593Smuzhiyun 	struct dentry *event_calibration;
219*4882a593Smuzhiyun 	struct dentry *event_rx_mismatch;
220*4882a593Smuzhiyun 	struct dentry *event_rx_mem_empty;
221*4882a593Smuzhiyun 	struct dentry *event_rx_pool;
222*4882a593Smuzhiyun 	struct dentry *event_oom_late;
223*4882a593Smuzhiyun 	struct dentry *event_phy_transmit_error;
224*4882a593Smuzhiyun 	struct dentry *event_tx_stuck;
225*4882a593Smuzhiyun 
226*4882a593Smuzhiyun 	struct dentry *ps_pspoll_timeouts;
227*4882a593Smuzhiyun 	struct dentry *ps_upsd_timeouts;
228*4882a593Smuzhiyun 	struct dentry *ps_upsd_max_sptime;
229*4882a593Smuzhiyun 	struct dentry *ps_upsd_max_apturn;
230*4882a593Smuzhiyun 	struct dentry *ps_pspoll_max_apturn;
231*4882a593Smuzhiyun 	struct dentry *ps_pspoll_utilization;
232*4882a593Smuzhiyun 	struct dentry *ps_upsd_utilization;
233*4882a593Smuzhiyun 
234*4882a593Smuzhiyun 	struct dentry *rxpipe_rx_prep_beacon_drop;
235*4882a593Smuzhiyun 	struct dentry *rxpipe_descr_host_int_trig_rx_data;
236*4882a593Smuzhiyun 	struct dentry *rxpipe_beacon_buffer_thres_host_int_trig_rx_data;
237*4882a593Smuzhiyun 	struct dentry *rxpipe_missed_beacon_host_int_trig_rx_data;
238*4882a593Smuzhiyun 	struct dentry *rxpipe_tx_xfr_host_int_trig_rx_data;
239*4882a593Smuzhiyun 
240*4882a593Smuzhiyun 	struct dentry *tx_queue_len;
241*4882a593Smuzhiyun 	struct dentry *tx_queue_status;
242*4882a593Smuzhiyun 
243*4882a593Smuzhiyun 	struct dentry *retry_count;
244*4882a593Smuzhiyun 	struct dentry *excessive_retries;
245*4882a593Smuzhiyun };
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun struct wl1251_if_operations {
248*4882a593Smuzhiyun 	void (*read)(struct wl1251 *wl, int addr, void *buf, size_t len);
249*4882a593Smuzhiyun 	void (*write)(struct wl1251 *wl, int addr, void *buf, size_t len);
250*4882a593Smuzhiyun 	void (*read_elp)(struct wl1251 *wl, int addr, u32 *val);
251*4882a593Smuzhiyun 	void (*write_elp)(struct wl1251 *wl, int addr, u32 val);
252*4882a593Smuzhiyun 	int  (*power)(struct wl1251 *wl, bool enable);
253*4882a593Smuzhiyun 	void (*reset)(struct wl1251 *wl);
254*4882a593Smuzhiyun 	void (*enable_irq)(struct wl1251 *wl);
255*4882a593Smuzhiyun 	void (*disable_irq)(struct wl1251 *wl);
256*4882a593Smuzhiyun };
257*4882a593Smuzhiyun 
258*4882a593Smuzhiyun struct wl1251 {
259*4882a593Smuzhiyun 	struct ieee80211_hw *hw;
260*4882a593Smuzhiyun 	bool mac80211_registered;
261*4882a593Smuzhiyun 
262*4882a593Smuzhiyun 	void *if_priv;
263*4882a593Smuzhiyun 	const struct wl1251_if_operations *if_ops;
264*4882a593Smuzhiyun 
265*4882a593Smuzhiyun 	int power_gpio;
266*4882a593Smuzhiyun 	int irq;
267*4882a593Smuzhiyun 	bool use_eeprom;
268*4882a593Smuzhiyun 
269*4882a593Smuzhiyun 	struct regulator *vio;
270*4882a593Smuzhiyun 
271*4882a593Smuzhiyun 	spinlock_t wl_lock;
272*4882a593Smuzhiyun 
273*4882a593Smuzhiyun 	enum wl1251_state state;
274*4882a593Smuzhiyun 	struct mutex mutex;
275*4882a593Smuzhiyun 
276*4882a593Smuzhiyun 	int physical_mem_addr;
277*4882a593Smuzhiyun 	int physical_reg_addr;
278*4882a593Smuzhiyun 	int virtual_mem_addr;
279*4882a593Smuzhiyun 	int virtual_reg_addr;
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun 	int cmd_box_addr;
282*4882a593Smuzhiyun 	int event_box_addr;
283*4882a593Smuzhiyun 	struct boot_attr boot_attr;
284*4882a593Smuzhiyun 
285*4882a593Smuzhiyun 	u8 *fw;
286*4882a593Smuzhiyun 	size_t fw_len;
287*4882a593Smuzhiyun 	u8 *nvs;
288*4882a593Smuzhiyun 	size_t nvs_len;
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun 	u8 bssid[ETH_ALEN];
291*4882a593Smuzhiyun 	u8 mac_addr[ETH_ALEN];
292*4882a593Smuzhiyun 	u8 bss_type;
293*4882a593Smuzhiyun 	u8 listen_int;
294*4882a593Smuzhiyun 	int channel;
295*4882a593Smuzhiyun 	bool monitor_present;
296*4882a593Smuzhiyun 	bool joined;
297*4882a593Smuzhiyun 
298*4882a593Smuzhiyun 	void *target_mem_map;
299*4882a593Smuzhiyun 	struct acx_data_path_params_resp *data_path;
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun 	/* Number of TX packets transferred to the FW, modulo 16 */
302*4882a593Smuzhiyun 	u32 data_in_count;
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun 	/* Frames scheduled for transmission, not handled yet */
305*4882a593Smuzhiyun 	struct sk_buff_head tx_queue;
306*4882a593Smuzhiyun 	bool tx_queue_stopped;
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun 	struct work_struct tx_work;
309*4882a593Smuzhiyun 
310*4882a593Smuzhiyun 	/* Pending TX frames */
311*4882a593Smuzhiyun 	struct sk_buff *tx_frames[16];
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun 	/*
314*4882a593Smuzhiyun 	 * Index pointing to the next TX complete entry
315*4882a593Smuzhiyun 	 * in the cyclic XT complete array we get from
316*4882a593Smuzhiyun 	 * the FW.
317*4882a593Smuzhiyun 	 */
318*4882a593Smuzhiyun 	u32 next_tx_complete;
319*4882a593Smuzhiyun 
320*4882a593Smuzhiyun 	/* FW Rx counter */
321*4882a593Smuzhiyun 	u32 rx_counter;
322*4882a593Smuzhiyun 
323*4882a593Smuzhiyun 	/* Rx frames handled */
324*4882a593Smuzhiyun 	u32 rx_handled;
325*4882a593Smuzhiyun 
326*4882a593Smuzhiyun 	/* Current double buffer */
327*4882a593Smuzhiyun 	u32 rx_current_buffer;
328*4882a593Smuzhiyun 	u32 rx_last_id;
329*4882a593Smuzhiyun 
330*4882a593Smuzhiyun 	/* The target interrupt mask */
331*4882a593Smuzhiyun 	u32 intr_mask;
332*4882a593Smuzhiyun 	struct work_struct irq_work;
333*4882a593Smuzhiyun 
334*4882a593Smuzhiyun 	/* The mbox event mask */
335*4882a593Smuzhiyun 	u32 event_mask;
336*4882a593Smuzhiyun 
337*4882a593Smuzhiyun 	/* Mailbox pointers */
338*4882a593Smuzhiyun 	u32 mbox_ptr[2];
339*4882a593Smuzhiyun 
340*4882a593Smuzhiyun 	/* Are we currently scanning */
341*4882a593Smuzhiyun 	bool scanning;
342*4882a593Smuzhiyun 
343*4882a593Smuzhiyun 	/* Default key (for WEP) */
344*4882a593Smuzhiyun 	u32 default_key;
345*4882a593Smuzhiyun 
346*4882a593Smuzhiyun 	unsigned int tx_mgmt_frm_rate;
347*4882a593Smuzhiyun 	unsigned int tx_mgmt_frm_mod;
348*4882a593Smuzhiyun 
349*4882a593Smuzhiyun 	unsigned int rx_config;
350*4882a593Smuzhiyun 	unsigned int rx_filter;
351*4882a593Smuzhiyun 
352*4882a593Smuzhiyun 	/* is firmware in elp mode */
353*4882a593Smuzhiyun 	bool elp;
354*4882a593Smuzhiyun 
355*4882a593Smuzhiyun 	struct delayed_work elp_work;
356*4882a593Smuzhiyun 
357*4882a593Smuzhiyun 	enum wl1251_station_mode station_mode;
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun 	/* PSM mode requested */
360*4882a593Smuzhiyun 	bool psm_requested;
361*4882a593Smuzhiyun 
362*4882a593Smuzhiyun 	/* retry counter for PSM entries */
363*4882a593Smuzhiyun 	u8 psm_entry_retry;
364*4882a593Smuzhiyun 
365*4882a593Smuzhiyun 	u16 beacon_int;
366*4882a593Smuzhiyun 	u8 dtim_period;
367*4882a593Smuzhiyun 
368*4882a593Smuzhiyun 	/* in dBm */
369*4882a593Smuzhiyun 	int power_level;
370*4882a593Smuzhiyun 
371*4882a593Smuzhiyun 	int rssi_thold;
372*4882a593Smuzhiyun 
373*4882a593Smuzhiyun 	struct wl1251_stats stats;
374*4882a593Smuzhiyun 	struct wl1251_debugfs debugfs;
375*4882a593Smuzhiyun 
376*4882a593Smuzhiyun 	__le32 buffer_32;
377*4882a593Smuzhiyun 	u32 buffer_cmd;
378*4882a593Smuzhiyun 	u8 buffer_busyword[WL1251_BUSY_WORD_LEN];
379*4882a593Smuzhiyun 	struct wl1251_rx_descriptor *rx_descriptor;
380*4882a593Smuzhiyun 
381*4882a593Smuzhiyun 	struct ieee80211_vif *vif;
382*4882a593Smuzhiyun 
383*4882a593Smuzhiyun 	u32 chip_id;
384*4882a593Smuzhiyun 	char fw_ver[21];
385*4882a593Smuzhiyun 
386*4882a593Smuzhiyun 	/* Most recently reported noise in dBm */
387*4882a593Smuzhiyun 	s8 noise;
388*4882a593Smuzhiyun };
389*4882a593Smuzhiyun 
390*4882a593Smuzhiyun int wl1251_plt_start(struct wl1251 *wl);
391*4882a593Smuzhiyun int wl1251_plt_stop(struct wl1251 *wl);
392*4882a593Smuzhiyun 
393*4882a593Smuzhiyun struct ieee80211_hw *wl1251_alloc_hw(void);
394*4882a593Smuzhiyun int wl1251_free_hw(struct wl1251 *wl);
395*4882a593Smuzhiyun int wl1251_init_ieee80211(struct wl1251 *wl);
396*4882a593Smuzhiyun void wl1251_enable_interrupts(struct wl1251 *wl);
397*4882a593Smuzhiyun void wl1251_disable_interrupts(struct wl1251 *wl);
398*4882a593Smuzhiyun 
399*4882a593Smuzhiyun #define DEFAULT_HW_GEN_MODULATION_TYPE    CCK_LONG /* Long Preamble */
400*4882a593Smuzhiyun #define DEFAULT_HW_GEN_TX_RATE          RATE_2MBPS
401*4882a593Smuzhiyun #define JOIN_TIMEOUT 5000 /* 5000 milliseconds to join */
402*4882a593Smuzhiyun 
403*4882a593Smuzhiyun #define WL1251_DEFAULT_POWER_LEVEL 20
404*4882a593Smuzhiyun 
405*4882a593Smuzhiyun #define WL1251_TX_QUEUE_LOW_WATERMARK  10
406*4882a593Smuzhiyun #define WL1251_TX_QUEUE_HIGH_WATERMARK 25
407*4882a593Smuzhiyun 
408*4882a593Smuzhiyun #define WL1251_DEFAULT_BEACON_INT 100
409*4882a593Smuzhiyun #define WL1251_DEFAULT_DTIM_PERIOD 1
410*4882a593Smuzhiyun 
411*4882a593Smuzhiyun #define WL1251_DEFAULT_CHANNEL 0
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun #define WL1251_DEFAULT_BET_CONSECUTIVE 10
414*4882a593Smuzhiyun 
415*4882a593Smuzhiyun #define CHIP_ID_1251_PG10	           (0x7010101)
416*4882a593Smuzhiyun #define CHIP_ID_1251_PG11	           (0x7020101)
417*4882a593Smuzhiyun #define CHIP_ID_1251_PG12	           (0x7030101)
418*4882a593Smuzhiyun #define CHIP_ID_1271_PG10	           (0x4030101)
419*4882a593Smuzhiyun #define CHIP_ID_1271_PG20	           (0x4030111)
420*4882a593Smuzhiyun 
421*4882a593Smuzhiyun #define WL1251_FW_NAME "ti-connectivity/wl1251-fw.bin"
422*4882a593Smuzhiyun #define WL1251_NVS_NAME "ti-connectivity/wl1251-nvs.bin"
423*4882a593Smuzhiyun 
424*4882a593Smuzhiyun #define WL1251_POWER_ON_SLEEP 10 /* in milliseconds */
425*4882a593Smuzhiyun 
426*4882a593Smuzhiyun #define WL1251_PART_DOWN_MEM_START	0x0
427*4882a593Smuzhiyun #define WL1251_PART_DOWN_MEM_SIZE	0x16800
428*4882a593Smuzhiyun #define WL1251_PART_DOWN_REG_START	REGISTERS_BASE
429*4882a593Smuzhiyun #define WL1251_PART_DOWN_REG_SIZE	REGISTERS_DOWN_SIZE
430*4882a593Smuzhiyun 
431*4882a593Smuzhiyun #define WL1251_PART_WORK_MEM_START	0x28000
432*4882a593Smuzhiyun #define WL1251_PART_WORK_MEM_SIZE	0x14000
433*4882a593Smuzhiyun #define WL1251_PART_WORK_REG_START	REGISTERS_BASE
434*4882a593Smuzhiyun #define WL1251_PART_WORK_REG_SIZE	REGISTERS_WORK_SIZE
435*4882a593Smuzhiyun 
436*4882a593Smuzhiyun #define WL1251_DEFAULT_LOW_RSSI_WEIGHT          10
437*4882a593Smuzhiyun #define WL1251_DEFAULT_LOW_RSSI_DEPTH           10
438*4882a593Smuzhiyun 
439*4882a593Smuzhiyun #endif
440