root/drivers/staging/rtl8723bs/hal/hal_sdio.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. rtw_hal_sdio_max_txoqt_free_space
  2. rtw_hal_sdio_query_tx_freepage
  3. rtw_hal_sdio_update_tx_freepage
  4. rtw_hal_set_sdio_tx_max_length
  5. rtw_hal_get_sdio_tx_max_length

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

/* [<][>][^][v][top][bottom][index][help] */