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

📄 nicdriver.c

📁 3com3c905网卡驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:

    DebugMsg(" BUS_MASTER_STATUS_WIN7 in Reg Win 7 Value : 0x%08X. \n",
                        NIC_READ_PORT_ULONG(pAdapter->IoBaseAddress,BUS_MASTER_STATUS_WIN7) );
 
    DebugMsg(" BUS_MASTER_TIMER_WIN7 in Reg Win 7 Value : 0x%08X. \n",
                        NIC_READ_PORT_ULONG(pAdapter->IoBaseAddress,BUS_MASTER_TIMER_WIN7) ); 
*/
    DebugMsg("***************\n");
}

/***********************************************************************
***  Download a 20 byte packet into the TxFIFO, from us, to us.
**/
void Drv_VortexTxTest( ) /*IN PNIC_INFORMATION pAdapter)  */
{
    DPD_ENTRY   DPD,DPD2, * pDPD, * pDPD2;
    UPD_ENTRY   UPD, * pUPD;
  
    UCHAR      pDataBuffer[50];
    UCHAR   *  pRxBuffer;

    UCHAR     pAddressBuffer[6]; 
    ULONG     IOBase;
    
    PNIC_INFORMATION pAdapter ;

    int  nLen= 50;
    
    pAdapter =& gNic_Information;

    DebugMsg("Now try to send Loop Back Packet into NIC ! \n");

	/* Set allocated buffer for transmit */
    pRxBuffer      = NIC_MEM_AlignAlloc(16,nLen);

    /* Fill data in the buffer 
	pAddressBuffer = pAdapter->RxMode.wStationAddr;*/
	NIC_MEM_Copy(pDataBuffer, pAddressBuffer, 6);	/* destination is me  */
	NIC_MEM_Copy(pDataBuffer + 6, pAddressBuffer, 6);	/* source is me  */

	NIC_MEM_MemSet( pDataBuffer + 12 , 'c', nLen -12 );
		 
 	Drv_ShowBMInfo(pAdapter);
  /****************** Set UPD Structure *********************************/
    pUPD =(UPD_ENTRY *) NIC_MEM_AlignAlloc(16,sizeof(UPD_ENTRY) ) ;
       pUPD->UpNextPointerPCI=0;
       pUPD->UpPacketStatus =0;
       pUPD->UPDFragNode[0].nFragAddrPCI= Virt_to_Bus(pRxBuffer);
       pUPD->UPDFragNode[0].nFragLength =(nLen & DPD_FRAGLENGTH_MASK) | DPD_FRAGLENGTH_LASTFRAG;

  /*******Stall Upload Engine, Set UP List Pointer Register, and then UnStall it***********/
    DebugMsg(" Stall Upload Engine, Set UP List Pointer Register, and then UnStall it ...");

 	NIC_COMMAND_WAIT(pAdapter, COMMAND_UP_STALL);

	NIC_WRITE_PORT_ULONG(pAdapter->IoBaseAddress, UP_LIST_POINTER_REGISTER,(ULONG)  Virt_to_Bus(pUPD) );

	NIC_COMMAND(pAdapter->IoBaseAddress, COMMAND_UP_UNSTALL);
 
    DebugMsg("  Done !\n");

  	Drv_ShowBMInfo(pAdapter);
  /**************************** Set DPD Structure ******************************/
    pDPD =(DPD_ENTRY *)  NIC_MEM_AlignAlloc(16,sizeof(DPD_ENTRY) ) ;
	pDPD2=(DPD_ENTRY *)  NIC_MEM_AlignAlloc(16,sizeof(DPD_ENTRY) ) ;

	pDPD->DownNextPointerPCI = Virt_to_Bus(pDPD2);
	pDPD->FrameStartHeader   = 0; 
	pDPD->FrameStartHeader   = FSH_ROUND_UP_DEFEAT | FSH_DOWN_INDICATE |FSH_DPD_EMPTY;/* */

	pDPD->DPDFragNode[0].nFragAddrPCI = Virt_to_Bus(pDataBuffer);
	pDPD->DPDFragNode[0].nFragLength =(nLen & DPD_FRAGLENGTH_MASK) ;

  /**************************** Set DPD2 Structure ******************************/
	pDPD2->DownNextPointerPCI = 0;
	pDPD2->FrameStartHeader  = 0; 
	pDPD2->FrameStartHeader  = FSH_ROUND_UP_DEFEAT | FSH_DOWN_INDICATE; /*|FSH_DPD_EMPTY*/

	pDPD2->DPDFragNode[0].nFragAddrPCI = Virt_to_Bus(pDataBuffer);
	pDPD2->DPDFragNode[0].nFragLength =(nLen & DPD_FRAGLENGTH_MASK) | DPD_FRAGLENGTH_LASTFRAG;

 /******************** See the DPD & UPD Information ******************************/
    DebugMsg("\n The DPD Address  0x%08X . \n",(ULONG) pDPD );
    DebugMsg(" The DPD Address PCI 0x%08X . \n",(ULONG) Virt_to_Bus(pDPD) );

    DebugMsg(" The DPD Next Pointer PCI       is : 0x%08X . \n",pDPD->DownNextPointerPCI   );
    DebugMsg(" The DPD Start Header Old Value is : 0x%08X . \n",pDPD->FrameStartHeader   );

    DebugMsg(" The DPDFragNode[0] Address     0x%08X . \n",(ULONG) pDataBuffer );
    DebugMsg(" The DPDFragNode[0] Address PCI 0x%08X . \n",(ULONG) pDPD->DPDFragNode[0].nFragAddrPCI );
    DebugMsg(" The DPDFragNode[0] Length:     0x%08X . \n",(ULONG) pDPD->DPDFragNode[0].nFragLength );

    DebugMsg("\n The DPD2 Address  0x%08X . \n",(ULONG) pDPD2 );
    DebugMsg(" The DPD2 Address PCI 0x%08X . \n",(ULONG) Virt_to_Bus(pDPD2) );

    DebugMsg(" The DPD2 Next Pointer PCI       is : 0x%08X . \n",pDPD2->DownNextPointerPCI   );
    DebugMsg(" The DPD2 Start Header Old Value is : 0x%08X . \n",pDPD2->FrameStartHeader   );

    DebugMsg(" The DPD2FragNode[0] Address     0x%08X . \n",(ULONG) pDataBuffer );
    DebugMsg(" The DPD2FragNode[0] Address PCI 0x%08X . \n",(ULONG) pDPD2->DPDFragNode[0].nFragAddrPCI );
    DebugMsg(" The DPD2FragNode[0] Length:     0x%08X . \n",(ULONG) pDPD2->DPDFragNode[0].nFragLength );


	Drv_ShowBMInfo(pAdapter);
/*	  Download DPD */
	NIC_COMMAND_WAIT(pAdapter, COMMAND_DOWN_STALL);

	NIC_WRITE_PORT_ULONG(pAdapter->IoBaseAddress, DOWN_LIST_POINTER_REGISTER,(ULONG)  Virt_to_Bus(pDPD) ); 

	NIC_COMMAND(pAdapter->IoBaseAddress, COMMAND_DOWN_UNSTALL);

    DebugMsg(" Loop Back Test Packet Sended ! \n");

	NIC_DELAY(10);

	/* Check if the DPD is done with*/
     DebugMsg(" The DPD Start Header New Value is : 0x%08X . \n",pDPD->FrameStartHeader   );
     DebugMsg(" The DPD2 Start Header New Value is : 0x%08X . \n",pDPD2->FrameStartHeader   );

	Drv_ShowBMInfo(pAdapter);

/*    NIC_MEM_Free(pRxBuffer);
    NIC_MEM_Free(pDPD);
    NIC_MEM_Free(pDPD2);
    NIC_MEM_Free(pUPD);
*/
    DebugMsg("\n Let's break out ! \n");

}

/************************************************************************************
*** Followings are all routines used to find a way for successful DMAing
**/
BOOLEAN Drv_CacheMemTest(IN PNIC_INFORMATION pAdapter) 
{
    DPD_ENTRY   DPD,DPD2, * pDPD, * pDPD2;
    UPD_ENTRY   UPD, * pUPD;

    CACHE_FUNCS cacheFuncs; 
 
    UCHAR      pDataBuffer[50];
    UCHAR   *  pRxBuffer;

    UCHAR   *  pAddressBuffer; 
    
    int  nLen= 50;

    cacheFuncs = cacheDmaFuncs;

    if (!CACHE_DMA_IS_WRITE_COHERENT ())
	{ 
       DebugMsg( " Device Requires Cache Coherent Memory, which is impossible Here !\n" );
       return FALSE ;
	} 

	/* Set allocated buffer for transmit */
   if( NULL ==(pRxBuffer = memalign(16,nLen) ) )
   {
       DebugMsg( " Memory not avaible !\n" );
       return FALSE ;
   } 

    /* Fill data in the buffer */
	pAddressBuffer = pAdapter->RxMode.wStationAddr;
	NIC_MEM_Copy(pDataBuffer, pAddressBuffer, 6);	/* destination is me  */
	NIC_MEM_Copy(pDataBuffer + 6, pAddressBuffer, 6);	/* source is me  */

	NIC_MEM_MemSet( pDataBuffer + 12 , 'c', nLen -12 );

    /* allocate memory for upload and download descriptors */

    if (NULL== (pDPD=(DPD_ENTRY *) cacheDmaMalloc (sizeof(DPD_ENTRY) ) ) )
	{ 
       DebugMsg( " Memory not avaiable !\n" );
       return FALSE ;
	} 
   
	pDPD->DownNextPointerPCI = 0;
	pDPD->FrameStartHeader   = FSH_ROUND_UP_DEFEAT | FSH_DOWN_INDICATE ; 

	pDPD->DPDFragNode[0].nFragAddrPCI = NIC_CACHE_VIRT_TO_PHYS(&cacheFuncs,pRxBuffer);
	pDPD->DPDFragNode[0].nFragLength =(nLen & DPD_FRAGLENGTH_MASK) | DPD_FRAGLENGTH_LASTFRAG;

	/*  Download DPD */
	NIC_COMMAND_WAIT(pAdapter, COMMAND_DOWN_STALL);

	NIC_WRITE_PORT_ULONG(pAdapter->IoBaseAddress, DOWN_LIST_POINTER_REGISTER,
                                          (ULONG)  NIC_CACHE_VIRT_TO_PHYS(&cacheFuncs,pDPD) ); 

	NIC_COMMAND(pAdapter->IoBaseAddress, COMMAND_DOWN_UNSTALL);

    DebugMsg(" Loop Back Test Packet Sended ! \n");

	NIC_DELAY(10);

     DebugMsg(" The DPD Start Header New Value is : 0x%08X . \n",pDPD->FrameStartHeader   );
	 DebugMsg(" Now the DPD List Pointer Register Value : 0x%08X. \n",
                        NIC_READ_PORT_ULONG(pAdapter->IoBaseAddress,DOWN_LIST_POINTER_REGISTER) ); 

	Drv_ShowBMInfo(pAdapter);
}


void Drv_MemBaseTest(IN PNIC_INFORMATION pAdapter) 
{
     int i;
     
    NIC_COMMAND( pAdapter->IoBaseAddress ,
		            COMMAND_SELECT_REGISTER_WINDOW |REGISTER_WINDOW_3);

     for(i=0;i<32;i++)
     {
       DebugMsg("Mem Space:[0x%02X] == 0x%08X ; IO Space:[0x%02X]== 0x%08X \n",i,
                            uHALr_PCIMemRead32(pAdapter->MemBaseAddress+(ULONG)i*4),
                              i, NIC_READ_PORT_ULONG(pAdapter->IoBaseAddress, i *4) );
     }
}

/***  Above are routines about NIC Driver Interface
***    End of NICDriver.c
************************************************************************************/

⌨️ 快捷键说明

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