From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on060b.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe4a::60b]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 6DB6C81B3E for ; Tue, 10 Jan 2017 19:37:05 -0800 (PST) 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=YGgqkqoGoNyPqt8c/93XRU1mvcNVXEpwAT0RyF2DHxA=; b=dDjfqidLZgxbOOoAdPdihRoXumLml7GtpAb9svoD4El5yT7tN/nIyd5eVCwMTj2bVGINtOlGXRkedgo7PfTq52FyTvxXBE8CQkEFQaRhZj9Zlsa6OnXBL4AIEqnmHuJrQXmil5OAId6qA8vZlWpemt/voa9okI1SrmGbDjFrRV4= Received: from DM5PR12MB1243.namprd12.prod.outlook.com (10.168.237.22) by BLUPR12MB0657.namprd12.prod.outlook.com (10.163.217.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.829.7; Wed, 11 Jan 2017 03:37:03 +0000 Received: from DM5PR12MB1243.namprd12.prod.outlook.com ([10.168.237.22]) by DM5PR12MB1243.namprd12.prod.outlook.com ([10.168.237.22]) with mapi id 15.01.0829.013; Wed, 11 Jan 2017 03:37:01 +0000 From: "Duran, Leo" To: "Gao, Liming" , "edk2-devel@lists.01.org" CC: "Singh, Brijesh" , "Justen, Jordan L" , "Kinney, Michael D" , "lersek@redhat.com" , "Fan, Jeff" Thread-Topic: [edk2] [PATCH 0/8] IoLib class library Thread-Index: AQHSa50d9SVIzO2mQUCxeACfCl7c3qEygHYAgAAddMA= Date: Wed, 11 Jan 2017 03:37:01 +0000 Message-ID: References: <1484092554-26224-1-git-send-email-leo.duran@amd.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14D6CCE7E@shsmsx102.ccr.corp.intel.com> In-Reply-To: <4A89E2EF3DFEDB4C8BFDE51014F606A14D6CCE7E@shsmsx102.ccr.corp.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=leo.duran@amd.com; x-originating-ip: [2605:6000:e7c4:2000:d0b9:4305:3e9e:2a45] x-microsoft-exchange-diagnostics: 1; BLUPR12MB0657; 7:WTPfNZ7eukUOVtwyGeFR166THfaNkGROz0hrmy4/JMzH/2X7Gjmb263thx5yePW6IN1+ZqfTOW92A3uv0G+9QH8uUkMBv3AL7Fv454tlq3FuUFDAOx7vmRqp3rBWWxxIs+eHEwvFkRjXFkpnvrwH72EAmUewNSSXuMqwhsefg2qX5IugeDhrTghgEAO7um62ddwwk98+HL+BS3XlnDuS9vVol6Zyumo0VVxvVt7+mB0m2lJPYpNBCp23jW2s3WmmTCOl5gqO362+VaqMl3P/cb7idr23uHmEwJ6Gim2r4KxfPQBlvyjPWmPyF+tMG0ElIWbHq/qtxSGB3l5jJSBDPzYijEGyHOnVB7W5FL3taaDnHoOIYoLzYjQggSu1LzL0q7d8uygNjNDvz9gki6uo0e5xDmrLNY3uzGcVYQFCEiWESPbpuytqiES6R0a3NW9vzoeWbWo1UPXi+BlozragxQ==; 20:iEuVphHAkSJVxU112N8DIKS8YuH+foUEyX8ulrJH7FGywH5aVy3ZPe5ZNR0wVqgqLMwnyFXmGOPkz8wXscwJu9t58C8TzPGMDRlKxLlGJ8qCh15IxdC8i2VHdQjmkv+t+kqaygs8Scn7HlHUkm9m0asRZjWb/gevEHHa5E7Ql7yquidXQw6uCekFz//wnq0Gbxwhs1X5gBSbDuddYjZL/LgBn+S6HaZdnTQX565pLUYaCzeSN6Y99XgNB6oFsDSp x-forefront-antispam-report: SFV:SKI; SCL:-1SFV:NSPM; SFS:(10009020)(979002)(6009001)(6029001)(7916002)(39850400002)(39860400002)(39410400002)(39840400002)(39450400003)(189002)(13464003)(377454003)(199003)(2950100002)(229853002)(9686003)(25786008)(92566002)(38730400001)(77096006)(99286003)(54906002)(6436002)(6306002)(6506006)(55016002)(74316002)(3280700002)(3660700001)(4326007)(122556002)(2906002)(68736007)(2501003)(5001770100001)(97736004)(189998001)(50986999)(54356999)(86362001)(106356001)(81166006)(5660300001)(8936002)(305945005)(102836003)(6116002)(81156014)(2900100001)(8676002)(7696004)(106116001)(33656002)(7736002)(101416001)(76176999)(105586002)(19627235001)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR12MB0657; H:DM5PR12MB1243.namprd12.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; x-ms-office365-filtering-correlation-id: 29adb7f1-5f8f-4eeb-08b3-08d439d31a8c x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:BLUPR12MB0657; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(767451399110)(162533806227266)(228905959029699); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6055026)(6041248)(20161123562025)(20161123555025)(20161123564025)(20161123560025)(6072148); SRVR:BLUPR12MB0657; BCL:0; PCL:0; RULEID:; SRVR:BLUPR12MB0657; x-forefront-prvs: 01842C458A received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Jan 2017 03:37:01.1419 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR12MB0657 Subject: Re: [PATCH 0/8] IoLib class library X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 Jan 2017 03:37:05 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Liming... > -----Original Message----- > From: Gao, Liming [mailto:liming.gao@intel.com] > Sent: Tuesday, January 10, 2017 7:42 PM > To: Duran, Leo ; edk2-devel@lists.01.org > Cc: Singh, Brijesh ; Justen, Jordan L > ; Kinney, Michael D > ; lersek@redhat.com; Fan, Jeff > > Subject: RE: [edk2] [PATCH 0/8] IoLib class library >=20 > Leo: > Thanks for your update. Here is my comments. > 1) PeiIoLib, DxeIoLibCpuIo, DxeIoLibCpuIo2 library instance can base on C= PU > IO service to do FifoIo operation. They don't implement them again. > 2) IntelFrameworkModulePkg CpuIoDxe and UefiCpuPkg CpuIoPei driver can > be updated to base on FifoIo API for their FifoIo implementation. [Duran, Leo] I actually considered that, but the CPU I/O driver does not pr= ovide FiFiIo service in its implementation of the EFI_CPU_IO2_PROTOCOL. The CPU I/O driver does use the Fifo routines internally, and it does so wh= en that caller request IoRead/IoWrite... see the CPU I/O service routines b= elow. > 3) One coding style issue. We don't assign value to the variable declarat= ion. > UINT8 *Buffer8 =3D (UINT8 *)Buffer; > =3D=3D> > UINT8 *Buffer8; > Buffer8 =3D (UINT8 *)Buffer; [Duran, Leo] OK, I'll change that. >=20 > Thanks > Liming [Duran, Leo] EFI_STATUS EFIAPI CpuIoServiceRead ( IN EFI_CPU_IO2_PROTOCOL *This, IN EFI_CPU_IO_PROTOCOL_WIDTH Width, IN UINT64 Address, IN UINTN Count, OUT VOID *Buffer ) { EFI_STATUS Status; UINT8 InStride; UINT8 OutStride; EFI_CPU_IO_PROTOCOL_WIDTH OperationWidth; UINT8 *Uint8Buffer; Status =3D CpuIoCheckParameter (FALSE, Width, Address, Count, Buffer); if (EFI_ERROR (Status)) { return Status; } // // Select loop based on the width of the transfer // InStride =3D mInStride[Width]; OutStride =3D mOutStride[Width]; OperationWidth =3D (EFI_CPU_IO_PROTOCOL_WIDTH) (Width & 0x03); #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64) if (InStride =3D=3D 0) { switch (OperationWidth) { case EfiCpuIoWidthUint8: IoReadFifo8 ((UINTN)Address, Count, Buffer); return EFI_SUCCESS; case EfiCpuIoWidthUint16: IoReadFifo16 ((UINTN)Address, Count, Buffer); return EFI_SUCCESS; case EfiCpuIoWidthUint32: IoReadFifo32 ((UINTN)Address, Count, Buffer); return EFI_SUCCESS; default: // // The CpuIoCheckParameter call above will ensure that this // path is not taken. // ASSERT (FALSE); break; } } #endif for (Uint8Buffer =3D Buffer; Count > 0; Address +=3D InStride, Uint8Buffe= r +=3D OutStride, Count--) { if (OperationWidth =3D=3D EfiCpuIoWidthUint8) { *Uint8Buffer =3D IoRead8 ((UINTN)Address); } else if (OperationWidth =3D=3D EfiCpuIoWidthUint16) { *((UINT16 *)Uint8Buffer) =3D IoRead16 ((UINTN)Address); } else if (OperationWidth =3D=3D EfiCpuIoWidthUint32) { *((UINT32 *)Uint8Buffer) =3D IoRead32 ((UINTN)Address); } } return EFI_SUCCESS; } EFI_STATUS EFIAPI CpuIoServiceWrite ( IN EFI_CPU_IO2_PROTOCOL *This, IN EFI_CPU_IO_PROTOCOL_WIDTH Width, IN UINT64 Address, IN UINTN Count, IN VOID *Buffer ) { EFI_STATUS Status; UINT8 InStride; UINT8 OutStride; EFI_CPU_IO_PROTOCOL_WIDTH OperationWidth; UINT8 *Uint8Buffer; // // Make sure the parameters are valid // Status =3D CpuIoCheckParameter (FALSE, Width, Address, Count, Buffer); if (EFI_ERROR (Status)) { return Status; } // // Select loop based on the width of the transfer // InStride =3D mInStride[Width]; OutStride =3D mOutStride[Width]; OperationWidth =3D (EFI_CPU_IO_PROTOCOL_WIDTH) (Width & 0x03); #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64) if (InStride =3D=3D 0) { switch (OperationWidth) { case EfiCpuIoWidthUint8: IoWriteFifo8 ((UINTN)Address, Count, Buffer); return EFI_SUCCESS; case EfiCpuIoWidthUint16: IoWriteFifo16 ((UINTN)Address, Count, Buffer); return EFI_SUCCESS; case EfiCpuIoWidthUint32: IoWriteFifo32 ((UINTN)Address, Count, Buffer); return EFI_SUCCESS; default: // // The CpuIoCheckParameter call above will ensure that this // path is not taken. // ASSERT (FALSE); break; } } #endif for (Uint8Buffer =3D (UINT8 *)Buffer; Count > 0; Address +=3D InStride, U= int8Buffer +=3D OutStride, Count--) { if (OperationWidth =3D=3D EfiCpuIoWidthUint8) { IoWrite8 ((UINTN)Address, *Uint8Buffer); } else if (OperationWidth =3D=3D EfiCpuIoWidthUint16) { IoWrite16 ((UINTN)Address, *((UINT16 *)Uint8Buffer)); } else if (OperationWidth =3D=3D EfiCpuIoWidthUint32) { IoWrite32 ((UINTN)Address, *((UINT32 *)Uint8Buffer)); } } =20 return EFI_SUCCESS; } > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of > Leo Duran > Sent: Wednesday, January 11, 2017 7:56 AM > To: edk2-devel@lists.01.org > Cc: brijesh.singh@amd.com; Justen, Jordan L ; > Gao, Liming ; Leo Duran ; > Kinney, Michael D ; lersek@redhat.com; Fan, > Jeff > Subject: [edk2] [PATCH 0/8] IoLib class library >=20 > The UefiCpuPkg/CpuIo2Dxe driver and the QemuCfgLib library have > duplicate implementations of I/O Fifo routines. The patch series moves th= e > I/O Fifo routines into the BaseIoLibIntrinsic library and expands the IoL= ib class > to include the ported I/O Fifo routines. >=20 > The Fifo routines moved from the UefiCpuPkg/CpuIo2Dxe driver support > IA32 and X64 natively, and other architectures are supported by simply > looping through the basic IoRead/IoWrite routines as appropiate. >=20 > The intent of this patch series is twofold: > 1) Integrate I/O Fifo routines into the IoLib class library. > 2) Allow override of IoLib as may be required to support specific hardwar= e > implementations, such as AMD's Secure Encrypted Virtualization (SEV). >=20 > Leo Duran (8): > MdePkg: Expand BaseIoLibIntrinsic (IoLib class) library > MdePkg/DxeIoLibCpuIo2: Add new Fifo routines in IoLib class > MdePkg/DxeIoLibEsal: Add new Fifo routines in IoLib class > MdePkg/PeiIoLibCpuIo: Add new Fifo routines in IoLib class > MdePkg/SmmIoLibSmmCpuIo2: Add new Fifo routines in IoLib class > IntelFrameworkPkg/DxeIoLibCpuIo: Add new Fifo routines in IoLib class > UefiCpuPkg: Modify CpuIo2Dxe to use new IoLib class library > OvmfPkg: Modify QemuFwCfgLib to use new IoLib class library >=20 > IntelFrameworkPkg/Library/DxeIoLibCpuIo/IoLib.c | 203 > +++++++++++++++++++++ > MdePkg/Include/Library/IoLib.h | 158 +++++++++++++++= + > .../BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf | 6 +- > .../Library/BaseIoLibIntrinsic}/Ia32/IoFifo.asm | 1 + > .../Library/BaseIoLibIntrinsic}/Ia32/IoFifo.nasm | 1 + > MdePkg/Library/BaseIoLibIntrinsic/IoLibArm.c | 182 > ++++++++++++++++++ > MdePkg/Library/BaseIoLibIntrinsic/IoLibEbc.c | 179 > ++++++++++++++++++ > MdePkg/Library/BaseIoLibIntrinsic/IoLibIpf.c | 201 > ++++++++++++++++++++ > .../Library/BaseIoLibIntrinsic}/X64/IoFifo.asm | 1 + > .../Library/BaseIoLibIntrinsic}/X64/IoFifo.nasm | 1 + > MdePkg/Library/DxeIoLibCpuIo2/IoLib.c | 203 > +++++++++++++++++++++ > MdePkg/Library/DxeIoLibEsal/IoLib.c | 203 > +++++++++++++++++++++ > MdePkg/Library/PeiIoLibCpuIo/IoLib.c | 203 > +++++++++++++++++++++ > MdePkg/Library/SmmIoLibSmmCpuIo2/IoLib.c | 203 > +++++++++++++++++++++ > OvmfPkg/Library/QemuFwCfgLib/Ia32/IoLibExAsm.nasm | 55 ------ > OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c | 54 +----- > OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.inf | 7 +- > OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgSecLib.inf | 7 +- > OvmfPkg/Library/QemuFwCfgLib/X64/IoLibExAsm.nasm | 52 ------ > UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.c | 3 +- > UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf | 11 +- > UefiCpuPkg/CpuIo2Dxe/IoFifo.h | 176 ---------------= --- > 22 files changed, 1751 insertions(+), 359 deletions(-) rename > {UefiCpuPkg/CpuIo2Dxe =3D> > MdePkg/Library/BaseIoLibIntrinsic}/Ia32/IoFifo.asm (94%) rename > {UefiCpuPkg/CpuIo2Dxe =3D> > MdePkg/Library/BaseIoLibIntrinsic}/Ia32/IoFifo.nasm (94%) rename > {UefiCpuPkg/CpuIo2Dxe =3D> > MdePkg/Library/BaseIoLibIntrinsic}/X64/IoFifo.asm (95%) rename > {UefiCpuPkg/CpuIo2Dxe =3D> > MdePkg/Library/BaseIoLibIntrinsic}/X64/IoFifo.nasm (95%) delete mode > 100644 OvmfPkg/Library/QemuFwCfgLib/Ia32/IoLibExAsm.nasm > delete mode 100644 > OvmfPkg/Library/QemuFwCfgLib/X64/IoLibExAsm.nasm > delete mode 100644 UefiCpuPkg/CpuIo2Dxe/IoFifo.h >=20 > -- > 1.9.1 >=20 > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel