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

📄 txproc.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 5 页
字号:
    }       //RETAILMSG(1,(L"Dequeue:%x, %x\n\r",(ULONG)(*ppTQNode),(ULONG)((*ppTQNode)->pPacket)));    /*    if( *ppTQNode )      return NDIS_STATUS_SUCCESS;    else       return NDIS_STATUS_FAILURE;    */}#endif  /*    We may not need this SendNullPacket. 36.p4 has already been added one.*/#if 0#ifdef WMM_UAPSDNDIS_STATUSSendNullPacket( IN PMRVDRV_ADAPTER Adapter, UCHAR pm ){  NDIS_STATUS  Status = NDIS_STATUS_SUCCESS;  //UINT BufferCount;  UINT TotalPacketLength=0;  UINT TotalBufferLength=0;  //PNDIS_BUFFER pBuffer, pNextBuffer;  //ULONG i;   //PVOID pVirtualAddr;  PTxCtrlNode pTxNode;    //BOOLEAN bIsEtherPacket = TRUE;  //PUCHAR pDest = Buffer;  //PUCHAR pHeader = NULL;     SD_API_STATUS           sdstatus;          // intermediate status   SDIO_TX_PKT             downloadPkt;   UCHAR                   *pCurPtr = (UCHAR *)downloadPkt.Buf.CmdBuf;    //RETAILMSG(1,(TEXT("[Marvell]+SendSinglePacket()")));  if((Adapter->psState != PS_STATE_FULL_POWER) &&      (Adapter->psState != PS_STATE_WAKEUP))  {    //RETAILMSG(1,(TEXT("[Marvell]SendSinglePacket:Tx can not send in the power state")));    return NDIS_STATUS_RESOURCES;  }  Status = NDIS_STATUS_SUCCESS;   pTxNode=&Adapter->TxNode;  NdisZeroMemory(pTxNode->LocalWCB, sizeof(WCB));  pTxNode->LocalWCB->Status = MRVDRV_WCB_STATUS_USED;  pTxNode->LocalWCB->PktLen = 0;  pTxNode->LocalWCB->PowerMgmt = pm;#ifdef INTERFACE20    // number of retry is 3    pTxNode->LocalWCB->TxControl = ( (3 << 12 ) | Adapter->DataRate);    pTxNode->LocalWCB->PktPtr = sizeof(WCB);#endif // #ifdef INTERFACE20    TotalBufferLength = sizeof(WCB);    downloadPkt.Len = ADD_SDIO_PKT_HDR_LENGTH(TotalBufferLength);     NdisMoveMemory(pCurPtr, (PUCHAR)pTxNode->LocalWCB, sizeof(WCB));    pCurPtr += sizeof(WCB);   downloadPkt.Type = SDIO_DATA_PKT;   sdstatus = SDIODownloadPkt(Adapter, &downloadPkt);     //lykao, 052605   Adapter->ulTxByteInLastPeriod += downloadPkt.Len;   if (!SD_API_SUCCESS(sdstatus))   {                        DBGPRINT(DBG_ALLEN,("[Marvell]TX download failed!\n"));        RETAILMSG(1,(TEXT("[Marvell]SendSinglePacket:TX download failed! ")));          return NDIS_STATUS_FAILURE;    }   else   {        DBGPRINT(DBG_LOAD,("TX download success!\n"));        DBGPRINT(DBG_ALLEN,("[Marvell]TX download success!\n"));        //RETAILMSG(1,(TEXT("[Marvell]SendSinglePacket:TX download success!")));     }    return Status;} #endif //WMM_UAPSD  #endif // 0  #ifndef RETQ_TIMER/****************************************************************************** * *  Name: PrepareDownloadPacket() * *  Description: Prepare the DownloadPacket from packet send by upper layer * *  Conditions for Use: * *  Arguments: *      IN PMRVDRV_ADAPTER Adapter, *      IN PNDIS_PACKET Packet, *      IN PSDIO_TX_PKT pDnldPacket *     *  Return Value: None *  *  Notes:                * *****************************************************************************/NDIS_STATUS PrepareDownloadPacket(PMRVDRV_ADAPTER Adapter,PNDIS_PACKET Packet, PSDIO_TX_PKT pDnldPacket){  NDIS_STATUS  Status = NDIS_STATUS_SUCCESS;  UINT BufferCount;  UINT TotalPacketLength=0;  UINT TotalBufferLength=0;  UINT BytesCopied=0;  UINT Length,AccumLength;  PNDIS_BUFFER pBuffer, pNextBuffer;  PVOID pVirtualAddr;  PUCHAR pHeader = NULL;  ULONG        coBufferLength = 0;  ULONG i;  PWCB    pWcb;  UCHAR                   *pCurPtr = pDnldPacket->Buf.CmdBuf;  Status = NDIS_STATUS_SUCCESS;   NdisQueryPacket(    Packet,    NULL,    &BufferCount,    &pBuffer,    &TotalPacketLength);  //RETAILMSG(1,(TEXT("[Marvell]SendSinglePacket:2 NdisQueryPacket")));  if(!pBuffer || !BufferCount || !TotalPacketLength)  {    Status=NDIS_STATUS_FAILURE;     DBGPRINT(DBG_TXDATA|DBG_WARNING,("TX - NDIS buffer is not valid, return FAILURE \n"));      DraleeMsg((L"[Marvell]SendSinglePacket:TX - NDIS buffer is not valid, return FAILURE "));         return Status;  }  //RETAILMSG(1,(TEXT("[Marvell]SendSinglePacket:1 NdisQueryBuffer")));  NdisQueryBuffer(pBuffer, &pVirtualAddr, &Length);  //RETAILMSG(1,(TEXT("[Marvell]SendSinglePacket:2 NdisQueryBuffer")));  pHeader = (PUCHAR)pVirtualAddr;  //nFirstBufLen = Length;#ifndef MRVL_CHECK_TXPACKET#ifdef WPA    // check if in key absent state, if so, block all packet other than    // 802.1x    if ( Adapter->EncryptionStatus == Ndis802_11Encryption2KeyAbsent )      {        // no key yet, only allow 802.1x packets        if ( TotalPacketLength < 14 )         {            // malformed packet, blocked!            DBGPRINT(DBG_TXDATA|DBG_WARNING,("Got packet with size less than 14 bytes, reject!\n"));       DraleeMsg((L"Got packet with size less than 14 bytes, reject!\n"));      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]));                         DraleeMsg((L"Still no key and packet type(0x%x 0x%x)is not 802.1x , drop!\n",                                  pHeader[12],                                  pHeader[13]));          return NDIS_STATUS_FAILURE;        }    }  #endif // #ifdef WPA#endif //ifdef MRVL_CHECK_TXPACKET  DBGPRINT(DBG_TXDATA,("SendSinglePacket: buffers %d, packet len %d\n",BufferCount, TotalPacketLength));  pWcb = (PWCB)&(pDnldPacket->Buf.TxDataBuf.Wcb);  NdisZeroMemory(pWcb,sizeof(WCB));  pWcb->Status =    MRVDRV_WCB_STATUS_USED;  pWcb->PktLen = (USHORT)TotalPacketLength;   DBGPRINT(DBG_DATARATE,("DataRate = %x\n", (ULONG)Adapter -> DataRate));#ifdef INTERFACE20    // number of retry is 3//    pWcb->TxControl = ( (3 << 12 ) | Adapter->DataRate);    pWcb->TxControl =0;    pWcb->PktPtr = sizeof(WCB); #endif // #ifdef INTERFACE20  /*  dralee//???? dralee need check it#ifdef PROPRIETARY_PERIODIC_PS      //dralee_20060327    if(Adapter->psState != PS_STATE_FULL_POWER)    {                                                                           if( CheckLastPacketIndication(Adapter) )       {           pWcb->PowerMgmt |= MRVDRV_WCB_POWER_MGMT_LAST_PACKET;           Adapter->TxLock = 1;           //RETAILMSG(1,(L"###LP indication\n\r")); //, powerMgmt=%x\n\r",pTxNode->LocalWCB->PowerMgmt));       }    }#endif */    //      First buffer contains the MAC header    //      Call NdisMoveMemory() to copy DEST MAC adress to WCB    //RETAILMSG(1,(TEXT("[Marvell]SendSinglePacket:1 NdisMoveMemory")));    NdisMoveMemory(                    (PVOID)&(pWcb->DestMACAdrHi),                    pVirtualAddr,                     MRVDRV_ETH_ADDR_LEN);   //RETAILMSG(1,(TEXT("[Marvell]SendSinglePacket:2 NdisMoveMemory")));  // Start the packet.    TotalBufferLength = TotalPacketLength;    TotalBufferLength += sizeof(WCB);/* dralee_20060403  // check for 802.3 vs. ethernet encapsulation  if( pHeader[12] > 0x05 )  {     bIsEtherPacket = TRUE;  }  else  {    bIsEtherPacket = FALSE;     } */  //#ifdef UNDER_CE // useBuffer = TRUE;//#endif           /* dralee_20060403    if ( bIsEtherPacket == FALSE )    {      // if 802.3 packet, then omit the length field      TotalBufferLength -= 2;    }*/          // TotalBufferLength contains the size of the packet       pDnldPacket->Len = ADD_SDIO_PKT_HDR_LENGTH(TotalBufferLength);        DraleeMsg((L"Send Packet Length=%d \n",pDnldPacket->Len));        DBGPRINT(DBG_TXDATA,("TX %d bytes: packet size %d\n",(ULONG)TotalBufferLength, (ULONG)TotalPacketLength));              pCurPtr += sizeof(WCB);     //RETAILMSG(1,(TEXT("[Marvell]SendSinglePacket: **2NdisMoveMemory")));  //        HexDump(DBG_TXDATADUMP,"TX Buffer:", (PUCHAR )pTxNode->LocalWCB, sizeof(WCB));           DBGPRINT(DBG_T3  | DBG_CRLF ,("TX PACKET:\n"));      AccumLength = sizeof(WCB);    //      Query each buffer for the packet and move data to SQ    for(i=0; i<BufferCount; i++)    {     NdisQueryBuffer(pBuffer, &pVirtualAddr, &Length);     AccumLength += Length;        if( AccumLength > MRVDRV_ETH_TX_PACKET_BUFFER_SIZE )        // PJG: accum length already counts the header... need to compare to entire buffer size            break;                 if( pVirtualAddr )        {       NdisMoveMemory(pCurPtr, (PUCHAR)pVirtualAddr, (USHORT)Length);           pCurPtr += Length;         }           NdisGetNextBuffer(pBuffer, &pNextBuffer);    if( !pNextBuffer )      break;    pBuffer = pNextBuffer;  }//for(i=0; i<BufferCount; i++)    DBGPRINT(DBG_TXDATADUMP | DBG_RAW,("\n"));    DBGPRINT(DBG_ALLEN,("[Marvell]TX SendSinglePacket!\n"));                                  pDnldPacket->Type = IF_DATA_PKT;return NDIS_STATUS_SUCCESS;}#endif#ifdef CCXNDIS_STATUSCCX_SendSinglePacket(  IN PMRVDRV_ADAPTER Adapter,  IN PNDIS_PACKET Packet){	NDIS_STATUS		status;            	SDIO_TX_PKT		downloadPkt;	UCHAR			*pCurPtr = (UCHAR *)downloadPkt.Buf.CmdBuf;	UINT			TotalPacketLength=0;	UINT			TotalBufferLength=0;	UINT			Length;	UINT			BufferCount;	PNDIS_BUFFER	pBuffer;	PVOID			pVirtualAddr;	WCB				LocalWCB;	NdisQueryPacket(Packet, NULL, &BufferCount, &pBuffer, &TotalPacketLength);	if(!pBuffer || !BufferCount || !TotalPacketLength) {		RETAILMSG(1,(L"TX - NDIS buffer is not valid, return FAILURE \n"));		status=NDIS_STATUS_FAILURE; 		goto end;	} else {		RETAILMSG(1,(L"BufferCount: %d\n", BufferCount));	}	NdisQueryBuffer(pBuffer, &pVirtualAddr, &Length);	///	///Fill the WCB	///	NdisZeroMemory(&LocalWCB, sizeof(WCB));	LocalWCB.Status = MRVDRV_WCB_STATUS_USED;	///crlo:s36 ++	///LocalWCB.PktLen = (USHORT)TotalPacketLength;	LocalWCB.PktLen = (USHORT)Length;	///crlo:s36 --	LocalWCB.TxControl  = 0;	LocalWCB.PktPtr = sizeof(WCB);	///LocalWCB.PowerMgmt |= MRVDRV_WCB_POWER_MGMT_LAST_PACKET;	downloadPkt.Buf.TxDataBuf.Wcb.PowerMgmt = MRVDRV_WCB_POWER_MGMT_LAST_PACKET;	NdisMoveMemory((PVOID)LocalWCB.DestMACAdrHi,						pVirtualAddr, 						MRVDRV_ETH_ADDR_LEN);	NdisMoveMemory(pCurPtr, (PUCHAR)&LocalWCB, sizeof(WCB));	pCurPtr += sizeof(WCB);		///	/// Fill in the packet data content	///	///NdisQueryBuffer(pBuffer, &pVirtualAddr, &Length);	///pHeader = (PUCHAR)pVirtualAddr;	NdisMoveMemory(pCurPtr, (PUCHAR)pVirtualAddr, (USHORT)Length);	pCurPtr += Length;	///downloadPkt.Len = ADD_SDIO_PKT_HDR_LENGTH(sizeof(WCB));	///crlo:s36 ++	///TotalBufferLength = TotalPacketLength;	TotalBufferLength = Length;	///crlo:s36 --	TotalBufferLength += sizeof(WCB);	downloadPkt.Len = ADD_SDIO_PKT_HDR_LENGTH(TotalBufferLength);	downloadPkt.Type = IF_DATA_PKT;                 	///NdisZeroMemory(&downloadPkt.Buf.TxDataBuf.Wcb, sizeof(WCB));	///downloadPkt.Buf.TxDataBuf.Wcb.PktPtr = sizeof(WCB); 	///downloadPkt.Buf.TxDataBuf.Wcb.PowerMgmt = pwmgr;  	//RETAILMSG(1,(L"NULL pkt:%x\n\r",pwmgr));	RETAILMSG(1,(L"CCX_SendSinglePacket, calling If_DownloadPkt\n"));	status = If_DownloadPkt(Adapter, &downloadPkt);	if (!SD_API_SUCCESS(status))	{                		RETAILMSG(1,(TEXT("[Marvell]SendSinglePacket:TX download failed! ")));  		status = NDIS_STATUS_FAILURE;		goto end;	} else {		RETAILMSG(1,(L"CCX_SendSinglePacket, If_DownloadPkt success\n"));	}end:	return status;}#if 0NDIS_STATUSCCX_SendSinglePacket(  IN PMRVDRV_ADAPTER Adapter,  IN PNDIS_PACKET Packet){	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;  	UCHAR  Buffer[MRVDRV_ETH_TX_PACKET_BUFFER_SIZE];	BOOLEAN bIsEtherPacket = TRUE;	PUCHAR pDest = Buffer;	PUCHAR pHeader = NULL;	BOOLEAN      useBuffer = FALSE;	ULONG        coBufferLength = 0;    SD_API_STATUS           sdstatus;          // intermediate status    SDIO_TX_PKT             downloadPkt;    UCHAR                   *pCurPtr = (UCHAR *)downloadPkt.Buf.CmdBuf;	//++dralee_20060327  	#ifdef PROPRIETARY_PERIODIC_PS  	if(Adapter->TxLock == 1)	{  		

⌨️ 快捷键说明

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