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

📄 request.c

📁 mx27 f14v2 源代码。包括ADS板上诸多驱动的源码。
💻 C
📖 第 1 页 / 共 5 页
字号:
		ulGenericUlong = (ULONG)(NDIS_MAC_OPTION_TRANSFERS_NOT_PEND	|
								NDIS_MAC_OPTION_RECEIVE_SERIALIZED  |
								NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA	|
								NDIS_MAC_OPTION_NO_LOOPBACK			|
								NDIS_MAC_OPTION_8021P_PRIORITY);
		break;

	case OID_GEN_MEDIA_SUPPORTED:
	case OID_GEN_MEDIA_IN_USE:

		pvMoveSource = (PVOID) (&Medium);
		ulMoveBytes = sizeof(NDIS_MEDIUM);
		break;

	case OID_GEN_MAXIMUM_LOOKAHEAD:
	case OID_GEN_MAXIMUM_FRAME_SIZE:

		ulGenericUlong = ETHER_MAX_FRAME_SIZE - ETHER_HDR_SIZE;
		break;

	case OID_GEN_MAXIMUM_TOTAL_SIZE:
	case OID_GEN_TRANSMIT_BLOCK_SIZE:
	case OID_GEN_RECEIVE_BLOCK_SIZE:

		ulGenericUlong = (ULONG) ETHER_MAX_FRAME_SIZE;
		break;

	case OID_GEN_CURRENT_LOOKAHEAD:

		ulGenericUlong = psAdapter->ulCurrentLookahead;
		break;

	case OID_GEN_CURRENT_PACKET_FILTER:

		ulGenericUlong = psAdapter->ulPacketFilter;
		break;

	case OID_GEN_LINK_SPEED:

		ulGenericUlong = 0;
		for ( i=0; i<NDIS_802_11_LENGTH_RATES_EX && psWlan->ucDesiredRates[i]; i++ )
		{
			if ( ulGenericUlong < (ULONG)(psWlan->ucDesiredRates[i] & 0x7f) )
				ulGenericUlong = psWlan->ucDesiredRates[i] & 0x7f;
		}
		// Link speed in 100 bps.
		ulGenericUlong = ulGenericUlong * 1000 * 10 / 2 ;
		break;

	case OID_GEN_TRANSMIT_BUFFER_SPACE:

		ulGenericUlong = ETHER_MAX_FRAME_SIZE * psHAL->ulTxBufNum;
		break;

	case OID_GEN_RECEIVE_BUFFER_SPACE:

		ulGenericUlong = ETHER_MAX_FRAME_SIZE * psHAL->ulRxBufNum;
		break;

	case OID_GEN_VENDOR_ID:

		*(PULONG)aucVendorId = VENDOR_ID;
		pvMoveSource = (PVOID)aucVendorId;
		ulMoveBytes = sizeof(aucVendorId);
		break;

	case OID_GEN_VENDOR_DESCRIPTION:

		pvMoveSource = (PVOID)&aucVendorDescriptor[0];
		ulMoveBytes = strlen(aucVendorDescriptor);
		break;

	case OID_GEN_VENDOR_DRIVER_VERSION:

		ulGenericUlong = ((ULONG)VENDOR_MAJOR_VERSION << 16) + VENDOR_MINOR_VERSION;
		break;

	case OID_GEN_DRIVER_VERSION:

		usGenericUShort = (USHORT) ((NDIS_MAJOR_VERSION << 8) + NDIS_MINOR_VERSION);
		pvMoveSource = (PVOID)(&usGenericUShort);
		ulMoveBytes = sizeof(usGenericUShort);
		break;

	case OID_GEN_MEDIA_CONNECT_STATUS:

		ulGenericUlong = psAdapter->eMediaState;
		break;

	case OID_GEN_MAXIMUM_SEND_PACKETS:

		ulGenericUlong = psHAL->ulTxBufNum;
		break;

	case OID_GEN_XMIT_OK:

		ulGenericUlong = psStats->ulTotalPktsTxedOk;
		break;

	case OID_GEN_RCV_OK:

		ulGenericUlong = psStats->ulTotalPktsRxedOk;
		break;

	case OID_GEN_XMIT_ERROR:

		ulGenericUlong = psStats->ulTotalPktsTxedError;
		break;

	case OID_GEN_RCV_ERROR:

		ulGenericUlong = psStats->ulTotalPktsRxedError +
						 psStats->ulRxAlignmentError +
						 psStats->ulRxResourceError;
		break;

	case OID_GEN_RCV_NO_BUFFER:

		ulGenericUlong = psStats->ulRxResourceError;
		break;

	case OID_GEN_RCV_CRC_ERROR:

		ulGenericUlong = psStats->ulRcvCrcErrors;
		break;

	case OID_GEN_TRANSMIT_QUEUE_LENGTH:

		ulGenericUlong = psHAL->ulTxBufNum;
		break;

	case OID_GEN_PHYSICAL_MEDIUM:

		ulGenericUlong = (ULONG) NdisPhysicalMediumWirelessLan;
		break;

	case OID_802_3_PERMANENT_ADDRESS:

		pvMoveSource = psAdapter->ucPermanentAddress;
		ulMoveBytes = ETH_LENGTH_OF_ADDRESS;
		break;

	case OID_802_3_CURRENT_ADDRESS:

		pvMoveSource = psAdapter->ucCurrentAddress;
		ulMoveBytes = ETH_LENGTH_OF_ADDRESS;
		break;

	case OID_802_3_MAXIMUM_LIST_SIZE:

		ulGenericUlong = (ULONG) MAX_MULTICAST_ADDRESSES;
		break;

	case OID_802_3_RCV_ERROR_ALIGNMENT:

		ulGenericUlong = psStats->ulRxAlignmentError;
		break;

	case OID_802_3_XMIT_ONE_COLLISION:

		ulGenericUlong = psStats->ulTxOneCollision;
		break;

	case OID_802_3_XMIT_MORE_COLLISIONS:

		ulGenericUlong = psStats->ulTxMoreCollision;
		break;

	//
	// 802.11 WLAN related OIDs.
	//
	case OID_802_11_BSSID:

		if ( ( psAdapter->eNetState == NET_CONNECTED ) ||
			 ( psAdapter->eNetState == NET_DISCONNECTING ) )
		{
			pvMoveSource = (PVOID) (psWlan->ucBSSID);
			ulMoveBytes = sizeof(NDIS_802_11_MAC_ADDRESS);
		}
		else
			ulGenericUlong = 0;
		break;

	case OID_802_11_SSID:

		if ( ( psAdapter->eNetState == NET_CONNECTED ) ||
			 ( psAdapter->eNetState == NET_DISCONNECTING ) )
		{
			pvMoveSource = (PVOID) (&psWlan->sSSID);
			ulMoveBytes = sizeof(NDIS_802_11_SSID);
		}
		else
			ulGenericUlong = 0;
		break;

	case OID_802_11_NETWORK_TYPES_SUPPORTED:

		pvMoveSource = (PVOID) (&psWlan->ulNumOfNetworkType);
		ulMoveBytes = sizeof(ULONG) + sizeof(ULONG) * psWlan->ulNumOfNetworkType;
		break;

	case OID_802_11_NETWORK_TYPE_IN_USE:

		ulGenericUlong = psWlan->ulNetworkTypeInUse;
		break;

	case OID_802_11_RSSI:

		pvMoveSource = (PVOID) (&psWlan->lRssi);
		ulMoveBytes = sizeof( NDIS_802_11_RSSI );
		break;

	case OID_802_11_RSSI_TRIGGER:

		pvMoveSource = (PVOID) (&psWlan->lRssiTrigger);
		ulMoveBytes = sizeof( NDIS_802_11_RSSI );
		break;

	case OID_802_11_INFRASTRUCTURE_MODE:

		ulGenericUlong = psWlan->ulInfraMode;
		break;

	case OID_802_11_FRAGMENTATION_THRESHOLD:

		ulGenericUlong = psWlan->ulFragmentThreshold;
		break;

	case OID_802_11_RTS_THRESHOLD:

		ulGenericUlong = psWlan->ulRTSThreshold;
		break;

	case OID_802_11_NUMBER_OF_ANTENNAS:

		ulGenericUlong = (psWlan->ulNumOfRxAntennas >= psWlan->ulNumOfTxAntennas) ?
						  psWlan->ulNumOfRxAntennas : psWlan->ulNumOfTxAntennas;
		break;

	case OID_802_11_RX_ANTENNA_SELECTED:

		ulGenericUlong = psWlan->ulRxAntennaSelected;
		break;

	case OID_802_11_TX_ANTENNA_SELECTED:

		ulGenericUlong = psWlan->ulTxAntennaSelected;
		break;

	case OID_802_11_SUPPORTED_RATES:

		pvMoveSource = (PVOID) (psWlan->ucSupportedRates);
		ulMoveBytes = sizeof( NDIS_802_11_RATES_EX );
		break;

	case OID_802_11_DESIRED_RATES:

		pvMoveSource = (PVOID) (psWlan->ucDesiredRates);
		ulMoveBytes = sizeof( NDIS_802_11_RATES_EX );
		break;

	case OID_802_11_CONFIGURATION:

		// if not in IBSS mode and not associated, set BeaconPeriod to zero.
		if ( psWlan->ulInfraMode != Ndis802_11IBSS &&
			((psAdapter->eNetState != NET_CONNECTED) &&
			 (psAdapter->eNetState != NET_DISCONNECTING)) )
			psWlan->sRadioConfig.BeaconPeriod = 0;

		pvMoveSource = (PVOID) (&psWlan->sRadioConfig);
		ulMoveBytes = sizeof( NDIS_802_11_CONFIGURATION );
		break;

	case OID_802_11_STATISTICS:

		if ( sizeof(NDIS_802_11_STATISTICS) > ulInformationBufferLength )
		{
			*pulBytesNeeded = sizeof( NDIS_802_11_STATISTICS );
			iStatus = NDIS_STATUS_INVALID_LENGTH;
		}
		else
		{
			// Send Get 802.11 Stats request to update the statistics information.
			vHALsendGetStatsReq( psHAL );

			iStatus = NDIS_STATUS_PENDING;
		}
		break;

	case OID_802_11_POWER_MODE:

		ulGenericUlong = psWlan->ulPowerMode;
		DBG_LEV2(("Query power mode, returning %d.\n", psWlan->ulPowerMode));
		break;

	case OID_802_11_BSSID_LIST:

		{
		ULONG						ulLength = sizeof( ULONG );
		PNDIS_802_11_BSSID_LIST_EX	psBssidList = (PNDIS_802_11_BSSID_LIST_EX) pvInformationBuffer;
		PNDIS_WLAN_BSSID_EX			psBssid = psBssidList->Bssid;

		psBssidList->NumberOfItems = 0;

		for ( i=0; i<psWlan->ulNumOfBssidBuf; i++ )
		{
			if ( psWlan->sBssidList[i].llTimeStamp > 0)	// Entry is valid
			{
		
				if( 32 <= psWlan->sBssidList[i].psBssid->Ssid.SsidLength )
					continue;			
				
				ulLength += psWlan->sBssidList[i].psBssid->Length;

				if ( ulLength > ulInformationBufferLength )
				{
					// can't copy any more BSSIDs into list
				}
				else
				{
					OS_MEMCPY( psBssid, psWlan->sBssidList[i].psBssid, psWlan->sBssidList[i].psBssid->Length );
					psBssid = (PNDIS_WLAN_BSSID_EX) ((PUCHAR)psBssid + psWlan->sBssidList[i].psBssid->Length);

					psBssidList->NumberOfItems ++;

					boSkipCopy = TRUE;
				}
			}
		}
		*pulBytesWritten = ulLength;
		*pulBytesNeeded = ulLength;

		if ( ulLength > ulInformationBufferLength )
		{
			*pulBytesNeeded = ulLength;
			iStatus = NDIS_STATUS_INVALID_LENGTH;
		}


		DBG_LEV3(("Num of BSSIDs copied into OID_802_11_BSSID_LIST =  %d .\n", psBssidList->NumberOfItems));
		DBG_LEV3(("Num of BSSIDs in driver's BSSID List = %d.\n", psWlan->ulNumOfBssid));
		}
		break;


	case OID_802_11_AUTHENTICATION_MODE:
		if (psWlan->auth_params[IW_AUTH_WPA_VERSION] & IW_AUTH_WPA_VERSION_WPA2)
		{
			if (psWlan->auth_params[IW_AUTH_KEY_MGMT] & IW_AUTH_KEY_MGMT_PSK)
				ulGenericUlong = Ndis802_11AuthModeWPA2PSK;
			else
				ulGenericUlong = Ndis802_11AuthModeWPA2;
		}
		else if (psWlan->auth_params[IW_AUTH_WPA_VERSION] & IW_AUTH_WPA_VERSION_WPA)
		{
			if (psWlan->auth_params[IW_AUTH_KEY_MGMT] & IW_AUTH_KEY_MGMT_PSK)
				ulGenericUlong = Ndis802_11AuthModeWPAPSK;
			else
				ulGenericUlong = Ndis802_11AuthModeWPA;
		}
		else // Assume WPA disabled
		{
			if (psWlan->auth_params[IW_AUTH_80211_AUTH_ALG] & IW_AUTH_ALG_SHARED_KEY)
				ulGenericUlong = Ndis802_11AuthModeShared;
			else // No check for LEAP, not supported at present; assume open
				ulGenericUlong = Ndis802_11AuthModeOpen;
		}

		DBG_LEV2(("Query authentication mode %d.\n", ulGenericUlong));
		break;

	case OID_802_11_ENCRYPTION_STATUS:
		{
			UINT32 u32Cipher = psWlan->auth_params[IW_AUTH_CIPHER_PAIRWISE] |
							   psWlan->auth_params[IW_AUTH_CIPHER_GROUP];

			if (u32Cipher & IW_AUTH_CIPHER_CCMP)
			{
				if (psWlan->boTransmitKeyAvail)
					ulGenericUlong = Ndis802_11Encryption3Enabled;
				else
					ulGenericUlong = Ndis802_11Encryption3KeyAbsent;
			}
			else if (u32Cipher & IW_AUTH_CIPHER_TKIP)
			{
				if (psWlan->boTransmitKeyAvail)
					ulGenericUlong = Ndis802_11Encryption2Enabled;
				else
					ulGenericUlong = Ndis802_11Encryption2KeyAbsent;
			}
			else if ((u32Cipher & IW_AUTH_CIPHER_WEP104) || (u32Cipher & IW_AUTH_CIPHER_TKIP))
			{
				if (psWlan->boTransmitKeyAvail)
					ulGenericUlong = Ndis802_11Encryption1Enabled;
				else
					ulGenericUlong = Ndis802_11Encryption1KeyAbsent;
			}
			else
				ulGenericUlong = Ndis802_11EncryptionDisabled;

			DBG_LEV2(("Query encryption status %d.\n", ulGenericUlong));
		}
		break;

	case OID_802_11_ASSOCIATION_INFORMATION:
				
		pvMoveSource = (PVOID) (&psWlan->sAssocInfo);
		if ( psAdapter->eNetState != NET_CONNECTED )
			ulMoveBytes = 0;
		else if (psWlan->auth_params[IW_AUTH_WPA_VERSION] &
					(IW_AUTH_WPA_VERSION_WPA | IW_AUTH_WPA_VERSION_WPA2))
		{
			ulMoveBytes = psWlan->sAssocInfo.OffsetResponseIEs + psWlan->sAssocInfo.ResponseIELength;
		}
		else
		{
			ulMoveBytes = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION);
		}

		DBG_LEV2(("Query association information, returning %d bytes.\n",
					ulMoveBytes));
		break;

// CE doesn't support WPA2
	case OID_802_11_CAPABILITY:
		pvMoveSource = (PVOID) (&psWlan->sDriverCapability);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -