xref: /netbsd-src/sys/external/bsd/gnu-efi/dist/inc/efipciio.h (revision b7b7574d3bf8eeb51a1fa3977b59142ec6434a55)
1 /*	$NetBSD: efipciio.h,v 1.1.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