Changeset 26203 in vbox for trunk/src/VBox
- Timestamp:
- Feb 3, 2010 3:22:42 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 57225
- Location:
- trunk/src/VBox
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/DevEFI.cpp
r26173 r26203 109 109 110 110 /* Boot parameters passed to the firmware */ 111 char pszBootArgs[256];111 char szBootArgs[256]; 112 112 113 113 /* Host UUID (for DMI) */ 114 114 RTUUID aUuid; 115 116 /* Device properties string */ 117 char* pszDeviceProps; 118 119 /* Virtual machine front side bus frequency */ 120 uint64_t u64FsbFrequency; 121 /* Virtual machine time stamp counter frequency */ 122 uint64_t u64TscFrequency; 123 /* Virtual machine CPU frequency */ 124 uint64_t u64CpuFrequency; 115 125 } DEVEFI; 116 126 typedef DEVEFI *PDEVEFI; … … 141 151 case EFI_INFO_INDEX_STACK_SIZE: 142 152 return 4; 143 case EFI_INFO_INDEX_BOOT_ARGS: 144 return RTStrNLen(pThis->pszBootArgs, sizeof pThis->pszBootArgs) + 1; 153 case EFI_INFO_INDEX_BOOT_ARGS: 154 return RTStrNLen(pThis->szBootArgs, sizeof pThis->szBootArgs) + 1; 155 case EFI_INFO_INDEX_DEVICE_PROPS: 156 return RTStrNLen(pThis->pszDeviceProps, RTSTR_MAX) + 1; 157 case EFI_INFO_INDEX_FSB_FREQUENCY: 158 case EFI_INFO_INDEX_CPU_FREQUENCY: 159 case EFI_INFO_INDEX_TSC_FREQUENCY: 160 return 8; 145 161 } 146 162 Assert(false); … … 150 166 static uint8_t efiInfoNextByte(PDEVEFI pThis) 151 167 { 152 uint32_t iValue; 168 union 169 { 170 uint32_t u32; 171 uint64_t u64; 172 } value; 173 153 174 switch (pThis->iInfoSelector) 154 175 { 155 176 case EFI_INFO_INDEX_VOLUME_BASE: 156 iValue= pThis->GCLoadAddress;177 value.u32 = pThis->GCLoadAddress; 157 178 break; 158 179 case EFI_INFO_INDEX_VOLUME_SIZE: 159 iValue= pThis->cbEfiRom;180 value.u32 = pThis->cbEfiRom; 160 181 break; 161 182 case EFI_INFO_INDEX_TEMPMEM_BASE: 162 iValue= VBOX_EFI_TOP_OF_STACK; /* just after stack */183 value.u32 = VBOX_EFI_TOP_OF_STACK; /* just after stack */ 163 184 break; 164 185 case EFI_INFO_INDEX_TEMPMEM_SIZE: 165 iValue= 512 * 1024; /* 512 K */186 value.u32 = 512 * 1024; /* 512 K */ 166 187 break; 167 188 case EFI_INFO_INDEX_STACK_BASE: 168 189 /* Keep in sync with value in EfiThunk.asm */ 169 iValue= VBOX_EFI_TOP_OF_STACK - 128*1024; /* 2M - 128 K */190 value.u32 = VBOX_EFI_TOP_OF_STACK - 128*1024; /* 2M - 128 K */ 170 191 break; 171 192 case EFI_INFO_INDEX_STACK_SIZE: 172 iValue = 128*1024; /* 128 K */ 193 value.u32 = 128*1024; /* 128 K */ 194 break; 195 case EFI_INFO_INDEX_FSB_FREQUENCY: 196 value.u64 = pThis->u64FsbFrequency; 197 break; 198 case EFI_INFO_INDEX_TSC_FREQUENCY: 199 value.u64 = pThis->u64TscFrequency; 200 break; 201 case EFI_INFO_INDEX_CPU_FREQUENCY: 202 value.u64 = pThis->u64CpuFrequency; 173 203 break; 174 204 case EFI_INFO_INDEX_BOOT_ARGS: 175 return pThis->pszBootArgs[pThis->iInfoPosition]; 205 return pThis->szBootArgs[pThis->iInfoPosition]; 206 case EFI_INFO_INDEX_DEVICE_PROPS: 207 return pThis->pszDeviceProps[pThis->iInfoPosition]; 176 208 default: 177 209 Assert(false); 178 iValue= 0;179 break; 180 } 181 /* somewhat ugly, but works atm */182 return *((uint8_t*)& iValue+pThis->iInfoPosition);210 value.u64 = 0; 211 break; 212 } 213 214 return *((uint8_t*)&value+pThis->iInfoPosition); 183 215 } 184 216 … … 496 528 MMR3HeapFree(pThis->pu8EfiThunk); 497 529 pThis->pu8EfiThunk = NULL; 530 } 531 532 if (pThis->pszDeviceProps) 533 { 534 MMR3HeapFree(pThis->pszDeviceProps); 535 pThis->pszDeviceProps = NULL; 498 536 } 499 537 … … 906 944 "64BitEntry\0" 907 945 "BootArgs\0" 946 "DeviceProps\0" 908 947 )) 909 948 return PDMDEV_SET_ERROR(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES, … … 928 967 N_("Configuration error: Querying \"UUID\" failed")); 929 968 930 /* Convert the UUID to network byte order. Not entirely straightforward as parts are MSB already... */ 969 /* 970 * Convert the UUID to network byte order. Not entirely straightforward as 971 * parts are MSB already... 972 */ 931 973 uuid.Gen.u32TimeLow = RT_H2BE_U32(uuid.Gen.u32TimeLow); 932 974 uuid.Gen.u16TimeMid = RT_H2BE_U16(uuid.Gen.u16TimeMid); … … 935 977 936 978 937 /* RAM sizes */ 979 /* 980 * RAM sizes 981 */ 938 982 rc = CFGMR3QueryU64(pCfg, "RamSize", &pThis->cbRam); 939 983 AssertLogRelRCReturn(rc, rc); … … 943 987 pThis->cbAbove4GB = pThis->cbRam - pThis->cbBelow4GB; 944 988 945 946 989 /* 947 990 * Get the system EFI ROM file name. … … 970 1013 } 971 1014 972 1015 /* 973 1016 * Get boot args. 974 1017 */ 975 1018 rc = CFGMR3QueryString(pCfg, "BootArgs", 976 pThis-> pszBootArgs, sizeof pThis->pszBootArgs);1019 pThis->szBootArgs, sizeof pThis->szBootArgs); 977 1020 if (rc == VERR_CFGM_VALUE_NOT_FOUND) 978 1021 { 979 strcpy(pThis-> pszBootArgs, "");1022 strcpy(pThis->szBootArgs, ""); 980 1023 rc = VINF_SUCCESS; 981 1024 } … … 984 1027 N_("Configuration error: Querying \"BootArgs\" as a string failed")); 985 1028 986 LogRel(("EFI boot args: %s\n", pThis->pszBootArgs)); 1029 LogRel(("EFI boot args: %s\n", pThis->szBootArgs)); 1030 1031 /* 1032 * Get device props. 1033 */ 1034 rc = CFGMR3QueryStringAlloc(pCfg, "DeviceProps", &pThis->pszDeviceProps); 1035 if (rc == VERR_CFGM_VALUE_NOT_FOUND) 1036 { 1037 pThis->pszDeviceProps = RTStrDup(""); 1038 rc = VINF_SUCCESS; 1039 } 1040 if (RT_FAILURE(rc)) 1041 return PDMDevHlpVMSetError(pDevIns, rc, RT_SRC_POS, 1042 N_("Configuration error: Querying \"DeviceProps\" as a string failed")); 1043 LogRel(("EFI device props: %s\n", pThis->pszDeviceProps)); 1044 1045 pThis->u64FsbFrequency = 1333000000; 1046 pThis->u64TscFrequency = pThis->u64FsbFrequency * 3; 1047 pThis->u64CpuFrequency = pThis->u64TscFrequency; 1048 987 1049 988 1050 #ifdef DEVEFI_WITH_VBOXDBG_SCRIPT -
trunk/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/DevEFI.h
r26109 r26203 55 55 EFI_INFO_INDEX_STACK_SIZE, 56 56 EFI_INFO_INDEX_BOOT_ARGS, 57 EFI_INFO_INDEX_DEVICE_PROPS, 58 EFI_INFO_INDEX_FSB_FREQUENCY, 59 EFI_INFO_INDEX_CPU_FREQUENCY, 60 EFI_INFO_INDEX_TSC_FREQUENCY, 57 61 EFI_INFO_INDEX_END 58 62 } EfiInfoIndex; -
trunk/src/VBox/Main/ConsoleImpl2.cpp
r26186 r26203 815 815 rc = findEfiRom(virtualBox, eFwType, efiRomFile); RC_CHECK(); 816 816 817 /* Computeboot args */817 /* Get boot args */ 818 818 Bstr bootArgs; 819 819 hrc = pMachine->GetExtraData(Bstr("VBoxInternal2/EfiBootArgs"), bootArgs.asOutParam()); H(); 820 821 /* Get device props */ 822 Bstr deviceProps; 823 hrc = pMachine->GetExtraData(Bstr("VBoxInternal2/EfiDeviceProps"), deviceProps.asOutParam()); H(); 820 824 821 825 /* … … 830 834 rc = CFGMR3InsertInteger(pCfg, "NumCPUs", cCpus); RC_CHECK(); 831 835 rc = CFGMR3InsertString(pCfg, "EfiRom", efiRomFile.raw()); RC_CHECK(); 832 rc = CFGMR3InsertString(pCfg, "BootArgs", Utf8Str(bootArgs).raw()); RC_CHECK(); 836 rc = CFGMR3InsertString(pCfg, "BootArgs", Utf8Str(bootArgs).raw());RC_CHECK(); 837 rc = CFGMR3InsertString(pCfg, "DeviceProps", Utf8Str(deviceProps).raw());RC_CHECK(); 833 838 rc = CFGMR3InsertInteger(pCfg, "IOAPIC", fIOAPIC); RC_CHECK(); 834 839 rc = CFGMR3InsertBytes(pCfg, "UUID", &HardwareUuid,sizeof(HardwareUuid));RC_CHECK();
Note:
See TracChangeset
for help on using the changeset viewer.