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 883D921D0A242 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=t0OUvlY+0NHBYeHnhh1BKX9snhqZro5fHkxO3GHNXEA=; b=om5zk1ZAdIekP6R82dZD61NJ/OHRu1lYYCAeowMK4D8cIpHVtlhS437/huUXakChESMU71JfxMho/fhWxb/eAr44MbnMD+1l7/Pz7GQHtFUmZ6DB/+LQ1VAGHWSVvVKqV4J+LqKYRnG4Ej/w9mlJKm345qqtviQgOduofjYz45A= 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:12 +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:29 -0400 Message-Id: <1502710605-8058-8-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: c24a384c-6a22-48e6-cac7-08d4e308ce55 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:gf4iDTm8Vrij18Lyabku0ujCM640bckUsEpQ/srLzCMH4kh7FRGESI3RhrZzD3WLE02WllEBPXSqBPmNh+nVJDPfjhPS6K6ziAyOU8dazMJynSuPUdmkANCfYHntRgaQ79B8NTmqOfHVztbrN1wPSgFSyQE8IsezkfQHW0e7GBVQQtTBKKos63zLZdPSqjUcaoDmRQy7qgjLl0Otmzl+joif+Jvt7KhwaPEIUw2GhkB75MzrpmuZn2h9/B29W/Rq; 25:fNNanbmwk3caLGu7a7CQsfXi8aWcFPndcRnUus+jFWxSECcSWn9motSDC/mKba3bfMAUqLzg8bJCl/RZBVwKWWZGH6uO2nlkgzon/Pf3UW6JkBK13B54sjSy3XyTcR4LO9dTHAQixuuNX2dYM92mD3VD+uVmWhBVaSs63IbKMwM61nuDiQ4zqlE+47NTQCouWcKNJnTWLnUpSqmu5km14xMx+c+eJUKNbes3sN1A6hJPYGD6RCZ5hR3h7BOQfY5zVORMp2hpw2TD63DVObfqOa1hIJJCoPJFxNhv50G3LAz40ubVLO815Ek8Lq4zw7WsQ3vnacwCLBdYzXmclEZyPQ==; 31:36XGQFiiJNdWtms55TA6xtVSdKBkyQjLWp5hbPnInYJCsAab5Y4BwSSCp8SwXZHKeJQVtXH14dX+dJk6rpiHpgzmTud4h/OEnPCG4f/JlI3fWfc+XVcwLMBHnolgt0aofaf9XHDsgRc1ek/O9IUlsz0yrZ6UAYNTMNWeAng97/f4Dk51OjexTrACYXC2vBPdm6cel8yBKLNej65E+LP9WvajzSLc8X0BlYzA4xrv36s= X-MS-TrafficTypeDiagnostic: BY2PR12MB0145: X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 20:OzZLQCZhuyr6RIyTZVExDRgJmACh1qSS4R1iEXiHk/+zhp8I7dRkjNdby91s3pKT6oFH7L6SxmP+lTHfhPKAv2TgEbLHODjVYdHaRs08MzPJMcCpEIfyWfJ1SXXBtD6CdG2XtG6GxhM2OVfCTEBfItk1mzUndKroyCQy098eI772wSiedeZswbp5+u9xzJNqX0MwzBmDPhwuaGEBDtYur8JjilxrprqpByyU0QUQrbvJImL6uvNSJJ0bfgVEVLb+CUkgso8XNc4BIcq+i5c8bzUQM+lJmOKZ9FeGT86M1cbbGuQDAKRzHELo7ZMCAZci+yuMWBeno2mbFNs+FhAi8OtM0KCCTeFFu8PzWATVJVMHGvI/s3Igtz7L4MkMT0jaMUj4RSZ4jqfPkkgaZuPz3rviY8BBq2YrxomymtsFzFvGVgPNKroBbDLmYSyMuS2DANJiXxbmkT+C1q7y0t/UgLIuI3dSCLNwLlJnQrGN9CZFWrm/2Qx8IWIZl69OoTzx; 4:VS7C5SN9js2qtpYSEXaz5T9J0JtYNU1WYM49QGaB/Zd8LihaTH/rvbZ9Zr8VHuSXv8uYW3FCtzvmE6pOT2onuLfw2ZVW4e518jKKKHOuwElgD7E1fDGE61xnbfJSet0D2ocTHF1FKk/2LeSXtjWeTJV86ULea0C6jBaOXvaOfT5pwRX0sHkLz9KHxRLBKhyY4lBJWBG1tHK5gGa5lY7nQuQFS1TvxY4dgDdEFENYqXFUQogAwP/jd7wDigSGQB2H402hseJ1qbFVjBIrVQvZy0xluogMdHhVmLIMXMuZR9hq6Ib35o/dTwZNmK1Uegk54J+AZFnh0wpogBYHVueMAg== 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)(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)(19627235001); 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:tuOi90aCeTXaBUhO4mzZo5zh6nv967JM/Q92RJP7W?= =?us-ascii?Q?G9/ixLh00aw3AQbkEBLXEfDl/yInGrFuIj7JmclyWZXJlR44zeqRZ8dhkF+u?= =?us-ascii?Q?I7xJ70TUuYngLBrwjDfTxmOTWDMmEAvtDvYNb7MOp+5HEjo4NF4Pbx+WRHEn?= =?us-ascii?Q?HLPd3myPWuqnYN4e6LC0CrNDBsSXlyHGf5JzdP4sHPs0+eHrnSblv24t67pv?= =?us-ascii?Q?GD8DP0o0dmGe6Bt1ZMuuxVUTZxcg8zXwqaMGkD58r0fyvOhN5Tspm5M/fwTQ?= =?us-ascii?Q?PlXcG1OtZTOzAtit4tr9srNXisyrKfqZWbd4KW150gGQ7Wdor+PkOjoQlZZ3?= =?us-ascii?Q?eK6JWz9SaXWiftXCWUidVWOP7+o68mTi5QSJwwf6++MOSxUHnY68t+vSOgOI?= =?us-ascii?Q?yQxgDubhXfIvCq93Ee3ijmRZObBXniHacphVf3WfQpg2CdtRXZsMhgSp1Vlh?= =?us-ascii?Q?W5u0IctVKOktKHSegQzjwcP3+F9SlqdnoXZ52r+ODC3RcbF0NAJcuWwDGaLx?= =?us-ascii?Q?wsitcgQwlsTrtRsbL/ZMD1iuyzYIMKWweZtLHt/bZBqBoZImnVFwYcU0m2Sa?= =?us-ascii?Q?m7AOeXTK+ACQeUpB4raI0KL1fcIooq+UH2J8zbRFR7zsOH0IeiQAAbVU4TCy?= =?us-ascii?Q?MIsG4lwsKcdEfFYMGWFG5yDBVTJ3HqWswYIfOeL9OvQqDbtKxNFLaB3N0nBT?= =?us-ascii?Q?pCKpZsAXgZf2lLIAZidusKkL7Z/ilW1YLEPQVObEXCD0H0vONtjZJkMGiqzh?= =?us-ascii?Q?gHqlFuzfBrO3gdIcs1Y3lxSqlKy3pk9QoKzZyuI0/lLIt3qg3QZwAph53URI?= =?us-ascii?Q?8FHeXqkXWcAoMGmlRTzA+PAOm0aEYwNXsOSEcqJNJ8VucjohdWJnza9KMcHx?= =?us-ascii?Q?oXtluMew+0uD03j8sIH1ypB3Yi+g21b6JjffEjUkkCZyQOY6s5h+r/5WZ9Z4?= =?us-ascii?Q?BfyXYfxFH1X5plILS/GjSEDKzkNBTj90sRIF5/8BGm0+VAtwT70M7LrUe054?= =?us-ascii?Q?qrJAvTLd3EREk0/pNsDL39XsEYSFgygXNXTECm+Tux/giEpJxAFB+HsPmshd?= =?us-ascii?Q?EX5ZA1Z4dotxeEI+9k+xPNLaxSSiqMkxnCQzIaZmc79nfpbWuHseCYlsjYNG?= =?us-ascii?Q?yoBFaon2H14J1nXJ7zuU6FqO3QW9zvOw/VwOlgdxucFygI2gc2HFa3jXf46c?= =?us-ascii?Q?/VOxEk++JQU2xk=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 6:rC2k+cOkzdnwzXqkWTmK4Z0x7IoAEgjDEf0iJNsv4+HkzlgwZ3fyQIE9QQ2/+pJY1POPtN7yn6ChQ7mmmPi8Ddw3tStMcwVF7EkXmXXhHprpVifCVXpzcyNRE4DTdrVVg7je8U7pnpCThlmF5eGtpaT2CilVsRVXNudhv1aMRr5P6isf2M0prRatmTqTS9pL013H6T9iYdqPH9jgUT5lMDoOLeSKDWACU224ZGS8Z2LDwMfj27lD7t5XQO+84+IxqY264dnpm/faZXZ7EsvqE1Imb9QRW3BaYqkZR3JkfVaPE7qxu1ke9xp/NcRCdFvIl8hkKSFn27BBbqdXQaxHbA==; 5:zVAO4wrDwVmUHdA/HSzv/PkNBxcEnSSgX3kk7jiW/eBI2kg7ReK7hLvvamIivH9wU524z70XAUN0OkOb5JaRvIeUG0mcra0iRlOblJ7++n5LHL+/GyF+qlb4EfBrmQ98h/AHLgo9rUpj2lRFJ/wsEw==; 24:BY3fFGDJg4WVY88FgQ64PctL7fUqSBd0IpaWDCRilWdTH/zvAUUTdZtPTvx2rKl5Am7bxviaY2fPeyCSPfpHjDp187uDb0uCxRkTEX31S5Q=; 7:Q0/bi7s5DnTf690bDf4tB6LflKXLMKImlVahxs8bG+pv64ZwiVtUFv82QKf5fgJ5BRO1OSVZBqRqKNbGlrYz1/unyppZMWnEAbXuI6ZJ0+hDoDCEWcdLEeGxYejEdz5JM5QTI984UMcI23lwpbEgom0c68H58evV5zAd7JPN7ftvm7ih7OV8kB/tSuylaWpBB5IfBSvvZes23HVO2L9Yxm/6JKpXvUvKyXty9pCBs7Y= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR12MB0145; 20:IjhyE83s2QLnGzXxx0QPosGryqFhCaeuwHKMBKMl5Wz7Gc/Zvo12bT98USe48K8r6E5soRYil68/wItfXJlxtxLW0JR9xWOD5PQd34hCMsEj7aIAxqbycWQkoBxrXcmaVAeEkWetsAKT15I771hWGJBPU4hQHdFWDAyEyzdGgjUj4Srds+8TF5k0nmicQf6brDiJ/QBzXzaDf0svVGwBmRgcL5b3p4vcfAaTtWOXs7h31h0rdPEZ8AXiVD89vI+Y X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Aug 2017 11:37:12.0961 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR12MB0145 Subject: [PATCH v2 07/23] OvmfPkg/Virtio10Dxe: 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() -> EFI_PCI_IO_PROTOCOL.AllocateBuffer() - VIRTIO_DEVICE_PROTOCOL.FreeSharedPages() -> EFI_PCI_IO_PROTOCOL.FreeBuffer() - VIRTIO_DEVICE_PROTOCOL.MapSharedBuffer() -> EFI_PCI_IO_PROTOCOL.Map() - VIRTIO_DEVICE_PROTOCOL.UnmapSharedBuffer() -> EFI_PCI_IO_PROTOCOL.Unmap() 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/Virtio10Dxe/Virtio10.c | 121 +++++++++++++++++++- 1 file changed, 119 insertions(+), 2 deletions(-) diff --git a/OvmfPkg/Virtio10Dxe/Virtio10.c b/OvmfPkg/Virtio10Dxe/Virtio10.c index 43dcfd7cb2a4..413ffa06cf35 100644 --- a/OvmfPkg/Virtio10Dxe/Virtio10.c +++ b/OvmfPkg/Virtio10Dxe/Virtio10.c @@ -2,6 +2,7 @@ A non-transitional driver for VirtIo 1.0 PCI devices. Copyright (C) 2016, Red Hat, Inc. + 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,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -772,6 +774,117 @@ Virtio10ReadDevice ( return Status; } +STATIC +EFI_STATUS +EFIAPI +Virtio10AllocateSharedPages ( + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN Pages, + IN OUT VOID **HostAddress + ) +{ + VIRTIO_1_0_DEV *Dev; + EFI_STATUS Status; + + Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); + + Status = Dev->PciIo->AllocateBuffer ( + Dev->PciIo, + AllocateAnyPages, + EfiBootServicesData, + Pages, + HostAddress, + EFI_PCI_ATTRIBUTE_MEMORY_CACHED + ); + return Status; +} + +STATIC +VOID +EFIAPI +Virtio10FreeSharedPages ( + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN Pages, + IN VOID *HostAddress + ) +{ + VIRTIO_1_0_DEV *Dev; + + Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); + + Dev->PciIo->FreeBuffer ( + Dev->PciIo, + Pages, + HostAddress + ); +} + +STATIC +EFI_STATUS +EFIAPI +Virtio10MapSharedBuffer ( + 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 Status; + VIRTIO_1_0_DEV *Dev; + EFI_PCI_IO_PROTOCOL_OPERATION PciIoOperation; + + Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); + + // + // Map VIRTIO_MAP_OPERATION to EFI_PCI_IO_PROTOCOL_OPERATION + // + switch (Operation) { + case VirtioOperationBusMasterRead: + PciIoOperation = EfiPciIoOperationBusMasterRead; + break; + case VirtioOperationBusMasterWrite: + PciIoOperation = EfiPciIoOperationBusMasterWrite; + break; + case VirtioOperationBusMasterCommonBuffer: + PciIoOperation = EfiPciIoOperationBusMasterCommonBuffer; + break; + default: + return EFI_INVALID_PARAMETER; + } + + Status = Dev->PciIo->Map ( + Dev->PciIo, + PciIoOperation, + HostAddress, + NumberOfBytes, + DeviceAddress, + Mapping + ); + return Status; +} + +STATIC +EFI_STATUS +EFIAPI +Virtio10UnmapSharedBuffer ( + IN VIRTIO_DEVICE_PROTOCOL *This, + IN VOID *Mapping + ) +{ + EFI_STATUS Status; + VIRTIO_1_0_DEV *Dev; + + Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); + + Status = Dev->PciIo->Unmap ( + Dev->PciIo, + Mapping + ); + + return Status; +} STATIC CONST VIRTIO_DEVICE_PROTOCOL mVirtIoTemplate = { VIRTIO_SPEC_REVISION (1, 0, 0), @@ -788,7 +901,11 @@ STATIC CONST VIRTIO_DEVICE_PROTOCOL mVirtIoTemplate = { Virtio10GetDeviceStatus, Virtio10SetDeviceStatus, Virtio10WriteDevice, - Virtio10ReadDevice + Virtio10ReadDevice, + Virtio10AllocateSharedPages, + Virtio10FreeSharedPages, + Virtio10MapSharedBuffer, + Virtio10UnmapSharedBuffer }; @@ -906,7 +1023,7 @@ Virtio10BindingStart ( goto ClosePciIo; } - SetAttributes = EFI_PCI_IO_ATTRIBUTE_BUS_MASTER; + SetAttributes = EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE; UpdateAttributes (&Device->CommonConfig, &SetAttributes); UpdateAttributes (&Device->NotifyConfig, &SetAttributes); UpdateAttributes (&Device->SpecificConfig, &SetAttributes); -- 2.7.4