Home | History | Annotate | Download | only in efi
      1 #ifndef _EFI_PCI_IO_H
      2 #define _EFI_PCI_IO_H
      3 
      4 #define EFI_PCI_IO_PROTOCOL \
      5     { 0x4cf5b200, 0x68b8, 0x4ca5, {0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x02, 0x9a} }
      6 
      7 INTERFACE_DECL(_EFI_PCI_IO);
      8 
      9 typedef enum {
     10     EfiPciIoWidthUint8,
     11     EfiPciIoWidthUint16,
     12     EfiPciIoWidthUint32,
     13     EfiPciIoWidthUint64,
     14     EfiPciIoWidthFifoUint8,
     15     EfiPciIoWidthFifoUint16,
     16     EfiPciIoWidthFifoUint32,
     17     EfiPciIoWidthFifoUint64,
     18     EfiPciIoWidthFillUint8,
     19     EfiPciIoWidthFillUint16,
     20     EfiPciIoWidthFillUint32,
     21     EfiPciIoWidthFillUint64,
     22     EfiPciIoWidthMaximum
     23 } EFI_PCI_IO_PROTOCOL_WIDTH;
     24 
     25 #define EFI_PCI_IO_PASS_THROUGH_BAR 0xff
     26 
     27 typedef
     28 EFI_STATUS
     29 (EFIAPI *EFI_PCI_IO_PROTOCOL_POLL_IO_MEM) (
     30   IN struct _EFI_PCI_IO *This,
     31   IN EFI_PCI_IO_PROTOCOL_WIDTH  Width,
     32   IN UINT8                      BarIndex,
     33   IN UINT64                     Offset,
     34   IN UINT64                     Mask,
     35   IN UINT64                     Value,
     36   IN UINT64                     Delay,
     37   OUT UINT64                    *Result
     38   );
     39 
     40 typedef
     41 EFI_STATUS
     42 (EFIAPI *EFI_PCI_IO_PROTOCOL_IO_MEM) (
     43   IN struct _EFI_PCI_IO *This,
     44   IN EFI_PCI_IO_PROTOCOL_WIDTH  Width,
     45   IN UINT8                      BarIndex,
     46   IN UINT64                     Offset,
     47   IN UINTN                      Count,
     48   IN OUT VOID                   *Buffer
     49 );
     50 
     51 typedef struct {
     52   EFI_PCI_IO_PROTOCOL_IO_MEM    Read;
     53   EFI_PCI_IO_PROTOCOL_IO_MEM    Write;
     54 } EFI_PCI_IO_PROTOCOL_ACCESS;
     55 
     56 typedef
     57 EFI_STATUS
     58 (EFIAPI *EFI_PCI_IO_PROTOCOL_CONFIG) (
     59   IN struct _EFI_PCI_IO *This,
     60   IN EFI_PCI_IO_PROTOCOL_WIDTH  Width,
     61   IN UINT32                     Offset,
     62   IN UINTN                      Count,
     63   IN OUT VOID                   *Buffer
     64 );
     65 
     66 typedef struct {
     67   EFI_PCI_IO_PROTOCOL_CONFIG Read;
     68   EFI_PCI_IO_PROTOCOL_CONFIG Write;
     69 } EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS;
     70 
     71 typedef
     72 EFI_STATUS
     73 (EFIAPI *EFI_PCI_IO_PROTOCOL_COPY_MEM) (
     74   IN struct _EFI_PCI_IO *This,
     75   IN EFI_PCI_IO_PROTOCOL_WIDTH  Width,
     76   IN UINT8                      DestBarIndex,
     77   IN UINT64                     DestOffset,
     78   IN UINT8                      SrcBarIndex,
     79   IN UINT64                     SrcOffset,
     80   IN UINTN                      Count
     81   );
     82 
     83 typedef enum {
     84     EfiPciIoOperationBusMasterRead,
     85     EfiPciIoOperationBusMasterWrite,
     86     EfiPciIoOperationBusMasterCommonBuffer,
     87     EfiPciIoOperationMaximum
     88 } EFI_PCI_IO_PROTOCOL_OPERATION;
     89 
     90 typedef
     91 EFI_STATUS
     92 (EFIAPI *EFI_PCI_IO_PROTOCOL_MAP) (
     93   IN struct _EFI_PCI_IO    *This,
     94   IN EFI_PCI_IO_PROTOCOL_OPERATION Operation,
     95   IN VOID                          *HostAddress,
     96   IN OUT UINTN                     *NumberOfBytes,
     97   OUT EFI_PHYSICAL_ADDRESS         *DeviceAddress,
     98   OUT VOID                         **Mapping
     99   );
    100 
    101 typedef
    102 EFI_STATUS
    103 (EFIAPI *EFI_PCI_IO_PROTOCOL_UNMAP) (
    104   IN struct _EFI_PCI_IO *This,
    105   IN VOID                       *Mapping
    106 );
    107 
    108 typedef
    109 EFI_STATUS
    110 (EFIAPI *EFI_PCI_IO_PROTOCOL_ALLOCATE_BUFFER) (
    111   IN struct _EFI_PCI_IO *This,
    112   IN EFI_ALLOCATE_TYPE          Type,
    113   IN EFI_MEMORY_TYPE            MemoryType,
    114   IN UINTN                      Pages,
    115   OUT VOID                      **HostAddress,
    116   IN UINT64                     Attributes
    117   );
    118 
    119 typedef
    120 EFI_STATUS
    121 (EFIAPI *EFI_PCI_IO_PROTOCOL_FREE_BUFFER) (
    122   IN struct _EFI_PCI_IO *This,
    123   IN UINTN                      Pages,
    124   IN VOID                       *HostAddress
    125   );
    126 
    127 typedef
    128 EFI_STATUS
    129 (EFIAPI *EFI_PCI_IO_PROTOCOL_FLUSH) (
    130   IN struct _EFI_PCI_IO *This
    131   );
    132 
    133 typedef
    134 EFI_STATUS
    135 (EFIAPI *EFI_PCI_IO_PROTOCOL_GET_LOCATION) (
    136   IN struct _EFI_PCI_IO *This,
    137   OUT UINTN                     *SegmentNumber,
    138   OUT UINTN                     *BusNumber,
    139   OUT UINTN                     *DeviceNumber,
    140   OUT UINTN                     *FunctionNumber
    141   );
    142 
    143 #define EFI_PCI_IO_ATTRIBUTE_ISA_IO               0x0002
    144 #define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO       0x0004
    145 #define EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY           0x0008
    146 #define EFI_PCI_IO_ATTRIBUTE_VGA_IO               0x0010
    147 #define EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO       0x0020
    148 #define EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO     0x0040
    149 #define EFI_PCI_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080
    150 #define EFI_PCI_IO_ATTRIBUTE_IO                   0x0100
    151 #define EFI_PCI_IO_ATTRIBUTE_MEMORY               0x0200
    152 #define EFI_PCI_IO_ATTRIBUTE_BUS_MASTER           0x0400
    153 #define EFI_PCI_IO_ATTRIBUTE_MEMORY_CACHED        0x0800
    154 #define EFI_PCI_IO_ATTRIBUTE_MEMORY_DISABLE       0x1000
    155 #define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE      0x2000
    156 #define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM         0x4000
    157 #define EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE   0x8000
    158 #define EFI_PCI_IO_ATTRIBUTE_ISA_IO_16            0x10000
    159 #define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16    0x20000
    160 #define EFI_PCI_IO_ATTRIBUTE_VGA_IO_16            0x40000
    161 
    162 typedef enum {
    163     EfiPciIoAttributeOperationGet,
    164     EfiPciIoAttributeOperationSet,
    165     EfiPciIoAttributeOperationEnable,
    166     EfiPciIoAttributeOperationDisable,
    167     EfiPciIoAttributeOperationSupported,
    168     EfiPciIoAttributeOperationMaximum
    169 } EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION;
    170 
    171 typedef
    172 EFI_STATUS
    173 (EFIAPI *EFI_PCI_IO_PROTOCOL_ATTRIBUTES) (
    174   IN struct _EFI_PCI_IO             *This,
    175   IN EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION Operation,
    176   IN UINT64                                  Attributes,
    177   OUT UINT64                                 *Result OPTIONAL
    178   );
    179 
    180 typedef
    181 EFI_STATUS
    182 (EFIAPI *EFI_PCI_IO_PROTOCOL_GET_BAR_ATTRIBUTES) (
    183   IN struct _EFI_PCI_IO *This,
    184   IN UINT8                      BarIndex,
    185   OUT UINT64                    *Supports OPTIONAL,
    186   OUT VOID                      **Resources OPTIONAL
    187   );
    188 
    189 typedef
    190 EFI_STATUS
    191 (EFIAPI *EFI_PCI_IO_PROTOCOL_SET_BAR_ATTRIBUTES) (
    192   IN struct _EFI_PCI_IO *This,
    193   IN UINT64                     Attributes,
    194   IN UINT8                      BarIndex,
    195   IN OUT UINT64                 *Offset,
    196   IN OUT UINT64                 *Length
    197   );
    198 
    199 typedef struct _EFI_PCI_IO {
    200   EFI_PCI_IO_PROTOCOL_POLL_IO_MEM        PollMem;
    201   EFI_PCI_IO_PROTOCOL_POLL_IO_MEM        PollIo;
    202   EFI_PCI_IO_PROTOCOL_ACCESS             Mem;
    203   EFI_PCI_IO_PROTOCOL_ACCESS             Io;
    204   EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS      Pci;
    205   EFI_PCI_IO_PROTOCOL_COPY_MEM           CopyMem;
    206   EFI_PCI_IO_PROTOCOL_MAP                Map;
    207   EFI_PCI_IO_PROTOCOL_UNMAP              Unmap;
    208   EFI_PCI_IO_PROTOCOL_ALLOCATE_BUFFER    AllocateBuffer;
    209   EFI_PCI_IO_PROTOCOL_FREE_BUFFER        FreeBuffer;
    210   EFI_PCI_IO_PROTOCOL_FLUSH              Flush;
    211   EFI_PCI_IO_PROTOCOL_GET_LOCATION       GetLocation;
    212   EFI_PCI_IO_PROTOCOL_ATTRIBUTES         Attributes;
    213   EFI_PCI_IO_PROTOCOL_GET_BAR_ATTRIBUTES GetBarAttributes;
    214   EFI_PCI_IO_PROTOCOL_SET_BAR_ATTRIBUTES SetBarAttributes;
    215   UINT64                                 RomSize;
    216   VOID                                   *RomImage;
    217 } EFI_PCI_IO;
    218 
    219 #endif /* _EFI_PCI_IO_H */
    220