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

📄 intproc.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 3 页
字号:
	 	   //   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, &regval, 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, &regval, 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, &regval, 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, &regval, 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 + -