📄 intproc.c
字号:
// return;
//dralee_0111
if(usLength & 0x0001)
usLength++;
p_pkt = &pkt;
///gspi_read_data_direct((unsigned char*)p_pkt->Code, CMD_RDWRPORT_REG, (usLength));
If_GetDataBlock(pAdapter, usLength, IF_CMD_PKT, (unsigned char*)p_pkt->Code);
{
USHORT regval = CIC_CmdUpLdOvr;
///spi_WriteRegister(CARD_INT_CAUSE_REG, CIC_CmdUpLdOvr);
If_WriteRegister(NULL, NULL, CARD_INT_CAUSE_REG, FALSE, ®val, 0);
}
#ifdef MRVL_PSCONFIRM
if(pAdapter->bPSConfirm==FALSE)
{
if(pAdapter->CurCmd != NULL)
{
// still making 1 buffer copy, need to improve on this
NdisMoveMemory(pAdapter->CurCmd->BufVirtualAddr, p_pkt->Code, usLength);
}
HandleCommandFinishedEvent(pAdapter);
}
else if(pAdapter->bPSConfirm==TRUE)
{
//RETAILMSG(1,(TEXT("[Marvell]MrvDrvSdioIntTimerHandler: Error => Receive CommandFinishedEvent()")));
//NKDbgPrintfW(TEXT("[Marvell]MrvDrvSdioIntTimerHandler: Error => Receive CommandFinishedEvent()\r\n"));
}
#else
if(pAdapter->CurCmd != NULL)
{
// still making 1 buffer copy, need to improve on this
NdisMoveMemory(pAdapter->CurCmd->BufVirtualAddr, p_pkt->Code, usLength);
}
HandleCommandFinishedEvent(pAdapter);
#endif
}
//dralee_0110
else
{
USHORT regval = CIC_CmdUpLdOvr;
///spi_WriteRegister(CARD_INT_CAUSE_REG, CIC_CmdUpLdOvr);
If_WriteRegister(NULL, NULL, CARD_INT_CAUSE_REG, FALSE, ®val, 0);
RETAILMSG(1,(TEXT("Cmd Uploadover with NULL CurCmd, ignore it\r\n")));
}
}
if( ucLHostIntStatus & HIS_CmdDnLdRdy )
{
}
if( ucLHostIntStatus & HIS_CardEvent )
{
////NKDbgPrintfW(TEXT("INTR - CardEvent \n"));
///spi_ReadRegister(SCRATCH_3_REG, &macEvent);
If_ReadRegister(NULL, NULL, SCRATCH_3_REG, FALSE, &macEvent, sizeof(macEvent));
///crlo:We found some extra steps are needed for MAC event since firmware 5.0.11
{
//USHORT regval = CIC_HostEvent;
USHORT regval;
///re-enable th interrupt
//dralee_0111
//spi_WriteRegister(HOST_INT_STATUS_REG, HIS_CardEvent);
// 36.p4 : Fix for deep sleep +++
// This is for generating the interrupt.
// without this, the second Awake event won't generate interrrupt,
// when we leave the second deep sleep.
regval = ~(HIS_CardEvent);
If_WriteRegister(NULL, NULL, HOST_INT_STATUS_REG, FALSE, ®val, 0);
// 36.p4 : Fix for deep sleep ---
///Generate interrupt to firmware
///spi_WriteRegister(CARD_INT_CAUSE_REG, CIC_HostEvent);
regval = CIC_HostEvent;
If_WriteRegister(NULL, NULL, CARD_INT_CAUSE_REG, FALSE, ®val, 0);
}
////NKDbgPrintfW(TEXT("SCRATCH_3_REG %x\n"),macEvent);
#ifdef MRVL_PSCONFIRM
//dralee 072705
//if((pAdapter->bPSConfirm==TRUE)&&(macEvent==MACREG_INT_CODE_PS_AWAKE))
if(pAdapter->bPSConfirm==FALSE)
HandleMACEvent(pAdapter,macEvent);
else if(macEvent==MACREG_INT_CODE_PS_AWAKE || macEvent == MACREG_INT_CODE_HOST_SLEEP_AWAKE)
{
pAdapter->bPSConfirm=FALSE;
HandleMACEvent(pAdapter,macEvent);
}
//else
//RETAILMSG(1, (TEXT("[WARNING]: invalid Rx Evts in Ps state:%x\n\r")));
//NKDbgPrintfW(TEXT("[WARNING]: invalid Rx Evts in Ps state:%x, Mac Event is %x"),pAdapter->bPSConfirm,macEvent);
#else
//original
HandleMACEvent(pAdapter,macEvent);
#endif // MRVL_PSCONFIRM
}
#elif defined(IF_SDIO)
//////////////////////////////////////////////////////
// HostIntStatus &0x1
if( ucLHostIntStatus & UPLOAD_HOST_INT_STATUS_RDY )
{
const int nMaxReadCount = 5;
IF_API_STATUS ifStatus;
//RETAILMSG(1,(TEXT("MrvDrvSdioIstThread: Packet is a UPLOAD_HOST_INT_STATUS_RDY!\n")));
ifStatus = If_GetLengthOfDataBlock( pAdapter, &usLength );
if ( !IF_IS_SUCCESS(ifStatus) )
return;
ifStatus = If_GetCardStatusAndMacEvent( pAdapter, &ucCardStatus, &macEvent );
if ( !IF_IS_SUCCESS(ifStatus) )
return;
// set up the appropriate data structure to read the packet into
switch ( ucCardStatus )
{
case IF_DATA_PKT:
qStatus=GetRxPacketDesc(pAdapter, &pPacket);
if (qStatus == GPS_FAILED)
{
//RETAILMSG(1,(TEXT("[Marvell]HandleRxReadyEvent:Unable to obtain packet descriptor, just drop packet")));
return;
}
pAdapter->pRxCurPkt = pPacket;
NdisQueryPacket(pPacket, NULL, NULL, &pBuffer, NULL);
NdisQueryBufferSafe(pBuffer, &pRxBufVM, &bufferLength, HighPagePriority);
//(ULONG)pRxBufVM -= (sizeof(RxPD)+sizeof(pkt.Len)+sizeof(pkt.Type));
//NdisAdjustBufferLength(pBuffer, (usLength-(sizeof(RxPD)+sizeof(pkt.Len)+sizeof(pkt.Type))));
NdisAdjustBufferLength(pBuffer, (usLength-MRVDRV_ETH_RX_HIDDEN_HEADER_SIZE));
//p_pkt = (PHostCmd_DS_CODE_DNLD)((ULONG)pRxBufVM - (sizeof(RxPD)+sizeof(pkt.Len)+sizeof(pkt.Type)));
p_pkt = (PHostCmd_DS_CODE_DNLD)((ULONG)pRxBufVM - MRVDRV_ETH_RX_HIDDEN_HEADER_SIZE);
//p_pkt = (PHostCmd_DS_CODE_DNLD)pRxBufVM;
pAdapter->pRxPD1 = (PRxPD)p_pkt->Code;
break;
case IF_CMD_PKT:
case IF_TX_DONE_EVENT:
case IF_MAC_EVENT:
p_pkt = &pkt;
break;
default:
NKDbgPrintfW( L"[Marvell]MrvDrvSdioIstThread:Error!![p_pkt=%x] usLength= %d ucCardStatus=%d\r\n", p_pkt,usLength,ucCardStatus );
ErrorFlag=TRUE;
break;
}
usWrongPktLen =0;
//lykao, 052405, begin
if ( usLength > MRVDRV_ETH_RX_PACKET_BUFFER_SIZE )
{
usWrongPktLen = TT_WRONG_PKT_LEN_TOO_BIG;
//DBGPRINT(DBG_ERROR,("***MrvDrvSdioIntTimerHandler: Got Huge packet size= %d \n",usLength));
//RETAILMSG(1, (L"[Marvell]MrvDrvSdioIntTimer:Error!! usLength= %d", usLength));
usLength=MRVDRV_ETH_RX_PACKET_BUFFER_SIZE;
}
if ( usLength < sizeof(RxPD)+14 && ucCardStatus == IF_DATA_PKT )
{
NKDbgPrintfW( L"*** Got small packet, size = %d\r\n", usLength );
usWrongPktLen = TT_WRONG_PKT_LEN_TOO_SMALL;
usLength = sizeof(RxPD)+14;
}
ifStatus = If_GetDataBlock( pAdapter, usLength, ucCardStatus, (UCHAR*)p_pkt );
if ( !IF_IS_SUCCESS(ifStatus) )
return;
if(ErrorFlag==TRUE)
{
//RETAILMSG(1,(TEXT("[Marvell]MrvDrvSdioIntTimer:ErrorFlag==TRUE")));
return;
}
// length of the packet content itself
usLength = usLength - sizeof(pkt.Type) - sizeof(pkt.Len);
// process the interrupt type
switch ( ucCardStatus )
{
case IF_DATA_PKT:
//RETAILMSG(1,(TEXT("MrvDrvSdioIntTimer: Packet is a Rx DATA! \r\n")));
#ifdef WPA
if((*((UCHAR *)((ULONG)pRxBufVM + 14)) == 0xaa ) &&
(*((UCHAR *)((ULONG)pRxBufVM + 15)) == 0xaa ) &&
(*((UCHAR *)((ULONG)pRxBufVM + 16)) == 0x03 ) &&
(*((UCHAR *)((ULONG)pRxBufVM + 20)) == 0x88 ) &&
(*((UCHAR *)((ULONG)pRxBufVM + 21)) == 0x8e ) )
{
//RETAILMSG(1,(TEXT("EAPOL Key: Packet is a Rx DATA! \r\n")));
usLength -= 8;
//NdisMoveMemory( ttBuf, pAdapter->pRxBuf+20, pAdapter->ulRxSize-20);
NdisMoveMemory((PUCHAR)((ULONG)pRxBufVM + 12),(PUCHAR)((ULONG)pRxBufVM + 20), (usLength-20));
//NdisMoveMemory( pAdapter->pRxBuf+12, pAdapter->pRxBuf+20, pAdapter->ulRxSize-20);
}
#endif // WPA
//dralee 072705
//pAdapter->ulRxSize = usLength;
pAdapter->ulRxSize = usLength-sizeof(RxPD);
#ifdef MRVL_PSCONFIRM
if(pAdapter->bPSConfirm==FALSE)
HandleRxReadyEvent(pAdapter);
else if(pAdapter->bPSConfirm==TRUE)
RETAILMSG(1,(TEXT("[Marvell]MrvDrvSdioIntTimerHandler: Error => Receive RxReadyEvent()")));
#else //MRVL_PSCONFIRM
HandleRxReadyEvent(pAdapter);
#endif //MRVL_PSCONFIRM
#ifdef CCX
///crlo:RadioMeasure ++
#ifdef CCX_RADIOMEASURE
{
UCHAR *bufpt = ((UCHAR*)pRxBufVM)+14;
PKTPARAM pktParam;
/*{
int i;
RETAILMSG(1,(TEXT("Rx-PKTs:\n")));
for (i=0 ; i<2 ; i++) {
UCHAR *tmppt = bufpt+16*i;
RETAILMSG(1,(TEXT("%02xh, %02xh, %02xh, %02xh, %02xh, %02xh, %02xh, %02xh - %02xh, %02xh, %02xh, %02xh, %02xh, %02xh, %02xh, %02xh"),
tmppt[0], tmppt[1], tmppt[2], tmppt[3],
tmppt[4], tmppt[5], tmppt[6], tmppt[7],
tmppt[8], tmppt[9], tmppt[10], tmppt[11],
tmppt[12], tmppt[13], tmppt[14], tmppt[15]));
}
}*/
wlan_ccx_parse_iapp(pAdapter, bufpt, &pktParam);
if (pktParam.pkttype == CCXPKT_BEACON_REQUEST) {
RETAILMSG(1,(TEXT("CCXPKT: BEACON_REQUEST\n")));
if (pktParam.beaconReq.Operation == BEACON_TABLE) {
RETAILMSG(1,(TEXT("Reporting Beacon-Table\n")));
wlan_ccx_send_BeaconTable(pAdapter);
break;
} else {
RETAILMSG(1,(TEXT("Operation: \n"), pktParam.beaconReq.Operation));
}
///RETAILMSG(1,(TEXT("Sending SCAN command manually\n")));
switch (pktParam.beaconReq.Operation) {
case PASSIVE_SCAN:
pAdapter->isPassiveScan = TRUE;
break;
case ACTIVE_SCAN:
pAdapter->isPassiveScan = FALSE;
break;
default:
break;
}
pAdapter->MeasureDurtion = pktParam.beaconReq.MeasureDuration;
pAdapter->ChannelNum = pktParam.beaconReq.ChannelNumber;
PrepareAndSendCommand(
pAdapter,
HostCmd_CMD_802_11_SCAN,
0,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
} else {
///RETAILMSG(1,(TEXT("pktParam.pkttype: %d\n"), pktParam.pkttype));
}
}
#endif ///CCX_RADIOMEASURE
///crlo:RadioMeasure --
#endif ///CCX
break;
case IF_CMD_PKT:
//RETAILMSG(1,(TEXT("MrvDrvSdioIstThread: Cmd Pkt! \r\n")));
if (pAdapter->CurCmd == NULL)
{
PHostCmd_DS_GEN pCMD = (PHostCmd_DS_GEN)p_pkt->Code;
// command may have timed out already!
//RETAILMSG(1,(L"MrvDrvSdioIntTimer: Cmd (0x%x) response received", pCMD->Command));
if ( pCMD->Command == 0x8021 )
{
PHostCmd_DS_802_11_PS_MODE pPSCmd = (PHostCmd_DS_802_11_PS_MODE)pCMD;
//RETAILMSG(1,(L"SubCommand = 0x%x\n", pPSCmd->SubCommand));
}
//EnableInterrupt(pAdapter);
//#ifndef MRVL_WINCE50
// NdisFreeSpinLock(&pAdapter->lDPCLock);
//#endif
p_pkt = NULL;
return;
}
#ifdef MRVL_PSCONFIRM
if(pAdapter->bPSConfirm==FALSE)
{
if(pAdapter->CurCmd != NULL)
{
// still making 1 buffer copy, need to improve on this
NdisMoveMemory(pAdapter->CurCmd->BufVirtualAddr, p_pkt->Code, usLength);
}
HandleCommandFinishedEvent(pAdapter);
}
else if(pAdapter->bPSConfirm==TRUE)
{
RETAILMSG(1,(TEXT("[Marvell]MrvDrvSdioIntTimerHandler: Error => Receive CommandFinishedEvent()")));
}
#else // MRVL_PSCONFIRM
if(pAdapter->CurCmd != NULL)
{
// still making 1 buffer copy, need to improve on this
NdisMoveMemory(pAdapter->CurCmd->BufVirtualAddr, p_pkt->Code, usLength);
}
HandleCommandFinishedEvent(pAdapter);
#endif // MRVL_PSCONFIRM
break;
case IF_TX_DONE_EVENT:
//RETAILMSG(1,(TEXT("MrvDrvSdioIntTimer: Packet is a Tx done Pkt! \r\n")));
//dralee, 072705, for integrity, only for Hw versin early than B0
if(pAdapter->SentPacket)
{
//RETAILMSG(1,(TEXT("MrvDrvSdioIstThread: Txdone \r\n")));
#ifdef MRVL_PSCONFIRM
if(pAdapter->bPSConfirm==FALSE)
HandleTxSingleDoneEvent(pAdapter);
#else // MRVL_PSCONFIRM
HandleTxSingleDoneEvent(pAdapter);
#endif // MRVL_PSCONFIRM
}
//HandleTxSingleDoneEvent(pAdapter);
break;
case IF_MAC_EVENT:
#ifdef MRVL_PSCONFIRM
//dralee 072705
//if((pAdapter->bPSConfirm==TRUE)&&(macEvent==MACREG_INT_CODE_PS_AWAKE))
if (pAdapter->bPSConfirm == FALSE)
HandleMACEvent(pAdapter,macEvent);
else if(macEvent==MACREG_INT_CODE_PS_AWAKE || macEvent==MACREG_INT_CODE_HOST_SLEEP_AWAKE)
{
//RETAILMSG(1,(L"Rx Evts in Ps state:%x\n\r",macEvent));
pAdapter->bPSConfirm=FALSE;
HandleMACEvent(pAdapter,macEvent);
}
#ifdef BG_SCAN
else if (macEvent==MACREG_INT_CODE_BG_SCAN_REPORT) //For under PS
{
HandleMACEvent(pAdapter,macEvent);
}
#endif
#else // MRVL_PSCONFIRM
//original
HandleMACEvent(pAdapter,macEvent);
#endif // MRVL_PSCONFIRM
break;
default:
// SHOULD not be here
RETAILMSG(1, (L"MrvDrvSdioIntTimer: ERROR, received unexpected type from FW: %d\n", pkt.Type));
ASSERT(FALSE);
break;
}// switch ( ucCardStatus )
} //HostIntStatus &0x1
#endif // IF_SDIO
} // end of while loop
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -