📄 nicdriver.c
字号:
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 + -