Changeset 67439 in vbox
- Timestamp:
- Jun 16, 2017 1:57:42 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 116170
- Location:
- trunk/src/VBox/Devices/EFI
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/DevEFI.cpp
r65850 r67439 228 228 /** Uga mode vertical resolution. */ 229 229 uint32_t cyUgaResolution; 230 /** PCI area */ 231 uint32_t u32McfgBase; 232 uint32_t cbMcfgLength; 230 233 231 234 … … 1104 1107 case EFI_INFO_INDEX_UGA_VERTICAL_RESOLUTION: 1105 1108 case EFI_INFO_INDEX_UGA_HORIZONTAL_RESOLUTION: 1109 case EFI_INFO_INDEX_MCFG_BASE: 1110 case EFI_INFO_INDEX_MCFG_SIZE: 1106 1111 return 4; 1107 1112 case EFI_INFO_INDEX_BOOT_ARGS: … … 1191 1196 case EFI_INFO_INDEX_STACK_BASE: return efiInfoNextByteU32(pThis, VBOX_EFI_TOP_OF_STACK - _128K); /* 2M - 128 K */ 1192 1197 case EFI_INFO_INDEX_STACK_SIZE: return efiInfoNextByteU32(pThis, _128K); 1198 case EFI_INFO_INDEX_MCFG_BASE: return efiInfoNextByteU32(pThis, pThis->u32McfgBase); 1199 case EFI_INFO_INDEX_MCFG_SIZE: return efiInfoNextByteU32(pThis, pThis->cbMcfgLength); 1193 1200 1194 1201 default: … … 2140 2147 "EfiRom\0" 2141 2148 "NumCPUs\0" 2149 "McfgBase\0" 2150 "McfgLength\0" 2142 2151 "UUID\0" 2143 2152 "IOAPIC\0" … … 2188 2197 rc = CFGMR3QueryU32Def(pCfg, "NumCPUs", &pThis->cCpus, 1); 2189 2198 AssertLogRelRCReturn(rc, rc); 2199 2200 rc = CFGMR3QueryU32Def(pCfg, "McfgBase", &pThis->u32McfgBase, 0); 2201 if (RT_FAILURE(rc)) 2202 return PDMDEV_SET_ERROR(pDevIns, rc, 2203 N_("Configuration error: Querying \"\" as integer failed")); 2204 rc = CFGMR3QueryU32Def(pCfg, "McfgLength", &pThis->cbMcfgLength, 0); 2205 if (RT_FAILURE(rc)) 2206 return PDMDEV_SET_ERROR(pDevIns, rc, 2207 N_("Configuration error: Querying \"McfgLength\" as integer failed")); 2190 2208 2191 2209 rc = CFGMR3QueryU8Def(pCfg, "IOAPIC", &pThis->u8IOAPIC, 1); -
trunk/src/VBox/Devices/EFI/DevEFI.h
r62500 r67439 69 69 EFI_INFO_INDEX_UGA_HORIZONTAL_RESOLUTION, 70 70 EFI_INFO_INDEX_UGA_VERTICAL_RESOLUTION, 71 EFI_INFO_INDEX_MCFG_BASE, 72 EFI_INFO_INDEX_MCFG_SIZE, 71 73 EFI_INFO_INDEX_END 72 74 } EfiInfoIndex; -
trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/PlatformPei/Platform.c
r58459 r67439 40 40 #include "Cmos.h" 41 41 42 #ifdef VBOX 43 # define IN_RING0 44 # include "../../../../DevEFI.h" 45 #endif 46 42 47 EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = { 43 48 { EfiACPIMemoryNVS, 0x004 }, … … 65 70 BOOLEAN mS3Supported = FALSE; 66 71 72 #ifdef VBOX 73 static UINT32 74 GetVmVariable(UINT32 Variable, CHAR8 *pbBuf, UINT32 cbBuf) 75 { 76 UINT32 cbVar, offBuf; 77 78 IoWrite32(EFI_INFO_PORT, Variable); 79 cbVar = IoRead32(EFI_INFO_PORT); 80 81 for (offBuf = 0; offBuf < cbVar && offBuf < cbBuf; offBuf++) 82 pbBuf[offBuf] = IoRead8(EFI_INFO_PORT); 83 84 return cbVar; 85 } 86 #endif 87 67 88 68 89 VOID … … 269 290 // 0xFEE00000 LAPIC 1 MB 270 291 // 292 #ifdef VBOX 293 UINT32 MCfgBase = 0; 294 UINT32 MCfgSize = 0; 295 GetVmVariable(EFI_INFO_INDEX_MCFG_BASE, (CHAR8 *)&MCfgBase, sizeof(MCfgBase)); 296 GetVmVariable(EFI_INFO_INDEX_MCFG_SIZE, (CHAR8 *)&MCfgSize, sizeof(MCfgSize)); 297 if (TopOfLowRam < BASE_2GB) 298 TopOfLowRam = BASE_2GB; 299 if (MCfgBase == 0) 300 MCfgBase = TopOfLowRam; // backward compatibilit with old DevEFI 301 if (TopOfLowRam < MCfgBase) 302 AddIoMemoryRangeHob (TopOfLowRam, MCfgBase); 303 AddIoMemoryRangeHob (MCfgBase + MCfgSize, 0xFC000000); 304 #else 271 305 AddIoMemoryRangeHob (TopOfLowRam < BASE_2GB ? 272 306 BASE_2GB : TopOfLowRam, 0xFC000000); 307 #endif 273 308 AddIoMemoryBaseSizeHob (0xFEC00000, SIZE_4KB); 274 309 AddIoMemoryBaseSizeHob (0xFED00000, SIZE_1KB);
Note:
See TracChangeset
for help on using the changeset viewer.