File Index
Files and directories
Sign in
FILE

hal_sdio.c

File preview with syntax highlighting.

linux-6.19.14/drivers/staging/rtl8723bs/hal/hal_sdio.c C
  1// SPDX-License-Identifier: GPL-2.0
  2/******************************************************************************
  3 *
  4 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
  5 *
  6 ******************************************************************************/
  7
  8#include <drv_types.h>
  9#include <hal_data.h>
 10
 11u8 rtw_hal_sdio_max_txoqt_free_space(struct adapter *padapter)
 12{
 13	struct hal_com_data	*pHalData = GET_HAL_DATA(padapter);
 14
 15	if (pHalData->SdioTxOQTMaxFreeSpace < 8)
 16		pHalData->SdioTxOQTMaxFreeSpace = 8;
 17
 18	return pHalData->SdioTxOQTMaxFreeSpace;
 19}
 20
 21u8 rtw_hal_sdio_query_tx_freepage(
 22	struct adapter *padapter, u8 PageIdx, u8 RequiredPageNum
 23)
 24{
 25	struct hal_com_data	*pHalData = GET_HAL_DATA(padapter);
 26
 27	if ((pHalData->SdioTxFIFOFreePage[PageIdx]+pHalData->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX]) >= (RequiredPageNum))
 28		return true;
 29	else
 30		return false;
 31}
 32
 33void rtw_hal_sdio_update_tx_freepage(
 34	struct adapter *padapter, u8 PageIdx, u8 RequiredPageNum
 35)
 36{
 37	struct hal_com_data	*pHalData = GET_HAL_DATA(padapter);
 38	u8 DedicatedPgNum = 0;
 39	u8 RequiredPublicFreePgNum = 0;
 40	/* _irqL irql; */
 41
 42	/* spin_lock_bh(&pHalData->SdioTxFIFOFreePageLock); */
 43
 44	DedicatedPgNum = pHalData->SdioTxFIFOFreePage[PageIdx];
 45	if (RequiredPageNum <= DedicatedPgNum) {
 46		pHalData->SdioTxFIFOFreePage[PageIdx] -= RequiredPageNum;
 47	} else {
 48		pHalData->SdioTxFIFOFreePage[PageIdx] = 0;
 49		RequiredPublicFreePgNum = RequiredPageNum - DedicatedPgNum;
 50		pHalData->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX] -= RequiredPublicFreePgNum;
 51	}
 52
 53	/* spin_unlock_bh(&pHalData->SdioTxFIFOFreePageLock); */
 54}
 55
 56void rtw_hal_set_sdio_tx_max_length(
 57	struct adapter *padapter, u8 numHQ, u8 numNQ, u8 numLQ, u8 numPubQ
 58)
 59{
 60	struct hal_com_data	*pHalData = GET_HAL_DATA(padapter);
 61	u32 page_size;
 62	u32 lenHQ, lenNQ, lenLQ;
 63
 64	rtw_hal_get_def_var(padapter, HAL_DEF_TX_PAGE_SIZE, &page_size);
 65
 66	lenHQ = ((numHQ + numPubQ) >> 1) * page_size;
 67	lenNQ = ((numNQ + numPubQ) >> 1) * page_size;
 68	lenLQ = ((numLQ + numPubQ) >> 1) * page_size;
 69
 70	pHalData->sdio_tx_max_len[HI_QUEUE_IDX] =
 71		(lenHQ > MAX_XMITBUF_SZ) ? MAX_XMITBUF_SZ : lenHQ;
 72	pHalData->sdio_tx_max_len[MID_QUEUE_IDX] =
 73		(lenNQ > MAX_XMITBUF_SZ) ? MAX_XMITBUF_SZ : lenNQ;
 74	pHalData->sdio_tx_max_len[LOW_QUEUE_IDX] =
 75		(lenLQ > MAX_XMITBUF_SZ) ? MAX_XMITBUF_SZ : lenLQ;
 76}
 77
 78u32 rtw_hal_get_sdio_tx_max_length(struct adapter *padapter, u8 queue_idx)
 79{
 80	struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
 81	struct hal_com_data	*pHalData = GET_HAL_DATA(padapter);
 82	u32 deviceId, max_len;
 83
 84
 85	deviceId = ffaddr2deviceId(pdvobjpriv, queue_idx);
 86	switch (deviceId) {
 87	case WLAN_TX_HIQ_DEVICE_ID:
 88		max_len = pHalData->sdio_tx_max_len[HI_QUEUE_IDX];
 89		break;
 90
 91	case WLAN_TX_MIQ_DEVICE_ID:
 92		max_len = pHalData->sdio_tx_max_len[MID_QUEUE_IDX];
 93		break;
 94
 95	case WLAN_TX_LOQ_DEVICE_ID:
 96		max_len = pHalData->sdio_tx_max_len[LOW_QUEUE_IDX];
 97		break;
 98
 99	default:
100		max_len = pHalData->sdio_tx_max_len[MID_QUEUE_IDX];
101		break;
102	}
103
104	return max_len;
105}
~/ Read-only file preview.