Home | History | Annotate | Line # | Download | only in inc
      1  1.1  jakllsch /*	$NetBSD: pci22.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $	*/
      2  1.1  jakllsch 
      3  1.1  jakllsch #ifndef _PCI22_H
      4  1.1  jakllsch #define _PCI22_H
      5  1.1  jakllsch 
      6  1.1  jakllsch /*++
      7  1.1  jakllsch 
      8  1.1  jakllsch Copyright (c) 1999  Intel Corporation
      9  1.1  jakllsch 
     10  1.1  jakllsch Module Name:
     11  1.1  jakllsch 
     12  1.1  jakllsch     pci22.h
     13  1.1  jakllsch 
     14  1.1  jakllsch Abstract:
     15  1.1  jakllsch     Support for PCI 2.2 standard.
     16  1.1  jakllsch 
     17  1.1  jakllsch 
     18  1.1  jakllsch 
     19  1.1  jakllsch 
     20  1.1  jakllsch Revision History
     21  1.1  jakllsch 
     22  1.1  jakllsch --*/
     23  1.1  jakllsch 
     24  1.1  jakllsch #ifdef SOFT_SDV
     25  1.1  jakllsch #define PCI_MAX_BUS     1
     26  1.1  jakllsch #else
     27  1.1  jakllsch #define PCI_MAX_BUS     255
     28  1.1  jakllsch #endif
     29  1.1  jakllsch 
     30  1.1  jakllsch #define PCI_MAX_DEVICE  31
     31  1.1  jakllsch #define PCI_MAX_FUNC    7
     32  1.1  jakllsch 
     33  1.1  jakllsch //
     34  1.1  jakllsch // Command
     35  1.1  jakllsch //
     36  1.1  jakllsch #define PCI_VGA_PALETTE_SNOOP_DISABLED   0x20
     37  1.1  jakllsch 
     38  1.1  jakllsch #pragma pack(1)
     39  1.1  jakllsch typedef struct {
     40  1.1  jakllsch     UINT16      VendorId;
     41  1.1  jakllsch     UINT16      DeviceId;
     42  1.1  jakllsch     UINT16      Command;
     43  1.1  jakllsch     UINT16      Status;
     44  1.1  jakllsch     UINT8       RevisionID;
     45  1.1  jakllsch     UINT8       ClassCode[3];
     46  1.1  jakllsch     UINT8       CacheLineSize;
     47  1.1  jakllsch     UINT8       LaytencyTimer;
     48  1.1  jakllsch     UINT8       HeaderType;
     49  1.1  jakllsch     UINT8       BIST;
     50  1.1  jakllsch } PCI_DEVICE_INDEPENDENT_REGION;
     51  1.1  jakllsch 
     52  1.1  jakllsch typedef struct {
     53  1.1  jakllsch     UINT32      Bar[6];
     54  1.1  jakllsch     UINT32      CISPtr;
     55  1.1  jakllsch     UINT16      SubsystemVendorID;
     56  1.1  jakllsch     UINT16      SubsystemID;
     57  1.1  jakllsch     UINT32      ExpansionRomBar;
     58  1.1  jakllsch     UINT32      Reserved[2];
     59  1.1  jakllsch     UINT8       InterruptLine;
     60  1.1  jakllsch     UINT8       InterruptPin;
     61  1.1  jakllsch     UINT8       MinGnt;
     62  1.1  jakllsch     UINT8       MaxLat;
     63  1.1  jakllsch } PCI_DEVICE_HEADER_TYPE_REGION;
     64  1.1  jakllsch 
     65  1.1  jakllsch typedef struct {
     66  1.1  jakllsch     PCI_DEVICE_INDEPENDENT_REGION   Hdr;
     67  1.1  jakllsch     PCI_DEVICE_HEADER_TYPE_REGION   Device;
     68  1.1  jakllsch } PCI_TYPE00;
     69  1.1  jakllsch 
     70  1.1  jakllsch typedef struct {
     71  1.1  jakllsch     UINT32      Bar[2];
     72  1.1  jakllsch     UINT8       PrimaryBus;
     73  1.1  jakllsch     UINT8       SecondaryBus;
     74  1.1  jakllsch     UINT8       SubordinateBus;
     75  1.1  jakllsch     UINT8       SecondaryLatencyTimer;
     76  1.1  jakllsch     UINT8       IoBase;
     77  1.1  jakllsch     UINT8       IoLimit;
     78  1.1  jakllsch     UINT16      SecondaryStatus;
     79  1.1  jakllsch     UINT16      MemoryBase;
     80  1.1  jakllsch     UINT16      MemoryLimit;
     81  1.1  jakllsch     UINT16      PrefetchableMemoryBase;
     82  1.1  jakllsch     UINT16      PrefetchableMemoryLimit;
     83  1.1  jakllsch     UINT32      PrefetchableBaseUpper32;
     84  1.1  jakllsch     UINT32      PrefetchableLimitUpper32;
     85  1.1  jakllsch     UINT16      IoBaseUpper16;
     86  1.1  jakllsch     UINT16      IoLimitUpper16;
     87  1.1  jakllsch     UINT32      Reserved;
     88  1.1  jakllsch     UINT32      ExpansionRomBAR;
     89  1.1  jakllsch     UINT8       InterruptLine;
     90  1.1  jakllsch     UINT8       InterruptPin;
     91  1.1  jakllsch     UINT16      BridgeControl;
     92  1.1  jakllsch } PCI_BRIDGE_CONTROL_REGISTER;
     93  1.1  jakllsch 
     94  1.1  jakllsch #define PCI_CLASS_DISPLAY_CTRL          0x03
     95  1.1  jakllsch #define PCI_CLASS_VGA                   0x00
     96  1.1  jakllsch 
     97  1.1  jakllsch #define PCI_CLASS_BRIDGE                0x06
     98  1.1  jakllsch #define PCI_CLASS_ISA                   0x01
     99  1.1  jakllsch #define PCI_CLASS_ISA_POSITIVE_DECODE   0x80
    100  1.1  jakllsch 
    101  1.1  jakllsch #define PCI_CLASS_NETWORK               0x02
    102  1.1  jakllsch #define PCI_CLASS_ETHERNET              0x00
    103  1.1  jakllsch 
    104  1.1  jakllsch #define HEADER_TYPE_DEVICE              0x00
    105  1.1  jakllsch #define HEADER_TYPE_PCI_TO_PCI_BRIDGE   0x01
    106  1.1  jakllsch #define HEADER_TYPE_MULTI_FUNCTION      0x80
    107  1.1  jakllsch #define HEADER_LAYOUT_CODE              0x7f
    108  1.1  jakllsch 
    109  1.1  jakllsch #define IS_PCI_BRIDGE(_p) ((((_p)->Hdr.HeaderType) & HEADER_LAYOUT_CODE) == HEADER_TYPE_PCI_TO_PCI_BRIDGE)
    110  1.1  jakllsch #define IS_PCI_MULTI_FUNC(_p)   (((_p)->Hdr.HeaderType) & HEADER_TYPE_MULTI_FUNCTION)
    111  1.1  jakllsch 
    112  1.1  jakllsch typedef struct {
    113  1.1  jakllsch     PCI_DEVICE_INDEPENDENT_REGION   Hdr;
    114  1.1  jakllsch     PCI_BRIDGE_CONTROL_REGISTER     Bridge;
    115  1.1  jakllsch } PCI_TYPE01;
    116  1.1  jakllsch 
    117  1.1  jakllsch typedef struct {
    118  1.1  jakllsch     UINT8   Register;
    119  1.1  jakllsch     UINT8   Function;
    120  1.1  jakllsch     UINT8   Device;
    121  1.1  jakllsch     UINT8   Bus;
    122  1.1  jakllsch     UINT8   Reserved[4];
    123  1.1  jakllsch } DEFIO_PCI_ADDR;
    124  1.1  jakllsch 
    125  1.1  jakllsch typedef struct {
    126  1.1  jakllsch     UINT32  Reg     : 8;
    127  1.1  jakllsch     UINT32  Func    : 3;
    128  1.1  jakllsch     UINT32  Dev     : 5;
    129  1.1  jakllsch     UINT32  Bus     : 8;
    130  1.1  jakllsch     UINT32  Reserved: 7;
    131  1.1  jakllsch     UINT32  Enable  : 1;
    132  1.1  jakllsch } PCI_CONFIG_ACCESS_CF8;
    133  1.1  jakllsch 
    134  1.1  jakllsch #pragma pack()
    135  1.1  jakllsch 
    136  1.1  jakllsch #define EFI_ROOT_BRIDGE_LIST    'eprb'
    137  1.1  jakllsch typedef struct {
    138  1.1  jakllsch     UINTN           Signature;
    139  1.1  jakllsch 
    140  1.1  jakllsch     UINT16          BridgeNumber;
    141  1.1  jakllsch     UINT16          PrimaryBus;
    142  1.1  jakllsch     UINT16          SubordinateBus;
    143  1.1  jakllsch 
    144  1.1  jakllsch     EFI_DEVICE_PATH *DevicePath;
    145  1.1  jakllsch 
    146  1.1  jakllsch     LIST_ENTRY      Link;
    147  1.1  jakllsch } PCI_ROOT_BRIDGE_ENTRY;
    148  1.1  jakllsch 
    149  1.1  jakllsch 
    150  1.1  jakllsch #define PCI_EXPANSION_ROM_HEADER_SIGNATURE        0xaa55
    151  1.1  jakllsch #define EFI_PCI_EXPANSION_ROM_HEADER_EFISIGNATURE 0x0EF1
    152  1.1  jakllsch #define PCI_DATA_STRUCTURE_SIGNATURE              EFI_SIGNATURE_32('P','C','I','R')
    153  1.1  jakllsch 
    154  1.1  jakllsch #pragma pack(1)
    155  1.1  jakllsch typedef struct {
    156  1.1  jakllsch     UINT16          Signature;              // 0xaa55
    157  1.1  jakllsch     UINT8           Reserved[0x16];
    158  1.1  jakllsch     UINT16          PcirOffset;
    159  1.1  jakllsch } PCI_EXPANSION_ROM_HEADER;
    160  1.1  jakllsch 
    161  1.1  jakllsch 
    162  1.1  jakllsch typedef struct {
    163  1.1  jakllsch     UINT16          Signature;              // 0xaa55
    164  1.1  jakllsch     UINT16          InitializationSize;
    165  1.1  jakllsch     UINT16          EfiSignature;           // 0x0EF1
    166  1.1  jakllsch     UINT16          EfiSubsystem;
    167  1.1  jakllsch     UINT16          EfiMachineType;
    168  1.1  jakllsch     UINT8           Reserved[0x0A];
    169  1.1  jakllsch     UINT16          EfiImageHeaderOffset;
    170  1.1  jakllsch     UINT16          PcirOffset;
    171  1.1  jakllsch } EFI_PCI_EXPANSION_ROM_HEADER;
    172  1.1  jakllsch 
    173  1.1  jakllsch typedef struct {
    174  1.1  jakllsch     UINT32          Signature;              // "PCIR"
    175  1.1  jakllsch     UINT16          VendorId;
    176  1.1  jakllsch     UINT16          DeviceId;
    177  1.1  jakllsch     UINT16          Reserved0;
    178  1.1  jakllsch     UINT16          Length;
    179  1.1  jakllsch     UINT8           Revision;
    180  1.1  jakllsch     UINT8           ClassCode[3];
    181  1.1  jakllsch     UINT16          ImageLength;
    182  1.1  jakllsch     UINT16          CodeRevision;
    183  1.1  jakllsch     UINT8           CodeType;
    184  1.1  jakllsch     UINT8           Indicator;
    185  1.1  jakllsch     UINT16          Reserved1;
    186  1.1  jakllsch } PCI_DATA_STRUCTURE;
    187  1.1  jakllsch #pragma pack()
    188  1.1  jakllsch 
    189  1.1  jakllsch #endif
    190  1.1  jakllsch 
    191  1.1  jakllsch 
    192  1.1  jakllsch 
    193  1.1  jakllsch 
    194  1.1  jakllsch 
    195  1.1  jakllsch 
    196