mirror of https://github.com/acidanthera/audk.git
OvmfPkg/VirtioMmioDeviceLib: implement IOMMU-like member functions
The patch implements the newly added IOMMU-like member functions by respectively delegating the job to: - VIRTIO_DEVICE_PROTOCOL.AllocateSharedPages () -> MemoryAllocationLib.AllocatePages() - VIRTIO_DEVICE_PROTOCOL.FreeSharedPages () -> MemoryAllocationLib.FreePages () - VIRTIO_DEVICE_PROTOCOL.MapSharedBuffer () -> no-op - VIRTIO_DEVICE_PROTOCOL.UnmapSharedBuffer () -> no-op Suggested-by: Laszlo Ersek <lersek@redhat.com> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Tom Lendacky <thomas.lendacky@amd.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Brijesh Singh <brijesh.singh@amd.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Regression-tested-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
4157b8416a
commit
084cfc1a35
|
@ -3,6 +3,7 @@
|
||||||
This driver produces Virtio Device Protocol instances for Virtio Mmio devices.
|
This driver produces Virtio Device Protocol instances for Virtio Mmio devices.
|
||||||
|
|
||||||
Copyright (C) 2013, ARM Ltd.
|
Copyright (C) 2013, ARM Ltd.
|
||||||
|
Copyright (C) 2017, AMD Inc. All rights reserved.<BR>
|
||||||
|
|
||||||
This program and the accompanying materials are licensed and made available
|
This program and the accompanying materials are licensed and made available
|
||||||
under the terms and conditions of the BSD License which accompanies this
|
under the terms and conditions of the BSD License which accompanies this
|
||||||
|
@ -15,7 +16,6 @@
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include <Library/BaseMemoryLib.h>
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <Library/MemoryAllocationLib.h>
|
|
||||||
#include <Library/UefiBootServicesTableLib.h>
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
|
|
||||||
#include "VirtioMmioDevice.h"
|
#include "VirtioMmioDevice.h"
|
||||||
|
@ -35,7 +35,11 @@ static VIRTIO_DEVICE_PROTOCOL mMmioDeviceProtocolTemplate = {
|
||||||
VirtioMmioGetDeviceStatus, // GetDeviceStatus
|
VirtioMmioGetDeviceStatus, // GetDeviceStatus
|
||||||
VirtioMmioSetDeviceStatus, // SetDeviceStatus
|
VirtioMmioSetDeviceStatus, // SetDeviceStatus
|
||||||
VirtioMmioDeviceWrite, // WriteDevice
|
VirtioMmioDeviceWrite, // WriteDevice
|
||||||
VirtioMmioDeviceRead // ReadDevice
|
VirtioMmioDeviceRead, // ReadDevice
|
||||||
|
VirtioMmioAllocateSharedPages, // AllocateSharedPages
|
||||||
|
VirtioMmioFreeSharedPages, // FreeSharedPages
|
||||||
|
VirtioMmioMapSharedBuffer, // MapSharedBuffer
|
||||||
|
VirtioMmioUnmapSharedBuffer // UnmapSharedBuffer
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
Internal definitions for the VirtIo MMIO Device driver
|
Internal definitions for the VirtIo MMIO Device driver
|
||||||
|
|
||||||
Copyright (C) 2013, ARM Ltd
|
Copyright (C) 2013, ARM Ltd
|
||||||
|
Copyright (C) 2017, AMD Inc. All rights reserved.<BR>
|
||||||
|
|
||||||
This program and the accompanying materials are licensed and made available
|
This program and the accompanying materials are licensed and made available
|
||||||
under the terms and conditions of the BSD License which accompanies this
|
under the terms and conditions of the BSD License which accompanies this
|
||||||
|
@ -25,6 +26,7 @@
|
||||||
#include <Library/IoLib.h>
|
#include <Library/IoLib.h>
|
||||||
#include <Library/UefiLib.h>
|
#include <Library/UefiLib.h>
|
||||||
#include <Library/VirtioMmioDeviceLib.h>
|
#include <Library/VirtioMmioDeviceLib.h>
|
||||||
|
#include <Library/MemoryAllocationLib.h>
|
||||||
|
|
||||||
#define VIRTIO_MMIO_DEVICE_SIGNATURE SIGNATURE_32 ('V', 'M', 'I', 'O')
|
#define VIRTIO_MMIO_DEVICE_SIGNATURE SIGNATURE_32 ('V', 'M', 'I', 'O')
|
||||||
|
|
||||||
|
@ -137,4 +139,38 @@ VirtioMmioSetGuestFeatures (
|
||||||
IN UINT64 Features
|
IN UINT64 Features
|
||||||
);
|
);
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
VirtioMmioAllocateSharedPages (
|
||||||
|
IN VIRTIO_DEVICE_PROTOCOL *This,
|
||||||
|
IN UINTN NumPages,
|
||||||
|
OUT VOID **HostAddress
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
VirtioMmioFreeSharedPages (
|
||||||
|
IN VIRTIO_DEVICE_PROTOCOL *This,
|
||||||
|
IN UINTN NumPages,
|
||||||
|
IN VOID *HostAddress
|
||||||
|
);
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
VirtioMmioMapSharedBuffer (
|
||||||
|
IN VIRTIO_DEVICE_PROTOCOL *This,
|
||||||
|
IN VIRTIO_MAP_OPERATION Operation,
|
||||||
|
IN VOID *HostAddress,
|
||||||
|
IN OUT UINTN *NumberOfBytes,
|
||||||
|
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
|
||||||
|
OUT VOID **Mapping
|
||||||
|
);
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
VirtioMmioUnmapSharedBuffer (
|
||||||
|
IN VIRTIO_DEVICE_PROTOCOL *This,
|
||||||
|
IN VOID *Mapping
|
||||||
|
);
|
||||||
|
|
||||||
#endif // _VIRTIO_MMIO_DEVICE_INTERNAL_H_
|
#endif // _VIRTIO_MMIO_DEVICE_INTERNAL_H_
|
||||||
|
|
|
@ -293,3 +293,60 @@ VirtioMmioDeviceRead (
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
VirtioMmioAllocateSharedPages (
|
||||||
|
IN VIRTIO_DEVICE_PROTOCOL *This,
|
||||||
|
IN UINTN NumPages,
|
||||||
|
OUT VOID **HostAddress
|
||||||
|
)
|
||||||
|
{
|
||||||
|
VOID *Buffer;
|
||||||
|
|
||||||
|
Buffer = AllocatePages (NumPages);
|
||||||
|
if (Buffer == NULL) {
|
||||||
|
return EFI_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
|
|
||||||
|
*HostAddress = Buffer;
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
VirtioMmioFreeSharedPages (
|
||||||
|
IN VIRTIO_DEVICE_PROTOCOL *This,
|
||||||
|
IN UINTN NumPages,
|
||||||
|
IN VOID *HostAddress
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FreePages (HostAddress, NumPages);
|
||||||
|
}
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
VirtioMmioMapSharedBuffer (
|
||||||
|
IN VIRTIO_DEVICE_PROTOCOL *This,
|
||||||
|
IN VIRTIO_MAP_OPERATION Operation,
|
||||||
|
IN VOID *HostAddress,
|
||||||
|
IN OUT UINTN *NumberOfBytes,
|
||||||
|
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
|
||||||
|
OUT VOID **Mapping
|
||||||
|
)
|
||||||
|
{
|
||||||
|
*DeviceAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) HostAddress;
|
||||||
|
*Mapping = NULL;
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
VirtioMmioUnmapSharedBuffer (
|
||||||
|
IN VIRTIO_DEVICE_PROTOCOL *This,
|
||||||
|
IN VOID *Mapping
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue