diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi/usb.c')
| -rw-r--r-- | drivers/net/wireless/rtlwifi/usb.c | 19 | 
1 files changed, 15 insertions, 4 deletions
| diff --git a/drivers/net/wireless/rtlwifi/usb.c b/drivers/net/wireless/rtlwifi/usb.c index f5d85735d642..a9367eba1ea7 100644 --- a/drivers/net/wireless/rtlwifi/usb.c +++ b/drivers/net/wireless/rtlwifi/usb.c @@ -852,6 +852,7 @@ static void _rtl_usb_tx_preprocess(struct ieee80211_hw *hw, struct sk_buff *skb,  	struct rtl_mac *mac = rtl_mac(rtl_priv(hw));  	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);  	struct rtl_tx_desc *pdesc = NULL; +	struct rtl_tcb_desc tcb_desc;  	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)(skb->data);  	__le16 fc = hdr->frame_control;  	u8 *pda_addr = hdr->addr1; @@ -860,8 +861,17 @@ static void _rtl_usb_tx_preprocess(struct ieee80211_hw *hw, struct sk_buff *skb,  	u8 tid = 0;  	u16 seq_number = 0; -	if (ieee80211_is_mgmt(fc)) -		rtl_tx_mgmt_proc(hw, skb); +	if (ieee80211_is_auth(fc)) { +		RT_TRACE(rtlpriv, COMP_SEND, DBG_DMESG, ("MAC80211_LINKING\n")); +		rtl_ips_nic_on(hw); +	} + +	if (rtlpriv->psc.sw_ps_enabled) { +		if (ieee80211_is_data(fc) && !ieee80211_is_nullfunc(fc) && +		    !ieee80211_has_pm(fc)) +			hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM); +	} +  	rtl_action_proc(hw, skb, true);  	if (is_multicast_ether_addr(pda_addr))  		rtlpriv->stats.txbytesmulticast += skb->len; @@ -878,7 +888,7 @@ static void _rtl_usb_tx_preprocess(struct ieee80211_hw *hw, struct sk_buff *skb,  		seq_number <<= 4;  	}  	rtlpriv->cfg->ops->fill_tx_desc(hw, hdr, (u8 *)pdesc, info, skb, -					hw_queue); +					hw_queue, &tcb_desc);  	if (!ieee80211_has_morefrags(hdr->frame_control)) {  		if (qc)  			mac->tids[tid].seq_number = seq_number; @@ -887,7 +897,8 @@ static void _rtl_usb_tx_preprocess(struct ieee80211_hw *hw, struct sk_buff *skb,  		rtlpriv->cfg->ops->led_control(hw, LED_CTL_TX);  } -static int rtl_usb_tx(struct ieee80211_hw *hw, struct sk_buff *skb) +static int rtl_usb_tx(struct ieee80211_hw *hw, struct sk_buff *skb, +		      struct rtl_tcb_desc *dummy)  {  	struct rtl_usb *rtlusb = rtl_usbdev(rtl_usbpriv(hw));  	struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); |