]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BasePciLibCf8/PciLib.c
Update the copyright notice format
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / EdkIIGlueLib / Library / BasePciLibCf8 / PciLib.c
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 PciLib.c
16
17 Abstract:
18
19 PCI Library using Port CF8/CFC access.
20
21 --*/
22
23 #include "EdkIIGlueBase.h"
24
25 /**
26 Reads an 8-bit PCI configuration register.
27
28 Reads and returns the 8-bit PCI configuration register specified by Address.
29 This function must guarantee that all PCI read and write operations are
30 serialized.
31
32 If Address > 0x0FFFFFFF, then ASSERT().
33
34 @param Address Address that encodes the PCI Bus, Device, Function and
35 Register.
36
37 @return The read value from the PCI configuration register.
38
39 **/
40 UINT8
41 EFIAPI
42 PciRead8 (
43 IN UINTN Address
44 )
45 {
46 return PciCf8Read8 (Address);
47 }
48
49 /**
50 Writes an 8-bit PCI configuration register.
51
52 Writes the 8-bit PCI configuration register specified by Address with the
53 value specified by Value. Value is returned. This function must guarantee
54 that all PCI read and write operations are serialized.
55
56 If Address > 0x0FFFFFFF, then ASSERT().
57
58 @param Address Address that encodes the PCI Bus, Device, Function and
59 Register.
60 @param Value The value to write.
61
62 @return The value written to the PCI configuration register.
63
64 **/
65 UINT8
66 EFIAPI
67 PciWrite8 (
68 IN UINTN Address,
69 IN UINT8 Data
70 )
71 {
72 return PciCf8Write8 (Address, Data);
73 }
74
75 /**
76 Performs a bitwise inclusive OR of an 8-bit PCI configuration register with
77 an 8-bit value.
78
79 Reads the 8-bit PCI configuration register specified by Address, performs a
80 bitwise inclusive OR between the read result and the value specified by
81 OrData, and writes the result to the 8-bit PCI configuration register
82 specified by Address. The value written to the PCI configuration register is
83 returned. This function must guarantee that all PCI read and write operations
84 are serialized.
85
86 If Address > 0x0FFFFFFF, then ASSERT().
87
88 @param Address Address that encodes the PCI Bus, Device, Function and
89 Register.
90 @param OrData The value to OR with the PCI configuration register.
91
92 @return The value written back to the PCI configuration register.
93
94 **/
95 UINT8
96 EFIAPI
97 PciOr8 (
98 IN UINTN Address,
99 IN UINT8 OrData
100 )
101 {
102 return PciCf8Or8 (Address, OrData);
103 }
104
105 /**
106 Performs a bitwise AND of an 8-bit PCI configuration register with an 8-bit
107 value.
108
109 Reads the 8-bit PCI configuration register specified by Address, performs a
110 bitwise AND between the read result and the value specified by AndData, and
111 writes the result to the 8-bit PCI configuration register specified by
112 Address. The value written to the PCI configuration register is returned.
113 This function must guarantee that all PCI read and write operations are
114 serialized.
115
116 If Address > 0x0FFFFFFF, then ASSERT().
117
118 @param Address Address that encodes the PCI Bus, Device, Function and
119 Register.
120 @param AndData The value to AND with the PCI configuration register.
121
122 @return The value written back to the PCI configuration register.
123
124 **/
125 UINT8
126 EFIAPI
127 PciAnd8 (
128 IN UINTN Address,
129 IN UINT8 AndData
130 )
131 {
132 return PciCf8And8 (Address, AndData);
133 }
134
135 /**
136 Performs a bitwise AND of an 8-bit PCI configuration register with an 8-bit
137 value, followed a bitwise inclusive OR with another 8-bit value.
138
139 Reads the 8-bit PCI configuration register specified by Address, performs a
140 bitwise AND between the read result and the value specified by AndData,
141 performs a bitwise inclusive OR between the result of the AND operation and
142 the value specified by OrData, and writes the result to the 8-bit PCI
143 configuration register specified by Address. The value written to the PCI
144 configuration register is returned. This function must guarantee that all PCI
145 read and write operations are serialized.
146
147 If Address > 0x0FFFFFFF, then ASSERT().
148
149 @param Address Address that encodes the PCI Bus, Device, Function and
150 Register.
151 @param AndData The value to AND with the PCI configuration register.
152 @param OrData The value to OR with the result of the AND operation.
153
154 @return The value written back to the PCI configuration register.
155
156 **/
157 UINT8
158 EFIAPI
159 PciAndThenOr8 (
160 IN UINTN Address,
161 IN UINT8 AndData,
162 IN UINT8 OrData
163 )
164 {
165 return PciCf8AndThenOr8 (Address, AndData, OrData);
166 }
167
168 /**
169 Reads a bit field of a PCI configuration register.
170
171 Reads the bit field in an 8-bit PCI configuration register. The bit field is
172 specified by the StartBit and the EndBit. The value of the bit field is
173 returned.
174
175 If Address > 0x0FFFFFFF, then ASSERT().
176 If StartBit is greater than 7, then ASSERT().
177 If EndBit is greater than 7, then ASSERT().
178 If EndBit is less than StartBit, then ASSERT().
179
180 @param Address PCI configuration register to read.
181 @param StartBit The ordinal of the least significant bit in the bit field.
182 Range 0..7.
183 @param EndBit The ordinal of the most significant bit in the bit field.
184 Range 0..7.
185
186 @return The value of the bit field read from the PCI configuration register.
187
188 **/
189 UINT8
190 EFIAPI
191 PciBitFieldRead8 (
192 IN UINTN Address,
193 IN UINTN StartBit,
194 IN UINTN EndBit
195 )
196 {
197 return PciCf8BitFieldRead8 (Address, StartBit, EndBit);
198 }
199
200 /**
201 Writes a bit field to a PCI configuration register.
202
203 Writes Value to the bit field of the PCI configuration register. The bit
204 field is specified by the StartBit and the EndBit. All other bits in the
205 destination PCI configuration register are preserved. The new value of the
206 8-bit register is returned.
207
208 If Address > 0x0FFFFFFF, then ASSERT().
209 If StartBit is greater than 7, then ASSERT().
210 If EndBit is greater than 7, then ASSERT().
211 If EndBit is less than StartBit, then ASSERT().
212
213 @param Address PCI configuration register to write.
214 @param StartBit The ordinal of the least significant bit in the bit field.
215 Range 0..7.
216 @param EndBit The ordinal of the most significant bit in the bit field.
217 Range 0..7.
218 @param Value New value of the bit field.
219
220 @return The value written back to the PCI configuration register.
221
222 **/
223 UINT8
224 EFIAPI
225 PciBitFieldWrite8 (
226 IN UINTN Address,
227 IN UINTN StartBit,
228 IN UINTN EndBit,
229 IN UINT8 Value
230 )
231 {
232 return PciCf8BitFieldWrite8 (Address, StartBit, EndBit, 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 PciBitFieldOr8 (
264 IN UINTN Address,
265 IN UINTN StartBit,
266 IN UINTN EndBit,
267 IN UINT8 OrData
268 )
269 {
270 return PciCf8BitFieldOr8 (Address, StartBit, EndBit, OrData);
271 }
272
273 /**
274 Reads a bit field in an 8-bit PCI configuration register, performs a bitwise
275 AND, and writes the result back to the bit field in the 8-bit register.
276
277 Reads the 8-bit PCI configuration register specified by Address, performs a
278 bitwise AND between the read result and the value specified by AndData, and
279 writes the result to the 8-bit PCI configuration register specified by
280 Address. The value written to the PCI configuration register is returned.
281 This function must guarantee that all PCI read and write operations are
282 serialized. Extra left bits in AndData are stripped.
283
284 If Address > 0x0FFFFFFF, then ASSERT().
285 If StartBit is greater than 7, then ASSERT().
286 If EndBit is greater than 7, then ASSERT().
287 If EndBit is less than StartBit, then ASSERT().
288
289 @param Address PCI configuration register to write.
290 @param StartBit The ordinal of the least significant bit in the bit field.
291 Range 0..7.
292 @param EndBit The ordinal of the most significant bit in the bit field.
293 Range 0..7.
294 @param AndData The value to AND with the PCI configuration register.
295
296 @return The value written back to the PCI configuration register.
297
298 **/
299 UINT8
300 EFIAPI
301 PciBitFieldAnd8 (
302 IN UINTN Address,
303 IN UINTN StartBit,
304 IN UINTN EndBit,
305 IN UINT8 AndData
306 )
307 {
308 return PciCf8BitFieldAnd8 (Address, StartBit, EndBit, AndData);
309 }
310
311 /**
312 Reads a bit field in an 8-bit port, performs a bitwise AND followed by a
313 bitwise inclusive OR, and writes the result back to the bit field in the
314 8-bit port.
315
316 Reads the 8-bit PCI configuration register specified by Address, performs a
317 bitwise AND followed by a bitwise inclusive OR between the read result and
318 the value specified by AndData, and writes the result to the 8-bit PCI
319 configuration register specified by Address. The value written to the PCI
320 configuration register is returned. This function must guarantee that all PCI
321 read and write operations are serialized. Extra left bits in both AndData and
322 OrData are stripped.
323
324 If Address > 0x0FFFFFFF, then ASSERT().
325 If StartBit is greater than 7, then ASSERT().
326 If EndBit is greater than 7, then ASSERT().
327 If EndBit is less than StartBit, then ASSERT().
328
329 @param Address PCI configuration register to write.
330 @param StartBit The ordinal of the least significant bit in the bit field.
331 Range 0..7.
332 @param EndBit The ordinal of the most significant bit in the bit field.
333 Range 0..7.
334 @param AndData The value to AND with the PCI configuration register.
335 @param OrData The value to OR with the result of the AND operation.
336
337 @return The value written back to the PCI configuration register.
338
339 **/
340 UINT8
341 EFIAPI
342 PciBitFieldAndThenOr8 (
343 IN UINTN Address,
344 IN UINTN StartBit,
345 IN UINTN EndBit,
346 IN UINT8 AndData,
347 IN UINT8 OrData
348 )
349 {
350 return PciCf8BitFieldAndThenOr8 (Address, StartBit, EndBit, AndData, OrData);
351 }
352
353 /**
354 Reads a 16-bit PCI configuration register.
355
356 Reads and returns the 16-bit PCI configuration register specified by Address.
357 This function must guarantee that all PCI read and write operations are
358 serialized.
359
360 If Address > 0x0FFFFFFF, then ASSERT().
361
362 @param Address Address that encodes the PCI Bus, Device, Function and
363 Register.
364
365 @return The read value from the PCI configuration register.
366
367 **/
368 UINT16
369 EFIAPI
370 PciRead16 (
371 IN UINTN Address
372 )
373 {
374 return PciCf8Read16 (Address);
375 }
376
377 /**
378 Writes a 16-bit PCI configuration register.
379
380 Writes the 16-bit PCI configuration register specified by Address with the
381 value specified by Value. Value is returned. This function must guarantee
382 that all PCI read and write operations are serialized.
383
384 If Address > 0x0FFFFFFF, then ASSERT().
385
386 @param Address Address that encodes the PCI Bus, Device, Function and
387 Register.
388 @param Value The value to write.
389
390 @return The value written to the PCI configuration register.
391
392 **/
393 UINT16
394 EFIAPI
395 PciWrite16 (
396 IN UINTN Address,
397 IN UINT16 Data
398 )
399 {
400 return PciCf8Write16 (Address, Data);
401 }
402
403 /**
404 Performs a bitwise inclusive OR of a 16-bit PCI configuration register with
405 a 16-bit value.
406
407 Reads the 16-bit PCI configuration register specified by Address, performs a
408 bitwise inclusive OR between the read result and the value specified by
409 OrData, and writes the result to the 16-bit PCI configuration register
410 specified by Address. The value written to the PCI configuration register is
411 returned. This function must guarantee that all PCI read and write operations
412 are serialized.
413
414 If Address > 0x0FFFFFFF, then ASSERT().
415
416 @param Address Address that encodes the PCI Bus, Device, Function and
417 Register.
418 @param OrData The value to OR with the PCI configuration register.
419
420 @return The value written back to the PCI configuration register.
421
422 **/
423 UINT16
424 EFIAPI
425 PciOr16 (
426 IN UINTN Address,
427 IN UINT16 OrData
428 )
429 {
430 return PciCf8Or16 (Address, OrData);
431 }
432
433 /**
434 Performs a bitwise AND of a 16-bit PCI configuration register with a 16-bit
435 value.
436
437 Reads the 16-bit PCI configuration register specified by Address, performs a
438 bitwise AND between the read result and the value specified by AndData, and
439 writes the result to the 16-bit PCI configuration register specified by
440 Address. The value written to the PCI configuration register is returned.
441 This function must guarantee that all PCI read and write operations are
442 serialized.
443
444 If Address > 0x0FFFFFFF, then ASSERT().
445
446 @param Address Address that encodes the PCI Bus, Device, Function and
447 Register.
448 @param AndData The value to AND with the PCI configuration register.
449
450 @return The value written back to the PCI configuration register.
451
452 **/
453 UINT16
454 EFIAPI
455 PciAnd16 (
456 IN UINTN Address,
457 IN UINT16 AndData
458 )
459 {
460 return PciCf8And16 (Address, AndData);
461 }
462
463 /**
464 Performs a bitwise AND of a 16-bit PCI configuration register with a 16-bit
465 value, followed a bitwise inclusive OR with another 16-bit value.
466
467 Reads the 16-bit PCI configuration register specified by Address, performs a
468 bitwise AND between the read result and the value specified by AndData,
469 performs a bitwise inclusive OR between the result of the AND operation and
470 the value specified by OrData, and writes the result to the 16-bit PCI
471 configuration register specified by Address. The value written to the PCI
472 configuration register is returned. This function must guarantee that all PCI
473 read and write operations are serialized.
474
475 If Address > 0x0FFFFFFF, then ASSERT().
476
477 @param Address Address that encodes the PCI Bus, Device, Function and
478 Register.
479 @param AndData The value to AND with the PCI configuration register.
480 @param OrData The value to OR with the result of the AND operation.
481
482 @return The value written back to the PCI configuration register.
483
484 **/
485 UINT16
486 EFIAPI
487 PciAndThenOr16 (
488 IN UINTN Address,
489 IN UINT16 AndData,
490 IN UINT16 OrData
491 )
492 {
493 return PciCf8AndThenOr16 (Address, AndData, OrData);
494 }
495
496 /**
497 Reads a bit field of a PCI configuration register.
498
499 Reads the bit field in a 16-bit PCI configuration register. The bit field is
500 specified by the StartBit and the EndBit. The value of the bit field is
501 returned.
502
503 If Address > 0x0FFFFFFF, then ASSERT().
504 If StartBit is greater than 15, then ASSERT().
505 If EndBit is greater than 15, then ASSERT().
506 If EndBit is less than StartBit, then ASSERT().
507
508 @param Address PCI configuration register to read.
509 @param StartBit The ordinal of the least significant bit in the bit field.
510 Range 0..15.
511 @param EndBit The ordinal of the most significant bit in the bit field.
512 Range 0..15.
513
514 @return The value of the bit field read from the PCI configuration register.
515
516 **/
517 UINT16
518 EFIAPI
519 PciBitFieldRead16 (
520 IN UINTN Address,
521 IN UINTN StartBit,
522 IN UINTN EndBit
523 )
524 {
525 return PciCf8BitFieldRead16 (Address, StartBit, EndBit);
526 }
527
528 /**
529 Writes a bit field to a PCI configuration register.
530
531 Writes Value to the bit field of the PCI configuration register. The bit
532 field is specified by the StartBit and the EndBit. All other bits in the
533 destination PCI configuration register are preserved. The new value of the
534 16-bit register is returned.
535
536 If Address > 0x0FFFFFFF, then ASSERT().
537 If StartBit is greater than 15, then ASSERT().
538 If EndBit is greater than 15, then ASSERT().
539 If EndBit is less than StartBit, then ASSERT().
540
541 @param Address PCI configuration register to write.
542 @param StartBit The ordinal of the least significant bit in the bit field.
543 Range 0..15.
544 @param EndBit The ordinal of the most significant bit in the bit field.
545 Range 0..15.
546 @param Value New value of the bit field.
547
548 @return The value written back to the PCI configuration register.
549
550 **/
551 UINT16
552 EFIAPI
553 PciBitFieldWrite16 (
554 IN UINTN Address,
555 IN UINTN StartBit,
556 IN UINTN EndBit,
557 IN UINT16 Value
558 )
559 {
560 return PciCf8BitFieldWrite16 (Address, StartBit, EndBit, Value);
561 }
562
563 /**
564 Reads a bit field in a 16-bit PCI configuration, performs a bitwise OR, and
565 writes the result back to the bit field in the 16-bit port.
566
567 Reads the 16-bit PCI configuration register specified by Address, performs a
568 bitwise inclusive OR between the read result and the value specified by
569 OrData, and writes the result to the 16-bit PCI configuration register
570 specified by Address. The value written to the PCI configuration register is
571 returned. This function must guarantee that all PCI read and write operations
572 are serialized. Extra left bits in OrData are stripped.
573
574 If Address > 0x0FFFFFFF, then ASSERT().
575 If StartBit is greater than 15, then ASSERT().
576 If EndBit is greater than 15, then ASSERT().
577 If EndBit is less than StartBit, then ASSERT().
578
579 @param Address PCI configuration register to write.
580 @param StartBit The ordinal of the least significant bit in the bit field.
581 Range 0..15.
582 @param EndBit The ordinal of the most significant bit in the bit field.
583 Range 0..15.
584 @param OrData The value to OR with the PCI configuration register.
585
586 @return The value written back to the PCI configuration register.
587
588 **/
589 UINT16
590 EFIAPI
591 PciBitFieldOr16 (
592 IN UINTN Address,
593 IN UINTN StartBit,
594 IN UINTN EndBit,
595 IN UINT16 OrData
596 )
597 {
598 return PciCf8BitFieldOr16 (Address, StartBit, EndBit, OrData);
599 }
600
601 /**
602 Reads a bit field in a 16-bit PCI configuration register, performs a bitwise
603 AND, and writes the result back to the bit field in the 16-bit register.
604
605 Reads the 16-bit PCI configuration register specified by Address, performs a
606 bitwise AND between the read result and the value specified by AndData, and
607 writes the result to the 16-bit PCI configuration register specified by
608 Address. The value written to the PCI configuration register is returned.
609 This function must guarantee that all PCI read and write operations are
610 serialized. Extra left bits in AndData are stripped.
611
612 If Address > 0x0FFFFFFF, then ASSERT().
613 If StartBit is greater than 15, then ASSERT().
614 If EndBit is greater than 15, then ASSERT().
615 If EndBit is less than StartBit, then ASSERT().
616
617 @param Address PCI configuration register to write.
618 @param StartBit The ordinal of the least significant bit in the bit field.
619 Range 0..15.
620 @param EndBit The ordinal of the most significant bit in the bit field.
621 Range 0..15.
622 @param AndData The value to AND with the PCI configuration register.
623
624 @return The value written back to the PCI configuration register.
625
626 **/
627 UINT16
628 EFIAPI
629 PciBitFieldAnd16 (
630 IN UINTN Address,
631 IN UINTN StartBit,
632 IN UINTN EndBit,
633 IN UINT16 AndData
634 )
635 {
636 return PciCf8BitFieldAnd16 (Address, StartBit, EndBit, AndData);
637 }
638
639 /**
640 Reads a bit field in a 16-bit port, performs a bitwise AND followed by a
641 bitwise inclusive OR, and writes the result back to the bit field in the
642 16-bit port.
643
644 Reads the 16-bit PCI configuration register specified by Address, performs a
645 bitwise AND followed by a bitwise inclusive OR between the read result and
646 the value specified by AndData, and writes the result to the 16-bit PCI
647 configuration register specified by Address. The value written to the PCI
648 configuration register is returned. This function must guarantee that all PCI
649 read and write operations are serialized. Extra left bits in both AndData and
650 OrData are stripped.
651
652 If Address > 0x0FFFFFFF, then ASSERT().
653 If StartBit is greater than 15, then ASSERT().
654 If EndBit is greater than 15, then ASSERT().
655 If EndBit is less than StartBit, then ASSERT().
656
657 @param Address PCI configuration register to write.
658 @param StartBit The ordinal of the least significant bit in the bit field.
659 Range 0..15.
660 @param EndBit The ordinal of the most significant bit in the bit field.
661 Range 0..15.
662 @param AndData The value to AND with the PCI configuration register.
663 @param OrData The value to OR with the result of the AND operation.
664
665 @return The value written back to the PCI configuration register.
666
667 **/
668 UINT16
669 EFIAPI
670 PciBitFieldAndThenOr16 (
671 IN UINTN Address,
672 IN UINTN StartBit,
673 IN UINTN EndBit,
674 IN UINT16 AndData,
675 IN UINT16 OrData
676 )
677 {
678 return PciCf8BitFieldAndThenOr16 (Address, StartBit, EndBit, AndData, OrData);
679 }
680
681 /**
682 Reads a 32-bit PCI configuration register.
683
684 Reads and returns the 32-bit PCI configuration register specified by Address.
685 This function must guarantee that all PCI read and write operations are
686 serialized.
687
688 If Address > 0x0FFFFFFF, then ASSERT().
689
690 @param Address Address that encodes the PCI Bus, Device, Function and
691 Register.
692
693 @return The read value from the PCI configuration register.
694
695 **/
696 UINT32
697 EFIAPI
698 PciRead32 (
699 IN UINTN Address
700 )
701 {
702 return PciCf8Read32 (Address);
703 }
704
705 /**
706 Writes a 32-bit PCI configuration register.
707
708 Writes the 32-bit PCI configuration register specified by Address with the
709 value specified by Value. Value is returned. This function must guarantee
710 that all PCI read and write operations are serialized.
711
712 If Address > 0x0FFFFFFF, then ASSERT().
713
714 @param Address Address that encodes the PCI Bus, Device, Function and
715 Register.
716 @param Value The value to write.
717
718 @return The value written to the PCI configuration register.
719
720 **/
721 UINT32
722 EFIAPI
723 PciWrite32 (
724 IN UINTN Address,
725 IN UINT32 Data
726 )
727 {
728 return PciCf8Write32 (Address, Data);
729 }
730
731 /**
732 Performs a bitwise inclusive OR of a 32-bit PCI configuration register with
733 a 32-bit value.
734
735 Reads the 32-bit PCI configuration register specified by Address, performs a
736 bitwise inclusive OR between the read result and the value specified by
737 OrData, and writes the result to the 32-bit PCI configuration register
738 specified by Address. The value written to the PCI configuration register is
739 returned. This function must guarantee that all PCI read and write operations
740 are serialized.
741
742 If Address > 0x0FFFFFFF, then ASSERT().
743
744 @param Address Address that encodes the PCI Bus, Device, Function and
745 Register.
746 @param OrData The value to OR with the PCI configuration register.
747
748 @return The value written back to the PCI configuration register.
749
750 **/
751 UINT32
752 EFIAPI
753 PciOr32 (
754 IN UINTN Address,
755 IN UINT32 OrData
756 )
757 {
758 return PciCf8Or32 (Address, OrData);
759 }
760
761 /**
762 Performs a bitwise AND of a 32-bit PCI configuration register with a 32-bit
763 value.
764
765 Reads the 32-bit PCI configuration register specified by Address, performs a
766 bitwise AND between the read result and the value specified by AndData, and
767 writes the result to the 32-bit PCI configuration register specified by
768 Address. The value written to the PCI configuration register is returned.
769 This function must guarantee that all PCI read and write operations are
770 serialized.
771
772 If Address > 0x0FFFFFFF, then ASSERT().
773
774 @param Address Address that encodes the PCI Bus, Device, Function and
775 Register.
776 @param AndData The value to AND with the PCI configuration register.
777
778 @return The value written back to the PCI configuration register.
779
780 **/
781 UINT32
782 EFIAPI
783 PciAnd32 (
784 IN UINTN Address,
785 IN UINT32 AndData
786 )
787 {
788 return PciCf8And32 (Address, AndData);
789 }
790
791 /**
792 Performs a bitwise AND of a 32-bit PCI configuration register with a 32-bit
793 value, followed a bitwise inclusive OR with another 32-bit value.
794
795 Reads the 32-bit PCI configuration register specified by Address, performs a
796 bitwise AND between the read result and the value specified by AndData,
797 performs a bitwise inclusive OR between the result of the AND operation and
798 the value specified by OrData, and writes the result to the 32-bit PCI
799 configuration register specified by Address. The value written to the PCI
800 configuration register is returned. This function must guarantee that all PCI
801 read and write operations are serialized.
802
803 If Address > 0x0FFFFFFF, then ASSERT().
804
805 @param Address Address that encodes the PCI Bus, Device, Function and
806 Register.
807 @param AndData The value to AND with the PCI configuration register.
808 @param OrData The value to OR with the result of the AND operation.
809
810 @return The value written back to the PCI configuration register.
811
812 **/
813 UINT32
814 EFIAPI
815 PciAndThenOr32 (
816 IN UINTN Address,
817 IN UINT32 AndData,
818 IN UINT32 OrData
819 )
820 {
821 return PciCf8AndThenOr32 (Address, AndData, OrData);
822 }
823
824 /**
825 Reads a bit field of a PCI configuration register.
826
827 Reads the bit field in a 32-bit PCI configuration register. The bit field is
828 specified by the StartBit and the EndBit. The value of the bit field is
829 returned.
830
831 If Address > 0x0FFFFFFF, then ASSERT().
832 If StartBit is greater than 31, then ASSERT().
833 If EndBit is greater than 31, then ASSERT().
834 If EndBit is less than StartBit, then ASSERT().
835
836 @param Address PCI configuration register to read.
837 @param StartBit The ordinal of the least significant bit in the bit field.
838 Range 0..31.
839 @param EndBit The ordinal of the most significant bit in the bit field.
840 Range 0..31.
841
842 @return The value of the bit field read from the PCI configuration register.
843
844 **/
845 UINT32
846 EFIAPI
847 PciBitFieldRead32 (
848 IN UINTN Address,
849 IN UINTN StartBit,
850 IN UINTN EndBit
851 )
852 {
853 return PciCf8BitFieldRead32 (Address, StartBit, EndBit);
854 }
855
856 /**
857 Writes a bit field to a PCI configuration register.
858
859 Writes Value to the bit field of the PCI configuration register. The bit
860 field is specified by the StartBit and the EndBit. All other bits in the
861 destination PCI configuration register are preserved. The new value of the
862 32-bit register is returned.
863
864 If Address > 0x0FFFFFFF, then ASSERT().
865 If StartBit is greater than 31, then ASSERT().
866 If EndBit is greater than 31, then ASSERT().
867 If EndBit is less than StartBit, then ASSERT().
868
869 @param Address PCI configuration register to write.
870 @param StartBit The ordinal of the least significant bit in the bit field.
871 Range 0..31.
872 @param EndBit The ordinal of the most significant bit in the bit field.
873 Range 0..31.
874 @param Value New value of the bit field.
875
876 @return The value written back to the PCI configuration register.
877
878 **/
879 UINT32
880 EFIAPI
881 PciBitFieldWrite32 (
882 IN UINTN Address,
883 IN UINTN StartBit,
884 IN UINTN EndBit,
885 IN UINT32 Value
886 )
887 {
888 return PciCf8BitFieldWrite32 (Address, StartBit, EndBit, Value);
889 }
890
891 /**
892 Reads a bit field in a 32-bit PCI configuration, performs a bitwise OR, and
893 writes the result back to the bit field in the 32-bit port.
894
895 Reads the 32-bit PCI configuration register specified by Address, performs a
896 bitwise inclusive OR between the read result and the value specified by
897 OrData, and writes the result to the 32-bit PCI configuration register
898 specified by Address. The value written to the PCI configuration register is
899 returned. This function must guarantee that all PCI read and write operations
900 are serialized. Extra left bits in OrData are stripped.
901
902 If Address > 0x0FFFFFFF, then ASSERT().
903 If StartBit is greater than 31, then ASSERT().
904 If EndBit is greater than 31, then ASSERT().
905 If EndBit is less than StartBit, then ASSERT().
906
907 @param Address PCI configuration register to write.
908 @param StartBit The ordinal of the least significant bit in the bit field.
909 Range 0..31.
910 @param EndBit The ordinal of the most significant bit in the bit field.
911 Range 0..31.
912 @param OrData The value to OR with the PCI configuration register.
913
914 @return The value written back to the PCI configuration register.
915
916 **/
917 UINT32
918 EFIAPI
919 PciBitFieldOr32 (
920 IN UINTN Address,
921 IN UINTN StartBit,
922 IN UINTN EndBit,
923 IN UINT32 OrData
924 )
925 {
926 return PciCf8BitFieldOr32 (Address, StartBit, EndBit, OrData);
927 }
928
929 /**
930 Reads a bit field in a 32-bit PCI configuration register, performs a bitwise
931 AND, and writes the result back to the bit field in the 32-bit register.
932
933 Reads the 32-bit PCI configuration register specified by Address, performs a
934 bitwise AND between the read result and the value specified by AndData, and
935 writes the result to the 32-bit PCI configuration register specified by
936 Address. The value written to the PCI configuration register is returned.
937 This function must guarantee that all PCI read and write operations are
938 serialized. Extra left bits in AndData are stripped.
939
940 If Address > 0x0FFFFFFF, then ASSERT().
941 If StartBit is greater than 31, then ASSERT().
942 If EndBit is greater than 31, then ASSERT().
943 If EndBit is less than StartBit, then ASSERT().
944
945 @param Address PCI configuration register to write.
946 @param StartBit The ordinal of the least significant bit in the bit field.
947 Range 0..31.
948 @param EndBit The ordinal of the most significant bit in the bit field.
949 Range 0..31.
950 @param AndData The value to AND with the PCI configuration register.
951
952 @return The value written back to the PCI configuration register.
953
954 **/
955 UINT32
956 EFIAPI
957 PciBitFieldAnd32 (
958 IN UINTN Address,
959 IN UINTN StartBit,
960 IN UINTN EndBit,
961 IN UINT32 AndData
962 )
963 {
964 return PciCf8BitFieldAnd32 (Address, StartBit, EndBit, AndData);
965 }
966
967 /**
968 Reads a bit field in a 32-bit port, performs a bitwise AND followed by a
969 bitwise inclusive OR, and writes the result back to the bit field in the
970 32-bit port.
971
972 Reads the 32-bit PCI configuration register specified by Address, performs a
973 bitwise AND followed by a bitwise inclusive OR between the read result and
974 the value specified by AndData, and writes the result to the 32-bit PCI
975 configuration register specified by Address. The value written to the PCI
976 configuration register is returned. This function must guarantee that all PCI
977 read and write operations are serialized. Extra left bits in both AndData and
978 OrData are stripped.
979
980 If Address > 0x0FFFFFFF, then ASSERT().
981 If StartBit is greater than 31, then ASSERT().
982 If EndBit is greater than 31, then ASSERT().
983 If EndBit is less than StartBit, then ASSERT().
984
985 @param Address PCI configuration register to write.
986 @param StartBit The ordinal of the least significant bit in the bit field.
987 Range 0..31.
988 @param EndBit The ordinal of the most significant bit in the bit field.
989 Range 0..31.
990 @param AndData The value to AND with the PCI configuration register.
991 @param OrData The value to OR with the result of the AND operation.
992
993 @return The value written back to the PCI configuration register.
994
995 **/
996 UINT32
997 EFIAPI
998 PciBitFieldAndThenOr32 (
999 IN UINTN Address,
1000 IN UINTN StartBit,
1001 IN UINTN EndBit,
1002 IN UINT32 AndData,
1003 IN UINT32 OrData
1004 )
1005 {
1006 return PciCf8BitFieldAndThenOr32 (Address, StartBit, EndBit, AndData, OrData);
1007 }
1008
1009 /**
1010 Reads a range of PCI configuration registers into a caller supplied buffer.
1011
1012 Reads the range of PCI configuration registers specified by StartAddress and
1013 Size into the buffer specified by Buffer. This function only allows the PCI
1014 configuration registers from a single PCI function to be read. Size is
1015 returned. When possible 32-bit PCI configuration read cycles are used to read
1016 from StartAdress to StartAddress + Size. Due to alignment restrictions, 8-bit
1017 and 16-bit PCI configuration read cycles may be used at the beginning and the
1018 end of the range.
1019
1020 If StartAddress > 0x0FFFFFFF, then ASSERT().
1021 If ((StartAddress & 0xFFF) + Size) > 0x1000, then ASSERT().
1022 If Size > 0 and Buffer is NULL, then ASSERT().
1023
1024 @param StartAddress Starting address that encodes the PCI Bus, Device,
1025 Function and Register.
1026 @param Size Size in bytes of the transfer.
1027 @param Buffer Pointer to a buffer receiving the data read.
1028
1029 @return Size
1030
1031 **/
1032 UINTN
1033 EFIAPI
1034 PciReadBuffer (
1035 IN UINTN StartAddress,
1036 IN UINTN Size,
1037 OUT VOID *Buffer
1038 )
1039 {
1040 return PciCf8ReadBuffer (StartAddress, Size, Buffer);
1041 }
1042
1043 /**
1044 Copies the data in a caller supplied buffer to a specified range of PCI
1045 configuration space.
1046
1047 Writes the range of PCI configuration registers specified by StartAddress and
1048 Size from the buffer specified by Buffer. This function only allows the PCI
1049 configuration registers from a single PCI function to be written. Size is
1050 returned. When possible 32-bit PCI configuration write cycles are used to
1051 write from StartAdress to StartAddress + Size. Due to alignment restrictions,
1052 8-bit and 16-bit PCI configuration write cycles may be used at the beginning
1053 and the end of the range.
1054
1055 If StartAddress > 0x0FFFFFFF, then ASSERT().
1056 If ((StartAddress & 0xFFF) + Size) > 0x1000, then ASSERT().
1057 If Size > 0 and Buffer is NULL, then ASSERT().
1058
1059 @param StartAddress Starting address that encodes the PCI Bus, Device,
1060 Function and Register.
1061 @param Size Size in bytes of the transfer.
1062 @param Buffer Pointer to a buffer containing the data to write.
1063
1064 @return Size
1065
1066 **/
1067 UINTN
1068 EFIAPI
1069 PciWriteBuffer (
1070 IN UINTN StartAddress,
1071 IN UINTN Size,
1072 IN VOID *Buffer
1073 )
1074 {
1075 return PciCf8WriteBuffer (StartAddress, Size, Buffer);
1076 }