⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 request.c

📁 mx27 f14v2 源代码。包括ADS板上诸多驱动的源码。
💻 C
📖 第 1 页 / 共 5 页
字号:
		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 + -