]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseIoLibIntrinsic/IoLib.c
MdePkg: Replace Opcode with the corresponding instructions.
[mirror_edk2.git] / MdePkg / Library / BaseIoLibIntrinsic / IoLib.c
index 7f34ecd2689ea210f61b14aa5ffc958c52f3fb93..9d42e21a691c6ee9719a6d1d2ab42d14ba07c8eb 100644 (file)
@@ -1,14 +1,8 @@
 /** @file\r
   Common I/O Library routines.\r
 \r
-  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php.\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -32,7 +26,7 @@
 UINT64\r
 EFIAPI\r
 IoRead64 (\r
-  IN      UINTN                     Port\r
+  IN      UINTN  Port\r
   )\r
 {\r
   ASSERT (FALSE);\r
@@ -58,15 +52,14 @@ IoRead64 (
 UINT64\r
 EFIAPI\r
 IoWrite64 (\r
-  IN      UINTN                     Port,\r
-  IN      UINT64                    Value\r
+  IN      UINTN   Port,\r
+  IN      UINT64  Value\r
   )\r
 {\r
   ASSERT (FALSE);\r
   return 0;\r
 }\r
 \r
-\r
 /**\r
   Reads an 8-bit MMIO register.\r
 \r
@@ -84,14 +77,20 @@ IoWrite64 (
 UINT8\r
 EFIAPI\r
 MmioRead8 (\r
-  IN      UINTN                     Address\r
+  IN      UINTN  Address\r
   )\r
 {\r
-  UINT8                             Value;\r
+  UINT8    Value;\r
+  BOOLEAN  Flag;\r
 \r
-  MemoryFence ();\r
-  Value = *(volatile UINT8*)Address;\r
-  MemoryFence ();\r
+  Flag = FilterBeforeMmIoRead (FilterWidth8, Address, &Value);\r
+  if (Flag) {\r
+    MemoryFence ();\r
+    Value = *(volatile UINT8 *)Address;\r
+    MemoryFence ();\r
+  }\r
+\r
+  FilterAfterMmIoRead (FilterWidth8, Address, &Value);\r
 \r
   return Value;\r
 }\r
@@ -114,13 +113,20 @@ MmioRead8 (
 UINT8\r
 EFIAPI\r
 MmioWrite8 (\r
-  IN      UINTN                     Address,\r
-  IN      UINT8                     Value\r
+  IN      UINTN  Address,\r
+  IN      UINT8  Value\r
   )\r
 {\r
-  MemoryFence ();\r
-  *(volatile UINT8*)Address = Value;\r
-  MemoryFence ();\r
+  BOOLEAN  Flag;\r
+\r
+  Flag = FilterBeforeMmIoWrite (FilterWidth8, Address, &Value);\r
+  if (Flag) {\r
+    MemoryFence ();\r
+    *(volatile UINT8 *)Address = Value;\r
+    MemoryFence ();\r
+  }\r
+\r
+  FilterAfterMmIoWrite (FilterWidth8, Address, &Value);\r
 \r
   return Value;\r
 }\r
@@ -143,16 +149,21 @@ MmioWrite8 (
 UINT16\r
 EFIAPI\r
 MmioRead16 (\r
-  IN      UINTN                     Address\r
+  IN      UINTN  Address\r
   )\r
 {\r
-  UINT16                            Value;\r
+  UINT16   Value;\r
+  BOOLEAN  Flag;\r
 \r
   ASSERT ((Address & 1) == 0);\r
+  Flag = FilterBeforeMmIoRead (FilterWidth16, Address, &Value);\r
+  if (Flag) {\r
+    MemoryFence ();\r
+    Value = *(volatile UINT16 *)Address;\r
+    MemoryFence ();\r
+  }\r
 \r
-  MemoryFence ();\r
-  Value = *(volatile UINT16*)Address;\r
-  MemoryFence ();\r
+  FilterAfterMmIoRead (FilterWidth16, Address, &Value);\r
 \r
   return Value;\r
 }\r
@@ -176,15 +187,22 @@ MmioRead16 (
 UINT16\r
 EFIAPI\r
 MmioWrite16 (\r
-  IN      UINTN                     Address,\r
-  IN      UINT16                    Value\r
+  IN      UINTN   Address,\r
+  IN      UINT16  Value\r
   )\r
 {\r
+  BOOLEAN  Flag;\r
+\r
   ASSERT ((Address & 1) == 0);\r
 \r
-  MemoryFence ();\r
-  *(volatile UINT16*)Address = Value;\r
-  MemoryFence ();\r
+  Flag = FilterBeforeMmIoWrite (FilterWidth16, Address, &Value);\r
+  if (Flag) {\r
+    MemoryFence ();\r
+    *(volatile UINT16 *)Address = Value;\r
+    MemoryFence ();\r
+  }\r
+\r
+  FilterAfterMmIoWrite (FilterWidth16, Address, &Value);\r
 \r
   return Value;\r
 }\r
@@ -207,16 +225,22 @@ MmioWrite16 (
 UINT32\r
 EFIAPI\r
 MmioRead32 (\r
-  IN      UINTN                     Address\r
+  IN      UINTN  Address\r
   )\r
 {\r
-  UINT32                            Value;\r
+  UINT32   Value;\r
+  BOOLEAN  Flag;\r
 \r
   ASSERT ((Address & 3) == 0);\r
 \r
-  MemoryFence ();\r
-  Value = *(volatile UINT32*)Address;\r
-  MemoryFence ();\r
+  Flag = FilterBeforeMmIoRead (FilterWidth32, Address, &Value);\r
+  if (Flag) {\r
+    MemoryFence ();\r
+    Value = *(volatile UINT32 *)Address;\r
+    MemoryFence ();\r
+  }\r
+\r
+  FilterAfterMmIoRead (FilterWidth32, Address, &Value);\r
 \r
   return Value;\r
 }\r
@@ -240,15 +264,22 @@ MmioRead32 (
 UINT32\r
 EFIAPI\r
 MmioWrite32 (\r
-  IN      UINTN                     Address,\r
-  IN      UINT32                    Value\r
+  IN      UINTN   Address,\r
+  IN      UINT32  Value\r
   )\r
 {\r
+  BOOLEAN  Flag;\r
+\r
   ASSERT ((Address & 3) == 0);\r
 \r
-  MemoryFence ();\r
-  *(volatile UINT32*)Address = Value;\r
-  MemoryFence ();\r
+  Flag = FilterBeforeMmIoWrite (FilterWidth32, Address, &Value);\r
+  if (Flag) {\r
+    MemoryFence ();\r
+    *(volatile UINT32 *)Address = Value;\r
+    MemoryFence ();\r
+  }\r
+\r
+  FilterAfterMmIoWrite (FilterWidth32, Address, &Value);\r
 \r
   return Value;\r
 }\r
@@ -271,16 +302,22 @@ MmioWrite32 (
 UINT64\r
 EFIAPI\r
 MmioRead64 (\r
-  IN      UINTN                     Address\r
+  IN      UINTN  Address\r
   )\r
 {\r
-  UINT64                            Value;\r
+  UINT64   Value;\r
+  BOOLEAN  Flag;\r
 \r
   ASSERT ((Address & 7) == 0);\r
 \r
-  MemoryFence ();\r
-  Value = *(volatile UINT64*)Address;\r
-  MemoryFence ();\r
+  Flag = FilterBeforeMmIoRead (FilterWidth64, Address, &Value);\r
+  if (Flag) {\r
+    MemoryFence ();\r
+    Value = *(volatile UINT64 *)Address;\r
+    MemoryFence ();\r
+  }\r
+\r
+  FilterAfterMmIoRead (FilterWidth64, Address, &Value);\r
 \r
   return Value;\r
 }\r
@@ -302,16 +339,22 @@ MmioRead64 (
 UINT64\r
 EFIAPI\r
 MmioWrite64 (\r
-  IN      UINTN                     Address,\r
-  IN      UINT64                    Value\r
+  IN      UINTN   Address,\r
+  IN      UINT64  Value\r
   )\r
 {\r
+  BOOLEAN  Flag;\r
+\r
   ASSERT ((Address & 7) == 0);\r
 \r
-  MemoryFence ();\r
-  *(volatile UINT64*)Address = Value;\r
-  MemoryFence ();\r
+  Flag = FilterBeforeMmIoWrite (FilterWidth64, Address, &Value);\r
+  if (Flag) {\r
+    MemoryFence ();\r
+    *(volatile UINT64 *)Address = Value;\r
+    MemoryFence ();\r
+  }\r
+\r
+  FilterAfterMmIoWrite (FilterWidth64, Address, &Value);\r
 \r
   return Value;\r
 }\r
-\r