www.pudn.com > vxworks0108.rar > pciAutoConfigLib.h
/* pciAutoConfigLib.h - PCI bus automatic resource allocation facility */
#ifndef __INCpciAutoConfigLibh
#define __INCpciAutoConfigLibh
#ifdef __cplusplus
extern "C" {
#endif
/* PCI_LOC attributes */
#define PCI_AUTO_ATTR_DEV_EXCLUDE (UINT8)(0x01) /* Exclude this device */
#define PCI_AUTO_ATTR_DEV_DISPLAY (UINT8)(0x02) /* (S)VGA disp device */
#define PCI_AUTO_ATTR_DEV_PREFETCH (UINT8)(0x04) /* Device requests PF */
#define PCI_AUTO_ATTR_BUS_PREFETCH (UINT8)(0x08) /* Bridge implements */
#define PCI_AUTO_ATTR_BUS_PCI (UINT8)(0x10) /* PCI-PCI Bridge */
#define PCI_AUTO_ATTR_BUS_HOST (UINT8)(0x20) /* PCI Host Bridge */
#define PCI_AUTO_ATTR_BUS_ISA (UINT8)(0x40) /* PCI-ISA Bridge */
#define PCI_AUTO_ATTR_BUS_4GB_IO (UINT8)(0x80) /* 4G/64K IO Adresses */
/* OPTION COMMANDS for use with pciAutoCfgCtl() */
/* 0 used for pSystem structure copy */
#define PCI_PSYSTEM_STRUCT_COPY 0x0000
/* 1-7 reserved for Fast Back To Back functions */
#define PCI_FBB_ENABLE 0x0001
#define PCI_FBB_DISABLE 0x0002
#define PCI_FBB_UPDATE 0x0003
#define PCI_FBB_STATUS_GET 0x0004
/* 8-11 reserved for MAX_LAT */
#define PCI_MAX_LATENCY_FUNC_SET 0x0008
#define PCI_MAX_LATENCY_ARG_SET 0x0009
#define PCI_MAX_LAT_ALL_SET 0x000a
#define PCI_MAX_LAT_ALL_GET 0x000b
/* 12-15 reserved for message output (logMsg) */
#define PCI_MSG_LOG_SET 0x000c
/* 16-47 reserved for pSystem functionality */
#define PCI_MAX_BUS_SET 0x0010
#define PCI_MAX_BUS_GET 0x0011
#define PCI_CACHE_SIZE_SET 0x0012
#define PCI_CACHE_SIZE_GET 0x0013
#define PCI_AUTO_INT_ROUTE_SET 0x0014
#define PCI_AUTO_INT_ROUTE_GET 0x0015
#define PCI_MEM32_LOC_SET 0x0016
#define PCI_MEM32_SIZE_SET 0x0017
#define PCI_MEMIO32_LOC_SET 0x0018
#define PCI_MEMIO32_SIZE_SET 0x0019
#define PCI_IO32_LOC_SET 0x001a
#define PCI_IO32_SIZE_SET 0x001b
#define PCI_IO16_LOC_SET 0x001c
#define PCI_IO16_SIZE_SET 0x001d
#define PCI_INCLUDE_FUNC_SET 0x001e
#define PCI_INT_ASSIGN_FUNC_SET 0x001f
#define PCI_BRIDGE_PRE_CONFIG_FUNC_SET 0x0020
#define PCI_BRIDGE_POST_CONFIG_FUNC_SET 0x0021
#define PCI_ROLLCALL_FUNC_SET 0x0022
/* 48-511 reserved for other memory configuration */
#define PCI_MEM32_SIZE_GET 0x0030
#define PCI_MEMIO32_SIZE_GET 0x0031
#define PCI_IO32_SIZE_GET 0x0032
#define PCI_IO16_SIZE_GET 0x0033
/* 512-0xffff available for misc items */
#define PCI_TEMP_SPACE_SET 0x0200
#define PCI_MINIMIZE_RESOURCES 0x0201
#ifndef _ASMLANGUAGE
typedef struct pciMemPtr
{
void * pMem;
int memSize;
} PCI_MEM_PTR;
typedef struct /* PCI_LOC, a standard bus location */
{
UINT8 bus;
UINT8 device;
UINT8 function;
UINT8 attribute;
UINT8 offset; /* interrupt routing for this device */
} PCI_LOC;
/* PCI identification structure */
typedef struct
{
PCI_LOC loc;
UINT devVend;
} PCI_ID;
/* obsolete structure */
typedef struct pciSystem /* PCI_SYSTEM, auto configuration info */
{
UINT pciMem32; /* 32 bit prefetchable memory location */
UINT pciMem32Size; /* 32 bit prefetchable memory size */
UINT pciMemIo32; /* 32 bit non-prefetchable memory location */
UINT pciMemIo32Size; /* 32 bit non-prefetchable memory size */
UINT pciIo32; /* 32 bit io location */
UINT pciIo32Size; /* 32 bit io size */
UINT pciIo16; /* 16 bit io location */
UINT pciIo16Size; /* 16 bit io size */
int maxBus; /* Highest subbus number */
int cacheSize; /* cache line size */
UINT maxLatency; /* max latency */
BOOL autoIntRouting; /* automatic routing strategy */
STATUS (* includeRtn) /* returns OK to include */
(
struct pciSystem * pSystem,
PCI_LOC * pLoc,
UINT devVend
);
UCHAR (* intAssignRtn) /* returns int line, given int pin */
(
struct pciSystem * pSystem,
PCI_LOC * pLoc,
UCHAR pin
);
void (* bridgePreConfigInit) /* bridge pre-enumeration initialization */
(
struct pciSystem * pSystem,
PCI_LOC * pLoc,
UINT devVend
);
void (* bridgePostConfigInit)/* bridge post-enumeration initialization */
(
struct pciSystem * pSystem,
PCI_LOC * pLoc,
UINT devVend
);
STATUS (* pciRollcallRtn) (); /* Roll call check */
} PCI_SYSTEM;
typedef int (*PCI_LOGMSG_FUNC)(char *fmt, int i1, int i2, int i3, int i4, int i5, int i6);
typedef UINT8 (*PCI_MAX_LAT_FUNC)(int bus, int device, int func, void *pArg);
typedef UINT32 (*PCI_MEM_BUS_EXTRA_FUNC)(int bus, int device, int func, void *pArg);
typedef STATUS (*PCI_INCLUDE_FUNC)(PCI_SYSTEM *pSystem, PCI_LOC *pLoc, UINT devVend);
typedef UCHAR (*PCI_INT_ASSIGN_FUNC)(PCI_SYSTEM *pSystem, PCI_LOC *pLoc, UINT devVend);
typedef void (*PCI_BRIDGE_PRE_CONFIG_FUNC)(PCI_SYSTEM *pSystem, PCI_LOC *pLoc, UINT devVend);
typedef void (*PCI_BRIDGE_POST_CONFIG_FUNC)(PCI_SYSTEM *pSystem, PCI_LOC *pLoc, UINT devVend);
typedef STATUS (*PCI_ROLL_CALL_FUNC)();
void pciAutoConfig (PCI_SYSTEM *);
STATUS pciAutoGetNextClass ( PCI_SYSTEM *pSystem, PCI_LOC *pciFunc,
UINT *index, UINT pciClass, UINT mask);
STATUS pciAutoBusNumberSet ( PCI_LOC * pPciLoc, UINT primary, UINT secondary,
UINT subordinate);
STATUS pciAutoDevReset ( PCI_LOC * pPciLoc);
STATUS pciAutoAddrAlign ( UINT32 base, UINT32 limit, UINT32 reqSize,
UINT32 *pAlignedBase );
void pciAutoFuncEnable ( PCI_SYSTEM * pSystem, PCI_LOC * pFunc);
void pciAutoFuncDisable ( PCI_LOC *pPciFunc);
UINT pciAutoRegConfig ( PCI_SYSTEM * pSystem, PCI_LOC *pPciFunc,
UINT baseAddr, UINT nSize, UINT addrInfo);
void * pciAutoConfigLibInit(void * pArg);
STATUS pciAutoCfgCtl ( void *pCookie, int cmd, void *pArg );
STATUS pciAutoCfg( void *pCookie );
#endif /* _ASMLANGUAGE */
#ifdef __cplusplus
}
#endif
#endif /* __INCpciAutoConfigLibh */