mirror of https://github.com/acidanthera/audk.git
OvmfPkg/VirtioPciDeviceDxe: 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
de1c57c5f5
commit
4157b8416a
|
@ -5,6 +5,7 @@
|
|||
Copyright (C) 2012, Red Hat, Inc.
|
||||
Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
under the terms and conditions of the BSD License which accompanies this
|
||||
|
@ -40,7 +41,11 @@ STATIC VIRTIO_DEVICE_PROTOCOL mDeviceProtocolTemplate = {
|
|||
VirtioPciGetDeviceStatus, // GetDeviceStatus
|
||||
VirtioPciSetDeviceStatus, // SetDeviceStatus
|
||||
VirtioPciDeviceWrite, // WriteDevice
|
||||
VirtioPciDeviceRead // ReadDevice
|
||||
VirtioPciDeviceRead, // ReadDevice
|
||||
VirtioPciAllocateSharedPages, // AllocateSharedPages
|
||||
VirtioPciFreeSharedPages, // FreeSharedPages
|
||||
VirtioPciMapSharedBuffer, // MapSharedBuffer
|
||||
VirtioPciUnmapSharedBuffer, // UnmapSharedBuffer
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
Internal definitions for the VirtIo PCI Device driver
|
||||
|
||||
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
|
||||
under the terms and conditions of the BSD License which accompanies this
|
||||
|
@ -156,4 +157,37 @@ VirtioPciSetDeviceStatus (
|
|||
IN UINT8 DeviceStatus
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioPciAllocateSharedPages (
|
||||
IN VIRTIO_DEVICE_PROTOCOL *This,
|
||||
IN UINTN NumPages,
|
||||
OUT VOID **HostAddress
|
||||
);
|
||||
|
||||
VOID
|
||||
EFIAPI
|
||||
VirtioPciFreeSharedPages (
|
||||
IN VIRTIO_DEVICE_PROTOCOL *This,
|
||||
IN UINTN NumPages,
|
||||
IN VOID *HostAddress
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioPciMapSharedBuffer (
|
||||
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
|
||||
VirtioPciUnmapSharedBuffer (
|
||||
IN VIRTIO_DEVICE_PROTOCOL *This,
|
||||
IN VOID *Mapping
|
||||
);
|
||||
#endif // _VIRTIO_PCI_DEVICE_DXE_H_
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
Copyright (C) 2012, Red Hat, Inc.
|
||||
Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
|
||||
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
|
||||
under the terms and conditions of the BSD License which accompanies this
|
||||
|
@ -271,3 +272,60 @@ VirtioPciSetDeviceStatus (
|
|||
return VirtioPciIoWrite (Dev, VIRTIO_PCI_OFFSET_QUEUE_DEVICE_STATUS,
|
||||
sizeof (UINT8), DeviceStatus);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioPciAllocateSharedPages (
|
||||
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
|
||||
VirtioPciFreeSharedPages (
|
||||
IN VIRTIO_DEVICE_PROTOCOL *This,
|
||||
IN UINTN NumPages,
|
||||
IN VOID *HostAddress
|
||||
)
|
||||
{
|
||||
FreePages (HostAddress, NumPages);
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
VirtioPciMapSharedBuffer (
|
||||
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
|
||||
VirtioPciUnmapSharedBuffer (
|
||||
IN VIRTIO_DEVICE_PROTOCOL *This,
|
||||
IN VOID *Mapping
|
||||
)
|
||||
{
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue