efipciio.h 6.6 KB

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