]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdePkg/BaseIoLibIntrinsic: Add EBC support
authorMichael Kinney <michael.d.kinney@intel.com>
Mon, 14 Dec 2015 06:11:17 +0000 (06:11 +0000)
committermdkinney <mdkinney@Edk2>
Mon, 14 Dec 2015 06:11:17 +0000 (06:11 +0000)
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 <liming.gao@intel.com>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Michael Kinney <michael.d.kinney@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19234 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
MdePkg/Library/BaseIoLibIntrinsic/IoLibEbc.c [new file with mode: 0644]
MdePkg/MdePkg.dsc

index d9529eb2e63fced7adcf61ec2017b25a69a6a0db..29b9e8bdfdfac1aa17c72f5368407c43e1f77ae3 100644 (file)
@@ -3,9 +3,10 @@
 #\r
 #  I/O Library that uses compiler intrinsics to perform IN and OUT instructions\r
 #  for IA-32 and x64.  On IPF, I/O port requests are translated into MMIO requests.\r
 #\r
 #  I/O Library that uses compiler intrinsics to perform IN and OUT instructions\r
 #  for IA-32 and x64.  On IPF, I/O port requests are translated into MMIO requests.\r
-#  MMIO requests are forwarded directly to memory.\r
+#  MMIO requests are forwarded directly to memory.  For EBC, I/O port requests\r
+#  ASSERT().\r
 #\r
 #\r
-#  Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>\r
+#  Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
 #  Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
 #\r
 #  This program and the accompanying materials\r
 #  Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
 #\r
 #  This program and the accompanying materials\r
@@ -29,7 +30,7 @@
 \r
 \r
 #\r
 \r
 \r
 #\r
-#  VALID_ARCHITECTURES           = IA32 X64 IPF ARM AARCH64\r
+#  VALID_ARCHITECTURES           = IA32 X64 EBC IPF ARM AARCH64\r
 #\r
 \r
 [Sources]\r
 #\r
 \r
 [Sources]\r
   IoLibIcc.c    | INTEL\r
   IoLib.c\r
 \r
   IoLibIcc.c    | INTEL\r
   IoLib.c\r
 \r
+[Sources.EBC]\r
+  IoLibEbc.c\r
+  IoLib.c\r
+\r
 [Sources.IPF]\r
   IoLibIpf.c\r
 \r
 [Sources.IPF]\r
   IoLibIpf.c\r
 \r
diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibEbc.c b/MdePkg/Library/BaseIoLibIntrinsic/IoLibEbc.c
new file mode 100644 (file)
index 0000000..991c1e0
--- /dev/null
@@ -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;
+}
index 4ea367ccc070fe51cd66e284bc377233b7d09a8b..473df4d886b5b10442ae5fe987bd2c47de5b7e27 100644 (file)
   MdePkg/Library/DxeTimerLibEsal/DxeTimerLibEsal.inf  \r
   \r
 [Components.EBC]\r
   MdePkg/Library/DxeTimerLibEsal/DxeTimerLibEsal.inf  \r
   \r
 [Components.EBC]\r
+  MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf\r
   MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf\r
 \r
 [Components.ARM, Components.AARCH64]\r
   MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf\r
 \r
 [Components.ARM, Components.AARCH64]\r