亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? txproc.c

?? marvell8385 GSPI開發驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
/******************* ?Marvell Semiconductor, Inc., 2001-2004 *****************
 *
 *  Purpose:    This module has the implementation of TX functions
 *
 *  $Author: cuizt $
 *
 *  $Date: 2007/07/02 09:10:17 $
 *
 *  $Revision: 1.9.2.2 $
 *
 *****************************************************************************/

#include "precomp.h"

// compilation error if this file is not included
#ifdef UNDER_CE
#include "pkfuncs.h"
#endif

#ifdef SDIO
#include "SDCardDDK.h"
#endif // SDIO

//////////////added by zhangb////////////////
#include "ParaRoamingProc.h"
//////////////added by zhangb////////////////
#ifdef DEBUG_PARA_ROAMING
extern PRIVATE_PARAROAMING_ADAPTER priv;
#endif
       
/******************************************************************************
 *
 *  Name: MrvDrvSend()
 *
 *  Description: NDIS miniport serialized send packet routine
 *
 *  Conditions for Use: Protocol driver will call this routine to pass Tx NDIS_PACKET
 *
 *  Arguments:           
 *      IN  NDIS_HANDLE   MiniportAdapterContext
 *      IN  PPNDIS_PACKET Packet
 *      IN  UINT          Flags
 *    
 *  Return Value: NDIS_STATUS_RESOURCES or NDIS_STATUS_PENDING
 * 
 *  Notes:               
 *
 *****************************************************************************/

NDIS_STATUS
MrvDrvSend(
    IN NDIS_HANDLE MiniportAdapterContext,
    IN PNDIS_PACKET Packet,
    IN UINT Flags)
{
    PMRVDRV_ADAPTER Adapter;
    NDIS_STATUS Status;
	#if 0
	NDIS_STATUS  iStatus; 
	#endif ///0
    PNDIS_PACKET pPacket; 
    //DWORD waitStatus;    // wait status  
    PTXQ_KEEPER  pTxQKeeper;
    PTXQ_NODE    pTQNode;
    //int pri;  
#ifdef RETQ_TIMER
    BOOLEAN  timerStatus;
#endif
#ifdef PARA_WPA_1X
  UINT BufferCount;
  UINT TotalPacketLength=0;
  UINT TotalBufferLength=0;
  UINT BytesCopied=0;
  UINT Length, AccumLength;
  PNDIS_BUFFER pBuffer, pNextBuffer;
  ULONG i; 
  PVOID pVirtualAddr;
  PTxCtrlNode pTxNode;
  
    // due to fix for odd sized buffers, WepBuffer is used in both
    // WEP and no-WEP scenarios
  //UCHAR WepBuffer[MRVDRV_ETH_TX_PACKET_BUFFER_SIZE];
  //BOOLEAN doWep = FALSE;
   //BOOLEAN NotEncryption4EAPOL = FALSE;

  UCHAR  Buffer[MRVDRV_ETH_TX_PACKET_BUFFER_SIZE];
  BOOLEAN bIsEtherPacket = TRUE;
  PUCHAR pDest = Buffer;
  PUCHAR pHeader = NULL;
    BOOLEAN      useBuffer = FALSE;
    ULONG        coBufferLength = 0;
  




#endif
//        return NDIS_STATUS_SUCCESS;

  
    Status = NDIS_STATUS_SUCCESS;  

    Adapter = (PMRVDRV_ADAPTER)MiniportAdapterContext;
    DBGPRINT(DBG_TXDATA, ("+MrvDrvSend()\n")); 


#if 0  
EnterCriticalSection(&Adapter->TxCriticalSection); 
   #if 0
        while(1)
        {
           pTxQKeeper = (PTXQ_KEEPER)&Adapter->TXRETQ;
           pTQNode = PopFirstTxQNode(pTxQKeeper);
           if(pTQNode)
           {
             pPacket = pTQNode -> pPacket;  
//tt ++ ra fail
		if ( pPacket == NULL )
			V5DbgMsg( (L"   ??? nul pkt 2\n") );

		if ( pPacket )
		{
//tt --
             iStatus = NDIS_STATUS_SUCCESS;
             NDIS_SET_PACKET_STATUS(pPacket, iStatus);
             NdisMSendComplete(
                               Adapter->MrvDrvAdapterHdl,
                               pPacket,
                               iStatus);
		} //tt ra fail
             PushFreeTxQNode(Adapter->TxFreeQ,pTQNode);
           }
           else
             break;
        } 
   #else
       BatchIndicateRetQPkts(Adapter);  
   #endif

#ifdef RETQ_TIMER
        //if( Adapter->RetQTimerIsSet == TRUE )
        if( Adapter->RetQTimerIsSet)
        {               
            Adapter->RetQTimerIsSet = 0;  
            NdisMCancelTimer(&Adapter->MrvRetQTimer, &timerStatus); 
        }
#endif


LeaveCriticalSection(&Adapter->TxCriticalSection); 
#endif


    #ifdef DEEP_SLEEP
    // In Deep Sleep Mode no packet can be sent out 
    if (Adapter->IsDeepSleep)
    {
      Status = NDIS_STATUS_NO_CABLE;
    }
    #endif
  
    //      Check device removal status
    if( Adapter->SurpriseRemoved == TRUE )    
    {   
        RETAILMSG(1,(TEXT("\n\r[MrvSend]: NDIS_STATUS_FAILURE")));
        return NDIS_STATUS_FAILURE;
    }

    if ( Adapter->bIsPendingReset == TRUE )
    {                         
      RETAILMSG(1,(TEXT("\n\r[MrvSend]: NDIS_STATUS_FAILURE")));
      return NDIS_STATUS_FAILURE;
    }

    if ( Adapter->MediaConnectStatus == NdisMediaStateDisconnected )
    {
        DBGPRINT(DBG_WARNING, ("***WARNING: OS attempted to send packet while disconnected!\n"));
        RETAILMSG(1,(TEXT("[Marvell]MrvDrvSend:***1WARNING: OS attempted to send packet while disconnected!")));  
        DraleeMsg((L"[MrvSend]:disconnected"));
#ifdef DEBUG_PARA_ROAMING
	    if ( (!priv.bAutoRoamingInProcess) && (!priv.bManualRoamingInProcess))
	    {
#else
#endif        
	        NdisMIndicateStatus(
	                            Adapter->MrvDrvAdapterHdl,
	                            NDIS_STATUS_MEDIA_DISCONNECT,
	                            (PVOID)NULL,
	                            0);   
	        NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
#ifdef DEBUG_PARA_ROAMING
	    }		
#else
#endif       
      //RETAILMSG(1,(TEXT("[Marvell]MrvDrvSend:***2WARNING: OS attempted to send packet while disconnected!")));    
      V5DbgMsg( (L"         * disconn\n") );

      #if 1  //dralee_20051128
      CleanUpSingleTxBuffer(Adapter);
      ResetRxPDQ(Adapter); 
      #endif  

      return NDIS_STATUS_FAILURE;
    }                       

#if 0
     // check if the current command is scan, if so, ask NDIS to hold the packet
    if ( (Adapter->CurCmd != NULL) && 
         (Adapter->CurCmd->ExpectedRetCode == HostCmd_RET_802_11_SCAN) )
    {
        RETAILMSG(1,(TEXT("\r\nTX: Scan in progress, return NDIS_STATUS_RESOURCES")));
        Adapter->ResourcesEvts |= RSC_SCANNING;
        return NDIS_STATUS_RESOURCES;
    }
#endif  

#if 1 //dralee_20051128                           
    //Plus 
    if( Adapter->bIsScanInProgress == TRUE ) 
        return NDIS_STATUS_SUCCESS;
#endif

#ifdef PARA_WPA_1X
    
//#ifdef MRVL_CHECK_TXPACKET
    // check if in key absent state, if so, block all packet other than
    // 802.1x
    if ( (Adapter->EncryptionStatus == Ndis802_11Encryption2KeyAbsent )|| (Adapter->EncryptionStatus == Ndis802_11Encryption3KeyAbsent ) )  
    {
    //pTxNode = &Adapter->TxNode;
        
    NdisQueryPacket( 
            Packet,
            NULL,
            &BufferCount,
            &pBuffer,
            &TotalPacketLength );

      if (!pBuffer || !BufferCount || !TotalPacketLength)
      {
         #ifdef MRVL_PRINT_FILE_MSG
           MrvPrintFileMSG("[Marvell]MrvDrvSend:NdisQueryPacket Fail!!  Return NDIS_STATUS_FAILURE!!\n");
         #endif 
        return NDIS_STATUS_FAILURE;
        
      }

        NdisQueryBufferSafe(pBuffer, &pVirtualAddr, &Length, HighPagePriority);
        ////NKDbgPrintfW(TEXT("WLAN: [2] pBuffer is %x \n"),pBuffer);

//        if(pVirtualAddr == NULL)
//        {
//            NdisMSleep(20);
//            NdisQueryBufferSafe(pBuffer, &pVirtualAddr, &Length, NormalPagePriority);
            ////NKDbgPrintfW(TEXT("WLAN: [3] pBuffer is %x \n"),pBuffer);
            ////NKDbgPrintfW(TEXT("WLAN: [3] pRxBufVM is %x \n"),pRxBufVM);
//        }

        if(pVirtualAddr == NULL)
            return NDIS_STATUS_FAILURE;

        pHeader = (PUCHAR)pVirtualAddr;

         if ( TotalPacketLength < 14 ) 
        {
            // malformed packet, blocked!
            DBGPRINT(DBG_TXDATA|DBG_WARNING,("Got packet with size less than 14 bytes, reject!\n"));
        #ifdef MRVL_PRINT_FILE_MSG
           MrvPrintFileMSG("[Marvell]MrvDrvSend:Got packet with size less than 14 bytes, reject!!\n");
         #endif         
            return NDIS_STATUS_FAILURE;
        }

        if ( (pHeader[12] != 0x88) || (pHeader[13] != 0x8E) )
        {
            DBGPRINT(DBG_TXDATA|DBG_WARNING,("Still no key and packet type(0x%x 0x%x)is not 802.1x , drop!\n",
                                  pHeader[12],
                                  pHeader[13]));
         #ifdef MRVL_PRINT_FILE_MSG         
             MrvPrintFileMSG("[Marvell]MrvDrvSend:pHeader[6]=0x%x\n,pHeader[7]=0x%x\n,pHeader[8]=0x%x\n,pHeader[9]=0x%x\n,pHeader[10]=0x%x\n,pHeader[11]=0x%x\n,pHeader[12]=0x%x\n,pHeader[13]=0x%x\n,pHeader[14]=0x%x\n,pHeader[15]=0x%x\n,Adapter->TxPacketCount =%d\n",pHeader[6],pHeader[7],pHeader[8],pHeader[9],pHeader[10],pHeader[11],pHeader[12],pHeader[13],pHeader[14],pHeader[15],Adapter->TxPacketCount);          
         #endif  
            return NDIS_STATUS_FAILURE;
        }
     }// if ( (Adapter->EncryptionStatus == Ndis802_11Encryption2KeyAbsent )|| (Adapter->EncryptionStatus == Ndis802_11Encryption3KeyAbsent ) )  
//#endif //MRVL_PRINT_FILE_MSG
#endif
/*  dralee
    if( ( Adapter->psState != PS_STATE_SLEEP ) &&
        (Adapter->RoamingNeedToRoam == FALSE ) )
    { 
*/        
        if(Adapter->TxPacketCount > 6)  //flow control
            NdisMSleep(20000);
#ifdef CONFIG_WLAN_PMU
        wlan_PMUTxPkt();
#endif

        EnterCriticalSection(&Adapter->TxCriticalSection);
        if(Adapter->TxPacketCount >= (MAX_TX_PACKETS-1) )
        {      
             RETAILMSG(1,(L"Enter Waiting ..:%d\n\r",Adapter->TxPacketCount));
		     V5DbgMsg( (L"=== MrvDrvSend, TxPacketCount=%d\n", Adapter->TxPacketCount) ); //tt ra fail
             //Adapter->PendingTxCnt = 1;     

             #if 1
             if( Adapter->RetQTimerIsSet)
             {               
                 Adapter->RetQTimerIsSet = 0;  
                 NdisMCancelTimer(&Adapter->MrvRetQTimer, &timerStatus); 
                 BatchIndicateRetQPkts(Adapter);  
             } 

             #endif
                
             LeaveCriticalSection(&Adapter->TxCriticalSection);   
             V5DbgMsg( (L"- return resources\n") );
             //return NDIS_STATUS_RESOURCES; //dralee_1209, resource hang system, 
             return NDIS_STATUS_FAILURE;     //so, return fail is a little better...
        } 
                                   
        //record how many tx pkt is sent.   
        Adapter->TxPacketSend++;  
	
        DBGPRINT(DBG_TXDATADUMP,("[Marvell:MrvDrvSend] Adapter->TxPacketSend=%d\n", Adapter->TxPacketSend));	

        //if((Adapter->TxPacketGet != Adapter->TxPacketComplete) || (Adapter->CurCmd != NULL))
        if( Adapter->SentPacket || (Adapter->CurCmd != NULL))
        {
             TxPacketEnQueue(Adapter, Packet);
             Adapter->TxPacketCount++; 

             #if 1                      
             if( Adapter->RetQTimerIsSet)
             {               
                 Adapter->RetQTimerIsSet = 0;  
                 NdisMCancelTimer(&Adapter->MrvRetQTimer, &timerStatus); 
                 BatchIndicateRetQPkts(Adapter); 
             }
             #endif
 
             LeaveCriticalSection(&Adapter->TxCriticalSection);
             return NDIS_STATUS_PENDING;  
        } 
        
        if( Adapter->TxPacketCount )
        {       
           TxPacketEnQueue(Adapter, Packet);  
           TxPacketDeQueue(Adapter, &pTxQKeeper, &pTQNode);

           // tt ++ ps check
           if ( pTQNode == NULL )
               DBGPRINT(DBG_TXDATA, ("pq: 2\n") );
           // tt --

           pPacket = pTQNode -> pPacket;    
           //RETAILMSG(1,(L"Dequeue:%x, %x\n\r",(ULONG)pTQNode,(ULONG)(pTQNode->pPacket)));  
           Status = SendSinglePacket(Adapter,pPacket);
            
           if(Status == NDIS_STATUS_SUCCESS)
           {       
              PushFreeTxQNode(Adapter->TxFreeQ,pTQNode);
           }  
           else
           {
              InsertTxQNodeFromHead(pTxQKeeper,pTQNode); 
              Adapter->TxPacketCount++;
           }
           Status = NDIS_STATUS_PENDING;
        }
        else  
        {
           pPacket = Packet;  
           Status = SendSinglePacket(Adapter,pPacket);
           if(Status == NDIS_STATUS_SUCCESS)
           {
             Adapter->bSentPacketReturned = 1;
           } 
           else
           {    
             //RETAILMSG(1,(TEXT("[MrvSend] Send packet fail\r\n")));
             
             TxPacketEnQueue(Adapter, Packet);
             //Error handling , push back this node 
             //InsertTxQNodeFromHead(pTxQKeeper,pTQNode); 
             Adapter->TxPacketCount++; 
             Status = NDIS_STATUS_PENDING; 
           } 
        } 

        #if 1    
             if( Adapter->RetQTimerIsSet)
             {               
                 Adapter->RetQTimerIsSet = 0;  
                 NdisMCancelTimer(&Adapter->MrvRetQTimer, &timerStatus); 
                 BatchIndicateRetQPkts(Adapter);  
             } 
        #endif
 
        
        LeaveCriticalSection(&Adapter->TxCriticalSection);   

        return Status;
}

         
//////////////////////////////////////////////////////////////
/******************************************************************************
 *
 *  Name: SendSinglePacket()
 *
 *  Description: TX packet handler
 *
 *  Arguments:  PMRVDRV_ADAPTER Adapter
 *    
 *  Return Value:
 * 
 *  Notes:               
 *
 *****************************************************************************/
NDIS_STATUS
SendSinglePacket(
  IN PMRVDRV_ADAPTER Adapter,
  IN PNDIS_PACKET Packet
)
{
    //int ii;
    ULONG bigTimeout = 250000;      // about 500ms drop dead timeout timing on BUS IO.
  BOOLEAN timerStatus;
  NDIS_STATUS  Status = NDIS_STATUS_SUCCESS;
  UINT BufferCount;
  UINT TotalPacketLength=0;
  UINT TotalBufferLength=0;
  UINT BytesCopied=0;
  UINT Length, AccumLength;
  PNDIS_BUFFER pBuffer, pNextBuffer;
  ULONG i; 
  PVOID pVirtualAddr;
  PTxCtrlNode pTxNode;
  
    // due to fix for odd sized buffers, WepBuffer is used in both
    // WEP and no-WEP scenarios
  //UCHAR WepBuffer[MRVDRV_ETH_TX_PACKET_BUFFER_SIZE];
  //BOOLEAN doWep = FALSE;
   //BOOLEAN NotEncryption4EAPOL = FALSE;

  UCHAR  Buffer[MRVDRV_ETH_TX_PACKET_BUFFER_SIZE];
  BOOLEAN bIsEtherPacket = TRUE;
  PUCHAR pDest = Buffer;
  PUCHAR pHeader = NULL;
    BOOLEAN      useBuffer = FALSE;
    ULONG        coBufferLength = 0;
  
  
//#ifdef SDIO
  SD_API_STATUS           sdstatus;          // intermediate status
    SDIO_TX_PKT             downloadPkt;
    UCHAR                   *pCurPtr = (UCHAR *)downloadPkt.Buf.CmdBuf;
//#endif // SDIO

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久毛片高清国产| 91丨九色丨黑人外教| 日韩女优电影在线观看| 蜜臀av一区二区在线免费观看| 91精品国产一区二区三区蜜臀| 日本亚洲天堂网| 欧美一级久久久| 极品销魂美女一区二区三区| 国产校园另类小说区| www.av亚洲| 亚洲一区二区欧美日韩| 欧美肥大bbwbbw高潮| 精品一区二区三区香蕉蜜桃 | 国产精品美女久久久久久久| 成人一区二区视频| 亚洲精品国产第一综合99久久| 欧美日韩一区精品| 久久国产精品72免费观看| 久久久久国产精品麻豆| 99精品国产91久久久久久 | 久久免费的精品国产v∧| 国产美女精品一区二区三区| 国产精品乱人伦中文| 日本道色综合久久| 免费在线看成人av| 中文字幕不卡一区| 欧美精品在线一区二区三区| 精品无人码麻豆乱码1区2区| 1000精品久久久久久久久| 5月丁香婷婷综合| 国产成人免费高清| 亚洲成av人影院在线观看网| 久久综合五月天婷婷伊人| 99v久久综合狠狠综合久久| 三级不卡在线观看| 国产精品的网站| 日韩欧美一区在线| 色94色欧美sute亚洲线路二| 国内精品伊人久久久久影院对白| 亚洲视频中文字幕| 久久综合国产精品| 欧美日韩电影一区| 99久久免费视频.com| 喷水一区二区三区| 夜夜爽夜夜爽精品视频| 中文字幕第一区二区| 日韩视频一区二区在线观看| 在线日韩国产精品| 成人午夜免费电影| 黄色日韩网站视频| www.成人在线| 国产精品一区在线观看你懂的| 亚洲国产中文字幕| 国产精品福利电影一区二区三区四区| 日韩小视频在线观看专区| 在线看一区二区| 91网站在线播放| 从欧美一区二区三区| 美女视频黄免费的久久| 视频一区视频二区中文| 一区二区三区国产精品| 国产精品不卡在线| 国产精品丝袜黑色高跟| 久久精品人人做| 久久久www免费人成精品| 日韩精品自拍偷拍| 日韩欧美色综合网站| 欧美乱妇20p| 欧美日本视频在线| 欧美日韩一级大片网址| 日本二三区不卡| 日本精品视频一区二区三区| 99久久精品国产精品久久| 成人av网在线| 成人av电影在线| 成人激情文学综合网| 成人av午夜影院| 成人国产精品免费观看| 成人动漫av在线| 91在线高清观看| 91麻豆国产福利在线观看| 色美美综合视频| 欧美视频完全免费看| 欧美人伦禁忌dvd放荡欲情| 欧美日韩精品三区| 欧美一区二区视频在线观看2020| 欧美丰满美乳xxx高潮www| 欧美一级xxx| 国产日韩精品视频一区| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美高清在线视频| 中文字幕不卡三区| 日韩理论片网站| 亚洲午夜一区二区| 日本午夜精品视频在线观看| 麻豆极品一区二区三区| 国产伦精品一区二区三区免费迷| 狠狠色丁香久久婷婷综| 成人综合在线网站| 色婷婷av久久久久久久| 欧美日韩国产一二三| 日韩欧美国产不卡| 国产视频不卡一区| 一区二区三区四区高清精品免费观看| 亚洲国产成人va在线观看天堂| 日韩成人午夜电影| 国产不卡视频在线播放| 在线观看成人免费视频| 欧美一级高清片| 中文字幕日本乱码精品影院| 香蕉av福利精品导航| 国产乱子伦一区二区三区国色天香| 菠萝蜜视频在线观看一区| 欧美午夜免费电影| 久久亚洲精精品中文字幕早川悠里| 日韩一区在线播放| 奇米在线7777在线精品| 成人动漫中文字幕| 717成人午夜免费福利电影| 国产欧美一区二区三区在线看蜜臀 | 国内国产精品久久| 粉嫩13p一区二区三区| 色悠久久久久综合欧美99| 日韩精品影音先锋| 亚洲精品成a人| 国模娜娜一区二区三区| 欧美在线免费观看亚洲| 国产视频亚洲色图| 丝袜亚洲另类欧美| 91视频在线观看| 精品国内二区三区| 亚洲综合视频在线观看| 成人性视频网站| 日韩无一区二区| 亚洲综合偷拍欧美一区色| 国产麻豆欧美日韩一区| 欧美一区二区三区四区五区 | 在线一区二区三区四区| 久久久久久亚洲综合影院红桃| 一区二区三区在线视频观看58 | 午夜精品免费在线| 成人午夜视频在线| 日韩欧美电影在线| 亚洲成人免费av| 91视频一区二区| 欧美国产日韩a欧美在线观看| 视频在线在亚洲| 在线视频国产一区| 亚洲天堂免费在线观看视频| 国产成人综合网| 欧美精品一区二| 久久精品国产精品青草| 欧美精品在线视频| 亚洲动漫第一页| 欧美性猛片aaaaaaa做受| 中文字幕在线免费不卡| 成人中文字幕电影| 亚洲国产成人私人影院tom| 精品一区二区三区免费播放| 欧美一区二区三区啪啪| 午夜av一区二区三区| 欧美日韩免费一区二区三区 | 欧美一区二区三区日韩| 午夜av区久久| 欧美日韩国产综合一区二区| 亚洲自拍偷拍av| 欧洲激情一区二区| 亚洲一区二区在线免费看| 色偷偷88欧美精品久久久| 日韩一区中文字幕| 色94色欧美sute亚洲线路二| 亚洲激情在线播放| 欧美综合一区二区| 五月天一区二区| 777欧美精品| 麻豆一区二区在线| 欧美精品一区二区在线观看| 国产永久精品大片wwwapp| 国产亚洲人成网站| av电影在线观看一区| 亚洲美女在线国产| 欧美日韩国产一级片| 蜜桃视频在线观看一区| 精品国产sm最大网站免费看 | 成人午夜av在线| 国产精品久久久久久福利一牛影视 | 国产精品视频麻豆| 99riav久久精品riav| 亚洲精品亚洲人成人网在线播放| 欧美亚洲一区三区| 日韩av一区二区三区四区| 日韩精品资源二区在线| 高清不卡在线观看av| 亚洲色图制服丝袜| 欧美另类变人与禽xxxxx| 精品一二三四区| 中文字幕一区二区在线观看| 欧美视频一二三区| 狠狠色综合日日| 亚洲日本电影在线|