MdeModulePkg/PciHostBridgeLib.h: add address Translation
[mirror_edk2.git] / MdeModulePkg / Include / Library / PciHostBridgeLib.h
index d42e9ec..18963a0 100644 (file)
 // (Base > Limit) indicates an aperture is not available.\r
 //\r
 typedef struct {\r
+  //\r
+  // Base and Limit are the device address instead of host address when\r
+  // Translation is not zero\r
+  //\r
   UINT64 Base;\r
   UINT64 Limit;\r
+  //\r
+  // According to UEFI 2.7, Device Address = Host Address + Translation,\r
+  // so Translation = Device Address - Host Address.\r
+  // On platforms where Translation is not zero, the subtraction is probably to\r
+  // be performed with UINT64 wrap-around semantics, for we may translate an\r
+  // above-4G host address into a below-4G device address for legacy PCIe device\r
+  // compatibility.\r
+  //\r
+  // NOTE: The alignment of Translation is required to be larger than any BAR\r
+  // alignment in the same root bridge, so that the same alignment can be\r
+  // applied to both device address and host address, which simplifies the\r
+  // situation and makes the current resource allocation code in generic PCI\r
+  // host bridge driver still work.\r
+  //\r
+  UINT64 Translation;\r
 } PCI_ROOT_BRIDGE_APERTURE;\r
 \r
 typedef struct {\r