blob: b42602ea610963bdc189f7d93ea451c980a3e6e2 [file]
/******************************************************************************
*
* This file is provided under a dual license. When you use or
* distribute this software, you may choose to be licensed under
* version 2 of the GNU General Public License ("GPLv2 License")
* or BSD License.
*
* GPLv2 License
*
* Copyright(C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*
* BSD LICENSE
*
* Copyright(C) 2016 MediaTek Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*****************************************************************************/
/*! \file "hal.h"
* \brief The declaration of hal functions
*
* N/A
*/
#ifndef _HAL_H
#define _HAL_H
/*******************************************************************************
* C O M P I L E R F L A G S
*******************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
*******************************************************************************
*/
/*******************************************************************************
* C O N S T A N T S
*******************************************************************************
*/
/*******************************************************************************
* D A T A T Y P E S
*******************************************************************************
*/
/*******************************************************************************
* P U B L I C D A T A
*******************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
*******************************************************************************
*/
/*******************************************************************************
* M A C R O S
*******************************************************************************
*/
/* Macros for flag operations for the Adapter structure */
#define HAL_SET_FLAG(_M, _F) ((_M)->u4HwFlags |= (_F))
#define HAL_CLEAR_FLAG(_M, _F) ((_M)->u4HwFlags &= ~(_F))
#define HAL_TEST_FLAG(_M, _F) ((_M)->u4HwFlags & (_F))
#define HAL_TEST_FLAGS(_M, _F) (((_M)->u4HwFlags & (_F)) == (_F))
#if CFG_SUPPORT_SNIFFER
#define HAL_MON_EN(_prAdapter) (_prAdapter->prGlueInfo->fgIsEnableMon)
#else
#define HAL_MON_EN(_prAdapter) FALSE
#endif
#if defined(_HIF_SDIO)
#define HAL_MCR_RD(_prAdapter, _u4Offset, _pu4Value) \
do { \
if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \
if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \
ASSERT(0); \
} \
if (_u4Offset > 0xFFFF) { \
if (kalDevRegRead_mac(_prAdapter->prGlueInfo, \
_u4Offset, _pu4Value) == FALSE) {\
HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \
fgIsBusAccessFailed = TRUE; \
DBGLOG(HAL, ERROR, \
"HAL_MCR_RD (MAC) access fail! 0x%x: 0x%x\n", \
(uint32_t) (_u4Offset), \
*((uint32_t *) (_pu4Value))); \
} \
} else { \
if (kalDevRegRead(_prAdapter->prGlueInfo, \
_u4Offset, _pu4Value) == FALSE) {\
HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \
fgIsBusAccessFailed = TRUE; \
DBGLOG(HAL, ERROR, \
"HAL_MCR_RD (SDIO) access fail! 0x%x: 0x%x\n", \
(uint32_t) (_u4Offset), \
*((uint32_t *) (_pu4Value))); \
} \
} \
} else { \
DBGLOG(HAL, WARN, "ignore HAL_MCR_RD access! 0x%x\n", \
(uint32_t) (_u4Offset)); \
} \
} while (0)
#define HAL_MCR_WR(_prAdapter, _u4Offset, _u4Value) \
do { \
if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \
if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \
ASSERT(0); \
} \
if (_u4Offset > 0xFFFF) { \
if (kalDevRegWrite_mac(_prAdapter->prGlueInfo, \
_u4Offset, _u4Value) == FALSE) {\
HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \
fgIsBusAccessFailed = TRUE; \
DBGLOG(HAL, ERROR, \
"HAL_MCR_WR (MAC) access fail! 0x%x: 0x%x\n", \
(uint32_t) (_u4Offset), \
(uint32_t) (_u4Value)); \
} \
} else { \
if (kalDevRegWrite(_prAdapter->prGlueInfo, \
_u4Offset, _u4Value) == FALSE) {\
HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \
fgIsBusAccessFailed = TRUE; \
DBGLOG(HAL, ERROR, \
"HAL_MCR_WR (SDIO) access fail! 0x%x: 0x%x\n", \
(uint32_t) (_u4Offset), \
(uint32_t) (_u4Value)); \
} \
} \
} else { \
DBGLOG(HAL, WARN, "ignore HAL_MCR_WR access! 0x%x: 0x%x\n", \
(uint32_t) (_u4Offset), (uint32_t) (_u4Value)); \
} \
} while (0)
#define HAL_PORT_RD(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \
{ \
/*fgResult = FALSE; */\
if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \
ASSERT(0); \
} \
if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \
if (kalDevPortRead(_prAdapter->prGlueInfo, _u4Port, _u4Len, \
_pucBuf, _u4ValidBufSize) == FALSE) {\
HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \
fgIsBusAccessFailed = TRUE; \
DBGLOG(HAL, ERROR, "HAL_PORT_RD access fail! 0x%x\n", \
(uint32_t) (_u4Port)); \
} \
else { \
/*fgResult = TRUE;*/ } \
} else { \
DBGLOG(HAL, WARN, "ignore HAL_PORT_RD access! 0x%x\n", \
(uint32_t) (_u4Port)); \
} \
}
#define HAL_PORT_WR(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \
{ \
/*fgResult = FALSE; */\
if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \
ASSERT(0); \
} \
if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \
if (kalDevPortWrite(_prAdapter->prGlueInfo, _u4Port, \
_u4Len, _pucBuf, _u4ValidBufSize) == FALSE) {\
HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \
fgIsBusAccessFailed = TRUE; \
DBGLOG(HAL, ERROR, "HAL_PORT_WR access fail! 0x%x\n", \
(uint32_t) (_u4Port)); \
} \
else \
; /*fgResult = TRUE;*/ \
} else { \
DBGLOG(HAL, WARN, "ignore HAL_PORT_WR access! 0x%x\n", \
(uint32_t) (_u4Port)); \
} \
}
#define HAL_BYTE_WR(_prAdapter, _u4Port, _ucBuf) \
{ \
if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \
ASSERT(0); \
} \
if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \
if (kalDevWriteWithSdioCmd52(_prAdapter->prGlueInfo, \
_u4Port, _ucBuf) == FALSE) {\
HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \
fgIsBusAccessFailed = TRUE; \
DBGLOG(HAL, ERROR, "HAL_BYTE_WR access fail! 0x%x\n", \
(uint32_t)(_u4Port)); \
} \
else { \
/* Todo:: Nothing*/ \
} \
} \
else { \
DBGLOG(HAL, WARN, "ignore HAL_BYTE_WR access! 0x%x\n", \
(uint32_t) (_u4Port)); \
} \
}
#define HAL_DRIVER_OWN_BY_SDIO_CMD52(_prAdapter, _pfgDriverIsOwnReady) \
{ \
uint8_t ucBuf = BIT(1); \
if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \
ASSERT(0); \
} \
if (HAL_TEST_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR) == FALSE) { \
if (kalDevReadAfterWriteWithSdioCmd52(_prAdapter->prGlueInfo, \
MCR_WHLPCR_BYTE1, &ucBuf, 1) == FALSE) {\
HAL_SET_FLAG(_prAdapter, ADAPTER_FLAG_HW_ERR); \
fgIsBusAccessFailed = TRUE; \
DBGLOG(HAL, ERROR, \
"kalDevReadAfterWriteWithSdioCmd52 access fail!\n"); \
} \
else { \
*_pfgDriverIsOwnReady = (ucBuf & BIT(0)) \
? TRUE : FALSE; \
} \
} else { \
DBGLOG(HAL, WARN, \
"ignore HAL_DRIVER_OWN_BY_SDIO_CMD52 access!\n"); \
} \
}
#else /* #if defined(_HIF_SDIO) */
#define HAL_MCR_RD(_prAdapter, _u4Offset, _pu4Value) \
{ \
if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \
ASSERT(0); \
} \
kalDevRegRead(_prAdapter->prGlueInfo, _u4Offset, _pu4Value); \
}
#define HAL_MCR_WR(_prAdapter, _u4Offset, _u4Value) \
{ \
if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \
ASSERT(0); \
} \
kalDevRegWrite(_prAdapter->prGlueInfo, _u4Offset, _u4Value); \
}
#define HAL_PORT_RD(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \
{ \
if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \
ASSERT(0); \
} \
kalDevPortRead(_prAdapter->prGlueInfo, _u4Port, \
_u4Len, _pucBuf, _u4ValidBufSize); \
}
#define HAL_PORT_WR(_prAdapter, _u4Port, _u4Len, _pucBuf, _u4ValidBufSize) \
{ \
if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \
ASSERT(0); \
} \
kalDevPortWrite(_prAdapter->prGlueInfo, _u4Port, \
_u4Len, _pucBuf, _u4ValidBufSize); \
}
#define HAL_BYTE_WR(_prAdapter, _u4Port, _ucBuf) \
{ \
HAL_MCR_WR(_prAdapter, _u4Port, (uint32_t)_ucBuf); \
}
#endif /* #if defined(_HIF_SDIO) */
#define HAL_WRITE_TX_DATA(_prAdapter, _prMsduInfo) \
{ \
if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \
ASSERT(0); \
} \
kalDevWriteData(_prAdapter->prGlueInfo, _prMsduInfo); \
}
#define HAL_KICK_TX_DATA(_prAdapter) \
{ \
if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \
ASSERT(0); \
} \
kalDevKickData(_prAdapter->prGlueInfo); \
}
#define HAL_WRITE_TX_CMD(_prAdapter, _prCmdInfo, _ucTC) \
{ \
if (_prAdapter->rAcpiState == ACPI_STATE_D3) { \
ASSERT(0); \
} \
kalDevWriteCmd(_prAdapter->prGlueInfo, _prCmdInfo, _ucTC); \
}
#if defined(_HIF_PCIE) || defined(_HIF_AXI)
#define HAL_READ_RX_PORT(prAdapter, u4PortId, u4Len, pvBuf, _u4ValidBufSize) \
{ \
ASSERT(u4PortId < 2); \
HAL_PORT_RD(prAdapter, \
u4PortId, \
u4Len, \
pvBuf, \
_u4ValidBufSize/*temp!!*//*4Kbyte*/) \
}
#define HAL_WRITE_TX_PORT(_prAdapter, _u4PortId, _u4Len, _pucBuf, _u4BufSize) \
{ \
HAL_PORT_WR(_prAdapter, \
_u4PortId, \
_u4Len, \
_pucBuf, \
_u4BufSize/*temp!!*//*4KByte*/) \
}
#define HAL_MCR_RD_AND_WAIT(_pAdapter, _offset, _pReadValue, \
_waitCondition, _waitDelay, _waitCount, _status)
#define HAL_MCR_WR_AND_WAIT(_pAdapter, _offset, _writeValue, \
_busyMask, _waitDelay, _waitCount, _status)
#define HAL_GET_CHIP_ID_VER(_prAdapter, pu2ChipId, pu2Version) \
{ \
uint32_t u4Value = 0; \
HAL_MCR_RD(_prAdapter, HIF_SYS_REV, &u4Value); \
*pu2ChipId = ((u4Value & PCIE_HIF_SYS_PROJ) >> 16); \
*pu2Version = (u4Value & PCIE_HIF_SYS_REV); \
}
#define HAL_WIFI_FUNC_READY_CHECK(_prAdapter, _checkItem, _pfgResult) \
do { \
struct mt66xx_chip_info *prChipInfo = NULL; \
uint32_t u4Value = 0; \
if (!_prAdapter->chip_info) \
ASSERT(0); \
*_pfgResult = FALSE; \
prChipInfo = _prAdapter->chip_info; \
HAL_MCR_RD(_prAdapter, prChipInfo->sw_sync0, &u4Value); \
if ((u4Value & (_checkItem << prChipInfo->sw_ready_bit_offset)) \
== (_checkItem << prChipInfo->sw_ready_bit_offset)) \
*_pfgResult = TRUE; \
} while (0)
#define HAL_WIFI_FUNC_OFF_CHECK(_prAdapter, _checkItem, _pfgResult) \
do { \
u_int8_t fgLpOwnResult; \
HAL_WIFI_FUNC_READY_CHECK(_prAdapter, _checkItem, _pfgResult); \
if (*_pfgResult) { \
HAL_LP_OWN_RD(_prAdapter, &fgLpOwnResult); \
if (fgLpOwnResult == FALSE) { \
DBGLOG(INIT, INFO, \
"HAL_LP_OWN_RD %d\n", fgLpOwnResult); \
HAL_LP_OWN_SET(prAdapter, &fgLpOwnResult); \
DBGLOG(INIT, INFO, \
"HAL_LP_OWN_SET %d\n", fgLpOwnResult); \
} \
} \
*_pfgResult = !*_pfgResult; \
} while (0)
#define HAL_WIFI_FUNC_GET_STATUS(_prAdapter, _u4Result) \
do { \
struct mt66xx_chip_info *prChipInfo = NULL; \
struct BUS_INFO *prBusInfo = NULL; \
uint32_t u4Value = 0; \
if (!_prAdapter->chip_info || !_prAdapter->chip_info->bus_info) \
ASSERT(0); \
prChipInfo = _prAdapter->chip_info; \
prBusInfo = prChipInfo->bus_info; \
HAL_MCR_RD(_prAdapter, prChipInfo->sw_sync0, &_u4Result); \
if (prBusInfo->getMailboxStatus) { \
prBusInfo->getMailboxStatus(_prAdapter, &u4Value); \
DBGLOG(INIT, INFO, "Mailbox: 0x%x\n", u4Value); \
} \
} while (0)
#define HAL_INTR_DISABLE(_prAdapter)
#define HAL_INTR_ENABLE(_prAdapter)
#define HAL_INTR_ENABLE_AND_LP_OWN_SET(_prAdapter)
/* Polling interrupt status bit due to CFG_PCIE_LPCR_HOST
* status bit not work when chip sleep
*/
#define HAL_LP_OWN_RD(_prAdapter, _pfgResult) \
do { \
struct mt66xx_chip_info *prChipInfo = NULL; \
struct BUS_INFO *prBusInfo = NULL; \
if (!_prAdapter->chip_info || !_prAdapter->chip_info->bus_info) \
ASSERT(0); \
prChipInfo = _prAdapter->chip_info; \
prBusInfo = prChipInfo->bus_info; \
prBusInfo->lowPowerOwnRead(_prAdapter, _pfgResult); \
} while (0)
#define HAL_LP_OWN_SET(_prAdapter, _pfgResult) \
do { \
struct mt66xx_chip_info *prChipInfo = NULL; \
struct BUS_INFO *prBusInfo = NULL; \
if (!_prAdapter->chip_info || !_prAdapter->chip_info->bus_info) \
ASSERT(0); \
prChipInfo = _prAdapter->chip_info; \
prBusInfo = prChipInfo->bus_info; \
prBusInfo->lowPowerOwnSet(_prAdapter, _pfgResult); \
} while (0)
#define HAL_LP_OWN_CLR(_prAdapter, _pfgResult) \
do { \
struct mt66xx_chip_info *prChipInfo = NULL; \
struct BUS_INFO *prBusInfo = NULL; \
if (!_prAdapter->chip_info || !_prAdapter->chip_info->bus_info) \
ASSERT(0); \
prChipInfo = _prAdapter->chip_info; \
prBusInfo = prChipInfo->bus_info; \
prBusInfo->lowPowerOwnClear(_prAdapter, _pfgResult); \
} while (0)
#define HAL_GET_ABNORMAL_INTERRUPT_REASON_CODE(_prAdapter, pu4AbnormalReason)
#define HAL_DISABLE_RX_ENHANCE_MODE(_prAdapter)
#define HAL_ENABLE_RX_ENHANCE_MODE(_prAdapter)
#define HAL_CFG_MAX_HIF_RX_LEN_NUM(_prAdapter, _ucNumOfRxLen)
#define HAL_SET_INTR_STATUS_READ_CLEAR(prAdapter)
#define HAL_SET_INTR_STATUS_WRITE_1_CLEAR(prAdapter)
#define HAL_READ_INTR_STATUS(prAdapter, length, pvBuf)
#define HAL_READ_TX_RELEASED_COUNT(_prAdapter, au2TxReleaseCount)
#define HAL_READ_RX_LENGTH(prAdapter, pu2Rx0Len, pu2Rx1Len)
#define HAL_GET_INTR_STATUS_FROM_ENHANCE_MODE_STRUCT(pvBuf, u2Len, pu4Status)
#define HAL_GET_TX_STATUS_FROM_ENHANCE_MODE_STRUCT(pvInBuf, \
pu4BufOut, u4LenBufOut)
#define HAL_GET_RX_LENGTH_FROM_ENHANCE_MODE_STRUCT(pvInBuf, \
pu2Rx0Num, au2Rx0Len, pu2Rx1Num, au2Rx1Len)
#define HAL_GET_MAILBOX_FROM_ENHANCE_MODE_STRUCT(pvInBuf, \
pu4Mailbox0, pu4Mailbox1)
#define HAL_IS_TX_DONE_INTR(u4IntrStatus) \
((u4IntrStatus & (WPDMA_TX_DONE_INT0 | \
WPDMA_TX_DONE_INT1 | WPDMA_TX_DONE_INT2 | WPDMA_TX_DONE_INT3 | \
WPDMA_TX_DONE_INT15)) ? TRUE : FALSE)
#define HAL_IS_RX_DONE_INTR(u4IntrStatus) \
((u4IntrStatus & (WPDMA_RX_DONE_INT0 | WPDMA_RX_DONE_INT1)) \
? TRUE : FALSE)
#define HAL_IS_ABNORMAL_INTR(u4IntrStatus)
#define HAL_IS_FW_OWNBACK_INTR(u4IntrStatus)
#define HAL_PUT_MAILBOX(prAdapter, u4MboxId, u4Data)
#define HAL_GET_MAILBOX(prAdapter, u4MboxId, pu4Data)
#define HAL_SET_MAILBOX_READ_CLEAR(prAdapter, fgEnableReadClear) \
{ \
prAdapter->prGlueInfo->rHifInfo.fgMbxReadClear = fgEnableReadClear;\
}
#define HAL_GET_MAILBOX_READ_CLEAR(prAdapter) \
(prAdapter->prGlueInfo->rHifInfo.fgMbxReadClear)
#define HAL_READ_INT_STATUS(prAdapter, _pu4IntStatus) \
{ \
kalDevReadIntStatus(prAdapter, _pu4IntStatus);\
}
#define HAL_HIF_INIT(prAdapter)
#define HAL_ENABLE_FWDL(_prAdapter, _fgEnable) \
{ \
halEnableFWDownload(_prAdapter, _fgEnable); \
}
#define HAL_WAKE_UP_WIFI(_prAdapter) \
{ \
halWakeUpWiFi(_prAdapter);\
}
#define HAL_CLEAR_DUMMY_REQ(_prAdapter) \
{ \
struct mt66xx_chip_info *prChipInfo = NULL; \
uint32_t u4Value = 0; \
if (!_prAdapter->chip_info) {\
ASSERT(0); \
} else {\
prChipInfo = _prAdapter->chip_info; \
HAL_MCR_RD(_prAdapter, prChipInfo->sw_sync0, &u4Value); \
u4Value &= ~(WIFI_FUNC_DUMMY_REQ << \
prChipInfo->sw_ready_bit_offset);\
HAL_MCR_WR(prAdapter, prChipInfo->sw_sync0, u4Value);\
} \
}
#define HAL_IS_TX_DIRECT(_prAdapter) FALSE
#define HAL_IS_RX_DIRECT(_prAdapter) FALSE
#define HAL_HAS_AGG_THREAD(_prAdapter) FALSE
#define HAL_AGG_THREAD(_prAdapter)
#define HAL_AGG_THREAD_WAKE_UP(_prAdapter)
#define HAL_AGG_KICK_DATA(_prAdapter)
#endif
#if defined(_HIF_SDIO)
#define HIF_H2D_SW_INT_SHFT (16)
/* bit16 */
#define SDIO_MAILBOX_FUNC_READ_REG_IDX (BIT(0) << HIF_H2D_SW_INT_SHFT)
/* bit17 */
#define SDIO_MAILBOX_FUNC_WRITE_REG_IDX (BIT(1) << HIF_H2D_SW_INT_SHFT)
/* bit18 */
#define SDIO_MAILBOX_FUNC_CHECKSUN16_IDX (BIT(2) << HIF_H2D_SW_INT_SHFT)
#define HAL_READ_RX_PORT(prAdapter, u4PortId, u4Len, pvBuf, _u4ValidBufSize) \
{ \
ASSERT(u4PortId < 2); \
HAL_PORT_RD(prAdapter, \
((u4PortId == 0) ? MCR_WRDR0 : MCR_WRDR1), \
u4Len, \
pvBuf, \
_u4ValidBufSize/*temp!!*//*4Kbyte*/) \
}
#define HAL_WRITE_TX_PORT(_prAdapter, _u4PortId, _u4Len, _pucBuf, _u4BufSize) \
{ \
if ((_u4BufSize - _u4Len) >= sizeof(uint32_t)) { \
/* fill with single dword of zero as TX-aggregation end */ \
*(uint32_t *) (&((_pucBuf)[ALIGN_4(_u4Len)])) = 0; \
} \
HAL_PORT_WR(_prAdapter, \
MCR_WTDR1, \
_u4Len, \
_pucBuf, \
_u4BufSize/*temp!!*//*4KByte*/) \
}
/* The macro to read the given MCR several times to check if the wait
* condition come true.
*/
#define HAL_MCR_RD_AND_WAIT(_pAdapter, _offset, _pReadValue, \
_waitCondition, _waitDelay, _waitCount, _status) \
{ \
uint32_t count = 0; \
(_status) = FALSE; \
for (count = 0; count < (_waitCount); count++) { \
HAL_MCR_RD((_pAdapter), (_offset), (_pReadValue)); \
if ((_waitCondition)) { \
(_status) = TRUE; \
break; \
} \
kalUdelay((_waitDelay)); \
} \
}
/* The macro to write 1 to a R/S bit and read it several times to check if the
* command is done
*/
#define HAL_MCR_WR_AND_WAIT(_pAdapter, _offset, _writeValue, _busyMask, \
_waitDelay, _waitCount, _status) \
{ \
uint32_t u4Temp = 0; \
uint32_t u4Count = _waitCount; \
(_status) = FALSE; \
HAL_MCR_WR((_pAdapter), (_offset), (_writeValue)); \
do { \
kalUdelay((_waitDelay)); \
HAL_MCR_RD((_pAdapter), (_offset), &u4Temp); \
if (!(u4Temp & (_busyMask))) { \
(_status) = TRUE; \
break; \
} \
u4Count--; \
} while (u4Count); \
}
#define HAL_GET_CHIP_ID_VER(_prAdapter, pu2ChipId, pu2Version) \
{ \
uint32_t u4Value = 0; \
HAL_MCR_RD(_prAdapter, \
MCR_WCIR, \
&u4Value); \
*pu2ChipId = (uint16_t)(u4Value & WCIR_CHIP_ID); \
*pu2Version = (uint16_t)(u4Value & WCIR_REVISION_ID) >> 16; \
}
#define HAL_WIFI_FUNC_READY_CHECK(_prAdapter, _checkItem, _pfgResult) \
do { \
uint32_t u4Value = 0; \
*_pfgResult = FALSE; \
HAL_MCR_RD(_prAdapter, \
MCR_WCIR, \
&u4Value); \
if (u4Value & WCIR_WLAN_READY) { \
*_pfgResult = TRUE; \
} \
} while (0)
#define HAL_WIFI_FUNC_OFF_CHECK(_prAdapter, _checkItem, _pfgResult) \
do { \
uint32_t u4Value = 0; \
*_pfgResult = FALSE; \
HAL_MCR_RD(_prAdapter, MCR_WCIR, &u4Value); \
if ((u4Value & WCIR_WLAN_READY) == 0) { \
*_pfgResult = TRUE; \
} \
halPrintMailbox(_prAdapter);\
halPollDbgCr(_prAdapter, LP_DBGCR_POLL_ROUND); \
} while (0)
#define HAL_WIFI_FUNC_GET_STATUS(_prAdapter, _u4Result) \
halGetMailbox(_prAdapter, 0, &_u4Result)
#define HAL_INTR_DISABLE(_prAdapter) \
HAL_MCR_WR(_prAdapter, \
MCR_WHLPCR, \
WHLPCR_INT_EN_CLR)
#define HAL_INTR_ENABLE(_prAdapter) \
HAL_MCR_WR(_prAdapter, \
MCR_WHLPCR, \
WHLPCR_INT_EN_SET)
#define HAL_INTR_ENABLE_AND_LP_OWN_SET(_prAdapter) \
HAL_MCR_WR(_prAdapter, \
MCR_WHLPCR, \
(WHLPCR_INT_EN_SET | WHLPCR_FW_OWN_REQ_SET))
#define HAL_LP_OWN_RD(_prAdapter, _pfgResult) \
{ \
uint32_t u4RegValue = 0; \
*_pfgResult = FALSE; \
HAL_MCR_RD(_prAdapter, MCR_WHLPCR, &u4RegValue); \
if (u4RegValue & WHLPCR_IS_DRIVER_OWN) { \
*_pfgResult = TRUE; \
} \
}
#define HAL_LP_OWN_SET(_prAdapter, _pfgResult) \
{ \
uint32_t u4RegValue = 0; \
*_pfgResult = FALSE; \
HAL_MCR_WR(_prAdapter, \
MCR_WHLPCR, \
WHLPCR_FW_OWN_REQ_SET); \
HAL_MCR_RD(_prAdapter, MCR_WHLPCR, &u4RegValue); \
if (u4RegValue & WHLPCR_IS_DRIVER_OWN) { \
*_pfgResult = TRUE; \
} \
}
#define HAL_LP_OWN_CLR(_prAdapter, _pfgResult) \
{ \
uint32_t u4RegValue = 0; \
*_pfgResult = FALSE; \
/* Software get LP ownership */ \
HAL_MCR_WR(_prAdapter, \
MCR_WHLPCR, \
WHLPCR_FW_OWN_REQ_CLR); \
HAL_MCR_RD(_prAdapter, MCR_WHLPCR, &u4RegValue); \
if (u4RegValue & WHLPCR_IS_DRIVER_OWN) { \
*_pfgResult = TRUE; \
} \
}
#define HAL_GET_ABNORMAL_INTERRUPT_REASON_CODE(_prAdapter, pu4AbnormalReason) \
{ \
HAL_MCR_RD(_prAdapter, \
MCR_WASR, \
pu4AbnormalReason); \
}
#define HAL_DISABLE_RX_ENHANCE_MODE(_prAdapter) \
{ \
uint32_t u4Value = 0; \
HAL_MCR_RD(_prAdapter, \
MCR_WHCR, \
&u4Value); \
HAL_MCR_WR(_prAdapter, \
MCR_WHCR, \
u4Value & ~WHCR_RX_ENHANCE_MODE_EN); \
}
#define HAL_ENABLE_RX_ENHANCE_MODE(_prAdapter) \
{ \
uint32_t u4Value = 0; \
HAL_MCR_RD(_prAdapter, \
MCR_WHCR, \
&u4Value); \
HAL_MCR_WR(_prAdapter, \
MCR_WHCR, \
u4Value | WHCR_RX_ENHANCE_MODE_EN); \
}
#define HAL_CFG_MAX_HIF_RX_LEN_NUM(_prAdapter, _ucNumOfRxLen) \
{ \
uint32_t u4Value = 0, ucNum; \
ucNum = ((_ucNumOfRxLen >= 16) ? 0 : _ucNumOfRxLen); \
HAL_MCR_RD(_prAdapter, \
MCR_WHCR, \
&u4Value); \
u4Value &= ~WHCR_MAX_HIF_RX_LEN_NUM; \
u4Value |= ((((uint32_t)ucNum) << WHCR_OFFSET_MAX_HIF_RX_LEN_NUM) \
& WHCR_MAX_HIF_RX_LEN_NUM); \
HAL_MCR_WR(_prAdapter, \
MCR_WHCR, \
u4Value); \
}
#define HAL_SET_INTR_STATUS_READ_CLEAR(prAdapter) \
{ \
uint32_t u4Value = 0; \
HAL_MCR_RD(prAdapter, \
MCR_WHCR, \
&u4Value); \
HAL_MCR_WR(prAdapter, \
MCR_WHCR, \
u4Value & ~WHCR_W_INT_CLR_CTRL); \
prAdapter->prGlueInfo->rHifInfo.fgIntReadClear = TRUE;\
}
#define HAL_SET_INTR_STATUS_WRITE_1_CLEAR(prAdapter) \
{ \
uint32_t u4Value = 0; \
HAL_MCR_RD(prAdapter, \
MCR_WHCR, \
&u4Value); \
HAL_MCR_WR(prAdapter, \
MCR_WHCR, \
u4Value | WHCR_W_INT_CLR_CTRL); \
prAdapter->prGlueInfo->rHifInfo.fgIntReadClear = FALSE;\
}
/* Note: enhance mode structure may also carried inside the buffer,
* if the length of the buffer is long enough
*/
#define HAL_READ_INTR_STATUS(prAdapter, length, pvBuf) \
HAL_PORT_RD(prAdapter, \
MCR_WHISR, \
length, \
pvBuf, \
length)
#define HAL_READ_TX_RELEASED_COUNT(_prAdapter, au2TxReleaseCount) \
{ \
uint32_t *pu4Value = (uint32_t *)au2TxReleaseCount; \
HAL_MCR_RD(_prAdapter, \
MCR_WTQCR0, \
&pu4Value[0]); \
HAL_MCR_RD(_prAdapter, \
MCR_WTQCR1, \
&pu4Value[1]); \
HAL_MCR_RD(_prAdapter, \
MCR_WTQCR2, \
&pu4Value[2]); \
HAL_MCR_RD(_prAdapter, \
MCR_WTQCR3, \
&pu4Value[3]); \
HAL_MCR_RD(_prAdapter, \
MCR_WTQCR4, \
&pu4Value[4]); \
HAL_MCR_RD(_prAdapter, \
MCR_WTQCR5, \
&pu4Value[5]); \
HAL_MCR_RD(_prAdapter, \
MCR_WTQCR6, \
&pu4Value[6]); \
HAL_MCR_RD(_prAdapter, \
MCR_WTQCR7, \
&pu4Value[7]); \
}
#define HAL_READ_RX_LENGTH(prAdapter, pu2Rx0Len, pu2Rx1Len) \
{ \
uint32_t u4Value = 0; \
HAL_MCR_RD(prAdapter, \
MCR_WRPLR, \
&u4Value); \
*pu2Rx0Len = (uint16_t)u4Value; \
*pu2Rx1Len = (uint16_t)(u4Value >> 16); \
}
#define HAL_GET_INTR_STATUS_FROM_ENHANCE_MODE_STRUCT(pvBuf, \
u2Len, pu4Status) \
{ \
uint32_t *pu4Buf = (uint32_t *)pvBuf; \
*pu4Status = pu4Buf[0]; \
}
#define HAL_GET_TX_STATUS_FROM_ENHANCE_MODE_STRUCT(pvInBuf, \
pu4BufOut, u4LenBufOut) \
{ \
uint32_t *pu4Buf = (uint32_t *)pvInBuf; \
ASSERT(u4LenBufOut >= 8); \
pu4BufOut[0] = pu4Buf[1]; \
pu4BufOut[1] = pu4Buf[2]; \
}
#define HAL_GET_RX_LENGTH_FROM_ENHANCE_MODE_STRUCT(pvInBuf, \
pu2Rx0Num, au2Rx0Len, pu2Rx1Num, au2Rx1Len) \
{ \
uint32_t *pu4Buf = (uint32_t *)pvInBuf; \
ASSERT((sizeof(au2Rx0Len) / sizeof(uint16_t)) >= 16); \
ASSERT((sizeof(au2Rx1Len) / sizeof(uint16_t)) >= 16); \
*pu2Rx0Num = (uint16_t)pu4Buf[3]; \
*pu2Rx1Num = (uint16_t)(pu4Buf[3] >> 16); \
kalMemCopy(au2Rx0Len, &pu4Buf[4], 8); \
kalMemCopy(au2Rx1Len, &pu4Buf[12], 8); \
}
#define HAL_GET_MAILBOX_FROM_ENHANCE_MODE_STRUCT(pvInBuf, \
pu4Mailbox0, pu4Mailbox1) \
{ \
uint32_t *pu4Buf = (uint32_t *)pvInBuf; \
*pu4Mailbox0 = (uint16_t)pu4Buf[21]; \
*pu4Mailbox1 = (uint16_t)pu4Buf[22]; \
}
#define HAL_IS_TX_DONE_INTR(u4IntrStatus) \
((u4IntrStatus & WHISR_TX_DONE_INT) ? TRUE : FALSE)
#define HAL_IS_RX_DONE_INTR(u4IntrStatus) \
((u4IntrStatus & (WHISR_RX0_DONE_INT | WHISR_RX1_DONE_INT)) \
? TRUE : FALSE)
#define HAL_IS_ABNORMAL_INTR(u4IntrStatus) \
((u4IntrStatus & WHISR_ABNORMAL_INT) ? TRUE : FALSE)
#define HAL_IS_FW_OWNBACK_INTR(u4IntrStatus) \
((u4IntrStatus & WHISR_FW_OWN_BACK_INT) ? TRUE : FALSE)
#define HAL_PUT_MAILBOX(prAdapter, u4MboxId, u4Data) \
{ \
ASSERT(u4MboxId < 2); \
HAL_MCR_WR(prAdapter, \
((u4MboxId == 0) ? MCR_H2DSM0R : MCR_H2DSM1R), \
u4Data); \
}
#define HAL_GET_MAILBOX(prAdapter, u4MboxId, pu4Data) \
{ \
ASSERT(u4MboxId < 2); \
HAL_MCR_RD(prAdapter, \
((u4MboxId == 0) ? MCR_D2HRM0R : MCR_D2HRM1R), \
pu4Data); \
}
#define HAL_SET_MAILBOX_READ_CLEAR(prAdapter, fgEnableReadClear) \
{ \
uint32_t u4Value = 0; \
HAL_MCR_RD(prAdapter, MCR_WHCR, &u4Value);\
HAL_MCR_WR(prAdapter, MCR_WHCR, \
(fgEnableReadClear) ? \
(u4Value | WHCR_RECV_MAILBOX_RD_CLR_EN) : \
(u4Value & ~WHCR_RECV_MAILBOX_RD_CLR_EN)); \
prAdapter->prGlueInfo->rHifInfo.fgMbxReadClear = fgEnableReadClear;\
}
#define HAL_GET_MAILBOX_READ_CLEAR(prAdapter) \
(prAdapter->prGlueInfo->rHifInfo.fgMbxReadClear)
#define HAL_READ_INT_STATUS(prAdapter, _pu4IntStatus) \
{ \
kalDevReadIntStatus(prAdapter, _pu4IntStatus);\
}
#define HAL_HIF_INIT(_prAdapter) \
{ \
halDevInit(_prAdapter);\
}
#define HAL_ENABLE_FWDL(_prAdapter, _fgEnable)
#define HAL_WAKE_UP_WIFI(_prAdapter) \
{ \
halWakeUpWiFi(_prAdapter);\
}
#define HAL_IS_TX_DIRECT(_prAdapter) FALSE
#define HAL_IS_RX_DIRECT(_prAdapter) FALSE
#ifdef _SDIO_RING
#define HAL_HAS_AGG_THREAD(_prAdapter) TRUE
#define HAL_AGG_THREAD(_prAdapter) \
{ \
Initial_sdio_ring(_prAdapter->prGlueInfo);\
}
#define HAL_AGG_THREAD_WAKE_UP(_prAdapter) \
Set_sdio_ring_event()
#define HAL_AGG_KICK_DATA(_prAdapter) \
{ \
sdio_ring_kcik_data(_prAdapter->prGlueInfo);\
}
#else
#define HAL_HAS_AGG_THREAD(_prAdapter) FALSE
#define HAL_AGG_THREAD(_prAdapter)
#define HAL_AGG_THREAD_WAKE_UP(_prAdapter)
#define HAL_AGG_KICK_DATA(_prAdapter)
#endif
#if CFG_SDIO_RX_DE_AGG_IN_THREAD
#define HAL_DE_AGG_RX_PKTPROC(_prAdapter, prRxBuf) \
{ \
halDeAggRxPktProc(_prAdapter, \
prRxBuf);\
}
#endif
#endif
#if defined(_HIF_USB)
#define HAL_GET_ABNORMAL_INTERRUPT_REASON_CODE(_prAdapter, \
pu4AbnormalReason)
#define HAL_DISABLE_RX_ENHANCE_MODE(_prAdapter)
#define HAL_ENABLE_RX_ENHANCE_MODE(_prAdapter)
#define HAL_CFG_MAX_HIF_RX_LEN_NUM(_prAdapter, _ucNumOfRxLen)
#define HAL_SET_INTR_STATUS_READ_CLEAR(prAdapter)
#define HAL_SET_INTR_STATUS_WRITE_1_CLEAR(prAdapter)
#define HAL_READ_INTR_STATUS(prAdapter, length, pvBuf)
#define HAL_READ_TX_RELEASED_COUNT(_prAdapter, au2TxReleaseCount)
#define HAL_READ_RX_LENGTH(prAdapter, pu2Rx0Len, pu2Rx1Len)
#define HAL_GET_INTR_STATUS_FROM_ENHANCE_MODE_STRUCT(pvBuf, \
u2Len, pu4Status)
#define HAL_GET_TX_STATUS_FROM_ENHANCE_MODE_STRUCT(pvInBuf, \
pu4BufOut, u4LenBufOut)
#define HAL_GET_RX_LENGTH_FROM_ENHANCE_MODE_STRUCT(pvInBuf, \
pu2Rx0Num, au2Rx0Len, pu2Rx1Num, au2Rx1Len)
#define HAL_GET_MAILBOX_FROM_ENHANCE_MODE_STRUCT(pvInBuf, \
pu4Mailbox0, pu4Mailbox1)
#define HAL_READ_TX_RELEASED_COUNT(_prAdapter, au2TxReleaseCount)
#define HAL_IS_TX_DONE_INTR(u4IntrStatus) FALSE
#define HAL_IS_RX_DONE_INTR(u4IntrStatus)
#define HAL_IS_ABNORMAL_INTR(u4IntrStatus)
#define HAL_IS_FW_OWNBACK_INTR(u4IntrStatus)
#define HAL_PUT_MAILBOX(prAdapter, u4MboxId, u4Data)
#define HAL_GET_MAILBOX(prAdapter, u4MboxId, pu4Data) TRUE
#define HAL_SET_MAILBOX_READ_CLEAR(prAdapter, fgEnableReadClear)
#define HAL_GET_MAILBOX_READ_CLEAR(prAdapter) TRUE
#define HAL_WIFI_FUNC_POWER_ON(_prAdapter) \
mtk_usb_vendor_request(_prAdapter->prGlueInfo, 0, \
DEVICE_VENDOR_REQUEST_OUT, \
VND_REQ_POWER_ON_WIFI, 0, 1, NULL, 0)
#define HAL_WIFI_FUNC_CHIP_RESET(_prAdapter) \
mtk_usb_vendor_request(_prAdapter->prGlueInfo, 0, \
DEVICE_VENDOR_REQUEST_OUT, \
VND_REQ_POWER_ON_WIFI, 1, 1, NULL, 0)
#if CFG_SUPPORT_SER
#define HAL_WIFI_FUNC_GET_SER_STATE(_prAdapter, _pu2SerState) \
mtk_usb_vendor_request(_prAdapter->prGlueInfo, \
0, \
DEVICE_VENDOR_REQUEST_IN, \
VND_REQ_WIFI_SER_CONTROL, \
WVALUE_WIFI_GET_SER_STATE, \
0, \
_pu2SerState, \
2)
#define HAL_WIFI_FUNC_SET_SER_STATE(_prAdapter, _u2NewSerState) \
mtk_usb_vendor_request(_prAdapter->prGlueInfo, \
0, \
DEVICE_VENDOR_REQUEST_OUT, \
VND_REQ_WIFI_SER_CONTROL, \
WVALUE_WIFI_SET_SER_STATE, \
_u2NewSerState, \
NULL, \
0)
#endif /* CFG_SUPPORT_SER */
#define HAL_WIFI_FUNC_READY_CHECK(_prAdapter, _checkItem, _pfgResult) \
do { \
struct mt66xx_chip_info *prChipInfo = NULL; \
uint32_t u4Value = 0; \
if (!_prAdapter->chip_info) \
ASSERT(0); \
*_pfgResult = FALSE; \
prChipInfo = _prAdapter->chip_info; \
HAL_MCR_RD(_prAdapter, prChipInfo->sw_sync0, &u4Value); \
if ((u4Value & (_checkItem << prChipInfo->sw_ready_bit_offset)) \
== (_checkItem << prChipInfo->sw_ready_bit_offset)) \
*_pfgResult = TRUE; \
} while (0)
#define HAL_WIFI_FUNC_OFF_CHECK(_prAdapter, _checkItem, _pfgResult) \
do { \
struct mt66xx_chip_info *prChipInfo = NULL; \
uint32_t u4Value = 0; \
if (!_prAdapter->chip_info) \
ASSERT(0); \
*_pfgResult = FALSE; \
prChipInfo = _prAdapter->chip_info; \
HAL_MCR_RD(_prAdapter, prChipInfo->sw_sync0, &u4Value); \
if ((u4Value & (_checkItem << prChipInfo->sw_ready_bit_offset)) == 0) \
*_pfgResult = TRUE; \
} while (0)
#define HAL_WIFI_FUNC_GET_STATUS(_prAdapter, _u4Result) \
do { \
struct mt66xx_chip_info *prChipInfo = NULL; \
if (!_prAdapter->chip_info) \
ASSERT(0); \
prChipInfo = _prAdapter->chip_info; \
HAL_MCR_RD(_prAdapter, prChipInfo->sw_sync0, &_u4Result); \
} while (0)
#define HAL_INTR_DISABLE(_prAdapter)
#define HAL_INTR_ENABLE(_prAdapter)
#define HAL_INTR_ENABLE_AND_LP_OWN_SET(_prAdapter)
#define HAL_READ_INT_STATUS(prAdapter, _pu4IntStatus) \
{ \
halGetCompleteStatus(prAdapter, _pu4IntStatus); \
}
#define HAL_HIF_INIT(_prAdapter) \
{ \
halDevInit(_prAdapter);\
}
#define HAL_ENABLE_FWDL(_prAdapter, _fgEnable) \
{ \
halEnableFWDownload(_prAdapter, _fgEnable);\
}
#define HAL_WAKE_UP_WIFI(_prAdapter) \
{ \
halWakeUpWiFi(_prAdapter);\
}
#define HAL_LP_OWN_RD(_prAdapter, _pfgResult)
#define HAL_LP_OWN_SET(_prAdapter, _pfgResult)
#define HAL_LP_OWN_CLR(_prAdapter, _pfgResult)
#define HAL_WRITE_TX_PORT(_prAdapter, _u4PortId, _u4Len, _pucBuf, _u4BufSize) \
{ \
HAL_PORT_WR(_prAdapter, \
_u4PortId, \
_u4Len, \
_pucBuf, \
_u4BufSize/*temp!!*//*4KByte*/) \
}
#define HAL_IS_TX_DIRECT(_prAdapter) \
((CFG_TX_DIRECT_USB) ? TRUE : FALSE)
#define HAL_IS_RX_DIRECT(_prAdapter) \
((CFG_RX_DIRECT_USB) ? TRUE : FALSE)
#define HAL_HAS_AGG_THREAD(_prAdapter) FALSE
#define HAL_AGG_THREAD(_prAdapter)
#define HAL_AGG_THREAD_WAKE_UP(_prAdapter)
#define HAL_AGG_KICK_DATA(_prAdapter)
#define HAL_CANCEL_TX_RX(_prAdapter) \
{ \
nicSerStopTxRx(_prAdapter); \
halTxCancelAllSending(_prAdapter);\
halDisableInterrupt(_prAdapter);\
}
#endif
#define INVALID_VERSION 0xFFFF /* used by HW/FW version */
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
*******************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
*******************************************************************************
*/
u_int8_t halVerifyChipID(IN struct ADAPTER *prAdapter);
uint32_t halGetChipHwVer(IN struct ADAPTER *prAdapter);
uint32_t halGetChipSwVer(IN struct ADAPTER *prAdapter);
uint32_t halRxWaitResponse(IN struct ADAPTER *prAdapter,
IN uint8_t ucPortIdx, OUT uint8_t *pucRspBuffer,
IN uint32_t u4MaxRespBufferLen, OUT uint32_t *pu4Length);
void halEnableInterrupt(IN struct ADAPTER *prAdapter);
void halDisableInterrupt(IN struct ADAPTER *prAdapter);
u_int8_t halSetDriverOwn(IN struct ADAPTER *prAdapter);
void halSetFWOwn(IN struct ADAPTER *prAdapter,
IN u_int8_t fgEnableGlobalInt);
void halDevInit(IN struct ADAPTER *prAdapter);
void halEnableFWDownload(IN struct ADAPTER *prAdapter,
IN u_int8_t fgEnable);
void halWakeUpWiFi(IN struct ADAPTER *prAdapter);
void halTxCancelSendingCmd(IN struct ADAPTER *prAdapter,
IN struct CMD_INFO *prCmdInfo);
void halTxCancelAllSending(IN struct ADAPTER *prAdapter);
u_int8_t halTxIsDataBufEnough(IN struct ADAPTER *prAdapter,
IN struct MSDU_INFO *prMsduInfo);
void halProcessTxInterrupt(IN struct ADAPTER *prAdapter);
uint32_t halTxPollingResource(IN struct ADAPTER *prAdapter,
IN uint8_t ucTC);
void halSerHifReset(IN struct ADAPTER *prAdapter);
void halProcessRxInterrupt(IN struct ADAPTER *prAdapter);
void halProcessAbnormalInterrupt(IN struct ADAPTER *prAdapter);
void halProcessSoftwareInterrupt(IN struct ADAPTER *prAdapter);
/* Hif power off wifi */
uint32_t halHifPowerOffWifi(IN struct ADAPTER *prAdapter);
bool halHifSwInfoInit(IN struct ADAPTER *prAdapter);
void halRxProcessMsduReport(IN struct ADAPTER *prAdapter,
IN OUT struct SW_RFB *prSwRfb);
uint32_t halTxGetPageCount(IN struct ADAPTER *prAdapter,
IN uint32_t u4FrameLength, IN u_int8_t fgIncludeDesc);
uint32_t halDumpHifStatus(IN struct ADAPTER *prAdapter,
IN uint8_t *pucBuf, IN uint32_t u4Max);
u_int8_t halIsPendingRx(IN struct ADAPTER *prAdapter);
uint32_t halGetValidCoalescingBufSize(IN struct ADAPTER *prAdapter);
uint32_t halAllocateIOBuffer(IN struct ADAPTER *prAdapter);
uint32_t halReleaseIOBuffer(IN struct ADAPTER *prAdapter);
void halDeAggRxPktWorker(struct work_struct *work);
void halRxTasklet(unsigned long data);
void halTxCompleteTasklet(unsigned long data);
void halPrintHifDbgInfo(IN struct ADAPTER *prAdapter);
u_int8_t halIsTxResourceControlEn(IN struct ADAPTER *prAdapter);
void halTxResourceResetHwTQCounter(IN struct ADAPTER *prAdapter);
uint32_t halGetHifTxPageSize(IN struct ADAPTER *prAdapter);
void halTxReturnFreeResource(IN struct ADAPTER *prAdapter,
IN uint16_t *au2TxDoneCnt);
void halTxGetFreeResource(IN struct ADAPTER *prAdapter,
IN uint16_t *au2TxDoneCnt, IN uint16_t *au2TxRlsCnt);
void halRestoreTxResource(IN struct ADAPTER *prAdapter);
void halRestoreTxResource_v1(IN struct ADAPTER *prAdapter);
void halUpdateTxDonePendingCount_v1(IN struct ADAPTER *prAdapter,
IN u_int8_t isIncr, IN uint8_t ucTc, IN uint16_t u2Cnt);
void halUpdateTxDonePendingCount(IN struct ADAPTER *prAdapter,
IN u_int8_t isIncr, IN uint8_t ucTc, IN uint32_t u4Len);
void halTxReturnFreeResource_v1(IN struct ADAPTER *prAdapter,
IN uint16_t *au2TxDoneCnt);
bool halIsHifStateReady(IN struct ADAPTER *prAdapter, uint8_t *pucState);
bool halIsHifStateLinkup(IN struct ADAPTER *prAdapter);
bool halIsHifStateSuspend(IN struct ADAPTER *prAdapter);
u_int32_t halTxGetFreeCmdCnt(IN struct ADAPTER *prAdapter);
#endif /* _HAL_H */