pciAutoConfigLib.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:6k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* pciAutoConfigLib.h - PCI bus automatic resource allocation facility */
  2. /* Copyright 1984-2001 Wind River Systems, Inc. */
  3. /* Copyright 1997,1998 Motorola, Inc. All Rights Reserved */
  4. /*
  5. modification history
  6. --------------------
  7. 01g,16oct01,tor  Added support macros for pciAutoCfgCtl(), see
  8.  pciAutoConfigLib.c for details.
  9. 01f,07may99,tm   Added pciAutoAddrAlign to perform alignment checking
  10.                  pciAutoFuncDis-/En-able, pciAutoRegConfig public (SPR 26484)
  11. 01e,30mar99,dat  SPR 25312, changed class to pciClass
  12. 01d,29jul98,scb  added roll call capability
  13. 01c,29jul98,tm   code review changes / added _DEV_DISPLAY attribute
  14. 01b,24jul98,tm   added int routing offset to PCI_LOC structure 
  15.                  added autoIntRouting boolean to PCI_SYSTEM structure
  16.  added protos for pciAutoBusNumberSet, pciAutoDevReset
  17. 01a,19feb98,dat  written, from Motorola.
  18. */
  19. #ifndef __INCpciAutoConfigLibh
  20. #define __INCpciAutoConfigLibh
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. /* PCI_LOC attributes */
  25. #define PCI_AUTO_ATTR_DEV_EXCLUDE (UINT8)(0x01) /* Exclude this device */
  26. #define PCI_AUTO_ATTR_DEV_DISPLAY (UINT8)(0x02) /* (S)VGA disp device  */
  27. #define PCI_AUTO_ATTR_DEV_PREFETCH (UINT8)(0x04) /* Device requests PF  */
  28. #define PCI_AUTO_ATTR_BUS_PREFETCH (UINT8)(0x08) /* Bridge implements   */
  29. #define PCI_AUTO_ATTR_BUS_PCI (UINT8)(0x10) /* PCI-PCI Bridge      */
  30. #define PCI_AUTO_ATTR_BUS_HOST (UINT8)(0x20) /* PCI Host Bridge     */
  31. #define PCI_AUTO_ATTR_BUS_ISA (UINT8)(0x40) /* PCI-ISA Bridge      */
  32. #define PCI_AUTO_ATTR_BUS_4GB_IO (UINT8)(0x80) /* 4G/64K IO Adresses  */
  33. /* OPTION COMMANDS for use with pciAutoCfgCtl() */
  34. /* 0 used for pSystem structure copy */
  35. #define PCI_PSYSTEM_STRUCT_COPY 0x0000
  36. /* 1-7 reserved for Fast Back To Back functions */
  37. #define PCI_FBB_ENABLE 0x0001
  38. #define PCI_FBB_DISABLE 0x0002
  39. #define PCI_FBB_UPDATE 0x0003
  40. #define PCI_FBB_STATUS_GET 0x0004
  41. /* 8-11 reserved for MAX_LAT */
  42. #define PCI_MAX_LATENCY_FUNC_SET 0x0008
  43. #define PCI_MAX_LATENCY_ARG_SET 0x0009
  44. #define PCI_MAX_LAT_ALL_SET 0x000a
  45. #define PCI_MAX_LAT_ALL_GET 0x000b
  46. /* 12-15 reserved for message output (logMsg) */
  47. #define PCI_MSG_LOG_SET 0x000c
  48. /* 16-47 reserved for pSystem functionality */
  49. #define PCI_MAX_BUS_SET 0x0010
  50. #define PCI_MAX_BUS_GET 0x0011
  51. #define PCI_CACHE_SIZE_SET 0x0012
  52. #define PCI_CACHE_SIZE_GET 0x0013
  53. #define PCI_AUTO_INT_ROUTE_SET 0x0014
  54. #define PCI_AUTO_INT_ROUTE_GET 0x0015
  55. #define PCI_MEM32_LOC_SET 0x0016
  56. #define PCI_MEM32_SIZE_SET 0x0017
  57. #define PCI_MEMIO32_LOC_SET 0x0018
  58. #define PCI_MEMIO32_SIZE_SET 0x0019
  59. #define PCI_IO32_LOC_SET 0x001a
  60. #define PCI_IO32_SIZE_SET 0x001b
  61. #define PCI_IO16_LOC_SET 0x001c
  62. #define PCI_IO16_SIZE_SET 0x001d
  63. #define PCI_INCLUDE_FUNC_SET 0x001e
  64. #define PCI_INT_ASSIGN_FUNC_SET 0x001f
  65. #define PCI_BRIDGE_PRE_CONFIG_FUNC_SET 0x0020
  66. #define PCI_BRIDGE_POST_CONFIG_FUNC_SET 0x0021
  67. #define PCI_ROLLCALL_FUNC_SET 0x0022
  68. /* 48-511 reserved for other memory configuration */
  69. #define PCI_MEM32_SIZE_GET 0x0030
  70. #define PCI_MEMIO32_SIZE_GET 0x0031
  71. #define PCI_IO32_SIZE_GET 0x0032
  72. #define PCI_IO16_SIZE_GET 0x0033
  73. /* 512-0xffff available for misc items */
  74. #define PCI_TEMP_SPACE_SET 0x0200
  75. #define PCI_MINIMIZE_RESOURCES 0x0201
  76. #ifndef _ASMLANGUAGE
  77. typedef struct pciMemPtr
  78.     {
  79.     void * pMem;
  80.     int memSize;
  81.     } PCI_MEM_PTR;
  82. typedef struct /* PCI_LOC, a standard bus location */
  83.     {
  84.     UINT8 bus;
  85.     UINT8 device;
  86.     UINT8 function;
  87.     UINT8 attribute;
  88.     UINT8 offset;       /* interrupt routing for this device */
  89.     } PCI_LOC;
  90. /* PCI identification structure */
  91. typedef struct
  92.     {
  93.     PCI_LOC loc;
  94.     UINT devVend;
  95.     } PCI_ID;
  96. /* obsolete structure */
  97. typedef struct pciSystem /* PCI_SYSTEM, auto configuration info */
  98.     {
  99.     UINT pciMem32; /* 32 bit prefetchable memory location */
  100.     UINT pciMem32Size; /* 32 bit prefetchable memory size */
  101.     UINT pciMemIo32; /* 32 bit non-prefetchable memory location */
  102.     UINT pciMemIo32Size; /* 32 bit non-prefetchable memory size */
  103.     UINT pciIo32; /* 32 bit io location */
  104.     UINT pciIo32Size; /* 32 bit io size */
  105.     UINT pciIo16; /* 16 bit io location */
  106.     UINT pciIo16Size; /* 16 bit io size */
  107.     int maxBus; /* Highest subbus number */
  108.     int cacheSize; /* cache line size */
  109.     UINT maxLatency; /* max latency */
  110.     BOOL autoIntRouting;        /* automatic routing strategy */
  111.     STATUS (* includeRtn) /* returns OK to include */
  112.    (
  113.    struct pciSystem * pSystem,
  114.    PCI_LOC * pLoc,
  115.    UINT devVend
  116.    );
  117.     UCHAR  (* intAssignRtn) /* returns int line, given int pin */
  118.    (
  119.    struct pciSystem * pSystem,
  120.    PCI_LOC * pLoc,
  121.    UCHAR pin
  122.    );
  123.     void (* bridgePreConfigInit) /* bridge pre-enumeration initialization */
  124.    (
  125.    struct pciSystem * pSystem,
  126.    PCI_LOC * pLoc,
  127.    UINT devVend
  128.    );
  129.     void (* bridgePostConfigInit)/* bridge post-enumeration initialization */
  130.    (
  131.    struct pciSystem * pSystem,
  132.    PCI_LOC * pLoc,
  133.    UINT devVend
  134.    );
  135.     STATUS (* pciRollcallRtn) ();  /* Roll call check */
  136.     } PCI_SYSTEM;
  137. typedef int (*PCI_LOGMSG_FUNC)(char *fmt, int i1, int i2, int i3, int i4, int i5, int i6);
  138. typedef UINT8 (*PCI_MAX_LAT_FUNC)(int bus, int device, int func, void *pArg);
  139. typedef UINT32 (*PCI_MEM_BUS_EXTRA_FUNC)(int bus, int device, int func, void *pArg);
  140. typedef STATUS (*PCI_INCLUDE_FUNC)(PCI_SYSTEM *pSystem, PCI_LOC *pLoc, UINT devVend);
  141. typedef UCHAR (*PCI_INT_ASSIGN_FUNC)(PCI_SYSTEM *pSystem, PCI_LOC *pLoc, UINT devVend);
  142. typedef void (*PCI_BRIDGE_PRE_CONFIG_FUNC)(PCI_SYSTEM *pSystem, PCI_LOC *pLoc, UINT devVend);
  143. typedef void (*PCI_BRIDGE_POST_CONFIG_FUNC)(PCI_SYSTEM *pSystem, PCI_LOC *pLoc, UINT devVend);
  144. typedef STATUS (*PCI_ROLL_CALL_FUNC)();
  145. void pciAutoConfig (PCI_SYSTEM *);
  146. STATUS pciAutoGetNextClass ( PCI_SYSTEM *pSystem, PCI_LOC *pciFunc,
  147.                              UINT *index, UINT pciClass, UINT mask);
  148. STATUS pciAutoBusNumberSet ( PCI_LOC * pPciLoc, UINT primary, UINT secondary,
  149.     UINT subordinate);
  150. STATUS pciAutoDevReset ( PCI_LOC * pPciLoc);
  151. STATUS pciAutoAddrAlign ( UINT32 base, UINT32 limit, UINT32 reqSize,
  152.   UINT32 *pAlignedBase );
  153. void pciAutoFuncEnable ( PCI_SYSTEM * pSystem, PCI_LOC * pFunc);
  154. void pciAutoFuncDisable ( PCI_LOC *pPciFunc);
  155. UINT pciAutoRegConfig ( PCI_SYSTEM * pSystem, PCI_LOC *pPciFunc,
  156.      UINT baseAddr, UINT nSize, UINT addrInfo);
  157. void * pciAutoConfigLibInit(void * pArg);
  158. STATUS pciAutoCfgCtl ( void *pCookie, int cmd, void *pArg );
  159. STATUS pciAutoCfg( void *pCookie );
  160. #endif /* _ASMLANGUAGE */
  161. #ifdef __cplusplus
  162. }
  163. #endif
  164. #endif /* __INCpciAutoConfigLibh */