PCI Bus Driver Enhancement
[people/mcb30/edk2.git] / edk2 / IntelFrameworkModulePkg / Bus / Pci / PciBusDxe / PciResourceSupport.h
1 /**@file\r
2 \r
3 Copyright (c) 2006, Intel Corporation                                                         \r
4 All rights reserved. This program and the accompanying materials                          \r
5 are licensed and made available under the terms and conditions of the BSD License         \r
6 which accompanies this distribution.  The full text of the license may be found at        \r
7 http://opensource.org/licenses/bsd-license.php                                            \r
8                                                                                           \r
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
11 \r
12 **/\r
13 \r
14 #ifndef _EFI_PCI_RESOURCE_SUPPORT_H\r
15 #define _EFI_PCI_RESOURCE_SUPPORT_H\r
16 \r
17 #define RESERVED_RESOURCE_SIGNATURE EFI_SIGNATURE_32 ('r', 's', 'v', 'd')\r
18 \r
19 typedef struct {\r
20   UINT64        Base;\r
21   UINT64        Length;\r
22   PCI_BAR_TYPE  ResType;\r
23 } PCI_RESERVED_RESOURCE_NODE;\r
24 \r
25 typedef struct {\r
26   UINT32                      Signature;\r
27   LIST_ENTRY                  Link;\r
28   PCI_RESERVED_RESOURCE_NODE  Node;\r
29 } PCI_RESERVED_RESOURCE_LIST;\r
30 \r
31 #define RESOURCED_LIST_FROM_NODE(a) \\r
32   CR (a, PCI_RESERVED_RESOURCE_LIST, Node, RESERVED_RESOURCE_SIGNATURE)\r
33 \r
34 #define RESOURCED_LIST_FROM_LINK(a) \\r
35   CR (a, PCI_RESERVED_RESOURCE_LIST, Link, RESERVED_RESOURCE_SIGNATURE)\r
36 \r
37 typedef enum {\r
38   PciResUsageTypical            = 0,\r
39   PciResUsagePadding,\r
40   PciResUsageOptionRomProcessing\r
41 } PCI_RESOURCE_USAGE;\r
42 \r
43 #define PCI_RESOURCE_SIGNATURE  EFI_SIGNATURE_32 ('p', 'c', 'r', 'c')\r
44 \r
45 typedef struct {\r
46   UINT32              Signature;\r
47   LIST_ENTRY          Link;\r
48   LIST_ENTRY          ChildList;\r
49   PCI_IO_DEVICE       *PciDev;\r
50   UINT64              Alignment;\r
51   UINT64              Offset;\r
52   UINT8               Bar;\r
53   PCI_BAR_TYPE        ResType;\r
54   UINT64              Length;\r
55   BOOLEAN             Reserved;\r
56   PCI_RESOURCE_USAGE  ResourceUsage;\r
57 } PCI_RESOURCE_NODE;\r
58 \r
59 #define RESOURCE_NODE_FROM_LINK(a) \\r
60   CR (a, PCI_RESOURCE_NODE, Link, PCI_RESOURCE_SIGNATURE)\r
61 \r
62 EFI_STATUS\r
63 SkipVGAAperture (\r
64   OUT UINT64   *Start,\r
65   IN  UINT64   Length\r
66   )\r
67 /*++\r
68 \r
69 Routine Description:\r
70 \r
71   TODO: Add function description\r
72 \r
73 Arguments:\r
74 \r
75   Start   - TODO: add argument description\r
76   Length  - TODO: add argument description\r
77 \r
78 Returns:\r
79 \r
80   TODO: add return values\r
81 \r
82 --*/\r
83 ;\r
84 \r
85 EFI_STATUS\r
86 SkipIsaAliasAperture (\r
87   OUT UINT64   *Start,\r
88   IN  UINT64   Length\r
89   )\r
90 /*++\r
91 \r
92 Routine Description:\r
93 \r
94   TODO: Add function description\r
95 \r
96 Arguments:\r
97 \r
98   Start   - TODO: add argument description\r
99   Length  - TODO: add argument description\r
100 \r
101 Returns:\r
102 \r
103   TODO: add return values\r
104 \r
105 --*/\r
106 ;\r
107 \r
108 EFI_STATUS\r
109 InsertResourceNode (\r
110   PCI_RESOURCE_NODE *Bridge,\r
111   PCI_RESOURCE_NODE *ResNode\r
112   )\r
113 /*++\r
114 \r
115 Routine Description:\r
116 \r
117   TODO: Add function description\r
118 \r
119 Arguments:\r
120 \r
121   Bridge  - TODO: add argument description\r
122   ResNode - TODO: add argument description\r
123 \r
124 Returns:\r
125 \r
126   TODO: add return values\r
127 \r
128 --*/\r
129 ;\r
130 \r
131 EFI_STATUS\r
132 MergeResourceTree (\r
133   PCI_RESOURCE_NODE *Dst,\r
134   PCI_RESOURCE_NODE *Res,\r
135   BOOLEAN           TypeMerge\r
136   )\r
137 /*++\r
138 \r
139 Routine Description:\r
140 \r
141   TODO: Add function description\r
142 \r
143 Arguments:\r
144 \r
145   Dst       - TODO: add argument description\r
146   Res       - TODO: add argument description\r
147   TypeMerge - TODO: add argument description\r
148 \r
149 Returns:\r
150 \r
151   TODO: add return values\r
152 \r
153 --*/\r
154 ;\r
155 \r
156 EFI_STATUS\r
157 CalculateApertureIo16 (\r
158   IN PCI_RESOURCE_NODE *Bridge\r
159   )\r
160 /*++\r
161 \r
162 Routine Description:\r
163 \r
164   TODO: Add function description\r
165 \r
166 Arguments:\r
167 \r
168   Bridge  - TODO: add argument description\r
169 \r
170 Returns:\r
171 \r
172   TODO: add return values\r
173 \r
174 --*/\r
175 ;\r
176 \r
177 EFI_STATUS\r
178 CalculateResourceAperture (\r
179   IN PCI_RESOURCE_NODE *Bridge\r
180   )\r
181 /*++\r
182 \r
183 Routine Description:\r
184 \r
185   TODO: Add function description\r
186 \r
187 Arguments:\r
188 \r
189   Bridge  - TODO: add argument description\r
190 \r
191 Returns:\r
192 \r
193   TODO: add return values\r
194 \r
195 --*/\r
196 ;\r
197 \r
198 EFI_STATUS\r
199 GetResourceFromDevice (\r
200   PCI_IO_DEVICE     *PciDev,\r
201   PCI_RESOURCE_NODE *IoNode,\r
202   PCI_RESOURCE_NODE *Mem32Node,\r
203   PCI_RESOURCE_NODE *PMem32Node,\r
204   PCI_RESOURCE_NODE *Mem64Node,\r
205   PCI_RESOURCE_NODE *PMem64Node\r
206   )\r
207 /*++\r
208 \r
209 Routine Description:\r
210 \r
211   TODO: Add function description\r
212 \r
213 Arguments:\r
214 \r
215   PciDev      - TODO: add argument description\r
216   IoNode      - TODO: add argument description\r
217   Mem32Node   - TODO: add argument description\r
218   PMem32Node  - TODO: add argument description\r
219   Mem64Node   - TODO: add argument description\r
220   PMem64Node  - TODO: add argument description\r
221 \r
222 Returns:\r
223 \r
224   TODO: add return values\r
225 \r
226 --*/\r
227 ;\r
228 \r
229 PCI_RESOURCE_NODE *\r
230 CreateResourceNode (\r
231   IN PCI_IO_DEVICE         *PciDev,\r
232   IN UINT64                Length,\r
233   IN UINT64                Alignment,\r
234   IN UINT8                 Bar,\r
235   IN PCI_BAR_TYPE          ResType,\r
236   IN PCI_RESOURCE_USAGE    ResUsage\r
237   )\r
238 /*++\r
239 \r
240 Routine Description:\r
241 \r
242   TODO: Add function description\r
243 \r
244 Arguments:\r
245 \r
246   PciDev    - TODO: add argument description\r
247   Length    - TODO: add argument description\r
248   Alignment - TODO: add argument description\r
249   Bar       - TODO: add argument description\r
250   ResType   - TODO: add argument description\r
251   ResUsage  - TODO: add argument description\r
252 \r
253 Returns:\r
254 \r
255   TODO: add return values\r
256 \r
257 --*/\r
258 ;\r
259 \r
260 EFI_STATUS\r
261 CreateResourceMap (\r
262   IN PCI_IO_DEVICE     *Bridge,\r
263   IN PCI_RESOURCE_NODE *IoNode,\r
264   IN PCI_RESOURCE_NODE *Mem32Node,\r
265   IN PCI_RESOURCE_NODE *PMem32Node,\r
266   IN PCI_RESOURCE_NODE *Mem64Node,\r
267   IN PCI_RESOURCE_NODE *PMem64Node\r
268   )\r
269 /*++\r
270 \r
271 Routine Description:\r
272 \r
273   TODO: Add function description\r
274 \r
275 Arguments:\r
276 \r
277   Bridge      - TODO: add argument description\r
278   IoNode      - TODO: add argument description\r
279   Mem32Node   - TODO: add argument description\r
280   PMem32Node  - TODO: add argument description\r
281   Mem64Node   - TODO: add argument description\r
282   PMem64Node  - TODO: add argument description\r
283 \r
284 Returns:\r
285 \r
286   TODO: add return values\r
287 \r
288 --*/\r
289 ;\r
290 \r
291 EFI_STATUS\r
292 ResourcePaddingPolicy (\r
293   PCI_IO_DEVICE     *PciDev,\r
294   PCI_RESOURCE_NODE *IoNode,\r
295   PCI_RESOURCE_NODE *Mem32Node,\r
296   PCI_RESOURCE_NODE *PMem32Node,\r
297   PCI_RESOURCE_NODE *Mem64Node,\r
298   PCI_RESOURCE_NODE *PMem64Node\r
299   )\r
300 /*++\r
301 \r
302 Routine Description:\r
303 \r
304   TODO: Add function description\r
305 \r
306 Arguments:\r
307 \r
308   PciDev      - TODO: add argument description\r
309   IoNode      - TODO: add argument description\r
310   Mem32Node   - TODO: add argument description\r
311   PMem32Node  - TODO: add argument description\r
312   Mem64Node   - TODO: add argument description\r
313   PMem64Node  - TODO: add argument description\r
314 \r
315 Returns:\r
316 \r
317   TODO: add return values\r
318 \r
319 --*/\r
320 ;\r
321 \r
322 EFI_STATUS\r
323 DegradeResource (\r
324   IN PCI_IO_DEVICE     *Bridge,\r
325   IN PCI_RESOURCE_NODE *Mem32Node,\r
326   IN PCI_RESOURCE_NODE *PMem32Node,\r
327   IN PCI_RESOURCE_NODE *Mem64Node,\r
328   IN PCI_RESOURCE_NODE *PMem64Node\r
329   )\r
330 /*++\r
331 \r
332 Routine Description:\r
333 \r
334   TODO: Add function description\r
335 \r
336 Arguments:\r
337 \r
338   Bridge      - TODO: add argument description\r
339   Mem32Node   - TODO: add argument description\r
340   PMem32Node  - TODO: add argument description\r
341   Mem64Node   - TODO: add argument description\r
342   PMem64Node  - TODO: add argument description\r
343 \r
344 Returns:\r
345 \r
346   TODO: add return values\r
347 \r
348 --*/\r
349 ;\r
350 \r
351 BOOLEAN\r
352 BridgeSupportResourceDecode (\r
353   IN PCI_IO_DEVICE *Bridge,\r
354   IN UINT32        Decode\r
355   )\r
356 /*++\r
357 \r
358 Routine Description:\r
359 \r
360   TODO: Add function description\r
361 \r
362 Arguments:\r
363 \r
364   Bridge  - TODO: add argument description\r
365   Decode  - TODO: add argument description\r
366 \r
367 Returns:\r
368 \r
369   TODO: add return values\r
370 \r
371 --*/\r
372 ;\r
373 \r
374 EFI_STATUS\r
375 ProgramResource (\r
376   IN UINT64            Base,\r
377   IN PCI_RESOURCE_NODE *Bridge\r
378   )\r
379 /*++\r
380 \r
381 Routine Description:\r
382 \r
383   TODO: Add function description\r
384 \r
385 Arguments:\r
386 \r
387   Base    - TODO: add argument description\r
388   Bridge  - TODO: add argument description\r
389 \r
390 Returns:\r
391 \r
392   TODO: add return values\r
393 \r
394 --*/\r
395 ;\r
396 \r
397 EFI_STATUS\r
398 ProgramBar (\r
399   IN UINT64            Base,\r
400   IN PCI_RESOURCE_NODE *Node\r
401   )\r
402 /*++\r
403 \r
404 Routine Description:\r
405 \r
406   TODO: Add function description\r
407 \r
408 Arguments:\r
409 \r
410   Base  - TODO: add argument description\r
411   Node  - TODO: add argument description\r
412 \r
413 Returns:\r
414 \r
415   TODO: add return values\r
416 \r
417 --*/\r
418 ;\r
419 \r
420 EFI_STATUS\r
421 ProgramPpbApperture (\r
422   IN UINT64            Base,\r
423   IN PCI_RESOURCE_NODE *Node\r
424   )\r
425 /*++\r
426 \r
427 Routine Description:\r
428 \r
429   TODO: Add function description\r
430 \r
431 Arguments:\r
432 \r
433   Base  - TODO: add argument description\r
434   Node  - TODO: add argument description\r
435 \r
436 Returns:\r
437 \r
438   TODO: add return values\r
439 \r
440 --*/\r
441 ;\r
442 \r
443 EFI_STATUS\r
444 ProgrameUpstreamBridgeForRom (\r
445   IN PCI_IO_DEVICE   *PciDevice,\r
446   IN UINT32          OptionRomBase,\r
447   IN BOOLEAN         Enable\r
448   )\r
449 /*++\r
450 \r
451 Routine Description:\r
452 \r
453   TODO: Add function description\r
454 \r
455 Arguments:\r
456 \r
457   PciDevice     - TODO: add argument description\r
458   OptionRomBase - TODO: add argument description\r
459   Enable        - TODO: add argument description\r
460 \r
461 Returns:\r
462 \r
463   TODO: add return values\r
464 \r
465 --*/\r
466 ;\r
467 \r
468 BOOLEAN\r
469 ResourceRequestExisted (\r
470   IN PCI_RESOURCE_NODE *Bridge\r
471   )\r
472 /*++\r
473 \r
474 Routine Description:\r
475 \r
476   TODO: Add function description\r
477 \r
478 Arguments:\r
479 \r
480   Bridge  - TODO: add argument description\r
481 \r
482 Returns:\r
483 \r
484   TODO: add return values\r
485 \r
486 --*/\r
487 ;\r
488 \r
489 EFI_STATUS\r
490 InitializeResourcePool (\r
491   PCI_RESOURCE_NODE   *ResourcePool,\r
492   PCI_BAR_TYPE        ResourceType\r
493   )\r
494 /*++\r
495 \r
496 Routine Description:\r
497 \r
498   TODO: Add function description\r
499 \r
500 Arguments:\r
501 \r
502   ResourcePool  - TODO: add argument description\r
503   ResourceType  - TODO: add argument description\r
504 \r
505 Returns:\r
506 \r
507   TODO: add return values\r
508 \r
509 --*/\r
510 ;\r
511 \r
512 EFI_STATUS\r
513 GetResourceMap (\r
514   PCI_IO_DEVICE      *PciDev,\r
515   PCI_RESOURCE_NODE  **IoBridge,\r
516   PCI_RESOURCE_NODE  **Mem32Bridge,\r
517   PCI_RESOURCE_NODE  **PMem32Bridge,\r
518   PCI_RESOURCE_NODE  **Mem64Bridge,\r
519   PCI_RESOURCE_NODE  **PMem64Bridge,\r
520   PCI_RESOURCE_NODE  *IoPool,\r
521   PCI_RESOURCE_NODE  *Mem32Pool,\r
522   PCI_RESOURCE_NODE  *PMem32Pool,\r
523   PCI_RESOURCE_NODE  *Mem64Pool,\r
524   PCI_RESOURCE_NODE  *PMem64Pool\r
525   )\r
526 /*++\r
527 \r
528 Routine Description:\r
529 \r
530   TODO: Add function description\r
531 \r
532 Arguments:\r
533 \r
534   PciDev        - TODO: add argument description\r
535   IoBridge      - TODO: add argument description\r
536   Mem32Bridge   - TODO: add argument description\r
537   PMem32Bridge  - TODO: add argument description\r
538   Mem64Bridge   - TODO: add argument description\r
539   PMem64Bridge  - TODO: add argument description\r
540   IoPool        - TODO: add argument description\r
541   Mem32Pool     - TODO: add argument description\r
542   PMem32Pool    - TODO: add argument description\r
543   Mem64Pool     - TODO: add argument description\r
544   PMem64Pool    - TODO: add argument description\r
545 \r
546 Returns:\r
547 \r
548   TODO: add return values\r
549 \r
550 --*/\r
551 ;\r
552 \r
553 EFI_STATUS\r
554 DestroyResourceTree (\r
555   IN PCI_RESOURCE_NODE *Bridge\r
556   )\r
557 /*++\r
558 \r
559 Routine Description:\r
560 \r
561   TODO: Add function description\r
562 \r
563 Arguments:\r
564 \r
565   Bridge  - TODO: add argument description\r
566 \r
567 Returns:\r
568 \r
569   TODO: add return values\r
570 \r
571 --*/\r
572 ;\r
573 \r
574 EFI_STATUS\r
575 RecordReservedResource (\r
576   IN UINT64         Base,\r
577   IN UINT64         Length,\r
578   IN PCI_BAR_TYPE   ResType,\r
579   IN PCI_IO_DEVICE  *Bridge\r
580   )\r
581 /*++\r
582 \r
583 Routine Description:\r
584 \r
585   TODO: Add function description\r
586 \r
587 Arguments:\r
588 \r
589   Base    - TODO: add argument description\r
590   Length  - TODO: add argument description\r
591   ResType - TODO: add argument description\r
592   Bridge  - TODO: add argument description\r
593 \r
594 Returns:\r
595 \r
596   TODO: add return values\r
597 \r
598 --*/\r
599 ;\r
600 \r
601 EFI_STATUS\r
602 ResourcePaddingForCardBusBridge (\r
603   PCI_IO_DEVICE     *PciDev,\r
604   PCI_RESOURCE_NODE *IoNode,\r
605   PCI_RESOURCE_NODE *Mem32Node,\r
606   PCI_RESOURCE_NODE *PMem32Node,\r
607   PCI_RESOURCE_NODE *Mem64Node,\r
608   PCI_RESOURCE_NODE *PMem64Node\r
609   )\r
610 /*++\r
611 \r
612 Routine Description:\r
613 \r
614   TODO: Add function description\r
615 \r
616 Arguments:\r
617 \r
618   PciDev      - TODO: add argument description\r
619   IoNode      - TODO: add argument description\r
620   Mem32Node   - TODO: add argument description\r
621   PMem32Node  - TODO: add argument description\r
622   Mem64Node   - TODO: add argument description\r
623   PMem64Node  - TODO: add argument description\r
624 \r
625 Returns:\r
626 \r
627   TODO: add return values\r
628 \r
629 --*/\r
630 ;\r
631 \r
632 EFI_STATUS\r
633 ProgramP2C (\r
634   IN UINT64            Base,\r
635   IN PCI_RESOURCE_NODE *Node\r
636   )\r
637 /*++\r
638 \r
639 Routine Description:\r
640 \r
641   TODO: Add function description\r
642 \r
643 Arguments:\r
644 \r
645   Base  - TODO: add argument description\r
646   Node  - TODO: add argument description\r
647 \r
648 Returns:\r
649 \r
650   TODO: add return values\r
651 \r
652 --*/\r
653 ;\r
654 \r
655 EFI_STATUS\r
656 ApplyResourcePadding (\r
657   PCI_IO_DEVICE     *PciDev,\r
658   PCI_RESOURCE_NODE *IoNode,\r
659   PCI_RESOURCE_NODE *Mem32Node,\r
660   PCI_RESOURCE_NODE *PMem32Node,\r
661   PCI_RESOURCE_NODE *Mem64Node,\r
662   PCI_RESOURCE_NODE *PMem64Node\r
663   )\r
664 /*++\r
665 \r
666 Routine Description:\r
667 \r
668   TODO: Add function description\r
669 \r
670 Arguments:\r
671 \r
672   PciDev      - TODO: add argument description\r
673   IoNode      - TODO: add argument description\r
674   Mem32Node   - TODO: add argument description\r
675   PMem32Node  - TODO: add argument description\r
676   Mem64Node   - TODO: add argument description\r
677   PMem64Node  - TODO: add argument description\r
678 \r
679 Returns:\r
680 \r
681   TODO: add return values\r
682 \r
683 --*/\r
684 ;\r
685 \r
686 VOID\r
687 GetResourcePaddingPpb (\r
688   IN  PCI_IO_DEVICE                  *PciIoDevice\r
689   )\r
690 /*++\r
691 \r
692 Routine Description:\r
693 \r
694   TODO: Add function description\r
695 \r
696 Arguments:\r
697 \r
698   PciIoDevice - TODO: add argument description\r
699 \r
700 Returns:\r
701 \r
702   TODO: add return values\r
703 \r
704 --*/\r
705 ;\r
706 \r
707 EFI_STATUS\r
708 ResetAllPpbBusNumber (\r
709   IN PCI_IO_DEVICE                      *Bridge,\r
710   IN UINT8                              StartBusNumber\r
711   )\r
712 /*++\r
713 \r
714 Routine Description:\r
715 \r
716   Reset bus register\r
717 \r
718 Arguments:\r
719 \r
720   Bridge          - a pointer to the PCI_IO_DEVICE\r
721   StartBusNumber  - the number of bus\r
722 \r
723 Returns:\r
724 \r
725   None\r
726 \r
727 --*/\r
728 ;\r
729 \r
730 #endif\r