X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=EmulatorPkg%2FCpuRuntimeDxe%2FCpu.c;h=e00f6cf35f51b796e2927a794e9139722f0b5a3c;hb=a550d468a6ca577d9e9c57a0eafcf2fc9fbb8c97;hp=47fb7f07e891a74554b30411f646d615909a6e21;hpb=92658c8af1245bef09be5e1d1d13b55a4567db3b;p=mirror_edk2.git diff --git a/EmulatorPkg/CpuRuntimeDxe/Cpu.c b/EmulatorPkg/CpuRuntimeDxe/Cpu.c index 47fb7f07e8..e00f6cf35f 100644 --- a/EmulatorPkg/CpuRuntimeDxe/Cpu.c +++ b/EmulatorPkg/CpuRuntimeDxe/Cpu.c @@ -3,13 +3,7 @@ Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.
Portions copyright (c) 2011 - 2012, Apple Inc. All rights reserved. -This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -17,7 +11,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. UINT64 mTimerPeriod; -CPU_ARCH_PROTOCOL_PRIVATE mCpuTemplate = { +CPU_ARCH_PROTOCOL_PRIVATE mCpuTemplate = { CPU_ARCH_PROT_PRIVATE_SIGNATURE, NULL, { @@ -45,16 +39,16 @@ CPU_ARCH_PROTOCOL_PRIVATE mCpuTemplate = { TRUE }; -#define EFI_CPU_DATA_MAXIMUM_LENGTH 0x100 +#define EFI_CPU_DATA_MAXIMUM_LENGTH 0x100 -SMBIOS_TABLE_TYPE4 mCpuSmbiosType4 = { - { EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE4), 0}, +SMBIOS_TABLE_TYPE4 mCpuSmbiosType4 = { + { EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE4), 0 }, 1, // Socket String ProcessorOther, // ProcessorType; ///< The enumeration value from PROCESSOR_TYPE_DATA. ProcessorFamilyOther, // ProcessorFamily; ///< The enumeration value from PROCESSOR_FAMILY_DATA. 2, // ProcessorManufacture String; { // ProcessorId; - { // PROCESSOR_SIGNATURE + { // PROCESSOR_SIGNATURE 0, // ProcessorSteppingId:4; 0, // ProcessorModel: 4; 0, // ProcessorFamily: 4; @@ -63,8 +57,8 @@ SMBIOS_TABLE_TYPE4 mCpuSmbiosType4 = { 0, // ProcessorXModel: 4; 0, // ProcessorXFamily: 8; 0, // ProcessorReserved2: 4; - }, - { // PROCESSOR_FEATURE_FLAGS + }, + { // PROCESSOR_FEATURE_FLAGS 0, // ProcessorFpu :1; 0, // ProcessorVme :1; 0, // ProcessorDe :1; @@ -99,14 +93,14 @@ SMBIOS_TABLE_TYPE4 mCpuSmbiosType4 = { } }, 3, // ProcessorVersion String; - { // Voltage; - 1, // ProcessorVoltageCapability5V :1; - 1, // ProcessorVoltageCapability3_3V :1; - 1, // ProcessorVoltageCapability2_9V :1; + { // Voltage; + 1, // ProcessorVoltageCapability5V :1; + 1, // ProcessorVoltageCapability3_3V :1; + 1, // ProcessorVoltageCapability2_9V :1; 0, // ProcessorVoltageCapabilityReserved :1; ///< Bit 3, must be zero. 0, // ProcessorVoltageReserved :3; ///< Bits 4-6, must be zero. 0 // ProcessorVoltageIndicateLegacy :1; - }, + }, 0, // ExternalClock; 0, // MaxSpeed; 0, // CurrentSpeed; @@ -125,7 +119,7 @@ SMBIOS_TABLE_TYPE4 mCpuSmbiosType4 = { 0, // ProcessorFamily2; }; -CHAR8 *mCpuSmbiosType4Strings[] = { +CHAR8 *mCpuSmbiosType4Strings[] = { "Socket", "http://www.tianocore.org/edk2/", "Emulated Processor", @@ -135,7 +129,6 @@ CHAR8 *mCpuSmbiosType4Strings[] = { NULL }; - /** Create SMBIOS record. @@ -151,32 +144,32 @@ CHAR8 *mCpuSmbiosType4Strings[] = { "Not Found", NULL }; - + ... LogSmbiosData ( - (EFI_SMBIOS_TABLE_HEADER*)&gSmbiosType12, + (EFI_SMBIOS_TABLE_HEADER*)&gSmbiosType12, gSmbiosType12Strings ); @param Template Fixed SMBIOS structure, required. - @param StringArray Array of strings to convert to an SMBIOS string pack. + @param StringArray Array of strings to convert to an SMBIOS string pack. NULL is OK. **/ EFI_STATUS LogSmbiosData ( - IN EFI_SMBIOS_TABLE_HEADER *Template, - IN CHAR8 **StringPack + IN EFI_SMBIOS_TABLE_HEADER *Template, + IN CHAR8 **StringPack ) { - EFI_STATUS Status; - EFI_SMBIOS_PROTOCOL *Smbios; - EFI_SMBIOS_HANDLE SmbiosHandle; - EFI_SMBIOS_TABLE_HEADER *Record; - UINTN Index; - UINTN StringSize; - UINTN Size; - CHAR8 *Str; + EFI_STATUS Status; + EFI_SMBIOS_PROTOCOL *Smbios; + EFI_SMBIOS_HANDLE SmbiosHandle; + EFI_SMBIOS_TABLE_HEADER *Record; + UINTN Index; + UINTN StringSize; + UINTN Size; + CHAR8 *Str; // // Locate Smbios protocol. @@ -194,12 +187,14 @@ LogSmbiosData ( } else { for (Index = 0; StringPack[Index] != NULL; Index++) { StringSize = AsciiStrSize (StringPack[Index]); - Size += StringSize; + Size += StringSize; } + if (StringPack[0] == NULL) { // At least a double null is required Size += 1; } + // Don't forget the terminating double null Size += 1; } @@ -209,6 +204,7 @@ LogSmbiosData ( if (Record == NULL) { return EFI_OUT_OF_RESOURCES; } + CopyMem (Record, Template, Template->Length); // Append string pack @@ -218,37 +214,37 @@ LogSmbiosData ( CopyMem (Str, StringPack[Index], StringSize); Str += StringSize; } + *Str = 0; - + SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; - Status = Smbios->Add ( - Smbios, - gImageHandle, - &SmbiosHandle, - Record - ); + Status = Smbios->Add ( + Smbios, + gImageHandle, + &SmbiosHandle, + Record + ); ASSERT_EFI_ERROR (Status); - + FreePool (Record); return Status; } - - - VOID CpuUpdateSmbios ( IN UINTN MaxCpus ) { - mCpuSmbiosType4.CoreCount = (UINT8) MaxCpus; - mCpuSmbiosType4.EnabledCoreCount = (UINT8) MaxCpus; - mCpuSmbiosType4.ThreadCount = (UINT8) MaxCpus; - + mCpuSmbiosType4.CoreCount = (UINT8)MaxCpus; + mCpuSmbiosType4.EnabledCoreCount = (UINT8)MaxCpus; + mCpuSmbiosType4.ThreadCount = (UINT8)MaxCpus; + // + // The value of 1234 is fake value for CPU frequency + // + mCpuSmbiosType4.CurrentSpeed = 1234; LogSmbiosData ((EFI_SMBIOS_TABLE_HEADER *)&mCpuSmbiosType4, mCpuSmbiosType4Strings); } - // // Service routines for the driver // @@ -268,6 +264,7 @@ EmuFlushCpuDataCache ( // return EFI_SUCCESS; } + // // Other flush types are not supported by Emu emulator // @@ -280,7 +277,7 @@ EmuEnableInterrupt ( IN EFI_CPU_ARCH_PROTOCOL *This ) { - CPU_ARCH_PROTOCOL_PRIVATE *Private; + CPU_ARCH_PROTOCOL_PRIVATE *Private; Private = CPU_ARCH_PROTOCOL_PRIVATE_DATA_FROM_THIS (This); Private->InterruptState = TRUE; @@ -294,7 +291,7 @@ EmuDisableInterrupt ( IN EFI_CPU_ARCH_PROTOCOL *This ) { - CPU_ARCH_PROTOCOL_PRIVATE *Private; + CPU_ARCH_PROTOCOL_PRIVATE *Private; Private = CPU_ARCH_PROTOCOL_PRIVATE_DATA_FROM_THIS (This); Private->InterruptState = FALSE; @@ -309,7 +306,7 @@ EmuGetInterruptState ( OUT BOOLEAN *State ) { - CPU_ARCH_PROTOCOL_PRIVATE *Private; + CPU_ARCH_PROTOCOL_PRIVATE *Private; if (State == NULL) { return EFI_INVALID_PARAMETER; @@ -341,9 +338,10 @@ EmuRegisterInterruptHandler ( // // Do parameter checking for EFI spec conformance // - if (InterruptType < 0 || InterruptType > 0xff) { + if ((InterruptType < 0) || (InterruptType > 0xff)) { return EFI_UNSUPPORTED; } + // // Do nothing for Emu emulation // @@ -353,10 +351,10 @@ EmuRegisterInterruptHandler ( EFI_STATUS EFIAPI EmuGetTimerValue ( - IN EFI_CPU_ARCH_PROTOCOL *This, - IN UINT32 TimerIndex, - OUT UINT64 *TimerValue, - OUT UINT64 *TimerPeriod OPTIONAL + IN EFI_CPU_ARCH_PROTOCOL *This, + IN UINT32 TimerIndex, + OUT UINT64 *TimerValue, + OUT UINT64 *TimerPeriod OPTIONAL ) { if (TimerValue == NULL) { @@ -376,7 +374,6 @@ EmuGetTimerValue ( return EFI_SUCCESS; } - EFI_STATUS EFIAPI EmuSetMemoryAttributes ( @@ -399,9 +396,6 @@ EmuSetMemoryAttributes ( return EFI_UNSUPPORTED; } - - - /** Callback function for idle events. @@ -413,14 +407,13 @@ EmuSetMemoryAttributes ( VOID EFIAPI IdleLoopEventCallback ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { gEmuThunk->CpuSleep (); } - EFI_STATUS EFIAPI InitializeCpu ( @@ -428,10 +421,10 @@ InitializeCpu ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - UINT64 Frequency; - EFI_EVENT IdleLoopEvent; - UINTN MaxCpu; + EFI_STATUS Status; + UINT64 Frequency; + EFI_EVENT IdleLoopEvent; + UINTN MaxCpu; // // Retrieve the frequency of the performance counter in Hz. @@ -447,7 +440,6 @@ InitializeCpu ( CpuUpdateSmbios (MaxCpu); - Status = gBS->CreateEventEx ( EVT_NOTIFY_SIGNAL, TPL_NOTIFY, @@ -458,11 +450,12 @@ InitializeCpu ( ); ASSERT_EFI_ERROR (Status); - Status = gBS->InstallMultipleProtocolInterfaces ( &mCpuTemplate.Handle, - &gEfiCpuArchProtocolGuid, &mCpuTemplate.Cpu, - &gEfiCpuIo2ProtocolGuid, &mCpuTemplate.CpuIo, + &gEfiCpuArchProtocolGuid, + &mCpuTemplate.Cpu, + &gEfiCpuIo2ProtocolGuid, + &mCpuTemplate.CpuIo, NULL ); ASSERT_EFI_ERROR (Status);