1 // SPDX-License-Identifier: GPL-2.0
2 /******************************************************************************
4 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
6 ******************************************************************************/
10 #include <rtw_debug.h>
13 u8 rtw_hal_sdio_max_txoqt_free_space(struct adapter *padapter)
15 struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
17 if (pHalData->SdioTxOQTMaxFreeSpace < 8)
18 pHalData->SdioTxOQTMaxFreeSpace = 8;
20 return pHalData->SdioTxOQTMaxFreeSpace;
23 u8 rtw_hal_sdio_query_tx_freepage(
24 struct adapter *padapter, u8 PageIdx, u8 RequiredPageNum
27 struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
29 if ((pHalData->SdioTxFIFOFreePage[PageIdx]+pHalData->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX]) >= (RequiredPageNum))
35 void rtw_hal_sdio_update_tx_freepage(
36 struct adapter *padapter, u8 PageIdx, u8 RequiredPageNum
39 struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
40 u8 DedicatedPgNum = 0;
41 u8 RequiredPublicFreePgNum = 0;
44 /* spin_lock_bh(&pHalData->SdioTxFIFOFreePageLock); */
46 DedicatedPgNum = pHalData->SdioTxFIFOFreePage[PageIdx];
47 if (RequiredPageNum <= DedicatedPgNum) {
48 pHalData->SdioTxFIFOFreePage[PageIdx] -= RequiredPageNum;
50 pHalData->SdioTxFIFOFreePage[PageIdx] = 0;
51 RequiredPublicFreePgNum = RequiredPageNum - DedicatedPgNum;
52 pHalData->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX] -= RequiredPublicFreePgNum;
55 /* spin_unlock_bh(&pHalData->SdioTxFIFOFreePageLock); */
58 void rtw_hal_set_sdio_tx_max_length(
59 struct adapter *padapter, u8 numHQ, u8 numNQ, u8 numLQ, u8 numPubQ
62 struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
64 u32 lenHQ, lenNQ, lenLQ;
66 rtw_hal_get_def_var(padapter, HAL_DEF_TX_PAGE_SIZE, &page_size);
68 lenHQ = ((numHQ + numPubQ) >> 1) * page_size;
69 lenNQ = ((numNQ + numPubQ) >> 1) * page_size;
70 lenLQ = ((numLQ + numPubQ) >> 1) * page_size;
72 pHalData->sdio_tx_max_len[HI_QUEUE_IDX] =
73 (lenHQ > MAX_XMITBUF_SZ) ? MAX_XMITBUF_SZ : lenHQ;
74 pHalData->sdio_tx_max_len[MID_QUEUE_IDX] =
75 (lenNQ > MAX_XMITBUF_SZ) ? MAX_XMITBUF_SZ : lenNQ;
76 pHalData->sdio_tx_max_len[LOW_QUEUE_IDX] =
77 (lenLQ > MAX_XMITBUF_SZ) ? MAX_XMITBUF_SZ : lenLQ;
80 u32 rtw_hal_get_sdio_tx_max_length(struct adapter *padapter, u8 queue_idx)
82 struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
83 struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
84 u32 deviceId, max_len;
87 deviceId = ffaddr2deviceId(pdvobjpriv, queue_idx);
89 case WLAN_TX_HIQ_DEVICE_ID:
90 max_len = pHalData->sdio_tx_max_len[HI_QUEUE_IDX];
93 case WLAN_TX_MIQ_DEVICE_ID:
94 max_len = pHalData->sdio_tx_max_len[MID_QUEUE_IDX];
97 case WLAN_TX_LOQ_DEVICE_ID:
98 max_len = pHalData->sdio_tx_max_len[LOW_QUEUE_IDX];
102 max_len = pHalData->sdio_tx_max_len[MID_QUEUE_IDX];