diff options
Diffstat (limited to 'drivers/staging/rtl8192e')
33 files changed, 1094 insertions, 3126 deletions
diff --git a/drivers/staging/rtl8192e/dot11d.c b/drivers/staging/rtl8192e/dot11d.c index 82c11caeee..d0b7332645 100644 --- a/drivers/staging/rtl8192e/dot11d.c +++ b/drivers/staging/rtl8192e/dot11d.c @@ -73,19 +73,16 @@ void dot11d_channel_map(u8 channel_plan, struct rtllib_device *ieee) for (i = 12; i <= 14; i++) GET_DOT11D_INFO(ieee)->channel_map[i] = 2; ieee->bss_start_channel = 10; - ieee->ibss_maxjoin_chal = 11; break; case COUNTRY_CODE_WORLD_WIDE_13: for (i = 12; i <= 13; i++) GET_DOT11D_INFO(ieee)->channel_map[i] = 2; ieee->bss_start_channel = 10; - ieee->ibss_maxjoin_chal = 11; break; default: ieee->bss_start_channel = 1; - ieee->ibss_maxjoin_chal = 14; break; } } diff --git a/drivers/staging/rtl8192e/rtl8192e/r8190P_def.h b/drivers/staging/rtl8192e/rtl8192e/r8190P_def.h index c229fd244a..8c85f1c866 100644 --- a/drivers/staging/rtl8192e/rtl8192e/r8190P_def.h +++ b/drivers/staging/rtl8192e/rtl8192e/r8190P_def.h @@ -11,8 +11,6 @@ #define MAX_SILENT_RESET_RX_SLOT_NUM 10 -#define RX_MPDU_QUEUE 0 - enum rtl819x_loopback { RTL819X_NO_LOOPBACK = 0, RTL819X_MAC_LOOPBACK = 1, diff --git a/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c b/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c index 58e90b7772..e93394c512 100644 --- a/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c +++ b/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c @@ -18,30 +18,6 @@ static int WDCAPARA_ADD[] = {EDCAPARA_BE, EDCAPARA_BK, EDCAPARA_VI, EDCAPARA_VO}; -void rtl92e_start_beacon(struct net_device *dev) -{ - struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); - struct rtllib_network *net = &priv->rtllib->current_network; - u16 BcnTimeCfg = 0; - u16 BcnCW = 6; - u16 BcnIFS = 0xf; - - rtl92e_irq_disable(dev); - - rtl92e_writew(dev, ATIMWND, 2); - - rtl92e_writew(dev, BCN_INTERVAL, net->beacon_interval); - rtl92e_writew(dev, BCN_DRV_EARLY_INT, 10); - rtl92e_writew(dev, BCN_DMATIME, 256); - - rtl92e_writeb(dev, BCN_ERR_THRESH, 100); - - BcnTimeCfg |= BcnCW << BCN_TCFG_CW_SHIFT; - BcnTimeCfg |= BcnIFS << BCN_TCFG_IFS; - rtl92e_writew(dev, BCN_TCFG, BcnTimeCfg); - rtl92e_irq_enable(dev); -} - static void _rtl92e_update_msr(struct net_device *dev) { struct r8192_priv *priv = rtllib_priv(dev); @@ -55,10 +31,6 @@ static void _rtl92e_update_msr(struct net_device *dev) if (priv->rtllib->link_state == MAC80211_LINKED) msr |= MSR_LINK_MANAGED; break; - case IW_MODE_ADHOC: - if (priv->rtllib->link_state == MAC80211_LINKED) - msr |= MSR_LINK_ADHOC; - break; default: break; } @@ -513,10 +485,10 @@ bool rtl92e_start_adapter(struct net_device *dev) start: rtl92e_reset_desc_ring(dev); priv->rf_mode = RF_OP_By_SW_3wire; - if (priv->rst_progress == RESET_TYPE_NORESET) { - rtl92e_writeb(dev, ANAPAR, 0x37); - mdelay(500); - } + + rtl92e_writeb(dev, ANAPAR, 0x37); + mdelay(500); + priv->fw_info->status = FW_STATUS_0_INIT; ulRegRead = rtl92e_readl(dev, CPU_GEN); @@ -546,21 +518,20 @@ start: } priv->loopback_mode = RTL819X_NO_LOOPBACK; - if (priv->rst_progress == RESET_TYPE_NORESET) { - ulRegRead = rtl92e_readl(dev, CPU_GEN); - if (priv->loopback_mode == RTL819X_NO_LOOPBACK) - ulRegRead = (ulRegRead & CPU_GEN_NO_LOOPBACK_MSK) | - CPU_GEN_NO_LOOPBACK_SET; - else if (priv->loopback_mode == RTL819X_MAC_LOOPBACK) - ulRegRead |= CPU_CCK_LOOPBACK; - else - netdev_err(dev, "%s: Invalid loopback mode setting.\n", - __func__); + ulRegRead = rtl92e_readl(dev, CPU_GEN); + if (priv->loopback_mode == RTL819X_NO_LOOPBACK) + ulRegRead = (ulRegRead & CPU_GEN_NO_LOOPBACK_MSK) | + CPU_GEN_NO_LOOPBACK_SET; + else if (priv->loopback_mode == RTL819X_MAC_LOOPBACK) + ulRegRead |= CPU_CCK_LOOPBACK; + else + netdev_err(dev, "%s: Invalid loopback mode setting.\n", + __func__); - rtl92e_writel(dev, CPU_GEN, ulRegRead); + rtl92e_writel(dev, CPU_GEN, ulRegRead); + + udelay(500); - udelay(500); - } _rtl92e_hwconfig(dev); rtl92e_writeb(dev, CMDR, CR_RE | CR_TE); @@ -595,8 +566,7 @@ start: rtl92e_writeb(dev, ACK_TIMEOUT, 0x30); - if (priv->rst_progress == RESET_TYPE_NORESET) - rtl92e_set_wireless_mode(dev, priv->rtllib->mode); + rtl92e_set_wireless_mode(dev, priv->rtllib->mode); rtl92e_cam_reset(dev); { u8 SECR_value = 0x0; @@ -635,12 +605,10 @@ start: } } - if (priv->rst_progress == RESET_TYPE_NORESET) { - rtStatus = rtl92e_config_rf(dev); - if (!rtStatus) { - netdev_info(dev, "RF Config failed\n"); - return rtStatus; - } + rtStatus = rtl92e_config_rf(dev); + if (!rtStatus) { + netdev_info(dev, "RF Config failed\n"); + return rtStatus; } rtl92e_set_bb_reg(dev, rFPGA0_RFMOD, bCCKEn, 0x1); @@ -662,39 +630,37 @@ start: else priv->rf_mode = RF_OP_By_SW_3wire; - if (priv->rst_progress == RESET_TYPE_NORESET) { - rtl92e_dm_init_txpower_tracking(dev); - - if (priv->ic_cut >= IC_VersionCut_D) { - tmpRegA = rtl92e_get_bb_reg(dev, rOFDM0_XATxIQImbalance, - bMaskDWord); - rtl92e_get_bb_reg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord); - - for (i = 0; i < TX_BB_GAIN_TABLE_LEN; i++) { - if (tmpRegA == dm_tx_bb_gain[i]) { - priv->rfa_txpowertrackingindex = i; - priv->rfa_txpowertrackingindex_real = i; - priv->rfa_txpowertracking_default = - priv->rfa_txpowertrackingindex; - break; - } + rtl92e_dm_init_txpower_tracking(dev); + + if (priv->ic_cut >= IC_VersionCut_D) { + tmpRegA = rtl92e_get_bb_reg(dev, rOFDM0_XATxIQImbalance, + bMaskDWord); + rtl92e_get_bb_reg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord); + + for (i = 0; i < TX_BB_GAIN_TABLE_LEN; i++) { + if (tmpRegA == dm_tx_bb_gain[i]) { + priv->rfa_txpowertrackingindex = i; + priv->rfa_txpowertrackingindex_real = i; + priv->rfa_txpowertracking_default = + priv->rfa_txpowertrackingindex; + break; } + } - TempCCk = rtl92e_get_bb_reg(dev, rCCK0_TxFilter1, - bMaskByte2); + TempCCk = rtl92e_get_bb_reg(dev, rCCK0_TxFilter1, + bMaskByte2); - for (i = 0; i < CCK_TX_BB_GAIN_TABLE_LEN; i++) { - if (TempCCk == dm_cck_tx_bb_gain[i][0]) { - priv->cck_present_attn_20m_def = i; - break; - } + for (i = 0; i < CCK_TX_BB_GAIN_TABLE_LEN; i++) { + if (TempCCk == dm_cck_tx_bb_gain[i][0]) { + priv->cck_present_attn_20m_def = i; + break; } - priv->cck_present_attn_40m_def = 0; - priv->cck_present_attn_diff = 0; - priv->cck_present_attn = - priv->cck_present_attn_20m_def; - priv->btxpower_tracking = false; } + priv->cck_present_attn_40m_def = 0; + priv->cck_present_attn_diff = 0; + priv->cck_present_attn = + priv->cck_present_attn_20m_def; + priv->btxpower_tracking = false; } rtl92e_irq_enable(dev); end: @@ -706,7 +672,6 @@ static void _rtl92e_net_update(struct net_device *dev) { struct r8192_priv *priv = rtllib_priv(dev); struct rtllib_network *net; - u16 BcnTimeCfg = 0, BcnCW = 6, BcnIFS = 0xf; u16 rate_config = 0; net = &priv->rtllib->current_network; @@ -715,19 +680,6 @@ static void _rtl92e_net_update(struct net_device *dev) priv->basic_rate = rate_config &= 0x15f; rtl92e_writew(dev, BSSIDR, *(u16 *)net->bssid); rtl92e_writel(dev, BSSIDR + 2, *(u32 *)(net->bssid + 2)); - - if (priv->rtllib->iw_mode == IW_MODE_ADHOC) { - rtl92e_writew(dev, ATIMWND, 2); - rtl92e_writew(dev, BCN_DMATIME, 256); - rtl92e_writew(dev, BCN_INTERVAL, net->beacon_interval); - rtl92e_writew(dev, BCN_DRV_EARLY_INT, 10); - rtl92e_writeb(dev, BCN_ERR_THRESH, 100); - - BcnTimeCfg |= (BcnCW << BCN_TCFG_CW_SHIFT); - BcnTimeCfg |= BcnIFS << BCN_TCFG_IFS; - - rtl92e_writew(dev, BCN_TCFG, BcnTimeCfg); - } } void rtl92e_link_change(struct net_device *dev) @@ -749,15 +701,12 @@ void rtl92e_link_change(struct net_device *dev) } _rtl92e_update_msr(dev); - if (ieee->iw_mode == IW_MODE_INFRA || ieee->iw_mode == IW_MODE_ADHOC) { + if (ieee->iw_mode == IW_MODE_INFRA) { u32 reg; reg = rtl92e_readl(dev, RCR); if (priv->rtllib->link_state == MAC80211_LINKED) { - if (ieee->intel_promiscuous_md_info.promiscuous_on) - ; - else - priv->receive_config = reg |= RCR_CBSSID; + priv->receive_config = reg |= RCR_CBSSID; } else { priv->receive_config = reg &= ~RCR_CBSSID; } @@ -1411,12 +1360,12 @@ static void _rtl92e_process_phyinfo(struct r8192_priv *priv, u8 *buffer, static u32 slide_beacon_adc_pwdb_index; static u32 slide_beacon_adc_pwdb_statistics; static u32 last_beacon_adc_pwdb; - struct rtllib_hdr_3addr *hdr; + struct ieee80211_hdr_3addr *hdr; u16 sc; unsigned int seq; - hdr = (struct rtllib_hdr_3addr *)buffer; - sc = le16_to_cpu(hdr->seq_ctl); + hdr = (struct ieee80211_hdr_3addr *)buffer; + sc = le16_to_cpu(hdr->seq_ctrl); seq = WLAN_GET_SEQ_SEQ(sc); curr_st->Seq_Num = seq; if (!prev_st->bIsAMPDU) @@ -1561,7 +1510,7 @@ static void _rtl92e_translate_rx_signal_stats(struct net_device *dev, struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); bool bpacket_match_bssid, bpacket_toself; bool bPacketBeacon = false; - struct rtllib_hdr_3addr *hdr; + struct ieee80211_hdr_3addr *hdr; bool bToSelfBA = false; static struct rtllib_rx_stats previous_stats; u16 fc, type; @@ -1570,21 +1519,21 @@ static void _rtl92e_translate_rx_signal_stats(struct net_device *dev, tmp_buf = skb->data + pstats->RxDrvInfoSize + pstats->RxBufShift; - hdr = (struct rtllib_hdr_3addr *)tmp_buf; - fc = le16_to_cpu(hdr->frame_ctl); + hdr = (struct ieee80211_hdr_3addr *)tmp_buf; + fc = le16_to_cpu(hdr->frame_control); type = WLAN_FC_GET_TYPE(fc); praddr = hdr->addr1; bpacket_match_bssid = ((type != RTLLIB_FTYPE_CTL) && ether_addr_equal(priv->rtllib->current_network.bssid, - (fc & RTLLIB_FCTL_TODS) ? hdr->addr1 : - (fc & RTLLIB_FCTL_FROMDS) ? hdr->addr2 : + (fc & IEEE80211_FCTL_TODS) ? hdr->addr1 : + (fc & IEEE80211_FCTL_FROMDS) ? hdr->addr2 : hdr->addr3) && (!pstats->bHwError) && (!pstats->bCRC) && (!pstats->bICV)); bpacket_toself = bpacket_match_bssid && /* check this */ ether_addr_equal(praddr, priv->rtllib->dev->dev_addr); - if (WLAN_FC_GET_FRAMETYPE(fc) == RTLLIB_STYPE_BEACON) + if (ieee80211_is_beacon(hdr->frame_control)) bPacketBeacon = true; _rtl92e_process_phyinfo(priv, tmp_buf, &previous_stats, pstats); _rtl92e_query_rxphystatus(priv, pstats, pdesc, pdrvinfo, @@ -1870,7 +1819,7 @@ rtl92e_init_variables(struct net_device *dev) priv->bfirst_after_down = false; } -void rtl92e_enable_irq(struct net_device *dev) +void rtl92e_irq_enable(struct net_device *dev) { struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); @@ -1879,7 +1828,7 @@ void rtl92e_enable_irq(struct net_device *dev) rtl92e_writel(dev, INTA_MASK, priv->irq_mask[0]); } -void rtl92e_disable_irq(struct net_device *dev) +void rtl92e_irq_disable(struct net_device *dev) { struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); @@ -1892,7 +1841,7 @@ void rtl92e_enable_rx(struct net_device *dev) { struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev); - rtl92e_writel(dev, RDQDA, priv->rx_ring_dma[RX_MPDU_QUEUE]); + rtl92e_writel(dev, RDQDA, priv->rx_ring_dma); } static const u32 TX_DESC_BASE[] = { diff --git a/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.h b/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.h index 11366fda4e..878c962368 100644 --- a/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.h +++ b/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.h @@ -16,10 +16,7 @@ bool rtl92e_is_rx_stuck(struct net_device *dev); void rtl92e_ack_irq(struct net_device *dev, u32 *p_inta); void rtl92e_enable_rx(struct net_device *dev); void rtl92e_enable_tx(struct net_device *dev); -void rtl92e_enable_irq(struct net_device *dev); -void rtl92e_disable_irq(struct net_device *dev); void rtl92e_init_variables(struct net_device *dev); -void rtl92e_start_beacon(struct net_device *dev); void rtl92e_set_reg(struct net_device *dev, u8 variable, u8 *val); void rtl92e_get_eeprom_size(struct net_device *dev); bool rtl92e_start_adapter(struct net_device *dev); diff --git a/drivers/staging/rtl8192e/rtl8192e/r8192E_hw.h b/drivers/staging/rtl8192e/rtl8192e/r8192E_hw.h index 09f8c76b7e..1b444529b5 100644 --- a/drivers/staging/rtl8192e/rtl8192e/r8192E_hw.h +++ b/drivers/staging/rtl8192e/rtl8192e/r8192E_hw.h @@ -43,7 +43,7 @@ enum _RTL8192PCI_HW { PMR = 0x00c, EPROM_CMD = 0x00e, -#define EPROM_CMD_9356SEL BIT4 +#define EPROM_CMD_9356SEL BIT(4) #define EPROM_CMD_OPERATING_MODE_SHIFT 6 #define EPROM_CMD_NORMAL 0 #define EPROM_CMD_PROGRAM 2 @@ -61,16 +61,16 @@ enum _RTL8192PCI_HW { #define CR_TE 0x04 SIFS = 0x03E, RCR = 0x044, -#define RCR_ONLYERLPKT BIT31 -#define RCR_CBSSID BIT23 -#define RCR_ADD3 BIT21 -#define RCR_AMF BIT20 -#define RCR_ADF BIT18 -#define RCR_AICV BIT12 -#define RCR_AB BIT3 -#define RCR_AM BIT2 -#define RCR_APM BIT1 -#define RCR_AAP BIT0 +#define RCR_ONLYERLPKT BIT(31) +#define RCR_CBSSID BIT(23) +#define RCR_ADD3 BIT(21) +#define RCR_AMF BIT(20) +#define RCR_ADF BIT(18) +#define RCR_AICV BIT(12) +#define RCR_AB BIT(3) +#define RCR_AM BIT(2) +#define RCR_APM BIT(1) +#define RCR_AAP BIT(0) #define RCR_MXDMA_OFFSET 8 #define RCR_FIFO_OFFSET 13 SLOT_TIME = 0x049, @@ -95,34 +95,34 @@ enum _RTL8192PCI_HW { #define TOTAL_CAM_ENTRY 32 WCAMI = 0x0A4, SECR = 0x0B0, -#define SCR_TxUseDK BIT0 -#define SCR_RxUseDK BIT1 -#define SCR_TxEncEnable BIT2 -#define SCR_RxDecEnable BIT3 -#define SCR_NoSKMC BIT5 +#define SCR_TxUseDK BIT(0) +#define SCR_RxUseDK BIT(1) +#define SCR_TxEncEnable BIT(2) +#define SCR_RxDecEnable BIT(3) +#define SCR_NoSKMC BIT(5) SWREGULATOR = 0x0BD, INTA_MASK = 0x0f4, -#define IMR_TBDOK BIT27 -#define IMR_TBDER BIT26 -#define IMR_TXFOVW BIT15 -#define IMR_TIMEOUT0 BIT14 -#define IMR_BcnInt BIT13 -#define IMR_RXFOVW BIT12 -#define IMR_RDU BIT11 -#define IMR_RXCMDOK BIT10 -#define IMR_BDOK BIT9 -#define IMR_HIGHDOK BIT8 -#define IMR_COMDOK BIT7 -#define IMR_MGNTDOK BIT6 -#define IMR_HCCADOK BIT5 -#define IMR_BKDOK BIT4 -#define IMR_BEDOK BIT3 -#define IMR_VIDOK BIT2 -#define IMR_VODOK BIT1 -#define IMR_ROK BIT0 +#define IMR_TBDOK BIT(27) +#define IMR_TBDER BIT(26) +#define IMR_TXFOVW BIT(15) +#define IMR_TIMEOUT0 BIT(14) +#define IMR_BcnInt BIT(13) +#define IMR_RXFOVW BIT(12) +#define IMR_RDU BIT(11) +#define IMR_RXCMDOK BIT(10) +#define IMR_BDOK BIT(9) +#define IMR_HIGHDOK BIT(8) +#define IMR_COMDOK BIT(7) +#define IMR_MGNTDOK BIT(6) +#define IMR_HCCADOK BIT(5) +#define IMR_BKDOK BIT(4) +#define IMR_BEDOK BIT(3) +#define IMR_VIDOK BIT(2) +#define IMR_VODOK BIT(1) +#define IMR_ROK BIT(0) ISR = 0x0f8, TP_POLL = 0x0fd, -#define TP_POLL_CQ BIT5 +#define TP_POLL_CQ BIT(5) PSR = 0x0ff, CPU_GEN = 0x100, #define CPU_CCK_LOOPBACK 0x00030000 @@ -136,9 +136,9 @@ enum _RTL8192PCI_HW { #define CPU_GEN_NO_LOOPBACK_MSK 0xFFF8FFFF #define CPU_GEN_NO_LOOPBACK_SET 0x00080000 ACM_HW_CTRL = 0x171, -#define ACM_HW_BEQ_EN BIT1 -#define ACM_HW_VIQ_EN BIT2 -#define ACM_HW_VOQ_EN BIT3 +#define ACM_HW_BEQ_EN BIT(1) +#define ACM_HW_VIQ_EN BIT(2) +#define ACM_HW_VOQ_EN BIT(3) RQPN1 = 0x180, RQPN2 = 0x184, RQPN3 = 0x188, @@ -159,7 +159,7 @@ enum _RTL8192PCI_HW { WFCRC2 = 0x2f8, BW_OPMODE = 0x300, -#define BW_OPMODE_20MHZ BIT2 +#define BW_OPMODE_20MHZ BIT(2) IC_VERRSION = 0x301, MSR = 0x303, #define MSR_LINK_MASK (BIT(1) | BIT(0)) @@ -178,19 +178,19 @@ enum _RTL8192PCI_HW { TSFR = 0x308, RRSR = 0x310, #define RRSR_SHORT_OFFSET 23 -#define RRSR_1M BIT0 -#define RRSR_2M BIT1 -#define RRSR_5_5M BIT2 -#define RRSR_11M BIT3 -#define RRSR_6M BIT4 -#define RRSR_9M BIT5 -#define RRSR_12M BIT6 -#define RRSR_18M BIT7 -#define RRSR_24M BIT8 -#define RRSR_36M BIT9 -#define RRSR_48M BIT10 -#define RRSR_54M BIT11 -#define BRSR_AckShortPmb BIT23 +#define RRSR_1M BIT(0) +#define RRSR_2M BIT(1) +#define RRSR_5_5M BIT(2) +#define RRSR_11M BIT(3) +#define RRSR_6M BIT(4) +#define RRSR_9M BIT(5) +#define RRSR_12M BIT(6) +#define RRSR_18M BIT(7) +#define RRSR_24M BIT(8) +#define RRSR_36M BIT(9) +#define RRSR_48M BIT(10) +#define RRSR_54M BIT(11) +#define BRSR_AckShortPmb BIT(23) UFWP = 0x318, RATR0 = 0x320, #define RATR_1M 0x00000001 diff --git a/drivers/staging/rtl8192e/rtl8192e/r8192E_phy.c b/drivers/staging/rtl8192e/rtl8192e/r8192E_phy.c index 875540a207..4d12d73850 100644 --- a/drivers/staging/rtl8192e/rtl8192e/r8192E_phy.c +++ b/drivers/staging/rtl8192e/rtl8192e/r8192E_phy.c @@ -513,7 +513,7 @@ static u8 _rtl92e_phy_set_sw_chnl_cmd_array(struct net_device *dev, { struct sw_chnl_cmd *pCmd; - if (CmdTable == NULL) { + if (!CmdTable) { netdev_err(dev, "%s(): CmdTable cannot be NULL.\n", __func__); return false; } @@ -920,9 +920,6 @@ void rtl92e_init_gain(struct net_device *dev, u8 Operation) case IG_Backup: initial_gain = SCAN_RX_INITIAL_GAIN; BitMask = bMaskByte0; - if (dm_digtable.dig_algorithm == - DIG_ALGO_BY_FALSE_ALARM) - rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x8); priv->initgain_backup.xaagccore1 = rtl92e_get_bb_reg(dev, rOFDM0_XAAGCCore1, BitMask); @@ -947,10 +944,6 @@ void rtl92e_init_gain(struct net_device *dev, u8 Operation) break; case IG_Restore: BitMask = 0x7f; - if (dm_digtable.dig_algorithm == - DIG_ALGO_BY_FALSE_ALARM) - rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x8); - rtl92e_set_bb_reg(dev, rOFDM0_XAAGCCore1, BitMask, (u32)priv->initgain_backup.xaagccore1); rtl92e_set_bb_reg(dev, rOFDM0_XBAGCCore1, BitMask, @@ -965,10 +958,6 @@ void rtl92e_init_gain(struct net_device *dev, u8 Operation) rtl92e_set_tx_power(dev, priv->rtllib->current_network.channel); - - if (dm_digtable.dig_algorithm == - DIG_ALGO_BY_FALSE_ALARM) - rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x1); break; } } @@ -976,7 +965,7 @@ void rtl92e_init_gain(struct net_device *dev, u8 Operation) void rtl92e_set_rf_off(struct net_device *dev) { - rtl92e_set_bb_reg(dev, rFPGA0_XA_RFInterfaceOE, BIT4, 0x0); + rtl92e_set_bb_reg(dev, rFPGA0_XA_RFInterfaceOE, BIT(4), 0x0); rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter4, 0x300, 0x0); rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter1, 0x18, 0x0); rtl92e_set_bb_reg(dev, rOFDM0_TRxPathEnable, 0xf, 0x0); @@ -1027,7 +1016,7 @@ static bool _rtl92e_set_rf_power_state(struct net_device *dev, 0x4, 0x1); priv->hw_rf_off_action = 0; rtl92e_set_bb_reg(dev, rFPGA0_XA_RFInterfaceOE, - BIT4, 0x1); + BIT(4), 0x1); rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter4, 0x300, 0x3); rtl92e_set_bb_reg(dev, rFPGA0_AnalogParameter1, diff --git a/drivers/staging/rtl8192e/rtl8192e/r8192E_phyreg.h b/drivers/staging/rtl8192e/rtl8192e/r8192E_phyreg.h index 24fb0ca539..c48c56869c 100644 --- a/drivers/staging/rtl8192e/rtl8192e/r8192E_phyreg.h +++ b/drivers/staging/rtl8192e/rtl8192e/r8192E_phyreg.h @@ -248,75 +248,15 @@ #define bPAEnd 0xf #define bTREnd 0x0f000000 #define bRFEnd 0x000f0000 -/* T2R */ -#define bCCAMask 0x000000f0 -#define bR2RCCAMask 0x00000f00 -#define bHSSI_R2TDelay 0xf8000000 -#define bHSSI_T2RDelay 0xf80000 /* Channel gain at continue TX. */ -#define bContTxHSSI 0x400 -#define bIGFromCCK 0x200 -#define bAGCAddress 0x3f -#define bRxHPTx 0x7000 -#define bRxHPT2R 0x38000 -#define bRxHPCCKIni 0xc0000 -#define bAGCTxCode 0xc00000 -#define bAGCRxCode 0x300000 #define b3WireDataLength 0x800 #define b3WireAddressLength 0x400 -#define b3WireRFPowerDown 0x1 -/*#define bHWSISelect 0x8 */ -#define b2GPAPEPolarity 0x80000000 -#define bRFSW_TxDefaultAnt 0x3 -#define bRFSW_TxOptionAnt 0x30 -#define bRFSW_RxDefaultAnt 0x300 -#define bRFSW_RxOptionAnt 0x3000 -#define bRFSI_3WireData 0x1 -#define bRFSI_3WireClock 0x2 -#define bRFSI_3WireLoad 0x4 -#define bRFSI_3WireRW 0x8 /* 3-wire total control */ -#define bRFSI_3Wire 0xf #define bRFSI_RFENV 0x10 -#define bRFSI_TRSW 0x20 -#define bRFSI_TRSWB 0x40 -#define bRFSI_ANTSW 0x100 -#define bRFSI_ANTSWB 0x200 -#define bRFSI_PAPE 0x400 -#define bBandSelect 0x1 -#define bHTSIG2_GI 0x80 -#define bHTSIG2_Smoothing 0x01 -#define bHTSIG2_Sounding 0x02 -#define bHTSIG2_Aggreaton 0x08 -#define bHTSIG2_STBC 0x30 -#define bHTSIG2_AdvCoding 0x40 -#define bHTSIG2_NumOfHTLTF 0x300 -#define bHTSIG2_CRC8 0x3fc -#define bHTSIG1_MCS 0x7f -#define bHTSIG1_BandWidth 0x80 -#define bHTSIG1_HTLength 0xffff -#define bLSIG_Rate 0xf -#define bLSIG_Reserved 0x10 -#define bLSIG_Length 0x1fffe -#define bLSIG_Parity 0x20 -#define bCCKRxPhase 0x4 #define bLSSIReadAddress 0x3f000000 /* LSSI "read" address */ #define bLSSIReadEdge 0x80000000 /* LSSI "read" edge signal */ #define bLSSIReadBackData 0xfff -#define bLSSIReadOKFlag 0x1000 -#define bCCKSampleRate 0x8 /* 0: 44 MHz, 1: 88MHz */ - -#define bRegulator0Standby 0x1 -#define bRegulatorPLLStandby 0x2 -#define bRegulator1Standby 0x4 -#define bPLLPowerUp 0x8 -#define bDPLLPowerUp 0x10 -#define bDA10PowerUp 0x20 -#define bAD7PowerUp 0x200 -#define bDA6PowerUp 0x2000 -#define bXtalPowerUp 0x4000 -#define b40MDClkPowerUP 0x8000 -#define bDA6DebugMode 0x20000 + #define bDA6Swing 0x380000 #define bADClkPhase 0x4000000 #define b80MClkDelay 0x18000000 diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_cam.c b/drivers/staging/rtl8192e/rtl8192e/rtl_cam.c index 944cc73fb2..69298c7c12 100644 --- a/drivers/staging/rtl8192e/rtl8192e/rtl_cam.c +++ b/drivers/staging/rtl8192e/rtl8192e/rtl_cam.c @@ -17,7 +17,7 @@ void rtl92e_cam_reset(struct net_device *dev) { u32 ulcommand = 0; - ulcommand |= BIT31 | BIT30; + ulcommand |= BIT(31) | BIT(30); rtl92e_writel(dev, RWCAM, ulcommand); } @@ -33,11 +33,6 @@ void rtl92e_enable_hw_security_config(struct net_device *dev) (priv->rtllib->auth_mode != 2)) { SECR_value |= SCR_RxUseDK; SECR_value |= SCR_TxUseDK; - } else if ((ieee->iw_mode == IW_MODE_ADHOC) && - (ieee->pairwise_key_type & (KEY_TYPE_CCMP | - KEY_TYPE_TKIP))) { - SECR_value |= SCR_RxUseDK; - SECR_value |= SCR_TxUseDK; } ieee->hwsec_active = 1; @@ -94,13 +89,13 @@ void rtl92e_set_key(struct net_device *dev, u8 EntryNo, u8 KeyIndex, } if (DefaultKey) - usConfig |= BIT15 | (KeyType << 2); + usConfig |= BIT(15) | (KeyType << 2); else - usConfig |= BIT15 | (KeyType << 2) | KeyIndex; + usConfig |= BIT(15) | (KeyType << 2) | KeyIndex; for (i = 0; i < CAM_CONTENT_COUNT; i++) { TargetCommand = i + CAM_CONTENT_COUNT * EntryNo; - TargetCommand |= BIT31 | BIT16; + TargetCommand |= BIT(31) | BIT(16); if (i == 0) { TargetContent = (u32)(*(MacAddr + 0)) << 16 | @@ -117,7 +112,7 @@ void rtl92e_set_key(struct net_device *dev, u8 EntryNo, u8 KeyIndex, rtl92e_writel(dev, WCAMI, TargetContent); rtl92e_writel(dev, RWCAM, TargetCommand); } else { - if (KeyContent != NULL) { + if (KeyContent) { rtl92e_writel(dev, WCAMI, (u32)(*(KeyContent + i - 2))); rtl92e_writel(dev, RWCAM, TargetCommand); @@ -126,108 +121,3 @@ void rtl92e_set_key(struct net_device *dev, u8 EntryNo, u8 KeyIndex, } } } - -void rtl92e_cam_restore(struct net_device *dev) -{ - u8 EntryId = 0; - struct r8192_priv *priv = rtllib_priv(dev); - u8 *MacAddr = priv->rtllib->current_network.bssid; - - static u8 CAM_CONST_ADDR[4][6] = { - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x03} - }; - static u8 CAM_CONST_BROAD[] = { - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - }; - - if ((priv->rtllib->pairwise_key_type == KEY_TYPE_WEP40) || - (priv->rtllib->pairwise_key_type == KEY_TYPE_WEP104)) { - for (EntryId = 0; EntryId < 4; EntryId++) { - MacAddr = CAM_CONST_ADDR[EntryId]; - if (priv->rtllib->swcamtable[EntryId].bused) { - rtl92e_set_key(dev, EntryId, EntryId, - priv->rtllib->pairwise_key_type, - MacAddr, 0, - (u32 *)(&priv->rtllib->swcamtable - [EntryId].key_buf[0])); - } - } - - } else if (priv->rtllib->pairwise_key_type == KEY_TYPE_TKIP) { - if (priv->rtllib->iw_mode == IW_MODE_ADHOC) { - rtl92e_set_key(dev, 4, 0, - priv->rtllib->pairwise_key_type, - (const u8 *)dev->dev_addr, 0, - (u32 *)(&priv->rtllib->swcamtable[4].key_buf[0])); - } else { - rtl92e_set_key(dev, 4, 0, - priv->rtllib->pairwise_key_type, - MacAddr, 0, - (u32 *)(&priv->rtllib->swcamtable[4].key_buf[0])); - } - - } else if (priv->rtllib->pairwise_key_type == KEY_TYPE_CCMP) { - if (priv->rtllib->iw_mode == IW_MODE_ADHOC) { - rtl92e_set_key(dev, 4, 0, - priv->rtllib->pairwise_key_type, - (const u8 *)dev->dev_addr, 0, - (u32 *)(&priv->rtllib->swcamtable[4].key_buf[0])); - } else { - rtl92e_set_key(dev, 4, 0, - priv->rtllib->pairwise_key_type, MacAddr, - 0, (u32 *)(&priv->rtllib->swcamtable[4].key_buf[0])); - } - } - - if (priv->rtllib->group_key_type == KEY_TYPE_TKIP) { - MacAddr = CAM_CONST_BROAD; - for (EntryId = 1; EntryId < 4; EntryId++) { - if (priv->rtllib->swcamtable[EntryId].bused) { - rtl92e_set_key(dev, EntryId, EntryId, - priv->rtllib->group_key_type, - MacAddr, 0, - (u32 *)(&priv->rtllib->swcamtable[EntryId].key_buf[0])); - } - } - if (priv->rtllib->iw_mode == IW_MODE_ADHOC) { - if (priv->rtllib->swcamtable[0].bused) { - rtl92e_set_key(dev, 0, 0, - priv->rtllib->group_key_type, - CAM_CONST_ADDR[0], 0, - (u32 *)(&priv->rtllib->swcamtable[0].key_buf[0])); - } else { - netdev_warn(dev, - "%s(): ADHOC TKIP: missing key entry.\n", - __func__); - return; - } - } - } else if (priv->rtllib->group_key_type == KEY_TYPE_CCMP) { - MacAddr = CAM_CONST_BROAD; - for (EntryId = 1; EntryId < 4; EntryId++) { - if (priv->rtllib->swcamtable[EntryId].bused) { - rtl92e_set_key(dev, EntryId, EntryId, - priv->rtllib->group_key_type, - MacAddr, 0, - (u32 *)(&priv->rtllib->swcamtable[EntryId].key_buf[0])); - } - } - - if (priv->rtllib->iw_mode == IW_MODE_ADHOC) { - if (priv->rtllib->swcamtable[0].bused) { - rtl92e_set_key(dev, 0, 0, - priv->rtllib->group_key_type, - CAM_CONST_ADDR[0], 0, - (u32 *)(&priv->rtllib->swcamtable[0].key_buf[0])); - } else { - netdev_warn(dev, - "%s(): ADHOC CCMP: missing key entry.\n", - __func__); - return; - } - } - } -} diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_cam.h b/drivers/staging/rtl8192e/rtl8192e/rtl_cam.h index bd33ef1051..615b84bca9 100644 --- a/drivers/staging/rtl8192e/rtl8192e/rtl_cam.h +++ b/drivers/staging/rtl8192e/rtl8192e/rtl_cam.h @@ -20,6 +20,5 @@ void rtl92e_set_key(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u32 *KeyContent); void rtl92e_set_swcam(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType, const u8 *MacAddr, u32 *KeyContent); -void rtl92e_cam_restore(struct net_device *dev); #endif diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c index 50eb8f3494..995daab906 100644 --- a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c +++ b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c @@ -61,7 +61,7 @@ static short _rtl92e_pci_initdescring(struct net_device *dev); static void _rtl92e_irq_tx_tasklet(struct tasklet_struct *t); static void _rtl92e_irq_rx_tasklet(struct tasklet_struct *t); static void _rtl92e_cancel_deferred_work(struct r8192_priv *priv); -static int _rtl92e_up(struct net_device *dev, bool is_silent_reset); +static int _rtl92e_up(struct net_device *dev); static int _rtl92e_try_up(struct net_device *dev); static int _rtl92e_down(struct net_device *dev, bool shutdownrf); static void _rtl92e_restart(void *data); @@ -165,8 +165,7 @@ bool rtl92e_set_rf_state(struct net_device *dev, case rf_off: - if ((priv->rtllib->iw_mode == IW_MODE_INFRA) || - (priv->rtllib->iw_mode == IW_MODE_ADHOC)) { + if (priv->rtllib->iw_mode == IW_MODE_INFRA) { if ((priv->rtllib->rf_off_reason > RF_CHANGE_BY_IPS) || (change_source > RF_CHANGE_BY_IPS)) { if (ieee->link_state == MAC80211_LINKED) @@ -227,24 +226,6 @@ static void _rtl92e_tx_timeout(struct net_device *dev, unsigned int txqueue) netdev_info(dev, "TXTIMEOUT"); } -void rtl92e_irq_enable(struct net_device *dev) -{ - struct r8192_priv *priv = rtllib_priv(dev); - - priv->irq_enabled = 1; - - rtl92e_enable_irq(dev); -} - -void rtl92e_irq_disable(struct net_device *dev) -{ - struct r8192_priv *priv = rtllib_priv(dev); - - rtl92e_disable_irq(dev); - - priv->irq_enabled = 0; -} - static void _rtl92e_set_chan(struct net_device *dev, short ch) { struct r8192_priv *priv = rtllib_priv(dev); @@ -313,7 +294,7 @@ static void _rtl92e_update_beacon(void *data) struct rtllib_device *ieee = priv->rtllib; struct rtllib_network *net = &ieee->current_network; - if (ieee->ht_info->bCurrentHTSupport) + if (ieee->ht_info->current_ht_support) HT_update_self_and_peer_setting(ieee, net); ieee->ht_info->current_rt2rt_long_slot_time = net->bssht.bd_rt2rt_long_slot_time; ieee->ht_info->RT2RT_HT_Mode = net->bssht.rt2rt_ht_mode; @@ -477,10 +458,6 @@ static void _rtl92e_prepare_beacon(struct tasklet_struct *t) pdesc->OWN = 1; } -static void _rtl92e_stop_beacon(struct net_device *dev) -{ -} - void rtl92e_config_rate(struct net_device *dev, u16 *rate_config) { struct r8192_priv *priv = rtllib_priv(dev); @@ -611,7 +588,7 @@ void rtl92e_set_wireless_mode(struct net_device *dev, u8 wireless_mode) _rtl92e_refresh_support_rate(priv); } -static int _rtl92e_sta_up(struct net_device *dev, bool is_silent_reset) +static int _rtl92e_sta_up(struct net_device *dev) { struct r8192_priv *priv = rtllib_priv(dev); struct rt_pwr_save_ctrl *psc = (struct rt_pwr_save_ctrl *) @@ -634,7 +611,7 @@ static int _rtl92e_sta_up(struct net_device *dev, bool is_silent_reset) rtl92e_check_rfctrl_gpio_timer(&priv->gpio_polling_timer); if (priv->rtllib->link_state != MAC80211_LINKED) - rtllib_softmac_start_protocol(priv->rtllib, 0); + rtllib_softmac_start_protocol(priv->rtllib); rtllib_reset_queue(priv->rtllib); _rtl92e_watchdog_timer_cb(&priv->watch_dog_timer); @@ -678,7 +655,7 @@ static int _rtl92e_sta_down(struct net_device *dev, bool shutdownrf) _rtl92e_cancel_deferred_work(priv); cancel_delayed_work(&priv->rtllib->hw_wakeup_wq); - rtllib_softmac_stop_protocol(priv->rtllib, 0, true); + rtllib_softmac_stop_protocol(priv->rtllib); spin_lock_irqsave(&priv->rf_ps_lock, flags); while (priv->rf_change_in_progress) { spin_unlock_irqrestore(&priv->rf_ps_lock, flags); @@ -719,9 +696,6 @@ static void _rtl92e_init_priv_handler(struct net_device *dev) priv->rtllib->set_bw_mode_handler = rtl92e_set_bw_mode; priv->rf_set_chan = rtl92e_set_channel; - priv->rtllib->start_send_beacons = rtl92e_start_beacon; - priv->rtllib->stop_send_beacons = _rtl92e_stop_beacon; - priv->rtllib->sta_wake_up = rtl92e_hw_wakeup; priv->rtllib->enter_sleep_state = rtl92e_enter_sleep; priv->rtllib->ps_is_queue_empty = _rtl92e_is_tx_queue_empty; @@ -738,15 +712,6 @@ static void _rtl92e_init_priv_handler(struct net_device *dev) priv->rtllib->ScanOperationBackupHandler = rtl92e_scan_op_backup; } -static void _rtl92e_init_priv_constant(struct net_device *dev) -{ - struct r8192_priv *priv = rtllib_priv(dev); - struct rt_pwr_save_ctrl *psc = (struct rt_pwr_save_ctrl *) - &priv->rtllib->pwr_save_ctrl; - - psc->reg_max_lps_awake_intvl = 5; -} - static void _rtl92e_init_priv_variable(struct net_device *dev) { struct r8192_priv *priv = rtllib_priv(dev); @@ -765,10 +730,6 @@ static void _rtl92e_init_priv_variable(struct net_device *dev) priv->chan = 1; priv->rtllib->mode = WIRELESS_MODE_AUTO; priv->rtllib->iw_mode = IW_MODE_INFRA; - priv->rtllib->net_promiscuous_md = false; - priv->rtllib->intel_promiscuous_md_info.promiscuous_on = false; - priv->rtllib->intel_promiscuous_md_info.fltr_src_sta_frame = - false; priv->rtllib->ieee_up = 0; priv->retry_rts = DEFAULT_RETRY_RTS; priv->retry_data = DEFAULT_RETRY_DATA; @@ -778,10 +739,7 @@ static void _rtl92e_init_priv_variable(struct net_device *dev) priv->bcck_in_ch14 = false; priv->cck_present_attn = 0; priv->rfa_txpowertrackingindex = 0; - priv->rfc_txpowertrackingindex = 0; priv->cck_pwr_enl = 6; - priv->rst_progress = RESET_TYPE_NORESET; - priv->force_reset = false; memset(priv->rtllib->swcamtable, 0, sizeof(struct sw_cam_table) * 32); priv->rx_ctr = 0; priv->rtllib->wx_set_enc = 0; @@ -797,7 +755,6 @@ static void _rtl92e_init_priv_variable(struct net_device *dev) priv->rtllib->current_network.beacon_interval = DEFAULT_BEACONINTERVAL; priv->rtllib->iw_mode = IW_MODE_INFRA; - priv->rtllib->active_scan = 1; priv->rtllib->be_scan_inprogress = false; priv->rtllib->fts = DEFAULT_FRAG_THRESHOLD; @@ -871,7 +828,6 @@ static short _rtl92e_init(struct net_device *dev) memset(&priv->stats, 0, sizeof(struct rt_stats)); _rtl92e_init_priv_handler(dev); - _rtl92e_init_priv_constant(dev); _rtl92e_init_priv_variable(dev); _rtl92e_init_priv_lock(priv); _rtl92e_init_priv_task(dev); @@ -984,7 +940,7 @@ static enum reset_type _rtl92e_rx_check_stuck(struct net_device *dev) return RESET_TYPE_NORESET; } -static enum reset_type _rtl92e_if_check_reset(struct net_device *dev) +static void _rtl92e_if_check_reset(struct net_device *dev) { struct r8192_priv *priv = rtllib_priv(dev); enum reset_type TxResetType = RESET_TYPE_NORESET; @@ -1001,133 +957,12 @@ static enum reset_type _rtl92e_if_check_reset(struct net_device *dev) (priv->rtllib->link_state == MAC80211_LINKED)) RxResetType = _rtl92e_rx_check_stuck(dev); - if (TxResetType == RESET_TYPE_NORMAL || - RxResetType == RESET_TYPE_NORMAL) { - netdev_info(dev, "%s(): TxResetType is %d, RxResetType is %d\n", - __func__, TxResetType, RxResetType); - return RESET_TYPE_NORMAL; - } else if (TxResetType == RESET_TYPE_SILENT || + if (TxResetType == RESET_TYPE_SILENT || RxResetType == RESET_TYPE_SILENT) { netdev_info(dev, "%s(): TxResetType is %d, RxResetType is %d\n", __func__, TxResetType, RxResetType); - return RESET_TYPE_SILENT; - } else { - return RESET_TYPE_NORESET; - } -} - -static void _rtl92e_if_silent_reset(struct net_device *dev) -{ - struct r8192_priv *priv = rtllib_priv(dev); - u8 reset_times = 0; - int reset_status = 0; - struct rtllib_device *ieee = priv->rtllib; - unsigned long flag; - - if (priv->rst_progress == RESET_TYPE_NORESET) { - priv->rst_progress = RESET_TYPE_SILENT; - - spin_lock_irqsave(&priv->rf_ps_lock, flag); - if (priv->rf_change_in_progress) { - spin_unlock_irqrestore(&priv->rf_ps_lock, flag); - goto END; - } - priv->rf_change_in_progress = true; - priv->reset_in_progress = true; - spin_unlock_irqrestore(&priv->rf_ps_lock, flag); - -RESET_START: - - mutex_lock(&priv->wx_mutex); - - if (priv->rtllib->link_state == MAC80211_LINKED) - rtl92e_leisure_ps_leave(dev); - - if (priv->up) { - netdev_info(dev, "%s():the driver is not up.\n", - __func__); - mutex_unlock(&priv->wx_mutex); - return; - } - priv->up = 0; - - mdelay(1000); - - if (!netif_queue_stopped(dev)) - netif_stop_queue(dev); - - rtl92e_irq_disable(dev); - del_timer_sync(&priv->watch_dog_timer); - _rtl92e_cancel_deferred_work(priv); - rtl92e_dm_deinit(dev); - rtllib_stop_scan_syncro(ieee); - - if (ieee->link_state == MAC80211_LINKED) { - mutex_lock(&ieee->wx_mutex); - netdev_info(dev, "ieee->link_state is MAC80211_LINKED\n"); - rtllib_stop_send_beacons(priv->rtllib); - del_timer_sync(&ieee->associate_timer); - cancel_delayed_work(&ieee->associate_retry_wq); - rtllib_stop_scan(ieee); - netif_carrier_off(dev); - mutex_unlock(&ieee->wx_mutex); - } else { - netdev_info(dev, "ieee->link_state is NOT LINKED\n"); - rtllib_softmac_stop_protocol(priv->rtllib, 0, true); - } - - rtl92e_dm_backup_state(dev); - - mutex_unlock(&priv->wx_mutex); - reset_status = _rtl92e_up(dev, true); - - if (reset_status == -1) { - if (reset_times < 3) { - reset_times++; - goto RESET_START; - } else { - netdev_warn(dev, "%s(): Reset Failed\n", - __func__); - } - } - - ieee->is_silent_reset = 1; - - spin_lock_irqsave(&priv->rf_ps_lock, flag); - priv->rf_change_in_progress = false; - spin_unlock_irqrestore(&priv->rf_ps_lock, flag); - - rtl92e_enable_hw_security_config(dev); - - if (ieee->link_state == MAC80211_LINKED && ieee->iw_mode == - IW_MODE_INFRA) { - ieee->set_chan(ieee->dev, - ieee->current_network.channel); - - schedule_work(&ieee->associate_complete_wq); - - } else if (ieee->link_state == MAC80211_LINKED && ieee->iw_mode == - IW_MODE_ADHOC) { - ieee->set_chan(ieee->dev, - ieee->current_network.channel); - ieee->link_change(ieee->dev); - - notify_wx_assoc_event(ieee); - - rtllib_start_send_beacons(ieee); - - netif_carrier_on(ieee->dev); - } - - rtl92e_cam_restore(dev); - rtl92e_dm_restore_state(dev); -END: - priv->rst_progress = RESET_TYPE_NORESET; - priv->reset_count++; - priv->reset_in_progress = false; - - rtl92e_writeb(dev, UFWP, 1); } + return; } static void _rtl92e_update_rxcounts(struct r8192_priv *priv, u32 *TotalRxBcnNum, @@ -1157,7 +992,6 @@ static void _rtl92e_watchdog_wq_cb(void *data) struct r8192_priv, watch_dog_wq); struct net_device *dev = priv->rtllib->dev; struct rtllib_device *ieee = priv->rtllib; - enum reset_type ResetType = RESET_TYPE_NORESET; static u8 check_reset_cnt; unsigned long flags; struct rt_pwr_save_ctrl *psc = (struct rt_pwr_save_ctrl *) @@ -1184,15 +1018,12 @@ static void _rtl92e_watchdog_wq_cb(void *data) MAC80211_NOLINK) && (ieee->rf_power_state == rf_on) && !ieee->is_set_key && (!ieee->proto_stoppping) && !ieee->wx_set_enc) { - if ((ieee->pwr_save_ctrl.ReturnPoint == - IPS_CALLBACK_NONE) && - (!ieee->net_promiscuous_md)) { + if (ieee->pwr_save_ctrl.ReturnPoint == IPS_CALLBACK_NONE) { rtl92e_ips_enter(dev); } } } - if ((ieee->link_state == MAC80211_LINKED) && (ieee->iw_mode == - IW_MODE_INFRA) && (!ieee->net_promiscuous_md)) { + if ((ieee->link_state == MAC80211_LINKED) && (ieee->iw_mode == IW_MODE_INFRA)) { if (ieee->link_detect_info.NumRxOkInPeriod > 100 || ieee->link_detect_info.NumTxOkInPeriod > 100) bBusyTraffic = true; @@ -1275,20 +1106,10 @@ static void _rtl92e_watchdog_wq_cb(void *data) spin_lock_irqsave(&priv->tx_lock, flags); if ((check_reset_cnt++ >= 3) && (!ieee->is_roaming) && (!priv->rf_change_in_progress) && (!psc->bSwRfProcessing)) { - ResetType = _rtl92e_if_check_reset(dev); + _rtl92e_if_check_reset(dev); check_reset_cnt = 3; } spin_unlock_irqrestore(&priv->tx_lock, flags); - - if (ResetType == RESET_TYPE_NORMAL) { - priv->rst_progress = RESET_TYPE_NORMAL; - return; - } - - if ((priv->force_reset || ResetType == RESET_TYPE_SILENT)) - _rtl92e_if_silent_reset(dev); - priv->force_reset = false; - priv->reset_in_progress = false; } static void _rtl92e_watchdog_timer_cb(struct timer_list *t) @@ -1320,28 +1141,25 @@ void rtl92e_tx_enable(struct net_device *dev) static void _rtl92e_free_rx_ring(struct net_device *dev) { struct r8192_priv *priv = rtllib_priv(dev); - int i, rx_queue_idx; - - for (rx_queue_idx = 0; rx_queue_idx < MAX_RX_QUEUE; - rx_queue_idx++) { - for (i = 0; i < priv->rxringcount; i++) { - struct sk_buff *skb = priv->rx_buf[rx_queue_idx][i]; + int i; - if (!skb) - continue; + for (i = 0; i < priv->rxringcount; i++) { + struct sk_buff *skb = priv->rx_buf[i]; - dma_unmap_single(&priv->pdev->dev, - *((dma_addr_t *)skb->cb), - priv->rxbuffersize, DMA_FROM_DEVICE); - kfree_skb(skb); - } + if (!skb) + continue; - dma_free_coherent(&priv->pdev->dev, - sizeof(*priv->rx_ring[rx_queue_idx]) * priv->rxringcount, - priv->rx_ring[rx_queue_idx], - priv->rx_ring_dma[rx_queue_idx]); - priv->rx_ring[rx_queue_idx] = NULL; + dma_unmap_single(&priv->pdev->dev, + *((dma_addr_t *)skb->cb), + priv->rxbuffersize, DMA_FROM_DEVICE); + kfree_skb(skb); } + + dma_free_coherent(&priv->pdev->dev, + sizeof(*priv->rx_ring) * priv->rxringcount, + priv->rx_ring, + priv->rx_ring_dma); + priv->rx_ring = NULL; } static void _rtl92e_free_tx_ring(struct net_device *dev, unsigned int prio) @@ -1374,8 +1192,7 @@ static void _rtl92e_hard_data_xmit(struct sk_buff *skb, struct net_device *dev, MAX_DEV_ADDR_SIZE); u8 queue_index = tcb_desc->queue_index; - if ((priv->rtllib->rf_power_state == rf_off) || !priv->up || - priv->reset_in_progress) { + if ((priv->rtllib->rf_power_state == rf_off) || !priv->up) { kfree_skb(skb); return; } @@ -1408,7 +1225,7 @@ static int _rtl92e_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) if (queue_index != TXCMD_QUEUE) { if ((priv->rtllib->rf_power_state == rf_off) || - !priv->up || priv->reset_in_progress) { + !priv->up) { kfree_skb(skb); return 0; } @@ -1488,7 +1305,7 @@ static short _rtl92e_tx(struct net_device *dev, struct sk_buff *skb) struct cb_desc *tcb_desc = (struct cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); struct tx_desc *pdesc = NULL; - struct rtllib_hdr_1addr *header = NULL; + struct ieee80211_hdr *header = NULL; u8 *pda_addr = NULL; int idx; u32 fwinfo_size = 0; @@ -1497,7 +1314,7 @@ static short _rtl92e_tx(struct net_device *dev, struct sk_buff *skb) fwinfo_size = sizeof(struct tx_fwinfo_8190pci); - header = (struct rtllib_hdr_1addr *)(((u8 *)skb->data) + fwinfo_size); + header = (struct ieee80211_hdr *)(((u8 *)skb->data) + fwinfo_size); pda_addr = header->addr1; if (!is_broadcast_ether_addr(pda_addr) && !is_multicast_ether_addr(pda_addr)) @@ -1533,47 +1350,44 @@ static short _rtl92e_alloc_rx_ring(struct net_device *dev) { struct r8192_priv *priv = rtllib_priv(dev); struct rx_desc *entry = NULL; - int i, rx_queue_idx; - - for (rx_queue_idx = 0; rx_queue_idx < MAX_RX_QUEUE; rx_queue_idx++) { - priv->rx_ring[rx_queue_idx] = dma_alloc_coherent(&priv->pdev->dev, - sizeof(*priv->rx_ring[rx_queue_idx]) * priv->rxringcount, - &priv->rx_ring_dma[rx_queue_idx], - GFP_ATOMIC); - if (!priv->rx_ring[rx_queue_idx] || - (unsigned long)priv->rx_ring[rx_queue_idx] & 0xFF) { - netdev_warn(dev, "Cannot allocate RX ring\n"); - return -ENOMEM; - } + int i; - priv->rx_idx[rx_queue_idx] = 0; + priv->rx_ring = dma_alloc_coherent(&priv->pdev->dev, + sizeof(*priv->rx_ring) * priv->rxringcount, + &priv->rx_ring_dma, + GFP_ATOMIC); + if (!priv->rx_ring || (unsigned long)priv->rx_ring & 0xFF) { + netdev_warn(dev, "Cannot allocate RX ring\n"); + return -ENOMEM; + } - for (i = 0; i < priv->rxringcount; i++) { - struct sk_buff *skb = dev_alloc_skb(priv->rxbuffersize); - dma_addr_t *mapping; - - entry = &priv->rx_ring[rx_queue_idx][i]; - if (!skb) - return 0; - skb->dev = dev; - priv->rx_buf[rx_queue_idx][i] = skb; - mapping = (dma_addr_t *)skb->cb; - *mapping = dma_map_single(&priv->pdev->dev, - skb_tail_pointer(skb), - priv->rxbuffersize, DMA_FROM_DEVICE); - if (dma_mapping_error(&priv->pdev->dev, *mapping)) { - dev_kfree_skb_any(skb); - return -1; - } - entry->BufferAddress = *mapping; + priv->rx_idx = 0; - entry->Length = priv->rxbuffersize; - entry->OWN = 1; + for (i = 0; i < priv->rxringcount; i++) { + struct sk_buff *skb = dev_alloc_skb(priv->rxbuffersize); + dma_addr_t *mapping; + + entry = &priv->rx_ring[i]; + if (!skb) + return 0; + skb->dev = dev; + priv->rx_buf[i] = skb; + mapping = (dma_addr_t *)skb->cb; + *mapping = dma_map_single(&priv->pdev->dev, + skb_tail_pointer(skb), + priv->rxbuffersize, DMA_FROM_DEVICE); + if (dma_mapping_error(&priv->pdev->dev, *mapping)) { + dev_kfree_skb_any(skb); + return -1; } + entry->BufferAddress = *mapping; - if (entry) - entry->EOR = 1; + entry->Length = priv->rxbuffersize; + entry->OWN = 1; } + + if (entry) + entry->EOR = 1; return 0; } @@ -1635,19 +1449,17 @@ err_free_rings: void rtl92e_reset_desc_ring(struct net_device *dev) { struct r8192_priv *priv = rtllib_priv(dev); - int i, rx_queue_idx; + int i; unsigned long flags = 0; - for (rx_queue_idx = 0; rx_queue_idx < MAX_RX_QUEUE; rx_queue_idx++) { - if (priv->rx_ring[rx_queue_idx]) { - struct rx_desc *entry = NULL; + if (priv->rx_ring) { + struct rx_desc *entry = NULL; - for (i = 0; i < priv->rxringcount; i++) { - entry = &priv->rx_ring[rx_queue_idx][i]; - entry->OWN = 1; - } - priv->rx_idx[rx_queue_idx] = 0; + for (i = 0; i < priv->rxringcount; i++) { + entry = &priv->rx_ring[i]; + entry->OWN = 1; } + priv->rx_idx = 0; } spin_lock_irqsave(&priv->irq_th_lock, flags); @@ -1743,10 +1555,9 @@ void rtl92e_copy_mpdu_stats(struct rtllib_rx_stats *psrc_stats, static void _rtl92e_rx_normal(struct net_device *dev) { struct r8192_priv *priv = rtllib_priv(dev); - struct rtllib_hdr_1addr *rtllib_hdr = NULL; + struct ieee80211_hdr *rtllib_hdr = NULL; bool unicast_packet = false; u32 skb_len = 0; - int rx_queue_idx = RX_MPDU_QUEUE; struct rtllib_rx_stats stats = { .signal = 0, @@ -1758,10 +1569,10 @@ static void _rtl92e_rx_normal(struct net_device *dev) stats.nic_type = NIC_8192E; while (count--) { - struct rx_desc *pdesc = &priv->rx_ring[rx_queue_idx] - [priv->rx_idx[rx_queue_idx]]; - struct sk_buff *skb = priv->rx_buf[rx_queue_idx] - [priv->rx_idx[rx_queue_idx]]; + struct rx_desc *pdesc = &priv->rx_ring + [priv->rx_idx]; + struct sk_buff *skb = priv->rx_buf + [priv->rx_idx]; struct sk_buff *new_skb; if (pdesc->OWN) @@ -1782,7 +1593,7 @@ static void _rtl92e_rx_normal(struct net_device *dev) skb_reserve(skb, stats.RxDrvInfoSize + stats.RxBufShift); skb_trim(skb, skb->len - S_CRC_LEN); - rtllib_hdr = (struct rtllib_hdr_1addr *)skb->data; + rtllib_hdr = (struct ieee80211_hdr *)skb->data; if (!is_multicast_ether_addr(rtllib_hdr->addr1)) { /* unicast packet */ unicast_packet = true; @@ -1799,8 +1610,7 @@ static void _rtl92e_rx_normal(struct net_device *dev) skb = new_skb; skb->dev = dev; - priv->rx_buf[rx_queue_idx][priv->rx_idx[rx_queue_idx]] = - skb; + priv->rx_buf[priv->rx_idx] = skb; *((dma_addr_t *)skb->cb) = dma_map_single(&priv->pdev->dev, skb_tail_pointer(skb), priv->rxbuffersize, DMA_FROM_DEVICE); @@ -1812,9 +1622,9 @@ done: pdesc->BufferAddress = *((dma_addr_t *)skb->cb); pdesc->OWN = 1; pdesc->Length = priv->rxbuffersize; - if (priv->rx_idx[rx_queue_idx] == priv->rxringcount - 1) + if (priv->rx_idx == priv->rxringcount - 1) pdesc->EOR = 1; - priv->rx_idx[rx_queue_idx] = (priv->rx_idx[rx_queue_idx] + 1) % + priv->rx_idx = (priv->rx_idx + 1) % priv->rxringcount; } } @@ -1865,9 +1675,9 @@ static void _rtl92e_cancel_deferred_work(struct r8192_priv *priv) cancel_work_sync(&priv->qos_activate); } -static int _rtl92e_up(struct net_device *dev, bool is_silent_reset) +static int _rtl92e_up(struct net_device *dev) { - if (_rtl92e_sta_up(dev, is_silent_reset) == -1) + if (_rtl92e_sta_up(dev) == -1) return -1; return 0; } @@ -1889,7 +1699,7 @@ static int _rtl92e_try_up(struct net_device *dev) if (priv->up == 1) return -1; - return _rtl92e_up(dev, false); + return _rtl92e_up(dev); } static int _rtl92e_close(struct net_device *dev) @@ -1925,10 +1735,10 @@ void rtl92e_commit(struct net_device *dev) if (priv->up == 0) return; - rtllib_softmac_stop_protocol(priv->rtllib, 0, true); + rtllib_softmac_stop_protocol(priv->rtllib); rtl92e_irq_disable(dev); rtl92e_stop_adapter(dev, true); - _rtl92e_up(dev, false); + _rtl92e_up(dev); } static void _rtl92e_restart(void *data) diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_core.h b/drivers/staging/rtl8192e/rtl8192e/rtl_core.h index fa82a06678..a4afbf3e93 100644 --- a/drivers/staging/rtl8192e/rtl8192e/rtl_core.h +++ b/drivers/staging/rtl8192e/rtl8192e/rtl_core.h @@ -91,8 +91,6 @@ #define MAX_TX_QUEUE 9 -#define MAX_RX_QUEUE 1 - #define MAX_RX_COUNT 64 #define MAX_TX_QUEUE_COUNT 9 @@ -132,7 +130,6 @@ enum rt_customer_id { enum reset_type { RESET_TYPE_NORESET = 0x00, - RESET_TYPE_NORMAL = 0x01, RESET_TYPE_SILENT = 0x02 }; @@ -233,10 +230,10 @@ struct r8192_priv { u8 (*rf_set_chan)(struct net_device *dev, u8 ch); - struct rx_desc *rx_ring[MAX_RX_QUEUE]; - struct sk_buff *rx_buf[MAX_RX_QUEUE][MAX_RX_COUNT]; - dma_addr_t rx_ring_dma[MAX_RX_QUEUE]; - unsigned int rx_idx[MAX_RX_QUEUE]; + struct rx_desc *rx_ring; + struct sk_buff *rx_buf[MAX_RX_COUNT]; + dma_addr_t rx_ring_dma; + unsigned int rx_idx; int rxringcount; u16 rxbuffersize; @@ -264,7 +261,6 @@ struct r8192_priv { short promisc; short chan; - bool ps_force; u32 irq_mask[2]; @@ -345,7 +341,6 @@ struct r8192_priv { u8 rfa_txpowertrackingindex; u8 rfa_txpowertrackingindex_real; u8 rfa_txpowertracking_default; - u8 rfc_txpowertrackingindex; bool btxpower_tracking; bool bcck_in_ch14; @@ -369,14 +364,9 @@ struct r8192_priv { u32 continue_diff_count; bool bswitch_fsync; u8 framesync; - u32 reset_count; - enum reset_type rst_progress; u16 tx_counter; u16 rx_ctr; - bool reset_in_progress; - bool force_reset; - bool force_lps; }; extern const struct ethtool_ops rtl819x_ethtool_ops; diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c b/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c index dbf765d601..330dafd626 100644 --- a/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c +++ b/drivers/staging/rtl8192e/rtl8192e/rtl_dm.c @@ -161,12 +161,9 @@ static void _rtl92e_dm_bandwidth_autoswitch(struct net_device *dev); static void _rtl92e_dm_check_tx_power_tracking(struct net_device *dev); -static void _rtl92e_dm_bb_initialgain_restore(struct net_device *dev); static void _rtl92e_dm_dig_init(struct net_device *dev); static void _rtl92e_dm_ctrl_initgain_byrssi(struct net_device *dev); -static void _rtl92e_dm_ctrl_initgain_byrssi_highpwr(struct net_device *dev); static void _rtl92e_dm_ctrl_initgain_byrssi_driver(struct net_device *dev); -static void _rtl92e_dm_ctrl_initgain_byrssi_false_alarm(struct net_device *dev); static void _rtl92e_dm_initial_gain(struct net_device *dev); static void _rtl92e_dm_pd_th(struct net_device *dev); static void _rtl92e_dm_cs_ratio(struct net_device *dev); @@ -285,9 +282,6 @@ static void _rtl92e_dm_check_rate_adaptive(struct net_device *dev) if (!priv->up) return; - if (pra->rate_adaptive_disabled) - return; - if (priv->rtllib->mode != WIRELESS_MODE_N_24G) return; @@ -298,25 +292,25 @@ static void _rtl92e_dm_check_rate_adaptive(struct net_device *dev) ht_info->bCurShortGI20MHz); pra->upper_rssi_threshold_ratr = - (pra->upper_rssi_threshold_ratr & (~BIT31)) | - ((bshort_gi_enabled) ? BIT31 : 0); + (pra->upper_rssi_threshold_ratr & (~BIT(31))) | + ((bshort_gi_enabled) ? BIT(31) : 0); pra->middle_rssi_threshold_ratr = - (pra->middle_rssi_threshold_ratr & (~BIT31)) | - ((bshort_gi_enabled) ? BIT31 : 0); + (pra->middle_rssi_threshold_ratr & (~BIT(31))) | + ((bshort_gi_enabled) ? BIT(31) : 0); if (priv->current_chnl_bw != HT_CHANNEL_WIDTH_20) { pra->low_rssi_threshold_ratr = - (pra->low_rssi_threshold_ratr_40M & (~BIT31)) | - ((bshort_gi_enabled) ? BIT31 : 0); + (pra->low_rssi_threshold_ratr_40M & (~BIT(31))) | + ((bshort_gi_enabled) ? BIT(31) : 0); } else { pra->low_rssi_threshold_ratr = - (pra->low_rssi_threshold_ratr_20M & (~BIT31)) | - ((bshort_gi_enabled) ? BIT31 : 0); + (pra->low_rssi_threshold_ratr_20M & (~BIT(31))) | + ((bshort_gi_enabled) ? BIT(31) : 0); } pra->ping_rssi_ratr = - (pra->ping_rssi_ratr & (~BIT31)) | - ((bshort_gi_enabled) ? BIT31 : 0); + (pra->ping_rssi_ratr & (~BIT(31))) | + ((bshort_gi_enabled) ? BIT(31) : 0); if (pra->ratr_state == DM_RATR_STA_HIGH) { high_rssi_thresh_for_ra = pra->high2low_rssi_thresh_for_ra; @@ -371,8 +365,6 @@ static void _rtl92e_dm_check_rate_adaptive(struct net_device *dev) ratr_value &= ~(RATE_ALL_OFDM_2SS); rtl92e_writel(dev, RATR0, ratr_value); rtl92e_writeb(dev, UFWP, 1); - - pra->last_ratr = target_ratr; } } else { @@ -530,11 +522,6 @@ static void _rtl92e_dm_tx_power_tracking_callback_tssi(struct net_device *dev) if (Pwr_Flag == 0) { mdelay(1); - if (priv->reset_in_progress) { - rtl92e_writeb(dev, Pw_Track_Flag, 0); - rtl92e_writeb(dev, FW_Busy_Flag, 0); - return; - } if (priv->rtllib->rf_power_state != rf_on) { rtl92e_writeb(dev, Pw_Track_Flag, 0); rtl92e_writeb(dev, FW_Busy_Flag, 0); @@ -920,95 +907,10 @@ void rtl92e_dm_cck_txpower_adjust(struct net_device *dev, bool binch14) _rtl92e_dm_cck_tx_power_adjust_thermal_meter(dev, binch14); } -static void _rtl92e_dm_tx_power_reset_recovery(struct net_device *dev) -{ - struct r8192_priv *priv = rtllib_priv(dev); - - rtl92e_set_bb_reg(dev, rOFDM0_XATxIQImbalance, bMaskDWord, - dm_tx_bb_gain[priv->rfa_txpowertrackingindex]); - rtl92e_dm_cck_txpower_adjust(dev, priv->bcck_in_ch14); - - rtl92e_set_bb_reg(dev, rOFDM0_XCTxIQImbalance, bMaskDWord, - dm_tx_bb_gain[priv->rfc_txpowertrackingindex]); -} - -void rtl92e_dm_restore_state(struct net_device *dev) -{ - struct r8192_priv *priv = rtllib_priv(dev); - u32 reg_ratr = priv->rate_adaptive.last_ratr; - u32 ratr_value; - - if (!priv->up) - return; - - if (priv->rate_adaptive.rate_adaptive_disabled) - return; - if (priv->rtllib->mode != WIRELESS_MODE_N_24G) - return; - ratr_value = reg_ratr; - ratr_value &= ~(RATE_ALL_OFDM_2SS); - rtl92e_writel(dev, RATR0, ratr_value); - rtl92e_writeb(dev, UFWP, 1); - if (priv->tx_pwr_tracking_init && priv->btxpower_tracking) - _rtl92e_dm_tx_power_reset_recovery(dev); - - _rtl92e_dm_bb_initialgain_restore(dev); -} - -static void _rtl92e_dm_bb_initialgain_restore(struct net_device *dev) -{ - struct r8192_priv *priv = rtllib_priv(dev); - u32 bit_mask = 0x7f; - - if (dm_digtable.dig_algorithm == DIG_ALGO_BY_RSSI) - return; - - rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x8); - rtl92e_set_bb_reg(dev, rOFDM0_XAAGCCore1, bit_mask, - (u32)priv->initgain_backup.xaagccore1); - rtl92e_set_bb_reg(dev, rOFDM0_XBAGCCore1, bit_mask, - (u32)priv->initgain_backup.xbagccore1); - rtl92e_set_bb_reg(dev, rOFDM0_XCAGCCore1, bit_mask, - (u32)priv->initgain_backup.xcagccore1); - rtl92e_set_bb_reg(dev, rOFDM0_XDAGCCore1, bit_mask, - (u32)priv->initgain_backup.xdagccore1); - bit_mask = bMaskByte2; - rtl92e_set_bb_reg(dev, rCCK0_CCA, bit_mask, - (u32)priv->initgain_backup.cca); - rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x1); -} - -void rtl92e_dm_backup_state(struct net_device *dev) -{ - struct r8192_priv *priv = rtllib_priv(dev); - u32 bit_mask = bMaskByte0; - - priv->bswitch_fsync = false; - - if (dm_digtable.dig_algorithm == DIG_ALGO_BY_RSSI) - return; - - rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x8); - priv->initgain_backup.xaagccore1 = rtl92e_get_bb_reg(dev, rOFDM0_XAAGCCore1, bit_mask); - priv->initgain_backup.xbagccore1 = rtl92e_get_bb_reg(dev, rOFDM0_XBAGCCore1, bit_mask); - priv->initgain_backup.xcagccore1 = rtl92e_get_bb_reg(dev, rOFDM0_XCAGCCore1, bit_mask); - priv->initgain_backup.xdagccore1 = rtl92e_get_bb_reg(dev, rOFDM0_XDAGCCore1, bit_mask); - bit_mask = bMaskByte2; - priv->initgain_backup.cca = (u8)rtl92e_get_bb_reg(dev, rCCK0_CCA, bit_mask); -} - static void _rtl92e_dm_dig_init(struct net_device *dev) { struct r8192_priv *priv = rtllib_priv(dev); - dm_digtable.dig_enable_flag = true; - - dm_digtable.dig_algorithm = DIG_ALGO_BY_RSSI; - - dm_digtable.dig_algorithm_switch = 0; - - dm_digtable.dig_state = DM_STA_DIG_MAX; - dm_digtable.dig_highpwr_state = DM_STA_DIG_MAX; dm_digtable.cur_sta_connect_state = DIG_STA_DISCONNECT; dm_digtable.pre_sta_connect_state = DIG_STA_DISCONNECT; @@ -1029,15 +931,7 @@ static void _rtl92e_dm_dig_init(struct net_device *dev) static void _rtl92e_dm_ctrl_initgain_byrssi(struct net_device *dev) { - if (!dm_digtable.dig_enable_flag) - return; - - if (dm_digtable.dig_algorithm == DIG_ALGO_BY_FALSE_ALARM) - _rtl92e_dm_ctrl_initgain_byrssi_false_alarm(dev); - else if (dm_digtable.dig_algorithm == DIG_ALGO_BY_RSSI) - _rtl92e_dm_ctrl_initgain_byrssi_driver(dev); - else - return; + _rtl92e_dm_ctrl_initgain_byrssi_driver(dev); } /*----------------------------------------------------------------------------- @@ -1064,16 +958,10 @@ static void _rtl92e_dm_ctrl_initgain_byrssi_driver(struct net_device *dev) u8 i; static u8 fw_dig; - if (!dm_digtable.dig_enable_flag) - return; - - if (dm_digtable.dig_algorithm_switch) - fw_dig = 0; if (fw_dig <= 3) { for (i = 0; i < 3; i++) rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x8); fw_dig++; - dm_digtable.dig_state = DM_STA_DIG_OFF; } if (priv->rtllib->link_state == MAC80211_LINKED) @@ -1085,150 +973,14 @@ static void _rtl92e_dm_ctrl_initgain_byrssi_driver(struct net_device *dev) _rtl92e_dm_initial_gain(dev); _rtl92e_dm_pd_th(dev); _rtl92e_dm_cs_ratio(dev); - if (dm_digtable.dig_algorithm_switch) - dm_digtable.dig_algorithm_switch = 0; dm_digtable.pre_sta_connect_state = dm_digtable.cur_sta_connect_state; } -static void _rtl92e_dm_ctrl_initgain_byrssi_false_alarm(struct net_device *dev) -{ - struct r8192_priv *priv = rtllib_priv(dev); - static u32 reset_cnt; - u8 i; - - if (!dm_digtable.dig_enable_flag) - return; - - if (dm_digtable.dig_algorithm_switch) { - dm_digtable.dig_state = DM_STA_DIG_MAX; - for (i = 0; i < 3; i++) - rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x1); - dm_digtable.dig_algorithm_switch = 0; - } - - if (priv->rtllib->link_state != MAC80211_LINKED) - return; - - if ((priv->undecorated_smoothed_pwdb > dm_digtable.rssi_low_thresh) && - (priv->undecorated_smoothed_pwdb < dm_digtable.rssi_high_thresh)) - return; - if (priv->undecorated_smoothed_pwdb <= dm_digtable.rssi_low_thresh) { - if (dm_digtable.dig_state == DM_STA_DIG_OFF && - (priv->reset_count == reset_cnt)) - return; - reset_cnt = priv->reset_count; - - dm_digtable.dig_highpwr_state = DM_STA_DIG_MAX; - dm_digtable.dig_state = DM_STA_DIG_OFF; - - rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x8); - - rtl92e_writeb(dev, rOFDM0_XAAGCCore1, 0x17); - rtl92e_writeb(dev, rOFDM0_XBAGCCore1, 0x17); - rtl92e_writeb(dev, rOFDM0_XCAGCCore1, 0x17); - rtl92e_writeb(dev, rOFDM0_XDAGCCore1, 0x17); - - if (priv->current_chnl_bw != HT_CHANNEL_WIDTH_20) - rtl92e_writeb(dev, (rOFDM0_XATxAFE + 3), 0x00); - else - rtl92e_writeb(dev, rOFDM0_RxDetector1, 0x42); - - rtl92e_writeb(dev, 0xa0a, 0x08); - - return; - } - - if (priv->undecorated_smoothed_pwdb >= dm_digtable.rssi_high_thresh) { - u8 reset_flag = 0; - - if (dm_digtable.dig_state == DM_STA_DIG_ON && - (priv->reset_count == reset_cnt)) { - _rtl92e_dm_ctrl_initgain_byrssi_highpwr(dev); - return; - } - if (priv->reset_count != reset_cnt) - reset_flag = 1; - - reset_cnt = priv->reset_count; - - dm_digtable.dig_state = DM_STA_DIG_ON; - - if (reset_flag == 1) { - rtl92e_writeb(dev, rOFDM0_XAAGCCore1, 0x2c); - rtl92e_writeb(dev, rOFDM0_XBAGCCore1, 0x2c); - rtl92e_writeb(dev, rOFDM0_XCAGCCore1, 0x2c); - rtl92e_writeb(dev, rOFDM0_XDAGCCore1, 0x2c); - } else { - rtl92e_writeb(dev, rOFDM0_XAAGCCore1, 0x20); - rtl92e_writeb(dev, rOFDM0_XBAGCCore1, 0x20); - rtl92e_writeb(dev, rOFDM0_XCAGCCore1, 0x20); - rtl92e_writeb(dev, rOFDM0_XDAGCCore1, 0x20); - } - - if (priv->current_chnl_bw != HT_CHANNEL_WIDTH_20) - rtl92e_writeb(dev, (rOFDM0_XATxAFE + 3), 0x20); - else - rtl92e_writeb(dev, rOFDM0_RxDetector1, 0x44); - - rtl92e_writeb(dev, 0xa0a, 0xcd); - - rtl92e_set_bb_reg(dev, UFWP, bMaskByte1, 0x1); - } - _rtl92e_dm_ctrl_initgain_byrssi_highpwr(dev); -} - -static void _rtl92e_dm_ctrl_initgain_byrssi_highpwr(struct net_device *dev) -{ - struct r8192_priv *priv = rtllib_priv(dev); - static u32 reset_cnt_highpwr; - - if ((priv->undecorated_smoothed_pwdb > - dm_digtable.rssi_high_power_lowthresh) && - (priv->undecorated_smoothed_pwdb < - dm_digtable.rssi_high_power_highthresh)) - return; - - if (priv->undecorated_smoothed_pwdb >= - dm_digtable.rssi_high_power_highthresh) { - if (dm_digtable.dig_highpwr_state == DM_STA_DIG_ON && - (priv->reset_count == reset_cnt_highpwr)) - return; - dm_digtable.dig_highpwr_state = DM_STA_DIG_ON; - - if (priv->current_chnl_bw != HT_CHANNEL_WIDTH_20) - rtl92e_writeb(dev, (rOFDM0_XATxAFE + 3), 0x10); - else - rtl92e_writeb(dev, rOFDM0_RxDetector1, 0x43); - } else { - if (dm_digtable.dig_highpwr_state == DM_STA_DIG_OFF && - (priv->reset_count == reset_cnt_highpwr)) - return; - dm_digtable.dig_highpwr_state = DM_STA_DIG_OFF; - - if ((priv->undecorated_smoothed_pwdb < - dm_digtable.rssi_high_power_lowthresh) && - (priv->undecorated_smoothed_pwdb >= - dm_digtable.rssi_high_thresh)) { - if (priv->current_chnl_bw != HT_CHANNEL_WIDTH_20) - rtl92e_writeb(dev, (rOFDM0_XATxAFE + 3), 0x20); - else - rtl92e_writeb(dev, rOFDM0_RxDetector1, 0x44); - } - } - reset_cnt_highpwr = priv->reset_count; -} - static void _rtl92e_dm_initial_gain(struct net_device *dev) { struct r8192_priv *priv = rtllib_priv(dev); u8 initial_gain = 0; static u8 initialized, force_write; - static u32 reset_cnt; - - if (dm_digtable.dig_algorithm_switch) { - initialized = 0; - reset_cnt = 0; - } if (rtllib_act_scanning(priv->rtllib, true)) { force_write = 1; @@ -1254,11 +1006,6 @@ static void _rtl92e_dm_initial_gain(struct net_device *dev) dm_digtable.pre_ig_value = 0; } - if (priv->reset_count != reset_cnt) { - force_write = 1; - reset_cnt = priv->reset_count; - } - if (dm_digtable.pre_ig_value != rtl92e_readb(dev, rOFDM0_XAAGCCore1)) force_write = 1; @@ -1279,12 +1026,6 @@ static void _rtl92e_dm_pd_th(struct net_device *dev) { struct r8192_priv *priv = rtllib_priv(dev); static u8 initialized, force_write; - static u32 reset_cnt; - - if (dm_digtable.dig_algorithm_switch) { - initialized = 0; - reset_cnt = 0; - } if (dm_digtable.pre_sta_connect_state == dm_digtable.cur_sta_connect_state) { if (dm_digtable.cur_sta_connect_state == DIG_STA_CONNECT) { @@ -1312,11 +1053,6 @@ static void _rtl92e_dm_pd_th(struct net_device *dev) dm_digtable.curpd_thstate = DIG_PD_AT_LOW_POWER; } - if (priv->reset_count != reset_cnt) { - force_write = 1; - reset_cnt = priv->reset_count; - } - if ((dm_digtable.prepd_thstate != dm_digtable.curpd_thstate) || (initialized <= 3) || force_write) { if (dm_digtable.curpd_thstate == DIG_PD_AT_LOW_POWER) { @@ -1345,14 +1081,7 @@ static void _rtl92e_dm_pd_th(struct net_device *dev) static void _rtl92e_dm_cs_ratio(struct net_device *dev) { - struct r8192_priv *priv = rtllib_priv(dev); static u8 initialized, force_write; - static u32 reset_cnt; - - if (dm_digtable.dig_algorithm_switch) { - initialized = 0; - reset_cnt = 0; - } if (dm_digtable.pre_sta_connect_state == dm_digtable.cur_sta_connect_state) { if (dm_digtable.cur_sta_connect_state == DIG_STA_CONNECT) { @@ -1369,11 +1098,6 @@ static void _rtl92e_dm_cs_ratio(struct net_device *dev) dm_digtable.curcs_ratio_state = DIG_CS_RATIO_LOWER; } - if (priv->reset_count != reset_cnt) { - force_write = 1; - reset_cnt = priv->reset_count; - } - if ((dm_digtable.precs_ratio_state != dm_digtable.curcs_ratio_state) || !initialized || force_write) { if (dm_digtable.curcs_ratio_state == DIG_CS_RATIO_LOWER) @@ -1405,8 +1129,6 @@ static void _rtl92e_dm_check_edca_turbo(struct net_device *dev) unsigned long curTxOkCnt = 0; unsigned long curRxOkCnt = 0; - if (priv->rtllib->iw_mode == IW_MODE_ADHOC) - goto dm_CheckEdcaTurbo_EXIT; if (priv->rtllib->link_state != MAC80211_LINKED) goto dm_CheckEdcaTurbo_EXIT; if (priv->rtllib->ht_info->iot_action & HT_IOT_ACT_DISABLE_EDCA_TURBO) @@ -1525,7 +1247,7 @@ static void _rtl92e_dm_check_rf_ctrl_gpio(void *data) tmp1byte = rtl92e_readb(dev, GPI); - rf_power_state_to_set = (tmp1byte & BIT1) ? rf_on : rf_off; + rf_power_state_to_set = (tmp1byte & BIT(1)) ? rf_on : rf_off; if (priv->hw_radio_off && (rf_power_state_to_set == rf_on)) { netdev_info(dev, "gpiochangeRF - HW Radio ON\n"); @@ -1989,7 +1711,6 @@ static void _rtl92e_dm_check_fsync(struct net_device *dev) #define RegC38_Fsync_AP_BCM 2 struct r8192_priv *priv = rtllib_priv(dev); static u8 reg_c38_State = RegC38_Default; - static u32 reset_cnt; if (priv->rtllib->link_state == MAC80211_LINKED && priv->rtllib->ht_info->IOTPeer == HT_IOT_PEER_BROADCOM) { @@ -2073,12 +1794,6 @@ static void _rtl92e_dm_check_fsync(struct net_device *dev) } } } - if (priv->reset_count != reset_cnt) { - rtl92e_writeb(dev, rOFDM0_RxDetector3, - priv->framesync); - reg_c38_State = RegC38_Default; - reset_cnt = priv->reset_count; - } } /*---------------------------Define function prototype------------------------*/ diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_dm.h b/drivers/staging/rtl8192e/rtl8192e/rtl_dm.h index 01587e2fec..84e673452b 100644 --- a/drivers/staging/rtl8192e/rtl8192e/rtl_dm.h +++ b/drivers/staging/rtl8192e/rtl8192e/rtl_dm.h @@ -50,18 +50,12 @@ /*------------------------------Define structure----------------------------*/ struct dig_t { - u8 dig_enable_flag; - u8 dig_algorithm; - u8 dig_algorithm_switch; - long rssi_low_thresh; long rssi_high_thresh; long rssi_high_power_lowthresh; long rssi_high_power_highthresh; - u8 dig_state; - u8 dig_highpwr_state; u8 cur_sta_connect_state; u8 pre_sta_connect_state; @@ -80,12 +74,6 @@ struct dig_t { long rssi_val; }; -enum dm_dig_sta { - DM_STA_DIG_OFF = 0, - DM_STA_DIG_ON, - DM_STA_DIG_MAX -}; - enum dm_ratr_sta { DM_RATR_STA_HIGH = 0, DM_RATR_STA_MIDDLE = 1, @@ -93,22 +81,9 @@ enum dm_ratr_sta { DM_RATR_STA_MAX }; -enum dm_dig_alg { - DIG_ALGO_BY_FALSE_ALARM = 0, - DIG_ALGO_BY_RSSI = 1, - DIG_ALGO_BEFORE_CONNECT_BY_RSSI_AND_ALARM = 2, - DIG_ALGO_BY_TOW_PORT = 3, - DIG_ALGO_MAX -}; - enum dm_dig_connect { DIG_STA_DISCONNECT = 0, DIG_STA_CONNECT = 1, - DIG_STA_BEFORE_CONNECT = 2, - DIG_AP_DISCONNECT = 3, - DIG_AP_CONNECT = 4, - DIG_AP_ADD_STATION = 5, - DIG_CONNECT_MAX }; enum dm_dig_pd_th { @@ -178,8 +153,6 @@ void rtl92e_dm_txpower_tracking_wq(void *data); void rtl92e_dm_cck_txpower_adjust(struct net_device *dev, bool binch14); -void rtl92e_dm_restore_state(struct net_device *dev); -void rtl92e_dm_backup_state(struct net_device *dev); void rtl92e_dm_init_edca_turbo(struct net_device *dev); void rtl92e_dm_rf_pathcheck_wq(void *data); void rtl92e_dm_init_txpower_tracking(struct net_device *dev); diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_pci.c b/drivers/staging/rtl8192e/rtl8192e/rtl_pci.c index 0bc3e01300..1aa7356158 100644 --- a/drivers/staging/rtl8192e/rtl8192e/rtl_pci.c +++ b/drivers/staging/rtl8192e/rtl8192e/rtl_pci.c @@ -21,7 +21,7 @@ static void _rtl92e_parse_pci_configuration(struct pci_dev *pdev, pcie_capability_read_word(priv->pdev, PCI_EXP_LNKCTL, &link_ctrl_reg); pci_read_config_byte(pdev, 0x98, &tmp); - tmp |= BIT4; + tmp |= BIT(4); pci_write_config_byte(pdev, 0x98, tmp); tmp = 0x17; diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_ps.c b/drivers/staging/rtl8192e/rtl8192e/rtl_ps.c index 598bfc0ff3..44a9fe8318 100644 --- a/drivers/staging/rtl8192e/rtl8192e/rtl_ps.c +++ b/drivers/staging/rtl8192e/rtl8192e/rtl_ps.c @@ -181,11 +181,7 @@ static bool _rtl92e_ps_set_mode(struct net_device *dev, u8 rtPsMode) { struct r8192_priv *priv = rtllib_priv(dev); - if (priv->rtllib->iw_mode == IW_MODE_ADHOC) - return false; - - if (!priv->ps_force) - priv->rtllib->ps = rtPsMode; + priv->rtllib->ps = rtPsMode; if (priv->rtllib->sta_sleep != LPS_IS_WAKE && rtPsMode == RTLLIB_PS_DISABLED) { unsigned long flags; @@ -208,8 +204,7 @@ void rtl92e_leisure_ps_enter(struct net_device *dev) &priv->rtllib->pwr_save_ctrl; if (!((priv->rtllib->iw_mode == IW_MODE_INFRA) && - (priv->rtllib->link_state == MAC80211_LINKED)) - || (priv->rtllib->iw_mode == IW_MODE_ADHOC)) + (priv->rtllib->link_state == MAC80211_LINKED))) return; if (psc->bLeisurePs) { diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_wx.c b/drivers/staging/rtl8192e/rtl8192e/rtl_wx.c index 1897988525..4371ab1239 100644 --- a/drivers/staging/rtl8192e/rtl8192e/rtl_wx.c +++ b/drivers/staging/rtl8192e/rtl8192e/rtl_wx.c @@ -122,126 +122,11 @@ static int _rtl92e_wx_get_power(struct net_device *dev, return rtllib_wx_get_power(priv->rtllib, info, wrqu, extra); } -static int _rtl92e_wx_set_rawtx(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct r8192_priv *priv = rtllib_priv(dev); - int ret; - - if (priv->hw_radio_off) - return 0; - - mutex_lock(&priv->wx_mutex); - - ret = rtllib_wx_set_rawtx(priv->rtllib, info, wrqu, extra); - - mutex_unlock(&priv->wx_mutex); - - return ret; -} - -static int _rtl92e_wx_force_reset(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct r8192_priv *priv = rtllib_priv(dev); - - mutex_lock(&priv->wx_mutex); - - priv->force_reset = *extra; - mutex_unlock(&priv->wx_mutex); - return 0; -} - -static int _rtl92e_wx_adapter_power_status(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct r8192_priv *priv = rtllib_priv(dev); - struct rt_pwr_save_ctrl *psc = (struct rt_pwr_save_ctrl *) - (&priv->rtllib->pwr_save_ctrl); - struct rtllib_device *ieee = priv->rtllib; - - mutex_lock(&priv->wx_mutex); - - if (*extra || priv->force_lps) { - priv->ps_force = false; - psc->bLeisurePs = true; - } else { - if (priv->rtllib->link_state == MAC80211_LINKED) - rtl92e_leisure_ps_leave(dev); - - priv->ps_force = true; - psc->bLeisurePs = false; - ieee->ps = *extra; - } - - mutex_unlock(&priv->wx_mutex); - - return 0; -} - -static int _rtl92e_wx_set_lps_awake_interval(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - struct r8192_priv *priv = rtllib_priv(dev); - struct rt_pwr_save_ctrl *psc = (struct rt_pwr_save_ctrl *) - (&priv->rtllib->pwr_save_ctrl); - - mutex_lock(&priv->wx_mutex); - - netdev_info(dev, "%s(): set lps awake interval ! extra is %d\n", - __func__, *extra); - - psc->reg_max_lps_awake_intvl = *extra; - mutex_unlock(&priv->wx_mutex); - return 0; -} - -static int _rtl92e_wx_set_force_lps(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct r8192_priv *priv = rtllib_priv(dev); - - 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; - mutex_unlock(&priv->wx_mutex); - return 0; -} - -static int _rtl92e_wx_set_debug(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct r8192_priv *priv = rtllib_priv(dev); - u8 c = *extra; - - if (priv->hw_radio_off) - return 0; - - netdev_info(dev, "=====>%s(), *extra:%x, debugflag:%x\n", __func__, - *extra, rt_global_debug_component); - if (c > 0) - rt_global_debug_component |= (1 << c); - else - rt_global_debug_component &= BIT31; - return 0; -} - static int _rtl92e_wx_set_mode(struct net_device *dev, struct iw_request_info *a, union iwreq_data *wrqu, char *b) { struct r8192_priv *priv = rtllib_priv(dev); - struct rtllib_device *ieee = netdev_priv_rsl(dev); enum rt_rf_power_state rt_state; int ret; @@ -250,8 +135,7 @@ static int _rtl92e_wx_set_mode(struct net_device *dev, return 0; rt_state = priv->rtllib->rf_power_state; mutex_lock(&priv->wx_mutex); - if (wrqu->mode == IW_MODE_ADHOC || wrqu->mode == IW_MODE_MONITOR || - ieee->net_promiscuous_md) { + if (wrqu->mode == IW_MODE_MONITOR) { if (rt_state == rf_off) { if (priv->rtllib->rf_off_reason > RF_CHANGE_BY_IPS) { @@ -724,22 +608,6 @@ end_hw_sec: return ret; } -static int _rtl92e_wx_set_scan_type(struct net_device *dev, - struct iw_request_info *aa, - union iwreq_data *wrqu, char *p) -{ - struct r8192_priv *priv = rtllib_priv(dev); - int *parms = (int *)p; - int mode = parms[0]; - - if (priv->hw_radio_off) - return 0; - - priv->rtllib->active_scan = mode; - - return 1; -} - #define R8192_MAX_RETRY 255 static int _rtl92e_wx_set_retry(struct net_device *dev, struct iw_request_info *info, @@ -844,8 +712,7 @@ static int _rtl92e_wx_set_encode_ext(struct net_device *dev, idx--; group = ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY; - if ((!group) || (ieee->iw_mode == IW_MODE_ADHOC) || - (alg == KEY_TYPE_WEP40)) { + if ((!group) || (alg == KEY_TYPE_WEP40)) { if ((ext->key_len == 13) && (alg == KEY_TYPE_WEP40)) alg = KEY_TYPE_WEP104; ieee->pairwise_key_type = alg; @@ -865,7 +732,7 @@ static int _rtl92e_wx_set_encode_ext(struct net_device *dev, rtl92e_set_swcam(dev, idx, idx, alg, broadcast_addr, key); } else { if ((ieee->pairwise_key_type == KEY_TYPE_CCMP) && - ieee->ht_info->bCurrentHTSupport) + ieee->ht_info->current_ht_support) rtl92e_writeb(dev, 0x173, 1); rtl92e_set_key(dev, 4, idx, alg, (u8 *)ieee->ap_mac_addr, 0, key); @@ -938,7 +805,7 @@ static int _rtl92e_wx_get_gen_ie(struct net_device *dev, struct r8192_priv *priv = rtllib_priv(dev); struct rtllib_device *ieee = priv->rtllib; - if (ieee->wpa_ie_len == 0 || ieee->wpa_ie == NULL) { + if (ieee->wpa_ie_len == 0 || !ieee->wpa_ie) { data->data.length = 0; return 0; } @@ -951,67 +818,6 @@ static int _rtl92e_wx_get_gen_ie(struct net_device *dev, return ret; } -#define OID_RT_INTEL_PROMISCUOUS_MODE 0xFF0101F6 - -static int _rtl92e_wx_set_promisc_mode(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct r8192_priv *priv = rtllib_priv(dev); - struct rtllib_device *ieee = priv->rtllib; - - u32 info_buf[3]; - - u32 oid; - u32 promiscuous_on; - u32 fltr_src_sta_frame; - - if (copy_from_user(info_buf, wrqu->data.pointer, sizeof(info_buf))) - return -EFAULT; - - oid = info_buf[0]; - promiscuous_on = info_buf[1]; - fltr_src_sta_frame = info_buf[2]; - - if (oid == OID_RT_INTEL_PROMISCUOUS_MODE) { - ieee->intel_promiscuous_md_info.promiscuous_on = - (promiscuous_on) ? (true) : (false); - ieee->intel_promiscuous_md_info.fltr_src_sta_frame = - (fltr_src_sta_frame) ? (true) : (false); - (promiscuous_on) ? - (rtllib_EnableIntelPromiscuousMode(dev, false)) : - (rtllib_DisableIntelPromiscuousMode(dev, false)); - - netdev_info(dev, - "=======>%s(), on = %d, filter src sta = %d\n", - __func__, promiscuous_on, - fltr_src_sta_frame); - } else { - return -1; - } - - return 0; -} - -static int _rtl92e_wx_get_promisc_mode(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - struct r8192_priv *priv = rtllib_priv(dev); - struct rtllib_device *ieee = priv->rtllib; - - mutex_lock(&priv->wx_mutex); - - snprintf(extra, 45, "PromiscuousMode:%d, FilterSrcSTAFrame:%d", - ieee->intel_promiscuous_md_info.promiscuous_on, - ieee->intel_promiscuous_md_info.fltr_src_sta_frame); - wrqu->data.length = strlen(extra) + 1; - - mutex_unlock(&priv->wx_mutex); - - return 0; -} - #define IW_IOCTL(x) ((x) - SIOCSIWCOMMIT) static iw_handler r8192_wx_handlers[] = { [IW_IOCTL(SIOCGIWNAME)] = _rtl92e_wx_get_name, @@ -1047,72 +853,6 @@ static iw_handler r8192_wx_handlers[] = { [IW_IOCTL(SIOCSIWENCODEEXT)] = _rtl92e_wx_set_encode_ext, }; -/* the following rule need to be following, - * Odd : get (world access), - * even : set (root access) - */ -static const struct iw_priv_args r8192_private_args[] = { - { - SIOCIWFIRSTPRIV + 0x0, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_debugflag" - }, { - SIOCIWFIRSTPRIV + 0x1, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "activescan" - }, { - SIOCIWFIRSTPRIV + 0x2, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "rawtx" - }, { - SIOCIWFIRSTPRIV + 0x3, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "forcereset" - }, { - SIOCIWFIRSTPRIV + 0x6, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_NONE, - "set_power" - }, { - SIOCIWFIRSTPRIV + 0xa, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_NONE, - "lps_interv" - }, { - SIOCIWFIRSTPRIV + 0xb, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_NONE, - "lps_force" - }, { - SIOCIWFIRSTPRIV + 0x16, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3, 0, "setpromisc" - }, { - SIOCIWFIRSTPRIV + 0x17, - 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | 45, "getpromisc" - } - -}; - -static iw_handler r8192_private_handler[] = { - (iw_handler)_rtl92e_wx_set_debug, /*SIOCIWSECONDPRIV*/ - (iw_handler)_rtl92e_wx_set_scan_type, - (iw_handler)_rtl92e_wx_set_rawtx, - (iw_handler)_rtl92e_wx_force_reset, - (iw_handler)NULL, - (iw_handler)NULL, - (iw_handler)_rtl92e_wx_adapter_power_status, - (iw_handler)NULL, - (iw_handler)NULL, - (iw_handler)NULL, - (iw_handler)_rtl92e_wx_set_lps_awake_interval, - (iw_handler)_rtl92e_wx_set_force_lps, - (iw_handler)NULL, - (iw_handler)NULL, - (iw_handler)NULL, - (iw_handler)NULL, - (iw_handler)NULL, - (iw_handler)NULL, - (iw_handler)NULL, - (iw_handler)NULL, - (iw_handler)NULL, - (iw_handler)NULL, - (iw_handler)_rtl92e_wx_set_promisc_mode, - (iw_handler)_rtl92e_wx_get_promisc_mode, -}; - static struct iw_statistics *_rtl92e_get_wireless_stats(struct net_device *dev) { struct r8192_priv *priv = rtllib_priv(dev); @@ -1144,10 +884,5 @@ static struct iw_statistics *_rtl92e_get_wireless_stats(struct net_device *dev) const struct iw_handler_def r8192_wx_handlers_def = { .standard = r8192_wx_handlers, .num_standard = ARRAY_SIZE(r8192_wx_handlers), - .private = r8192_private_handler, - .num_private = ARRAY_SIZE(r8192_private_handler), - .num_private_args = sizeof(r8192_private_args) / - sizeof(struct iw_priv_args), .get_wireless_stats = _rtl92e_get_wireless_stats, - .private_args = (struct iw_priv_args *)r8192_private_args, }; diff --git a/drivers/staging/rtl8192e/rtl819x_BAProc.c b/drivers/staging/rtl8192e/rtl819x_BAProc.c index 0e3372868f..4af8055d24 100644 --- a/drivers/staging/rtl8192e/rtl819x_BAProc.c +++ b/drivers/staging/rtl8192e/rtl819x_BAProc.c @@ -10,109 +10,109 @@ #include "rtllib.h" #include "rtl819x_BA.h" -static void activate_ba_entry(struct ba_record *pBA, u16 Time) +static void activate_ba_entry(struct ba_record *ba, u16 time) { - pBA->b_valid = true; - if (Time != 0) - mod_timer(&pBA->timer, jiffies + msecs_to_jiffies(Time)); + ba->b_valid = true; + if (time != 0) + mod_timer(&ba->timer, jiffies + msecs_to_jiffies(time)); } -static void deactivate_ba_entry(struct rtllib_device *ieee, struct ba_record *pBA) +static void deactivate_ba_entry(struct rtllib_device *ieee, struct ba_record *ba) { - pBA->b_valid = false; - del_timer_sync(&pBA->timer); + ba->b_valid = false; + del_timer_sync(&ba->timer); } static u8 tx_ts_delete_ba(struct rtllib_device *ieee, struct tx_ts_record *pTxTs) { - struct ba_record *pAdmittedBa = &pTxTs->TxAdmittedBARecord; - struct ba_record *pPendingBa = &pTxTs->TxPendingBARecord; + struct ba_record *admitted_ba = &pTxTs->TxAdmittedBARecord; + struct ba_record *pending_ba = &pTxTs->TxPendingBARecord; u8 bSendDELBA = false; - if (pPendingBa->b_valid) { - deactivate_ba_entry(ieee, pPendingBa); + if (pending_ba->b_valid) { + deactivate_ba_entry(ieee, pending_ba); bSendDELBA = true; } - if (pAdmittedBa->b_valid) { - deactivate_ba_entry(ieee, pAdmittedBa); + if (admitted_ba->b_valid) { + deactivate_ba_entry(ieee, admitted_ba); bSendDELBA = true; } return bSendDELBA; } -static u8 rx_ts_delete_ba(struct rtllib_device *ieee, struct rx_ts_record *pRxTs) +static u8 rx_ts_delete_ba(struct rtllib_device *ieee, struct rx_ts_record *ts) { - struct ba_record *pBa = &pRxTs->rx_admitted_ba_record; + struct ba_record *ba = &ts->rx_admitted_ba_record; u8 bSendDELBA = false; - if (pBa->b_valid) { - deactivate_ba_entry(ieee, pBa); + if (ba->b_valid) { + deactivate_ba_entry(ieee, ba); bSendDELBA = true; } return bSendDELBA; } -void rtllib_reset_ba_entry(struct ba_record *pBA) +void rtllib_reset_ba_entry(struct ba_record *ba) { - pBA->b_valid = false; - pBA->ba_param_set.short_data = 0; - pBA->ba_timeout_value = 0; - pBA->dialog_token = 0; - pBA->ba_start_seq_ctrl.short_data = 0; + ba->b_valid = false; + ba->ba_param_set.short_data = 0; + ba->ba_timeout_value = 0; + ba->dialog_token = 0; + ba->ba_start_seq_ctrl.short_data = 0; } -static struct sk_buff *rtllib_ADDBA(struct rtllib_device *ieee, u8 *Dst, - struct ba_record *pBA, - u16 StatusCode, u8 type) +static struct sk_buff *rtllib_ADDBA(struct rtllib_device *ieee, u8 *dst, + struct ba_record *ba, + u16 status_code, u8 type) { struct sk_buff *skb = NULL; - struct rtllib_hdr_3addr *BAReq = NULL; + struct ieee80211_hdr_3addr *BAReq = NULL; u8 *tag = NULL; u16 len = ieee->tx_headroom + 9; netdev_dbg(ieee->dev, "%s(): frame(%d) sentd to: %pM, ieee->dev:%p\n", - __func__, type, Dst, ieee->dev); + __func__, type, dst, ieee->dev); - if (!pBA) { - netdev_warn(ieee->dev, "pBA is NULL\n"); + if (!ba) { + netdev_warn(ieee->dev, "ba is NULL\n"); return NULL; } - skb = dev_alloc_skb(len + sizeof(struct rtllib_hdr_3addr)); + skb = dev_alloc_skb(len + sizeof(struct ieee80211_hdr_3addr)); if (!skb) return NULL; - memset(skb->data, 0, sizeof(struct rtllib_hdr_3addr)); + memset(skb->data, 0, sizeof(struct ieee80211_hdr_3addr)); skb_reserve(skb, ieee->tx_headroom); - BAReq = skb_put(skb, sizeof(struct rtllib_hdr_3addr)); + BAReq = skb_put(skb, sizeof(struct ieee80211_hdr_3addr)); - ether_addr_copy(BAReq->addr1, Dst); + ether_addr_copy(BAReq->addr1, dst); ether_addr_copy(BAReq->addr2, ieee->dev->dev_addr); ether_addr_copy(BAReq->addr3, ieee->current_network.bssid); - BAReq->frame_ctl = cpu_to_le16(RTLLIB_STYPE_MANAGE_ACT); + BAReq->frame_control = cpu_to_le16(IEEE80211_STYPE_ACTION); tag = skb_put(skb, 9); *tag++ = ACT_CAT_BA; *tag++ = type; - *tag++ = pBA->dialog_token; + *tag++ = ba->dialog_token; if (type == ACT_ADDBARSP) { - put_unaligned_le16(StatusCode, tag); + put_unaligned_le16(status_code, tag); tag += 2; } - put_unaligned_le16(pBA->ba_param_set.short_data, tag); + put_unaligned_le16(ba->ba_param_set.short_data, tag); tag += 2; - put_unaligned_le16(pBA->ba_timeout_value, tag); + put_unaligned_le16(ba->ba_timeout_value, tag); tag += 2; if (type == ACT_ADDBAREQ) { - memcpy(tag, (u8 *)&pBA->ba_start_seq_ctrl, 2); + memcpy(tag, (u8 *)&ba->ba_start_seq_ctrl, 2); tag += 2; } @@ -124,36 +124,36 @@ static struct sk_buff *rtllib_ADDBA(struct rtllib_device *ieee, u8 *Dst, } static struct sk_buff *rtllib_DELBA(struct rtllib_device *ieee, u8 *dst, - struct ba_record *pBA, - enum tr_select TxRxSelect, u16 ReasonCode) + struct ba_record *ba, + enum tr_select TxRxSelect, u16 reason_code) { union delba_param_set DelbaParamSet; struct sk_buff *skb = NULL; - struct rtllib_hdr_3addr *Delba = NULL; + struct ieee80211_hdr_3addr *Delba = NULL; u8 *tag = NULL; u16 len = 6 + ieee->tx_headroom; if (net_ratelimit()) - netdev_dbg(ieee->dev, "%s(): ReasonCode(%d) sentd to: %pM\n", - __func__, ReasonCode, dst); + netdev_dbg(ieee->dev, "%s(): reason_code(%d) sentd to: %pM\n", + __func__, reason_code, dst); memset(&DelbaParamSet, 0, 2); DelbaParamSet.field.initiator = (TxRxSelect == TX_DIR) ? 1 : 0; - DelbaParamSet.field.tid = pBA->ba_param_set.field.tid; + DelbaParamSet.field.tid = ba->ba_param_set.field.tid; - skb = dev_alloc_skb(len + sizeof(struct rtllib_hdr_3addr)); + skb = dev_alloc_skb(len + sizeof(struct ieee80211_hdr_3addr)); if (!skb) return NULL; skb_reserve(skb, ieee->tx_headroom); - Delba = skb_put(skb, sizeof(struct rtllib_hdr_3addr)); + Delba = skb_put(skb, sizeof(struct ieee80211_hdr_3addr)); ether_addr_copy(Delba->addr1, dst); ether_addr_copy(Delba->addr2, ieee->dev->dev_addr); ether_addr_copy(Delba->addr3, ieee->current_network.bssid); - Delba->frame_ctl = cpu_to_le16(RTLLIB_STYPE_MANAGE_ACT); + Delba->frame_control = cpu_to_le16(IEEE80211_STYPE_ACTION); tag = skb_put(skb, 6); @@ -163,7 +163,7 @@ static struct sk_buff *rtllib_DELBA(struct rtllib_device *ieee, u8 *dst, put_unaligned_le16(DelbaParamSet.short_data, tag); tag += 2; - put_unaligned_le16(ReasonCode, tag); + put_unaligned_le16(reason_code, tag); tag += 2; #ifdef VERBOSE_DEBUG @@ -174,11 +174,11 @@ static struct sk_buff *rtllib_DELBA(struct rtllib_device *ieee, u8 *dst, } static void rtllib_send_ADDBAReq(struct rtllib_device *ieee, u8 *dst, - struct ba_record *pBA) + struct ba_record *ba) { struct sk_buff *skb; - skb = rtllib_ADDBA(ieee, dst, pBA, 0, ACT_ADDBAREQ); + skb = rtllib_ADDBA(ieee, dst, ba, 0, ACT_ADDBAREQ); if (skb) softmac_mgmt_xmit(skb, ieee); @@ -187,11 +187,11 @@ static void rtllib_send_ADDBAReq(struct rtllib_device *ieee, u8 *dst, } static void rtllib_send_ADDBARsp(struct rtllib_device *ieee, u8 *dst, - struct ba_record *pBA, u16 StatusCode) + struct ba_record *ba, u16 status_code) { struct sk_buff *skb; - skb = rtllib_ADDBA(ieee, dst, pBA, StatusCode, ACT_ADDBARSP); + skb = rtllib_ADDBA(ieee, dst, ba, status_code, ACT_ADDBARSP); if (skb) softmac_mgmt_xmit(skb, ieee); else @@ -199,12 +199,12 @@ static void rtllib_send_ADDBARsp(struct rtllib_device *ieee, u8 *dst, } static void rtllib_send_DELBA(struct rtllib_device *ieee, u8 *dst, - struct ba_record *pBA, enum tr_select TxRxSelect, - u16 ReasonCode) + struct ba_record *ba, enum tr_select TxRxSelect, + u16 reason_code) { struct sk_buff *skb; - skb = rtllib_DELBA(ieee, dst, pBA, TxRxSelect, ReasonCode); + skb = rtllib_DELBA(ieee, dst, ba, TxRxSelect, reason_code); if (skb) softmac_mgmt_xmit(skb, ieee); else @@ -213,19 +213,19 @@ static void rtllib_send_DELBA(struct rtllib_device *ieee, u8 *dst, int rtllib_rx_ADDBAReq(struct rtllib_device *ieee, struct sk_buff *skb) { - struct rtllib_hdr_3addr *req = NULL; + struct ieee80211_hdr_3addr *req = NULL; u16 rc = 0; u8 *dst = NULL, *pDialogToken = NULL, *tag = NULL; - struct ba_record *pBA = NULL; + struct ba_record *ba = NULL; union ba_param_set *pBaParamSet = NULL; u16 *pBaTimeoutVal = NULL; union sequence_control *pBaStartSeqCtrl = NULL; - struct rx_ts_record *pTS = NULL; + struct rx_ts_record *ts = NULL; - if (skb->len < sizeof(struct rtllib_hdr_3addr) + 9) { + if (skb->len < sizeof(struct ieee80211_hdr_3addr) + 9) { netdev_warn(ieee->dev, "Invalid skb len in BAREQ(%d / %d)\n", (int)skb->len, - (int)(sizeof(struct rtllib_hdr_3addr) + 9)); + (int)(sizeof(struct ieee80211_hdr_3addr) + 9)); return -1; } @@ -234,32 +234,32 @@ int rtllib_rx_ADDBAReq(struct rtllib_device *ieee, struct sk_buff *skb) skb->data, skb->len); #endif - req = (struct rtllib_hdr_3addr *)skb->data; + req = (struct ieee80211_hdr_3addr *)skb->data; tag = (u8 *)req; dst = (u8 *)(&req->addr2[0]); - tag += sizeof(struct rtllib_hdr_3addr); + tag += sizeof(struct ieee80211_hdr_3addr); pDialogToken = tag + 2; pBaParamSet = (union ba_param_set *)(tag + 3); pBaTimeoutVal = (u16 *)(tag + 5); pBaStartSeqCtrl = (union sequence_control *)(req + 7); if (!ieee->current_network.qos_data.active || - !ieee->ht_info->bCurrentHTSupport || + !ieee->ht_info->current_ht_support || (ieee->ht_info->iot_action & HT_IOT_ACT_REJECT_ADDBA_REQ)) { rc = ADDBA_STATUS_REFUSED; netdev_warn(ieee->dev, "Failed to reply on ADDBA_REQ as some capability is not ready(%d, %d)\n", ieee->current_network.qos_data.active, - ieee->ht_info->bCurrentHTSupport); + ieee->ht_info->current_ht_support); goto OnADDBAReq_Fail; } - if (!GetTs(ieee, (struct ts_common_info **)&pTS, dst, + if (!rtllib_get_ts(ieee, (struct ts_common_info **)&ts, dst, (u8)(pBaParamSet->field.tid), RX_DIR, true)) { rc = ADDBA_STATUS_REFUSED; netdev_warn(ieee->dev, "%s(): can't get TS\n", __func__); goto OnADDBAReq_Fail; } - pBA = &pTS->rx_admitted_ba_record; + ba = &ts->rx_admitted_ba_record; if (pBaParamSet->field.ba_policy == BA_POLICY_DELAYED) { rc = ADDBA_STATUS_INVALID_PARAM; @@ -268,22 +268,22 @@ int rtllib_rx_ADDBAReq(struct rtllib_device *ieee, struct sk_buff *skb) goto OnADDBAReq_Fail; } - rtllib_FlushRxTsPendingPkts(ieee, pTS); + rtllib_FlushRxTsPendingPkts(ieee, ts); - deactivate_ba_entry(ieee, pBA); - pBA->dialog_token = *pDialogToken; - pBA->ba_param_set = *pBaParamSet; - pBA->ba_timeout_value = *pBaTimeoutVal; - pBA->ba_start_seq_ctrl = *pBaStartSeqCtrl; + deactivate_ba_entry(ieee, ba); + ba->dialog_token = *pDialogToken; + ba->ba_param_set = *pBaParamSet; + ba->ba_timeout_value = *pBaTimeoutVal; + ba->ba_start_seq_ctrl = *pBaStartSeqCtrl; if (ieee->GetHalfNmodeSupportByAPsHandler(ieee->dev) || (ieee->ht_info->iot_action & HT_IOT_ACT_ALLOW_PEER_AGG_ONE_PKT)) - pBA->ba_param_set.field.buffer_size = 1; + ba->ba_param_set.field.buffer_size = 1; else - pBA->ba_param_set.field.buffer_size = 32; + ba->ba_param_set.field.buffer_size = 32; - activate_ba_entry(pBA, 0); - rtllib_send_ADDBARsp(ieee, dst, pBA, ADDBA_STATUS_SUCCESS); + activate_ba_entry(ba, 0); + rtllib_send_ADDBARsp(ieee, dst, ba, ADDBA_STATUS_SUCCESS); return 0; @@ -302,88 +302,88 @@ OnADDBAReq_Fail: int rtllib_rx_ADDBARsp(struct rtllib_device *ieee, struct sk_buff *skb) { - struct rtllib_hdr_3addr *rsp = NULL; - struct ba_record *pPendingBA, *pAdmittedBA; - struct tx_ts_record *pTS = NULL; + struct ieee80211_hdr_3addr *rsp = NULL; + struct ba_record *pending_ba, *pAdmittedBA; + struct tx_ts_record *ts = NULL; u8 *dst = NULL, *pDialogToken = NULL, *tag = NULL; - u16 *pStatusCode = NULL, *pBaTimeoutVal = NULL; + u16 *status_code = NULL, *pBaTimeoutVal = NULL; union ba_param_set *pBaParamSet = NULL; - u16 ReasonCode; + u16 reason_code; - if (skb->len < sizeof(struct rtllib_hdr_3addr) + 9) { + if (skb->len < sizeof(struct ieee80211_hdr_3addr) + 9) { netdev_warn(ieee->dev, "Invalid skb len in BARSP(%d / %d)\n", (int)skb->len, - (int)(sizeof(struct rtllib_hdr_3addr) + 9)); + (int)(sizeof(struct ieee80211_hdr_3addr) + 9)); return -1; } - rsp = (struct rtllib_hdr_3addr *)skb->data; + rsp = (struct ieee80211_hdr_3addr *)skb->data; tag = (u8 *)rsp; dst = (u8 *)(&rsp->addr2[0]); - tag += sizeof(struct rtllib_hdr_3addr); + tag += sizeof(struct ieee80211_hdr_3addr); pDialogToken = tag + 2; - pStatusCode = (u16 *)(tag + 3); + status_code = (u16 *)(tag + 3); pBaParamSet = (union ba_param_set *)(tag + 5); pBaTimeoutVal = (u16 *)(tag + 7); if (!ieee->current_network.qos_data.active || - !ieee->ht_info->bCurrentHTSupport || + !ieee->ht_info->current_ht_support || !ieee->ht_info->bCurrentAMPDUEnable) { netdev_warn(ieee->dev, "reject to ADDBA_RSP as some capability is not ready(%d, %d, %d)\n", ieee->current_network.qos_data.active, - ieee->ht_info->bCurrentHTSupport, + ieee->ht_info->current_ht_support, ieee->ht_info->bCurrentAMPDUEnable); - ReasonCode = DELBA_REASON_UNKNOWN_BA; + reason_code = DELBA_REASON_UNKNOWN_BA; goto OnADDBARsp_Reject; } - if (!GetTs(ieee, (struct ts_common_info **)&pTS, dst, + if (!rtllib_get_ts(ieee, (struct ts_common_info **)&ts, dst, (u8)(pBaParamSet->field.tid), TX_DIR, false)) { netdev_warn(ieee->dev, "%s(): can't get TS\n", __func__); - ReasonCode = DELBA_REASON_UNKNOWN_BA; + reason_code = DELBA_REASON_UNKNOWN_BA; goto OnADDBARsp_Reject; } - pTS->bAddBaReqInProgress = false; - pPendingBA = &pTS->TxPendingBARecord; - pAdmittedBA = &pTS->TxAdmittedBARecord; + ts->bAddBaReqInProgress = false; + pending_ba = &ts->TxPendingBARecord; + pAdmittedBA = &ts->TxAdmittedBARecord; if (pAdmittedBA->b_valid) { netdev_dbg(ieee->dev, "%s(): ADDBA response already admitted\n", __func__); return -1; - } else if (!pPendingBA->b_valid || - (*pDialogToken != pPendingBA->dialog_token)) { + } else if (!pending_ba->b_valid || + (*pDialogToken != pending_ba->dialog_token)) { netdev_warn(ieee->dev, "%s(): ADDBA Rsp. BA invalid, DELBA!\n", __func__); - ReasonCode = DELBA_REASON_UNKNOWN_BA; + reason_code = DELBA_REASON_UNKNOWN_BA; goto OnADDBARsp_Reject; } else { netdev_dbg(ieee->dev, "%s(): Recv ADDBA Rsp. BA is admitted! Status code:%X\n", - __func__, *pStatusCode); - deactivate_ba_entry(ieee, pPendingBA); + __func__, *status_code); + deactivate_ba_entry(ieee, pending_ba); } - if (*pStatusCode == ADDBA_STATUS_SUCCESS) { + if (*status_code == ADDBA_STATUS_SUCCESS) { if (pBaParamSet->field.ba_policy == BA_POLICY_DELAYED) { - pTS->bAddBaReqDelayed = true; + ts->bAddBaReqDelayed = true; deactivate_ba_entry(ieee, pAdmittedBA); - ReasonCode = DELBA_REASON_END_BA; + reason_code = DELBA_REASON_END_BA; goto OnADDBARsp_Reject; } pAdmittedBA->dialog_token = *pDialogToken; pAdmittedBA->ba_timeout_value = *pBaTimeoutVal; - pAdmittedBA->ba_start_seq_ctrl = pPendingBA->ba_start_seq_ctrl; + pAdmittedBA->ba_start_seq_ctrl = pending_ba->ba_start_seq_ctrl; pAdmittedBA->ba_param_set = *pBaParamSet; deactivate_ba_entry(ieee, pAdmittedBA); activate_ba_entry(pAdmittedBA, *pBaTimeoutVal); } else { - pTS->bAddBaReqDelayed = true; - pTS->bDisable_AddBa = true; - ReasonCode = DELBA_REASON_END_BA; + ts->bAddBaReqDelayed = true; + ts->bDisable_AddBa = true; + reason_code = DELBA_REASON_END_BA; goto OnADDBARsp_Reject; } @@ -394,30 +394,30 @@ OnADDBARsp_Reject: struct ba_record BA; BA.ba_param_set = *pBaParamSet; - rtllib_send_DELBA(ieee, dst, &BA, TX_DIR, ReasonCode); + rtllib_send_DELBA(ieee, dst, &BA, TX_DIR, reason_code); return 0; } } int rtllib_rx_DELBA(struct rtllib_device *ieee, struct sk_buff *skb) { - struct rtllib_hdr_3addr *delba = NULL; + struct ieee80211_hdr_3addr *delba = NULL; union delba_param_set *pDelBaParamSet = NULL; u8 *dst = NULL; - if (skb->len < sizeof(struct rtllib_hdr_3addr) + 6) { + if (skb->len < sizeof(struct ieee80211_hdr_3addr) + 6) { netdev_warn(ieee->dev, "Invalid skb len in DELBA(%d / %d)\n", (int)skb->len, - (int)(sizeof(struct rtllib_hdr_3addr) + 6)); + (int)(sizeof(struct ieee80211_hdr_3addr) + 6)); return -1; } if (!ieee->current_network.qos_data.active || - !ieee->ht_info->bCurrentHTSupport) { + !ieee->ht_info->current_ht_support) { netdev_warn(ieee->dev, "received DELBA while QOS or HT is not supported(%d, %d)\n", ieee->current_network. qos_data.active, - ieee->ht_info->bCurrentHTSupport); + ieee->ht_info->current_ht_support); return -1; } @@ -425,14 +425,14 @@ int rtllib_rx_DELBA(struct rtllib_device *ieee, struct sk_buff *skb) print_hex_dump_bytes("%s: ", DUMP_PREFIX_NONE, skb->data, __func__, skb->len); #endif - delba = (struct rtllib_hdr_3addr *)skb->data; + delba = (struct ieee80211_hdr_3addr *)skb->data; dst = (u8 *)(&delba->addr2[0]); - pDelBaParamSet = (union delba_param_set *)&delba->payload[2]; + pDelBaParamSet = (union delba_param_set *)&delba->seq_ctrl + 2; if (pDelBaParamSet->field.initiator == 1) { - struct rx_ts_record *pRxTs; + struct rx_ts_record *ts; - if (!GetTs(ieee, (struct ts_common_info **)&pRxTs, dst, + if (!rtllib_get_ts(ieee, (struct ts_common_info **)&ts, dst, (u8)pDelBaParamSet->field.tid, RX_DIR, false)) { netdev_warn(ieee->dev, "%s(): can't get TS for RXTS. dst:%pM TID:%d\n", @@ -441,11 +441,11 @@ int rtllib_rx_DELBA(struct rtllib_device *ieee, struct sk_buff *skb) return -1; } - rx_ts_delete_ba(ieee, pRxTs); + rx_ts_delete_ba(ieee, ts); } else { struct tx_ts_record *pTxTs; - if (!GetTs(ieee, (struct ts_common_info **)&pTxTs, dst, + if (!rtllib_get_ts(ieee, (struct ts_common_info **)&pTxTs, dst, (u8)pDelBaParamSet->field.tid, TX_DIR, false)) { netdev_warn(ieee->dev, "%s(): can't get TS for TXTS\n", __func__); @@ -461,27 +461,27 @@ int rtllib_rx_DELBA(struct rtllib_device *ieee, struct sk_buff *skb) return 0; } -void rtllib_ts_init_add_ba(struct rtllib_device *ieee, struct tx_ts_record *pTS, - u8 Policy, u8 bOverwritePending) +void rtllib_ts_init_add_ba(struct rtllib_device *ieee, struct tx_ts_record *ts, + u8 policy, u8 bOverwritePending) { - struct ba_record *pBA = &pTS->TxPendingBARecord; + struct ba_record *ba = &ts->TxPendingBARecord; - if (pBA->b_valid && !bOverwritePending) + if (ba->b_valid && !bOverwritePending) return; - deactivate_ba_entry(ieee, pBA); + deactivate_ba_entry(ieee, ba); - pBA->dialog_token++; - pBA->ba_param_set.field.amsdu_support = 0; - pBA->ba_param_set.field.ba_policy = Policy; - pBA->ba_param_set.field.tid = pTS->TsCommonInfo.TSpec.f.TSInfo.field.ucTSID; - pBA->ba_param_set.field.buffer_size = 32; - pBA->ba_timeout_value = 0; - pBA->ba_start_seq_ctrl.field.seq_num = (pTS->TxCurSeq + 3) % 4096; + ba->dialog_token++; + ba->ba_param_set.field.amsdu_support = 0; + ba->ba_param_set.field.ba_policy = policy; + ba->ba_param_set.field.tid = ts->TsCommonInfo.TSpec.ucTSID; + ba->ba_param_set.field.buffer_size = 32; + ba->ba_timeout_value = 0; + ba->ba_start_seq_ctrl.field.seq_num = (ts->TxCurSeq + 3) % 4096; - activate_ba_entry(pBA, BA_SETUP_TIMEOUT); + activate_ba_entry(ba, BA_SETUP_TIMEOUT); - rtllib_send_ADDBAReq(ieee, pTS->TsCommonInfo.Addr, pBA); + rtllib_send_ADDBAReq(ieee, ts->TsCommonInfo.addr, ba); } void rtllib_ts_init_del_ba(struct rtllib_device *ieee, @@ -493,17 +493,17 @@ void rtllib_ts_init_del_ba(struct rtllib_device *ieee, (struct tx_ts_record *)pTsCommonInfo; if (tx_ts_delete_ba(ieee, pTxTs)) - rtllib_send_DELBA(ieee, pTsCommonInfo->Addr, + rtllib_send_DELBA(ieee, pTsCommonInfo->addr, (pTxTs->TxAdmittedBARecord.b_valid) ? (&pTxTs->TxAdmittedBARecord) : (&pTxTs->TxPendingBARecord), TxRxSelect, DELBA_REASON_END_BA); } else if (TxRxSelect == RX_DIR) { - struct rx_ts_record *pRxTs = + struct rx_ts_record *ts = (struct rx_ts_record *)pTsCommonInfo; - if (rx_ts_delete_ba(ieee, pRxTs)) - rtllib_send_DELBA(ieee, pTsCommonInfo->Addr, - &pRxTs->rx_admitted_ba_record, + if (rx_ts_delete_ba(ieee, ts)) + rtllib_send_DELBA(ieee, pTsCommonInfo->addr, + &ts->rx_admitted_ba_record, TxRxSelect, DELBA_REASON_END_BA); } } @@ -525,20 +525,20 @@ void rtllib_tx_ba_inact_timeout(struct timer_list *t) struct rtllib_device *ieee = container_of(pTxTs, struct rtllib_device, TxTsRecord[pTxTs->num]); tx_ts_delete_ba(ieee, pTxTs); - rtllib_send_DELBA(ieee, pTxTs->TsCommonInfo.Addr, + rtllib_send_DELBA(ieee, pTxTs->TsCommonInfo.addr, &pTxTs->TxAdmittedBARecord, TX_DIR, DELBA_REASON_TIMEOUT); } void rtllib_rx_ba_inact_timeout(struct timer_list *t) { - struct rx_ts_record *pRxTs = from_timer(pRxTs, t, + struct rx_ts_record *ts = from_timer(ts, t, rx_admitted_ba_record.timer); - struct rtllib_device *ieee = container_of(pRxTs, struct rtllib_device, - RxTsRecord[pRxTs->num]); + struct rtllib_device *ieee = container_of(ts, struct rtllib_device, + RxTsRecord[ts->num]); - rx_ts_delete_ba(ieee, pRxTs); - rtllib_send_DELBA(ieee, pRxTs->ts_common_info.Addr, - &pRxTs->rx_admitted_ba_record, RX_DIR, + rx_ts_delete_ba(ieee, ts); + rtllib_send_DELBA(ieee, ts->ts_common_info.addr, + &ts->rx_admitted_ba_record, RX_DIR, DELBA_REASON_TIMEOUT); } diff --git a/drivers/staging/rtl8192e/rtl819x_HT.h b/drivers/staging/rtl8192e/rtl819x_HT.h index 2bbd010485..f8eb4d553f 100644 --- a/drivers/staging/rtl8192e/rtl819x_HT.h +++ b/drivers/staging/rtl8192e/rtl819x_HT.h @@ -93,7 +93,7 @@ enum ht_aggre_mode { struct rt_hi_throughput { u8 enable_ht; - u8 bCurrentHTSupport; + u8 current_ht_support; u8 bRegBW40MHz; u8 bCurBW40MHz; u8 bRegShortGI40MHz; diff --git a/drivers/staging/rtl8192e/rtl819x_HTProc.c b/drivers/staging/rtl8192e/rtl819x_HTProc.c index f19feea461..e607bccc07 100644 --- a/drivers/staging/rtl8192e/rtl819x_HTProc.c +++ b/drivers/staging/rtl8192e/rtl819x_HTProc.c @@ -67,7 +67,7 @@ static u8 CISCO_BROADCOM[3] = {0x00, 0x17, 0x94}; static u8 LINKSYS_MARVELL_4400N[3] = {0x00, 0x14, 0xa4}; -void HTUpdateDefaultSetting(struct rtllib_device *ieee) +void ht_update_default_setting(struct rtllib_device *ieee) { struct rt_hi_throughput *ht_info = ieee->ht_info; @@ -207,27 +207,6 @@ static void HTIOTPeerDetermine(struct rtllib_device *ieee) netdev_dbg(ieee->dev, "IOTPEER: %x\n", ht_info->IOTPeer); } -static u8 HTIOTActIsDisableMCS14(struct rtllib_device *ieee, u8 *PeerMacAddr) -{ - return 0; -} - -static bool HTIOTActIsDisableMCS15(struct rtllib_device *ieee) -{ - return false; -} - -static bool HTIOTActIsDisableMCSTwoSpatialStream(struct rtllib_device *ieee) -{ - return false; -} - -static u8 HTIOTActIsDisableEDCATurbo(struct rtllib_device *ieee, - u8 *PeerMacAddr) -{ - return false; -} - static u8 HTIOTActIsMgntUseCCK6M(struct rtllib_device *ieee, struct rtllib_network *network) { @@ -352,7 +331,6 @@ void HTConstructCapabilityElement(struct rtllib_device *ieee, u8 *posHTCap, void HTConstructInfoElement(struct rtllib_device *ieee, u8 *posHTInfo, u8 *len, u8 IsEncrypt) { - struct rt_hi_throughput *pHT = ieee->ht_info; struct ht_info_ele *pHTInfoEle = (struct ht_info_ele *)posHTInfo; if (!posHTInfo || !pHTInfoEle) { @@ -363,32 +341,7 @@ void HTConstructInfoElement(struct rtllib_device *ieee, u8 *posHTInfo, } memset(posHTInfo, 0, *len); - if (ieee->iw_mode == IW_MODE_ADHOC) { - pHTInfoEle->ControlChl = ieee->current_network.channel; - pHTInfoEle->ExtChlOffset = ((!pHT->bRegBW40MHz) ? - HT_EXTCHNL_OFFSET_NO_EXT : - (ieee->current_network.channel <= 6) - ? HT_EXTCHNL_OFFSET_UPPER : - HT_EXTCHNL_OFFSET_LOWER); - pHTInfoEle->RecommemdedTxWidth = pHT->bRegBW40MHz; - pHTInfoEle->RIFS = 0; - pHTInfoEle->PSMPAccessOnly = 0; - pHTInfoEle->SrvIntGranularity = 0; - pHTInfoEle->OptMode = pHT->current_op_mode; - pHTInfoEle->NonGFDevPresent = 0; - pHTInfoEle->DualBeacon = 0; - pHTInfoEle->SecondaryBeacon = 0; - pHTInfoEle->LSigTxopProtectFull = 0; - pHTInfoEle->PcoActive = 0; - pHTInfoEle->PcoPhase = 0; - - memset(pHTInfoEle->BasicMSC, 0, 16); - - *len = 22 + 2; - - } else { - *len = 0; - } + *len = 0; } void HTConstructRT2RTAggElement(struct rtllib_device *ieee, u8 *posRT2RTAgg, @@ -515,7 +468,7 @@ void HTOnAssocRsp(struct rtllib_device *ieee) static const u8 EWC11NHTCap[] = { 0x00, 0x90, 0x4c, 0x33 }; static const u8 EWC11NHTInfo[] = { 0x00, 0x90, 0x4c, 0x34 }; - if (!ht_info->bCurrentHTSupport) { + if (!ht_info->current_ht_support) { netdev_warn(ieee->dev, "%s(): HT_DISABLE\n", __func__); return; } @@ -620,7 +573,7 @@ void HTInitializeHTInfo(struct rtllib_device *ieee) { struct rt_hi_throughput *ht_info = ieee->ht_info; - ht_info->bCurrentHTSupport = false; + ht_info->current_ht_support = false; ht_info->bCurBW40MHz = false; ht_info->cur_tx_bw40mhz = false; @@ -691,7 +644,7 @@ void HTResetSelfAndSavePeerSetting(struct rtllib_device *ieee, * function rtllib_softmac_new_net. WB 2008.09.10 */ if (pNetwork->bssht.bd_support_ht) { - ht_info->bCurrentHTSupport = true; + ht_info->current_ht_support = true; ht_info->ePeerHTSpecVer = pNetwork->bssht.bd_ht_spec_ver; if (pNetwork->bssht.bd_ht_cap_len > 0 && @@ -722,22 +675,6 @@ void HTResetSelfAndSavePeerSetting(struct rtllib_device *ieee, HTIOTPeerDetermine(ieee); ht_info->iot_action = 0; - bIOTAction = HTIOTActIsDisableMCS14(ieee, pNetwork->bssid); - if (bIOTAction) - ht_info->iot_action |= HT_IOT_ACT_DISABLE_MCS14; - - bIOTAction = HTIOTActIsDisableMCS15(ieee); - if (bIOTAction) - ht_info->iot_action |= HT_IOT_ACT_DISABLE_MCS15; - - bIOTAction = HTIOTActIsDisableMCSTwoSpatialStream(ieee); - if (bIOTAction) - ht_info->iot_action |= HT_IOT_ACT_DISABLE_ALL_2SS; - - bIOTAction = HTIOTActIsDisableEDCATurbo(ieee, pNetwork->bssid); - if (bIOTAction) - ht_info->iot_action |= HT_IOT_ACT_DISABLE_EDCA_TURBO; - bIOTAction = HTIOTActIsMgntUseCCK6M(ieee, pNetwork); if (bIOTAction) ht_info->iot_action |= HT_IOT_ACT_MGNT_USE_CCK_6M; @@ -745,7 +682,7 @@ void HTResetSelfAndSavePeerSetting(struct rtllib_device *ieee, if (bIOTAction) ht_info->iot_action |= HT_IOT_ACT_CDD_FSYNC; } else { - ht_info->bCurrentHTSupport = false; + ht_info->current_ht_support = false; ht_info->current_rt2rt_aggregation = false; ht_info->current_rt2rt_long_slot_time = false; ht_info->RT2RT_HT_Mode = (enum rt_ht_capability)0; @@ -762,52 +699,16 @@ void HT_update_self_and_peer_setting(struct rtllib_device *ieee, struct ht_info_ele *pPeerHTInfo = (struct ht_info_ele *)pNetwork->bssht.bd_ht_info_buf; - if (ht_info->bCurrentHTSupport) { + if (ht_info->current_ht_support) { if (pNetwork->bssht.bd_ht_info_len != 0) ht_info->current_op_mode = pPeerHTInfo->OptMode; } } EXPORT_SYMBOL(HT_update_self_and_peer_setting); -void HTUseDefaultSetting(struct rtllib_device *ieee) -{ - struct rt_hi_throughput *ht_info = ieee->ht_info; - - if (ht_info->enable_ht) { - ht_info->bCurrentHTSupport = true; - ht_info->bCurSuppCCK = ht_info->bRegSuppCCK; - - ht_info->bCurBW40MHz = ht_info->bRegBW40MHz; - ht_info->bCurShortGI20MHz = ht_info->bRegShortGI20MHz; - - ht_info->bCurShortGI40MHz = ht_info->bRegShortGI40MHz; - - if (ieee->iw_mode == IW_MODE_ADHOC) - ieee->current_network.qos_data.active = - ieee->current_network.qos_data.supported; - ht_info->bCurrent_AMSDU_Support = ht_info->bAMSDU_Support; - ht_info->nCurrent_AMSDU_MaxSize = ht_info->nAMSDU_MaxSize; - - ht_info->bCurrentAMPDUEnable = ht_info->bAMPDUEnable; - ht_info->CurrentAMPDUFactor = ht_info->AMPDU_Factor; - - ht_info->current_mpdu_density = ht_info->current_mpdu_density; - - HTFilterMCSRate(ieee, ieee->reg_dot11tx_ht_oper_rate_set, - ieee->dot11ht_oper_rate_set); - ieee->HTHighestOperaRate = HTGetHighestMCSRate(ieee, - ieee->dot11ht_oper_rate_set, - MCS_FILTER_ALL); - ieee->HTCurrentOperaRate = ieee->HTHighestOperaRate; - - } else { - ht_info->bCurrentHTSupport = false; - } -} - u8 HTCCheck(struct rtllib_device *ieee, u8 *pFrame) { - if (ieee->ht_info->bCurrentHTSupport) { + if (ieee->ht_info->current_ht_support) { if ((IsQoSDataFrame(pFrame) && Frame_Order(pFrame)) == 1) { netdev_dbg(ieee->dev, "HT CONTROL FILED EXIST!!\n"); return true; diff --git a/drivers/staging/rtl8192e/rtl819x_Qos.h b/drivers/staging/rtl8192e/rtl819x_Qos.h index 0499711ea2..1c00092ea3 100644 --- a/drivers/staging/rtl8192e/rtl819x_Qos.h +++ b/drivers/staging/rtl8192e/rtl819x_Qos.h @@ -7,76 +7,9 @@ #ifndef __INC_QOS_TYPE_H #define __INC_QOS_TYPE_H -#define BIT0 0x00000001 -#define BIT1 0x00000002 -#define BIT2 0x00000004 -#define BIT3 0x00000008 -#define BIT4 0x00000010 -#define BIT5 0x00000020 -#define BIT6 0x00000040 -#define BIT7 0x00000080 -#define BIT8 0x00000100 -#define BIT9 0x00000200 -#define BIT10 0x00000400 -#define BIT11 0x00000800 -#define BIT12 0x00001000 -#define BIT13 0x00002000 -#define BIT14 0x00004000 -#define BIT15 0x00008000 -#define BIT16 0x00010000 -#define BIT17 0x00020000 -#define BIT18 0x00040000 -#define BIT19 0x00080000 -#define BIT20 0x00100000 -#define BIT21 0x00200000 -#define BIT22 0x00400000 -#define BIT23 0x00800000 -#define BIT24 0x01000000 -#define BIT25 0x02000000 -#define BIT26 0x04000000 -#define BIT27 0x08000000 -#define BIT28 0x10000000 -#define BIT29 0x20000000 -#define BIT30 0x40000000 -#define BIT31 0x80000000 - -union qos_tsinfo { - u8 charData[3]; - struct { - u8 ucTrafficType:1; - u8 ucTSID:4; - u8 ucDirection:2; - u8 ucAccessPolicy:2; - u8 ucAggregation:1; - u8 ucPSB:1; - u8 ucUP:3; - u8 ucTSInfoAckPolicy:2; - u8 ucSchedule:1; - u8 ucReserved:7; - } field; -}; - -union tspec_body { - u8 charData[55]; - - struct { - union qos_tsinfo TSInfo; - u16 NominalMSDUsize; - u16 MaxMSDUsize; - u32 MinServiceItv; - u32 MaxServiceItv; - u32 InactivityItv; - u32 SuspenItv; - u32 ServiceStartTime; - u32 MinDataRate; - u32 MeanDataRate; - u32 PeakDataRate; - u32 MaxBurstSize; - u32 DelayBound; - u32 MinPhyRate; - u16 SurplusBandwidthAllowance; - u16 MediumTime; - } f; +struct qos_tsinfo { + u8 ucTSID:4; + u8 ucDirection:2; }; struct octet_string { @@ -88,7 +21,6 @@ struct octet_string { #define AC1_BK 1 #define AC2_VI 2 #define AC3_VO 3 -#define AC_MAX 4 enum direction_value { DIR_UP = 0, @@ -97,62 +29,6 @@ enum direction_value { DIR_BI_DIR = 3, }; -struct acm { - u64 UsedTime; - u64 MediumTime; - u8 HwAcmCtl; -}; - -union qos_tclas { - struct _TYPE_GENERAL { - u8 Priority; - u8 ClassifierType; - u8 Mask; - } TYPE_GENERAL; - - struct _TYPE0_ETH { - u8 Priority; - u8 ClassifierType; - u8 Mask; - u8 SrcAddr[ETH_ALEN]; - u8 DstAddr[ETH_ALEN]; - u16 Type; - } TYPE0_ETH; - - struct _TYPE1_IPV4 { - u8 Priority; - u8 ClassifierType; - u8 Mask; - u8 Version; - u8 SrcIP[4]; - u8 DstIP[4]; - u16 SrcPort; - u16 DstPort; - u8 DSCP; - u8 Protocol; - u8 Reserved; - } TYPE1_IPV4; - - struct _TYPE1_IPV6 { - u8 Priority; - u8 ClassifierType; - u8 Mask; - u8 Version; - u8 SrcIP[16]; - u8 DstIP[16]; - u16 SrcPort; - u16 DstPort; - u8 FlowLabel[3]; - } TYPE1_IPV6; - - struct _TYPE2_8021Q { - u8 Priority; - u8 ClassifierType; - u8 Mask; - u16 TagType; - } TYPE2_8021Q; -}; - union aci_aifsn { u8 charData; diff --git a/drivers/staging/rtl8192e/rtl819x_TS.h b/drivers/staging/rtl8192e/rtl819x_TS.h index 0e851d4221..fff36315f1 100644 --- a/drivers/staging/rtl8192e/rtl819x_TS.h +++ b/drivers/staging/rtl8192e/rtl819x_TS.h @@ -10,7 +10,6 @@ #define TS_ADDBA_DELAY 60 #define TOTAL_TS_NUM 16 -#define TCLAS_NUM 4 enum tr_select { TX_DIR = 0, @@ -19,11 +18,8 @@ enum tr_select { struct ts_common_info { struct list_head List; - u8 Addr[ETH_ALEN]; - union tspec_body TSpec; - union qos_tclas TClass[TCLAS_NUM]; - u8 TClasProc; - u8 TClasNum; + u8 addr[ETH_ALEN]; + struct qos_tsinfo TSpec; }; struct tx_ts_record { diff --git a/drivers/staging/rtl8192e/rtl819x_TSProc.c b/drivers/staging/rtl8192e/rtl819x_TSProc.c index 419ff72f2b..3206fdb3e6 100644 --- a/drivers/staging/rtl8192e/rtl819x_TSProc.c +++ b/drivers/staging/rtl8192e/rtl819x_TSProc.c @@ -10,10 +10,9 @@ static void RxPktPendingTimeout(struct timer_list *t) { - struct rx_ts_record *pRxTs = from_timer(pRxTs, t, - rx_pkt_pending_timer); - struct rtllib_device *ieee = container_of(pRxTs, struct rtllib_device, - RxTsRecord[pRxTs->num]); + struct rx_ts_record *ts = from_timer(ts, t, rx_pkt_pending_timer); + struct rtllib_device *ieee = container_of(ts, struct rtllib_device, + RxTsRecord[ts->num]); struct rx_reorder_entry *pReorderEntry = NULL; @@ -22,24 +21,24 @@ static void RxPktPendingTimeout(struct timer_list *t) bool bPktInBuf = false; spin_lock_irqsave(&(ieee->reorder_spinlock), flags); - if (pRxTs->rx_timeout_indicate_seq != 0xffff) { - while (!list_empty(&pRxTs->rx_pending_pkt_list)) { + if (ts->rx_timeout_indicate_seq != 0xffff) { + while (!list_empty(&ts->rx_pending_pkt_list)) { pReorderEntry = (struct rx_reorder_entry *) - list_entry(pRxTs->rx_pending_pkt_list.prev, + list_entry(ts->rx_pending_pkt_list.prev, struct rx_reorder_entry, List); if (index == 0) - pRxTs->rx_indicate_seq = pReorderEntry->SeqNum; + ts->rx_indicate_seq = pReorderEntry->SeqNum; if (SN_LESS(pReorderEntry->SeqNum, - pRxTs->rx_indicate_seq) || + ts->rx_indicate_seq) || SN_EQUAL(pReorderEntry->SeqNum, - pRxTs->rx_indicate_seq)) { + ts->rx_indicate_seq)) { list_del_init(&pReorderEntry->List); if (SN_EQUAL(pReorderEntry->SeqNum, - pRxTs->rx_indicate_seq)) - pRxTs->rx_indicate_seq = - (pRxTs->rx_indicate_seq + 1) % 4096; + ts->rx_indicate_seq)) + ts->rx_indicate_seq = + (ts->rx_indicate_seq + 1) % 4096; netdev_dbg(ieee->dev, "%s(): Indicate SeqNum: %d\n", @@ -58,7 +57,7 @@ static void RxPktPendingTimeout(struct timer_list *t) } if (index > 0) { - pRxTs->rx_timeout_indicate_seq = 0xffff; + ts->rx_timeout_indicate_seq = 0xffff; if (index > REORDER_WIN_SIZE) { netdev_warn(ieee->dev, @@ -72,9 +71,9 @@ static void RxPktPendingTimeout(struct timer_list *t) bPktInBuf = false; } - if (bPktInBuf && (pRxTs->rx_timeout_indicate_seq == 0xffff)) { - pRxTs->rx_timeout_indicate_seq = pRxTs->rx_indicate_seq; - mod_timer(&pRxTs->rx_pkt_pending_timer, jiffies + + if (bPktInBuf && (ts->rx_timeout_indicate_seq == 0xffff)) { + ts->rx_timeout_indicate_seq = ts->rx_indicate_seq; + mod_timer(&ts->rx_pkt_pending_timer, jiffies + msecs_to_jiffies(ieee->ht_info->rx_reorder_pending_time) ); } @@ -94,37 +93,34 @@ static void TsAddBaProcess(struct timer_list *t) static void ResetTsCommonInfo(struct ts_common_info *pTsCommonInfo) { - eth_zero_addr(pTsCommonInfo->Addr); - memset(&pTsCommonInfo->TSpec, 0, sizeof(union tspec_body)); - memset(&pTsCommonInfo->TClass, 0, sizeof(union qos_tclas) * TCLAS_NUM); - pTsCommonInfo->TClasProc = 0; - pTsCommonInfo->TClasNum = 0; + eth_zero_addr(pTsCommonInfo->addr); + memset(&pTsCommonInfo->TSpec, 0, sizeof(struct qos_tsinfo)); } -static void ResetTxTsEntry(struct tx_ts_record *pTS) +static void ResetTxTsEntry(struct tx_ts_record *ts) { - ResetTsCommonInfo(&pTS->TsCommonInfo); - pTS->TxCurSeq = 0; - pTS->bAddBaReqInProgress = false; - pTS->bAddBaReqDelayed = false; - pTS->bUsingBa = false; - pTS->bDisable_AddBa = false; - rtllib_reset_ba_entry(&pTS->TxAdmittedBARecord); - rtllib_reset_ba_entry(&pTS->TxPendingBARecord); + ResetTsCommonInfo(&ts->TsCommonInfo); + ts->TxCurSeq = 0; + ts->bAddBaReqInProgress = false; + ts->bAddBaReqDelayed = false; + ts->bUsingBa = false; + ts->bDisable_AddBa = false; + rtllib_reset_ba_entry(&ts->TxAdmittedBARecord); + rtllib_reset_ba_entry(&ts->TxPendingBARecord); } -static void ResetRxTsEntry(struct rx_ts_record *pTS) +static void ResetRxTsEntry(struct rx_ts_record *ts) { - ResetTsCommonInfo(&pTS->ts_common_info); - pTS->rx_indicate_seq = 0xffff; - pTS->rx_timeout_indicate_seq = 0xffff; - rtllib_reset_ba_entry(&pTS->rx_admitted_ba_record); + ResetTsCommonInfo(&ts->ts_common_info); + ts->rx_indicate_seq = 0xffff; + ts->rx_timeout_indicate_seq = 0xffff; + rtllib_reset_ba_entry(&ts->rx_admitted_ba_record); } -void TSInitialize(struct rtllib_device *ieee) +void rtllib_ts_init(struct rtllib_device *ieee) { struct tx_ts_record *pTxTS = ieee->TxTsRecord; - struct rx_ts_record *pRxTS = ieee->RxTsRecord; + struct rx_ts_record *rxts = ieee->RxTsRecord; struct rx_reorder_entry *pRxReorderEntry = ieee->RxReorderEntry; u8 count = 0; @@ -151,17 +147,17 @@ void TSInitialize(struct rtllib_device *ieee) INIT_LIST_HEAD(&ieee->Rx_TS_Pending_List); INIT_LIST_HEAD(&ieee->Rx_TS_Unused_List); for (count = 0; count < TOTAL_TS_NUM; count++) { - pRxTS->num = count; - INIT_LIST_HEAD(&pRxTS->rx_pending_pkt_list); - timer_setup(&pRxTS->rx_admitted_ba_record.timer, + rxts->num = count; + INIT_LIST_HEAD(&rxts->rx_pending_pkt_list); + timer_setup(&rxts->rx_admitted_ba_record.timer, rtllib_rx_ba_inact_timeout, 0); - timer_setup(&pRxTS->rx_pkt_pending_timer, RxPktPendingTimeout, 0); + timer_setup(&rxts->rx_pkt_pending_timer, RxPktPendingTimeout, 0); - ResetRxTsEntry(pRxTS); - list_add_tail(&pRxTS->ts_common_info.List, + ResetRxTsEntry(rxts); + list_add_tail(&rxts->ts_common_info.List, &ieee->Rx_TS_Unused_List); - pRxTS++; + rxts++; } INIT_LIST_HEAD(&ieee->RxReorder_Unused_List); for (count = 0; count < REORDER_ENTRY_NUM; count++) { @@ -174,7 +170,7 @@ void TSInitialize(struct rtllib_device *ieee) } static struct ts_common_info *SearchAdmitTRStream(struct rtllib_device *ieee, - u8 *Addr, u8 TID, + u8 *addr, u8 TID, enum tr_select TxRxSelect) { u8 dir; @@ -182,21 +178,14 @@ static struct ts_common_info *SearchAdmitTRStream(struct rtllib_device *ieee, struct list_head *psearch_list; struct ts_common_info *pRet = NULL; - if (ieee->iw_mode == IW_MODE_ADHOC) { - if (TxRxSelect == TX_DIR) - search_dir[DIR_UP] = true; - else - search_dir[DIR_DOWN] = true; + if (TxRxSelect == TX_DIR) { + search_dir[DIR_UP] = true; + search_dir[DIR_BI_DIR] = true; + search_dir[DIR_DIRECT] = true; } else { - if (TxRxSelect == TX_DIR) { - search_dir[DIR_UP] = true; - search_dir[DIR_BI_DIR] = true; - search_dir[DIR_DIRECT] = true; - } else { - search_dir[DIR_DOWN] = true; - search_dir[DIR_BI_DIR] = true; - search_dir[DIR_DIRECT] = true; - } + search_dir[DIR_DOWN] = true; + search_dir[DIR_BI_DIR] = true; + search_dir[DIR_DIRECT] = true; } if (TxRxSelect == TX_DIR) @@ -208,9 +197,9 @@ static struct ts_common_info *SearchAdmitTRStream(struct rtllib_device *ieee, if (!search_dir[dir]) continue; list_for_each_entry(pRet, psearch_list, List) { - if (memcmp(pRet->Addr, Addr, 6) == 0 && - pRet->TSpec.f.TSInfo.field.ucTSID == TID && - pRet->TSpec.f.TSInfo.field.ucDirection == dir) + if (memcmp(pRet->addr, addr, 6) == 0 && + pRet->TSpec.ucTSID == TID && + pRet->TSpec.ucDirection == dir) break; } if (&pRet->List != psearch_list) @@ -222,40 +211,30 @@ static struct ts_common_info *SearchAdmitTRStream(struct rtllib_device *ieee, return NULL; } -static void MakeTSEntry(struct ts_common_info *pTsCommonInfo, u8 *Addr, - union tspec_body *pTSPEC, union qos_tclas *pTCLAS, - u8 TCLAS_Num, u8 TCLAS_Proc) +static void MakeTSEntry(struct ts_common_info *pTsCommonInfo, u8 *addr, + struct qos_tsinfo *pTSPEC) { - u8 count; - if (!pTsCommonInfo) return; - memcpy(pTsCommonInfo->Addr, Addr, 6); + memcpy(pTsCommonInfo->addr, addr, 6); if (pTSPEC) memcpy((u8 *)(&(pTsCommonInfo->TSpec)), (u8 *)pTSPEC, - sizeof(union tspec_body)); - - for (count = 0; count < TCLAS_Num; count++) - memcpy((u8 *)(&(pTsCommonInfo->TClass[count])), - (u8 *)pTCLAS, sizeof(union qos_tclas)); - - pTsCommonInfo->TClasProc = TCLAS_Proc; - pTsCommonInfo->TClasNum = TCLAS_Num; + sizeof(struct qos_tsinfo)); } -bool GetTs(struct rtllib_device *ieee, struct ts_common_info **ppTS, - u8 *Addr, u8 TID, enum tr_select TxRxSelect, bool bAddNewTs) +bool rtllib_get_ts(struct rtllib_device *ieee, struct ts_common_info **ppTS, + u8 *addr, u8 TID, enum tr_select TxRxSelect, bool bAddNewTs) { u8 UP = 0; - union tspec_body TSpec; - union qos_tsinfo *pTSInfo = &TSpec.f.TSInfo; + struct qos_tsinfo TSpec; + struct qos_tsinfo *ts_info = &TSpec; struct list_head *pUnusedList; struct list_head *pAddmitList; enum direction_value Dir; - if (is_multicast_ether_addr(Addr)) { + if (is_multicast_ether_addr(addr)) { netdev_warn(ieee->dev, "Get TS for Broadcast or Multicast\n"); return false; } @@ -286,7 +265,7 @@ bool GetTs(struct rtllib_device *ieee, struct ts_common_info **ppTS, } } - *ppTS = SearchAdmitTRStream(ieee, Addr, UP, TxRxSelect); + *ppTS = SearchAdmitTRStream(ieee, addr, UP, TxRxSelect); if (*ppTS) return true; @@ -316,27 +295,20 @@ bool GetTs(struct rtllib_device *ieee, struct ts_common_info **ppTS, TsCommonInfo); ResetTxTsEntry(tmp); } else { - struct rx_ts_record *tmp = + struct rx_ts_record *ts = container_of(*ppTS, struct rx_ts_record, ts_common_info); - ResetRxTsEntry(tmp); + ResetRxTsEntry(ts); } netdev_dbg(ieee->dev, "to init current TS, UP:%d, Dir:%d, addr: %pM ppTs=%p\n", - UP, Dir, Addr, *ppTS); - pTSInfo->field.ucTrafficType = 0; - pTSInfo->field.ucTSID = UP; - pTSInfo->field.ucDirection = Dir; - pTSInfo->field.ucAccessPolicy = 1; - pTSInfo->field.ucAggregation = 0; - pTSInfo->field.ucPSB = 0; - pTSInfo->field.ucUP = UP; - pTSInfo->field.ucTSInfoAckPolicy = 0; - pTSInfo->field.ucSchedule = 0; - - MakeTSEntry(*ppTS, Addr, &TSpec, NULL, 0, 0); + UP, Dir, addr, *ppTS); + ts_info->ucTSID = UP; + ts_info->ucDirection = Dir; + + MakeTSEntry(*ppTS, addr, &TSpec); list_add_tail(&((*ppTS)->List), pAddmitList); return true; @@ -355,14 +327,14 @@ static void RemoveTsEntry(struct rtllib_device *ieee, if (TxRxSelect == RX_DIR) { struct rx_reorder_entry *pRxReorderEntry; - struct rx_ts_record *pRxTS = (struct rx_ts_record *)pTs; + struct rx_ts_record *ts = (struct rx_ts_record *)pTs; - if (timer_pending(&pRxTS->rx_pkt_pending_timer)) - del_timer_sync(&pRxTS->rx_pkt_pending_timer); + if (timer_pending(&ts->rx_pkt_pending_timer)) + del_timer_sync(&ts->rx_pkt_pending_timer); - while (!list_empty(&pRxTS->rx_pending_pkt_list)) { + while (!list_empty(&ts->rx_pending_pkt_list)) { pRxReorderEntry = (struct rx_reorder_entry *) - list_entry(pRxTS->rx_pending_pkt_list.prev, + list_entry(ts->rx_pending_pkt_list.prev, struct rx_reorder_entry, List); netdev_dbg(ieee->dev, "%s(): Delete SeqNum %d!\n", __func__, pRxReorderEntry->SeqNum); @@ -388,43 +360,43 @@ static void RemoveTsEntry(struct rtllib_device *ieee, } } -void RemovePeerTS(struct rtllib_device *ieee, u8 *Addr) +void RemovePeerTS(struct rtllib_device *ieee, u8 *addr) { - struct ts_common_info *pTS, *pTmpTS; + struct ts_common_info *ts, *pTmpTS; - netdev_info(ieee->dev, "===========>%s, %pM\n", __func__, Addr); + netdev_info(ieee->dev, "===========>%s, %pM\n", __func__, addr); - list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Pending_List, List) { - if (memcmp(pTS->Addr, Addr, 6) == 0) { - RemoveTsEntry(ieee, pTS, TX_DIR); - list_del_init(&pTS->List); - list_add_tail(&pTS->List, &ieee->Tx_TS_Unused_List); + list_for_each_entry_safe(ts, pTmpTS, &ieee->Tx_TS_Pending_List, List) { + if (memcmp(ts->addr, addr, 6) == 0) { + RemoveTsEntry(ieee, ts, TX_DIR); + list_del_init(&ts->List); + list_add_tail(&ts->List, &ieee->Tx_TS_Unused_List); } } - list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Admit_List, List) { - if (memcmp(pTS->Addr, Addr, 6) == 0) { + list_for_each_entry_safe(ts, pTmpTS, &ieee->Tx_TS_Admit_List, List) { + if (memcmp(ts->addr, addr, 6) == 0) { netdev_info(ieee->dev, "====>remove Tx_TS_admin_list\n"); - RemoveTsEntry(ieee, pTS, TX_DIR); - list_del_init(&pTS->List); - list_add_tail(&pTS->List, &ieee->Tx_TS_Unused_List); + RemoveTsEntry(ieee, ts, TX_DIR); + list_del_init(&ts->List); + list_add_tail(&ts->List, &ieee->Tx_TS_Unused_List); } } - list_for_each_entry_safe(pTS, pTmpTS, &ieee->Rx_TS_Pending_List, List) { - if (memcmp(pTS->Addr, Addr, 6) == 0) { - RemoveTsEntry(ieee, pTS, RX_DIR); - list_del_init(&pTS->List); - list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List); + list_for_each_entry_safe(ts, pTmpTS, &ieee->Rx_TS_Pending_List, List) { + if (memcmp(ts->addr, addr, 6) == 0) { + RemoveTsEntry(ieee, ts, RX_DIR); + list_del_init(&ts->List); + list_add_tail(&ts->List, &ieee->Rx_TS_Unused_List); } } - list_for_each_entry_safe(pTS, pTmpTS, &ieee->Rx_TS_Admit_List, List) { - if (memcmp(pTS->Addr, Addr, 6) == 0) { - RemoveTsEntry(ieee, pTS, RX_DIR); - list_del_init(&pTS->List); - list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List); + list_for_each_entry_safe(ts, pTmpTS, &ieee->Rx_TS_Admit_List, List) { + if (memcmp(ts->addr, addr, 6) == 0) { + RemoveTsEntry(ieee, ts, RX_DIR); + list_del_init(&ts->List); + list_add_tail(&ts->List, &ieee->Rx_TS_Unused_List); } } } @@ -432,30 +404,30 @@ EXPORT_SYMBOL(RemovePeerTS); void RemoveAllTS(struct rtllib_device *ieee) { - struct ts_common_info *pTS, *pTmpTS; + struct ts_common_info *ts, *pTmpTS; - list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Pending_List, List) { - RemoveTsEntry(ieee, pTS, TX_DIR); - list_del_init(&pTS->List); - list_add_tail(&pTS->List, &ieee->Tx_TS_Unused_List); + list_for_each_entry_safe(ts, pTmpTS, &ieee->Tx_TS_Pending_List, List) { + RemoveTsEntry(ieee, ts, TX_DIR); + list_del_init(&ts->List); + list_add_tail(&ts->List, &ieee->Tx_TS_Unused_List); } - list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Admit_List, List) { - RemoveTsEntry(ieee, pTS, TX_DIR); - list_del_init(&pTS->List); - list_add_tail(&pTS->List, &ieee->Tx_TS_Unused_List); + list_for_each_entry_safe(ts, pTmpTS, &ieee->Tx_TS_Admit_List, List) { + RemoveTsEntry(ieee, ts, TX_DIR); + list_del_init(&ts->List); + list_add_tail(&ts->List, &ieee->Tx_TS_Unused_List); } - list_for_each_entry_safe(pTS, pTmpTS, &ieee->Rx_TS_Pending_List, List) { - RemoveTsEntry(ieee, pTS, RX_DIR); - list_del_init(&pTS->List); - list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List); + list_for_each_entry_safe(ts, pTmpTS, &ieee->Rx_TS_Pending_List, List) { + RemoveTsEntry(ieee, ts, RX_DIR); + list_del_init(&ts->List); + list_add_tail(&ts->List, &ieee->Rx_TS_Unused_List); } - list_for_each_entry_safe(pTS, pTmpTS, &ieee->Rx_TS_Admit_List, List) { - RemoveTsEntry(ieee, pTS, RX_DIR); - list_del_init(&pTS->List); - list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List); + list_for_each_entry_safe(ts, pTmpTS, &ieee->Rx_TS_Admit_List, List) { + RemoveTsEntry(ieee, ts, RX_DIR); + list_del_init(&ts->List); + list_add_tail(&ts->List, &ieee->Rx_TS_Unused_List); } } diff --git a/drivers/staging/rtl8192e/rtllib.h b/drivers/staging/rtl8192e/rtllib.h index bfa4dbf94d..d2cf3cfaaa 100644 --- a/drivers/staging/rtl8192e/rtllib.h +++ b/drivers/staging/rtl8192e/rtllib.h @@ -31,7 +31,6 @@ #include <linux/delay.h> #include <linux/wireless.h> -#include "rtllib_debug.h" #include "rtl819x_HT.h" #include "rtl819x_BA.h" #include "rtl819x_TS.h" @@ -92,7 +91,7 @@ static inline void *netdev_priv_rsl(struct net_device *dev) #define IE_CISCO_FLAG_POSITION 0x08 #define SUPPORT_CKIP_MIC 0x08 #define SUPPORT_CKIP_PK 0x10 -#define RT_RF_OFF_LEVL_HALT_NIC BIT3 +#define RT_RF_OFF_LEVL_HALT_NIC BIT(3) #define RT_IN_PS_LEVEL(psc, _PS_FLAG) \ ((psc->CurPsLevel & _PS_FLAG) ? true : false) #define RT_CLEAR_PS_LEVEL(psc, _PS_FLAG) \ @@ -172,7 +171,7 @@ struct sw_chnl_cmd { u32 Para1; u32 Para2; u32 msDelay; -} __packed; +}; /*--------------------------Define -------------------------------------------*/ #define MGN_1M 0x02 @@ -332,66 +331,23 @@ enum rt_op_mode { #define MIN_FRAG_THRESHOLD 256U #define MAX_FRAG_THRESHOLD 2346U -/* Frame control field constants */ -#define RTLLIB_FCTL_FTYPE 0x000c -#define RTLLIB_FCTL_STYPE 0x00f0 -#define RTLLIB_FCTL_FRAMETYPE 0x00fc -#define RTLLIB_FCTL_TODS 0x0100 -#define RTLLIB_FCTL_FROMDS 0x0200 -#define RTLLIB_FCTL_DSTODS 0x0300 -#define RTLLIB_FCTL_MOREFRAGS 0x0400 -#define RTLLIB_FCTL_RETRY 0x0800 -#define RTLLIB_FCTL_PM 0x1000 -#define RTLLIB_FCTL_MOREDATA 0x2000 -#define RTLLIB_FCTL_WEP 0x4000 -#define RTLLIB_FCTL_ORDER 0x8000 - #define RTLLIB_FTYPE_MGMT 0x0000 #define RTLLIB_FTYPE_CTL 0x0004 #define RTLLIB_FTYPE_DATA 0x0008 -/* management */ -#define RTLLIB_STYPE_ASSOC_REQ 0x0000 -#define RTLLIB_STYPE_ASSOC_RESP 0x0010 -#define RTLLIB_STYPE_REASSOC_REQ 0x0020 -#define RTLLIB_STYPE_REASSOC_RESP 0x0030 -#define RTLLIB_STYPE_PROBE_REQ 0x0040 -#define RTLLIB_STYPE_PROBE_RESP 0x0050 -#define RTLLIB_STYPE_BEACON 0x0080 -#define RTLLIB_STYPE_ATIM 0x0090 -#define RTLLIB_STYPE_DISASSOC 0x00A0 -#define RTLLIB_STYPE_AUTH 0x00B0 -#define RTLLIB_STYPE_DEAUTH 0x00C0 -#define RTLLIB_STYPE_MANAGE_ACT 0x00D0 - -/* control */ -#define RTLLIB_STYPE_PSPOLL 0x00A0 -#define RTLLIB_STYPE_RTS 0x00B0 -#define RTLLIB_STYPE_CTS 0x00C0 -#define RTLLIB_STYPE_ACK 0x00D0 - -/* data */ -#define RTLLIB_STYPE_DATA 0x0000 -#define RTLLIB_STYPE_DATA_CFACK 0x0010 -#define RTLLIB_STYPE_DATA_CFPOLL 0x0020 -#define RTLLIB_STYPE_DATA_CFACKPOLL 0x0030 -#define RTLLIB_STYPE_NULLFUNC 0x0040 -#define RTLLIB_STYPE_QOS_DATA 0x0080 -#define RTLLIB_STYPE_QOS_NULL 0x00C0 - #define RTLLIB_SCTL_FRAG 0x000F #define RTLLIB_SCTL_SEQ 0xFFF0 /* QOS control */ #define RTLLIB_QCTL_TID 0x000F -#define FC_QOS_BIT BIT7 +#define FC_QOS_BIT BIT(7) #define IsDataFrame(pdu) (((pdu[0] & 0x0C) == 0x08) ? true : false) #define IsLegacyDataFrame(pdu) (IsDataFrame(pdu) && (!(pdu[0]&FC_QOS_BIT))) #define IsQoSDataFrame(pframe) \ - ((*(u16 *)pframe&(RTLLIB_STYPE_QOS_DATA|RTLLIB_FTYPE_DATA)) == \ - (RTLLIB_STYPE_QOS_DATA|RTLLIB_FTYPE_DATA)) -#define Frame_Order(pframe) (*(u16 *)pframe&RTLLIB_FCTL_ORDER) + ((*(u16 *)pframe&(IEEE80211_STYPE_QOS_DATA|RTLLIB_FTYPE_DATA)) == \ + (IEEE80211_STYPE_QOS_DATA|RTLLIB_FTYPE_DATA)) +#define Frame_Order(pframe) (*(u16 *)pframe&IEEE80211_FCTL_ORDER) #define SN_LESS(a, b) (((a-b)&0x800) != 0) #define SN_EQUAL(a, b) (a == b) #define MAX_DEV_ADDR_SIZE 8 @@ -455,11 +411,10 @@ enum _REG_PREAMBLE_MODE { #define SNAP_SIZE sizeof(struct rtllib_snap_hdr) -#define WLAN_FC_GET_TYPE(fc) ((fc) & RTLLIB_FCTL_FTYPE) -#define WLAN_FC_GET_STYPE(fc) ((fc) & RTLLIB_FCTL_STYPE) -#define WLAN_FC_MORE_DATA(fc) ((fc) & RTLLIB_FCTL_MOREDATA) +#define WLAN_FC_GET_TYPE(fc) ((fc) & IEEE80211_FCTL_FTYPE) +#define WLAN_FC_GET_STYPE(fc) ((fc) & IEEE80211_FCTL_STYPE) +#define WLAN_FC_MORE_DATA(fc) ((fc) & IEEE80211_FCTL_MOREDATA) -#define WLAN_FC_GET_FRAMETYPE(fc) ((fc) & RTLLIB_FCTL_FRAMETYPE) #define WLAN_GET_SEQ_FRAG(seq) ((seq) & RTLLIB_SCTL_FRAG) #define WLAN_GET_SEQ_SEQ(seq) (((seq) & RTLLIB_SCTL_SEQ) >> 4) @@ -510,13 +465,6 @@ enum _REG_PREAMBLE_MODE { /* this is stolen from ipw2200 driver */ #define IEEE_IBSS_MAC_HASH_SIZE 31 -struct ieee_ibss_seq { - u8 mac[ETH_ALEN]; - u16 seq_num[17]; - u16 frag_num[17]; - unsigned long packet_time[17]; - struct list_head list; -}; /* NOTE: This data is for statistical purposes; not all hardware provides this * information for frames received. Not setting these will not cause @@ -673,78 +621,6 @@ enum rtllib_mfie { * information to determine what type of underlying data type is actually * stored in the data. */ -struct rtllib_pspoll_hdr { - __le16 frame_ctl; - __le16 aid; - u8 bssid[ETH_ALEN]; - u8 ta[ETH_ALEN]; -} __packed; - -struct rtllib_hdr { - __le16 frame_ctl; - __le16 duration_id; - u8 payload[]; -} __packed; - -struct rtllib_hdr_1addr { - __le16 frame_ctl; - __le16 duration_id; - u8 addr1[ETH_ALEN]; - u8 payload[]; -} __packed; - -struct rtllib_hdr_2addr { - __le16 frame_ctl; - __le16 duration_id; - u8 addr1[ETH_ALEN]; - u8 addr2[ETH_ALEN]; - u8 payload[]; -} __packed; - -struct rtllib_hdr_3addr { - __le16 frame_ctl; - __le16 duration_id; - u8 addr1[ETH_ALEN]; - u8 addr2[ETH_ALEN]; - u8 addr3[ETH_ALEN]; - __le16 seq_ctl; - u8 payload[]; -} __packed; - -struct rtllib_hdr_4addr { - __le16 frame_ctl; - __le16 duration_id; - u8 addr1[ETH_ALEN]; - u8 addr2[ETH_ALEN]; - u8 addr3[ETH_ALEN]; - __le16 seq_ctl; - u8 addr4[ETH_ALEN]; - u8 payload[]; -} __packed; - -struct rtllib_hdr_3addrqos { - __le16 frame_ctl; - __le16 duration_id; - u8 addr1[ETH_ALEN]; - u8 addr2[ETH_ALEN]; - u8 addr3[ETH_ALEN]; - __le16 seq_ctl; - __le16 qos_ctl; - u8 payload[]; -} __packed; - -struct rtllib_hdr_4addrqos { - __le16 frame_ctl; - __le16 duration_id; - u8 addr1[ETH_ALEN]; - u8 addr2[ETH_ALEN]; - u8 addr3[ETH_ALEN]; - __le16 seq_ctl; - u8 addr4[ETH_ALEN]; - __le16 qos_ctl; - u8 payload[]; -} __packed; - struct rtllib_info_element { u8 id; u8 len; @@ -752,32 +628,32 @@ struct rtllib_info_element { } __packed; struct rtllib_authentication { - struct rtllib_hdr_3addr header; + struct ieee80211_hdr_3addr header; __le16 algorithm; __le16 transaction; __le16 status; /*challenge*/ struct rtllib_info_element info_element[]; -} __packed; +} __packed __aligned(2); struct rtllib_disauth { - struct rtllib_hdr_3addr header; + struct ieee80211_hdr_3addr header; __le16 reason; -} __packed; +} __packed __aligned(2); struct rtllib_disassoc { - struct rtllib_hdr_3addr header; + struct ieee80211_hdr_3addr header; __le16 reason; -} __packed; +} __packed __aligned(2); struct rtllib_probe_request { - struct rtllib_hdr_3addr header; + struct ieee80211_hdr_3addr header; /* SSID, supported rates */ struct rtllib_info_element info_element[]; -} __packed; +} __packed __aligned(2); struct rtllib_probe_response { - struct rtllib_hdr_3addr header; + struct ieee80211_hdr_3addr header; u32 time_stamp[2]; __le16 beacon_interval; __le16 capability; @@ -785,26 +661,26 @@ struct rtllib_probe_response { * CF params, IBSS params, TIM (if beacon), RSN */ struct rtllib_info_element info_element[]; -} __packed; +} __packed __aligned(2); /* Alias beacon for probe_response */ #define rtllib_beacon rtllib_probe_response struct rtllib_assoc_request_frame { - struct rtllib_hdr_3addr header; + struct ieee80211_hdr_3addr header; __le16 capability; __le16 listen_interval; /* SSID, supported rates, RSN */ struct rtllib_info_element info_element[]; -} __packed; +} __packed __aligned(2); struct rtllib_assoc_response_frame { - struct rtllib_hdr_3addr header; + struct ieee80211_hdr_3addr header; __le16 capability; __le16 status; __le16 aid; struct rtllib_info_element info_element[]; /* supported rates */ -} __packed; +} __packed __aligned(2); struct rtllib_txb { u8 nr_frags; @@ -823,7 +699,7 @@ struct rtllib_rxb { struct sk_buff *subframes[MAX_SUBFRAME_COUNT]; u8 dst[ETH_ALEN]; u8 src[ETH_ALEN]; -} __packed; +}; union frameqos { u16 shortdata; @@ -947,13 +823,13 @@ static inline const char *eap_get_type(int type) static inline u8 Frame_QoSTID(u8 *buf) { - struct rtllib_hdr_3addr *hdr; + struct ieee80211_hdr_3addr *hdr; u16 fc; - hdr = (struct rtllib_hdr_3addr *)buf; - fc = le16_to_cpu(hdr->frame_ctl); - return (u8)((union frameqos *)(buf + (((fc & RTLLIB_FCTL_TODS) && - (fc & RTLLIB_FCTL_FROMDS)) ? 30 : 24)))->field.tid; + hdr = (struct ieee80211_hdr_3addr *)buf; + fc = le16_to_cpu(hdr->frame_control); + return (u8)((union frameqos *)(buf + (((fc & IEEE80211_FCTL_TODS) && + (fc & IEEE80211_FCTL_FROMDS)) ? 30 : 24)))->field.tid; } struct eapol { @@ -1035,7 +911,6 @@ enum {WMM_all_frame, WMM_two_frame, WMM_four_frame, WMM_six_frame}; ((up) < 6) ? WME_AC_VI : \ WME_AC_VO) -#define ETHER_ADDR_LEN 6 /* length of an Ethernet address */ #define ETHERNET_HEADER_SIZE 14 /* length of two Ethernet address * plus ether type */ @@ -1183,13 +1058,6 @@ enum fsync_state { SW_Fsync }; -enum rt_ps_mode { - eActive, - eMaxPs, - eFastPs, - eAutoPs, -}; - enum ips_callback_function { IPS_CALLBACK_NONE = 0, IPS_CALLBACK_MGNT_LINK_REQUEST = 1, @@ -1209,7 +1077,6 @@ struct rt_pwr_save_ctrl { bool bLeisurePs; u8 LpsIdleCount; - u8 reg_max_lps_awake_intvl; u8 LPSAwakeIntvl; u32 CurPsLevel; @@ -1217,10 +1084,10 @@ struct rt_pwr_save_ctrl { #define RT_RF_CHANGE_SOURCE u32 -#define RF_CHANGE_BY_SW BIT31 -#define RF_CHANGE_BY_HW BIT30 -#define RF_CHANGE_BY_PS BIT29 -#define RF_CHANGE_BY_IPS BIT28 +#define RF_CHANGE_BY_SW BIT(31) +#define RF_CHANGE_BY_HW BIT(30) +#define RF_CHANGE_BY_PS BIT(29) +#define RF_CHANGE_BY_IPS BIT(28) #define RF_CHANGE_BY_INIT 0 enum country_code_type { @@ -1246,33 +1113,6 @@ enum scan_op_backup_opt { SCAN_OPT_MAX }; -enum fw_cmd_io_type { - FW_CMD_DIG_ENABLE = 0, - FW_CMD_DIG_DISABLE = 1, - FW_CMD_DIG_HALT = 2, - FW_CMD_DIG_RESUME = 3, - FW_CMD_HIGH_PWR_ENABLE = 4, - FW_CMD_HIGH_PWR_DISABLE = 5, - FW_CMD_RA_RESET = 6, - FW_CMD_RA_ACTIVE = 7, - FW_CMD_RA_REFRESH_N = 8, - FW_CMD_RA_REFRESH_BG = 9, - FW_CMD_RA_INIT = 10, - FW_CMD_IQK_ENABLE = 11, - FW_CMD_TXPWR_TRACK_ENABLE = 12, - FW_CMD_TXPWR_TRACK_DISABLE = 13, - FW_CMD_TXPWR_TRACK_THERMAL = 14, - FW_CMD_PAUSE_DM_BY_SCAN = 15, - FW_CMD_RESUME_DM_BY_SCAN = 16, - FW_CMD_RA_REFRESH_N_COMB = 17, - FW_CMD_RA_REFRESH_BG_COMB = 18, - FW_CMD_ANTENNA_SW_ENABLE = 19, - FW_CMD_ANTENNA_SW_DISABLE = 20, - FW_CMD_TX_FEEDBACK_CCX_ENABLE = 21, - FW_CMD_LPS_ENTER = 22, - FW_CMD_LPS_LEAVE = 23, -}; - #define RT_MAX_LD_SLOT_NUM 10 struct rt_link_detect { u32 NumRecvBcnInPeriod; @@ -1303,7 +1143,6 @@ struct sw_cam_table { #define TOTAL_CAM_ENTRY 32 struct rate_adaptive { - u8 rate_adaptive_disabled; u8 ratr_state; u16 reserve; @@ -1321,7 +1160,6 @@ struct rate_adaptive { u8 ping_rssi_enable; u32 ping_rssi_ratr; u32 ping_rssi_thresh_for_ra; - u32 last_ratr; u8 PreRATRState; }; @@ -1334,11 +1172,6 @@ struct rt_pmkid_list { u8 bUsed; }; -struct rt_intel_promisc_mode { - bool promiscuous_on; - bool fltr_src_sta_frame; -}; - /*************** DRIVER STATUS *****/ #define STATUS_SCANNING 0 /*************** DRIVER STATUS *****/ @@ -1368,7 +1201,6 @@ struct rtllib_device { bool bForcedBgMode; u8 hwsec_active; - bool is_silent_reset; bool is_roaming; bool ieee_up; bool cannot_notify; @@ -1418,8 +1250,6 @@ struct rtllib_device { int scan_age; int iw_mode; /* operating mode (IW_MODE_*) */ - bool net_promiscuous_md; - struct rt_intel_promisc_mode intel_promiscuous_md_info; spinlock_t lock; spinlock_t wpax_suitlist_lock; @@ -1496,13 +1326,10 @@ struct rtllib_device { u8 active_channel_map[MAX_CHANNEL_NUMBER+1]; u8 bss_start_channel; - u8 ibss_maxjoin_chal; int rate; /* current rate */ int basic_rate; - short active_scan; - /* this contains flags for selectively enable softmac support */ u16 softmac_features; @@ -1525,7 +1352,6 @@ struct rtllib_device { u64 ps_time; bool polling; - short raw_tx; /* used if IEEE_SOFTMAC_TX_QUEUE is set */ short queue_stop; short scanning_continue; @@ -1602,7 +1428,6 @@ struct rtllib_device { struct delayed_work associate_procedure_wq; struct delayed_work softmac_scan_wq; struct delayed_work associate_retry_wq; - struct delayed_work start_ibss_wq; struct delayed_work hw_wakeup_wq; struct delayed_work hw_sleep_wq; struct delayed_work link_change_wq; @@ -1653,15 +1478,6 @@ struct rtllib_device { */ void (*link_change)(struct net_device *dev); - /* these two function indicates to the HW when to start - * and stop to send beacons. This is used when the - * IEEE_SOFTMAC_BEACONS is not set. For now the - * stop_send_bacons is NOT guaranteed to be called only - * after start_send_beacons. - */ - void (*start_send_beacons)(struct net_device *dev); - void (*stop_send_beacons)(struct net_device *dev); - /* power save mode related */ void (*sta_wake_up)(struct net_device *dev); void (*enter_sleep_state)(struct net_device *dev, u64 time); @@ -1761,15 +1577,15 @@ static inline int rtllib_get_hdrlen(u16 fc) switch (WLAN_FC_GET_TYPE(fc)) { case RTLLIB_FTYPE_DATA: - if ((fc & RTLLIB_FCTL_FROMDS) && (fc & RTLLIB_FCTL_TODS)) + if ((fc & IEEE80211_FCTL_FROMDS) && (fc & IEEE80211_FCTL_TODS)) hdrlen = RTLLIB_4ADDR_LEN; /* Addr4 */ if (RTLLIB_QOS_HAS_SEQ(fc)) hdrlen += 2; /* QOS ctrl*/ break; case RTLLIB_FTYPE_CTL: switch (WLAN_FC_GET_STYPE(fc)) { - case RTLLIB_STYPE_CTS: - case RTLLIB_STYPE_ACK: + case IEEE80211_STYPE_CTS: + case IEEE80211_STYPE_ACK: hdrlen = RTLLIB_1ADDR_LEN; break; default: @@ -1782,21 +1598,6 @@ static inline int rtllib_get_hdrlen(u16 fc) return hdrlen; } -static inline u8 *rtllib_get_payload(struct rtllib_hdr *hdr) -{ - switch (rtllib_get_hdrlen(le16_to_cpu(hdr->frame_ctl))) { - case RTLLIB_1ADDR_LEN: - return ((struct rtllib_hdr_1addr *)hdr)->payload; - case RTLLIB_2ADDR_LEN: - return ((struct rtllib_hdr_2addr *)hdr)->payload; - case RTLLIB_3ADDR_LEN: - return ((struct rtllib_hdr_3addr *)hdr)->payload; - case RTLLIB_4ADDR_LEN: - return ((struct rtllib_hdr_4addr *)hdr)->payload; - } - return NULL; -} - static inline int rtllib_is_ofdm_rate(u8 rate) { switch (rate & ~RTLLIB_BASIC_RATE_MASK) { @@ -1841,8 +1642,6 @@ void rtllib_txb_free(struct rtllib_txb *txb); /* rtllib_rx.c */ int rtllib_rx(struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_stats); -void rtllib_rx_probe_rq(struct rtllib_device *ieee, - struct sk_buff *skb); int rtllib_legal_channel(struct rtllib_device *rtllib, u8 channel); /* rtllib_wx.c */ @@ -1876,7 +1675,6 @@ void rtllib_softmac_new_net(struct rtllib_device *ieee, void SendDisassociation(struct rtllib_device *ieee, bool deauth, u16 asRsn); void rtllib_softmac_xmit(struct rtllib_txb *txb, struct rtllib_device *ieee); -void rtllib_start_ibss(struct rtllib_device *ieee); int rtllib_softmac_init(struct rtllib_device *ieee); void rtllib_softmac_free(struct rtllib_device *ieee); void rtllib_disassociate(struct rtllib_device *ieee); @@ -1887,23 +1685,18 @@ void rtllib_start_scan_syncro(struct rtllib_device *ieee); void rtllib_sta_ps_send_null_frame(struct rtllib_device *ieee, short pwr); void rtllib_sta_ps_send_pspoll_frame(struct rtllib_device *ieee); void rtllib_start_protocol(struct rtllib_device *ieee); -void rtllib_stop_protocol(struct rtllib_device *ieee, u8 shutdown); +void rtllib_stop_protocol(struct rtllib_device *ieee); void rtllib_EnableNetMonitorMode(struct net_device *dev, bool bInitState); void rtllib_DisableNetMonitorMode(struct net_device *dev, bool bInitState); -void rtllib_EnableIntelPromiscuousMode(struct net_device *dev, bool bInitState); -void rtllib_DisableIntelPromiscuousMode(struct net_device *dev, - bool bInitState); -void rtllib_softmac_stop_protocol(struct rtllib_device *ieee, - u8 mesh_flag, u8 shutdown); -void rtllib_softmac_start_protocol(struct rtllib_device *ieee, u8 mesh_flag); + +void rtllib_softmac_stop_protocol(struct rtllib_device *ieee); +void rtllib_softmac_start_protocol(struct rtllib_device *ieee); void rtllib_reset_queue(struct rtllib_device *ieee); void rtllib_wake_all_queues(struct rtllib_device *ieee); void rtllib_stop_all_queues(struct rtllib_device *ieee); struct sk_buff *rtllib_get_beacon(struct rtllib_device *ieee); -void rtllib_start_send_beacons(struct rtllib_device *ieee); -void rtllib_stop_send_beacons(struct rtllib_device *ieee); void notify_wx_assoc_event(struct rtllib_device *ieee); void rtllib_ps_tx_ack(struct rtllib_device *ieee, short success); @@ -1947,10 +1740,6 @@ int rtllib_wx_get_freq(struct rtllib_device *ieee, struct iw_request_info *a, union iwreq_data *wrqu, char *b); void rtllib_wx_sync_scan_wq(void *data); -int rtllib_wx_set_rawtx(struct rtllib_device *ieee, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra); - int rtllib_wx_get_name(struct rtllib_device *ieee, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); @@ -1972,7 +1761,7 @@ int rtllib_wx_get_rts(struct rtllib_device *ieee, struct iw_request_info *info, void HTSetConnectBwMode(struct rtllib_device *ieee, enum ht_channel_width bandwidth, enum ht_extchnl_offset Offset); -void HTUpdateDefaultSetting(struct rtllib_device *ieee); +void ht_update_default_setting(struct rtllib_device *ieee); void HTConstructCapabilityElement(struct rtllib_device *ieee, u8 *posHTCap, u8 *len, u8 isEncrypt, bool bAssoc); @@ -1998,21 +1787,21 @@ u16 TxCountToDataRate(struct rtllib_device *ieee, u8 nDataRate); int rtllib_rx_ADDBAReq(struct rtllib_device *ieee, struct sk_buff *skb); int rtllib_rx_ADDBARsp(struct rtllib_device *ieee, struct sk_buff *skb); int rtllib_rx_DELBA(struct rtllib_device *ieee, struct sk_buff *skb); -void rtllib_ts_init_add_ba(struct rtllib_device *ieee, struct tx_ts_record *pTS, - u8 Policy, u8 bOverwritePending); +void rtllib_ts_init_add_ba(struct rtllib_device *ieee, struct tx_ts_record *ts, + u8 policy, u8 bOverwritePending); void rtllib_ts_init_del_ba(struct rtllib_device *ieee, struct ts_common_info *pTsCommonInfo, enum tr_select TxRxSelect); void rtllib_ba_setup_timeout(struct timer_list *t); void rtllib_tx_ba_inact_timeout(struct timer_list *t); void rtllib_rx_ba_inact_timeout(struct timer_list *t); -void rtllib_reset_ba_entry(struct ba_record *pBA); -bool GetTs(struct rtllib_device *ieee, struct ts_common_info **ppTS, u8 *Addr, +void rtllib_reset_ba_entry(struct ba_record *ba); +bool rtllib_get_ts(struct rtllib_device *ieee, struct ts_common_info **ppTS, u8 *addr, u8 TID, enum tr_select TxRxSelect, bool bAddNewTs); -void TSInitialize(struct rtllib_device *ieee); +void rtllib_ts_init(struct rtllib_device *ieee); void TsStartAddBaProcess(struct rtllib_device *ieee, struct tx_ts_record *pTxTS); -void RemovePeerTS(struct rtllib_device *ieee, u8 *Addr); +void RemovePeerTS(struct rtllib_device *ieee, u8 *addr); void RemoveAllTS(struct rtllib_device *ieee); static inline const char *escape_essid(const char *essid, u8 essid_len) @@ -2035,7 +1824,7 @@ bool rtllib_MgntDisconnect(struct rtllib_device *rtllib, u8 asRsn); * ieee handler to refer to it. */ void rtllib_FlushRxTsPendingPkts(struct rtllib_device *ieee, - struct rx_ts_record *pTS); + struct rx_ts_record *ts); int rtllib_parse_info_param(struct rtllib_device *ieee, struct rtllib_info_element *info_element, u16 length, @@ -2044,7 +1833,6 @@ int rtllib_parse_info_param(struct rtllib_device *ieee, void rtllib_indicate_packets(struct rtllib_device *ieee, struct rtllib_rxb **prxbIndicateArray, u8 index); -void HTUseDefaultSetting(struct rtllib_device *ieee); #define RT_ASOC_RETRY_LIMIT 5 u8 MgntQuery_TxRateExcludeCCKRates(struct rtllib_device *ieee); diff --git a/drivers/staging/rtl8192e/rtllib_crypt_ccmp.c b/drivers/staging/rtl8192e/rtllib_crypt_ccmp.c index f88096bcb1..cbb8c8dbe9 100644 --- a/drivers/staging/rtl8192e/rtllib_crypt_ccmp.c +++ b/drivers/staging/rtl8192e/rtllib_crypt_ccmp.c @@ -52,7 +52,7 @@ static void *rtllib_ccmp_init(int key_idx) struct rtllib_ccmp_data *priv; priv = kzalloc(sizeof(*priv), GFP_ATOMIC); - if (priv == NULL) + if (!priv) goto fail; priv->key_idx = key_idx; @@ -83,7 +83,7 @@ static void rtllib_ccmp_deinit(void *priv) kfree(priv); } -static int ccmp_init_iv_and_aad(struct rtllib_hdr_4addr *hdr, +static int ccmp_init_iv_and_aad(struct ieee80211_hdr *hdr, u8 *pn, u8 *iv, u8 *aad) { u8 *pos, qc = 0; @@ -91,9 +91,8 @@ static int ccmp_init_iv_and_aad(struct rtllib_hdr_4addr *hdr, u16 fc; int a4_included, qc_included; - fc = le16_to_cpu(hdr->frame_ctl); - a4_included = ((fc & (RTLLIB_FCTL_TODS | RTLLIB_FCTL_FROMDS)) == - (RTLLIB_FCTL_TODS | RTLLIB_FCTL_FROMDS)); + fc = le16_to_cpu(hdr->frame_control); + a4_included = ieee80211_has_a4(hdr->frame_control); qc_included = ((WLAN_FC_GET_TYPE(fc) == RTLLIB_FTYPE_DATA) && (WLAN_FC_GET_STYPE(fc) & 0x80)); @@ -134,7 +133,7 @@ static int ccmp_init_iv_and_aad(struct rtllib_hdr_4addr *hdr, memcpy(&aad[2], &hdr->addr1, ETH_ALEN); memcpy(&aad[8], &hdr->addr2, ETH_ALEN); memcpy(&aad[14], &hdr->addr3, ETH_ALEN); - pos = (u8 *)&hdr->seq_ctl; + pos = (u8 *)&hdr->seq_ctrl; aad[20] = pos[0] & 0x0f; aad[21] = 0; /* all bits masked */ memset(aad + 22, 0, 8); @@ -153,7 +152,7 @@ static int rtllib_ccmp_encrypt(struct sk_buff *skb, int hdr_len, void *priv) struct rtllib_ccmp_data *key = priv; int i; u8 *pos; - struct rtllib_hdr_4addr *hdr; + struct ieee80211_hdr *hdr; struct cb_desc *tcb_desc = (struct cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); if (skb_headroom(skb) < CCMP_HDR_LEN || @@ -182,7 +181,7 @@ static int rtllib_ccmp_encrypt(struct sk_buff *skb, int hdr_len, void *priv) *pos++ = key->tx_pn[1]; *pos++ = key->tx_pn[0]; - hdr = (struct rtllib_hdr_4addr *)skb->data; + hdr = (struct ieee80211_hdr *)skb->data; if (!tcb_desc->bHwSec) { struct aead_request *req; struct scatterlist sg[2]; @@ -220,7 +219,7 @@ static int rtllib_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv) { struct rtllib_ccmp_data *key = priv; u8 keyidx, *pos; - struct rtllib_hdr_4addr *hdr; + struct ieee80211_hdr *hdr; struct cb_desc *tcb_desc = (struct cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); u8 pn[6]; @@ -230,7 +229,7 @@ static int rtllib_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv) return -1; } - hdr = (struct rtllib_hdr_4addr *)skb->data; + hdr = (struct ieee80211_hdr *)skb->data; pos = skb->data + hdr_len; keyidx = pos[3]; if (!(keyidx & (1 << 5))) { diff --git a/drivers/staging/rtl8192e/rtllib_crypt_tkip.c b/drivers/staging/rtl8192e/rtllib_crypt_tkip.c index 9fdfcc017e..0244b524a7 100644 --- a/drivers/staging/rtl8192e/rtllib_crypt_tkip.c +++ b/drivers/staging/rtl8192e/rtllib_crypt_tkip.c @@ -255,7 +255,7 @@ static int rtllib_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv) struct rtllib_tkip_data *tkey = priv; int len; u8 *pos; - struct rtllib_hdr_4addr *hdr; + struct ieee80211_hdr *hdr; struct cb_desc *tcb_desc = (struct cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); int ret = 0; @@ -266,7 +266,7 @@ static int rtllib_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv) skb->len < hdr_len) return -1; - hdr = (struct rtllib_hdr_4addr *)skb->data; + hdr = (struct ieee80211_hdr *)skb->data; if (!tcb_desc->bHwSec) { if (!tkey->tx_phase1_done) { @@ -330,7 +330,7 @@ static int rtllib_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv) u8 keyidx, *pos; u32 iv32; u16 iv16; - struct rtllib_hdr_4addr *hdr; + struct ieee80211_hdr *hdr; struct cb_desc *tcb_desc = (struct cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); u8 rc4key[16]; @@ -341,7 +341,7 @@ static int rtllib_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv) if (skb->len < hdr_len + 8 + 4) return -1; - hdr = (struct rtllib_hdr_4addr *)skb->data; + hdr = (struct ieee80211_hdr *)skb->data; pos = skb->data + hdr_len; keyidx = pos[3]; if (!(keyidx & (1 << 5))) { @@ -465,20 +465,20 @@ out: static void michael_mic_hdr(struct sk_buff *skb, u8 *hdr) { - struct rtllib_hdr_4addr *hdr11; + struct ieee80211_hdr *hdr11; - hdr11 = (struct rtllib_hdr_4addr *)skb->data; - switch (le16_to_cpu(hdr11->frame_ctl) & - (RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS)) { - case RTLLIB_FCTL_TODS: + hdr11 = (struct ieee80211_hdr *)skb->data; + switch (le16_to_cpu(hdr11->frame_control) & + (IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS)) { + case IEEE80211_FCTL_TODS: ether_addr_copy(hdr, hdr11->addr3); /* DA */ ether_addr_copy(hdr + ETH_ALEN, hdr11->addr2); /* SA */ break; - case RTLLIB_FCTL_FROMDS: + case IEEE80211_FCTL_FROMDS: ether_addr_copy(hdr, hdr11->addr1); /* DA */ ether_addr_copy(hdr + ETH_ALEN, hdr11->addr3); /* SA */ break; - case RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS: + case IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS: ether_addr_copy(hdr, hdr11->addr3); /* DA */ ether_addr_copy(hdr + ETH_ALEN, hdr11->addr4); /* SA */ break; @@ -501,9 +501,9 @@ static int rtllib_michael_mic_add(struct sk_buff *skb, int hdr_len, void *priv) { struct rtllib_tkip_data *tkey = priv; u8 *pos; - struct rtllib_hdr_4addr *hdr; + struct ieee80211_hdr *hdr; - hdr = (struct rtllib_hdr_4addr *)skb->data; + hdr = (struct ieee80211_hdr *)skb->data; if (skb_tailroom(skb) < 8 || skb->len < hdr_len) { netdev_dbg(skb->dev, @@ -514,7 +514,7 @@ static int rtllib_michael_mic_add(struct sk_buff *skb, int hdr_len, void *priv) michael_mic_hdr(skb, tkey->tx_hdr); - if (RTLLIB_QOS_HAS_SEQ(le16_to_cpu(hdr->frame_ctl))) + if (RTLLIB_QOS_HAS_SEQ(le16_to_cpu(hdr->frame_control))) tkey->tx_hdr[12] = *(skb->data + hdr_len - 2) & 0x07; pos = skb_put(skb, 8); if (michael_mic(tkey->tx_tfm_michael, &tkey->key[16], tkey->tx_hdr, @@ -525,7 +525,7 @@ static int rtllib_michael_mic_add(struct sk_buff *skb, int hdr_len, void *priv) } static void rtllib_michael_mic_failure(struct net_device *dev, - struct rtllib_hdr_4addr *hdr, + struct ieee80211_hdr *hdr, int keyidx) { union iwreq_data wrqu; @@ -550,15 +550,15 @@ static int rtllib_michael_mic_verify(struct sk_buff *skb, int keyidx, { struct rtllib_tkip_data *tkey = priv; u8 mic[8]; - struct rtllib_hdr_4addr *hdr; + struct ieee80211_hdr *hdr; - hdr = (struct rtllib_hdr_4addr *)skb->data; + hdr = (struct ieee80211_hdr *)skb->data; if (!tkey->key_set) return -1; michael_mic_hdr(skb, tkey->rx_hdr); - if (RTLLIB_QOS_HAS_SEQ(le16_to_cpu(hdr->frame_ctl))) + if (RTLLIB_QOS_HAS_SEQ(le16_to_cpu(hdr->frame_control))) tkey->rx_hdr[12] = *(skb->data + hdr_len - 2) & 0x07; if (michael_mic(tkey->rx_tfm_michael, &tkey->key[24], tkey->rx_hdr, @@ -566,9 +566,9 @@ static int rtllib_michael_mic_verify(struct sk_buff *skb, int keyidx, return -1; if (memcmp(mic, skb->data + skb->len - 8, 8) != 0) { - struct rtllib_hdr_4addr *hdr; + struct ieee80211_hdr *hdr; - hdr = (struct rtllib_hdr_4addr *)skb->data; + hdr = (struct ieee80211_hdr *)skb->data; netdev_dbg(skb->dev, "Michael MIC verification failed for MSDU from %pM keyidx=%d\n", hdr->addr2, keyidx); diff --git a/drivers/staging/rtl8192e/rtllib_crypt_wep.c b/drivers/staging/rtl8192e/rtllib_crypt_wep.c index 062285e4d9..21c2b7666d 100644 --- a/drivers/staging/rtl8192e/rtllib_crypt_wep.c +++ b/drivers/staging/rtl8192e/rtllib_crypt_wep.c @@ -35,7 +35,7 @@ static void *prism2_wep_init(int keyidx) return NULL; priv = kzalloc(sizeof(*priv), GFP_ATOMIC); - if (priv == NULL) + if (!priv) return NULL; priv->key_idx = keyidx; diff --git a/drivers/staging/rtl8192e/rtllib_debug.h b/drivers/staging/rtl8192e/rtllib_debug.h deleted file mode 100644 index f6b23defe2..0000000000 --- a/drivers/staging/rtl8192e/rtllib_debug.h +++ /dev/null @@ -1,49 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* - * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. - * - * Contact Information: wlanfae <wlanfae@realtek.com> - */ -#ifndef _RTL_DEBUG_H -#define _RTL_DEBUG_H - -#include <linux/bits.h> - -/* Allow files to override DRV_NAME */ -#ifndef DRV_NAME -#define DRV_NAME "rtllib_92e" -#endif - -extern u32 rt_global_debug_component; - -/* These are the defines for rt_global_debug_component */ -enum RTL_DEBUG { - COMP_TRACE = BIT(0), - COMP_DBG = BIT(1), - COMP_INIT = BIT(2), - COMP_RECV = BIT(3), - COMP_POWER = BIT(6), - COMP_SWBW = BIT(8), - COMP_SEC = BIT(9), - COMP_LPS = BIT(10), - COMP_QOS = BIT(11), - COMP_RATE = BIT(12), - COMP_RXDESC = BIT(13), - COMP_PHY = BIT(14), - COMP_DIG = BIT(15), - COMP_TXAGC = BIT(16), - COMP_HALDM = BIT(17), - COMP_POWER_TRACKING = BIT(18), - COMP_CH = BIT(19), - COMP_RF = BIT(20), - COMP_FIRMWARE = BIT(21), - COMP_RESET = BIT(23), - COMP_CMDPKT = BIT(24), - COMP_SCAN = BIT(25), - COMP_PS = BIT(26), - COMP_DOWN = BIT(27), - COMP_INTR = BIT(28), - COMP_ERR = BIT(31) -}; - -#endif diff --git a/drivers/staging/rtl8192e/rtllib_module.c b/drivers/staging/rtl8192e/rtllib_module.c index 2416e0c602..95b6d6b942 100644 --- a/drivers/staging/rtl8192e/rtllib_module.c +++ b/drivers/staging/rtl8192e/rtllib_module.c @@ -34,9 +34,6 @@ #include <net/arp.h> #include "rtllib.h" -u32 rt_global_debug_component = COMP_ERR; -EXPORT_SYMBOL(rt_global_debug_component); - static inline int rtllib_networks_allocate(struct rtllib_device *ieee) { if (ieee->networks) @@ -114,7 +111,6 @@ struct net_device *alloc_rtllib(int sizeof_priv) ieee->drop_unencrypted = 0; ieee->privacy_invoked = 0; ieee->ieee802_1x = 1; - ieee->raw_tx = 0; ieee->hwsec_active = 0; memset(ieee->swcamtable, 0, sizeof(struct sw_cam_table) * 32); @@ -126,9 +122,9 @@ struct net_device *alloc_rtllib(int sizeof_priv) if (!ieee->ht_info) goto free_softmac; - HTUpdateDefaultSetting(ieee); + ht_update_default_setting(ieee); HTInitializeHTInfo(ieee); - TSInitialize(ieee); + rtllib_ts_init(ieee); for (i = 0; i < IEEE_IBSS_MAC_HASH_SIZE; i++) INIT_LIST_HEAD(&ieee->ibss_mac_hash[i]); diff --git a/drivers/staging/rtl8192e/rtllib_rx.c b/drivers/staging/rtl8192e/rtllib_rx.c index 40e7bbb17c..ecaa4dec3f 100644 --- a/drivers/staging/rtl8192e/rtllib_rx.c +++ b/drivers/staging/rtl8192e/rtllib_rx.c @@ -63,7 +63,7 @@ rtllib_frag_cache_find(struct rtllib_device *ieee, unsigned int seq, for (i = 0; i < RTLLIB_FRAG_CACHE_LEN; i++) { entry = &ieee->frag_cache[tid][i]; - if (entry->skb != NULL && + if (entry->skb && time_after(jiffies, entry->first_frag_time + 2 * HZ)) { netdev_dbg(ieee->dev, "expiring fragment cache entry seq=%u last_frag=%u\n", @@ -72,7 +72,7 @@ rtllib_frag_cache_find(struct rtllib_device *ieee, unsigned int seq, entry->skb = NULL; } - if (entry->skb != NULL && entry->seq == seq && + if (entry->skb && entry->seq == seq && (entry->last_frag + 1 == frag || frag == -1) && memcmp(entry->src_addr, src, ETH_ALEN) == 0 && memcmp(entry->dst_addr, dst, ETH_ALEN) == 0) @@ -85,27 +85,27 @@ rtllib_frag_cache_find(struct rtllib_device *ieee, unsigned int seq, /* Called only as a tasklet (software IRQ) */ static struct sk_buff * rtllib_frag_cache_get(struct rtllib_device *ieee, - struct rtllib_hdr_4addr *hdr) + struct ieee80211_hdr *hdr) { struct sk_buff *skb = NULL; - u16 fc = le16_to_cpu(hdr->frame_ctl); - u16 sc = le16_to_cpu(hdr->seq_ctl); + u16 fc = le16_to_cpu(hdr->frame_control); + u16 sc = le16_to_cpu(hdr->seq_ctrl); unsigned int frag = WLAN_GET_SEQ_FRAG(sc); unsigned int seq = WLAN_GET_SEQ_SEQ(sc); struct rtllib_frag_entry *entry; - struct rtllib_hdr_3addrqos *hdr_3addrqos; - struct rtllib_hdr_4addrqos *hdr_4addrqos; + struct ieee80211_qos_hdr *hdr_3addrqos; + struct ieee80211_qos_hdr_4addr *hdr_4addrqos; u8 tid; - if (((fc & RTLLIB_FCTL_DSTODS) == RTLLIB_FCTL_DSTODS) && + if (ieee80211_has_a4(hdr->frame_control) && RTLLIB_QOS_HAS_SEQ(fc)) { - hdr_4addrqos = (struct rtllib_hdr_4addrqos *)hdr; - tid = le16_to_cpu(hdr_4addrqos->qos_ctl) & RTLLIB_QCTL_TID; + hdr_4addrqos = (struct ieee80211_qos_hdr_4addr *)hdr; + tid = le16_to_cpu(hdr_4addrqos->qos_ctrl) & RTLLIB_QCTL_TID; tid = UP2AC(tid); tid++; } else if (RTLLIB_QOS_HAS_SEQ(fc)) { - hdr_3addrqos = (struct rtllib_hdr_3addrqos *)hdr; - tid = le16_to_cpu(hdr_3addrqos->qos_ctl) & RTLLIB_QCTL_TID; + hdr_3addrqos = (struct ieee80211_qos_hdr *)hdr; + tid = le16_to_cpu(hdr_3addrqos->qos_ctrl) & RTLLIB_QCTL_TID; tid = UP2AC(tid); tid++; } else { @@ -115,7 +115,7 @@ rtllib_frag_cache_get(struct rtllib_device *ieee, if (frag == 0) { /* Reserve enough space to fit maximum frame length */ skb = dev_alloc_skb(ieee->dev->mtu + - sizeof(struct rtllib_hdr_4addr) + + sizeof(struct ieee80211_hdr) + 8 /* LLC */ + 2 /* alignment */ + 8 /* WEP */ + @@ -130,7 +130,7 @@ rtllib_frag_cache_get(struct rtllib_device *ieee, if (ieee->frag_next_idx[tid] >= RTLLIB_FRAG_CACHE_LEN) ieee->frag_next_idx[tid] = 0; - if (entry->skb != NULL) + if (entry->skb) dev_kfree_skb_any(entry->skb); entry->first_frag_time = jiffies; @@ -145,7 +145,7 @@ rtllib_frag_cache_get(struct rtllib_device *ieee, */ entry = rtllib_frag_cache_find(ieee, seq, frag, tid, hdr->addr2, hdr->addr1); - if (entry != NULL) { + if (entry) { entry->last_frag = frag; skb = entry->skb; } @@ -156,25 +156,25 @@ rtllib_frag_cache_get(struct rtllib_device *ieee, /* Called only as a tasklet (software IRQ) */ static int rtllib_frag_cache_invalidate(struct rtllib_device *ieee, - struct rtllib_hdr_4addr *hdr) + struct ieee80211_hdr *hdr) { - u16 fc = le16_to_cpu(hdr->frame_ctl); - u16 sc = le16_to_cpu(hdr->seq_ctl); + u16 fc = le16_to_cpu(hdr->frame_control); + u16 sc = le16_to_cpu(hdr->seq_ctrl); unsigned int seq = WLAN_GET_SEQ_SEQ(sc); struct rtllib_frag_entry *entry; - struct rtllib_hdr_3addrqos *hdr_3addrqos; - struct rtllib_hdr_4addrqos *hdr_4addrqos; + struct ieee80211_qos_hdr *hdr_3addrqos; + struct ieee80211_qos_hdr_4addr *hdr_4addrqos; u8 tid; - if (((fc & RTLLIB_FCTL_DSTODS) == RTLLIB_FCTL_DSTODS) && + if (ieee80211_has_a4(hdr->frame_control) && RTLLIB_QOS_HAS_SEQ(fc)) { - hdr_4addrqos = (struct rtllib_hdr_4addrqos *)hdr; - tid = le16_to_cpu(hdr_4addrqos->qos_ctl) & RTLLIB_QCTL_TID; + hdr_4addrqos = (struct ieee80211_qos_hdr_4addr *)hdr; + tid = le16_to_cpu(hdr_4addrqos->qos_ctrl) & RTLLIB_QCTL_TID; tid = UP2AC(tid); tid++; } else if (RTLLIB_QOS_HAS_SEQ(fc)) { - hdr_3addrqos = (struct rtllib_hdr_3addrqos *)hdr; - tid = le16_to_cpu(hdr_3addrqos->qos_ctl) & RTLLIB_QCTL_TID; + hdr_3addrqos = (struct ieee80211_qos_hdr *)hdr; + tid = le16_to_cpu(hdr_3addrqos->qos_ctrl) & RTLLIB_QCTL_TID; tid = UP2AC(tid); tid++; } else { @@ -184,7 +184,7 @@ static int rtllib_frag_cache_invalidate(struct rtllib_device *ieee, entry = rtllib_frag_cache_find(ieee, seq, -1, tid, hdr->addr2, hdr->addr1); - if (entry == NULL) { + if (!entry) { netdev_dbg(ieee->dev, "Couldn't invalidate fragment cache entry (seq=%u)\n", seq); @@ -210,7 +210,7 @@ rtllib_rx_frame_mgmt(struct rtllib_device *ieee, struct sk_buff *skb, * this is not mandatory.... but seems that the probe * response parser uses it */ - struct rtllib_hdr_3addr *hdr = (struct rtllib_hdr_3addr *)skb->data; + struct ieee80211_hdr_3addr *hdr = (struct ieee80211_hdr_3addr *)skb->data; rx_stats->len = skb->len; rtllib_rx_mgt(ieee, skb, rx_stats); @@ -233,23 +233,23 @@ static int rtllib_is_eapol_frame(struct rtllib_device *ieee, { struct net_device *dev = ieee->dev; u16 fc, ethertype; - struct rtllib_hdr_4addr *hdr; + struct ieee80211_hdr *hdr; u8 *pos; if (skb->len < 24) return 0; - hdr = (struct rtllib_hdr_4addr *)skb->data; - fc = le16_to_cpu(hdr->frame_ctl); + hdr = (struct ieee80211_hdr *)skb->data; + fc = le16_to_cpu(hdr->frame_control); /* check that the frame is unicast frame to us */ - if ((fc & (RTLLIB_FCTL_TODS | RTLLIB_FCTL_FROMDS)) == - RTLLIB_FCTL_TODS && + if ((fc & (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) == + IEEE80211_FCTL_TODS && memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN) == 0 && memcmp(hdr->addr3, dev->dev_addr, ETH_ALEN) == 0) { /* ToDS frame with own addr BSSID and DA */ - } else if ((fc & (RTLLIB_FCTL_TODS | RTLLIB_FCTL_FROMDS)) == - RTLLIB_FCTL_FROMDS && + } else if ((fc & (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) == + IEEE80211_FCTL_FROMDS && memcmp(hdr->addr1, dev->dev_addr, ETH_ALEN) == 0) { /* FromDS frame with own addr as DA */ } else { @@ -273,10 +273,10 @@ static inline int rtllib_rx_frame_decrypt(struct rtllib_device *ieee, struct sk_buff *skb, struct lib80211_crypt_data *crypt) { - struct rtllib_hdr_4addr *hdr; + struct ieee80211_hdr *hdr; int res, hdrlen; - if (crypt == NULL || crypt->ops->decrypt_mpdu == NULL) + if (!crypt || !crypt->ops->decrypt_mpdu) return 0; if (ieee->hwsec_active) { @@ -289,8 +289,8 @@ rtllib_rx_frame_decrypt(struct rtllib_device *ieee, struct sk_buff *skb, tcb_desc->bHwSec = 0; } - hdr = (struct rtllib_hdr_4addr *)skb->data; - hdrlen = rtllib_get_hdrlen(le16_to_cpu(hdr->frame_ctl)); + hdr = (struct ieee80211_hdr *)skb->data; + hdrlen = rtllib_get_hdrlen(le16_to_cpu(hdr->frame_control)); atomic_inc(&crypt->refcnt); res = crypt->ops->decrypt_mpdu(skb, hdrlen, crypt->priv); @@ -313,10 +313,10 @@ static inline int rtllib_rx_frame_decrypt_msdu(struct rtllib_device *ieee, struct sk_buff *skb, int keyidx, struct lib80211_crypt_data *crypt) { - struct rtllib_hdr_4addr *hdr; + struct ieee80211_hdr *hdr; int res, hdrlen; - if (crypt == NULL || crypt->ops->decrypt_msdu == NULL) + if (!crypt || !crypt->ops->decrypt_msdu) return 0; if (ieee->hwsec_active) { struct cb_desc *tcb_desc = (struct cb_desc *) @@ -328,8 +328,8 @@ rtllib_rx_frame_decrypt_msdu(struct rtllib_device *ieee, struct sk_buff *skb, tcb_desc->bHwSec = 0; } - hdr = (struct rtllib_hdr_4addr *)skb->data; - hdrlen = rtllib_get_hdrlen(le16_to_cpu(hdr->frame_ctl)); + hdr = (struct ieee80211_hdr *)skb->data; + hdrlen = rtllib_get_hdrlen(le16_to_cpu(hdr->frame_control)); atomic_inc(&crypt->refcnt); res = crypt->ops->decrypt_msdu(skb, keyidx, hdrlen, crypt->priv); @@ -347,27 +347,27 @@ rtllib_rx_frame_decrypt_msdu(struct rtllib_device *ieee, struct sk_buff *skb, /* this function is stolen from ipw2200 driver*/ #define IEEE_PACKET_RETRY_TIME (5 * HZ) static int is_duplicate_packet(struct rtllib_device *ieee, - struct rtllib_hdr_4addr *header) + struct ieee80211_hdr *header) { - u16 fc = le16_to_cpu(header->frame_ctl); - u16 sc = le16_to_cpu(header->seq_ctl); + u16 fc = le16_to_cpu(header->frame_control); + u16 sc = le16_to_cpu(header->seq_ctrl); u16 seq = WLAN_GET_SEQ_SEQ(sc); u16 frag = WLAN_GET_SEQ_FRAG(sc); u16 *last_seq, *last_frag; unsigned long *last_time; - struct rtllib_hdr_3addrqos *hdr_3addrqos; - struct rtllib_hdr_4addrqos *hdr_4addrqos; + struct ieee80211_qos_hdr *hdr_3addrqos; + struct ieee80211_qos_hdr_4addr *hdr_4addrqos; u8 tid; - if (((fc & RTLLIB_FCTL_DSTODS) == RTLLIB_FCTL_DSTODS) && + if (ieee80211_has_a4(header->frame_control) && RTLLIB_QOS_HAS_SEQ(fc)) { - hdr_4addrqos = (struct rtllib_hdr_4addrqos *)header; - tid = le16_to_cpu(hdr_4addrqos->qos_ctl) & RTLLIB_QCTL_TID; + hdr_4addrqos = (struct ieee80211_qos_hdr_4addr *)header; + tid = le16_to_cpu(hdr_4addrqos->qos_ctrl) & RTLLIB_QCTL_TID; tid = UP2AC(tid); tid++; } else if (RTLLIB_QOS_HAS_SEQ(fc)) { - hdr_3addrqos = (struct rtllib_hdr_3addrqos *)header; - tid = le16_to_cpu(hdr_3addrqos->qos_ctl) & RTLLIB_QCTL_TID; + hdr_3addrqos = (struct ieee80211_qos_hdr *)header; + tid = le16_to_cpu(hdr_3addrqos->qos_ctrl) & RTLLIB_QCTL_TID; tid = UP2AC(tid); tid++; } else { @@ -375,37 +375,6 @@ static int is_duplicate_packet(struct rtllib_device *ieee, } switch (ieee->iw_mode) { - case IW_MODE_ADHOC: - { - struct list_head *p; - struct ieee_ibss_seq *entry = NULL; - u8 *mac = header->addr2; - int index = mac[5] % IEEE_IBSS_MAC_HASH_SIZE; - - list_for_each(p, &ieee->ibss_mac_hash[index]) { - entry = list_entry(p, struct ieee_ibss_seq, list); - if (!memcmp(entry->mac, mac, ETH_ALEN)) - break; - } - if (p == &ieee->ibss_mac_hash[index]) { - entry = kmalloc(sizeof(struct ieee_ibss_seq), - GFP_ATOMIC); - if (!entry) - return 0; - - ether_addr_copy(entry->mac, mac); - entry->seq_num[tid] = seq; - entry->frag_num[tid] = frag; - entry->packet_time[tid] = jiffies; - list_add(&entry->list, &ieee->ibss_mac_hash[index]); - return 0; - } - last_seq = &entry->seq_num[tid]; - last_frag = &entry->frag_num[tid]; - last_time = &entry->packet_time[tid]; - break; - } - case IW_MODE_INFRA: last_seq = &ieee->last_rxseq_num[tid]; last_frag = &ieee->last_rxfrag_num[tid]; @@ -435,12 +404,12 @@ drop: return 1; } -static bool AddReorderEntry(struct rx_ts_record *pTS, +static bool AddReorderEntry(struct rx_ts_record *ts, struct rx_reorder_entry *pReorderEntry) { - struct list_head *pList = &pTS->rx_pending_pkt_list; + struct list_head *pList = &ts->rx_pending_pkt_list; - while (pList->next != &pTS->rx_pending_pkt_list) { + while (pList->next != &ts->rx_pending_pkt_list) { if (SN_LESS(pReorderEntry->SeqNum, ((struct rx_reorder_entry *) list_entry(pList->next, struct rx_reorder_entry, List))->SeqNum)) @@ -520,13 +489,13 @@ void rtllib_indicate_packets(struct rtllib_device *ieee, } void rtllib_FlushRxTsPendingPkts(struct rtllib_device *ieee, - struct rx_ts_record *pTS) + struct rx_ts_record *ts) { struct rx_reorder_entry *pRxReorderEntry; u8 RfdCnt = 0; - del_timer_sync(&pTS->rx_pkt_pending_timer); - while (!list_empty(&pTS->rx_pending_pkt_list)) { + del_timer_sync(&ts->rx_pkt_pending_timer); + while (!list_empty(&ts->rx_pending_pkt_list)) { if (RfdCnt >= REORDER_WIN_SIZE) { netdev_info(ieee->dev, "-------------->%s() error! RfdCnt >= REORDER_WIN_SIZE\n", @@ -535,7 +504,7 @@ void rtllib_FlushRxTsPendingPkts(struct rtllib_device *ieee, } pRxReorderEntry = (struct rx_reorder_entry *) - list_entry(pTS->rx_pending_pkt_list.prev, + list_entry(ts->rx_pending_pkt_list.prev, struct rx_reorder_entry, List); netdev_dbg(ieee->dev, "%s(): Indicate SeqNum %d!\n", __func__, pRxReorderEntry->SeqNum); @@ -549,12 +518,12 @@ void rtllib_FlushRxTsPendingPkts(struct rtllib_device *ieee, } rtllib_indicate_packets(ieee, ieee->RfdArray, RfdCnt); - pTS->rx_indicate_seq = 0xffff; + ts->rx_indicate_seq = 0xffff; } static void RxReorderIndicatePacket(struct rtllib_device *ieee, struct rtllib_rxb *prxb, - struct rx_ts_record *pTS, u16 SeqNum) + struct rx_ts_record *ts, u16 SeqNum) { struct rt_hi_throughput *ht_info = ieee->ht_info; struct rx_reorder_entry *pReorderEntry = NULL; @@ -565,21 +534,21 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, unsigned long flags; netdev_dbg(ieee->dev, - "%s(): Seq is %d, pTS->rx_indicate_seq is %d, WinSize is %d\n", - __func__, SeqNum, pTS->rx_indicate_seq, WinSize); + "%s(): Seq is %d, ts->rx_indicate_seq is %d, WinSize is %d\n", + __func__, SeqNum, ts->rx_indicate_seq, WinSize); spin_lock_irqsave(&(ieee->reorder_spinlock), flags); - WinEnd = (pTS->rx_indicate_seq + WinSize - 1) % 4096; + WinEnd = (ts->rx_indicate_seq + WinSize - 1) % 4096; /* Rx Reorder initialize condition.*/ - if (pTS->rx_indicate_seq == 0xffff) - pTS->rx_indicate_seq = SeqNum; + if (ts->rx_indicate_seq == 0xffff) + ts->rx_indicate_seq = SeqNum; /* Drop out the packet which SeqNum is smaller than WinStart */ - if (SN_LESS(SeqNum, pTS->rx_indicate_seq)) { + if (SN_LESS(SeqNum, ts->rx_indicate_seq)) { netdev_dbg(ieee->dev, "Packet Drop! IndicateSeq: %d, NewSeq: %d\n", - pTS->rx_indicate_seq, SeqNum); + ts->rx_indicate_seq, SeqNum); ht_info->rx_reorder_drop_counter++; { int i; @@ -597,18 +566,18 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, * 1. Incoming SeqNum is equal to WinStart =>Window shift 1 * 2. Incoming SeqNum is larger than the WinEnd => Window shift N */ - if (SN_EQUAL(SeqNum, pTS->rx_indicate_seq)) { - pTS->rx_indicate_seq = (pTS->rx_indicate_seq + 1) % 4096; + if (SN_EQUAL(SeqNum, ts->rx_indicate_seq)) { + ts->rx_indicate_seq = (ts->rx_indicate_seq + 1) % 4096; bMatchWinStart = true; } else if (SN_LESS(WinEnd, SeqNum)) { if (SeqNum >= (WinSize - 1)) - pTS->rx_indicate_seq = SeqNum + 1 - WinSize; + ts->rx_indicate_seq = SeqNum + 1 - WinSize; else - pTS->rx_indicate_seq = 4095 - + ts->rx_indicate_seq = 4095 - (WinSize - (SeqNum + 1)) + 1; netdev_dbg(ieee->dev, "Window Shift! IndicateSeq: %d, NewSeq: %d\n", - pTS->rx_indicate_seq, SeqNum); + ts->rx_indicate_seq, SeqNum); } /* Indication process. @@ -625,7 +594,7 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, /* Current packet is going to be indicated.*/ netdev_dbg(ieee->dev, "Packets indication! IndicateSeq: %d, NewSeq: %d\n", - pTS->rx_indicate_seq, SeqNum); + ts->rx_indicate_seq, SeqNum); ieee->prxbIndicateArray[0] = prxb; index = 1; } else { @@ -642,12 +611,12 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, pReorderEntry->SeqNum = SeqNum; pReorderEntry->prxb = prxb; - if (!AddReorderEntry(pTS, pReorderEntry)) { + if (!AddReorderEntry(ts, pReorderEntry)) { int i; netdev_dbg(ieee->dev, "%s(): Duplicate packet is dropped. IndicateSeq: %d, NewSeq: %d\n", - __func__, pTS->rx_indicate_seq, + __func__, ts->rx_indicate_seq, SeqNum); list_add_tail(&pReorderEntry->List, &ieee->RxReorder_Unused_List); @@ -659,7 +628,7 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, } else { netdev_dbg(ieee->dev, "Pkt insert into struct buffer. IndicateSeq: %d, NewSeq: %d\n", - pTS->rx_indicate_seq, SeqNum); + ts->rx_indicate_seq, SeqNum); } } else { /* Packets are dropped if there are not enough reorder @@ -682,16 +651,16 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, } /* Check if there is any packet need indicate.*/ - while (!list_empty(&pTS->rx_pending_pkt_list)) { + while (!list_empty(&ts->rx_pending_pkt_list)) { netdev_dbg(ieee->dev, "%s(): start RREORDER indicate\n", __func__); pReorderEntry = (struct rx_reorder_entry *) - list_entry(pTS->rx_pending_pkt_list.prev, + list_entry(ts->rx_pending_pkt_list.prev, struct rx_reorder_entry, List); - if (SN_LESS(pReorderEntry->SeqNum, pTS->rx_indicate_seq) || - SN_EQUAL(pReorderEntry->SeqNum, pTS->rx_indicate_seq)) { + if (SN_LESS(pReorderEntry->SeqNum, ts->rx_indicate_seq) || + SN_EQUAL(pReorderEntry->SeqNum, ts->rx_indicate_seq)) { /* This protect struct buffer from overflow. */ if (index >= REORDER_WIN_SIZE) { netdev_err(ieee->dev, @@ -703,8 +672,8 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, list_del_init(&pReorderEntry->List); - if (SN_EQUAL(pReorderEntry->SeqNum, pTS->rx_indicate_seq)) - pTS->rx_indicate_seq = (pTS->rx_indicate_seq + 1) % + if (SN_EQUAL(pReorderEntry->SeqNum, ts->rx_indicate_seq)) + ts->rx_indicate_seq = (ts->rx_indicate_seq + 1) % 4096; ieee->prxbIndicateArray[index] = pReorderEntry->prxb; @@ -724,9 +693,11 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, * Rx buffering. */ if (index > 0) { - if (timer_pending(&pTS->rx_pkt_pending_timer)) - del_timer_sync(&pTS->rx_pkt_pending_timer); - pTS->rx_timeout_indicate_seq = 0xffff; + spin_unlock_irqrestore(&ieee->reorder_spinlock, flags); + if (timer_pending(&ts->rx_pkt_pending_timer)) + del_timer_sync(&ts->rx_pkt_pending_timer); + spin_lock_irqsave(&ieee->reorder_spinlock, flags); + ts->rx_timeout_indicate_seq = 0xffff; if (index > REORDER_WIN_SIZE) { netdev_err(ieee->dev, @@ -740,11 +711,13 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, bPktInBuf = false; } - if (bPktInBuf && pTS->rx_timeout_indicate_seq == 0xffff) { + if (bPktInBuf && ts->rx_timeout_indicate_seq == 0xffff) { netdev_dbg(ieee->dev, "%s(): SET rx timeout timer\n", __func__); - pTS->rx_timeout_indicate_seq = pTS->rx_indicate_seq; - mod_timer(&pTS->rx_pkt_pending_timer, jiffies + + ts->rx_timeout_indicate_seq = ts->rx_indicate_seq; + spin_unlock_irqrestore(&ieee->reorder_spinlock, flags); + mod_timer(&ts->rx_pkt_pending_timer, jiffies + msecs_to_jiffies(ht_info->rx_reorder_pending_time)); + spin_lock_irqsave(&ieee->reorder_spinlock, flags); } spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags); } @@ -753,10 +726,10 @@ static u8 parse_subframe(struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_stats, struct rtllib_rxb *rxb, u8 *src, u8 *dst) { - struct rtllib_hdr_3addr *hdr = (struct rtllib_hdr_3addr *)skb->data; - u16 fc = le16_to_cpu(hdr->frame_ctl); + struct ieee80211_hdr_3addr *hdr = (struct ieee80211_hdr_3addr *)skb->data; + u16 fc = le16_to_cpu(hdr->frame_control); - u16 LLCOffset = sizeof(struct rtllib_hdr_3addr); + u16 LLCOffset = sizeof(struct ieee80211_hdr_3addr); u16 ChkLength; bool bIsAggregateFrame = false; u16 nSubframe_Length; @@ -764,7 +737,7 @@ static u8 parse_subframe(struct rtllib_device *ieee, struct sk_buff *skb, u16 SeqNum = 0; struct sk_buff *sub_skb; /* just for debug purpose */ - SeqNum = WLAN_GET_SEQ_SEQ(le16_to_cpu(hdr->seq_ctl)); + SeqNum = WLAN_GET_SEQ_SEQ(le16_to_cpu(hdr->seq_ctrl)); if ((RTLLIB_QOS_HAS_SEQ(fc)) && (((union frameqos *)(skb->data + RTLLIB_3ADDR_LEN))->field.reserved)) bIsAggregateFrame = true; @@ -880,8 +853,8 @@ static size_t rtllib_rx_get_hdrlen(struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_stats) { - struct rtllib_hdr_4addr *hdr = (struct rtllib_hdr_4addr *)skb->data; - u16 fc = le16_to_cpu(hdr->frame_ctl); + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; + u16 fc = le16_to_cpu(hdr->frame_control); size_t hdrlen; hdrlen = rtllib_get_hdrlen(fc); @@ -902,35 +875,32 @@ static size_t rtllib_rx_get_hdrlen(struct rtllib_device *ieee, static int rtllib_rx_check_duplicate(struct rtllib_device *ieee, struct sk_buff *skb, u8 multicast) { - struct rtllib_hdr_4addr *hdr = (struct rtllib_hdr_4addr *)skb->data; + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; u16 fc, sc; - u8 frag, type, stype; + u8 frag; - fc = le16_to_cpu(hdr->frame_ctl); - type = WLAN_FC_GET_TYPE(fc); - stype = WLAN_FC_GET_STYPE(fc); - sc = le16_to_cpu(hdr->seq_ctl); + fc = le16_to_cpu(hdr->frame_control); + sc = le16_to_cpu(hdr->seq_ctrl); frag = WLAN_GET_SEQ_FRAG(sc); if (!ieee->ht_info->cur_rx_reorder_enable || !ieee->current_network.qos_data.active || !IsDataFrame(skb->data) || IsLegacyDataFrame(skb->data)) { - if (!((type == RTLLIB_FTYPE_MGMT) && - (stype == RTLLIB_STYPE_BEACON))) { + if (!ieee80211_is_beacon(hdr->frame_control)) { if (is_duplicate_packet(ieee, hdr)) return -1; } } else { - struct rx_ts_record *pRxTS = NULL; + struct rx_ts_record *ts = NULL; - if (GetTs(ieee, (struct ts_common_info **)&pRxTS, hdr->addr2, + if (rtllib_get_ts(ieee, (struct ts_common_info **)&ts, hdr->addr2, (u8)Frame_QoSTID((u8 *)(skb->data)), RX_DIR, true)) { - if ((fc & (1 << 11)) && (frag == pRxTS->rx_last_frag_num) && - (WLAN_GET_SEQ_SEQ(sc) == pRxTS->rx_last_seq_num)) + if ((fc & (1 << 11)) && (frag == ts->rx_last_frag_num) && + (WLAN_GET_SEQ_SEQ(sc) == ts->rx_last_seq_num)) return -1; - pRxTS->rx_last_frag_num = frag; - pRxTS->rx_last_seq_num = WLAN_GET_SEQ_SEQ(sc); + ts->rx_last_frag_num = frag; + ts->rx_last_seq_num = WLAN_GET_SEQ_SEQ(sc); } else { netdev_warn(ieee->dev, "%s(): No TS! Skip the check!\n", __func__); @@ -942,23 +912,23 @@ static int rtllib_rx_check_duplicate(struct rtllib_device *ieee, } static void rtllib_rx_extract_addr(struct rtllib_device *ieee, - struct rtllib_hdr_4addr *hdr, u8 *dst, + struct ieee80211_hdr *hdr, u8 *dst, u8 *src, u8 *bssid) { - u16 fc = le16_to_cpu(hdr->frame_ctl); + u16 fc = le16_to_cpu(hdr->frame_control); - switch (fc & (RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS)) { - case RTLLIB_FCTL_FROMDS: + switch (fc & (IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS)) { + case IEEE80211_FCTL_FROMDS: ether_addr_copy(dst, hdr->addr1); ether_addr_copy(src, hdr->addr3); ether_addr_copy(bssid, hdr->addr2); break; - case RTLLIB_FCTL_TODS: + case IEEE80211_FCTL_TODS: ether_addr_copy(dst, hdr->addr3); ether_addr_copy(src, hdr->addr2); ether_addr_copy(bssid, hdr->addr1); break; - case RTLLIB_FCTL_FROMDS | RTLLIB_FCTL_TODS: + case IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS: ether_addr_copy(dst, hdr->addr3); ether_addr_copy(src, hdr->addr4); ether_addr_copy(bssid, ieee->current_network.bssid); @@ -971,46 +941,34 @@ static void rtllib_rx_extract_addr(struct rtllib_device *ieee, } } -static int rtllib_rx_data_filter(struct rtllib_device *ieee, u16 fc, +static int rtllib_rx_data_filter(struct rtllib_device *ieee, struct ieee80211_hdr *hdr, u8 *dst, u8 *src, u8 *bssid, u8 *addr2) { u8 type, stype; - + u16 fc = le16_to_cpu(hdr->frame_control); type = WLAN_FC_GET_TYPE(fc); stype = WLAN_FC_GET_STYPE(fc); /* Filter frames from different BSS */ - if (((fc & RTLLIB_FCTL_DSTODS) != RTLLIB_FCTL_DSTODS) && + if (ieee80211_has_a4(hdr->frame_control) && !ether_addr_equal(ieee->current_network.bssid, bssid) && !is_zero_ether_addr(ieee->current_network.bssid)) { return -1; } - /* Filter packets sent by an STA that will be forwarded by AP */ - if (ieee->intel_promiscuous_md_info.promiscuous_on && - ieee->intel_promiscuous_md_info.fltr_src_sta_frame) { - if ((fc & RTLLIB_FCTL_TODS) && !(fc & RTLLIB_FCTL_FROMDS) && - !ether_addr_equal(dst, ieee->current_network.bssid) && - ether_addr_equal(bssid, ieee->current_network.bssid)) { - return -1; - } - } - /* Nullfunc frames may have PS-bit set, so they must be passed to * hostap_handle_sta_rx() before being dropped here. */ - if (!ieee->intel_promiscuous_md_info.promiscuous_on) { - if (stype != RTLLIB_STYPE_DATA && - stype != RTLLIB_STYPE_DATA_CFACK && - stype != RTLLIB_STYPE_DATA_CFPOLL && - stype != RTLLIB_STYPE_DATA_CFACKPOLL && - stype != RTLLIB_STYPE_QOS_DATA) { - if (stype != RTLLIB_STYPE_NULLFUNC) - netdev_dbg(ieee->dev, - "RX: dropped data frame with no data (type=0x%02x, subtype=0x%02x)\n", - type, stype); - return -1; - } + if (stype != IEEE80211_STYPE_DATA && + stype != IEEE80211_STYPE_DATA_CFACK && + stype != IEEE80211_STYPE_DATA_CFPOLL && + stype != IEEE80211_STYPE_DATA_CFACKPOLL && + stype != IEEE80211_STYPE_QOS_DATA) { + if (stype != IEEE80211_STYPE_NULLFUNC) + netdev_dbg(ieee->dev, + "RX: dropped data frame with no data (type=0x%02x, subtype=0x%02x)\n", + type, stype); + return -1; } /* packets from our adapter are dropped (echo) */ @@ -1029,8 +987,8 @@ static int rtllib_rx_data_filter(struct rtllib_device *ieee, u16 fc, static int rtllib_rx_get_crypt(struct rtllib_device *ieee, struct sk_buff *skb, struct lib80211_crypt_data **crypt, size_t hdrlen) { - struct rtllib_hdr_4addr *hdr = (struct rtllib_hdr_4addr *)skb->data; - u16 fc = le16_to_cpu(hdr->frame_ctl); + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; + u16 fc = le16_to_cpu(hdr->frame_control); int idx = 0; if (skb->len >= hdrlen + 3) @@ -1040,11 +998,10 @@ static int rtllib_rx_get_crypt(struct rtllib_device *ieee, struct sk_buff *skb, /* allow NULL decrypt to indicate an station specific override * for default encryption */ - if (*crypt && ((*crypt)->ops == NULL || - (*crypt)->ops->decrypt_mpdu == NULL)) + if (*crypt && (!(*crypt)->ops || !(*crypt)->ops->decrypt_mpdu)) *crypt = NULL; - if (!*crypt && (fc & RTLLIB_FCTL_WEP)) { + if (!*crypt && (fc & IEEE80211_FCTL_PROTECTED)) { /* This seems to be triggered by some (multicast?) * frames from other than current BSS, so just drop the * frames silently instead of filling system log with @@ -1063,14 +1020,14 @@ static int rtllib_rx_decrypt(struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_stats, struct lib80211_crypt_data *crypt, size_t hdrlen) { - struct rtllib_hdr_4addr *hdr; + struct ieee80211_hdr *hdr; int keyidx = 0; u16 fc, sc; u8 frag; - hdr = (struct rtllib_hdr_4addr *)skb->data; - fc = le16_to_cpu(hdr->frame_ctl); - sc = le16_to_cpu(hdr->seq_ctl); + hdr = (struct ieee80211_hdr *)skb->data; + fc = le16_to_cpu(hdr->frame_control); + sc = le16_to_cpu(hdr->seq_ctrl); frag = WLAN_GET_SEQ_FRAG(sc); if ((!rx_stats->Decrypted)) @@ -1079,13 +1036,13 @@ static int rtllib_rx_decrypt(struct rtllib_device *ieee, struct sk_buff *skb, ieee->need_sw_enc = 0; keyidx = rtllib_rx_frame_decrypt(ieee, skb, crypt); - if ((fc & RTLLIB_FCTL_WEP) && (keyidx < 0)) { + if ((fc & IEEE80211_FCTL_PROTECTED) && (keyidx < 0)) { netdev_info(ieee->dev, "%s: decrypt frame error\n", __func__); return -1; } - hdr = (struct rtllib_hdr_4addr *)skb->data; - if ((frag != 0 || (fc & RTLLIB_FCTL_MOREFRAGS))) { + hdr = (struct ieee80211_hdr *)skb->data; + if ((frag != 0 || (fc & IEEE80211_FCTL_MOREFRAGS))) { int flen; struct sk_buff *frag_skb = rtllib_frag_cache_get(ieee, hdr); @@ -1094,7 +1051,7 @@ static int rtllib_rx_decrypt(struct rtllib_device *ieee, struct sk_buff *skb, if (!frag_skb) { netdev_dbg(ieee->dev, "Rx cannot get skb from fragment cache (morefrag=%d seq=%u frag=%u)\n", - (fc & RTLLIB_FCTL_MOREFRAGS) != 0, + (fc & IEEE80211_FCTL_MOREFRAGS) != 0, WLAN_GET_SEQ_SEQ(sc), frag); return -1; } @@ -1124,7 +1081,7 @@ static int rtllib_rx_decrypt(struct rtllib_device *ieee, struct sk_buff *skb, dev_kfree_skb_any(skb); skb = NULL; - if (fc & RTLLIB_FCTL_MOREFRAGS) { + if (fc & IEEE80211_FCTL_MOREFRAGS) { /* more fragments expected - leave the skb in fragment * cache for now; it will be delivered to upper layers * after all fragments have been received @@ -1136,21 +1093,21 @@ static int rtllib_rx_decrypt(struct rtllib_device *ieee, struct sk_buff *skb, * delivered, so remove skb from fragment cache */ skb = frag_skb; - hdr = (struct rtllib_hdr_4addr *)skb->data; + hdr = (struct ieee80211_hdr *)skb->data; rtllib_frag_cache_invalidate(ieee, hdr); } /* skb: hdr + (possible reassembled) full MSDU payload; possibly still * encrypted/authenticated */ - if ((fc & RTLLIB_FCTL_WEP) && + if ((fc & IEEE80211_FCTL_PROTECTED) && rtllib_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt)) { netdev_info(ieee->dev, "%s: ==>decrypt msdu error\n", __func__); return -1; } - hdr = (struct rtllib_hdr_4addr *)skb->data; - if (crypt && !(fc & RTLLIB_FCTL_WEP) && !ieee->open_wep) { + hdr = (struct ieee80211_hdr *)skb->data; + if (crypt && !(fc & IEEE80211_FCTL_PROTECTED) && !ieee->open_wep) { if (/*ieee->ieee802_1x &&*/ rtllib_is_eapol_frame(ieee, skb, hdrlen)) { /* pass unencrypted EAPOL frames even if encryption is @@ -1169,7 +1126,7 @@ static int rtllib_rx_decrypt(struct rtllib_device *ieee, struct sk_buff *skb, } } - if (crypt && !(fc & RTLLIB_FCTL_WEP) && + if (crypt && !(fc & IEEE80211_FCTL_PROTECTED) && rtllib_is_eapol_frame(ieee, skb, hdrlen)) { struct eapol *eap = (struct eapol *)(skb->data + 24); @@ -1177,7 +1134,7 @@ static int rtllib_rx_decrypt(struct rtllib_device *ieee, struct sk_buff *skb, eap_get_type(eap->type)); } - if (crypt && !(fc & RTLLIB_FCTL_WEP) && !ieee->open_wep && + if (crypt && !(fc & IEEE80211_FCTL_PROTECTED) && !ieee->open_wep && !rtllib_is_eapol_frame(ieee, skb, hdrlen)) { netdev_dbg(ieee->dev, "dropped unencrypted RX data frame from %pM (drop_unencrypted=1)\n", @@ -1213,7 +1170,7 @@ static void rtllib_rx_indicate_pkt_legacy(struct rtllib_device *ieee, u16 ethertype; int i = 0; - if (rxb == NULL) { + if (!rxb) { netdev_info(dev, "%s: rxb is NULL!!\n", __func__); return; } @@ -1275,10 +1232,10 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_stats) { struct net_device *dev = ieee->dev; - struct rtllib_hdr_4addr *hdr = (struct rtllib_hdr_4addr *)skb->data; + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; struct lib80211_crypt_data *crypt = NULL; struct rtllib_rxb *rxb = NULL; - struct rx_ts_record *pTS = NULL; + struct rx_ts_record *ts = NULL; u16 fc, sc, SeqNum = 0; u8 type, stype, multicast = 0, unicast = 0, nr_subframes = 0, TID = 0; u8 dst[ETH_ALEN]; @@ -1286,23 +1243,18 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb, u8 bssid[ETH_ALEN] = {0}; size_t hdrlen = 0; - bool bToOtherSTA = false; int ret = 0, i = 0; - fc = le16_to_cpu(hdr->frame_ctl); + fc = le16_to_cpu(hdr->frame_control); type = WLAN_FC_GET_TYPE(fc); stype = WLAN_FC_GET_STYPE(fc); - sc = le16_to_cpu(hdr->seq_ctl); + sc = le16_to_cpu(hdr->seq_ctrl); /*Filter pkt not to me*/ multicast = is_multicast_ether_addr(hdr->addr1); unicast = !multicast; - if (unicast && !ether_addr_equal(dev->dev_addr, hdr->addr1)) { - if (ieee->net_promiscuous_md) - bToOtherSTA = true; - else - goto rx_dropped; - } + if (unicast && !ether_addr_equal(dev->dev_addr, hdr->addr1)) + goto rx_dropped; /*Filter pkt has too small length */ hdrlen = rtllib_rx_get_hdrlen(ieee, skb, rx_stats); @@ -1324,8 +1276,6 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb, /* Filter MGNT Frame */ if (type == RTLLIB_FTYPE_MGMT) { - if (bToOtherSTA) - goto rx_dropped; if (rtllib_rx_frame_mgmt(ieee, skb, rx_stats, type, stype)) goto rx_dropped; else @@ -1335,16 +1285,14 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb, /* Filter WAPI DATA Frame */ /* Update statstics for AP roaming */ - if (!bToOtherSTA) { - ieee->link_detect_info.NumRecvDataInPeriod++; - ieee->link_detect_info.NumRxOkInPeriod++; - } + ieee->link_detect_info.NumRecvDataInPeriod++; + ieee->link_detect_info.NumRxOkInPeriod++; /* Data frame - extract src/dst addresses */ rtllib_rx_extract_addr(ieee, hdr, dst, src, bssid); /* Filter Data frames */ - ret = rtllib_rx_data_filter(ieee, fc, dst, src, bssid, hdr->addr2); + ret = rtllib_rx_data_filter(ieee, hdr, dst, src, bssid, hdr->addr2); if (ret < 0) goto rx_dropped; @@ -1354,7 +1302,7 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb, /* Send pspoll based on moredata */ if ((ieee->iw_mode == IW_MODE_INFRA) && (ieee->sta_sleep == LPS_IS_SLEEP) && - (ieee->polling) && (!bToOtherSTA)) { + (ieee->polling)) { if (WLAN_FC_MORE_DATA(fc)) { /* more data bit is set, let's request a new frame * from the AP @@ -1378,13 +1326,12 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb, goto rx_exit; /* Get TS for Rx Reorder */ - hdr = (struct rtllib_hdr_4addr *)skb->data; + hdr = (struct ieee80211_hdr *)skb->data; if (ieee->current_network.qos_data.active && IsQoSDataFrame(skb->data) - && !is_multicast_ether_addr(hdr->addr1) - && (!bToOtherSTA)) { + && !is_multicast_ether_addr(hdr->addr1)) { TID = Frame_QoSTID(skb->data); SeqNum = WLAN_GET_SEQ_SEQ(sc); - GetTs(ieee, (struct ts_common_info **)&pTS, hdr->addr2, TID, + rtllib_get_ts(ieee, (struct ts_common_info **)&ts, hdr->addr2, TID, RX_DIR, true); if (TID != 0 && TID != 3) ieee->bis_any_nonbepkts = true; @@ -1412,21 +1359,19 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb, /* Update WAPI PN */ /* Check if leave LPS */ - if (!bToOtherSTA) { - if (ieee->bIsAggregateFrame) - nr_subframes = rxb->nr_subframes; - else - nr_subframes = 1; - if (unicast) - ieee->link_detect_info.NumRxUnicastOkInPeriod += nr_subframes; - rtllib_rx_check_leave_lps(ieee, unicast, nr_subframes); - } + if (ieee->bIsAggregateFrame) + nr_subframes = rxb->nr_subframes; + else + nr_subframes = 1; + if (unicast) + ieee->link_detect_info.NumRxUnicastOkInPeriod += nr_subframes; + rtllib_rx_check_leave_lps(ieee, unicast, nr_subframes); /* Indicate packets to upper layer or Rx Reorder */ - if (!ieee->ht_info->cur_rx_reorder_enable || pTS == NULL || bToOtherSTA) + if (!ieee->ht_info->cur_rx_reorder_enable || !ts) rtllib_rx_indicate_pkt_legacy(ieee, rx_stats, rxb, dst, src); else - RxReorderIndicatePacket(ieee, rxb, pTS, SeqNum); + RxReorderIndicatePacket(ieee, rxb, ts, SeqNum); dev_kfree_skb(skb); @@ -1446,8 +1391,8 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb, static int rtllib_rx_Monitor(struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *rx_stats) { - struct rtllib_hdr_4addr *hdr = (struct rtllib_hdr_4addr *)skb->data; - u16 fc = le16_to_cpu(hdr->frame_ctl); + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; + u16 fc = le16_to_cpu(hdr->frame_control); size_t hdrlen = rtllib_get_hdrlen(fc); if (skb->len < hdrlen) { @@ -1490,7 +1435,6 @@ int rtllib_rx(struct rtllib_device *ieee, struct sk_buff *skb, } switch (ieee->iw_mode) { - case IW_MODE_ADHOC: case IW_MODE_INFRA: ret = rtllib_rx_InfraAdhoc(ieee, skb, rx_stats); break; @@ -2448,11 +2392,6 @@ static inline void update_network(struct rtllib_device *ieee, dst->BssCcxVerNumber = src->BssCcxVerNumber; } -static inline int is_beacon(u16 fc) -{ - return (WLAN_FC_GET_STYPE(fc) == RTLLIB_STYPE_BEACON); -} - static int IsPassiveChannel(struct rtllib_device *rtllib, u8 channel) { if (channel > MAX_CHANNEL_NUMBER) { @@ -2491,7 +2430,7 @@ static inline void rtllib_process_probe_response( short renew; struct rtllib_network *network = kzalloc(sizeof(struct rtllib_network), GFP_ATOMIC); - u16 frame_ctl = le16_to_cpu(beacon->header.frame_ctl); + __le16 frame_ctl = beacon->header.frame_control; if (!network) return; @@ -2521,14 +2460,14 @@ static inline void rtllib_process_probe_response( netdev_dbg(ieee->dev, "Dropped '%s' ( %pM) via %s.\n", escape_essid(info_element->data, info_element->len), beacon->header.addr3, - is_beacon(frame_ctl) ? "BEACON" : "PROBE RESPONSE"); + ieee80211_is_beacon(frame_ctl) ? "BEACON" : "PROBE RESPONSE"); goto free_network; } if (!rtllib_legal_channel(ieee, network->channel)) goto free_network; - if (WLAN_FC_GET_STYPE(frame_ctl) == RTLLIB_STYPE_PROBE_RESP) { + if (ieee80211_is_probe_resp(frame_ctl)) { if (IsPassiveChannel(ieee, network->channel)) { netdev_info(ieee->dev, "GetScanInfo(): For Global Domain, filter probe response at channel(%d).\n", @@ -2561,7 +2500,7 @@ static inline void rtllib_process_probe_response( else ieee->current_network.buseprotection = false; } - if (is_beacon(frame_ctl)) { + if (ieee80211_is_beacon(frame_ctl)) { if (ieee->link_state >= MAC80211_LINKED) ieee->link_detect_info.NumRecvBcnInPeriod++; } @@ -2570,8 +2509,7 @@ static inline void rtllib_process_probe_response( if (is_same_network(target, network, (target->ssid_len ? 1 : 0))) break; - if ((oldest == NULL) || - (target->last_scanned < oldest->last_scanned)) + if (!oldest || (target->last_scanned < oldest->last_scanned)) oldest = target; } @@ -2597,7 +2535,7 @@ static inline void rtllib_process_probe_response( netdev_dbg(ieee->dev, "Adding '%s' ( %pM) via %s.\n", escape_essid(network->ssid, network->ssid_len), network->bssid, - is_beacon(frame_ctl) ? "BEACON" : "PROBE RESPONSE"); + ieee80211_is_beacon(frame_ctl) ? "BEACON" : "PROBE RESPONSE"); memcpy(target, network, sizeof(*target)); list_add_tail(&target->list, &ieee->network_list); @@ -2607,7 +2545,7 @@ static inline void rtllib_process_probe_response( netdev_dbg(ieee->dev, "Updating '%s' ( %pM) via %s.\n", escape_essid(target->ssid, target->ssid_len), target->bssid, - is_beacon(frame_ctl) ? "BEACON" : "PROBE RESPONSE"); + ieee80211_is_beacon(frame_ctl) ? "BEACON" : "PROBE RESPONSE"); /* we have an entry and we are going to update it. But this * entry may be already expired. In this case we do the same @@ -2628,7 +2566,7 @@ static inline void rtllib_process_probe_response( } spin_unlock_irqrestore(&ieee->lock, flags); - if (is_beacon(frame_ctl) && + if (ieee80211_is_beacon(frame_ctl) && is_same_network(&ieee->current_network, network, (network->ssid_len ? 1 : 0)) && (ieee->link_state == MAC80211_LINKED)) { @@ -2642,18 +2580,14 @@ static void rtllib_rx_mgt(struct rtllib_device *ieee, struct sk_buff *skb, struct rtllib_rx_stats *stats) { - struct rtllib_hdr_4addr *header = (struct rtllib_hdr_4addr *)skb->data; + struct ieee80211_hdr *header = (struct ieee80211_hdr *)skb->data; - if ((WLAN_FC_GET_STYPE(le16_to_cpu(header->frame_ctl)) != - RTLLIB_STYPE_PROBE_RESP) && - (WLAN_FC_GET_STYPE(le16_to_cpu(header->frame_ctl)) != - RTLLIB_STYPE_BEACON)) + if (!ieee80211_is_probe_resp(header->frame_control) && + (!ieee80211_is_beacon(header->frame_control))) ieee->last_rx_ps_time = jiffies; - switch (WLAN_FC_GET_STYPE(le16_to_cpu(header->frame_ctl))) { - case RTLLIB_STYPE_BEACON: - netdev_dbg(ieee->dev, "received BEACON (%d)\n", - WLAN_FC_GET_STYPE(le16_to_cpu(header->frame_ctl))); + if (ieee80211_is_beacon(header->frame_control)) { + netdev_dbg(ieee->dev, "received BEACON\n"); rtllib_process_probe_response( ieee, (struct rtllib_probe_response *)header, stats); @@ -2662,22 +2596,9 @@ static void rtllib_rx_mgt(struct rtllib_device *ieee, ieee->iw_mode == IW_MODE_INFRA && ieee->link_state == MAC80211_LINKED)) schedule_work(&ieee->ps_task); - - break; - - case RTLLIB_STYPE_PROBE_RESP: - netdev_dbg(ieee->dev, "received PROBE RESPONSE (%d)\n", - WLAN_FC_GET_STYPE(le16_to_cpu(header->frame_ctl))); + } else if (ieee80211_is_probe_resp(header->frame_control)) { + netdev_dbg(ieee->dev, "received PROBE RESPONSE\n"); rtllib_process_probe_response(ieee, (struct rtllib_probe_response *)header, stats); - break; - case RTLLIB_STYPE_PROBE_REQ: - netdev_dbg(ieee->dev, "received PROBE REQUEST (%d)\n", - WLAN_FC_GET_STYPE(le16_to_cpu(header->frame_ctl))); - if ((ieee->softmac_features & IEEE_SOFTMAC_PROBERS) && - (ieee->iw_mode == IW_MODE_ADHOC && - ieee->link_state == MAC80211_LINKED)) - rtllib_rx_probe_rq(ieee, skb); - break; } } diff --git a/drivers/staging/rtl8192e/rtllib_softmac.c b/drivers/staging/rtl8192e/rtllib_softmac.c index de17024911..42d652fe86 100644 --- a/drivers/staging/rtl8192e/rtllib_softmac.c +++ b/drivers/staging/rtl8192e/rtllib_softmac.c @@ -187,8 +187,8 @@ inline void softmac_mgmt_xmit(struct sk_buff *skb, struct rtllib_device *ieee) { unsigned long flags; short single = ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE; - struct rtllib_hdr_3addr *header = - (struct rtllib_hdr_3addr *)skb->data; + struct ieee80211_hdr_3addr *header = + (struct ieee80211_hdr_3addr *)skb->data; struct cb_desc *tcb_desc = (struct cb_desc *)(skb->cb + 8); @@ -197,7 +197,7 @@ inline void softmac_mgmt_xmit(struct sk_buff *skb, struct rtllib_device *ieee) /* called with 2nd param 0, no mgmt lock required */ rtllib_sta_wakeup(ieee, 0); - if (le16_to_cpu(header->frame_ctl) == RTLLIB_STYPE_BEACON) + if (ieee80211_is_beacon(header->frame_control)) tcb_desc->queue_index = BEACON_QUEUE; else tcb_desc->queue_index = MGNT_QUEUE; @@ -213,7 +213,7 @@ inline void softmac_mgmt_xmit(struct sk_buff *skb, struct rtllib_device *ieee) if (ieee->queue_stop) { enqueue_mgmt(ieee, skb); } else { - header->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4); + header->seq_ctrl = cpu_to_le16(ieee->seq_ctrl[0] << 4); if (ieee->seq_ctrl[0] == 0xFFF) ieee->seq_ctrl[0] = 0; @@ -230,7 +230,7 @@ inline void softmac_mgmt_xmit(struct sk_buff *skb, struct rtllib_device *ieee) spin_unlock_irqrestore(&ieee->lock, flags); spin_lock_irqsave(&ieee->mgmt_tx_lock, flags); - header->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4); + header->seq_ctrl = cpu_to_le16(ieee->seq_ctrl[0] << 4); if (ieee->seq_ctrl[0] == 0xFFF) ieee->seq_ctrl[0] = 0; @@ -264,16 +264,16 @@ softmac_ps_mgmt_xmit(struct sk_buff *skb, struct rtllib_device *ieee) { short single = ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE; - struct rtllib_hdr_3addr *header = - (struct rtllib_hdr_3addr *)skb->data; + struct ieee80211_hdr_3addr *header = + (struct ieee80211_hdr_3addr *)skb->data; u16 fc, type, stype; struct cb_desc *tcb_desc = (struct cb_desc *)(skb->cb + 8); - fc = le16_to_cpu(header->frame_ctl); + fc = le16_to_cpu(header->frame_control); type = WLAN_FC_GET_TYPE(fc); stype = WLAN_FC_GET_STYPE(fc); - if (stype != RTLLIB_STYPE_PSPOLL) + if (stype != IEEE80211_STYPE_PSPOLL) tcb_desc->queue_index = MGNT_QUEUE; else tcb_desc->queue_index = HIGH_QUEUE; @@ -287,7 +287,7 @@ softmac_ps_mgmt_xmit(struct sk_buff *skb, tcb_desc->tx_use_drv_assinged_rate = 1; if (single) { if (type != RTLLIB_FTYPE_CTL) { - header->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4); + header->seq_ctrl = cpu_to_le16(ieee->seq_ctrl[0] << 4); if (ieee->seq_ctrl[0] == 0xFFF) ieee->seq_ctrl[0] = 0; @@ -300,7 +300,7 @@ softmac_ps_mgmt_xmit(struct sk_buff *skb, } else { if (type != RTLLIB_FTYPE_CTL) { - header->seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4); + header->seq_ctrl = cpu_to_le16(ieee->seq_ctrl[0] << 4); if (ieee->seq_ctrl[0] == 0xFFF) ieee->seq_ctrl[0] = 0; @@ -331,7 +331,7 @@ static inline struct sk_buff *rtllib_probe_req(struct rtllib_device *ieee) skb_reserve(skb, ieee->tx_headroom); req = skb_put(skb, sizeof(struct rtllib_probe_request)); - req->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_PROBE_REQ); + req->header.frame_control = cpu_to_le16(IEEE80211_STYPE_PROBE_REQ); req->header.duration_id = 0; eth_broadcast_addr(req->header.addr1); @@ -406,49 +406,6 @@ void rtllib_DisableNetMonitorMode(struct net_device *dev, ieee->AllowAllDestAddrHandler(dev, false, !bInitState); } -/* Enables the specialized promiscuous mode required by Intel. - * In this mode, Intel intends to hear traffics from/to other STAs in the - * same BSS. Therefore we don't have to disable checking BSSID and we only need - * to allow all dest. BUT: if we enable checking BSSID then we can't recv - * packets from other STA. - */ -void rtllib_EnableIntelPromiscuousMode(struct net_device *dev, - bool bInitState) -{ - bool bFilterOutNonAssociatedBSSID = false; - - struct rtllib_device *ieee = netdev_priv_rsl(dev); - - netdev_info(dev, "========>Enter Intel Promiscuous Mode\n"); - - ieee->AllowAllDestAddrHandler(dev, true, !bInitState); - ieee->SetHwRegHandler(dev, HW_VAR_CECHK_BSSID, - (u8 *)&bFilterOutNonAssociatedBSSID); - - ieee->net_promiscuous_md = true; -} -EXPORT_SYMBOL(rtllib_EnableIntelPromiscuousMode); - -/* Disables the specialized promiscuous mode required by Intel. - * See MgntEnableIntelPromiscuousMode for detail. - */ -void rtllib_DisableIntelPromiscuousMode(struct net_device *dev, - bool bInitState) -{ - bool bFilterOutNonAssociatedBSSID = true; - - struct rtllib_device *ieee = netdev_priv_rsl(dev); - - netdev_info(dev, "========>Exit Intel Promiscuous Mode\n"); - - ieee->AllowAllDestAddrHandler(dev, false, !bInitState); - ieee->SetHwRegHandler(dev, HW_VAR_CECHK_BSSID, - (u8 *)&bFilterOutNonAssociatedBSSID); - - ieee->net_promiscuous_md = false; -} -EXPORT_SYMBOL(rtllib_DisableIntelPromiscuousMode); - static void rtllib_send_probe(struct rtllib_device *ieee) { struct sk_buff *skb; @@ -462,8 +419,7 @@ static void rtllib_send_probe(struct rtllib_device *ieee) static void rtllib_send_probe_requests(struct rtllib_device *ieee) { - if (ieee->active_scan && (ieee->softmac_features & - IEEE_SOFTMAC_PROBERQ)) { + if (ieee->softmac_features & IEEE_SOFTMAC_PROBERQ) { rtllib_send_probe(ieee); rtllib_send_probe(ieee); } @@ -607,46 +563,6 @@ out1: mutex_unlock(&ieee->scan_mutex); } -static void rtllib_beacons_start(struct rtllib_device *ieee) -{ - unsigned long flags; - - spin_lock_irqsave(&ieee->beacon_lock, flags); - - ieee->beacon_txing = 1; - rtllib_send_beacon(ieee); - - spin_unlock_irqrestore(&ieee->beacon_lock, flags); -} - -static void rtllib_beacons_stop(struct rtllib_device *ieee) -{ - unsigned long flags; - - spin_lock_irqsave(&ieee->beacon_lock, flags); - - ieee->beacon_txing = 0; - - spin_unlock_irqrestore(&ieee->beacon_lock, flags); - del_timer_sync(&ieee->beacon_timer); -} - -void rtllib_stop_send_beacons(struct rtllib_device *ieee) -{ - ieee->stop_send_beacons(ieee->dev); - if (ieee->softmac_features & IEEE_SOFTMAC_BEACONS) - rtllib_beacons_stop(ieee); -} -EXPORT_SYMBOL(rtllib_stop_send_beacons); - -void rtllib_start_send_beacons(struct rtllib_device *ieee) -{ - ieee->start_send_beacons(ieee->dev); - if (ieee->softmac_features & IEEE_SOFTMAC_BEACONS) - rtllib_beacons_start(ieee); -} -EXPORT_SYMBOL(rtllib_start_send_beacons); - static void rtllib_softmac_stop_scan(struct rtllib_device *ieee) { mutex_lock(&ieee->scan_mutex); @@ -739,9 +655,9 @@ rtllib_authentication_req(struct rtllib_network *beacon, auth = skb_put(skb, sizeof(struct rtllib_authentication)); - auth->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_AUTH); + auth->header.frame_control = cpu_to_le16(IEEE80211_STYPE_AUTH); if (challengelen) - auth->header.frame_ctl |= cpu_to_le16(RTLLIB_FCTL_WEP); + auth->header.frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); auth->header.duration_id = cpu_to_le16(0x013a); ether_addr_copy(auth->header.addr1, beacon->bssid); @@ -809,7 +725,7 @@ static struct sk_buff *rtllib_probe_resp(struct rtllib_device *ieee, crypt = ieee->crypt_info.crypt[ieee->crypt_info.tx_keyidx]; encrypt = crypt && crypt->ops && ((strcmp(crypt->ops->name, "R-WEP") == 0 || wpa_ie_len)); - if (ieee->ht_info->bCurrentHTSupport) { + if (ieee->ht_info->current_ht_support) { tmp_ht_cap_buf = (u8 *)&(ieee->ht_info->SelfHTCap); tmp_ht_cap_len = sizeof(ieee->ht_info->SelfHTCap); tmp_ht_info_buf = (u8 *)&(ieee->ht_info->SelfHTInfo); @@ -860,7 +776,7 @@ static struct sk_buff *rtllib_probe_resp(struct rtllib_device *ieee, if (encrypt) beacon_buf->capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY); - beacon_buf->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_PROBE_RESP); + beacon_buf->header.frame_control = cpu_to_le16(IEEE80211_STYPE_PROBE_RESP); beacon_buf->info_element[0].id = MFIE_TYPE_SSID; beacon_buf->info_element[0].len = ssid_len; @@ -901,8 +817,6 @@ static struct sk_buff *rtllib_probe_resp(struct rtllib_device *ieee, } if (wpa_ie_len) { - if (ieee->iw_mode == IW_MODE_ADHOC) - memcpy(&ieee->wpa_ie[14], &ieee->wpa_ie[8], 4); memcpy(tag, ieee->wpa_ie, ieee->wpa_ie_len); tag += ieee->wpa_ie_len; } @@ -912,23 +826,23 @@ static struct sk_buff *rtllib_probe_resp(struct rtllib_device *ieee, static struct sk_buff *rtllib_null_func(struct rtllib_device *ieee, short pwr) { struct sk_buff *skb; - struct rtllib_hdr_3addr *hdr; + struct ieee80211_hdr_3addr *hdr; - skb = dev_alloc_skb(sizeof(struct rtllib_hdr_3addr) + ieee->tx_headroom); + skb = dev_alloc_skb(sizeof(struct ieee80211_hdr_3addr) + ieee->tx_headroom); if (!skb) return NULL; skb_reserve(skb, ieee->tx_headroom); - hdr = skb_put(skb, sizeof(struct rtllib_hdr_3addr)); + hdr = skb_put(skb, sizeof(struct ieee80211_hdr_3addr)); ether_addr_copy(hdr->addr1, ieee->current_network.bssid); ether_addr_copy(hdr->addr2, ieee->dev->dev_addr); ether_addr_copy(hdr->addr3, ieee->current_network.bssid); - hdr->frame_ctl = cpu_to_le16(RTLLIB_FTYPE_DATA | - RTLLIB_STYPE_NULLFUNC | RTLLIB_FCTL_TODS | - (pwr ? RTLLIB_FCTL_PM : 0)); + hdr->frame_control = cpu_to_le16(RTLLIB_FTYPE_DATA | + IEEE80211_STYPE_NULLFUNC | IEEE80211_FCTL_TODS | + (pwr ? IEEE80211_FCTL_PM : 0)); return skb; } @@ -936,34 +850,26 @@ static struct sk_buff *rtllib_null_func(struct rtllib_device *ieee, short pwr) static struct sk_buff *rtllib_pspoll_func(struct rtllib_device *ieee) { struct sk_buff *skb; - struct rtllib_pspoll_hdr *hdr; + struct ieee80211_pspoll *hdr; - skb = dev_alloc_skb(sizeof(struct rtllib_pspoll_hdr) + ieee->tx_headroom); + skb = dev_alloc_skb(sizeof(struct ieee80211_pspoll) + ieee->tx_headroom); if (!skb) return NULL; skb_reserve(skb, ieee->tx_headroom); - hdr = skb_put(skb, sizeof(struct rtllib_pspoll_hdr)); + hdr = skb_put(skb, sizeof(struct ieee80211_pspoll)); ether_addr_copy(hdr->bssid, ieee->current_network.bssid); ether_addr_copy(hdr->ta, ieee->dev->dev_addr); hdr->aid = cpu_to_le16(ieee->assoc_id | 0xc000); - hdr->frame_ctl = cpu_to_le16(RTLLIB_FTYPE_CTL | RTLLIB_STYPE_PSPOLL | - RTLLIB_FCTL_PM); + hdr->frame_control = cpu_to_le16(RTLLIB_FTYPE_CTL | IEEE80211_STYPE_PSPOLL | + IEEE80211_FCTL_PM); return skb; } -static void rtllib_resp_to_probe(struct rtllib_device *ieee, u8 *dest) -{ - struct sk_buff *buf = rtllib_probe_resp(ieee, dest); - - if (buf) - softmac_mgmt_xmit(buf, ieee); -} - static inline int SecIsInPMKIDList(struct rtllib_device *ieee, u8 *bssid) { int i = 0; @@ -1012,7 +918,7 @@ rtllib_association_req(struct rtllib_network *beacon, int len = 0; crypt = ieee->crypt_info.crypt[ieee->crypt_info.tx_keyidx]; - if (crypt != NULL) + if (crypt) encrypt = crypt && crypt->ops && ((strcmp(crypt->ops->name, "R-WEP") == 0 || wpa_ie_len)); @@ -1026,7 +932,7 @@ rtllib_association_req(struct rtllib_network *beacon, ieee->mode = WIRELESS_MODE_G; } - if (ieee->ht_info->bCurrentHTSupport && ieee->ht_info->enable_ht) { + if (ieee->ht_info->current_ht_support && ieee->ht_info->enable_ht) { ht_cap_buf = (u8 *)&(ieee->ht_info->SelfHTCap); ht_cap_len = sizeof(ieee->ht_info->SelfHTCap); HTConstructCapabilityElement(ieee, ht_cap_buf, &ht_cap_len, @@ -1076,7 +982,7 @@ rtllib_association_req(struct rtllib_network *beacon, hdr = skb_put(skb, sizeof(struct rtllib_assoc_request_frame) + 2); - hdr->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_ASSOC_REQ); + hdr->header.frame_control = cpu_to_le16(IEEE80211_STYPE_ASSOC_REQ); hdr->header.duration_id = cpu_to_le16(37); ether_addr_copy(hdr->header.addr1, beacon->bssid); ether_addr_copy(hdr->header.addr2, ieee->dev->dev_addr); @@ -1164,7 +1070,7 @@ rtllib_association_req(struct rtllib_network *beacon, memcpy(tag, osCcxVerNum.Octet, osCcxVerNum.Length); tag += osCcxVerNum.Length; } - if (ieee->ht_info->bCurrentHTSupport && ieee->ht_info->enable_ht) { + if (ieee->ht_info->current_ht_support && ieee->ht_info->enable_ht) { if (ieee->ht_info->ePeerHTSpecVer != HT_SPEC_VER_EWC) { tag = skb_put(skb, ht_cap_len); *tag++ = MFIE_TYPE_HT_CAP; @@ -1198,7 +1104,7 @@ rtllib_association_req(struct rtllib_network *beacon, rtllib_TURBO_Info(ieee, &tag); } - if (ieee->ht_info->bCurrentHTSupport && ieee->ht_info->enable_ht) { + if (ieee->ht_info->current_ht_support && ieee->ht_info->enable_ht) { if (ieee->ht_info->ePeerHTSpecVer == HT_SPEC_VER_EWC) { tag = skb_put(skb, ht_cap_len); *tag++ = MFIE_TYPE_GENERIC; @@ -1311,7 +1217,7 @@ static void rtllib_auth_challenge(struct rtllib_device *ieee, u8 *challenge, "Sending authentication challenge response\n"); rtllib_encrypt_fragment(ieee, skb, - sizeof(struct rtllib_hdr_3addr)); + sizeof(struct ieee80211_hdr_3addr)); softmac_mgmt_xmit(skb, ieee); mod_timer(&ieee->associate_timer, jiffies + (HZ / 2)); @@ -1348,10 +1254,8 @@ static void rtllib_associate_complete_wq(void *data) netdev_info(ieee->dev, "Associated successfully with %pM\n", ieee->current_network.bssid); - if (!ieee->is_silent_reset) { - netdev_info(ieee->dev, "normal associate\n"); - notify_wx_assoc_event(ieee); - } + netdev_info(ieee->dev, "normal associate\n"); + notify_wx_assoc_event(ieee); netif_carrier_on(ieee->dev); ieee->is_roaming = false; @@ -1363,13 +1267,13 @@ static void rtllib_associate_complete_wq(void *data) ieee->set_wireless_mode(ieee->dev, WIRELESS_MODE_B); netdev_info(ieee->dev, "Using B rates:%d\n", ieee->rate); } - if (ieee->ht_info->bCurrentHTSupport && ieee->ht_info->enable_ht) { + if (ieee->ht_info->current_ht_support && ieee->ht_info->enable_ht) { netdev_info(ieee->dev, "Successfully associated, ht enabled\n"); HTOnAssocRsp(ieee); } else { netdev_info(ieee->dev, "Successfully associated, ht not enabled(%d, %d)\n", - ieee->ht_info->bCurrentHTSupport, + ieee->ht_info->current_ht_support, ieee->ht_info->enable_ht); memset(ieee->dot11ht_oper_rate_set, 0, 16); } @@ -1384,10 +1288,6 @@ static void rtllib_associate_complete_wq(void *data) psc->LpsIdleCount = 0; ieee->link_change(ieee->dev); - if (ieee->is_silent_reset) { - netdev_info(ieee->dev, "silent reset associate\n"); - ieee->is_silent_reset = false; - } } static void rtllib_sta_send_associnfo(struct rtllib_device *ieee) @@ -1445,14 +1345,7 @@ inline void rtllib_softmac_new_net(struct rtllib_device *ieee, WLAN_CAPABILITY_ESS)) return; - if ((ieee->iw_mode == IW_MODE_ADHOC) && !(net->capability & - WLAN_CAPABILITY_IBSS)) - return; - - if ((ieee->iw_mode == IW_MODE_ADHOC) && - (net->channel > ieee->ibss_maxjoin_chal)) - return; - if (ieee->iw_mode == IW_MODE_INFRA || ieee->iw_mode == IW_MODE_ADHOC) { + if (ieee->iw_mode == IW_MODE_INFRA) { /* if the user specified the AP MAC, we need also the essid * This could be obtained by beacons or, if the network does not * broadcast it, it can be put manually. @@ -1534,8 +1427,7 @@ inline void rtllib_softmac_new_net(struct rtllib_device *ieee, HTResetSelfAndSavePeerSetting(ieee, &(ieee->current_network)); else - ieee->ht_info->bCurrentHTSupport = - false; + ieee->ht_info->current_ht_support = false; ieee->link_state = RTLLIB_ASSOCIATING; schedule_delayed_work( @@ -1613,52 +1505,6 @@ static inline int auth_parse(struct net_device *dev, struct sk_buff *skb, return 0; } -static short probe_rq_parse(struct rtllib_device *ieee, struct sk_buff *skb, - u8 *src) -{ - u8 *tag; - u8 *skbend; - u8 *ssid = NULL; - u8 ssidlen = 0; - struct rtllib_hdr_3addr *header = - (struct rtllib_hdr_3addr *)skb->data; - bool bssid_match; - - if (skb->len < sizeof(struct rtllib_hdr_3addr)) - return -1; /* corrupted */ - - bssid_match = - (!ether_addr_equal(header->addr3, ieee->current_network.bssid)) && - (!is_broadcast_ether_addr(header->addr3)); - if (bssid_match) - return -1; - - ether_addr_copy(src, header->addr2); - - skbend = (u8 *)skb->data + skb->len; - - tag = skb->data + sizeof(struct rtllib_hdr_3addr); - - while (tag + 1 < skbend) { - if (*tag == 0) { - ssid = tag + 2; - ssidlen = *(tag + 1); - break; - } - tag++; /* point to the len field */ - tag = tag + *(tag); /* point to the last data byte of the tag */ - tag++; /* point to the next tag */ - } - - if (ssidlen == 0) - return 1; - - if (!ssid) - return 1; /* ssid not found in tagged param */ - - return !strncmp(ssid, ieee->current_network.ssid, ssidlen); -} - static inline u16 assoc_parse(struct rtllib_device *ieee, struct sk_buff *skb, int *aid) { @@ -1688,17 +1534,6 @@ static inline u16 assoc_parse(struct rtllib_device *ieee, struct sk_buff *skb, return le16_to_cpu(response_head->status); } -void rtllib_rx_probe_rq(struct rtllib_device *ieee, struct sk_buff *skb) -{ - u8 dest[ETH_ALEN]; - - ieee->softmac_stats.rx_probe_rq++; - if (probe_rq_parse(ieee, skb, dest) > 0) { - ieee->softmac_stats.tx_probe_rs++; - rtllib_resp_to_probe(ieee, dest); - } -} - void rtllib_sta_ps_send_null_frame(struct rtllib_device *ieee, short pwr) { struct sk_buff *buf = rtllib_null_func(ieee, pwr); @@ -1752,16 +1587,10 @@ static short rtllib_sta_ps_sleep(struct rtllib_device *ieee, u64 *time) if (ieee->bAwakePktSent) { psc->LPSAwakeIntvl = 1; } else { - u8 MaxPeriod = 1; + u8 MaxPeriod = 5; if (psc->LPSAwakeIntvl == 0) psc->LPSAwakeIntvl = 1; - if (psc->reg_max_lps_awake_intvl == 0) - MaxPeriod = 1; - else if (psc->reg_max_lps_awake_intvl == 0xFF) - MaxPeriod = ieee->current_network.dtim_period; - else - MaxPeriod = psc->reg_max_lps_awake_intvl; psc->LPSAwakeIntvl = (psc->LPSAwakeIntvl >= MaxPeriod) ? MaxPeriod : (psc->LPSAwakeIntvl + 1); @@ -1921,16 +1750,9 @@ EXPORT_SYMBOL(rtllib_ps_tx_ack); static void rtllib_process_action(struct rtllib_device *ieee, struct sk_buff *skb) { - struct rtllib_hdr_3addr *header = (struct rtllib_hdr_3addr *)skb->data; - u8 *act = rtllib_get_payload((struct rtllib_hdr *)header); + u8 *act = skb->data + RTLLIB_3ADDR_LEN; u8 category = 0; - if (act == NULL) { - netdev_warn(ieee->dev, - "Error getting payload of action frame\n"); - return; - } - category = *act; act++; switch (category) { @@ -1960,8 +1782,8 @@ rtllib_rx_assoc_resp(struct rtllib_device *ieee, struct sk_buff *skb, int aid; u8 *ies; struct rtllib_assoc_response_frame *assoc_resp; - struct rtllib_hdr_3addr *header = (struct rtllib_hdr_3addr *)skb->data; - u16 frame_ctl = le16_to_cpu(header->frame_ctl); + struct ieee80211_hdr_3addr *header = (struct ieee80211_hdr_3addr *)skb->data; + u16 frame_ctl = le16_to_cpu(header->frame_control); netdev_dbg(ieee->dev, "received [RE]ASSOCIATION RESPONSE (%d)\n", WLAN_FC_GET_STYPE(frame_ctl)); @@ -2099,7 +1921,7 @@ rtllib_rx_auth(struct rtllib_device *ieee, struct sk_buff *skb, static inline int rtllib_rx_deauth(struct rtllib_device *ieee, struct sk_buff *skb) { - struct rtllib_hdr_3addr *header = (struct rtllib_hdr_3addr *)skb->data; + struct ieee80211_hdr_3addr *header = (struct ieee80211_hdr_3addr *)skb->data; u16 frame_ctl; if (memcmp(header->addr3, ieee->current_network.bssid, ETH_ALEN) != 0) @@ -2111,7 +1933,7 @@ rtllib_rx_deauth(struct rtllib_device *ieee, struct sk_buff *skb) if ((ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) && ieee->link_state == MAC80211_LINKED && (ieee->iw_mode == IW_MODE_INFRA)) { - frame_ctl = le16_to_cpu(header->frame_ctl); + frame_ctl = le16_to_cpu(header->frame_control); netdev_info(ieee->dev, "==========>received disassoc/deauth(%x) frame, reason code:%x\n", WLAN_FC_GET_STYPE(frame_ctl), @@ -2135,30 +1957,30 @@ inline int rtllib_rx_frame_softmac(struct rtllib_device *ieee, struct rtllib_rx_stats *rx_stats, u16 type, u16 stype) { - struct rtllib_hdr_3addr *header = (struct rtllib_hdr_3addr *)skb->data; + struct ieee80211_hdr_3addr *header = (struct ieee80211_hdr_3addr *)skb->data; u16 frame_ctl; if (!ieee->proto_started) return 0; - frame_ctl = le16_to_cpu(header->frame_ctl); + frame_ctl = le16_to_cpu(header->frame_control); switch (WLAN_FC_GET_STYPE(frame_ctl)) { - case RTLLIB_STYPE_ASSOC_RESP: - case RTLLIB_STYPE_REASSOC_RESP: + case IEEE80211_STYPE_ASSOC_RESP: + case IEEE80211_STYPE_REASSOC_RESP: if (rtllib_rx_assoc_resp(ieee, skb, rx_stats) == 1) return 1; break; - case RTLLIB_STYPE_ASSOC_REQ: - case RTLLIB_STYPE_REASSOC_REQ: + case IEEE80211_STYPE_ASSOC_REQ: + case IEEE80211_STYPE_REASSOC_REQ: break; - case RTLLIB_STYPE_AUTH: + case IEEE80211_STYPE_AUTH: rtllib_rx_auth(ieee, skb, rx_stats); break; - case RTLLIB_STYPE_DISASSOC: - case RTLLIB_STYPE_DEAUTH: + case IEEE80211_STYPE_DISASSOC: + case IEEE80211_STYPE_DEAUTH: rtllib_rx_deauth(ieee, skb); break; - case RTLLIB_STYPE_MANAGE_ACT: + case IEEE80211_STYPE_ACTION: rtllib_process_action(ieee, skb); break; default: @@ -2263,128 +2085,6 @@ void rtllib_wake_all_queues(struct rtllib_device *ieee) netif_tx_wake_all_queues(ieee->dev); } -static void rtllib_start_monitor_mode(struct rtllib_device *ieee) -{ - /* reset hardware status */ - if (ieee->raw_tx) - netif_carrier_on(ieee->dev); -} - -static void rtllib_start_ibss_wq(void *data) -{ - struct rtllib_device *ieee = container_of_dwork_rsl(data, - struct rtllib_device, start_ibss_wq); - /* iwconfig mode ad-hoc will schedule this and return - * on the other hand this will block further iwconfig SET - * operations because of the wx_mutex hold. - * Anyway some most set operations set a flag to speed-up - * (abort) this wq (when syncro scanning) before sleeping - * on the mutex - */ - if (!ieee->proto_started) { - netdev_info(ieee->dev, "==========oh driver down return\n"); - return; - } - mutex_lock(&ieee->wx_mutex); - - if (ieee->current_network.ssid_len == 0) { - strscpy(ieee->current_network.ssid, RTLLIB_DEFAULT_TX_ESSID, - sizeof(ieee->current_network.ssid)); - ieee->current_network.ssid_len = strlen(RTLLIB_DEFAULT_TX_ESSID); - ieee->ssid_set = 1; - } - - ieee->link_state = MAC80211_NOLINK; - ieee->mode = WIRELESS_MODE_G; - /* check if we have this cell in our network list */ - rtllib_softmac_check_all_nets(ieee); - - /* if not then the state is not linked. Maybe the user switched to - * ad-hoc mode just after being in monitor mode, or just after - * being very few time in managed mode (so the card have had no - * time to scan all the chans..) or we have just run up the iface - * after setting ad-hoc mode. So we have to give another try.. - * Here, in ibss mode, should be safe to do this without extra care - * (in bss mode we had to make sure no-one tried to associate when - * we had just checked the ieee->link_state and we was going to start the - * scan) because in ibss mode the rtllib_new_net function, when - * finds a good net, just set the ieee->link_state to MAC80211_LINKED, - * so, at worst, we waste a bit of time to initiate an unneeded syncro - * scan, that will stop at the first round because it sees the state - * associated. - */ - if (ieee->link_state == MAC80211_NOLINK) - rtllib_start_scan_syncro(ieee); - - /* the network definitively is not here.. create a new cell */ - if (ieee->link_state == MAC80211_NOLINK) { - netdev_info(ieee->dev, "creating new IBSS cell\n"); - ieee->current_network.channel = ieee->bss_start_channel; - if (!ieee->wap_set) - eth_random_addr(ieee->current_network.bssid); - - ieee->current_network.rates_len = 4; - ieee->current_network.rates[0] = - RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_1MB; - ieee->current_network.rates[1] = - RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_2MB; - ieee->current_network.rates[2] = - RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_5MB; - ieee->current_network.rates[3] = - RTLLIB_BASIC_RATE_MASK | RTLLIB_CCK_RATE_11MB; - - ieee->current_network.rates_ex_len = 8; - ieee->current_network.rates_ex[0] = - RTLLIB_OFDM_RATE_6MB; - ieee->current_network.rates_ex[1] = - RTLLIB_OFDM_RATE_9MB; - ieee->current_network.rates_ex[2] = - RTLLIB_OFDM_RATE_12MB; - ieee->current_network.rates_ex[3] = - RTLLIB_OFDM_RATE_18MB; - ieee->current_network.rates_ex[4] = - RTLLIB_OFDM_RATE_24MB; - ieee->current_network.rates_ex[5] = - RTLLIB_OFDM_RATE_36MB; - ieee->current_network.rates_ex[6] = - RTLLIB_OFDM_RATE_48MB; - ieee->current_network.rates_ex[7] = - RTLLIB_OFDM_RATE_54MB; - ieee->rate = 108; - - ieee->current_network.qos_data.supported = 0; - ieee->set_wireless_mode(ieee->dev, WIRELESS_MODE_G); - ieee->current_network.mode = ieee->mode; - ieee->current_network.atim_window = 0; - ieee->current_network.capability = WLAN_CAPABILITY_IBSS; - } - - netdev_info(ieee->dev, "%s(): ieee->mode = %d\n", __func__, ieee->mode); - if (ieee->mode == WIRELESS_MODE_N_24G) - HTUseDefaultSetting(ieee); - else - ieee->ht_info->bCurrentHTSupport = false; - - ieee->SetHwRegHandler(ieee->dev, HW_VAR_MEDIA_STATUS, - (u8 *)(&ieee->link_state)); - - ieee->link_state = MAC80211_LINKED; - ieee->link_change(ieee->dev); - - HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT); - rtllib_start_send_beacons(ieee); - - notify_wx_assoc_event(ieee); - netif_carrier_on(ieee->dev); - - mutex_unlock(&ieee->wx_mutex); -} - -inline void rtllib_start_ibss(struct rtllib_device *ieee) -{ - schedule_delayed_work(&ieee->start_ibss_wq, msecs_to_jiffies(150)); -} - /* this is called only in user context, with wx_mutex held */ static void rtllib_start_bss(struct rtllib_device *ieee) { @@ -2495,7 +2195,7 @@ static struct sk_buff *rtllib_get_beacon_(struct rtllib_device *ieee) return NULL; b = (struct rtllib_probe_response *)skb->data; - b->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_BEACON); + b->header.frame_control = cpu_to_le16(IEEE80211_STYPE_BEACON); return skb; } @@ -2510,7 +2210,7 @@ struct sk_buff *rtllib_get_beacon(struct rtllib_device *ieee) return NULL; b = (struct rtllib_probe_response *)skb->data; - b->header.seq_ctl = cpu_to_le16(ieee->seq_ctrl[0] << 4); + b->header.seq_ctrl = cpu_to_le16(ieee->seq_ctrl[0] << 4); if (ieee->seq_ctrl[0] == 0xFFF) ieee->seq_ctrl[0] = 0; @@ -2521,31 +2221,28 @@ struct sk_buff *rtllib_get_beacon(struct rtllib_device *ieee) } EXPORT_SYMBOL(rtllib_get_beacon); -void rtllib_softmac_stop_protocol(struct rtllib_device *ieee, u8 mesh_flag, - u8 shutdown) +void rtllib_softmac_stop_protocol(struct rtllib_device *ieee) { rtllib_stop_scan_syncro(ieee); mutex_lock(&ieee->wx_mutex); - rtllib_stop_protocol(ieee, shutdown); + rtllib_stop_protocol(ieee); mutex_unlock(&ieee->wx_mutex); } EXPORT_SYMBOL(rtllib_softmac_stop_protocol); -void rtllib_stop_protocol(struct rtllib_device *ieee, u8 shutdown) +void rtllib_stop_protocol(struct rtllib_device *ieee) { if (!ieee->proto_started) return; - if (shutdown) { - ieee->proto_started = 0; - ieee->proto_stoppping = 1; - ieee->rtllib_ips_leave(ieee->dev); - } + ieee->proto_started = 0; + ieee->proto_stoppping = 1; + ieee->rtllib_ips_leave(ieee->dev); - rtllib_stop_send_beacons(ieee); del_timer_sync(&ieee->associate_timer); + mutex_unlock(&ieee->wx_mutex); cancel_delayed_work_sync(&ieee->associate_retry_wq); - cancel_delayed_work_sync(&ieee->start_ibss_wq); + mutex_lock(&ieee->wx_mutex); cancel_delayed_work_sync(&ieee->link_change_wq); rtllib_stop_scan(ieee); @@ -2558,10 +2255,9 @@ void rtllib_stop_protocol(struct rtllib_device *ieee, u8 shutdown) rtllib_disassociate(ieee); } - if (shutdown) { - RemoveAllTS(ieee); - ieee->proto_stoppping = 0; - } + RemoveAllTS(ieee); + ieee->proto_stoppping = 0; + kfree(ieee->assocreq_ies); ieee->assocreq_ies = NULL; ieee->assocreq_ies_len = 0; @@ -2570,7 +2266,7 @@ void rtllib_stop_protocol(struct rtllib_device *ieee, u8 shutdown) ieee->assocresp_ies_len = 0; } -void rtllib_softmac_start_protocol(struct rtllib_device *ieee, u8 mesh_flag) +void rtllib_softmac_start_protocol(struct rtllib_device *ieee) { mutex_lock(&ieee->wx_mutex); rtllib_start_protocol(ieee); @@ -2618,12 +2314,6 @@ void rtllib_start_protocol(struct rtllib_device *ieee) case IW_MODE_INFRA: rtllib_start_bss(ieee); break; - case IW_MODE_ADHOC: - rtllib_start_ibss(ieee); - break; - case IW_MODE_MONITOR: - rtllib_start_monitor_mode(ieee); - break; } } @@ -2682,7 +2372,6 @@ int rtllib_softmac_init(struct rtllib_device *ieee) timer_setup(&ieee->beacon_timer, rtllib_send_beacon_cb, 0); INIT_DELAYED_WORK(&ieee->link_change_wq, (void *)rtllib_link_change_wq); - INIT_DELAYED_WORK(&ieee->start_ibss_wq, (void *)rtllib_start_ibss_wq); INIT_WORK(&ieee->associate_complete_wq, (void *)rtllib_associate_complete_wq); INIT_DELAYED_WORK(&ieee->associate_procedure_wq, (void *)rtllib_associate_procedure_wq); INIT_DELAYED_WORK(&ieee->softmac_scan_wq, (void *)rtllib_softmac_scan_wq); @@ -2703,15 +2392,11 @@ int rtllib_softmac_init(struct rtllib_device *ieee) void rtllib_softmac_free(struct rtllib_device *ieee) { - mutex_lock(&ieee->wx_mutex); - kfree(ieee->dot11d_info); - ieee->dot11d_info = NULL; del_timer_sync(&ieee->associate_timer); cancel_delayed_work_sync(&ieee->associate_retry_wq); cancel_delayed_work_sync(&ieee->associate_procedure_wq); cancel_delayed_work_sync(&ieee->softmac_scan_wq); - cancel_delayed_work_sync(&ieee->start_ibss_wq); cancel_delayed_work_sync(&ieee->hw_wakeup_wq); cancel_delayed_work_sync(&ieee->hw_sleep_wq); cancel_delayed_work_sync(&ieee->link_change_wq); @@ -2719,7 +2404,9 @@ void rtllib_softmac_free(struct rtllib_device *ieee) cancel_work_sync(&ieee->ips_leave_wq); cancel_work_sync(&ieee->wx_sync_scan_wq); cancel_work_sync(&ieee->ps_task); - mutex_unlock(&ieee->wx_mutex); + + kfree(ieee->dot11d_info); + ieee->dot11d_info = NULL; } static inline struct sk_buff * @@ -2737,7 +2424,7 @@ rtllib_disauth_skb(struct rtllib_network *beacon, skb_reserve(skb, ieee->tx_headroom); disauth = skb_put(skb, sizeof(struct rtllib_disauth)); - disauth->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_DEAUTH); + disauth->header.frame_control = cpu_to_le16(IEEE80211_STYPE_DEAUTH); disauth->header.duration_id = 0; ether_addr_copy(disauth->header.addr1, beacon->bssid); @@ -2764,7 +2451,7 @@ rtllib_disassociate_skb(struct rtllib_network *beacon, skb_reserve(skb, ieee->tx_headroom); disass = skb_put(skb, sizeof(struct rtllib_disassoc)); - disass->header.frame_ctl = cpu_to_le16(RTLLIB_STYPE_DISASSOC); + disass->header.frame_control = cpu_to_le16(IEEE80211_STYPE_DISASSOC); disass->header.duration_id = 0; ether_addr_copy(disass->header.addr1, beacon->bssid); @@ -2817,30 +2504,6 @@ u8 rtllib_ap_sec_type(struct rtllib_device *ieee) } } -static void rtllib_MgntDisconnectIBSS(struct rtllib_device *rtllib) -{ - u8 OpMode; - u8 i; - bool bFilterOutNonAssociatedBSSID = false; - - rtllib->link_state = MAC80211_NOLINK; - - for (i = 0; i < 6; i++) - rtllib->current_network.bssid[i] = 0x55; - - rtllib->OpMode = RT_OP_MODE_NO_LINK; - rtllib->SetHwRegHandler(rtllib->dev, HW_VAR_BSSID, - rtllib->current_network.bssid); - OpMode = RT_OP_MODE_NO_LINK; - rtllib->SetHwRegHandler(rtllib->dev, HW_VAR_MEDIA_STATUS, &OpMode); - rtllib_stop_send_beacons(rtllib); - - bFilterOutNonAssociatedBSSID = false; - rtllib->SetHwRegHandler(rtllib->dev, HW_VAR_CECHK_BSSID, - (u8 *)(&bFilterOutNonAssociatedBSSID)); - notify_wx_assoc_event(rtllib); -} - static void rtllib_MlmeDisassociateRequest(struct rtllib_device *rtllib, u8 *asSta, u8 asRsn) { @@ -2888,8 +2551,6 @@ bool rtllib_MgntDisconnect(struct rtllib_device *rtllib, u8 asRsn) rtllib->sta_wake_up(rtllib->dev); if (rtllib->link_state == MAC80211_LINKED) { - if (rtllib->iw_mode == IW_MODE_ADHOC) - rtllib_MgntDisconnectIBSS(rtllib); if (rtllib->iw_mode == IW_MODE_INFRA) rtllib_MgntDisconnectAP(rtllib, asRsn); } diff --git a/drivers/staging/rtl8192e/rtllib_softmac_wx.c b/drivers/staging/rtl8192e/rtllib_softmac_wx.c index 0b690f0ffe..f325842917 100644 --- a/drivers/staging/rtl8192e/rtllib_softmac_wx.c +++ b/drivers/staging/rtl8192e/rtllib_softmac_wx.c @@ -50,12 +50,6 @@ int rtllib_wx_set_freq(struct rtllib_device *ieee, struct iw_request_info *a, } ieee->current_network.channel = fwrq->m; ieee->set_chan(ieee->dev, ieee->current_network.channel); - - if (ieee->iw_mode == IW_MODE_ADHOC) - if (ieee->link_state == MAC80211_LINKED) { - rtllib_stop_send_beacons(ieee); - rtllib_start_send_beacons(ieee); - } } ret = 0; @@ -140,7 +134,7 @@ int rtllib_wx_set_wap(struct rtllib_device *ieee, } if (ifup) - rtllib_stop_protocol(ieee, true); + rtllib_stop_protocol(ieee); /* just to avoid to give inconsistent infos in the * get wx method. not really needed otherwise @@ -258,7 +252,6 @@ int rtllib_wx_set_mode(struct rtllib_device *ieee, struct iw_request_info *a, mutex_lock(&ieee->wx_mutex); switch (wrqu->mode) { case IW_MODE_MONITOR: - case IW_MODE_ADHOC: case IW_MODE_INFRA: break; case IW_MODE_AUTO: @@ -284,7 +277,7 @@ int rtllib_wx_set_mode(struct rtllib_device *ieee, struct iw_request_info *a, if (!ieee->proto_started) { ieee->iw_mode = wrqu->mode; } else { - rtllib_stop_protocol(ieee, true); + rtllib_stop_protocol(ieee); ieee->iw_mode = wrqu->mode; rtllib_start_protocol(ieee); } @@ -317,7 +310,6 @@ void rtllib_wx_sync_scan_wq(void *data) rtllib_sta_ps_send_null_frame(ieee, 1); rtllib_stop_all_queues(ieee); - rtllib_stop_send_beacons(ieee); ieee->link_state = MAC80211_LINKED_SCANNING; ieee->link_change(ieee->dev); /* wait for ps packet to be kicked out successfully */ @@ -325,7 +317,7 @@ void rtllib_wx_sync_scan_wq(void *data) ieee->ScanOperationBackupHandler(ieee->dev, SCAN_OPT_BACKUP); - if (ieee->ht_info->bCurrentHTSupport && ieee->ht_info->enable_ht && + if (ieee->ht_info->current_ht_support && ieee->ht_info->enable_ht && ieee->ht_info->bCurBW40MHz) { b40M = 1; chan_offset = ieee->ht_info->CurSTAExtChnlOffset; @@ -361,9 +353,6 @@ void rtllib_wx_sync_scan_wq(void *data) ieee->link_detect_info.NumRecvBcnInPeriod = 1; ieee->link_detect_info.NumRecvDataInPeriod = 1; } - if (ieee->iw_mode == IW_MODE_ADHOC) - rtllib_start_send_beacons(ieee); - rtllib_wake_all_queues(ieee); out: @@ -412,7 +401,7 @@ int rtllib_wx_set_essid(struct rtllib_device *ieee, } if (proto_started) - rtllib_stop_protocol(ieee, true); + rtllib_stop_protocol(ieee); /* this is just to be sure that the GET wx callback * has consistent infos. not needed otherwise @@ -447,38 +436,6 @@ int rtllib_wx_get_mode(struct rtllib_device *ieee, struct iw_request_info *a, } EXPORT_SYMBOL(rtllib_wx_get_mode); -int rtllib_wx_set_rawtx(struct rtllib_device *ieee, - struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int *parms = (int *)extra; - int enable = (parms[0] > 0); - short prev = ieee->raw_tx; - - mutex_lock(&ieee->wx_mutex); - - if (enable) - ieee->raw_tx = 1; - else - ieee->raw_tx = 0; - - netdev_info(ieee->dev, "raw TX is %s\n", - ieee->raw_tx ? "enabled" : "disabled"); - - if (ieee->iw_mode == IW_MODE_MONITOR) { - if (prev == 0 && ieee->raw_tx) - netif_carrier_on(ieee->dev); - - if (prev && ieee->raw_tx == 1) - netif_carrier_off(ieee->dev); - } - - mutex_unlock(&ieee->wx_mutex); - - return 0; -} -EXPORT_SYMBOL(rtllib_wx_set_rawtx); - int rtllib_wx_get_name(struct rtllib_device *ieee, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) { diff --git a/drivers/staging/rtl8192e/rtllib_tx.c b/drivers/staging/rtl8192e/rtllib_tx.c index 4199aee930..9bf679438a 100644 --- a/drivers/staging/rtl8192e/rtllib_tx.c +++ b/drivers/staging/rtl8192e/rtllib_tx.c @@ -268,12 +268,12 @@ static void rtllib_tx_query_agg_cap(struct rtllib_device *ieee, { struct rt_hi_throughput *ht_info = ieee->ht_info; struct tx_ts_record *pTxTs = NULL; - struct rtllib_hdr_1addr *hdr = (struct rtllib_hdr_1addr *)skb->data; + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; if (rtllib_act_scanning(ieee, false)) return; - if (!ht_info->bCurrentHTSupport || !ht_info->enable_ht) + if (!ht_info->current_ht_support || !ht_info->enable_ht) return; if (!IsQoSDataFrame(skb->data)) return; @@ -289,7 +289,7 @@ static void rtllib_tx_query_agg_cap(struct rtllib_device *ieee, if (!ieee->GetNmodeSupportBySecCfg(ieee->dev)) return; if (ht_info->bCurrentAMPDUEnable) { - if (!GetTs(ieee, (struct ts_common_info **)(&pTxTs), hdr->addr1, + if (!rtllib_get_ts(ieee, (struct ts_common_info **)(&pTxTs), hdr->addr1, skb->priority, TX_DIR, true)) { netdev_info(ieee->dev, "%s: can't get TS\n", __func__); return; @@ -354,7 +354,7 @@ static void rtllib_query_HTCapShortGI(struct rtllib_device *ieee, tcb_desc->bUseShortGI = false; - if (!ht_info->bCurrentHTSupport || !ht_info->enable_ht) + if (!ht_info->current_ht_support || !ht_info->enable_ht) return; if (ht_info->forced_short_gi) { @@ -375,7 +375,7 @@ static void rtllib_query_BandwidthMode(struct rtllib_device *ieee, tcb_desc->bPacketBW = false; - if (!ht_info->bCurrentHTSupport || !ht_info->enable_ht) + if (!ht_info->current_ht_support || !ht_info->enable_ht) return; if (tcb_desc->bMulticast || tcb_desc->bBroadcast) @@ -438,7 +438,7 @@ static void rtllib_query_protectionmode(struct rtllib_device *ieee, tcb_desc->rts_rate = MGN_24M; break; } - if (ht_info->bCurrentHTSupport && ht_info->enable_ht) { + if (ht_info->current_ht_support && ht_info->enable_ht) { u8 HTOpMode = ht_info->current_op_mode; if ((ht_info->bCurBW40MHz && (HTOpMode == 2 || @@ -482,8 +482,7 @@ static void rtllib_txrate_selectmode(struct rtllib_device *ieee, tcb_desc->tx_use_drv_assinged_rate = true; if (!tcb_desc->tx_dis_rate_fallback || !tcb_desc->tx_use_drv_assinged_rate) { - if (ieee->iw_mode == IW_MODE_INFRA || - ieee->iw_mode == IW_MODE_ADHOC) + if (ieee->iw_mode == IW_MODE_INFRA) tcb_desc->ratr_index = 0; } } @@ -496,13 +495,13 @@ static u16 rtllib_query_seqnum(struct rtllib_device *ieee, struct sk_buff *skb, if (is_multicast_ether_addr(dst)) return 0; if (IsQoSDataFrame(skb->data)) { - struct tx_ts_record *pTS = NULL; + struct tx_ts_record *ts = NULL; - if (!GetTs(ieee, (struct ts_common_info **)(&pTS), dst, + if (!rtllib_get_ts(ieee, (struct ts_common_info **)(&ts), dst, skb->priority, TX_DIR, true)) return 0; - seqnum = pTS->TxCurSeq; - pTS->TxCurSeq = (pTS->TxCurSeq + 1) % 4096; + seqnum = ts->TxCurSeq; + ts->TxCurSeq = (ts->TxCurSeq + 1) % 4096; return seqnum; } return 0; @@ -544,17 +543,17 @@ static int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev) struct rtllib_device *ieee = (struct rtllib_device *) netdev_priv_rsl(dev); struct rtllib_txb *txb = NULL; - struct rtllib_hdr_3addrqos *frag_hdr; + struct ieee80211_qos_hdr *frag_hdr; int i, bytes_per_frag, nr_frags, bytes_last_frag, frag_size; unsigned long flags; struct net_device_stats *stats = &ieee->stats; int ether_type = 0, encrypt; int bytes, fc, qos_ctl = 0, hdr_len; struct sk_buff *skb_frag; - struct rtllib_hdr_3addrqos header = { /* Ensure zero initialized */ + struct ieee80211_qos_hdr header = { /* Ensure zero initialized */ .duration_id = 0, - .seq_ctl = 0, - .qos_ctl = 0 + .seq_ctrl = 0, + .qos_ctrl = 0 }; int qos_activated = ieee->current_network.qos_data.active; u8 dest[ETH_ALEN]; @@ -577,297 +576,271 @@ static int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev) goto success; } - if (likely(ieee->raw_tx == 0)) { - if (unlikely(skb->len < SNAP_SIZE + sizeof(u16))) { - netdev_warn(ieee->dev, "skb too small (%d).\n", - skb->len); - goto success; - } - /* Save source and destination addresses */ - ether_addr_copy(dest, skb->data); - ether_addr_copy(src, skb->data + ETH_ALEN); - - memset(skb->cb, 0, sizeof(skb->cb)); - ether_type = ntohs(((struct ethhdr *)skb->data)->h_proto); - - if (ieee->iw_mode == IW_MODE_MONITOR) { - txb = rtllib_alloc_txb(1, skb->len, GFP_ATOMIC); - if (unlikely(!txb)) { - netdev_warn(ieee->dev, - "Could not allocate TXB\n"); - goto failed; - } + if (unlikely(skb->len < SNAP_SIZE + sizeof(u16))) { + netdev_warn(ieee->dev, "skb too small (%d).\n", + skb->len); + goto success; + } + /* Save source and destination addresses */ + ether_addr_copy(dest, skb->data); + ether_addr_copy(src, skb->data + ETH_ALEN); - txb->encrypted = 0; - txb->payload_size = cpu_to_le16(skb->len); - skb_put_data(txb->fragments[0], skb->data, skb->len); + memset(skb->cb, 0, sizeof(skb->cb)); + ether_type = ntohs(((struct ethhdr *)skb->data)->h_proto); - goto success; + if (ieee->iw_mode == IW_MODE_MONITOR) { + txb = rtllib_alloc_txb(1, skb->len, GFP_ATOMIC); + if (unlikely(!txb)) { + netdev_warn(ieee->dev, + "Could not allocate TXB\n"); + goto failed; } - if (skb->len > 282) { - if (ether_type == ETH_P_IP) { - const struct iphdr *ip = (struct iphdr *) - ((u8 *)skb->data + 14); - if (ip->protocol == IPPROTO_UDP) { - struct udphdr *udp; - - udp = (struct udphdr *)((u8 *)ip + - (ip->ihl << 2)); - if (((((u8 *)udp)[1] == 68) && - (((u8 *)udp)[3] == 67)) || - ((((u8 *)udp)[1] == 67) && - (((u8 *)udp)[3] == 68))) { - bdhcp = true; - ieee->LPSDelayCnt = 200; - } + txb->encrypted = 0; + txb->payload_size = cpu_to_le16(skb->len); + skb_put_data(txb->fragments[0], skb->data, skb->len); + + goto success; + } + + if (skb->len > 282) { + if (ether_type == ETH_P_IP) { + const struct iphdr *ip = (struct iphdr *) + ((u8 *)skb->data + 14); + if (ip->protocol == IPPROTO_UDP) { + struct udphdr *udp; + + udp = (struct udphdr *)((u8 *)ip + + (ip->ihl << 2)); + if (((((u8 *)udp)[1] == 68) && + (((u8 *)udp)[3] == 67)) || + ((((u8 *)udp)[1] == 67) && + (((u8 *)udp)[3] == 68))) { + bdhcp = true; + ieee->LPSDelayCnt = 200; } - } else if (ether_type == ETH_P_ARP) { - netdev_info(ieee->dev, - "=================>DHCP Protocol start tx ARP pkt!!\n"); - bdhcp = true; - ieee->LPSDelayCnt = - ieee->current_network.tim.tim_count; } + } else if (ether_type == ETH_P_ARP) { + netdev_info(ieee->dev, + "=================>DHCP Protocol start tx ARP pkt!!\n"); + bdhcp = true; + ieee->LPSDelayCnt = + ieee->current_network.tim.tim_count; } + } - skb->priority = rtllib_classify(skb, IsAmsdu); - crypt = ieee->crypt_info.crypt[ieee->crypt_info.tx_keyidx]; - encrypt = !(ether_type == ETH_P_PAE && ieee->ieee802_1x) && crypt && crypt->ops; - if (!encrypt && ieee->ieee802_1x && - ieee->drop_unencrypted && ether_type != ETH_P_PAE) { - stats->tx_dropped++; - goto success; - } - if (crypt && !encrypt && ether_type == ETH_P_PAE) { - struct eapol *eap = (struct eapol *)(skb->data + - sizeof(struct ethhdr) - SNAP_SIZE - - sizeof(u16)); - netdev_dbg(ieee->dev, - "TX: IEEE 802.11 EAPOL frame: %s\n", - eap_get_type(eap->type)); - } + skb->priority = rtllib_classify(skb, IsAmsdu); + crypt = ieee->crypt_info.crypt[ieee->crypt_info.tx_keyidx]; + encrypt = !(ether_type == ETH_P_PAE && ieee->ieee802_1x) && crypt && crypt->ops; + if (!encrypt && ieee->ieee802_1x && + ieee->drop_unencrypted && ether_type != ETH_P_PAE) { + stats->tx_dropped++; + goto success; + } + if (crypt && !encrypt && ether_type == ETH_P_PAE) { + struct eapol *eap = (struct eapol *)(skb->data + + sizeof(struct ethhdr) - SNAP_SIZE - + sizeof(u16)); + netdev_dbg(ieee->dev, + "TX: IEEE 802.11 EAPOL frame: %s\n", + eap_get_type(eap->type)); + } - /* Advance the SKB to the start of the payload */ - skb_pull(skb, sizeof(struct ethhdr)); + /* Advance the SKB to the start of the payload */ + skb_pull(skb, sizeof(struct ethhdr)); - /* Determine total amount of storage required for TXB packets */ - bytes = skb->len + SNAP_SIZE + sizeof(u16); + /* Determine total amount of storage required for TXB packets */ + bytes = skb->len + SNAP_SIZE + sizeof(u16); - if (encrypt) - fc = RTLLIB_FTYPE_DATA | RTLLIB_FCTL_WEP; - else - fc = RTLLIB_FTYPE_DATA; + if (encrypt) + fc = RTLLIB_FTYPE_DATA | IEEE80211_FCTL_PROTECTED; + else + fc = RTLLIB_FTYPE_DATA; - if (qos_activated) - fc |= RTLLIB_STYPE_QOS_DATA; - else - fc |= RTLLIB_STYPE_DATA; + if (qos_activated) + fc |= IEEE80211_STYPE_QOS_DATA; + else + fc |= IEEE80211_STYPE_DATA; - if (ieee->iw_mode == IW_MODE_INFRA) { - fc |= RTLLIB_FCTL_TODS; - /* To DS: Addr1 = BSSID, Addr2 = SA, - * Addr3 = DA - */ - ether_addr_copy(header.addr1, - ieee->current_network.bssid); - ether_addr_copy(header.addr2, src); - if (IsAmsdu) - ether_addr_copy(header.addr3, - ieee->current_network.bssid); - else - ether_addr_copy(header.addr3, dest); - } else if (ieee->iw_mode == IW_MODE_ADHOC) { - /* not From/To DS: Addr1 = DA, Addr2 = SA, - * Addr3 = BSSID - */ - ether_addr_copy(header.addr1, dest); - ether_addr_copy(header.addr2, src); + if (ieee->iw_mode == IW_MODE_INFRA) { + fc |= IEEE80211_FCTL_TODS; + /* To DS: Addr1 = BSSID, Addr2 = SA, + * Addr3 = DA + */ + ether_addr_copy(header.addr1, + ieee->current_network.bssid); + ether_addr_copy(header.addr2, src); + if (IsAmsdu) ether_addr_copy(header.addr3, ieee->current_network.bssid); - } + else + ether_addr_copy(header.addr3, dest); + } - bIsMulticast = is_multicast_ether_addr(header.addr1); + bIsMulticast = is_multicast_ether_addr(header.addr1); - header.frame_ctl = cpu_to_le16(fc); + header.frame_control = cpu_to_le16(fc); - /* Determine fragmentation size based on destination (multicast - * and broadcast are not fragmented) - */ - if (bIsMulticast) { - frag_size = MAX_FRAG_THRESHOLD; - qos_ctl |= QOS_CTL_NOTCONTAIN_ACK; - } else { - frag_size = ieee->fts; - qos_ctl = 0; + /* Determine fragmentation size based on destination (multicast + * and broadcast are not fragmented) + */ + if (bIsMulticast) { + frag_size = MAX_FRAG_THRESHOLD; + qos_ctl |= QOS_CTL_NOTCONTAIN_ACK; + } else { + frag_size = ieee->fts; + qos_ctl = 0; + } + + if (qos_activated) { + hdr_len = RTLLIB_3ADDR_LEN + 2; + + /* in case we are a client verify acm is not set for this ac */ + while (unlikely(ieee->wmm_acm & (0x01 << skb->priority))) { + netdev_info(ieee->dev, "skb->priority = %x\n", + skb->priority); + if (wme_downgrade_ac(skb)) + break; + netdev_info(ieee->dev, "converted skb->priority = %x\n", + skb->priority); } - if (qos_activated) { - hdr_len = RTLLIB_3ADDR_LEN + 2; - - /* in case we are a client verify acm is not set for this ac */ - while (unlikely(ieee->wmm_acm & (0x01 << skb->priority))) { - netdev_info(ieee->dev, "skb->priority = %x\n", - skb->priority); - if (wme_downgrade_ac(skb)) - break; - netdev_info(ieee->dev, "converted skb->priority = %x\n", - skb->priority); - } + qos_ctl |= skb->priority; + header.qos_ctrl = cpu_to_le16(qos_ctl & RTLLIB_QOS_TID); + + } else { + hdr_len = RTLLIB_3ADDR_LEN; + } + /* Determine amount of payload per fragment. Regardless of if + * this stack is providing the full 802.11 header, one will + * eventually be affixed to this fragment -- so we must account + * for it when determining the amount of payload space. + */ + bytes_per_frag = frag_size - hdr_len; + if (ieee->config & + (CFG_RTLLIB_COMPUTE_FCS | CFG_RTLLIB_RESERVE_FCS)) + bytes_per_frag -= RTLLIB_FCS_LEN; + + /* Each fragment may need to have room for encrypting + * pre/postfix + */ + if (encrypt) { + bytes_per_frag -= crypt->ops->extra_mpdu_prefix_len + + crypt->ops->extra_mpdu_postfix_len + + crypt->ops->extra_msdu_prefix_len + + crypt->ops->extra_msdu_postfix_len; + } + /* Number of fragments is the total bytes_per_frag / + * payload_per_fragment + */ + nr_frags = bytes / bytes_per_frag; + bytes_last_frag = bytes % bytes_per_frag; + if (bytes_last_frag) + nr_frags++; + else + bytes_last_frag = bytes_per_frag; - qos_ctl |= skb->priority; - header.qos_ctl = cpu_to_le16(qos_ctl & RTLLIB_QOS_TID); + /* When we allocate the TXB we allocate enough space for the + * reserve and full fragment bytes (bytes_per_frag doesn't + * include prefix, postfix, header, FCS, etc.) + */ + txb = rtllib_alloc_txb(nr_frags, frag_size + + ieee->tx_headroom, GFP_ATOMIC); + if (unlikely(!txb)) { + netdev_warn(ieee->dev, "Could not allocate TXB\n"); + goto failed; + } + txb->encrypted = encrypt; + txb->payload_size = cpu_to_le16(bytes); + + if (qos_activated) + txb->queue_index = UP2AC(skb->priority); + else + txb->queue_index = WME_AC_BE; + for (i = 0; i < nr_frags; i++) { + skb_frag = txb->fragments[i]; + tcb_desc = (struct cb_desc *)(skb_frag->cb + + MAX_DEV_ADDR_SIZE); + if (qos_activated) { + skb_frag->priority = skb->priority; + tcb_desc->queue_index = UP2AC(skb->priority); } else { - hdr_len = RTLLIB_3ADDR_LEN; + skb_frag->priority = WME_AC_BE; + tcb_desc->queue_index = WME_AC_BE; } - /* Determine amount of payload per fragment. Regardless of if - * this stack is providing the full 802.11 header, one will - * eventually be affixed to this fragment -- so we must account - * for it when determining the amount of payload space. - */ - bytes_per_frag = frag_size - hdr_len; - if (ieee->config & - (CFG_RTLLIB_COMPUTE_FCS | CFG_RTLLIB_RESERVE_FCS)) - bytes_per_frag -= RTLLIB_FCS_LEN; + skb_reserve(skb_frag, ieee->tx_headroom); - /* Each fragment may need to have room for encrypting - * pre/postfix - */ if (encrypt) { - bytes_per_frag -= crypt->ops->extra_mpdu_prefix_len + - crypt->ops->extra_mpdu_postfix_len + - crypt->ops->extra_msdu_prefix_len + - crypt->ops->extra_msdu_postfix_len; + if (ieee->hwsec_active) + tcb_desc->bHwSec = 1; + else + tcb_desc->bHwSec = 0; + skb_reserve(skb_frag, + crypt->ops->extra_mpdu_prefix_len + + crypt->ops->extra_msdu_prefix_len); + } else { + tcb_desc->bHwSec = 0; } - /* Number of fragments is the total bytes_per_frag / - * payload_per_fragment - */ - nr_frags = bytes / bytes_per_frag; - bytes_last_frag = bytes % bytes_per_frag; - if (bytes_last_frag) - nr_frags++; - else - bytes_last_frag = bytes_per_frag; + frag_hdr = skb_put_data(skb_frag, &header, hdr_len); - /* When we allocate the TXB we allocate enough space for the - * reserve and full fragment bytes (bytes_per_frag doesn't - * include prefix, postfix, header, FCS, etc.) + /* If this is not the last fragment, then add the + * MOREFRAGS bit to the frame control */ - txb = rtllib_alloc_txb(nr_frags, frag_size + - ieee->tx_headroom, GFP_ATOMIC); - if (unlikely(!txb)) { - netdev_warn(ieee->dev, "Could not allocate TXB\n"); - goto failed; - } - txb->encrypted = encrypt; - txb->payload_size = cpu_to_le16(bytes); + if (i != nr_frags - 1) { + frag_hdr->frame_control = cpu_to_le16(fc | + IEEE80211_FCTL_MOREFRAGS); + bytes = bytes_per_frag; - if (qos_activated) - txb->queue_index = UP2AC(skb->priority); - else - txb->queue_index = WME_AC_BE; - - for (i = 0; i < nr_frags; i++) { - skb_frag = txb->fragments[i]; - tcb_desc = (struct cb_desc *)(skb_frag->cb + - MAX_DEV_ADDR_SIZE); - if (qos_activated) { - skb_frag->priority = skb->priority; - tcb_desc->queue_index = UP2AC(skb->priority); - } else { - skb_frag->priority = WME_AC_BE; - tcb_desc->queue_index = WME_AC_BE; - } - skb_reserve(skb_frag, ieee->tx_headroom); - - if (encrypt) { - if (ieee->hwsec_active) - tcb_desc->bHwSec = 1; - else - tcb_desc->bHwSec = 0; - skb_reserve(skb_frag, - crypt->ops->extra_mpdu_prefix_len + - crypt->ops->extra_msdu_prefix_len); - } else { - tcb_desc->bHwSec = 0; - } - frag_hdr = skb_put_data(skb_frag, &header, hdr_len); - - /* If this is not the last fragment, then add the - * MOREFRAGS bit to the frame control - */ - if (i != nr_frags - 1) { - frag_hdr->frame_ctl = cpu_to_le16(fc | - RTLLIB_FCTL_MOREFRAGS); - bytes = bytes_per_frag; - - } else { - /* The last fragment has the remaining length */ - bytes = bytes_last_frag; - } - if ((qos_activated) && (!bIsMulticast)) { - frag_hdr->seq_ctl = - cpu_to_le16(rtllib_query_seqnum(ieee, skb_frag, - header.addr1)); - frag_hdr->seq_ctl = - cpu_to_le16(le16_to_cpu(frag_hdr->seq_ctl) << 4 | i); - } else { - frag_hdr->seq_ctl = - cpu_to_le16(ieee->seq_ctrl[0] << 4 | i); - } - /* Put a SNAP header on the first fragment */ - if (i == 0) { - rtllib_put_snap(skb_put(skb_frag, - SNAP_SIZE + - sizeof(u16)), ether_type); - bytes -= SNAP_SIZE + sizeof(u16); - } - - skb_put_data(skb_frag, skb->data, bytes); - - /* Advance the SKB... */ - skb_pull(skb, bytes); - - /* Encryption routine will move the header forward in - * order to insert the IV between the header and the - * payload - */ - if (encrypt) - rtllib_encrypt_fragment(ieee, skb_frag, - hdr_len); - if (ieee->config & - (CFG_RTLLIB_COMPUTE_FCS | CFG_RTLLIB_RESERVE_FCS)) - skb_put(skb_frag, 4); + } else { + /* The last fragment has the remaining length */ + bytes = bytes_last_frag; } - if ((qos_activated) && (!bIsMulticast)) { - if (ieee->seq_ctrl[UP2AC(skb->priority) + 1] == 0xFFF) - ieee->seq_ctrl[UP2AC(skb->priority) + 1] = 0; - else - ieee->seq_ctrl[UP2AC(skb->priority) + 1]++; + frag_hdr->seq_ctrl = + cpu_to_le16(rtllib_query_seqnum(ieee, skb_frag, + header.addr1)); + frag_hdr->seq_ctrl = + cpu_to_le16(le16_to_cpu(frag_hdr->seq_ctrl) << 4 | i); } else { - if (ieee->seq_ctrl[0] == 0xFFF) - ieee->seq_ctrl[0] = 0; - else - ieee->seq_ctrl[0]++; + frag_hdr->seq_ctrl = + cpu_to_le16(ieee->seq_ctrl[0] << 4 | i); } - } else { - if (unlikely(skb->len < sizeof(struct rtllib_hdr_3addr))) { - netdev_warn(ieee->dev, "skb too small (%d).\n", - skb->len); - goto success; + /* Put a SNAP header on the first fragment */ + if (i == 0) { + rtllib_put_snap(skb_put(skb_frag, + SNAP_SIZE + + sizeof(u16)), ether_type); + bytes -= SNAP_SIZE + sizeof(u16); } - txb = rtllib_alloc_txb(1, skb->len, GFP_ATOMIC); - if (!txb) { - netdev_warn(ieee->dev, "Could not allocate TXB\n"); - goto failed; - } + skb_put_data(skb_frag, skb->data, bytes); - txb->encrypted = 0; - txb->payload_size = cpu_to_le16(skb->len); - skb_put_data(txb->fragments[0], skb->data, skb->len); + /* Advance the SKB... */ + skb_pull(skb, bytes); + + /* Encryption routine will move the header forward in + * order to insert the IV between the header and the + * payload + */ + if (encrypt) + rtllib_encrypt_fragment(ieee, skb_frag, + hdr_len); + if (ieee->config & + (CFG_RTLLIB_COMPUTE_FCS | CFG_RTLLIB_RESERVE_FCS)) + skb_put(skb_frag, 4); + } + + if ((qos_activated) && (!bIsMulticast)) { + if (ieee->seq_ctrl[UP2AC(skb->priority) + 1] == 0xFFF) + ieee->seq_ctrl[UP2AC(skb->priority) + 1] = 0; + else + ieee->seq_ctrl[UP2AC(skb->priority) + 1]++; + } else { + if (ieee->seq_ctrl[0] == 0xFFF) + ieee->seq_ctrl[0] = 0; + else + ieee->seq_ctrl[0]++; } success: diff --git a/drivers/staging/rtl8192e/rtllib_wx.c b/drivers/staging/rtl8192e/rtllib_wx.c index e9469bfef3..a37250de7b 100644 --- a/drivers/staging/rtl8192e/rtllib_wx.c +++ b/drivers/staging/rtl8192e/rtllib_wx.c @@ -29,7 +29,7 @@ static inline char *rtl819x_translate_scan(struct rtllib_device *ieee, struct iw_request_info *info) { char custom[MAX_CUSTOM_LEN]; - char proto_name[IFNAMSIZ]; + char proto_name[6]; char *pname = proto_name; char *p; struct iw_event iwe; |