diff options
Diffstat (limited to 'sys/contrib/dev/rtw88/sdio.c')
| -rw-r--r-- | sys/contrib/dev/rtw88/sdio.c | 37 | 
1 files changed, 21 insertions, 16 deletions
| diff --git a/sys/contrib/dev/rtw88/sdio.c b/sys/contrib/dev/rtw88/sdio.c index e024061bdbf7..cc2d4fef3587 100644 --- a/sys/contrib/dev/rtw88/sdio.c +++ b/sys/contrib/dev/rtw88/sdio.c @@ -10,6 +10,7 @@  #include <linux/mmc/host.h>  #include <linux/mmc/sdio_func.h>  #include "main.h" +#include "mac.h"  #include "debug.h"  #include "fw.h"  #include "ps.h" @@ -546,7 +547,7 @@ static int rtw_sdio_check_free_txpg(struct rtw_dev *rtwdev, u8 queue,  {  	unsigned int pages_free, pages_needed; -	if (rtw_chip_wcpu_11n(rtwdev)) { +	if (rtw_chip_wcpu_8051(rtwdev)) {  		u32 free_txpg;  		free_txpg = rtw_sdio_read32(rtwdev, REG_SDIO_FREE_TXPG); @@ -677,12 +678,22 @@ static void rtw_sdio_enable_rx_aggregation(struct rtw_dev *rtwdev)  {  	u8 size, timeout; -	if (rtw_chip_wcpu_11n(rtwdev)) { +	switch (rtwdev->chip->id) { +	case RTW_CHIP_TYPE_8703B: +	case RTW_CHIP_TYPE_8821A: +	case RTW_CHIP_TYPE_8812A:  		size = 0x6;  		timeout = 0x6; -	} else { +		break; +	case RTW_CHIP_TYPE_8723D: +		size = 0xa; +		timeout = 0x3; +		rtw_write8_set(rtwdev, REG_RXDMA_AGG_PG_TH + 3, BIT(7)); +		break; +	default:  		size = 0xff;  		timeout = 0x1; +		break;  	}  	/* Make the firmware honor the size limit configured below */ @@ -718,10 +729,7 @@ static u8 rtw_sdio_get_tx_qsel(struct rtw_dev *rtwdev, struct sk_buff *skb,  	case RTW_TX_QUEUE_H2C:  		return TX_DESC_QSEL_H2C;  	case RTW_TX_QUEUE_MGMT: -		if (rtw_chip_wcpu_11n(rtwdev)) -			return TX_DESC_QSEL_HIGH; -		else -			return TX_DESC_QSEL_MGMT; +		return TX_DESC_QSEL_MGMT;  	case RTW_TX_QUEUE_HI0:  		return TX_DESC_QSEL_HIGH;  	default: @@ -1022,7 +1030,7 @@ static void rtw_sdio_rx_isr(struct rtw_dev *rtwdev)  	u32 rx_len, hisr, total_rx_bytes = 0;  	do { -		if (rtw_chip_wcpu_11n(rtwdev)) +		if (rtw_chip_wcpu_8051(rtwdev))  			rx_len = rtw_read16(rtwdev, REG_SDIO_RX0_REQ_LEN);  		else  			rx_len = rtw_read32(rtwdev, REG_SDIO_RX0_REQ_LEN); @@ -1034,7 +1042,7 @@ static void rtw_sdio_rx_isr(struct rtw_dev *rtwdev)  		total_rx_bytes += rx_len; -		if (rtw_chip_wcpu_11n(rtwdev)) { +		if (rtw_chip_wcpu_8051(rtwdev)) {  			/* Stop if no more RX requests are pending, even if  			 * rx_len could be greater than zero in the next  			 * iteration. This is needed because the RX buffer may @@ -1046,7 +1054,7 @@ static void rtw_sdio_rx_isr(struct rtw_dev *rtwdev)  			 */  			hisr = rtw_read32(rtwdev, REG_SDIO_HISR);  		} else { -			/* RTW_WCPU_11AC chips have improved hardware or +			/* RTW_WCPU_3081 chips have improved hardware or  			 * firmware and can use rx_len unconditionally.  			 */  			hisr = REG_SDIO_HISR_RX_REQUEST; @@ -1147,7 +1155,7 @@ static void rtw_sdio_declaim(struct rtw_dev *rtwdev,  	sdio_release_host(sdio_func);  } -static struct rtw_hci_ops rtw_sdio_ops = { +static const struct rtw_hci_ops rtw_sdio_ops = {  	.tx_write = rtw_sdio_tx_write,  	.tx_kick_off = rtw_sdio_tx_kick_off,  	.setup = rtw_sdio_setup, @@ -1157,6 +1165,7 @@ static struct rtw_hci_ops rtw_sdio_ops = {  	.link_ps = rtw_sdio_link_ps,  	.interface_cfg = rtw_sdio_interface_cfg,  	.dynamic_rx_agg = NULL, +	.write_firmware_page = rtw_write_firmware_page,  	.read8 = rtw_sdio_read8,  	.read16 = rtw_sdio_read16, @@ -1227,10 +1236,7 @@ static void rtw_sdio_process_tx_queue(struct rtw_dev *rtwdev,  		return;  	} -	if (queue <= RTW_TX_QUEUE_VO) -		rtw_sdio_indicate_tx_status(rtwdev, skb); -	else -		dev_kfree_skb_any(skb); +	rtw_sdio_indicate_tx_status(rtwdev, skb);  }  static void rtw_sdio_tx_handler(struct work_struct *work) @@ -1298,7 +1304,6 @@ static void rtw_sdio_deinit_tx(struct rtw_dev *rtwdev)  	struct rtw_sdio *rtwsdio = (struct rtw_sdio *)rtwdev->priv;  	int i; -	flush_workqueue(rtwsdio->txwq);  	destroy_workqueue(rtwsdio->txwq);  	kfree(rtwsdio->tx_handler_data); | 
