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

📄 intproc.c

📁 marvell8385 GSPI开发驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
                    ////NKDbgPrintfW(TEXT("WLAN: pRxBufVM is %x \n"),pRxBufVM);
    
                    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;
                    //pAdapter->pRxPD1 = (PRxPD)pkt.Code;
    
                 ////NKDbgPrintfW(TEXT("WLAN: pRxBufVM is %x \n"),pRxBufVM);
                 ////NKDbgPrintfW(TEXT("WLAN: pAdapter->pRxCurPkt is %x \n"),pAdapter->pRxCurPkt);
                 ////NKDbgPrintfW(TEXT("WLAN: pAdapter->pRxPD1 is %x \n"),pAdapter->pRxPD1);
                     //gspi_read_data_direct((unsigned char*)p_pkt->Code, DATA_RDWRPORT_REG, (usLength));
                     gspi_read_data_direct((unsigned char*)p_pkt->Code, DATA_RDWRPORT_REG, (usLength>>1));
                     gspi_write_reg(CARD_INT_CAUSE_REG, CIC_RxUpLdOvr);
    
    
             // length of the packet content itself
             //usLength = usLength - sizeof(pkt.Type) - sizeof(pkt.Len);
    
#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);
                     //NdisMoveMemory(pRxBufVM,pkt.Code + sizeof(RxPD), pAdapter->ulRxSize);
    
    
                     //#ifdef MRVL_PSCONFIRM
                     //if(pAdapter->bPSConfirm==FALSE)
                         HandleRxReadyEvent(pAdapter);
                     //else if(pAdapter->bPSConfirm==TRUE)
                     //{
                        //dralee_0110
                     //   pPacket = pAdapter->pRxCurPkt;
                     //   pAdapter->pRxCurPkt = NULL; 
                     //   if( pPacket )
                     //       ReturnRxPacketDesc(pAdapter,pPacket);
                     //    RETAILMSG(1,(TEXT("error:RxPkt in Sleep state\n")));
                     // }
                     //#else
                     //   HandleRxReadyEvent(pAdapter);
                     //#endif // MRVL_PSCONFIRM    
                    }    
                    else
                    {
                     gspi_read_data_direct((unsigned char*)&(acEmergencyBuffer[0]), DATA_RDWRPORT_REG, (usLength>>1));
                     gspi_write_reg(CARD_INT_CAUSE_REG, CIC_RxUpLdOvr);
                     ReturnRxPacketDesc(pAdapter,pPacket);
                RETAILMSG(1,(TEXT("NdisQueryBufferSafe Fail, drop rx pkt\n")));
                    }
            } //GPS_FAILED     
        }
        else
        {      
            gspi_write_reg(CARD_INT_CAUSE_REG, CIC_RxUpLdOvr);
            RETAILMSG(1,(L"error: UPLOAD_RDY in ps_confimed state,evt=%x\n",ucLHostIntStatus));
        }
     } //if( ucLHostIntStatus & UPLOAD_HOST_INT_STATUS_RDY )        

        if( ucLHostIntStatus & HIS_CmdUpLdRdy )
        {
          if(pAdapter->CurCmd)
          {
             // Command finished
//          IF_API_STATUS   ifStatus;
            gspi_read_reg16(SCRATCH_2_REG, &usLength);
             //RETAILMSG(1,(TEXT("MrvDrvSdioIstThread: Packet is a UPLOAD_HOST_INT_STATUS_RDY!\n")));
           //ifStatus = If_GetLengthOfDataBlock( pAdapter, &usLength );
           //  if ( !IF_IS_SUCCESS(ifStatus) )
           //   return;  
            
            //dralee_0111
            if(usLength & 0x0001)
               usLength++;

            p_pkt = &pkt;
            gspi_read_data_direct((unsigned char*)p_pkt->Code, CMD_RDWRPORT_REG, (usLength/2));
             //drlaee_1226
            gspi_write_reg(CARD_INT_CAUSE_REG, CIC_CmdUpLdOvr);

            #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  
          { 
            gspi_write_reg(CARD_INT_CAUSE_REG, CIC_CmdUpLdOvr);
            RETAILMSG(1,(TEXT("Cmd Uploadover with NULL CurCmd, ignore it\n")));
            GetCmdFromQueueToExecute (pAdapter);
          }
        
        }
 
        if( ucLHostIntStatus & HIS_CmdDnLdRdy )
        { 
        } 
       
        if( ucLHostIntStatus & HIS_CardEvent  )
        {
            ////NKDbgPrintfW(TEXT("INTR - CardEvent \n"));
            gspi_read_reg16(SCRATCH_3_REG, &macEvent);
            ///crlo:PSMode-fix ++
           ///We found some extra steps are needed for MAC event since firmware 5.0.11
            {
              ///re-enable th interrupt
              //dralee_0111
              //gspi_write_reg(HOST_INT_STATUS_REG, HIS_CardEvent);
              ///Generate interrupt to firmware
              gspi_write_reg(CARD_INT_CAUSE_REG, CIC_HostEvent);
            }
        ////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 || macEvent == MACREG_INT_CODE_PS_SLEEP)
//            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(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 SDIO_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 SDIO_CMD_PKT:
           case SDIO_TX_DONE_EVENT:
           case SDIO_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 == SDIO_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 SDIO_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
                 break;
                                       
            case SDIO_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 SDIO_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 SDIO_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);
                    }
                    else
                       RETAILMSG(1, (L"[WARNING]: invalid Rx Evts in Ps state:%x\n\r",macEvent));
                    
                        
                    #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 // SDIO
   } // end of while loop  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -