📄 request.c
字号:
ulMoveBytes = psWlan->sDriverCapability.Length;
DBG_LEV2(("Query capability, returning %d bytes for %d entries.\n",
ulMoveBytes,
psWlan->sDriverCapability.NoOfAuthEncryptPairsSupported));
break;
case OID_802_11_MEDIA_STREAM_MODE:
ulGenericUlong = psWlan->ulMediaStreamModeInUse;
break;
//
// Dot11 OIDs.
//
case OID_DOT11_CURRENT_REG_DOMAIN:
ulGenericUlong = psWlan->ulRegDomain;
break;
//
// Custom OIDs.
//
case OID_COMMASIC_TX_THRUPUT_PS_THRESHOLD:
ulGenericUlong = psWlan->ulTxThruputPSThreshold;
break;
case OID_COMMASIC_RX_THRUPUT_PS_THRESHOLD:
ulGenericUlong = psWlan->ulRxThruputPSThreshold;
break;
case OID_COMMASIC_SHORT_PREAMBLE:
boGenericBool = psWlan->boShortPreamble;
pvMoveSource = (PVOID)(&boGenericBool);
ulMoveBytes = sizeof(boGenericBool);
break;
case OID_COMMASIC_RX_BUF_OVERFLOW_CT:
// Send Get MIB request (MIB_RX_BUF_OVERFLOW_COUNT) to Target.
vHALsendGetMibReq( psHAL, MIB_RX_BUF_OVERFLOW_COUNT );
iStatus = NDIS_STATUS_PENDING;
break;
case OID_COMMASIC_UWA_SENS_LOCKOUT:
boGenericBool = psWlan->boUwaSensLockout;
pvMoveSource = (PVOID)(&boGenericBool);
ulMoveBytes = sizeof(boGenericBool);
break;
case OID_COMMASIC_RX_STATS:
// Send Get MIB request (MIB_UWA_RX_STATS) to Target.
vHALsendGetMibReq( psHAL, MIB_UWA_RX_STATS );
iStatus = NDIS_STATUS_PENDING;
break;
case OID_COMMASIC_GEN_STATS:
// Send Get Generic Stats request to update the statistics information.
vHALsendGetGenStatsReq( psHAL );
iStatus = NDIS_STATUS_PENDING;
break;
case OID_COMMASIC_CARD_STATUS:
pvMoveSource = (PVOID) (&psHAL->sCardStatus);
ulMoveBytes = sizeof( HAL_CARD_STATUS );
break;
case OID_COMMASIC_CARD_CIS:
pvMoveSource = (PVOID) (&psHAL->sCIS);
ulMoveBytes = sizeof(ULONG) + psHAL->sCIS.ulCISLength;
break;
case OID_COMMASIC_REGISTER:
psHAL->sRWReg.ulRegAddr = *(PULONG)pvInformationBuffer;
{
// Read control register.
vHALreadRegister( psHAL, psHAL->sRWReg.ulRegAddr, &psHAL->sRWReg.ulRegValue );
}
pvMoveSource = (PVOID) (&psHAL->sRWReg);
ulMoveBytes = sizeof( HAL_RW_REG );
break;
case OID_COMMASIC_SNR:
// Send Get MIB request (MIB_SNR) to Target.
vHALsendGetMibReq(psHAL, MIB_SNR);
iStatus = NDIS_STATUS_PENDING;
break;
case OID_COMMASIC_UTIL_STATUS:
if ( ulInformationBufferLength < sizeof(COMMASIC_UTIL_STATUS) )
{
*pulBytesNeeded = sizeof(COMMASIC_UTIL_STATUS);
iStatus = NDIS_STATUS_INVALID_LENGTH;
}
else
{
PCOMMASIC_UTIL_STATUS psUtilStatus = (PCOMMASIC_UTIL_STATUS)pvInformationBuffer;
// Copy the status information which the utility CAUtil needs to buffer.
psUtilStatus->boConnected = (psAdapter->eNetState == NET_CONNECTED) ? TRUE : FALSE;
OS_MEMCPY( &psUtilStatus->sSsid, &psWlan->sSSID, sizeof(NDIS_802_11_SSID) );
OS_MEMCPY( psUtilStatus->ucBssid, psWlan->ucBSSID, sizeof(NDIS_802_11_MAC_ADDRESS) );
psUtilStatus->ulInfraMode = psWlan->ulInfraMode;
if ( psUtilStatus->boConnected )
vENDgetChannelFrequency( psWlan->sRadioConfig.DSConfig, &psUtilStatus->ulChannel );
else
psUtilStatus->ulChannel = (ULONG)psAdapter->sCFG.usChannel;
psUtilStatus->ulTxRate = psWlan->ulForcedRate;
boSkipCopy = TRUE;
*pulBytesWritten = sizeof(COMMASIC_UTIL_STATUS);
}
break;
case OID_COMMASIC_UTIL_SIGNAL:
if ( ulInformationBufferLength < sizeof(COMMASIC_UTIL_SIGNAL) )
{
*pulBytesNeeded = sizeof(COMMASIC_UTIL_SIGNAL);
iStatus = NDIS_STATUS_INVALID_LENGTH;
}
else
{
PCOMMASIC_UTIL_SIGNAL psUtilSignal = (PCOMMASIC_UTIL_SIGNAL)pvInformationBuffer;
// Copy the signal information which the utility CAUtil needs to buffer.
psUtilSignal->lRssi = psWlan->lRssi;
psUtilSignal->lSnr = psWlan->lSnr;
boSkipCopy = TRUE;
*pulBytesWritten = sizeof(COMMASIC_UTIL_SIGNAL);
// Send Get MIB request (MIB_SNR) to Target.
vHALsendGetMibReq( psHAL, MIB_SNR );
}
break;
case OID_COMMASIC_UTIL_STAT:
if ( ulInformationBufferLength < sizeof(COMMASIC_UTIL_STAT) )
{
*pulBytesNeeded = sizeof(COMMASIC_UTIL_STAT);
iStatus = NDIS_STATUS_INVALID_LENGTH;
}
else
{
PCOMMASIC_UTIL_STAT psUtilStat = (PCOMMASIC_UTIL_STAT)pvInformationBuffer;
PNDIS_802_11_STATISTICS psWlanStats = &psWlan->sStatistics;
PNDIS_COMMASIC_GEN_STATS psGenStats = &psWlan->sGenStatistics;
// Copy the statistics information which the utility CAUtil needs to buffer.
psUtilStat->ulTxFrames = psGenStats->TxTotalDataFrames + psGenStats->TxTotalMgmtFrames;
psUtilStat->ulRxFrames = psGenStats->RxTotalDataFrames + psGenStats->RxTotalMgmtFrames;
psUtilStat->ulTxErrors = (ULONG)psWlanStats->FailedCount.QuadPart;
psUtilStat->ulRxErrors = (ULONG)psWlanStats->FCSErrorCount.QuadPart;
psUtilStat->ullTxDataBytes = psGenStats->DataBytesTxed;
psUtilStat->ullRxDataBytes = psGenStats->DataBytesRxed;
boSkipCopy = TRUE;
*pulBytesWritten = sizeof(COMMASIC_UTIL_STAT);
// Send Get 802.11 Stats request to update the statistics information.
vHALsendGetStatsReq( psHAL );
// Send Get Generic Stats request to update the statistics information.
vHALsendGetGenStatsReq( psHAL );
}
break;
case OID_COMMASIC_RADIO:
ulGenericUlong = (ULONG)psWlan->boRadioOn;
break;
case OID_COMMASIC_IBSS_CHANNEL:
ulGenericUlong = (ULONG)psWlan->ulIbssChannel;
break;
/*case OID_COMMASIC_BACKGROUND_SCAN_CONFIG:
pvMoveSource = (PVOID) (&psWlan->sBckGrndScanConfig);
ulMoveBytes = sizeof( NDIS_COMMASIC_BACKGROUND_SCAN_CONFIG );
break;*/
case OID_COMMASIC_CARD_CAPABILITIES:
ulGenericUlong = psWlan->ulCardCapabilities;
break;
case OID_COMMASIC_FORCE_TX_RATE:
ulGenericUlong = (ULONG)psWlan->ulForcedRate;
break;
#ifdef CA_CE_GROUND
case OID_COMMASIC_CARADIO_INIT:
break;
case OID_COMMASIC_CARADIO_LOAD:
break;
case OID_COMMASIC_CARADIO_SEQ:
if(psAdapter->resReady == TRUE)
ulGenericUlong = 1;
else
ulGenericUlong = 0;
break;
case OID_COMMASIC_CARADIO_RES:
DBG_LEV3(("Query OID %x, Status = 0x%x\n", ulOid, iStatus));
pCAMsg = (caMsg *)pvInformationBuffer;
if(psAdapter->resReady == TRUE)
{
pCAMsg->msgType = MSG_RESPONSE;
if(psAdapter->resMsgLen > MAX_CA_PKT_LENGTH)
{
if(psAdapter->resMsgLen - psAdapter->resMsgCurrentLen > MAX_CA_PKT_LENGTH)
{
pCAMsg->msgLen = MAX_CA_PKT_LENGTH;
pCAMsg->moreData = 1;
OS_MEMCPY(pCAMsg->msg,&(psAdapter->resMsg[psAdapter->resMsgCurrentLen]),MAX_CA_PKT_LENGTH);
psAdapter->resMsgCurrentLen += MAX_CA_PKT_LENGTH;
}
else
{
pCAMsg->msgLen = (unsigned char)(psAdapter->resMsgLen - psAdapter->resMsgCurrentLen)& 0xff;
pCAMsg->moreData = 0;
OS_MEMCPY(pCAMsg->msg,&(psAdapter->resMsg[psAdapter->resMsgCurrentLen]),pCAMsg->msgLen);
psAdapter->resMsgCurrentLen = 0;
psAdapter->resReady = FALSE;
}
}
else
{
pCAMsg->msgLen = (unsigned char)(psAdapter->resMsgLen & 0xff);
pCAMsg->moreData = 0;
OS_MEMCPY(pCAMsg->msg,psAdapter->resMsg,psAdapter->resMsgLen);
psAdapter->resReady = FALSE;
psAdapter->resMsgCurrentLen = 0;
}
DBG_LEV3(("msg = %d %d %d\n",pCAMsg->msgType,pCAMsg->msgLen,pCAMsg->moreData));
boSkipCopy = TRUE;
*pulBytesWritten = sizeof(caMsg);
*pulBytesNeeded = sizeof(caMsg);
}
break;
#endif
case OID_COMMASIC_GET_MIB_ATTR:
u16MibID_GetMIBAttr = *(MIB_ID *)pvInformationBuffer;
DBG_LEV3(("Get Mib Attr: MibID = %x \n",u16MibID_GetMIBAttr));
DBG_LEV2((" pvInformationBuffer = %d \n", pvInformationBuffer));
// Send Get MIB request to Target.
vHALsendGetMibReq( psHAL, u16MibID_GetMIBAttr );
iStatus = NDIS_STATUS_PENDING;
break;
case OID_QUERY_STATUS:
DBG_LEV3(("Get Mib status = %x \n",iCurOIDStatus));
ulGenericUlong = (ULONG)iCurOIDStatus;
break;
default:
iStatus = NDIS_STATUS_NOT_SUPPORTED;
break;
}
if(ulOid != OID_QUERY_STATUS)
{
iCurOIDStatus = iStatus;
}
if ( !boSkipCopy && (iStatus == NDIS_STATUS_SUCCESS) )
{
if ( ulMoveBytes > ulInformationBufferLength )
{
// Not enough room in InformationBuffer.
*pulBytesNeeded = ulMoveBytes;
iStatus = NDIS_STATUS_INVALID_LENGTH;
}
else
{
// Copy result into InformationBuffer.
*pulBytesWritten = ulMoveBytes;
*pulBytesNeeded = ulMoveBytes;
if ( ulMoveBytes > 0 )
OS_MEMCPY( pvInformationBuffer, pvMoveSource, ulMoveBytes );
}
}
else if ( iStatus == NDIS_STATUS_PENDING )
{
PPENDING_OID psPendingOID = &psAdapter->sPendingOID;
if ( !psWlan->boRadioOn )
iStatus = NDIS_STATUS_SUCCESS;
else
{
// Save parameters to pending OID structure.
psPendingOID->ulOid = ulOid;
psPendingOID->pvBuffer = pvInformationBuffer;
psPendingOID->ulBufferLength = ulInformationBufferLength;
psPendingOID->pulBytesWritten = pulBytesWritten;
psPendingOID->pulBytesNeeded = pulBytesNeeded;
DBG_LEV2(("PENDING Query OID %x, Status = 0x%x\n", ulOid, iStatus));
}
}
DBG_LEV2(("Query OID %x, Status = 0x%x\n", ulOid, iStatus));
return (iStatus);
}
//-----------------------------------------------------------------------------
//
// NAME iMiniportSetInformation
//
// PARAMETERS hMiniportAdapterContext Pointer to adapter context.
// ulOid The Oid that is to be set.
// pvInformationBuffer Pointer to the data buffer.
// ulInformationBufferLength The length of InformationBuffer.
// pulBytesRead Number of bytes read from buffer.
// pulBytesNeeded If InformationBuffer is not enough,
// return the amount of bytes needed.
//
// RETURNS NDIS_STATUS_SUCCESS
// NDIS_STATUS_INVALID_LENGTH
// NDIS_STATUS_NOT_SUPPORTED
// NDIS_STATUS_NOT_ACCEPTED
//
// DESCRIPTION Set OIDs.
//
//-----------------------------------------------------------------------------
NDIS_STATUS
iMiniportSetInformation(
IN NDIS_HANDLE hMiniportAdapterContext,
IN NDIS_OID ulOid,
IN PVOID pvInformationBuffer,
IN ULONG ulInformationBufferLength,
OUT PULONG pulBytesRead,
OUT PULONG pulBytesNeeded)
{
PEND_CONTEXT psAdapter = (PEND_CONTEXT)(hMiniportAdapterContext);
NDIS_STATUS iStatus = NDIS_STATUS_SUCCESS;
ULONG ulPacketFilter;
PWLAN_CONTEXT psWlan = &psAdapter->sWlan;
PHAL_CONTEXT psHAL = &psAdapter->sHAL;
MIB_VALUE uValue;
PNDIS_COMMASIC_CONFIG psConfig;
//PNDIS_COMMASIC_BACKGROUND_SCAN_CONFIG psBckgrndScanCfg;
#ifdef CA_CE_GROUND
caMsg tCAMsg;
uint16 resMsgLen;
PULONG resPacket;
HEADER_S *sMsgHdr;
#endif
DBG_LEV3(("iMiniportSetInformation()\n"));
*pulBytesRead = sizeof(ULONG);
*pulBytesNeeded = 0;
// Don't accept OID set request if radio off desired.
if ( psWlan->boDesiredRadio == FALSE && ulOid != OID_COMMASIC_RADIO )
{
// iStatus = NDIS_STATUS_NOT_ACCEPTED;
iStatus = NDIS_STATUS_SUCCESS;
return (iStatus);
}
switch (ulOid)
{
case OID_GEN_CURRENT_LOOKAHEAD:
psAdapter->ulCurrentLookahead = *(PULONG)pvInformationBuffer;
break;
case OID_802_3_MULTICAST_LIST:
*pulBytesRead = ulInformationBufferLength;
break;
case OID_GEN_CURRENT_PACKET_FILTER:
ulPacketFilter = *(PULONG)pvInformationBuffer;
ulPacketFilter &= ( NDIS_PACKET_TYPE_DIRECTED |
NDIS_PACKET_TYPE_MULTICAST |
NDIS_PACKET_TYPE_ALL_MULTICAST |
NDIS_PACKET_TYPE_BROADCAST );
psAdapter->ulPacketFilter = ulPacketFilter;
break;
//
// 802.11 WLAN related OIDs.
//
case OID_802_11_BSSID:
{
*pulBytesRead = IEEE_ADDR_LEN;
psWlan->sChangeNetwork.ulOid = ulOid;
OS_MEMCPY( psWlan->sChangeNetwork.ucBSSID, pvInformationBuffer, IEEE_ADDR_LEN );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -