From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id CFCBA21AEB0CE for ; Wed, 23 Aug 2017 12:24:24 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8324B4ACCB; Wed, 23 Aug 2017 19:26:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 8324B4ACCB Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=lersek@redhat.com Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-43.phx2.redhat.com [10.3.116.43]) by smtp.corp.redhat.com (Postfix) with ESMTP id D8B0E1710B; Wed, 23 Aug 2017 19:26:56 +0000 (UTC) To: Brijesh Singh , edk2-devel@lists.01.org Cc: Jordan Justen , Tom Lendacky , Ard Biesheuvel References: <1503490967-5559-1-git-send-email-brijesh.singh@amd.com> <1503490967-5559-5-git-send-email-brijesh.singh@amd.com> From: Laszlo Ersek Message-ID: <5a4d162f-6f74-b139-21d5-9364bff19fc2@redhat.com> Date: Wed, 23 Aug 2017 21:26:55 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <1503490967-5559-5-git-send-email-brijesh.singh@amd.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Wed, 23 Aug 2017 19:26:58 +0000 (UTC) Subject: Re: [PATCH v3 04/23] OvmfPkg/VirtioMmioDeviceLib: implement IOMMU-like member functions X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Aug 2017 19:24:25 -0000 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit On 08/23/17 14:22, Brijesh Singh wrote: > 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 > Cc: Ard Biesheuvel > Cc: Jordan Justen > Cc: Tom Lendacky > Cc: Laszlo Ersek > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Brijesh Singh > --- > OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h | 36 +++++++++++++ > OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.c | 8 ++- > OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c | 57 ++++++++++++++++++++ > 3 files changed, 99 insertions(+), 2 deletions(-) Reviewed-by: Laszlo Ersek Thanks, Laszlo > diff --git a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h > index bedd635e1a86..e5881d537f09 100644 > --- a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h > +++ b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h > @@ -3,6 +3,7 @@ > Internal definitions for the VirtIo MMIO Device driver > > 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 > @@ -25,6 +26,7 @@ > #include > #include > #include > +#include > > #define VIRTIO_MMIO_DEVICE_SIGNATURE SIGNATURE_32 ('V', 'M', 'I', 'O') > > @@ -137,4 +139,38 @@ VirtioMmioSetGuestFeatures ( > 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_ > diff --git a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.c b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.c > index b1d443ea7007..fce934e1e953 100644 > --- a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.c > +++ b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.c > @@ -3,6 +3,7 @@ > This driver produces Virtio Device Protocol instances for Virtio Mmio devices. > > 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 > @@ -15,7 +16,6 @@ > **/ > > #include > -#include > #include > > #include "VirtioMmioDevice.h" > @@ -35,7 +35,11 @@ static VIRTIO_DEVICE_PROTOCOL mMmioDeviceProtocolTemplate = { > VirtioMmioGetDeviceStatus, // GetDeviceStatus > VirtioMmioSetDeviceStatus, // SetDeviceStatus > VirtioMmioDeviceWrite, // WriteDevice > - VirtioMmioDeviceRead // ReadDevice > + VirtioMmioDeviceRead, // ReadDevice > + VirtioMmioAllocateSharedPages, // AllocateSharedPages > + VirtioMmioFreeSharedPages, // FreeSharedPages > + VirtioMmioMapSharedBuffer, // MapSharedBuffer > + VirtioMmioUnmapSharedBuffer // UnmapSharedBuffer > }; > > /** > diff --git a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c > index 9142d4a162c0..644ec65e1788 100644 > --- a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c > +++ b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c > @@ -293,3 +293,60 @@ VirtioMmioDeviceRead ( > > 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; > +} >