Files
Linux_Drivers/osdrv/extdrv/wireless/mediatek/mt7603/common/mtusb_io.c
forum_service 213c880673 add driver of tp、wiegand-gpio and wireless
Change-Id: Ie3c11d9d85cf1a05042f5690ac711856fe8b1ad7
2023-12-22 09:56:05 +08:00

788 lines
19 KiB
C

/*
***************************************************************************
* MediaTek Inc.
*
* All rights reserved. source code is an unpublished work and the
* use of a copyright notice does not imply otherwise. This source code
* contains confidential trade secret material of MediaTek. Any attemp
* or participation in deciphering, decoding, reverse engineering or in any
* way altering the source code is stricitly prohibited, unless the prior
* written consent of MediaTek, Inc. is obtained.
***************************************************************************
Module Name:
mtusb_io.c
*/
#include "rt_config.h"
#define MAX_VENDOR_REQ_RETRY_COUNT 10
/*
========================================================================
Routine Description: NIC initialization complete
Arguments:
Return Value:
IRQL =
Note:
========================================================================
*/
void mtusb_cfg_read(RTMP_ADAPTER *ad, UINT32 *value)
{
RTUSB_VendorRequest(ad, (USBD_TRANSFER_DIRECTION_IN |
USBD_SHORT_TRANSFER_OK),
DEVICE_VENDOR_REQUEST_IN,
0x63, (0x50029018 & 0xffff0000) >> 16,
(0x50029018 & 0x0000ffff), value, 4);
}
void mtusb_cfg_write(RTMP_ADAPTER *ad, UINT32 value)
{
RTUSB_VendorRequest(
ad,
USBD_TRANSFER_DIRECTION_OUT,
DEVICE_VENDOR_REQUEST_OUT,
0x66,
(0x50029018 & 0xffff0000) >> 16,
(0x50029018 & 0x0000ffff),
&value,
4);
}
NTSTATUS RTUSBVenderReset(RTMP_ADAPTER *pAd)
{
NTSTATUS Status;
DBGPRINT_RAW(RT_DEBUG_ERROR, ("-->RTUSBVenderReset\n"));
Status = RTUSB_VendorRequest(
pAd,
USBD_TRANSFER_DIRECTION_OUT,
DEVICE_VENDOR_REQUEST_OUT,
0x01,
0x1,
0,
NULL,
0);
DBGPRINT_RAW(RT_DEBUG_ERROR, ("<--RTUSBVenderReset\n"));
return Status;
}
static NTSTATUS mtusb_multiwrite(RTMP_ADAPTER *pAd,
IN UINT32 Offset,
IN UCHAR *buf,
IN USHORT len,
IN USHORT batchLen)
{
NTSTATUS Status = STATUS_SUCCESS;
UINT32 index = Offset, actLen = batchLen, leftLen = len;
UCHAR *pSrc = buf;
do
{
actLen = (actLen > batchLen ? batchLen : actLen);
Status = RTUSB_VendorRequest(
pAd,
USBD_TRANSFER_DIRECTION_OUT,
DEVICE_VENDOR_REQUEST_OUT,
0x66,
(USHORT)((index & 0xffff0000) >> 16),
(USHORT)(index & 0x0000ffff),
pSrc,
actLen);
if (Status != STATUS_SUCCESS) {
DBGPRINT(RT_DEBUG_ERROR, ("VendrCmdMultiWrite_nBytes failed!\n"));
break;
}
index += actLen;
leftLen -= actLen;
pSrc = pSrc + actLen;
} while (leftLen > 0);
return Status;
}
static NTSTATUS mtusb_multiread(RTMP_ADAPTER *pAd, UINT32 addr, UCHAR *buf, UINT32 len)
{
NTSTATUS Status;
Status = RTUSB_VendorRequest(pAd, (USBD_TRANSFER_DIRECTION_IN |
USBD_SHORT_TRANSFER_OK),
DEVICE_VENDOR_REQUEST_IN,
0x63,
(USHORT)((addr & 0xffff0000) >> 16),
(USHORT)(addr & 0x0000ffff),
buf, len);
return Status;
}
NTSTATUS mtusb_read_reg(RTMP_ADAPTER *pAd, UINT32 addr, UINT32 *value)
{
NTSTATUS Status = 0;
UINT32 localVal;
UINT32 global_addr = mt_physical_addr_map(addr);
#if defined(CONFIG_STA_SUPPORT) && defined(STA_LP_PHASE_1_SUPPORT)
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
{
if (pAd->CountDowntoPsm == 0)
{
pAd->CountDowntoPsm = 2; /* 100 ms; stay awake 200ms at most, average will be 1xx ms */
}
AsicForceWakeup(pAd, TRUE);
}
#endif /* #ifdef CONFIG_STA_SUPPORT && STA_LP_PHASE_1_SUPPORT */
Status = mtusb_multiread(pAd, global_addr, (PUCHAR)&localVal, 4);
*value = le2cpu32(localVal);
if (Status != 0)
*value = 0xffffffff;
return Status;
}
NTSTATUS mtusb_write_reg(RTMP_ADAPTER *pAd, UINT32 addr, UINT32 value)
{
NTSTATUS Status;
UINT32 global_addr = mt_physical_addr_map(addr);
#if defined(CONFIG_STA_SUPPORT) && defined(STA_LP_PHASE_1_SUPPORT)
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
{
if (pAd->CountDowntoPsm == 0)
{
pAd->CountDowntoPsm = 2; /* 100 ms; stay awake 200ms at most, average will be 1xx ms */
}
AsicForceWakeup(pAd, TRUE);
}
#endif /* #ifdef CONFIG_STA_SUPPORT && STA_LP_PHASE_1_SUPPORT */
Status = mtusb_multiwrite(pAd, global_addr, (PUCHAR)&value, 4, 4);
return Status;
}
int usb2_disconnect_cmd(RTMP_ADAPTER *ad, UINT8 Discon_mode)
{
NTSTATUS ret = NDIS_STATUS_FAILURE;
UINT16 index = 0;
index = Discon_mode;
DBGPRINT(RT_DEBUG_OFF, ("usb2 disconnect command\n"));
ret = RTUSB_VendorRequest(ad,
USBD_TRANSFER_DIRECTION_OUT,
DEVICE_VENDOR_REQUEST_OUT,
0x91,
0x01,
index,
0,
0);
if (ret)
DBGPRINT(RT_DEBUG_ERROR, ("usb2 disconnect command fail\n"));
return ret;
}
NTSTATUS RTUSBMultiWrite(
IN RTMP_ADAPTER *pAd,
IN USHORT Offset,
IN UCHAR *pData,
IN USHORT length,
IN BOOLEAN bWriteHigh)
{
return NDIS_STATUS_SUCCESS;
}
NTSTATUS RTUSBMultiWrite_OneByte(RTMP_ADAPTER *pAd, USHORT Offset, UCHAR *pData)
{
return NDIS_STATUS_SUCCESS;
}
NTSTATUS RTUSBMultiWrite_nBytes(
IN RTMP_ADAPTER *pAd,
IN USHORT Offset,
IN UCHAR *buf,
IN USHORT len,
IN USHORT batchLen)
{
return NDIS_STATUS_SUCCESS;
}
NTSTATUS RTUSBWriteMACRegister(
IN RTMP_ADAPTER *pAd,
IN USHORT Offset,
IN UINT32 Value,
IN BOOLEAN bWriteHigh)
{
mtusb_multiwrite(pAd, Offset, (PUCHAR)&Value, 4, 4);
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS ResetBulkOutHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
DBGPRINT(RT_DEBUG_TRACE, ("CMDTHREAD_RESET_BULK_OUT(ResetPipeid=0x%0x)===>\n", pAd->bulkResetPipeid));
return NDIS_STATUS_SUCCESS;
}
/* All transfers must be aborted or cancelled before attempting to reset the pipe.*/
static NTSTATUS ResetBulkInHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
DBGPRINT_RAW(RT_DEBUG_TRACE, ("CmdThread : CMDTHREAD_RESET_BULK_IN === >\n"));
DBGPRINT_RAW(RT_DEBUG_TRACE, ("CmdThread : CMDTHREAD_RESET_BULK_IN <===\n"));
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS SetAsicWcidHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS DelAsicWcidHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
RT_SET_ASIC_WCID SetAsicWcid;
SetAsicWcid = *((PRT_SET_ASIC_WCID)(CMDQelmt->buffer));
if (SetAsicWcid.WCID >= MAX_LEN_OF_MAC_TABLE)
return NDIS_STATUS_FAILURE;
AsicDelWcidTab(pAd, (UCHAR)SetAsicWcid.WCID);
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS SetWcidSecInfoHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
PRT_ASIC_WCID_SEC_INFO pInfo;
pInfo = (PRT_ASIC_WCID_SEC_INFO)CMDQelmt->buffer;
RTMPSetWcidSecurityInfo(pAd,
pInfo->BssIdx,
pInfo->KeyIdx,
pInfo->CipherAlg,
pInfo->Wcid,
pInfo->KeyTabFlag);
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS SetAsicWcidIVEIVHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
PRT_ASIC_WCID_IVEIV_ENTRY pInfo;
pInfo = (PRT_ASIC_WCID_IVEIV_ENTRY)CMDQelmt->buffer;
AsicUpdateWCIDIVEIV(pAd,
pInfo->Wcid,
pInfo->Iv,
pInfo->Eiv);
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS SetAsicWcidAttrHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
PRT_ASIC_WCID_ATTR_ENTRY pInfo;
pInfo = (PRT_ASIC_WCID_ATTR_ENTRY)CMDQelmt->buffer;
AsicUpdateWcidAttributeEntry(pAd,
pInfo->BssIdx,
pInfo->KeyIdx,
pInfo->CipherAlg,
pInfo->Wcid,
pInfo->KeyTabFlag);
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS SETAsicSharedKeyHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
PRT_ASIC_SHARED_KEY pInfo;
pInfo = (PRT_ASIC_SHARED_KEY)CMDQelmt->buffer;
AsicAddSharedKeyEntry(pAd,
pInfo->BssIndex,
pInfo->KeyIdx,
&pInfo->CipherKey);
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS SetAsicPairwiseKeyHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
PRT_ASIC_PAIRWISE_KEY pInfo;
pInfo = (PRT_ASIC_PAIRWISE_KEY)CMDQelmt->buffer;
AsicAddPairwiseKeyEntry(pAd,
pInfo->WCID,
&pInfo->CipherKey);
return NDIS_STATUS_SUCCESS;
}
#ifdef CONFIG_STA_SUPPORT
static NTSTATUS SetPortSecuredHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
STA_PORT_SECURED(pAd);
return NDIS_STATUS_SUCCESS;
}
#endif /* CONFIG_STA_SUPPORT */
static NTSTATUS RemovePairwiseKeyHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
UCHAR Wcid = *((PUCHAR)(CMDQelmt->buffer));
AsicRemovePairwiseKeyEntry(pAd, Wcid);
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS SetClientMACEntryHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
PRT_SET_ASIC_WCID pInfo;
pInfo = (PRT_SET_ASIC_WCID)CMDQelmt->buffer;
AsicUpdateRxWCIDTable(pAd, (USHORT)(pInfo->WCID), pInfo->Addr);
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS UpdateProtectHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
PRT_ASIC_PROTECT_INFO pAsicProtectInfo;
pAsicProtectInfo = (PRT_ASIC_PROTECT_INFO)CMDQelmt->buffer;
AsicUpdateProtect(pAd, pAsicProtectInfo->OperationMode, pAsicProtectInfo->SetMask,
pAsicProtectInfo->bDisableBGProtect, pAsicProtectInfo->bNonGFExist);
return NDIS_STATUS_SUCCESS;
}
#ifdef CONFIG_AP_SUPPORT
static NTSTATUS APUpdateCapabilityAndErpieHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
APUpdateCapabilityAndErpIe(pAd);
return NDIS_STATUS_SUCCESS;
}
#endif /* CONFIG_AP_SUPPORT */
#ifdef CONFIG_AP_SUPPORT
static NTSTATUS _802_11_CounterMeasureHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
IF_DEV_CONFIG_OPMODE_ON_AP(pAd)
{
MAC_TABLE_ENTRY *pEntry;
pEntry = (MAC_TABLE_ENTRY *)CMDQelmt->buffer;
HandleCounterMeasure(pAd, pEntry);
}
return NDIS_STATUS_SUCCESS;
}
#endif /* CONFIG_AP_SUPPORT */
#ifdef CONFIG_STA_SUPPORT
#if 0 // move to cmm_asic.c
static NTSTATUS SetPSMBitHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
USHORT *pPsm = (USHORT *)CMDQelmt->buffer;
MlmeSetPsmBit(pAd, *pPsm);
}
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS ForceWakeUpHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
AsicForceWakeup(pAd, TRUE);
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS ForceSleepAutoWakeupHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
USHORT TbttNumToNextWakeUp;
USHORT NextDtim = pAd->StaCfg.DtimPeriod;
ULONG Now;
NdisGetSystemUpTime(&Now);
NextDtim -= (USHORT)(Now - pAd->StaCfg.LastBeaconRxTime)/pAd->CommonCfg.BeaconPeriod;
TbttNumToNextWakeUp = pAd->StaCfg.DefaultListenCount;
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM) && (TbttNumToNextWakeUp > NextDtim))
TbttNumToNextWakeUp = NextDtim;
RTMP_SET_PSM_BIT(pAd, PWR_SAVE);
/* if WMM-APSD is failed, try to disable following line*/
DBGPRINT(RT_DEBUG_TRACE, ("%s(line=%d): -->\n", __FUNCTION__, __LINE__)); \
AsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp);
return NDIS_STATUS_SUCCESS;
}
#endif
#endif /* CONFIG_STA_SUPPORT*/
#ifdef CONFIG_AP_SUPPORT
static NTSTATUS APEnableTXBurstHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
IF_DEV_CONFIG_OPMODE_ON_AP(pAd)
{
DBGPRINT(RT_DEBUG_TRACE, ("CmdThread::CMDTHREAD_AP_ENABLE_TX_BURST \n"));
AsicSetWmmParam(pAd, WMM_PARAM_AC_0, WMM_PARAM_TXOP, 0x20);
}
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS APDisableTXBurstHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
IF_DEV_CONFIG_OPMODE_ON_AP(pAd)
{
DBGPRINT(RT_DEBUG_TRACE, ("CmdThread::CMDTHREAD_AP_DISABLE_TX_BURST \n"));
AsicSetWmmParam(pAd, WMM_PARAM_AC_0, WMM_PARAM_TXOP, 0x00);
}
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS APAdjustEXPAckTimeHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
IF_DEV_CONFIG_OPMODE_ON_AP(pAd)
{
DBGPRINT(RT_DEBUG_TRACE, ("CmdThread::CMDTHREAD_AP_ADJUST_EXP_ACK_TIME \n"));
}
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS APRecoverEXPAckTimeHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
IF_DEV_CONFIG_OPMODE_ON_AP(pAd)
{
DBGPRINT(RT_DEBUG_TRACE, ("CmdThread::CMDTHREAD_AP_RECOVER_EXP_ACK_TIME \n"));
}
return NDIS_STATUS_SUCCESS;
}
#endif /* CONFIG_AP_SUPPORT */
#ifdef LED_CONTROL_SUPPORT
static NTSTATUS SetLEDStatusHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
UCHAR LEDStatus = *((PUCHAR)(CMDQelmt->buffer));
RTMPSetLEDStatus(pAd, LEDStatus);
DBGPRINT(RT_DEBUG_TRACE, ("%s: CMDTHREAD_SET_LED_STATUS (LEDStatus = %d)\n",
__FUNCTION__, LEDStatus));
return NDIS_STATUS_SUCCESS;
}
#endif /* LED_CONTROL_SUPPORT */
#ifdef WSC_INCLUDED
#ifdef WSC_LED_SUPPORT
/*WPS LED MODE 10*/
static NTSTATUS LEDWPSMode10Hdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
UINT WPSLedMode10 = *((PUINT)(CMDQelmt->buffer));
DBGPRINT(RT_DEBUG_INFO, ("WPS LED mode 10::ON or Flash or OFF : %x\n", WPSLedMode10));
switch(WPSLedMode10)
{
case LINK_STATUS_WPS_MODE10_TURN_ON:
RTMPSetLEDStatus(pAd, LED_WPS_MODE10_TURN_ON);
break;
case LINK_STATUS_WPS_MODE10_FLASH:
RTMPSetLEDStatus(pAd,LED_WPS_MODE10_FLASH);
break;
case LINK_STATUS_WPS_MODE10_TURN_OFF:
RTMPSetLEDStatus(pAd, LED_WPS_MODE10_TURN_OFF);
break;
default:
DBGPRINT(RT_DEBUG_INFO, ("WPS LED mode 10:: No this status %d!!!\n", WPSLedMode10));
break;
}
return NDIS_STATUS_SUCCESS;
}
#endif /* WSC_LED_SUPPORT */
#endif /* WSC_INCLUDED */
#ifdef CONFIG_AP_SUPPORT
static NTSTATUS ChannelRescanHdlr(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
DBGPRINT(RT_DEBUG_TRACE, ("cmd> Re-scan channel! \n"));
pAd->CommonCfg.Channel = AP_AUTO_CH_SEL(pAd, TRUE);
#ifdef DOT11_N_SUPPORT
/* If WMODE_CAP_N(phymode) and BW=40 check extension channel, after select channel */
N_ChannelCheck(pAd);
#endif /* DOT11_N_SUPPORT */
DBGPRINT(RT_DEBUG_TRACE, ("cmd> Switch to %d! \n", pAd->CommonCfg.Channel));
APStop(pAd);
APStartUp(pAd);
#ifdef AP_QLOAD_SUPPORT
QBSS_LoadAlarmResume(pAd);
#endif /* AP_QLOAD_SUPPORT */
return NDIS_STATUS_SUCCESS;
}
#endif /* CONFIG_AP_SUPPORT*/
#ifdef LINUX
#ifdef RT_CFG80211_SUPPORT
static NTSTATUS RegHintHdlr (RTMP_ADAPTER *pAd, IN PCmdQElmt CMDQelmt)
{
RT_CFG80211_CRDA_REG_HINT(pAd, CMDQelmt->buffer, CMDQelmt->bufferlength);
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS RegHint11DHdlr(RTMP_ADAPTER *pAd, IN PCmdQElmt CMDQelmt)
{
RT_CFG80211_CRDA_REG_HINT11D(pAd, CMDQelmt->buffer, CMDQelmt->bufferlength);
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS RT_Mac80211_ScanEnd(RTMP_ADAPTER *pAd, IN PCmdQElmt CMDQelmt)
{
RT_CFG80211_SCAN_END(pAd, FALSE);
return NDIS_STATUS_SUCCESS;
}
static NTSTATUS RT_Mac80211_ConnResultInfom(RTMP_ADAPTER *pAd, IN PCmdQElmt CMDQelmt)
{
#ifdef CONFIG_STA_SUPPORT
RT_CFG80211_CONN_RESULT_INFORM(pAd, pAd->MlmeAux.Bssid,
pAd->StaCfg.ReqVarIEs, pAd->StaCfg.ReqVarIELen,
CMDQelmt->buffer, CMDQelmt->bufferlength,
TRUE);
#endif /*CONFIG_STA_SUPPORT*/
return NDIS_STATUS_SUCCESS;
}
#endif /* RT_CFG80211_SUPPORT */
#endif /* LINUX */
#ifdef P2P_SUPPORT
static NTSTATUS SetP2pLinkDown(RTMP_ADAPTER *pAd, IN PCmdQElmt CMDQelmt)
{
P2pLinkDown(pAd, P2P_DISCONNECTED);
return NDIS_STATUS_SUCCESS;
}
#endif /* P2P_SUPPORT */
#ifdef STREAM_MODE_SUPPORT
static NTSTATUS UpdateTXChainAddress(RTMP_ADAPTER *pAd, IN PCmdQElmt CMDQelmt)
{
AsicUpdateTxChainAddress(pAd, CMDQelmt->buffer);
return NDIS_STATUS_SUCCESS;
}
#endif /* STREAM_MODE_SUPPORT */
#ifdef DOT11Z_TDLS_SUPPORT
static NTSTATUS TdlsReceiveNotifyFrame(IN PRTMP_ADAPTER pAd, IN PCmdQElmt CMDQelmt)
{
TDLS_EnableMacTx(pAd);
TDLS_EnablePktChannel(pAd, FIFO_HCCA);
RTMP_CLEAR_MORE_FLAG(pAd, fRTMP_ADAPTER_DISABLE_DEQUEUE);
RTMP_OS_NETDEV_WAKE_QUEUE(pAd->net_dev);
return NDIS_STATUS_SUCCESS;
}
#endif /* DOT11Z_TDLS_SUPPORT */
#ifdef MT_MAC
static NTSTATUS AddRemoveKeyHdlr(RTMP_ADAPTER *pAd, IN PCmdQElmt CMDQelmt)
{
PMT_ASIC_SEC_INFO pInfo;
pInfo = (PMT_ASIC_SEC_INFO)CMDQelmt->buffer;
CmdProcAddRemoveKey(pAd, pInfo->AddRemove, pInfo->BssIdx, pInfo->KeyIdx, pInfo->Wcid, pInfo->KeyTabFlag, &pInfo->CipherKey, pInfo->Addr);
return NDIS_STATUS_SUCCESS;
}
#endif /* MT_MAC */
typedef NTSTATUS (*CMDHdlr)(RTMP_ADAPTER *pAd, IN PCmdQElmt CMDQelmt);
CMDHdlr CMDHdlrTable[] = {
ResetBulkOutHdlr, /* CMDTHREAD_RESET_BULK_OUT*/
ResetBulkInHdlr, /* CMDTHREAD_RESET_BULK_IN*/
NULL, //CheckGPIOHdlr, /* CMDTHREAD_CHECK_GPIO */
SetAsicWcidHdlr, /* CMDTHREAD_SET_ASIC_WCID*/
DelAsicWcidHdlr, /* CMDTHREAD_DEL_ASIC_WCID*/
SetClientMACEntryHdlr, /* CMDTHREAD_SET_CLIENT_MAC_ENTRY*/
#ifdef CONFIG_STA_SUPPORT
SetPSMBitHdlr, /* CMDTHREAD_SET_PSM_BIT*/
ForceWakeUpHdlr, /* CMDTHREAD_FORCE_WAKE_UP*/
ForceSleepAutoWakeupHdlr, /* CMDTHREAD_FORCE_SLEEP_AUTO_WAKEUP*/
NULL,//QkeriodicExecutHdlr, /* CMDTHREAD_QKERIODIC_EXECUT*/
#else
NULL,
NULL,
NULL,
NULL,
#endif /* CONFIG_STA_SUPPORT */
#ifdef CONFIG_AP_SUPPORT
APUpdateCapabilityAndErpieHdlr, /* CMDTHREAD_AP_UPDATE_CAPABILITY_AND_ERPIE*/
APEnableTXBurstHdlr, /* CMDTHREAD_AP_ENABLE_TX_BURST*/
APDisableTXBurstHdlr, /* CMDTHREAD_AP_DISABLE_TX_BURST*/
APAdjustEXPAckTimeHdlr, /* CMDTHREAD_AP_ADJUST_EXP_ACK_TIME*/
APRecoverEXPAckTimeHdlr, /* CMDTHREAD_AP_RECOVER_EXP_ACK_TIME*/
ChannelRescanHdlr, /* CMDTHREAD_CHAN_RESCAN*/
#else
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
#endif /* CONFIG_AP_SUPPORT */
#ifdef LED_CONTROL_SUPPORT
SetLEDStatusHdlr, /* CMDTHREAD_SET_LED_STATUS*/
#else
NULL,
#endif /* LED_CONTROL_SUPPORT */
#ifdef WSC_INCLUDED
#ifdef WSC_LED_SUPPORT
LEDWPSMode10Hdlr, /* CMDTHREAD_LED_WPS_MODE10*/
#else
NULL,
#endif /* WSC_LED_SUPPORT */
#else
NULL,
#endif /* WSC_INCLUDED */
/* Security related */
SetWcidSecInfoHdlr, /* CMDTHREAD_SET_WCID_SEC_INFO*/
SetAsicWcidIVEIVHdlr, /* CMDTHREAD_SET_ASIC_WCID_IVEIV*/
SetAsicWcidAttrHdlr, /* CMDTHREAD_SET_ASIC_WCID_ATTR*/
SETAsicSharedKeyHdlr, /* CMDTHREAD_SET_ASIC_SHARED_KEY*/
SetAsicPairwiseKeyHdlr, /* CMDTHREAD_SET_ASIC_PAIRWISE_KEY*/
RemovePairwiseKeyHdlr, /* CMDTHREAD_REMOVE_PAIRWISE_KEY*/
#ifdef CONFIG_STA_SUPPORT
SetPortSecuredHdlr, /* CMDTHREAD_SET_PORT_SECURED*/
#else
NULL,
#endif /* CONFIG_STA_SUPPORT */
#ifdef CONFIG_AP_SUPPORT
_802_11_CounterMeasureHdlr, /* CMDTHREAD_802_11_COUNTER_MEASURE*/
#else
NULL,
#endif /* CONFIG_AP_SUPPORT */
UpdateProtectHdlr, /* CMDTHREAD_UPDATE_PROTECT*/
#ifdef LINUX
#ifdef RT_CFG80211_SUPPORT
RegHintHdlr,
RegHint11DHdlr,
RT_Mac80211_ScanEnd,
RT_Mac80211_ConnResultInfom,
#else
NULL,
NULL,
NULL,
NULL,
#endif /* RT_CFG80211_SUPPORT */
#else
NULL,
NULL,
NULL,
NULL,
#endif /* LINUX */
#ifdef P2P_SUPPORT
SetP2pLinkDown, /* CMDTHREAD_SET_P2P_LINK_DOWN */
#else
NULL,
#endif /* P2P_SUPPORT */
#ifdef RELEASE_EXCLUDE
/*
This function must be the last one for the strip of bluetooth coexistence.
Please add your new function to above position and
modify define value of RT_CMD_COEXISTENCE_DETECTION to the last one.
*/
#endif /* RELEASE_EXCLUDE */
#ifdef BT_COEXISTENCE_SUPPORT
DetectExecAtCmdThread, /* RT_CMD_COEXISTENCE_DETECTION*/
#else
NULL,
#endif /* BT_COEXISTENCE_SUPPORT */
#ifdef STREAM_MODE_SUPPORT
UpdateTXChainAddress, /* CMDTHREAD_UPDATE_TX_CHAIN_ADDRESS */
#else
NULL,
#endif
#ifdef DOT11Z_TDLS_SUPPORT
TdlsReceiveNotifyFrame, /* CMDTHREAD_TDLS_RECV_NOTIFY */
#else
NULL,
#endif /* DOT11Z_TDLS_SUPPORT */
#ifdef MT_MAC
AddRemoveKeyHdlr, /* CMDTHREAD_ADDREMOVE_ASIC_KEY */
#else
NULL,
#endif /* MT_MAC */
};