1
2
3
4#define _OS_INTFS_C_
5
6#include "../include/osdep_service.h"
7#include "../include/drv_types.h"
8#include "../include/xmit_osdep.h"
9#include "../include/recv_osdep.h"
10#include "../include/hal_intf.h"
11#include "../include/rtw_ioctl.h"
12#include "../include/usb_osintf.h"
13#include "../include/rtw_br_ext.h"
14#include "../include/rtl8188e_led.h"
15#include "../include/rtl8188e_dm.h"
16
17MODULE_LICENSE("GPL");
18MODULE_DESCRIPTION("Realtek Wireless Lan Driver");
19MODULE_AUTHOR("Realtek Semiconductor Corp.");
20MODULE_VERSION(DRIVERVERSION);
21
22#define CONFIG_BR_EXT_BRNAME "br0"
23#define RTW_NOTCH_FILTER 0
24
25
26static int rtw_chip_version = 0x00;
27static int rtw_rfintfs = HWPI;
28static int rtw_lbkmode;
29static int rtw_network_mode = Ndis802_11IBSS;
30static int rtw_channel = 1;
31static int rtw_wireless_mode = WIRELESS_11BG_24N;
32static int rtw_vrtl_carrier_sense = AUTO_VCS;
33static int rtw_vcs_type = RTS_CTS;
34static int rtw_rts_thresh = 2347;
35static int rtw_frag_thresh = 2346;
36static int rtw_preamble = PREAMBLE_LONG;
37static int rtw_scan_mode = 1;
38static int rtw_adhoc_tx_pwr = 1;
39static int rtw_soft_ap;
40static int rtw_power_mgnt = 1;
41static int rtw_ips_mode = IPS_NORMAL;
42
43static int rtw_smart_ps = 2;
44
45module_param(rtw_ips_mode, int, 0644);
46MODULE_PARM_DESC(rtw_ips_mode, "The default IPS mode");
47
48static int rtw_debug = 1;
49static int rtw_radio_enable = 1;
50static int rtw_long_retry_lmt = 7;
51static int rtw_short_retry_lmt = 7;
52static int rtw_busy_thresh = 40;
53static int rtw_ack_policy = NORMAL_ACK;
54
55static int rtw_software_encrypt;
56static int rtw_software_decrypt;
57
58static int rtw_acm_method;
59
60static int rtw_wmm_enable = 1;
61static int rtw_uapsd_enable;
62static int rtw_uapsd_max_sp = NO_LIMIT;
63static int rtw_uapsd_acbk_en;
64static int rtw_uapsd_acbe_en;
65static int rtw_uapsd_acvi_en;
66static int rtw_uapsd_acvo_en;
67
68static int rtw_led_enable = 1;
69
70int rtw_ht_enable = 1;
71int rtw_cbw40_enable = 3;
72int rtw_ampdu_enable = 1;
73static int rtw_rx_stbc = 1;
74static int rtw_ampdu_amsdu;
75
76static int rtw_lowrate_two_xmit = 1;
77
78static int rtw_rf_config = RF_819X_MAX_TYPE;
79static int rtw_low_power;
80static int rtw_wifi_spec;
81static int rtw_channel_plan = RT_CHANNEL_DOMAIN_MAX;
82static int rtw_AcceptAddbaReq = true;
83
84static int rtw_antdiv_cfg = 2;
85static int rtw_antdiv_type;
86
87
88static int rtw_hwpdn_mode = 2;
89
90static int rtw_hwpwrp_detect;
91
92static int rtw_hw_wps_pbc = 1;
93
94int rtw_mc2u_disable;
95
96static int rtw_80211d;
97
98static char *ifname = "wlan%d";
99module_param(ifname, charp, 0644);
100MODULE_PARM_DESC(ifname, "The default name to allocate for first interface");
101
102static char *if2name = "wlan%d";
103module_param(if2name, charp, 0644);
104MODULE_PARM_DESC(if2name, "The default name to allocate for second interface");
105
106char *rtw_initmac;
107
108module_param(rtw_initmac, charp, 0644);
109module_param(rtw_channel_plan, int, 0644);
110module_param(rtw_chip_version, int, 0644);
111module_param(rtw_rfintfs, int, 0644);
112module_param(rtw_lbkmode, int, 0644);
113module_param(rtw_network_mode, int, 0644);
114module_param(rtw_channel, int, 0644);
115module_param(rtw_wmm_enable, int, 0644);
116module_param(rtw_vrtl_carrier_sense, int, 0644);
117module_param(rtw_vcs_type, int, 0644);
118module_param(rtw_busy_thresh, int, 0644);
119module_param(rtw_led_enable, int, 0644);
120module_param(rtw_ht_enable, int, 0644);
121module_param(rtw_cbw40_enable, int, 0644);
122module_param(rtw_ampdu_enable, int, 0644);
123module_param(rtw_rx_stbc, int, 0644);
124module_param(rtw_ampdu_amsdu, int, 0644);
125module_param(rtw_lowrate_two_xmit, int, 0644);
126module_param(rtw_rf_config, int, 0644);
127module_param(rtw_power_mgnt, int, 0644);
128module_param(rtw_smart_ps, int, 0644);
129module_param(rtw_low_power, int, 0644);
130module_param(rtw_wifi_spec, int, 0644);
131module_param(rtw_antdiv_cfg, int, 0644);
132module_param(rtw_antdiv_type, int, 0644);
133module_param(rtw_hwpdn_mode, int, 0644);
134module_param(rtw_hwpwrp_detect, int, 0644);
135module_param(rtw_hw_wps_pbc, int, 0644);
136
137static uint rtw_max_roaming_times = 2;
138module_param(rtw_max_roaming_times, uint, 0644);
139MODULE_PARM_DESC(rtw_max_roaming_times, "The max roaming times to try");
140
141static int rtw_fw_iol = 1;
142module_param(rtw_fw_iol, int, 0644);
143MODULE_PARM_DESC(rtw_fw_iol, "FW IOL");
144
145module_param(rtw_mc2u_disable, int, 0644);
146
147module_param(rtw_80211d, int, 0644);
148MODULE_PARM_DESC(rtw_80211d, "Enable 802.11d mechanism");
149
150static uint rtw_notch_filter = RTW_NOTCH_FILTER;
151module_param(rtw_notch_filter, uint, 0644);
152MODULE_PARM_DESC(rtw_notch_filter, "0:Disable, 1:Enable, 2:Enable only for P2P");
153module_param_named(debug, rtw_debug, int, 0444);
154MODULE_PARM_DESC(debug, "Set debug level (1-9) (default 1)");
155
156static uint loadparam(struct adapter *padapter, struct net_device *pnetdev)
157{
158 struct registry_priv *registry_par = &padapter->registrypriv;
159
160 GlobalDebugLevel = rtw_debug;
161 registry_par->chip_version = (u8)rtw_chip_version;
162 registry_par->rfintfs = (u8)rtw_rfintfs;
163 registry_par->lbkmode = (u8)rtw_lbkmode;
164 registry_par->network_mode = (u8)rtw_network_mode;
165
166 memcpy(registry_par->ssid.Ssid, "ANY", 3);
167 registry_par->ssid.SsidLength = 3;
168
169 registry_par->channel = (u8)rtw_channel;
170 registry_par->wireless_mode = (u8)rtw_wireless_mode;
171 registry_par->vrtl_carrier_sense = (u8)rtw_vrtl_carrier_sense;
172 registry_par->vcs_type = (u8)rtw_vcs_type;
173 registry_par->rts_thresh = (u16)rtw_rts_thresh;
174 registry_par->frag_thresh = (u16)rtw_frag_thresh;
175 registry_par->preamble = (u8)rtw_preamble;
176 registry_par->scan_mode = (u8)rtw_scan_mode;
177 registry_par->adhoc_tx_pwr = (u8)rtw_adhoc_tx_pwr;
178 registry_par->soft_ap = (u8)rtw_soft_ap;
179 registry_par->smart_ps = (u8)rtw_smart_ps;
180 registry_par->power_mgnt = (u8)rtw_power_mgnt;
181 registry_par->ips_mode = (u8)rtw_ips_mode;
182 registry_par->radio_enable = (u8)rtw_radio_enable;
183 registry_par->long_retry_lmt = (u8)rtw_long_retry_lmt;
184 registry_par->short_retry_lmt = (u8)rtw_short_retry_lmt;
185 registry_par->busy_thresh = (u16)rtw_busy_thresh;
186 registry_par->ack_policy = (u8)rtw_ack_policy;
187 registry_par->software_encrypt = (u8)rtw_software_encrypt;
188 registry_par->software_decrypt = (u8)rtw_software_decrypt;
189 registry_par->acm_method = (u8)rtw_acm_method;
190
191
192 registry_par->wmm_enable = (u8)rtw_wmm_enable;
193 registry_par->uapsd_enable = (u8)rtw_uapsd_enable;
194 registry_par->uapsd_max_sp = (u8)rtw_uapsd_max_sp;
195 registry_par->uapsd_acbk_en = (u8)rtw_uapsd_acbk_en;
196 registry_par->uapsd_acbe_en = (u8)rtw_uapsd_acbe_en;
197 registry_par->uapsd_acvi_en = (u8)rtw_uapsd_acvi_en;
198 registry_par->uapsd_acvo_en = (u8)rtw_uapsd_acvo_en;
199
200 registry_par->led_enable = (u8)rtw_led_enable;
201
202 registry_par->ht_enable = (u8)rtw_ht_enable;
203 registry_par->cbw40_enable = (u8)rtw_cbw40_enable;
204 registry_par->ampdu_enable = (u8)rtw_ampdu_enable;
205 registry_par->rx_stbc = (u8)rtw_rx_stbc;
206 registry_par->ampdu_amsdu = (u8)rtw_ampdu_amsdu;
207 registry_par->lowrate_two_xmit = (u8)rtw_lowrate_two_xmit;
208 registry_par->rf_config = (u8)rtw_rf_config;
209 registry_par->low_power = (u8)rtw_low_power;
210 registry_par->wifi_spec = (u8)rtw_wifi_spec;
211 registry_par->channel_plan = (u8)rtw_channel_plan;
212 registry_par->bAcceptAddbaReq = (u8)rtw_AcceptAddbaReq;
213 registry_par->antdiv_cfg = (u8)rtw_antdiv_cfg;
214 registry_par->antdiv_type = (u8)rtw_antdiv_type;
215 registry_par->hwpdn_mode = (u8)rtw_hwpdn_mode;
216 registry_par->hwpwrp_detect = (u8)rtw_hwpwrp_detect;
217 registry_par->hw_wps_pbc = (u8)rtw_hw_wps_pbc;
218
219 registry_par->max_roaming_times = (u8)rtw_max_roaming_times;
220
221 registry_par->fw_iol = rtw_fw_iol;
222
223 registry_par->enable80211d = (u8)rtw_80211d;
224 snprintf(registry_par->ifname, 16, "%s", ifname);
225 snprintf(registry_par->if2name, 16, "%s", if2name);
226 registry_par->notch_filter = (u8)rtw_notch_filter;
227
228 return _SUCCESS;
229}
230
231static int rtw_net_set_mac_address(struct net_device *pnetdev, void *p)
232{
233 struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
234 struct sockaddr *addr = p;
235
236 if (!padapter->bup)
237 memcpy(padapter->eeprompriv.mac_addr, addr->sa_data, ETH_ALEN);
238
239 return 0;
240}
241
242static struct net_device_stats *rtw_net_get_stats(struct net_device *pnetdev)
243{
244 struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
245 struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
246 struct recv_priv *precvpriv = &padapter->recvpriv;
247
248 padapter->stats.tx_packets = pxmitpriv->tx_pkts;
249 padapter->stats.rx_packets = precvpriv->rx_pkts;
250 padapter->stats.tx_dropped = pxmitpriv->tx_drop;
251 padapter->stats.rx_dropped = precvpriv->rx_drop;
252 padapter->stats.tx_bytes = pxmitpriv->tx_bytes;
253 padapter->stats.rx_bytes = precvpriv->rx_bytes;
254 return &padapter->stats;
255}
256
257
258
259
260
261
262
263
264
265static const u16 rtw_1d_to_queue[8] = { 2, 3, 3, 2, 1, 1, 0, 0 };
266
267
268static unsigned int rtw_classify8021d(struct sk_buff *skb)
269{
270 unsigned int dscp;
271
272
273
274
275
276
277 if (skb->priority >= 256 && skb->priority <= 263)
278 return skb->priority - 256;
279
280 switch (skb->protocol) {
281 case htons(ETH_P_IP):
282 dscp = ip_hdr(skb)->tos & 0xfc;
283 break;
284 default:
285 return 0;
286 }
287
288 return dscp >> 5;
289}
290
291static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb, struct net_device *sb_dev)
292{
293 struct adapter *padapter = rtw_netdev_priv(dev);
294 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
295
296 skb->priority = rtw_classify8021d(skb);
297
298 if (pmlmepriv->acm_mask != 0)
299 skb->priority = qos_acm(pmlmepriv->acm_mask, skb->priority);
300
301 return rtw_1d_to_queue[skb->priority];
302}
303
304u16 rtw_recv_select_queue(struct sk_buff *skb)
305{
306 struct iphdr *piphdr;
307 unsigned int dscp;
308 __be16 eth_type;
309 u32 priority;
310 u8 *pdata = skb->data;
311
312 memcpy(ð_type, pdata + (ETH_ALEN << 1), 2);
313
314 switch (eth_type) {
315 case htons(ETH_P_IP):
316 piphdr = (struct iphdr *)(pdata + ETH_HLEN);
317 dscp = piphdr->tos & 0xfc;
318 priority = dscp >> 5;
319 break;
320 default:
321 priority = 0;
322 }
323
324 return rtw_1d_to_queue[priority];
325}
326
327static const struct net_device_ops rtw_netdev_ops = {
328 .ndo_open = netdev_open,
329 .ndo_stop = netdev_close,
330 .ndo_start_xmit = rtw_xmit_entry,
331 .ndo_select_queue = rtw_select_queue,
332 .ndo_set_mac_address = rtw_net_set_mac_address,
333 .ndo_get_stats = rtw_net_get_stats,
334};
335
336int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname)
337{
338 int err;
339
340 err = dev_alloc_name(pnetdev, ifname);
341 if (err < 0)
342 return err;
343
344 netif_carrier_off(pnetdev);
345 return 0;
346}
347
348static const struct device_type wlan_type = {
349 .name = "wlan",
350};
351
352struct net_device *rtw_init_netdev(struct adapter *old_padapter)
353{
354 struct adapter *padapter;
355 struct net_device *pnetdev;
356
357 if (old_padapter)
358 pnetdev = rtw_alloc_etherdev_with_old_priv(sizeof(struct adapter), (void *)old_padapter);
359 else
360 pnetdev = rtw_alloc_etherdev(sizeof(struct adapter));
361
362 if (!pnetdev)
363 return NULL;
364
365 pnetdev->dev.type = &wlan_type;
366 padapter = rtw_netdev_priv(pnetdev);
367 padapter->pnetdev = pnetdev;
368 DBG_88E("register rtw_netdev_ops to netdev_ops\n");
369 pnetdev->netdev_ops = &rtw_netdev_ops;
370 pnetdev->watchdog_timeo = HZ * 3;
371 pnetdev->wireless_handlers = (struct iw_handler_def *)&rtw_handlers_def;
372
373
374 loadparam(padapter, pnetdev);
375
376 return pnetdev;
377}
378
379u32 rtw_start_drv_threads(struct adapter *padapter)
380{
381 u32 _status = _SUCCESS;
382
383 padapter->cmdThread = kthread_run(rtw_cmd_thread, padapter, "RTW_CMD_THREAD");
384 if (IS_ERR(padapter->cmdThread))
385 _status = _FAIL;
386 else
387
388 wait_for_completion(&padapter->cmdpriv.start_cmd_thread);
389
390 return _status;
391}
392
393void rtw_stop_drv_threads(struct adapter *padapter)
394{
395
396 complete(&padapter->cmdpriv.enqueue_cmd);
397 if (padapter->cmdThread)
398
399 wait_for_completion(&padapter->cmdpriv.stop_cmd_thread);
400}
401
402static u8 rtw_init_default_value(struct adapter *padapter)
403{
404 struct registry_priv *pregistrypriv = &padapter->registrypriv;
405 struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
406 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
407 struct security_priv *psecuritypriv = &padapter->securitypriv;
408
409
410 pxmitpriv->vcs_setting = pregistrypriv->vrtl_carrier_sense;
411 pxmitpriv->vcs = pregistrypriv->vcs_type;
412 pxmitpriv->vcs_type = pregistrypriv->vcs_type;
413 pxmitpriv->frag_len = pregistrypriv->frag_thresh;
414
415
416 pmlmepriv->scan_interval = SCAN_INTERVAL;
417 pmlmepriv->scan_mode = SCAN_ACTIVE;
418
419
420 pmlmepriv->htpriv.ampdu_enable = false;
421
422
423 psecuritypriv->binstallGrpkey = _FAIL;
424 psecuritypriv->sw_encrypt = pregistrypriv->software_encrypt;
425 psecuritypriv->sw_decrypt = pregistrypriv->software_decrypt;
426 psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open;
427 psecuritypriv->dot11PrivacyAlgrthm = _NO_PRIVACY_;
428 psecuritypriv->dot11PrivacyKeyIndex = 0;
429 psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
430 psecuritypriv->dot118021XGrpKeyid = 1;
431 psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
432 psecuritypriv->ndisencryptstatus = Ndis802_11WEPDisabled;
433
434
435 rtw_init_registrypriv_dev_network(padapter);
436 rtw_update_registrypriv_dev_network(padapter);
437
438
439 rtl8188eu_init_default_value(padapter);
440
441
442 padapter->bReadPortCancel = false;
443 padapter->bWritePortCancel = false;
444 padapter->bRxRSSIDisplay = 0;
445 padapter->bNotifyChannelChange = 0;
446 padapter->bShowGetP2PState = 1;
447 return _SUCCESS;
448}
449
450u8 rtw_reset_drv_sw(struct adapter *padapter)
451{
452 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
453 struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
454
455
456 rtl8188eu_init_default_value(padapter);
457 padapter->bReadPortCancel = false;
458 padapter->bWritePortCancel = false;
459 padapter->bRxRSSIDisplay = 0;
460 pmlmepriv->scan_interval = SCAN_INTERVAL;
461
462 padapter->xmitpriv.tx_pkts = 0;
463 padapter->recvpriv.rx_pkts = 0;
464
465 pmlmepriv->LinkDetectInfo.bBusyTraffic = false;
466
467 _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING);
468
469 pwrctrlpriv->pwr_state_check_cnts = 0;
470
471
472 padapter->mlmeextpriv.sitesurvey_res.state = SCAN_DISABLE;
473
474 rtw_set_signal_stat_timer(&padapter->recvpriv);
475
476 return _SUCCESS;
477}
478
479u8 rtw_init_drv_sw(struct adapter *padapter)
480{
481 u8 ret8 = _SUCCESS;
482
483 if ((rtw_init_cmd_priv(&padapter->cmdpriv)) == _FAIL) {
484 ret8 = _FAIL;
485 goto exit;
486 }
487
488 padapter->cmdpriv.padapter = padapter;
489
490 if ((rtw_init_evt_priv(&padapter->evtpriv)) == _FAIL) {
491 ret8 = _FAIL;
492 goto exit;
493 }
494
495 if (rtw_init_mlme_priv(padapter) == _FAIL) {
496 ret8 = _FAIL;
497 goto exit;
498 }
499
500 rtw_init_wifidirect_timers(padapter);
501 init_wifidirect_info(padapter, P2P_ROLE_DISABLE);
502 reset_global_wifidirect_info(padapter);
503
504 if (init_mlme_ext_priv(padapter) == _FAIL) {
505 ret8 = _FAIL;
506 goto exit;
507 }
508
509 if (_rtw_init_xmit_priv(&padapter->xmitpriv, padapter) == _FAIL) {
510 DBG_88E("Can't _rtw_init_xmit_priv\n");
511 ret8 = _FAIL;
512 goto exit;
513 }
514
515 if (_rtw_init_recv_priv(&padapter->recvpriv, padapter) == _FAIL) {
516 DBG_88E("Can't _rtw_init_recv_priv\n");
517 ret8 = _FAIL;
518 goto exit;
519 }
520
521 if (_rtw_init_sta_priv(&padapter->stapriv) == _FAIL) {
522 DBG_88E("Can't _rtw_init_sta_priv\n");
523 ret8 = _FAIL;
524 goto exit;
525 }
526
527 padapter->stapriv.padapter = padapter;
528
529 rtw_init_bcmc_stainfo(padapter);
530
531 rtw_init_pwrctrl_priv(padapter);
532
533 ret8 = rtw_init_default_value(padapter);
534
535 rtl8188e_init_dm_priv(padapter);
536 rtl8188eu_InitSwLeds(padapter);
537
538 spin_lock_init(&padapter->br_ext_lock);
539
540exit:
541 return ret8;
542}
543
544void rtw_cancel_all_timer(struct adapter *padapter)
545{
546 _cancel_timer_ex(&padapter->mlmepriv.assoc_timer);
547
548 _cancel_timer_ex(&padapter->mlmepriv.scan_to_timer);
549
550 _cancel_timer_ex(&padapter->mlmepriv.dynamic_chk_timer);
551
552
553 rtl8188eu_DeInitSwLeds(padapter);
554
555 _cancel_timer_ex(&padapter->pwrctrlpriv.pwr_state_check_timer);
556
557 _cancel_timer_ex(&padapter->recvpriv.signal_stat_timer);
558}
559
560u8 rtw_free_drv_sw(struct adapter *padapter)
561{
562
563
564
565 {
566 struct wifidirect_info *pwdinfo = &padapter->wdinfo;
567 if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) {
568 _cancel_timer_ex(&pwdinfo->find_phase_timer);
569 _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer);
570 _cancel_timer_ex(&pwdinfo->pre_tx_scan_timer);
571 rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
572 }
573 }
574
575 free_mlme_ext_priv(&padapter->mlmeextpriv);
576
577 rtw_free_cmd_priv(&padapter->cmdpriv);
578
579 rtw_free_evt_priv(&padapter->evtpriv);
580
581 rtw_free_mlme_priv(&padapter->mlmepriv);
582 _rtw_free_xmit_priv(&padapter->xmitpriv);
583
584 _rtw_free_sta_priv(&padapter->stapriv);
585
586 _rtw_free_recv_priv(&padapter->recvpriv);
587
588 rtl8188e_free_hal_data(padapter);
589
590
591 if (padapter->rereg_nd_name_priv.old_pnetdev) {
592 free_netdev(padapter->rereg_nd_name_priv.old_pnetdev);
593 padapter->rereg_nd_name_priv.old_pnetdev = NULL;
594 }
595
596
597 if (padapter->pbuddy_adapter)
598 padapter->pbuddy_adapter->pbuddy_adapter = NULL;
599
600 return _SUCCESS;
601}
602
603void netdev_br_init(struct net_device *netdev)
604{
605 struct adapter *adapter = (struct adapter *)rtw_netdev_priv(netdev);
606
607 rcu_read_lock();
608
609 if (rcu_dereference(adapter->pnetdev->rx_handler_data)) {
610 struct net_device *br_netdev;
611 struct net *devnet = NULL;
612
613 devnet = dev_net(netdev);
614 br_netdev = dev_get_by_name(devnet, CONFIG_BR_EXT_BRNAME);
615 if (br_netdev) {
616 memcpy(adapter->br_mac, br_netdev->dev_addr, ETH_ALEN);
617 dev_put(br_netdev);
618 } else {
619 pr_info("%s()-%d: dev_get_by_name(%s) failed!",
620 __func__, __LINE__, CONFIG_BR_EXT_BRNAME);
621 }
622 }
623 adapter->ethBrExtInfo.addPPPoETag = 1;
624
625 rcu_read_unlock();
626}
627
628int _netdev_open(struct net_device *pnetdev)
629{
630 uint status;
631 struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
632 struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
633
634 DBG_88E("+88eu_drv - drv_open, bup =%d\n", padapter->bup);
635
636 if (pwrctrlpriv->ps_flag) {
637 padapter->net_closed = false;
638 goto netdev_open_normal_process;
639 }
640
641 if (!padapter->bup) {
642 padapter->bDriverStopped = false;
643 padapter->bSurpriseRemoved = false;
644 padapter->bCardDisableWOHSM = false;
645
646 status = rtw_hal_init(padapter);
647 if (status == _FAIL)
648 goto netdev_open_error;
649
650 pr_info("MAC Address = %pM\n", pnetdev->dev_addr);
651
652 status = rtw_start_drv_threads(padapter);
653 if (status == _FAIL) {
654 pr_info("Initialize driver software resource Failed!\n");
655 goto netdev_open_error;
656 }
657
658 if (init_hw_mlme_ext(padapter) == _FAIL) {
659 pr_info("can't init mlme_ext_priv\n");
660 goto netdev_open_error;
661 }
662 if (padapter->intf_start)
663 padapter->intf_start(padapter);
664
665 rtw_led_control(padapter, LED_CTL_NO_LINK);
666
667 padapter->bup = true;
668 }
669 padapter->net_closed = false;
670
671 _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
672
673 padapter->pwrctrlpriv.bips_processing = false;
674 rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
675
676 if (!rtw_netif_queue_stopped(pnetdev))
677 rtw_netif_start_queue(pnetdev);
678 else
679 rtw_netif_wake_queue(pnetdev);
680
681 netdev_br_init(pnetdev);
682
683netdev_open_normal_process:
684 DBG_88E("-88eu_drv - drv_open, bup =%d\n", padapter->bup);
685 return 0;
686
687netdev_open_error:
688 padapter->bup = false;
689 netif_carrier_off(pnetdev);
690 rtw_netif_stop_queue(pnetdev);
691 DBG_88E("-88eu_drv - drv_open fail, bup =%d\n", padapter->bup);
692 return -1;
693}
694
695int netdev_open(struct net_device *pnetdev)
696{
697 int ret;
698 struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
699
700 mutex_lock(padapter->hw_init_mutex);
701 ret = _netdev_open(pnetdev);
702 mutex_unlock(padapter->hw_init_mutex);
703 return ret;
704}
705
706static int ips_netdrv_open(struct adapter *padapter)
707{
708 int status = _SUCCESS;
709 padapter->net_closed = false;
710 DBG_88E("===> %s.........\n", __func__);
711
712 padapter->bDriverStopped = false;
713 padapter->bSurpriseRemoved = false;
714 padapter->bCardDisableWOHSM = false;
715
716 status = rtw_hal_init(padapter);
717 if (status == _FAIL)
718 goto netdev_open_error;
719
720 if (padapter->intf_start)
721 padapter->intf_start(padapter);
722
723 rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
724 _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 5000);
725
726 return _SUCCESS;
727
728netdev_open_error:
729 DBG_88E("-ips_netdrv_open - drv_open failure, bup =%d\n", padapter->bup);
730
731 return _FAIL;
732}
733
734int rtw_ips_pwr_up(struct adapter *padapter)
735{
736 int result;
737 u32 start_time = jiffies;
738 DBG_88E("===> rtw_ips_pwr_up..............\n");
739 rtw_reset_drv_sw(padapter);
740
741 result = ips_netdrv_open(padapter);
742
743 rtw_led_control(padapter, LED_CTL_NO_LINK);
744
745 DBG_88E("<=== rtw_ips_pwr_up.............. in %dms\n", rtw_get_passing_time_ms(start_time));
746 return result;
747}
748
749void rtw_ips_pwr_down(struct adapter *padapter)
750{
751 u32 start_time = jiffies;
752 DBG_88E("===> rtw_ips_pwr_down...................\n");
753
754 padapter->bCardDisableWOHSM = true;
755 padapter->net_closed = true;
756
757 rtw_led_control(padapter, LED_CTL_POWER_OFF);
758
759 rtw_ips_dev_unload(padapter);
760 padapter->bCardDisableWOHSM = false;
761 DBG_88E("<=== rtw_ips_pwr_down..................... in %dms\n", rtw_get_passing_time_ms(start_time));
762}
763
764void rtw_ips_dev_unload(struct adapter *padapter)
765{
766 DBG_88E("====> %s...\n", __func__);
767
768 SetHwReg8188EU(padapter, HW_VAR_FIFO_CLEARN_UP, NULL);
769
770 if (padapter->intf_stop)
771 padapter->intf_stop(padapter);
772
773
774 if (!padapter->bSurpriseRemoved)
775 rtw_hal_deinit(padapter);
776}
777
778int pm_netdev_open(struct net_device *pnetdev, u8 bnormal)
779{
780 int status;
781
782 if (bnormal)
783 status = netdev_open(pnetdev);
784 else
785 status = (_SUCCESS == ips_netdrv_open((struct adapter *)rtw_netdev_priv(pnetdev))) ? (0) : (-1);
786 return status;
787}
788
789int netdev_close(struct net_device *pnetdev)
790{
791 struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
792 struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
793
794 if (padapter->pwrctrlpriv.bInternalAutoSuspend) {
795 if (padapter->pwrctrlpriv.rf_pwrstate == rf_off)
796 padapter->pwrctrlpriv.ps_flag = true;
797 }
798 padapter->net_closed = true;
799
800 if (padapter->pwrctrlpriv.rf_pwrstate == rf_on) {
801 DBG_88E("(2)88eu_drv - drv_close, bup =%d, hw_init_completed =%d\n",
802 padapter->bup, padapter->hw_init_completed);
803
804
805 if (pnetdev) {
806 if (!rtw_netif_queue_stopped(pnetdev))
807 rtw_netif_stop_queue(pnetdev);
808 }
809
810
811 LeaveAllPowerSaveMode(padapter);
812 rtw_disassoc_cmd(padapter, 500, false);
813
814 rtw_indicate_disconnect(padapter);
815
816 rtw_free_assoc_resources(padapter, 1);
817
818 rtw_free_network_queue(padapter, true);
819
820 rtw_led_control(padapter, LED_CTL_POWER_OFF);
821 }
822
823 nat25_db_cleanup(padapter);
824
825 rtw_p2p_enable(padapter, P2P_ROLE_DISABLE);
826
827 kfree(dvobj->firmware.szFwBuffer);
828 dvobj->firmware.szFwBuffer = NULL;
829
830 DBG_88E("-88eu_drv - drv_close, bup =%d\n", padapter->bup);
831 return 0;
832}
833