Reviewed-by: Liming Gao <[email protected]>

-----Original Message-----
From: Kinney, Michael D 
Sent: Sunday, December 13, 2015 5:37 AM
To: [email protected]
Cc: Gao, Liming; Ni, Ruiyu
Subject: [Patch] MdePkg/BaseIoLibIntrinsic: Add EBC support

The EBC instruction set supports memory and MMIO access, but not I/O port 
access.  Add EBC support to BaseIoLibIntrinsic that generates an ASSERT() if 
the IoReadXX()/IoWriteXX() APIs are used.
This matches the implementation for other CPU types that do not support I/O 
port access.

Cc: Liming Gao <[email protected]>
Cc: Ruiyu Ni <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Michael Kinney <[email protected]>
---
 .../BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf      |  11 +-
 MdePkg/Library/BaseIoLibIntrinsic/IoLibEbc.c       | 171 +++++++++++++++++++++
 MdePkg/MdePkg.dsc                                  |   1 +
 3 files changed, 180 insertions(+), 3 deletions(-)  create mode 100644 
MdePkg/Library/BaseIoLibIntrinsic/IoLibEbc.c

diff --git a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf 
b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
index d9529eb..29b9e8b 100644
--- a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
+++ b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
@@ -3,9 +3,10 @@
 #
 #  I/O Library that uses compiler intrinsics to perform IN and OUT 
instructions  #  for IA-32 and x64.  On IPF, I/O port requests are translated 
into MMIO requests.
-#  MMIO requests are forwarded directly to memory.
+#  MMIO requests are forwarded directly to memory.  For EBC, I/O port 
+requests #  ASSERT().
 #
-#  Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) 2007 - 2015, Intel Corporation. All rights 
+reserved.<BR>
 #  Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>  #  
#  This program and the accompanying materials @@ -29,7 +30,7 @@
 
 
 #
-#  VALID_ARCHITECTURES           = IA32 X64 IPF ARM AARCH64
+#  VALID_ARCHITECTURES           = IA32 X64 EBC IPF ARM AARCH64
 #
 
 [Sources]
@@ -49,6 +50,10 @@
   IoLibIcc.c    | INTEL
   IoLib.c
 
+[Sources.EBC]
+  IoLibEbc.c
+  IoLib.c
+
 [Sources.IPF]
   IoLibIpf.c
 
diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibEbc.c 
b/MdePkg/Library/BaseIoLibIntrinsic/IoLibEbc.c
new file mode 100644
index 0000000..991c1e0
--- /dev/null
+++ b/MdePkg/Library/BaseIoLibIntrinsic/IoLibEbc.c
@@ -0,0 +1,171 @@
+/** @file
+  I/O Library for EBC. 
+  
+  EBC does not support port I/O.  All APIs in this file ASSERT().
+
+  Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>  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.
+
+**/
+
+#include "BaseIoLibIntrinsicInternal.h"
+
+/**
+  Reads an 8-bit I/O port.
+
+  Reads the 8-bit I/O port specified by Port. The 8-bit read value is returned.
+  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.
+
+  @return The value read.
+
+**/
+UINT8
+EFIAPI
+IoRead8 (
+  IN      UINTN                     Port
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+/**
+  Writes an 8-bit I/O port.
+
+  Writes the 8-bit I/O port specified by Port with the value specified 
+ by Value  and returns Value. 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 write.
+  @param  Value The value to write to the I/O port.
+
+  @return The value written to the I/O port.
+
+**/
+UINT8
+EFIAPI
+IoWrite8 (
+  IN      UINTN                     Port,
+  IN      UINT8                     Value
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+/**
+  Reads a 16-bit I/O port.
+
+  Reads the 16-bit I/O port specified by Port. The 16-bit read value is 
returned.
+  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().
+  If Port is not aligned on a 16-bit boundary, then ASSERT().
+
+  @param  Port  The I/O port to read.
+
+  @return The value read.
+
+**/
+UINT16
+EFIAPI
+IoRead16 (
+  IN      UINTN                     Port
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+/**
+  Writes a 16-bit I/O port.
+
+  Writes the 16-bit I/O port specified by Port with the value specified 
+ by Value  and returns Value. 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().
+  If Port is not aligned on a 16-bit boundary, then ASSERT().
+  
+  @param  Port  The I/O port to write.
+  @param  Value The value to write to the I/O port.
+
+  @return The value written to the I/O port.
+
+**/
+UINT16
+EFIAPI
+IoWrite16 (
+  IN      UINTN                     Port,
+  IN      UINT16                    Value
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+/**
+  Reads a 32-bit I/O port.
+
+  Reads the 32-bit I/O port specified by Port. The 32-bit read value is 
returned.
+  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().
+  If Port is not aligned on a 32-bit boundary, then ASSERT().
+  
+  @param  Port  The I/O port to read.
+
+  @return The value read.
+
+**/
+UINT32
+EFIAPI
+IoRead32 (
+  IN      UINTN                     Port
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+/**
+  Writes a 32-bit I/O port.
+
+  Writes the 32-bit I/O port specified by Port with the value specified 
+ by Value  and returns Value. 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().
+  If Port is not aligned on a 32-bit boundary, then ASSERT().
+  
+  @param  Port  The I/O port to write.
+  @param  Value The value to write to the I/O port.
+
+  @return The value written to the I/O port.
+
+**/
+UINT32
+EFIAPI
+IoWrite32 (
+  IN      UINTN                     Port,
+  IN      UINT32                    Value
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc index 4ea367c..473df4d 100644
--- a/MdePkg/MdePkg.dsc
+++ b/MdePkg/MdePkg.dsc
@@ -172,6 +172,7 @@
   MdePkg/Library/DxeTimerLibEsal/DxeTimerLibEsal.inf  
   
 [Components.EBC]
+  MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
   MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf
 
 [Components.ARM, Components.AARCH64]
--
2.6.3.windows.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to