miscproc.c
来自「marvell8385 GSPI开发驱动」· C语言 代码 · 共 2,087 行 · 第 1/4 页
C
2,087 行
NdisMIndicateStatus(
Adapter->MrvDrvAdapterHdl,
NDIS_STATUS_MEDIA_DISCONNECT,
(PVOID)NULL,
0);
V5DbgMsg( (L"** after indicate1 (%d) (%d)\n", s_nCallCount, GetTickCount()) );
NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
V5DbgMsg( (L"** after indicate2 (%d) (%d)\n", s_nCallCount, GetTickCount()) );
Adapter->ulLastMICErrorTime = 0;
if ( Adapter->EncryptionStatus == Ndis802_11Encryption2Enabled )
{
// set to key absent
Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
}
else if ( Adapter->EncryptionStatus == Ndis802_11Encryption3Enabled )
{
// set to key absent
Adapter->EncryptionStatus = Ndis802_11Encryption3KeyAbsent;
}
#ifndef REASSOCIATE
else if ( Adapter->EncryptionStatus == Ndis802_11Encryption1Enabled )
{
// set to key absent
Adapter->EncryptionStatus = Ndis802_11Encryption1KeyAbsent;
}
#endif
#ifdef MRVL_GUI_INTERFACE
MrvlNotifyApplication(
COMMAND_EVENT_DISCONNECT,
NULL,
0);
#endif // MRVL_GUI_INTERFACE
//RETAILMSG(1,(TEXT("[Marvell]-ResetDisconnectStatus()")));
return;
}
VOID
ResetSingleTxDoneAck(
IN PMRVDRV_ADAPTER Adapter
)
{
}
NDIS_STATUS
SetMacPacketFilter(
IN PMRVDRV_ADAPTER Adapter,
IN ULONG CurrentPacketFilter
)
{
NDIS_STATUS Status;
DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN ,("+SetMacPacketFilter() 0x%x \n", CurrentPacketFilter));
// if the CurrentPacketFilter is 0, turn off Rx
if (CurrentPacketFilter == 0)
{
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_BROADCAST_ENABLE;
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
Adapter->usMacControlRecord |= (HostCmd_ACT_MAC_RX_ON |
HostCmd_ACT_MAC_TX_ON |
HostCmd_ACT_MAC_INT_ENABLE);
}
else
{
// Set default MAC option
Adapter->usMacControlRecord |= (HostCmd_ACT_MAC_RX_ON |
HostCmd_ACT_MAC_TX_ON );
// need to check if currently the wep is on
if ( Adapter->WEPStatus == Ndis802_11WEPEnabled )
{
DBGPRINT(DBG_WEP,("WEPStatus set, setting HostCmd_ACT_MAC_WEP_ENABLE in CmdOption\n"));
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_WEP_ENABLE;
}
else
{
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_WEP_ENABLE;
}
if( CurrentPacketFilter & NDIS_PACKET_TYPE_ALL_MULTICAST )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
if ( CurrentPacketFilter & NDIS_PACKET_TYPE_MULTICAST )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_MULTICAST_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;
if ( CurrentPacketFilter & NDIS_PACKET_TYPE_BROADCAST )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_BROADCAST_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_BROADCAST_ENABLE;
if ( CurrentPacketFilter & NDIS_PACKET_TYPE_PROMISCUOUS )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
}
DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN ,("+Set HostCmd_CMD_MAC_CONTROL 0x%x \n", Adapter->usMacControlRecord));
// Send MAc control command ro station
Status=PrepareAndSendCommand(
Adapter,
HostCmd_CMD_MAC_CONTROL,
Adapter->usMacControlRecord,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
return Status;
}
NDIS_STATUS
SetMacPacketFilterOID(
IN PMRVDRV_ADAPTER Adapter,
IN ULONG CurrentPacketFilter
)
{
NDIS_STATUS Status;
DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN ,("+SetMacPacketFilterOID() 0x%x \n", CurrentPacketFilter));
if (CurrentPacketFilter == 0)
{
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_BROADCAST_ENABLE;
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
Adapter->usMacControlRecord |= (HostCmd_ACT_MAC_RX_ON |
HostCmd_ACT_MAC_TX_ON |
HostCmd_ACT_MAC_INT_ENABLE);
}
else
{
// Set default MAC option
Adapter->usMacControlRecord |= (HostCmd_ACT_MAC_RX_ON |
HostCmd_ACT_MAC_TX_ON );
// need to check if currently the wep is on
if ( Adapter->WEPStatus == Ndis802_11WEPEnabled )
{
DBGPRINT(DBG_WEP,("WEPStatus set, setting HostCmd_ACT_MAC_WEP_ENABLE in CmdOption\n"));
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_WEP_ENABLE;
}
else
{
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_WEP_ENABLE;
}
if( CurrentPacketFilter & NDIS_PACKET_TYPE_ALL_MULTICAST )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
if ( CurrentPacketFilter & NDIS_PACKET_TYPE_MULTICAST )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_MULTICAST_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;
if ( CurrentPacketFilter & NDIS_PACKET_TYPE_BROADCAST )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_BROADCAST_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_BROADCAST_ENABLE;
if ( CurrentPacketFilter & NDIS_PACKET_TYPE_PROMISCUOUS )
Adapter->usMacControlRecord |= HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
else
Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
}
DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN ,("+Set HostCmd_CMD_MAC_CONTROL 0x%x \n", Adapter->usMacControlRecord));
// Send MAc control command ro station
Status = PrepareAndSendCommand(
Adapter,
HostCmd_CMD_MAC_CONTROL,
Adapter->usMacControlRecord,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_SET_OID, // TEST
//HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
return Status;
}
#ifdef UNDER_CE
#ifdef MRVL_PRINT_DBG_MSG
// redirect DBGPrint to a file
#if 0//def MRVL_WINCE50
void MrvPrintFile(const char *fmt, ...)
{
//static TCHAR szHeader[] = TEXT("TUX_CF: ");
TCHAR szBuffer[1024];
char szBuffers[1024];
//char szFormat[1024];
va_list pArgs;
va_start(pArgs, fmt);
// lstrcpy(szBuffer, szHeader);
_vsnprintf(//vswprintf(//wvsprintf(
szBuffers,
1023,
fmt,
pArgs);
//va_end(pArgs);
_tcscat(szBuffer, TEXT("\r\n"));
MultiByteToWideChar(CP_ACP, 0,szBuffers, 1024, szBuffer,1024);
//OutputDebugString(szBuffer);
RETAILMSG(1,(szBuffer));
}
#else //#ifdef MRVL_WINCE50
void MrvPrintFile(const char *fmt, ...)
{
va_list argP;
FILE *MrvDbgfp;
DWORD dwThreadID;
DWORD dwTick;
MrvDbgfp = fopen("\\My Documents\\MrvlCF-25DBG.log","a+");
//MessageBox(NULL, TEXT("printdbgmsg"), TEXT("CF25"), MB_OK);
if ( MrvDbgfp == NULL )
{
//MessageBox(NULL, TEXT("open file failed"), TEXT("CF25"), MB_OK);
return;
}
dwThreadID = GetCurrentThreadId();
dwTick = GetTickCount();
fprintf(MrvDbgfp, "%8x:%d:", dwThreadID, dwTick);
va_start(argP, fmt);
vfprintf(MrvDbgfp, fmt, argP);
fflush(MrvDbgfp);
va_end(argP);
fclose(MrvDbgfp);
}
#endif //#ifdef MRVL_WINCE50
#endif // #ifdef MRVL_PRINT_DBG_MSG
#endif // #ifdef UNDER_CE
/******************************************************************************
*
* Name: ConvertNDISRateToFWIndex()
*
* Description: Look up the FW index for the rate
*
* Arguments: NDISRate Rate in NDIS format
*
* Return Value: Equivalent index in FW, return MRVDRV_NUM_SUPPORTED_RATES
* if no matching rate is found
*
* Notes:
*
*****************************************************************************/
UCHAR ConvertNDISRateToFWIndex(UCHAR NDISRate)
{
UCHAR i;
for ( i=0; i < MRVDRV_NUM_SUPPORTED_RATES; i++ )
{
if ( NDISRate == MrvDrvSupportedRates[i] )
{
return i;
}
}
return MRVDRV_NUM_SUPPORTED_RATES;
}
/******************************************************************************
*
* Name: ConvertFWIndexToNDISRate()
*
* Description: Look up the rate for FW index
*
* Arguments: FWIndex
*
* Return Value: Equivalent NDIS Rate, return 0
* if no matching rate is found
*
* Notes:
*
*****************************************************************************/
UCHAR ConvertFWIndexToNDISRate(UCHAR FWIndex)
{
if ( FWIndex >= MRVDRV_NUM_SUPPORTED_RATES )
{
return 0;
}
return MrvDrvSupportedRates[FWIndex];
}
//lykao, 053005, for Hidden SSID, from Plus
//modify by Stephen Zhang on 2007-02-13
//Scan-list has been refreshed yet,
//so it has been restored in Adapter->PSBSSIDList!
UCHAR FindSSIDInList(
IN PMRVDRV_ADAPTER Adapter,
IN PNDIS_802_11_SSID pSSID)
{
UCHAR i, index = 0xFF;
for (i=0; i<Adapter->ulPSNumOfBSSIDs; i++)
{
if(Adapter->PSBSSIDList[i].Ssid.SsidLength == pSSID->SsidLength)
{
if(NdisEqualMemory(Adapter->PSBSSIDList[i].Ssid.Ssid,
pSSID->Ssid, pSSID->SsidLength)
/*Add Hidden SSID match support.
/*Modify by Stephen Zhang on 2007-03-27
*/
||(Adapter->PSBSSIDList[i].Ssid.Ssid[0] == '\0'))
index = i;
}
}
return index;
}
#ifdef AUTO_REASSOCIATION
UCHAR FindBSSIDInList(
IN PMRVDRV_ADAPTER Adapter,
IN PVOID pBssid )
{
UCHAR i, index = 0xFF;
for (i=0; i<Adapter->ulNumOfBSSIDs; i++)
{
if ( pBssid &&
NdisEqualMemory( Adapter->BSSIDList[i].MacAddress, pBssid, MRVDRV_ETH_ADDR_LEN) )
{
index = i;
break;
}
}
return index;
}
#endif
/******************************************************************************
*
* Name: ascii2hex()
*
* Description: convert acssic hex string to hex value
*
* Arguments: s-->input string d-->output value array dlen-->input length
*
* Return Value:
*
* Notes: for ADHOCAES key convert to sync. with linux driver
*
*****************************************************************************/
int AsciiToHex(unsigned char *d, char *s, int dlen)
{
int i;
unsigned char n;
NdisZeroMemory(d, dlen);
for (i = 0; i < dlen * 2; i++) {
if ((s[i] >= 48) && (s[i] <= 57))
n = s[i] - 48;
else if ((s[i] >= 65) && (s[i] <= 70))
n = s[i] - 65;
else if ((s[i] >= 97) && (s[i] <= 102))
n = s[i] - 97;
else
break;
if ((i % 2) == 0)
n = n * 16;
d[i / 2] += n;
}
return i;
}
// The function just filter and reorganize WPA IE now and will skip WMM IE
VOID
RegularIeFilter(UCHAR *IeBuf, USHORT *pBufLen)
{
UCHAR IeId;
UCHAR IeLen,TmpIeLen;
USHORT CurPos =0;
UCHAR TmpBuf[500];
USHORT TmpPos = 0;
BOOLEAN IsWpaFound = FALSE;
UCHAR WPA_OUI[] = { 0x00, 0x50, 0xF2, 0x01};
#ifdef WMM
UCHAR WMM_OUI[] = { 0x00, 0x50, 0xF2, 0x02};
#endif
NdisMoveMemory( TmpBuf, IeBuf ,*pBufLen);
//DBGPRINT(DBG_ALLEN, ("RegularIeFilter++ *pBufLen = %d\n", *pBufLen));
//HexDump(DBG_ALLEN, "IeBuf ", IeBuf, *pBufLen);
while (TmpPos < *pBufLen)
{
IeId = *(TmpBuf + TmpPos);
TmpIeLen = *(TmpBuf + TmpPos + 1);
IeLen = TmpIeLen;
switch (IeId)
{
case 0xdd: // WPA IE or WMM IE
{
if (NdisEqualMemory((TmpBuf + TmpPos + 2), WPA_OUI, 4) == 1) //WPA IE
{
if (!IsWpaFound)
{
NdisMoveMemory((IeBuf + CurPos), (TmpBuf + TmpPos), TmpIeLen + 2);
HexDump(DBG_WPA, "WPA IE ", (IeBuf + CurPos), TmpIeLen + 2);
CurPos += (TmpIeLen + 2);
IsWpaFound = TRUE;
}
}
#ifdef WMM
else if(NdisEqualMemory((TmpBuf + TmpPos + 2), WMM_OUI, 4) == 1) // WMM IE
{
NdisMoveMemory((IeBuf + CurPos), (TmpBuf + TmpPos), TmpIeLen + 2);
// HexDump(DBG_WMM, "WMM IE ", (IeBuf + CurPos), TmpIeLen + 2);
CurPos += (TmpIeLen + 2);
}
#endif
}
break;
default:
NdisMoveMemory((IeBuf + CurPos), (TmpBuf + TmpPos), TmpIeLen + 2);
HexDump(DBG_ALLEN, "ELSE IE ", (IeBuf + CurPos), TmpIeLen + 2);
CurPos += (TmpIeLen + 2);
break;
} // end of switch
TmpPos += (TmpIeLen + 2);
}//while
*pBufLen = CurPos;
//HexDump(DBG_ALLEN, "IeBuf ", IeBuf, *pBufLen);
//DBGPRINT(DBG_ALLEN, ("RegularIeFilter-- *pBufLen = %d\n", *pBufLen));
return;
}
#ifdef REASSOCIATE
VOID
InfraBssReconnectStart(
IN PMRVDRV_ADAPTER Adapter,
IN USHORT reason )
{
DBGPRINT(DBG_ALLEN|DBG_DEBUGUSE, ("[Marvell]InfraBssReconnectStart() , reason = 0x%x, Adapter->EncryptionStatus =%d \n", reason,Adapter->EncryptionStatus));
// we just support open and wep reconnect
if ( (Adapter->EncryptionStatus != Ndis802_11WEPEnabled) &&
(Adapter->EncryptionStatus != Ndis802_11WEPDisabled) &&
(Adapter->EncryptionStatus != Ndis802_11WEPKeyAbsent) &&
(Adapter->EncryptionStatus != Ndis802_11WEPNotSupported) )
{
return;
}
Adapter->ReInfrastructureMode = Adapter->InfrastructureMode;
Adapter->ReAuthenticationMode = Adapter->AuthenticationMode;
Adapter->ReEncryptionStatus = Adapter->EncryptionStatus;
NdisMoveMemory( &(Adapter->ReWEPKey),
&(Adapter->LastAddedWEPKey),
sizeof(MRVL_WEP_KEY));
NdisMoveMemory( &(Adapter->ReSSID),
&(Adapter->PreviousSSID),
sizeof(NDIS_802_11_SSID));
switch (reason)
{
case RECONNECT_ASSOCIATE_FAIL:
Adapter->bIsReconnectEnable = TRUE;
Adapter->usReconnectCounter = 1;
Adapter->ulReconnectPeriod = 0;
Adapter->ulStartTimeStamp = 0;
Adapter->ReconnectType = RECONNECT_COUNTER_TYPE;
Adapter->bIsAcceptSystemConnect = FALSE;
break;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?