]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Include/Library/VirtioLib.h
OvmfPkg/VirtioLib: add VirtioMapAllBytesInSharedBuffer() helper function
[mirror_edk2.git] / OvmfPkg / Include / Library / VirtioLib.h
index 36527a523f28814b4e0ce0c0b5f53f12ca7da3d9..660ea2767781b940126f8ad022deb0200d13f040 100644 (file)
@@ -2,7 +2,8 @@
 \r
   Declarations of utility functions used by virtio device drivers.\r
 \r
-  Copyright (C) 2012, Red Hat, Inc.\r
+  Copyright (C) 2012-2016, Red Hat, Inc.\r
+  Copyright (C) 2017, AMD Inc, All rights reserved.<BR>\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
@@ -167,6 +168,12 @@ VirtioAppendDesc (
                           Indices->HeadDescIdx identifies the head descriptor\r
                           of the descriptor chain.\r
 \r
+  @param[out] UsedLen     On success, the total number of bytes, consecutively\r
+                          across the buffers linked by the descriptor chain,\r
+                          that the host wrote. May be NULL if the caller\r
+                          doesn't care, or can compute the same information\r
+                          from device-specific request structures linked by the\r
+                          descriptor chain.\r
 \r
   @return              Error code from VirtIo->SetQueueNotify() if it fails.\r
 \r
@@ -179,7 +186,105 @@ VirtioFlush (
   IN     VIRTIO_DEVICE_PROTOCOL *VirtIo,\r
   IN     UINT16                 VirtQueueId,\r
   IN OUT VRING                  *Ring,\r
-  IN     DESC_INDICES           *Indices\r
+  IN     DESC_INDICES           *Indices,\r
+  OUT    UINT32                 *UsedLen    OPTIONAL\r
   );\r
 \r
+\r
+/**\r
+\r
+  Report the feature bits to the VirtIo 1.0 device that the VirtIo 1.0 driver\r
+  understands.\r
+\r
+  In VirtIo 1.0, a device can reject a self-inconsistent feature bitmap through\r
+  the new VSTAT_FEATURES_OK status bit. (For example if the driver requests a\r
+  higher level feature but clears a prerequisite feature.) This function is a\r
+  small wrapper around VIRTIO_DEVICE_PROTOCOL.SetGuestFeatures() that also\r
+  verifies if the VirtIo 1.0 device accepts the feature bitmap.\r
+\r
+  @param[in]     VirtIo        Report feature bits to this device.\r
+\r
+  @param[in]     Features      The set of feature bits that the driver wishes\r
+                               to report. The caller is responsible to perform\r
+                               any masking before calling this function; the\r
+                               value is directly written with\r
+                               VIRTIO_DEVICE_PROTOCOL.SetGuestFeatures().\r
+\r
+  @param[in,out] DeviceStatus  On input, the status byte most recently written\r
+                               to the device's status register. On output (even\r
+                               on error), DeviceStatus will be updated so that\r
+                               it is suitable for further status bit\r
+                               manipulation and writing to the device's status\r
+                               register.\r
+\r
+  @retval  EFI_SUCCESS      The device accepted the configuration in Features.\r
+\r
+  @return  EFI_UNSUPPORTED  The device rejected the configuration in Features.\r
+\r
+  @retval  EFI_UNSUPPORTED  VirtIo->Revision is smaller than 1.0.0.\r
+\r
+  @return                   Error codes from the SetGuestFeatures(),\r
+                            SetDeviceStatus(), GetDeviceStatus() member\r
+                            functions.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+Virtio10WriteFeatures (\r
+  IN     VIRTIO_DEVICE_PROTOCOL *VirtIo,\r
+  IN     UINT64                 Features,\r
+  IN OUT UINT8                  *DeviceStatus\r
+  );\r
+\r
+/**\r
+  Provides the virtio device address required to access system memory from a\r
+  DMA bus master.\r
+\r
+  The interface follows the same usage pattern as defined in UEFI spec 2.6\r
+  (Section 13.2 PCI Root Bridge I/O Protocol)\r
+\r
+  The VirtioMapAllBytesInSharedBuffer() is similar to VIRTIO_MAP_SHARED\r
+  with exception that NumberOfBytes is IN-only parameter. The function\r
+  maps all the bytes specified in NumberOfBytes param in one consecutive\r
+  range.\r
+\r
+  @param[in]     VirtIo           The virtio device for which the mapping is\r
+                                  requested.\r
+\r
+  @param[in]     Operation        Indicates if the bus master is going to\r
+                                  read or write to system memory.\r
+\r
+  @param[in]     HostAddress      The system memory address to map to shared\r
+                                  buffer address.\r
+\r
+  @param[in]     NumberOfBytes    Number of bytes to map.\r
+\r
+  @param[out]    DeviceAddress    The resulting shared map address for the\r
+                                  bus master to access the hosts HostAddress.\r
+\r
+  @param[out]    Mapping          A resulting token to pass to\r
+                                  VIRTIO_UNMAP_SHARED.\r
+\r
+\r
+  @retval EFI_SUCCESS             The NumberOfBytes is succesfully mapped.\r
+  @retval EFI_UNSUPPORTED         The HostAddress cannot be mapped as a\r
+                                  common buffer.\r
+  @retval EFI_INVALID_PARAMETER   One or more parameters are invalid.\r
+  @retval EFI_OUT_OF_RESOURCES    The request could not be completed due to\r
+                                  a lack of resources. This includes the case\r
+                                  when NumberOfBytes bytes cannot be mapped\r
+                                  in one consecutive range.\r
+  @retval EFI_DEVICE_ERROR        The system hardware could not map the\r
+                                  requested address.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioMapAllBytesInSharedBuffer (\r
+  IN  VIRTIO_DEVICE_PROTOCOL  *VirtIo,\r
+  IN  VIRTIO_MAP_OPERATION    Operation,\r
+  IN  VOID                    *HostAddress,\r
+  IN  UINTN                   NumberOfBytes,\r
+  OUT EFI_PHYSICAL_ADDRESS    *DeviceAddress,\r
+  OUT VOID                    **Mapping\r
+  );\r
 #endif // _VIRTIO_LIB_H_\r