From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0046.outbound.protection.outlook.com [104.47.40.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id A2D5E21D0A243 for ; Mon, 14 Aug 2017 04:34:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=K8AsxvSHyxbLDJje/IMqQqXw3Ndrrh1LWYM5AVJ3xCs=; b=RgV9q5sMlIor1jk8GifQrU7MJYFF/SGErax9HLN8okzti1A9xNC2xAoldS7TocwOZw5XTETgIg3l2uirPtuNdcZAjYSnHyl4vaW65k5w1oWeKDWhIQS7Ua6TivK8+Uyx79gwSAO+bw6YPfm8tgmB95ulJWQMP/IdDSXXiKsKnjY= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; Received: from brijesh-build-machine.amd.com (165.204.77.1) by BY2PR12MB0145.namprd12.prod.outlook.com (10.162.82.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1341.21; Mon, 14 Aug 2017 11:37:13 +0000 From: Brijesh Singh To: edk2-devel@lists.01.org Cc: Brijesh Singh , Ard Biesheuvel , Jordan Justen , Tom Lendacky , Laszlo Ersek Date: Mon, 14 Aug 2017 07:36:30 -0400 Message-Id: <1502710605-8058-9-git-send-email-brijesh.singh@amd.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1502710605-8058-1-git-send-email-brijesh.singh@amd.com> References: <1502710605-8058-1-git-send-email-brijesh.singh@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: MWHPR15CA0043.namprd15.prod.outlook.com (10.173.226.157) To BY2PR12MB0145.namprd12.prod.outlook.com (10.162.82.18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 20f02736-2f7f-4bc5-9cd0-08d4e308cee9 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(48565401081)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:BY2PR12MB0145; X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 3:1bV1C38x8oRO65PZo22ACW5+NhIKkfvW5oSmq21Vt6YGSDtcQQj5Ye9Tvqu9hGV8iS7qWpPX8nk/h2xAIlH94ieGqBB7vDP9MkZ/MXCkN00psiSBwf3/JRP1vet/IRYAOVy35ti4SSWM+GsHN9PJ2gE64tKmUn50VvZg9CukJB7c3mSdZg2wCi8Sn4Qr0HPn4wwsB5107mj5z2tNTb2fKNwtT2WCusZut9nFiE8oMugpRD1npYElxq79fcvye6Ls; 25:6YcCrtfumMI+uTs7zEFunVYMsxydzO0w37Y5pvMtxDwMIT3/9e4bq77LcWPcXjRULAJ7HTZlcwFOR2oprJKjaZxILu846krEIgcKooMg0mbm/e8QJWIddMnhKU6vf6perWYG9/6YJ6+bcD3DLC7qTFHLpbvoOeKIYnGm6+JoISi4Fm8yOreIPbZZ/iwldgsiSGatUG15pUlEMd6wA3tHAgiJHJLfdyMjD6uHvGBpxNF1TdREeMUc1z8gAzSc5vLHmJ+J6m4NnRHEoi7jnRUycy+873JMMqPdPOSmG8q6jBv8FyY7HLexZb/Oku6Lb0m+LaChDHq3zjF2kips5QFqmQ==; 31:v0VhoS0Rr8iUuFdV0vS1vchA05VxsZFbSZ/7OHJcVy3Y8otCrgQIg225zw1ItpshYcEqNALLnbwB2BPBsv19NxxLjyEeJ8kIHbWBkMXbDm/VfB7zEBmyfZkj4qFnXuBr1Lx63KfrzlKCGq1VA854ybgyapNwOD+JlHFQgmizRth0WoBQ4lDl/2pw6xKKkbjW5mBJ0zs5obVKv6fFMsIrw3HfsUAEo5l+5+eSGkmkLE4= X-MS-TrafficTypeDiagnostic: BY2PR12MB0145: X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 20:fqsWaFhGbB1cYzFbVCBg3fhTGwZKqNz42XwIY5rIhAsqQG+rEbNPSRDoTjuwJ5DTvYptsRiTUDBA8rWfKSMrBbyJZF+W0oBGMPsTjja6srW1PfCcdRFqCDnu3Qp51tqJd0735l+TCUL5XhMjuVxvXcypj+0tQIKcWAk3HaJF6jg+a+fVfUxqgAfLAOhSIYsWdcQmbXMkjTX6Q3KzqQ5oeV+5CNz3CvwMkDBS2CR4n7Nk+kkiiL9LQC9OFBam2lIHXrQX7KDulBmNNuiQMQfZNNzziQb/11OyQZ3/4FCD862oL/ifuJD5AUYLQS3pFajotUO1Jzx/nZADVebcFstIFTBCJCRy2ov6aK3yJqlhXCAEcyzReJY+FwFS6r+QhRw+y5RAbe03O3itkMbHMloKOxrfvK5KjS9E3ODXJgRl283J/B6KejhpUvgYGEaSqkgBBi7GiqN6er5nPWN32UoDa8n1S9WvoKNFOIA1sTao20rdr9cmGnZXTop4TETA8qXQ; 4:LYEtlgCWni+PuAVpT5tQ3MC+0d9jbOSruQEZBI2BTxqOfPiTywZJie2klC2hAJmyx3wdQk81UI4yxsyJCD+YXECTJpoB8cjVtrFJweznbE+I0qEOdaPyQoNZer5N3TdR436p90ZB30L0gqySMrmnOm0C8dIgVBmKKwmYejwczO/ZfLcw0/SgWq5F5cR+r2BVqVCmPndyFiRr+MlD+4g794q+cHa+EZpB7i1tD96yIBBuNQremmaYNqc1Ko7XutMmSilLh2Er1WgTeHuiy0VvnXuzr9fQoI+WukaZRTbTvHXK2ZXz15pT09xxpBZoKy/MqrbggDTqbqz0mrgYeSs1lQ== X-Exchange-Antispam-Report-Test: UriScan:(767451399110)(228905959029699); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(100000703101)(100105400095)(3002001)(6055026)(6041248)(20161123558100)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:BY2PR12MB0145; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BY2PR12MB0145; X-Forefront-PRVS: 039975700A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(7370300001)(4630300001)(6009001)(39860400002)(199003)(189002)(54906002)(5003940100001)(6116002)(3846002)(53936002)(97736004)(575784001)(86362001)(36756003)(81156014)(81166006)(110136004)(8676002)(189998001)(50986999)(76176999)(5660300001)(2361001)(25786009)(2351001)(50226002)(4326008)(7350300001)(33646002)(478600001)(53416004)(42186005)(2906002)(105586002)(7736002)(305945005)(106356001)(48376002)(50466002)(47776003)(66066001)(6486002)(6916009)(2950100002)(6666003)(68736007)(101416001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR12MB0145; H:brijesh-build-machine.amd.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR12MB0145; 23:b2krrIvBquZad+VFHBs8evzJLniwwvgS55YEr7xcQ?= =?us-ascii?Q?gOldyn15i+VR2ZhuWpK444VjKjXEk8K+av35iHjkxb2I3Pm37zcfg/Y0AO0I?= =?us-ascii?Q?7ooABIpQuOT+1Wi9hrRD7qf0KGma00TY+aiPkVuz7w725bdAsTUYz578lGE/?= =?us-ascii?Q?mr84RCbyW7PlD5wYA39x7MUK/qzidqe/skIE3q1uloqt3g72hA8MtVEjGCcn?= =?us-ascii?Q?wX8/vHQ3NuUG3zX/7PmGhMrr2Cj0nl9tfbaomyOxYTwp/jSRItdM7/8oR4Xp?= =?us-ascii?Q?aRElZEgeFeKf30T/TjZLu0P9VJrZ7SL2J1wCmvAtGdK0PYC7hQ9OC+p4bQdQ?= =?us-ascii?Q?QTGfFGVR4QRjvZJ1BxNO2/10b7hxf5SRzPnJM6qTGf+xIGRpmwWZxFwHSlHm?= =?us-ascii?Q?7nWTquLDjNJiGURmuaL/dV9Xx4QDwOHPwmkB8mCpFGav6hUOSIdCsKCGuADk?= =?us-ascii?Q?rxwHTpAkSGbHjtoliJVHG8t8/rj/E4RxsSW+I0Ua0GaN37M2yBlaBDOEFaFm?= =?us-ascii?Q?P26OiQ4wOi2bjlLFyS+iQDsTT26AV7N46YU1ejarshQaL45gwN3O18wgbjw0?= =?us-ascii?Q?Tee9dyN+KoKyH2cvP7aZ9Gf+83NSly7wAmpxLYq9FJXG4zutOFOloJBihV+6?= =?us-ascii?Q?RTP5yh8xMlAfNTHqo2ypWaU/OJC6Giy0sQrfFUdjrfR/yC2wRWZ5E4wqYtye?= =?us-ascii?Q?+UHN5hWXU46MnkZ/a7BEHqKjEwKJU7mqNG7VJESAj61XTYz3ta2OmaCz/P/Q?= =?us-ascii?Q?snsIRiPGzEoDeO0NGNjF0FsAwgcWO1UmPC+g+6qvEqSJ6kXutv4Nieg0daTm?= =?us-ascii?Q?OH3SEdvl3hv8Rk3pgzRm8kwE9aHRFin2VDpCoahd1XUt3VhGqGbC6iICqog6?= =?us-ascii?Q?B5r0mul7N4HpE0fwpN7/AC2t0m/Nv+XwTPmFi/VC5pqhDhvnSXFwceDPmaip?= =?us-ascii?Q?+skWgNvgTR/rLwx5UM9jOT7yPurKiNiobCXcY6D3pkn7haGoOdNUinAmXfro?= =?us-ascii?Q?l0DwLjG5J31vxnTPiyl9pfA989/mJZB8/0DWjO63j8ncJKVrkkkndw9usTx6?= =?us-ascii?Q?oK9JvWJ+EfC0T4XecED/e6RWRXXT9eXdgv2I9iPGPoIWK/Azc15KQJv9bz3/?= =?us-ascii?Q?IBlDI58X24p32uPtYB/Y3D4ckeUxz5bDf32RJ4X037uoWT/qiaODltFKYId3?= =?us-ascii?Q?0G8GOuKw0ZKRJE=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 6:jyNwq8RsU17uvhQSla9r7Pr0E/C8PsMhXogHsobQtylsV2yj6oyIpILfwVSIdtHKWdQRC6feJtf9MLyYCwRC/mfcyB3HXlTr5p+0yF+zZEs2ENosnsejzU8BWwIfz8VqrFgq9GWlQNdkFe4hYsWI19gUqQYukiTLb8kriAy3Nq6UadeHwjfkKnuB3KnroaBpjzi/CayEz+QFJjYQL0/qLegmBJvxHPY2V11/YvftdcxlxeroOzLD2ZjytJZBhyq2JDKxI6Uagun62TeHo5r0ggYdap7jOLx2QX8YBOlMI5vDGgSCK5Td7NmmmYaOWz3oE53Sac7BqzYl5TD3Ugcp7w==; 5:1gtBGGXCf9ocbjFx8UmAN+4AHjRj/xhGUzjthECC1SMKr++p0Pmc84OtHig6zS61oWROJHUUDbupRfsgyKtSZeKZGWJwl0rfILj+HUcMw2+9ufcTLP3cjNs1jZ33VWZD6HQD6ORD+tm92wxR2WvOEQ==; 24:AsM0Y0jRLLeBxNVU3wLC99bbZtNigLu+EtHQ7bzxUUQWGhICZkPYYowaQcPbsxU3OdxlEdhnxoICsOgtNzJSK3+e0SXwEmTuL3mgH6uk/gM=; 7:C0hUhXjXRAK4MOff8IaZyD+lmSjzhoNFVkR9oqfNCbaiQqkyt0m+9WaLa7sn4DWmtxgRkoXJ/7SYnNF3OpJaA7SvxjNwMFaMnBD/zMLyFchHkoYetMkySblf8L0AVYJzKbWi17b2/YFoUIo0KbNArMQBzhEAXK1dzWuDynlHbmeJ12oHHtebXKCNBc9F3IDBS+pJ0MUpc3nr7rm2Iq3qSeeAhUFXt1LggRRPUsGE1Eg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 20:4the0YcpYVoNvfLTqulUbcPLZiturKuAYCZ7d1JLaFztns8dTMxj1TJrFVBLcb9zZELDkeTtbZp8CKYNDEEuj5pG3asXDDBbuBrsgZjKwnYO/VKHZFcLQdXBSrMK8Nod89PJRIU+KWa6lves84ioOoQuZk1qSbWDQgAuBY3qdlQ4wvCJb4pho8fMpb7afGHzMHOIkdB7Ah1396NuzJKsY8ZxT4NwnZumR3v2IF7hw0dxOhIoTFXvCleHpzgCqD/X X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Aug 2017 11:37:13.0648 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR12MB0145 Subject: [PATCH v2 08/23] OvmfPkg/VirtioPciDeviceDxe: 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: Mon, 14 Aug 2017 11:34:51 -0000 Content-Type: text/plain 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/VirtioPciDeviceDxe/VirtioPciDevice.h | 34 ++++++++++++ OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.c | 7 ++- OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c | 58 ++++++++++++++++++++ 3 files changed, 98 insertions(+), 1 deletion(-) diff --git a/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h b/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h index 6f51f816ef0f..41df5a98e560 100644 --- a/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h +++ b/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h @@ -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.
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_ diff --git a/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.c b/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.c index e41730456471..b847f3c02528 100644 --- a/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.c +++ b/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.c @@ -5,6 +5,7 @@ Copyright (C) 2012, Red Hat, Inc. Copyright (c) 2012 - 2016, 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 @@ -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 }; /** diff --git a/OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c b/OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c index 5f86914265ea..4597095deb78 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 @@ -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, + OUT VOID *Mapping + ) +{ + return EFI_SUCCESS; +} -- 2.7.4