VirtioPciDevice.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. /** @file
  2. Internal definitions for the VirtIo PCI Device driver
  3. Copyright (C) 2013, ARM Ltd
  4. Copyright (c) 2017, AMD Inc, All rights reserved.<BR>
  5. SPDX-License-Identifier: BSD-2-Clause-Patent
  6. **/
  7. #ifndef _VIRTIO_PCI_DEVICE_DXE_H_
  8. #define _VIRTIO_PCI_DEVICE_DXE_H_
  9. #include <Protocol/ComponentName.h>
  10. #include <Protocol/DriverBinding.h>
  11. #include <Protocol/PciIo.h>
  12. #include <Protocol/VirtioDevice.h>
  13. #include <IndustryStandard/Virtio.h>
  14. #define VIRTIO_PCI_DEVICE_SIGNATURE SIGNATURE_32 ('V', 'P', 'C', 'I')
  15. typedef struct {
  16. UINT32 Signature;
  17. VIRTIO_DEVICE_PROTOCOL VirtioDevice;
  18. EFI_PCI_IO_PROTOCOL *PciIo;
  19. UINT64 OriginalPciAttributes;
  20. UINT32 DeviceSpecificConfigurationOffset;
  21. } VIRTIO_PCI_DEVICE;
  22. #define VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE(Device) \
  23. CR (Device, VIRTIO_PCI_DEVICE, VirtioDevice, VIRTIO_PCI_DEVICE_SIGNATURE)
  24. EFI_STATUS
  25. EFIAPI
  26. VirtioPciIoRead (
  27. IN VIRTIO_PCI_DEVICE *Dev,
  28. IN UINTN FieldOffset,
  29. IN UINTN FieldSize,
  30. IN UINTN BufferSize,
  31. OUT VOID *Buffer
  32. );
  33. EFI_STATUS
  34. EFIAPI
  35. VirtioPciIoWrite (
  36. IN VIRTIO_PCI_DEVICE *Dev,
  37. IN UINTN FieldOffset,
  38. IN UINTN FieldSize,
  39. IN UINT64 Value
  40. );
  41. /********************************************
  42. * PCI Functions for VIRTIO_DEVICE_PROTOCOL
  43. *******************************************/
  44. EFI_STATUS
  45. EFIAPI
  46. VirtioPciDeviceRead (
  47. IN VIRTIO_DEVICE_PROTOCOL *This,
  48. IN UINTN FieldOffset,
  49. IN UINTN FieldSize,
  50. IN UINTN BufferSize,
  51. OUT VOID *Buffer
  52. );
  53. EFI_STATUS
  54. EFIAPI
  55. VirtioPciDeviceWrite (
  56. IN VIRTIO_DEVICE_PROTOCOL *This,
  57. IN UINTN FieldOffset,
  58. IN UINTN FieldSize,
  59. IN UINT64 Value
  60. );
  61. EFI_STATUS
  62. EFIAPI
  63. VirtioPciGetDeviceFeatures (
  64. IN VIRTIO_DEVICE_PROTOCOL *This,
  65. OUT UINT64 *DeviceFeatures
  66. );
  67. EFI_STATUS
  68. EFIAPI
  69. VirtioPciGetQueueSize (
  70. IN VIRTIO_DEVICE_PROTOCOL *This,
  71. OUT UINT16 *QueueNumMax
  72. );
  73. EFI_STATUS
  74. EFIAPI
  75. VirtioPciSetQueueAlignment (
  76. IN VIRTIO_DEVICE_PROTOCOL *This,
  77. IN UINT32 Alignment
  78. );
  79. EFI_STATUS
  80. EFIAPI
  81. VirtioPciSetPageSize (
  82. IN VIRTIO_DEVICE_PROTOCOL *This,
  83. IN UINT32 PageSize
  84. );
  85. EFI_STATUS
  86. EFIAPI
  87. VirtioPciGetDeviceStatus (
  88. IN VIRTIO_DEVICE_PROTOCOL *This,
  89. OUT UINT8 *DeviceStatus
  90. );
  91. EFI_STATUS
  92. EFIAPI
  93. VirtioPciSetGuestFeatures (
  94. IN VIRTIO_DEVICE_PROTOCOL *This,
  95. IN UINT64 Features
  96. );
  97. EFI_STATUS
  98. EFIAPI
  99. VirtioPciSetQueueAddress (
  100. IN VIRTIO_DEVICE_PROTOCOL *This,
  101. IN VRING *Ring,
  102. IN UINT64 RingBaseShift
  103. );
  104. EFI_STATUS
  105. EFIAPI
  106. VirtioPciSetQueueSel (
  107. IN VIRTIO_DEVICE_PROTOCOL *This,
  108. IN UINT16 Sel
  109. );
  110. EFI_STATUS
  111. EFIAPI
  112. VirtioPciSetQueueNotify (
  113. IN VIRTIO_DEVICE_PROTOCOL *This,
  114. IN UINT16 Index
  115. );
  116. EFI_STATUS
  117. EFIAPI
  118. VirtioPciSetQueueSize (
  119. IN VIRTIO_DEVICE_PROTOCOL *This,
  120. IN UINT16 Size
  121. );
  122. EFI_STATUS
  123. EFIAPI
  124. VirtioPciSetDeviceStatus (
  125. IN VIRTIO_DEVICE_PROTOCOL *This,
  126. IN UINT8 DeviceStatus
  127. );
  128. EFI_STATUS
  129. EFIAPI
  130. VirtioPciAllocateSharedPages (
  131. IN VIRTIO_DEVICE_PROTOCOL *This,
  132. IN UINTN NumPages,
  133. OUT VOID **HostAddress
  134. );
  135. VOID
  136. EFIAPI
  137. VirtioPciFreeSharedPages (
  138. IN VIRTIO_DEVICE_PROTOCOL *This,
  139. IN UINTN NumPages,
  140. IN VOID *HostAddress
  141. );
  142. EFI_STATUS
  143. EFIAPI
  144. VirtioPciMapSharedBuffer (
  145. IN VIRTIO_DEVICE_PROTOCOL *This,
  146. IN VIRTIO_MAP_OPERATION Operation,
  147. IN VOID *HostAddress,
  148. IN OUT UINTN *NumberOfBytes,
  149. OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
  150. OUT VOID **Mapping
  151. );
  152. EFI_STATUS
  153. EFIAPI
  154. VirtioPciUnmapSharedBuffer (
  155. IN VIRTIO_DEVICE_PROTOCOL *This,
  156. IN VOID *Mapping
  157. );
  158. #endif // _VIRTIO_PCI_DEVICE_DXE_H_