spin_lock_init(&priv->irq_th_lock);
        spin_lock_init(&priv->rf_ps_lock);
        spin_lock_init(&priv->ps_lock);
-       sema_init(&priv->wx_sem, 1);
+       mutex_init(&priv->wx_mutex);
        sema_init(&priv->rf_sem, 1);
        mutex_init(&priv->mutex);
 }
 
 RESET_START:
 
-               down(&priv->wx_sem);
+               mutex_lock(&priv->wx_mutex);
 
                if (priv->rtllib->state == RTLLIB_LINKED)
                        rtl92e_leisure_ps_leave(dev);
                if (priv->up) {
                        netdev_info(dev, "%s():the driver is not up.\n",
                                    __func__);
-                       up(&priv->wx_sem);
+                       mutex_unlock(&priv->wx_mutex);
                        return;
                }
                priv->up = 0;
 
                rtl92e_dm_backup_state(dev);
 
-               up(&priv->wx_sem);
+               mutex_unlock(&priv->wx_mutex);
                RT_TRACE(COMP_RESET,
                         "%s():<==========down process is finished\n",
                         __func__);
        struct r8192_priv *priv = rtllib_priv(dev);
        int ret;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        ret = _rtl92e_try_up(dev);
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 
 }
                rtllib_stop_scan(priv->rtllib);
        }
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = _rtl92e_down(dev, true);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 
                                  reset_wq);
        struct net_device *dev = priv->rtllib->dev;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        rtl92e_commit(dev);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 }
 
 static void _rtl92e_set_multicast(struct net_device *dev)
        struct r8192_priv *priv = rtllib_priv(dev);
        struct sockaddr *addr = mac;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ether_addr_copy(dev->dev_addr, addr->sa_data);
 
        schedule_work(&priv->reset_wq);
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return 0;
 }
        struct iw_point *p = &wrq->u.data;
        struct ieee_param *ipw = NULL;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        switch (cmd) {
        case RTL_IOCTL_WPA_SUPPLICANT:
        }
 
 out:
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 }
 
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_set_rate(priv->rtllib, info, wrqu, extra);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 }
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_set_rts(priv->rtllib, info, wrqu, extra);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 }
                            __func__);
                return 0;
        }
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_set_power(priv->rtllib, info, wrqu, extra);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 }
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_set_rawtx(priv->rtllib, info, wrqu, extra);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        RT_TRACE(COMP_DBG, "%s(): force reset ! extra is %d\n",
                 __func__, *extra);
        priv->force_reset = *extra;
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return 0;
 
 }
                                        (&(priv->rtllib->PowerSaveControl));
        struct rtllib_device *ieee = priv->rtllib;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        RT_TRACE(COMP_POWER, "%s(): %s\n", __func__, (*extra == 6) ?
                 "DC power" : "AC power");
                ieee->ps = *extra;
        }
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return 0;
 }
        struct rt_pwr_save_ctrl *pPSC = (struct rt_pwr_save_ctrl *)
                                        (&(priv->rtllib->PowerSaveControl));
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        netdev_info(dev, "%s(): set lps awake interval ! extra is %d\n",
                    __func__, *extra);
 
        pPSC->RegMaxLPSAwakeIntvl = *extra;
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return 0;
 }
 
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        netdev_info(dev,
                    "%s(): force LPS ! extra is %d (1 is open 0 is close)\n",
                    __func__, *extra);
        priv->force_lps = *extra;
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return 0;
 
 }
        if (priv->bHwRadioOff)
                return 0;
        rtState = priv->rtllib->eRFPowerState;
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        if (wrqu->mode == IW_MODE_ADHOC || wrqu->mode == IW_MODE_MONITOR ||
            ieee->bNetPromiscuousMode) {
                if (priv->rtllib->PowerSaveControl.bInactivePs) {
                                    RF_CHANGE_BY_IPS) {
                                        netdev_warn(dev, "%s(): RF is OFF.\n",
                                                    __func__);
-                                       up(&priv->wx_sem);
+                                       mutex_unlock(&priv->wx_mutex);
                                        return -1;
                                }
                                netdev_info(dev,
        }
        ret = rtllib_wx_set_mode(priv->rtllib, a, wrqu, b);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 }
 
                }
        }
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        priv->rtllib->FirstIe_InScan = true;
 
                                    RF_CHANGE_BY_IPS) {
                                        netdev_warn(dev, "%s(): RF is OFF.\n",
                                                    __func__);
-                                       up(&priv->wx_sem);
+                                       mutex_unlock(&priv->wx_mutex);
                                        return -1;
                                }
                                RT_TRACE(COMP_PS,
                ret = rtllib_wx_set_scan(priv->rtllib, a, wrqu, b);
        }
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 }
 
                return 0;
 
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_get_scan(priv->rtllib, a, wrqu, b);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 }
                            __func__);
                return 0;
        }
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        ret = rtllib_wx_set_essid(priv->rtllib, a, wrqu, b);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 }
        int ret;
        struct r8192_priv *priv = rtllib_priv(dev);
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_get_essid(priv->rtllib, a, wrqu, b);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 }
 
        if (wrqu->data.length > IW_ESSID_MAX_SIZE)
                return -E2BIG;
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        wrqu->data.length = min_t(size_t, wrqu->data.length,
                                  sizeof(priv->nick));
        memset(priv->nick, 0, sizeof(priv->nick));
        memcpy(priv->nick, extra, wrqu->data.length);
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return 0;
 
 }
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        wrqu->data.length = strlen(priv->nick);
        memcpy(extra, priv->nick, wrqu->data.length);
        wrqu->data.flags = 1;   /* active */
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return 0;
 }
 
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_set_freq(priv->rtllib, a, wrqu, b);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 }
 
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_set_wap(priv->rtllib, info, awrq, extra);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 
        down(&priv->rtllib->ips_sem);
        rtl92e_ips_leave(dev);
        up(&priv->rtllib->ips_sem);
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        RT_TRACE(COMP_SEC, "Setting SW wep key");
        ret = rtllib_wx_set_encode(priv->rtllib, info, wrqu, key);
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
 
        if (wrqu->encoding.flags & IW_ENCODE_DISABLED) {
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        if (wrqu->retry.flags & IW_RETRY_LIFETIME ||
            wrqu->retry.disabled) {
 
        rtl92e_commit(dev);
 exit:
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return err;
 }
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        if (priv->rf_set_sens == NULL) {
                err = -1; /* we have not this support for this radio */
                goto exit;
                err = -EINVAL;
 
 exit:
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return err;
 }
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        priv->rtllib->wx_set_enc = 1;
        down(&priv->rtllib->ips_sem);
 
 end_hw_sec:
        priv->rtllib->wx_set_enc = 0;
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 
 }
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        ret = rtllib_wx_set_auth(priv->rtllib, info, &(data->param), extra);
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 }
 
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        ret = rtllib_wx_set_mlme(priv->rtllib, info, wrqu, extra);
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 }
 
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        ret = rtllib_wx_set_gen_ie(priv->rtllib, extra, data->data.length);
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 }
 
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rtllib_device *ieee = priv->rtllib;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        snprintf(extra, 45, "PromiscuousMode:%d, FilterSrcSTAFrame:%d",
                 ieee->IntelPromiscuousModeInfo.bPromiscuousOn,
                 ieee->IntelPromiscuousModeInfo.bFilterSourceStationFrame);
        wrqu->data.length = strlen(extra) + 1;
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return 0;
 }