DHD_TRACE(("%s: Enter\n", __FUNCTION__));
+ dhd_os_wake_lock(&dhd->pub);
+
/* Reject if down */
if (!dhd->pub.up || (dhd->pub.busstate == DHD_BUS_DOWN)) {
DHD_ERROR(("%s: xmit rejected pub.up=%d busstate=%d\n",
DHD_ERROR(("%s: Event HANG send up\n", __FUNCTION__));
wl_iw_send_priv_event(net, "HANG");
}
+ dhd_os_wake_unlock(&dhd->pub);
return -ENODEV;
}
if (ifidx == DHD_BAD_IF) {
DHD_ERROR(("%s: bad ifidx %d\n", __FUNCTION__, ifidx));
netif_stop_queue(net);
+ dhd_os_wake_unlock(&dhd->pub);
return -ENODEV;
}
ret = dhd_sendpkt(&dhd->pub, ifidx, pktbuf);
-
done:
if (ret)
dhd->pub.dstats.tx_dropped++;
else
dhd->pub.tx_packets++;
+ dhd_os_wake_unlock(&dhd->pub);
+
/* Return ok: we always eat the packet */
return 0;
}
uint driver = 0;
int ifidx;
bool is_set_key_cmd;
+ int ret;
+
+ dhd_os_wake_lock(&dhd->pub);
ifidx = dhd_net2idx(dhd, net);
DHD_TRACE(("%s: ifidx %d, cmd 0x%04x\n", __FUNCTION__, ifidx, cmd));
- if (ifidx == DHD_BAD_IF)
+ if (ifidx == DHD_BAD_IF) {
+ dhd_os_wake_unlock(&dhd->pub);
return -1;
+ }
#if defined(CONFIG_WIRELESS_EXT)
/* linux wireless extensions */
if ((cmd >= SIOCIWFIRST) && (cmd <= SIOCIWLAST)) {
/* may recurse, do NOT lock */
- return wl_iw_ioctl(net, ifr, cmd);
+ ret = wl_iw_ioctl(net, ifr, cmd);
+ dhd_os_wake_unlock(&dhd->pub);
+ return ret;
}
#endif /* defined(CONFIG_WIRELESS_EXT) */
#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 4, 2)
- if (cmd == SIOCETHTOOL)
- return (dhd_ethtool(dhd, (void*)ifr->ifr_data));
+ if (cmd == SIOCETHTOOL) {
+ ret = dhd_ethtool(dhd, (void*)ifr->ifr_data);
+ dhd_os_wake_unlock(&dhd->pub);
+ return ret;
+ }
#endif /* LINUX_VERSION_CODE > KERNEL_VERSION(2, 4, 2) */
- if (cmd != SIOCDEVPRIVATE)
+ if (cmd != SIOCDEVPRIVATE) {
+ dhd_os_wake_unlock(&dhd->pub);
return -EOPNOTSUPP;
+ }
memset(&ioc, 0, sizeof(ioc));
if (buf)
MFREE(dhd->pub.osh, buf, buflen);
+ dhd_os_wake_unlock(&dhd->pub);
+
return OSL_ERROR(bcmerror);
}
return ret;
}
+ net_os_wake_lock(dev);
+
WL_TRACE(("%s, PID:%x: send Local IOCTL -> dhd: cmd:0x%x, buf:%p, len:%d ,\n",
__FUNCTION__, current->pid, cmd, arg, len));
ret = dev_open(dev);
if (ret) {
WL_ERROR(("%s: Error dev_open: %d\n", __func__, ret));
+ net_os_wake_unlock(dev);
return ret;
}
else {
WL_TRACE(("%s: call after driver stop\n", __FUNCTION__));
}
+
+ net_os_wake_unlock(dev);
+
return ret;
}
strcpy(extra, flag);
wrqu.data.length = strlen(extra);
wireless_send_event(dev, cmd, &wrqu, extra);
+ net_os_wake_lock_timeout_enable(dev);
WL_TRACE(("Send IWEVCUSTOM Event as %s\n", extra));
return 0;
dhd_customer_gpio_wlan_ctrl(WLAN_RESET_OFF);
wl_iw_send_priv_event(dev, "STOP");
-
- net_os_wake_lock_timeout_enable(dev);
}
mutex_unlock(&wl_start_lock);
wl_iw_iscan_set_scan_broadcast_prep(dev, 0);
#endif
- net_os_wake_lock_timeout_enable(dev);
-
WL_TRACE(("Exited %s \n", __FUNCTION__));
return ret;
status = WL_SCAN_RESULTS_PARTIAL;
while (down_interruptible(&iscan->sysioc_sem) == 0) {
+ net_os_wake_lock(iscan->dev);
+
#if defined(SOFTAP)
if (ap_cfg_running) {
WL_TRACE(("%s skipping SCAN ops in AP mode !!!\n", __FUNCTION__));
+ net_os_wake_unlock(iscan->dev);
continue;
}
#endif
- net_os_wake_lock(iscan->dev);
if (iscan->timer_on) {
iscan->timer_on = 0;
return -1;
}
- net_os_wake_lock(dev);
+ net_os_wake_lock(dev);
WL_SOFTAP(("wl_iw: set ap profile:\n"));
WL_SOFTAP((" ssid = '%s'\n", ap->ssid));
fail:
WL_SOFTAP(("%s exit with %d\n", __FUNCTION__, res));
- net_os_wake_unlock(dev);
+ net_os_wake_unlock(dev);
- return res;
+ return res;
}
return res;
}
- net_os_wake_lock(dev);
+ net_os_wake_lock(dev);
if ((ap_cfg_running == TRUE)) {
- wl_iw_softap_deassoc_stations(ap_net_dev);
+ wl_iw_softap_deassoc_stations(ap_net_dev);
if ((res = dev_iw_write_cfg1_bss_var(dev, 2)) < 0)
WL_ERROR(("%s failed to del BSS err = %d", __FUNCTION__, res));
WL_SOFTAP(("%s Done with %d\n", __FUNCTION__, res));
- net_os_wake_unlock(dev);
+ net_os_wake_unlock(dev);
- return res;
+ return res;
}
return -1;
}
- net_os_wake_lock(dev);
+ net_os_wake_lock(dev);
WL_TRACE(("%s: rcvd IWPRIV IOCTL: for dev:%s\n", __FUNCTION__, dev->name));
WL_SOFTAP(("%s done with res %d \n", __FUNCTION__, res));
- net_os_wake_unlock(dev);
+ net_os_wake_unlock(dev);
return res;
}
char *extra = NULL;
int token_size = 1, max_tokens = 0, ret = 0;
+ net_os_wake_lock(dev);
+
WL_TRACE(("%s: cmd:%x alled via dhd->do_ioctl()entry point\n", __FUNCTION__, cmd));
if (cmd < SIOCIWFIRST ||
IW_IOCTL_IDX(cmd) >= ARRAYSIZE(wl_iw_handler) ||
!(handler = wl_iw_handler[IW_IOCTL_IDX(cmd)])) {
WL_ERROR(("%s: error in cmd=%x : not supported\n", __FUNCTION__, cmd));
+ net_os_wake_unlock(dev);
return -EOPNOTSUPP;
}
if (wrq->u.data.length > max_tokens) {
WL_ERROR(("%s: error in cmd=%x wrq->u.data.length=%d > max_tokens=%d\n", \
__FUNCTION__, cmd, wrq->u.data.length, max_tokens));
- return -E2BIG;
+ ret = -E2BIG;
+ goto wl_iw_ioctl_done;
+ }
+ if (!(extra = kmalloc(max_tokens * token_size, GFP_KERNEL))) {
+ ret = -ENOMEM;
+ goto wl_iw_ioctl_done;
}
- if (!(extra = kmalloc(max_tokens * token_size, GFP_KERNEL)))
- return -ENOMEM;
if (copy_from_user(extra, wrq->u.data.pointer, wrq->u.data.length * token_size)) {
kfree(extra);
- return -EFAULT;
+ ret = -EFAULT;
+ goto wl_iw_ioctl_done;
}
}
if (extra) {
if (copy_to_user(wrq->u.data.pointer, extra, wrq->u.data.length * token_size)) {
kfree(extra);
- return -EFAULT;
+ ret = -EFAULT;
+ goto wl_iw_ioctl_done;
}
kfree(extra);
}
+wl_iw_ioctl_done:
+
+ net_os_wake_unlock(dev);
+
return ret;
}
return;
}
- net_os_wake_lock(dev);
+ net_os_wake_lock(dev);
WL_TRACE(("%s: dev=%s event=%d \n", __FUNCTION__, dev->name, event_type));
bzero(wrqu.addr.sa_data, ETHER_ADDR_LEN);
bzero(&extra, ETHER_ADDR_LEN);
- net_os_wake_lock_timeout_enable(dev);
}
else {
memcpy(wrqu.addr.sa_data, &e->addr, ETHER_ADDR_LEN);
WL_TRACE(("Link UP\n"));
}
+ net_os_wake_lock_timeout_enable(dev);
wrqu.addr.sa_family = ARPHRD_ETHER;
break;
case WLC_E_ACTION_FRAME:
}
#endif
wl_iw_event_end:
- net_os_wake_unlock(dev);
-#endif
+ net_os_wake_unlock(dev);
+#endif
}
int wl_iw_get_wireless_stats(struct net_device *dev, struct iw_statistics *wstats)
g_bt->bt_state = BT_DHCP_IDLE;
g_bt->timer_on = 0;
break;
- }
+ }
net_os_wake_unlock(g_bt->dev);
}