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 #if defined (PLATFORM_LINUX) && defined (PLATFORM_WINDOWS)
26 #error "Shall be Linux or Windows, but not both!\n"
30 #include <osdep_service.h>
31 #include <drv_types.h>
32 #include <xmit_osdep.h>
33 #include <recv_osdep.h>
35 #include <rtw_ioctl.h>
36 #include <rtw_version.h>
39 #include <usb_osintf.h>
43 #include <pci_osintf.h>
47 #include <rtw_br_ext.h>
48 #endif //CONFIG_BR_EXT
50 MODULE_LICENSE("GPL");
51 MODULE_DESCRIPTION("Realtek Wireless Lan Driver");
52 MODULE_AUTHOR("Realtek Semiconductor Corp.");
53 MODULE_VERSION(DRIVERVERSION
);
55 /* module param defaults */
56 int rtw_chip_version
= 0x00;
57 int rtw_rfintfs
= HWPI
;
58 int rtw_lbkmode
= 0;//RTL8712_AIR_TRX;
61 int rtw_network_mode
= Ndis802_11IBSS
;//Ndis802_11Infrastructure;//infra, ad-hoc, auto
62 //NDIS_802_11_SSID ssid;
63 int rtw_channel
= 1;//ad-hoc support requirement
64 int rtw_wireless_mode
= WIRELESS_11BG_24N
;
65 int rtw_vrtl_carrier_sense
= AUTO_VCS
;
66 int rtw_vcs_type
= RTS_CTS
;//*
67 int rtw_rts_thresh
= 2347;//*
68 int rtw_frag_thresh
= 2346;//*
69 int rtw_preamble
= PREAMBLE_LONG
;//long, short, auto
70 int rtw_scan_mode
= 1;//active, passive
71 int rtw_adhoc_tx_pwr
= 1;
74 #ifdef CONFIG_POWER_SAVING
75 int rtw_power_mgnt
= 1;
76 #ifdef CONFIG_IPS_LEVEL_2
77 int rtw_ips_mode
= IPS_LEVEL_2
;
79 int rtw_ips_mode
= IPS_NORMAL
;
82 int rtw_power_mgnt
= PS_MODE_ACTIVE
;
83 int rtw_ips_mode
= IPS_NONE
;
85 module_param(rtw_ips_mode
, int, 0644);
86 MODULE_PARM_DESC(rtw_ips_mode
,"The default IPS mode");
88 int rtw_radio_enable
= 1;
89 int rtw_long_retry_lmt
= 7;
90 int rtw_short_retry_lmt
= 7;
91 int rtw_busy_thresh
= 40;
92 //int qos_enable = 0; //*
93 int rtw_ack_policy
= NORMAL_ACK
;
94 #ifdef CONFIG_MP_INCLUDED
99 int rtw_software_encrypt
= 0;
100 int rtw_software_decrypt
= 0;
102 int rtw_acm_method
= 0;// 0:By SW 1:By HW.
104 int rtw_wmm_enable
= 1;// default is set to enable the wmm.
105 int rtw_uapsd_enable
= 0;
106 int rtw_uapsd_max_sp
= NO_LIMIT
;
107 int rtw_uapsd_acbk_en
= 0;
108 int rtw_uapsd_acbe_en
= 0;
109 int rtw_uapsd_acvi_en
= 0;
110 int rtw_uapsd_acvo_en
= 0;
112 #ifdef CONFIG_80211N_HT
113 int rtw_ht_enable
= 1;
114 int rtw_cbw40_enable
= 3; // 0 :diable, bit(0): enable 2.4g, bit(1): enable 5g
115 int rtw_ampdu_enable
= 1;//for enable tx_ampdu
116 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
117 int rtw_ampdu_amsdu
= 0;// 0: disabled, 1:enabled, 2:auto
120 int rtw_lowrate_two_xmit
= 1;//Use 2 path Tx to transmit MCS0~7 and legacy mode
122 //int rf_config = RF_1T2R; // 1T2R
123 int rtw_rf_config
= RF_819X_MAX_TYPE
; //auto
124 int rtw_low_power
= 0;
125 #ifdef CONFIG_WIFI_TEST
126 int rtw_wifi_spec
= 1;//for wifi test
128 int rtw_wifi_spec
= 0;
131 int rtw_special_rf_path
= 0; //0: 2T2R ,1: only turn on path A 1T1R, 2: only turn on path B 1T1R
133 int rtw_channel_plan
= RT_CHANNEL_DOMAIN_MAX
;
135 #ifdef CONFIG_BT_COEXIST
136 int rtw_bt_iso
= 2;// 0:Low, 1:High, 2:From Efuse
137 int rtw_bt_sco
= 3;// 0:Idle, 1:None-SCO, 2:SCO, 3:From Counter, 4.Busy, 5.OtherBusy
138 int rtw_bt_ampdu
=1 ;// 0:Disable BT control A-MPDU, 1:Enable BT control A-MPDU.
140 int rtw_AcceptAddbaReq
= _TRUE
;// 0:Reject AP's Add BA req, 1:Accept AP's Add BA req.
142 int rtw_antdiv_cfg
= 2; // 0:OFF , 1:ON, 2:decide by Efuse config
144 #ifdef CONFIG_USB_AUTOSUSPEND
145 int rtw_enusbss
= 1;//0:disable,1:enable
147 int rtw_enusbss
= 0;//0:disable,1:enable
150 int rtw_hwpdn_mode
=2;//0:disable,1:enable,2: by EFUSE config
152 #ifdef CONFIG_HW_PWRP_DETECTION
153 int rtw_hwpwrp_detect
= 1;
155 int rtw_hwpwrp_detect
= 0; //HW power ping detect 0:disable , 1:enable
158 #ifdef CONFIG_USB_HCI
159 int rtw_hw_wps_pbc
= 1;
161 int rtw_hw_wps_pbc
= 0;
164 #ifdef CONFIG_TX_MCAST2UNI
165 int rtw_mc2u_disable
= 0;
166 #endif // CONFIG_TX_MCAST2UNI
168 int rtw_mac_phy_mode
= 0; //0:by efuse, 1:smsp, 2:dmdp, 3:dmsp.
174 char* ifname
= "wlan%d";
175 module_param(ifname
, charp
, 0644);
176 MODULE_PARM_DESC(ifname
, "The default name to allocate for first interface");
178 char* if2name
= "wlan%d";
179 module_param(if2name
, charp
, 0644);
180 MODULE_PARM_DESC(if2name
, "The default name to allocate for second interface");
182 char* rtw_initmac
= 0; // temp mac address if users want to use instead of the mac address in Efuse
184 #ifdef CONFIG_MULTI_VIR_IFACES
185 int rtw_ext_iface_num
= 1;//primary/secondary iface is excluded
186 module_param(rtw_ext_iface_num
, int, 0644);
187 #endif //CONFIG_MULTI_VIR_IFACES
189 module_param(rtw_initmac
, charp
, 0644);
190 module_param(rtw_channel_plan
, int, 0644);
191 module_param(rtw_chip_version
, int, 0644);
192 module_param(rtw_rfintfs
, int, 0644);
193 module_param(rtw_lbkmode
, int, 0644);
194 module_param(rtw_network_mode
, int, 0644);
195 module_param(rtw_channel
, int, 0644);
196 module_param(rtw_mp_mode
, int, 0644);
197 module_param(rtw_wmm_enable
, int, 0644);
198 module_param(rtw_vrtl_carrier_sense
, int, 0644);
199 module_param(rtw_vcs_type
, int, 0644);
200 module_param(rtw_busy_thresh
, int, 0644);
201 #ifdef CONFIG_80211N_HT
202 module_param(rtw_ht_enable
, int, 0644);
203 module_param(rtw_cbw40_enable
, int, 0644);
204 module_param(rtw_ampdu_enable
, int, 0644);
205 module_param(rtw_rx_stbc
, int, 0644);
206 module_param(rtw_ampdu_amsdu
, int, 0644);
209 module_param(rtw_lowrate_two_xmit
, int, 0644);
211 module_param(rtw_rf_config
, int, 0644);
212 module_param(rtw_power_mgnt
, int, 0644);
213 module_param(rtw_low_power
, int, 0644);
214 module_param(rtw_wifi_spec
, int, 0644);
216 module_param(rtw_special_rf_path
, int, 0644);
218 module_param(rtw_antdiv_cfg
, int, 0644);
221 module_param(rtw_enusbss
, int, 0644);
222 module_param(rtw_hwpdn_mode
, int, 0644);
223 module_param(rtw_hwpwrp_detect
, int, 0644);
225 module_param(rtw_hw_wps_pbc
, int, 0644);
227 #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
228 char *rtw_adaptor_info_caching_file_path
= "/data/misc/wifi/rtw_cache";
229 module_param(rtw_adaptor_info_caching_file_path
, charp
, 0644);
230 MODULE_PARM_DESC(rtw_adaptor_info_caching_file_path
, "The path of adapter info cache file");
231 #endif //CONFIG_ADAPTOR_INFO_CACHING_FILE
233 #ifdef CONFIG_LAYER2_ROAMING
234 uint rtw_max_roaming_times
=2;
235 module_param(rtw_max_roaming_times
, uint
, 0644);
236 MODULE_PARM_DESC(rtw_max_roaming_times
,"The max roaming times to try");
237 #endif //CONFIG_LAYER2_ROAMING
240 bool rtw_force_iol
=_FALSE
;
241 module_param(rtw_force_iol
, bool, 0644);
242 MODULE_PARM_DESC(rtw_force_iol
,"Force to enable IOL");
245 #ifdef CONFIG_FILE_FWIMG
246 char *rtw_fw_file_path
= "";
247 module_param(rtw_fw_file_path
, charp
, 0644);
248 MODULE_PARM_DESC(rtw_fw_file_path
, "The path of fw image");
249 #endif //CONFIG_FILE_FWIMG
251 #ifdef CONFIG_TX_MCAST2UNI
252 module_param(rtw_mc2u_disable
, int, 0644);
253 #endif // CONFIG_TX_MCAST2UNI
255 module_param(rtw_mac_phy_mode
, int, 0644);
258 module_param(rtw_80211d
, int, 0644);
261 uint rtw_notch_filter
= RTW_NOTCH_FILTER
;
262 module_param(rtw_notch_filter
, uint
, 0644);
263 MODULE_PARM_DESC(rtw_notch_filter
, "0:Disable, 1:Enable, 2:Enable only for P2P");
265 static uint
loadparam( _adapter
*padapter
, _nic_hdl pnetdev
);
266 int _netdev_open(struct net_device
*pnetdev
);
267 int netdev_open (struct net_device
*pnetdev
);
268 static int netdev_close (struct net_device
*pnetdev
);
270 //#ifdef RTK_DMP_PLATFORM
271 #ifdef CONFIG_PROC_DEBUG
272 #define RTL8192C_PROC_NAME "rtl819xC"
273 #define RTL8192D_PROC_NAME "rtl819xD"
274 static char rtw_proc_name
[IFNAMSIZ
];
275 static struct proc_dir_entry
*rtw_proc
= NULL
;
276 static int rtw_proc_cnt
= 0;
278 #define RTW_PROC_NAME DRV_NAME
280 void rtw_proc_init_one(struct net_device
*dev
)
282 struct proc_dir_entry
*dir_dev
= NULL
;
283 struct proc_dir_entry
*entry
=NULL
;
284 _adapter
*padapter
= rtw_netdev_priv(dev
);
289 if(padapter
->chip_type
== RTL8188C_8192C
)
291 _rtw_memcpy(rtw_proc_name
, RTL8192C_PROC_NAME
, sizeof(RTL8192C_PROC_NAME
));
293 else if(padapter
->chip_type
== RTL8192D
)
295 _rtw_memcpy(rtw_proc_name
, RTL8192D_PROC_NAME
, sizeof(RTL8192D_PROC_NAME
));
297 else if(padapter
->chip_type
== RTL8723A
)
299 _rtw_memcpy(rtw_proc_name
, RTW_PROC_NAME
, sizeof(RTW_PROC_NAME
));
301 else if(padapter
->chip_type
== RTL8188E
)
303 _rtw_memcpy(rtw_proc_name
, RTW_PROC_NAME
, sizeof(RTW_PROC_NAME
));
307 _rtw_memcpy(rtw_proc_name
, RTW_PROC_NAME
, sizeof(RTW_PROC_NAME
));
310 #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
311 rtw_proc
=create_proc_entry(rtw_proc_name
, S_IFDIR
, proc_net
);
313 rtw_proc
=create_proc_entry(rtw_proc_name
, S_IFDIR
, init_net
.proc_net
);
315 if (rtw_proc
== NULL
) {
316 DBG_871X(KERN_ERR
"Unable to create rtw_proc directory\n");
320 entry
= create_proc_read_entry("ver_info", S_IFREG
| S_IRUGO
, rtw_proc
, proc_get_drv_version
, dev
);
322 DBG_871X("Unable to create_proc_read_entry!\n");
326 entry
= create_proc_read_entry("log_level", S_IFREG
| S_IRUGO
,
327 rtw_proc
, proc_get_log_level
, dev
);
329 DBG_871X("Unable to create_proc_read_entry!\n");
332 entry
->write_proc
= proc_set_log_level
;
335 entry
= create_proc_read_entry("mstat", S_IFREG
| S_IRUGO
,
336 rtw_proc
, proc_get_mstat
, dev
);
338 DBG_871X("Unable to create_proc_read_entry!\n");
341 #endif /* DBG_MEM_ALLOC */
346 if(padapter
->dir_dev
== NULL
)
348 padapter
->dir_dev
= create_proc_entry(dev
->name
,
349 S_IFDIR
| S_IRUGO
| S_IXUGO
,
352 dir_dev
= padapter
->dir_dev
;
356 if(rtw_proc_cnt
== 0)
359 #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
360 remove_proc_entry(rtw_proc_name
, proc_net
);
362 remove_proc_entry(rtw_proc_name
, init_net
.proc_net
);
368 DBG_871X("Unable to create dir_dev directory\n");
379 entry
= create_proc_read_entry("write_reg", S_IFREG
| S_IRUGO
,
380 dir_dev
, proc_get_write_reg
, dev
);
382 DBG_871X("Unable to create_proc_read_entry!\n");
385 entry
->write_proc
= proc_set_write_reg
;
387 entry
= create_proc_read_entry("read_reg", S_IFREG
| S_IRUGO
,
388 dir_dev
, proc_get_read_reg
, dev
);
390 DBG_871X("Unable to create_proc_read_entry!\n");
393 entry
->write_proc
= proc_set_read_reg
;
396 entry
= create_proc_read_entry("fwstate", S_IFREG
| S_IRUGO
,
397 dir_dev
, proc_get_fwstate
, dev
);
399 DBG_871X("Unable to create_proc_read_entry!\n");
404 entry
= create_proc_read_entry("sec_info", S_IFREG
| S_IRUGO
,
405 dir_dev
, proc_get_sec_info
, dev
);
407 DBG_871X("Unable to create_proc_read_entry!\n");
412 entry
= create_proc_read_entry("mlmext_state", S_IFREG
| S_IRUGO
,
413 dir_dev
, proc_get_mlmext_state
, dev
);
415 DBG_871X("Unable to create_proc_read_entry!\n");
420 entry
= create_proc_read_entry("qos_option", S_IFREG
| S_IRUGO
,
421 dir_dev
, proc_get_qos_option
, dev
);
423 DBG_871X("Unable to create_proc_read_entry!\n");
427 entry
= create_proc_read_entry("ht_option", S_IFREG
| S_IRUGO
,
428 dir_dev
, proc_get_ht_option
, dev
);
430 DBG_871X("Unable to create_proc_read_entry!\n");
434 entry
= create_proc_read_entry("rf_info", S_IFREG
| S_IRUGO
,
435 dir_dev
, proc_get_rf_info
, dev
);
437 DBG_871X("Unable to create_proc_read_entry!\n");
441 entry
= create_proc_read_entry("ap_info", S_IFREG
| S_IRUGO
,
442 dir_dev
, proc_get_ap_info
, dev
);
444 DBG_871X("Unable to create_proc_read_entry!\n");
448 entry
= create_proc_read_entry("adapter_state", S_IFREG
| S_IRUGO
,
449 dir_dev
, proc_get_adapter_state
, dev
);
451 DBG_871X("Unable to create_proc_read_entry!\n");
455 entry
= create_proc_read_entry("trx_info", S_IFREG
| S_IRUGO
,
456 dir_dev
, proc_get_trx_info
, dev
);
458 DBG_871X("Unable to create_proc_read_entry!\n");
462 entry
= create_proc_read_entry("mac_reg_dump1", S_IFREG
| S_IRUGO
,
463 dir_dev
, proc_get_mac_reg_dump1
, dev
);
465 DBG_871X("Unable to create_proc_read_entry!\n");
469 entry
= create_proc_read_entry("mac_reg_dump2", S_IFREG
| S_IRUGO
,
470 dir_dev
, proc_get_mac_reg_dump2
, dev
);
472 DBG_871X("Unable to create_proc_read_entry!\n");
476 entry
= create_proc_read_entry("mac_reg_dump3", S_IFREG
| S_IRUGO
,
477 dir_dev
, proc_get_mac_reg_dump3
, dev
);
479 DBG_871X("Unable to create_proc_read_entry!\n");
483 entry
= create_proc_read_entry("bb_reg_dump1", S_IFREG
| S_IRUGO
,
484 dir_dev
, proc_get_bb_reg_dump1
, dev
);
486 DBG_871X("Unable to create_proc_read_entry!\n");
490 entry
= create_proc_read_entry("bb_reg_dump2", S_IFREG
| S_IRUGO
,
491 dir_dev
, proc_get_bb_reg_dump2
, dev
);
493 DBG_871X("Unable to create_proc_read_entry!\n");
497 entry
= create_proc_read_entry("bb_reg_dump3", S_IFREG
| S_IRUGO
,
498 dir_dev
, proc_get_bb_reg_dump3
, dev
);
500 DBG_871X("Unable to create_proc_read_entry!\n");
504 entry
= create_proc_read_entry("rf_reg_dump1", S_IFREG
| S_IRUGO
,
505 dir_dev
, proc_get_rf_reg_dump1
, dev
);
507 DBG_871X("Unable to create_proc_read_entry!\n");
511 entry
= create_proc_read_entry("rf_reg_dump2", S_IFREG
| S_IRUGO
,
512 dir_dev
, proc_get_rf_reg_dump2
, dev
);
514 DBG_871X("Unable to create_proc_read_entry!\n");
518 rtw_hal_get_hwreg(padapter
, HW_VAR_RF_TYPE
, (u8
*)(&rf_type
));
519 if((RF_1T2R
== rf_type
) ||(RF_1T1R
==rf_type
)) {
520 entry
= create_proc_read_entry("rf_reg_dump3", S_IFREG
| S_IRUGO
,
521 dir_dev
, proc_get_rf_reg_dump3
, dev
);
523 DBG_871X("Unable to create_proc_read_entry!\n");
527 entry
= create_proc_read_entry("rf_reg_dump4", S_IFREG
| S_IRUGO
,
528 dir_dev
, proc_get_rf_reg_dump4
, dev
);
530 DBG_871X("Unable to create_proc_read_entry!\n");
535 #ifdef CONFIG_AP_MODE
537 entry
= create_proc_read_entry("all_sta_info", S_IFREG
| S_IRUGO
,
538 dir_dev
, proc_get_all_sta_info
, dev
);
540 DBG_871X("Unable to create_proc_read_entry!\n");
545 #ifdef DBG_MEMORY_LEAK
546 entry
= create_proc_read_entry("_malloc_cnt", S_IFREG
| S_IRUGO
,
547 dir_dev
, proc_get_malloc_cnt
, dev
);
549 DBG_871X("Unable to create_proc_read_entry!\n");
554 #ifdef CONFIG_FIND_BEST_CHANNEL
555 entry
= create_proc_read_entry("best_channel", S_IFREG
| S_IRUGO
,
556 dir_dev
, proc_get_best_channel
, dev
);
558 DBG_871X("Unable to create_proc_read_entry!\n");
561 entry
->write_proc
= proc_set_best_channel
;
564 entry
= create_proc_read_entry("rx_signal", S_IFREG
| S_IRUGO
,
565 dir_dev
, proc_get_rx_signal
, dev
);
567 DBG_871X("Unable to create_proc_read_entry!\n");
570 entry
->write_proc
= proc_set_rx_signal
;
572 entry
= create_proc_read_entry("ht_enable", S_IFREG
| S_IRUGO
,
573 dir_dev
, proc_get_ht_enable
, dev
);
575 DBG_871X("Unable to create_proc_read_entry!\n");
578 entry
->write_proc
= proc_set_ht_enable
;
580 entry
= create_proc_read_entry("cbw40_enable", S_IFREG
| S_IRUGO
,
581 dir_dev
, proc_get_cbw40_enable
, dev
);
583 DBG_871X("Unable to create_proc_read_entry!\n");
586 entry
->write_proc
= proc_set_cbw40_enable
;
588 entry
= create_proc_read_entry("ampdu_enable", S_IFREG
| S_IRUGO
,
589 dir_dev
, proc_get_ampdu_enable
, dev
);
591 DBG_871X("Unable to create_proc_read_entry!\n");
594 entry
->write_proc
= proc_set_ampdu_enable
;
596 entry
= create_proc_read_entry("rx_stbc", S_IFREG
| S_IRUGO
,
597 dir_dev
, proc_get_rx_stbc
, dev
);
599 DBG_871X("Unable to create_proc_read_entry!\n");
602 entry
->write_proc
= proc_set_rx_stbc
;
605 entry
= create_proc_read_entry("path_rssi", S_IFREG
| S_IRUGO
,
606 dir_dev
, proc_get_two_path_rssi
, dev
);
608 entry
= create_proc_read_entry("vid", S_IFREG
| S_IRUGO
,
609 dir_dev
, proc_get_vid
, dev
);
611 DBG_871X("Unable to create_proc_read_entry!\n");
615 entry
= create_proc_read_entry("pid", S_IFREG
| S_IRUGO
,
616 dir_dev
, proc_get_pid
, dev
);
618 DBG_871X("Unable to create_proc_read_entry!\n");
622 entry
= create_proc_read_entry("rssi_disp", S_IFREG
| S_IRUGO
,
623 dir_dev
, proc_get_rssi_disp
, dev
);
625 DBG_871X("Unable to create_proc_read_entry!\n");
628 entry
->write_proc
= proc_set_rssi_disp
;
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_871X("Unable to create_proc_read_entry!\n");
637 entry
->write_proc
= proc_set_sreset
;
638 #endif /* DBG_CONFIG_ERROR_DETECT */
640 #ifdef CONFIG_DM_ADAPTIVITY
641 entry
= create_proc_read_entry("dm_adaptivity", S_IFREG
| S_IRUGO
,
642 dir_dev
, proc_get_dm_adaptivity
, dev
);
644 DBG_871X("Unable to create_proc_read_entry!\n");
647 entry
->write_proc
= proc_set_dm_adaptivity
;
648 #endif /* CONFIG_DM_ADAPTIVITY */
652 void rtw_proc_remove_one(struct net_device
*dev
)
654 struct proc_dir_entry
*dir_dev
= NULL
;
655 _adapter
*padapter
= rtw_netdev_priv(dev
);
658 dir_dev
= padapter
->dir_dev
;
659 padapter
->dir_dev
= NULL
;
663 remove_proc_entry("write_reg", dir_dev
);
664 remove_proc_entry("read_reg", dir_dev
);
665 remove_proc_entry("fwstate", dir_dev
);
666 remove_proc_entry("sec_info", dir_dev
);
667 remove_proc_entry("mlmext_state", dir_dev
);
668 remove_proc_entry("qos_option", dir_dev
);
669 remove_proc_entry("ht_option", dir_dev
);
670 remove_proc_entry("rf_info", dir_dev
);
671 remove_proc_entry("ap_info", dir_dev
);
672 remove_proc_entry("adapter_state", dir_dev
);
673 remove_proc_entry("trx_info", dir_dev
);
675 remove_proc_entry("mac_reg_dump1", dir_dev
);
676 remove_proc_entry("mac_reg_dump2", dir_dev
);
677 remove_proc_entry("mac_reg_dump3", dir_dev
);
678 remove_proc_entry("bb_reg_dump1", dir_dev
);
679 remove_proc_entry("bb_reg_dump2", dir_dev
);
680 remove_proc_entry("bb_reg_dump3", dir_dev
);
681 remove_proc_entry("rf_reg_dump1", dir_dev
);
682 remove_proc_entry("rf_reg_dump2", dir_dev
);
683 rtw_hal_get_hwreg(padapter
, HW_VAR_RF_TYPE
, (u8
*)(&rf_type
));
684 if((RF_1T2R
== rf_type
) ||(RF_1T1R
==rf_type
)) {
685 remove_proc_entry("rf_reg_dump3", dir_dev
);
686 remove_proc_entry("rf_reg_dump4", dir_dev
);
688 #ifdef CONFIG_AP_MODE
689 remove_proc_entry("all_sta_info", dir_dev
);
692 #ifdef DBG_MEMORY_LEAK
693 remove_proc_entry("_malloc_cnt", dir_dev
);
696 #ifdef CONFIG_FIND_BEST_CHANNEL
697 remove_proc_entry("best_channel", dir_dev
);
699 remove_proc_entry("rx_signal", dir_dev
);
701 remove_proc_entry("cbw40_enable", dir_dev
);
703 remove_proc_entry("ht_enable", dir_dev
);
705 remove_proc_entry("ampdu_enable", dir_dev
);
707 remove_proc_entry("rx_stbc", dir_dev
);
709 remove_proc_entry("path_rssi", dir_dev
);
711 remove_proc_entry("vid", dir_dev
);
713 remove_proc_entry("pid", dir_dev
);
715 remove_proc_entry("rssi_disp", dir_dev
);
717 #if defined(DBG_CONFIG_ERROR_DETECT)
718 remove_proc_entry("sreset", dir_dev
);
719 #endif /* DBG_CONFIG_ERROR_DETECT */
721 #ifdef CONFIG_DM_ADAPTIVITY
722 remove_proc_entry("dm_adaptivity", dir_dev
);
725 remove_proc_entry(dev
->name
, rtw_proc
);
736 if(rtw_proc_cnt
== 0)
739 remove_proc_entry("ver_info", rtw_proc
);
741 remove_proc_entry("log_level", rtw_proc
);
743 remove_proc_entry("mstat", rtw_proc
);
744 #endif /* DBG_MEM_ALLOC */
745 #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
746 remove_proc_entry(rtw_proc_name
, proc_net
);
748 remove_proc_entry(rtw_proc_name
, init_net
.proc_net
);
756 uint
loadparam( _adapter
*padapter
, _nic_hdl pnetdev
);
757 uint
loadparam( _adapter
*padapter
, _nic_hdl pnetdev
)
760 uint status
= _SUCCESS
;
761 struct registry_priv
*registry_par
= &padapter
->registrypriv
;
765 registry_par
->chip_version
= (u8
)rtw_chip_version
;
766 registry_par
->rfintfs
= (u8
)rtw_rfintfs
;
767 registry_par
->lbkmode
= (u8
)rtw_lbkmode
;
768 //registry_par->hci = (u8)hci;
769 registry_par
->network_mode
= (u8
)rtw_network_mode
;
771 _rtw_memcpy(registry_par
->ssid
.Ssid
, "ANY", 3);
772 registry_par
->ssid
.SsidLength
= 3;
774 registry_par
->channel
= (u8
)rtw_channel
;
775 registry_par
->wireless_mode
= (u8
)rtw_wireless_mode
;
776 registry_par
->vrtl_carrier_sense
= (u8
)rtw_vrtl_carrier_sense
;
777 registry_par
->vcs_type
= (u8
)rtw_vcs_type
;
778 registry_par
->rts_thresh
=(u16
)rtw_rts_thresh
;
779 registry_par
->frag_thresh
=(u16
)rtw_frag_thresh
;
780 registry_par
->preamble
= (u8
)rtw_preamble
;
781 registry_par
->scan_mode
= (u8
)rtw_scan_mode
;
782 registry_par
->adhoc_tx_pwr
= (u8
)rtw_adhoc_tx_pwr
;
783 registry_par
->soft_ap
= (u8
)rtw_soft_ap
;
784 //registry_par->smart_ps = (u8)rtw_smart_ps;
785 registry_par
->power_mgnt
= (u8
)rtw_power_mgnt
;
786 registry_par
->ips_mode
= (u8
)rtw_ips_mode
;
787 registry_par
->radio_enable
= (u8
)rtw_radio_enable
;
788 registry_par
->long_retry_lmt
= (u8
)rtw_long_retry_lmt
;
789 registry_par
->short_retry_lmt
= (u8
)rtw_short_retry_lmt
;
790 registry_par
->busy_thresh
= (u16
)rtw_busy_thresh
;
791 //registry_par->qos_enable = (u8)rtw_qos_enable;
792 registry_par
->ack_policy
= (u8
)rtw_ack_policy
;
793 registry_par
->mp_mode
= (u8
)rtw_mp_mode
;
794 registry_par
->software_encrypt
= (u8
)rtw_software_encrypt
;
795 registry_par
->software_decrypt
= (u8
)rtw_software_decrypt
;
797 registry_par
->acm_method
= (u8
)rtw_acm_method
;
800 registry_par
->wmm_enable
= (u8
)rtw_wmm_enable
;
801 registry_par
->uapsd_enable
= (u8
)rtw_uapsd_enable
;
802 registry_par
->uapsd_max_sp
= (u8
)rtw_uapsd_max_sp
;
803 registry_par
->uapsd_acbk_en
= (u8
)rtw_uapsd_acbk_en
;
804 registry_par
->uapsd_acbe_en
= (u8
)rtw_uapsd_acbe_en
;
805 registry_par
->uapsd_acvi_en
= (u8
)rtw_uapsd_acvi_en
;
806 registry_par
->uapsd_acvo_en
= (u8
)rtw_uapsd_acvo_en
;
808 #ifdef CONFIG_80211N_HT
809 registry_par
->ht_enable
= (u8
)rtw_ht_enable
;
810 registry_par
->cbw40_enable
= (u8
)rtw_cbw40_enable
;
811 registry_par
->ampdu_enable
= (u8
)rtw_ampdu_enable
;
812 registry_par
->rx_stbc
= (u8
)rtw_rx_stbc
;
813 registry_par
->ampdu_amsdu
= (u8
)rtw_ampdu_amsdu
;
816 registry_par
->lowrate_two_xmit
= (u8
)rtw_lowrate_two_xmit
;
817 registry_par
->rf_config
= (u8
)rtw_rf_config
;
818 registry_par
->low_power
= (u8
)rtw_low_power
;
821 registry_par
->wifi_spec
= (u8
)rtw_wifi_spec
;
822 registry_par
->special_rf_path
= (u8
)rtw_special_rf_path
;
823 registry_par
->channel_plan
= (u8
)rtw_channel_plan
;
825 #ifdef CONFIG_BT_COEXIST
826 registry_par
->bt_iso
= (u8
)rtw_bt_iso
;
827 registry_par
->bt_sco
= (u8
)rtw_bt_sco
;
828 registry_par
->bt_ampdu
= (u8
)rtw_bt_ampdu
;
830 registry_par
->bAcceptAddbaReq
= (u8
)rtw_AcceptAddbaReq
;
832 registry_par
->antdiv_cfg
= (u8
)rtw_antdiv_cfg
;
834 #ifdef CONFIG_AUTOSUSPEND
835 registry_par
->usbss_enable
= (u8
)rtw_enusbss
;//0:disable,1:enable
837 #ifdef SUPPORT_HW_RFOFF_DETECTED
838 registry_par
->hwpdn_mode
= (u8
)rtw_hwpdn_mode
;//0:disable,1:enable,2:by EFUSE config
839 registry_par
->hwpwrp_detect
= (u8
)rtw_hwpwrp_detect
;//0:disable,1:enable
842 registry_par
->hw_wps_pbc
= (u8
)rtw_hw_wps_pbc
;
844 #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
845 snprintf(registry_par
->adaptor_info_caching_file_path
, PATH_LENGTH_MAX
, "%s", rtw_adaptor_info_caching_file_path
);
846 registry_par
->adaptor_info_caching_file_path
[PATH_LENGTH_MAX
-1]=0;
849 #ifdef CONFIG_LAYER2_ROAMING
850 registry_par
->max_roaming_times
= (u8
)rtw_max_roaming_times
;
851 #ifdef CONFIG_INTEL_WIDI
852 registry_par
->max_roaming_times
= (u8
)rtw_max_roaming_times
+ 2;
853 #endif // CONFIG_INTEL_WIDI
857 registry_par
->force_iol
= rtw_force_iol
;
860 registry_par
->mac_phy_mode
= rtw_mac_phy_mode
;
863 registry_par
->enable80211d
= (u8
)rtw_80211d
;
866 snprintf(registry_par
->ifname
, 16, "%s", ifname
);
867 snprintf(registry_par
->if2name
, 16, "%s", if2name
);
869 registry_par
->notch_filter
= (u8
)rtw_notch_filter
;
871 #ifdef CONFIG_MULTI_VIR_IFACES
872 registry_par
->ext_iface_num
= (u8
)rtw_ext_iface_num
;
873 #endif //CONFIG_MULTI_VIR_IFACES
880 static int rtw_net_set_mac_address(struct net_device
*pnetdev
, void *p
)
882 _adapter
*padapter
= (_adapter
*)rtw_netdev_priv(pnetdev
);
883 struct sockaddr
*addr
= p
;
885 if(padapter
->bup
== _FALSE
)
887 //DBG_871X("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],
888 //addr->sa_data[4], addr->sa_data[5]);
889 _rtw_memcpy(padapter
->eeprompriv
.mac_addr
, addr
->sa_data
, ETH_ALEN
);
890 //_rtw_memcpy(pnetdev->dev_addr, addr->sa_data, ETH_ALEN);
891 //padapter->bset_hwaddr = _TRUE;
897 static struct net_device_stats
*rtw_net_get_stats(struct net_device
*pnetdev
)
899 _adapter
*padapter
= (_adapter
*)rtw_netdev_priv(pnetdev
);
900 struct xmit_priv
*pxmitpriv
= &(padapter
->xmitpriv
);
901 struct recv_priv
*precvpriv
= &(padapter
->recvpriv
);
903 padapter
->stats
.tx_packets
= pxmitpriv
->tx_pkts
;//pxmitpriv->tx_pkts++;
904 padapter
->stats
.rx_packets
= precvpriv
->rx_pkts
;//precvpriv->rx_pkts++;
905 padapter
->stats
.tx_dropped
= pxmitpriv
->tx_drop
;
906 padapter
->stats
.rx_dropped
= precvpriv
->rx_drop
;
907 padapter
->stats
.tx_bytes
= pxmitpriv
->tx_bytes
;
908 padapter
->stats
.rx_bytes
= precvpriv
->rx_bytes
;
910 return &padapter
->stats
;
913 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
915 * AC to queue mapping
922 static const u16 rtw_1d_to_queue
[8] = { 2, 3, 3, 2, 1, 1, 0, 0 };
924 /* Given a data frame determine the 802.1p/1d tag to use. */
925 unsigned int rtw_classify8021d(struct sk_buff
*skb
)
929 /* skb->priority values from 256->263 are magic values to
930 * directly indicate a specific 802.1d priority. This is used
931 * to allow 802.1d priority to be passed directly in from VLAN
934 if (skb
->priority
>= 256 && skb
->priority
<= 263)
935 return skb
->priority
- 256;
937 switch (skb
->protocol
) {
938 case htons(ETH_P_IP
):
939 dscp
= ip_hdr(skb
)->tos
& 0xfc;
948 static u16
rtw_select_queue(struct net_device
*dev
, struct sk_buff
*skb
949 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
952 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(3,14,0))
953 , select_queue_fallback_t fallback
957 _adapter
*padapter
= rtw_netdev_priv(dev
);
958 struct mlme_priv
*pmlmepriv
= &padapter
->mlmepriv
;
960 skb
->priority
= rtw_classify8021d(skb
);
962 if(pmlmepriv
->acm_mask
!= 0)
964 skb
->priority
= qos_acm(pmlmepriv
->acm_mask
, skb
->priority
);
967 return rtw_1d_to_queue
[skb
->priority
];
970 u16
rtw_recv_select_queue(struct sk_buff
*skb
)
972 struct iphdr
*piphdr
;
976 u8
*pdata
= skb
->data
;
978 _rtw_memcpy(ð_type
, pdata
+(ETH_ALEN
<<1), 2);
981 case htons(ETH_P_IP
):
983 piphdr
= (struct iphdr
*)(pdata
+ETH_HLEN
);
985 dscp
= piphdr
->tos
& 0xfc;
987 priority
= dscp
>> 5;
994 return rtw_1d_to_queue
[priority
];
1000 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
1001 static const struct net_device_ops rtw_netdev_ops
= {
1002 .ndo_open
= netdev_open
,
1003 .ndo_stop
= netdev_close
,
1004 .ndo_start_xmit
= rtw_xmit_entry
,
1005 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
1006 .ndo_select_queue
= rtw_select_queue
,
1008 .ndo_set_mac_address
= rtw_net_set_mac_address
,
1009 .ndo_get_stats
= rtw_net_get_stats
,
1010 .ndo_do_ioctl
= rtw_ioctl
,
1014 int rtw_init_netdev_name(struct net_device
*pnetdev
, const char *ifname
)
1016 _adapter
*padapter
= rtw_netdev_priv(pnetdev
);
1018 #ifdef CONFIG_EASY_REPLACEMENT
1019 struct net_device
*TargetNetdev
= NULL
;
1020 _adapter
*TargetAdapter
= NULL
;
1021 struct net
*devnet
= NULL
;
1023 if(padapter
->bDongle
== 1)
1025 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
1026 TargetNetdev
= dev_get_by_name("wlan0");
1028 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
1029 devnet
= pnetdev
->nd_net
;
1031 devnet
= dev_net(pnetdev
);
1033 TargetNetdev
= dev_get_by_name(devnet
, "wlan0");
1036 DBG_871X("Force onboard module driver disappear !!!\n");
1037 TargetAdapter
= rtw_netdev_priv(TargetNetdev
);
1038 TargetAdapter
->DriverState
= DRIVER_DISAPPEAR
;
1040 padapter
->pid
[0] = TargetAdapter
->pid
[0];
1041 padapter
->pid
[1] = TargetAdapter
->pid
[1];
1042 padapter
->pid
[2] = TargetAdapter
->pid
[2];
1044 dev_put(TargetNetdev
);
1045 unregister_netdev(TargetNetdev
);
1047 if(TargetAdapter
->chip_type
== padapter
->chip_type
)
1048 rtw_proc_remove_one(TargetNetdev
);
1050 padapter
->DriverState
= DRIVER_REPLACE_DONGLE
;
1053 #endif //CONFIG_EASY_REPLACEMENT
1055 if(dev_alloc_name(pnetdev
, ifname
) < 0)
1057 RT_TRACE(_module_os_intfs_c_
,_drv_err_
,("dev_alloc_name, fail! \n"));
1060 netif_carrier_off(pnetdev
);
1061 //rtw_netif_stop_queue(pnetdev);
1066 static const struct device_type wlan_type
= {
1070 struct net_device
*rtw_init_netdev(_adapter
*old_padapter
)
1073 struct net_device
*pnetdev
;
1075 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("+init_net_dev\n"));
1077 if(old_padapter
!= NULL
)
1078 pnetdev
= rtw_alloc_etherdev_with_old_priv(sizeof(_adapter
), (void *)old_padapter
);
1080 pnetdev
= rtw_alloc_etherdev(sizeof(_adapter
));
1085 pnetdev
->dev
.type
= &wlan_type
;
1086 padapter
= rtw_netdev_priv(pnetdev
);
1087 padapter
->pnetdev
= pnetdev
;
1089 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
1090 SET_MODULE_OWNER(pnetdev
);
1093 //pnetdev->init = NULL;
1095 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
1096 DBG_871X("register rtw_netdev_ops to netdev_ops\n");
1097 pnetdev
->netdev_ops
= &rtw_netdev_ops
;
1099 pnetdev
->open
= netdev_open
;
1100 pnetdev
->stop
= netdev_close
;
1101 pnetdev
->hard_start_xmit
= rtw_xmit_entry
;
1102 pnetdev
->set_mac_address
= rtw_net_set_mac_address
;
1103 pnetdev
->get_stats
= rtw_net_get_stats
;
1104 pnetdev
->do_ioctl
= rtw_ioctl
;
1108 #ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
1109 pnetdev
->features
|= NETIF_F_IP_CSUM
;
1111 //pnetdev->tx_timeout = NULL;
1112 pnetdev
->watchdog_timeo
= HZ
*3; /* 3 second timeout */
1113 #ifdef CONFIG_WIRELESS_EXT
1114 pnetdev
->wireless_handlers
= (struct iw_handler_def
*)&rtw_handlers_def
;
1118 //priv->wireless_data.spy_data = &priv->spy_data;
1119 //pnetdev->wireless_data = &priv->wireless_data;
1123 loadparam(padapter
, pnetdev
);
1129 void rtw_unregister_netdevs(struct dvobj_priv
*dvobj
)
1132 _adapter
*padapter
= NULL
;
1134 for (i
=0;i
<dvobj
->iface_nums
;i
++) {
1135 struct net_device
*pnetdev
= NULL
;
1137 padapter
= dvobj
->padapters
[i
];
1139 if (padapter
== NULL
)
1142 pnetdev
= padapter
->pnetdev
;
1144 if((padapter
->DriverState
!= DRIVER_DISAPPEAR
) && pnetdev
) {
1145 unregister_netdev(pnetdev
); //will call netdev_close()
1146 rtw_proc_remove_one(pnetdev
);
1149 #ifdef CONFIG_IOCTL_CFG80211
1150 rtw_wdev_unregister(padapter
->rtw_wdev
);
1156 u32
rtw_start_drv_threads(_adapter
*padapter
)
1159 u32 _status
= _SUCCESS
;
1161 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("+rtw_start_drv_threads\n"));
1162 #ifdef CONFIG_XMIT_THREAD_MODE
1163 padapter
->xmitThread
= kthread_run(rtw_xmit_thread
, padapter
, "RTW_XMIT_THREAD");
1164 if(IS_ERR(padapter
->xmitThread
))
1168 #ifdef CONFIG_RECV_THREAD_MODE
1169 padapter
->recvThread
= kthread_run(rtw_recv_thread
, padapter
, "RTW_RECV_THREAD");
1170 if(IS_ERR(padapter
->recvThread
))
1174 #ifdef CONFIG_CONCURRENT_MODE
1175 if(padapter
->isprimary
== _TRUE
)
1176 #endif //CONFIG_CONCURRENT_MODE
1178 padapter
->cmdThread
= kthread_run(rtw_cmd_thread
, padapter
, "RTW_CMD_THREAD");
1179 if(IS_ERR(padapter
->cmdThread
))
1182 _rtw_down_sema(&padapter
->cmdpriv
.terminate_cmdthread_sema
); //wait for cmd_thread to run
1186 #ifdef CONFIG_EVENT_THREAD_MODE
1187 padapter
->evtThread
= kthread_run(event_thread
, padapter
, "RTW_EVENT_THREAD");
1188 if(IS_ERR(padapter
->evtThread
))
1196 void rtw_stop_drv_threads (_adapter
*padapter
)
1198 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("+rtw_stop_drv_threads\n"));
1200 #ifdef CONFIG_CONCURRENT_MODE
1201 if(padapter
->isprimary
== _TRUE
)
1202 #endif //CONFIG_CONCURRENT_MODE
1204 rtw_stop_cmd_thread(padapter
);
1207 #ifdef CONFIG_EVENT_THREAD_MODE
1208 _rtw_up_sema(&padapter
->evtpriv
.evt_notify
);
1209 if(padapter
->evtThread
){
1210 _rtw_down_sema(&padapter
->evtpriv
.terminate_evtthread_sema
);
1214 #ifdef CONFIG_XMIT_THREAD_MODE
1215 // Below is to termindate tx_thread...
1216 _rtw_up_sema(&padapter
->xmitpriv
.xmit_sema
);
1217 _rtw_down_sema(&padapter
->xmitpriv
.terminate_xmitthread_sema
);
1218 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("\n drv_halt: rtw_xmit_thread can be terminated ! \n"));
1221 #ifdef CONFIG_RECV_THREAD_MODE
1222 // Below is to termindate rx_thread...
1223 _rtw_up_sema(&padapter
->recvpriv
.recv_sema
);
1224 _rtw_down_sema(&padapter
->recvpriv
.terminate_recvthread_sema
);
1225 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("\n drv_halt:recv_thread can be terminated! \n"));
1231 u8
rtw_init_default_value(_adapter
*padapter
);
1232 u8
rtw_init_default_value(_adapter
*padapter
)
1235 struct registry_priv
* pregistrypriv
= &padapter
->registrypriv
;
1236 struct xmit_priv
*pxmitpriv
= &padapter
->xmitpriv
;
1237 struct mlme_priv
*pmlmepriv
= &padapter
->mlmepriv
;
1238 struct security_priv
*psecuritypriv
= &padapter
->securitypriv
;
1241 pxmitpriv
->vcs_setting
= pregistrypriv
->vrtl_carrier_sense
;
1242 pxmitpriv
->vcs
= pregistrypriv
->vcs_type
;
1243 pxmitpriv
->vcs_type
= pregistrypriv
->vcs_type
;
1244 //pxmitpriv->rts_thresh = pregistrypriv->rts_thresh;
1245 pxmitpriv
->frag_len
= pregistrypriv
->frag_thresh
;
1253 pmlmepriv
->scan_interval
= SCAN_INTERVAL
;// 30*2 sec = 60sec
1254 pmlmepriv
->scan_mode
= SCAN_ACTIVE
;
1257 //pmlmepriv->qospriv.qos_option = pregistrypriv->wmm_enable;
1260 #ifdef CONFIG_80211N_HT
1261 pmlmepriv
->htpriv
.ampdu_enable
= _FALSE
;//set to disabled
1265 //rtw_get_encrypt_decrypt_from_registrypriv(padapter);
1266 psecuritypriv
->binstallGrpkey
= _FAIL
;
1267 psecuritypriv
->sw_encrypt
=pregistrypriv
->software_encrypt
;
1268 psecuritypriv
->sw_decrypt
=pregistrypriv
->software_decrypt
;
1270 psecuritypriv
->dot11AuthAlgrthm
= dot11AuthAlgrthm_Open
; //open system
1271 psecuritypriv
->dot11PrivacyAlgrthm
= _NO_PRIVACY_
;
1273 psecuritypriv
->dot11PrivacyKeyIndex
= 0;
1275 psecuritypriv
->dot118021XGrpPrivacy
= _NO_PRIVACY_
;
1276 psecuritypriv
->dot118021XGrpKeyid
= 1;
1278 psecuritypriv
->ndisauthtype
= Ndis802_11AuthModeOpen
;
1279 psecuritypriv
->ndisencryptstatus
= Ndis802_11WEPDisabled
;
1286 rtw_init_registrypriv_dev_network(padapter
);
1287 rtw_update_registrypriv_dev_network(padapter
);
1291 rtw_hal_def_value_init(padapter
);
1294 padapter
->bReadPortCancel
= _FALSE
;
1295 padapter
->bWritePortCancel
= _FALSE
;
1296 padapter
->bRxRSSIDisplay
= 0;
1297 padapter
->bForceWriteInitGain
= 1;
1298 padapter
->bNotifyChannelChange
= 0;
1300 padapter
->bShowGetP2PState
= 1;
1305 struct dvobj_priv
*devobj_init(void)
1307 struct dvobj_priv
*pdvobj
= NULL
;
1309 if ((pdvobj
= (struct dvobj_priv
*)rtw_zmalloc(sizeof(*pdvobj
))) == NULL
)
1312 _rtw_mutex_init(&pdvobj
->hw_init_mutex
);
1313 _rtw_mutex_init(&pdvobj
->h2c_fwcmd_mutex
);
1314 _rtw_mutex_init(&pdvobj
->setch_mutex
);
1315 _rtw_mutex_init(&pdvobj
->setbw_mutex
);
1317 pdvobj
->processing_dev_remove
= _FALSE
;
1322 void devobj_deinit(struct dvobj_priv
*pdvobj
)
1327 _rtw_mutex_free(&pdvobj
->hw_init_mutex
);
1328 _rtw_mutex_free(&pdvobj
->h2c_fwcmd_mutex
);
1329 _rtw_mutex_free(&pdvobj
->setch_mutex
);
1330 _rtw_mutex_free(&pdvobj
->setbw_mutex
);
1332 rtw_mfree((u8
*)pdvobj
, sizeof(*pdvobj
));
1335 u8
rtw_reset_drv_sw(_adapter
*padapter
)
1338 struct mlme_priv
*pmlmepriv
= &padapter
->mlmepriv
;
1339 struct pwrctrl_priv
*pwrctrlpriv
= &padapter
->pwrctrlpriv
;
1342 rtw_hal_def_value_init(padapter
);
1343 padapter
->bReadPortCancel
= _FALSE
;
1344 padapter
->bWritePortCancel
= _FALSE
;
1345 padapter
->bRxRSSIDisplay
= 0;
1346 pmlmepriv
->scan_interval
= SCAN_INTERVAL
;// 30*2 sec = 60sec
1348 pwrctrlpriv
->bips_processing
= _FALSE
;
1349 pwrctrlpriv
->rf_pwrstate
= rf_on
;
1351 padapter
->xmitpriv
.tx_pkts
= 0;
1352 padapter
->recvpriv
.rx_pkts
= 0;
1354 pmlmepriv
->LinkDetectInfo
.bBusyTraffic
= _FALSE
;
1356 _clr_fwstate_(pmlmepriv
, _FW_UNDER_SURVEY
|_FW_UNDER_LINKING
);
1358 #ifdef CONFIG_AUTOSUSPEND
1359 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,22) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,34))
1360 adapter_to_dvobj(padapter
)->pusbdev
->autosuspend_disabled
= 1;//autosuspend disabled by the user
1364 #ifdef DBG_CONFIG_ERROR_DETECT
1365 rtw_hal_sreset_reset_value(padapter
);
1367 pwrctrlpriv
->pwr_state_check_cnts
= 0;
1370 padapter
->mlmeextpriv
.sitesurvey_res
.state
= SCAN_DISABLE
;
1372 #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
1373 rtw_set_signal_stat_timer(&padapter
->recvpriv
);
1380 u8
rtw_init_drv_sw(_adapter
*padapter
)
1387 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("+rtw_init_drv_sw\n"));
1389 if ((rtw_init_cmd_priv(&padapter
->cmdpriv
)) == _FAIL
)
1391 RT_TRACE(_module_os_intfs_c_
,_drv_err_
,("\n Can't init cmd_priv\n"));
1396 padapter
->cmdpriv
.padapter
=padapter
;
1398 if ((rtw_init_evt_priv(&padapter
->evtpriv
)) == _FAIL
)
1400 RT_TRACE(_module_os_intfs_c_
,_drv_err_
,("\n Can't init evt_priv\n"));
1406 if (rtw_init_mlme_priv(padapter
) == _FAIL
)
1408 RT_TRACE(_module_os_intfs_c_
,_drv_err_
,("\n Can't init mlme_priv\n"));
1414 rtw_init_wifidirect_timers(padapter
);
1415 init_wifidirect_info(padapter
, P2P_ROLE_DISABLE
);
1416 reset_global_wifidirect_info(padapter
);
1417 #ifdef CONFIG_IOCTL_CFG80211
1418 rtw_init_cfg80211_wifidirect_info(padapter
);
1421 if(rtw_init_wifi_display_info(padapter
) == _FAIL
)
1422 RT_TRACE(_module_os_intfs_c_
,_drv_err_
,("\n Can't init init_wifi_display_info\n"));
1424 #endif /* CONFIG_P2P */
1426 if(init_mlme_ext_priv(padapter
) == _FAIL
)
1428 RT_TRACE(_module_os_intfs_c_
,_drv_err_
,("\n Can't init mlme_ext_priv\n"));
1434 if(rtw_init_tdls_info(padapter
) == _FAIL
)
1436 DBG_871X("Can't rtw_init_tdls_info\n");
1440 #endif //CONFIG_TDLS
1442 if(_rtw_init_xmit_priv(&padapter
->xmitpriv
, padapter
) == _FAIL
)
1444 DBG_871X("Can't _rtw_init_xmit_priv\n");
1449 if(_rtw_init_recv_priv(&padapter
->recvpriv
, padapter
) == _FAIL
)
1451 DBG_871X("Can't _rtw_init_recv_priv\n");
1455 // add for CONFIG_IEEE80211W, none 11w also can use
1456 _rtw_spinlock_init(&padapter
->security_key_mutex
);
1458 // We don't need to memset padapter->XXX to zero, because adapter is allocated by rtw_zvmalloc().
1459 //_rtw_memset((unsigned char *)&padapter->securitypriv, 0, sizeof (struct security_priv));
1461 //_init_timer(&(padapter->securitypriv.tkip_timer), padapter->pifp, rtw_use_tkipkey_handler, padapter);
1463 if(_rtw_init_sta_priv(&padapter
->stapriv
) == _FAIL
)
1465 DBG_871X("Can't _rtw_init_sta_priv\n");
1470 padapter
->stapriv
.padapter
= padapter
;
1471 padapter
->setband
= GHZ24_50
;
1472 rtw_init_bcmc_stainfo(padapter
);
1474 rtw_init_pwrctrl_priv(padapter
);
1476 //_rtw_memset((u8 *)&padapter->qospriv, 0, sizeof (struct qos_priv));//move to mlme_priv
1478 #ifdef CONFIG_MP_INCLUDED
1479 if (init_mp_priv(padapter
) == _FAIL
) {
1480 DBG_871X("%s: initialize MP private data Fail!\n", __func__
);
1484 ret8
= rtw_init_default_value(padapter
);
1486 rtw_hal_dm_init(padapter
);
1487 rtw_hal_sw_led_init(padapter
);
1489 #ifdef DBG_CONFIG_ERROR_DETECT
1490 rtw_hal_sreset_init(padapter
);
1493 #ifdef CONFIG_INTEL_WIDI
1494 if(rtw_init_intel_widi(padapter
) == _FAIL
)
1496 DBG_871X("Can't rtw_init_intel_widi\n");
1500 #endif //CONFIG_INTEL_WIDI
1502 #ifdef CONFIG_BR_EXT
1503 _rtw_spinlock_init(&padapter
->br_ext_lock
);
1504 #endif // CONFIG_BR_EXT
1508 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("-rtw_init_drv_sw\n"));
1516 void rtw_cancel_all_timer(_adapter
*padapter
)
1518 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("+rtw_cancel_all_timer\n"));
1520 _cancel_timer_ex(&padapter
->mlmepriv
.assoc_timer
);
1521 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("rtw_cancel_all_timer:cancel association timer complete! \n"));
1523 //_cancel_timer_ex(&padapter->securitypriv.tkip_timer);
1524 //RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel tkip_timer! \n"));
1526 _cancel_timer_ex(&padapter
->mlmepriv
.scan_to_timer
);
1527 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("rtw_cancel_all_timer:cancel scan_to_timer! \n"));
1529 _cancel_timer_ex(&padapter
->mlmepriv
.dynamic_chk_timer
);
1530 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("rtw_cancel_all_timer:cancel dynamic_chk_timer! \n"));
1532 // cancel sw led timer
1533 rtw_hal_sw_led_deinit(padapter
);
1534 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("rtw_cancel_all_timer:cancel DeInitSwLeds! \n"));
1536 _cancel_timer_ex(&padapter
->pwrctrlpriv
.pwr_state_check_timer
);
1538 #ifdef CONFIG_IOCTL_CFG80211
1540 _cancel_timer_ex(&padapter
->cfg80211_wdinfo
.remain_on_ch_timer
);
1542 #endif //CONFIG_IOCTL_CFG80211
1544 #ifdef CONFIG_SET_SCAN_DENY_TIMER
1545 _cancel_timer_ex(&padapter
->mlmepriv
.set_scan_deny_timer
);
1546 rtw_clear_scan_deny(padapter
);
1547 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("rtw_cancel_all_timer:cancel set_scan_deny_timer! \n"));
1550 #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
1551 _cancel_timer_ex(&padapter
->recvpriv
.signal_stat_timer
);
1555 rtw_hal_dm_deinit(padapter
);
1557 #ifdef CONFIG_PLATFORM_FS_MX61
1562 u8
rtw_free_drv_sw(_adapter
*padapter
)
1564 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("==>rtw_free_drv_sw"));
1567 //we can call rtw_p2p_enable here, but:
1568 // 1. rtw_p2p_enable may have IO operation
1569 // 2. rtw_p2p_enable is bundled with wext interface
1572 struct wifidirect_info
*pwdinfo
= &padapter
->wdinfo
;
1573 if(!rtw_p2p_chk_state(pwdinfo
, P2P_STATE_NONE
))
1575 _cancel_timer_ex( &pwdinfo
->find_phase_timer
);
1576 _cancel_timer_ex( &pwdinfo
->restore_p2p_state_timer
);
1577 _cancel_timer_ex( &pwdinfo
->pre_tx_scan_timer
);
1578 #ifdef CONFIG_CONCURRENT_MODE
1579 _cancel_timer_ex( &pwdinfo
->ap_p2p_switch_timer
);
1580 #endif // CONFIG_CONCURRENT_MODE
1581 rtw_p2p_set_state(pwdinfo
, P2P_STATE_NONE
);
1585 // add for CONFIG_IEEE80211W, none 11w also can use
1586 _rtw_spinlock_free(&padapter
->security_key_mutex
);
1588 #ifdef CONFIG_BR_EXT
1589 _rtw_spinlock_free(&padapter
->br_ext_lock
);
1590 #endif // CONFIG_BR_EXT
1592 #ifdef CONFIG_INTEL_WIDI
1593 rtw_free_intel_widi(padapter
);
1594 #endif //CONFIG_INTEL_WIDI
1596 free_mlme_ext_priv(&padapter
->mlmeextpriv
);
1599 //rtw_free_tdls_info(&padapter->tdlsinfo);
1600 #endif //CONFIG_TDLS
1602 rtw_free_cmd_priv(&padapter
->cmdpriv
);
1604 rtw_free_evt_priv(&padapter
->evtpriv
);
1606 rtw_free_mlme_priv(&padapter
->mlmepriv
);
1608 //free_io_queue(padapter);
1610 _rtw_free_xmit_priv(&padapter
->xmitpriv
);
1612 _rtw_free_sta_priv(&padapter
->stapriv
); //will free bcmc_stainfo here
1614 _rtw_free_recv_priv(&padapter
->recvpriv
);
1616 rtw_free_pwrctrl_priv(padapter
);
1618 //rtw_mfree((void *)padapter, sizeof (padapter));
1620 #ifdef CONFIG_DRVEXT_MODULE
1621 free_drvext(&padapter
->drvextpriv
);
1624 rtw_hal_free_data(padapter
);
1626 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("<==rtw_free_drv_sw\n"));
1628 //free the old_pnetdev
1629 if(padapter
->rereg_nd_name_priv
.old_pnetdev
) {
1630 free_netdev(padapter
->rereg_nd_name_priv
.old_pnetdev
);
1631 padapter
->rereg_nd_name_priv
.old_pnetdev
= NULL
;
1634 // clear pbuddy_adapter to avoid access wrong pointer.
1635 if(padapter
->pbuddy_adapter
!= NULL
)
1637 padapter
->pbuddy_adapter
->pbuddy_adapter
= NULL
;
1640 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("-rtw_free_drv_sw\n"));
1646 #ifdef CONFIG_CONCURRENT_MODE
1648 #ifdef CONFIG_USB_HCI
1649 #include <usb_hal.h>
1652 #ifdef CONFIG_MULTI_VIR_IFACES
1653 int _netdev_vir_if_open(struct net_device
*pnetdev
)
1655 _adapter
*padapter
= (_adapter
*)rtw_netdev_priv(pnetdev
);
1656 _adapter
*primary_padapter
= GET_PRIMARY_ADAPTER(padapter
);
1658 DBG_871X(FUNC_NDEV_FMT
" enter\n", FUNC_NDEV_ARG(pnetdev
));
1660 if(!primary_padapter
)
1661 goto _netdev_virtual_iface_open_error
;
1663 if(primary_padapter
->bup
== _FALSE
|| primary_padapter
->hw_init_completed
== _FALSE
)
1665 _netdev_open(primary_padapter
->pnetdev
);
1668 if(padapter
->bup
== _FALSE
&& primary_padapter
->bup
== _TRUE
&&
1669 primary_padapter
->hw_init_completed
== _TRUE
)
1673 padapter
->bDriverStopped
= _FALSE
;
1674 padapter
->bSurpriseRemoved
= _FALSE
;
1675 padapter
->bCardDisableWOHSM
= _FALSE
;
1677 _rtw_memcpy(padapter
->HalData
, primary_padapter
->HalData
, padapter
->hal_data_sz
);
1679 padapter
->bFWReady
= primary_padapter
->bFWReady
;
1681 if(rtw_start_drv_threads(padapter
) == _FAIL
)
1683 goto _netdev_virtual_iface_open_error
;
1686 padapter
->dir_dev
= NULL
;
1687 rtw_proc_init_one(pnetdev
);
1689 #ifdef CONFIG_IOCTL_CFG80211
1690 rtw_cfg80211_init_wiphy(padapter
);
1693 padapter
->bup
= _TRUE
;
1694 padapter
->hw_init_completed
= _TRUE
;
1697 padapter
->net_closed
= _FALSE
;
1699 _set_timer(&padapter
->mlmepriv
.dynamic_chk_timer
, 2000);
1701 if(!rtw_netif_queue_stopped(pnetdev
))
1702 rtw_netif_start_queue(pnetdev
);
1704 rtw_netif_wake_queue(pnetdev
);
1707 DBG_871X(FUNC_NDEV_FMT
" exit\n", FUNC_NDEV_ARG(pnetdev
));
1710 _netdev_virtual_iface_open_error
:
1712 padapter
->bup
= _FALSE
;
1714 netif_carrier_off(pnetdev
);
1715 rtw_netif_stop_queue(pnetdev
);
1721 int netdev_vir_if_open(struct net_device
*pnetdev
)
1724 _adapter
*padapter
= (_adapter
*)rtw_netdev_priv(pnetdev
);
1726 _enter_critical_mutex(&(adapter_to_dvobj(padapter
)->hw_init_mutex
), NULL
);
1727 ret
= _netdev_vir_if_open(pnetdev
);
1728 _exit_critical_mutex(&(adapter_to_dvobj(padapter
)->hw_init_mutex
), NULL
);
1732 static int netdev_vir_if_close(struct net_device
*pnetdev
)
1734 _adapter
*padapter
= (_adapter
*)rtw_netdev_priv(pnetdev
);
1736 padapter
->net_closed
= _TRUE
;
1740 if (!rtw_netif_queue_stopped(pnetdev
))
1741 rtw_netif_stop_queue(pnetdev
);
1744 #ifdef CONFIG_IOCTL_CFG80211
1745 rtw_scan_abort(padapter
);
1746 wdev_to_priv(padapter
->rtw_wdev
)->bandroid_scan
= _FALSE
;
1752 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
1753 static const struct net_device_ops rtw_netdev_vir_if_ops
= {
1754 .ndo_open
= netdev_vir_if_open
,
1755 .ndo_stop
= netdev_vir_if_close
,
1756 .ndo_start_xmit
= rtw_xmit_entry
,
1757 .ndo_set_mac_address
= rtw_net_set_mac_address
,
1758 .ndo_get_stats
= rtw_net_get_stats
,
1759 .ndo_do_ioctl
= rtw_ioctl
,
1760 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
1761 .ndo_select_queue
= rtw_select_queue
,
1766 _adapter
*rtw_drv_add_vir_if(_adapter
*primary_padapter
, void (*set_intf_ops
)(struct _io_ops
*pops
))
1770 struct net_device
*pnetdev
=NULL
;
1771 _adapter
*padapter
= NULL
;
1772 struct dvobj_priv
*pdvobjpriv
;
1776 if((primary_padapter->bup == _FALSE) ||
1777 (rtw_buddy_adapter_up(primary_padapter) == _FALSE))
1779 goto error_rtw_drv_add_iface;
1783 /****** init netdev ******/
1784 pnetdev
= rtw_init_netdev(NULL
);
1786 goto error_rtw_drv_add_iface
;
1788 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
1789 DBG_871X("register rtw_netdev_virtual_iface_ops to netdev_ops\n");
1790 pnetdev
->netdev_ops
= &rtw_netdev_vir_if_ops
;
1792 pnetdev
->open
= netdev_vir_if_open
;
1793 pnetdev
->stop
= netdev_vir_if_close
;
1796 #ifdef CONFIG_NO_WIRELESS_HANDLERS
1797 pnetdev
->wireless_handlers
= NULL
;
1800 /****** init adapter ******/
1801 padapter
= rtw_netdev_priv(pnetdev
);
1802 _rtw_memcpy(padapter
, primary_padapter
, sizeof(_adapter
));
1805 padapter
->bup
= _FALSE
;
1806 padapter
->net_closed
= _TRUE
;
1807 padapter
->hw_init_completed
= _FALSE
;
1810 //set adapter_type/iface type
1811 padapter
->isprimary
= _FALSE
;
1812 padapter
->adapter_type
= MAX_ADAPTER
;
1813 padapter
->pbuddy_adapter
= primary_padapter
;
1815 #ifndef CONFIG_HWPORT_SWAP //Port0 -> Pri , Port1 -> Sec
1816 padapter
->iface_type
= IFACE_PORT1
;
1818 padapter
->iface_type
= IFACE_PORT0
;
1819 #endif //CONFIG_HWPORT_SWAP
1821 //extended virtual interfaces always are set to port0
1822 padapter
->iface_type
= IFACE_PORT0
;
1825 padapter
->pnetdev
= pnetdev
;
1827 /****** setup dvobj ******/
1828 pdvobjpriv
= adapter_to_dvobj(padapter
);
1829 padapter
->iface_id
= pdvobjpriv
->iface_nums
;
1830 pdvobjpriv
->padapters
[pdvobjpriv
->iface_nums
++] = padapter
;
1832 SET_NETDEV_DEV(pnetdev
, dvobj_to_dev(pdvobjpriv
));
1833 #ifdef CONFIG_IOCTL_CFG80211
1834 rtw_wdev_alloc(padapter
, dvobj_to_dev(pdvobjpriv
));
1835 #endif //CONFIG_IOCTL_CFG80211
1837 //set interface_type/chip_type/HardwareType
1838 padapter
->interface_type
= primary_padapter
->interface_type
;
1839 padapter
->chip_type
= primary_padapter
->chip_type
;
1840 padapter
->HardwareType
= primary_padapter
->HardwareType
;
1842 //set hal data & hal ops
1843 #if defined(CONFIG_RTL8192C)
1844 #if defined(CONFIG_PCI_HCI)
1845 rtl8192ce_set_hal_ops(padapter
);
1846 #elif defined(CONFIG_USB_HCI)
1847 rtl8192cu_set_hal_ops(padapter
);
1849 #elif defined(CONFIG_RTL8192D)
1850 #if defined(CONFIG_PCI_HCI)
1851 rtl8192de_set_hal_ops(padapter
);
1852 #elif defined(CONFIG_USB_HCI)
1853 rtl8192du_set_hal_ops(padapter
);
1857 padapter
->HalFunc
.inirp_init
= NULL
;
1858 padapter
->HalFunc
.inirp_deinit
= NULL
;
1859 padapter
->intf_start
= NULL
;
1860 padapter
->intf_stop
= NULL
;
1863 if ((rtw_init_io_priv(padapter
, set_intf_ops
)) == _FAIL
) {
1864 RT_TRACE(_module_hci_intfs_c_
,_drv_err_
,(" \n Can't init io_reqs\n"));
1867 //step read_chip_version
1868 rtw_hal_read_chip_version(padapter
);
1870 //step usb endpoint mapping
1871 rtw_hal_chip_configure(padapter
);
1875 if(rtw_init_drv_sw(padapter
)!= _SUCCESS
)
1876 goto error_rtw_drv_add_iface
;
1879 //get mac address from primary_padapter
1880 _rtw_memcpy(mac
, primary_padapter
->eeprompriv
.mac_addr
, ETH_ALEN
);
1882 if (((mac
[0]==0xff) &&(mac
[1]==0xff) && (mac
[2]==0xff) &&
1883 (mac
[3]==0xff) && (mac
[4]==0xff) &&(mac
[5]==0xff)) ||
1884 ((mac
[0]==0x0) && (mac
[1]==0x0) && (mac
[2]==0x0) &&
1885 (mac
[3]==0x0) && (mac
[4]==0x0) &&(mac
[5]==0x0)))
1896 //If the BIT1 is 0, the address is universally administered.
1897 //If it is 1, the address is locally administered
1898 #if 1 //needs enable MBSSID CAM
1899 mac
[0] |= BIT(1); // locally administered
1900 mac
[0] |= (padapter
->iface_id
-1)<<4;
1904 _rtw_memcpy(padapter
->eeprompriv
.mac_addr
, mac
, ETH_ALEN
);
1906 padapter
->dir_dev
= NULL
;
1913 error_rtw_drv_add_iface
:
1916 rtw_free_drv_sw(padapter
);
1919 rtw_free_netdev(pnetdev
);
1925 void rtw_drv_stop_vir_if(_adapter
*padapter
)
1927 struct net_device
*pnetdev
=NULL
;
1929 if (padapter
== NULL
)
1932 pnetdev
= padapter
->pnetdev
;
1934 rtw_cancel_all_timer(padapter
);
1936 if(padapter
->bup
== _TRUE
)
1938 padapter
->bDriverStopped
= _TRUE
;
1940 #ifdef CONFIG_XMIT_ACK
1941 if (padapter
->xmitpriv
.ack_tx
)
1942 rtw_ack_tx_done(&padapter
->xmitpriv
, RTW_SCTX_DONE_DRV_STOP
);
1945 if(padapter
->intf_stop
)
1947 padapter
->intf_stop(padapter
);
1950 rtw_stop_drv_threads(padapter
);
1952 padapter
->bup
= _FALSE
;
1956 void rtw_drv_free_vir_if(_adapter
*padapter
)
1958 struct net_device
*pnetdev
=NULL
;
1960 if (padapter
== NULL
)
1963 padapter
->pbuddy_adapter
= NULL
;
1965 pnetdev
= padapter
->pnetdev
;
1967 #ifdef CONFIG_IOCTL_CFG80211
1968 rtw_wdev_free(padapter
->rtw_wdev
);
1969 #endif //CONFIG_IOCTL_CFG80211
1971 rtw_free_drv_sw(padapter
);
1973 rtw_free_netdev(pnetdev
);
1976 void rtw_drv_stop_vir_ifaces(struct dvobj_priv
*dvobj
)
1979 //struct dvobj_priv *dvobj = primary_padapter->dvobj;
1981 for(i
=2;i
<dvobj
->iface_nums
;i
++)
1983 rtw_drv_stop_vir_if(dvobj
->padapters
[i
]);
1987 void rtw_drv_free_vir_ifaces(struct dvobj_priv
*dvobj
)
1990 //struct dvobj_priv *dvobj = primary_padapter->dvobj;
1992 for(i
=2;i
<dvobj
->iface_nums
;i
++)
1994 rtw_drv_free_vir_if(dvobj
->padapters
[i
]);
1998 void rtw_drv_del_vir_if(_adapter
*padapter
)
2000 rtw_drv_stop_vir_if(padapter
);
2001 rtw_drv_free_vir_if(padapter
);
2004 void rtw_drv_del_vir_ifaces(_adapter
*primary_padapter
)
2007 struct dvobj_priv
*dvobj
= primary_padapter
->dvobj
;
2009 for(i
=2;i
<dvobj
->iface_nums
;i
++)
2011 rtw_drv_del_vir_if(dvobj
->padapters
[i
]);
2014 #endif //CONFIG_MULTI_VIR_IFACES
2016 int _netdev_if2_open(struct net_device
*pnetdev
)
2018 _adapter
*padapter
= (_adapter
*)rtw_netdev_priv(pnetdev
);
2019 _adapter
*primary_padapter
= padapter
->pbuddy_adapter
;
2021 DBG_871X("+871x_drv - if2_open, bup=%d\n", padapter
->bup
);
2023 if(primary_padapter
->bup
== _FALSE
|| primary_padapter
->hw_init_completed
== _FALSE
)
2025 _netdev_open(primary_padapter
->pnetdev
);
2028 if(padapter
->bup
== _FALSE
&& primary_padapter
->bup
== _TRUE
&&
2029 primary_padapter
->hw_init_completed
== _TRUE
)
2033 padapter
->bDriverStopped
= _FALSE
;
2034 padapter
->bSurpriseRemoved
= _FALSE
;
2035 padapter
->bCardDisableWOHSM
= _FALSE
;
2037 _rtw_memcpy(padapter
->HalData
, primary_padapter
->HalData
, padapter
->hal_data_sz
);
2039 padapter
->bFWReady
= primary_padapter
->bFWReady
;
2041 rtw_hal_set_hwreg(padapter
, HW_VAR_DM_INIT_PWDB
, NULL
);
2043 //if (init_mlme_ext_priv(padapter) == _FAIL)
2044 // goto netdev_if2_open_error;
2047 if(rtw_start_drv_threads(padapter
) == _FAIL
)
2049 goto netdev_if2_open_error
;
2053 if(padapter
->intf_start
)
2055 padapter
->intf_start(padapter
);
2059 padapter
->hw_init_completed
= _TRUE
;
2061 padapter
->dir_dev
= NULL
;
2062 rtw_proc_init_one(pnetdev
);
2065 #ifdef CONFIG_IOCTL_CFG80211
2066 rtw_cfg80211_init_wiphy(padapter
);
2069 padapter
->bup
= _TRUE
;
2073 padapter
->net_closed
= _FALSE
;
2075 _set_timer(&padapter
->mlmepriv
.dynamic_chk_timer
, 2000);
2077 if(!rtw_netif_queue_stopped(pnetdev
))
2078 rtw_netif_start_queue(pnetdev
);
2080 rtw_netif_wake_queue(pnetdev
);
2082 DBG_871X("-871x_drv - if2_open, bup=%d\n", padapter
->bup
);
2085 netdev_if2_open_error
:
2087 padapter
->bup
= _FALSE
;
2089 netif_carrier_off(pnetdev
);
2090 rtw_netif_stop_queue(pnetdev
);
2096 int netdev_if2_open(struct net_device
*pnetdev
)
2099 _adapter
*padapter
= (_adapter
*)rtw_netdev_priv(pnetdev
);
2101 _enter_critical_mutex(&(adapter_to_dvobj(padapter
)->hw_init_mutex
), NULL
);
2102 ret
= _netdev_if2_open(pnetdev
);
2103 _exit_critical_mutex(&(adapter_to_dvobj(padapter
)->hw_init_mutex
), NULL
);
2107 static int netdev_if2_close(struct net_device
*pnetdev
)
2109 _adapter
*padapter
= (_adapter
*)rtw_netdev_priv(pnetdev
);
2111 padapter
->net_closed
= _TRUE
;
2115 if (!rtw_netif_queue_stopped(pnetdev
))
2116 rtw_netif_stop_queue(pnetdev
);
2119 #ifdef CONFIG_IOCTL_CFG80211
2120 rtw_scan_abort(padapter
);
2121 wdev_to_priv(padapter
->rtw_wdev
)->bandroid_scan
= _FALSE
;
2127 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
2128 static const struct net_device_ops rtw_netdev_if2_ops
= {
2129 .ndo_open
= netdev_if2_open
,
2130 .ndo_stop
= netdev_if2_close
,
2131 .ndo_start_xmit
= rtw_xmit_entry
,
2132 .ndo_set_mac_address
= rtw_net_set_mac_address
,
2133 .ndo_get_stats
= rtw_net_get_stats
,
2134 .ndo_do_ioctl
= rtw_ioctl
,
2135 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
2136 .ndo_select_queue
= rtw_select_queue
,
2141 _adapter
*rtw_drv_if2_init(_adapter
*primary_padapter
, void (*set_intf_ops
)(struct _io_ops
*pops
))
2144 struct net_device
*pnetdev
= NULL
;
2145 _adapter
*padapter
= NULL
;
2146 struct dvobj_priv
*pdvobjpriv
;
2149 /****** init netdev ******/
2150 pnetdev
= rtw_init_netdev(NULL
);
2152 goto error_rtw_drv_if2_init
;
2154 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
2155 DBG_871X("register rtw_netdev_if2_ops to netdev_ops\n");
2156 pnetdev
->netdev_ops
= &rtw_netdev_if2_ops
;
2158 pnetdev
->open
= netdev_if2_open
;
2159 pnetdev
->stop
= netdev_if2_close
;
2162 #ifdef CONFIG_NO_WIRELESS_HANDLERS
2163 pnetdev
->wireless_handlers
= NULL
;
2166 /****** init adapter ******/
2167 padapter
= rtw_netdev_priv(pnetdev
);
2168 _rtw_memcpy(padapter
, primary_padapter
, sizeof(_adapter
));
2171 padapter
->bup
= _FALSE
;
2172 padapter
->net_closed
= _TRUE
;
2173 padapter
->hw_init_completed
= _FALSE
;
2175 //set adapter_type/iface type
2176 padapter
->isprimary
= _FALSE
;
2177 padapter
->adapter_type
= SECONDARY_ADAPTER
;
2178 padapter
->pbuddy_adapter
= primary_padapter
;
2179 padapter
->iface_id
= IFACE_ID1
;
2180 #ifndef CONFIG_HWPORT_SWAP //Port0 -> Pri , Port1 -> Sec
2181 padapter
->iface_type
= IFACE_PORT1
;
2183 padapter
->iface_type
= IFACE_PORT0
;
2184 #endif //CONFIG_HWPORT_SWAP
2186 padapter
->pnetdev
= pnetdev
;
2188 /****** setup dvobj ******/
2189 pdvobjpriv
= adapter_to_dvobj(padapter
);
2190 pdvobjpriv
->if2
= padapter
;
2191 pdvobjpriv
->padapters
[pdvobjpriv
->iface_nums
++] = padapter
;
2193 SET_NETDEV_DEV(pnetdev
, dvobj_to_dev(pdvobjpriv
));
2194 #ifdef CONFIG_IOCTL_CFG80211
2195 rtw_wdev_alloc(padapter
, dvobj_to_dev(pdvobjpriv
));
2196 #endif //CONFIG_IOCTL_CFG80211
2198 //set interface_type/chip_type/HardwareType
2199 padapter
->interface_type
= primary_padapter
->interface_type
;
2200 padapter
->chip_type
= primary_padapter
->chip_type
;
2201 padapter
->HardwareType
= primary_padapter
->HardwareType
;
2203 //set hal data & hal ops
2204 #if defined(CONFIG_RTL8192C)
2205 #if defined(CONFIG_PCI_HCI)
2206 rtl8192ce_set_hal_ops(padapter
);
2207 #elif defined(CONFIG_USB_HCI)
2208 rtl8192cu_set_hal_ops(padapter
);
2210 #elif defined(CONFIG_RTL8192D)
2211 #if defined(CONFIG_PCI_HCI)
2212 rtl8192de_set_hal_ops(padapter
);
2213 #elif defined(CONFIG_USB_HCI)
2214 rtl8192du_set_hal_ops(padapter
);
2218 padapter
->HalFunc
.inirp_init
= NULL
;
2219 padapter
->HalFunc
.inirp_deinit
= NULL
;
2222 padapter
->intf_start
= primary_padapter
->intf_start
;
2223 padapter
->intf_stop
= primary_padapter
->intf_stop
;
2226 if ((rtw_init_io_priv(padapter
, set_intf_ops
)) == _FAIL
) {
2227 RT_TRACE(_module_hci_intfs_c_
,_drv_err_
,(" \n Can't init io_reqs\n"));
2230 //step read_chip_version
2231 rtw_hal_read_chip_version(padapter
);
2233 //step usb endpoint mapping
2234 rtw_hal_chip_configure(padapter
);
2238 if(rtw_init_drv_sw(padapter
)!= _SUCCESS
)
2239 goto error_rtw_drv_if2_init
;
2241 //get mac address from primary_padapter
2242 _rtw_memcpy(mac
, primary_padapter
->eeprompriv
.mac_addr
, ETH_ALEN
);
2244 if (((mac
[0]==0xff) &&(mac
[1]==0xff) && (mac
[2]==0xff) &&
2245 (mac
[3]==0xff) && (mac
[4]==0xff) &&(mac
[5]==0xff)) ||
2246 ((mac
[0]==0x0) && (mac
[1]==0x0) && (mac
[2]==0x0) &&
2247 (mac
[3]==0x0) && (mac
[4]==0x0) &&(mac
[5]==0x0)))
2258 //If the BIT1 is 0, the address is universally administered.
2259 //If it is 1, the address is locally administered
2260 mac
[0] |= BIT(1); // locally administered
2264 _rtw_memcpy(padapter
->eeprompriv
.mac_addr
, mac
, ETH_ALEN
);
2265 rtw_init_wifidirect_addrs(padapter
, padapter
->eeprompriv
.mac_addr
, padapter
->eeprompriv
.mac_addr
);
2267 primary_padapter
->pbuddy_adapter
= padapter
;
2269 padapter
->dir_dev
= NULL
;
2276 error_rtw_drv_if2_init
:
2279 rtw_free_drv_sw(padapter
);
2282 rtw_free_netdev(pnetdev
);
2288 void rtw_drv_if2_free(_adapter
*if2
)
2290 _adapter
*padapter
= if2
;
2291 struct net_device
*pnetdev
= NULL
;
2293 if (padapter
== NULL
)
2296 pnetdev
= padapter
->pnetdev
;
2298 #ifdef CONFIG_IOCTL_CFG80211
2299 rtw_wdev_free(padapter
->rtw_wdev
);
2300 #endif /* CONFIG_IOCTL_CFG80211 */
2303 rtw_free_drv_sw(padapter
);
2305 rtw_free_netdev(pnetdev
);
2309 void rtw_drv_if2_stop(_adapter
*if2
)
2311 _adapter
*padapter
= if2
;
2313 if (padapter
== NULL
)
2316 rtw_cancel_all_timer(padapter
);
2318 if (padapter
->bup
== _TRUE
) {
2319 padapter
->bDriverStopped
= _TRUE
;
2320 #ifdef CONFIG_XMIT_ACK
2321 if (padapter
->xmitpriv
.ack_tx
)
2322 rtw_ack_tx_done(&padapter
->xmitpriv
, RTW_SCTX_DONE_DRV_STOP
);
2325 if(padapter
->intf_stop
)
2327 padapter
->intf_stop(padapter
);
2330 rtw_stop_drv_threads(padapter
);
2332 padapter
->bup
= _FALSE
;
2335 #endif //end of CONFIG_CONCURRENT_MODE
2337 #ifdef CONFIG_BR_EXT
2338 void netdev_br_init(struct net_device
*netdev
)
2340 _adapter
*adapter
= (_adapter
*)rtw_netdev_priv(netdev
);
2342 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
2344 #endif // (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
2346 //if(check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE)
2348 //struct net_bridge *br = netdev->br_port->br;//->dev->dev_addr;
2349 #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
2350 if (netdev
->br_port
)
2351 #else // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
2352 if (rcu_dereference(adapter
->pnetdev
->rx_handler_data
))
2353 #endif // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
2355 struct net_device
*br_netdev
;
2356 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
2357 br_netdev
= dev_get_by_name(CONFIG_BR_EXT_BRNAME
);
2358 #else // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
2359 struct net
*devnet
= NULL
;
2361 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
2362 devnet
= netdev
->nd_net
;
2363 #else // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
2364 devnet
= dev_net(netdev
);
2365 #endif // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
2367 br_netdev
= dev_get_by_name(devnet
, CONFIG_BR_EXT_BRNAME
);
2368 #endif // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
2371 memcpy(adapter
->br_mac
, br_netdev
->dev_addr
, ETH_ALEN
);
2374 printk("%s()-%d: dev_get_by_name(%s) failed!", __FUNCTION__
, __LINE__
, CONFIG_BR_EXT_BRNAME
);
2377 adapter
->ethBrExtInfo
.addPPPoETag
= 1;
2380 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
2382 #endif // (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
2384 #endif //CONFIG_BR_EXT
2386 static int _rtw_drv_register_netdev(_adapter
*padapter
, char *name
)
2389 struct net_device
*pnetdev
= padapter
->pnetdev
;
2391 /* alloc netdev name */
2392 rtw_init_netdev_name(pnetdev
, name
);
2394 _rtw_memcpy(pnetdev
->dev_addr
, padapter
->eeprompriv
.mac_addr
, ETH_ALEN
);
2396 /* Tell the network stack we exist */
2397 if (register_netdev(pnetdev
) != 0) {
2398 DBG_871X(FUNC_NDEV_FMT
"Failed!\n", FUNC_NDEV_ARG(pnetdev
));
2400 goto error_register_netdev
;
2403 DBG_871X("%s, MAC Address (if%d) = " MAC_FMT
"\n", __FUNCTION__
, (padapter
->iface_id
+1), MAC_ARG(pnetdev
->dev_addr
));
2407 error_register_netdev
:
2409 if(padapter
->iface_id
> IFACE_ID0
)
2411 rtw_free_drv_sw(padapter
);
2413 rtw_free_netdev(pnetdev
);
2419 int rtw_drv_register_netdev(_adapter
*if1
)
2421 int i
, status
= _SUCCESS
;
2422 struct dvobj_priv
*dvobj
= if1
->dvobj
;
2424 if(dvobj
->iface_nums
< IFACE_ID_MAX
)
2426 for(i
=0; i
<dvobj
->iface_nums
; i
++)
2428 _adapter
*padapter
= dvobj
->padapters
[i
];
2434 if(padapter
->iface_id
== IFACE_ID0
)
2435 name
= if1
->registrypriv
.ifname
;
2436 else if(padapter
->iface_id
== IFACE_ID1
)
2437 name
= if1
->registrypriv
.if2name
;
2441 if((status
= _rtw_drv_register_netdev(padapter
, name
)) != _SUCCESS
) {
2451 int _netdev_open(struct net_device
*pnetdev
)
2454 _adapter
*padapter
= (_adapter
*)rtw_netdev_priv(pnetdev
);
2455 struct pwrctrl_priv
*pwrctrlpriv
= &padapter
->pwrctrlpriv
;
2457 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("+871x_drv - dev_open\n"));
2458 DBG_871X("+871x_drv - drv_open, bup=%d\n", padapter
->bup
);
2460 if(pwrctrlpriv
->ps_flag
== _TRUE
){
2461 padapter
->net_closed
= _FALSE
;
2462 goto netdev_open_normal_process
;
2465 if(padapter
->bup
== _FALSE
)
2467 padapter
->bDriverStopped
= _FALSE
;
2468 padapter
->bSurpriseRemoved
= _FALSE
;
2469 padapter
->bCardDisableWOHSM
= _FALSE
;
2471 status
= rtw_hal_init(padapter
);
2474 RT_TRACE(_module_os_intfs_c_
,_drv_err_
,("rtl871x_hal_init(): Can't init h/w!\n"));
2475 goto netdev_open_error
;
2478 DBG_871X("MAC Address = "MAC_FMT
"\n", MAC_ARG(pnetdev
->dev_addr
));
2481 status
=rtw_start_drv_threads(padapter
);
2484 RT_TRACE(_module_os_intfs_c_
,_drv_err_
,("Initialize driver software resource Failed!\n"));
2485 goto netdev_open_error
;
2488 #ifdef CONFIG_DRVEXT_MODULE
2489 init_drvext(padapter
);
2492 if(padapter
->intf_start
)
2494 padapter
->intf_start(padapter
);
2497 #ifndef RTK_DMP_PLATFORM
2498 rtw_proc_init_one(pnetdev
);
2501 #ifdef CONFIG_IOCTL_CFG80211
2502 rtw_cfg80211_init_wiphy(padapter
);
2505 rtw_led_control(padapter
, LED_CTL_NO_LINK
);
2507 padapter
->bup
= _TRUE
;
2509 padapter
->net_closed
= _FALSE
;
2511 _set_timer(&padapter
->mlmepriv
.dynamic_chk_timer
, 2000);
2513 padapter
->pwrctrlpriv
.bips_processing
= _FALSE
;
2514 rtw_set_pwr_state_check_timer(&padapter
->pwrctrlpriv
);
2516 //netif_carrier_on(pnetdev);//call this func when rtw_joinbss_event_callback return success
2517 if(!rtw_netif_queue_stopped(pnetdev
))
2518 rtw_netif_start_queue(pnetdev
);
2520 rtw_netif_wake_queue(pnetdev
);
2522 #ifdef CONFIG_BR_EXT
2523 netdev_br_init(pnetdev
);
2524 #endif // CONFIG_BR_EXT
2526 netdev_open_normal_process
:
2528 #ifdef CONFIG_CONCURRENT_MODE
2530 _adapter
*sec_adapter
= padapter
->pbuddy_adapter
;
2531 if(sec_adapter
&& (sec_adapter
->bup
== _FALSE
|| sec_adapter
->hw_init_completed
== _FALSE
))
2532 _netdev_if2_open(sec_adapter
->pnetdev
);
2536 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("-871x_drv - dev_open\n"));
2537 DBG_871X("-871x_drv - drv_open, bup=%d\n", padapter
->bup
);
2543 padapter
->bup
= _FALSE
;
2545 netif_carrier_off(pnetdev
);
2546 rtw_netif_stop_queue(pnetdev
);
2548 RT_TRACE(_module_os_intfs_c_
,_drv_err_
,("-871x_drv - dev_open, fail!\n"));
2549 DBG_871X("-871x_drv - drv_open fail, bup=%d\n", padapter
->bup
);
2555 int netdev_open(struct net_device
*pnetdev
)
2558 _adapter
*padapter
= (_adapter
*)rtw_netdev_priv(pnetdev
);
2560 _enter_critical_mutex(&(adapter_to_dvobj(padapter
)->hw_init_mutex
), NULL
);
2561 ret
= _netdev_open(pnetdev
);
2562 _exit_critical_mutex(&(adapter_to_dvobj(padapter
)->hw_init_mutex
), NULL
);
2568 int ips_netdrv_open(_adapter
*padapter
)
2570 int status
= _SUCCESS
;
2571 padapter
->net_closed
= _FALSE
;
2572 DBG_871X("===> %s.........\n",__FUNCTION__
);
2575 padapter
->bDriverStopped
= _FALSE
;
2576 padapter
->bCardDisableWOHSM
= _FALSE
;
2577 //padapter->bup = _TRUE;
2579 status
= rtw_hal_init(padapter
);
2582 RT_TRACE(_module_os_intfs_c_
,_drv_err_
,("ips_netdrv_open(): Can't init h/w!\n"));
2583 goto netdev_open_error
;
2586 if(padapter
->intf_start
)
2588 padapter
->intf_start(padapter
);
2591 rtw_set_pwr_state_check_timer(&padapter
->pwrctrlpriv
);
2592 _set_timer(&padapter
->mlmepriv
.dynamic_chk_timer
,5000);
2597 //padapter->bup = _FALSE;
2598 DBG_871X("-ips_netdrv_open - drv_open failure, bup=%d\n", padapter
->bup
);
2604 int rtw_ips_pwr_up(_adapter
*padapter
)
2607 u32 start_time
= rtw_get_current_time();
2608 DBG_871X("===> rtw_ips_pwr_up..............\n");
2609 rtw_reset_drv_sw(padapter
);
2611 result
= ips_netdrv_open(padapter
);
2613 rtw_led_control(padapter
, LED_CTL_NO_LINK
);
2615 DBG_871X("<=== rtw_ips_pwr_up.............. in %dms\n", rtw_get_passing_time_ms(start_time
));
2620 void rtw_ips_pwr_down(_adapter
*padapter
)
2622 u32 start_time
= rtw_get_current_time();
2623 DBG_871X("===> rtw_ips_pwr_down...................\n");
2625 padapter
->bCardDisableWOHSM
= _TRUE
;
2626 padapter
->net_closed
= _TRUE
;
2628 rtw_led_control(padapter
, LED_CTL_POWER_OFF
);
2630 rtw_ips_dev_unload(padapter
);
2631 padapter
->bCardDisableWOHSM
= _FALSE
;
2632 DBG_871X("<=== rtw_ips_pwr_down..................... in %dms\n", rtw_get_passing_time_ms(start_time
));
2635 void rtw_ips_dev_unload(_adapter
*padapter
)
2637 struct net_device
*pnetdev
= (struct net_device
*)padapter
->pnetdev
;
2638 struct xmit_priv
*pxmitpriv
= &(padapter
->xmitpriv
);
2639 DBG_871X("====> %s...\n",__FUNCTION__
);
2641 rtw_hal_set_hwreg(padapter
, HW_VAR_FIFO_CLEARN_UP
, 0);
2643 if(padapter
->intf_stop
)
2645 padapter
->intf_stop(padapter
);
2649 if(padapter
->bSurpriseRemoved
== _FALSE
)
2651 rtw_hal_deinit(padapter
);
2656 int pm_netdev_open(struct net_device
*pnetdev
,u8 bnormal
)
2660 status
= netdev_open(pnetdev
);
2663 status
= (_SUCCESS
== ips_netdrv_open((_adapter
*)rtw_netdev_priv(pnetdev
)))?(0):(-1);
2669 static int netdev_close(struct net_device
*pnetdev
)
2671 _adapter
*padapter
= (_adapter
*)rtw_netdev_priv(pnetdev
);
2673 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("+871x_drv - drv_close\n"));
2675 if(padapter
->pwrctrlpriv
.bInternalAutoSuspend
== _TRUE
)
2677 //rtw_pwr_wakeup(padapter);
2678 if(padapter
->pwrctrlpriv
.rf_pwrstate
== rf_off
)
2679 padapter
->pwrctrlpriv
.ps_flag
= _TRUE
;
2681 padapter
->net_closed
= _TRUE
;
2683 /* if(!padapter->hw_init_completed)
2685 DBG_871X("(1)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter->bup, padapter->hw_init_completed);
2687 padapter->bDriverStopped = _TRUE;
2689 rtw_dev_unload(padapter);
2692 if(padapter
->pwrctrlpriv
.rf_pwrstate
== rf_on
){
2693 DBG_871X("(2)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter
->bup
, padapter
->hw_init_completed
);
2698 if (!rtw_netif_queue_stopped(pnetdev
))
2699 rtw_netif_stop_queue(pnetdev
);
2702 #ifndef CONFIG_ANDROID
2704 LeaveAllPowerSaveMode(padapter
);
2705 rtw_disassoc_cmd(padapter
, 500, _FALSE
);
2706 //s2-2. indicate disconnect to os
2707 rtw_indicate_disconnect(padapter
);
2709 rtw_free_assoc_resources(padapter
, 1);
2711 rtw_free_network_queue(padapter
,_TRUE
);
2714 rtw_led_control(padapter
, LED_CTL_POWER_OFF
);
2717 #ifdef CONFIG_BR_EXT
2718 //if (OPMODE & (WIFI_STATION_STATE | WIFI_ADHOC_STATE))
2720 //void nat25_db_cleanup(_adapter *priv);
2721 nat25_db_cleanup(padapter
);
2723 #endif // CONFIG_BR_EXT
2726 #ifdef CONFIG_IOCTL_CFG80211
2727 if( padapter
->wdinfo
.driver_interface
== DRIVER_CFG80211
)
2729 if(wdev_to_priv(padapter
->rtw_wdev
)->p2p_enabled
== _TRUE
)
2730 wdev_to_priv(padapter
->rtw_wdev
)->p2p_enabled
= _FALSE
;
2732 #endif //CONFIG_IOCTL_CFG80211
2733 rtw_p2p_enable(padapter
, P2P_ROLE_DISABLE
);
2736 #ifdef CONFIG_IOCTL_CFG80211
2737 rtw_scan_abort(padapter
);
2738 wdev_to_priv(padapter
->rtw_wdev
)->bandroid_scan
= _FALSE
;
2739 padapter
->rtw_wdev
->iftype
= NL80211_IFTYPE_MONITOR
; //set this at the end
2740 #endif //CONFIG_IOCTL_CFG80211
2742 RT_TRACE(_module_os_intfs_c_
,_drv_info_
,("-871x_drv - drv_close\n"));
2743 DBG_871X("-871x_drv - drv_close, bup=%d\n", padapter
->bup
);
2748 void rtw_ndev_destructor(struct net_device
*ndev
)
2750 DBG_871X(FUNC_NDEV_FMT
"\n", FUNC_NDEV_ARG(ndev
));
2752 #ifdef CONFIG_IOCTL_CFG80211
2753 if (ndev
->ieee80211_ptr
)
2754 rtw_mfree((u8
*)ndev
->ieee80211_ptr
, sizeof(struct wireless_dev
));