📄 oidproc.c
字号:
case OID_GEN_CURRENT_LOOKAHEAD:
GenericULONG = (ULONG)MRVDRV_MAXIMUM_ETH_PACKET_SIZE - MRVDRV_ETH_HEADER_SIZE;
DBGPRINT(DBG_RXDATA, ("OID: Return OID_GEN_CURRENT_LOOKAHEAD to %d\n",
MRVDRV_MAXIMUM_ETH_PACKET_SIZE- MRVDRV_ETH_HEADER_SIZE));
break;
case OID_GEN_MAXIMUM_TOTAL_SIZE:
case OID_GEN_RECEIVE_BLOCK_SIZE:
case OID_GEN_TRANSMIT_BLOCK_SIZE:
///crlo:MTU ++
#ifdef IF_GSPI
GenericULONG = (ULONG)MRVDRV_MTU_TOTAL;
#else
GenericULONG = (ULONG)MRVDRV_MAXIMUM_ETH_PACKET_SIZE;
#endif
///crlo:MTU --
break;
case OID_GEN_LINK_SPEED:
// should never return 0mbps according to spec
if ( Adapter->LinkSpeed == MRVDRV_LINK_SPEED_0mbps )
{
GenericULONG = (ULONG) MRVDRV_LINK_SPEED_1mbps;
}
else
{
GenericULONG = (ULONG) Adapter->LinkSpeed;
}
//NKDbgPrintfW(L"[Marvell]Query+OID_GEN_LINK_SPEED= %d", (ULONG)GenericULONG);
break;
case OID_GEN_TRANSMIT_BUFFER_SPACE:
GenericULONG = (ULONG)0;
break;
case OID_GEN_RECEIVE_BUFFER_SPACE:
// GenericULONG = (ULONG) MRVDRV_MAXIMUM_ETH_PACKET_SIZE*MRVDRV_NUM_OF_RXPD; // 1514 * 8
GenericULONG = (ULONG) MRVDRV_MAXIMUM_ETH_PACKET_SIZE; // 1514 * 8
break;
case OID_GEN_VENDOR_ID:
MoveSource = (PVOID) (&Adapter->VendorID);
MoveBytes = 4;
break;
case OID_GEN_VENDOR_DESCRIPTION:
MoveSource = (PVOID) VendorDescriptor;
MoveBytes = sizeof(VendorDescriptor);
break;
case OID_GEN_DRIVER_VERSION:
GenericUSHORT = (USHORT) MRVDRV_DRIVER_VERSION;
MoveSource = (PVOID)(&GenericUSHORT);
MoveBytes = sizeof(GenericUSHORT);
break;
case OID_GEN_VENDOR_DRIVER_VERSION:
// CF8381/8385 only uses the last 3 bytes
GenericULONG = Adapter->FWReleaseNumber << 8;
break;
// WMI support
case OID_GEN_SUPPORTED_GUIDS:
MoveSource = (PUCHAR)&GUIDList;
MoveBytes = sizeof(GUIDList);
break;
// Task Offload
//case OID_GEN_TASK_OFFLOAD:
//
// Status = NDIS_STATUS_NOT_SUPPORTED;
// break;
case OID_802_3_MULTICAST_LIST:
DBGPRINT(DBG_OID,("REQUEST - OID_802_3_MULTICAST_LIST \n"));
if (InformationBufferLength < (Adapter->NumOfMulticastMACAddr*ETH_LENGTH_OF_ADDRESS))
{
*BytesNeeded = Adapter->NumOfMulticastMACAddr*ETH_LENGTH_OF_ADDRESS;
return NDIS_STATUS_INVALID_LENGTH;
}
MoveSource = (PVOID) Adapter->MulticastList;
MoveBytes = Adapter->NumOfMulticastMACAddr*ETH_LENGTH_OF_ADDRESS;
break;
/* tt
// The data must be a multiple of the Ethernet address size.
if (InformationBufferLength < (Adapter->NumOfMulticastMACAddr*ETH_LENGTH_OF_ADDRESS)){
*BytesNeeded = Adapter->NumOfMulticastMACAddr*ETH_LENGTH_OF_ADDRESS;
return NDIS_STATUS_INVALID_LENGTH;
}
// Save these new MC addresses to our adapter object
NdisMoveMemory(InformationBuffer,
Adapter->MulticastList,
Adapter->NumOfMulticastMACAddr*ETH_LENGTH_OF_ADDRESS);
*BytesWritten = Adapter->NumOfMulticastMACAddr*ETH_LENGTH_OF_ADDRESS;
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_MAC_MULTICAST_ADR,
HostCmd_ACT_GEN_GET,
HostCmd_OPTION_USE_INT,
Oid,
HostCmd_PENDING_ON_GET_OID,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES){
return Status;
}
else {
Status = NDIS_STATUS_PENDING;
}
*/
// // Save the number of MC address in our adapter object
// Adapter->NumOfMulticastMACAddr = (InformationBufferLength / ETH_LENGTH_OF_ADDRESS);
case OID_802_3_PERMANENT_ADDRESS:
ETH_COPY_NETWORK_ADDRESS((PCHAR) GenericArray, Adapter->PermanentAddr);
MoveSource = (PVOID) (GenericArray);
MoveBytes = MRVDRV_ETH_ADDR_LEN;
#ifdef DBG
DBGPRINT(DBG_OID,("*** OID return permanent addr: %2x %2x %2x %2x %2x %2x ***\n",
Adapter->PermanentAddr[0],
Adapter->PermanentAddr[1],
Adapter->PermanentAddr[2],
Adapter->PermanentAddr[3],
Adapter->PermanentAddr[4],
Adapter->PermanentAddr[5]));
#endif
break;
case OID_802_3_CURRENT_ADDRESS:
ETH_COPY_NETWORK_ADDRESS(GenericArray, Adapter->CurrentAddr);
MoveSource = (PVOID) (GenericArray);
MoveBytes = MRVDRV_ETH_ADDR_LEN;
break;
case OID_802_3_MAXIMUM_LIST_SIZE:
GenericULONG = (ULONG)MRVDRV_MAX_MULTICAST_LIST_SIZE;
break;
case OID_GEN_MAXIMUM_SEND_PACKETS:
GenericULONG = 1;//MiniportSend only
#ifdef USE_TX_QUEUE
GenericULONG = 10;
#endif // #ifdef USE_TX_QUEUE
break;
case OID_GEN_MEDIA_CONNECT_STATUS:
DBGPRINT(DBG_OID, ("Request - OID_GEN_MEDIA_CONNECT_STATUS : %d\n",
Adapter->MediaConnectStatus));
#ifdef REASSOCIATE
if ((Adapter->bIsReconnectEnable == TRUE) ||
(Adapter->bIsBeaconLoseEvent == TRUE) ||
(Adapter->bIsDeauthenticationEvent == TRUE)
#ifdef ACTIVE_ROAMING
||(Adapter->bIsActiveRoaming== TRUE)
#endif
)
{
GenericLONG = (ULONG) NdisMediaStateConnected;
}
else
#endif
{
GenericLONG = (ULONG) Adapter->MediaConnectStatus;
}
MoveSource = (PVOID) (&GenericLONG);
MoveBytes = sizeof(GenericLONG);
break;
case OID_PNP_CAPABILITIES:
DBGPRINT(DBG_POWER,("OID_PNP_CAPABILITIES\n"));
//return NDIS_STATUS_NOT_SUPPORTED;
/*
#ifdef UNDER_CE
*/
PMCap.WakeUpCapabilities.MinMagicPacketWakeUp = NdisDeviceStateUnspecified;
PMCap.WakeUpCapabilities.MinPatternWakeUp = NdisDeviceStateUnspecified;
PMCap.WakeUpCapabilities.MinLinkChangeWakeUp = NdisDeviceStateUnspecified;
/*
#else
// PNP support for XP is broken, return NDIS_STATUS_NOT_SUPPORTED for now
return NDIS_STATUS_NOT_SUPPORTED;
#endif
*/
MoveSource = (PVOID) &PMCap;
MoveBytes = sizeof(NDIS_PNP_CAPABILITIES);
break;
case OID_PNP_QUERY_POWER:
DBGPRINT(DBG_POWER,("OID_PNP_QUERY_POWER\n"));
//return NDIS_STATUS_NOT_SUPPORTED;
NewPowerState = (NDIS_DEVICE_POWER_STATE)*(PNDIS_DEVICE_POWER_STATE)InformationBuffer;
if ( NewPowerState == NdisDeviceStateUnspecified )
{
DBGPRINT(DBG_POWER,("Requested power state: NdisDeviceStateUnspecified\n"));
}
else if ( NewPowerState == NdisDeviceStateD0 )
{
DBGPRINT(DBG_POWER,("Requested power state: NdisDeviceStateD0\n"));
}
else if ( NewPowerState == NdisDeviceStateD1 )
{
DBGPRINT(DBG_POWER,("Requested power state: NdisDeviceStateD1\n"));
}
else if ( NewPowerState == NdisDeviceStateD2 )
{
DBGPRINT(DBG_POWER,("Requested power state: NdisDeviceStateD2\n"));
}
else if ( NewPowerState == NdisDeviceStateD3 )
{
DBGPRINT(DBG_POWER,("Requested power state: NdisDeviceStateD3\n"));
}
else
{
DBGPRINT(DBG_POWER,("UNKNOWN POWER STATE REQUESTED %x\n", NewPowerState));
}
// Determine if Station can suuport this state
if( ( NewPowerState == NdisDeviceStateD0 ) || ( NewPowerState == NdisDeviceStateD3 ) )
{
DBGPRINT(DBG_POWER,("REQUESTED POWER STATE SUPPORTED!\n"));
return NDIS_STATUS_SUCCESS;
}
else // We don't know hot to handle NdisDeviceStateD2 yet
{
DBGPRINT(DBG_POWER,("REQUESTED POWER STATE NOT SUPPORTED %x\n",NewPowerState ));
return NDIS_STATUS_NOT_SUPPORTED;
}
break;
#ifndef WHQL_FIX
case OID_PNP_WAKE_UP_PATTERN_LIST:
DBGPRINT(DBG_POWER | DBG_ALLEN,("REQUESTED POWER STATE NOT SUPPORTED %x\n",NewPowerState ));
return NDIS_STATUS_NOT_SUPPORTED;
break;
#endif
case OID_GEN_PHYSICAL_MEDIUM:
GenericULONG = (ULONG)NdisPhysicalMediumWirelessLan;
break;
case OID_802_11_NETWORK_TYPES_SUPPORTED:
{
NDIS_802_11_NETWORK_TYPE_LIST *pNetworkTypeList;
DBGPRINT(DBG_OID, ("Requst - OID_802_11_NETWORK_TYPES_SUPPORTED ****\n"));
if( InformationBufferLength < sizeof(NDIS_802_11_NETWORK_TYPE_LIST) )
{
*BytesNeeded = sizeof(NDIS_802_11_NETWORK_TYPE_LIST);
return NDIS_STATUS_INVALID_LENGTH;
}
// only 1 item
pNetworkTypeList = (NDIS_802_11_NETWORK_TYPE_LIST *)InformationBuffer;
pNetworkTypeList->NumberOfItems = 1;
pNetworkTypeList->NetworkType[0] = Ndis802_11DS;
*BytesWritten = sizeof(NDIS_802_11_NETWORK_TYPE_LIST);
return NDIS_STATUS_SUCCESS;
/* tt
MoveBytes = sizeof(NDIS_802_11_NETWORK_TYPE_LIST);
*/
}
break;
case OID_802_11_NETWORK_TYPE_IN_USE:
//DBGPRINT(DBG_OID,("REQUEST - OID_802_11_NETWORK_TYPE_IN_USE ****\n"));
if( InformationBufferLength < sizeof(NDIS_802_11_NETWORK_TYPE) ){
*BytesNeeded = sizeof(NDIS_802_11_NETWORK_TYPE);
return NDIS_STATUS_INVALID_LENGTH;
}
GenericULONG = (ULONG)Ndis802_11DS;
break;
case OID_802_11_BSSID:
//DBGPRINT(DBG_OID,("REQUEST - OID_802_11_BSSID ****\n"));
// if the CurrentBSSID is a NULL string
if ( NdisEqualMemory(Adapter->CurrentBSSID,
Adapter->NullBSSID,
MRVDRV_ETH_ADDR_LEN) )
{
Status = NDIS_STATUS_ADAPTER_NOT_READY;
}
else if( InformationBufferLength < MRVDRV_ETH_ADDR_LEN )
{
*BytesNeeded = MRVDRV_ETH_ADDR_LEN;
return NDIS_STATUS_INVALID_LENGTH;
}
else{
MoveSource = (PVOID)Adapter->CurrentBSSID;
MoveBytes = MRVDRV_ETH_ADDR_LEN;
}
break;
case OID_802_11_SSID:
DBGPRINT(DBG_OID,("REQUEST - OID_802_11_SSID ****\n"));
if( InformationBufferLength < sizeof(NDIS_802_11_SSID))
{
*BytesNeeded = sizeof(NDIS_802_11_SSID);
return NDIS_STATUS_INVALID_LENGTH;
}
if ( NdisEqualMemory(&(Adapter->CurrentSSID),
&(Adapter->NullSSID),
sizeof(NDIS_802_11_SSID)))
{
MoveBytes = 0;
DBGPRINT(DBG_OID,("Current SSID is null!\n"));
}
else
{
DBGPRINT(DBG_OID,("Current SSID is %s\n", Adapter->CurrentSSID.Ssid));
MoveSource = (PVOID)&Adapter->CurrentSSID;
MoveBytes = sizeof(NDIS_802_11_SSID);
// HexDump(DBG_OID, "CurrentSSID: ", (PUCHAR)&Adapter->CurrentSSID,
// sizeof(NDIS_802_11_SSID));
}
break;
case OID_802_11_POWER_MODE:
DBGPRINT(DBG_OID,("REQUEST - OID_802_11_POWER_MODE ****\n"));
if( InformationBufferLength < sizeof(NDIS_802_11_POWER_MODE) )
{
*BytesNeeded = sizeof(NDIS_802_11_POWER_MODE);
return NDIS_STATUS_INVALID_LENGTH;
}
//Ling++, 012706, PSMode_B, For query OID_802_11_POWER_MODE when if( Adapter->PSMode == Ndis802_11PowerModeMAX_PSP)
if((Adapter->PSMode==Ndis802_11PowerModeCAM)&&(Adapter->PSMode_B== Ndis802_11PowerModeMAX_PSP))
{
MoveSource = (PVOID)&Adapter->PSMode_B;
}else
{
MoveSource = (PVOID)&Adapter->PSMode;
}
//MoveSource = (PVOID)&Adapter->PSMode;
//Ling--, 012706
MoveBytes = sizeof(NDIS_802_11_POWER_MODE);
break;
case OID_802_11_RSSI:
{
#ifdef NEW_RSSI
ULONG ulTimeDiff;
if( (ulTimeDiff=GetTickCount())>Adapter->ulRSSITickCount)
{
ulTimeDiff=ulTimeDiff-Adapter->ulRSSITickCount;
}
else
{
ulTimeDiff=0xFFFFFFFF-ulTimeDiff+Adapter->ulRSSITickCount;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -