diff options
Diffstat (limited to 'drivers/staging/rtl8712/os_intfs.c')
-rw-r--r-- | drivers/staging/rtl8712/os_intfs.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/staging/rtl8712/os_intfs.c b/drivers/staging/rtl8712/os_intfs.c index 9a75c6dbe50..98a3d684f9b 100644 --- a/drivers/staging/rtl8712/os_intfs.c +++ b/drivers/staging/rtl8712/os_intfs.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/module.h> | 31 | #include <linux/module.h> |
32 | #include <linux/init.h> | 32 | #include <linux/init.h> |
33 | #include <linux/kthread.h> | 33 | #include <linux/kthread.h> |
34 | #include <linux/firmware.h> | ||
34 | #include "osdep_service.h" | 35 | #include "osdep_service.h" |
35 | #include "drv_types.h" | 36 | #include "drv_types.h" |
36 | #include "xmit_osdep.h" | 37 | #include "xmit_osdep.h" |
@@ -264,12 +265,12 @@ static void start_drv_timers(struct _adapter *padapter) | |||
264 | void r8712_stop_drv_timers(struct _adapter *padapter) | 265 | void r8712_stop_drv_timers(struct _adapter *padapter) |
265 | { | 266 | { |
266 | _cancel_timer_ex(&padapter->mlmepriv.assoc_timer); | 267 | _cancel_timer_ex(&padapter->mlmepriv.assoc_timer); |
267 | _cancel_timer_ex(&padapter->mlmepriv.sitesurveyctrl. | ||
268 | sitesurvey_ctrl_timer); | ||
269 | _cancel_timer_ex(&padapter->securitypriv.tkip_timer); | 268 | _cancel_timer_ex(&padapter->securitypriv.tkip_timer); |
270 | _cancel_timer_ex(&padapter->mlmepriv.scan_to_timer); | 269 | _cancel_timer_ex(&padapter->mlmepriv.scan_to_timer); |
271 | _cancel_timer_ex(&padapter->mlmepriv.dhcp_timer); | 270 | _cancel_timer_ex(&padapter->mlmepriv.dhcp_timer); |
272 | _cancel_timer_ex(&padapter->mlmepriv.wdg_timer); | 271 | _cancel_timer_ex(&padapter->mlmepriv.wdg_timer); |
272 | _cancel_timer_ex(&padapter->mlmepriv.sitesurveyctrl. | ||
273 | sitesurvey_ctrl_timer); | ||
273 | } | 274 | } |
274 | 275 | ||
275 | static u8 init_default_value(struct _adapter *padapter) | 276 | static u8 init_default_value(struct _adapter *padapter) |
@@ -347,7 +348,8 @@ u8 r8712_free_drv_sw(struct _adapter *padapter) | |||
347 | r8712_free_mlme_priv(&padapter->mlmepriv); | 348 | r8712_free_mlme_priv(&padapter->mlmepriv); |
348 | r8712_free_io_queue(padapter); | 349 | r8712_free_io_queue(padapter); |
349 | _free_xmit_priv(&padapter->xmitpriv); | 350 | _free_xmit_priv(&padapter->xmitpriv); |
350 | _r8712_free_sta_priv(&padapter->stapriv); | 351 | if (padapter->fw_found) |
352 | _r8712_free_sta_priv(&padapter->stapriv); | ||
351 | _r8712_free_recv_priv(&padapter->recvpriv); | 353 | _r8712_free_recv_priv(&padapter->recvpriv); |
352 | mp871xdeinit(padapter); | 354 | mp871xdeinit(padapter); |
353 | if (pnetdev) | 355 | if (pnetdev) |
@@ -388,6 +390,7 @@ static int netdev_open(struct net_device *pnetdev) | |||
388 | { | 390 | { |
389 | struct _adapter *padapter = (struct _adapter *)netdev_priv(pnetdev); | 391 | struct _adapter *padapter = (struct _adapter *)netdev_priv(pnetdev); |
390 | 392 | ||
393 | mutex_lock(&padapter->mutex_start); | ||
391 | if (padapter->bup == false) { | 394 | if (padapter->bup == false) { |
392 | padapter->bDriverStopped = false; | 395 | padapter->bDriverStopped = false; |
393 | padapter->bSurpriseRemoved = false; | 396 | padapter->bSurpriseRemoved = false; |
@@ -435,11 +438,13 @@ static int netdev_open(struct net_device *pnetdev) | |||
435 | /* start driver mlme relation timer */ | 438 | /* start driver mlme relation timer */ |
436 | start_drv_timers(padapter); | 439 | start_drv_timers(padapter); |
437 | padapter->ledpriv.LedControlHandler(padapter, LED_CTL_NO_LINK); | 440 | padapter->ledpriv.LedControlHandler(padapter, LED_CTL_NO_LINK); |
441 | mutex_unlock(&padapter->mutex_start); | ||
438 | return 0; | 442 | return 0; |
439 | netdev_open_error: | 443 | netdev_open_error: |
440 | padapter->bup = false; | 444 | padapter->bup = false; |
441 | netif_carrier_off(pnetdev); | 445 | netif_carrier_off(pnetdev); |
442 | netif_stop_queue(pnetdev); | 446 | netif_stop_queue(pnetdev); |
447 | mutex_unlock(&padapter->mutex_start); | ||
443 | return -1; | 448 | return -1; |
444 | } | 449 | } |
445 | 450 | ||
@@ -473,6 +478,9 @@ static int netdev_close(struct net_device *pnetdev) | |||
473 | r8712_free_network_queue(padapter); | 478 | r8712_free_network_queue(padapter); |
474 | /* The interface is no longer Up: */ | 479 | /* The interface is no longer Up: */ |
475 | padapter->bup = false; | 480 | padapter->bup = false; |
481 | release_firmware(padapter->fw); | ||
482 | /* never exit with a firmware callback pending */ | ||
483 | wait_for_completion(&padapter->rtl8712_fw_ready); | ||
476 | return 0; | 484 | return 0; |
477 | } | 485 | } |
478 | 486 | ||