📄 card.cpp
字号:
#if NDISVER == 5
if (card->mp_enabled != MP_POWERED)
{
if (((Oid != OID_GEN_MEDIA_CONNECT_STATUS) && (Oid != OID_TCP_TASK_OFFLOAD)) ||
(card->mp_enabled == MP_ENABLED))
{
InitFW(card, TRUE);
card->mp_enabled= MP_POWERED;
InitInterrupts( card ); //spb010
}
}
#endif
//spb001 Finish Initialization if we haven't yet
if (!card->initComplete) {
InitFW1(card);
InitInterrupts( card ); //spb010
}
NDIS_STATUS StatusToReturn = NDIS_STATUS_SUCCESS;
//spb008
if (TRUE == CheckCardFlashing(card,&StatusToReturn,Oid )) {
return StatusToReturn;
}
cmdAwaken(card, TRUE);
NDIS_802_11_SSID ndis_ssid;
NDIS_802_11_CONFIGURATION ndis_config;
NDIS_802_11_RSSI ndis_rssi;
NDIS_802_11_MAC_ADDRESS ndis_bssid;
NDIS_802_11_NETWORK_INFRASTRUCTURE ndis_infrastructure;
NDIS_802_11_AUTHENTICATION_MODE ndis_authmode;
NDIS_802_11_NETWORK_TYPE ndis_nettype;
NDIS_802_11_RATES ndis_rates;
NDIS_802_11_WEP_STATUS ndis_wepstatus;
#if NDISVER == 5
NDIS_PNP_CAPABILITIES ndis_pnp_capablities;
#endif
ULONG GenericULong;
USHORT GenericUShort;
UCHAR GenericArray[6];
UINT MoveBytes = sizeof(ULONG);
PVOID MoveSource = (PVOID)(&GenericULong);
*BytesWritten = 0;
*BytesNeeded = 0;
//NDIS_HARDWARE_STATUS HardwareStatus = NdisHardwareStatusReady;
NDIS_MEDIUM Medium = NdisMedium802_3;
ASSERT(sizeof(ULONG) == 4);
switch (Oid) {
case OID_GEN_MAC_OPTIONS:
#if NDISVER == 3
//#ifndef PM_SUPPORT
GenericULong = (ULONG)( NDIS_MAC_OPTION_TRANSFERS_NOT_PEND |
NDIS_MAC_OPTION_RECEIVE_SERIALIZED |
NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA |
NDIS_MAC_OPTION_NO_LOOPBACK );
#else
GenericULong = (ULONG)( NDIS_MAC_OPTION_TRANSFERS_NOT_PEND |
NDIS_MAC_OPTION_RECEIVE_SERIALIZED |
NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA |
NDIS_MAC_OPTION_TRANSFERS_NOT_PEND |
NDIS_MAC_OPTION_NO_LOOPBACK );
#endif
break;
case OID_GEN_SUPPORTED_LIST:
MoveSource = (PVOID)(AironetSupportedOids);
MoveBytes = GetSupOidSize();
break;
case OID_GEN_HARDWARE_STATUS:
GenericULong = IsCardInserted(card) ? NdisHardwareStatusReady : NdisHardwareStatusNotReady;
break;
//veSource = (PVOID)( &HardwareStatus );
//veBytes = sizeof( NDIS_HARDWARE_STATUS );
//break;
case OID_GEN_MEDIA_SUPPORTED:
case OID_GEN_MEDIA_IN_USE:
MoveSource = (PVOID) (&Medium);
MoveBytes = sizeof(NDIS_MEDIUM);
break;
case OID_GEN_MAXIMUM_LOOKAHEAD:
GenericULong = AIRONET_MAX_LOOKAHEAD;
break;
case OID_GEN_MAXIMUM_FRAME_SIZE:
GenericULong = (ULONG)(1514 - AIRONET_HEADER_SIZE);
break;
case OID_GEN_MAXIMUM_TOTAL_SIZE:
GenericULong = (ULONG)1514;
break;
case OID_GEN_LINK_SPEED:
#ifdef SOFTEX
if( ! ADAPTER_READY( card ) ){
GenericULong = 1;
break;
}
#endif
UpdateLinkSpeed( card );
GenericULong = card->m_LinkSpeed;
if(0==GenericULong) {
// This fixes the 98 hang problem. (v6.54 10/18/00)
GenericULong = 11 * 10000; // This value is in units of 100 bps
}
break;
case OID_GEN_TRANSMIT_BUFFER_SPACE:
GenericULong = (ULONG)TX_BUF_SIZE;
break;
case OID_GEN_RECEIVE_BUFFER_SPACE:
GenericULong = (ULONG)2314;
break;
case OID_GEN_TRANSMIT_BLOCK_SIZE:
GenericULong = (ULONG)TX_BUF_SIZE;
break;
case OID_GEN_RECEIVE_BLOCK_SIZE:
GenericULong = (ULONG)1514;
break;
case OID_GEN_VENDOR_ID:
NdisMoveMemory( (PVOID)&GenericULong, card->m_PermanentAddress, 3 );
GenericULong &= 0xFFFFFF00;
MoveSource = (PVOID)&GenericULong;
MoveBytes = sizeof(GenericULong);
break;
case OID_GEN_VENDOR_DESCRIPTION:
//MoveSource = (PVOID)"Aironet Wireless LAN Adapter.";
//MoveBytes = 31;
strcpy( tmpBuf, "Cisco " );
strncpy( tmpBuf+strlen(tmpBuf), card->m_CardName, ARRAYSIZE(tmpBuf) - strlen(tmpBuf) - 1 );
tmpBuf[ARRAYSIZE(tmpBuf) - 1] = '\0';
strncpy( tmpBuf+strlen(tmpBuf), " Wireless LAN Adapter.", ARRAYSIZE(tmpBuf) - strlen(tmpBuf) - 1 );
tmpBuf[ARRAYSIZE(tmpBuf) - 1] = '\0';
MoveSource = tmpBuf;
MoveBytes = strlen(tmpBuf)+1;
break;
case OID_GEN_DRIVER_VERSION:
GenericUShort = ((USHORT)NDIS_MAJOR_VERSION << 8) | NDIS_MINOR_VERSION;
MoveSource = (PVOID)&GenericUShort;
MoveBytes = sizeof(GenericUShort);
break;
case OID_GEN_CURRENT_LOOKAHEAD:
GenericULong = (ULONG)card->m_MaxLookAhead;
break;
case OID_802_3_PERMANENT_ADDRESS:
NdisMoveMemory((PCHAR)GenericArray, card->m_PermanentAddress, AIRONET_LENGTH_OF_ADDRESS);
MoveSource = (PVOID)GenericArray;
MoveBytes = sizeof(card->m_PermanentAddress);
break;
case OID_802_3_CURRENT_ADDRESS:
NdisMoveMemory((PCHAR)GenericArray, card->m_StationAddress, AIRONET_LENGTH_OF_ADDRESS);
MoveSource = (PVOID)GenericArray;
MoveBytes = sizeof(card->m_StationAddress);
break;
case OID_802_3_MAXIMUM_LIST_SIZE:
GenericULong = (ULONG) card->m_MaxMulticastList;
break;
case OID_GEN_XMIT_OK:
UpdateCounters(card);
GenericULong = (UINT)card->m_FramesXmitGood;
break;
case OID_GEN_RCV_OK:
UpdateCounters(card);
GenericULong = (UINT)card->m_FramesRcvGood;
break;
case OID_GEN_XMIT_ERROR:
UpdateCounters(card);
GenericULong = (UINT)card->m_FramesXmitBad;
break;
case OID_GEN_RCV_ERROR:
UpdateCounters(card);
GenericULong = (UINT)card->m_FramesRcvBad;
break;
case OID_GEN_RCV_NO_BUFFER:
UpdateCounters(card);
GenericULong = (UINT)card->m_FramesRcvOverRun;
break;
case OID_802_3_RCV_ERROR_ALIGNMENT:
GenericULong = 0;
break;
case OID_802_3_XMIT_ONE_COLLISION:
UpdateCounters(card);
GenericULong = (UINT)card->m_FramesXmitOneCollision;
break;
case OID_802_3_XMIT_MORE_COLLISIONS:
UpdateCounters(card);
GenericULong = (UINT)card->m_FramesXmitManyCollisions;
break;
case OID_GEN_VENDOR_DRIVER_VERSION:
GenericULong = (DriverMajorVersion<<16) | DriverMinorVersion;
break;
case OID_GEN_MAXIMUM_SEND_PACKETS:
GenericULong = 1;
break;
case OID_GEN_MEDIA_CONNECT_STATUS:
if (NDIS_STATUS_MEDIA_CONNECT == card->m_MSenceStatus) {
GenericULong = NdisMediaStateConnected;
}
else {
GenericULong = NdisMediaStateDisconnected;
}
#if DBG
//spb026 DbgPrint("Media Connect Status is %s\n",
//spb026 GenericULong==NdisMediaStateDisconnected?"NdisMediaStateDisconnected"
//spb026 :"NdisMediaStateConnected");
#endif
DEBUGMSG (ZONE_QUERY,
(TEXT("PCX500:: OID_GEN_MEDIA_CONNECT_STATUS return [%s]\r\n"),
GenericULong==NdisMediaStateDisconnected ?
TEXT("Disconnected"):
TEXT("Connected")));
break;
//***************************************************************************
// BEGIN 802.11 OIDs -- (query)
//***************************************************************************
//-----------------------------------------------------------------------
// This object defines the Service Set Identifier. The SSID is a string,
// up to 32 characters. It identifies a set of interconnected Basic Service
// Sets. Passing in an empty string means associate with any SSID. Setting
// an SSID would result in disassociating if already associated with a
// particular SSID, turning on the radio if the radio is currently in the
// off state, setting the SSID with the value specified or setting it to
// any SSID if SSID is not specified, and attempting to associate with the
// set SSID.
//
// Data type: NDIS_802_11_SSID.
// Query: Returns the SSID.
// Set: Sets the SSID.
// Indication: Not supported.
//-----------------------------------------------------------------------
case OID_802_11_SSID: {
MoveBytes = sizeof(NDIS_802_11_SSID);
MoveSource = &ndis_ssid;
NdisZeroMemory(&ndis_ssid,MoveBytes);
if (NDIS_STATUS_MEDIA_CONNECT == card->m_MSenceStatus) {
ndis_ssid.SsidLength = (card->m_SSID.SsidLength < 32)?card->m_SSID.SsidLength:32;
NdisMoveMemory(ndis_ssid.Ssid,card->m_SSID.Ssid,ndis_ssid.SsidLength);
}
break;
}
//-----------------------------------------------------------------------
// Query or Set how an 802.11 NIC connects to the network. Will also reset
// the network association algorithm.
//
// Data type: NDIS_802_11_NETWORK_INFRASTRUCTURE.
// Query: Returns either Infrastructure or Independent Basic Service Set
// (IBSS), unknown.
// Set: Sets Infrastructure or IBSS, or automatic switch between the
// two.
// Indication: Not supported.
//-----------------------------------------------------------------------
case OID_802_11_INFRASTRUCTURE_MODE: {
USHORT mode = card->m_activeProfile->zFlags.cfg.OpMode;
if ((mode & 0x00FF) == 0) {
ndis_infrastructure = Ndis802_11IBSS;
}
else if ((mode & 0x00FF) == 1) {
ndis_infrastructure = Ndis802_11Infrastructure;
}
else {
StatusToReturn = NDIS_STATUS_INVALID_DATA;
}
MoveSource = &ndis_infrastructure;
MoveBytes = sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE);
break;
}
//-----------------------------------------------------------------------
// Sets the IEEE 802.11 authentication mode.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -