This source file includes following definitions.
- dvobj_to_dev
- RTW_DISABLE_FUNC
- RTW_ENABLE_FUNC
- myid
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #ifndef __DRV_TYPES_H__
15 #define __DRV_TYPES_H__
16
17 #include <linux/version.h>
18 #include <linux/sched/signal.h>
19 #include <autoconf.h>
20 #include <basic_types.h>
21 #include <osdep_service.h>
22 #include <rtw_byteorder.h>
23 #include <wlan_bssdef.h>
24 #include <wifi.h>
25 #include <ieee80211.h>
26
27 enum _NIC_VERSION {
28
29 RTL8711_NIC,
30 RTL8712_NIC,
31 RTL8713_NIC,
32 RTL8716_NIC
33
34 };
35
36 #include <rtw_rf.h>
37
38 #include <rtw_ht.h>
39
40 #include <rtw_cmd.h>
41 #include <cmd_osdep.h>
42 #include <rtw_security.h>
43 #include <rtw_xmit.h>
44 #include <xmit_osdep.h>
45 #include <rtw_recv.h>
46
47 #include <recv_osdep.h>
48 #include <rtw_efuse.h>
49 #include <hal_intf.h>
50 #include <hal_com.h>
51 #include <rtw_qos.h>
52 #include <rtw_pwrctrl.h>
53 #include <rtw_mlme.h>
54 #include <mlme_osdep.h>
55 #include <rtw_io.h>
56 #include <rtw_ioctl.h>
57 #include <rtw_ioctl_set.h>
58 #include <osdep_intf.h>
59 #include <rtw_eeprom.h>
60 #include <sta_info.h>
61 #include <rtw_event.h>
62 #include <rtw_mlme_ext.h>
63 #include <rtw_ap.h>
64 #include <rtw_version.h>
65 #include <rtw_odm.h>
66
67 #include "ioctl_cfg80211.h"
68
69 #include <linux/ip.h>
70 #include <linux/if_ether.h>
71 #include <ethernet.h>
72
73 #define SPEC_DEV_ID_NONE BIT(0)
74 #define SPEC_DEV_ID_DISABLE_HT BIT(1)
75 #define SPEC_DEV_ID_ENABLE_PS BIT(2)
76 #define SPEC_DEV_ID_RF_CONFIG_1T1R BIT(3)
77 #define SPEC_DEV_ID_RF_CONFIG_2T2R BIT(4)
78 #define SPEC_DEV_ID_ASSIGN_IFNAME BIT(5)
79
80 struct specific_device_id{
81
82 u32 flags;
83
84 u16 idVendor;
85 u16 idProduct;
86
87 };
88
89 struct registry_priv
90 {
91 u8 chip_version;
92 u8 rfintfs;
93 u8 lbkmode;
94 u8 hci;
95 struct ndis_802_11_ssid ssid;
96 u8 network_mode;
97 u8 channel;
98 u8 wireless_mode;
99 u8 scan_mode;
100 u8 radio_enable;
101 u8 preamble;
102 u8 vrtl_carrier_sense;
103 u8 vcs_type;
104 u16 rts_thresh;
105 u16 frag_thresh;
106 u8 adhoc_tx_pwr;
107 u8 soft_ap;
108 u8 power_mgnt;
109 u8 ips_mode;
110 u8 smart_ps;
111 u8 usb_rxagg_mode;
112 u8 long_retry_lmt;
113 u8 short_retry_lmt;
114 u16 busy_thresh;
115 u8 ack_policy;
116 u8 mp_dm;
117 u8 software_encrypt;
118 u8 software_decrypt;
119 u8 acm_method;
120
121 u8 wmm_enable;
122 u8 uapsd_enable;
123 u8 uapsd_max_sp;
124 u8 uapsd_acbk_en;
125 u8 uapsd_acbe_en;
126 u8 uapsd_acvi_en;
127 u8 uapsd_acvo_en;
128
129 struct wlan_bssid_ex dev_network;
130
131 u8 ht_enable;
132
133
134
135 u8 bw_mode;
136 u8 ampdu_enable;
137 u8 rx_stbc;
138 u8 ampdu_amsdu;
139
140
141
142
143
144 u8 short_gi;
145
146 u8 ldpc_cap;
147
148 u8 stbc_cap;
149
150 u8 beamform_cap;
151
152 u8 lowrate_two_xmit;
153
154 u8 rf_config ;
155 u8 low_power ;
156
157 u8 wifi_spec;
158
159 u8 channel_plan;
160
161 u8 btcoex;
162 u8 bt_iso;
163 u8 bt_sco;
164 u8 bt_ampdu;
165 s8 ant_num;
166
167
168 bool accept_addba_req;
169
170 u8 antdiv_cfg;
171 u8 antdiv_type;
172
173 u8 usbss_enable;
174 u8 hwpdn_mode;
175 u8 hwpwrp_detect;
176
177 u8 hw_wps_pbc;
178
179 u8 max_roaming_times;
180
181 u8 enable80211d;
182
183 u8 ifname[16];
184
185 u8 notch_filter;
186
187
188 u8 RegEnableTxPowerLimit;
189 u8 RegEnableTxPowerByRate;
190 u8 RegPowerBase;
191 u8 RegPwrTblSel;
192 s8 TxBBSwing_2G;
193 s8 TxBBSwing_5G;
194 u8 AmplifierType_2G;
195 u8 AmplifierType_5G;
196 u8 bEn_RFE;
197 u8 RFE_Type;
198 u8 check_fw_ps;
199
200 u8 load_phy_file;
201 u8 RegDecryptCustomFile;
202
203 #ifdef CONFIG_MULTI_VIR_IFACES
204 u8 ext_iface_num;
205 #endif
206 u8 qos_opt_enable;
207
208 u8 hiq_filter;
209 };
210
211
212
213 #define RGTRY_OFT(field) ((u32)FIELD_OFFSET(struct registry_priv, field))
214 #define RGTRY_SZ(field) sizeof(((struct registry_priv*) 0)->field)
215 #define BSSID_OFT(field) ((u32)FIELD_OFFSET(struct wlan_bssid_ex, field))
216 #define BSSID_SZ(field) sizeof(((struct wlan_bssid_ex *) 0)->field)
217
218 #include <drv_types_sdio.h>
219
220 #define is_primary_adapter(adapter) (1)
221 #define get_iface_type(adapter) (IFACE_PORT0)
222 #define GET_PRIMARY_ADAPTER(padapter) (((struct adapter *)padapter)->dvobj->if1)
223 #define GET_IFACE_NUMS(padapter) (((struct adapter *)padapter)->dvobj->iface_nums)
224 #define GET_ADAPTER(padapter, iface_id) (((struct adapter *)padapter)->dvobj->padapters[iface_id])
225
226 #ifdef CONFIG_DBG_COUNTER
227
228 struct rx_logs {
229 u32 intf_rx;
230 u32 intf_rx_err_recvframe;
231 u32 intf_rx_err_skb;
232 u32 intf_rx_report;
233 u32 core_rx;
234 u32 core_rx_pre;
235 u32 core_rx_pre_ver_err;
236 u32 core_rx_pre_mgmt;
237 u32 core_rx_pre_mgmt_err_80211w;
238 u32 core_rx_pre_mgmt_err;
239 u32 core_rx_pre_ctrl;
240 u32 core_rx_pre_ctrl_err;
241 u32 core_rx_pre_data;
242 u32 core_rx_pre_data_wapi_seq_err;
243 u32 core_rx_pre_data_wapi_key_err;
244 u32 core_rx_pre_data_handled;
245 u32 core_rx_pre_data_err;
246 u32 core_rx_pre_data_unknown;
247 u32 core_rx_pre_unknown;
248 u32 core_rx_enqueue;
249 u32 core_rx_dequeue;
250 u32 core_rx_post;
251 u32 core_rx_post_decrypt;
252 u32 core_rx_post_decrypt_wep;
253 u32 core_rx_post_decrypt_tkip;
254 u32 core_rx_post_decrypt_aes;
255 u32 core_rx_post_decrypt_wapi;
256 u32 core_rx_post_decrypt_hw;
257 u32 core_rx_post_decrypt_unknown;
258 u32 core_rx_post_decrypt_err;
259 u32 core_rx_post_defrag_err;
260 u32 core_rx_post_portctrl_err;
261 u32 core_rx_post_indicate;
262 u32 core_rx_post_indicate_in_oder;
263 u32 core_rx_post_indicate_reoder;
264 u32 core_rx_post_indicate_err;
265 u32 os_indicate;
266 u32 os_indicate_ap_mcast;
267 u32 os_indicate_ap_forward;
268 u32 os_indicate_ap_self;
269 u32 os_indicate_err;
270 u32 os_netif_ok;
271 u32 os_netif_err;
272 };
273
274 struct tx_logs {
275 u32 os_tx;
276 u32 os_tx_err_up;
277 u32 os_tx_err_xmit;
278 u32 os_tx_m2u;
279 u32 os_tx_m2u_ignore_fw_linked;
280 u32 os_tx_m2u_ignore_self;
281 u32 os_tx_m2u_entry;
282 u32 os_tx_m2u_entry_err_xmit;
283 u32 os_tx_m2u_entry_err_skb;
284 u32 os_tx_m2u_stop;
285 u32 core_tx;
286 u32 core_tx_err_pxmitframe;
287 u32 core_tx_err_brtx;
288 u32 core_tx_upd_attrib;
289 u32 core_tx_upd_attrib_adhoc;
290 u32 core_tx_upd_attrib_sta;
291 u32 core_tx_upd_attrib_ap;
292 u32 core_tx_upd_attrib_unknown;
293 u32 core_tx_upd_attrib_dhcp;
294 u32 core_tx_upd_attrib_icmp;
295 u32 core_tx_upd_attrib_active;
296 u32 core_tx_upd_attrib_err_ucast_sta;
297 u32 core_tx_upd_attrib_err_ucast_ap_link;
298 u32 core_tx_upd_attrib_err_sta;
299 u32 core_tx_upd_attrib_err_link;
300 u32 core_tx_upd_attrib_err_sec;
301 u32 core_tx_ap_enqueue_warn_fwstate;
302 u32 core_tx_ap_enqueue_warn_sta;
303 u32 core_tx_ap_enqueue_warn_nosta;
304 u32 core_tx_ap_enqueue_warn_link;
305 u32 core_tx_ap_enqueue_warn_trigger;
306 u32 core_tx_ap_enqueue_mcast;
307 u32 core_tx_ap_enqueue_ucast;
308 u32 core_tx_ap_enqueue;
309 u32 intf_tx;
310 u32 intf_tx_pending_ac;
311 u32 intf_tx_pending_fw_under_survey;
312 u32 intf_tx_pending_fw_under_linking;
313 u32 intf_tx_pending_xmitbuf;
314 u32 intf_tx_enqueue;
315 u32 core_tx_enqueue;
316 u32 core_tx_enqueue_class;
317 u32 core_tx_enqueue_class_err_sta;
318 u32 core_tx_enqueue_class_err_nosta;
319 u32 core_tx_enqueue_class_err_fwlink;
320 u32 intf_tx_direct;
321 u32 intf_tx_direct_err_coalesce;
322 u32 intf_tx_dequeue;
323 u32 intf_tx_dequeue_err_coalesce;
324 u32 intf_tx_dump_xframe;
325 u32 intf_tx_dump_xframe_err_txdesc;
326 u32 intf_tx_dump_xframe_err_port;
327 };
328
329 struct int_logs {
330 u32 all;
331 u32 err;
332 u32 tbdok;
333 u32 tbder;
334 u32 bcnderr;
335 u32 bcndma;
336 u32 bcndma_e;
337 u32 rx;
338 u32 rx_rdu;
339 u32 rx_fovw;
340 u32 txfovw;
341 u32 mgntok;
342 u32 highdok;
343 u32 bkdok;
344 u32 bedok;
345 u32 vidok;
346 u32 vodok;
347 };
348
349 #endif
350
351 struct debug_priv {
352 u32 dbg_sdio_free_irq_error_cnt;
353 u32 dbg_sdio_alloc_irq_error_cnt;
354 u32 dbg_sdio_free_irq_cnt;
355 u32 dbg_sdio_alloc_irq_cnt;
356 u32 dbg_sdio_deinit_error_cnt;
357 u32 dbg_sdio_init_error_cnt;
358 u32 dbg_suspend_error_cnt;
359 u32 dbg_suspend_cnt;
360 u32 dbg_resume_cnt;
361 u32 dbg_resume_error_cnt;
362 u32 dbg_deinit_fail_cnt;
363 u32 dbg_carddisable_cnt;
364 u32 dbg_carddisable_error_cnt;
365 u32 dbg_ps_insuspend_cnt;
366 u32 dbg_dev_unload_inIPS_cnt;
367 u32 dbg_wow_leave_ps_fail_cnt;
368 u32 dbg_scan_pwr_state_cnt;
369 u32 dbg_downloadfw_pwr_state_cnt;
370 u32 dbg_fw_read_ps_state_fail_cnt;
371 u32 dbg_leave_ips_fail_cnt;
372 u32 dbg_leave_lps_fail_cnt;
373 u32 dbg_h2c_leave32k_fail_cnt;
374 u32 dbg_diswow_dload_fw_fail_cnt;
375 u32 dbg_enwow_dload_fw_fail_cnt;
376 u32 dbg_ips_drvopen_fail_cnt;
377 u32 dbg_poll_fail_cnt;
378 u32 dbg_rpwm_toggle_cnt;
379 u32 dbg_rpwm_timeout_fail_cnt;
380 u64 dbg_rx_fifo_last_overflow;
381 u64 dbg_rx_fifo_curr_overflow;
382 u64 dbg_rx_fifo_diff_overflow;
383 u64 dbg_rx_ampdu_drop_count;
384 u64 dbg_rx_ampdu_forced_indicate_count;
385 u64 dbg_rx_ampdu_loss_count;
386 u64 dbg_rx_dup_mgt_frame_drop_count;
387 u64 dbg_rx_ampdu_window_shift_cnt;
388 };
389
390 struct rtw_traffic_statistics {
391
392 u64 tx_bytes;
393 u64 tx_pkts;
394 u64 tx_drop;
395 u64 cur_tx_bytes;
396 u64 last_tx_bytes;
397 u32 cur_tx_tp;
398
399
400 u64 rx_bytes;
401 u64 rx_pkts;
402 u64 rx_drop;
403 u64 cur_rx_bytes;
404 u64 last_rx_bytes;
405 u32 cur_rx_tp;
406 };
407
408 struct cam_ctl_t {
409 _lock lock;
410 u64 bitmap;
411 };
412
413 struct cam_entry_cache {
414 u16 ctrl;
415 u8 mac[ETH_ALEN];
416 u8 key[16];
417 };
418
419 #define KEY_FMT "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x"
420 #define KEY_ARG(x) ((u8 *)(x))[0], ((u8 *)(x))[1], ((u8 *)(x))[2], ((u8 *)(x))[3], ((u8 *)(x))[4], ((u8 *)(x))[5], \
421 ((u8 *)(x))[6], ((u8 *)(x))[7], ((u8 *)(x))[8], ((u8 *)(x))[9], ((u8 *)(x))[10], ((u8 *)(x))[11], \
422 ((u8 *)(x))[12], ((u8 *)(x))[13], ((u8 *)(x))[14], ((u8 *)(x))[15]
423
424 struct dvobj_priv
425 {
426
427 struct adapter *if1;
428 struct adapter *if2;
429
430 s32 processing_dev_remove;
431
432 struct debug_priv drv_dbg;
433
434
435
436 _lock lock;
437 int macid[NUM_STA];
438
439 _mutex hw_init_mutex;
440 _mutex h2c_fwcmd_mutex;
441 _mutex setch_mutex;
442 _mutex setbw_mutex;
443
444 unsigned char oper_channel;
445 unsigned char oper_bwmode;
446 unsigned char oper_ch_offset;
447 unsigned long on_oper_ch_time;
448
449 struct adapter *padapters;
450
451 struct cam_ctl_t cam_ctl;
452 struct cam_entry_cache cam_cache[TOTAL_CAM_ENTRY];
453
454
455 u8 InterfaceNumber;
456 u8 NumInterfaces;
457
458
459 int RtInPipe[2];
460 int RtOutPipe[4];
461 u8 Queue2Pipe[HW_QUEUE_ENTRY];
462
463 u8 irq_alloc;
464 atomic_t continual_io_error;
465
466 atomic_t disable_func;
467
468 struct pwrctrl_priv pwrctl_priv;
469
470 struct rtw_traffic_statistics traffic_stat;
471
472
473
474 struct sdio_data intf_data;
475
476 };
477
478 #define dvobj_to_pwrctl(dvobj) (&(dvobj->pwrctl_priv))
479 #define pwrctl_to_dvobj(pwrctl) container_of(pwrctl, struct dvobj_priv, pwrctl_priv)
480
481 static inline struct device *dvobj_to_dev(struct dvobj_priv *dvobj)
482 {
483
484 #ifdef RTW_DVOBJ_CHIP_HW_TYPE
485 #endif
486
487 return &dvobj->intf_data.func->dev;
488 }
489
490 struct adapter *dvobj_get_port0_adapter(struct dvobj_priv *dvobj);
491
492 enum _IFACE_TYPE {
493 IFACE_PORT0,
494 IFACE_PORT1,
495 MAX_IFACE_PORT,
496 };
497
498 enum ADAPTER_TYPE {
499 PRIMARY_ADAPTER,
500 SECONDARY_ADAPTER,
501 MAX_ADAPTER = 0xFF,
502 };
503
504 typedef enum _DRIVER_STATE{
505 DRIVER_NORMAL = 0,
506 DRIVER_DISAPPEAR = 1,
507 DRIVER_REPLACE_DONGLE = 2,
508 }DRIVER_STATE;
509
510 struct adapter {
511 int DriverState;
512 int pid[3];
513 int bDongle;
514
515 struct dvobj_priv *dvobj;
516 struct mlme_priv mlmepriv;
517 struct mlme_ext_priv mlmeextpriv;
518 struct cmd_priv cmdpriv;
519 struct evt_priv evtpriv;
520
521 struct io_priv iopriv;
522 struct xmit_priv xmitpriv;
523 struct recv_priv recvpriv;
524 struct sta_priv stapriv;
525 struct security_priv securitypriv;
526 _lock security_key_mutex;
527 struct registry_priv registrypriv;
528 struct eeprom_priv eeprompriv;
529
530 struct hostapd_priv *phostapdpriv;
531
532 u32 setband;
533
534 void * HalData;
535 u32 hal_data_sz;
536 struct hal_ops HalFunc;
537
538 s32 bDriverStopped;
539 s32 bSurpriseRemoved;
540 s32 bCardDisableWOHSM;
541
542 u32 IsrContent;
543 u32 ImrContent;
544
545 u8 EepromAddressSize;
546 u8 hw_init_completed;
547 u8 bDriverIsGoingToUnload;
548 u8 init_adpt_in_progress;
549 u8 bHaltInProgress;
550
551 void *cmdThread;
552 void *evtThread;
553 void *xmitThread;
554 void *recvThread;
555
556 u32 (*intf_init)(struct dvobj_priv *dvobj);
557 void (*intf_deinit)(struct dvobj_priv *dvobj);
558 int (*intf_alloc_irq)(struct dvobj_priv *dvobj);
559 void (*intf_free_irq)(struct dvobj_priv *dvobj);
560
561
562 void (*intf_start)(struct adapter * adapter);
563 void (*intf_stop)(struct adapter * adapter);
564
565 _nic_hdl pnetdev;
566 char old_ifname[IFNAMSIZ];
567
568
569 struct rereg_nd_name_data {
570 _nic_hdl old_pnetdev;
571 char old_ifname[IFNAMSIZ];
572 u8 old_ips_mode;
573 u8 old_bRegUseLed;
574 } rereg_nd_name_priv;
575
576 int bup;
577 struct net_device_stats stats;
578 struct iw_statistics iwstats;
579
580 struct wireless_dev *rtw_wdev;
581 struct rtw_wdev_priv wdev_data;
582
583 int net_closed;
584
585 u8 netif_up;
586
587 u8 bFWReady;
588 u8 bBTFWReady;
589 u8 bLinkInfoDump;
590 u8 bRxRSSIDisplay;
591
592
593 u8 bNotifyChannelChange;
594
595
596
597
598
599
600
601 struct adapter *pbuddy_adapter;
602
603
604
605
606 u8 iface_id;
607
608
609 u8 fix_rate;
610 u8 driver_vcs_en;
611 u8 driver_vcs_type;
612 u8 driver_ampdu_spacing;
613 u8 driver_rx_ampdu_factor;
614
615 unsigned char in_cta_test;
616
617 #ifdef CONFIG_DBG_COUNTER
618 struct rx_logs rx_logs;
619 struct tx_logs tx_logs;
620 struct int_logs int_logs;
621 #endif
622 };
623
624 #define adapter_to_dvobj(adapter) (adapter->dvobj)
625 #define adapter_to_pwrctl(adapter) (dvobj_to_pwrctl(adapter->dvobj))
626 #define adapter_wdev_data(adapter) (&((adapter)->wdev_data))
627
628
629
630
631 #define DF_TX_BIT BIT0
632 #define DF_RX_BIT BIT1
633 #define DF_IO_BIT BIT2
634
635
636
637 static inline void RTW_DISABLE_FUNC(struct adapter *padapter, int func_bit)
638 {
639 int df = atomic_read(&adapter_to_dvobj(padapter)->disable_func);
640 df |= func_bit;
641 atomic_set(&adapter_to_dvobj(padapter)->disable_func, df);
642 }
643
644 static inline void RTW_ENABLE_FUNC(struct adapter *padapter, int func_bit)
645 {
646 int df = atomic_read(&adapter_to_dvobj(padapter)->disable_func);
647 df &= ~(func_bit);
648 atomic_set(&adapter_to_dvobj(padapter)->disable_func, df);
649 }
650
651 #define RTW_IS_FUNC_DISABLED(padapter, func_bit) (atomic_read(&adapter_to_dvobj(padapter)->disable_func) & (func_bit))
652
653 #define RTW_CANNOT_IO(padapter) \
654 ((padapter)->bSurpriseRemoved || \
655 RTW_IS_FUNC_DISABLED((padapter), DF_IO_BIT))
656
657 #define RTW_CANNOT_RX(padapter) \
658 ((padapter)->bDriverStopped || \
659 (padapter)->bSurpriseRemoved || \
660 RTW_IS_FUNC_DISABLED((padapter), DF_RX_BIT))
661
662 #define RTW_CANNOT_TX(padapter) \
663 ((padapter)->bDriverStopped || \
664 (padapter)->bSurpriseRemoved || \
665 RTW_IS_FUNC_DISABLED((padapter), DF_TX_BIT))
666
667 #ifdef CONFIG_GPIO_API
668 int rtw_get_gpio(struct net_device *netdev, int gpio_num);
669 int rtw_set_gpio_output_value(struct net_device *netdev, int gpio_num, bool isHigh);
670 int rtw_config_gpio(struct net_device *netdev, int gpio_num, bool isOutput);
671 #endif
672
673 #ifdef CONFIG_WOWLAN
674 void rtw_suspend_wow(struct adapter *padapter);
675 int rtw_resume_process_wow(struct adapter *padapter);
676 #endif
677
678 static inline u8 *myid(struct eeprom_priv *peepriv)
679 {
680 return peepriv->mac_addr;
681 }
682
683
684 #include <sdio_osintf.h>
685 #include <sdio_ops.h>
686 #include <sdio_hal.h>
687
688 #include <rtw_btcoex.h>
689
690 void rtw_indicate_wx_disassoc_event(struct adapter *padapter);
691 void rtw_indicate_wx_assoc_event(struct adapter *padapter);
692 void rtw_indicate_wx_disassoc_event(struct adapter *padapter);
693 void indicate_wx_scan_complete_event(struct adapter *padapter);
694 int rtw_change_ifname(struct adapter *padapter, const char *ifname);
695
696 extern char *rtw_phy_file_path;
697 extern char *rtw_initmac;
698 extern int rtw_mc2u_disable;
699 extern int rtw_ht_enable;
700 extern u32 g_wait_hiq_empty;
701 extern u8 g_fwdl_wintint_rdy_fail;
702 extern u8 g_fwdl_chksum_fail;
703
704 #endif