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:
Brijesh Singh 2017-08-23 06:57:15 -04:00 committed by Laszlo Ersek
parent de1c57c5f5
commit 4157b8416a
3 changed files with 98 additions and 1 deletions

View File

@ -5,6 +5,7 @@
Copyright (C) 2012, Red Hat, Inc. Copyright (C) 2012, Red Hat, Inc.
Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR> Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>
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
@ -40,7 +41,11 @@ STATIC VIRTIO_DEVICE_PROTOCOL mDeviceProtocolTemplate = {
VirtioPciGetDeviceStatus, // GetDeviceStatus VirtioPciGetDeviceStatus, // GetDeviceStatus
VirtioPciSetDeviceStatus, // SetDeviceStatus VirtioPciSetDeviceStatus, // SetDeviceStatus
VirtioPciDeviceWrite, // WriteDevice VirtioPciDeviceWrite, // WriteDevice
VirtioPciDeviceRead // ReadDevice VirtioPciDeviceRead, // ReadDevice
VirtioPciAllocateSharedPages, // AllocateSharedPages
VirtioPciFreeSharedPages, // FreeSharedPages
VirtioPciMapSharedBuffer, // MapSharedBuffer
VirtioPciUnmapSharedBuffer, // UnmapSharedBuffer
}; };
/** /**

View File

@ -3,6 +3,7 @@
Internal definitions for the VirtIo PCI Device driver Internal definitions for the VirtIo PCI 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
@ -156,4 +157,37 @@ VirtioPciSetDeviceStatus (
IN UINT8 DeviceStatus 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_ #endif // _VIRTIO_PCI_DEVICE_DXE_H_

View File

@ -5,6 +5,7 @@
Copyright (C) 2012, Red Hat, Inc. Copyright (C) 2012, Red Hat, Inc.
Copyright (c) 2012, Intel Corporation. All rights reserved.<BR> Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
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
@ -271,3 +272,60 @@ VirtioPciSetDeviceStatus (
return VirtioPciIoWrite (Dev, VIRTIO_PCI_OFFSET_QUEUE_DEVICE_STATUS, return VirtioPciIoWrite (Dev, VIRTIO_PCI_OFFSET_QUEUE_DEVICE_STATUS,
sizeof (UINT8), DeviceStatus); 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;
}