1 /******************************************************************************
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
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.
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
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
19 ******************************************************************************/
24 #include <osdep_service.h>
25 #include <drv_types.h>
26 #include <xmit_osdep.h>
27 #include <recv_osdep.h>
29 #include <rtw_ioctl.h>
30 #include <rtw_version.h>
33 #include <usb_osintf.h>
37 #include <rtw_br_ext.h>
38 #endif //CONFIG_BR_EXT
40 #ifdef CONFIG_RF_GAIN_OFFSET
41 #define REG_RF_BB_GAIN_OFFSET 0x55
42 #define RF_GAIN_OFFSET_MASK 0xfffff
43 #endif //CONFIG_RF_GAIN_OFFSET
45 MODULE_LICENSE("GPL");
46 MODULE_DESCRIPTION("Realtek Wireless Lan Driver");
47 MODULE_AUTHOR("Realtek Semiconductor Corp.");
48 MODULE_VERSION(DRIVERVERSION);
50 /* module param defaults */
51 int rtw_chip_version = 0x00;
52 int rtw_rfintfs = HWPI;
53 int rtw_lbkmode = 0;//RTL8712_AIR_TRX;
56 int rtw_network_mode = Ndis802_11IBSS;//Ndis802_11Infrastructure;//infra, ad-hoc, auto
57 //NDIS_802_11_SSID ssid;
58 int rtw_channel = 1;//ad-hoc support requirement
59 int rtw_wireless_mode = WIRELESS_11BG_24N;
60 int rtw_vrtl_carrier_sense = AUTO_VCS;
61 int rtw_vcs_type = RTS_CTS;//*
62 int rtw_rts_thresh = 2347;//*
63 int rtw_frag_thresh = 2346;//*
64 int rtw_preamble = PREAMBLE_LONG;//long, short, auto
65 int rtw_scan_mode = 1;//active, passive
66 int rtw_adhoc_tx_pwr = 1;
69 #ifdef CONFIG_POWER_SAVING
70 int rtw_power_mgnt = 1;
71 #ifdef CONFIG_IPS_LEVEL_2
72 int rtw_ips_mode = IPS_LEVEL_2;
74 int rtw_ips_mode = IPS_NORMAL;
77 int rtw_power_mgnt = PS_MODE_ACTIVE;
78 int rtw_ips_mode = IPS_NONE;
83 #ifdef CONFIG_TX_EARLY_MODE
86 module_param(rtw_ips_mode, int, 0644);
87 MODULE_PARM_DESC(rtw_ips_mode,"The default IPS mode");
89 int rtw_radio_enable = 1;
90 int rtw_long_retry_lmt = 7;
91 int rtw_short_retry_lmt = 7;
92 int rtw_busy_thresh = 40;
93 //int qos_enable = 0; //*
94 int rtw_ack_policy = NORMAL_ACK;
96 int rtw_software_encrypt = 0;
97 int rtw_software_decrypt = 0;
99 int rtw_acm_method = 0;// 0:By SW 1:By HW.
101 int rtw_wmm_enable = 1;// default is set to enable the wmm.
102 int rtw_uapsd_enable = 0;
103 int rtw_uapsd_max_sp = NO_LIMIT;
104 int rtw_uapsd_acbk_en = 0;
105 int rtw_uapsd_acbe_en = 0;
106 int rtw_uapsd_acvi_en = 0;
107 int rtw_uapsd_acvo_en = 0;
109 #ifdef CONFIG_80211N_HT
110 int rtw_ht_enable = 1;
111 int rtw_cbw40_enable = 3; // 0 :diable, bit(0): enable 2.4g, bit(1): enable 5g
112 int rtw_ampdu_enable = 1;//for enable tx_ampdu
113 int rtw_rx_stbc = 1;// 0: disable, bit(0):enable 2.4g, bit(1):enable 5g, default is set to enable 2.4GHZ for IOT issue with bufflao's AP at 5GHZ
114 int rtw_ampdu_amsdu = 0;// 0: disabled, 1:enabled, 2:auto
117 int rtw_lowrate_two_xmit = 1;//Use 2 path Tx to transmit MCS0~7 and legacy mode
119 //int rf_config = RF_1T2R; // 1T2R
120 int rtw_rf_config = RF_819X_MAX_TYPE; //auto
121 int rtw_low_power = 0;
122 #ifdef CONFIG_WIFI_TEST
123 int rtw_wifi_spec = 1;//for wifi test
125 int rtw_wifi_spec = 0;
127 int rtw_channel_plan = RT_CHANNEL_DOMAIN_MAX;
129 #ifdef CONFIG_BT_COEXIST
130 int rtw_btcoex_enable = 1;
131 int rtw_bt_iso = 2;// 0:Low, 1:High, 2:From Efuse
132 int rtw_bt_sco = 3;// 0:Idle, 1:None-SCO, 2:SCO, 3:From Counter, 4.Busy, 5.OtherBusy
133 int rtw_bt_ampdu =1 ;// 0:Disable BT control A-MPDU, 1:Enable BT control A-MPDU.
136 int rtw_AcceptAddbaReq = _TRUE;// 0:Reject AP's Add BA req, 1:Accept AP's Add BA req.
138 int rtw_antdiv_cfg = 2; // 0:OFF , 1:ON, 2:decide by Efuse config
139 int rtw_antdiv_type = 0 ; //0:decide by efuse 1: for 88EE, 1Tx and 1RxCG are diversity.(2 Ant with SPDT), 2: for 88EE, 1Tx and 2Rx are diversity.( 2 Ant, Tx and RxCG are both on aux port, RxCS is on main port ), 3: for 88EE, 1Tx and 1RxCG are fixed.(1Ant, Tx and RxCG are both on aux port)
142 #ifdef CONFIG_USB_AUTOSUSPEND
143 int rtw_enusbss = 1;//0:disable,1:enable
145 int rtw_enusbss = 0;//0:disable,1:enable
148 int rtw_hwpdn_mode=2;//0:disable,1:enable,2: by EFUSE config
150 #ifdef CONFIG_HW_PWRP_DETECTION
151 int rtw_hwpwrp_detect = 1;
153 int rtw_hwpwrp_detect = 0; //HW power ping detect 0:disable , 1:enable
156 #ifdef CONFIG_USB_HCI
157 int rtw_hw_wps_pbc = 1;
159 int rtw_hw_wps_pbc = 0;
162 #ifdef CONFIG_TX_MCAST2UNI
163 int rtw_mc2u_disable = 0;
164 #endif // CONFIG_TX_MCAST2UNI
166 #ifdef CONFIG_DUALMAC_CONCURRENT
168 #endif // CONFIG_DUALMAC_CONCURRENT
174 #ifdef CONFIG_REGULATORY_CTRL
175 int rtw_regulatory_id =2;
177 int rtw_regulatory_id = 0xff;// Regulatory tab id, 0xff = follow efuse's setting
179 module_param(rtw_regulatory_id, int, 0644);
182 #ifdef CONFIG_SPECIAL_SETTING_FOR_FUNAI_TV
183 int rtw_force_ant = 2;//0 :normal, 1:Main ant, 2:Aux ant
184 int rtw_force_igi =0;//0 :normal
185 module_param(rtw_force_ant, int, 0644);
186 module_param(rtw_force_igi, int, 0644);
189 char* ifname = "wlan%d";
190 module_param(ifname, charp, 0644);
191 MODULE_PARM_DESC(ifname, "The default name to allocate for first interface");
193 char* if2name = "wlan%d";
194 module_param(if2name, charp, 0644);
195 MODULE_PARM_DESC(if2name, "The default name to allocate for second interface");
197 char* rtw_initmac = 0; // temp mac address if users want to use instead of the mac address in Efuse
199 module_param(rtw_initmac, charp, 0644);
200 module_param(rtw_channel_plan, int, 0644);
201 module_param(rtw_chip_version, int, 0644);
202 module_param(rtw_rfintfs, int, 0644);
203 module_param(rtw_lbkmode, int, 0644);
204 module_param(rtw_network_mode, int, 0644);
205 module_param(rtw_channel, int, 0644);
206 module_param(rtw_wmm_enable, int, 0644);
207 module_param(rtw_vrtl_carrier_sense, int, 0644);
208 module_param(rtw_vcs_type, int, 0644);
209 module_param(rtw_busy_thresh, int, 0644);
210 #ifdef CONFIG_80211N_HT
211 module_param(rtw_ht_enable, int, 0644);
212 module_param(rtw_cbw40_enable, int, 0644);
213 module_param(rtw_ampdu_enable, int, 0644);
214 module_param(rtw_rx_stbc, int, 0644);
215 module_param(rtw_ampdu_amsdu, int, 0644);
218 module_param(rtw_lowrate_two_xmit, int, 0644);
220 module_param(rtw_rf_config, int, 0644);
221 module_param(rtw_power_mgnt, int, 0644);
222 module_param(rtw_smart_ps, int, 0644);
223 module_param(rtw_low_power, int, 0644);
224 module_param(rtw_wifi_spec, int, 0644);
226 module_param(rtw_antdiv_cfg, int, 0644);
227 module_param(rtw_antdiv_type, int, 0644);
229 module_param(rtw_enusbss, int, 0644);
230 module_param(rtw_hwpdn_mode, int, 0644);
231 module_param(rtw_hwpwrp_detect, int, 0644);
233 module_param(rtw_hw_wps_pbc, int, 0644);
235 #ifdef CONFIG_TX_EARLY_MODE
236 module_param(rtw_early_mode, int, 0644);
238 #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
239 char *rtw_adaptor_info_caching_file_path= "/data/misc/wifi/rtw_cache";
240 module_param(rtw_adaptor_info_caching_file_path, charp, 0644);
241 MODULE_PARM_DESC(rtw_adaptor_info_caching_file_path, "The path of adapter info cache file");
242 #endif //CONFIG_ADAPTOR_INFO_CACHING_FILE
244 #ifdef CONFIG_LAYER2_ROAMING
245 uint rtw_max_roaming_times=2;
246 module_param(rtw_max_roaming_times, uint, 0644);
247 MODULE_PARM_DESC(rtw_max_roaming_times,"The max roaming times to try");
248 #endif //CONFIG_LAYER2_ROAMING
251 int rtw_fw_iol=1;// 0:Disable, 1:enable, 2:by usb speed
252 module_param(rtw_fw_iol, int, 0644);
253 MODULE_PARM_DESC(rtw_fw_iol,"FW IOL");
256 #ifdef CONFIG_FILE_FWIMG
257 char *rtw_fw_file_path= "";
258 module_param(rtw_fw_file_path, charp, 0644);
259 MODULE_PARM_DESC(rtw_fw_file_path, "The path of fw image");
260 #endif //CONFIG_FILE_FWIMG
262 #ifdef CONFIG_TX_MCAST2UNI
263 module_param(rtw_mc2u_disable, int, 0644);
264 #endif // CONFIG_TX_MCAST2UNI
266 #ifdef CONFIG_DUALMAC_CONCURRENT
267 module_param(rtw_dmsp, int, 0644);
268 #endif // CONFIG_DUALMAC_CONCURRENT
271 module_param(rtw_80211d, int, 0644);
272 MODULE_PARM_DESC(rtw_80211d, "Enable 802.11d mechanism");
275 #ifdef CONFIG_BT_COEXIST
276 module_param(rtw_btcoex_enable, int, 0644);
277 MODULE_PARM_DESC(rtw_btcoex_enable, "Enable BT co-existence mechanism");
280 uint rtw_notch_filter = RTW_NOTCH_FILTER;
281 module_param(rtw_notch_filter, uint, 0644);
282 MODULE_PARM_DESC(rtw_notch_filter, "0:Disable, 1:Enable, 2:Enable only for P2P");
283 module_param_named(debug, rtw_debug, int, 0444);
284 MODULE_PARM_DESC(debug, "Set debug level (1-9) (default 1)");
286 static uint loadparam(PADAPTER padapter, _nic_hdl pnetdev);
287 int _netdev_open(struct net_device *pnetdev);
288 int netdev_open (struct net_device *pnetdev);
289 static int netdev_close (struct net_device *pnetdev);
291 #ifdef CONFIG_PROC_DEBUG
292 #define RTL8192C_PROC_NAME "rtl819xC"
293 #define RTL8192D_PROC_NAME "rtl819xD"
294 static char rtw_proc_name[IFNAMSIZ];
295 static struct proc_dir_entry *rtw_proc = NULL;
296 static int rtw_proc_cnt = 0;
298 #define RTW_PROC_NAME DRV_NAME
300 #ifndef create_proc_entry
302 void rtw_proc_remove_one(struct net_device *dev)
306 void rtw_proc_init_one(struct net_device *dev)
310 #else /* create_proc_entry not defined */
311 void rtw_proc_init_one(struct net_device *dev)
313 struct proc_dir_entry *dir_dev = NULL;
314 struct proc_dir_entry *entry=NULL;
315 _adapter *padapter = rtw_netdev_priv(dev);
320 if(padapter->chip_type == RTL8188C_8192C)
322 memcpy(rtw_proc_name, RTL8192C_PROC_NAME, sizeof(RTL8192C_PROC_NAME));
324 else if(padapter->chip_type == RTL8192D)
326 memcpy(rtw_proc_name, RTL8192D_PROC_NAME, sizeof(RTL8192D_PROC_NAME));
328 else if(padapter->chip_type == RTL8723A)
330 memcpy(rtw_proc_name, RTW_PROC_NAME, sizeof(RTW_PROC_NAME));
332 else if(padapter->chip_type == RTL8188E)
334 memcpy(rtw_proc_name, RTW_PROC_NAME, sizeof(RTW_PROC_NAME));
338 memcpy(rtw_proc_name, RTW_PROC_NAME, sizeof(RTW_PROC_NAME));
341 #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
342 rtw_proc=create_proc_entry(rtw_proc_name, S_IFDIR, proc_net);
344 rtw_proc=create_proc_entry(rtw_proc_name, S_IFDIR, init_net.proc_net);
346 if (rtw_proc == NULL) {
347 DBG_8723A(KERN_ERR "Unable to create rtw_proc directory\n");
351 entry = create_proc_read_entry("ver_info", S_IFREG | S_IRUGO, rtw_proc, proc_get_drv_version, dev);
353 DBG_8723A("Unable to create_proc_read_entry!\n");
360 if(padapter->dir_dev == NULL)
362 padapter->dir_dev = create_proc_entry(dev->name,
363 S_IFDIR | S_IRUGO | S_IXUGO,
366 dir_dev = padapter->dir_dev;
370 if(rtw_proc_cnt == 0)
373 #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
374 remove_proc_entry(rtw_proc_name, proc_net);
376 remove_proc_entry(rtw_proc_name, init_net.proc_net);
382 DBG_8723A("Unable to create dir_dev directory\n");
393 entry = create_proc_read_entry("write_reg", S_IFREG | S_IRUGO,
394 dir_dev, proc_get_write_reg, dev);
396 DBG_8723A("Unable to create_proc_read_entry!\n");
399 entry->write_proc = proc_set_write_reg;
401 entry = create_proc_read_entry("read_reg", S_IFREG | S_IRUGO,
402 dir_dev, proc_get_read_reg, dev);
404 DBG_8723A("Unable to create_proc_read_entry!\n");
407 entry->write_proc = proc_set_read_reg;
410 entry = create_proc_read_entry("fwstate", S_IFREG | S_IRUGO,
411 dir_dev, proc_get_fwstate, dev);
413 DBG_8723A("Unable to create_proc_read_entry!\n");
418 entry = create_proc_read_entry("sec_info", S_IFREG | S_IRUGO,
419 dir_dev, proc_get_sec_info, dev);
421 DBG_8723A("Unable to create_proc_read_entry!\n");
426 entry = create_proc_read_entry("mlmext_state", S_IFREG | S_IRUGO,
427 dir_dev, proc_get_mlmext_state, dev);
429 DBG_8723A("Unable to create_proc_read_entry!\n");
434 entry = create_proc_read_entry("qos_option", S_IFREG | S_IRUGO,
435 dir_dev, proc_get_qos_option, dev);
437 DBG_8723A("Unable to create_proc_read_entry!\n");
441 entry = create_proc_read_entry("ht_option", S_IFREG | S_IRUGO,
442 dir_dev, proc_get_ht_option, dev);
444 DBG_8723A("Unable to create_proc_read_entry!\n");
448 entry = create_proc_read_entry("rf_info", S_IFREG | S_IRUGO,
449 dir_dev, proc_get_rf_info, dev);
451 DBG_8723A("Unable to create_proc_read_entry!\n");
455 entry = create_proc_read_entry("ap_info", S_IFREG | S_IRUGO,
456 dir_dev, proc_get_ap_info, dev);
458 DBG_8723A("Unable to create_proc_read_entry!\n");
462 entry = create_proc_read_entry("adapter_state", S_IFREG | S_IRUGO,
463 dir_dev, proc_get_adapter_state, dev);
465 DBG_8723A("Unable to create_proc_read_entry!\n");
469 entry = create_proc_read_entry("trx_info", S_IFREG | S_IRUGO,
470 dir_dev, proc_get_trx_info, dev);
472 DBG_8723A("Unable to create_proc_read_entry!\n");
476 entry = create_proc_read_entry("mac_reg_dump1", S_IFREG | S_IRUGO,
477 dir_dev, proc_get_mac_reg_dump1, dev);
479 DBG_8723A("Unable to create_proc_read_entry!\n");
483 entry = create_proc_read_entry("mac_reg_dump2", S_IFREG | S_IRUGO,
484 dir_dev, proc_get_mac_reg_dump2, dev);
486 DBG_8723A("Unable to create_proc_read_entry!\n");
490 entry = create_proc_read_entry("mac_reg_dump3", S_IFREG | S_IRUGO,
491 dir_dev, proc_get_mac_reg_dump3, dev);
493 DBG_8723A("Unable to create_proc_read_entry!\n");
497 entry = create_proc_read_entry("bb_reg_dump1", S_IFREG | S_IRUGO,
498 dir_dev, proc_get_bb_reg_dump1, dev);
500 DBG_8723A("Unable to create_proc_read_entry!\n");
504 entry = create_proc_read_entry("bb_reg_dump2", S_IFREG | S_IRUGO,
505 dir_dev, proc_get_bb_reg_dump2, dev);
507 DBG_8723A("Unable to create_proc_read_entry!\n");
511 entry = create_proc_read_entry("bb_reg_dump3", S_IFREG | S_IRUGO,
512 dir_dev, proc_get_bb_reg_dump3, dev);
514 DBG_8723A("Unable to create_proc_read_entry!\n");
518 entry = create_proc_read_entry("rf_reg_dump1", S_IFREG | S_IRUGO,
519 dir_dev, proc_get_rf_reg_dump1, dev);
521 DBG_8723A("Unable to create_proc_read_entry!\n");
525 entry = create_proc_read_entry("rf_reg_dump2", S_IFREG | S_IRUGO,
526 dir_dev, proc_get_rf_reg_dump2, dev);
528 DBG_8723A("Unable to create_proc_read_entry!\n");
532 rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
533 if((RF_1T2R == rf_type) ||(RF_1T1R ==rf_type )) {
534 entry = create_proc_read_entry("rf_reg_dump3", S_IFREG | S_IRUGO,
535 dir_dev, proc_get_rf_reg_dump3, dev);
537 DBG_8723A("Unable to create_proc_read_entry!\n");
541 entry = create_proc_read_entry("rf_reg_dump4", S_IFREG | S_IRUGO,
542 dir_dev, proc_get_rf_reg_dump4, dev);
544 DBG_8723A("Unable to create_proc_read_entry!\n");
549 #ifdef CONFIG_AP_MODE
551 entry = create_proc_read_entry("all_sta_info", S_IFREG | S_IRUGO,
552 dir_dev, proc_get_all_sta_info, dev);
554 DBG_8723A("Unable to create_proc_read_entry!\n");
559 #ifdef CONFIG_FIND_BEST_CHANNEL
560 entry = create_proc_read_entry("best_channel", S_IFREG | S_IRUGO,
561 dir_dev, proc_get_best_channel, dev);
563 DBG_8723A("Unable to create_proc_read_entry!\n");
568 entry = create_proc_read_entry("rx_signal", S_IFREG | S_IRUGO,
569 dir_dev, proc_get_rx_signal, dev);
571 DBG_8723A("Unable to create_proc_read_entry!\n");
574 entry->write_proc = proc_set_rx_signal;
575 #ifdef CONFIG_80211N_HT
576 entry = create_proc_read_entry("ht_enable", S_IFREG | S_IRUGO,
577 dir_dev, proc_get_ht_enable, dev);
579 DBG_8723A("Unable to create_proc_read_entry!\n");
582 entry->write_proc = proc_set_ht_enable;
584 entry = create_proc_read_entry("cbw40_enable", S_IFREG | S_IRUGO,
585 dir_dev, proc_get_cbw40_enable, dev);
587 DBG_8723A("Unable to create_proc_read_entry!\n");
590 entry->write_proc = proc_set_cbw40_enable;
592 entry = create_proc_read_entry("ampdu_enable", S_IFREG | S_IRUGO,
593 dir_dev, proc_get_ampdu_enable, dev);
595 DBG_8723A("Unable to create_proc_read_entry!\n");
598 entry->write_proc = proc_set_ampdu_enable;
600 entry = create_proc_read_entry("rx_stbc", S_IFREG | S_IRUGO,
601 dir_dev, proc_get_rx_stbc, dev);
603 DBG_8723A("Unable to create_proc_read_entry!\n");
606 entry->write_proc = proc_set_rx_stbc;
607 #endif //CONFIG_80211N_HT
609 entry = create_proc_read_entry("path_rssi", S_IFREG | S_IRUGO,
610 dir_dev, proc_get_two_path_rssi, dev);
613 entry = create_proc_read_entry("rssi_disp", S_IFREG | S_IRUGO,
614 dir_dev, proc_get_rssi_disp, dev);
616 DBG_8723A("Unable to create_proc_read_entry!\n");
619 entry->write_proc = proc_set_rssi_disp;
620 #ifdef CONFIG_BT_COEXIST
621 entry = create_proc_read_entry("btcoex_dbg", S_IFREG | S_IRUGO,
622 dir_dev, proc_get_btcoex_dbg, dev);
624 DBG_8723A("Unable to create_proc_read_entry!\n");
627 entry->write_proc = proc_set_btcoex_dbg;
628 #endif /*CONFIG_BT_COEXIST*/
630 #if defined(DBG_CONFIG_ERROR_DETECT)
631 entry = create_proc_read_entry("sreset", S_IFREG | S_IRUGO,
632 dir_dev, proc_get_sreset, dev);
634 DBG_8723A("Unable to create_proc_read_entry!\n");
637 entry->write_proc = proc_set_sreset;
638 #endif /* DBG_CONFIG_ERROR_DETECT */
642 void rtw_proc_remove_one(struct net_device *dev)
644 struct proc_dir_entry *dir_dev = NULL;
645 _adapter *padapter = rtw_netdev_priv(dev);
648 dir_dev = padapter->dir_dev;
649 padapter->dir_dev = NULL;
653 remove_proc_entry("write_reg", dir_dev);
654 remove_proc_entry("read_reg", dir_dev);
655 remove_proc_entry("fwstate", dir_dev);
656 remove_proc_entry("sec_info", dir_dev);
657 remove_proc_entry("mlmext_state", dir_dev);
658 remove_proc_entry("qos_option", dir_dev);
659 remove_proc_entry("ht_option", dir_dev);
660 remove_proc_entry("rf_info", dir_dev);
661 remove_proc_entry("ap_info", dir_dev);
662 remove_proc_entry("adapter_state", dir_dev);
663 remove_proc_entry("trx_info", dir_dev);
665 remove_proc_entry("mac_reg_dump1", dir_dev);
666 remove_proc_entry("mac_reg_dump2", dir_dev);
667 remove_proc_entry("mac_reg_dump3", dir_dev);
668 remove_proc_entry("bb_reg_dump1", dir_dev);
669 remove_proc_entry("bb_reg_dump2", dir_dev);
670 remove_proc_entry("bb_reg_dump3", dir_dev);
671 remove_proc_entry("rf_reg_dump1", dir_dev);
672 remove_proc_entry("rf_reg_dump2", dir_dev);
673 rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
674 if((RF_1T2R == rf_type) ||(RF_1T1R ==rf_type )) {
675 remove_proc_entry("rf_reg_dump3", dir_dev);
676 remove_proc_entry("rf_reg_dump4", dir_dev);
678 #ifdef CONFIG_AP_MODE
679 remove_proc_entry("all_sta_info", dir_dev);
682 #ifdef CONFIG_FIND_BEST_CHANNEL
683 remove_proc_entry("best_channel", dir_dev);
685 remove_proc_entry("rx_signal", dir_dev);
686 #ifdef CONFIG_80211N_HT
687 remove_proc_entry("cbw40_enable", dir_dev);
689 remove_proc_entry("ht_enable", dir_dev);
691 remove_proc_entry("ampdu_enable", dir_dev);
693 remove_proc_entry("rx_stbc", dir_dev);
694 #endif //CONFIG_80211N_HT
695 remove_proc_entry("path_rssi", dir_dev);
697 remove_proc_entry("rssi_disp", dir_dev);
699 #ifdef CONFIG_BT_COEXIST
700 remove_proc_entry("btcoex_dbg", dir_dev);
701 #endif //CONFIG_BT_COEXIST
703 #if defined(DBG_CONFIG_ERROR_DETECT)
704 remove_proc_entry("sreset", dir_dev);
705 #endif /* DBG_CONFIG_ERROR_DETECT */
707 remove_proc_entry(dev->name, rtw_proc);
718 if(rtw_proc_cnt == 0)
721 remove_proc_entry("ver_info", rtw_proc);
723 #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
724 remove_proc_entry(rtw_proc_name, proc_net);
726 remove_proc_entry(rtw_proc_name, init_net.proc_net);
733 #endif //ifndef create_proc_entry
735 uint loadparam( _adapter *padapter, _nic_hdl pnetdev)
738 uint status = _SUCCESS;
739 struct registry_priv *registry_par = &padapter->registrypriv;
743 GlobalDebugLevel = rtw_debug;
744 registry_par->chip_version = (u8)rtw_chip_version;
745 registry_par->rfintfs = (u8)rtw_rfintfs;
746 registry_par->lbkmode = (u8)rtw_lbkmode;
747 //registry_par->hci = (u8)hci;
748 registry_par->network_mode = (u8)rtw_network_mode;
750 memcpy(registry_par->ssid.Ssid, "ANY", 3);
751 registry_par->ssid.SsidLength = 3;
753 registry_par->channel = (u8)rtw_channel;
754 registry_par->wireless_mode = (u8)rtw_wireless_mode;
755 registry_par->vrtl_carrier_sense = (u8)rtw_vrtl_carrier_sense ;
756 registry_par->vcs_type = (u8)rtw_vcs_type;
757 registry_par->rts_thresh=(u16)rtw_rts_thresh;
758 registry_par->frag_thresh=(u16)rtw_frag_thresh;
759 registry_par->preamble = (u8)rtw_preamble;
760 registry_par->scan_mode = (u8)rtw_scan_mode;
761 registry_par->adhoc_tx_pwr = (u8)rtw_adhoc_tx_pwr;
762 registry_par->soft_ap= (u8)rtw_soft_ap;
763 registry_par->smart_ps = (u8)rtw_smart_ps;
764 registry_par->power_mgnt = (u8)rtw_power_mgnt;
765 registry_par->ips_mode = (u8)rtw_ips_mode;
766 registry_par->radio_enable = (u8)rtw_radio_enable;
767 registry_par->long_retry_lmt = (u8)rtw_long_retry_lmt;
768 registry_par->short_retry_lmt = (u8)rtw_short_retry_lmt;
769 registry_par->busy_thresh = (u16)rtw_busy_thresh;
770 //registry_par->qos_enable = (u8)rtw_qos_enable;
771 registry_par->ack_policy = (u8)rtw_ack_policy;
772 registry_par->software_encrypt = (u8)rtw_software_encrypt;
773 registry_par->software_decrypt = (u8)rtw_software_decrypt;
775 registry_par->acm_method = (u8)rtw_acm_method;
778 registry_par->wmm_enable = (u8)rtw_wmm_enable;
779 registry_par->uapsd_enable = (u8)rtw_uapsd_enable;
780 registry_par->uapsd_max_sp = (u8)rtw_uapsd_max_sp;
781 registry_par->uapsd_acbk_en = (u8)rtw_uapsd_acbk_en;
782 registry_par->uapsd_acbe_en = (u8)rtw_uapsd_acbe_en;
783 registry_par->uapsd_acvi_en = (u8)rtw_uapsd_acvi_en;
784 registry_par->uapsd_acvo_en = (u8)rtw_uapsd_acvo_en;
786 #ifdef CONFIG_80211N_HT
787 registry_par->ht_enable = (u8)rtw_ht_enable;
788 registry_par->cbw40_enable = (u8)rtw_cbw40_enable;
789 registry_par->ampdu_enable = (u8)rtw_ampdu_enable;
790 registry_par->rx_stbc = (u8)rtw_rx_stbc;
791 registry_par->ampdu_amsdu = (u8)rtw_ampdu_amsdu;
793 #ifdef CONFIG_TX_EARLY_MODE
794 registry_par->early_mode = (u8)rtw_early_mode;
796 registry_par->lowrate_two_xmit = (u8)rtw_lowrate_two_xmit;
797 registry_par->rf_config = (u8)rtw_rf_config;
798 registry_par->low_power = (u8)rtw_low_power;
801 registry_par->wifi_spec = (u8)rtw_wifi_spec;
803 registry_par->channel_plan = (u8)rtw_channel_plan;
805 #ifdef CONFIG_BT_COEXIST
806 registry_par->btcoex = (u8)rtw_btcoex_enable;
807 registry_par->bt_iso = (u8)rtw_bt_iso;
808 registry_par->bt_sco = (u8)rtw_bt_sco;
809 registry_par->bt_ampdu = (u8)rtw_bt_ampdu;
812 registry_par->bAcceptAddbaReq = (u8)rtw_AcceptAddbaReq;
814 registry_par->antdiv_cfg = (u8)rtw_antdiv_cfg;
815 registry_par->antdiv_type = (u8)rtw_antdiv_type;
817 #ifdef CONFIG_AUTOSUSPEND
818 registry_par->usbss_enable = (u8)rtw_enusbss;//0:disable,1:enable
820 #ifdef SUPPORT_HW_RFOFF_DETECTED
821 registry_par->hwpdn_mode = (u8)rtw_hwpdn_mode;//0:disable,1:enable,2:by EFUSE config
822 registry_par->hwpwrp_detect = (u8)rtw_hwpwrp_detect;//0:disable,1:enable
825 registry_par->hw_wps_pbc = (u8)rtw_hw_wps_pbc;
827 #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
828 snprintf(registry_par->adaptor_info_caching_file_path, PATH_LENGTH_MAX, "%s", rtw_adaptor_info_caching_file_path);
829 registry_par->adaptor_info_caching_file_path[PATH_LENGTH_MAX-1]=0;
832 #ifdef CONFIG_LAYER2_ROAMING
833 registry_par->max_roaming_times = (u8)rtw_max_roaming_times;
834 #ifdef CONFIG_INTEL_WIDI
835 registry_par->max_roaming_times = (u8)rtw_max_roaming_times + 2;
836 #endif // CONFIG_INTEL_WIDI
840 registry_par->fw_iol = rtw_fw_iol;
843 #ifdef CONFIG_DUALMAC_CONCURRENT
844 registry_par->dmsp= (u8)rtw_dmsp;
848 registry_par->enable80211d = (u8)rtw_80211d;
851 snprintf(registry_par->ifname, 16, "%s", ifname);
852 snprintf(registry_par->if2name, 16, "%s", if2name);
854 registry_par->notch_filter = (u8)rtw_notch_filter;
856 #ifdef CONFIG_SPECIAL_SETTING_FOR_FUNAI_TV
857 registry_par->force_ant = (u8)rtw_force_ant;
858 registry_par->force_igi = (u8)rtw_force_igi;
860 registry_par->regulatory_tid = (u8)rtw_regulatory_id;
868 static int rtw_net_set_mac_address(struct net_device *pnetdev, void *p)
870 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
871 struct sockaddr *addr = p;
873 if(padapter->bup == _FALSE)
875 //DBG_8723A("r8711_net_set_mac_address(), MAC=%x:%x:%x:%x:%x:%x\n", addr->sa_data[0], addr->sa_data[1], addr->sa_data[2], addr->sa_data[3],
876 //addr->sa_data[4], addr->sa_data[5]);
877 memcpy(padapter->eeprompriv.mac_addr, addr->sa_data, ETH_ALEN);
878 //memcpy(pnetdev->dev_addr, addr->sa_data, ETH_ALEN);
879 //padapter->bset_hwaddr = _TRUE;
885 static struct net_device_stats *rtw_net_get_stats(struct net_device *pnetdev)
887 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
888 struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
889 struct recv_priv *precvpriv = &(padapter->recvpriv);
891 padapter->stats.tx_packets = pxmitpriv->tx_pkts;//pxmitpriv->tx_pkts++;
892 padapter->stats.rx_packets = precvpriv->rx_pkts;//precvpriv->rx_pkts++;
893 padapter->stats.tx_dropped = pxmitpriv->tx_drop;
894 padapter->stats.rx_dropped = precvpriv->rx_drop;
895 padapter->stats.tx_bytes = pxmitpriv->tx_bytes;
896 padapter->stats.rx_bytes = precvpriv->rx_bytes;
898 return &padapter->stats;
901 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
903 * AC to queue mapping
910 static const u16 rtw_1d_to_queue[8] = { 2, 3, 3, 2, 1, 1, 0, 0 };
912 /* Given a data frame determine the 802.1p/1d tag to use. */
913 unsigned int rtw_classify8021d(struct sk_buff *skb)
917 /* skb->priority values from 256->263 are magic values to
918 * directly indicate a specific 802.1d priority. This is used
919 * to allow 802.1d priority to be passed directly in from VLAN
922 if (skb->priority >= 256 && skb->priority <= 263)
923 return skb->priority - 256;
925 switch (skb->protocol) {
926 case htons(ETH_P_IP):
927 dscp = ip_hdr(skb)->tos & 0xfc;
936 static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb)
938 _adapter *padapter = rtw_netdev_priv(dev);
939 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
941 skb->priority = rtw_classify8021d(skb);
943 if(pmlmepriv->acm_mask != 0)
945 skb->priority = qos_acm(pmlmepriv->acm_mask, skb->priority);
948 return rtw_1d_to_queue[skb->priority];
951 u16 rtw_recv_select_queue(struct sk_buff *skb)
953 struct iphdr *piphdr;
957 u8 *pdata = skb->data;
959 memcpy(ð_type, pdata+(ETH_ALEN<<1), 2);
962 case htons(ETH_P_IP):
964 piphdr = (struct iphdr *)(pdata+ETH_HLEN);
966 dscp = piphdr->tos & 0xfc;
968 priority = dscp >> 5;
975 return rtw_1d_to_queue[priority];
981 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
982 static const struct net_device_ops rtw_netdev_ops = {
983 .ndo_open = netdev_open,
984 .ndo_stop = netdev_close,
985 .ndo_start_xmit = rtw_xmit_entry,
986 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
987 .ndo_select_queue = rtw_select_queue,
989 .ndo_set_mac_address = rtw_net_set_mac_address,
990 .ndo_get_stats = rtw_net_get_stats,
991 .ndo_do_ioctl = rtw_ioctl,
995 int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname)
997 _adapter *padapter = rtw_netdev_priv(pnetdev);
999 #ifdef CONFIG_EASY_REPLACEMENT
1000 struct net_device *TargetNetdev = NULL;
1001 _adapter *TargetAdapter = NULL;
1002 struct net *devnet = NULL;
1004 if(padapter->bDongle == 1)
1006 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
1007 TargetNetdev = dev_get_by_name("wlan0");
1009 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
1010 devnet = pnetdev->nd_net;
1012 devnet = dev_net(pnetdev);
1014 TargetNetdev = dev_get_by_name(devnet, "wlan0");
1017 DBG_8723A("Force onboard module driver disappear !!!\n");
1018 TargetAdapter = rtw_netdev_priv(TargetNetdev);
1019 TargetAdapter->DriverState = DRIVER_DISAPPEAR;
1021 padapter->pid[0] = TargetAdapter->pid[0];
1022 padapter->pid[1] = TargetAdapter->pid[1];
1023 padapter->pid[2] = TargetAdapter->pid[2];
1025 dev_put(TargetNetdev);
1026 unregister_netdev(TargetNetdev);
1028 if(TargetAdapter->chip_type == padapter->chip_type)
1029 rtw_proc_remove_one(TargetNetdev);
1031 padapter->DriverState = DRIVER_REPLACE_DONGLE;
1036 if(dev_alloc_name(pnetdev, ifname) < 0)
1038 RT_TRACE(_module_os_intfs_c_,_drv_err_,("dev_alloc_name, fail! \n"));
1041 netif_carrier_off(pnetdev);
1042 //rtw_netif_stop_queue(pnetdev);
1047 static const struct device_type wlan_type = {
1051 struct net_device *rtw_init_netdev(_adapter *old_padapter)
1054 struct net_device *pnetdev;
1056 RT_TRACE(_module_os_intfs_c_,_drv_info_,("+init_net_dev\n"));
1058 if(old_padapter != NULL)
1059 pnetdev = rtw_alloc_etherdev_with_old_priv(sizeof(_adapter), (void *)old_padapter);
1061 pnetdev = rtw_alloc_etherdev(sizeof(_adapter));
1066 pnetdev->dev.type = &wlan_type;
1067 padapter = rtw_netdev_priv(pnetdev);
1068 padapter->pnetdev = pnetdev;
1070 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
1071 SET_MODULE_OWNER(pnetdev);
1074 //pnetdev->init = NULL;
1076 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
1077 DBG_8723A("register rtw_netdev_ops to netdev_ops\n");
1078 pnetdev->netdev_ops = &rtw_netdev_ops;
1080 pnetdev->open = netdev_open;
1081 pnetdev->stop = netdev_close;
1082 pnetdev->hard_start_xmit = rtw_xmit_entry;
1083 pnetdev->set_mac_address = rtw_net_set_mac_address;
1084 pnetdev->get_stats = rtw_net_get_stats;
1085 pnetdev->do_ioctl = rtw_ioctl;
1089 #ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
1090 pnetdev->features |= NETIF_F_IP_CSUM;
1092 //pnetdev->tx_timeout = NULL;
1093 pnetdev->watchdog_timeo = HZ*3; /* 3 second timeout */
1094 #ifdef CONFIG_WIRELESS_EXT
1095 pnetdev->wireless_handlers = (struct iw_handler_def *)&rtw_handlers_def;
1099 //priv->wireless_data.spy_data = &priv->spy_data;
1100 //pnetdev->wireless_data = &priv->wireless_data;
1104 loadparam(padapter, pnetdev);
1110 u32 rtw_start_drv_threads(_adapter *padapter)
1112 u32 _status = _SUCCESS;
1114 RT_TRACE(_module_os_intfs_c_,_drv_info_,("+rtw_start_drv_threads\n"));
1115 #ifdef CONFIG_XMIT_THREAD_MODE
1116 padapter->xmitThread = kthread_run(rtw_xmit_thread, padapter, "RTW_XMIT_THREAD");
1117 if(IS_ERR(padapter->xmitThread))
1121 #ifdef CONFIG_RECV_THREAD_MODE
1122 padapter->recvThread = kthread_run(rtw_recv_thread, padapter, "RTW_RECV_THREAD");
1123 if(IS_ERR(padapter->recvThread))
1128 #ifdef CONFIG_CONCURRENT_MODE
1129 if(padapter->isprimary == _TRUE)
1130 #endif //CONFIG_CONCURRENT_MODE
1132 padapter->cmdThread = kthread_run(rtw_cmd_thread, padapter, "RTW_CMD_THREAD");
1133 if(IS_ERR(padapter->cmdThread))
1136 down(&padapter->cmdpriv.terminate_cmdthread_sema); //wait for cmd_thread to run
1140 #ifdef CONFIG_EVENT_THREAD_MODE
1141 padapter->evtThread = kthread_run(event_thread, padapter, "RTW_EVENT_THREAD");
1142 if(IS_ERR(padapter->evtThread))
1146 rtw_hal_start_thread(padapter);
1151 void rtw_stop_drv_threads (_adapter *padapter)
1153 RT_TRACE(_module_os_intfs_c_,_drv_info_,("+rtw_stop_drv_threads\n"));
1155 #ifdef CONFIG_CONCURRENT_MODE
1156 if(padapter->isprimary == _TRUE)
1157 #endif //CONFIG_CONCURRENT_MODE
1159 //Below is to termindate rtw_cmd_thread & event_thread...
1160 up(&padapter->cmdpriv.cmd_queue_sema);
1161 //up(&padapter->cmdpriv.cmd_done_sema);
1162 if(padapter->cmdThread){
1163 down(&padapter->cmdpriv.terminate_cmdthread_sema);
1167 #ifdef CONFIG_EVENT_THREAD_MODE
1168 up(&padapter->evtpriv.evt_notify);
1169 if(padapter->evtThread){
1170 down_interruptible(&padapter->evtpriv.terminate_evtthread_sema);
1174 #ifdef CONFIG_XMIT_THREAD_MODE
1175 // Below is to termindate tx_thread...
1177 up(&padapter->xmitpriv.xmit_sema);
1178 down(&padapter->xmitpriv.terminate_xmitthread_sema);
1180 RT_TRACE(_module_os_intfs_c_,_drv_info_,("\n drv_halt: rtw_xmit_thread can be terminated ! \n"));
1183 #ifdef CONFIG_RECV_THREAD_MODE
1184 // Below is to termindate rx_thread...
1185 up(&padapter->recvpriv.recv_sema);
1186 down(&padapter->recvpriv.terminate_recvthread_sema);
1187 RT_TRACE(_module_os_intfs_c_,_drv_info_,("\n drv_halt:recv_thread can be terminated! \n"));
1190 rtw_hal_stop_thread(padapter);
1193 u8 rtw_init_default_value(_adapter *padapter);
1194 u8 rtw_init_default_value(_adapter *padapter)
1197 struct registry_priv* pregistrypriv = &padapter->registrypriv;
1198 struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
1199 struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
1200 struct security_priv *psecuritypriv = &padapter->securitypriv;
1203 pxmitpriv->vcs_setting = pregistrypriv->vrtl_carrier_sense;
1204 pxmitpriv->vcs = pregistrypriv->vcs_type;
1205 pxmitpriv->vcs_type = pregistrypriv->vcs_type;
1206 //pxmitpriv->rts_thresh = pregistrypriv->rts_thresh;
1207 pxmitpriv->frag_len = pregistrypriv->frag_thresh;
1215 pmlmepriv->scan_interval = SCAN_INTERVAL;// 30*2 sec = 60sec
1216 pmlmepriv->scan_mode = SCAN_ACTIVE;
1219 //pmlmepriv->qospriv.qos_option = pregistrypriv->wmm_enable;
1222 #ifdef CONFIG_80211N_HT
1223 pmlmepriv->htpriv.ampdu_enable = _FALSE;//set to disabled
1227 //rtw_get_encrypt_decrypt_from_registrypriv(padapter);
1228 psecuritypriv->binstallGrpkey = _FAIL;
1229 psecuritypriv->sw_encrypt=pregistrypriv->software_encrypt;
1230 psecuritypriv->sw_decrypt=pregistrypriv->software_decrypt;
1232 psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open; //open system
1233 psecuritypriv->dot11PrivacyAlgrthm = _NO_PRIVACY_;
1235 psecuritypriv->dot11PrivacyKeyIndex = 0;
1237 psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
1238 psecuritypriv->dot118021XGrpKeyid = 1;
1240 psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
1241 psecuritypriv->ndisencryptstatus = Ndis802_11WEPDisabled;
1248 rtw_init_registrypriv_dev_network(padapter);
1249 rtw_update_registrypriv_dev_network(padapter);
1253 rtw_hal_def_value_init(padapter);
1256 padapter->bReadPortCancel = _FALSE;
1257 padapter->bWritePortCancel = _FALSE;
1258 padapter->bRxRSSIDisplay = 0;
1259 padapter->bNotifyChannelChange = 0;
1261 padapter->bShowGetP2PState = 1;
1267 u8 rtw_reset_drv_sw(_adapter *padapter)
1270 struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
1271 struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
1274 rtw_hal_def_value_init(padapter);
1275 padapter->bReadPortCancel = _FALSE;
1276 padapter->bWritePortCancel = _FALSE;
1277 padapter->bRxRSSIDisplay = 0;
1278 pmlmepriv->scan_interval = SCAN_INTERVAL;// 30*2 sec = 60sec
1280 padapter->xmitpriv.tx_pkts = 0;
1281 padapter->recvpriv.rx_pkts = 0;
1283 pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
1285 _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY |_FW_UNDER_LINKING);
1287 #ifdef CONFIG_AUTOSUSPEND
1288 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,22) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,34))
1289 adapter_to_dvobj(padapter)->pusbdev->autosuspend_disabled = 1;//autosuspend disabled by the user
1293 #ifdef DBG_CONFIG_ERROR_DETECT
1294 rtw_hal_sreset_reset_value(padapter);
1296 pwrctrlpriv->pwr_state_check_cnts = 0;
1299 padapter->mlmeextpriv.sitesurvey_res.state= SCAN_DISABLE;
1301 #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
1302 rtw_set_signal_stat_timer(&padapter->recvpriv);
1309 u8 rtw_init_drv_sw(_adapter *padapter)
1316 RT_TRACE(_module_os_intfs_c_,_drv_info_,("+rtw_init_drv_sw\n"));
1318 if ((rtw_init_cmd_priv(&padapter->cmdpriv)) == _FAIL)
1320 RT_TRACE(_module_os_intfs_c_,_drv_err_,("\n Can't init cmd_priv\n"));
1325 padapter->cmdpriv.padapter=padapter;
1327 if ((rtw_init_evt_priv(&padapter->evtpriv)) == _FAIL)
1329 RT_TRACE(_module_os_intfs_c_,_drv_err_,("\n Can't init evt_priv\n"));
1335 if (rtw_init_mlme_priv(padapter) == _FAIL)
1337 RT_TRACE(_module_os_intfs_c_,_drv_err_,("\n Can't init mlme_priv\n"));
1343 rtw_init_wifidirect_timers(padapter);
1344 init_wifidirect_info(padapter, P2P_ROLE_DISABLE);
1345 reset_global_wifidirect_info(padapter);
1346 #ifdef CONFIG_IOCTL_CFG80211
1347 rtw_init_cfg80211_wifidirect_info(padapter);
1350 if(rtw_init_wifi_display_info(padapter) == _FAIL)
1351 RT_TRACE(_module_os_intfs_c_,_drv_err_,("\n Can't init init_wifi_display_info\n"));
1353 #endif /* CONFIG_P2P */
1355 if(init_mlme_ext_priv(padapter) == _FAIL)
1357 RT_TRACE(_module_os_intfs_c_,_drv_err_,("\n Can't init mlme_ext_priv\n"));
1363 if(rtw_init_tdls_info(padapter) == _FAIL)
1365 DBG_8723A("Can't rtw_init_tdls_info\n");
1369 #endif //CONFIG_TDLS
1371 if(_rtw_init_xmit_priv(&padapter->xmitpriv, padapter) == _FAIL)
1373 DBG_8723A("Can't _rtw_init_xmit_priv\n");
1378 if(_rtw_init_recv_priv(&padapter->recvpriv, padapter) == _FAIL)
1380 DBG_8723A("Can't _rtw_init_recv_priv\n");
1385 // We don't need to memset padapter->XXX to zero, because adapter is allocated by rtw_zvmalloc().
1386 //memset((unsigned char *)&padapter->securitypriv, 0, sizeof (struct security_priv));
1388 //_init_timer(&(padapter->securitypriv.tkip_timer), padapter->pifp, rtw_use_tkipkey_handler, padapter);
1390 if(_rtw_init_sta_priv(&padapter->stapriv) == _FAIL)
1392 DBG_8723A("Can't _rtw_init_sta_priv\n");
1397 padapter->stapriv.padapter = padapter;
1398 padapter->setband = GHZ24_50;
1399 rtw_init_bcmc_stainfo(padapter);
1401 rtw_init_pwrctrl_priv(padapter);
1403 //memset((u8 *)&padapter->qospriv, 0, sizeof (struct qos_priv));//move to mlme_priv
1405 ret8 = rtw_init_default_value(padapter);
1407 rtw_hal_dm_init(padapter);
1408 rtw_hal_sw_led_init(padapter);
1410 #ifdef DBG_CONFIG_ERROR_DETECT
1411 rtw_hal_sreset_init(padapter);
1414 #ifdef CONFIG_INTEL_WIDI
1415 if(rtw_init_intel_widi(padapter) == _FAIL)
1417 DBG_8723A("Can't rtw_init_intel_widi\n");
1421 #endif //CONFIG_INTEL_WIDI
1423 #ifdef CONFIG_WAPI_SUPPORT
1424 padapter->WapiSupport = true; //set true temp, will revise according to Efuse or Registry value later.
1425 rtw_wapi_init(padapter);
1428 #ifdef CONFIG_BR_EXT
1429 spin_lock_init(&padapter->br_ext_lock);
1430 #endif // CONFIG_BR_EXT
1434 RT_TRACE(_module_os_intfs_c_,_drv_info_,("-rtw_init_drv_sw\n"));
1442 #ifdef CONFIG_WOWLAN
1443 void rtw_cancel_dynamic_chk_timer(_adapter *padapter)
1445 _cancel_timer_ex(&padapter->mlmepriv.dynamic_chk_timer);
1446 RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel dynamic_chk_timer! \n"));
1450 void rtw_cancel_all_timer(_adapter *padapter)
1452 RT_TRACE(_module_os_intfs_c_,_drv_info_,("+rtw_cancel_all_timer\n"));
1454 _cancel_timer_ex(&padapter->mlmepriv.assoc_timer);
1455 RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel association timer complete! \n"));
1457 //_cancel_timer_ex(&padapter->securitypriv.tkip_timer);
1458 //RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel tkip_timer! \n"));
1460 _cancel_timer_ex(&padapter->mlmepriv.scan_to_timer);
1461 RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel scan_to_timer! \n"));
1463 _cancel_timer_ex(&padapter->mlmepriv.dynamic_chk_timer);
1464 RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel dynamic_chk_timer! \n"));
1466 // cancel sw led timer
1467 rtw_hal_sw_led_deinit(padapter);
1468 RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel DeInitSwLeds! \n"));
1470 _cancel_timer_ex(&padapter->pwrctrlpriv.pwr_state_check_timer);
1472 #ifdef CONFIG_IOCTL_CFG80211
1474 _cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
1476 #endif //CONFIG_IOCTL_CFG80211
1478 #ifdef CONFIG_SET_SCAN_DENY_TIMER
1479 _cancel_timer_ex(&padapter->mlmepriv.set_scan_deny_timer);
1480 rtw_clear_scan_deny(padapter);
1481 RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel set_scan_deny_timer! \n"));
1484 #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
1485 _cancel_timer_ex(&padapter->recvpriv.signal_stat_timer);
1487 #if defined(CONFIG_CHECK_BT_HANG) && defined(CONFIG_BT_COEXIST)
1488 if (padapter->HalFunc.hal_cancel_checkbthang_workqueue)
1489 padapter->HalFunc.hal_cancel_checkbthang_workqueue(padapter);
1492 rtw_hal_dm_deinit(padapter);
1496 u8 rtw_free_drv_sw(_adapter *padapter)
1498 struct net_device *pnetdev = (struct net_device*)padapter->pnetdev;
1500 RT_TRACE(_module_os_intfs_c_,_drv_info_,("==>rtw_free_drv_sw"));
1502 #ifdef CONFIG_WAPI_SUPPORT
1503 rtw_wapi_free(padapter);
1506 //we can call rtw_p2p_enable here, but:
1507 // 1. rtw_p2p_enable may have IO operation
1508 // 2. rtw_p2p_enable is bundled with wext interface
1511 struct wifidirect_info *pwdinfo = &padapter->wdinfo;
1512 if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
1514 _cancel_timer_ex( &pwdinfo->find_phase_timer );
1515 _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
1516 _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
1517 #ifdef CONFIG_CONCURRENT_MODE
1518 _cancel_timer_ex( &pwdinfo->ap_p2p_switch_timer );
1519 #endif // CONFIG_CONCURRENT_MODE
1520 rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
1526 #ifdef CONFIG_INTEL_WIDI
1527 rtw_free_intel_widi(padapter);
1528 #endif //CONFIG_INTEL_WIDI
1530 free_mlme_ext_priv(&padapter->mlmeextpriv);
1533 //rtw_free_tdls_info(&padapter->tdlsinfo);
1534 #endif //CONFIG_TDLS
1536 rtw_free_cmd_priv(&padapter->cmdpriv);
1538 rtw_free_evt_priv(&padapter->evtpriv);
1540 rtw_free_mlme_priv(&padapter->mlmepriv);
1541 #if defined(CONFIG_CHECK_BT_HANG) && defined(CONFIG_BT_COEXIST)
1542 if (padapter->HalFunc.hal_free_checkbthang_workqueue)
1543 padapter->HalFunc.hal_free_checkbthang_workqueue(padapter);
1545 //free_io_queue(padapter);
1547 _rtw_free_xmit_priv(&padapter->xmitpriv);
1549 _rtw_free_sta_priv(&padapter->stapriv); //will free bcmc_stainfo here
1551 _rtw_free_recv_priv(&padapter->recvpriv);
1553 rtw_free_pwrctrl_priv(padapter);
1555 //rtw_mfree((void *)padapter, sizeof (padapter));
1557 #ifdef CONFIG_DRVEXT_MODULE
1558 free_drvext(&padapter->drvextpriv);
1561 rtw_hal_free_data(padapter);
1563 RT_TRACE(_module_os_intfs_c_,_drv_info_,("<==rtw_free_drv_sw\n"));
1565 //free the old_pnetdev
1566 if(padapter->rereg_nd_name_priv.old_pnetdev) {
1567 free_netdev(padapter->rereg_nd_name_priv.old_pnetdev);
1568 padapter->rereg_nd_name_priv.old_pnetdev = NULL;
1571 // clear pbuddy_adapter to avoid access wrong pointer.
1572 if(padapter->pbuddy_adapter != NULL) {
1573 padapter->pbuddy_adapter->pbuddy_adapter = NULL;
1576 RT_TRACE(_module_os_intfs_c_,_drv_info_,("-rtw_free_drv_sw\n"));
1582 #ifdef CONFIG_CONCURRENT_MODE
1583 int _netdev_if2_open(struct net_device *pnetdev)
1585 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
1586 _adapter *primary_padapter = padapter->pbuddy_adapter;
1588 DBG_8723A("+871x_drv - if2_open, bup=%d\n", padapter->bup);
1590 if(primary_padapter->bup == _FALSE || primary_padapter->hw_init_completed == _FALSE)
1592 _netdev_open(primary_padapter->pnetdev);
1595 if(padapter->bup == _FALSE && primary_padapter->bup == _TRUE &&
1596 primary_padapter->hw_init_completed == _TRUE)
1600 padapter->bDriverStopped = _FALSE;
1601 padapter->bSurpriseRemoved = _FALSE;
1602 padapter->bCardDisableWOHSM = _FALSE;
1604 // memcpy(padapter->HalData, primary_padapter->HalData, padapter->hal_data_sz);
1605 rtw_hal_clone_data(padapter, primary_padapter);
1607 padapter->bFWReady = primary_padapter->bFWReady;
1609 //if (init_mlme_ext_priv(padapter) == _FAIL)
1610 // goto netdev_if2_open_error;
1613 if(rtw_start_drv_threads(padapter) == _FAIL)
1615 goto netdev_if2_open_error;
1619 if(padapter->intf_start)
1621 padapter->intf_start(padapter);
1625 padapter->hw_init_completed = _TRUE;
1628 padapter->dir_dev = NULL;
1629 rtw_proc_init_one(pnetdev);
1632 #ifdef CONFIG_IOCTL_CFG80211
1633 rtw_cfg80211_init_wiphy(padapter);
1636 padapter->bup = _TRUE;
1640 padapter->net_closed = _FALSE;
1642 _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
1644 if(!rtw_netif_queue_stopped(pnetdev))
1645 rtw_netif_start_queue(pnetdev);
1647 rtw_netif_wake_queue(pnetdev);
1649 DBG_8723A("-871x_drv - if2_open, bup=%d\n", padapter->bup);
1652 netdev_if2_open_error:
1654 padapter->bup = _FALSE;
1656 netif_carrier_off(pnetdev);
1657 rtw_netif_stop_queue(pnetdev);
1663 int netdev_if2_open(struct net_device *pnetdev)
1666 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
1668 _enter_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
1669 ret = _netdev_if2_open(pnetdev);
1670 _exit_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
1674 static int netdev_if2_close(struct net_device *pnetdev)
1676 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
1678 padapter->net_closed = _TRUE;
1682 if (!rtw_netif_queue_stopped(pnetdev))
1683 rtw_netif_stop_queue(pnetdev);
1686 #ifdef CONFIG_IOCTL_CFG80211
1687 rtw_scan_abort(padapter);
1688 wdev_to_priv(padapter->rtw_wdev)->bandroid_scan = _FALSE;
1694 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
1695 static const struct net_device_ops rtw_netdev_if2_ops = {
1696 .ndo_open = netdev_if2_open,
1697 .ndo_stop = netdev_if2_close,
1698 .ndo_start_xmit = rtw_xmit_entry,
1699 .ndo_set_mac_address = rtw_net_set_mac_address,
1700 .ndo_get_stats = rtw_net_get_stats,
1701 .ndo_do_ioctl = rtw_ioctl,
1702 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
1703 .ndo_select_queue = rtw_select_queue,
1709 #ifdef CONFIG_USB_HCI
1710 #include <usb_hal.h>
1712 _adapter *rtw_drv_if2_init(_adapter *primary_padapter, void (*set_intf_ops)(struct _io_ops *pops))
1715 struct net_device *pnetdev = NULL;
1716 _adapter *padapter = NULL;
1717 struct dvobj_priv *pdvobjpriv;
1720 /****** init netdev ******/
1721 pnetdev = rtw_init_netdev(NULL);
1723 goto error_rtw_drv_if2_init;
1725 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
1726 DBG_8723A("register rtw_netdev_if2_ops to netdev_ops\n");
1727 pnetdev->netdev_ops = &rtw_netdev_if2_ops;
1729 pnetdev->open = netdev_if2_open;
1730 pnetdev->stop = netdev_if2_close;
1733 #ifdef CONFIG_NO_WIRELESS_HANDLERS
1734 pnetdev->wireless_handlers = NULL;
1737 /****** init adapter ******/
1738 padapter = rtw_netdev_priv(pnetdev);
1739 memcpy(padapter, primary_padapter, sizeof(_adapter));
1742 padapter->bup = _FALSE;
1743 padapter->net_closed = _TRUE;
1744 padapter->hw_init_completed = _FALSE;
1747 //set adapter_type/iface type
1748 padapter->isprimary = _FALSE;
1749 padapter->adapter_type = SECONDARY_ADAPTER;
1750 padapter->pbuddy_adapter = primary_padapter;
1751 padapter->iface_id = IFACE_ID1;
1752 #ifndef CONFIG_HWPORT_SWAP //Port0 -> Pri , Port1 -> Sec
1753 padapter->iface_type = IFACE_PORT1;
1755 padapter->iface_type = IFACE_PORT0;
1756 #endif //CONFIG_HWPORT_SWAP
1758 padapter->pnetdev = pnetdev;
1760 /****** setup dvobj ******/
1761 pdvobjpriv = adapter_to_dvobj(padapter);
1762 pdvobjpriv->if2 = padapter;
1763 pdvobjpriv->padapters[pdvobjpriv->iface_nums++] = padapter;
1765 SET_NETDEV_DEV(pnetdev, dvobj_to_dev(pdvobjpriv));
1766 #ifdef CONFIG_IOCTL_CFG80211
1767 rtw_wdev_alloc(padapter, dvobj_to_dev(pdvobjpriv));
1768 #endif //CONFIG_IOCTL_CFG80211
1770 //set interface_type/chip_type/HardwareType
1771 padapter->interface_type = primary_padapter->interface_type;
1772 padapter->chip_type = primary_padapter->chip_type;
1773 padapter->HardwareType = primary_padapter->HardwareType;
1775 //step 2. hook HalFunc, allocate HalData
1776 hal_set_hal_ops(padapter);
1778 padapter->HalFunc.inirp_init = NULL;
1779 padapter->HalFunc.inirp_deinit = NULL;
1782 padapter->intf_start = primary_padapter->intf_start;
1783 padapter->intf_stop = primary_padapter->intf_stop;
1786 if ((rtw_init_io_priv(padapter, set_intf_ops)) == _FAIL) {
1787 RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
1790 //step read_chip_version
1791 rtw_hal_read_chip_version(padapter);
1793 //step usb endpoint mapping
1794 rtw_hal_chip_configure(padapter);
1798 if(rtw_init_drv_sw(padapter)!= _SUCCESS)
1799 goto error_rtw_drv_if2_init;
1801 //get mac address from primary_padapter
1802 memcpy(mac, primary_padapter->eeprompriv.mac_addr, ETH_ALEN);
1804 if (((mac[0]==0xff) &&(mac[1]==0xff) && (mac[2]==0xff) &&
1805 (mac[3]==0xff) && (mac[4]==0xff) &&(mac[5]==0xff)) ||
1806 ((mac[0]==0x0) && (mac[1]==0x0) && (mac[2]==0x0) &&
1807 (mac[3]==0x0) && (mac[4]==0x0) &&(mac[5]==0x0)))
1818 //If the BIT1 is 0, the address is universally administered.
1819 //If it is 1, the address is locally administered
1820 mac[0] |= BIT(1); // locally administered
1824 memcpy(padapter->eeprompriv.mac_addr, mac, ETH_ALEN);
1825 rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr, padapter->eeprompriv.mac_addr);
1827 primary_padapter->pbuddy_adapter = padapter;
1829 padapter->dir_dev = NULL;
1836 error_rtw_drv_if2_init:
1839 rtw_free_drv_sw(padapter);
1842 rtw_free_netdev(pnetdev);
1848 void rtw_drv_if2_free(_adapter *if2)
1850 _adapter *padapter = if2;
1851 struct net_device *pnetdev = NULL;
1853 if (padapter == NULL)
1856 pnetdev = padapter->pnetdev;
1858 #ifdef CONFIG_IOCTL_CFG80211
1859 rtw_wdev_free(padapter->rtw_wdev);
1860 #endif /* CONFIG_IOCTL_CFG80211 */
1863 rtw_free_drv_sw(padapter);
1865 rtw_free_netdev(pnetdev);
1869 void rtw_drv_if2_stop(_adapter *if2)
1871 _adapter *padapter = if2;
1872 struct net_device *pnetdev = NULL;
1874 if (padapter == NULL)
1877 pnetdev = padapter->pnetdev;
1880 unregister_netdev(pnetdev); //will call netdev_close()
1881 rtw_proc_remove_one(pnetdev);
1884 rtw_cancel_all_timer(padapter);
1886 if (padapter->bup == _TRUE) {
1887 padapter->bDriverStopped = _TRUE;
1888 #ifdef CONFIG_XMIT_ACK
1889 if (padapter->xmitpriv.ack_tx)
1890 rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_DRV_STOP);
1893 if(padapter->intf_stop)
1895 padapter->intf_stop(padapter);
1898 rtw_stop_drv_threads(padapter);
1900 padapter->bup = _FALSE;
1903 #ifdef CONFIG_IOCTL_CFG80211
1904 rtw_wdev_unregister(padapter->rtw_wdev);
1908 #endif //end of CONFIG_CONCURRENT_MODE
1910 #ifdef CONFIG_BR_EXT
1911 void netdev_br_init(struct net_device *netdev)
1913 _adapter *adapter = (_adapter *)rtw_netdev_priv(netdev);
1915 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
1917 #endif // (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
1919 //if(check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE)
1921 //struct net_bridge *br = netdev->br_port->br;//->dev->dev_addr;
1922 #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
1923 if (netdev->br_port)
1924 #else // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
1925 if (rcu_dereference(adapter->pnetdev->rx_handler_data))
1926 #endif // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
1928 struct net_device *br_netdev;
1929 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
1930 br_netdev = dev_get_by_name(CONFIG_BR_EXT_BRNAME);
1931 #else // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
1932 struct net *devnet = NULL;
1934 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
1935 devnet = netdev->nd_net;
1936 #else // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
1937 devnet = dev_net(netdev);
1938 #endif // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
1940 br_netdev = dev_get_by_name(devnet, CONFIG_BR_EXT_BRNAME);
1941 #endif // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
1944 memcpy(adapter->br_mac, br_netdev->dev_addr, ETH_ALEN);
1947 DBG_8723A("%s()-%d: dev_get_by_name(%s) failed!", __FUNCTION__, __LINE__, CONFIG_BR_EXT_BRNAME);
1950 adapter->ethBrExtInfo.addPPPoETag = 1;
1953 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
1955 #endif // (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
1957 #endif //CONFIG_BR_EXT
1959 static int _rtw_drv_register_netdev(_adapter *padapter, char *name)
1962 struct net_device *pnetdev = padapter->pnetdev;
1964 /* alloc netdev name */
1965 rtw_init_netdev_name(pnetdev, name);
1967 memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
1969 /* Tell the network stack we exist */
1970 if (register_netdev(pnetdev) != 0) {
1971 DBG_8723A(FUNC_NDEV_FMT "Failed!\n", FUNC_NDEV_ARG(pnetdev));
1973 goto error_register_netdev;
1976 DBG_8723A("%s, MAC Address (if%d) = " MAC_FMT "\n", __FUNCTION__, (padapter->iface_id+1), MAC_ARG(pnetdev->dev_addr));
1980 error_register_netdev:
1982 if(padapter->iface_id > IFACE_ID0)
1984 rtw_free_drv_sw(padapter);
1986 rtw_free_netdev(pnetdev);
1992 int rtw_drv_register_netdev(_adapter *if1)
1994 int i, status = _SUCCESS;
1995 struct dvobj_priv *dvobj = if1->dvobj;
1997 if(dvobj->iface_nums < IFACE_ID_MAX)
1999 for(i=0; i<dvobj->iface_nums; i++)
2001 _adapter *padapter = dvobj->padapters[i];
2007 if(padapter->iface_id == IFACE_ID0)
2008 name = if1->registrypriv.ifname;
2009 else if(padapter->iface_id == IFACE_ID1)
2010 name = if1->registrypriv.if2name;
2014 if((status = _rtw_drv_register_netdev(padapter, name)) != _SUCCESS) {
2024 int _netdev_open(struct net_device *pnetdev)
2027 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
2028 struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
2030 RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - dev_open\n"));
2031 DBG_8723A("+871x_drv - drv_open, bup=%d\n", padapter->bup);
2033 if(pwrctrlpriv->ps_flag == _TRUE){
2034 padapter->net_closed = _FALSE;
2035 goto netdev_open_normal_process;
2038 if(padapter->bup == _FALSE)
2040 padapter->bDriverStopped = _FALSE;
2041 padapter->bSurpriseRemoved = _FALSE;
2042 padapter->bCardDisableWOHSM = _FALSE;
2044 status = rtw_hal_init(padapter);
2047 RT_TRACE(_module_os_intfs_c_,_drv_err_,("rtl871x_hal_init(): Can't init h/w!\n"));
2048 goto netdev_open_error;
2051 DBG_8723A("MAC Address = "MAC_FMT"\n", MAC_ARG(pnetdev->dev_addr));
2053 #ifdef CONFIG_RF_GAIN_OFFSET
2054 rtw_bb_rf_gain_offset(padapter);
2055 #endif //CONFIG_RF_GAIN_OFFSET
2057 status=rtw_start_drv_threads(padapter);
2060 DBG_8723A("Initialize driver software resource Failed!\n");
2061 goto netdev_open_error;
2064 if (init_hw_mlme_ext(padapter) == _FAIL)
2066 DBG_8723A("can't init mlme_ext_priv\n");
2067 goto netdev_open_error;
2070 #ifdef CONFIG_DRVEXT_MODULE
2071 init_drvext(padapter);
2074 if(padapter->intf_start)
2076 padapter->intf_start(padapter);
2079 rtw_proc_init_one(pnetdev);
2081 #ifdef CONFIG_IOCTL_CFG80211
2082 rtw_cfg80211_init_wiphy(padapter);
2085 rtw_led_control(padapter, LED_CTL_NO_LINK);
2087 padapter->bup = _TRUE;
2089 padapter->net_closed = _FALSE;
2091 _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
2093 padapter->pwrctrlpriv.bips_processing = _FALSE;
2094 rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
2096 //netif_carrier_on(pnetdev);//call this func when rtw_joinbss_event_callback return success
2097 if(!rtw_netif_queue_stopped(pnetdev))
2098 rtw_netif_start_queue(pnetdev);
2100 rtw_netif_wake_queue(pnetdev);
2102 #ifdef CONFIG_BR_EXT
2103 netdev_br_init(pnetdev);
2104 #endif // CONFIG_BR_EXT
2106 netdev_open_normal_process:
2108 #ifdef CONFIG_CONCURRENT_MODE
2110 _adapter *sec_adapter = padapter->pbuddy_adapter;
2111 if(sec_adapter && (sec_adapter->bup == _FALSE || sec_adapter->hw_init_completed == _FALSE))
2112 _netdev_if2_open(sec_adapter->pnetdev);
2116 RT_TRACE(_module_os_intfs_c_,_drv_info_,("-871x_drv - dev_open\n"));
2117 DBG_8723A("-871x_drv - drv_open, bup=%d\n", padapter->bup);
2123 padapter->bup = _FALSE;
2125 netif_carrier_off(pnetdev);
2126 rtw_netif_stop_queue(pnetdev);
2128 RT_TRACE(_module_os_intfs_c_,_drv_err_,("-871x_drv - dev_open, fail!\n"));
2129 DBG_8723A("-871x_drv - drv_open fail, bup=%d\n", padapter->bup);
2135 int netdev_open(struct net_device *pnetdev)
2138 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
2140 _enter_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
2141 ret = _netdev_open(pnetdev);
2142 _exit_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
2148 int ips_netdrv_open(_adapter *padapter)
2150 int status = _SUCCESS;
2151 padapter->net_closed = _FALSE;
2152 DBG_8723A("===> %s.........\n",__FUNCTION__);
2155 padapter->bDriverStopped = _FALSE;
2156 padapter->bSurpriseRemoved = _FALSE;
2157 padapter->bCardDisableWOHSM = _FALSE;
2158 //padapter->bup = _TRUE;
2160 status = rtw_hal_init(padapter);
2163 RT_TRACE(_module_os_intfs_c_,_drv_err_,("ips_netdrv_open(): Can't init h/w!\n"));
2164 goto netdev_open_error;
2167 if(padapter->intf_start)
2169 padapter->intf_start(padapter);
2172 rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
2173 _set_timer(&padapter->mlmepriv.dynamic_chk_timer,5000);
2178 //padapter->bup = _FALSE;
2179 DBG_8723A("-ips_netdrv_open - drv_open failure, bup=%d\n", padapter->bup);
2185 int rtw_ips_pwr_up(_adapter *padapter)
2188 u32 start_time = rtw_get_current_time();
2189 DBG_8723A("===> rtw_ips_pwr_up..............\n");
2190 rtw_reset_drv_sw(padapter);
2192 result = ips_netdrv_open(padapter);
2194 rtw_led_control(padapter, LED_CTL_NO_LINK);
2196 DBG_8723A("<=== rtw_ips_pwr_up.............. in %dms\n", rtw_get_passing_time_ms(start_time));
2201 void rtw_ips_pwr_down(_adapter *padapter)
2203 u32 start_time = rtw_get_current_time();
2204 DBG_8723A("===> rtw_ips_pwr_down...................\n");
2206 padapter->bCardDisableWOHSM = _TRUE;
2207 padapter->net_closed = _TRUE;
2209 rtw_led_control(padapter, LED_CTL_POWER_OFF);
2211 rtw_ips_dev_unload(padapter);
2212 padapter->bCardDisableWOHSM = _FALSE;
2213 DBG_8723A("<=== rtw_ips_pwr_down..................... in %dms\n", rtw_get_passing_time_ms(start_time));
2216 void rtw_ips_dev_unload(_adapter *padapter)
2218 struct net_device *pnetdev= (struct net_device*)padapter->pnetdev;
2219 struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
2220 DBG_8723A("====> %s...\n",__FUNCTION__);
2222 rtw_hal_set_hwreg(padapter, HW_VAR_FIFO_CLEARN_UP, 0);
2224 if(padapter->intf_stop)
2226 padapter->intf_stop(padapter);
2230 if(padapter->bSurpriseRemoved == _FALSE)
2232 rtw_hal_deinit(padapter);
2237 #ifdef CONFIG_RF_GAIN_OFFSET
2238 void rtw_bb_rf_gain_offset(_adapter *padapter)
2240 u8 value = padapter->eeprompriv.EEPROMRFGainOffset;
2244 DBG_8723A("+%s value: 0x%02x+\n", __func__, value);
2246 if (!(value & 0x01)) {
2247 DBG_8723A("Offset RF Gain.\n");
2248 res = rtw_hal_read_rfreg(padapter, RF_PATH_A, REG_RF_BB_GAIN_OFFSET, 0xffffffff);
2251 rtw_hal_write_rfreg(padapter, RF_PATH_A, REG_RF_BB_GAIN_OFFSET, RF_GAIN_OFFSET_MASK, res);
2253 DBG_8723A("Using the default RF gain.\n");
2256 #endif //CONFIG_RF_GAIN_OFFSET
2258 int pm_netdev_open(struct net_device *pnetdev,u8 bnormal)
2263 if (_TRUE == bnormal)
2264 status = netdev_open(pnetdev);
2267 status = (_SUCCESS == ips_netdrv_open((_adapter *)rtw_netdev_priv(pnetdev)))?(0):(-1);
2273 static int netdev_close(struct net_device *pnetdev)
2275 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
2277 RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - drv_close\n"));
2279 if(padapter->pwrctrlpriv.bInternalAutoSuspend == _TRUE)
2281 //rtw_pwr_wakeup(padapter);
2282 if(padapter->pwrctrlpriv.rf_pwrstate == rf_off)
2283 padapter->pwrctrlpriv.ps_flag = _TRUE;
2285 padapter->net_closed = _TRUE;
2287 /* if(!padapter->hw_init_completed)
2289 DBG_8723A("(1)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter->bup, padapter->hw_init_completed);
2291 padapter->bDriverStopped = _TRUE;
2293 rtw_dev_unload(padapter);
2296 if(padapter->pwrctrlpriv.rf_pwrstate == rf_on){
2297 DBG_8723A("(2)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter->bup, padapter->hw_init_completed);
2302 if (!rtw_netif_queue_stopped(pnetdev))
2303 rtw_netif_stop_queue(pnetdev);
2306 #ifndef CONFIG_ANDROID
2308 LeaveAllPowerSaveMode(padapter);
2309 rtw_disassoc_cmd(padapter, 500, _FALSE);
2310 //s2-2. indicate disconnect to os
2311 rtw_indicate_disconnect(padapter);
2313 rtw_free_assoc_resources(padapter, 1);
2315 rtw_free_network_queue(padapter,_TRUE);
2318 rtw_led_control(padapter, LED_CTL_POWER_OFF);
2321 #ifdef CONFIG_BR_EXT
2322 //if (OPMODE & (WIFI_STATION_STATE | WIFI_ADHOC_STATE))
2324 //void nat25_db_cleanup(_adapter *priv);
2325 nat25_db_cleanup(padapter);
2327 #endif // CONFIG_BR_EXT
2330 #ifdef CONFIG_IOCTL_CFG80211
2331 if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled == _TRUE)
2332 wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _FALSE;
2334 rtw_p2p_enable(padapter, P2P_ROLE_DISABLE);
2337 #ifdef CONFIG_IOCTL_CFG80211
2338 rtw_scan_abort(padapter);
2339 wdev_to_priv(padapter->rtw_wdev)->bandroid_scan = _FALSE;
2340 padapter->rtw_wdev->iftype = NL80211_IFTYPE_MONITOR; //set this at the end
2341 #endif //CONFIG_IOCTL_CFG80211
2343 #ifdef CONFIG_WAPI_SUPPORT
2344 rtw_wapi_disable_tx(padapter);
2347 RT_TRACE(_module_os_intfs_c_,_drv_info_,("-871x_drv - drv_close\n"));
2348 DBG_8723A("-871x_drv - drv_close, bup=%d\n", padapter->bup);
2354 void rtw_ndev_destructor(struct net_device *ndev)
2356 DBG_8723A(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
2358 #ifdef CONFIG_IOCTL_CFG80211
2359 if (ndev->ieee80211_ptr)
2360 kfree(ndev->ieee80211_ptr);