// File: PCIUtil.H // Purpose: routines for handling PCI devices // Autor: M. Czamai, PEAK-System Technik GmbH, Darmstadt, Germany // Date: 11/2000 #ifndef __PCI_UTIL_H__ #define __PCI_UTIL_H__ #include // def. of _go32_dpmi_seginfo #include "MyTypes.H" // custom datatypes // PEAK specific card entries #define PCI_PEAK_VID 0x001C // VendorID & SubVendorID #define PCI_PEAK_DID 0x0001 // DeviceID (= chipset) // PCI function codes for using the INT 1Ah service routine #define PCI_BIOS_INT 0x1A #define PCI_FUNCTION_ID 0xB1 #define PCI_BIOS_PRESENT 0x01 #define PCI_FIND_DEVICE 0x02 #define PCI_READ_CONFIG_BYTE 0x08 #define PCI_WRITE_CONFIG_BYTE 0x0B #define PCI_READ_CONFIG_WORD 0x09 #define PCI_WRITE_CONFIG_WORD 0x0C #define PCI_READ_CONFIG_DWORD 0x0A #define PCI_WRITE_CONFIG_DWORD 0x0D #define PCI_GET_IRQ_ROUTING_OPT 0x0E #define PCI_SET_HARDWARE_IRQ 0x0F // PCI return codes for using the INT 1Ah service routine #define PCI_SUCCESSFUL 0x00 #define PCI_BAD_VENDOR_ID 0x83 #define PCI_DEVICE_NOT_FOUND 0x86 #define PCI_BAD_REGISTER_NUMBER 0x87 #define PCI_SET_FAILED 0x88 #define PCI_BUFFER_TOO_SMALL 0x89 // general PCI error codes #define BAD_VENDOR_ID 0xFFFF #define INVALID_BASE_ADR 0xFFFF #define NOT_CONNECTED_TO_IRQ 0xFF // constants for DPMI functions #define DETECT_CPU_MODE 0x2F #define DPMI_FAIL -1 // structure for mapping adresses in the memmory adress space typedef struct tagMemInfo { DWORD dwPhysical; DWORD dwLinear; DWORD dwSize; WORD wSelector; }MemInfo; typedef struct tagPCIDev { WORD wVendorID; // Vendor ID WORD wDeviceID; // Device ID WORD wSubSysDID; // subsytem Device ID BYTE bBusNo; BYTE bDevNo; BYTE bFuncNo; bool fValid; // bBusNo, bDevNo and bFuncNo are valid MemInfo* pRegInternal; // base adress of internal registers MemInfo* pRegCAN[2]; // base adress of CAN controller(s) BYTE bIRQ; // interrupt line: 0xFF == invalid _go32_dpmi_seginfo* pINTHandler; // used interrupt handler _go32_dpmi_seginfo* pOldINTHandler; // old interrupt handler (restore before exit) }PCIDev; PCIDev PCIFindDevice(WORD wVendorID, WORD wDeviceID, WORD wIndex); bool PCANPCIInit(PCIDev& Dev, BYTE bNo, WORD wBitRate); #endif // __PCI_UTIL_H__