Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.  
  2.  
  3. typedef struct {
  4.     int       vendor;
  5.     int       devtype;
  6.     int       devRev;
  7.     int       subsysVendor;
  8.     int       subsysCard;
  9.     int       bus;
  10.     int       devfn;
  11. //    int       func;
  12.     int       class;
  13.     int       subclass;
  14.     int       interface;
  15.     memType   memBase[6];
  16.     memType   ioBase[6];
  17.     int       size[6];
  18.     unsigned char       type[6];
  19.     memType   biosBase;
  20.     int       biosSize;
  21. //    pointer   thisCard;
  22.     Bool      validSize;
  23. //    Bool      validate;
  24. //    CARD32    listed_class;
  25. } pciVideoRec, *pciVideoPtr;
  26.  
  27. #define PCI_CLASS_DISPLAY_VGA      0x0300
  28. /*
  29.  * Under PCI, each device has 256 bytes of configuration address space,
  30.  * of which the first 64 bytes are standardized as follows:
  31.  */
  32. #define PCI_VENDOR_ID                   0x000    /* 16 bits */
  33. #define PCI_DEVICE_ID                   0x002    /* 16 bits */
  34. #define PCI_COMMAND                     0x004    /* 16 bits */
  35. #define  PCI_COMMAND_IO                 0x001    /* Enable response in I/O space */
  36. #define  PCI_COMMAND_MEMORY             0x002    /* Enable response in Memory space */
  37. #define  PCI_COMMAND_MASTER             0x004    /* Enable bus mastering */
  38. #define  PCI_COMMAND_SPECIAL            0x008    /* Enable response to special cycles */
  39. #define  PCI_COMMAND_INVALIDATE         0x010    /* Use memory write and invalidate */
  40. #define  PCI_COMMAND_VGA_PALETTE        0x020    /* Enable palette snooping */
  41. #define  PCI_COMMAND_PARITY             0x040    /* Enable parity checking */
  42. #define  PCI_COMMAND_WAIT               0x080    /* Enable address/data stepping */
  43. #define  PCI_COMMAND_SERR               0x100    /* Enable SERR */
  44. #define  PCI_COMMAND_FAST_BACK          0x200    /* Enable back-to-back writes */
  45. #define  PCI_COMMAND_INTX_DISABLE       0x400    /* INTx Emulation Disable */
  46.  
  47. #define PCI_STATUS                      0x006    /* 16 bits */
  48. #define  PCI_STATUS_CAP_LIST            0x010    /* Support Capability List */
  49. #define  PCI_STATUS_66MHZ               0x020    /* Support 66 Mhz PCI 2.1 bus */
  50. #define  PCI_STATUS_UDF                 0x040    /* Support User Definable Features [obsolete] */
  51. #define  PCI_STATUS_FAST_BACK           0x080    /* Accept fast-back to back */
  52. #define  PCI_STATUS_PARITY              0x100    /* Detected parity error */
  53. #define  PCI_STATUS_DEVSEL_MASK         0x600    /* DEVSEL timing */
  54. #define  PCI_STATUS_DEVSEL_FAST         0x000
  55. #define  PCI_STATUS_DEVSEL_MEDIUM       0x200
  56. #define  PCI_STATUS_DEVSEL_SLOW         0x400
  57. #define  PCI_STATUS_SIG_TARGET_ABORT    0x800    /* Set on target abort */
  58. #define  PCI_STATUS_REC_TARGET_ABORT    0x1000   /* Master ack of " */
  59. #define  PCI_STATUS_REC_MASTER_ABORT    0x2000   /* Set on master abort */
  60. #define  PCI_STATUS_SIG_SYSTEM_ERROR    0x4000   /* Set when we drive SERR */
  61. #define  PCI_STATUS_DETECTED_PARITY     0x8000   /* Set on parity error */
  62.  
  63. #define PCI_CLASS_REVISION               0x08    /* High 24 bits are class, low 8 revision */
  64. #define PCI_REVISION_ID                  0x08    /* Revision ID */
  65. #define PCI_CLASS_PROG                   0x09    /* Reg. Level Programming Interface */
  66. #define PCI_CLASS_DEVICE                 0x0a    /* Device class */
  67.  
  68. #define PCI_CACHE_LINE_SIZE              0x0c    /* 8 bits */
  69. #define PCI_LATENCY_TIMER                0x0d    /* 8 bits */
  70. #define PCI_HEADER_TYPE                  0x0e    /* 8 bits */
  71. #define  PCI_HEADER_TYPE_NORMAL             0
  72. #define  PCI_HEADER_TYPE_BRIDGE             1
  73. #define  PCI_HEADER_TYPE_CARDBUS            2
  74.  
  75. #define PCI_BIST                         0x0f    /* 8 bits */
  76. #define  PCI_BIST_CODE_MASK              0x0f    /* Return result */
  77. #define  PCI_BIST_START                  0x40    /* 1 to start BIST, 2 secs or less */
  78. #define  PCI_BIST_CAPABLE                0x80    /* 1 if BIST capable */
  79.  
  80. #define PCI_CAPABILITY_LIST              0x34    /* Offset of first capability list entry */
  81. #define PCI_CB_CAPABILITY_LIST           0x14
  82. /* Capability lists */
  83.  
  84. #define PCI_CAP_LIST_ID                  0       /* Capability ID */
  85. #define  PCI_CAP_ID_PM                   0x01    /* Power Management */
  86. #define  PCI_CAP_ID_AGP                  0x02    /* Accelerated Graphics Port */
  87. #define  PCI_CAP_ID_VPD                  0x03    /* Vital Product Data */
  88. #define  PCI_CAP_ID_SLOTID               0x04    /* Slot Identification */
  89. #define  PCI_CAP_ID_MSI                  0x05    /* Message Signalled Interrupts */
  90. #define  PCI_CAP_ID_CHSWP                0x06    /* CompactPCI HotSwap */
  91. #define  PCI_CAP_ID_PCIX                 0x07    /* PCI-X */
  92. #define  PCI_CAP_ID_HT                   0x08    /* HyperTransport */
  93. #define  PCI_CAP_ID_VNDR                 0x09    /* Vendor specific capability */
  94. #define  PCI_CAP_ID_SHPC                 0x0C    /* PCI Standard Hot-Plug Controller */
  95. #define  PCI_CAP_ID_EXP                  0x10    /* PCI Express */
  96. #define  PCI_CAP_ID_MSIX                 0x11    /* MSI-X */
  97. #define PCI_CAP_LIST_NEXT                1       /* Next capability in the list */
  98. #define PCI_CAP_FLAGS                    2       /* Capability defined flags (16 bits) */
  99. #define PCI_CAP_SIZEOF                   4
  100.  
  101.  
  102. /* AGP registers */
  103.  
  104. #define PCI_AGP_VERSION                     2   /* BCD version number */
  105. #define PCI_AGP_RFU                         3   /* Rest of capability flags */
  106. #define PCI_AGP_STATUS                      4   /* Status register */
  107. #define  PCI_AGP_STATUS_RQ_MASK        0xff000000  /* Maximum number of requests - 1 */
  108. #define  PCI_AGP_STATUS_SBA            0x0200   /* Sideband addressing supported */
  109. #define  PCI_AGP_STATUS_64BIT          0x0020   /* 64-bit addressing supported */
  110. #define  PCI_AGP_STATUS_FW             0x0010   /* FW transfers supported */
  111. #define  PCI_AGP_STATUS_RATE4          0x0004   /* 4x transfer rate supported */
  112. #define  PCI_AGP_STATUS_RATE2          0x0002   /* 2x transfer rate supported */
  113. #define  PCI_AGP_STATUS_RATE1          0x0001   /* 1x transfer rate supported */
  114. #define PCI_AGP_COMMAND                     8   /* Control register */
  115. #define  PCI_AGP_COMMAND_RQ_MASK    0xff000000  /* Master: Maximum number of requests */
  116. #define  PCI_AGP_COMMAND_SBA           0x0200   /* Sideband addressing enabled */
  117. #define  PCI_AGP_COMMAND_AGP           0x0100   /* Allow processing of AGP transactions */
  118. #define  PCI_AGP_COMMAND_64BIT         0x0020   /* Allow processing of 64-bit addresses */
  119. #define  PCI_AGP_COMMAND_FW            0x0010   /* Force FW transfers */
  120. #define  PCI_AGP_COMMAND_RATE4         0x0004   /* Use 4x rate */
  121. #define  PCI_AGP_COMMAND_RATE2         0x0002   /* Use 2x rate */
  122. #define  PCI_AGP_COMMAND_RATE1         0x0001   /* Use 1x rate */
  123. #define PCI_AGP_SIZEOF                     12
  124.  
  125.  
  126. #define PCI_MAP_REG_START   0x10
  127. #define PCI_MAP_REG_END                 0x28
  128. #define PCI_MAP_ROM_REG                 0x30
  129.  
  130. #define PCI_MAP_MEMORY                  0x00000000
  131. #define PCI_MAP_IO                      0x00000001
  132.  
  133. #define PCI_MAP_MEMORY_TYPE             0x00000007
  134. #define PCI_MAP_IO_TYPE                 0x00000003
  135.  
  136. #define PCI_MAP_MEMORY_TYPE_32BIT       0x00000000
  137. #define PCI_MAP_MEMORY_TYPE_32BIT_1M    0x00000002
  138. #define PCI_MAP_MEMORY_TYPE_64BIT       0x00000004
  139. #define PCI_MAP_MEMORY_TYPE_MASK        0x00000006
  140. #define PCI_MAP_MEMORY_CACHABLE         0x00000008
  141. #define PCI_MAP_MEMORY_ATTR_MASK        0x0000000e
  142. #define PCI_MAP_MEMORY_ADDRESS_MASK     0xfffffff0
  143.  
  144. #define PCI_MAP_IO_ATTR_MASK            0x00000003
  145.  
  146. #define PCI_MAP_IS_IO(b)  ((b) & PCI_MAP_IO)
  147. #define PCI_MAP_IS_MEM(b)       (!PCI_MAP_IS_IO(b))
  148.  
  149. #define PCI_MAP_IS64BITMEM(b)   \
  150.         (((b) & PCI_MAP_MEMORY_TYPE_MASK) == PCI_MAP_MEMORY_TYPE_64BIT)
  151.  
  152. #define PCIGETMEMORY(b)   ((b) & PCI_MAP_MEMORY_ADDRESS_MASK)
  153. #define PCIGETMEMORY64HIGH(b)   (*((CARD32*)&b + 1))
  154. #define PCIGETMEMORY64(b)       \
  155.         (PCIGETMEMORY(b) | ((CARD64)PCIGETMEMORY64HIGH(b) << 32))
  156.  
  157. #define PCI_MAP_IO_ADDRESS_MASK         0xfffffffc
  158.  
  159. #define PCIGETIO(b)             ((b) & PCI_MAP_IO_ADDRESS_MASK)
  160.  
  161. #define PCI_MAP_ROM_DECODE_ENABLE       0x00000001
  162. #define PCI_MAP_ROM_ADDRESS_MASK        0xfffff800
  163.  
  164. #define PCIGETROM(b)            ((b) & PCI_MAP_ROM_ADDRESS_MASK)
  165.  
  166. int pciGetBaseSize(int bus, int devfn, int index, Bool destructive, Bool *min);
  167. int pciGetInfo(pciVideoPtr pci);
  168.  
  169.  
  170.  
  171. #ifndef PCI_DOM_MASK
  172. # define PCI_DOM_MASK 0x0ffu
  173. #endif
  174. #define PCI_DOMBUS_MASK (((PCI_DOM_MASK) << 8) | 0x0ffu)
  175.  
  176. #define PCI_MAKE_TAG(b,d,f)  ((((b) & (PCI_DOMBUS_MASK)) << 16) | \
  177.                               (((d) & 0x00001fu) << 11) | \
  178.                               (((f) & 0x000007u) << 8))
  179.  
  180. #define PCI_BUS_FROM_TAG(tag)  (((tag) >> 16) & (PCI_DOMBUS_MASK))
  181. #define PCI_DEV_FROM_TAG(tag)  (((tag) & 0x0000f800u) >> 11)
  182. #define PCI_FUNC_FROM_TAG(tag) (((tag) & 0x00000700u) >> 8)
  183. #define PCI_DFN_FROM_TAG(tag)  (((tag) & 0x0000ff00u) >> 8)
  184.  
  185.  
  186. #define PCI_CMD_STAT_REG        0x04
  187.  
  188.  
  189. typedef unsigned int PCITAG;
  190.  
  191. extern inline PCITAG
  192. pciTag(int busnum, int devnum, int funcnum)
  193. {
  194.         return(PCI_MAKE_TAG(busnum,devnum,funcnum));
  195. }
  196.  
  197.