]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Include/Library/EdkIIGluePciExpressLib.h
Update the copyright notice format
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / EdkIIGlueLib / Include / Library / EdkIIGluePciExpressLib.h
1 /*++
2
3 Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12
13 Module Name:
14
15 EdkIIGluePciExpressLib.h
16
17 Abstract:
18
19 Public header file for Pci Express Lib
20
21 --*/
22
23 #ifndef __EDKII_GLUE_PCI_EXPRESS_LIB_H__
24 #define __EDKII_GLUE_PCI_EXPRESS_LIB_H__
25
26
27 /**
28 Macro that converts PCI Bus, PCI Device, PCI Function and PCI Register to an
29 address that can be passed to the PCI Library functions.
30
31 Computes an address that is compatible with the PCI Library functions. The
32 unused upper bits of Bus, Device, Function and Register are stripped prior to
33 the generation of the address.
34
35 @param Bus PCI Bus number. Range 0..255.
36 @param Device PCI Device number. Range 0..31.
37 @param Function PCI Function number. Range 0..7.
38 @param Register PCI Register number. Range 0..4095.
39
40 @return The encode PCI address.
41
42 **/
43 #define PCI_EXPRESS_LIB_ADDRESS(Bus,Device,Function,Offset) \
44 (((Offset) & 0xfff) | (((Function) & 0x07) << 12) | (((Device) & 0x1f) << 15) | (((Bus) & 0xff) << 20))
45
46 /**
47 Reads an 8-bit PCI configuration register.
48
49 Reads and returns the 8-bit PCI configuration register specified by Address.
50 This function must guarantee that all PCI read and write operations are
51 serialized.
52
53 If Address > 0x0FFFFFFF, then ASSERT().
54
55 @param Address Address that encodes the PCI Bus, Device, Function and
56 Register.
57
58 @return The read value from the PCI configuration register.
59
60 **/
61 UINT8
62 EFIAPI
63 PciExpressRead8 (
64 IN UINTN Address
65 );
66
67 /**
68 Writes an 8-bit PCI configuration register.
69
70 Writes the 8-bit PCI configuration register specified by Address with the
71 value specified by Value. Value is returned. This function must guarantee
72 that all PCI read and write operations are serialized.
73
74 If Address > 0x0FFFFFFF, then ASSERT().
75
76 @param Address Address that encodes the PCI Bus, Device, Function and
77 Register.
78 @param Value The value to write.
79
80 @return The value written to the PCI configuration register.
81
82 **/
83 UINT8
84 EFIAPI
85 PciExpressWrite8 (
86 IN UINTN Address,
87 IN UINT8 Data
88 );
89
90 /**
91 Performs a bitwise inclusive OR of an 8-bit PCI configuration register with
92 an 8-bit value.
93
94 Reads the 8-bit PCI configuration register specified by Address, performs a
95 bitwise inclusive OR between the read result and the value specified by
96 OrData, and writes the result to the 8-bit PCI configuration register
97 specified by Address. The value written to the PCI configuration register is
98 returned. This function must guarantee that all PCI read and write operations
99 are serialized.
100
101 If Address > 0x0FFFFFFF, then ASSERT().
102
103 @param Address Address that encodes the PCI Bus, Device, Function and
104 Register.
105 @param OrData The value to OR with the PCI configuration register.
106
107 @return The value written back to the PCI configuration register.
108
109 **/
110 UINT8
111 EFIAPI
112 PciExpressOr8 (
113 IN UINTN Address,
114 IN UINT8 OrData
115 );
116
117 /**
118 Performs a bitwise AND of an 8-bit PCI configuration register with an 8-bit
119 value.
120
121 Reads the 8-bit PCI configuration register specified by Address, performs a
122 bitwise AND between the read result and the value specified by AndData, and
123 writes the result to the 8-bit PCI configuration register specified by
124 Address. The value written to the PCI configuration register is returned.
125 This function must guarantee that all PCI read and write operations are
126 serialized.
127
128 If Address > 0x0FFFFFFF, then ASSERT().
129
130 @param Address Address that encodes the PCI Bus, Device, Function and
131 Register.
132 @param AndData The value to AND with the PCI configuration register.
133
134 @return The value written back to the PCI configuration register.
135
136 **/
137 UINT8
138 EFIAPI
139 PciExpressAnd8 (
140 IN UINTN Address,
141 IN UINT8 AndData
142 );
143
144 /**
145 Performs a bitwise AND of an 8-bit PCI configuration register with an 8-bit
146 value, followed a bitwise inclusive OR with another 8-bit value.
147
148 Reads the 8-bit PCI configuration register specified by Address, performs a
149 bitwise AND between the read result and the value specified by AndData,
150 performs a bitwise inclusive OR between the result of the AND operation and
151 the value specified by OrData, and writes the result to the 8-bit PCI
152 configuration register specified by Address. The value written to the PCI
153 configuration register is returned. This function must guarantee that all PCI
154 read and write operations are serialized.
155
156 If Address > 0x0FFFFFFF, then ASSERT().
157
158 @param Address Address that encodes the PCI Bus, Device, Function and
159 Register.
160 @param AndData The value to AND with the PCI configuration register.
161 @param OrData The value to OR with the result of the AND operation.
162
163 @return The value written back to the PCI configuration register.
164
165 **/
166 UINT8
167 EFIAPI
168 PciExpressAndThenOr8 (
169 IN UINTN Address,
170 IN UINT8 AndData,
171 IN UINT8 OrData
172 );
173
174 /**
175 Reads a bit field of a PCI configuration register.
176
177 Reads the bit field in an 8-bit PCI configuration register. The bit field is
178 specified by the StartBit and the EndBit. The value of the bit field is
179 returned.
180
181 If Address > 0x0FFFFFFF, then ASSERT().
182 If StartBit is greater than 7, then ASSERT().
183 If EndBit is greater than 7, then ASSERT().
184 If EndBit is less than StartBit, then ASSERT().
185
186 @param Address PCI configuration register to read.
187 @param StartBit The ordinal of the least significant bit in the bit field.
188 Range 0..7.
189 @param EndBit The ordinal of the most significant bit in the bit field.
190 Range 0..7.
191
192 @return The value of the bit field read from the PCI configuration register.
193
194 **/
195 UINT8
196 EFIAPI
197 PciExpressBitFieldRead8 (
198 IN UINTN Address,
199 IN UINTN StartBit,
200 IN UINTN EndBit
201 );
202
203 /**
204 Writes a bit field to a PCI configuration register.
205
206 Writes Value to the bit field of the PCI configuration register. The bit
207 field is specified by the StartBit and the EndBit. All other bits in the
208 destination PCI configuration register are preserved. The new value of the
209 8-bit register is returned.
210
211 If Address > 0x0FFFFFFF, then ASSERT().
212 If StartBit is greater than 7, then ASSERT().
213 If EndBit is greater than 7, then ASSERT().
214 If EndBit is less than StartBit, then ASSERT().
215
216 @param Address PCI configuration register to write.
217 @param StartBit The ordinal of the least significant bit in the bit field.
218 Range 0..7.
219 @param EndBit The ordinal of the most significant bit in the bit field.
220 Range 0..7.
221 @param Value New value of the bit field.
222
223 @return The value written back to the PCI configuration register.
224
225 **/
226 UINT8
227 EFIAPI
228 PciExpressBitFieldWrite8 (
229 IN UINTN Address,
230 IN UINTN StartBit,
231 IN UINTN EndBit,
232 IN UINT8 Value
233 );
234
235 /**
236 Reads a bit field in an 8-bit PCI configuration, performs a bitwise OR, and
237 writes the result back to the bit field in the 8-bit port.
238
239 Reads the 8-bit PCI configuration register specified by Address, performs a
240 bitwise inclusive OR between the read result and the value specified by
241 OrData, and writes the result to the 8-bit PCI configuration register
242 specified by Address. The value written to the PCI configuration register is
243 returned. This function must guarantee that all PCI read and write operations
244 are serialized. Extra left bits in OrData are stripped.
245
246 If Address > 0x0FFFFFFF, then ASSERT().
247 If StartBit is greater than 7, then ASSERT().
248 If EndBit is greater than 7, then ASSERT().
249 If EndBit is less than StartBit, then ASSERT().
250
251 @param Address PCI configuration register to write.
252 @param StartBit The ordinal of the least significant bit in the bit field.
253 Range 0..7.
254 @param EndBit The ordinal of the most significant bit in the bit field.
255 Range 0..7.
256 @param OrData The value to OR with the PCI configuration register.
257
258 @return The value written back to the PCI configuration register.
259
260 **/
261 UINT8
262 EFIAPI
263 PciExpressBitFieldOr8 (
264 IN UINTN Address,
265 IN UINTN StartBit,
266 IN UINTN EndBit,
267 IN UINT8 OrData
268 );
269
270 /**
271 Reads a bit field in an 8-bit PCI configuration register, performs a bitwise
272 AND, and writes the result back to the bit field in the 8-bit register.
273
274 Reads the 8-bit PCI configuration register specified by Address, performs a
275 bitwise AND between the read result and the value specified by AndData, and
276 writes the result to the 8-bit PCI configuration register specified by
277 Address. The value written to the PCI configuration register is returned.
278 This function must guarantee that all PCI read and write operations are
279 serialized. Extra left bits in AndData are stripped.
280
281 If Address > 0x0FFFFFFF, then ASSERT().
282 If StartBit is greater than 7, then ASSERT().
283 If EndBit is greater than 7, then ASSERT().
284 If EndBit is less than StartBit, then ASSERT().
285
286 @param Address PCI configuration register to write.
287 @param StartBit The ordinal of the least significant bit in the bit field.
288 Range 0..7.
289 @param EndBit The ordinal of the most significant bit in the bit field.
290 Range 0..7.
291 @param AndData The value to AND with the PCI configuration register.
292
293 @return The value written back to the PCI configuration register.
294
295 **/
296 UINT8
297 EFIAPI
298 PciExpressBitFieldAnd8 (
299 IN UINTN Address,
300 IN UINTN StartBit,
301 IN UINTN EndBit,
302 IN UINT8 AndData
303 );
304
305 /**
306 Reads a bit field in an 8-bit port, performs a bitwise AND followed by a
307 bitwise inclusive OR, and writes the result back to the bit field in the
308 8-bit port.
309
310 Reads the 8-bit PCI configuration register specified by Address, performs a
311 bitwise AND followed by a bitwise inclusive OR between the read result and
312 the value specified by AndData, and writes the result to the 8-bit PCI
313 configuration register specified by Address. The value written to the PCI
314 configuration register is returned. This function must guarantee that all PCI
315 read and write operations are serialized. Extra left bits in both AndData and
316 OrData are stripped.
317
318 If Address > 0x0FFFFFFF, then ASSERT().
319 If StartBit is greater than 7, then ASSERT().
320 If EndBit is greater than 7, then ASSERT().
321 If EndBit is less than StartBit, then ASSERT().
322
323 @param Address PCI configuration register to write.
324 @param StartBit The ordinal of the least significant bit in the bit field.
325 Range 0..7.
326 @param EndBit The ordinal of the most significant bit in the bit field.
327 Range 0..7.
328 @param AndData The value to AND with the PCI configuration register.
329 @param OrData The value to OR with the result of the AND operation.
330
331 @return The value written back to the PCI configuration register.
332
333 **/
334 UINT8
335 EFIAPI
336 PciExpressBitFieldAndThenOr8 (
337 IN UINTN Address,
338 IN UINTN StartBit,
339 IN UINTN EndBit,
340 IN UINT8 AndData,
341 IN UINT8 OrData
342 );
343
344 /**
345 Reads a 16-bit PCI configuration register.
346
347 Reads and returns the 16-bit PCI configuration register specified by Address.
348 This function must guarantee that all PCI read and write operations are
349 serialized.
350
351 If Address > 0x0FFFFFFF, then ASSERT().
352 If Address is not aligned on a 16-bit boundary, then ASSERT().
353
354 @param Address Address that encodes the PCI Bus, Device, Function and
355 Register.
356
357 @return The read value from the PCI configuration register.
358
359 **/
360 UINT16
361 EFIAPI
362 PciExpressRead16 (
363 IN UINTN Address
364 );
365
366 /**
367 Writes a 16-bit PCI configuration register.
368
369 Writes the 16-bit PCI configuration register specified by Address with the
370 value specified by Value. Value is returned. This function must guarantee
371 that all PCI read and write operations are serialized.
372
373 If Address > 0x0FFFFFFF, then ASSERT().
374 If Address is not aligned on a 16-bit boundary, then ASSERT().
375
376 @param Address Address that encodes the PCI Bus, Device, Function and
377 Register.
378 @param Value The value to write.
379
380 @return The value written to the PCI configuration register.
381
382 **/
383 UINT16
384 EFIAPI
385 PciExpressWrite16 (
386 IN UINTN Address,
387 IN UINT16 Data
388 );
389
390 /**
391 Performs a bitwise inclusive OR of a 16-bit PCI configuration register with
392 a 16-bit value.
393
394 Reads the 16-bit PCI configuration register specified by Address, performs a
395 bitwise inclusive OR between the read result and the value specified by
396 OrData, and writes the result to the 16-bit PCI configuration register
397 specified by Address. The value written to the PCI configuration register is
398 returned. This function must guarantee that all PCI read and write operations
399 are serialized.
400
401 If Address > 0x0FFFFFFF, then ASSERT().
402 If Address is not aligned on a 16-bit boundary, then ASSERT().
403
404 @param Address Address that encodes the PCI Bus, Device, Function and
405 Register.
406 @param OrData The value to OR with the PCI configuration register.
407
408 @return The value written back to the PCI configuration register.
409
410 **/
411 UINT16
412 EFIAPI
413 PciExpressOr16 (
414 IN UINTN Address,
415 IN UINT16 OrData
416 );
417
418 /**
419 Performs a bitwise AND of a 16-bit PCI configuration register with a 16-bit
420 value.
421
422 Reads the 16-bit PCI configuration register specified by Address, performs a
423 bitwise AND between the read result and the value specified by AndData, and
424 writes the result to the 16-bit PCI configuration register specified by
425 Address. The value written to the PCI configuration register is returned.
426 This function must guarantee that all PCI read and write operations are
427 serialized.
428
429 If Address > 0x0FFFFFFF, then ASSERT().
430 If Address is not aligned on a 16-bit boundary, then ASSERT().
431
432 @param Address Address that encodes the PCI Bus, Device, Function and
433 Register.
434 @param AndData The value to AND with the PCI configuration register.
435
436 @return The value written back to the PCI configuration register.
437
438 **/
439 UINT16
440 EFIAPI
441 PciExpressAnd16 (
442 IN UINTN Address,
443 IN UINT16 AndData
444 );
445
446 /**
447 Performs a bitwise AND of a 16-bit PCI configuration register with a 16-bit
448 value, followed a bitwise inclusive OR with another 16-bit value.
449
450 Reads the 16-bit PCI configuration register specified by Address, performs a
451 bitwise AND between the read result and the value specified by AndData,
452 performs a bitwise inclusive OR between the result of the AND operation and
453 the value specified by OrData, and writes the result to the 16-bit PCI
454 configuration register specified by Address. The value written to the PCI
455 configuration register is returned. This function must guarantee that all PCI
456 read and write operations are serialized.
457
458 If Address > 0x0FFFFFFF, then ASSERT().
459 If Address is not aligned on a 16-bit boundary, then ASSERT().
460
461 @param Address Address that encodes the PCI Bus, Device, Function and
462 Register.
463 @param AndData The value to AND with the PCI configuration register.
464 @param OrData The value to OR with the result of the AND operation.
465
466 @return The value written back to the PCI configuration register.
467
468 **/
469 UINT16
470 EFIAPI
471 PciExpressAndThenOr16 (
472 IN UINTN Address,
473 IN UINT16 AndData,
474 IN UINT16 OrData
475 );
476
477 /**
478 Reads a bit field of a PCI configuration register.
479
480 Reads the bit field in a 16-bit PCI configuration register. The bit field is
481 specified by the StartBit and the EndBit. The value of the bit field is
482 returned.
483
484 If Address > 0x0FFFFFFF, then ASSERT().
485 If Address is not aligned on a 16-bit boundary, 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
490 @param Address PCI configuration register to read.
491 @param StartBit The ordinal of the least significant bit in the bit field.
492 Range 0..15.
493 @param EndBit The ordinal of the most significant bit in the bit field.
494 Range 0..15.
495
496 @return The value of the bit field read from the PCI configuration register.
497
498 **/
499 UINT16
500 EFIAPI
501 PciExpressBitFieldRead16 (
502 IN UINTN Address,
503 IN UINTN StartBit,
504 IN UINTN EndBit
505 );
506
507 /**
508 Writes a bit field to a PCI configuration register.
509
510 Writes Value to the bit field of the PCI configuration register. The bit
511 field is specified by the StartBit and the EndBit. All other bits in the
512 destination PCI configuration register are preserved. The new value of the
513 16-bit register is returned.
514
515 If Address > 0x0FFFFFFF, then ASSERT().
516 If Address is not aligned on a 16-bit boundary, then ASSERT().
517 If StartBit is greater than 15, then ASSERT().
518 If EndBit is greater than 15, then ASSERT().
519 If EndBit is less than StartBit, then ASSERT().
520
521 @param Address PCI configuration register to write.
522 @param StartBit The ordinal of the least significant bit in the bit field.
523 Range 0..15.
524 @param EndBit The ordinal of the most significant bit in the bit field.
525 Range 0..15.
526 @param Value New value of the bit field.
527
528 @return The value written back to the PCI configuration register.
529
530 **/
531 UINT16
532 EFIAPI
533 PciExpressBitFieldWrite16 (
534 IN UINTN Address,
535 IN UINTN StartBit,
536 IN UINTN EndBit,
537 IN UINT16 Value
538 );
539
540 /**
541 Reads a bit field in a 16-bit PCI configuration, performs a bitwise OR, and
542 writes the result back to the bit field in the 16-bit port.
543
544 Reads the 16-bit PCI configuration register specified by Address, performs a
545 bitwise inclusive OR between the read result and the value specified by
546 OrData, and writes the result to the 16-bit PCI configuration register
547 specified by Address. The value written to the PCI configuration register is
548 returned. This function must guarantee that all PCI read and write operations
549 are serialized. Extra left bits in OrData are stripped.
550
551 If Address > 0x0FFFFFFF, then ASSERT().
552 If Address is not aligned on a 16-bit boundary, then ASSERT().
553 If StartBit is greater than 15, then ASSERT().
554 If EndBit is greater than 15, then ASSERT().
555 If EndBit is less than StartBit, then ASSERT().
556
557 @param Address PCI configuration register to write.
558 @param StartBit The ordinal of the least significant bit in the bit field.
559 Range 0..15.
560 @param EndBit The ordinal of the most significant bit in the bit field.
561 Range 0..15.
562 @param OrData The value to OR with the PCI configuration register.
563
564 @return The value written back to the PCI configuration register.
565
566 **/
567 UINT16
568 EFIAPI
569 PciExpressBitFieldOr16 (
570 IN UINTN Address,
571 IN UINTN StartBit,
572 IN UINTN EndBit,
573 IN UINT16 OrData
574 );
575
576 /**
577 Reads a bit field in a 16-bit PCI configuration register, performs a bitwise
578 AND, and writes the result back to the bit field in the 16-bit register.
579
580 Reads the 16-bit PCI configuration register specified by Address, performs a
581 bitwise AND between the read result and the value specified by AndData, and
582 writes the result to the 16-bit PCI configuration register specified by
583 Address. The value written to the PCI configuration register is returned.
584 This function must guarantee that all PCI read and write operations are
585 serialized. Extra left bits in AndData are stripped.
586
587 If Address > 0x0FFFFFFF, then ASSERT().
588 If Address is not aligned on a 16-bit boundary, then ASSERT().
589 If StartBit is greater than 15, then ASSERT().
590 If EndBit is greater than 15, then ASSERT().
591 If EndBit is less than StartBit, then ASSERT().
592
593 @param Address PCI configuration register to write.
594 @param StartBit The ordinal of the least significant bit in the bit field.
595 Range 0..15.
596 @param EndBit The ordinal of the most significant bit in the bit field.
597 Range 0..15.
598 @param AndData The value to AND with the PCI configuration register.
599
600 @return The value written back to the PCI configuration register.
601
602 **/
603 UINT16
604 EFIAPI
605 PciExpressBitFieldAnd16 (
606 IN UINTN Address,
607 IN UINTN StartBit,
608 IN UINTN EndBit,
609 IN UINT16 AndData
610 );
611
612 /**
613 Reads a bit field in a 16-bit port, performs a bitwise AND followed by a
614 bitwise inclusive OR, and writes the result back to the bit field in the
615 16-bit port.
616
617 Reads the 16-bit PCI configuration register specified by Address, performs a
618 bitwise AND followed by a bitwise inclusive OR between the read result and
619 the value specified by AndData, and writes the result to the 16-bit PCI
620 configuration register specified by Address. The value written to the PCI
621 configuration register is returned. This function must guarantee that all PCI
622 read and write operations are serialized. Extra left bits in both AndData and
623 OrData are stripped.
624
625 If Address > 0x0FFFFFFF, then ASSERT().
626 If Address is not aligned on a 16-bit boundary, then ASSERT().
627 If StartBit is greater than 15, then ASSERT().
628 If EndBit is greater than 15, then ASSERT().
629 If EndBit is less than StartBit, then ASSERT().
630
631 @param Address PCI configuration register to write.
632 @param StartBit The ordinal of the least significant bit in the bit field.
633 Range 0..15.
634 @param EndBit The ordinal of the most significant bit in the bit field.
635 Range 0..15.
636 @param AndData The value to AND with the PCI configuration register.
637 @param OrData The value to OR with the result of the AND operation.
638
639 @return The value written back to the PCI configuration register.
640
641 **/
642 UINT16
643 EFIAPI
644 PciExpressBitFieldAndThenOr16 (
645 IN UINTN Address,
646 IN UINTN StartBit,
647 IN UINTN EndBit,
648 IN UINT16 AndData,
649 IN UINT16 OrData
650 );
651
652 /**
653 Reads a 32-bit PCI configuration register.
654
655 Reads and returns the 32-bit PCI configuration register specified by Address.
656 This function must guarantee that all PCI read and write operations are
657 serialized.
658
659 If Address > 0x0FFFFFFF, then ASSERT().
660 If Address is not aligned on a 32-bit boundary, then ASSERT().
661
662 @param Address Address that encodes the PCI Bus, Device, Function and
663 Register.
664
665 @return The read value from the PCI configuration register.
666
667 **/
668 UINT32
669 EFIAPI
670 PciExpressRead32 (
671 IN UINTN Address
672 );
673
674 /**
675 Writes a 32-bit PCI configuration register.
676
677 Writes the 32-bit PCI configuration register specified by Address with the
678 value specified by Value. Value is returned. This function must guarantee
679 that all PCI read and write operations are serialized.
680
681 If Address > 0x0FFFFFFF, then ASSERT().
682 If Address is not aligned on a 32-bit boundary, then ASSERT().
683
684 @param Address Address that encodes the PCI Bus, Device, Function and
685 Register.
686 @param Value The value to write.
687
688 @return The value written to the PCI configuration register.
689
690 **/
691 UINT32
692 EFIAPI
693 PciExpressWrite32 (
694 IN UINTN Address,
695 IN UINT32 Data
696 );
697
698 /**
699 Performs a bitwise inclusive OR of a 32-bit PCI configuration register with
700 a 32-bit value.
701
702 Reads the 32-bit PCI configuration register specified by Address, performs a
703 bitwise inclusive OR between the read result and the value specified by
704 OrData, and writes the result to the 32-bit PCI configuration register
705 specified by Address. The value written to the PCI configuration register is
706 returned. This function must guarantee that all PCI read and write operations
707 are serialized.
708
709 If Address > 0x0FFFFFFF, then ASSERT().
710 If Address is not aligned on a 32-bit boundary, then ASSERT().
711
712 @param Address Address that encodes the PCI Bus, Device, Function and
713 Register.
714 @param OrData The value to OR with the PCI configuration register.
715
716 @return The value written back to the PCI configuration register.
717
718 **/
719 UINT32
720 EFIAPI
721 PciExpressOr32 (
722 IN UINTN Address,
723 IN UINT32 OrData
724 );
725
726 /**
727 Performs a bitwise AND of a 32-bit PCI configuration register with a 32-bit
728 value.
729
730 Reads the 32-bit PCI configuration register specified by Address, performs a
731 bitwise AND between the read result and the value specified by AndData, and
732 writes the result to the 32-bit PCI configuration register specified by
733 Address. The value written to the PCI configuration register is returned.
734 This function must guarantee that all PCI read and write operations are
735 serialized.
736
737 If Address > 0x0FFFFFFF, then ASSERT().
738 If Address is not aligned on a 32-bit boundary, then ASSERT().
739
740 @param Address Address that encodes the PCI Bus, Device, Function and
741 Register.
742 @param AndData The value to AND with the PCI configuration register.
743
744 @return The value written back to the PCI configuration register.
745
746 **/
747 UINT32
748 EFIAPI
749 PciExpressAnd32 (
750 IN UINTN Address,
751 IN UINT32 AndData
752 );
753
754 /**
755 Performs a bitwise AND of a 32-bit PCI configuration register with a 32-bit
756 value, followed a bitwise inclusive OR with another 32-bit value.
757
758 Reads the 32-bit PCI configuration register specified by Address, performs a
759 bitwise AND between the read result and the value specified by AndData,
760 performs a bitwise inclusive OR between the result of the AND operation and
761 the value specified by OrData, and writes the result to the 32-bit PCI
762 configuration register specified by Address. The value written to the PCI
763 configuration register is returned. This function must guarantee that all PCI
764 read and write operations are serialized.
765
766 If Address > 0x0FFFFFFF, then ASSERT().
767 If Address is not aligned on a 32-bit boundary, then ASSERT().
768
769 @param Address Address that encodes the PCI Bus, Device, Function and
770 Register.
771 @param AndData The value to AND with the PCI configuration register.
772 @param OrData The value to OR with the result of the AND operation.
773
774 @return The value written back to the PCI configuration register.
775
776 **/
777 UINT32
778 EFIAPI
779 PciExpressAndThenOr32 (
780 IN UINTN Address,
781 IN UINT32 AndData,
782 IN UINT32 OrData
783 );
784
785 /**
786 Reads a bit field of a PCI configuration register.
787
788 Reads the bit field in a 32-bit PCI configuration register. The bit field is
789 specified by the StartBit and the EndBit. The value of the bit field is
790 returned.
791
792 If Address > 0x0FFFFFFF, then ASSERT().
793 If Address is not aligned on a 32-bit boundary, then ASSERT().
794 If StartBit is greater than 31, then ASSERT().
795 If EndBit is greater than 31, then ASSERT().
796 If EndBit is less than StartBit, then ASSERT().
797
798 @param Address PCI configuration register to read.
799 @param StartBit The ordinal of the least significant bit in the bit field.
800 Range 0..31.
801 @param EndBit The ordinal of the most significant bit in the bit field.
802 Range 0..31.
803
804 @return The value of the bit field read from the PCI configuration register.
805
806 **/
807 UINT32
808 EFIAPI
809 PciExpressBitFieldRead32 (
810 IN UINTN Address,
811 IN UINTN StartBit,
812 IN UINTN EndBit
813 );
814
815 /**
816 Writes a bit field to a PCI configuration register.
817
818 Writes Value to the bit field of the PCI configuration register. The bit
819 field is specified by the StartBit and the EndBit. All other bits in the
820 destination PCI configuration register are preserved. The new value of the
821 32-bit register is returned.
822
823 If Address > 0x0FFFFFFF, then ASSERT().
824 If Address is not aligned on a 32-bit boundary, then ASSERT().
825 If StartBit is greater than 31, then ASSERT().
826 If EndBit is greater than 31, then ASSERT().
827 If EndBit is less than StartBit, then ASSERT().
828
829 @param Address PCI configuration register to write.
830 @param StartBit The ordinal of the least significant bit in the bit field.
831 Range 0..31.
832 @param EndBit The ordinal of the most significant bit in the bit field.
833 Range 0..31.
834 @param Value New value of the bit field.
835
836 @return The value written back to the PCI configuration register.
837
838 **/
839 UINT32
840 EFIAPI
841 PciExpressBitFieldWrite32 (
842 IN UINTN Address,
843 IN UINTN StartBit,
844 IN UINTN EndBit,
845 IN UINT32 Value
846 );
847
848 /**
849 Reads a bit field in a 32-bit PCI configuration, performs a bitwise OR, and
850 writes the result back to the bit field in the 32-bit port.
851
852 Reads the 32-bit PCI configuration register specified by Address, performs a
853 bitwise inclusive OR between the read result and the value specified by
854 OrData, and writes the result to the 32-bit PCI configuration register
855 specified by Address. The value written to the PCI configuration register is
856 returned. This function must guarantee that all PCI read and write operations
857 are serialized. Extra left bits in OrData are stripped.
858
859 If Address > 0x0FFFFFFF, then ASSERT().
860 If Address is not aligned on a 32-bit boundary, then ASSERT().
861 If StartBit is greater than 31, then ASSERT().
862 If EndBit is greater than 31, then ASSERT().
863 If EndBit is less than StartBit, then ASSERT().
864
865 @param Address PCI configuration register to write.
866 @param StartBit The ordinal of the least significant bit in the bit field.
867 Range 0..31.
868 @param EndBit The ordinal of the most significant bit in the bit field.
869 Range 0..31.
870 @param OrData The value to OR with the PCI configuration register.
871
872 @return The value written back to the PCI configuration register.
873
874 **/
875 UINT32
876 EFIAPI
877 PciExpressBitFieldOr32 (
878 IN UINTN Address,
879 IN UINTN StartBit,
880 IN UINTN EndBit,
881 IN UINT32 OrData
882 );
883
884 /**
885 Reads a bit field in a 32-bit PCI configuration register, performs a bitwise
886 AND, and writes the result back to the bit field in the 32-bit register.
887
888 Reads the 32-bit PCI configuration register specified by Address, performs a
889 bitwise AND between the read result and the value specified by AndData, and
890 writes the result to the 32-bit PCI configuration register specified by
891 Address. The value written to the PCI configuration register is returned.
892 This function must guarantee that all PCI read and write operations are
893 serialized. Extra left bits in AndData are stripped.
894
895 If Address > 0x0FFFFFFF, then ASSERT().
896 If Address is not aligned on a 32-bit boundary, 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
901 @param Address PCI configuration register to write.
902 @param StartBit The ordinal of the least significant bit in the bit field.
903 Range 0..31.
904 @param EndBit The ordinal of the most significant bit in the bit field.
905 Range 0..31.
906 @param AndData The value to AND with the PCI configuration register.
907
908 @return The value written back to the PCI configuration register.
909
910 **/
911 UINT32
912 EFIAPI
913 PciExpressBitFieldAnd32 (
914 IN UINTN Address,
915 IN UINTN StartBit,
916 IN UINTN EndBit,
917 IN UINT32 AndData
918 );
919
920 /**
921 Reads a bit field in a 32-bit port, performs a bitwise AND followed by a
922 bitwise inclusive OR, and writes the result back to the bit field in the
923 32-bit port.
924
925 Reads the 32-bit PCI configuration register specified by Address, performs a
926 bitwise AND followed by a bitwise inclusive OR between the read result and
927 the value specified by AndData, and writes the result to the 32-bit PCI
928 configuration register specified by Address. The value written to the PCI
929 configuration register is returned. This function must guarantee that all PCI
930 read and write operations are serialized. Extra left bits in both AndData and
931 OrData are stripped.
932
933 If Address > 0x0FFFFFFF, then ASSERT().
934 If Address is not aligned on a 32-bit boundary, then ASSERT().
935 If StartBit is greater than 31, then ASSERT().
936 If EndBit is greater than 31, then ASSERT().
937 If EndBit is less than StartBit, then ASSERT().
938
939 @param Address PCI configuration register to write.
940 @param StartBit The ordinal of the least significant bit in the bit field.
941 Range 0..31.
942 @param EndBit The ordinal of the most significant bit in the bit field.
943 Range 0..31.
944 @param AndData The value to AND with the PCI configuration register.
945 @param OrData The value to OR with the result of the AND operation.
946
947 @return The value written back to the PCI configuration register.
948
949 **/
950 UINT32
951 EFIAPI
952 PciExpressBitFieldAndThenOr32 (
953 IN UINTN Address,
954 IN UINTN StartBit,
955 IN UINTN EndBit,
956 IN UINT32 AndData,
957 IN UINT32 OrData
958 );
959
960 /**
961 Reads a range of PCI configuration registers into a caller supplied buffer.
962
963 Reads the range of PCI configuration registers specified by StartAddress and
964 Size into the buffer specified by Buffer. This function only allows the PCI
965 configuration registers from a single PCI function to be read. Size is
966 returned. When possible 32-bit PCI configuration read cycles are used to read
967 from StartAdress to StartAddress + Size. Due to alignment restrictions, 8-bit
968 and 16-bit PCI configuration read cycles may be used at the beginning and the
969 end of the range.
970
971 If StartAddress > 0x0FFFFFFF, then ASSERT().
972 If ((StartAddress & 0xFFF) + Size) > 0x1000, then ASSERT().
973 If Size > 0 and Buffer is NULL, then ASSERT().
974
975 @param StartAddress Starting address that encodes the PCI Bus, Device,
976 Function and Register.
977 @param Size Size in bytes of the transfer.
978 @param Buffer Pointer to a buffer receiving the data read.
979
980 @return Size
981
982 **/
983 UINTN
984 EFIAPI
985 PciExpressReadBuffer (
986 IN UINTN StartAddress,
987 IN UINTN Size,
988 OUT VOID *Buffer
989 );
990
991 /**
992 Copies the data in a caller supplied buffer to a specified range of PCI
993 configuration space.
994
995 Writes the range of PCI configuration registers specified by StartAddress and
996 Size from the buffer specified by Buffer. This function only allows the PCI
997 configuration registers from a single PCI function to be written. Size is
998 returned. When possible 32-bit PCI configuration write cycles are used to
999 write from StartAdress to StartAddress + Size. Due to alignment restrictions,
1000 8-bit and 16-bit PCI configuration write cycles may be used at the beginning
1001 and the end of the range.
1002
1003 If StartAddress > 0x0FFFFFFF, then ASSERT().
1004 If ((StartAddress & 0xFFF) + Size) > 0x1000, then ASSERT().
1005 If Size > 0 and Buffer is NULL, then ASSERT().
1006
1007 @param StartAddress Starting address that encodes the PCI Bus, Device,
1008 Function and Register.
1009 @param Size Size in bytes of the transfer.
1010 @param Buffer Pointer to a buffer containing the data to write.
1011
1012 @return Size
1013
1014 **/
1015 UINTN
1016 EFIAPI
1017 PciExpressWriteBuffer (
1018 IN UINTN StartAddress,
1019 IN UINTN Size,
1020 IN VOID *Buffer
1021 );
1022
1023 #endif