Specifications
Example PCI User-Level Device Drive
r
A-3
int bus,dev;
PCI_DWORD dev_vend_id;
bus = PCITAG_BUSNUM(tag);
dev = PCITAG_DEVNUM(tag)+1;
for (; bus <= MAX_PCI_BUS; bus++) {
for (; dev <= MAX_PCI_DEV; dev ++) {
unsigned short devid,vendid;
tag = PCI_MAKE_TAG(bus,dev,func);
dev_vend_id = pci_cfg_read(tag, PCI_ID0_REG);
vendid = dev_vend_id & 0x0000ffff;
devid = dev_vend_id >> 16;
if (vendid == 0xffff) {
continue;
}
else {
/* Is it the vendor id/dev id of this device? */
if( (vendid == vid) && (devid == did) ) {
return(tag);
}
} /* End if vendid */
} /* End for dev */
dev = 0;
} /* End for bus */
return(-1);
} /* End pci_get_devtag */
main()
{
int x, rc; /* return code */
pci_tag_t tag;/* tag for 1st DIO-96 card */
pci_spc_t bar0, bar1;/* returned PCI base address mappings */
/* shared memory ids */
int bar0_shm_id, bar1_shm_id;
DIO96_t *dio_regs;/* pointer to dio regs */
char * PCImite;/* pointer to PCI mite registers */
bar0.len = bar1.len = 0; /* clear returned lengths up front */
bar1_shm_id = NULL;
dio_regs = NULL;
rc = 0; /* default to no error */
/* Find PCI device */
if ((tag=pci_get_devtag(PCI_MAKE_TAG(0,0,0),NATL_INSTR, DIO96,0))== -1) {
fprintf(stderr, "PCIex: unable for find DIO96 card \n");
exit(1);
}
/* map base address 0 */
if (pci_cfgspc_alloc(tag, PCI_BASE_ADDR0, &bar0) != 0) {
rc = errno;