X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=OvmfPkg%2FVirtioPciDeviceDxe%2FVirtioPciFunctions.c;h=b52060d13d97024b4fa4cc19ca0997bb5161fef8;hp=d8d30f9af63d6d7638928020c0e02bae462d320a;hb=53a4c6047f3ce2ece7bb8db5b9815a1c9227dddb;hpb=bc8fde6f62fd038e709b4981babda0f7c7ba8418 diff --git a/OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c b/OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c index d8d30f9af6..b52060d13d 100644 --- a/OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c +++ b/OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c @@ -5,6 +5,7 @@ Copyright (C) 2012, Red Hat, Inc. Copyright (c) 2012, Intel Corporation. All rights reserved.
Copyright (C) 2013, ARM Ltd. + Copyright (C) 2017, AMD Inc, All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this @@ -122,25 +123,6 @@ VirtioPciGetDeviceFeatures ( return Status; } -EFI_STATUS -EFIAPI -VirtioPciGetQueueAddress ( - IN VIRTIO_DEVICE_PROTOCOL *This, - OUT UINT32 *QueueAddress - ) -{ - VIRTIO_PCI_DEVICE *Dev; - - if (QueueAddress == NULL) { - return EFI_INVALID_PARAMETER; - } - - Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This); - - return VirtioPciIoRead (Dev, VIRTIO_PCI_OFFSET_QUEUE_ADDRESS, sizeof (UINT32), - sizeof (UINT32), QueueAddress); -} - EFI_STATUS EFIAPI VirtioPciGetQueueSize ( @@ -200,23 +182,26 @@ VirtioPciSetGuestFeatures ( EFI_STATUS EFIAPI VirtioPciSetQueueAddress ( - VIRTIO_DEVICE_PROTOCOL *This, - UINT32 Address + IN VIRTIO_DEVICE_PROTOCOL *This, + IN VRING *Ring, + IN UINT64 RingBaseShift ) { VIRTIO_PCI_DEVICE *Dev; + ASSERT (RingBaseShift == 0); + Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This); return VirtioPciIoWrite (Dev, VIRTIO_PCI_OFFSET_QUEUE_ADDRESS, sizeof (UINT32), - Address); + (UINT32)((UINTN)Ring->Base >> EFI_PAGE_SHIFT)); } EFI_STATUS EFIAPI VirtioPciSetQueueSel ( - VIRTIO_DEVICE_PROTOCOL *This, - UINT16 Sel + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT16 Sel ) { VIRTIO_PCI_DEVICE *Dev; @@ -230,8 +215,8 @@ VirtioPciSetQueueSel ( EFI_STATUS EFIAPI VirtioPciSetQueueAlignment ( - VIRTIO_DEVICE_PROTOCOL *This, - UINT32 Alignment + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT32 Alignment ) { return EFI_SUCCESS; @@ -240,8 +225,8 @@ VirtioPciSetQueueAlignment ( EFI_STATUS EFIAPI VirtioPciSetPageSize ( - VIRTIO_DEVICE_PROTOCOL *This, - UINT32 PageSize + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT32 PageSize ) { return (PageSize == EFI_PAGE_SIZE) ? EFI_SUCCESS : EFI_UNSUPPORTED; @@ -250,8 +235,8 @@ VirtioPciSetPageSize ( EFI_STATUS EFIAPI VirtioPciSetQueueNotify ( - VIRTIO_DEVICE_PROTOCOL *This, - UINT16 Index + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT16 Index ) { VIRTIO_PCI_DEVICE *Dev; @@ -265,8 +250,8 @@ VirtioPciSetQueueNotify ( EFI_STATUS EFIAPI VirtioPciSetQueueSize ( - VIRTIO_DEVICE_PROTOCOL *This, - UINT16 Size + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT16 Size ) { // @@ -279,8 +264,8 @@ VirtioPciSetQueueSize ( EFI_STATUS EFIAPI VirtioPciSetDeviceStatus ( - VIRTIO_DEVICE_PROTOCOL *This, - UINT8 DeviceStatus + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT8 DeviceStatus ) { VIRTIO_PCI_DEVICE *Dev; @@ -290,3 +275,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; +}