]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h
OvmfPkg/VirtioPciDeviceDxe: Implement VIRTIO_DEVICE_PROTOCOL for VirtIo Devices over PCI
[mirror_edk2.git] / OvmfPkg / VirtioPciDeviceDxe / VirtioPciDevice.h
diff --git a/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h b/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h
new file mode 100644 (file)
index 0000000..6311ae8
--- /dev/null
@@ -0,0 +1,166 @@
+/** @file\r
+\r
+  Internal definitions for the VirtIo PCI Device driver\r
+\r
+  Copyright (C) 2013, ARM Ltd\r
+\r
+  This program and the accompanying materials are licensed and made available\r
+  under the terms and conditions of the BSD License which accompanies this\r
+  distribution. The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
+  WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef _VIRTIO_PCI_DEVICE_DXE_H_\r
+#define _VIRTIO_PCI_DEVICE_DXE_H_\r
+\r
+#include <Protocol/ComponentName.h>\r
+#include <Protocol/DriverBinding.h>\r
+#include <Protocol/PciIo.h>\r
+#include <Protocol/VirtioDevice.h>\r
+\r
+#include <IndustryStandard/Virtio.h>\r
+\r
+#define VIRTIO_PCI_DEVICE_SIGNATURE   SIGNATURE_32 ('V', 'P', 'C', 'I')\r
+\r
+typedef struct {\r
+  UINT32                 Signature;\r
+  VIRTIO_DEVICE_PROTOCOL VirtioDevice;\r
+  EFI_PCI_IO_PROTOCOL   *PciIo;\r
+  UINT64                 OriginalPciAttributes;\r
+  UINT32                 DeviceSpecificConfigurationOffset;\r
+} VIRTIO_PCI_DEVICE;\r
+\r
+#define VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE(Device) \\r
+    CR (Device, VIRTIO_PCI_DEVICE, VirtioDevice, VIRTIO_PCI_DEVICE_SIGNATURE)\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciIoRead (\r
+  IN  VIRTIO_PCI_DEVICE         *Dev,\r
+  IN  UINTN                      FieldOffset,\r
+  IN  UINTN                      FieldSize,\r
+  IN  UINTN                      BufferSize,\r
+  OUT VOID                       *Buffer\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciIoWrite (\r
+  IN  VIRTIO_PCI_DEVICE         *Dev,\r
+  IN UINTN                       FieldOffset,\r
+  IN UINTN                       FieldSize,\r
+  IN UINT64                      Value\r
+  );\r
+\r
+/********************************************\r
+ * PCI Functions for VIRTIO_DEVICE_PROTOCOL\r
+ *******************************************/\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciDeviceRead (\r
+  IN  VIRTIO_DEVICE_PROTOCOL     *This,\r
+  IN  UINTN                      FieldOffset,\r
+  IN  UINTN                      FieldSize,\r
+  IN  UINTN                      BufferSize,\r
+  OUT VOID                       *Buffer\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciDeviceWrite (\r
+  IN VIRTIO_DEVICE_PROTOCOL      *This,\r
+  IN UINTN                       FieldOffset,\r
+  IN UINTN                       FieldSize,\r
+  IN UINT64                      Value\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciGetDeviceFeatures (\r
+  IN VIRTIO_DEVICE_PROTOCOL *This,\r
+  OUT UINT32                *DeviceFeatures\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciGetQueueAddress (\r
+  IN  VIRTIO_DEVICE_PROTOCOL *This,\r
+  OUT UINT32                 *QueueAddress\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciGetQueueSize (\r
+  IN  VIRTIO_DEVICE_PROTOCOL  *This,\r
+  OUT UINT16                  *QueueNumMax\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciSetQueueAlignment (\r
+  VIRTIO_DEVICE_PROTOCOL         *This,\r
+  UINT32                         Alignment\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciSetPageSize (\r
+  VIRTIO_DEVICE_PROTOCOL         *This,\r
+  UINT32                         PageSize\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciGetDeviceStatus (\r
+  IN  VIRTIO_DEVICE_PROTOCOL  *This,\r
+  OUT UINT8                   *DeviceStatus\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciSetGuestFeatures (\r
+  IN VIRTIO_DEVICE_PROTOCOL  *This,\r
+  IN UINT32                   Features\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciSetQueueAddress (\r
+  VIRTIO_DEVICE_PROTOCOL         *This,\r
+  UINT32                         Address\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciSetQueueSel (\r
+  VIRTIO_DEVICE_PROTOCOL         *This,\r
+  UINT16                         Sel\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciSetQueueNotify (\r
+  VIRTIO_DEVICE_PROTOCOL         *This,\r
+  UINT16                         Index\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciSetQueueSize (\r
+  VIRTIO_DEVICE_PROTOCOL         *This,\r
+  UINT16                         Size\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioPciSetDeviceStatus (\r
+  VIRTIO_DEVICE_PROTOCOL         *This,\r
+  UINT8                          DeviceStatus\r
+  );\r
+\r
+#endif // _VIRTIO_PCI_DEVICE_DXE_H_\r