From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on060d.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe41::60d]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id B0F258186F for ; Wed, 4 Jan 2017 15:08:07 -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=dSBSTT5uDoZa0Dm6F/weg/VfUmRkQRIVx0fts0ZFQ0I=; b=Oh3dluSu1KHLmcN6l2qXSZAAA3gk8f6erNt9XlyiShrPJsg/na1QO4j+qI53VT2HNLFhh6seh0vH9zzFHygCrWt6bju00q4KEJrG8D58vkp/0tr2shqhNcKAkgkUSTZaKUf3bUvUpa0VS2qZiQzmtPU3w2LWFSy06pzoGa9BmI8= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=leo.duran@amd.com; Received: from leduran-Precision-WorkStation-T5400.amd.com (165.204.77.1) by CY4PR12MB1237.namprd12.prod.outlook.com (10.168.167.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.817.10; Wed, 4 Jan 2017 23:08:05 +0000 From: Leo Duran To: CC: , , , , , Leo Duran Date: Wed, 4 Jan 2017 17:07:50 -0600 Message-ID: <1483571273-11187-2-git-send-email-leo.duran@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1483571273-11187-1-git-send-email-leo.duran@amd.com> References: <1483571273-11187-1-git-send-email-leo.duran@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: CY1PR08CA0011.namprd08.prod.outlook.com (10.163.94.149) To CY4PR12MB1237.namprd12.prod.outlook.com (10.168.167.12) X-MS-Office365-Filtering-Correlation-Id: 83d1d137-24cc-4295-5085-08d434f68a8b X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:CY4PR12MB1237; X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1237; 3:jjIJSOtH9Cg+fbiI983onHV8g718rjzDs4zQWoQ8vYHtoI2FHzasHj1lGEYKQuuU2VFiQhjef2Mb06/4K2Q5ms5/9bm8gB2B8rpv35MiVckdhS2Ri9SegJPUBJVy/7ShKCFVpn3om41LrPHLU3yH8OzYnxxTNPjjc8K8EGYstUsyU1zf7Ez5R759VH2nVPfoUt5WL80Zik6Gd3JomudklYwC/X4TYGOMXi0CS8dIjDJrCpQZEPWL/mkB+V2LvZNbUOor+V8KcaBJ8tuyiT1D5w==; 25:SdBWL5vvpoCCHpvd4NOLJle+8/n2ct0qg9e3/ciKyhYr3TWC4fboceits7BRePgO07NPJOh/D1PwsjVVikCzVIKaxK0TPbobOppOJISrdpsb/MR0K4nPiDSrJyTzNV+9IpXot8c1iqmFfcBfBPjbm2gp60dsQYdiXvK8MIz2qyTqXaCUkPVfuJFU8tDE4YoGef0BUdTbz+VCp+G0fpM6AmxccnsXAozjEXFF2K1eHCZKNCW0tnCJlh8vZeSIvBjMPRsn5RzxojY5WCTK3VJAmWRWaIF3hXMiLYeYzL4/XxMhLX2SmtFtez0OObDzwW9/IRPGGZgHkkruRaw+YkDyOtdK8h0bdYsNoWjstGkJ+ajUKHpb+GmSQAGXcusU0vupD72rIsiwt/BHu26WIeT8GAAH7Wqon7uIuL0qtLyZIRgPepWXoj+OWhhHfcFTB52v8Mf8CjG6QoGcPe8igcoSdw== X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1237; 31:6mK6EFklCSog02bKjZ0cLDWFB4dE4s3FapaMaGe6y8h15B61qnL+WOtH5GrcdQ2kx49SolmeehnrB2zn4jd3efLZ5c5C1sb0D1+Emr2/hPjKFZQqjZGTwNKIg1IrLB7xMetJjOsrO4WlzSHkh42tCp3GgqCFN+olnY+fGsjAuAvRPriXGve2ifwt4oWK5O3on930iLFMxYBLkcV0EIkwaRigEoHLqrQ/TSQgUUg0u9X0u++uHEV2hhuJbSjm5hnR; 20:wxs2YgG6U61Nddf5U11jxTLiIuh0Su5YmiOwY2VBaYZqsud+0CUwNHgh+hxvsQjMp6fHiUNo2g5Pg6/0TgmORfj5X15M6wtO34bVRy3/WqmQgqojiTc0avdZoJskurqpmd9isIU9jICVfkEc5NdVIdW/ZUZsvrNqReaO+q8FgPW7Z5UIXnZPCZFfqcCLhbMUbGMAhfIxE0DJTiI+X/htx2H/ZBnmr2+1AmLV6N/K/2ilBmtchuBXEr4RF1rCnT1ECVhm9+6o8UC4sPPKtFciRZiKtl+mMwppG5cbXsG1QhY4+b2OcUrHeClP+VuYwiuzU/9S6X/f3zepf2PAMfIr9HT+QongXB5GFWuD5JM3qZw3gU/8YjPFnb5C6nJVXya7kj6wpGfAh3uRSoXo61NxvaeKj/UQa1Bxct4xFVkddIIYQhEUiGeXRoo+rqe4zYtXbIOLAeIN2MgCys6kiBBdxHpi21DU0PYs6PlHGhh8y9Vxr4R3K+Btg63eYJGkiVKG X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6055026)(6041248)(20161123560025)(20161123555025)(20161123564025)(20161123562025)(20161123558021)(6072148); SRVR:CY4PR12MB1237; BCL:0; PCL:0; RULEID:; SRVR:CY4PR12MB1237; X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1237; 4:ofJZFDHRJ0MxxAUYRYo5BkltG/1DdrvrQH/kg73O3JUXTJlInhp6bIjeNwoB4KjZn0vdvz/yMhk/VwW3bOXe0fciupcdplFA32tY4JVtZDosvPPG+Ck2Dedam4G8RnkFs4OY8B0C0RhrDV+l7JWTmMWX81WsndYZRa5EwkVvZAmPsIUWxRrJmu7zgTQaSAyvbNjpKc7HCJ59piWijU045gpUUmSTJbUygOY6mcMSkbATib0j9t747+y634OIni1yb5geyKIDFyHlxPxA+laNMEfYG9jhhFeqa5UoOIA/bwif2OOKUGimicwXW6CcPSCCIUxFXeW6asnewaU+af15LxfMfBU4onhfaZNdrXrXuxABPFen3LAUgJDDCU1yPR48oHyWUHlyLPs0D7uk7POsPepAXqz18r/9L5IErYnHRp2FyEfTST+AqyIs3IP7sKXlx7TvFJfqCuEuEq69TtX7YnnNZQHLjuSOeyjf+Ba0JOCxc7Lmjg5Q6hU5nCAdvYkCMp68jtVX4VnCgM3CsuaclrSWZDMsEcpxhrefCbPONCTnCwBAm2kRdAzmt6jVWY0knOAuTodZLHzssag6XeMb0JBZZLlhdw17pm1RGxS5wUZe+OhJ+Heye28B7jxuD7UxeDNSdSKgLsH/QUwQK0XxGWU7L5MpS/X6CA88R7L1Csk= X-Forefront-PRVS: 0177904E6B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(6029001)(7916002)(39860400002)(39840400002)(39410400002)(39450400003)(39850400002)(189002)(199003)(6666003)(66066001)(48376002)(2351001)(5003940100001)(105586002)(189998001)(92566002)(50226002)(5660300001)(50466002)(54906002)(53416004)(97736004)(42186005)(25786008)(6486002)(6116002)(8676002)(47776003)(106356001)(38730400001)(101416001)(4326007)(2906002)(31430400001)(15395725005)(16799955002)(50986999)(81156014)(76176999)(2950100002)(81166006)(575784001)(15188155005)(110136003)(68736007)(305945005)(86362001)(3846002)(7736002)(36756003)(33646002)(6916009)(6306002)(19627235001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1237; H:leduran-Precision-WorkStation-T5400.amd.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A: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; CY4PR12MB1237; 23:prenip/342F2P4hEr/g9OpY60fwb+NVGg+R7CWU+W?= =?us-ascii?Q?k0d/0VLurKiq7+9wkZ2ZjAXtCVjDjkrzlOsubfs82LlJ6HdmC10uFHi4SQdg?= =?us-ascii?Q?cH7d2pQ40noIewbQyrkg5JHCga5ZRG3IOWAeC8ZgjlbDouQpGyWCpGkS4mGP?= =?us-ascii?Q?hw/5IzUmEIA0klBkLuLb9WJyBqbR1t/3L1xw5wb+40bYiZbE5wHCDm6px5O+?= =?us-ascii?Q?iIpNUtvbLyNvu3lZVliHQuGQpklqmv/5b1WLjv2Rr7nABhAyGjaOMtEL3qYz?= =?us-ascii?Q?OfWSIfHdp5sMwEchnBl1cPi+8T46Giicr/EI0lY5Z4GWkUVX43WwZI3Fblr3?= =?us-ascii?Q?Nw3PjOwbIa3DKpOryg5ltJFBL/KqR7CMoHaGqO6ajDazZpE2IaQaMjAMCJN1?= =?us-ascii?Q?nBOek89Yw1rbukXzfdxSQthN87WB2qulo8P9gDAicDl3+9P5msXX7nPp7A8p?= =?us-ascii?Q?mNSfgPtZ38yWmW0hqAwCVQMMqZ4NYLVMM5CNnmYl/P9VFKtq8GMD90auMwbW?= =?us-ascii?Q?bT7oMTHG0yMBnIlecCOkldpMDPxu9jJ+UciTfsiu5eWrfNB3M7Wa4wURf46a?= =?us-ascii?Q?x3/88I1tH2Wi8AjieLFCVRFnoNFTUkoHhfT0UevIHzKEykYSmpfwcK+mKZku?= =?us-ascii?Q?dZHTzGd1d+GJ9d/mRDKC1NVWt3xKhtDyy6ehSJq9FWdElbTm/x/5qd/loFvO?= =?us-ascii?Q?zXcQPlmdnpU6qPwB+0zw4Q4qOb9iK2cu+vFMFbslwyGqyhue+tWgFKmC9l+w?= =?us-ascii?Q?Y6i1PSmbwYcpk2lVJ5c3251fCVQT4RrCNlOxYz2vnUoORRcGBCYdyH4xLaUx?= =?us-ascii?Q?tC3hYqrAERpB84ntYZEGkyBqqE0tHSFqaAn4ISAoNadlEbfb3wbFor0mS4Ah?= =?us-ascii?Q?jtgDOuqjEzKbjQKcdcBqcMJPnDb+9Nrc6zn25OQ80ezT51Kj1oNsCDbhAvEO?= =?us-ascii?Q?T4OB7h2pymKQDIRiqw3e5CZvKu9Q07S2u1TIXXgHqDZoWdj3Fe44FEaBUpHC?= =?us-ascii?Q?UJQ4OHNLlv5+v5pAFxONS1up/9utUBNpIBHrFSMwOpNgynz3nI5WXCPX1+Y/?= =?us-ascii?Q?Jljrswwxrl8QYv+e2ixPeBoCqQaIdwTAq8JjXqS05oucgnkMEbcPG1vFZvA3?= =?us-ascii?Q?Z3tvPDW54AAK57BlnvNE1PRnhONQuTFhfqTOz6Q7WN4xq7sjLmSRyryNojUk?= =?us-ascii?Q?DmotU3AMGf7a4qpTSDG0AeYOV0f+NXlsxlW7Jcf8kNqoMo5Sj7O2YFDPeGqx?= =?us-ascii?Q?Tt8wwYAsPtwnTkhi6CECq79ZOgs9luhm77i0KbsESzPxrgMW7+I6dfCQls/z?= =?us-ascii?Q?WM92JeIPr+Lx5w09QfVCBvEXcWsF3yRLki7z4Foaqnxx24BQRgT6e8aW1cb6?= =?us-ascii?Q?3CJIPQKMKlCpq9SP1nAqXJWtoBLyEEI5rdTx7L6wZwUmjF8?= X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1237; 6:WFax/L3U4uMUI3QFC2Uq56uGb6Cwz2B7RYv7yyWzk+++zXVp/BDifWQh+duAXsgOCQJLJNlnExOqvBWLaNLpQcayrO0E6OELOD5RzODGJOePmcAcMuj7v9DBNyLDve7RHXplK7gPUv6biWY1GeVM62UAhH7YHsMD9A48WsODJTRMIq9uRmHJJgWzWyKA+e2LOJzzGuISwusmqVEg73Vw/sf7GoL4ZuceZ4EY4xobhVCXHNJHjxY8PfcZMsYW0X6mPrRxJdr/LANcJqPccNFCJgrvlIYpj/wRwDgqDPDv3R6qwDoffOmNv2RnWzGH2F/4KSNOGvnbfYzb61jbi3TgqoCZAcmsu7pWOAZrqXZHxGkiXuqL2PX4HX7w+Kh2YGnJAaY8WMNL0nALtElYlgpDwQw1XlM5RwphHGS/rtI6KgOtAX53DavtkDJQsxH1pllzPL9vcPvaelQIyCUKJPB58g==; 5:shP5zVCxfHaU0oDHW8yUSoy38Q73Oc4DzckRcPIUeDf66A+mbcpoXDNESflRoYdENXk37yYZADwss9TRMcEGEHT00bnRKhRIk9Z8T2VGb9YFmkXmrYZ2R+YDh3tsdjsLAkU5/uHhPGkEhkN/u96nikfQd/qaJKA3qyadflSqf+Q=; 24:LUqSPMokpP9oGZrykFmC/jxiS1aXZiRgZ4C0MDWHWK2PSBSgcXGMZYDRSncrMtRGm/g+FRuMAg+xaYV5+EfCUPwyOgoExdmovZphQFsnOeM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR12MB1237; 7:RF87SbHnu8YMRh6xYSVD+U/I9rkm/VIpJiSvJ84m29eUaxpyfcOqNaF4EOB3o49h7yImXU2XIIG4dfjTGOtbdcXJf3eNQ6v4O/m9qwhnKCZFWuYSHUGM+BOjLBvUQ6grXw9dh891dmaLhI43H24O4TUHI+r+ofm2nGCvcvu4iwmPDsQhPCOvO1PBHbEe2oepXGjvwvFePSiVye9FXt3hFz2apDpn17z7NW78xljH14lU4gJwUvJLhitv+2y1qCQ5hdixWiXEro6lp6G69G6v2262yYp8Gulg7wXfFtGX6nZlMCIOBGybkS1h6VZcOfC3Khohldf61BcgnjdR4gdgTUuYHtDDDTQvPE0AMkELeZyHUGViS8lW4cHDAH6Rg+uJy2HCMo1BsUzVF+7Fy8qWrrgpMK7c4l3pmWD+bs+IKRlD0YUvRpRfiZ8OPRNjBJk3TXprXMeAIsjHw6MLskBcHA==; 20:qEsETF+rlMk/fOChRGmmNbarEoqKIysyfmcCaA7di5rbxQ25GlfczVBn3XvATaMP+5gJUR4zxXP9kx++E3ScqIlmFZdHgRPZqDsCSTgnqk9Fj/WI9QfPtr6tZyVAJh9XYyITafT1WSCLXoiA/z701JVto4/qsFrpayovjBmn35Wz/vRQQZeF+YYZZSVE/1CSaJTEQbZa95MRxyM2+tQIpiAS6YrGibzVLNYkesZWnJ7zbaxJ3njd3nFi67WQxYuX X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jan 2017 23:08:05.4045 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1237 Subject: [PATCH 1/4] MdePkg: Add BaseIoFifoLib 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, 04 Jan 2017 23:08:08 -0000 Content-Type: text/plain The UefiCpuPkg/CpuIo2Dxe driver and the QemuCfgLib library have duplicate implementations of I/O Fifo routines. The patch moves the I/O Fifo routines into a common BaseIofifoLib library supporting IA32 and X64 architectures under MdePkg. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Brijesh Singh Reviewed-by: Leo Duran --- MdePkg/Include/Library/IoFifoLib.h | 175 +++++++++++++++++++++++++ MdePkg/Library/BaseIoFifoLib/BaseIoFifoLib.inf | 45 +++++++ MdePkg/Library/BaseIoFifoLib/Ia32/IoFifo.asm | 139 ++++++++++++++++++++ MdePkg/Library/BaseIoFifoLib/Ia32/IoFifo.nasm | 135 +++++++++++++++++++ MdePkg/Library/BaseIoFifoLib/X64/IoFifo.asm | 125 ++++++++++++++++++ MdePkg/Library/BaseIoFifoLib/X64/IoFifo.nasm | 124 ++++++++++++++++++ MdePkg/MdePkg.dec | 3 + MdePkg/MdePkg.dsc | 1 + 8 files changed, 747 insertions(+) create mode 100644 MdePkg/Include/Library/IoFifoLib.h create mode 100644 MdePkg/Library/BaseIoFifoLib/BaseIoFifoLib.inf create mode 100644 MdePkg/Library/BaseIoFifoLib/Ia32/IoFifo.asm create mode 100644 MdePkg/Library/BaseIoFifoLib/Ia32/IoFifo.nasm create mode 100644 MdePkg/Library/BaseIoFifoLib/X64/IoFifo.asm create mode 100644 MdePkg/Library/BaseIoFifoLib/X64/IoFifo.nasm diff --git a/MdePkg/Include/Library/IoFifoLib.h b/MdePkg/Include/Library/IoFifoLib.h new file mode 100644 index 0000000..eed8be1 --- /dev/null +++ b/MdePkg/Include/Library/IoFifoLib.h @@ -0,0 +1,175 @@ +/** @file + I/O FIFO routines + + Copyright (c) 2008 - 2012, Intel Corporation. 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 + distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef _IO_FIFO_H_INCLUDED_ +#define _IO_FIFO_H_INCLUDED_ + +/** + Reads an 8-bit I/O port fifo into a block of memory. + + Reads the 8-bit I/O fifo port specified by Port. + + The port is read Count times, and the read data is + stored in the provided Buffer. + + This function must guarantee that all I/O read and write operations are + serialized. + + If 8-bit I/O port operations are not supported, then ASSERT(). + + @param Port The I/O port to read. + @param Count The number of times to read I/O port. + @param Buffer The buffer to store the read data into. + +**/ +VOID +EFIAPI +IoReadFifo8 ( + IN UINTN Port, + IN UINTN Count, + OUT VOID *Buffer + ); + +/** + Reads a 16-bit I/O port fifo into a block of memory. + + Reads the 16-bit I/O fifo port specified by Port. + + The port is read Count times, and the read data is + stored in the provided Buffer. + + This function must guarantee that all I/O read and write operations are + serialized. + + If 16-bit I/O port operations are not supported, then ASSERT(). + + @param Port The I/O port to read. + @param Count The number of times to read I/O port. + @param Buffer The buffer to store the read data into. + +**/ +VOID +EFIAPI +IoReadFifo16 ( + IN UINTN Port, + IN UINTN Count, + OUT VOID *Buffer + ); + +/** + Reads a 32-bit I/O port fifo into a block of memory. + + Reads the 32-bit I/O fifo port specified by Port. + + The port is read Count times, and the read data is + stored in the provided Buffer. + + This function must guarantee that all I/O read and write operations are + serialized. + + If 32-bit I/O port operations are not supported, then ASSERT(). + + @param Port The I/O port to read. + @param Count The number of times to read I/O port. + @param Buffer The buffer to store the read data into. + +**/ +VOID +EFIAPI +IoReadFifo32 ( + IN UINTN Port, + IN UINTN Count, + OUT VOID *Buffer + ); + +/** + Writes a block of memory into an 8-bit I/O port fifo. + + Writes the 8-bit I/O fifo port specified by Port. + + The port is written Count times, and the write data is + retrieved from the provided Buffer. + + This function must guarantee that all I/O write and write operations are + serialized. + + If 8-bit I/O port operations are not supported, then ASSERT(). + + @param Port The I/O port to write. + @param Count The number of times to write I/O port. + @param Buffer The buffer to store the write data into. + +**/ +VOID +EFIAPI +IoWriteFifo8 ( + IN UINTN Port, + IN UINTN Count, + OUT VOID *Buffer + ); + +/** + Writes a block of memory into a 16-bit I/O port fifo. + + Writes the 16-bit I/O fifo port specified by Port. + + The port is written Count times, and the write data is + retrieved from the provided Buffer. + + This function must guarantee that all I/O write and write operations are + serialized. + + If 16-bit I/O port operations are not supported, then ASSERT(). + + @param Port The I/O port to write. + @param Count The number of times to write I/O port. + @param Buffer The buffer to store the write data into. + +**/ +VOID +EFIAPI +IoWriteFifo16 ( + IN UINTN Port, + IN UINTN Count, + OUT VOID *Buffer + ); + +/** + Writes a block of memory into a 32-bit I/O port fifo. + + Writes the 32-bit I/O fifo port specified by Port. + + The port is written Count times, and the write data is + retrieved from the provided Buffer. + + This function must guarantee that all I/O write and write operations are + serialized. + + If 32-bit I/O port operations are not supported, then ASSERT(). + + @param Port The I/O port to write. + @param Count The number of times to write I/O port. + @param Buffer The buffer to store the write data into. + +**/ +VOID +EFIAPI +IoWriteFifo32 ( + IN UINTN Port, + IN UINTN Count, + OUT VOID *Buffer + ); + +#endif diff --git a/MdePkg/Library/BaseIoFifoLib/BaseIoFifoLib.inf b/MdePkg/Library/BaseIoFifoLib/BaseIoFifoLib.inf new file mode 100644 index 0000000..63202b3 --- /dev/null +++ b/MdePkg/Library/BaseIoFifoLib/BaseIoFifoLib.inf @@ -0,0 +1,45 @@ +## @file +# Base I/O FiFo Library using REP string instructions. +# +# Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.
+# 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 distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# Derived from: +# UefiCpuPkg/CpuIo2Dxe +# +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = BaseIoFifoLib + FILE_GUID = 5591c2ef-cb95-4b56-a907-f057b1b96a3d + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = IoFifoLib + +# +# VALID_ARCHITECTURES = IA32 X64 +# + +[Sources.IA32] + Ia32/IoFifo.nasm + Ia32/IoFifo.asm + +[Sources.X64] + X64/IoFifo.nasm + X64/IoFifo.asm + +[Packages] + MdePkg/MdePkg.dec + +[LibraryClasses] + DebugLib + IoLib diff --git a/MdePkg/Library/BaseIoFifoLib/Ia32/IoFifo.asm b/MdePkg/Library/BaseIoFifoLib/Ia32/IoFifo.asm new file mode 100644 index 0000000..da8a1f2 --- /dev/null +++ b/MdePkg/Library/BaseIoFifoLib/Ia32/IoFifo.asm @@ -0,0 +1,139 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006 - 2012, Intel Corporation. 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 +; distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php. +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +;------------------------------------------------------------------------------ + + .586P + .model flat,C + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoReadFifo8 ( +; IN UINTN Port, +; IN UINTN Size, +; IN VOID *Buffer +; ); +;------------------------------------------------------------------------------ +IoReadFifo8 PROC + push edi + cld + mov dx, [esp + 8] + mov ecx, [esp + 12] + mov edi, [esp + 16] +rep insb + pop edi + ret +IoReadFifo8 ENDP + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoReadFifo16 ( +; IN UINTN Port, +; IN UINTN Size, +; IN VOID *Buffer +; ); +;------------------------------------------------------------------------------ +IoReadFifo16 PROC + push edi + cld + mov dx, [esp + 8] + mov ecx, [esp + 12] + mov edi, [esp + 16] +rep insw + pop edi + ret +IoReadFifo16 ENDP + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoReadFifo32 ( +; IN UINTN Port, +; IN UINTN Size, +; IN VOID *Buffer +; ); +;------------------------------------------------------------------------------ +IoReadFifo32 PROC + push edi + cld + mov dx, [esp + 8] + mov ecx, [esp + 12] + mov edi, [esp + 16] +rep insd + pop edi + ret +IoReadFifo32 ENDP + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoWriteFifo8 ( +; IN UINTN Port, +; IN UINTN Size, +; IN VOID *Buffer +; ); +;------------------------------------------------------------------------------ +IoWriteFifo8 PROC + push esi + cld + mov dx, [esp + 8] + mov ecx, [esp + 12] + mov esi, [esp + 16] +rep outsb + pop esi + ret +IoWriteFifo8 ENDP + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoWriteFifo16 ( +; IN UINTN Port, +; IN UINTN Size, +; IN VOID *Buffer +; ); +;------------------------------------------------------------------------------ +IoWriteFifo16 PROC + push esi + cld + mov dx, [esp + 8] + mov ecx, [esp + 12] + mov esi, [esp + 16] +rep outsw + pop esi + ret +IoWriteFifo16 ENDP + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoWriteFifo32 ( +; IN UINTN Port, +; IN UINTN Size, +; IN VOID *Buffer +; ); +;------------------------------------------------------------------------------ +IoWriteFifo32 PROC + push esi + cld + mov dx, [esp + 8] + mov ecx, [esp + 12] + mov esi, [esp + 16] +rep outsd + pop esi + ret +IoWriteFifo32 ENDP + + END diff --git a/MdePkg/Library/BaseIoFifoLib/Ia32/IoFifo.nasm b/MdePkg/Library/BaseIoFifoLib/Ia32/IoFifo.nasm new file mode 100644 index 0000000..8f6dd0d --- /dev/null +++ b/MdePkg/Library/BaseIoFifoLib/Ia32/IoFifo.nasm @@ -0,0 +1,135 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006 - 2012, Intel Corporation. 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 +; distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php. +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +;------------------------------------------------------------------------------ + + SECTION .text + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoReadFifo8 ( +; IN UINTN Port, +; IN UINTN Size, +; IN VOID *Buffer +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(IoReadFifo8) +ASM_PFX(IoReadFifo8): + push edi + cld + mov dx, [esp + 8] + mov ecx, [esp + 12] + mov edi, [esp + 16] +rep insb + pop edi + ret + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoReadFifo16 ( +; IN UINTN Port, +; IN UINTN Size, +; IN VOID *Buffer +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(IoReadFifo16) +ASM_PFX(IoReadFifo16): + push edi + cld + mov dx, [esp + 8] + mov ecx, [esp + 12] + mov edi, [esp + 16] +rep insw + pop edi + ret + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoReadFifo32 ( +; IN UINTN Port, +; IN UINTN Size, +; IN VOID *Buffer +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(IoReadFifo32) +ASM_PFX(IoReadFifo32): + push edi + cld + mov dx, [esp + 8] + mov ecx, [esp + 12] + mov edi, [esp + 16] +rep insd + pop edi + ret + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoWriteFifo8 ( +; IN UINTN Port, +; IN UINTN Size, +; IN VOID *Buffer +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(IoWriteFifo8) +ASM_PFX(IoWriteFifo8): + push esi + cld + mov dx, [esp + 8] + mov ecx, [esp + 12] + mov esi, [esp + 16] +rep outsb + pop esi + ret + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoWriteFifo16 ( +; IN UINTN Port, +; IN UINTN Size, +; IN VOID *Buffer +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(IoWriteFifo16) +ASM_PFX(IoWriteFifo16): + push esi + cld + mov dx, [esp + 8] + mov ecx, [esp + 12] + mov esi, [esp + 16] +rep outsw + pop esi + ret + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoWriteFifo32 ( +; IN UINTN Port, +; IN UINTN Size, +; IN VOID *Buffer +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(IoWriteFifo32) +ASM_PFX(IoWriteFifo32): + push esi + cld + mov dx, [esp + 8] + mov ecx, [esp + 12] + mov esi, [esp + 16] +rep outsd + pop esi + ret diff --git a/MdePkg/Library/BaseIoFifoLib/X64/IoFifo.asm b/MdePkg/Library/BaseIoFifoLib/X64/IoFifo.asm new file mode 100644 index 0000000..8714174 --- /dev/null +++ b/MdePkg/Library/BaseIoFifoLib/X64/IoFifo.asm @@ -0,0 +1,125 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006 - 2012, Intel Corporation. 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 +; distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php. +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +;------------------------------------------------------------------------------ + + .code + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoReadFifo8 ( +; IN UINTN Port, // rcx +; IN UINTN Size, // rdx +; IN VOID *Buffer // r8 +; ); +;------------------------------------------------------------------------------ +IoReadFifo8 PROC + cld + xchg rcx, rdx + xchg rdi, r8 ; rdi: buffer address; r8: save rdi +rep insb + mov rdi, r8 ; restore rdi + ret +IoReadFifo8 ENDP + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoReadFifo16 ( +; IN UINTN Port, // rcx +; IN UINTN Size, // rdx +; IN VOID *Buffer // r8 +; ); +;------------------------------------------------------------------------------ +IoReadFifo16 PROC + cld + xchg rcx, rdx + xchg rdi, r8 ; rdi: buffer address; r8: save rdi +rep insw + mov rdi, r8 ; restore rdi + ret +IoReadFifo16 ENDP + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoReadFifo32 ( +; IN UINTN Port, // rcx +; IN UINTN Size, // rdx +; IN VOID *Buffer // r8 +; ); +;------------------------------------------------------------------------------ +IoReadFifo32 PROC + cld + xchg rcx, rdx + xchg rdi, r8 ; rdi: buffer address; r8: save rdi +rep insd + mov rdi, r8 ; restore rdi + ret +IoReadFifo32 ENDP + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoWriteFifo8 ( +; IN UINTN Port, // rcx +; IN UINTN Size, // rdx +; IN VOID *Buffer // r8 +; ); +;------------------------------------------------------------------------------ +IoWriteFifo8 PROC + cld + xchg rcx, rdx + xchg rsi, r8 ; rsi: buffer address; r8: save rsi +rep outsb + mov rsi, r8 ; restore rsi + ret +IoWriteFifo8 ENDP + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoWriteFifo16 ( +; IN UINTN Port, // rcx +; IN UINTN Size, // rdx +; IN VOID *Buffer // r8 +; ); +;------------------------------------------------------------------------------ +IoWriteFifo16 PROC + cld + xchg rcx, rdx + xchg rsi, r8 ; rsi: buffer address; r8: save rsi +rep outsw + mov rsi, r8 ; restore rsi + ret +IoWriteFifo16 ENDP + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoWriteFifo32 ( +; IN UINTN Port, // rcx +; IN UINTN Size, // rdx +; IN VOID *Buffer // r8 +; ); +;------------------------------------------------------------------------------ +IoWriteFifo32 PROC + cld + xchg rcx, rdx + xchg rsi, r8 ; rsi: buffer address; r8: save rsi +rep outsd + mov rsi, r8 ; restore rsi + ret +IoWriteFifo32 ENDP + + END diff --git a/MdePkg/Library/BaseIoFifoLib/X64/IoFifo.nasm b/MdePkg/Library/BaseIoFifoLib/X64/IoFifo.nasm new file mode 100644 index 0000000..ef83f0e --- /dev/null +++ b/MdePkg/Library/BaseIoFifoLib/X64/IoFifo.nasm @@ -0,0 +1,124 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006 - 2012, Intel Corporation. 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 +; distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php. +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +;------------------------------------------------------------------------------ + + DEFAULT REL + SECTION .text + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoReadFifo8 ( +; IN UINTN Port, // rcx +; IN UINTN Size, // rdx +; IN VOID *Buffer // r8 +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(IoReadFifo8) +ASM_PFX(IoReadFifo8): + cld + xchg rcx, rdx + xchg rdi, r8 ; rdi: buffer address; r8: save rdi +rep insb + mov rdi, r8 ; restore rdi + ret + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoReadFifo16 ( +; IN UINTN Port, // rcx +; IN UINTN Size, // rdx +; IN VOID *Buffer // r8 +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(IoReadFifo16) +ASM_PFX(IoReadFifo16): + cld + xchg rcx, rdx + xchg rdi, r8 ; rdi: buffer address; r8: save rdi +rep insw + mov rdi, r8 ; restore rdi + ret + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoReadFifo32 ( +; IN UINTN Port, // rcx +; IN UINTN Size, // rdx +; IN VOID *Buffer // r8 +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(IoReadFifo32) +ASM_PFX(IoReadFifo32): + cld + xchg rcx, rdx + xchg rdi, r8 ; rdi: buffer address; r8: save rdi +rep insd + mov rdi, r8 ; restore rdi + ret + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoWriteFifo8 ( +; IN UINTN Port, // rcx +; IN UINTN Size, // rdx +; IN VOID *Buffer // r8 +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(IoWriteFifo8) +ASM_PFX(IoWriteFifo8): + cld + xchg rcx, rdx + xchg rsi, r8 ; rsi: buffer address; r8: save rsi +rep outsb + mov rsi, r8 ; restore rsi + ret + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoWriteFifo16 ( +; IN UINTN Port, // rcx +; IN UINTN Size, // rdx +; IN VOID *Buffer // r8 +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(IoWriteFifo16) +ASM_PFX(IoWriteFifo16): + cld + xchg rcx, rdx + xchg rsi, r8 ; rsi: buffer address; r8: save rsi +rep outsw + mov rsi, r8 ; restore rsi + ret + +;------------------------------------------------------------------------------ +; VOID +; EFIAPI +; IoWriteFifo32 ( +; IN UINTN Port, // rcx +; IN UINTN Size, // rdx +; IN VOID *Buffer // r8 +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(IoWriteFifo32) +ASM_PFX(IoWriteFifo32): + cld + xchg rcx, rdx + xchg rsi, r8 ; rsi: buffer address; r8: save rsi +rep outsd + mov rsi, r8 ; restore rsi + ret diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index f2bdb30..2e3a23b 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -254,6 +254,9 @@ # RngLib|Include/Library/RngLib.h + ## @libraryclass Provide services to access I/O Fifo Ports + IoFifoLib|Include/Library/IoFifoLib.h + [LibraryClasses.IPF] ## @libraryclass The SAL Library provides a service to make a SAL CALL. SalLib|Include/Library/SalLib.h diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc index b4575cd..ec1c847 100644 --- a/MdePkg/MdePkg.dsc +++ b/MdePkg/MdePkg.dsc @@ -155,6 +155,7 @@ MdePkg/Library/SmmMemLib/SmmMemLib.inf MdePkg/Library/BaseRngLib/BaseRngLib.inf MdePkg/Library/SmmPciExpressLib/SmmPciExpressLib.inf + MdePkg/Library/BaseIoFifoLib/BaseIoFifoLib.inf [Components.IPF] MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf -- 1.9.1