diff options
Diffstat (limited to 'drivers/net/wireless/realtek/rtlwifi/rtl8192ee/hw.c')
| -rw-r--r-- | drivers/net/wireless/realtek/rtlwifi/rtl8192ee/hw.c | 43 | 
1 files changed, 32 insertions, 11 deletions
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/hw.c index ef9394be7016..fe5da637e77a 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/hw.c +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/hw.c @@ -840,6 +840,31 @@ static bool _rtl92ee_init_mac(struct ieee80211_hw *hw)  	/* Set TCR register */  	rtl_write_dword(rtlpriv, REG_TCR, rtlpci->transmit_config); +	/* Set TX/RX descriptor physical address -- HI part */ +	if (!rtlpriv->cfg->mod_params->dma64) +		goto dma64_end; + +	rtl_write_dword(rtlpriv, REG_BCNQ_DESA + 4, +			((u64)rtlpci->tx_ring[BEACON_QUEUE].buffer_desc_dma) >> +				32); +	rtl_write_dword(rtlpriv, REG_MGQ_DESA + 4, +			(u64)rtlpci->tx_ring[MGNT_QUEUE].buffer_desc_dma >> 32); +	rtl_write_dword(rtlpriv, REG_VOQ_DESA + 4, +			(u64)rtlpci->tx_ring[VO_QUEUE].buffer_desc_dma >> 32); +	rtl_write_dword(rtlpriv, REG_VIQ_DESA + 4, +			(u64)rtlpci->tx_ring[VI_QUEUE].buffer_desc_dma >> 32); +	rtl_write_dword(rtlpriv, REG_BEQ_DESA + 4, +			(u64)rtlpci->tx_ring[BE_QUEUE].buffer_desc_dma >> 32); +	rtl_write_dword(rtlpriv, REG_BKQ_DESA + 4, +			(u64)rtlpci->tx_ring[BK_QUEUE].buffer_desc_dma >> 32); +	rtl_write_dword(rtlpriv, REG_HQ0_DESA + 4, +			(u64)rtlpci->tx_ring[HIGH_QUEUE].buffer_desc_dma >> 32); + +	rtl_write_dword(rtlpriv, REG_RX_DESA + 4, +			(u64)rtlpci->rx_ring[RX_MPDU_QUEUE].dma >> 32); + +dma64_end: +  	/* Set TX/RX descriptor physical address(from OS API). */  	rtl_write_dword(rtlpriv, REG_BCNQ_DESA,  			((u64)rtlpci->tx_ring[BEACON_QUEUE].buffer_desc_dma) & @@ -913,15 +938,9 @@ static bool _rtl92ee_init_mac(struct ieee80211_hw *hw)  	rtl_write_word(rtlpriv, REG_HI7Q_TXBD_NUM,  		       TX_DESC_NUM_92E | ((RTL8192EE_SEG_NUM << 12) & 0x3000));  	/*Rx*/ -#if (DMA_IS_64BIT == 1)  	rtl_write_word(rtlpriv, REG_RX_RXBD_NUM,  		       RX_DESC_NUM_92E |  		       ((RTL8192EE_SEG_NUM << 13) & 0x6000) | 0x8000); -#else -	rtl_write_word(rtlpriv, REG_RX_RXBD_NUM, -		       RX_DESC_NUM_92E | -		       ((RTL8192EE_SEG_NUM << 13) & 0x6000) | 0x0000); -#endif  	rtl_write_dword(rtlpriv, REG_TSFTIMER_HCI, 0XFFFFFFFF); @@ -1675,7 +1694,8 @@ void rtl92ee_card_disable(struct ieee80211_hw *hw)  }  void rtl92ee_interrupt_recognized(struct ieee80211_hw *hw, -				  u32 *p_inta, u32 *p_intb) +				  u32 *p_inta, u32 *p_intb, +				  u32 *p_intc, u32 *p_intd)  {  	struct rtl_priv *rtlpriv = rtl_priv(hw);  	struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); @@ -2251,7 +2271,7 @@ static u8 _rtl92ee_mrate_idx_to_arfr_id(struct ieee80211_hw *hw, u8 rate_index)  static void rtl92ee_update_hal_rate_mask(struct ieee80211_hw *hw,  					 struct ieee80211_sta *sta, -					 u8 rssi_level) +					 u8 rssi_level, bool update_bw)  {  	struct rtl_priv *rtlpriv = rtl_priv(hw);  	struct rtl_phy *rtlphy = &rtlpriv->phy; @@ -2370,7 +2390,7 @@ static void rtl92ee_update_hal_rate_mask(struct ieee80211_hw *hw,  				       (ratr_index << 28);  	rate_mask[0] = macid;  	rate_mask[1] = ratr_index | (b_shortgi ? 0x80 : 0x00); -	rate_mask[2] = curtxbw_40mhz; +	rate_mask[2] = curtxbw_40mhz | ((!update_bw) << 3);  	rate_mask[3] = (u8)(ratr_bitmap & 0x000000ff);  	rate_mask[4] = (u8)((ratr_bitmap & 0x0000ff00) >> 8);  	rate_mask[5] = (u8)((ratr_bitmap & 0x00ff0000) >> 16); @@ -2385,12 +2405,13 @@ static void rtl92ee_update_hal_rate_mask(struct ieee80211_hw *hw,  }  void rtl92ee_update_hal_rate_tbl(struct ieee80211_hw *hw, -				 struct ieee80211_sta *sta, u8 rssi_level) +				 struct ieee80211_sta *sta, u8 rssi_level, +				 bool update_bw)  {  	struct rtl_priv *rtlpriv = rtl_priv(hw);  	if (rtlpriv->dm.useramask) -		rtl92ee_update_hal_rate_mask(hw, sta, rssi_level); +		rtl92ee_update_hal_rate_mask(hw, sta, rssi_level, update_bw);  }  void rtl92ee_update_channel_access_setting(struct ieee80211_hw *hw)  | 

