/** @file\r
Common I/O Library routines.\r
\r
- Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
)\r
{\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
+ FilterAfterMmIoRead (FilterWidth8, Address, &Value);\r
\r
return Value;\r
}\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
+ FilterAfterMmIoWrite (FilterWidth8, Address, &Value);\r
\r
return Value;\r
}\r
)\r
{\r
UINT16 Value;\r
+ BOOLEAN Flag;\r
\r
ASSERT ((Address & 1) == 0);\r
-\r
- MemoryFence ();\r
- Value = *(volatile UINT16*)Address;\r
- MemoryFence ();\r
+ Flag = FilterBeforeMmIoRead (FilterWidth16, Address, &Value);\r
+ if (Flag) {\r
+ MemoryFence ();\r
+ Value = *(volatile UINT16*)Address;\r
+ MemoryFence ();\r
+ }\r
+ FilterAfterMmIoRead (FilterWidth16, Address, &Value);\r
\r
return Value;\r
}\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
+ FilterAfterMmIoWrite (FilterWidth16, Address, &Value);\r
\r
return Value;\r
}\r
)\r
{\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
+ FilterAfterMmIoRead (FilterWidth32, Address, &Value);\r
\r
return Value;\r
}\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
+ FilterAfterMmIoWrite (FilterWidth32, Address, &Value);\r
\r
return Value;\r
}\r
)\r
{\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
+ FilterAfterMmIoRead (FilterWidth64, Address, &Value);\r
\r
return Value;\r
}\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
+ FilterAfterMmIoWrite (FilterWidth64, Address, &Value);\r
\r
return Value;\r
}\r