blob: 47c4ff96b5cb47e8a064ccaac55a0eb9f3bd0ecf [file] [log] [blame]
Vishal Bhoj82c80712015-12-15 21:13:33 +05301/** @file
2 I/O and MMIO Library Services that do I/O and also enable the I/O operation
3 to be replayed during an S3 resume. This library class maps directly on top
4 of the IoLib class.
5
6 Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
7
8 This program and the accompanying materials
9 are licensed and made available under the terms and conditions
10 of the BSD License which accompanies this distribution. The
11 full text of the license may be found at
12 http://opensource.org/licenses/bsd-license.php
13
14 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
15 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16
17**/
18
19#ifndef __S3_IO_LIB_H__
20#define __S3_IO_LIB_H__
21
22/**
23 Reads an 8-bit I/O port and saves the value in the S3 script to be replayed
24 on S3 resume.
25
26 Reads the 8-bit I/O port specified by Port. The 8-bit read value is returned.
27 This function must guarantee that all I/O read and write operations are
28 serialized.
29
30 If 8-bit I/O port operations are not supported, then ASSERT().
31
32 @param[in] Port The I/O port to read.
33
34 @return The value read.
35
36**/
37UINT8
38EFIAPI
39S3IoRead8 (
40 IN UINTN Port
41 );
42
43/**
44 Writes an 8-bit I/O port, and saves the value in the S3 script to be replayed
45 on S3 resume.
46
47 Writes the 8-bit I/O port specified by Port with the value specified by Value
48 and returns Value. This function must guarantee that all I/O read and write
49 operations are serialized.
50
51 If 8-bit I/O port operations are not supported, then ASSERT().
52
53 @param[in] Port The I/O port to write.
54 @param[in] Value The value to write to the I/O port.
55
56 @return The value written the I/O port.
57
58**/
59UINT8
60EFIAPI
61S3IoWrite8 (
62 IN UINTN Port,
63 IN UINT8 Value
64 );
65
66/**
67 Reads an 8-bit I/O port, performs a bitwise OR, writes the
68 result back to the 8-bit I/O port, and saves the value in the S3 script to be
69 replayed on S3 resume.
70
71 Reads the 8-bit I/O port specified by Port, performs a bitwise OR
72 between the read result and the value specified by OrData, and writes the
73 result to the 8-bit I/O port specified by Port. The value written to the I/O
74 port is returned. This function must guarantee that all I/O read and write
75 operations are serialized.
76
77 If 8-bit I/O port operations are not supported, then ASSERT().
78
79 @param[in] Port The I/O port to write.
80 @param[in] OrData The value to OR with the read value from the I/O port.
81
82 @return The value written back to the I/O port.
83
84**/
85UINT8
86EFIAPI
87S3IoOr8 (
88 IN UINTN Port,
89 IN UINT8 OrData
90 );
91
92/**
93 Reads an 8-bit I/O port, performs a bitwise AND, writes the result back
94 to the 8-bit I/O port, and saves the value in the S3 script to be replayed
95 on S3 resume.
96
97 Reads the 8-bit I/O port specified by Port, performs a bitwise AND between
98 the read result and the value specified by AndData, and writes the result to
99 the 8-bit I/O port specified by Port. The value written to the I/O port is
100 returned. This function must guarantee that all I/O read and write operations
101 are serialized.
102
103 If 8-bit I/O port operations are not supported, then ASSERT().
104
105 @param[in] Port The I/O port to write.
106 @param[in] AndData The value to AND with the read value from the I/O port.
107
108 @return The value written back to the I/O port.
109
110**/
111UINT8
112EFIAPI
113S3IoAnd8 (
114 IN UINTN Port,
115 IN UINT8 AndData
116 );
117
118/**
119 Reads an 8-bit I/O port, performs a bitwise AND followed by a bitwise
120 inclusive OR, writes the result back to the 8-bit I/O port, and saves
121 the value in the S3 script to be replayed on S3 resume.
122
123 Reads the 8-bit I/O port specified by Port, performs a bitwise AND between
124 the read result and the value specified by AndData, performs a bitwise OR
125 between the result of the AND operation and the value specified by OrData,
126 and writes the result to the 8-bit I/O port specified by Port. The value
127 written to the I/O port is returned. This function must guarantee that all
128 I/O read and write operations are serialized.
129
130 If 8-bit I/O port operations are not supported, then ASSERT().
131
132 @param[in] Port The I/O port to write.
133 @param[in] AndData The value to AND with the read value from the I/O port.
134 @param[in] OrData The value to OR with the result of the AND operation.
135
136 @return The value written back to the I/O port.
137
138**/
139UINT8
140EFIAPI
141S3IoAndThenOr8 (
142 IN UINTN Port,
143 IN UINT8 AndData,
144 IN UINT8 OrData
145 );
146
147/**
148 Reads a bit field of an I/O register, and saves the value in the S3 script to
149 be replayed on S3 resume.
150
151 Reads the bit field in an 8-bit I/O register. The bit field is specified by
152 the StartBit and the EndBit. The value of the bit field is returned.
153
154 If 8-bit I/O port operations are not supported, then ASSERT().
155 If StartBit is greater than 7, then ASSERT().
156 If EndBit is greater than 7, then ASSERT().
157 If EndBit is less than StartBit, then ASSERT().
158
159 @param[in] Port The I/O port to read.
160 @param[in] StartBit The ordinal of the least significant bit in the bit field.
161 Range 0..7.
162 @param[in] EndBit The ordinal of the most significant bit in the bit field.
163 Range 0..7.
164
165 @return The value read.
166
167**/
168UINT8
169EFIAPI
170S3IoBitFieldRead8 (
171 IN UINTN Port,
172 IN UINTN StartBit,
173 IN UINTN EndBit
174 );
175
176/**
177 Writes a bit field to an I/O register and saves the value in the S3 script to
178 be replayed on S3 resume.
179
180 Writes Value to the bit field of the I/O register. The bit field is specified
181 by the StartBit and the EndBit. All other bits in the destination I/O
182 register are preserved. The value written to the I/O port is returned.
183 Remaining bits in Value are stripped.
184
185 If 8-bit I/O port operations are not supported, then ASSERT().
186 If StartBit is greater than 7, then ASSERT().
187 If EndBit is greater than 7, then ASSERT().
188 If EndBit is less than StartBit, then ASSERT().
189 If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
190
191 @param[in] Port The I/O port to write.
192 @param[in] StartBit The ordinal of the least significant bit in the bit field.
193 Range 0..7.
194 @param[in] EndBit The ordinal of the most significant bit in the bit field.
195 Range 0..7.
196 @param[in] Value New value of the bit field.
197
198 @return The value written back to the I/O port.
199
200**/
201UINT8
202EFIAPI
203S3IoBitFieldWrite8 (
204 IN UINTN Port,
205 IN UINTN StartBit,
206 IN UINTN EndBit,
207 IN UINT8 Value
208 );
209
210/**
211 Reads a bit field in an 8-bit port, performs a bitwise OR, writes the
212 result back to the bit field in the 8-bit port, and saves the value in the
213 S3 script to be replayed on S3 resume.
214
215 Reads the 8-bit I/O port specified by Port, performs a bitwise OR
216 between the read result and the value specified by OrData, and writes the
217 result to the 8-bit I/O port specified by Port. The value written to the I/O
218 port is returned. This function must guarantee that all I/O read and write
219 operations are serialized. Extra left bits in OrData are stripped.
220
221 If 8-bit I/O port operations are not supported, then ASSERT().
222 If StartBit is greater than 7, then ASSERT().
223 If EndBit is greater than 7, then ASSERT().
224 If EndBit is less than StartBit, then ASSERT().
225 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
226
227 @param[in] Port The I/O port to write.
228 @param[in] StartBit The ordinal of the least significant bit in the bit field.
229 Range 0..7.
230 @param[in] EndBit The ordinal of the most significant bit in the bit field.
231 Range 0..7.
232 @param[in] OrData The value to OR with the read value from the I/O port.
233
234 @return The value written back to the I/O port.
235
236**/
237UINT8
238EFIAPI
239S3IoBitFieldOr8 (
240 IN UINTN Port,
241 IN UINTN StartBit,
242 IN UINTN EndBit,
243 IN UINT8 OrData
244 );
245
246/**
247 Reads a bit field in an 8-bit port, performs a bitwise AND, writes the
248 result back to the bit field in the 8-bit port, and saves the value in the
249 S3 script to be replayed on S3 resume.
250
251 Reads the 8-bit I/O port specified by Port, performs a bitwise AND between
252 the read result and the value specified by AndData, and writes the result to
253 the 8-bit I/O port specified by Port. The value written to the I/O port is
254 returned. This function must guarantee that all I/O read and write operations
255 are serialized. Extra left bits in AndData are stripped.
256
257 If 8-bit I/O port operations are not supported, then ASSERT().
258 If StartBit is greater than 7, then ASSERT().
259 If EndBit is greater than 7, then ASSERT().
260 If EndBit is less than StartBit, then ASSERT().
261 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
262
263 @param[in] Port The I/O port to write.
264 @param[in] StartBit The ordinal of the least significant bit in the bit field.
265 Range 0..7.
266 @param[in] EndBit The ordinal of the most significant bit in the bit field.
267 Range 0..7.
268 @param[in] AndData The value to AND with the read value from the I/O port.
269
270 @return The value written back to the I/O port.
271
272**/
273UINT8
274EFIAPI
275S3IoBitFieldAnd8 (
276 IN UINTN Port,
277 IN UINTN StartBit,
278 IN UINTN EndBit,
279 IN UINT8 AndData
280 );
281
282/**
283 Reads a bit field in an 8-bit port, performs a bitwise AND followed by a
284 bitwise OR, writes the result back to the bit field in the
285 8-bit port, and saves the value in the S3 script to be replayed on S3 resume.
286
287 Reads the 8-bit I/O port specified by Port, performs a bitwise AND followed
288 by a bitwise OR between the read result and the value specified by
289 AndData, and writes the result to the 8-bit I/O port specified by Port. The
290 value written to the I/O port is returned. This function must guarantee that
291 all I/O read and write operations are serialized. Extra left bits in both
292 AndData and OrData are stripped.
293
294 If 8-bit I/O port operations are not supported, then ASSERT().
295 If StartBit is greater than 7, then ASSERT().
296 If EndBit is greater than 7, then ASSERT().
297 If EndBit is less than StartBit, then ASSERT().
298 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
299 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
300
301 @param[in] Port The I/O port to write.
302 @param[in] StartBit The ordinal of the least significant bit in the bit field.
303 Range 0..7.
304 @param[in] EndBit The ordinal of the most significant bit in the bit field.
305 Range 0..7.
306 @param[in] AndData The value to AND with the read value from the I/O port.
307 @param[in] OrData The value to OR with the result of the AND operation.
308
309 @return The value written back to the I/O port.
310
311**/
312UINT8
313EFIAPI
314S3IoBitFieldAndThenOr8 (
315 IN UINTN Port,
316 IN UINTN StartBit,
317 IN UINTN EndBit,
318 IN UINT8 AndData,
319 IN UINT8 OrData
320 );
321
322/**
323 Reads a 16-bit I/O port, and saves the value in the S3 script to be replayed
324 on S3 resume.
325
326 Reads the 16-bit I/O port specified by Port. The 16-bit read value is returned.
327 This function must guarantee that all I/O read and write operations are
328 serialized.
329
330 If 16-bit I/O port operations are not supported, then ASSERT().
331
332 @param[in] Port The I/O port to read.
333
334 @return The value read.
335
336**/
337UINT16
338EFIAPI
339S3IoRead16 (
340 IN UINTN Port
341 );
342
343/**
344 Writes a 16-bit I/O port, and saves the value in the S3 script to be replayed
345 on S3 resume.
346
347 Writes the 16-bit I/O port specified by Port with the value specified by Value
348 and returns Value. This function must guarantee that all I/O read and write
349 operations are serialized.
350
351 If 16-bit I/O port operations are not supported, then ASSERT().
352
353 @param[in] Port The I/O port to write.
354 @param[in] Value The value to write to the I/O port.
355
356 @return The value written the I/O port.
357
358**/
359UINT16
360EFIAPI
361S3IoWrite16 (
362 IN UINTN Port,
363 IN UINT16 Value
364 );
365
366/**
367 Reads a 16-bit I/O port, performs a bitwise OR, writes the
368 result back to the 16-bit I/O port, and saves the value in the S3 script to
369 be replayed on S3 resume.
370
371 Reads the 16-bit I/O port specified by Port, performs a bitwise OR
372 between the read result and the value specified by OrData, and writes the
373 result to the 16-bit I/O port specified by Port. The value written to the I/O
374 port is returned. This function must guarantee that all I/O read and write
375 operations are serialized.
376
377 If 16-bit I/O port operations are not supported, then ASSERT().
378
379 @param[in] Port The I/O port to write.
380 @param[in] OrData The value to OR with the read value from the I/O port.
381
382 @return The value written back to the I/O port.
383
384**/
385UINT16
386EFIAPI
387S3IoOr16 (
388 IN UINTN Port,
389 IN UINT16 OrData
390 );
391
392/**
393 Reads a 16-bit I/O port, performs a bitwise AND, writes the result back
394 to the 16-bit I/O port , and saves the value in the S3 script to be replayed
395 on S3 resume.
396
397 Reads the 16-bit I/O port specified by Port, performs a bitwise AND between
398 the read result and the value specified by AndData, and writes the result to
399 the 16-bit I/O port specified by Port. The value written to the I/O port is
400 returned. This function must guarantee that all I/O read and write operations
401 are serialized.
402
403 If 16-bit I/O port operations are not supported, then ASSERT().
404
405 @param[in] Port The I/O port to write.
406 @param[in] AndData The value to AND with the read value from the I/O port.
407
408 @return The value written back to the I/O port.
409
410**/
411UINT16
412EFIAPI
413S3IoAnd16 (
414 IN UINTN Port,
415 IN UINT16 AndData
416 );
417
418/**
419 Reads a 16-bit I/O port, performs a bitwise AND followed by a bitwise
420 inclusive OR, writes the result back to the 16-bit I/O port, and saves
421 the value in the S3 script to be replayed on S3 resume.
422
423 Reads the 16-bit I/O port specified by Port, performs a bitwise AND between
424 the read result and the value specified by AndData, performs a bitwise OR
425 between the result of the AND operation and the value specified by OrData,
426 and writes the result to the 16-bit I/O port specified by Port. The value
427 written to the I/O port is returned. This function must guarantee that all
428 I/O read and write operations are serialized.
429
430 If 16-bit I/O port operations are not supported, then ASSERT().
431
432 @param[in] Port The I/O port to write.
433 @param[in] AndData The value to AND with the read value from the I/O port.
434 @param[in] OrData The value to OR with the result of the AND operation.
435
436 @return The value written back to the I/O port.
437
438**/
439UINT16
440EFIAPI
441S3IoAndThenOr16 (
442 IN UINTN Port,
443 IN UINT16 AndData,
444 IN UINT16 OrData
445 );
446
447/**
448 Reads a bit field of an I/O register saves the value in the S3 script to be
449 replayed on S3 resume.
450
451 Reads the bit field in a 16-bit I/O register. The bit field is specified by
452 the StartBit and the EndBit. The value of the bit field is returned.
453
454 If 16-bit I/O port operations are not supported, then ASSERT().
455 If StartBit is greater than 15, then ASSERT().
456 If EndBit is greater than 15, then ASSERT().
457 If EndBit is less than StartBit, then ASSERT().
458
459 @param[in] Port The I/O port to read.
460 @param[in] StartBit The ordinal of the least significant bit in the bit field.
461 Range 0..15.
462 @param[in] EndBit The ordinal of the most significant bit in the bit field.
463 Range 0..15.
464
465 @return The value read.
466
467**/
468UINT16
469EFIAPI
470S3IoBitFieldRead16 (
471 IN UINTN Port,
472 IN UINTN StartBit,
473 IN UINTN EndBit
474 );
475
476/**
477 Writes a bit field to an I/O register, and saves the value in the S3 script
478 to be replayed on S3 resume.
479
480 Writes Value to the bit field of the I/O register. The bit field is specified
481 by the StartBit and the EndBit. All other bits in the destination I/O
482 register are preserved. The value written to the I/O port is returned. Extra
483 left bits in Value are stripped.
484
485 If 16-bit I/O port operations are not supported, then ASSERT().
486 If StartBit is greater than 15, then ASSERT().
487 If EndBit is greater than 15, then ASSERT().
488 If EndBit is less than StartBit, then ASSERT().
489 If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
490
491 @param[in] Port The I/O port to write.
492 @param[in] StartBit The ordinal of the least significant bit in the bit field.
493 Range 0..15.
494 @param[in] EndBit The ordinal of the most significant bit in the bit field.
495 Range 0..15.
496 @param[in] Value New value of the bit field.
497
498 @return The value written back to the I/O port.
499
500**/
501UINT16
502EFIAPI
503S3IoBitFieldWrite16 (
504 IN UINTN Port,
505 IN UINTN StartBit,
506 IN UINTN EndBit,
507 IN UINT16 Value
508 );
509
510/**
511 Reads a bit field in a 16-bit port, performs a bitwise OR, writes the
512 result back to the bit field in the 16-bit port, and saves the value in the
513 S3 script to be replayed on S3 resume.
514
515 Reads the 16-bit I/O port specified by Port, performs a bitwise OR
516 between the read result and the value specified by OrData, and writes the
517 result to the 16-bit I/O port specified by Port. The value written to the I/O
518 port is returned. This function must guarantee that all I/O read and write
519 operations are serialized. Extra left bits in OrData are stripped.
520
521 If 16-bit I/O port operations are not supported, then ASSERT().
522 If StartBit is greater than 15, then ASSERT().
523 If EndBit is greater than 15, then ASSERT().
524 If EndBit is less than StartBit, then ASSERT().
525 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
526
527 @param[in] Port The I/O port to write.
528 @param[in] StartBit The ordinal of the least significant bit in the bit field.
529 Range 0..15.
530 @param[in] EndBit The ordinal of the most significant bit in the bit field.
531 Range 0..15.
532 @param[in] OrData The value to OR with the read value from the I/O port.
533
534 @return The value written back to the I/O port.
535
536**/
537UINT16
538EFIAPI
539S3IoBitFieldOr16 (
540 IN UINTN Port,
541 IN UINTN StartBit,
542 IN UINTN EndBit,
543 IN UINT16 OrData
544 );
545
546/**
547 Reads a bit field in a 16-bit port, performs a bitwise AND, writes the
548 result back to the bit field in the 16-bit port, and saves the value in the
549 S3 script to be replayed on S3 resume.
550
551 Reads the 16-bit I/O port specified by Port, performs a bitwise AND between
552 the read result and the value specified by AndData, and writes the result to
553 the 16-bit I/O port specified by Port. The value written to the I/O port is
554 returned. This function must guarantee that all I/O read and write operations
555 are serialized. Extra left bits in AndData are stripped.
556
557 If 16-bit I/O port operations are not supported, then ASSERT().
558 If StartBit is greater than 15, then ASSERT().
559 If EndBit is greater than 15, then ASSERT().
560 If EndBit is less than StartBit, then ASSERT().
561 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
562
563 @param[in] Port The I/O port to write.
564 @param[in] StartBit The ordinal of the least significant bit in the bit field.
565 Range 0..15.
566 @param[in] EndBit The ordinal of the most significant bit in the bit field.
567 Range 0..15.
568 @param[in] AndData The value to AND with the read value from the I/O port.
569
570 @return The value written back to the I/O port.
571
572**/
573UINT16
574EFIAPI
575S3IoBitFieldAnd16 (
576 IN UINTN Port,
577 IN UINTN StartBit,
578 IN UINTN EndBit,
579 IN UINT16 AndData
580 );
581
582/**
583 Reads a bit field in a 16-bit port, performs a bitwise AND followed by a
584 bitwise OR, writes the result back to the bit field in the
585 16-bit port, and saves the value in the S3 script to be replayed on S3
586 resume.
587
588 Reads the 16-bit I/O port specified by Port, performs a bitwise AND followed
589 by a bitwise OR between the read result and the value specified by
590 AndData, and writes the result to the 16-bit I/O port specified by Port. The
591 value written to the I/O port is returned. This function must guarantee that
592 all I/O read and write operations are serialized. Extra left bits in both
593 AndData and OrData are stripped.
594
595 If 16-bit I/O port operations are not supported, then ASSERT().
596 If StartBit is greater than 15, then ASSERT().
597 If EndBit is greater than 15, then ASSERT().
598 If EndBit is less than StartBit, then ASSERT().
599 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
600 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
601
602 @param[in] Port The I/O port to write.
603 @param[in] StartBit The ordinal of the least significant bit in the bit field.
604 Range 0..15.
605 @param[in] EndBit The ordinal of the most significant bit in the bit field.
606 Range 0..15.
607 @param[in] AndData The value to AND with the read value from the I/O port.
608 @param[in] OrData The value to OR with the result of the AND operation.
609
610 @return The value written back to the I/O port.
611
612**/
613UINT16
614EFIAPI
615S3IoBitFieldAndThenOr16 (
616 IN UINTN Port,
617 IN UINTN StartBit,
618 IN UINTN EndBit,
619 IN UINT16 AndData,
620 IN UINT16 OrData
621 );
622
623/**
624 Reads a 32-bit I/O port, and saves the value in the S3 script to be replayed
625 on S3 resume.
626
627 Reads the 32-bit I/O port specified by Port. The 32-bit read value is returned.
628 This function must guarantee that all I/O read and write operations are
629 serialized.
630
631 If 32-bit I/O port operations are not supported, then ASSERT().
632
633 @param[in] Port The I/O port to read.
634
635 @return The value read.
636
637**/
638UINT32
639EFIAPI
640S3IoRead32 (
641 IN UINTN Port
642 );
643
644/**
645 Writes a 32-bit I/O port, and saves the value in the S3 script to be replayed
646 on S3 resume.
647
648 Writes the 32-bit I/O port specified by Port with the value specified by Value
649 and returns Value. This function must guarantee that all I/O read and write
650 operations are serialized.
651
652 If 32-bit I/O port operations are not supported, then ASSERT().
653
654 @param[in] Port The I/O port to write.
655 @param[in] Value The value to write to the I/O port.
656
657 @return The value written the I/O port.
658
659**/
660UINT32
661EFIAPI
662S3IoWrite32 (
663 IN UINTN Port,
664 IN UINT32 Value
665 );
666
667/**
668 Reads a 32-bit I/O port, performs a bitwise OR, writes the
669 result back to the 32-bit I/O port, and saves the value in the S3 script to
670 be replayed on S3 resume.
671
672 Reads the 32-bit I/O port specified by Port, performs a bitwise OR
673 between the read result and the value specified by OrData, and writes the
674 result to the 32-bit I/O port specified by Port. The value written to the I/O
675 port is returned. This function must guarantee that all I/O read and write
676 operations are serialized.
677
678 If 32-bit I/O port operations are not supported, then ASSERT().
679
680 @param[in] Port The I/O port to write.
681 @param[in] OrData The value to OR with the read value from the I/O port.
682
683 @return The value written back to the I/O port.
684
685**/
686UINT32
687EFIAPI
688S3IoOr32 (
689 IN UINTN Port,
690 IN UINT32 OrData
691 );
692
693/**
694 Reads a 32-bit I/O port, performs a bitwise AND, writes the result back
695 to the 32-bit I/O port, and saves the value in the S3 script to be replayed
696 on S3 resume.
697
698 Reads the 32-bit I/O port specified by Port, performs a bitwise AND between
699 the read result and the value specified by AndData, and writes the result to
700 the 32-bit I/O port specified by Port. The value written to the I/O port is
701 returned. This function must guarantee that all I/O read and write operations
702 are serialized.
703
704 If 32-bit I/O port operations are not supported, then ASSERT().
705
706 @param[in] Port The I/O port to write.
707 @param[in] AndData The value to AND with the read value from the I/O port.
708
709 @return The value written back to the I/O port.
710
711**/
712UINT32
713EFIAPI
714S3IoAnd32 (
715 IN UINTN Port,
716 IN UINT32 AndData
717 );
718
719/**
720 Reads a 32-bit I/O port, performs a bitwise AND followed by a bitwise
721 inclusive OR, writes the result back to the 32-bit I/O port, and saves
722 the value in the S3 script to be replayed on S3 resume.
723
724 Reads the 32-bit I/O port specified by Port, performs a bitwise AND between
725 the read result and the value specified by AndData, performs a bitwise OR
726 between the result of the AND operation and the value specified by OrData,
727 and writes the result to the 32-bit I/O port specified by Port. The value
728 written to the I/O port is returned. This function must guarantee that all
729 I/O read and write operations are serialized.
730
731 If 32-bit I/O port operations are not supported, then ASSERT().
732
733 @param[in] Port The I/O port to write.
734 @param[in] AndData The value to AND with the read value from the I/O port.
735 @param[in] OrData The value to OR with the result of the AND operation.
736
737 @return The value written back to the I/O port.
738
739**/
740UINT32
741EFIAPI
742S3IoAndThenOr32 (
743 IN UINTN Port,
744 IN UINT32 AndData,
745 IN UINT32 OrData
746 );
747
748/**
749 Reads a bit field of an I/O register, and saves the value in the S3 script to
750 be replayed on S3 resume.
751
752 Reads the bit field in a 32-bit I/O register. The bit field is specified by
753 the StartBit and the EndBit. The value of the bit field is returned.
754
755 If 32-bit I/O port operations are not supported, then ASSERT().
756 If StartBit is greater than 31, then ASSERT().
757 If EndBit is greater than 31, then ASSERT().
758 If EndBit is less than StartBit, then ASSERT().
759
760 @param[in] Port The I/O port to read.
761 @param[in] StartBit The ordinal of the least significant bit in the bit field.
762 Range 0..31.
763 @param[in] EndBit The ordinal of the most significant bit in the bit field.
764 Range 0..31.
765
766 @return The value read.
767
768**/
769UINT32
770EFIAPI
771S3IoBitFieldRead32 (
772 IN UINTN Port,
773 IN UINTN StartBit,
774 IN UINTN EndBit
775 );
776
777/**
778 Writes a bit field to an I/O register, and saves the value in the S3 script to
779 be replayed on S3 resume.
780
781 Writes Value to the bit field of the I/O register. The bit field is specified
782 by the StartBit and the EndBit. All other bits in the destination I/O
783 register are preserved. The value written to the I/O port is returned. Extra
784 left bits in Value are stripped.
785
786 If 32-bit I/O port operations are not supported, then ASSERT().
787 If StartBit is greater than 31, then ASSERT().
788 If EndBit is greater than 31, then ASSERT().
789 If EndBit is less than StartBit, then ASSERT().
790 If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
791
792 @param[in] Port The I/O port to write.
793 @param[in] StartBit The ordinal of the least significant bit in the bit field.
794 Range 0..31.
795 @param[in] EndBit The ordinal of the most significant bit in the bit field.
796 Range 0..31.
797 @param[in] Value New value of the bit field.
798
799 @return The value written back to the I/O port.
800
801**/
802UINT32
803EFIAPI
804S3IoBitFieldWrite32 (
805 IN UINTN Port,
806 IN UINTN StartBit,
807 IN UINTN EndBit,
808 IN UINT32 Value
809 );
810
811/**
812 Reads a bit field in a 32-bit port, performs a bitwise OR, writes the
813 result back to the bit field in the 32-bit port, and saves the value in the
814 S3 script to be replayed on S3 resume.
815
816 Reads the 32-bit I/O port specified by Port, performs a bitwise OR
817 between the read result and the value specified by OrData, and writes the
818 result to the 32-bit I/O port specified by Port. The value written to the I/O
819 port is returned. This function must guarantee that all I/O read and write
820 operations are serialized. Extra left bits in OrData are stripped.
821
822 If 32-bit I/O port operations are not supported, then ASSERT().
823 If StartBit is greater than 31, then ASSERT().
824 If EndBit is greater than 31, then ASSERT().
825 If EndBit is less than StartBit, then ASSERT().
826 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
827
828 @param[in] Port The I/O port to write.
829 @param[in] StartBit The ordinal of the least significant bit in the bit field.
830 Range 0..31.
831 @param[in] EndBit The ordinal of the most significant bit in the bit field.
832 Range 0..31.
833 @param[in] OrData The value to OR with the read value from the I/O port.
834
835 @return The value written back to the I/O port.
836
837**/
838UINT32
839EFIAPI
840S3IoBitFieldOr32 (
841 IN UINTN Port,
842 IN UINTN StartBit,
843 IN UINTN EndBit,
844 IN UINT32 OrData
845 );
846
847/**
848 Reads a bit field in a 32-bit port, performs a bitwise AND, writes the
849 result back to the bit field in the 32-bit port, and saves the value in the
850 S3 script to be replayed on S3 resume.
851
852 Reads the 32-bit I/O port specified by Port, performs a bitwise AND between
853 the read result and the value specified by AndData, and writes the result to
854 the 32-bit I/O port specified by Port. The value written to the I/O port is
855 returned. This function must guarantee that all I/O read and write operations
856 are serialized. Extra left bits in AndData are stripped.
857
858 If 32-bit I/O port operations are not supported, then ASSERT().
859 If StartBit is greater than 31, then ASSERT().
860 If EndBit is greater than 31, then ASSERT().
861 If EndBit is less than StartBit, then ASSERT().
862 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
863
864 @param[in] Port The I/O port to write.
865 @param[in] StartBit The ordinal of the least significant bit in the bit field.
866 Range 0..31.
867 @param[in] EndBit The ordinal of the most significant bit in the bit field.
868 Range 0..31.
869 @param[in] AndData The value to AND with the read value from the I/O port.
870
871 @return The value written back to the I/O port.
872
873**/
874UINT32
875EFIAPI
876S3IoBitFieldAnd32 (
877 IN UINTN Port,
878 IN UINTN StartBit,
879 IN UINTN EndBit,
880 IN UINT32 AndData
881 );
882
883/**
884 Reads a bit field in a 32-bit port, performs a bitwise AND followed by a
885 bitwise OR, writes the result back to the bit field in the
886 32-bit port, and saves the value in the S3 script to be replayed on S3
887 resume.
888
889 Reads the 32-bit I/O port specified by Port, performs a bitwise AND followed
890 by a bitwise OR between the read result and the value specified by
891 AndData, and writes the result to the 32-bit I/O port specified by Port. The
892 value written to the I/O port is returned. This function must guarantee that
893 all I/O read and write operations are serialized. Extra left bits in both
894 AndData and OrData are stripped.
895
896 If 32-bit I/O port operations are not supported, then ASSERT().
897 If StartBit is greater than 31, then ASSERT().
898 If EndBit is greater than 31, then ASSERT().
899 If EndBit is less than StartBit, then ASSERT().
900 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
901 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
902
903 @param[in] Port The I/O port to write.
904 @param[in] StartBit The ordinal of the least significant bit in the bit field.
905 Range 0..31.
906 @param[in] EndBit The ordinal of the most significant bit in the bit field.
907 Range 0..31.
908 @param[in] AndData The value to AND with the read value from the I/O port.
909 @param[in] OrData The value to OR with the result of the AND operation.
910
911 @return The value written back to the I/O port.
912
913**/
914UINT32
915EFIAPI
916S3IoBitFieldAndThenOr32 (
917 IN UINTN Port,
918 IN UINTN StartBit,
919 IN UINTN EndBit,
920 IN UINT32 AndData,
921 IN UINT32 OrData
922 );
923
924/**
925 Reads a 64-bit I/O port, and saves the value in the S3 script to be replayed
926 on S3 resume.
927
928 Reads the 64-bit I/O port specified by Port. The 64-bit read value is returned.
929 This function must guarantee that all I/O read and write operations are
930 serialized.
931
932 If 64-bit I/O port operations are not supported, then ASSERT().
933
934 @param[in] Port The I/O port to read.
935
936 @return The value read.
937
938**/
939UINT64
940EFIAPI
941S3IoRead64 (
942 IN UINTN Port
943 );
944
945/**
946 Writes a 64-bit I/O port, and saves the value in the S3 script to be replayed
947 on S3 resume.
948
949 Writes the 64-bit I/O port specified by Port with the value specified by Value
950 and returns Value. This function must guarantee that all I/O read and write
951 operations are serialized.
952
953 If 64-bit I/O port operations are not supported, then ASSERT().
954
955 @param[in] Port The I/O port to write.
956 @param[in] Value The value to write to the I/O port.
957
958 @return The value written to the I/O port.
959
960**/
961UINT64
962EFIAPI
963S3IoWrite64 (
964 IN UINTN Port,
965 IN UINT64 Value
966 );
967
968/**
969 Reads a 64-bit I/O port, performs a bitwise OR, writes the
970 result back to the 64-bit I/O port, and saves the value in the S3 script to
971 be replayed on S3 resume.
972
973 Reads the 64-bit I/O port specified by Port, performs a bitwise OR
974 between the read result and the value specified by OrData, and writes the
975 result to the 64-bit I/O port specified by Port. The value written to the I/O
976 port is returned. This function must guarantee that all I/O read and write
977 operations are serialized.
978
979 If 64-bit I/O port operations are not supported, then ASSERT().
980
981 @param[in] Port The I/O port to write.
982 @param[in] OrData The value to OR with the read value from the I/O port.
983
984 @return The value written back to the I/O port.
985
986**/
987UINT64
988EFIAPI
989S3IoOr64 (
990 IN UINTN Port,
991 IN UINT64 OrData
992 );
993
994/**
995 Reads a 64-bit I/O port, performs a bitwise AND, writes the result back
996 to the 64-bit I/O port, and saves the value in the S3 script to be replayed
997 on S3 resume.
998
999 Reads the 64-bit I/O port specified by Port, performs a bitwise AND between
1000 the read result and the value specified by AndData, and writes the result to
1001 the 64-bit I/O port specified by Port. The value written to the I/O port is
1002 returned. This function must guarantee that all I/O read and write operations
1003 are serialized.
1004
1005 If 64-bit I/O port operations are not supported, then ASSERT().
1006
1007 @param[in] Port The I/O port to write.
1008 @param[in] AndData The value to AND with the read value from the I/O port.
1009
1010 @return The value written back to the I/O port.
1011
1012**/
1013UINT64
1014EFIAPI
1015S3IoAnd64 (
1016 IN UINTN Port,
1017 IN UINT64 AndData
1018 );
1019
1020/**
1021 Reads a 64-bit I/O port, performs a bitwise AND followed by a bitwise
1022 inclusive OR, writes the result back to the 64-bit I/O port, and saves
1023 the value in the S3 script to be replayed on S3 resume.
1024
1025 Reads the 64-bit I/O port specified by Port, performs a bitwise AND between
1026 the read result and the value specified by AndData, performs a bitwise OR
1027 between the result of the AND operation and the value specified by OrData,
1028 and writes the result to the 64-bit I/O port specified by Port. The value
1029 written to the I/O port is returned. This function must guarantee that all
1030 I/O read and write operations are serialized.
1031
1032 If 64-bit I/O port operations are not supported, then ASSERT().
1033
1034 @param[in] Port The I/O port to write.
1035 @param[in] AndData The value to AND with the read value from the I/O port.
1036 @param[in] OrData The value to OR with the result of the AND operation.
1037
1038 @return The value written back to the I/O port.
1039
1040**/
1041UINT64
1042EFIAPI
1043S3IoAndThenOr64 (
1044 IN UINTN Port,
1045 IN UINT64 AndData,
1046 IN UINT64 OrData
1047 );
1048
1049/**
1050 Reads a bit field of an I/O register, and saves the value in the S3 script to
1051 be replayed on S3 resume.
1052
1053 Reads the bit field in a 64-bit I/O register. The bit field is specified by
1054 the StartBit and the EndBit. The value of the bit field is returned.
1055
1056 If 64-bit I/O port operations are not supported, then ASSERT().
1057 If StartBit is greater than 63, then ASSERT().
1058 If EndBit is greater than 63, then ASSERT().
1059 If EndBit is less than StartBit, then ASSERT().
1060
1061 @param[in] Port The I/O port to read.
1062 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1063 Range 0..63.
1064 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1065 Range 0..63.
1066
1067 @return The value read.
1068
1069**/
1070UINT64
1071EFIAPI
1072S3IoBitFieldRead64 (
1073 IN UINTN Port,
1074 IN UINTN StartBit,
1075 IN UINTN EndBit
1076 );
1077
1078/**
1079 Writes a bit field to an I/O register, and saves the value in the S3 script to
1080 be replayed on S3 resume.
1081
1082 Writes Value to the bit field of the I/O register. The bit field is specified
1083 by the StartBit and the EndBit. All other bits in the destination I/O
1084 register are preserved. The value written to the I/O port is returned. Extra
1085 left bits in Value are stripped.
1086
1087 If 64-bit I/O port operations are not supported, then ASSERT().
1088 If StartBit is greater than 63, then ASSERT().
1089 If EndBit is greater than 63, then ASSERT().
1090 If EndBit is less than StartBit, then ASSERT().
1091 If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1092
1093 @param[in] Port The I/O port to write.
1094 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1095 Range 0..63.
1096 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1097 Range 0..63.
1098 @param[in] Value New value of the bit field.
1099
1100 @return The value written back to the I/O port.
1101
1102**/
1103UINT64
1104EFIAPI
1105S3IoBitFieldWrite64 (
1106 IN UINTN Port,
1107 IN UINTN StartBit,
1108 IN UINTN EndBit,
1109 IN UINT64 Value
1110 );
1111
1112/**
1113 Reads a bit field in a 64-bit port, performs a bitwise OR, writes the
1114 result back to the bit field in the 64-bit port, and saves the value in the
1115 S3 script to be replayed on S3 resume.
1116
1117 Reads the 64-bit I/O port specified by Port, performs a bitwise OR
1118 between the read result and the value specified by OrData, and writes the
1119 result to the 64-bit I/O port specified by Port. The value written to the I/O
1120 port is returned. This function must guarantee that all I/O read and write
1121 operations are serialized. Extra left bits in OrData are stripped.
1122
1123 If 64-bit I/O port operations are not supported, then ASSERT().
1124 If StartBit is greater than 63, then ASSERT().
1125 If EndBit is greater than 63, then ASSERT().
1126 If EndBit is less than StartBit, then ASSERT().
1127 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1128
1129 @param[in] Port The I/O port to write.
1130 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1131 Range 0..63.
1132 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1133 Range 0..63.
1134 @param[in] OrData The value to OR with the read value from the I/O port.
1135
1136 @return The value written back to the I/O port.
1137
1138**/
1139UINT64
1140EFIAPI
1141S3IoBitFieldOr64 (
1142 IN UINTN Port,
1143 IN UINTN StartBit,
1144 IN UINTN EndBit,
1145 IN UINT64 OrData
1146 );
1147
1148/**
1149 Reads a bit field in a 64-bit port, performs a bitwise AND, writes the
1150 result back to the bit field in the 64-bit port, and saves the value in the
1151 S3 script to be replayed on S3 resume.
1152
1153 Reads the 64-bit I/O port specified by Port, performs a bitwise AND between
1154 the read result and the value specified by AndData, and writes the result to
1155 the 64-bit I/O port specified by Port. The value written to the I/O port is
1156 returned. This function must guarantee that all I/O read and write operations
1157 are serialized. Extra left bits in AndData are stripped.
1158
1159 If 64-bit I/O port operations are not supported, then ASSERT().
1160 If StartBit is greater than 63, then ASSERT().
1161 If EndBit is greater than 63, then ASSERT().
1162 If EndBit is less than StartBit, then ASSERT().
1163 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1164
1165 @param[in] Port The I/O port to write.
1166 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1167 Range 0..63.
1168 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1169 Range 0..63.
1170 @param[in] AndData The value to AND with the read value from the I/O port.
1171
1172 @return The value written back to the I/O port.
1173
1174**/
1175UINT64
1176EFIAPI
1177S3IoBitFieldAnd64 (
1178 IN UINTN Port,
1179 IN UINTN StartBit,
1180 IN UINTN EndBit,
1181 IN UINT64 AndData
1182 );
1183
1184/**
1185 Reads a bit field in a 64-bit port, performs a bitwise AND followed by a
1186 bitwise OR, writes the result back to the bit field in the
1187 64-bit port, and saves the value in the S3 script to be replayed on S3
1188 resume.
1189
1190 Reads the 64-bit I/O port specified by Port, performs a bitwise AND followed
1191 by a bitwise OR between the read result and the value specified by
1192 AndData, and writes the result to the 64-bit I/O port specified by Port. The
1193 value written to the I/O port is returned. This function must guarantee that
1194 all I/O read and write operations are serialized. Extra left bits in both
1195 AndData and OrData are stripped.
1196
1197 If 64-bit I/O port operations are not supported, then ASSERT().
1198 If StartBit is greater than 63, then ASSERT().
1199 If EndBit is greater than 63, then ASSERT().
1200 If EndBit is less than StartBit, then ASSERT().
1201 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1202 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1203
1204 @param[in] Port The I/O port to write.
1205 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1206 Range 0..63.
1207 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1208 Range 0..63.
1209 @param[in] AndData The value to AND with the read value from the I/O port.
1210 @param[in] OrData The value to OR with the result of the AND operation.
1211
1212 @return The value written back to the I/O port.
1213
1214**/
1215UINT64
1216EFIAPI
1217S3IoBitFieldAndThenOr64 (
1218 IN UINTN Port,
1219 IN UINTN StartBit,
1220 IN UINTN EndBit,
1221 IN UINT64 AndData,
1222 IN UINT64 OrData
1223 );
1224
1225/**
1226 Reads an 8-bit MMIO register, and saves the value in the S3 script to be
1227 replayed on S3 resume.
1228
1229 Reads the 8-bit MMIO register specified by Address. The 8-bit read value is
1230 returned. This function must guarantee that all MMIO read and write
1231 operations are serialized.
1232
1233 If 8-bit MMIO register operations are not supported, then ASSERT().
1234
1235 @param[in] Address The MMIO register to read.
1236
1237 @return The value read.
1238
1239**/
1240UINT8
1241EFIAPI
1242S3MmioRead8 (
1243 IN UINTN Address
1244 );
1245
1246/**
1247 Writes an 8-bit MMIO register, and saves the value in the S3 script to be
1248 replayed on S3 resume.
1249
1250 Writes the 8-bit MMIO register specified by Address with the value specified
1251 by Value and returns Value. This function must guarantee that all MMIO read
1252 and write operations are serialized.
1253
1254 If 8-bit MMIO register operations are not supported, then ASSERT().
1255
1256 @param[in] Address The MMIO register to write.
1257 @param[in] Value The value to write to the MMIO register.
1258
1259 @return The value written the MMIO register.
1260
1261**/
1262UINT8
1263EFIAPI
1264S3MmioWrite8 (
1265 IN UINTN Address,
1266 IN UINT8 Value
1267 );
1268
1269/**
1270 Reads an 8-bit MMIO register, performs a bitwise OR, writes the
1271 result back to the 8-bit MMIO register, and saves the value in the S3 script
1272 to be replayed on S3 resume.
1273
1274 Reads the 8-bit MMIO register specified by Address, performs a bitwise
1275 inclusive OR between the read result and the value specified by OrData, and
1276 writes the result to the 8-bit MMIO register specified by Address. The value
1277 written to the MMIO register is returned. This function must guarantee that
1278 all MMIO read and write operations are serialized.
1279
1280 If 8-bit MMIO register operations are not supported, then ASSERT().
1281
1282 @param[in] Address The MMIO register to write.
1283 @param[in] OrData The value to OR with the read value from the MMIO register.
1284
1285 @return The value written back to the MMIO register.
1286
1287**/
1288UINT8
1289EFIAPI
1290S3MmioOr8 (
1291 IN UINTN Address,
1292 IN UINT8 OrData
1293 );
1294
1295/**
1296 Reads an 8-bit MMIO register, performs a bitwise AND, writes the result
1297 back to the 8-bit MMIO register, and saves the value in the S3 script to be
1298 replayed on S3 resume.
1299
1300 Reads the 8-bit MMIO register specified by Address, performs a bitwise AND
1301 between the read result and the value specified by AndData, and writes the
1302 result to the 8-bit MMIO register specified by Address. The value written to
1303 the MMIO register is returned. This function must guarantee that all MMIO
1304 read and write operations are serialized.
1305
1306 If 8-bit MMIO register operations are not supported, then ASSERT().
1307
1308 @param[in] Address The MMIO register to write.
1309 @param[in] AndData The value to AND with the read value from the MMIO register.
1310
1311 @return The value written back to the MMIO register.
1312
1313**/
1314UINT8
1315EFIAPI
1316S3MmioAnd8 (
1317 IN UINTN Address,
1318 IN UINT8 AndData
1319 );
1320
1321/**
1322 Reads an 8-bit MMIO register, performs a bitwise AND followed by a bitwise
1323 inclusive OR, writes the result back to the 8-bit MMIO register, and saves
1324 the value in the S3 script to be replayed on S3 resume.
1325
1326 Reads the 8-bit MMIO register specified by Address, performs a bitwise AND
1327 between the read result and the value specified by AndData, performs a
1328 bitwise OR between the result of the AND operation and the value specified by
1329 OrData, and writes the result to the 8-bit MMIO register specified by
1330 Address. The value written to the MMIO register is returned. This function
1331 must guarantee that all MMIO read and write operations are serialized.
1332
1333 If 8-bit MMIO register operations are not supported, then ASSERT().
1334
1335 @param[in] Address The MMIO register to write.
1336 @param[in] AndData The value to AND with the read value from the MMIO register.
1337 @param[in] OrData The value to OR with the result of the AND operation.
1338
1339 @return The value written back to the MMIO register.
1340
1341**/
1342UINT8
1343EFIAPI
1344S3MmioAndThenOr8 (
1345 IN UINTN Address,
1346 IN UINT8 AndData,
1347 IN UINT8 OrData
1348 );
1349
1350/**
1351 Reads a bit field of a MMIO register, and saves the value in the S3 script to
1352 be replayed on S3 resume.
1353
1354 Reads the bit field in an 8-bit MMIO register. The bit field is specified by
1355 the StartBit and the EndBit. The value of the bit field is returned.
1356
1357 If 8-bit MMIO register operations are not supported, then ASSERT().
1358 If StartBit is greater than 7, then ASSERT().
1359 If EndBit is greater than 7, then ASSERT().
1360 If EndBit is less than StartBit, then ASSERT().
1361
1362 @param[in] Address MMIO register to read.
1363 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1364 Range 0..7.
1365 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1366 Range 0..7.
1367
1368 @return The value read.
1369
1370**/
1371UINT8
1372EFIAPI
1373S3MmioBitFieldRead8 (
1374 IN UINTN Address,
1375 IN UINTN StartBit,
1376 IN UINTN EndBit
1377 );
1378
1379/**
1380 Writes a bit field to an MMIO register, and saves the value in the S3 script to
1381 be replayed on S3 resume.
1382
1383 Writes Value to the bit field of the MMIO register. The bit field is
1384 specified by the StartBit and the EndBit. All other bits in the destination
1385 MMIO register are preserved. The new value of the 8-bit register is returned.
1386
1387 If 8-bit MMIO register operations are not supported, then ASSERT().
1388 If StartBit is greater than 7, then ASSERT().
1389 If EndBit is greater than 7, then ASSERT().
1390 If EndBit is less than StartBit, then ASSERT().
1391 If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1392
1393 @param[in] Address The MMIO register to write.
1394 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1395 Range 0..7.
1396 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1397 Range 0..7.
1398 @param[in] Value New value of the bit field.
1399
1400 @return The value written back to the MMIO register.
1401
1402**/
1403UINT8
1404EFIAPI
1405S3MmioBitFieldWrite8 (
1406 IN UINTN Address,
1407 IN UINTN StartBit,
1408 IN UINTN EndBit,
1409 IN UINT8 Value
1410 );
1411
1412/**
1413 Reads a bit field in an 8-bit MMIO register, performs a bitwise OR,
1414 writes the result back to the bit field in the 8-bit MMIO register, and saves
1415 the value in the S3 script to be replayed on S3 resume.
1416
1417 Reads the 8-bit MMIO register specified by Address, performs a bitwise
1418 inclusive OR between the read result and the value specified by OrData, and
1419 writes the result to the 8-bit MMIO register specified by Address. The value
1420 written to the MMIO register is returned. This function must guarantee that
1421 all MMIO read and write operations are serialized. Extra left bits in OrData
1422 are stripped.
1423
1424 If 8-bit MMIO register operations are not supported, then ASSERT().
1425 If StartBit is greater than 7, then ASSERT().
1426 If EndBit is greater than 7, then ASSERT().
1427 If EndBit is less than StartBit, then ASSERT().
1428 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1429
1430 @param[in] Address The MMIO register to write.
1431 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1432 Range 0..7.
1433 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1434 Range 0..7.
1435 @param[in] OrData The value to OR with the read value from the MMIO register.
1436
1437 @return The value written back to the MMIO register.
1438
1439**/
1440UINT8
1441EFIAPI
1442S3MmioBitFieldOr8 (
1443 IN UINTN Address,
1444 IN UINTN StartBit,
1445 IN UINTN EndBit,
1446 IN UINT8 OrData
1447 );
1448
1449/**
1450 Reads a bit field in an 8-bit MMIO register, performs a bitwise AND, and
1451 writes the result back to the bit field in the 8-bit MMIO register, and saves
1452 the value in the S3 script to be replayed on S3 resume.
1453
1454 Reads the 8-bit MMIO register specified by Address, performs a bitwise AND
1455 between the read result and the value specified by AndData, and writes the
1456 result to the 8-bit MMIO register specified by Address. The value written to
1457 the MMIO register is returned. This function must guarantee that all MMIO
1458 read and write operations are serialized. Extra left bits in AndData are
1459 stripped.
1460
1461 If 8-bit MMIO register operations are not supported, then ASSERT().
1462 If StartBit is greater than 7, then ASSERT().
1463 If EndBit is greater than 7, then ASSERT().
1464 If EndBit is less than StartBit, then ASSERT().
1465 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1466
1467 @param[in] Address The MMIO register to write.
1468 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1469 Range 0..7.
1470 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1471 Range 0..7.
1472 @param[in] AndData The value to AND with the read value from the MMIO register.
1473
1474 @return The value written back to the MMIO register.
1475
1476**/
1477UINT8
1478EFIAPI
1479S3MmioBitFieldAnd8 (
1480 IN UINTN Address,
1481 IN UINTN StartBit,
1482 IN UINTN EndBit,
1483 IN UINT8 AndData
1484 );
1485
1486/**
1487 Reads a bit field in an 8-bit MMIO register, performs a bitwise AND followed
1488 by a bitwise OR, writes the result back to the bit field in the
1489 8-bit MMIO register, and saves the value in the S3 script to be replayed
1490 on S3 resume.
1491
1492 Reads the 8-bit MMIO register specified by Address, performs a bitwise AND
1493 followed by a bitwise OR between the read result and the value
1494 specified by AndData, and writes the result to the 8-bit MMIO register
1495 specified by Address. The value written to the MMIO register is returned.
1496 This function must guarantee that all MMIO read and write operations are
1497 serialized. Extra left bits in both AndData and OrData are stripped.
1498
1499 If 8-bit MMIO register operations are not supported, then ASSERT().
1500 If StartBit is greater than 7, then ASSERT().
1501 If EndBit is greater than 7, then ASSERT().
1502 If EndBit is less than StartBit, then ASSERT().
1503 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1504 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1505
1506 @param[in] Address The MMIO register to write.
1507 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1508 Range 0..7.
1509 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1510 Range 0..7.
1511 @param[in] AndData The value to AND with the read value from the MMIO register.
1512 @param[in] OrData The value to OR with the result of the AND operation.
1513
1514 @return The value written back to the MMIO register.
1515
1516**/
1517UINT8
1518EFIAPI
1519S3MmioBitFieldAndThenOr8 (
1520 IN UINTN Address,
1521 IN UINTN StartBit,
1522 IN UINTN EndBit,
1523 IN UINT8 AndData,
1524 IN UINT8 OrData
1525 );
1526
1527/**
1528 Reads a 16-bit MMIO register, and saves the value in the S3 script to be replayed
1529 on S3 resume.
1530
1531 Reads the 16-bit MMIO register specified by Address. The 16-bit read value is
1532 returned. This function must guarantee that all MMIO read and write
1533 operations are serialized.
1534
1535 If 16-bit MMIO register operations are not supported, then ASSERT().
1536
1537 @param[in] Address The MMIO register to read.
1538
1539 @return The value read.
1540
1541**/
1542UINT16
1543EFIAPI
1544S3MmioRead16 (
1545 IN UINTN Address
1546 );
1547
1548/**
1549 Writes a 16-bit MMIO register, and saves the value in the S3 script to be replayed
1550 on S3 resume.
1551
1552 Writes the 16-bit MMIO register specified by Address with the value specified
1553 by Value and returns Value. This function must guarantee that all MMIO read
1554 and write operations are serialized, and saves the value in the S3 script to be
1555 replayed on S3 resume.
1556
1557 If 16-bit MMIO register operations are not supported, then ASSERT().
1558
1559 @param[in] Address The MMIO register to write.
1560 @param[in] Value The value to write to the MMIO register.
1561
1562 @return The value written the MMIO register.
1563
1564**/
1565UINT16
1566EFIAPI
1567S3MmioWrite16 (
1568 IN UINTN Address,
1569 IN UINT16 Value
1570 );
1571
1572/**
1573 Reads a 16-bit MMIO register, performs a bitwise OR, writes the
1574 result back to the 16-bit MMIO register, and saves the value in the S3 script
1575 to be replayed on S3 resume.
1576
1577 Reads the 16-bit MMIO register specified by Address, performs a bitwise
1578 inclusive OR between the read result and the value specified by OrData, and
1579 writes the result to the 16-bit MMIO register specified by Address. The value
1580 written to the MMIO register is returned. This function must guarantee that
1581 all MMIO read and write operations are serialized.
1582
1583 If 16-bit MMIO register operations are not supported, then ASSERT().
1584
1585 @param[in] Address The MMIO register to write.
1586 @param[in] OrData The value to OR with the read value from the MMIO register.
1587
1588 @return The value written back to the MMIO register.
1589
1590**/
1591UINT16
1592EFIAPI
1593S3MmioOr16 (
1594 IN UINTN Address,
1595 IN UINT16 OrData
1596 );
1597
1598/**
1599 Reads a 16-bit MMIO register, performs a bitwise AND, writes the result
1600 back to the 16-bit MMIO register, and saves the value in the S3 script to be
1601 replayed on S3 resume.
1602
1603 Reads the 16-bit MMIO register specified by Address, performs a bitwise AND
1604 between the read result and the value specified by AndData, and writes the
1605 result to the 16-bit MMIO register specified by Address. The value written to
1606 the MMIO register is returned. This function must guarantee that all MMIO
1607 read and write operations are serialized.
1608
1609 If 16-bit MMIO register operations are not supported, then ASSERT().
1610
1611 @param[in] Address The MMIO register to write.
1612 @param[in] AndData The value to AND with the read value from the MMIO register.
1613
1614 @return The value written back to the MMIO register.
1615
1616**/
1617UINT16
1618EFIAPI
1619S3MmioAnd16 (
1620 IN UINTN Address,
1621 IN UINT16 AndData
1622 );
1623
1624/**
1625 Reads a 16-bit MMIO register, performs a bitwise AND followed by a bitwise
1626 inclusive OR, writes the result back to the 16-bit MMIO register, and
1627 saves the value in the S3 script to be replayed on S3 resume.
1628
1629 Reads the 16-bit MMIO register specified by Address, performs a bitwise AND
1630 between the read result and the value specified by AndData, performs a
1631 bitwise OR between the result of the AND operation and the value specified by
1632 OrData, and writes the result to the 16-bit MMIO register specified by
1633 Address. The value written to the MMIO register is returned. This function
1634 must guarantee that all MMIO read and write operations are serialized.
1635
1636 If 16-bit MMIO register operations are not supported, then ASSERT().
1637
1638 @param[in] Address The MMIO register to write.
1639 @param[in] AndData The value to AND with the read value from the MMIO register.
1640 @param[in] OrData The value to OR with the result of the AND operation.
1641
1642 @return The value written back to the MMIO register.
1643
1644**/
1645UINT16
1646EFIAPI
1647S3MmioAndThenOr16 (
1648 IN UINTN Address,
1649 IN UINT16 AndData,
1650 IN UINT16 OrData
1651 );
1652
1653/**
1654 Reads a bit field of a MMIO register, and saves the value in the S3 script to
1655 be replayed on S3 resume.
1656
1657 Reads the bit field in a 16-bit MMIO register. The bit field is specified by
1658 the StartBit and the EndBit. The value of the bit field is returned.
1659
1660 If 16-bit MMIO register operations are not supported, then ASSERT().
1661 If StartBit is greater than 15, then ASSERT().
1662 If EndBit is greater than 15, then ASSERT().
1663 If EndBit is less than StartBit, then ASSERT().
1664
1665 @param[in] Address MMIO register to read.
1666 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1667 Range 0..15.
1668 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1669 Range 0..15.
1670
1671 @return The value read.
1672
1673**/
1674UINT16
1675EFIAPI
1676S3MmioBitFieldRead16 (
1677 IN UINTN Address,
1678 IN UINTN StartBit,
1679 IN UINTN EndBit
1680 );
1681
1682/**
1683 Writes a bit field to a MMIO register, and saves the value in the S3 script to
1684 be replayed on S3 resume.
1685
1686 Writes Value to the bit field of the MMIO register. The bit field is
1687 specified by the StartBit and the EndBit. All other bits in the destination
1688 MMIO register are preserved. The new value of the 16-bit register is returned.
1689
1690 If 16-bit MMIO register operations are not supported, then ASSERT().
1691 If StartBit is greater than 15, then ASSERT().
1692 If EndBit is greater than 15, then ASSERT().
1693 If EndBit is less than StartBit, then ASSERT().
1694 If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1695
1696 @param[in] Address The MMIO register to write.
1697 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1698 Range 0..15.
1699 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1700 Range 0..15.
1701 @param[in] Value New value of the bit field.
1702
1703 @return The value written back to the MMIO register.
1704
1705**/
1706UINT16
1707EFIAPI
1708S3MmioBitFieldWrite16 (
1709 IN UINTN Address,
1710 IN UINTN StartBit,
1711 IN UINTN EndBit,
1712 IN UINT16 Value
1713 );
1714
1715/**
1716 Reads a bit field in a 16-bit MMIO register, performs a bitwise OR,
1717 writes the result back to the bit field in the 16-bit MMIO register, and
1718 saves the value in the S3 script to be replayed on S3 resume.
1719
1720 Reads the 16-bit MMIO register specified by Address, performs a bitwise
1721 inclusive OR between the read result and the value specified by OrData, and
1722 writes the result to the 16-bit MMIO register specified by Address. The value
1723 written to the MMIO register is returned. This function must guarantee that
1724 all MMIO read and write operations are serialized. Extra left bits in OrData
1725 are stripped.
1726
1727 If 16-bit MMIO register operations are not supported, then ASSERT().
1728 If StartBit is greater than 15, then ASSERT().
1729 If EndBit is greater than 15, then ASSERT().
1730 If EndBit is less than StartBit, then ASSERT().
1731 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1732
1733 @param[in] Address The MMIO register to write.
1734 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1735 Range 0..15.
1736 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1737 Range 0..15.
1738 @param[in] OrData The value to OR with the read value from the MMIO register.
1739
1740 @return The value written back to the MMIO register.
1741
1742**/
1743UINT16
1744EFIAPI
1745S3MmioBitFieldOr16 (
1746 IN UINTN Address,
1747 IN UINTN StartBit,
1748 IN UINTN EndBit,
1749 IN UINT16 OrData
1750 );
1751
1752/**
1753 Reads a bit field in a 16-bit MMIO register, performs a bitwise AND, and
1754 writes the result back to the bit field in the 16-bit MMIO register and
1755 saves the value in the S3 script to be replayed on S3 resume.
1756
1757 Reads the 16-bit MMIO register specified by Address, performs a bitwise AND
1758 between the read result and the value specified by AndData, and writes the
1759 result to the 16-bit MMIO register specified by Address. The value written to
1760 the MMIO register is returned. This function must guarantee that all MMIO
1761 read and write operations are serialized. Extra left bits in AndData are
1762 stripped.
1763
1764 If 16-bit MMIO register operations are not supported, then ASSERT().
1765 If StartBit is greater than 15, then ASSERT().
1766 If EndBit is greater than 15, then ASSERT().
1767 If EndBit is less than StartBit, then ASSERT().
1768 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1769
1770 @param[in] Address The MMIO register to write.
1771 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1772 Range 0..15.
1773 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1774 Range 0..15.
1775 @param[in] AndData The value to AND with the read value from the MMIO register.
1776
1777 @return The value written back to the MMIO register.
1778
1779**/
1780UINT16
1781EFIAPI
1782S3MmioBitFieldAnd16 (
1783 IN UINTN Address,
1784 IN UINTN StartBit,
1785 IN UINTN EndBit,
1786 IN UINT16 AndData
1787 );
1788
1789/**
1790 Reads a bit field in a 16-bit MMIO register, performs a bitwise AND followed
1791 by a bitwise OR, writes the result back to the bit field in the
1792 16-bit MMIO register, and saves the value in the S3 script to be replayed
1793 on S3 resume.
1794
1795 Reads the 16-bit MMIO register specified by Address, performs a bitwise AND
1796 followed by a bitwise OR between the read result and the value
1797 specified by AndData, and writes the result to the 16-bit MMIO register
1798 specified by Address. The value written to the MMIO register is returned.
1799 This function must guarantee that all MMIO read and write operations are
1800 serialized. Extra left bits in both AndData and OrData are stripped.
1801
1802 If 16-bit MMIO register operations are not supported, then ASSERT().
1803 If StartBit is greater than 15, then ASSERT().
1804 If EndBit is greater than 15, then ASSERT().
1805 If EndBit is less than StartBit, then ASSERT().
1806 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1807 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1808
1809 @param[in] Address The MMIO register to write.
1810 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1811 Range 0..15.
1812 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1813 Range 0..15.
1814 @param[in] AndData The value to AND with the read value from the MMIO register.
1815 @param[in] OrData The value to OR with the result of the AND operation.
1816
1817 @return The value written back to the MMIO register.
1818
1819**/
1820UINT16
1821EFIAPI
1822S3MmioBitFieldAndThenOr16 (
1823 IN UINTN Address,
1824 IN UINTN StartBit,
1825 IN UINTN EndBit,
1826 IN UINT16 AndData,
1827 IN UINT16 OrData
1828 );
1829
1830/**
1831 Reads a 32-bit MMIO register saves the value in the S3 script to be
1832 replayed on S3 resume.
1833
1834 Reads the 32-bit MMIO register specified by Address. The 32-bit read value is
1835 returned. This function must guarantee that all MMIO read and write
1836 operations are serialized.
1837
1838 If 32-bit MMIO register operations are not supported, then ASSERT().
1839
1840 @param[in] Address The MMIO register to read.
1841
1842 @return The value read.
1843
1844**/
1845UINT32
1846EFIAPI
1847S3MmioRead32 (
1848 IN UINTN Address
1849 );
1850
1851/**
1852 Writes a 32-bit MMIO register, and saves the value in the S3 script to be
1853 replayed on S3 resume.
1854
1855 Writes the 32-bit MMIO register specified by Address with the value specified
1856 by Value and returns Value. This function must guarantee that all MMIO read
1857 and write operations are serialized.
1858
1859 If 32-bit MMIO register operations are not supported, then ASSERT().
1860
1861 @param[in] Address The MMIO register to write.
1862 @param[in] Value The value to write to the MMIO register.
1863
1864 @return The value written the MMIO register.
1865
1866**/
1867UINT32
1868EFIAPI
1869S3MmioWrite32 (
1870 IN UINTN Address,
1871 IN UINT32 Value
1872 );
1873
1874/**
1875 Reads a 32-bit MMIO register, performs a bitwise OR, writes the
1876 result back to the 32-bit MMIO register, and saves the value in the S3 script
1877 to be replayed on S3 resume.
1878
1879 Reads the 32-bit MMIO register specified by Address, performs a bitwise
1880 inclusive OR between the read result and the value specified by OrData, and
1881 writes the result to the 32-bit MMIO register specified by Address. The value
1882 written to the MMIO register is returned. This function must guarantee that
1883 all MMIO read and write operations are serialized.
1884
1885 If 32-bit MMIO register operations are not supported, then ASSERT().
1886
1887 @param[in] Address The MMIO register to write.
1888 @param[in] OrData The value to OR with the read value from the MMIO register.
1889
1890 @return The value written back to the MMIO register.
1891
1892**/
1893UINT32
1894EFIAPI
1895S3MmioOr32 (
1896 IN UINTN Address,
1897 IN UINT32 OrData
1898 );
1899
1900/**
1901 Reads a 32-bit MMIO register, performs a bitwise AND, writes the result
1902 back to the 32-bit MMIO register, and saves the value in the S3 script to be
1903 replayed on S3 resume.
1904
1905 Reads the 32-bit MMIO register specified by Address, performs a bitwise AND
1906 between the read result and the value specified by AndData, and writes the
1907 result to the 32-bit MMIO register specified by Address. The value written to
1908 the MMIO register is returned. This function must guarantee that all MMIO
1909 read and write operations are serialized.
1910
1911 If 32-bit MMIO register operations are not supported, then ASSERT().
1912
1913 @param[in] Address The MMIO register to write.
1914 @param[in] AndData The value to AND with the read value from the MMIO register.
1915
1916 @return The value written back to the MMIO register.
1917
1918**/
1919UINT32
1920EFIAPI
1921S3MmioAnd32 (
1922 IN UINTN Address,
1923 IN UINT32 AndData
1924 );
1925
1926/**
1927 Reads a 32-bit MMIO register, performs a bitwise AND followed by a bitwise
1928 inclusive OR, writes the result back to the 32-bit MMIO register, and
1929 saves the value in the S3 script to be replayed on S3 resume.
1930
1931 Reads the 32-bit MMIO register specified by Address, performs a bitwise AND
1932 between the read result and the value specified by AndData, performs a
1933 bitwise OR between the result of the AND operation and the value specified by
1934 OrData, and writes the result to the 32-bit MMIO register specified by
1935 Address. The value written to the MMIO register is returned. This function
1936 must guarantee that all MMIO read and write operations are serialized.
1937
1938 If 32-bit MMIO register operations are not supported, then ASSERT().
1939
1940 @param[in] Address The MMIO register to write.
1941 @param[in] AndData The value to AND with the read value from the MMIO register.
1942 @param[in] OrData The value to OR with the result of the AND operation.
1943
1944 @return The value written back to the MMIO register.
1945
1946**/
1947UINT32
1948EFIAPI
1949S3MmioAndThenOr32 (
1950 IN UINTN Address,
1951 IN UINT32 AndData,
1952 IN UINT32 OrData
1953 );
1954
1955/**
1956 Reads a bit field of a MMIO register, and saves the value in the S3 script
1957 to be replayed on S3 resume.
1958
1959 Reads the bit field in a 32-bit MMIO register. The bit field is specified by
1960 the StartBit and the EndBit. The value of the bit field is returned.
1961
1962 If 32-bit MMIO register operations are not supported, then ASSERT().
1963 If StartBit is greater than 31, then ASSERT().
1964 If EndBit is greater than 31, then ASSERT().
1965 If EndBit is less than StartBit, then ASSERT().
1966
1967 @param[in] Address MMIO register to read.
1968 @param[in] StartBit The ordinal of the least significant bit in the bit field.
1969 Range 0..31.
1970 @param[in] EndBit The ordinal of the most significant bit in the bit field.
1971 Range 0..31.
1972
1973 @return The value read.
1974
1975**/
1976UINT32
1977EFIAPI
1978S3MmioBitFieldRead32 (
1979 IN UINTN Address,
1980 IN UINTN StartBit,
1981 IN UINTN EndBit
1982 );
1983
1984/**
1985 Writes a bit field to a MMIO register, and saves the value in the S3 script
1986 to be replayed on S3 resume.
1987
1988 Writes Value to the bit field of the MMIO register. The bit field is
1989 specified by the StartBit and the EndBit. All other bits in the destination
1990 MMIO register are preserved. The new value of the 32-bit register is returned.
1991
1992 If 32-bit MMIO register operations are not supported, then ASSERT().
1993 If StartBit is greater than 31, then ASSERT().
1994 If EndBit is greater than 31, then ASSERT().
1995 If EndBit is less than StartBit, then ASSERT().
1996 If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
1997
1998 @param[in] Address The MMIO register to write.
1999 @param[in] StartBit The ordinal of the least significant bit in the bit field.
2000 Range 0..31.
2001 @param[in] EndBit The ordinal of the most significant bit in the bit field.
2002 Range 0..31.
2003 @param[in] Value New value of the bit field.
2004
2005 @return The value written back to the MMIO register.
2006
2007**/
2008UINT32
2009EFIAPI
2010S3MmioBitFieldWrite32 (
2011 IN UINTN Address,
2012 IN UINTN StartBit,
2013 IN UINTN EndBit,
2014 IN UINT32 Value
2015 );
2016
2017/**
2018 Reads a bit field in a 32-bit MMIO register, performs a bitwise OR,
2019 writes the result back to the bit field in the 32-bit MMIO register, and
2020 saves the value in the S3 script to be replayed on S3 resume.
2021
2022 Reads the 32-bit MMIO register specified by Address, performs a bitwise
2023 inclusive OR between the read result and the value specified by OrData, and
2024 writes the result to the 32-bit MMIO register specified by Address. The value
2025 written to the MMIO register is returned. This function must guarantee that
2026 all MMIO read and write operations are serialized. Extra left bits in OrData
2027 are stripped.
2028
2029 If 32-bit MMIO register operations are not supported, then ASSERT().
2030 If StartBit is greater than 31, then ASSERT().
2031 If EndBit is greater than 31, then ASSERT().
2032 If EndBit is less than StartBit, then ASSERT().
2033 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
2034
2035 @param[in] Address The MMIO register to write.
2036 @param[in] StartBit The ordinal of the least significant bit in the bit field.
2037 Range 0..31.
2038 @param[in] EndBit The ordinal of the most significant bit in the bit field.
2039 Range 0..31.
2040 @param[in] OrData The value to OR with the read value from the MMIO register.
2041
2042 @return The value written back to the MMIO register.
2043
2044**/
2045UINT32
2046EFIAPI
2047S3MmioBitFieldOr32 (
2048 IN UINTN Address,
2049 IN UINTN StartBit,
2050 IN UINTN EndBit,
2051 IN UINT32 OrData
2052 );
2053
2054/**
2055 Reads a bit field in a 32-bit MMIO register, performs a bitwise AND, and
2056 writes the result back to the bit field in the 32-bit MMIO register and
2057 saves the value in the S3 script to be replayed on S3 resume.
2058
2059 Reads the 32-bit MMIO register specified by Address, performs a bitwise AND
2060 between the read result and the value specified by AndData, and writes the
2061 result to the 32-bit MMIO register specified by Address. The value written to
2062 the MMIO register is returned. This function must guarantee that all MMIO
2063 read and write operations are serialized. Extra left bits in AndData are
2064 stripped.
2065
2066 If 32-bit MMIO register operations are not supported, then ASSERT().
2067 If StartBit is greater than 31, then ASSERT().
2068 If EndBit is greater than 31, then ASSERT().
2069 If EndBit is less than StartBit, then ASSERT().
2070 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
2071
2072 @param[in] Address The MMIO register to write.
2073 @param[in] StartBit The ordinal of the least significant bit in the bit field.
2074 Range 0..31.
2075 @param[in] EndBit The ordinal of the most significant bit in the bit field.
2076 Range 0..31.
2077 @param[in] AndData The value to AND with the read value from the MMIO register.
2078
2079 @return The value written back to the MMIO register.
2080
2081**/
2082UINT32
2083EFIAPI
2084S3MmioBitFieldAnd32 (
2085 IN UINTN Address,
2086 IN UINTN StartBit,
2087 IN UINTN EndBit,
2088 IN UINT32 AndData
2089 );
2090
2091/**
2092 Reads a bit field in a 32-bit MMIO register, performs a bitwise AND followed
2093 by a bitwise OR, writes the result back to the bit field in the
2094 32-bit MMIO register, and saves the value in the S3 script to be replayed
2095 on S3 resume.
2096
2097 Reads the 32-bit MMIO register specified by Address, performs a bitwise AND
2098 followed by a bitwise OR between the read result and the value
2099 specified by AndData, and writes the result to the 32-bit MMIO register
2100 specified by Address. The value written to the MMIO register is returned.
2101 This function must guarantee that all MMIO read and write operations are
2102 serialized. Extra left bits in both AndData and OrData are stripped.
2103
2104 If 32-bit MMIO register operations are not supported, then ASSERT().
2105 If StartBit is greater than 31, then ASSERT().
2106 If EndBit is greater than 31, then ASSERT().
2107 If EndBit is less than StartBit, then ASSERT().
2108 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
2109 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
2110
2111 @param[in] Address The MMIO register to write.
2112 @param[in] StartBit The ordinal of the least significant bit in the bit field.
2113 Range 0..31.
2114 @param[in] EndBit The ordinal of the most significant bit in the bit field.
2115 Range 0..31.
2116 @param[in] AndData The value to AND with the read value from the MMIO register.
2117 @param[in] OrData The value to OR with the result of the AND operation.
2118
2119 @return The value written back to the MMIO register.
2120
2121**/
2122UINT32
2123EFIAPI
2124S3MmioBitFieldAndThenOr32 (
2125 IN UINTN Address,
2126 IN UINTN StartBit,
2127 IN UINTN EndBit,
2128 IN UINT32 AndData,
2129 IN UINT32 OrData
2130 );
2131
2132/**
2133 Reads a 64-bit MMIO register, and saves the value in the S3 script to be
2134 replayed on S3 resume.
2135
2136 Reads the 64-bit MMIO register specified by Address. The 64-bit read value is
2137 returned. This function must guarantee that all MMIO read and write
2138 operations are serialized.
2139
2140 If 64-bit MMIO register operations are not supported, then ASSERT().
2141
2142 @param[in] Address The MMIO register to read.
2143
2144 @return The value read.
2145
2146**/
2147UINT64
2148EFIAPI
2149S3MmioRead64 (
2150 IN UINTN Address
2151 );
2152
2153/**
2154 Writes a 64-bit MMIO register, and saves the value in the S3 script to be
2155 replayed on S3 resume.
2156
2157 Writes the 64-bit MMIO register specified by Address with the value specified
2158 by Value and returns Value. This function must guarantee that all MMIO read
2159 and write operations are serialized.
2160
2161 If 64-bit MMIO register operations are not supported, then ASSERT().
2162
2163 @param[in] Address The MMIO register to write.
2164 @param[in] Value The value to write to the MMIO register.
2165
2166 @return The value written the MMIO register.
2167
2168**/
2169UINT64
2170EFIAPI
2171S3MmioWrite64 (
2172 IN UINTN Address,
2173 IN UINT64 Value
2174 );
2175
2176/**
2177 Reads a 64-bit MMIO register, performs a bitwise OR, writes the
2178 result back to the 64-bit MMIO register, and saves the value in the S3 script
2179 to be replayed on S3 resume.
2180
2181 Reads the 64-bit MMIO register specified by Address, performs a bitwise
2182 inclusive OR between the read result and the value specified by OrData, and
2183 writes the result to the 64-bit MMIO register specified by Address. The value
2184 written to the MMIO register is returned. This function must guarantee that
2185 all MMIO read and write operations are serialized.
2186
2187 If 64-bit MMIO register operations are not supported, then ASSERT().
2188
2189 @param[in] Address The MMIO register to write.
2190 @param[in] OrData The value to OR with the read value from the MMIO register.
2191
2192 @return The value written back to the MMIO register.
2193
2194**/
2195UINT64
2196EFIAPI
2197S3MmioOr64 (
2198 IN UINTN Address,
2199 IN UINT64 OrData
2200 );
2201
2202/**
2203 Reads a 64-bit MMIO register, performs a bitwise AND, writes the result
2204 back to the 64-bit MMIO register, and saves the value in the S3 script to be
2205 replayed on S3 resume.
2206
2207 Reads the 64-bit MMIO register specified by Address, performs a bitwise AND
2208 between the read result and the value specified by AndData, and writes the
2209 result to the 64-bit MMIO register specified by Address. The value written to
2210 the MMIO register is returned. This function must guarantee that all MMIO
2211 read and write operations are serialized.
2212
2213 If 64-bit MMIO register operations are not supported, then ASSERT().
2214
2215 @param[in] Address The MMIO register to write.
2216 @param[in] AndData The value to AND with the read value from the MMIO register.
2217
2218 @return The value written back to the MMIO register.
2219
2220**/
2221UINT64
2222EFIAPI
2223S3MmioAnd64 (
2224 IN UINTN Address,
2225 IN UINT64 AndData
2226 );
2227
2228/**
2229 Reads a 64-bit MMIO register, performs a bitwise AND followed by a bitwise
2230 inclusive OR, writes the result back to the 64-bit MMIO register, and
2231 saves the value in the S3 script to be replayed on S3 resume.
2232
2233 Reads the 64-bit MMIO register specified by Address, performs a bitwise AND
2234 between the read result and the value specified by AndData, performs a
2235 bitwise OR between the result of the AND operation and the value specified by
2236 OrData, and writes the result to the 64-bit MMIO register specified by
2237 Address. The value written to the MMIO register is returned. This function
2238 must guarantee that all MMIO read and write operations are serialized.
2239
2240 If 64-bit MMIO register operations are not supported, then ASSERT().
2241
2242 @param[in] Address The MMIO register to write.
2243 @param[in] AndData The value to AND with the read value from the MMIO register.
2244 @param[in] OrData The value to OR with the result of the AND operation.
2245
2246 @return The value written back to the MMIO register.
2247
2248**/
2249UINT64
2250EFIAPI
2251S3MmioAndThenOr64 (
2252 IN UINTN Address,
2253 IN UINT64 AndData,
2254 IN UINT64 OrData
2255 );
2256
2257/**
2258 Reads a bit field of a MMIO register saves the value in the S3 script to
2259 be replayed on S3 resume.
2260
2261 Reads the bit field in a 64-bit MMIO register. The bit field is specified by
2262 the StartBit and the EndBit. The value of the bit field is returned.
2263
2264 If 64-bit MMIO register operations are not supported, then ASSERT().
2265 If StartBit is greater than 63, then ASSERT().
2266 If EndBit is greater than 63, then ASSERT().
2267 If EndBit is less than StartBit, then ASSERT().
2268
2269 @param[in] Address MMIO register to read.
2270 @param[in] StartBit The ordinal of the least significant bit in the bit field.
2271 Range 0..63.
2272 @param[in] EndBit The ordinal of the most significant bit in the bit field.
2273 Range 0..63.
2274
2275 @return The value read.
2276
2277**/
2278UINT64
2279EFIAPI
2280S3MmioBitFieldRead64 (
2281 IN UINTN Address,
2282 IN UINTN StartBit,
2283 IN UINTN EndBit
2284 );
2285
2286/**
2287 Writes a bit field to a MMIO register, and saves the value in the S3 script to
2288 be replayed on S3 resume.
2289
2290 Writes Value to the bit field of the MMIO register. The bit field is
2291 specified by the StartBit and the EndBit. All other bits in the destination
2292 MMIO register are preserved. The new value of the 64-bit register is returned.
2293
2294 If 64-bit MMIO register operations are not supported, then ASSERT().
2295 If StartBit is greater than 63, then ASSERT().
2296 If EndBit is greater than 63, then ASSERT().
2297 If EndBit is less than StartBit, then ASSERT().
2298 If Value is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
2299
2300 @param[in] Address The MMIO register to write.
2301 @param[in] StartBit The ordinal of the least significant bit in the bit field.
2302 Range 0..63.
2303 @param[in] EndBit The ordinal of the most significant bit in the bit field.
2304 Range 0..63.
2305 @param[in] Value New value of the bit field.
2306
2307 @return The value written back to the MMIO register.
2308
2309**/
2310UINT64
2311EFIAPI
2312S3MmioBitFieldWrite64 (
2313 IN UINTN Address,
2314 IN UINTN StartBit,
2315 IN UINTN EndBit,
2316 IN UINT64 Value
2317 );
2318
2319/**
2320 Reads a bit field in a 64-bit MMIO register, performs a bitwise OR,
2321 writes the result back to the bit field in the 64-bit MMIO register, and
2322 saves the value in the S3 script to be replayed on S3 resume.
2323
2324 Reads the 64-bit MMIO register specified by Address, performs a bitwise
2325 inclusive OR between the read result and the value specified by OrData, and
2326 writes the result to the 64-bit MMIO register specified by Address. The value
2327 written to the MMIO register is returned. This function must guarantee that
2328 all MMIO read and write operations are serialized. Extra left bits in OrData
2329 are stripped.
2330
2331 If 64-bit MMIO register operations are not supported, then ASSERT().
2332 If StartBit is greater than 63, then ASSERT().
2333 If EndBit is greater than 63, then ASSERT().
2334 If EndBit is less than StartBit, then ASSERT().
2335 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
2336
2337 @param[in] Address The MMIO register to write.
2338 @param[in] StartBit The ordinal of the least significant bit in the bit field.
2339 Range 0..63.
2340 @param[in] EndBit The ordinal of the most significant bit in the bit field.
2341 Range 0..63.
2342 @param[in] OrData The value to OR with the read value from the MMIO register.
2343
2344 @return The value written back to the MMIO register.
2345
2346**/
2347UINT64
2348EFIAPI
2349S3MmioBitFieldOr64 (
2350 IN UINTN Address,
2351 IN UINTN StartBit,
2352 IN UINTN EndBit,
2353 IN UINT64 OrData
2354 );
2355
2356/**
2357 Reads a bit field in a 64-bit MMIO register, performs a bitwise AND, and
2358 writes the result back to the bit field in the 64-bit MMIO register, and saves
2359 the value in the S3 script to be replayed on S3 resume.
2360
2361 Reads the 64-bit MMIO register specified by Address, performs a bitwise AND
2362 between the read result and the value specified by AndData, and writes the
2363 result to the 64-bit MMIO register specified by Address. The value written to
2364 the MMIO register is returned. This function must guarantee that all MMIO
2365 read and write operations are serialized. Extra left bits in AndData are
2366 stripped.
2367
2368 If 64-bit MMIO register operations are not supported, then ASSERT().
2369 If StartBit is greater than 63, then ASSERT().
2370 If EndBit is greater than 63, then ASSERT().
2371 If EndBit is less than StartBit, then ASSERT().
2372 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
2373
2374 @param[in] Address The MMIO register to write.
2375 @param[in] StartBit The ordinal of the least significant bit in the bit field.
2376 Range 0..63.
2377 @param[in] EndBit The ordinal of the most significant bit in the bit field.
2378 Range 0..63.
2379 @param[in] AndData The value to AND with the read value from the MMIO register.
2380
2381 @return The value written back to the MMIO register.
2382
2383**/
2384UINT64
2385EFIAPI
2386S3MmioBitFieldAnd64 (
2387 IN UINTN Address,
2388 IN UINTN StartBit,
2389 IN UINTN EndBit,
2390 IN UINT64 AndData
2391 );
2392
2393/**
2394 Reads a bit field in a 64-bit MMIO register, performs a bitwise AND followed
2395 by a bitwise OR, writes the result back to the bit field in the
2396 64-bit MMIO register, and saves the value in the S3 script to be replayed
2397 on S3 resume.
2398
2399 Reads the 64-bit MMIO register specified by Address, performs a bitwise AND
2400 followed by a bitwise OR between the read result and the value
2401 specified by AndData, and writes the result to the 64-bit MMIO register
2402 specified by Address. The value written to the MMIO register is returned.
2403 This function must guarantee that all MMIO read and write operations are
2404 serialized. Extra left bits in both AndData and OrData are stripped.
2405
2406 If 64-bit MMIO register operations are not supported, then ASSERT().
2407 If StartBit is greater than 63, then ASSERT().
2408 If EndBit is greater than 63, then ASSERT().
2409 If EndBit is less than StartBit, then ASSERT().
2410 If AndData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
2411 If OrData is larger than the bitmask value range specified by StartBit and EndBit, then ASSERT().
2412
2413 @param[in] Address The MMIO register to write.
2414 @param[in] StartBit The ordinal of the least significant bit in the bit field.
2415 Range 0..63.
2416 @param[in] EndBit The ordinal of the most significant bit in the bit field.
2417 Range 0..63.
2418 @param[in] AndData The value to AND with the read value from the MMIO register.
2419 @param[in] OrData The value to OR with the result of the AND operation.
2420
2421 @return The value written back to the MMIO register.
2422
2423**/
2424UINT64
2425EFIAPI
2426S3MmioBitFieldAndThenOr64 (
2427 IN UINTN Address,
2428 IN UINTN StartBit,
2429 IN UINTN EndBit,
2430 IN UINT64 AndData,
2431 IN UINT64 OrData
2432 );
2433
2434/**
2435 Copies data from MMIO region to system memory by using 8-bit access,
2436 and saves the value in the S3 script to be replayed on S3 resume.
2437
2438 Copy data from MMIO region specified by starting address StartAddress
2439 to system memory specified by Buffer by using 8-bit access. The total
2440 number of bytes to be copied is specified by Length. Buffer is returned.
2441
2442 If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT().
2443 If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
2444
2445
2446 @param[in] StartAddress Starting address for the MMIO region to be copied from.
2447 @param[in] Length Size in bytes of the copy.
2448 @param[out] Buffer Pointer to a system memory buffer receiving the data read.
2449
2450 @return Buffer.
2451
2452**/
2453UINT8 *
2454EFIAPI
2455S3MmioReadBuffer8 (
2456 IN UINTN StartAddress,
2457 IN UINTN Length,
2458 OUT UINT8 *Buffer
2459 );
2460
2461/**
2462 Copies data from MMIO region to system memory by using 16-bit access,
2463 and saves the value in the S3 script to be replayed on S3 resume.
2464
2465 Copy data from MMIO region specified by starting address StartAddress
2466 to system memory specified by Buffer by using 16-bit access. The total
2467 number of bytes to be copied is specified by Length. Buffer is returned.
2468
2469 If StartAddress is not aligned on a 16-bit boundary, then ASSERT().
2470
2471 If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT().
2472 If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
2473
2474 If Length is not aligned on a 16-bit boundary, then ASSERT().
2475 If Buffer is not aligned on a 16-bit boundary, then ASSERT().
2476
2477 @param[in] StartAddress Starting address for the MMIO region to be copied from.
2478 @param[in] Length Size in bytes of the copy.
2479 @param[out] Buffer Pointer to a system memory buffer receiving the data read.
2480
2481 @return Buffer.
2482
2483**/
2484UINT16 *
2485EFIAPI
2486S3MmioReadBuffer16 (
2487 IN UINTN StartAddress,
2488 IN UINTN Length,
2489 OUT UINT16 *Buffer
2490 );
2491
2492/**
2493 Copies data from MMIO region to system memory by using 32-bit access,
2494 and saves the value in the S3 script to be replayed on S3 resume.
2495
2496 Copy data from MMIO region specified by starting address StartAddress
2497 to system memory specified by Buffer by using 32-bit access. The total
2498 number of byte to be copied is specified by Length. Buffer is returned.
2499
2500 If StartAddress is not aligned on a 32-bit boundary, then ASSERT().
2501
2502 If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT().
2503 If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
2504
2505 If Length is not aligned on a 32-bit boundary, then ASSERT().
2506 If Buffer is not aligned on a 32-bit boundary, then ASSERT().
2507
2508 @param[in] StartAddress Starting address for the MMIO region to be copied from.
2509 @param[in] Length Size in bytes of the copy.
2510 @param[out] Buffer Pointer to a system memory buffer receiving the data read.
2511
2512 @return Buffer.
2513
2514**/
2515UINT32 *
2516EFIAPI
2517S3MmioReadBuffer32 (
2518 IN UINTN StartAddress,
2519 IN UINTN Length,
2520 OUT UINT32 *Buffer
2521 );
2522
2523/**
2524 Copies data from MMIO region to system memory by using 64-bit access,
2525 and saves the value in the S3 script to be replayed on S3 resume.
2526
2527 Copy data from MMIO region specified by starting address StartAddress
2528 to system memory specified by Buffer by using 64-bit access. The total
2529 number of byte to be copied is specified by Length. Buffer is returned.
2530
2531 If StartAddress is not aligned on a 64-bit boundary, then ASSERT().
2532
2533 If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT().
2534 If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
2535
2536 If Length is not aligned on a 64-bit boundary, then ASSERT().
2537 If Buffer is not aligned on a 64-bit boundary, then ASSERT().
2538
2539 @param[in] StartAddress Starting address for the MMIO region to be copied from.
2540 @param[in] Length Size in bytes of the copy.
2541 @param[out] Buffer Pointer to a system memory buffer receiving the data read.
2542
2543 @return Buffer.
2544
2545**/
2546UINT64 *
2547EFIAPI
2548S3MmioReadBuffer64 (
2549 IN UINTN StartAddress,
2550 IN UINTN Length,
2551 OUT UINT64 *Buffer
2552 );
2553
2554/**
2555 Copies data from system memory to MMIO region by using 8-bit access,
2556 and saves the value in the S3 script to be replayed on S3 resume.
2557
2558 Copy data from system memory specified by Buffer to MMIO region specified
2559 by starting address StartAddress by using 8-bit access. The total number
2560 of byte to be copied is specified by Length. Buffer is returned.
2561
2562 If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT().
2563 If Length is greater than (MAX_ADDRESS -Buffer + 1), then ASSERT().
2564
2565
2566 @param[in] StartAddress Starting address for the MMIO region to be copied to.
2567 @param[in] Length Size in bytes of the copy.
2568 @param[in] Buffer Pointer to a system memory buffer containing the data to write.
2569
2570 @return Buffer.
2571
2572**/
2573UINT8 *
2574EFIAPI
2575S3MmioWriteBuffer8 (
2576 IN UINTN StartAddress,
2577 IN UINTN Length,
2578 IN CONST UINT8 *Buffer
2579 );
2580
2581/**
2582 Copies data from system memory to MMIO region by using 16-bit access,
2583 and saves the value in the S3 script to be replayed on S3 resume.
2584
2585 Copy data from system memory specified by Buffer to MMIO region specified
2586 by starting address StartAddress by using 16-bit access. The total number
2587 of bytes to be copied is specified by Length. Buffer is returned.
2588
2589 If StartAddress is not aligned on a 16-bit boundary, then ASSERT().
2590
2591 If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT().
2592 If Length is greater than (MAX_ADDRESS -Buffer + 1), then ASSERT().
2593
2594 If Length is not aligned on a 16-bit boundary, then ASSERT().
2595
2596 If Buffer is not aligned on a 16-bit boundary, then ASSERT().
2597
2598 @param[in] StartAddress Starting address for the MMIO region to be copied to.
2599 @param[in] Length Size in bytes of the copy.
2600 @param[in] Buffer Pointer to a system memory buffer containing the data to write.
2601
2602 @return Buffer.
2603
2604**/
2605UINT16 *
2606EFIAPI
2607S3MmioWriteBuffer16 (
2608 IN UINTN StartAddress,
2609 IN UINTN Length,
2610 IN CONST UINT16 *Buffer
2611 );
2612
2613/**
2614 Copies data from system memory to MMIO region by using 32-bit access,
2615 and saves the value in the S3 script to be replayed on S3 resume.
2616
2617 Copy data from system memory specified by Buffer to MMIO region specified
2618 by starting address StartAddress by using 32-bit access. The total number
2619 of bytes to be copied is specified by Length. Buffer is returned.
2620
2621 If StartAddress is not aligned on a 32-bit boundary, then ASSERT().
2622
2623 If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT().
2624 If Length is greater than (MAX_ADDRESS -Buffer + 1), then ASSERT().
2625
2626 If Length is not aligned on a 32-bit boundary, then ASSERT().
2627
2628 If Buffer is not aligned on a 32-bit boundary, then ASSERT().
2629
2630 @param[in] StartAddress Starting address for the MMIO region to be copied to.
2631 @param[in] Length Size in bytes of the copy.
2632 @param[in] Buffer Pointer to a system memory buffer containing the data to write.
2633
2634 @return Buffer.
2635
2636**/
2637UINT32 *
2638EFIAPI
2639S3MmioWriteBuffer32 (
2640 IN UINTN StartAddress,
2641 IN UINTN Length,
2642 IN CONST UINT32 *Buffer
2643 );
2644
2645/**
2646 Copies data from system memory to MMIO region by using 64-bit access,
2647 and saves the value in the S3 script to be replayed on S3 resume.
2648
2649 Copy data from system memory specified by Buffer to MMIO region specified
2650 by starting address StartAddress by using 64-bit access. The total number
2651 of bytes to be copied is specified by Length. Buffer is returned.
2652
2653 If StartAddress is not aligned on a 64-bit boundary, then ASSERT().
2654
2655 If Length is greater than (MAX_ADDRESS - StartAddress + 1), then ASSERT().
2656 If Length is greater than (MAX_ADDRESS -Buffer + 1), then ASSERT().
2657
2658 If Length is not aligned on a 64-bit boundary, then ASSERT().
2659
2660 If Buffer is not aligned on a 64-bit boundary, then ASSERT().
2661
2662 @param[in] StartAddress Starting address for the MMIO region to be copied to.
2663 @param[in] Length Size in bytes of the copy.
2664 @param[in] Buffer Pointer to a system memory buffer containing the data to write.
2665
2666 @return Buffer.
2667
2668**/
2669UINT64 *
2670EFIAPI
2671S3MmioWriteBuffer64 (
2672 IN UINTN StartAddress,
2673 IN UINTN Length,
2674 IN CONST UINT64 *Buffer
2675 );
2676
2677#endif