These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / staging / rtl8188eu / os_dep / os_intfs.c
index 750c87b..d063d02 100644 (file)
@@ -41,7 +41,8 @@ MODULE_VERSION(DRIVERVERSION);
 static int rtw_chip_version;
 static int rtw_rfintfs = HWPI;
 static int rtw_lbkmode;/* RTL8712_AIR_TRX; */
-static int rtw_network_mode = Ndis802_11IBSS;/* Ndis802_11Infrastructure; infra, ad-hoc, auto */
+/* Ndis802_11Infrastructure; infra, ad-hoc, auto */
+static int rtw_network_mode = Ndis802_11IBSS;
 static int rtw_channel = 1;/* ad-hoc support requirement */
 static int rtw_wireless_mode = WIRELESS_11BG_24N;
 static int rtw_vrtl_carrier_sense = AUTO_VCS;
@@ -81,21 +82,37 @@ static int rtw_uapsd_acvi_en;
 static int rtw_uapsd_acvo_en;
 
 static int rtw_ht_enable = 1;
-static int rtw_cbw40_enable = 3; /*  0 :disable, bit(0): enable 2.4g, bit(1): enable 5g */
+/* 0 :disable, bit(0): enable 2.4g, bit(1): enable 5g */
+static int rtw_cbw40_enable = 3;
 static int rtw_ampdu_enable = 1;/* for enable tx_ampdu */
-static 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 */
+
+/* 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
+ */
+static int rtw_rx_stbc = 1;
 static int rtw_ampdu_amsdu;/*  0: disabled, 1:enabled, 2:auto */
 
-static int rtw_lowrate_two_xmit = 1;/* Use 2 path Tx to transmit MCS0~7 and legacy mode */
+/* Use 2 path Tx to transmit MCS0~7 and legacy mode */
+static int rtw_lowrate_two_xmit = 1;
 
 static int rtw_rf_config = RF_819X_MAX_TYPE;  /* auto */
 static int rtw_low_power;
 static int rtw_wifi_spec;
 static int rtw_channel_plan = RT_CHANNEL_DOMAIN_MAX;
-static int rtw_AcceptAddbaReq = true;/*  0:Reject AP's Add BA req, 1:Accept AP's Add BA req. */
+/* 0:Reject AP's Add BA req, 1:Accept AP's Add BA req. */
+static int rtw_AcceptAddbaReq = true;
 
 static int rtw_antdiv_cfg = 2; /*  0:OFF , 1:ON, 2:decide by Efuse config */
-static int rtw_antdiv_type; /* 0:decide by efuse  1: for 88EE, 1Tx and 1RxCG are diversity.(2 Ant with SPDT), 2:  for 88EE, 1Tx and 2Rx are diversity.(2 Ant, Tx and RxCG are both on aux port, RxCS is on main port), 3: for 88EE, 1Tx and 1RxCG are fixed.(1Ant, Tx and RxCG are both on aux port) */
+
+/* 0: decide by efuse
+ * 1: for 88EE, 1Tx and 1RxCG are diversity (2 Ant with SPDT)
+ * 2: for 88EE, 1Tx and 2Rx are diversity (2 Ant, Tx and RxCG are both on aux
+ *    port, RxCS is on main port)
+ * 3: for 88EE, 1Tx and 1RxCG are fixed (1Ant, Tx and RxCG are both on aux port)
+ */
+static int rtw_antdiv_type;
 
 static int rtw_enusbss;/* 0:disable, 1:enable */
 
@@ -117,7 +134,8 @@ static char *if2name = "wlan%d";
 module_param(if2name, charp, 0644);
 MODULE_PARM_DESC(if2name, "The default name to allocate for second interface");
 
-char *rtw_initmac;  /*  temp mac address if users want to use instead of the mac address in Efuse */
+/* temp mac address if users want to use instead of the mac address in Efuse */
+char *rtw_initmac;
 
 module_param(rtw_initmac, charp, 0644);
 module_param(rtw_channel_plan, int, 0644);
@@ -167,17 +185,24 @@ MODULE_PARM_DESC(rtw_notch_filter, "0:Disable, 1:Enable, 2:Enable only for P2P")
 module_param_named(debug, rtw_debug, int, 0444);
 MODULE_PARM_DESC(debug, "Set debug level (1-9) (default 1)");
 
+static bool rtw_monitor_enable;
+module_param_named(monitor_enable, rtw_monitor_enable, bool, 0444);
+MODULE_PARM_DESC(monitor_enable, "Enable monitor inferface (default: false)");
+
+static int netdev_open(struct net_device *pnetdev);
+static int netdev_close(struct net_device *pnetdev);
+
 /* dummy routines */
 void rtw_proc_remove_one(struct net_device *dev)
 {
 }
 
-void rtw_proc_init_one(struct net_device *dev)
+static void rtw_proc_init_one(struct net_device *dev)
 {
 }
 
 #if 0  /* TODO: Convert these to /sys */
-void rtw_proc_init_one(struct net_device *dev)
+static void rtw_proc_init_one(struct net_device *dev)
 {
        struct proc_dir_entry *dir_dev = NULL;
        struct proc_dir_entry *entry = NULL;
@@ -187,13 +212,16 @@ void rtw_proc_init_one(struct net_device *dev)
        if (rtw_proc == NULL) {
                memcpy(rtw_proc_name, DRV_NAME, sizeof(DRV_NAME));
 
-               rtw_proc = create_proc_entry(rtw_proc_name, S_IFDIR, init_net.proc_net);
+               rtw_proc = create_proc_entry(rtw_proc_name, S_IFDIR,
+                                            init_net.proc_net);
                if (rtw_proc == NULL) {
                        DBG_88E(KERN_ERR "Unable to create rtw_proc directory\n");
                        return;
                }
 
-               entry = create_proc_read_entry("ver_info", S_IFREG | S_IRUGO, rtw_proc, proc_get_drv_version, dev);
+               entry = create_proc_read_entry("ver_info", S_IFREG | S_IRUGO,
+                                              rtw_proc, proc_get_drv_version,
+                                              dev);
                if (!entry) {
                        pr_info("Unable to create_proc_read_entry!\n");
                        return;
@@ -206,11 +234,9 @@ void rtw_proc_init_one(struct net_device *dev)
                                          rtw_proc);
                dir_dev = padapter->dir_dev;
                if (dir_dev == NULL) {
-                       if (rtw_proc_cnt == 0) {
-                               if (rtw_proc) {
-                                       remove_proc_entry(rtw_proc_name, init_net.proc_net);
-                                       rtw_proc = NULL;
-                               }
+                       if (rtw_proc_cnt == 0 && rtw_proc) {
+                               remove_proc_entry(rtw_proc_name, init_net.proc_net);
+                               rtw_proc = NULL;
                        }
 
                        pr_info("Unable to create dir_dev directory\n");
@@ -360,15 +386,17 @@ void rtw_proc_init_one(struct net_device *dev)
 
        rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
        if ((RF_1T2R == rf_type) || (RF_1T1R == rf_type)) {
-               entry = create_proc_read_entry("rf_reg_dump3", S_IFREG | S_IRUGO,
-                                          dir_dev, proc_get_rf_reg_dump3, dev);
+               entry = create_proc_read_entry("rf_reg_dump3",
+                                              S_IFREG | S_IRUGO, dir_dev,
+                                              proc_get_rf_reg_dump3, dev);
                if (!entry) {
                        pr_info("Unable to create_proc_read_entry!\n");
                        return;
                }
 
-               entry = create_proc_read_entry("rf_reg_dump4", S_IFREG | S_IRUGO,
-                                          dir_dev, proc_get_rf_reg_dump4, dev);
+               entry = create_proc_read_entry("rf_reg_dump4",
+                                              S_IFREG | S_IRUGO, dir_dev,
+                                              proc_get_rf_reg_dump4, dev);
                if (!entry) {
                        pr_info("Unable to create_proc_read_entry!\n");
                        return;
@@ -510,11 +538,10 @@ void rtw_proc_remove_one(struct net_device *dev)
 }
 #endif
 
-static uint loadparam(struct adapter *padapter,  struct  net_device *pnetdev)
+static void loadparam(struct adapter *padapter, struct net_device *pnetdev)
 {
        struct registry_priv  *registry_par = &padapter->registrypriv;
 
-
        GlobalDebugLevel = rtw_debug;
        registry_par->chip_version = (u8)rtw_chip_version;
        registry_par->rfintfs = (u8)rtw_rfintfs;
@@ -569,8 +596,8 @@ static uint loadparam(struct adapter *padapter,  struct  net_device *pnetdev)
        registry_par->bAcceptAddbaReq = (u8)rtw_AcceptAddbaReq;
        registry_par->antdiv_cfg = (u8)rtw_antdiv_cfg;
        registry_par->antdiv_type = (u8)rtw_antdiv_type;
-       registry_par->hwpdn_mode = (u8)rtw_hwpdn_mode;/* 0:disable, 1:enable, 2:by EFUSE config */
-       registry_par->hwpwrp_detect = (u8)rtw_hwpwrp_detect;/* 0:disable, 1:enable */
+       registry_par->hwpdn_mode = (u8)rtw_hwpdn_mode;
+       registry_par->hwpwrp_detect = (u8)rtw_hwpwrp_detect;
        registry_par->hw_wps_pbc = (u8)rtw_hw_wps_pbc;
 
        registry_par->max_roaming_times = (u8)rtw_max_roaming_times;
@@ -581,7 +608,7 @@ static uint loadparam(struct adapter *padapter,  struct  net_device *pnetdev)
        snprintf(registry_par->ifname, 16, "%s", ifname);
        snprintf(registry_par->if2name, 16, "%s", if2name);
        registry_par->notch_filter = (u8)rtw_notch_filter;
-       return _SUCCESS;
+       registry_par->monitor_enable = rtw_monitor_enable;
 }
 
 static int rtw_net_set_mac_address(struct net_device *pnetdev, void *p)
@@ -601,8 +628,8 @@ static struct net_device_stats *rtw_net_get_stats(struct net_device *pnetdev)
        struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
        struct recv_priv *precvpriv = &(padapter->recvpriv);
 
-       padapter->stats.tx_packets = pxmitpriv->tx_pkts;/* pxmitpriv->tx_pkts++; */
-       padapter->stats.rx_packets = precvpriv->rx_pkts;/* precvpriv->rx_pkts++; */
+       padapter->stats.tx_packets = pxmitpriv->tx_pkts;
+       padapter->stats.rx_packets = precvpriv->rx_pkts;
        padapter->stats.tx_dropped = pxmitpriv->tx_drop;
        padapter->stats.rx_dropped = precvpriv->rx_drop;
        padapter->stats.tx_bytes = pxmitpriv->tx_bytes;
@@ -725,32 +752,33 @@ struct net_device *rtw_init_netdev(struct adapter *old_padapter)
        pnetdev->watchdog_timeo = HZ*3; /* 3 second timeout */
        pnetdev->wireless_handlers = (struct iw_handler_def *)&rtw_handlers_def;
 
-       /* step 2. */
        loadparam(padapter, pnetdev);
 
        return pnetdev;
 }
 
-u32 rtw_start_drv_threads(struct adapter *padapter)
+static int rtw_start_drv_threads(struct adapter *padapter)
 {
-       u32 _status = _SUCCESS;
+       int err = 0;
 
        RT_TRACE(_module_os_intfs_c_, _drv_info_, ("+rtw_start_drv_threads\n"));
 
-       padapter->cmdThread = kthread_run(rtw_cmd_thread, padapter, "RTW_CMD_THREAD");
+       padapter->cmdThread = kthread_run(rtw_cmd_thread, padapter,
+                                         "RTW_CMD_THREAD");
        if (IS_ERR(padapter->cmdThread))
-               _status = _FAIL;
+               err = PTR_ERR(padapter->cmdThread);
        else
-               _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema); /* wait for cmd_thread to run */
+               /* wait for cmd_thread to run */
+               _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema);
 
-       return _status;
+       return err;
 }
 
 void rtw_stop_drv_threads(struct adapter *padapter)
 {
        RT_TRACE(_module_os_intfs_c_, _drv_info_, ("+rtw_stop_drv_threads\n"));
 
-       /* Below is to termindate rtw_cmd_thread & event_thread... */
+       /* Below is to terminate rtw_cmd_thread & event_thread... */
        up(&padapter->cmdpriv.cmd_queue_sema);
        if (padapter->cmdThread)
                _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema);
@@ -781,7 +809,7 @@ static u8 rtw_init_default_value(struct adapter *padapter)
        psecuritypriv->binstallGrpkey = _FAIL;
        psecuritypriv->sw_encrypt = pregistrypriv->software_encrypt;
        psecuritypriv->sw_decrypt = pregistrypriv->software_decrypt;
-       psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open; /* open system */
+       psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open;
        psecuritypriv->dot11PrivacyAlgrthm = _NO_PRIVACY_;
        psecuritypriv->dot11PrivacyKeyIndex = 0;
        psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
@@ -931,7 +959,8 @@ u8 rtw_free_drv_sw(struct adapter *padapter)
        rtw_free_mlme_priv(&padapter->mlmepriv);
        _rtw_free_xmit_priv(&padapter->xmitpriv);
 
-       _rtw_free_sta_priv(&padapter->stapriv); /* will free bcmc_stainfo here */
+       /* will free bcmc_stainfo here */
+       _rtw_free_sta_priv(&padapter->stapriv);
 
        _rtw_free_recv_priv(&padapter->recvpriv);
 
@@ -952,9 +981,10 @@ u8 rtw_free_drv_sw(struct adapter *padapter)
        return _SUCCESS;
 }
 
-int _netdev_open(struct net_device *pnetdev)
+static int _netdev_open(struct net_device *pnetdev)
 {
        uint status;
+       int err;
        struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
        struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
 
@@ -978,8 +1008,8 @@ int _netdev_open(struct net_device *pnetdev)
 
                pr_info("MAC Address = %pM\n", pnetdev->dev_addr);
 
-               status = rtw_start_drv_threads(padapter);
-               if (status == _FAIL) {
+               err = rtw_start_drv_threads(padapter);
+               if (err) {
                        pr_info("Initialize driver software resource Failed!\n");
                        goto netdev_open_error;
                }
@@ -1023,12 +1053,13 @@ netdev_open_error:
        return -1;
 }
 
-int netdev_open(struct net_device *pnetdev)
+static int netdev_open(struct net_device *pnetdev)
 {
        int ret;
        struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
 
-       _enter_critical_mutex(&padapter->hw_init_mutex, NULL);
+       if (mutex_lock_interruptible(&padapter->hw_init_mutex))
+               return -ERESTARTSYS;
        ret = _netdev_open(pnetdev);
        mutex_unlock(&padapter->hw_init_mutex);
        return ret;
@@ -1037,6 +1068,7 @@ int netdev_open(struct net_device *pnetdev)
 static int  ips_netdrv_open(struct adapter *padapter)
 {
        int status = _SUCCESS;
+
        padapter->net_closed = false;
        DBG_88E("===> %s.........\n", __func__);
 
@@ -1069,6 +1101,7 @@ int rtw_ips_pwr_up(struct adapter *padapter)
 {
        int result;
        u32 start_time = jiffies;
+
        DBG_88E("===>  rtw_ips_pwr_up..............\n");
        rtw_reset_drv_sw(padapter);
 
@@ -1083,6 +1116,7 @@ int rtw_ips_pwr_up(struct adapter *padapter)
 void rtw_ips_pwr_down(struct adapter *padapter)
 {
        u32 start_time = jiffies;
+
        DBG_88E("===> rtw_ips_pwr_down...................\n");
 
        padapter->net_closed = true;
@@ -1118,7 +1152,7 @@ int pm_netdev_open(struct net_device *pnetdev, u8 bnormal)
        return status;
 }
 
-int netdev_close(struct net_device *pnetdev)
+static int netdev_close(struct net_device *pnetdev)
 {
        struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
        struct hal_data_8188e *rtlhal = GET_HAL_DATA(padapter);
@@ -1147,7 +1181,7 @@ int netdev_close(struct net_device *pnetdev)
                /* s2-2.  indicate disconnect to os */
                rtw_indicate_disconnect(padapter);
                /* s2-3. */
-               rtw_free_assoc_resources(padapter, 1);
+               rtw_free_assoc_resources(padapter);
                /* s2-4. */
                rtw_free_network_queue(padapter, true);
                /*  Close LED */