1fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** @file 2fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten I/O and MMIO Library Services that do I/O and also enable the I/O operatation 3fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed during an S3 resume. 4fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 594952554cc604750f3df3d4e8ae068703481d258lgao Copyright (c) 2006 -2012, Intel Corporation. All rights reserved.<BR> 6fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 7fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This program and the accompanying materials 8fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten are licensed and made available under the terms and conditions 9fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten of the BSD License which accompanies this distribution. The 10fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten full text of the license may be found at 11fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten http://opensource.org/licenses/bsd-license.php 12fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 13fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 14fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 15fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 16fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 17fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 18fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten#include <Base.h> 19fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 20fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten#include <Library/S3IoLib.h> 21fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten#include <Library/DebugLib.h> 22fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten#include <Library/IoLib.h> 23fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten#include <Library/S3BootScriptLib.h> 24fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 25fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 26fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 27fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Saves an I/O port value to the boot script. 28fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 29fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This internal worker function saves an I/O port value in the S3 script 30fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 31fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 32fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If the saving process fails, then ASSERT(). 33fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 34fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Width The width of I/O port. 35fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 36fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Buffer The buffer containing value. 37fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 38fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 39fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenVOID 40fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenInternalSaveIoWriteValueToBootScript ( 41fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN S3_BOOT_SCRIPT_LIB_WIDTH Width, 42fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 43fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN VOID *Buffer 44fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 45fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 46fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten RETURN_STATUS Status; 47fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 48fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Status = S3BootScriptSaveIoWrite ( 49fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Width, 50fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Port, 51fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1, 52fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Buffer 53fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ); 54fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ASSERT (Status == RETURN_SUCCESS); 55fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 56fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 57fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 58fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Saves an 8-bit I/O port value to the boot script. 59fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 60fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This internal worker function saves an 8-bit I/O port value in the S3 script 61fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 62fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 63fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If the saving process fails, then ASSERT(). 64fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 65fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 66fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value saved to boot script. 67fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 68fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Value. 69fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 70fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 71fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 72fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenInternalSaveIoWrite8ValueToBootScript ( 73fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 74fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 Value 75fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 76fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 77fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten InternalSaveIoWriteValueToBootScript (S3BootScriptWidthUint8, Port, &Value); 78fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 79fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return Value; 80fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 81fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 82fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 83fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads an 8-bit I/O port and saves the value in the S3 script to be replayed 84fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 85fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 86fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 8-bit I/O port specified by Port. The 8-bit read value is returned. 87fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This function must guarantee that all I/O read and write operations are 88fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten serialized. 89fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 90fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit I/O port operations are not supported, then ASSERT(). 91fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 92fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to read. 93fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 94fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 95fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 96fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 97fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 98fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 99fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoRead8 ( 100fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port 101fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 102fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 103fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite8ValueToBootScript (Port, IoRead8 (Port)); 104fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 105fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 106fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 107fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes an 8-bit I/O port and saves the value in the S3 script to be replayed 108fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 109fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 110fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes the 8-bit I/O port specified by Port with the value specified by Value 111fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and returns Value. This function must guarantee that all I/O read and write 112fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. 113fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 114fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit I/O port operations are not supported, then ASSERT(). 115fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 116fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 117fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value to write to the I/O port. 118fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 119fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written the I/O port. 120fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 121fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 122fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 123fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 124fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoWrite8 ( 125fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 126fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 Value 127fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 128fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 129fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite8ValueToBootScript (Port, IoWrite8 (Port, Value)); 130fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 131fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 132fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 133fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads an 8-bit I/O port, performs a bitwise OR, and writes the 134fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the 8-bit I/O port and saves the value in the S3 script to be 135fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten replayed on S3 resume. 136fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 137fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 8-bit I/O port specified by Port, performs a bitwise OR 138fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by OrData, and writes the 139fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 8-bit I/O port specified by Port. The value written to the I/O 140fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten port is returned. This function must guarantee that all I/O read and write 141fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. 142fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 143fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit I/O port operations are not supported, then ASSERT(). 144fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 145fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 146fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the I/O port. 147fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 148fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 149fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 150fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 151fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 152fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 153fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoOr8 ( 154fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 155fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 OrData 156fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 157fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 158fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite8ValueToBootScript (Port, IoOr8 (Port, OrData)); 159fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 160fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 161fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 162fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads an 8-bit I/O port, performs a bitwise AND, and writes the result back 163fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to the 8-bit I/O port and saves the value in the S3 script to be replayed 164fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 165fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 166fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 8-bit I/O port specified by Port, performs a bitwise AND between 167fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the read result and the value specified by AndData, and writes the result to 168fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the 8-bit I/O port specified by Port. The value written to the I/O port is 169fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten returned. This function must guarantee that all I/O read and write operations 170fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten are serialized. 171fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 172fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit I/O port operations are not supported, then ASSERT(). 173fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 174fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 175fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 176fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 177fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 178fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 179fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 180fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 181fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 182fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoAnd8 ( 183fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 184fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 AndData 185fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 186fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 187fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite8ValueToBootScript (Port, IoAnd8 (Port, AndData)); 188fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 189fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 190fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 191fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads an 8-bit I/O port, performs a bitwise AND followed by a bitwise 192fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR, and writes the result back to the 8-bit I/O port and saves 193fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the value in the S3 script to be replayed on S3 resume. 194fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 195fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 8-bit I/O port specified by Port, performs a bitwise AND between 196fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the read result and the value specified by AndData, performs a bitwise OR 197fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the result of the AND operation and the value specified by OrData, 198fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and writes the result to the 8-bit I/O port specified by Port. The value 199fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten written to the I/O port is returned. This function must guarantee that all 200fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten I/O read and write operations are serialized. 201fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 202fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit I/O port operations are not supported, then ASSERT(). 203fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 204fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 205fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 206fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 207fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 208fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 209fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 210fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 211fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 212fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 213fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoAndThenOr8 ( 214fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 215fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 AndData, 216fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 OrData 217fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 218fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 219fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite8ValueToBootScript (Port, IoAndThenOr8 (Port, AndData, OrData)); 220fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 221fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 222fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 223fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field of an I/O register and saves the value in the S3 script to 224fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 225fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 226fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the bit field in an 8-bit I/O register. The bit field is specified by 227fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the StartBit and the EndBit. The value of the bit field is returned. 228fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 229fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit I/O port operations are not supported, then ASSERT(). 230fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 7, then ASSERT(). 231fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 7, then ASSERT(). 232fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 233fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 234fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to read. 235fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 236fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 237fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 238fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 239fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 240fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 241fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 242fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 243fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 244fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 245fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldRead8 ( 246fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 247fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 248fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit 249fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 250fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 251fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite8ValueToBootScript (Port, IoBitFieldRead8 (Port, StartBit, EndBit)); 252fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 253fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 254fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 255fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes a bit field to an I/O register and saves the value in the S3 script to 256fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 257fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 258fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes Value to the bit field of the I/O register. The bit field is specified 259fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by the StartBit and the EndBit. All other bits in the destination I/O 260fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten register are preserved. The value written to the I/O port is returned. Extra 261fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten left bits in Value are stripped. 262fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 263fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit I/O port operations are not supported, then ASSERT(). 264fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 7, then ASSERT(). 265fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 7, then ASSERT(). 266fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 26794952554cc604750f3df3d4e8ae068703481d258lgao If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 268fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 269fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 270fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 271fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 272fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 273fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 274fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value New value of the bit field. 275fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 276fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 277fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 278fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 279fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 280fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 281fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldWrite8 ( 282fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 283fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 284fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 285fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 Value 286fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 287fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 288fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite8ValueToBootScript (Port, IoBitFieldWrite8 (Port, StartBit, EndBit, Value)); 289fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 290fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 291fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 292fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in an 8-bit port, performs a bitwise OR, and writes the 293fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the bit field in the 8-bit port and saves the value in the 294fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3 script to be replayed on S3 resume. 295fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 296fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 8-bit I/O port specified by Port, performs a bitwise OR 297fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by OrData, and writes the 298fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 8-bit I/O port specified by Port. The value written to the I/O 299fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten port is returned. This function must guarantee that all I/O read and write 300fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. Extra left bits in OrData are stripped. 301fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 302fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit I/O port operations are not supported, then ASSERT(). 303fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 7, then ASSERT(). 304fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 7, then ASSERT(). 305fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 30694952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 307fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 308fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 309fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 310fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 311fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 312fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 313fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the I/O port. 314fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 315fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 316fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 317fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 318fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 319fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 320fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldOr8 ( 321fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 322fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 323fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 324fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 OrData 325fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 326fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 327fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite8ValueToBootScript (Port, IoBitFieldOr8 (Port, StartBit, EndBit, OrData)); 328fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 329fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 330fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 331fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in an 8-bit port, performs a bitwise AND, and writes the 332fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the bit field in the 8-bit port and saves the value in the 333fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3 script to be replayed on S3 resume. 334fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 335fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 8-bit I/O port specified by Port, performs a bitwise AND between 336fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the read result and the value specified by AndData, and writes the result to 337fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the 8-bit I/O port specified by Port. The value written to the I/O port is 338fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten returned. This function must guarantee that all I/O read and write operations 339fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten are serialized. Extra left bits in AndData are stripped. 340fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 341fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit I/O port operations are not supported, then ASSERT(). 342fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 7, then ASSERT(). 343fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 7, then ASSERT(). 344fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 34594952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 346fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 347fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 348fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 349fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 350fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 351fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 352fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 353fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 354fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 355fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 356fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 357fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 358fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 359fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldAnd8 ( 360fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 361fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 362fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 363fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 AndData 364fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 365fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 366fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite8ValueToBootScript (Port, IoBitFieldAnd8 (Port, StartBit, EndBit, AndData)); 367fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 368fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 369fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 370fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in an 8-bit port, performs a bitwise AND followed by a 371fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten bitwise OR, and writes the result back to the bit field in the 372fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 8-bit port and saves the value in the S3 script to be replayed on S3 resume. 373fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 374fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 8-bit I/O port specified by Port, performs a bitwise AND followed 375fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by a bitwise OR between the read result and the value specified by 376fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten AndData, and writes the result to the 8-bit I/O port specified by Port. The 377fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten value written to the I/O port is returned. This function must guarantee that 378fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten all I/O read and write operations are serialized. Extra left bits in both 379fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten AndData and OrData are stripped. 380fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 381fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit I/O port operations are not supported, then ASSERT(). 382fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 7, then ASSERT(). 383fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 7, then ASSERT(). 384fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 38594952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 38694952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 387fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 388fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 389fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 390fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 391fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 392fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 393fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 394fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 395fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 396fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 397fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 398fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 399fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 400fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 401fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldAndThenOr8 ( 402fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 403fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 404fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 405fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 AndData, 406fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 OrData 407fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 408fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 409fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite8ValueToBootScript (Port, IoBitFieldAndThenOr8 (Port, StartBit, EndBit, AndData, OrData)); 410fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 411fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 412fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 413fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Saves a 16-bit I/O port value to the boot script. 414fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 415fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This internal worker function saves a 16-bit I/O port value in the S3 script 416fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 417fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 418fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If the saving process fails, then ASSERT(). 419fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 420fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 421fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value saved to boot script. 422fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 423fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Value. 424fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 425fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 426fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 427fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenInternalSaveIoWrite16ValueToBootScript ( 428fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 429fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 Value 430fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 431fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 432fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten InternalSaveIoWriteValueToBootScript (S3BootScriptWidthUint16, Port, &Value); 433fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 434fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return Value; 435fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 436fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 437fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 438fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 16-bit I/O port and saves the value in the S3 script to be replayed 439fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 440fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 441fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 16-bit I/O port specified by Port. The 16-bit read value is returned. 442fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This function must guarantee that all I/O read and write operations are 443fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten serialized. 444fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 445fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit I/O port operations are not supported, then ASSERT(). 446fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 447fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to read. 448fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 449fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 450fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 451fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 452fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 453fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 454fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoRead16 ( 455fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port 456fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 457fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 458fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite16ValueToBootScript (Port, IoRead16 (Port)); 459fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 460fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 461fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 462fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes a 16-bit I/O port and saves the value in the S3 script to be replayed 463fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 464fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 465fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes the 16-bit I/O port specified by Port with the value specified by Value 466fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and returns Value. This function must guarantee that all I/O read and write 467fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. 468fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 469fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit I/O port operations are not supported, then ASSERT(). 470fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 471fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 472fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value to write to the I/O port. 473fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 474fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written the I/O port. 475fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 476fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 477fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 478fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 479fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoWrite16 ( 480fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 481fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 Value 482fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 483fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 484fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite16ValueToBootScript (Port, IoWrite16 (Port, Value)); 485fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 486fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 487fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 488fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 16-bit I/O port, performs a bitwise OR, and writes the 489fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the 16-bit I/O port and saves the value in the S3 script to 490fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 491fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 492fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 16-bit I/O port specified by Port, performs a bitwise OR 493fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by OrData, and writes the 494fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 16-bit I/O port specified by Port. The value written to the I/O 495fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten port is returned. This function must guarantee that all I/O read and write 496fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. 497fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 498fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit I/O port operations are not supported, then ASSERT(). 499fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 500fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 501fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the I/O port. 502fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 503fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 504fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 505fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 506fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 507fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 508fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoOr16 ( 509fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 510fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 OrData 511fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 512fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 513fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite16ValueToBootScript (Port, IoOr16 (Port, OrData)); 514fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 515fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 516fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 517fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 16-bit I/O port, performs a bitwise AND, and writes the result back 518fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to the 16-bit I/O port and saves the value in the S3 script to be replayed 519fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 520fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 521fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 16-bit I/O port specified by Port, performs a bitwise AND between 522fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the read result and the value specified by AndData, and writes the result to 523fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the 16-bit I/O port specified by Port. The value written to the I/O port is 524fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten returned. This function must guarantee that all I/O read and write operations 525fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten are serialized. 526fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 527fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit I/O port operations are not supported, then ASSERT(). 528fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 529fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 530fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 531fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 532fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 533fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 534fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 535fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 536fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 537fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoAnd16 ( 538fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 539fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 AndData 540fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 541fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 542fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite16ValueToBootScript (Port, IoAnd16 (Port, AndData)); 543fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 544fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 545fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 546fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 16-bit I/O port, performs a bitwise AND followed by a bitwise 547fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR, and writes the result back to the 16-bit I/O port and saves 548fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the value in the S3 script to be replayed on S3 resume. 549fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 550fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 16-bit I/O port specified by Port, performs a bitwise AND between 551fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the read result and the value specified by AndData, performs a bitwise OR 552fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the result of the AND operation and the value specified by OrData, 553fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and writes the result to the 16-bit I/O port specified by Port. The value 554fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten written to the I/O port is returned. This function must guarantee that all 555fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten I/O read and write operations are serialized. 556fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 557fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit I/O port operations are not supported, then ASSERT(). 558fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 559fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 560fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 561fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 562fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 563fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 564fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 565fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 566fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 567fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 568fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoAndThenOr16 ( 569fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 570fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 AndData, 571fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 OrData 572fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 573fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 574fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite16ValueToBootScript (Port, IoAndThenOr16 (Port, AndData, OrData)); 575fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 576fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 577fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 578fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field of an I/O register saves the value in the S3 script to be 579fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten replayed on S3 resume. 580fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 581fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the bit field in a 16-bit I/O register. The bit field is specified by 582fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the StartBit and the EndBit. The value of the bit field is returned. 583fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 584fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit I/O port operations are not supported, then ASSERT(). 585fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 15, then ASSERT(). 586fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 15, then ASSERT(). 587fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 588fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 589fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to read. 590fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 591fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 592fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 593fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 594fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 595fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 596fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 597fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 598fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 599fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 600fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldRead16 ( 601fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 602fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 603fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit 604fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 605fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 606fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite16ValueToBootScript (Port, IoBitFieldRead16 (Port, StartBit, EndBit)); 607fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 608fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 609fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 610fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes a bit field to an I/O register and saves the value in the S3 script 611fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 612fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 613fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes Value to the bit field of the I/O register. The bit field is specified 614fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by the StartBit and the EndBit. All other bits in the destination I/O 615fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten register are preserved. The value written to the I/O port is returned. Extra 616fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten left bits in Value are stripped. 617fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 618fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit I/O port operations are not supported, then ASSERT(). 619fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 15, then ASSERT(). 620fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 15, then ASSERT(). 621fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 62294952554cc604750f3df3d4e8ae068703481d258lgao If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 623fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 624fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 625fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 626fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 627fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 628fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 629fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value New value of the bit field. 630fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 631fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 632fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 633fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 634fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 635fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 636fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldWrite16 ( 637fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 638fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 639fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 640fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 Value 641fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 642fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 643fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite16ValueToBootScript (Port, IoBitFieldWrite16 (Port, StartBit, EndBit, Value)); 644fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 645fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 646fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 647fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 16-bit port, performs a bitwise OR, and writes the 648fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the bit field in the 16-bit port and saves the value in the 649fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3 script to be replayed on S3 resume. 650fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 651fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 16-bit I/O port specified by Port, performs a bitwise OR 652fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by OrData, and writes the 653fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 16-bit I/O port specified by Port. The value written to the I/O 654fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten port is returned. This function must guarantee that all I/O read and write 655fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. Extra left bits in OrData are stripped. 656fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 657fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit I/O port operations are not supported, then ASSERT(). 658fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 15, then ASSERT(). 659fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 15, then ASSERT(). 660fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 66194952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 662fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 663fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 664fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 665fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 666fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 667fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 668fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the I/O port. 669fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 670fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 671fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 672fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 673fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 674fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 675fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldOr16 ( 676fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 677fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 678fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 679fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 OrData 680fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 681fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 682fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite16ValueToBootScript (Port, IoBitFieldOr16 (Port, StartBit, EndBit, OrData)); 683fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 684fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 685fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 686fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 16-bit port, performs a bitwise AND, and writes the 687fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the bit field in the 16-bit port and saves the value in the 688fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3 script to be replayed on S3 resume. 689fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 690fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 16-bit I/O port specified by Port, performs a bitwise AND between 691fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the read result and the value specified by AndData, and writes the result to 692fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the 16-bit I/O port specified by Port. The value written to the I/O port is 693fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten returned. This function must guarantee that all I/O read and write operations 694fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten are serialized. Extra left bits in AndData are stripped. 695fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 696fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit I/O port operations are not supported, then ASSERT(). 697fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 15, then ASSERT(). 698fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 15, then ASSERT(). 699fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 70094952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 701fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 702fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 703fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 704fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 705fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 706fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 707fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 708fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 709fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 710fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 711fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 712fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 713fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 714fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldAnd16 ( 715fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 716fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 717fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 718fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 AndData 719fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 720fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 721fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite16ValueToBootScript (Port, IoBitFieldAnd16 (Port, StartBit, EndBit, AndData)); 722fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 723fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 724fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 725fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 16-bit port, performs a bitwise AND followed by a 726fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten bitwise OR, and writes the result back to the bit field in the 727fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 16-bit port and saves the value in the S3 script to be replayed on S3 728fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten resume. 729fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 730fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 16-bit I/O port specified by Port, performs a bitwise AND followed 731fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by a bitwise OR between the read result and the value specified by 732fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten AndData, and writes the result to the 16-bit I/O port specified by Port. The 733fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten value written to the I/O port is returned. This function must guarantee that 734fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten all I/O read and write operations are serialized. Extra left bits in both 735fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten AndData and OrData are stripped. 736fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 737fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit I/O port operations are not supported, then ASSERT(). 738fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 15, then ASSERT(). 739fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 15, then ASSERT(). 740fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 74194952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 74294952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 743fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 744fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 745fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 746fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 747fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 748fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 749fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 750fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 751fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 752fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 753fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 754fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 755fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 756fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 757fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldAndThenOr16 ( 758fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 759fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 760fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 761fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 AndData, 762fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 OrData 763fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 764fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 765fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite16ValueToBootScript (Port, IoBitFieldAndThenOr16 (Port, StartBit, EndBit, AndData, OrData)); 766fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 767fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 768fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 769fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Saves a 32-bit I/O port value to the boot script. 770fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 771fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This internal worker function saves a 32-bit I/O port value in the S3 script 772fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 773fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 774fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If the saving process fails, then ASSERT(). 775fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 776fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 777fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value saved to boot script. 778fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 779fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Value. 780fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 781fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 782fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 783fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenInternalSaveIoWrite32ValueToBootScript ( 784fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 785fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 Value 786fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 787fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 788fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten InternalSaveIoWriteValueToBootScript (S3BootScriptWidthUint32, Port, &Value); 789fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 790fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return Value; 791fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 792fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 793fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 794fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 32-bit I/O port and saves the value in the S3 script to be replayed 795fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 796fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 797fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 32-bit I/O port specified by Port. The 32-bit read value is returned. 798fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This function must guarantee that all I/O read and write operations are 799fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten serialized. 800fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 801fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit I/O port operations are not supported, then ASSERT(). 802fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 803fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to read. 804fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 805fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 806fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 807fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 808fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 809fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 810fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoRead32 ( 811fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port 812fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 813fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 814fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite32ValueToBootScript (Port, IoRead32 (Port)); 815fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 816fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 817fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 818fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes a 32-bit I/O port and saves the value in the S3 script to be replayed 819fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 820fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 821fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes the 32-bit I/O port specified by Port with the value specified by Value 822fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and returns Value. This function must guarantee that all I/O read and write 823fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. 824fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 825fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit I/O port operations are not supported, then ASSERT(). 826fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 827fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 828fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value to write to the I/O port. 829fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 830fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written the I/O port. 831fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 832fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 833fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 834fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 835fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoWrite32 ( 836fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 837fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 Value 838fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 839fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 840fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite32ValueToBootScript (Port, IoWrite32 (Port, Value)); 841fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 842fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 843fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 844fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 32-bit I/O port, performs a bitwise OR, and writes the 845fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the 32-bit I/O port and saves the value in the S3 script to 846fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 847fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 848fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 32-bit I/O port specified by Port, performs a bitwise OR 849fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by OrData, and writes the 850fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 32-bit I/O port specified by Port. The value written to the I/O 851fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten port is returned. This function must guarantee that all I/O read and write 852fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. 853fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 854fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit I/O port operations are not supported, then ASSERT(). 855fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 856fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 857fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the I/O port. 858fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 859fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 860fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 861fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 862fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 863fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 864fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoOr32 ( 865fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 866fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 OrData 867fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 868fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 869fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite32ValueToBootScript (Port, IoOr32 (Port, OrData)); 870fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 871fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 872fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 873fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 32-bit I/O port, performs a bitwise AND, and writes the result back 874fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to the 32-bit I/O port and saves the value in the S3 script to be replayed 875fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 876fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 877fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 32-bit I/O port specified by Port, performs a bitwise AND between 878fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the read result and the value specified by AndData, and writes the result to 879fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the 32-bit I/O port specified by Port. The value written to the I/O port is 880fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten returned. This function must guarantee that all I/O read and write operations 881fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten are serialized. 882fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 883fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit I/O port operations are not supported, then ASSERT(). 884fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 885fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 886fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 887fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 888fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 889fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 890fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 891fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 892fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 893fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoAnd32 ( 894fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 895fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 AndData 896fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 897fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 898fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite32ValueToBootScript (Port, IoAnd32 (Port, AndData)); 899fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 900fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 901fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 902fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 32-bit I/O port, performs a bitwise AND followed by a bitwise 903fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR, and writes the result back to the 32-bit I/O port and saves 904fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the value in the S3 script to be replayed on S3 resume. 905fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 906fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 32-bit I/O port specified by Port, performs a bitwise AND between 907fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the read result and the value specified by AndData, performs a bitwise OR 908fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the result of the AND operation and the value specified by OrData, 909fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and writes the result to the 32-bit I/O port specified by Port. The value 910fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten written to the I/O port is returned. This function must guarantee that all 911fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten I/O read and write operations are serialized. 912fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 913fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit I/O port operations are not supported, then ASSERT(). 914fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 915fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 916fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 917fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 918fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 919fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 920fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 921fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 922fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 923fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 924fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoAndThenOr32 ( 925fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 926fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 AndData, 927fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 OrData 928fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 929fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 930fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite32ValueToBootScript (Port, IoAndThenOr32 (Port, AndData, OrData)); 931fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 932fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 933fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 934fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field of an I/O register and saves the value in the S3 script to 935fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 936fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 937fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the bit field in a 32-bit I/O register. The bit field is specified by 938fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the StartBit and the EndBit. The value of the bit field is returned. 939fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 940fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit I/O port operations are not supported, then ASSERT(). 941fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 31, then ASSERT(). 942fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 31, then ASSERT(). 943fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 944fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 945fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to read. 946fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 947fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 948fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 949fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 950fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 951fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 952fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 953fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 954fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 955fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 956fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldRead32 ( 957fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 958fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 959fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit 960fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 961fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 962fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite32ValueToBootScript (Port, IoBitFieldRead32 (Port, StartBit, EndBit)); 963fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 964fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 965fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 966fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes a bit field to an I/O register and saves the value in the S3 script to 967fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 968fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 969fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes Value to the bit field of the I/O register. The bit field is specified 970fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by the StartBit and the EndBit. All other bits in the destination I/O 971fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten register are preserved. The value written to the I/O port is returned. Extra 972fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten left bits in Value are stripped. 973fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 974fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit I/O port operations are not supported, then ASSERT(). 975fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 31, then ASSERT(). 976fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 31, then ASSERT(). 977fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 97894952554cc604750f3df3d4e8ae068703481d258lgao If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 979fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 980fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 981fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 982fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 983fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 984fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 985fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value New value of the bit field. 986fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 987fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 988fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 989fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 990fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 991fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 992fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldWrite32 ( 993fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 994fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 995fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 996fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 Value 997fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 998fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 999fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite32ValueToBootScript (Port, IoBitFieldWrite32 (Port, StartBit, EndBit, Value)); 1000fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1001fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1002fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1003fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 32-bit port, performs a bitwise OR, and writes the 1004fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the bit field in the 32-bit port and saves the value in the 1005fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3 script to be replayed on S3 resume. 1006fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1007fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 32-bit I/O port specified by Port, performs a bitwise OR 1008fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by OrData, and writes the 1009fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 32-bit I/O port specified by Port. The value written to the I/O 1010fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten port is returned. This function must guarantee that all I/O read and write 1011fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. Extra left bits in OrData are stripped. 1012fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1013fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit I/O port operations are not supported, then ASSERT(). 1014fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 31, then ASSERT(). 1015fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 31, then ASSERT(). 1016fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 101794952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 1018fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1019fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 1020fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 1021fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 1022fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 1023fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 1024fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the I/O port. 1025fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1026fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 1027fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1028fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1029fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 1030fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1031fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldOr32 ( 1032fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 1033fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 1034fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 1035fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 OrData 1036fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1037fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1038fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite32ValueToBootScript (Port, IoBitFieldOr32 (Port, StartBit, EndBit, OrData)); 1039fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1040fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1041fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1042fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 32-bit port, performs a bitwise AND, and writes the 1043fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the bit field in the 32-bit port and saves the value in the 1044fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3 script to be replayed on S3 resume. 1045fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1046fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 32-bit I/O port specified by Port, performs a bitwise AND between 1047fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the read result and the value specified by AndData, and writes the result to 1048fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the 32-bit I/O port specified by Port. The value written to the I/O port is 1049fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten returned. This function must guarantee that all I/O read and write operations 1050fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten are serialized. Extra left bits in AndData are stripped. 1051fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1052fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit I/O port operations are not supported, then ASSERT(). 1053fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 31, then ASSERT(). 1054fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 31, then ASSERT(). 1055fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 105694952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 1057fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1058fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 1059fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 1060fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 1061fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 1062fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 1063fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 1064fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1065fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 1066fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1067fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1068fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 1069fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1070fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldAnd32 ( 1071fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 1072fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 1073fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 1074fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 AndData 1075fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1076fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1077fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite32ValueToBootScript (Port, IoBitFieldAnd32 (Port, StartBit, EndBit, AndData)); 1078fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1079fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1080fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1081fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 32-bit port, performs a bitwise AND followed by a 1082fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten bitwise OR, and writes the result back to the bit field in the 1083fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 32-bit port and saves the value in the S3 script to be replayed on S3 1084fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten resume. 1085fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1086fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 32-bit I/O port specified by Port, performs a bitwise AND followed 1087fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by a bitwise OR between the read result and the value specified by 1088fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten AndData, and writes the result to the 32-bit I/O port specified by Port. The 1089fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten value written to the I/O port is returned. This function must guarantee that 1090fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten all I/O read and write operations are serialized. Extra left bits in both 1091fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten AndData and OrData are stripped. 1092fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1093fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit I/O port operations are not supported, then ASSERT(). 1094fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 31, then ASSERT(). 1095fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 31, then ASSERT(). 1096fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 109794952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 109894952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 1099fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1100fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 1101fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 1102fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 1103fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 1104fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 1105fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 1106fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 1107fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1108fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 1109fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1110fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1111fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 1112fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1113fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldAndThenOr32 ( 1114fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 1115fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 1116fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 1117fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 AndData, 1118fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 OrData 1119fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1120fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1121fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite32ValueToBootScript (Port, IoBitFieldAndThenOr32 (Port, StartBit, EndBit, AndData, OrData)); 1122fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1123fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1124fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1125fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Saves a 64-bit I/O port value to the boot script. 1126fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1127fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This internal worker function saves a 64-bit I/O port value in the S3 script 1128fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 1129fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1130fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If the saving process fails, then ASSERT(). 1131fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1132fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 1133fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value saved to boot script. 1134fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1135fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Value. 1136fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1137fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1138fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 1139fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenInternalSaveIoWrite64ValueToBootScript ( 1140fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 1141fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 Value 1142fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1143fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1144fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten InternalSaveIoWriteValueToBootScript (S3BootScriptWidthUint64, Port, &Value); 1145fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1146fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return Value; 1147fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1148fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1149fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1150fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 64-bit I/O port and saves the value in the S3 script to be replayed 1151fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 1152fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1153fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 64-bit I/O port specified by Port. The 64-bit read value is returned. 1154fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This function must guarantee that all I/O read and write operations are 1155fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten serialized. 1156fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1157fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit I/O port operations are not supported, then ASSERT(). 1158fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1159fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to read. 1160fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1161fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 1162fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1163fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1164fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 1165fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1166fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoRead64 ( 1167fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port 1168fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1169fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1170fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite64ValueToBootScript (Port, IoRead64 (Port)); 1171fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1172fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1173fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1174fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes a 64-bit I/O port and saves the value in the S3 script to be replayed 1175fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 1176fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1177fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes the 64-bit I/O port specified by Port with the value specified by Value 1178fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and returns Value. This function must guarantee that all I/O read and write 1179fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. 1180fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1181fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit I/O port operations are not supported, then ASSERT(). 1182fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1183fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 1184fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value to write to the I/O port. 1185fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1186fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written the I/O port. 1187fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1188fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1189fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 1190fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1191fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoWrite64 ( 1192fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 1193fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 Value 1194fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1195fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1196fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite64ValueToBootScript (Port, IoWrite64 (Port, Value)); 1197fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1198fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1199fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1200fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 64-bit I/O port, performs a bitwise OR, and writes the 1201fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the 64-bit I/O port and saves the value in the S3 script to 1202fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 1203fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1204fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 64-bit I/O port specified by Port, performs a bitwise OR 1205fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by OrData, and writes the 1206fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 64-bit I/O port specified by Port. The value written to the I/O 1207fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten port is returned. This function must guarantee that all I/O read and write 1208fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. 1209fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1210fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit I/O port operations are not supported, then ASSERT(). 1211fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1212fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 1213fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the I/O port. 1214fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1215fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 1216fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1217fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1218fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 1219fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1220fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoOr64 ( 1221fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 1222fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 OrData 1223fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1224fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1225fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite64ValueToBootScript (Port, IoOr64 (Port, OrData)); 1226fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1227fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1228fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1229fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 64-bit I/O port, performs a bitwise AND, and writes the result back 1230fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to the 64-bit I/O port and saves the value in the S3 script to be replayed 1231fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 1232fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1233fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 64-bit I/O port specified by Port, performs a bitwise AND between 1234fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the read result and the value specified by AndData, and writes the result to 1235fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the 64-bit I/O port specified by Port. The value written to the I/O port is 1236fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten returned. This function must guarantee that all I/O read and write operations 1237fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten are serialized. 1238fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1239fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit I/O port operations are not supported, then ASSERT(). 1240fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1241fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 1242fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 1243fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1244fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 1245fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1246fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1247fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 1248fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1249fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoAnd64 ( 1250fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 1251fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 AndData 1252fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1253fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1254fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite64ValueToBootScript (Port, IoAnd64 (Port, AndData)); 1255fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1256fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1257fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1258fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 64-bit I/O port, performs a bitwise AND followed by a bitwise 1259fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR, and writes the result back to the 64-bit I/O port and saves 1260fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the value in the S3 script to be replayed on S3 resume. 1261fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1262fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 64-bit I/O port specified by Port, performs a bitwise AND between 1263fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the read result and the value specified by AndData, performs a bitwise OR 1264fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the result of the AND operation and the value specified by OrData, 1265fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and writes the result to the 64-bit I/O port specified by Port. The value 1266fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten written to the I/O port is returned. This function must guarantee that all 1267fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten I/O read and write operations are serialized. 1268fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1269fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit I/O port operations are not supported, then ASSERT(). 1270fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1271fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 1272fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 1273fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 1274fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1275fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 1276fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1277fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1278fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 1279fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1280fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoAndThenOr64 ( 1281fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 1282fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 AndData, 1283fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 OrData 1284fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1285fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1286fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite64ValueToBootScript (Port, IoAndThenOr64 (Port, AndData, OrData)); 1287fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1288fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1289fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1290fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field of an I/O register and saves the value in the S3 script to 1291fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 1292fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1293fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the bit field in a 64-bit I/O register. The bit field is specified by 1294fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the StartBit and the EndBit. The value of the bit field is returned. 1295fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1296fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit I/O port operations are not supported, then ASSERT(). 1297fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 63, then ASSERT(). 1298fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 63, then ASSERT(). 1299fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 1300fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1301fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to read. 1302fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 1303fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 1304fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 1305fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 1306fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1307fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 1308fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1309fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1310fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 1311fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1312fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldRead64 ( 1313fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 1314fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 1315fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit 1316fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1317fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1318fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite64ValueToBootScript (Port, IoBitFieldRead64 (Port, StartBit, EndBit)); 1319fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1320fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1321fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1322fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes a bit field to an I/O register and saves the value in the S3 script to 1323fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 1324fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1325fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes Value to the bit field of the I/O register. The bit field is specified 1326fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by the StartBit and the EndBit. All other bits in the destination I/O 1327fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten register are preserved. The value written to the I/O port is returned. Extra 1328fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten left bits in Value are stripped. 1329fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1330fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit I/O port operations are not supported, then ASSERT(). 1331fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 63, then ASSERT(). 1332fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 63, then ASSERT(). 1333fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 133494952554cc604750f3df3d4e8ae068703481d258lgao If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 1335fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1336fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 1337fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 1338fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 1339fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 1340fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 1341fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value New value of the bit field. 1342fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1343fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 1344fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1345fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1346fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 1347fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1348fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldWrite64 ( 1349fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 1350fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 1351fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 1352fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 Value 1353fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1354fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1355fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite64ValueToBootScript (Port, IoBitFieldWrite64 (Port, StartBit, EndBit, Value)); 1356fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1357fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1358fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1359fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 64-bit port, performs a bitwise OR, and writes the 1360fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the bit field in the 64-bit port and saves the value in the 1361fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3 script to be replayed on S3 resume. 1362fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1363fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 64-bit I/O port specified by Port, performs a bitwise OR 1364fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by OrData, and writes the 1365fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 64-bit I/O port specified by Port. The value written to the I/O 1366fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten port is returned. This function must guarantee that all I/O read and write 1367fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. Extra left bits in OrData are stripped. 1368fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1369fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit I/O port operations are not supported, then ASSERT(). 1370fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 63, then ASSERT(). 1371fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 63, then ASSERT(). 1372fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 137394952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 1374fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1375fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 1376fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 1377fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 1378fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 1379fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 1380fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the I/O port. 1381fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1382fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 1383fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1384fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1385fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 1386fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1387fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldOr64 ( 1388fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 1389fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 1390fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 1391fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 OrData 1392fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1393fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1394fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite64ValueToBootScript (Port, IoBitFieldOr64 (Port, StartBit, EndBit, OrData)); 1395fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1396fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1397fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1398fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 64-bit port, performs a bitwise AND, and writes the 1399fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the bit field in the 64-bit port and saves the value in the 1400fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3 script to be replayed on S3 resume. 1401fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1402fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 64-bit I/O port specified by Port, performs a bitwise AND between 1403fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the read result and the value specified by AndData, and writes the result to 1404fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the 64-bit I/O port specified by Port. The value written to the I/O port is 1405fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten returned. This function must guarantee that all I/O read and write operations 1406fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten are serialized. Extra left bits in AndData are stripped. 1407fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1408fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit I/O port operations are not supported, then ASSERT(). 1409fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 63, then ASSERT(). 1410fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 63, then ASSERT(). 1411fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 141294952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 1413fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1414fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 1415fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 1416fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 1417fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 1418fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 1419fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 1420fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1421fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 1422fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1423fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1424fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 1425fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1426fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldAnd64 ( 1427fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 1428fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 1429fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 1430fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 AndData 1431fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1432fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1433fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite64ValueToBootScript (Port, IoBitFieldAnd64 (Port, StartBit, EndBit, AndData)); 1434fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1435fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1436fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1437fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 64-bit port, performs a bitwise AND followed by a 1438fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten bitwise OR, and writes the result back to the bit field in the 1439fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 64-bit port and saves the value in the S3 script to be replayed on S3 1440fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten resume. 1441fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1442fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 64-bit I/O port specified by Port, performs a bitwise AND followed 1443fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by a bitwise OR between the read result and the value specified by 1444fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten AndData, and writes the result to the 64-bit I/O port specified by Port. The 1445fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten value written to the I/O port is returned. This function must guarantee that 1446fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten all I/O read and write operations are serialized. Extra left bits in both 1447fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten AndData and OrData are stripped. 1448fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1449fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit I/O port operations are not supported, then ASSERT(). 1450fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 63, then ASSERT(). 1451fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 63, then ASSERT(). 1452fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 145394952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 145494952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 1455fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1456fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Port The I/O port to write. 1457fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 1458fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 1459fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 1460fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 1461fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the I/O port. 1462fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 1463fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1464fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the I/O port. 1465fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1466fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1467fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 1468fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1469fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3IoBitFieldAndThenOr64 ( 1470fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Port, 1471fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 1472fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 1473fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 AndData, 1474fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 OrData 1475fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1476fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1477fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveIoWrite64ValueToBootScript (Port, IoBitFieldAndThenOr64 (Port, StartBit, EndBit, AndData, OrData)); 1478fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1479fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1480fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1481fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Saves an MMIO register value to the boot script. 1482fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1483fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This internal worker function saves an MMIO register value in the S3 script 1484fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 1485fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1486fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If the saving process fails, then ASSERT(). 1487fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1488fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Width The width of MMIO register. 1489fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 1490fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Buffer The buffer containing value. 1491fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1492fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1493fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenVOID 1494fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenInternalSaveMmioWriteValueToBootScript ( 1495fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN S3_BOOT_SCRIPT_LIB_WIDTH Width, 1496fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1497fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN VOID *Buffer 1498fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1499fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1500fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten RETURN_STATUS Status; 1501fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1502fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Status = S3BootScriptSaveMemWrite ( 1503fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Width, 1504fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Address, 1505fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1, 1506fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Buffer 1507fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ); 1508fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ASSERT (Status == RETURN_SUCCESS); 1509fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1510fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1511fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1512fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Saves an 8-bit MMIO register value to the boot script. 1513fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1514fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This internal worker function saves an 8-bit MMIO register value in the S3 script 1515fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 1516fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1517fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If the saving process fails, then ASSERT(). 1518fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1519fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 1520fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value saved to boot script. 1521fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1522fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Value. 1523fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1524fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1525fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 1526fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenInternalSaveMmioWrite8ValueToBootScript ( 1527fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1528fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 Value 1529fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1530fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1531fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten InternalSaveMmioWriteValueToBootScript (S3BootScriptWidthUint8, Address, &Value); 1532fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1533fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return Value; 1534fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1535fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1536fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1537fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads an 8-bit MMIO register and saves the value in the S3 script to be 1538fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten replayed on S3 resume. 1539fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1540fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 8-bit MMIO register specified by Address. The 8-bit read value is 1541fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten returned. This function must guarantee that all MMIO read and write 1542fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. 1543fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1544fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit MMIO register operations are not supported, then ASSERT(). 1545fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1546fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to read. 1547fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1548fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 1549fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1550fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1551fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 1552fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1553fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioRead8 ( 1554fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address 1555fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1556fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1557fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite8ValueToBootScript (Address, MmioRead8 (Address)); 1558fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1559fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1560fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1561fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes an 8-bit MMIO register and saves the value in the S3 script to be 1562fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten replayed on S3 resume. 1563fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1564fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes the 8-bit MMIO register specified by Address with the value specified 1565fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by Value and returns Value. This function must guarantee that all MMIO read 1566fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and write operations are serialized. 1567fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1568fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit MMIO register operations are not supported, then ASSERT(). 1569fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1570fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 1571fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value to write to the MMIO register. 1572fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1573fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written the MMIO register. 1574fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1575fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1576fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 1577fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1578fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioWrite8 ( 1579fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1580fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 Value 1581fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1582fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1583fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite8ValueToBootScript (Address, MmioWrite8 (Address, Value)); 1584fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1585fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1586fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1587fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads an 8-bit MMIO register, performs a bitwise OR, and writes the 1588fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the 8-bit MMIO register and saves the value in the S3 script 1589fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 1590fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1591fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 8-bit MMIO register specified by Address, performs a bitwise 1592fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR between the read result and the value specified by OrData, and 1593fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result to the 8-bit MMIO register specified by Address. The value 1594fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten written to the MMIO register is returned. This function must guarantee that 1595fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten all MMIO read and write operations are serialized. 1596fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1597fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit MMIO register operations are not supported, then ASSERT(). 1598fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1599fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 1600fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the MMIO register. 1601fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1602fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 1603fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1604fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1605fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 1606fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1607fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioOr8 ( 1608fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1609fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 OrData 1610fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1611fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1612fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite8ValueToBootScript (Address, MmioOr8 (Address, OrData)); 1613fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1614fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1615fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1616fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads an 8-bit MMIO register, performs a bitwise AND, and writes the result 1617fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten back to the 8-bit MMIO register and saves the value in the S3 script to be 1618fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten replayed on S3 resume. 1619fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1620fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 8-bit MMIO register specified by Address, performs a bitwise AND 1621fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by AndData, and writes the 1622fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 8-bit MMIO register specified by Address. The value written to 1623fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the MMIO register is returned. This function must guarantee that all MMIO 1624fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten read and write operations are serialized. 1625fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1626fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit MMIO register operations are not supported, then ASSERT(). 1627fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1628fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 1629fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 1630fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1631fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 1632fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1633fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1634fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 1635fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1636fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioAnd8 ( 1637fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1638fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 AndData 1639fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1640fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1641fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite8ValueToBootScript (Address, MmioAnd8 (Address, AndData)); 1642fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1643fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1644fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1645fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads an 8-bit MMIO register, performs a bitwise AND followed by a bitwise 1646fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR, and writes the result back to the 8-bit MMIO register and saves 1647fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the value in the S3 script to be replayed on S3 resume. 1648fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1649fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 8-bit MMIO register specified by Address, performs a bitwise AND 1650fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by AndData, performs a 1651fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten bitwise OR between the result of the AND operation and the value specified by 1652fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten OrData, and writes the result to the 8-bit MMIO register specified by 1653fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Address. The value written to the MMIO register is returned. This function 1654fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten must guarantee that all MMIO read and write operations are serialized. 1655fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1656fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit MMIO register operations are not supported, then ASSERT(). 1657fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1658fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 1659fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 1660fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 1661fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1662fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 1663fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1664fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1665fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 1666fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1667fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioAndThenOr8 ( 1668fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1669fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 AndData, 1670fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 OrData 1671fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1672fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1673fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite8ValueToBootScript (Address, MmioAndThenOr8 (Address, AndData, OrData)); 1674fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1675fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1676fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1677fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field of a MMIO register and saves the value in the S3 script to 1678fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 1679fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1680fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the bit field in an 8-bit MMIO register. The bit field is specified by 1681fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the StartBit and the EndBit. The value of the bit field is returned. 1682fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1683fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit MMIO register operations are not supported, then ASSERT(). 1684fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 7, then ASSERT(). 1685fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 7, then ASSERT(). 1686fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 1687fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1688fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address MMIO register to read. 1689fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 1690fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 1691fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 1692fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 1693fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1694fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 1695fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1696fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1697fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 1698fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1699fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldRead8 ( 1700fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1701fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 1702fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit 1703fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1704fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1705fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite8ValueToBootScript (Address, MmioBitFieldRead8 (Address, StartBit, EndBit)); 1706fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1707fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1708fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1709fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes a bit field to an MMIO register and saves the value in the S3 script to 1710fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 1711fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1712fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes Value to the bit field of the MMIO register. The bit field is 1713fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten specified by the StartBit and the EndBit. All other bits in the destination 1714fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten MMIO register are preserved. The new value of the 8-bit register is returned. 1715fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1716fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit MMIO register operations are not supported, then ASSERT(). 1717fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 7, then ASSERT(). 1718fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 7, then ASSERT(). 1719fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 172094952554cc604750f3df3d4e8ae068703481d258lgao If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 1721fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1722fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 1723fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 1724fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 1725fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 1726fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 1727fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value New value of the bit field. 1728fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1729fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 1730fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1731fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1732fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 1733fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1734fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldWrite8 ( 1735fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1736fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 1737fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 1738fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 Value 1739fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1740fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1741fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite8ValueToBootScript (Address, MmioBitFieldWrite8 (Address, StartBit, EndBit, Value)); 1742fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1743fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1744fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1745fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in an 8-bit MMIO register, performs a bitwise OR, and 1746fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result back to the bit field in the 8-bit MMIO register and saves 1747fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the value in the S3 script to be replayed on S3 resume. 1748fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1749fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 8-bit MMIO register specified by Address, performs a bitwise 1750fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR between the read result and the value specified by OrData, and 1751fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result to the 8-bit MMIO register specified by Address. The value 1752fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten written to the MMIO register is returned. This function must guarantee that 1753fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten all MMIO read and write operations are serialized. Extra left bits in OrData 1754fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten are stripped. 1755fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1756fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit MMIO register operations are not supported, then ASSERT(). 1757fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 7, then ASSERT(). 1758fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 7, then ASSERT(). 1759fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 176094952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 1761fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1762fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 1763fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 1764fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 1765fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 1766fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 1767fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the MMIO register. 1768fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1769fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 1770fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1771fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1772fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 1773fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1774fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldOr8 ( 1775fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1776fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 1777fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 1778fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 OrData 1779fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1780fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1781fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite8ValueToBootScript (Address, MmioBitFieldOr8 (Address, StartBit, EndBit, OrData)); 1782fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1783fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1784fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1785fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in an 8-bit MMIO register, performs a bitwise AND, and 1786fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result back to the bit field in the 8-bit MMIO register and saves 1787fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the value in the S3 script to be replayed on S3 resume. 1788fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1789fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 8-bit MMIO register specified by Address, performs a bitwise AND 1790fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by AndData, and writes the 1791fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 8-bit MMIO register specified by Address. The value written to 1792fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the MMIO register is returned. This function must guarantee that all MMIO 1793fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten read and write operations are serialized. Extra left bits in AndData are 1794fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten stripped. 1795fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1796fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit MMIO register operations are not supported, then ASSERT(). 1797fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 7, then ASSERT(). 1798fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 7, then ASSERT(). 1799fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 180094952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 1801fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1802fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 1803fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 1804fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 1805fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 1806fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 1807fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 1808fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1809fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 1810fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1811fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1812fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 1813fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1814fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldAnd8 ( 1815fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1816fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 1817fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 1818fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 AndData 1819fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1820fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1821fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite8ValueToBootScript (Address, MmioBitFieldAnd8 (Address, StartBit, EndBit, AndData)); 1822fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1823fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1824fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1825fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in an 8-bit MMIO register, performs a bitwise AND followed 1826fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by a bitwise OR, and writes the result back to the bit field in the 1827fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 8-bit MMIO register and saves the value in the S3 script to be replayed 1828fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 1829fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1830fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 8-bit MMIO register specified by Address, performs a bitwise AND 1831fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten followed by a bitwise OR between the read result and the value 1832fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten specified by AndData, and writes the result to the 8-bit MMIO register 1833fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten specified by Address. The value written to the MMIO register is returned. 1834fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This function must guarantee that all MMIO read and write operations are 1835fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten serialized. Extra left bits in both AndData and OrData are stripped. 1836fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1837fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 8-bit MMIO register operations are not supported, then ASSERT(). 1838fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 7, then ASSERT(). 1839fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 7, then ASSERT(). 1840fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 184194952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 184294952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 1843fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1844fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 1845fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 1846fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 1847fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 1848fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..7. 1849fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 1850fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 1851fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1852fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 1853fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1854fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1855fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 1856fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1857fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldAndThenOr8 ( 1858fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1859fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 1860fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 1861fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 AndData, 1862fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT8 OrData 1863fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1864fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1865fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite8ValueToBootScript (Address, MmioBitFieldAndThenOr8 (Address, StartBit, EndBit, AndData, OrData)); 1866fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1867fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1868fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1869fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Saves a 16-bit MMIO register value to the boot script. 1870fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1871fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This internal worker function saves a 16-bit MMIO register value in the S3 script 1872fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 1873fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1874fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If the saving process fails, then ASSERT(). 1875fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1876fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 1877fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value saved to boot script. 1878fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1879fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Value. 1880fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1881fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1882fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 1883fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenInternalSaveMmioWrite16ValueToBootScript ( 1884fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1885fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 Value 1886fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1887fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1888fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten InternalSaveMmioWriteValueToBootScript (S3BootScriptWidthUint16, Address, &Value); 1889fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1890fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return Value; 1891fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1892fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1893fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1894fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 16-bit MMIO register and saves the value in the S3 script to be replayed 1895fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 1896fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1897fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 16-bit MMIO register specified by Address. The 16-bit read value is 1898fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten returned. This function must guarantee that all MMIO read and write 1899fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. 1900fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1901fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit MMIO register operations are not supported, then ASSERT(). 1902fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1903fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to read. 1904fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1905fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 1906fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1907fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1908fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 1909fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1910fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioRead16 ( 1911fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address 1912fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1913fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1914fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite16ValueToBootScript (Address, MmioRead16 (Address)); 1915fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1916fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1917fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1918fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes a 16-bit MMIO register and saves the value in the S3 script to be replayed 1919fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 1920fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1921fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes the 16-bit MMIO register specified by Address with the value specified 1922fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by Value and returns Value. This function must guarantee that all MMIO read 1923fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and write operations are serialized and saves the value in the S3 script to be 1924fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten replayed on S3 resume. 1925fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1926fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit MMIO register operations are not supported, then ASSERT(). 1927fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1928fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 1929fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value to write to the MMIO register. 1930fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1931fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written the MMIO register. 1932fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1933fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1934fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 1935fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1936fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioWrite16 ( 1937fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1938fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 Value 1939fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1940fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1941fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite16ValueToBootScript (Address, MmioWrite16 (Address, Value)); 1942fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1943fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1944fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1945fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 16-bit MMIO register, performs a bitwise OR, and writes the 1946fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the 16-bit MMIO register and saves the value in the S3 script 1947fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 1948fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1949fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 16-bit MMIO register specified by Address, performs a bitwise 1950fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR between the read result and the value specified by OrData, and 1951fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result to the 16-bit MMIO register specified by Address. The value 1952fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten written to the MMIO register is returned. This function must guarantee that 1953fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten all MMIO read and write operations are serialized. 1954fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1955fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit MMIO register operations are not supported, then ASSERT(). 1956fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1957fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 1958fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the MMIO register. 1959fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1960fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 1961fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1962fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1963fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 1964fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1965fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioOr16 ( 1966fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1967fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 OrData 1968fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1969fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1970fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite16ValueToBootScript (Address, MmioOr16 (Address, OrData)); 1971fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 1972fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1973fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 1974fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 16-bit MMIO register, performs a bitwise AND, and writes the result 1975fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten back to the 16-bit MMIO register and saves the value in the S3 script to be 1976fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten replayed on S3 resume. 1977fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1978fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 16-bit MMIO register specified by Address, performs a bitwise AND 1979fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by AndData, and writes the 1980fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 16-bit MMIO register specified by Address. The value written to 1981fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the MMIO register is returned. This function must guarantee that all MMIO 1982fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten read and write operations are serialized. 1983fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1984fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit MMIO register operations are not supported, then ASSERT(). 1985fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1986fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 1987fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 1988fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1989fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 1990fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 1991fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 1992fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 1993fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 1994fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioAnd16 ( 1995fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 1996fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 AndData 1997fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 1998fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 1999fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite16ValueToBootScript (Address, MmioAnd16 (Address, AndData)); 2000fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2001fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2002fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2003fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 16-bit MMIO register, performs a bitwise AND followed by a bitwise 2004fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR, and writes the result back to the 16-bit MMIO register and 2005fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten saves the value in the S3 script to be replayed on S3 resume. 2006fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2007fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 16-bit MMIO register specified by Address, performs a bitwise AND 2008fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by AndData, performs a 2009fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten bitwise OR between the result of the AND operation and the value specified by 2010fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten OrData, and writes the result to the 16-bit MMIO register specified by 2011fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Address. The value written to the MMIO register is returned. This function 2012fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten must guarantee that all MMIO read and write operations are serialized. 2013fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2014fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit MMIO register operations are not supported, then ASSERT(). 2015fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2016fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2017fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 2018fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 2019fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2020fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2021fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2022fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2023fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 2024fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2025fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioAndThenOr16 ( 2026fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2027fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 AndData, 2028fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 OrData 2029fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2030fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2031fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite16ValueToBootScript (Address, MmioAndThenOr16 (Address, AndData, OrData)); 2032fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2033fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2034fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2035fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field of a MMIO register and saves the value in the S3 script to 2036fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 2037fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2038fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the bit field in a 16-bit MMIO register. The bit field is specified by 2039fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the StartBit and the EndBit. The value of the bit field is returned. 2040fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2041fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit MMIO register operations are not supported, then ASSERT(). 2042fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 15, then ASSERT(). 2043fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 15, then ASSERT(). 2044fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 2045fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2046fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address MMIO register to read. 2047fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2048fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 2049fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2050fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 2051fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2052fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 2053fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2054fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2055fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 2056fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2057fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldRead16 ( 2058fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2059fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2060fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit 2061fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2062fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2063fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite16ValueToBootScript (Address, MmioBitFieldRead16 (Address, StartBit, EndBit)); 2064fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2065fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2066fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2067fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes a bit field to a MMIO register and saves the value in the S3 script to 2068fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 2069fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2070fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes Value to the bit field of the MMIO register. The bit field is 2071fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten specified by the StartBit and the EndBit. All other bits in the destination 2072fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten MMIO register are preserved. The new value of the 16-bit register is returned. 2073fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2074fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit MMIO register operations are not supported, then ASSERT(). 2075fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 15, then ASSERT(). 2076fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 15, then ASSERT(). 2077fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 207894952554cc604750f3df3d4e8ae068703481d258lgao If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 2079fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2080fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2081fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2082fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 2083fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2084fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 2085fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value New value of the bit field. 2086fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2087fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2088fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2089fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2090fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 2091fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2092fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldWrite16 ( 2093fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2094fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2095fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 2096fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 Value 2097fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2098fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2099fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite16ValueToBootScript (Address, MmioBitFieldWrite16 (Address, StartBit, EndBit, Value)); 2100fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2101fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2102fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2103fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 16-bit MMIO register, performs a bitwise OR, and 2104fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result back to the bit field in the 16-bit MMIO register and 2105fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten saves the value in the S3 script to be replayed on S3 resume. 2106fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2107fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 16-bit MMIO register specified by Address, performs a bitwise 2108fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR between the read result and the value specified by OrData, and 2109fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result to the 16-bit MMIO register specified by Address. The value 2110fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten written to the MMIO register is returned. This function must guarantee that 2111fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten all MMIO read and write operations are serialized. Extra left bits in OrData 2112fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten are stripped. 2113fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2114fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit MMIO register operations are not supported, then ASSERT(). 2115fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 15, then ASSERT(). 2116fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 15, then ASSERT(). 2117fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 211894952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 2119fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2120fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2121fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2122fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 2123fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2124fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 2125fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the MMIO register. 2126fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2127fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2128fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2129fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2130fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 2131fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2132fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldOr16 ( 2133fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2134fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2135fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 2136fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 OrData 2137fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2138fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2139fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite16ValueToBootScript (Address, MmioBitFieldOr16 (Address, StartBit, EndBit, OrData)); 2140fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2141fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2142fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2143fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 16-bit MMIO register, performs a bitwise AND, and 2144fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result back to the bit field in the 16-bit MMIO register and 2145fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten saves the value in the S3 script to be replayed on S3 resume. 2146fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2147fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 16-bit MMIO register specified by Address, performs a bitwise AND 2148fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by AndData, and writes the 2149fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 16-bit MMIO register specified by Address. The value written to 2150fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the MMIO register is returned. This function must guarantee that all MMIO 2151fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten read and write operations are serialized. Extra left bits in AndData are 2152fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten stripped. 2153fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2154fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit MMIO register operations are not supported, then ASSERT(). 2155fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 15, then ASSERT(). 2156fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 15, then ASSERT(). 2157fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 215894952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 2159fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2160fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2161fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2162fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 2163fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2164fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 2165fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 2166fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2167fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2168fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2169fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2170fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 2171fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2172fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldAnd16 ( 2173fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2174fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2175fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 2176fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 AndData 2177fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2178fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2179fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite16ValueToBootScript (Address, MmioBitFieldAnd16 (Address, StartBit, EndBit, AndData)); 2180fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2181fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2182fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2183fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 16-bit MMIO register, performs a bitwise AND followed 2184fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by a bitwise OR, and writes the result back to the bit field in the 2185fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 16-bit MMIO register and saves the value in the S3 script to be replayed 2186fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 2187fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2188fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 16-bit MMIO register specified by Address, performs a bitwise AND 2189fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten followed by a bitwise OR between the read result and the value 2190fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten specified by AndData, and writes the result to the 16-bit MMIO register 2191fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten specified by Address. The value written to the MMIO register is returned. 2192fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This function must guarantee that all MMIO read and write operations are 2193fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten serialized. Extra left bits in both AndData and OrData are stripped. 2194fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2195fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 16-bit MMIO register operations are not supported, then ASSERT(). 2196fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 15, then ASSERT(). 2197fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 15, then ASSERT(). 2198fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 219994952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 220094952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 2201fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2202fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2203fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2204fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 2205fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2206fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..15. 2207fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 2208fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 2209fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2210fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2211fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2212fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2213fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 2214fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2215fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldAndThenOr16 ( 2216fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2217fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2218fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 2219fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 AndData, 2220fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT16 OrData 2221fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2222fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2223fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite16ValueToBootScript (Address, MmioBitFieldAndThenOr16 (Address, StartBit, EndBit, AndData, OrData)); 2224fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2225fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2226fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2227fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Saves a 32-bit MMIO register value to the boot script. 2228fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2229fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This internal worker function saves a 32-bit MMIO register value in the S3 script 2230fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 2231fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2232fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If the saving process fails, then ASSERT(). 2233fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2234fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2235fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value saved to boot script. 2236fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2237fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Value. 2238fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2239fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2240fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 2241fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenInternalSaveMmioWrite32ValueToBootScript ( 2242fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2243fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 Value 2244fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2245fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2246fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten InternalSaveMmioWriteValueToBootScript (S3BootScriptWidthUint32, Address, &Value); 2247fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2248fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return Value; 2249fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2250fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2251fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2252fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 32-bit MMIO register saves the value in the S3 script to be 2253fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten replayed on S3 resume. 2254fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2255fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 32-bit MMIO register specified by Address. The 32-bit read value is 2256fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten returned. This function must guarantee that all MMIO read and write 2257fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. 2258fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2259fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit MMIO register operations are not supported, then ASSERT(). 2260fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2261fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to read. 2262fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2263fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 2264fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2265fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2266fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 2267fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2268fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioRead32 ( 2269fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address 2270fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2271fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2272fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite32ValueToBootScript (Address, MmioRead32 (Address)); 2273fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2274fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2275fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2276fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes a 32-bit MMIO register and saves the value in the S3 script to be 2277fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten replayed on S3 resume. 2278fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2279fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes the 32-bit MMIO register specified by Address with the value specified 2280fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by Value and returns Value. This function must guarantee that all MMIO read 2281fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and write operations are serialized. 2282fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2283fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit MMIO register operations are not supported, then ASSERT(). 2284fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2285fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2286fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value to write to the MMIO register. 2287fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2288fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written the MMIO register. 2289fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2290fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2291fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 2292fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2293fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioWrite32 ( 2294fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2295fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 Value 2296fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2297fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2298fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite32ValueToBootScript (Address, MmioWrite32 (Address, Value)); 2299fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2300fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2301fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2302fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 32-bit MMIO register, performs a bitwise OR, and writes the 2303fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the 32-bit MMIO register and saves the value in the S3 script 2304fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 2305fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2306fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 32-bit MMIO register specified by Address, performs a bitwise 2307fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR between the read result and the value specified by OrData, and 2308fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result to the 32-bit MMIO register specified by Address. The value 2309fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten written to the MMIO register is returned. This function must guarantee that 2310fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten all MMIO read and write operations are serialized. 2311fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2312fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit MMIO register operations are not supported, then ASSERT(). 2313fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2314fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2315fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the MMIO register. 2316fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2317fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2318fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2319fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2320fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 2321fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2322fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioOr32 ( 2323fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2324fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 OrData 2325fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2326fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2327fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite32ValueToBootScript (Address, MmioOr32 (Address, OrData)); 2328fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2329fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2330fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2331fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 32-bit MMIO register, performs a bitwise AND, and writes the result 2332fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten back to the 32-bit MMIO register and saves the value in the S3 script to be 2333fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten replayed on S3 resume. 2334fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2335fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 32-bit MMIO register specified by Address, performs a bitwise AND 2336fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by AndData, and writes the 2337fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 32-bit MMIO register specified by Address. The value written to 2338fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the MMIO register is returned. This function must guarantee that all MMIO 2339fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten read and write operations are serialized. 2340fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2341fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit MMIO register operations are not supported, then ASSERT(). 2342fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2343fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2344fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 2345fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2346fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2347fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2348fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2349fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 2350fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2351fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioAnd32 ( 2352fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2353fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 AndData 2354fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2355fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2356fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite32ValueToBootScript (Address, MmioAnd32 (Address, AndData)); 2357fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2358fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2359fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2360fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 32-bit MMIO register, performs a bitwise AND followed by a bitwise 2361fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR, and writes the result back to the 32-bit MMIO register and 2362fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten saves the value in the S3 script to be replayed on S3 resume. 2363fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2364fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 32-bit MMIO register specified by Address, performs a bitwise AND 2365fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by AndData, performs a 2366fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten bitwise OR between the result of the AND operation and the value specified by 2367fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten OrData, and writes the result to the 32-bit MMIO register specified by 2368fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Address. The value written to the MMIO register is returned. This function 2369fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten must guarantee that all MMIO read and write operations are serialized. 2370fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2371fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit MMIO register operations are not supported, then ASSERT(). 2372fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2373fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2374fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 2375fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 2376fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2377fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2378fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2379fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2380fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 2381fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2382fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioAndThenOr32 ( 2383fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2384fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 AndData, 2385fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 OrData 2386fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2387fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2388fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite32ValueToBootScript (Address, MmioAndThenOr32 (Address, AndData, OrData)); 2389fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2390fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2391fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2392fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field of a MMIO register and saves the value in the S3 script 2393fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 2394fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2395fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the bit field in a 32-bit MMIO register. The bit field is specified by 2396fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the StartBit and the EndBit. The value of the bit field is returned. 2397fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2398fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit MMIO register operations are not supported, then ASSERT(). 2399fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 31, then ASSERT(). 2400fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 31, then ASSERT(). 2401fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 2402fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2403fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address MMIO register to read. 2404fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2405fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 2406fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2407fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 2408fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2409fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 2410fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2411fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2412fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 2413fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2414fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldRead32 ( 2415fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2416fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2417fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit 2418fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2419fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2420fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite32ValueToBootScript (Address, MmioBitFieldRead32 (Address, StartBit, EndBit)); 2421fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2422fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2423fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2424fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes a bit field to a MMIO register and saves the value in the S3 script 2425fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 2426fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2427fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes Value to the bit field of the MMIO register. The bit field is 2428fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten specified by the StartBit and the EndBit. All other bits in the destination 2429fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten MMIO register are preserved. The new value of the 32-bit register is returned. 2430fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2431fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit MMIO register operations are not supported, then ASSERT(). 2432fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 31, then ASSERT(). 2433fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 31, then ASSERT(). 2434fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 243594952554cc604750f3df3d4e8ae068703481d258lgao If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 2436fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2437fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2438fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2439fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 2440fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2441fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 2442fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value New value of the bit field. 2443fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2444fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2445fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2446fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2447fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 2448fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2449fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldWrite32 ( 2450fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2451fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2452fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 2453fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 Value 2454fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2455fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2456fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite32ValueToBootScript (Address, MmioBitFieldWrite32 (Address, StartBit, EndBit, Value)); 2457fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2458fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2459fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2460fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 32-bit MMIO register, performs a bitwise OR, and 2461fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result back to the bit field in the 32-bit MMIO register and 2462fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten saves the value in the S3 script to be replayed on S3 resume. 2463fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2464fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 32-bit MMIO register specified by Address, performs a bitwise 2465fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR between the read result and the value specified by OrData, and 2466fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result to the 32-bit MMIO register specified by Address. The value 2467fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten written to the MMIO register is returned. This function must guarantee that 2468fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten all MMIO read and write operations are serialized. Extra left bits in OrData 2469fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten are stripped. 2470fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2471fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit MMIO register operations are not supported, then ASSERT(). 2472fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 31, then ASSERT(). 2473fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 31, then ASSERT(). 2474fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 247594952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 2476fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2477fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2478fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2479fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 2480fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2481fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 2482fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the MMIO register. 2483fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2484fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2485fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2486fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2487fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 2488fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2489fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldOr32 ( 2490fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2491fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2492fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 2493fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 OrData 2494fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2495fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2496fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite32ValueToBootScript (Address, MmioBitFieldOr32 (Address, StartBit, EndBit, OrData)); 2497fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2498fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2499fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2500fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 32-bit MMIO register, performs a bitwise AND, and 2501fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result back to the bit field in the 32-bit MMIO register and 2502fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten saves the value in the S3 script to be replayed on S3 resume. 2503fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2504fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 32-bit MMIO register specified by Address, performs a bitwise AND 2505fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by AndData, and writes the 2506fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 32-bit MMIO register specified by Address. The value written to 2507fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the MMIO register is returned. This function must guarantee that all MMIO 2508fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten read and write operations are serialized. Extra left bits in AndData are 2509fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten stripped. 2510fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2511fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit MMIO register operations are not supported, then ASSERT(). 2512fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 31, then ASSERT(). 2513fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 31, then ASSERT(). 2514fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 251594952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 2516fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2517fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2518fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2519fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 2520fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2521fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 2522fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 2523fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2524fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2525fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2526fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2527fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 2528fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2529fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldAnd32 ( 2530fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2531fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2532fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 2533fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 AndData 2534fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2535fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2536fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite32ValueToBootScript (Address, MmioBitFieldAnd32 (Address, StartBit, EndBit, AndData)); 2537fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2538fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2539fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2540fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 32-bit MMIO register, performs a bitwise AND followed 2541fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by a bitwise OR, and writes the result back to the bit field in the 2542fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 32-bit MMIO register and saves the value in the S3 script to be replayed 2543fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 2544fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2545fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 32-bit MMIO register specified by Address, performs a bitwise AND 2546fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten followed by a bitwise OR between the read result and the value 2547fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten specified by AndData, and writes the result to the 32-bit MMIO register 2548fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten specified by Address. The value written to the MMIO register is returned. 2549fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This function must guarantee that all MMIO read and write operations are 2550fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten serialized. Extra left bits in both AndData and OrData are stripped. 2551fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2552fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 32-bit MMIO register operations are not supported, then ASSERT(). 2553fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 31, then ASSERT(). 2554fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 31, then ASSERT(). 2555fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 255694952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 255794952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 2558fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2559fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2560fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2561fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 2562fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2563fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..31. 2564fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 2565fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 2566fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2567fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2568fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2569fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2570fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 2571fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2572fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldAndThenOr32 ( 2573fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2574fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2575fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 2576fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 AndData, 2577fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT32 OrData 2578fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2579fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2580fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite32ValueToBootScript (Address, MmioBitFieldAndThenOr32 (Address, StartBit, EndBit, AndData, OrData)); 2581fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2582fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2583fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2584fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Saves a 64-bit MMIO register value to the boot script. 2585fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2586fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This internal worker function saves a 64-bit MMIO register value in the S3 script 2587fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 2588fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2589fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If the saving process fails, then ASSERT(). 2590fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2591fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2592fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value saved to boot script. 2593fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2594fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Value. 2595fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2596fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2597fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 2598fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenInternalSaveMmioWrite64ValueToBootScript ( 2599fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2600fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 Value 2601fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2602fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2603fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten InternalSaveMmioWriteValueToBootScript (S3BootScriptWidthUint64, Address, &Value); 2604fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2605fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return Value; 2606fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2607fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2608fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2609fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 64-bit MMIO register and saves the value in the S3 script to be 2610fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten replayed on S3 resume. 2611fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2612fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 64-bit MMIO register specified by Address. The 64-bit read value is 2613fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten returned. This function must guarantee that all MMIO read and write 2614fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten operations are serialized. 2615fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2616fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit MMIO register operations are not supported, then ASSERT(). 2617fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2618fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to read. 2619fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2620fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 2621fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2622fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2623fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 2624fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2625fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioRead64 ( 2626fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address 2627fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2628fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2629fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite64ValueToBootScript (Address, MmioRead64 (Address)); 2630fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2631fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2632fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2633fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes a 64-bit MMIO register and saves the value in the S3 script to be 2634fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten replayed on S3 resume. 2635fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2636fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes the 64-bit MMIO register specified by Address with the value specified 2637fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by Value and returns Value. This function must guarantee that all MMIO read 2638fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and write operations are serialized. 2639fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2640fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit MMIO register operations are not supported, then ASSERT(). 2641fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2642fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2643fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value The value to write to the MMIO register. 2644fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2645fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written the MMIO register. 2646fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2647fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2648fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 2649fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2650fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioWrite64 ( 2651fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2652fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 Value 2653fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2654fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2655fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite64ValueToBootScript (Address, MmioWrite64 (Address, Value)); 2656fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2657fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2658fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2659fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 64-bit MMIO register, performs a bitwise OR, and writes the 2660fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result back to the 64-bit MMIO register and saves the value in the S3 script 2661fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to be replayed on S3 resume. 2662fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2663fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 64-bit MMIO register specified by Address, performs a bitwise 2664fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR between the read result and the value specified by OrData, and 2665fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result to the 64-bit MMIO register specified by Address. The value 2666fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten written to the MMIO register is returned. This function must guarantee that 2667fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten all MMIO read and write operations are serialized. 2668fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2669fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit MMIO register operations are not supported, then ASSERT(). 2670fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2671fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2672fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the MMIO register. 2673fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2674fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2675fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2676fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2677fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 2678fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2679fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioOr64 ( 2680fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2681fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 OrData 2682fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2683fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2684fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite64ValueToBootScript (Address, MmioOr64 (Address, OrData)); 2685fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2686fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2687fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2688fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 64-bit MMIO register, performs a bitwise AND, and writes the result 2689fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten back to the 64-bit MMIO register and saves the value in the S3 script to be 2690fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten replayed on S3 resume. 2691fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2692fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 64-bit MMIO register specified by Address, performs a bitwise AND 2693fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by AndData, and writes the 2694fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 64-bit MMIO register specified by Address. The value written to 2695fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the MMIO register is returned. This function must guarantee that all MMIO 2696fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten read and write operations are serialized. 2697fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2698fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit MMIO register operations are not supported, then ASSERT(). 2699fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2700fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2701fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 2702fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2703fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2704fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2705fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2706fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 2707fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2708fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioAnd64 ( 2709fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2710fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 AndData 2711fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2712fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2713fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite64ValueToBootScript (Address, MmioAnd64 (Address, AndData)); 2714fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2715fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2716fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2717fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a 64-bit MMIO register, performs a bitwise AND followed by a bitwise 2718fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR, and writes the result back to the 64-bit MMIO register and 2719fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten saves the value in the S3 script to be replayed on S3 resume. 2720fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2721fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 64-bit MMIO register specified by Address, performs a bitwise AND 2722fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by AndData, performs a 2723fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten bitwise OR between the result of the AND operation and the value specified by 2724fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten OrData, and writes the result to the 64-bit MMIO register specified by 2725fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Address. The value written to the MMIO register is returned. This function 2726fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten must guarantee that all MMIO read and write operations are serialized. 2727fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2728fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit MMIO register operations are not supported, then ASSERT(). 2729fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2730fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2731fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 2732fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 2733fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2734fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2735fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2736fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2737fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 2738fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2739fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioAndThenOr64 ( 2740fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2741fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 AndData, 2742fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 OrData 2743fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2744fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2745fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite64ValueToBootScript (Address, MmioAndThenOr64 (Address, AndData, OrData)); 2746fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2747fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2748fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2749fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field of a MMIO register saves the value in the S3 script to 2750fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 2751fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2752fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the bit field in a 64-bit MMIO register. The bit field is specified by 2753fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the StartBit and the EndBit. The value of the bit field is returned. 2754fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2755fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit MMIO register operations are not supported, then ASSERT(). 2756fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 63, then ASSERT(). 2757fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 63, then ASSERT(). 2758fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 2759fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2760fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address MMIO register to read. 2761fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2762fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 2763fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2764fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 2765fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2766fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value read. 2767fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2768fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2769fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 2770fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2771fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldRead64 ( 2772fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2773fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2774fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit 2775fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2776fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2777fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite64ValueToBootScript (Address, MmioBitFieldRead64 (Address, StartBit, EndBit)); 2778fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2779fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2780fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2781fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes a bit field to a MMIO register and saves the value in the S3 script to 2782fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten be replayed on S3 resume. 2783fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2784fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Writes Value to the bit field of the MMIO register. The bit field is 2785fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten specified by the StartBit and the EndBit. All other bits in the destination 2786fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten MMIO register are preserved. The new value of the 64-bit register is returned. 2787fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2788fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit MMIO register operations are not supported, then ASSERT(). 2789fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 63, then ASSERT(). 2790fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 63, then ASSERT(). 2791fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 279294952554cc604750f3df3d4e8ae068703481d258lgao If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 2793fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2794fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2795fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2796fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 2797fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2798fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 2799fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Value New value of the bit field. 2800fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2801fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2802fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2803fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2804fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 2805fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2806fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldWrite64 ( 2807fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2808fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2809fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 2810fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 Value 2811fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2812fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2813fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite64ValueToBootScript (Address, MmioBitFieldWrite64 (Address, StartBit, EndBit, Value)); 2814fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2815fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2816fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2817fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 64-bit MMIO register, performs a bitwise OR, and 2818fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result back to the bit field in the 64-bit MMIO register and 2819fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten saves the value in the S3 script to be replayed on S3 resume. 2820fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2821fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 64-bit MMIO register specified by Address, performs a bitwise 2822fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten inclusive OR between the read result and the value specified by OrData, and 2823fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result to the 64-bit MMIO register specified by Address. The value 2824fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten written to the MMIO register is returned. This function must guarantee that 2825fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten all MMIO read and write operations are serialized. Extra left bits in OrData 2826fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten are stripped. 2827fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2828fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit MMIO register operations are not supported, then ASSERT(). 2829fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 63, then ASSERT(). 2830fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 63, then ASSERT(). 2831fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 283294952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 2833fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2834fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2835fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2836fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 2837fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2838fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 2839fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the read value from the MMIO register. 2840fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2841fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2842fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2843fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2844fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 2845fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2846fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldOr64 ( 2847fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2848fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2849fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 2850fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 OrData 2851fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2852fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2853fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite64ValueToBootScript (Address, MmioBitFieldOr64 (Address, StartBit, EndBit, OrData)); 2854fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2855fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2856fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2857fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 64-bit MMIO register, performs a bitwise AND, and 2858fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten writes the result back to the bit field in the 64-bit MMIO register and saves 2859fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the value in the S3 script to be replayed on S3 resume. 2860fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2861fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 64-bit MMIO register specified by Address, performs a bitwise AND 2862fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten between the read result and the value specified by AndData, and writes the 2863fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten result to the 64-bit MMIO register specified by Address. The value written to 2864fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten the MMIO register is returned. This function must guarantee that all MMIO 2865fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten read and write operations are serialized. Extra left bits in AndData are 2866fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten stripped. 2867fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2868fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit MMIO register operations are not supported, then ASSERT(). 2869fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 63, then ASSERT(). 2870fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 63, then ASSERT(). 2871fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 287294952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 2873fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2874fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2875fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2876fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 2877fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2878fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 2879fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 2880fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2881fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2882fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2883fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2884fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 2885fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2886fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldAnd64 ( 2887fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2888fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2889fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 2890fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 AndData 2891fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2892fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2893fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite64ValueToBootScript (Address, MmioBitFieldAnd64 (Address, StartBit, EndBit, AndData)); 2894fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2895fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2896fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2897fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads a bit field in a 64-bit MMIO register, performs a bitwise AND followed 2898fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by a bitwise OR, and writes the result back to the bit field in the 2899fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 64-bit MMIO register and saves the value in the S3 script to be replayed 2900fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten on S3 resume. 2901fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2902fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Reads the 64-bit MMIO register specified by Address, performs a bitwise AND 2903fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten followed by a bitwise OR between the read result and the value 2904fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten specified by AndData, and writes the result to the 64-bit MMIO register 2905fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten specified by Address. The value written to the MMIO register is returned. 2906fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten This function must guarantee that all MMIO read and write operations are 2907fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten serialized. Extra left bits in both AndData and OrData are stripped. 2908fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2909fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If 64-bit MMIO register operations are not supported, then ASSERT(). 2910fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartBit is greater than 63, then ASSERT(). 2911fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is greater than 63, then ASSERT(). 2912fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If EndBit is less than StartBit, then ASSERT(). 291394952554cc604750f3df3d4e8ae068703481d258lgao If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 291494952554cc604750f3df3d4e8ae068703481d258lgao If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT(). 2915fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2916fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Address The MMIO register to write. 2917fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartBit The ordinal of the least significant bit in the bit field. 2918fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 2919fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param EndBit The ordinal of the most significant bit in the bit field. 2920fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Range 0..63. 2921fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param AndData The value to AND with the read value from the MMIO register. 2922fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param OrData The value to OR with the result of the AND operation. 2923fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2924fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return The value written back to the MMIO register. 2925fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2926fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2927fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 2928fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2929fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioBitFieldAndThenOr64 ( 2930fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Address, 2931fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartBit, 2932fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN EndBit, 2933fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 AndData, 2934fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINT64 OrData 2935fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2936fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2937fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return InternalSaveMmioWrite64ValueToBootScript (Address, MmioBitFieldAndThenOr64 (Address, StartBit, EndBit, AndData, OrData)); 2938fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2939fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2940fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2941fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from MMIO region to system memory by using 8-bit access 2942fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and saves the value in the S3 script to be replayed on S3 resume. 2943fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2944fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from MMIO region specified by starting address StartAddress 2945fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to system memory specified by Buffer by using 8-bit access. The total 2946fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten number of byte to be copied is specified by Length. Buffer is returned. 2947fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2948fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT(). 2949fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). 2950fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2951fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2952fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartAddress Starting address for the MMIO region to be copied from. 2953fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Length Size in bytes of the copy. 2954fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Buffer Pointer to a system memory buffer receiving the data read. 2955fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2956fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Buffer 2957fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2958fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 2959fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 * 2960fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 2961fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioReadBuffer8 ( 2962fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartAddress, 2963fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Length, 2964fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten OUT UINT8 *Buffer 2965fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 2966fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 2967fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten UINT8 *ReturnBuffer; 2968fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten RETURN_STATUS Status; 2969fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2970fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer = MmioReadBuffer8 (StartAddress, Length, Buffer); 2971fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2972fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Status = S3BootScriptSaveMemWrite ( 2973fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3BootScriptWidthUint8, 2974fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten StartAddress, 2975fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Length / sizeof (UINT8), 2976fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer 2977fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ); 2978fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ASSERT (Status == RETURN_SUCCESS); 2979fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2980fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return ReturnBuffer; 2981fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 2982fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2983fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 2984fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from MMIO region to system memory by using 16-bit access 2985fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and saves the value in the S3 script to be replayed on S3 resume. 2986fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2987fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from MMIO region specified by starting address StartAddress 2988fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to system memory specified by Buffer by using 16-bit access. The total 2989fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten number of byte to be copied is specified by Length. Buffer is returned. 2990fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2991fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartAddress is not aligned on a 16-bit boundary, then ASSERT(). 2992fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2993fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT(). 2994fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). 2995fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2996fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is not aligned on a 16-bit boundary, then ASSERT(). 2997fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Buffer is not aligned on a 16-bit boundary, then ASSERT(). 2998fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 2999fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartAddress Starting address for the MMIO region to be copied from. 3000fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Length Size in bytes of the copy. 3001fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Buffer Pointer to a system memory buffer receiving the data read. 3002fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3003fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Buffer 3004fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3005fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 3006fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 * 3007fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 3008fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioReadBuffer16 ( 3009fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartAddress, 3010fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Length, 3011fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten OUT UINT16 *Buffer 3012fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 3013fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 3014fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten UINT16 *ReturnBuffer; 3015fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten RETURN_STATUS Status; 3016fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3017fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer = MmioReadBuffer16 (StartAddress, Length, Buffer); 3018fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3019fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Status = S3BootScriptSaveMemWrite ( 3020fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3BootScriptWidthUint16, 3021fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten StartAddress, 3022fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Length / sizeof (UINT16), 3023fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer 3024fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ); 3025fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ASSERT (Status == RETURN_SUCCESS); 3026fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3027fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return ReturnBuffer; 3028fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 3029fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3030fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 3031fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from MMIO region to system memory by using 32-bit access 3032fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and saves the value in the S3 script to be replayed on S3 resume. 3033fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3034fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from MMIO region specified by starting address StartAddress 3035fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to system memory specified by Buffer by using 32-bit access. The total 3036fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten number of byte to be copied is specified by Length. Buffer is returned. 3037fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3038fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartAddress is not aligned on a 32-bit boundary, then ASSERT(). 3039fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3040fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT(). 3041fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). 3042fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3043fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is not aligned on a 32-bit boundary, then ASSERT(). 3044fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Buffer is not aligned on a 32-bit boundary, then ASSERT(). 3045fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3046fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartAddress Starting address for the MMIO region to be copied from. 3047fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Length Size in bytes of the copy. 3048fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Buffer Pointer to a system memory buffer receiving the data read. 3049fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3050fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Buffer 3051fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3052fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 3053fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 * 3054fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 3055fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioReadBuffer32 ( 3056fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartAddress, 3057fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Length, 3058fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten OUT UINT32 *Buffer 3059fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 3060fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 3061fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten UINT32 *ReturnBuffer; 3062fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten RETURN_STATUS Status; 3063fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3064fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer = MmioReadBuffer32 (StartAddress, Length, Buffer); 3065fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3066fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Status = S3BootScriptSaveMemWrite ( 3067fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3BootScriptWidthUint32, 3068fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten StartAddress, 3069fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Length / sizeof (UINT32), 3070fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer 3071fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ); 3072fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ASSERT (Status == RETURN_SUCCESS); 3073fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3074fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return ReturnBuffer; 3075fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 3076fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3077fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 3078fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from MMIO region to system memory by using 64-bit access 3079fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and saves the value in the S3 script to be replayed on S3 resume. 3080fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3081fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from MMIO region specified by starting address StartAddress 3082fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten to system memory specified by Buffer by using 64-bit access. The total 3083fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten number of byte to be copied is specified by Length. Buffer is returned. 3084fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3085fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartAddress is not aligned on a 64-bit boundary, then ASSERT(). 3086fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3087fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT(). 3088fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). 3089fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3090fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is not aligned on a 64-bit boundary, then ASSERT(). 3091fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Buffer is not aligned on a 64-bit boundary, then ASSERT(). 3092fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3093fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartAddress Starting address for the MMIO region to be copied from. 3094fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Length Size in bytes of the copy. 3095fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Buffer Pointer to a system memory buffer receiving the data read. 3096fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3097fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Buffer 3098fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3099fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 3100fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 * 3101fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 3102fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioReadBuffer64 ( 3103fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartAddress, 3104fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Length, 3105fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten OUT UINT64 *Buffer 3106fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 3107fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 3108fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten UINT64 *ReturnBuffer; 3109fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten RETURN_STATUS Status; 3110fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3111fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer = MmioReadBuffer64 (StartAddress, Length, Buffer); 3112fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3113fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Status = S3BootScriptSaveMemWrite ( 3114fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3BootScriptWidthUint64, 3115fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten StartAddress, 3116fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Length / sizeof (UINT64), 3117fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer 3118fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ); 3119fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ASSERT (Status == RETURN_SUCCESS); 3120fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3121fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return ReturnBuffer; 3122fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 3123fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3124fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3125fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 3126fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from system memory to MMIO region by using 8-bit access 3127fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and saves the value in the S3 script to be replayed on S3 resume. 3128fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3129fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from system memory specified by Buffer to MMIO region specified 3130fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by starting address StartAddress by using 8-bit access. The total number 3131fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten of byte to be copied is specified by Length. Buffer is returned. 3132fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3133fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT(). 3134fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS -Buffer + 1), then ASSERT(). 3135fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3136fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3137fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartAddress Starting address for the MMIO region to be copied to. 3138fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Length Size in bytes of the copy. 3139fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Buffer Pointer to a system memory buffer containing the data to write. 3140fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3141fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Buffer 3142fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3143fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 3144fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT8 * 3145fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 3146fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioWriteBuffer8 ( 3147fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartAddress, 3148fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Length, 3149fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN CONST UINT8 *Buffer 3150fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 3151fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 3152fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten UINT8 *ReturnBuffer; 3153fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten RETURN_STATUS Status; 3154fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3155fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer = MmioWriteBuffer8 (StartAddress, Length, Buffer); 3156fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3157fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Status = S3BootScriptSaveMemWrite ( 3158fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3BootScriptWidthUint8, 3159fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten StartAddress, 3160fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Length / sizeof (UINT8), 3161fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer 3162fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ); 3163fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ASSERT (Status == RETURN_SUCCESS); 3164fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3165fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return ReturnBuffer; 3166fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 3167fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3168fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 3169fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from system memory to MMIO region by using 16-bit access 3170fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and saves the value in the S3 script to be replayed on S3 resume. 3171fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3172fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from system memory specified by Buffer to MMIO region specified 3173fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by starting address StartAddress by using 16-bit access. The total number 3174fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten of byte to be copied is specified by Length. Buffer is returned. 3175fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3176fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartAddress is not aligned on a 16-bit boundary, then ASSERT(). 3177fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3178fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT(). 3179fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS -Buffer + 1), then ASSERT(). 3180fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3181fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is not aligned on a 16-bit boundary, then ASSERT(). 3182fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3183fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Buffer is not aligned on a 16-bit boundary, then ASSERT(). 3184fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3185fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartAddress Starting address for the MMIO region to be copied to. 3186fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Length Size in bytes of the copy. 3187fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Buffer Pointer to a system memory buffer containing the data to write. 3188fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3189fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Buffer 3190fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3191fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 3192fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT16 * 3193fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 3194fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioWriteBuffer16 ( 3195fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartAddress, 3196fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Length, 3197fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN CONST UINT16 *Buffer 3198fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 3199fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 3200fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten UINT16 *ReturnBuffer; 3201fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten RETURN_STATUS Status; 3202fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3203fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer = MmioWriteBuffer16 (StartAddress, Length, Buffer); 3204fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3205fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Status = S3BootScriptSaveMemWrite ( 3206fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3BootScriptWidthUint16, 3207fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten StartAddress, 3208fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Length / sizeof (UINT16), 3209fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer 3210fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ); 3211fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ASSERT (Status == RETURN_SUCCESS); 3212fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3213fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return ReturnBuffer; 3214fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 3215fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3216fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3217fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 3218fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from system memory to MMIO region by using 32-bit access 3219fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and saves the value in the S3 script to be replayed on S3 resume. 3220fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3221fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from system memory specified by Buffer to MMIO region specified 3222fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by starting address StartAddress by using 32-bit access. The total number 3223fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten of byte to be copied is specified by Length. Buffer is returned. 3224fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3225fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartAddress is not aligned on a 32-bit boundary, then ASSERT(). 3226fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3227fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT(). 3228fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS -Buffer + 1), then ASSERT(). 3229fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3230fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is not aligned on a 32-bit boundary, then ASSERT(). 3231fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3232fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Buffer is not aligned on a 32-bit boundary, then ASSERT(). 3233fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3234fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartAddress Starting address for the MMIO region to be copied to. 3235fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Length Size in bytes of the copy. 3236fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Buffer Pointer to a system memory buffer containing the data to write. 3237fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3238fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Buffer 3239fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3240fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 3241fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT32 * 3242fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 3243fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioWriteBuffer32 ( 3244fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartAddress, 3245fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Length, 3246fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN CONST UINT32 *Buffer 3247fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 3248fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 3249fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten UINT32 *ReturnBuffer; 3250fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten RETURN_STATUS Status; 3251fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3252fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer = MmioWriteBuffer32 (StartAddress, Length, Buffer); 3253fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3254fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Status = S3BootScriptSaveMemWrite ( 3255fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3BootScriptWidthUint32, 3256fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten StartAddress, 3257fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Length / sizeof (UINT32), 3258fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer 3259fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ); 3260fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ASSERT (Status == RETURN_SUCCESS); 3261fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3262fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return ReturnBuffer; 3263fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 3264fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3265fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten/** 3266fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from system memory to MMIO region by using 64-bit access 3267fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten and saves the value in the S3 script to be replayed on S3 resume. 3268fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3269fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Copy data from system memory specified by Buffer to MMIO region specified 3270fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten by starting address StartAddress by using 64-bit access. The total number 3271fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten of byte to be copied is specified by Length. Buffer is returned. 3272fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3273fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If StartAddress is not aligned on a 64-bit boundary, then ASSERT(). 3274fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3275fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT(). 3276fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is greater than (MAX_ADDRESS -Buffer + 1), then ASSERT(). 3277fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3278fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Length is not aligned on a 64-bit boundary, then ASSERT(). 3279fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3280fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten If Buffer is not aligned on a 64-bit boundary, then ASSERT(). 3281fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3282fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param StartAddress Starting address for the MMIO region to be copied to. 3283fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Length Size in bytes of the copy. 3284fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @param Buffer Pointer to a system memory buffer containing the data to write. 3285fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3286fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten @return Buffer 3287fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3288fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten**/ 3289fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenUINT64 * 3290fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenEFIAPI 3291fe69ac847a984abf0307ae8706dcabbb928a5a48jljustenS3MmioWriteBuffer64 ( 3292fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN StartAddress, 3293fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN UINTN Length, 3294fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten IN CONST UINT64 *Buffer 3295fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ) 3296fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten{ 3297fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten UINT64 *ReturnBuffer; 3298fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten RETURN_STATUS Status; 3299fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3300fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer = MmioWriteBuffer64 (StartAddress, Length, Buffer); 3301fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3302fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Status = S3BootScriptSaveMemWrite ( 3303fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten S3BootScriptWidthUint64, 3304fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten StartAddress, 3305fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten Length / sizeof (UINT64), 3306fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ReturnBuffer 3307fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ); 3308fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten ASSERT (Status == RETURN_SUCCESS); 3309fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3310fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten return ReturnBuffer; 3311fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten} 3312fe69ac847a984abf0307ae8706dcabbb928a5a48jljusten 3313