8723BU: Update 8723BU wifi driver to version v4.3.16_14189.20150519_BTCOEX2015119...
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bu / include / drv_types.h
1 /******************************************************************************
2  *
3  * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of version 2 of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17  *
18  *
19  ******************************************************************************/
20 /*-------------------------------------------------------------------------------
21
22         For type defines and data structure defines
23
24 --------------------------------------------------------------------------------*/
25
26
27 #ifndef __DRV_TYPES_H__
28 #define __DRV_TYPES_H__
29
30 #include <drv_conf.h>
31 #include <basic_types.h>
32 #include <osdep_service.h>
33 #include <rtw_byteorder.h>
34 #include <wlan_bssdef.h>
35 #include <wifi.h>
36 #include <ieee80211.h>
37 #ifdef CONFIG_ARP_KEEP_ALIVE
38 #include <net/neighbour.h>
39 #include <net/arp.h>
40 #endif
41
42 #ifdef PLATFORM_OS_XP
43 #include <drv_types_xp.h>
44 #endif
45
46 #ifdef PLATFORM_OS_CE
47 #include <drv_types_ce.h>
48 #endif
49
50 #ifdef PLATFORM_LINUX
51 #include <drv_types_linux.h>
52 #endif
53
54 enum _NIC_VERSION {
55
56         RTL8711_NIC,
57         RTL8712_NIC,
58         RTL8713_NIC,
59         RTL8716_NIC
60
61 };
62
63 typedef struct _ADAPTER _adapter, ADAPTER,*PADAPTER;
64
65 #include <rtw_debug.h>
66 #include <rtw_rf.h>
67
68 #ifdef CONFIG_80211N_HT
69 #include <rtw_ht.h>
70 #endif
71
72 #ifdef CONFIG_80211AC_VHT
73 #include <rtw_vht.h>
74 #endif
75
76 #ifdef CONFIG_INTEL_WIDI
77 #include <rtw_intel_widi.h>
78 #endif
79
80 #include <rtw_cmd.h>
81 #include <cmd_osdep.h>
82 #include <rtw_security.h>
83 #include <rtw_xmit.h>
84 #include <xmit_osdep.h>
85 #include <rtw_recv.h>
86
87 #ifdef CONFIG_BEAMFORMING
88 #include <rtw_beamforming.h>
89 #endif
90
91 #include <recv_osdep.h>
92 #include <rtw_efuse.h>
93 #include <rtw_sreset.h>
94 #include <hal_intf.h>
95 #include <hal_com.h>
96 #include <hal_com_led.h>
97 #include "../hal/hal_dm.h"
98 #include <rtw_qos.h>
99 #include <rtw_pwrctrl.h>
100 #include <rtw_mlme.h>
101 #include <mlme_osdep.h>
102 #include <rtw_io.h>
103 #include <rtw_ioctl.h>
104 #include <rtw_ioctl_set.h>
105 #include <rtw_ioctl_query.h>
106 #include <rtw_ioctl_rtl.h>
107 #include <osdep_intf.h>
108 #include <rtw_eeprom.h>
109 #include <sta_info.h>
110 #include <rtw_event.h>
111 #include <rtw_mlme_ext.h>
112 #include <rtw_ap.h>
113 #include <rtw_efuse.h>
114 #include <rtw_version.h>
115 #include <rtw_odm.h>
116
117 #ifdef CONFIG_PREALLOC_RX_SKB_BUFFER
118 #include <rtw_mem.h>
119 #endif
120
121 #ifdef CONFIG_P2P
122 #include <rtw_p2p.h>
123 #endif // CONFIG_P2P
124
125 #ifdef CONFIG_TDLS
126 #include <rtw_tdls.h>
127 #endif // CONFIG_TDLS
128
129 #ifdef CONFIG_WAPI_SUPPORT
130 #include <rtw_wapi.h>
131 #endif // CONFIG_WAPI_SUPPORT
132
133 #ifdef CONFIG_DRVEXT_MODULE
134 #include <drvext_api.h>
135 #endif // CONFIG_DRVEXT_MODULE
136
137 #ifdef CONFIG_MP_INCLUDED
138 #include <rtw_mp.h>
139 #endif // CONFIG_MP_INCLUDED
140
141 #ifdef CONFIG_BR_EXT
142 #include <rtw_br_ext.h>
143 #endif // CONFIG_BR_EXT
144
145 #ifdef CONFIG_IOL
146 #include <rtw_iol.h>
147 #endif // CONFIG_IOL
148
149 #include <ip.h>
150 #include <if_ether.h>
151 #include <ethernet.h>
152 #include <circ_buf.h>
153
154 #include <rtw_android.h>
155
156 #ifdef CONFIG_BT_COEXIST
157 #include <rtw_btcoex.h>
158 #endif // CONFIG_BT_COEXIST
159
160 #define SPEC_DEV_ID_NONE BIT(0)
161 #define SPEC_DEV_ID_DISABLE_HT BIT(1)
162 #define SPEC_DEV_ID_ENABLE_PS BIT(2)
163 #define SPEC_DEV_ID_RF_CONFIG_1T1R BIT(3)
164 #define SPEC_DEV_ID_RF_CONFIG_2T2R BIT(4)
165 #define SPEC_DEV_ID_ASSIGN_IFNAME BIT(5)
166
167 struct specific_device_id{
168
169         u32             flags;
170
171         u16             idVendor;
172         u16             idProduct;
173
174 };
175
176 struct registry_priv
177 {
178         u8      chip_version;
179         u8      rfintfs;
180         u8      lbkmode;
181         u8      hci;
182         NDIS_802_11_SSID        ssid;
183         u8      network_mode;   //infra, ad-hoc, auto
184         u8      channel;//ad-hoc support requirement
185         u8      wireless_mode;//A, B, G, auto
186         u8      scan_mode;//active, passive
187         u8      radio_enable;
188         u8      preamble;//long, short, auto
189         u8      vrtl_carrier_sense;//Enable, Disable, Auto
190         u8      vcs_type;//RTS/CTS, CTS-to-self
191         u16     rts_thresh;
192         u16  frag_thresh;
193         u8      adhoc_tx_pwr;
194         u8      soft_ap;
195         u8      power_mgnt;
196         u8      ips_mode;
197         u8      smart_ps;
198         u8   usb_rxagg_mode;
199         u8      long_retry_lmt;
200         u8      short_retry_lmt;
201         u16     busy_thresh;
202         u8      ack_policy;
203         u8      mp_mode;
204         u8  mp_dm;
205         u8      software_encrypt;
206         u8      software_decrypt;
207         #ifdef CONFIG_TX_EARLY_MODE
208         u8   early_mode;
209         #endif
210         u8      acm_method;
211           //UAPSD
212         u8      wmm_enable;
213         u8      uapsd_enable;
214         u8      uapsd_max_sp;
215         u8      uapsd_acbk_en;
216         u8      uapsd_acbe_en;
217         u8      uapsd_acvi_en;
218         u8      uapsd_acvo_en;
219
220         WLAN_BSSID_EX    dev_network;
221
222 #ifdef CONFIG_80211N_HT
223         u8      ht_enable;
224         // 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160MHz
225         // 2.4G use bit 0 ~ 3, 5G use bit 4 ~ 7
226         // 0x21 means enable 2.4G 40MHz & 5G 80MHz
227         u8      bw_mode;
228         u8      ampdu_enable;//for tx
229         u8      rx_stbc;
230         u8      ampdu_amsdu;//A-MPDU Supports A-MSDU is permitted
231         // Short GI support Bit Map
232         // BIT0 - 20MHz, 1: support, 0: non-support
233         // BIT1 - 40MHz, 1: support, 0: non-support
234         // BIT2 - 80MHz, 1: support, 0: non-support
235         // BIT3 - 160MHz, 1: support, 0: non-support
236         u8      short_gi;
237         // BIT0: Enable VHT LDPC Rx, BIT1: Enable VHT LDPC Tx, BIT4: Enable HT LDPC Rx, BIT5: Enable HT LDPC Tx
238         u8      ldpc_cap;
239         // BIT0: Enable VHT STBC Rx, BIT1: Enable VHT STBC Tx, BIT4: Enable HT STBC Rx, BIT5: Enable HT STBC Tx
240         u8      stbc_cap;
241         // BIT0: Enable VHT Beamformer, BIT1: Enable VHT Beamformee, BIT4: Enable HT Beamformer, BIT5: Enable HT Beamformee
242         u8      beamform_cap;
243 #endif //CONFIG_80211N_HT
244
245 #ifdef CONFIG_80211AC_VHT
246         u8      vht_enable; //0:disable, 1:enable, 2:auto
247         u8      ampdu_factor;
248         u8      vht_rate_sel;
249 #endif //CONFIG_80211AC_VHT
250
251         u8      lowrate_two_xmit;
252
253         u8      rf_config ;
254         u8      low_power ;
255
256         u8      wifi_spec;// !turbo_mode
257         u8      special_rf_path; // 0: 2T2R ,1: only turn on path A 1T1R
258         u8      channel_plan;
259 #ifdef CONFIG_BT_COEXIST
260         u8      btcoex;
261         u8      bt_iso;
262         u8      bt_sco;
263         u8      bt_ampdu;
264         s8      ant_num;
265 #endif
266         BOOLEAN bAcceptAddbaReq;
267
268         u8      antdiv_cfg;
269         u8      antdiv_type;
270         
271         u8      switch_usb3;
272
273         u8      usbss_enable;//0:disable,1:enable
274         u8      hwpdn_mode;//0:disable,1:enable,2:decide by EFUSE config
275         u8      hwpwrp_detect;//0:disable,1:enable
276
277         u8      hw_wps_pbc;//0:disable,1:enable
278
279 #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
280         char    adaptor_info_caching_file_path[PATH_LENGTH_MAX];
281 #endif
282
283 #ifdef CONFIG_LAYER2_ROAMING
284         u8      max_roaming_times; // the max number driver will try to roaming
285 #endif
286
287 #ifdef CONFIG_IOL
288         u8 fw_iol; //enable iol without other concern
289 #endif
290
291 #ifdef CONFIG_80211D
292         u8 enable80211d;
293 #endif
294
295         u8 ifname[16];
296         u8 if2name[16];
297
298         u8 notch_filter;
299
300 #ifdef CONFIG_SPECIAL_SETTING_FOR_FUNAI_TV
301         u8 force_ant;//0 normal,1 main,2 aux
302         u8 force_igi;//0 normal
303 #endif
304
305         //define for tx power adjust
306         u8      RegEnableTxPowerLimit;
307         u8      RegEnableTxPowerByRate;
308         u8      RegPowerBase;
309         u8      RegPwrTblSel;
310         s8      TxBBSwing_2G;
311         s8      TxBBSwing_5G;
312         u8      AmplifierType_2G;
313         u8      AmplifierType_5G;
314         u8      bEn_RFE;
315         u8      RFE_Type;
316         u8  check_fw_ps;
317         u8      RegRfKFreeEnable;
318         
319 #ifdef CONFIG_LOAD_PHY_PARA_FROM_FILE
320         u8      load_phy_file;
321         u8      RegDecryptCustomFile;
322 #endif
323
324 #ifdef CONFIG_MULTI_VIR_IFACES
325         u8 ext_iface_num;//primary/secondary iface is excluded
326 #endif
327         u8 qos_opt_enable;
328
329         u8 hiq_filter;
330         u8 adaptivity_en;
331         u8 adaptivity_mode;
332         u8 adaptivity_dml;
333         u8 adaptivity_dc_backoff;
334         u8 boffefusemask;
335         BOOLEAN bFileMaskEfuse;
336 };
337
338
339 //For registry parameters
340 #define RGTRY_OFT(field) ((ULONG)FIELD_OFFSET(struct registry_priv,field))
341 #define RGTRY_SZ(field)   sizeof(((struct registry_priv*) 0)->field)
342
343 #define GetRegAmplifierType2G(_Adapter) (_Adapter->registrypriv.AmplifierType_2G)
344 #define GetRegAmplifierType5G(_Adapter) (_Adapter->registrypriv.AmplifierType_5G)
345
346 #define GetRegTxBBSwing_2G(_Adapter)    (_Adapter->registrypriv.TxBBSwing_2G)
347 #define GetRegTxBBSwing_5G(_Adapter)    (_Adapter->registrypriv.TxBBSwing_5G)
348
349 #define GetRegbENRFEType(_Adapter)      (_Adapter->registrypriv.bEn_RFE)
350 #define GetRegRFEType(_Adapter) (_Adapter->registrypriv.RFE_Type)
351
352
353 #define BSSID_OFT(field) ((ULONG)FIELD_OFFSET(WLAN_BSSID_EX,field))
354 #define BSSID_SZ(field)   sizeof(((PWLAN_BSSID_EX) 0)->field)
355
356
357
358 #ifdef CONFIG_SDIO_HCI
359 #include <drv_types_sdio.h>
360 #define INTF_DATA SDIO_DATA
361 #elif defined(CONFIG_GSPI_HCI)
362 #include <drv_types_gspi.h>
363 #define INTF_DATA GSPI_DATA
364 #elif defined(CONFIG_PCI_HCI)
365 #include <drv_types_pci.h>
366 #endif
367
368 #ifdef CONFIG_CONCURRENT_MODE
369 #define is_primary_adapter(adapter) (adapter->adapter_type == PRIMARY_ADAPTER)
370 #define get_iface_type(adapter) (adapter->iface_type)
371 #else
372 #define is_primary_adapter(adapter) (1)
373 #define get_iface_type(adapter) (IFACE_PORT0)
374 #endif
375 #define GET_PRIMARY_ADAPTER(padapter) (((_adapter *)padapter)->dvobj->if1)
376 #define GET_IFACE_NUMS(padapter) (((_adapter *)padapter)->dvobj->iface_nums)
377 #define GET_ADAPTER(padapter, iface_id) (((_adapter *)padapter)->dvobj->padapters[iface_id])
378
379 #define GetDefaultAdapter(padapter)     padapter
380
381 enum _IFACE_ID {
382         IFACE_ID0, //maping to PRIMARY_ADAPTER
383         IFACE_ID1, //maping to SECONDARY_ADAPTER
384         IFACE_ID2,
385         IFACE_ID3,
386         IFACE_ID_MAX,
387 };
388
389 #ifdef CONFIG_DBG_COUNTER
390
391 struct rx_logs {
392         u32 intf_rx;
393         u32 intf_rx_err_recvframe;
394         u32 intf_rx_err_skb;
395         u32 intf_rx_report;
396         u32 core_rx;
397         u32 core_rx_pre;
398         u32 core_rx_pre_ver_err;
399         u32 core_rx_pre_mgmt;
400         u32 core_rx_pre_mgmt_err_80211w;
401         u32 core_rx_pre_mgmt_err;
402         u32 core_rx_pre_ctrl;
403         u32 core_rx_pre_ctrl_err;
404         u32 core_rx_pre_data;
405         u32 core_rx_pre_data_wapi_seq_err;
406         u32 core_rx_pre_data_wapi_key_err;
407         u32 core_rx_pre_data_handled;
408         u32 core_rx_pre_data_err;
409         u32 core_rx_pre_data_unknown;
410         u32 core_rx_pre_unknown;
411         u32 core_rx_enqueue;
412         u32 core_rx_dequeue;
413         u32 core_rx_post;
414         u32 core_rx_post_decrypt;
415         u32 core_rx_post_decrypt_wep;
416         u32 core_rx_post_decrypt_tkip;
417         u32 core_rx_post_decrypt_aes;
418         u32 core_rx_post_decrypt_wapi;
419         u32 core_rx_post_decrypt_hw;
420         u32 core_rx_post_decrypt_unknown;
421         u32 core_rx_post_decrypt_err;
422         u32 core_rx_post_defrag_err;
423         u32 core_rx_post_portctrl_err;
424         u32 core_rx_post_indicate;
425         u32 core_rx_post_indicate_in_oder;
426         u32 core_rx_post_indicate_reoder;
427         u32 core_rx_post_indicate_err;
428         u32 os_indicate;
429         u32 os_indicate_ap_mcast;
430         u32 os_indicate_ap_forward;
431         u32 os_indicate_ap_self;
432         u32 os_indicate_err;
433         u32 os_netif_ok;
434         u32 os_netif_err;
435 };
436
437 struct tx_logs {
438         u32 os_tx;
439         u32 os_tx_err_up;
440         u32 os_tx_err_xmit;
441         u32 os_tx_m2u;
442         u32 os_tx_m2u_ignore_fw_linked;
443         u32 os_tx_m2u_ignore_self;
444         u32 os_tx_m2u_entry;
445         u32 os_tx_m2u_entry_err_xmit;
446         u32 os_tx_m2u_entry_err_skb;
447         u32 os_tx_m2u_stop;
448         u32 core_tx;
449         u32 core_tx_err_pxmitframe;
450         u32 core_tx_err_brtx;
451         u32 core_tx_upd_attrib;
452         u32 core_tx_upd_attrib_adhoc;
453         u32 core_tx_upd_attrib_sta;
454         u32 core_tx_upd_attrib_ap;
455         u32 core_tx_upd_attrib_unknown;
456         u32 core_tx_upd_attrib_dhcp;
457         u32 core_tx_upd_attrib_icmp;
458         u32 core_tx_upd_attrib_active;
459         u32 core_tx_upd_attrib_err_ucast_sta;
460         u32 core_tx_upd_attrib_err_ucast_ap_link;
461         u32 core_tx_upd_attrib_err_sta;
462         u32 core_tx_upd_attrib_err_link;
463         u32 core_tx_upd_attrib_err_sec;
464         u32 core_tx_ap_enqueue_warn_fwstate;
465         u32 core_tx_ap_enqueue_warn_sta;
466         u32 core_tx_ap_enqueue_warn_nosta;
467         u32 core_tx_ap_enqueue_warn_link;
468         u32 core_tx_ap_enqueue_warn_trigger;
469         u32 core_tx_ap_enqueue_mcast;
470         u32 core_tx_ap_enqueue_ucast;
471         u32 core_tx_ap_enqueue;
472         u32 intf_tx;
473         u32 intf_tx_pending_ac;
474         u32 intf_tx_pending_fw_under_survey;
475         u32 intf_tx_pending_fw_under_linking;
476         u32 intf_tx_pending_xmitbuf;
477         u32 intf_tx_enqueue;
478         u32 core_tx_enqueue;
479         u32 core_tx_enqueue_class;
480         u32 core_tx_enqueue_class_err_sta;
481         u32 core_tx_enqueue_class_err_nosta;
482         u32 core_tx_enqueue_class_err_fwlink;
483         u32 intf_tx_direct;
484         u32 intf_tx_direct_err_coalesce;
485         u32 intf_tx_dequeue;
486         u32 intf_tx_dequeue_err_coalesce;
487         u32 intf_tx_dump_xframe;
488         u32 intf_tx_dump_xframe_err_txdesc;
489         u32 intf_tx_dump_xframe_err_port;
490 };
491
492 struct int_logs {
493         u32 all;
494         u32 err;
495         u32 tbdok;
496         u32 tbder;
497         u32 bcnderr;
498         u32 bcndma;
499         u32 bcndma_e;
500         u32 rx;
501         u32 rx_rdu;
502         u32 rx_fovw;
503         u32 txfovw;
504         u32 mgntok;
505         u32 highdok;
506         u32 bkdok;
507         u32 bedok;
508         u32 vidok;
509         u32 vodok;
510 };
511
512 #endif // CONFIG_DBG_COUNTER
513
514 struct debug_priv {
515         u32 dbg_sdio_free_irq_error_cnt;
516         u32 dbg_sdio_alloc_irq_error_cnt;
517         u32 dbg_sdio_free_irq_cnt;
518         u32 dbg_sdio_alloc_irq_cnt;
519         u32 dbg_sdio_deinit_error_cnt;
520         u32 dbg_sdio_init_error_cnt;
521         u32 dbg_suspend_error_cnt;
522         u32 dbg_suspend_cnt;
523         u32 dbg_resume_cnt;
524         u32 dbg_resume_error_cnt;
525         u32 dbg_deinit_fail_cnt;
526         u32 dbg_carddisable_cnt;
527         u32 dbg_carddisable_error_cnt;
528         u32 dbg_ps_insuspend_cnt;
529         u32     dbg_dev_unload_inIPS_cnt;
530         u32 dbg_wow_leave_ps_fail_cnt;
531         u32 dbg_scan_pwr_state_cnt;
532         u32 dbg_downloadfw_pwr_state_cnt;
533         u32 dbg_fw_read_ps_state_fail_cnt;
534         u32 dbg_leave_ips_fail_cnt;
535         u32 dbg_leave_lps_fail_cnt;
536         u32 dbg_h2c_leave32k_fail_cnt;
537         u32 dbg_diswow_dload_fw_fail_cnt;
538         u32 dbg_enwow_dload_fw_fail_cnt;
539         u32 dbg_ips_drvopen_fail_cnt;
540         u32 dbg_poll_fail_cnt;
541         u32 dbg_rpwm_toogle_cnt;
542         u32 dbg_rpwm_timeout_fail_cnt;
543         u32 dbg_sreset_cnt;
544         u64 dbg_rx_fifo_last_overflow;
545         u64 dbg_rx_fifo_curr_overflow;
546         u64 dbg_rx_fifo_diff_overflow;
547         u64 dbg_rx_ampdu_drop_count;
548         u64 dbg_rx_ampdu_forced_indicate_count;
549         u64 dbg_rx_ampdu_loss_count;
550         u64 dbg_rx_dup_mgt_frame_drop_count;
551         u64 dbg_rx_ampdu_window_shift_cnt;
552         u64 dbg_rx_conflic_mac_addr_cnt;
553 };
554
555 struct rtw_traffic_statistics {
556         // tx statistics
557         u64     tx_bytes;
558         u64     tx_pkts;
559         u64     tx_drop;
560         u64     cur_tx_bytes;
561         u64     last_tx_bytes;
562         u32     cur_tx_tp; // Tx throughput in MBps.
563
564         // rx statistics
565         u64     rx_bytes;
566         u64     rx_pkts;
567         u64     rx_drop;
568         u64     cur_rx_bytes;
569         u64     last_rx_bytes;
570         u32     cur_rx_tp; // Rx throughput in MBps.
571 };
572
573 struct cam_ctl_t {
574         _lock lock;
575         u64 bitmap;
576 };
577
578 struct cam_entry_cache {
579         u16 ctrl;
580         u8 mac[ETH_ALEN];
581         u8 key[16];
582 };
583
584 #define KEY_FMT "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
585 #define KEY_ARG(x) ((u8*)(x))[0],((u8*)(x))[1],((u8*)(x))[2],((u8*)(x))[3],((u8*)(x))[4],((u8*)(x))[5], \
586         ((u8*)(x))[6],((u8*)(x))[7],((u8*)(x))[8],((u8*)(x))[9],((u8*)(x))[10],((u8*)(x))[11], \
587         ((u8*)(x))[12],((u8*)(x))[13],((u8*)(x))[14],((u8*)(x))[15]
588
589 struct macid_bmp {
590         u32 m0;
591 #if (MACID_NUM_SW_LIMIT > 32)
592         u32 m1;
593 #endif
594 #if (MACID_NUM_SW_LIMIT > 64)
595         u32 m2;
596 #endif
597 #if (MACID_NUM_SW_LIMIT > 96)
598         u32 m3;
599 #endif
600 };
601
602 struct macid_ctl_t {
603         _lock lock;
604         u8 num;
605         struct macid_bmp used;
606         struct macid_bmp bmc;
607         struct macid_bmp if_g[IFACE_ID_MAX];
608         struct macid_bmp ch_g[2]; /* 2 ch concurrency */
609 };
610
611 struct dvobj_priv
612 {
613         /*-------- below is common data --------*/      
614         _adapter *if1; //PRIMARY_ADAPTER
615         _adapter *if2; //SECONDARY_ADAPTER
616
617         s32     processing_dev_remove;
618
619         struct debug_priv drv_dbg;
620
621         _mutex hw_init_mutex;
622         _mutex h2c_fwcmd_mutex;
623         _mutex setch_mutex;
624         _mutex setbw_mutex;
625
626         unsigned char   oper_channel; //saved channel info when call set_channel_bw
627         unsigned char   oper_bwmode;
628         unsigned char   oper_ch_offset;//PRIME_CHNL_OFFSET
629         u32 on_oper_ch_time;
630
631         //extend to support mulitu interface
632         //padapters[IFACE_ID0] == if1
633         //padapters[IFACE_ID1] == if2
634         _adapter *padapters[IFACE_ID_MAX];
635         u8 iface_nums; // total number of ifaces used runtime
636
637         struct macid_ctl_t macid_ctl;
638
639         struct cam_ctl_t cam_ctl;
640         struct cam_entry_cache cam_cache[TOTAL_CAM_ENTRY];
641
642         //For 92D, DMDP have 2 interface.
643         u8      InterfaceNumber;
644         u8      NumInterfaces;
645
646         //In /Out Pipe information
647         int     RtInPipe[2];
648         int     RtOutPipe[4];
649         u8      Queue2Pipe[HW_QUEUE_ENTRY];//for out pipe mapping
650
651         u8      irq_alloc;
652         ATOMIC_T continual_io_error;
653
654         ATOMIC_T disable_func;
655
656         struct pwrctrl_priv pwrctl_priv;
657
658         struct rtw_traffic_statistics   traffic_stat;
659
660 /*-------- below is for SDIO INTERFACE --------*/
661
662 #ifdef INTF_DATA
663         INTF_DATA intf_data;
664 #endif
665
666 /*-------- below is for USB INTERFACE --------*/
667
668 #ifdef CONFIG_USB_HCI
669
670         u8      usb_speed; // 1.1, 2.0 or 3.0
671         u8      nr_endpoint;
672         u8      RtNumInPipes;
673         u8      RtNumOutPipes;
674         int     ep_num[6]; //endpoint number
675
676         int     RegUsbSS;
677
678         _sema   usb_suspend_sema;
679
680 #ifdef CONFIG_USB_VENDOR_REQ_MUTEX
681         _mutex  usb_vendor_req_mutex;
682 #endif
683
684 #ifdef CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
685         u8 * usb_alloc_vendor_req_buf;
686         u8 * usb_vendor_req_buf;
687 #endif
688
689 #ifdef PLATFORM_WINDOWS
690         //related device objects
691         PDEVICE_OBJECT  pphysdevobj;//pPhysDevObj;
692         PDEVICE_OBJECT  pfuncdevobj;//pFuncDevObj;
693         PDEVICE_OBJECT  pnextdevobj;//pNextDevObj;
694
695         u8      nextdevstacksz;//unsigned char NextDeviceStackSize;     //= (CHAR)CEdevice->pUsbDevObj->StackSize + 1;
696
697         //urb for control diescriptor request
698
699 #ifdef PLATFORM_OS_XP
700         struct _URB_CONTROL_DESCRIPTOR_REQUEST descriptor_urb;
701         PUSB_CONFIGURATION_DESCRIPTOR   pconfig_descriptor;//UsbConfigurationDescriptor;
702 #endif
703
704 #ifdef PLATFORM_OS_CE
705         WCHAR                   active_path[MAX_ACTIVE_REG_PATH];       // adapter regpath
706         USB_EXTENSION   usb_extension;
707
708         _nic_hdl                pipehdls_r8192c[0x10];
709 #endif
710
711         u32     config_descriptor_len;//ULONG UsbConfigurationDescriptorLength;
712 #endif//PLATFORM_WINDOWS
713
714 #ifdef PLATFORM_LINUX
715         struct usb_interface *pusbintf;
716         struct usb_device *pusbdev;
717 #endif//PLATFORM_LINUX
718
719 #ifdef PLATFORM_FREEBSD
720         struct usb_interface *pusbintf;
721         struct usb_device *pusbdev;
722 #endif//PLATFORM_FREEBSD
723         
724 #endif//CONFIG_USB_HCI
725
726 /*-------- below is for PCIE INTERFACE --------*/
727
728 #ifdef CONFIG_PCI_HCI
729
730 #ifdef PLATFORM_LINUX
731         struct pci_dev *ppcidev;
732
733         //PCI MEM map
734         unsigned long   pci_mem_end;    /* shared mem end       */
735         unsigned long   pci_mem_start;  /* shared mem start     */
736
737         //PCI IO map
738         unsigned long   pci_base_addr;  /* device I/O address   */
739
740         //PciBridge
741         struct pci_priv pcipriv;
742
743         u16     irqline;
744         u8      irq_enabled;
745         RT_ISR_CONTENT  isr_content;
746         _lock   irq_th_lock;
747
748         //ASPM
749         u8      const_pci_aspm;
750         u8      const_amdpci_aspm;
751         u8      const_hwsw_rfoff_d3;
752         u8      const_support_pciaspm;
753         // pci-e bridge */
754         u8      const_hostpci_aspm_setting;
755         // pci-e device */
756         u8      const_devicepci_aspm_setting;
757         u8      b_support_aspm; // If it supports ASPM, Offset[560h] = 0x40, otherwise Offset[560h] = 0x00.
758         u8      b_support_backdoor;
759         u8      bdma64;
760 #endif//PLATFORM_LINUX
761
762 #endif//CONFIG_PCI_HCI
763 };
764
765 #define dvobj_to_pwrctl(dvobj) (&(dvobj->pwrctl_priv))
766 #define pwrctl_to_dvobj(pwrctl) container_of(pwrctl, struct dvobj_priv, pwrctl_priv)
767 #define dvobj_to_macidctl(dvobj) (&(dvobj->macid_ctl))
768 #define dvobj_to_regsty(dvobj) (&(dvobj->if1->registrypriv))
769
770 #ifdef PLATFORM_LINUX
771 static struct device *dvobj_to_dev(struct dvobj_priv *dvobj)
772 {
773         /* todo: get interface type from dvobj and the return the dev accordingly */
774 #ifdef RTW_DVOBJ_CHIP_HW_TYPE
775 #endif
776
777 #ifdef CONFIG_USB_HCI
778         return &dvobj->pusbintf->dev;
779 #endif
780 #ifdef CONFIG_SDIO_HCI
781         return &dvobj->intf_data.func->dev;
782 #endif
783 #ifdef CONFIG_GSPI_HCI
784         return &dvobj->intf_data.func->dev;
785 #endif
786 #ifdef CONFIG_PCI_HCI
787         return &dvobj->ppcidev->dev;
788 #endif
789 }
790 #endif
791
792 _adapter *dvobj_get_port0_adapter(struct dvobj_priv *dvobj);
793
794 enum _IFACE_TYPE {
795         IFACE_PORT0, //mapping to port0 for C/D series chips
796         IFACE_PORT1, //mapping to port1 for C/D series chip
797         MAX_IFACE_PORT,
798 };
799
800 enum _ADAPTER_TYPE {
801         PRIMARY_ADAPTER,
802         SECONDARY_ADAPTER,
803         MAX_ADAPTER = 0xFF,
804 };
805
806 typedef enum _DRIVER_STATE{
807         DRIVER_NORMAL = 0,
808         DRIVER_DISAPPEAR = 1,
809         DRIVER_REPLACE_DONGLE = 2,
810 }DRIVER_STATE;
811
812 #ifdef CONFIG_INTEL_PROXIM
813 struct proxim {
814         bool proxim_support;
815         bool proxim_on;
816
817         void *proximity_priv;
818         int (*proxim_rx)(_adapter *padapter,
819                 union recv_frame *precv_frame);
820         u8      (*proxim_get_var)(_adapter* padapter, u8 type);
821 };
822 #endif  //CONFIG_INTEL_PROXIM
823
824 #ifdef CONFIG_MAC_LOOPBACK_DRIVER
825 typedef struct loopbackdata
826 {
827         _sema   sema;
828         _thread_hdl_ lbkthread;
829         u8 bstop;
830         u32 cnt;
831         u16 size;
832         u16 txsize;
833         u8 txbuf[0x8000];
834         u16 rxsize;
835         u8 rxbuf[0x8000];
836         u8 msg[100];
837
838 }LOOPBACKDATA, *PLOOPBACKDATA;
839 #endif
840
841 struct _ADAPTER{
842         int     DriverState;// for disable driver using module, use dongle to replace module.
843         int     pid[3];//process id from UI, 0:wps, 1:hostapd, 2:dhcpcd
844         int     bDongle;//build-in module or external dongle
845         u16     chip_type;
846         u16     HardwareType;
847         u16     interface_type;//USB,SDIO,SPI,PCI
848
849         struct dvobj_priv *dvobj;
850         struct  mlme_priv mlmepriv;
851         struct  mlme_ext_priv mlmeextpriv;
852         struct  cmd_priv        cmdpriv;
853         struct  evt_priv        evtpriv;
854         //struct        io_queue        *pio_queue;
855         struct  io_priv iopriv;
856         struct  xmit_priv       xmitpriv;
857         struct  recv_priv       recvpriv;
858         struct  sta_priv        stapriv;
859         struct  security_priv   securitypriv;
860         _lock   security_key_mutex; // add for CONFIG_IEEE80211W, none 11w also can use
861         struct  registry_priv   registrypriv;   
862
863         struct  led_priv        ledpriv;
864
865 #ifdef CONFIG_MP_INCLUDED
866        struct   mp_priv mppriv;
867 #endif
868
869 #ifdef CONFIG_DRVEXT_MODULE
870         struct  drvext_priv     drvextpriv;
871 #endif
872
873 #ifdef CONFIG_AP_MODE
874         struct  hostapd_priv    *phostapdpriv;
875 #endif
876
877 #ifdef CONFIG_IOCTL_CFG80211
878 #ifdef CONFIG_P2P
879         struct cfg80211_wifidirect_info cfg80211_wdinfo;
880 #endif //CONFIG_P2P
881 #endif //CONFIG_IOCTL_CFG80211
882         u32     setband;
883 #ifdef CONFIG_P2P
884         struct wifidirect_info  wdinfo;
885 #endif //CONFIG_P2P
886
887 #ifdef CONFIG_TDLS
888         struct tdls_info        tdlsinfo;
889 #endif //CONFIG_TDLS
890
891 #ifdef CONFIG_WAPI_SUPPORT
892         u8      WapiSupport;
893         RT_WAPI_T       wapiInfo;
894 #endif
895
896
897 #ifdef CONFIG_WFD
898         struct wifi_display_info wfd_info;
899 #endif //CONFIG_WFD
900
901 #ifdef CONFIG_BT_COEXIST_SOCKET_TRX
902         struct bt_coex_info coex_info;
903 #endif //CONFIG_BT_COEXIST_SOCKET_TRX
904         
905         ERROR_CODE              LastError; /* <20130613, Kordan> Only the functions associated with MP records the error code by now. */
906         
907         PVOID                   HalData;
908         u32 hal_data_sz;
909         struct hal_ops  HalFunc;
910
911         s32     bDriverStopped;
912         s32     bSurpriseRemoved;
913         s32  bCardDisableWOHSM;
914
915         u32     IsrContent;
916         u32     ImrContent;
917
918         u8      EepromAddressSize;
919         u8      hw_init_completed;
920         u8      bDriverIsGoingToUnload;
921         u8      init_adpt_in_progress;
922         u8      bHaltInProgress;
923 #ifdef CONFIG_GPIO_API  
924         u8      pre_gpio_pin;
925         struct gpio_int_priv {
926                 u8 interrupt_mode;
927                 u8 interrupt_enable_mask;
928                 void (*callback[8])(u8 level);
929         }gpiointpriv;
930 #endif  
931         _thread_hdl_ cmdThread;
932         _thread_hdl_ evtThread;
933         _thread_hdl_ xmitThread;
934         _thread_hdl_ recvThread;
935
936 #ifndef PLATFORM_LINUX
937         NDIS_STATUS (*dvobj_init)(struct dvobj_priv *dvobj);
938         void (*dvobj_deinit)(struct dvobj_priv *dvobj);
939 #endif
940
941         u32 (*intf_init)(struct dvobj_priv *dvobj);
942         void (*intf_deinit)(struct dvobj_priv *dvobj);
943         int (*intf_alloc_irq)(struct dvobj_priv *dvobj);
944         void (*intf_free_irq)(struct dvobj_priv *dvobj);
945         
946
947         void (*intf_start)(_adapter * adapter);
948         void (*intf_stop)(_adapter * adapter);
949
950 #ifdef PLATFORM_WINDOWS
951         _nic_hdl                hndis_adapter;//hNdisAdapter(NDISMiniportAdapterHandle);
952         _nic_hdl                hndis_config;//hNdisConfiguration;
953         NDIS_STRING fw_img;
954
955         u32     NdisPacketFilter;
956         u8      MCList[MAX_MCAST_LIST_NUM][6];
957         u32     MCAddrCount;
958 #endif //end of PLATFORM_WINDOWS
959
960
961 #ifdef PLATFORM_LINUX
962         _nic_hdl pnetdev;
963         char old_ifname[IFNAMSIZ];
964
965         // used by rtw_rereg_nd_name related function
966         struct rereg_nd_name_data {
967                 _nic_hdl old_pnetdev;
968                 char old_ifname[IFNAMSIZ];
969                 u8 old_ips_mode;
970                 u8 old_bRegUseLed;
971         } rereg_nd_name_priv;
972
973         int bup;
974         struct net_device_stats stats;
975         struct iw_statistics iwstats;
976         struct proc_dir_entry *dir_dev;// for proc directory
977         struct proc_dir_entry *dir_odm;
978
979 #ifdef CONFIG_IOCTL_CFG80211
980         struct wireless_dev *rtw_wdev;
981         struct rtw_wdev_priv wdev_data;
982 #endif //CONFIG_IOCTL_CFG80211
983
984 #endif //end of PLATFORM_LINUX
985
986 #ifdef PLATFORM_FREEBSD
987         _nic_hdl pifp;
988         int bup;
989         _lock glock;
990 #endif //PLATFORM_FREEBSD
991         u8 mac_addr[ETH_ALEN];
992         int net_closed;
993         
994         u8 netif_up;
995
996         u8 bFWReady;
997         u8 bBTFWReady;
998         u8 bLinkInfoDump;
999         u8 bRxRSSIDisplay;
1000         //      Added by Albert 2012/10/26
1001         //      The driver will show up the desired channel number when this flag is 1.
1002         u8 bNotifyChannelChange;
1003 #ifdef CONFIG_P2P
1004         //      Added by Albert 2012/12/06
1005         //      The driver will show the current P2P status when the upper application reads it.
1006         u8 bShowGetP2PState;
1007 #endif
1008 #ifdef CONFIG_AUTOSUSPEND
1009         u8      bDisableAutosuspend;
1010 #endif
1011
1012         //pbuddy_adapter is used only in  two inteface case, (iface_nums=2 in struct dvobj_priv)
1013         //PRIMARY_ADAPTER's buddy is SECONDARY_ADAPTER
1014         //SECONDARY_ADAPTER's buddy is PRIMARY_ADAPTER
1015         //for iface_id > SECONDARY_ADAPTER(IFACE_ID1), refer to padapters[iface_id]  in struct dvobj_priv
1016         //and their pbuddy_adapter is PRIMARY_ADAPTER.
1017         //for PRIMARY_ADAPTER(IFACE_ID0) can directly refer to if1 in struct dvobj_priv
1018         _adapter *pbuddy_adapter;
1019
1020 #if defined(CONFIG_CONCURRENT_MODE)
1021         u8 isprimary; //is primary adapter or not
1022         //notes:
1023         // if isprimary is true, the adapter_type value is 0, iface_id is IFACE_ID0 for PRIMARY_ADAPTER
1024         // if isprimary is false, the adapter_type value is 1, iface_id is IFACE_ID1 for SECONDARY_ADAPTER
1025         // refer to iface_id if iface_nums>2 and isprimary is false and the adapter_type value is 0xff.
1026         u8 adapter_type;//used only in  two inteface case(PRIMARY_ADAPTER and SECONDARY_ADAPTER) .
1027         u8 iface_type; //interface port type, it depends on HW port
1028 #endif //CONFIG_CONCURRENT_MODE 
1029
1030         //extend to support multi interface
1031        //IFACE_ID0 is equals to PRIMARY_ADAPTER
1032        //IFACE_ID1 is equals to SECONDARY_ADAPTER
1033         u8 iface_id;
1034
1035 #ifdef CONFIG_BR_EXT
1036         _lock                                   br_ext_lock;
1037         //unsigned int                  macclone_completed;
1038         struct nat25_network_db_entry   *nethash[NAT25_HASH_SIZE];
1039         int                             pppoe_connection_in_progress;
1040         unsigned char                   pppoe_addr[MACADDRLEN];
1041         unsigned char                   scdb_mac[MACADDRLEN];
1042         unsigned char                   scdb_ip[4];
1043         struct nat25_network_db_entry   *scdb_entry;
1044         unsigned char                   br_mac[MACADDRLEN];
1045         unsigned char                   br_ip[4];
1046
1047         struct br_ext_info              ethBrExtInfo;
1048 #endif  // CONFIG_BR_EXT
1049
1050 #ifdef CONFIG_INTEL_PROXIM
1051         /* intel Proximity, should be alloc mem
1052          * in intel Proximity module and can only
1053          * be used in intel Proximity mode */
1054         struct proxim proximity;
1055 #endif  //CONFIG_INTEL_PROXIM
1056
1057 #ifdef CONFIG_MAC_LOOPBACK_DRIVER
1058         PLOOPBACKDATA ploopback;
1059 #endif
1060
1061         //for debug purpose
1062         u8 fix_rate;
1063         u8 data_fb; /* data rate fallback, valid only when fix_rate is not 0xff */
1064         u8 driver_vcs_en; //Enable=1, Disable=0 driver control vrtl_carrier_sense for tx
1065         u8 driver_vcs_type;//force 0:disable VCS, 1:RTS-CTS, 2:CTS-to-self when vcs_en=1.
1066         u8 driver_ampdu_spacing;//driver control AMPDU Density for peer sta's rx
1067         u8 driver_rx_ampdu_factor;//0xff: disable drv ctrl, 0:8k, 1:16k, 2:32k, 3:64k;
1068         u8 driver_rx_ampdu_spacing;  //driver control Rx AMPDU Density 
1069         u8 fix_rx_ampdu_accept;
1070         u8 fix_rx_ampdu_size; /* 0~127, TODO:consider each sta and each TID */
1071         unsigned char     in_cta_test;
1072 #ifdef DBG_RX_COUNTER_DUMP              
1073         u8 dump_rx_cnt_mode;/*BIT0:drv,BIT1:mac,BIT2:phy*/
1074         u32 drv_rx_cnt_ok;
1075         u32 drv_rx_cnt_crcerror;
1076         u32 drv_rx_cnt_drop;
1077 #endif
1078
1079 #ifdef CONFIG_DBG_COUNTER       
1080         struct rx_logs rx_logs;
1081         struct tx_logs tx_logs;
1082         struct int_logs int_logs;
1083 #endif
1084 };
1085
1086 #define adapter_to_dvobj(adapter) (adapter->dvobj)
1087 #define adapter_to_pwrctl(adapter) (dvobj_to_pwrctl(adapter->dvobj))
1088 #define adapter_wdev_data(adapter) (&((adapter)->wdev_data))
1089 #define adapter_mac_addr(adapter) (adapter->mac_addr)
1090
1091 //
1092 // Function disabled.
1093 //
1094 #define DF_TX_BIT               BIT0
1095 #define DF_RX_BIT               BIT1
1096 #define DF_IO_BIT               BIT2
1097
1098 //#define RTW_DISABLE_FUNC(padapter, func) (ATOMIC_ADD(&adapter_to_dvobj(padapter)->disable_func, (func)))
1099 //#define RTW_ENABLE_FUNC(padapter, func) (ATOMIC_SUB(&adapter_to_dvobj(padapter)->disable_func, (func)))
1100 __inline static void RTW_DISABLE_FUNC(_adapter*padapter, int func_bit)
1101 {
1102         int     df = ATOMIC_READ(&adapter_to_dvobj(padapter)->disable_func);
1103         df |= func_bit;
1104         ATOMIC_SET(&adapter_to_dvobj(padapter)->disable_func, df);
1105 }
1106
1107 __inline static void RTW_ENABLE_FUNC(_adapter*padapter, int func_bit)
1108 {
1109         int     df = ATOMIC_READ(&adapter_to_dvobj(padapter)->disable_func);
1110         df &= ~(func_bit);
1111         ATOMIC_SET(&adapter_to_dvobj(padapter)->disable_func, df);
1112 }
1113
1114 #define RTW_IS_FUNC_DISABLED(padapter, func_bit) (ATOMIC_READ(&adapter_to_dvobj(padapter)->disable_func) & (func_bit))
1115
1116 #define RTW_CANNOT_IO(padapter) \
1117                         ((padapter)->bSurpriseRemoved || \
1118                          RTW_IS_FUNC_DISABLED((padapter), DF_IO_BIT))
1119
1120 #define RTW_CANNOT_RX(padapter) \
1121                         ((padapter)->bDriverStopped || \
1122                          (padapter)->bSurpriseRemoved || \
1123                          RTW_IS_FUNC_DISABLED((padapter), DF_RX_BIT))
1124
1125 #define RTW_CANNOT_TX(padapter) \
1126                         ((padapter)->bDriverStopped || \
1127                          (padapter)->bSurpriseRemoved || \
1128                          RTW_IS_FUNC_DISABLED((padapter), DF_TX_BIT))
1129
1130 #ifdef CONFIG_PNO_SUPPORT
1131 int rtw_parse_ssid_list_tlv(char** list_str, pno_ssid_t* ssid, int max, int *bytes_left);
1132 int rtw_dev_pno_set(struct net_device *net, pno_ssid_t* ssid, int num, 
1133                                         int pno_time, int pno_repeat, int pno_freq_expo_max);
1134 #ifdef CONFIG_PNO_SET_DEBUG
1135 void rtw_dev_pno_debug(struct net_device *net);
1136 #endif //CONFIG_PNO_SET_DEBUG
1137 #endif //CONFIG_PNO_SUPPORT
1138
1139 #ifdef CONFIG_WOWLAN
1140 int rtw_suspend_wow(_adapter *padapter);
1141 int rtw_resume_process_wow(_adapter *padapter);
1142 #endif
1143
1144 // HCI Related header file
1145 #ifdef CONFIG_USB_HCI
1146 #include <usb_osintf.h>
1147 #include <usb_ops.h>
1148 #include <usb_hal.h>
1149 #endif
1150
1151 #ifdef CONFIG_SDIO_HCI
1152 #include <sdio_osintf.h>
1153 #include <sdio_ops.h>
1154 #include <sdio_hal.h>
1155 #endif
1156
1157 #ifdef CONFIG_GSPI_HCI
1158 #include <gspi_osintf.h>
1159 #include <gspi_ops.h>
1160 #include <gspi_hal.h>
1161 #endif
1162
1163 #ifdef CONFIG_PCI_HCI
1164 #include <pci_osintf.h>
1165 #include <pci_ops.h>
1166 #include <pci_hal.h>
1167 #endif
1168
1169 #endif //__DRV_TYPES_H__
1170