User`s guide

60 Appendix B
B.3.1 Sample Code
Test platform: Linux kernel 2.4.18 for x86 CPU
B.3.2 Search and Register device
dev=pci_find_subsys(VENDOR,DEVICE,SUBSYSTEM_VENDOR,SUBSYSTEM_
DEVICE,NULL);
.
B.3.3 Map Bus Address to Virtual Address
int deviceMapMem(Spull_Dev *pDE)
{
ULONG memSize;
ULONG PCIaddr;
PVOID SYSaddr;
//map BAR0(CSR)
pDE->BAR0VirtualWindowAddress = 0;
memSize = pDE->thisPhysicalMemorySize[BAR0];
PCIaddr = pDE->thisPhysicalMemoryAddr[BAR0]&0xFFFFFFF0;
SYSaddr = ioremap(PCIaddr,memSize);
if (!SYSaddr)
{
PWARN("R2D2DeviceMapMem: unable to map CSR's\n");
return ERR_MAP_FAIL;
}
else
{
pDE->BAR0VirtualWindowAddress = SYSaddr;
PDEBUG("R2D2DeviceMapMem: CSR's mapped @ %ph\n",SYSaddr);
}
// Translate and Map the Memory windows (BAR2 and BAR3)
//map BAR2
pDE->BAR2VirtualWindowAddress = 0;
memSize = pDE->thisPhysicalMemorySize[BAR2];
PCIaddr = pDE->thisPhysicalMemoryAddr[BAR2]&0xFFFFFFF0;
PDEBUG("R2D2DeviceMapMem: BAR2 physically mapped@
%08lXh\n",PCIaddr);