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