From ac0a286f4d747a4c6c603a7b225917293cbe1e9f Mon Sep 17 00:00:00 2001 From: Michael Kubacki Date: Sun, 5 Dec 2021 14:54:09 -0800 Subject: [PATCH] OvmfPkg: Apply uncrustify changes REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the OvmfPkg package Cc: Andrew Fish Cc: Leif Lindholm Cc: Michael D Kinney Signed-off-by: Michael Kubacki Reviewed-by: Andrew Fish --- OvmfPkg/8254TimerDxe/Timer.c | 44 +- OvmfPkg/8254TimerDxe/Timer.h | 13 +- OvmfPkg/8259InterruptControllerDxe/8259.c | 58 +- OvmfPkg/8259InterruptControllerDxe/8259.h | 10 +- OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h | 35 +- OvmfPkg/AcpiPlatformDxe/BootScript.c | 115 +- OvmfPkg/AcpiPlatformDxe/EntryPoint.c | 54 +- OvmfPkg/AcpiPlatformDxe/PciDecoding.c | 110 +- OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpi.c | 717 ++++--- .../AcpiPlatformDxe/QemuFwCfgAcpiPlatform.c | 4 +- .../BlobVerifierSevHashes.c | 122 +- OvmfPkg/AmdSev/SecretDxe/SecretDxe.c | 8 +- OvmfPkg/AmdSevDxe/AmdSevDxe.c | 23 +- OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.c | 85 +- OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.h | 34 +- OvmfPkg/Bhyve/AcpiPlatformDxe/Bhyve.c | 71 +- OvmfPkg/Bhyve/AcpiPlatformDxe/EntryPoint.c | 54 +- OvmfPkg/Bhyve/AcpiPlatformDxe/PciDecoding.c | 110 +- OvmfPkg/Bhyve/AcpiTables/Platform.h | 78 +- OvmfPkg/Bhyve/BhyveRfbDxe/ComponentName.c | 35 +- OvmfPkg/Bhyve/BhyveRfbDxe/Gop.h | 83 +- OvmfPkg/Bhyve/BhyveRfbDxe/GopDriver.c | 256 +-- OvmfPkg/Bhyve/BhyveRfbDxe/GopScreen.c | 224 +- OvmfPkg/Bhyve/BhyveRfbDxe/VbeShim.c | 141 +- OvmfPkg/Bhyve/BhyveRfbDxe/VbeShim.h | 1811 +++++++++-------- OvmfPkg/Bhyve/PlatformPei/AmdSev.c | 12 +- OvmfPkg/Bhyve/PlatformPei/ClearCache.c | 36 +- OvmfPkg/Bhyve/PlatformPei/Cmos.c | 13 +- OvmfPkg/Bhyve/PlatformPei/Cmos.h | 8 +- OvmfPkg/Bhyve/PlatformPei/Fv.c | 8 +- OvmfPkg/Bhyve/PlatformPei/MemDetect.c | 172 +- OvmfPkg/Bhyve/PlatformPei/Platform.c | 203 +- OvmfPkg/Bhyve/PlatformPei/Platform.h | 38 +- OvmfPkg/Bhyve/SmbiosPlatformDxe/Bhyve.c | 23 +- .../SmbiosPlatformDxe/SmbiosPlatformDxe.c | 91 +- .../SmbiosPlatformDxe/SmbiosPlatformDxe.h | 2 - .../CompatImageLoaderDxe.c | 67 +- OvmfPkg/CpuHotplugSmm/ApicId.h | 2 +- OvmfPkg/CpuHotplugSmm/CpuHotplug.c | 313 ++- .../CpuHotplugSmm/FirstSmiHandlerContext.h | 6 +- OvmfPkg/CpuHotplugSmm/QemuCpuhp.c | 205 +- OvmfPkg/CpuHotplugSmm/QemuCpuhp.h | 34 +- OvmfPkg/CpuHotplugSmm/Smbase.c | 93 +- OvmfPkg/CpuHotplugSmm/Smbase.h | 16 +- OvmfPkg/CpuS3DataDxe/CpuS3Data.c | 78 +- OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.c | 1799 ++++++++-------- OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.h | 164 +- .../Csm/BiosThunk/VideoDxe/ComponentName.c | 32 +- .../BiosThunk/VideoDxe/VesaBiosExtensions.h | 264 +-- OvmfPkg/Csm/CsmSupportLib/CsmSupportLib.c | 1 - OvmfPkg/Csm/CsmSupportLib/CsmSupportLib.h | 1 - OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c | 40 +- OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.h | 26 +- OvmfPkg/Csm/CsmSupportLib/LegacyPlatform.c | 553 ++--- OvmfPkg/Csm/CsmSupportLib/LegacyPlatform.h | 51 +- OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c | 192 +- OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h | 31 +- OvmfPkg/Csm/Include/Framework/BootScript.h | 11 +- OvmfPkg/Csm/Include/Framework/DxeCis.h | 115 +- .../Include/Framework/FirmwareVolumeHeader.h | 56 +- .../Framework/FirmwareVolumeImageFormat.h | 20 +- .../FrameworkInternalFormRepresentation.h | 409 ++-- OvmfPkg/Csm/Include/Framework/Hob.h | 8 +- OvmfPkg/Csm/Include/Framework/StatusCode.h | 60 +- OvmfPkg/Csm/Include/Guid/LegacyBios.h | 2 +- OvmfPkg/Csm/Include/Guid/LegacyDevOrder.h | 10 +- OvmfPkg/Csm/Include/Protocol/FirmwareVolume.h | 87 +- OvmfPkg/Csm/Include/Protocol/IsaAcpi.h | 54 +- OvmfPkg/Csm/Include/Protocol/IsaIo.h | 28 +- OvmfPkg/Csm/Include/Protocol/LegacyBios.h | 652 +++--- .../Csm/Include/Protocol/LegacyBiosPlatform.h | 194 +- .../Csm/Include/Protocol/LegacyInterrupt.h | 11 +- OvmfPkg/Csm/Include/Protocol/VgaMiniPort.h | 20 +- OvmfPkg/Csm/LegacyBiosDxe/LegacyBbs.c | 190 +- OvmfPkg/Csm/LegacyBiosDxe/LegacyBda.c | 26 +- OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c | 518 ++--- .../Csm/LegacyBiosDxe/LegacyBiosInterface.h | 779 ++++--- OvmfPkg/Csm/LegacyBiosDxe/LegacyBootSupport.c | 1190 +++++------ OvmfPkg/Csm/LegacyBiosDxe/LegacyCmos.c | 6 +- OvmfPkg/Csm/LegacyBiosDxe/LegacyIde.c | 119 +- OvmfPkg/Csm/LegacyBiosDxe/LegacyPci.c | 1220 +++++------ OvmfPkg/Csm/LegacyBiosDxe/LegacySio.c | 308 +-- OvmfPkg/Csm/LegacyBiosDxe/Thunk.c | 175 +- .../LegacyBootMaintUiLib/LegacyBootMaintUi.c | 851 ++++---- .../LegacyBootMaintUiLib/LegacyBootMaintUi.h | 115 +- .../LegacyBootMaintUiVfr.h | 42 +- .../LegacyBootManagerLib/InternalLegacyBm.h | 4 +- OvmfPkg/Csm/LegacyBootManagerLib/LegacyBm.c | 801 ++++---- OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.c | 234 ++- OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.h | 39 +- OvmfPkg/EnrollDefaultKeys/AuthData.c | 20 +- OvmfPkg/EnrollDefaultKeys/EnrollDefaultKeys.c | 414 ++-- OvmfPkg/EnrollDefaultKeys/EnrollDefaultKeys.h | 48 +- .../FdtPciHostBridgeLib/FdtPciHostBridgeLib.c | 422 ++-- .../FdtPciPcdProducerLib.c | 112 +- OvmfPkg/Fdt/HighMemDxe/HighMemDxe.c | 133 +- OvmfPkg/Fdt/VirtioFdtDxe/VirtioFdtDxe.c | 133 +- .../Guid/ConfidentialComputingSecret.h | 8 +- OvmfPkg/Include/Guid/MicrosoftVendor.h | 2 +- OvmfPkg/Include/Guid/OvmfPkKek1AppPrefix.h | 2 +- OvmfPkg/Include/Guid/OvmfPlatformConfig.h | 2 +- .../Include/Guid/QemuKernelLoaderFsMedia.h | 2 +- OvmfPkg/Include/Guid/QemuRamfb.h | 2 +- .../Guid/RootBridgesConnectedEventGroup.h | 2 +- OvmfPkg/Include/Guid/VirtioMmioTransport.h | 2 +- OvmfPkg/Include/Guid/XenBusRootDevice.h | 2 +- OvmfPkg/Include/Guid/XenInfo.h | 10 +- OvmfPkg/Include/IndustryStandard/Bhyve.h | 4 +- OvmfPkg/Include/IndustryStandard/E820.h | 17 +- .../Include/IndustryStandard/FusionMptScsi.h | 86 +- .../Include/IndustryStandard/I440FxPiix4.h | 30 +- .../IndustryStandard/InstructionParsing.h | 52 +- .../Include/IndustryStandard/LegacyVgaBios.h | 192 +- .../Include/IndustryStandard/LinuxBzimage.h | 247 +-- OvmfPkg/Include/IndustryStandard/LsiScsi.h | 120 +- OvmfPkg/Include/IndustryStandard/Microvm.h | 13 +- OvmfPkg/Include/IndustryStandard/PageTable.h | 188 +- OvmfPkg/Include/IndustryStandard/PvScsi.h | 218 +- OvmfPkg/Include/IndustryStandard/Q35MchIch9.h | 146 +- .../Include/IndustryStandard/QemuCpuHotplug.h | 24 +- OvmfPkg/Include/IndustryStandard/QemuFwCfg.h | 89 +- OvmfPkg/Include/IndustryStandard/QemuLoader.h | 46 +- .../QemuPciBridgeCapabilities.h | 20 +- OvmfPkg/Include/IndustryStandard/QemuTpm.h | 44 +- OvmfPkg/Include/IndustryStandard/Virtio095.h | 124 +- .../Include/IndustryStandard/Virtio095Net.h | 76 +- OvmfPkg/Include/IndustryStandard/Virtio10.h | 76 +- .../Include/IndustryStandard/Virtio10Net.h | 4 +- OvmfPkg/Include/IndustryStandard/VirtioBlk.h | 73 +- OvmfPkg/Include/IndustryStandard/VirtioFs.h | 316 +-- OvmfPkg/Include/IndustryStandard/VirtioGpu.h | 96 +- OvmfPkg/Include/IndustryStandard/VirtioScsi.h | 79 +- .../IndustryStandard/Xen/arch-arm/xen.h | 273 +-- .../Xen/arch-x86/hvm/start_info.h | 40 +- .../Xen/arch-x86/xen-x86_32.h | 5 +- .../Xen/arch-x86/xen-x86_64.h | 5 +- .../IndustryStandard/Xen/arch-x86/xen.h | 69 +- .../IndustryStandard/Xen/event_channel.h | 27 +- .../IndustryStandard/Xen/grant_table.h | 302 +-- .../Include/IndustryStandard/Xen/hvm/hvm_op.h | 13 +- .../Include/IndustryStandard/Xen/hvm/params.h | 60 +- .../Include/IndustryStandard/Xen/io/blkif.h | 116 +- .../Include/IndustryStandard/Xen/io/console.h | 10 +- .../IndustryStandard/Xen/io/protocols.h | 20 +- .../Include/IndustryStandard/Xen/io/ring.h | 49 +- .../Include/IndustryStandard/Xen/io/xenbus.h | 45 +- .../Include/IndustryStandard/Xen/io/xs_wire.h | 155 +- OvmfPkg/Include/IndustryStandard/Xen/memory.h | 77 +- .../Include/IndustryStandard/Xen/xen-compat.h | 12 +- OvmfPkg/Include/IndustryStandard/Xen/xen.h | 394 ++-- OvmfPkg/Include/Library/BlobVerifierLib.h | 6 +- OvmfPkg/Include/Library/LoadLinuxLib.h | 51 +- OvmfPkg/Include/Library/MemEncryptSevLib.h | 39 +- OvmfPkg/Include/Library/NvVarsFileLib.h | 5 +- OvmfPkg/Include/Library/PciCapLib.h | 79 +- OvmfPkg/Include/Library/PciCapPciIoLib.h | 8 +- OvmfPkg/Include/Library/PciCapPciSegmentLib.h | 16 +- .../Include/Library/PciHostBridgeUtilityLib.h | 63 +- OvmfPkg/Include/Library/PlatformFvbLib.h | 18 +- OvmfPkg/Include/Library/QemuBootOrderLib.h | 3 - OvmfPkg/Include/Library/QemuFwCfgLib.h | 22 +- OvmfPkg/Include/Library/QemuFwCfgS3Lib.h | 34 +- .../Library/QemuFwCfgSimpleParserLib.h | 34 +- OvmfPkg/Include/Library/QemuLoadImageLib.h | 6 +- .../Include/Library/SerializeVariablesLib.h | 51 +- OvmfPkg/Include/Library/VirtioLib.h | 60 +- OvmfPkg/Include/Library/VirtioMmioDeviceLib.h | 6 +- OvmfPkg/Include/Library/XenHypercallLib.h | 10 +- OvmfPkg/Include/Library/XenIoMmioLib.h | 7 +- OvmfPkg/Include/OvmfPlatforms.h | 8 +- OvmfPkg/Include/Pcd/CpuHotEjectData.h | 10 +- OvmfPkg/Include/Protocol/Legacy8259.h | 21 +- .../Protocol/OvmfLoadedX86LinuxKernel.h | 18 +- OvmfPkg/Include/Protocol/VirtioDevice.h | 74 +- OvmfPkg/Include/Protocol/XenBus.h | 78 +- OvmfPkg/Include/Protocol/XenIo.h | 4 +- .../Include/Register/QemuSmramSaveStateMap.h | 268 +-- OvmfPkg/Include/WorkArea.h | 21 +- .../IncompatiblePciDeviceSupport.c | 89 +- OvmfPkg/IoMmuDxe/AmdSevIoMmu.c | 355 ++-- OvmfPkg/IoMmuDxe/IoMmuDxe.c | 16 +- OvmfPkg/Library/AcpiTimerLib/AcpiTimerLib.c | 26 +- .../Library/AcpiTimerLib/BaseAcpiTimerLib.c | 22 +- .../AcpiTimerLib/BaseRomAcpiTimerLib.c | 32 +- .../Library/AcpiTimerLib/DxeAcpiTimerLib.c | 14 +- .../DxeMemEncryptSevLibInternal.c | 12 +- .../Ia32/MemEncryptSevLib.c | 24 +- .../PeiDxeMemEncryptSevLibInternal.c | 14 +- .../PeiMemEncryptSevLibInternal.c | 16 +- .../SecMemEncryptSevLibInternal.c | 14 +- .../X64/MemEncryptSevLib.c | 25 +- .../X64/PeiDxeVirtualMemory.c | 269 ++- .../X64/SecVirtualMemory.c | 22 +- .../BaseMemEncryptSevLib/X64/VirtualMemory.c | 34 +- .../BaseMemEncryptSevLib/X64/VirtualMemory.h | 37 +- OvmfPkg/Library/BasePciCapLib/BasePciCapLib.c | 368 ++-- OvmfPkg/Library/BasePciCapLib/BasePciCapLib.h | 22 +- .../BasePciCapPciSegmentLib.c | 78 +- .../BasePciCapPciSegmentLib.h | 16 +- OvmfPkg/Library/BhyveFwCtlLib/BhyveFwCtlLib.c | 188 +- .../BlobVerifierLibNull/BlobVerifierNull.c | 6 +- OvmfPkg/Library/DxePciLibI440FxQ35/PciLib.c | 195 +- .../EmuVariableFvbLib/EmuVariableFvbLib.c | 34 +- .../GenericQemuLoadImageLib.c | 170 +- OvmfPkg/Library/LoadLinuxLib/Linux.c | 527 ++--- OvmfPkg/Library/LoadLinuxLib/LinuxGdt.c | 47 +- OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.h | 13 +- OvmfPkg/Library/LockBoxLib/LockBoxDxe.c | 42 +- OvmfPkg/Library/LockBoxLib/LockBoxLib.c | 169 +- OvmfPkg/Library/LockBoxLib/LockBoxLib.h | 12 +- OvmfPkg/Library/NvVarsFileLib/FsAccess.c | 168 +- OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.c | 10 +- OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.h | 6 +- .../PciHostBridgeLib/PciHostBridgeLib.c | 75 +- .../PciHostBridgeLibScan/PciHostBridge.h | 4 +- .../PciHostBridgeLibScan/PciHostBridgeLib.c | 12 +- .../PciHostBridgeLibScan/ScanForRootBridges.c | 207 +- .../PciHostBridgeUtilityLib.c | 278 +-- .../PlatformBmPrintScLib/StatusCodeHandler.c | 176 +- .../PlatformBootManagerLib/BdsPlatform.c | 805 ++++---- .../PlatformBootManagerLib/BdsPlatform.h | 33 +- .../PlatformBootManagerLib/PlatformData.c | 68 +- .../PlatformBootManagerLib/QemuKernel.c | 21 +- .../PlatformBootManagerLibBhyve/BdsPlatform.c | 744 ++++--- .../PlatformBootManagerLibBhyve/BdsPlatform.h | 33 +- .../PlatformData.c | 56 +- .../PlatformBootManagerLibGrub/BdsPlatform.c | 685 ++++--- .../PlatformBootManagerLibGrub/BdsPlatform.h | 33 +- .../PlatformBootManagerLibGrub/PlatformData.c | 68 +- .../PlatformBootManagerLibGrub/QemuKernel.c | 21 +- .../PlatformDebugLibIoPort/DebugIoPortQemu.c | 2 +- .../Library/PlatformDebugLibIoPort/DebugLib.c | 70 +- .../PlatformDebugLibIoPort/DebugLibDetect.c | 7 +- .../PlatformFvbLibNull/PlatformFvbLibNull.c | 29 +- .../Library/PxeBcPcdProducerLib/PxeBcPcd.c | 22 +- .../QemuBootOrderLib/ExtraRootBusMap.c | 110 +- .../QemuBootOrderLib/ExtraRootBusMap.h | 10 +- .../QemuBootOrderLib/QemuBootOrderLib.c | 1054 +++++----- OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxe.c | 192 +- OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c | 62 +- .../QemuFwCfgLib/QemuFwCfgLibInternal.h | 7 +- .../Library/QemuFwCfgLib/QemuFwCfgLibMmio.c | 230 ++- OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgNull.c | 22 +- OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c | 38 +- OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgSec.c | 14 +- .../Library/QemuFwCfgS3Lib/QemuFwCfgS3Base.c | 8 +- .../QemuFwCfgS3Lib/QemuFwCfgS3BasePei.c | 23 +- .../Library/QemuFwCfgS3Lib/QemuFwCfgS3Dxe.c | 441 ++-- .../Library/QemuFwCfgS3Lib/QemuFwCfgS3Pei.c | 6 +- .../QemuFwCfgS3Lib/QemuFwCfgS3PeiDxe.c | 13 +- .../QemuFwCfgSimpleParser.c | 186 +- .../ResetSystemLib/BaseResetShutdown.c | 24 +- .../Library/ResetSystemLib/DxeResetShutdown.c | 28 +- .../ResetSystemLib/DxeResetSystemLibMicrovm.c | 7 +- .../Library/ResetSystemLib/ResetSystemLib.c | 41 +- .../ResetSystemLib/ResetSystemLibMicrovm.c | 74 +- .../SerializeVariablesLib.c | 366 ++-- .../SerializeVariablesLib.h | 13 +- .../SmbiosVersionLib/DetectSmbiosVersionLib.c | 113 +- .../SmmCpuFeaturesLib/SmmCpuFeaturesLib.c | 114 +- .../SmmCpuPlatformHookLibQemu.c | 14 +- .../DxeTcg2PhysicalPresenceLib.c | 2 +- .../DxeTcg2PhysicalPresenceLib.c | 252 +-- .../TlsAuthConfigLib/TlsAuthConfigLib.c | 142 +- .../UefiPciCapPciIoLib/UefiPciCapPciIoLib.c | 78 +- .../UefiPciCapPciIoLib/UefiPciCapPciIoLib.h | 8 +- OvmfPkg/Library/VirtioLib/VirtioLib.c | 153 +- .../VirtioMmioDeviceLib/VirtioMmioDevice.c | 117 +- .../VirtioMmioDeviceLib/VirtioMmioDevice.h | 77 +- .../VirtioMmioDeviceFunctions.c | 167 +- .../VmgExitLib/PeiDxeVmgExitVcHandler.c | 6 +- .../Library/VmgExitLib/SecVmgExitVcHandler.c | 6 +- OvmfPkg/Library/VmgExitLib/VmgExitLib.c | 51 +- OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c | 1193 +++++------ .../X86QemuLoadImageLib/X86QemuLoadImageLib.c | 249 ++- .../XenConsoleSerialPortLib.c | 52 +- .../Library/XenHypercallLib/X86XenHypercall.c | 18 +- .../Library/XenHypercallLib/XenHypercall.c | 45 +- OvmfPkg/Library/XenIoMmioLib/XenIoMmioLib.c | 93 +- .../Library/XenPlatformLib/XenPlatformLib.c | 11 +- .../XenRealTimeClockLib/XenRealTimeClockLib.c | 62 +- .../LinuxInitrdDynamicShellCommand.c | 298 ++- OvmfPkg/LsiScsiDxe/LsiScsi.c | 388 ++-- OvmfPkg/LsiScsiDxe/LsiScsi.h | 121 +- OvmfPkg/MptScsiDxe/MptScsi.c | 447 ++-- OvmfPkg/OvmfXenElfHeaderGenerator.c | 140 +- OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c | 333 +-- OvmfPkg/PlatformDxe/Platform.c | 437 ++-- OvmfPkg/PlatformDxe/Platform.h | 12 +- OvmfPkg/PlatformDxe/PlatformConfig.c | 45 +- OvmfPkg/PlatformDxe/PlatformConfig.h | 14 +- OvmfPkg/PlatformPei/AmdSev.c | 46 +- OvmfPkg/PlatformPei/ClearCache.c | 36 +- OvmfPkg/PlatformPei/Cmos.c | 13 +- OvmfPkg/PlatformPei/Cmos.h | 8 +- OvmfPkg/PlatformPei/FeatureControl.c | 54 +- OvmfPkg/PlatformPei/Fv.c | 8 +- OvmfPkg/PlatformPei/MemDetect.c | 354 ++-- OvmfPkg/PlatformPei/MemTypeInfo.c | 78 +- OvmfPkg/PlatformPei/Platform.c | 242 ++- OvmfPkg/PlatformPei/Platform.h | 36 +- OvmfPkg/PvScsiDxe/PvScsi.c | 399 ++-- OvmfPkg/PvScsiDxe/PvScsi.h | 46 +- .../QemuFlashFvbServicesRuntimeDxe/FvbInfo.c | 43 +- .../FwBlockService.c | 405 ++-- .../FwBlockService.h | 121 +- .../FwBlockServiceDxe.c | 78 +- .../FwBlockServiceSmm.c | 10 +- .../QemuFlash.c | 90 +- .../QemuFlash.h | 35 +- .../QemuFlashDxe.c | 24 +- .../QemuFlashSmm.c | 12 +- .../QemuKernelLoaderFsDxe.c | 363 ++-- OvmfPkg/QemuRamfbDxe/QemuRamfb.c | 191 +- OvmfPkg/QemuVideoDxe/ComponentName.c | 27 +- OvmfPkg/QemuVideoDxe/Driver.c | 605 +++--- OvmfPkg/QemuVideoDxe/Gop.c | 198 +- OvmfPkg/QemuVideoDxe/Initialize.c | 206 +- OvmfPkg/QemuVideoDxe/Qemu.h | 236 ++- OvmfPkg/QemuVideoDxe/VbeShim.c | 116 +- OvmfPkg/QemuVideoDxe/VbeShim.h | 1389 ++++++------- OvmfPkg/SataControllerDxe/ComponentName.c | 40 +- OvmfPkg/SataControllerDxe/SataController.c | 231 ++- OvmfPkg/SataControllerDxe/SataController.h | 129 +- OvmfPkg/Sec/SecMain.c | 390 ++-- OvmfPkg/SioBusDxe/ComponentName.c | 27 +- OvmfPkg/SioBusDxe/SioBusDxe.c | 129 +- OvmfPkg/SioBusDxe/SioBusDxe.h | 45 +- OvmfPkg/SioBusDxe/SioService.c | 99 +- OvmfPkg/SioBusDxe/SioService.h | 39 +- OvmfPkg/SmbiosPlatformDxe/Qemu.c | 23 +- OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c | 67 +- OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.h | 2 +- OvmfPkg/SmbiosPlatformDxe/X86Xen.c | 37 +- OvmfPkg/SmbiosPlatformDxe/Xen.c | 6 +- OvmfPkg/SmmAccess/SmmAccess2Dxe.c | 23 +- OvmfPkg/SmmAccess/SmmAccessPei.c | 168 +- OvmfPkg/SmmAccess/SmramInternal.c | 63 +- OvmfPkg/SmmAccess/SmramInternal.h | 26 +- OvmfPkg/SmmControl2Dxe/SmiFeatures.c | 154 +- OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c | 163 +- OvmfPkg/Tcg/Tcg2Config/Tcg2ConfigPeim.c | 11 +- OvmfPkg/Tcg/Tcg2Config/Tpm12Support.c | 14 +- .../TpmMmioSevDecryptPeim.c | 19 +- OvmfPkg/Virtio10Dxe/Virtio10.c | 732 ++++--- OvmfPkg/Virtio10Dxe/Virtio10.h | 28 +- OvmfPkg/VirtioBlkDxe/VirtioBlk.c | 410 ++-- OvmfPkg/VirtioBlkDxe/VirtioBlk.h | 87 +- OvmfPkg/VirtioFsDxe/DriverBinding.c | 166 +- OvmfPkg/VirtioFsDxe/FuseFlush.c | 45 +- OvmfPkg/VirtioFsDxe/FuseForget.c | 23 +- OvmfPkg/VirtioFsDxe/FuseFsync.c | 39 +- OvmfPkg/VirtioFsDxe/FuseGetAttr.c | 44 +- OvmfPkg/VirtioFsDxe/FuseInit.c | 48 +- OvmfPkg/VirtioFsDxe/FuseLookup.c | 37 +- OvmfPkg/VirtioFsDxe/FuseMkDir.c | 57 +- OvmfPkg/VirtioFsDxe/FuseOpen.c | 55 +- OvmfPkg/VirtioFsDxe/FuseOpenDir.c | 44 +- OvmfPkg/VirtioFsDxe/FuseOpenOrCreate.c | 69 +- OvmfPkg/VirtioFsDxe/FuseRead.c | 58 +- OvmfPkg/VirtioFsDxe/FuseRelease.c | 39 +- OvmfPkg/VirtioFsDxe/FuseRename.c | 52 +- OvmfPkg/VirtioFsDxe/FuseSetAttr.c | 60 +- OvmfPkg/VirtioFsDxe/FuseStatFs.c | 42 +- OvmfPkg/VirtioFsDxe/FuseUnlink.c | 37 +- OvmfPkg/VirtioFsDxe/FuseWrite.c | 57 +- OvmfPkg/VirtioFsDxe/Helpers.c | 1031 +++++----- OvmfPkg/VirtioFsDxe/SimpleFsClose.c | 30 +- OvmfPkg/VirtioFsDxe/SimpleFsDelete.c | 22 +- OvmfPkg/VirtioFsDxe/SimpleFsFlush.c | 23 +- OvmfPkg/VirtioFsDxe/SimpleFsGetInfo.c | 111 +- OvmfPkg/VirtioFsDxe/SimpleFsGetPosition.c | 7 +- OvmfPkg/VirtioFsDxe/SimpleFsOpen.c | 227 ++- OvmfPkg/VirtioFsDxe/SimpleFsOpenVolume.c | 21 +- OvmfPkg/VirtioFsDxe/SimpleFsRead.c | 155 +- OvmfPkg/VirtioFsDxe/SimpleFsSetInfo.c | 243 ++- OvmfPkg/VirtioFsDxe/SimpleFsSetPosition.c | 17 +- OvmfPkg/VirtioFsDxe/SimpleFsWrite.c | 41 +- OvmfPkg/VirtioFsDxe/VirtioFsDxe.h | 356 ++-- OvmfPkg/VirtioGpuDxe/Commands.c | 202 +- OvmfPkg/VirtioGpuDxe/DriverBinding.c | 688 ++++--- OvmfPkg/VirtioGpuDxe/Gop.c | 360 ++-- OvmfPkg/VirtioGpuDxe/VirtioGpu.h | 139 +- OvmfPkg/VirtioNetDxe/ComponentName.c | 39 +- OvmfPkg/VirtioNetDxe/DriverBinding.c | 294 +-- OvmfPkg/VirtioNetDxe/EntryPoint.c | 5 +- OvmfPkg/VirtioNetDxe/Events.c | 15 +- OvmfPkg/VirtioNetDxe/SnpGetStatus.c | 56 +- OvmfPkg/VirtioNetDxe/SnpInitialize.c | 115 +- OvmfPkg/VirtioNetDxe/SnpMcastIpToMac.c | 46 +- OvmfPkg/VirtioNetDxe/SnpReceive.c | 79 +- OvmfPkg/VirtioNetDxe/SnpReceiveFilters.c | 43 +- OvmfPkg/VirtioNetDxe/SnpSharedHelpers.c | 101 +- OvmfPkg/VirtioNetDxe/SnpShutdown.c | 29 +- OvmfPkg/VirtioNetDxe/SnpStart.c | 16 +- OvmfPkg/VirtioNetDxe/SnpStop.c | 16 +- OvmfPkg/VirtioNetDxe/SnpTransmit.c | 64 +- OvmfPkg/VirtioNetDxe/SnpUnsupported.c | 35 +- OvmfPkg/VirtioNetDxe/VirtioNet.h | 188 +- OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.c | 231 ++- OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h | 108 +- .../VirtioPciDeviceDxe/VirtioPciFunctions.c | 165 +- OvmfPkg/VirtioRngDxe/VirtioRng.c | 225 +- OvmfPkg/VirtioRngDxe/VirtioRng.h | 2 +- OvmfPkg/VirtioScsiDxe/VirtioScsi.c | 525 ++--- OvmfPkg/VirtioScsiDxe/VirtioScsi.h | 120 +- OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.c | 5 +- OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.h | 5 +- OvmfPkg/XenAcpiPlatformDxe/EntryPoint.c | 11 +- OvmfPkg/XenAcpiPlatformDxe/Xen.c | 138 +- OvmfPkg/XenBusDxe/ComponentName.c | 10 +- OvmfPkg/XenBusDxe/EventChannel.c | 42 +- OvmfPkg/XenBusDxe/EventChannel.h | 19 +- OvmfPkg/XenBusDxe/GrantTable.c | 98 +- OvmfPkg/XenBusDxe/GrantTable.h | 11 +- OvmfPkg/XenBusDxe/Helpers.c | 4 +- OvmfPkg/XenBusDxe/TestAndClearBit.c | 15 +- OvmfPkg/XenBusDxe/XenBus.c | 225 +- OvmfPkg/XenBusDxe/XenBus.h | 12 +- OvmfPkg/XenBusDxe/XenBusDxe.c | 194 +- OvmfPkg/XenBusDxe/XenBusDxe.h | 56 +- OvmfPkg/XenBusDxe/XenStore.c | 736 ++++--- OvmfPkg/XenBusDxe/XenStore.h | 132 +- OvmfPkg/XenIoPciDxe/XenIoPciDxe.c | 136 +- OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c | 15 +- OvmfPkg/XenPlatformPei/AmdSev.c | 6 +- OvmfPkg/XenPlatformPei/ClearCache.c | 36 +- OvmfPkg/XenPlatformPei/Cmos.c | 13 +- OvmfPkg/XenPlatformPei/Cmos.h | 8 +- OvmfPkg/XenPlatformPei/Fv.c | 4 +- OvmfPkg/XenPlatformPei/MemDetect.c | 102 +- OvmfPkg/XenPlatformPei/Platform.c | 161 +- OvmfPkg/XenPlatformPei/Platform.h | 40 +- OvmfPkg/XenPlatformPei/Xen.c | 346 ++-- OvmfPkg/XenPlatformPei/Xen.h | 16 +- OvmfPkg/XenPvBlkDxe/BlockFront.c | 424 ++-- OvmfPkg/XenPvBlkDxe/BlockFront.h | 82 +- OvmfPkg/XenPvBlkDxe/BlockIo.c | 134 +- OvmfPkg/XenPvBlkDxe/BlockIo.h | 26 +- OvmfPkg/XenPvBlkDxe/ComponentName.c | 10 +- OvmfPkg/XenPvBlkDxe/DriverBinding.h | 1 - OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.c | 129 +- OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.h | 17 +- OvmfPkg/XenTimerDxe/XenTimerDxe.c | 57 +- OvmfPkg/XenTimerDxe/XenTimerDxe.h | 9 +- 445 files changed, 31091 insertions(+), 26566 deletions(-) diff --git a/OvmfPkg/8254TimerDxe/Timer.c b/OvmfPkg/8254TimerDxe/Timer.c index fd1691beb3..e49a438b44 100644 --- a/OvmfPkg/8254TimerDxe/Timer.c +++ b/OvmfPkg/8254TimerDxe/Timer.c @@ -11,12 +11,12 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // // The handle onto which the Timer Architectural Protocol will be installed // -EFI_HANDLE mTimerHandle = NULL; +EFI_HANDLE mTimerHandle = NULL; // // The Timer Architectural Protocol that this driver produces // -EFI_TIMER_ARCH_PROTOCOL mTimer = { +EFI_TIMER_ARCH_PROTOCOL mTimer = { TimerDriverRegisterHandler, TimerDriverSetTimerPeriod, TimerDriverGetTimerPeriod, @@ -26,7 +26,7 @@ EFI_TIMER_ARCH_PROTOCOL mTimer = { // // Pointer to the CPU Architectural Protocol instance // -EFI_CPU_ARCH_PROTOCOL *mCpu; +EFI_CPU_ARCH_PROTOCOL *mCpu; // // Pointer to the Legacy 8259 Protocol instance @@ -37,16 +37,17 @@ EFI_LEGACY_8259_PROTOCOL *mLegacy8259; // The notification function to call on every timer interrupt. // A bug in the compiler prevents us from initializing this here. // -EFI_TIMER_NOTIFY mTimerNotifyFunction; +EFI_TIMER_NOTIFY mTimerNotifyFunction; // // The current period of the timer interrupt // -volatile UINT64 mTimerPeriod = 0; +volatile UINT64 mTimerPeriod = 0; // // Worker Functions // + /** Sets the counter value for Timer #0 in a legacy 8254 timer. @@ -71,11 +72,11 @@ SetPitCount ( VOID EFIAPI TimerInterruptHandler ( - IN EFI_EXCEPTION_TYPE InterruptType, - IN EFI_SYSTEM_CONTEXT SystemContext + IN EFI_EXCEPTION_TYPE InterruptType, + IN EFI_SYSTEM_CONTEXT SystemContext ) { - EFI_TPL OriginalTPL; + EFI_TPL OriginalTPL; OriginalTPL = gBS->RaiseTPL (TPL_HIGH_LEVEL); @@ -133,11 +134,11 @@ TimerDriverRegisterHandler ( // // Check for invalid parameters // - if (NotifyFunction == NULL && mTimerNotifyFunction == NULL) { + if ((NotifyFunction == NULL) && (mTimerNotifyFunction == NULL)) { return EFI_INVALID_PARAMETER; } - if (NotifyFunction != NULL && mTimerNotifyFunction != NULL) { + if ((NotifyFunction != NULL) && (mTimerNotifyFunction != NULL)) { return EFI_ALREADY_STARTED; } @@ -203,29 +204,30 @@ TimerDriverSetTimerPeriod ( // mLegacy8259->DisableIrq (mLegacy8259, Efi8259Irq0); } else { - // // Convert TimerPeriod into 8254 counts // - TimerCount = DivU64x32 (MultU64x32 (119318, (UINT32) TimerPeriod) + 500000, 1000000); + TimerCount = DivU64x32 (MultU64x32 (119318, (UINT32)TimerPeriod) + 500000, 1000000); // // Check for overflow // if (TimerCount >= 65536) { - TimerCount = 0; + TimerCount = 0; TimerPeriod = MAX_TIMER_TICK_DURATION; } + // // Program the 8254 timer with the new count value // - SetPitCount ((UINT16) TimerCount); + SetPitCount ((UINT16)TimerCount); // // Enable timer interrupt // mLegacy8259->EnableIrq (mLegacy8259, Efi8259Irq0, FALSE); } + // // Save the new timer period // @@ -253,8 +255,8 @@ TimerDriverSetTimerPeriod ( EFI_STATUS EFIAPI TimerDriverGetTimerPeriod ( - IN EFI_TIMER_ARCH_PROTOCOL *This, - OUT UINT64 *TimerPeriod + IN EFI_TIMER_ARCH_PROTOCOL *This, + OUT UINT64 *TimerPeriod ) { if (TimerPeriod == NULL) { @@ -353,13 +355,13 @@ TimerDriverInitialize ( // // Find the CPU architectural protocol. // - Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **) &mCpu); + Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)&mCpu); ASSERT_EFI_ERROR (Status); // // Find the Legacy8259 protocol. // - Status = gBS->LocateProtocol (&gEfiLegacy8259ProtocolGuid, NULL, (VOID **) &mLegacy8259); + Status = gBS->LocateProtocol (&gEfiLegacy8259ProtocolGuid, NULL, (VOID **)&mLegacy8259); ASSERT_EFI_ERROR (Status); // @@ -372,7 +374,7 @@ TimerDriverInitialize ( // Get the interrupt vector number corresponding to IRQ0 from the 8259 driver // TimerVector = 0; - Status = mLegacy8259->GetVector (mLegacy8259, Efi8259Irq0, (UINT8 *) &TimerVector); + Status = mLegacy8259->GetVector (mLegacy8259, Efi8259Irq0, (UINT8 *)&TimerVector); ASSERT_EFI_ERROR (Status); // @@ -392,11 +394,11 @@ TimerDriverInitialize ( // Status = gBS->InstallMultipleProtocolInterfaces ( &mTimerHandle, - &gEfiTimerArchProtocolGuid, &mTimer, + &gEfiTimerArchProtocolGuid, + &mTimer, NULL ); ASSERT_EFI_ERROR (Status); return Status; } - diff --git a/OvmfPkg/8254TimerDxe/Timer.h b/OvmfPkg/8254TimerDxe/Timer.h index 4c4b720d50..b19ef3c1f9 100644 --- a/OvmfPkg/8254TimerDxe/Timer.h +++ b/OvmfPkg/8254TimerDxe/Timer.h @@ -32,17 +32,18 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // // The maximum tick duration for 8254 timer // -#define MAX_TIMER_TICK_DURATION 549254 +#define MAX_TIMER_TICK_DURATION 549254 // // The default timer tick duration is set to 10 ms = 100000 100 ns units // -#define DEFAULT_TIMER_TICK_DURATION 100000 -#define TIMER_CONTROL_PORT 0x43 -#define TIMER0_COUNT_PORT 0x40 +#define DEFAULT_TIMER_TICK_DURATION 100000 +#define TIMER_CONTROL_PORT 0x43 +#define TIMER0_COUNT_PORT 0x40 // // Function Prototypes // + /** Initialize the Timer Architectural Protocol driver @@ -153,8 +154,8 @@ TimerDriverSetTimerPeriod ( EFI_STATUS EFIAPI TimerDriverGetTimerPeriod ( - IN EFI_TIMER_ARCH_PROTOCOL *This, - OUT UINT64 *TimerPeriod + IN EFI_TIMER_ARCH_PROTOCOL *This, + OUT UINT64 *TimerPeriod ) ; diff --git a/OvmfPkg/8259InterruptControllerDxe/8259.c b/OvmfPkg/8259InterruptControllerDxe/8259.c index 7d51ff259f..e123ac2d96 100644 --- a/OvmfPkg/8259InterruptControllerDxe/8259.c +++ b/OvmfPkg/8259InterruptControllerDxe/8259.c @@ -26,15 +26,15 @@ EFI_LEGACY_8259_PROTOCOL mInterrupt8259 = { // // Global for the handle that the Legacy 8259 Protocol is installed // -EFI_HANDLE m8259Handle = NULL; +EFI_HANDLE m8259Handle = NULL; -UINT8 mMasterBase = 0xff; -UINT8 mSlaveBase = 0xff; -EFI_8259_MODE mMode = Efi8259ProtectedMode; -UINT16 mProtectedModeMask = 0xffff; -UINT16 mLegacyModeMask; -UINT16 mProtectedModeEdgeLevel = 0x0000; -UINT16 mLegacyModeEdgeLevel; +UINT8 mMasterBase = 0xff; +UINT8 mSlaveBase = 0xff; +EFI_8259_MODE mMode = Efi8259ProtectedMode; +UINT16 mProtectedModeMask = 0xffff; +UINT16 mLegacyModeMask; +UINT16 mProtectedModeEdgeLevel = 0x0000; +UINT16 mLegacyModeEdgeLevel; // // Worker Functions @@ -55,10 +55,10 @@ Interrupt8259WriteMask ( IN UINT16 EdgeLevel ) { - IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, (UINT8) Mask); - IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, (UINT8) (Mask >> 8)); - IoWrite8 (LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_MASTER, (UINT8) EdgeLevel); - IoWrite8 (LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_SLAVE, (UINT8) (EdgeLevel >> 8)); + IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, (UINT8)Mask); + IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, (UINT8)(Mask >> 8)); + IoWrite8 (LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_MASTER, (UINT8)EdgeLevel); + IoWrite8 (LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_SLAVE, (UINT8)(EdgeLevel >> 8)); } /** @@ -83,14 +83,14 @@ Interrupt8259ReadMask ( MasterValue = IoRead8 (LEGACY_8259_MASK_REGISTER_MASTER); SlaveValue = IoRead8 (LEGACY_8259_MASK_REGISTER_SLAVE); - *Mask = (UINT16) (MasterValue | (SlaveValue << 8)); + *Mask = (UINT16)(MasterValue | (SlaveValue << 8)); } if (EdgeLevel != NULL) { MasterValue = IoRead8 (LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_MASTER); SlaveValue = IoRead8 (LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_SLAVE); - *EdgeLevel = (UINT16) (MasterValue | (SlaveValue << 8)); + *EdgeLevel = (UINT16)(MasterValue | (SlaveValue << 8)); } } @@ -117,8 +117,8 @@ Interrupt8259SetVectorBase ( IN UINT8 SlaveBase ) { - UINT8 Mask; - EFI_TPL OriginalTpl; + UINT8 Mask; + EFI_TPL OriginalTpl; OriginalTpl = gBS->RaiseTPL (TPL_HIGH_LEVEL); // @@ -416,9 +416,9 @@ Interrupt8259GetVector ( } if (Irq <= Efi8259Irq7) { - *Vector = (UINT8) (mMasterBase + Irq); + *Vector = (UINT8)(mMasterBase + Irq); } else { - *Vector = (UINT8) (mSlaveBase + (Irq - Efi8259Irq8)); + *Vector = (UINT8)(mSlaveBase + (Irq - Efi8259Irq8)); } return EFI_SUCCESS; @@ -447,11 +447,11 @@ Interrupt8259EnableIrq ( return EFI_INVALID_PARAMETER; } - mProtectedModeMask = (UINT16) (mProtectedModeMask & ~(1 << Irq)); + mProtectedModeMask = (UINT16)(mProtectedModeMask & ~(1 << Irq)); if (LevelTriggered) { - mProtectedModeEdgeLevel = (UINT16) (mProtectedModeEdgeLevel | (1 << Irq)); + mProtectedModeEdgeLevel = (UINT16)(mProtectedModeEdgeLevel | (1 << Irq)); } else { - mProtectedModeEdgeLevel = (UINT16) (mProtectedModeEdgeLevel & ~(1 << Irq)); + mProtectedModeEdgeLevel = (UINT16)(mProtectedModeEdgeLevel & ~(1 << Irq)); } Interrupt8259WriteMask (mProtectedModeMask, mProtectedModeEdgeLevel); @@ -480,9 +480,9 @@ Interrupt8259DisableIrq ( return EFI_INVALID_PARAMETER; } - mProtectedModeMask = (UINT16) (mProtectedModeMask | (1 << Irq)); + mProtectedModeMask = (UINT16)(mProtectedModeMask | (1 << Irq)); - mProtectedModeEdgeLevel = (UINT16) (mProtectedModeEdgeLevel & ~(1 << Irq)); + mProtectedModeEdgeLevel = (UINT16)(mProtectedModeEdgeLevel & ~(1 << Irq)); Interrupt8259WriteMask (mProtectedModeMask, mProtectedModeEdgeLevel); @@ -507,14 +507,14 @@ Interrupt8259GetInterruptLine ( OUT UINT8 *Vector ) { - EFI_PCI_IO_PROTOCOL *PciIo; - UINT8 InterruptLine; - EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT8 InterruptLine; + EFI_STATUS Status; Status = gBS->HandleProtocol ( PciHandle, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); if (EFI_ERROR (Status)) { return EFI_INVALID_PARAMETER; @@ -583,8 +583,8 @@ Install8259 ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - EFI_8259_IRQ Irq; + EFI_STATUS Status; + EFI_8259_IRQ Irq; // // Initialze mask values from PCDs diff --git a/OvmfPkg/8259InterruptControllerDxe/8259.h b/OvmfPkg/8259InterruptControllerDxe/8259.h index aac82e92e7..066552ca93 100644 --- a/OvmfPkg/8259InterruptControllerDxe/8259.h +++ b/OvmfPkg/8259InterruptControllerDxe/8259.h @@ -22,11 +22,11 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // 8259 Hardware definitions -#define LEGACY_MODE_BASE_VECTOR_MASTER 0x08 -#define LEGACY_MODE_BASE_VECTOR_SLAVE 0x70 +#define LEGACY_MODE_BASE_VECTOR_MASTER 0x08 +#define LEGACY_MODE_BASE_VECTOR_SLAVE 0x70 -#define PROTECTED_MODE_BASE_VECTOR_MASTER 0x68 -#define PROTECTED_MODE_BASE_VECTOR_SLAVE 0x70 +#define PROTECTED_MODE_BASE_VECTOR_MASTER 0x68 +#define PROTECTED_MODE_BASE_VECTOR_SLAVE 0x70 #define LEGACY_8259_CONTROL_REGISTER_MASTER 0x20 #define LEGACY_8259_MASK_REGISTER_MASTER 0x21 @@ -35,7 +35,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #define LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_MASTER 0x4D0 #define LEGACY_8259_EDGE_LEVEL_TRIGGERED_REGISTER_SLAVE 0x4D1 -#define LEGACY_8259_EOI 0x20 +#define LEGACY_8259_EOI 0x20 // Protocol Function Prototypes diff --git a/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h b/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h index bd4c26f07f..1ccca0a368 100644 --- a/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h +++ b/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h @@ -13,8 +13,8 @@ #include // EFI_PCI_IO_PROTOCOL typedef struct { - EFI_PCI_IO_PROTOCOL *PciIo; - UINT64 PciAttributes; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT64 PciAttributes; } ORIGINAL_ATTRIBUTES; typedef struct S3_CONTEXT S3_CONTEXT; @@ -22,51 +22,50 @@ typedef struct S3_CONTEXT S3_CONTEXT; EFI_STATUS EFIAPI InstallQemuFwCfgTables ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol + IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol ); EFI_STATUS EFIAPI InstallAcpiTables ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable + IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable ); VOID EnablePciDecoding ( - OUT ORIGINAL_ATTRIBUTES **OriginalAttributes, - OUT UINTN *Count + OUT ORIGINAL_ATTRIBUTES **OriginalAttributes, + OUT UINTN *Count ); VOID RestorePciDecoding ( - IN ORIGINAL_ATTRIBUTES *OriginalAttributes, - IN UINTN Count + IN ORIGINAL_ATTRIBUTES *OriginalAttributes, + IN UINTN Count ); EFI_STATUS AllocateS3Context ( - OUT S3_CONTEXT **S3Context, - IN UINTN WritePointerCount + OUT S3_CONTEXT **S3Context, + IN UINTN WritePointerCount ); VOID ReleaseS3Context ( - IN S3_CONTEXT *S3Context + IN S3_CONTEXT *S3Context ); EFI_STATUS SaveCondensedWritePointerToS3Context ( - IN OUT S3_CONTEXT *S3Context, - IN UINT16 PointerItem, - IN UINT8 PointerSize, - IN UINT32 PointerOffset, - IN UINT64 PointerValue + IN OUT S3_CONTEXT *S3Context, + IN UINT16 PointerItem, + IN UINT8 PointerSize, + IN UINT32 PointerOffset, + IN UINT64 PointerValue ); EFI_STATUS TransferS3ContextToBootScript ( - IN S3_CONTEXT *S3Context + IN S3_CONTEXT *S3Context ); #endif - diff --git a/OvmfPkg/AcpiPlatformDxe/BootScript.c b/OvmfPkg/AcpiPlatformDxe/BootScript.c index efcf2e3ba5..08d0f41bda 100644 --- a/OvmfPkg/AcpiPlatformDxe/BootScript.c +++ b/OvmfPkg/AcpiPlatformDxe/BootScript.c @@ -14,20 +14,18 @@ #include "AcpiPlatform.h" - // // Condensed structure for capturing the fw_cfg operations -- select, skip, // write -- inherent in executing a QEMU_LOADER_WRITE_POINTER command. // typedef struct { - UINT16 PointerItem; // resolved from QEMU_LOADER_WRITE_POINTER.PointerFile - UINT8 PointerSize; // copied as-is from QEMU_LOADER_WRITE_POINTER - UINT32 PointerOffset; // copied as-is from QEMU_LOADER_WRITE_POINTER - UINT64 PointerValue; // resolved from QEMU_LOADER_WRITE_POINTER.PointeeFile - // and QEMU_LOADER_WRITE_POINTER.PointeeOffset + UINT16 PointerItem; // resolved from QEMU_LOADER_WRITE_POINTER.PointerFile + UINT8 PointerSize; // copied as-is from QEMU_LOADER_WRITE_POINTER + UINT32 PointerOffset; // copied as-is from QEMU_LOADER_WRITE_POINTER + UINT64 PointerValue; // resolved from QEMU_LOADER_WRITE_POINTER.PointeeFile + // and QEMU_LOADER_WRITE_POINTER.PointeeOffset } CONDENSED_WRITE_POINTER; - // // Context structure to accumulate CONDENSED_WRITE_POINTER objects from // QEMU_LOADER_WRITE_POINTER commands. @@ -36,27 +34,25 @@ typedef struct { // context structure is released, all pointed-to objects must be released too. // struct S3_CONTEXT { - CONDENSED_WRITE_POINTER *WritePointers; // one array element per processed - // QEMU_LOADER_WRITE_POINTER - // command - UINTN Allocated; // number of elements allocated for - // WritePointers - UINTN Used; // number of elements populated in - // WritePointers + CONDENSED_WRITE_POINTER *WritePointers; // one array element per processed + // QEMU_LOADER_WRITE_POINTER + // command + UINTN Allocated; // number of elements allocated for + // WritePointers + UINTN Used; // number of elements populated in + // WritePointers }; - // // Scratch buffer, allocated in EfiReservedMemoryType type memory, for the ACPI // S3 Boot Script opcodes to work on. // #pragma pack (1) typedef union { - UINT64 PointerValue; // filled in from CONDENSED_WRITE_POINTER.PointerValue + UINT64 PointerValue; // filled in from CONDENSED_WRITE_POINTER.PointerValue } SCRATCH_BUFFER; #pragma pack () - /** Allocate an S3_CONTEXT object. @@ -75,12 +71,12 @@ typedef union { **/ EFI_STATUS AllocateS3Context ( - OUT S3_CONTEXT **S3Context, - IN UINTN WritePointerCount + OUT S3_CONTEXT **S3Context, + IN UINTN WritePointerCount ) { - EFI_STATUS Status; - S3_CONTEXT *Context; + EFI_STATUS Status; + S3_CONTEXT *Context; if (WritePointerCount == 0) { return EFI_INVALID_PARAMETER; @@ -91,15 +87,17 @@ AllocateS3Context ( return EFI_OUT_OF_RESOURCES; } - Context->WritePointers = AllocatePool (WritePointerCount * - sizeof *Context->WritePointers); + Context->WritePointers = AllocatePool ( + WritePointerCount * + sizeof *Context->WritePointers + ); if (Context->WritePointers == NULL) { Status = EFI_OUT_OF_RESOURCES; goto FreeContext; } Context->Allocated = WritePointerCount; - *S3Context = Context; + *S3Context = Context; return EFI_SUCCESS; FreeContext: @@ -108,7 +106,6 @@ FreeContext: return Status; } - /** Release an S3_CONTEXT object. @@ -116,14 +113,13 @@ FreeContext: **/ VOID ReleaseS3Context ( - IN S3_CONTEXT *S3Context + IN S3_CONTEXT *S3Context ) { FreePool (S3Context->WritePointers); FreePool (S3Context); } - /** Save the information necessary to replicate a QEMU_LOADER_WRITE_POINTER command during S3 resume, in condensed format. @@ -158,31 +154,38 @@ ReleaseS3Context ( **/ EFI_STATUS SaveCondensedWritePointerToS3Context ( - IN OUT S3_CONTEXT *S3Context, - IN UINT16 PointerItem, - IN UINT8 PointerSize, - IN UINT32 PointerOffset, - IN UINT64 PointerValue + IN OUT S3_CONTEXT *S3Context, + IN UINT16 PointerItem, + IN UINT8 PointerSize, + IN UINT32 PointerOffset, + IN UINT64 PointerValue ) { - CONDENSED_WRITE_POINTER *Condensed; + CONDENSED_WRITE_POINTER *Condensed; if (S3Context->Used == S3Context->Allocated) { return EFI_OUT_OF_RESOURCES; } - Condensed = S3Context->WritePointers + S3Context->Used; + + Condensed = S3Context->WritePointers + S3Context->Used; Condensed->PointerItem = PointerItem; Condensed->PointerSize = PointerSize; Condensed->PointerOffset = PointerOffset; Condensed->PointerValue = PointerValue; - DEBUG ((DEBUG_VERBOSE, "%a: 0x%04x/[0x%08x+%d] := 0x%Lx (%Lu)\n", - __FUNCTION__, PointerItem, PointerOffset, PointerSize, PointerValue, - (UINT64)S3Context->Used)); + DEBUG (( + DEBUG_VERBOSE, + "%a: 0x%04x/[0x%08x+%d] := 0x%Lx (%Lu)\n", + __FUNCTION__, + PointerItem, + PointerOffset, + PointerSize, + PointerValue, + (UINT64)S3Context->Used + )); ++S3Context->Used; return EFI_SUCCESS; } - /** FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION provided to QemuFwCfgS3Lib. **/ @@ -190,31 +193,33 @@ STATIC VOID EFIAPI AppendFwCfgBootScript ( - IN OUT VOID *Context OPTIONAL, - IN OUT VOID *ExternalScratchBuffer + IN OUT VOID *Context OPTIONAL, + IN OUT VOID *ExternalScratchBuffer ) { - S3_CONTEXT *S3Context; - SCRATCH_BUFFER *ScratchBuffer; - UINTN Index; + S3_CONTEXT *S3Context; + SCRATCH_BUFFER *ScratchBuffer; + UINTN Index; - S3Context = Context; + S3Context = Context; ScratchBuffer = ExternalScratchBuffer; for (Index = 0; Index < S3Context->Used; ++Index) { - CONST CONDENSED_WRITE_POINTER *Condensed; - RETURN_STATUS Status; + CONST CONDENSED_WRITE_POINTER *Condensed; + RETURN_STATUS Status; Condensed = &S3Context->WritePointers[Index]; - Status = QemuFwCfgS3ScriptSkipBytes (Condensed->PointerItem, - Condensed->PointerOffset); + Status = QemuFwCfgS3ScriptSkipBytes ( + Condensed->PointerItem, + Condensed->PointerOffset + ); if (RETURN_ERROR (Status)) { goto FatalError; } ScratchBuffer->PointerValue = Condensed->PointerValue; - Status = QemuFwCfgS3ScriptWriteBytes (-1, Condensed->PointerSize); + Status = QemuFwCfgS3ScriptWriteBytes (-1, Condensed->PointerSize); if (RETURN_ERROR (Status)) { goto FatalError; } @@ -230,7 +235,6 @@ FatalError: CpuDeadLoop (); } - /** Translate and append the information from an S3_CONTEXT object to the ACPI S3 Boot Script. @@ -253,17 +257,20 @@ FatalError: **/ EFI_STATUS TransferS3ContextToBootScript ( - IN S3_CONTEXT *S3Context + IN S3_CONTEXT *S3Context ) { - RETURN_STATUS Status; + RETURN_STATUS Status; if (S3Context->Used == 0) { ReleaseS3Context (S3Context); return EFI_SUCCESS; } - Status = QemuFwCfgS3CallWhenBootScriptReady (AppendFwCfgBootScript, - S3Context, sizeof (SCRATCH_BUFFER)); + Status = QemuFwCfgS3CallWhenBootScriptReady ( + AppendFwCfgBootScript, + S3Context, + sizeof (SCRATCH_BUFFER) + ); return (EFI_STATUS)Status; } diff --git a/OvmfPkg/AcpiPlatformDxe/EntryPoint.c b/OvmfPkg/AcpiPlatformDxe/EntryPoint.c index bb5fe82c18..143e860fe1 100644 --- a/OvmfPkg/AcpiPlatformDxe/EntryPoint.c +++ b/OvmfPkg/AcpiPlatformDxe/EntryPoint.c @@ -21,49 +21,50 @@ FindAcpiTableProtocol ( VOID ) { - EFI_STATUS Status; - EFI_ACPI_TABLE_PROTOCOL *AcpiTable; + EFI_STATUS Status; + EFI_ACPI_TABLE_PROTOCOL *AcpiTable; Status = gBS->LocateProtocol ( &gEfiAcpiTableProtocolGuid, NULL, - (VOID**)&AcpiTable + (VOID **)&AcpiTable ); ASSERT_EFI_ERROR (Status); return AcpiTable; } - STATIC VOID EFIAPI OnRootBridgesConnected ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - EFI_STATUS Status; + EFI_STATUS Status; - DEBUG ((DEBUG_INFO, + DEBUG (( + DEBUG_INFO, "%a: root bridges have been connected, installing ACPI tables\n", - __FUNCTION__)); + __FUNCTION__ + )); Status = InstallAcpiTables (FindAcpiTableProtocol ()); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: InstallAcpiTables: %r\n", __FUNCTION__, Status)); } + gBS->CloseEvent (Event); } - EFI_STATUS EFIAPI AcpiPlatformEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - EFI_EVENT RootBridgesConnected; + EFI_STATUS Status; + EFI_EVENT RootBridgesConnected; // // If the platform doesn't support PCI, or PCI enumeration has been disabled, @@ -71,8 +72,12 @@ AcpiPlatformEntryPoint ( // the full functionality. // if (PcdGetBool (PcdPciDisableBusEnumeration)) { - DEBUG ((DEBUG_INFO, "%a: PCI or its enumeration disabled, installing " - "ACPI tables\n", __FUNCTION__)); + DEBUG (( + DEBUG_INFO, + "%a: PCI or its enumeration disabled, installing " + "ACPI tables\n", + __FUNCTION__ + )); return InstallAcpiTables (FindAcpiTableProtocol ()); } @@ -82,13 +87,20 @@ AcpiPlatformEntryPoint ( // setup. (Note that we're a DXE_DRIVER; our entry point function is invoked // strictly before BDS is entered and can connect the root bridges.) // - Status = gBS->CreateEventEx (EVT_NOTIFY_SIGNAL, TPL_CALLBACK, - OnRootBridgesConnected, NULL /* Context */, - &gRootBridgesConnectedEventGroupGuid, &RootBridgesConnected); + Status = gBS->CreateEventEx ( + EVT_NOTIFY_SIGNAL, + TPL_CALLBACK, + OnRootBridgesConnected, + NULL /* Context */, + &gRootBridgesConnectedEventGroupGuid, + &RootBridgesConnected + ); if (!EFI_ERROR (Status)) { - DEBUG ((DEBUG_INFO, + DEBUG (( + DEBUG_INFO, "%a: waiting for root bridges to be connected, registered callback\n", - __FUNCTION__)); + __FUNCTION__ + )); } return Status; diff --git a/OvmfPkg/AcpiPlatformDxe/PciDecoding.c b/OvmfPkg/AcpiPlatformDxe/PciDecoding.c index 6ba4c936ad..c178f857a2 100644 --- a/OvmfPkg/AcpiPlatformDxe/PciDecoding.c +++ b/OvmfPkg/AcpiPlatformDxe/PciDecoding.c @@ -13,7 +13,6 @@ #include "AcpiPlatform.h" - /** Collect all PciIo protocol instances in the system. Save their original attributes, and enable IO and MMIO decoding for each. @@ -40,15 +39,15 @@ **/ VOID EnablePciDecoding ( - OUT ORIGINAL_ATTRIBUTES **OriginalAttributes, - OUT UINTN *Count + OUT ORIGINAL_ATTRIBUTES **OriginalAttributes, + OUT UINTN *Count ) { - EFI_STATUS Status; - UINTN NoHandles; - EFI_HANDLE *Handles; - ORIGINAL_ATTRIBUTES *OrigAttrs; - UINTN Idx; + EFI_STATUS Status; + UINTN NoHandles; + EFI_HANDLE *Handles; + ORIGINAL_ATTRIBUTES *OrigAttrs; + UINTN Idx; *OriginalAttributes = NULL; *Count = 0; @@ -61,8 +60,13 @@ EnablePciDecoding ( return; } - Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiPciIoProtocolGuid, - NULL /* SearchKey */, &NoHandles, &Handles); + Status = gBS->LocateHandleBuffer ( + ByProtocol, + &gEfiPciIoProtocolGuid, + NULL /* SearchKey */, + &NoHandles, + &Handles + ); if (Status == EFI_NOT_FOUND) { // // No PCI devices were found on either of the root bridges. We're done. @@ -71,49 +75,75 @@ EnablePciDecoding ( } if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, "%a: LocateHandleBuffer(): %r\n", __FUNCTION__, - Status)); + DEBUG (( + DEBUG_WARN, + "%a: LocateHandleBuffer(): %r\n", + __FUNCTION__, + Status + )); return; } OrigAttrs = AllocatePool (NoHandles * sizeof *OrigAttrs); if (OrigAttrs == NULL) { - DEBUG ((DEBUG_WARN, "%a: AllocatePool(): out of resources\n", - __FUNCTION__)); + DEBUG (( + DEBUG_WARN, + "%a: AllocatePool(): out of resources\n", + __FUNCTION__ + )); goto FreeHandles; } for (Idx = 0; Idx < NoHandles; ++Idx) { - EFI_PCI_IO_PROTOCOL *PciIo; - UINT64 Attributes; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT64 Attributes; // // Look up PciIo on the handle and stash it // - Status = gBS->HandleProtocol (Handles[Idx], &gEfiPciIoProtocolGuid, - (VOID**)&PciIo); + Status = gBS->HandleProtocol ( + Handles[Idx], + &gEfiPciIoProtocolGuid, + (VOID **)&PciIo + ); ASSERT_EFI_ERROR (Status); OrigAttrs[Idx].PciIo = PciIo; // // Stash the current attributes // - Status = PciIo->Attributes (PciIo, EfiPciIoAttributeOperationGet, 0, - &OrigAttrs[Idx].PciAttributes); + Status = PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationGet, + 0, + &OrigAttrs[Idx].PciAttributes + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, "%a: EfiPciIoAttributeOperationGet: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_WARN, + "%a: EfiPciIoAttributeOperationGet: %r\n", + __FUNCTION__, + Status + )); goto RestoreAttributes; } // // Retrieve supported attributes // - Status = PciIo->Attributes (PciIo, EfiPciIoAttributeOperationSupported, 0, - &Attributes); + Status = PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationSupported, + 0, + &Attributes + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, "%a: EfiPciIoAttributeOperationSupported: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_WARN, + "%a: EfiPciIoAttributeOperationSupported: %r\n", + __FUNCTION__, + Status + )); goto RestoreAttributes; } @@ -121,11 +151,19 @@ EnablePciDecoding ( // Enable IO and MMIO decoding // Attributes &= EFI_PCI_IO_ATTRIBUTE_IO | EFI_PCI_IO_ATTRIBUTE_MEMORY; - Status = PciIo->Attributes (PciIo, EfiPciIoAttributeOperationEnable, - Attributes, NULL); + Status = PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationEnable, + Attributes, + NULL + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, "%a: EfiPciIoAttributeOperationEnable: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_WARN, + "%a: EfiPciIoAttributeOperationEnable: %r\n", + __FUNCTION__, + Status + )); goto RestoreAttributes; } } @@ -141,19 +179,20 @@ EnablePciDecoding ( RestoreAttributes: while (Idx > 0) { --Idx; - OrigAttrs[Idx].PciIo->Attributes (OrigAttrs[Idx].PciIo, + OrigAttrs[Idx].PciIo->Attributes ( + OrigAttrs[Idx].PciIo, EfiPciIoAttributeOperationSet, OrigAttrs[Idx].PciAttributes, NULL ); } + FreePool (OrigAttrs); FreeHandles: FreePool (Handles); } - /** Restore the original PCI attributes saved with EnablePciDecoding(). @@ -171,11 +210,11 @@ FreeHandles: **/ VOID RestorePciDecoding ( - IN ORIGINAL_ATTRIBUTES *OriginalAttributes, - IN UINTN Count + IN ORIGINAL_ATTRIBUTES *OriginalAttributes, + IN UINTN Count ) { - UINTN Idx; + UINTN Idx; ASSERT ((OriginalAttributes == NULL) == (Count == 0)); if (OriginalAttributes == NULL) { @@ -190,5 +229,6 @@ RestorePciDecoding ( NULL ); } + FreePool (OriginalAttributes); } diff --git a/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpi.c b/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpi.c index df800b1492..b885965a60 100644 --- a/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpi.c +++ b/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpi.c @@ -26,17 +26,16 @@ // blobs under processing. // typedef struct { - UINT8 File[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated name of the fw_cfg - // blob. This is the ordering / search - // key. - UINTN Size; // The number of bytes in this blob. - UINT8 *Base; // Pointer to the blob data. - BOOLEAN HostsOnlyTableData; // TRUE iff the blob has been found to - // only contain data that is directly - // part of ACPI tables. + UINT8 File[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated name of the fw_cfg + // blob. This is the ordering / search + // key. + UINTN Size; // The number of bytes in this blob. + UINT8 *Base; // Pointer to the blob data. + BOOLEAN HostsOnlyTableData; // TRUE iff the blob has been found to + // only contain data that is directly + // part of ACPI tables. } BLOB; - /** Compare a standalone key against a user structure containing an embedded key. @@ -55,17 +54,16 @@ STATIC INTN EFIAPI BlobKeyCompare ( - IN CONST VOID *StandaloneKey, - IN CONST VOID *UserStruct + IN CONST VOID *StandaloneKey, + IN CONST VOID *UserStruct ) { - CONST BLOB *Blob; + CONST BLOB *Blob; Blob = UserStruct; return AsciiStrCmp (StandaloneKey, (CONST CHAR8 *)Blob->File); } - /** Comparator function for two user structures. @@ -83,17 +81,16 @@ STATIC INTN EFIAPI BlobCompare ( - IN CONST VOID *UserStruct1, - IN CONST VOID *UserStruct2 + IN CONST VOID *UserStruct1, + IN CONST VOID *UserStruct2 ) { - CONST BLOB *Blob1; + CONST BLOB *Blob1; Blob1 = UserStruct1; return BlobKeyCompare (Blob1->File, UserStruct2); } - /** Comparator function for two opaque pointers, ordering on (unsigned) pointer value itself. @@ -113,20 +110,21 @@ STATIC INTN EFIAPI PointerCompare ( - IN CONST VOID *Pointer1, - IN CONST VOID *Pointer2 + IN CONST VOID *Pointer1, + IN CONST VOID *Pointer2 ) { if (Pointer1 == Pointer2) { return 0; } + if ((UINTN)Pointer1 < (UINTN)Pointer2) { return -1; } + return 1; } - /** Comparator function for two ASCII strings. Can be used as both Key and UserStruct comparator. @@ -144,14 +142,13 @@ STATIC INTN EFIAPI AsciiStringCompare ( - IN CONST VOID *AsciiString1, - IN CONST VOID *AsciiString2 + IN CONST VOID *AsciiString1, + IN CONST VOID *AsciiString2 ) { return AsciiStrCmp (AsciiString1, AsciiString2); } - /** Release the ORDERED_COLLECTION structure populated by CollectAllocationsRestrictedTo32Bit() (below). @@ -165,21 +162,22 @@ AsciiStringCompare ( STATIC VOID ReleaseAllocationsRestrictedTo32Bit ( - IN ORDERED_COLLECTION *AllocationsRestrictedTo32Bit -) + IN ORDERED_COLLECTION *AllocationsRestrictedTo32Bit + ) { - ORDERED_COLLECTION_ENTRY *Entry, *Entry2; + ORDERED_COLLECTION_ENTRY *Entry, *Entry2; for (Entry = OrderedCollectionMin (AllocationsRestrictedTo32Bit); Entry != NULL; - Entry = Entry2) { + Entry = Entry2) + { Entry2 = OrderedCollectionNext (Entry); OrderedCollectionDelete (AllocationsRestrictedTo32Bit, Entry, NULL); } + OrderedCollectionUninit (AllocationsRestrictedTo32Bit); } - /** Iterate over the linker/loader script, and collect the names of the fw_cfg blobs that are referenced by QEMU_LOADER_ADD_POINTER.PointeeFile fields, such @@ -210,14 +208,14 @@ ReleaseAllocationsRestrictedTo32Bit ( STATIC EFI_STATUS CollectAllocationsRestrictedTo32Bit ( - OUT ORDERED_COLLECTION **AllocationsRestrictedTo32Bit, - IN CONST QEMU_LOADER_ENTRY *LoaderStart, - IN CONST QEMU_LOADER_ENTRY *LoaderEnd -) + OUT ORDERED_COLLECTION **AllocationsRestrictedTo32Bit, + IN CONST QEMU_LOADER_ENTRY *LoaderStart, + IN CONST QEMU_LOADER_ENTRY *LoaderEnd + ) { - ORDERED_COLLECTION *Collection; - CONST QEMU_LOADER_ENTRY *LoaderEntry; - EFI_STATUS Status; + ORDERED_COLLECTION *Collection; + CONST QEMU_LOADER_ENTRY *LoaderEntry; + EFI_STATUS Status; Collection = OrderedCollectionInit (AsciiStringCompare, AsciiStringCompare); if (Collection == NULL) { @@ -225,11 +223,12 @@ CollectAllocationsRestrictedTo32Bit ( } for (LoaderEntry = LoaderStart; LoaderEntry < LoaderEnd; ++LoaderEntry) { - CONST QEMU_LOADER_ADD_POINTER *AddPointer; + CONST QEMU_LOADER_ADD_POINTER *AddPointer; if (LoaderEntry->Type != QemuLoaderCmdAddPointer) { continue; } + AddPointer = &LoaderEntry->Command.AddPointer; if (AddPointer->PointerSize >= 8) { @@ -248,23 +247,23 @@ CollectAllocationsRestrictedTo32Bit ( (VOID *)AddPointer->PointeeFile ); switch (Status) { - case EFI_SUCCESS: - DEBUG (( - DEBUG_VERBOSE, - "%a: restricting blob \"%a\" from 64-bit allocation\n", - __FUNCTION__, - AddPointer->PointeeFile - )); - break; - case EFI_ALREADY_STARTED: - // - // The restriction has been recorded already. - // - break; - case EFI_OUT_OF_RESOURCES: - goto RollBack; - default: - ASSERT (FALSE); + case EFI_SUCCESS: + DEBUG (( + DEBUG_VERBOSE, + "%a: restricting blob \"%a\" from 64-bit allocation\n", + __FUNCTION__, + AddPointer->PointeeFile + )); + break; + case EFI_ALREADY_STARTED: + // + // The restriction has been recorded already. + // + break; + case EFI_OUT_OF_RESOURCES: + goto RollBack; + default: + ASSERT (FALSE); } } @@ -276,7 +275,6 @@ RollBack: return Status; } - /** Process a QEMU_LOADER_ALLOCATE command. @@ -317,17 +315,17 @@ STATIC EFI_STATUS EFIAPI ProcessCmdAllocate ( - IN CONST QEMU_LOADER_ALLOCATE *Allocate, - IN OUT ORDERED_COLLECTION *Tracker, - IN ORDERED_COLLECTION *AllocationsRestrictedTo32Bit + IN CONST QEMU_LOADER_ALLOCATE *Allocate, + IN OUT ORDERED_COLLECTION *Tracker, + IN ORDERED_COLLECTION *AllocationsRestrictedTo32Bit ) { - FIRMWARE_CONFIG_ITEM FwCfgItem; - UINTN FwCfgSize; - EFI_STATUS Status; - UINTN NumPages; - EFI_PHYSICAL_ADDRESS Address; - BLOB *Blob; + FIRMWARE_CONFIG_ITEM FwCfgItem; + UINTN FwCfgSize; + EFI_STATUS Status; + UINTN NumPages; + EFI_PHYSICAL_ADDRESS Address; + BLOB *Blob; if (Allocate->File[QEMU_LOADER_FNAME_SIZE - 1] != '\0') { DEBUG ((DEBUG_ERROR, "%a: malformed file name\n", __FUNCTION__)); @@ -335,28 +333,43 @@ ProcessCmdAllocate ( } if (Allocate->Alignment > EFI_PAGE_SIZE) { - DEBUG ((DEBUG_ERROR, "%a: unsupported alignment 0x%x\n", __FUNCTION__, - Allocate->Alignment)); + DEBUG (( + DEBUG_ERROR, + "%a: unsupported alignment 0x%x\n", + __FUNCTION__, + Allocate->Alignment + )); return EFI_UNSUPPORTED; } Status = QemuFwCfgFindFile ((CHAR8 *)Allocate->File, &FwCfgItem, &FwCfgSize); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: QemuFwCfgFindFile(\"%a\"): %r\n", __FUNCTION__, - Allocate->File, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: QemuFwCfgFindFile(\"%a\"): %r\n", + __FUNCTION__, + Allocate->File, + Status + )); return Status; } NumPages = EFI_SIZE_TO_PAGES (FwCfgSize); - Address = MAX_UINT64; + Address = MAX_UINT64; if (OrderedCollectionFind ( AllocationsRestrictedTo32Bit, Allocate->File - ) != NULL) { + ) != NULL) + { Address = MAX_UINT32; } - Status = gBS->AllocatePages (AllocateMaxAddress, EfiACPIMemoryNVS, NumPages, - &Address); + + Status = gBS->AllocatePages ( + AllocateMaxAddress, + EfiACPIMemoryNVS, + NumPages, + &Address + ); if (EFI_ERROR (Status)) { return Status; } @@ -366,17 +379,23 @@ ProcessCmdAllocate ( Status = EFI_OUT_OF_RESOURCES; goto FreePages; } + CopyMem (Blob->File, Allocate->File, QEMU_LOADER_FNAME_SIZE); - Blob->Size = FwCfgSize; - Blob->Base = (VOID *)(UINTN)Address; + Blob->Size = FwCfgSize; + Blob->Base = (VOID *)(UINTN)Address; Blob->HostsOnlyTableData = TRUE; Status = OrderedCollectionInsert (Tracker, NULL, Blob); if (Status == RETURN_ALREADY_STARTED) { - DEBUG ((DEBUG_ERROR, "%a: duplicated file \"%a\"\n", __FUNCTION__, - Allocate->File)); + DEBUG (( + DEBUG_ERROR, + "%a: duplicated file \"%a\"\n", + __FUNCTION__, + Allocate->File + )); Status = EFI_PROTOCOL_ERROR; } + if (EFI_ERROR (Status)) { goto FreeBlob; } @@ -385,9 +404,17 @@ ProcessCmdAllocate ( QemuFwCfgReadBytes (FwCfgSize, Blob->Base); ZeroMem (Blob->Base + Blob->Size, EFI_PAGES_TO_SIZE (NumPages) - Blob->Size); - DEBUG ((DEBUG_VERBOSE, "%a: File=\"%a\" Alignment=0x%x Zone=%d Size=0x%Lx " - "Address=0x%Lx\n", __FUNCTION__, Allocate->File, Allocate->Alignment, - Allocate->Zone, (UINT64)Blob->Size, (UINT64)(UINTN)Blob->Base)); + DEBUG (( + DEBUG_VERBOSE, + "%a: File=\"%a\" Alignment=0x%x Zone=%d Size=0x%Lx " + "Address=0x%Lx\n", + __FUNCTION__, + Allocate->File, + Allocate->Alignment, + Allocate->Zone, + (UINT64)Blob->Size, + (UINT64)(UINTN)Blob->Base + )); return EFI_SUCCESS; FreeBlob: @@ -399,7 +426,6 @@ FreePages: return Status; } - /** Process a QEMU_LOADER_ADD_POINTER command. @@ -422,37 +448,48 @@ STATIC EFI_STATUS EFIAPI ProcessCmdAddPointer ( - IN CONST QEMU_LOADER_ADD_POINTER *AddPointer, - IN CONST ORDERED_COLLECTION *Tracker + IN CONST QEMU_LOADER_ADD_POINTER *AddPointer, + IN CONST ORDERED_COLLECTION *Tracker ) { - ORDERED_COLLECTION_ENTRY *TrackerEntry, *TrackerEntry2; - BLOB *Blob, *Blob2; - UINT8 *PointerField; - UINT64 PointerValue; - - if (AddPointer->PointerFile[QEMU_LOADER_FNAME_SIZE - 1] != '\0' || - AddPointer->PointeeFile[QEMU_LOADER_FNAME_SIZE - 1] != '\0') { + ORDERED_COLLECTION_ENTRY *TrackerEntry, *TrackerEntry2; + BLOB *Blob, *Blob2; + UINT8 *PointerField; + UINT64 PointerValue; + + if ((AddPointer->PointerFile[QEMU_LOADER_FNAME_SIZE - 1] != '\0') || + (AddPointer->PointeeFile[QEMU_LOADER_FNAME_SIZE - 1] != '\0')) + { DEBUG ((DEBUG_ERROR, "%a: malformed file name\n", __FUNCTION__)); return EFI_PROTOCOL_ERROR; } - TrackerEntry = OrderedCollectionFind (Tracker, AddPointer->PointerFile); + TrackerEntry = OrderedCollectionFind (Tracker, AddPointer->PointerFile); TrackerEntry2 = OrderedCollectionFind (Tracker, AddPointer->PointeeFile); - if (TrackerEntry == NULL || TrackerEntry2 == NULL) { - DEBUG ((DEBUG_ERROR, "%a: invalid blob reference(s) \"%a\" / \"%a\"\n", - __FUNCTION__, AddPointer->PointerFile, AddPointer->PointeeFile)); + if ((TrackerEntry == NULL) || (TrackerEntry2 == NULL)) { + DEBUG (( + DEBUG_ERROR, + "%a: invalid blob reference(s) \"%a\" / \"%a\"\n", + __FUNCTION__, + AddPointer->PointerFile, + AddPointer->PointeeFile + )); return EFI_PROTOCOL_ERROR; } - Blob = OrderedCollectionUserStruct (TrackerEntry); + Blob = OrderedCollectionUserStruct (TrackerEntry); Blob2 = OrderedCollectionUserStruct (TrackerEntry2); - if ((AddPointer->PointerSize != 1 && AddPointer->PointerSize != 2 && - AddPointer->PointerSize != 4 && AddPointer->PointerSize != 8) || - Blob->Size < AddPointer->PointerSize || - Blob->Size - AddPointer->PointerSize < AddPointer->PointerOffset) { - DEBUG ((DEBUG_ERROR, "%a: invalid pointer location or size in \"%a\"\n", - __FUNCTION__, AddPointer->PointerFile)); + if (((AddPointer->PointerSize != 1) && (AddPointer->PointerSize != 2) && + (AddPointer->PointerSize != 4) && (AddPointer->PointerSize != 8)) || + (Blob->Size < AddPointer->PointerSize) || + (Blob->Size - AddPointer->PointerSize < AddPointer->PointerOffset)) + { + DEBUG (( + DEBUG_ERROR, + "%a: invalid pointer location or size in \"%a\"\n", + __FUNCTION__, + AddPointer->PointerFile + )); return EFI_PROTOCOL_ERROR; } @@ -460,8 +497,12 @@ ProcessCmdAddPointer ( PointerValue = 0; CopyMem (&PointerValue, PointerField, AddPointer->PointerSize); if (PointerValue >= Blob2->Size) { - DEBUG ((DEBUG_ERROR, "%a: invalid pointer value in \"%a\"\n", __FUNCTION__, - AddPointer->PointerFile)); + DEBUG (( + DEBUG_ERROR, + "%a: invalid pointer value in \"%a\"\n", + __FUNCTION__, + AddPointer->PointerFile + )); return EFI_PROTOCOL_ERROR; } @@ -472,23 +513,34 @@ ProcessCmdAddPointer ( ASSERT ((UINTN)Blob2->Base <= MAX_ADDRESS - Blob2->Size); PointerValue += (UINT64)(UINTN)Blob2->Base; - if (AddPointer->PointerSize < 8 && - RShiftU64 (PointerValue, AddPointer->PointerSize * 8) != 0) { - DEBUG ((DEBUG_ERROR, "%a: relocated pointer value unrepresentable in " - "\"%a\"\n", __FUNCTION__, AddPointer->PointerFile)); + if ((AddPointer->PointerSize < 8) && + (RShiftU64 (PointerValue, AddPointer->PointerSize * 8) != 0)) + { + DEBUG (( + DEBUG_ERROR, + "%a: relocated pointer value unrepresentable in " + "\"%a\"\n", + __FUNCTION__, + AddPointer->PointerFile + )); return EFI_PROTOCOL_ERROR; } CopyMem (PointerField, &PointerValue, AddPointer->PointerSize); - DEBUG ((DEBUG_VERBOSE, "%a: PointerFile=\"%a\" PointeeFile=\"%a\" " - "PointerOffset=0x%x PointerSize=%d\n", __FUNCTION__, - AddPointer->PointerFile, AddPointer->PointeeFile, - AddPointer->PointerOffset, AddPointer->PointerSize)); + DEBUG (( + DEBUG_VERBOSE, + "%a: PointerFile=\"%a\" PointeeFile=\"%a\" " + "PointerOffset=0x%x PointerSize=%d\n", + __FUNCTION__, + AddPointer->PointerFile, + AddPointer->PointeeFile, + AddPointer->PointerOffset, + AddPointer->PointerSize + )); return EFI_SUCCESS; } - /** Process a QEMU_LOADER_ADD_CHECKSUM command. @@ -508,12 +560,12 @@ STATIC EFI_STATUS EFIAPI ProcessCmdAddChecksum ( - IN CONST QEMU_LOADER_ADD_CHECKSUM *AddChecksum, - IN CONST ORDERED_COLLECTION *Tracker + IN CONST QEMU_LOADER_ADD_CHECKSUM *AddChecksum, + IN CONST ORDERED_COLLECTION *Tracker ) { - ORDERED_COLLECTION_ENTRY *TrackerEntry; - BLOB *Blob; + ORDERED_COLLECTION_ENTRY *TrackerEntry; + BLOB *Blob; if (AddChecksum->File[QEMU_LOADER_FNAME_SIZE - 1] != '\0') { DEBUG ((DEBUG_ERROR, "%a: malformed file name\n", __FUNCTION__)); @@ -522,31 +574,46 @@ ProcessCmdAddChecksum ( TrackerEntry = OrderedCollectionFind (Tracker, AddChecksum->File); if (TrackerEntry == NULL) { - DEBUG ((DEBUG_ERROR, "%a: invalid blob reference \"%a\"\n", __FUNCTION__, - AddChecksum->File)); + DEBUG (( + DEBUG_ERROR, + "%a: invalid blob reference \"%a\"\n", + __FUNCTION__, + AddChecksum->File + )); return EFI_PROTOCOL_ERROR; } Blob = OrderedCollectionUserStruct (TrackerEntry); - if (Blob->Size <= AddChecksum->ResultOffset || - Blob->Size < AddChecksum->Length || - Blob->Size - AddChecksum->Length < AddChecksum->Start) { - DEBUG ((DEBUG_ERROR, "%a: invalid checksum range in \"%a\"\n", - __FUNCTION__, AddChecksum->File)); + if ((Blob->Size <= AddChecksum->ResultOffset) || + (Blob->Size < AddChecksum->Length) || + (Blob->Size - AddChecksum->Length < AddChecksum->Start)) + { + DEBUG (( + DEBUG_ERROR, + "%a: invalid checksum range in \"%a\"\n", + __FUNCTION__, + AddChecksum->File + )); return EFI_PROTOCOL_ERROR; } Blob->Base[AddChecksum->ResultOffset] = CalculateCheckSum8 ( - Blob->Base + AddChecksum->Start, - AddChecksum->Length - ); - DEBUG ((DEBUG_VERBOSE, "%a: File=\"%a\" ResultOffset=0x%x Start=0x%x " - "Length=0x%x\n", __FUNCTION__, AddChecksum->File, - AddChecksum->ResultOffset, AddChecksum->Start, AddChecksum->Length)); + Blob->Base + AddChecksum->Start, + AddChecksum->Length + ); + DEBUG (( + DEBUG_VERBOSE, + "%a: File=\"%a\" ResultOffset=0x%x Start=0x%x " + "Length=0x%x\n", + __FUNCTION__, + AddChecksum->File, + AddChecksum->ResultOffset, + AddChecksum->Start, + AddChecksum->Length + )); return EFI_SUCCESS; } - /** Process a QEMU_LOADER_WRITE_POINTER command. @@ -581,45 +648,58 @@ ProcessCmdAddChecksum ( STATIC EFI_STATUS ProcessCmdWritePointer ( - IN CONST QEMU_LOADER_WRITE_POINTER *WritePointer, - IN CONST ORDERED_COLLECTION *Tracker, - IN OUT S3_CONTEXT *S3Context OPTIONAL + IN CONST QEMU_LOADER_WRITE_POINTER *WritePointer, + IN CONST ORDERED_COLLECTION *Tracker, + IN OUT S3_CONTEXT *S3Context OPTIONAL ) { - RETURN_STATUS Status; - FIRMWARE_CONFIG_ITEM PointerItem; - UINTN PointerItemSize; - ORDERED_COLLECTION_ENTRY *PointeeEntry; - BLOB *PointeeBlob; - UINT64 PointerValue; - - if (WritePointer->PointerFile[QEMU_LOADER_FNAME_SIZE - 1] != '\0' || - WritePointer->PointeeFile[QEMU_LOADER_FNAME_SIZE - 1] != '\0') { + RETURN_STATUS Status; + FIRMWARE_CONFIG_ITEM PointerItem; + UINTN PointerItemSize; + ORDERED_COLLECTION_ENTRY *PointeeEntry; + BLOB *PointeeBlob; + UINT64 PointerValue; + + if ((WritePointer->PointerFile[QEMU_LOADER_FNAME_SIZE - 1] != '\0') || + (WritePointer->PointeeFile[QEMU_LOADER_FNAME_SIZE - 1] != '\0')) + { DEBUG ((DEBUG_ERROR, "%a: malformed file name\n", __FUNCTION__)); return EFI_PROTOCOL_ERROR; } - Status = QemuFwCfgFindFile ((CONST CHAR8 *)WritePointer->PointerFile, - &PointerItem, &PointerItemSize); + Status = QemuFwCfgFindFile ( + (CONST CHAR8 *)WritePointer->PointerFile, + &PointerItem, + &PointerItemSize + ); PointeeEntry = OrderedCollectionFind (Tracker, WritePointer->PointeeFile); - if (RETURN_ERROR (Status) || PointeeEntry == NULL) { - DEBUG ((DEBUG_ERROR, + if (RETURN_ERROR (Status) || (PointeeEntry == NULL)) { + DEBUG (( + DEBUG_ERROR, "%a: invalid fw_cfg file or blob reference \"%a\" / \"%a\"\n", - __FUNCTION__, WritePointer->PointerFile, WritePointer->PointeeFile)); + __FUNCTION__, + WritePointer->PointerFile, + WritePointer->PointeeFile + )); return EFI_PROTOCOL_ERROR; } - if ((WritePointer->PointerSize != 1 && WritePointer->PointerSize != 2 && - WritePointer->PointerSize != 4 && WritePointer->PointerSize != 8) || + if (((WritePointer->PointerSize != 1) && (WritePointer->PointerSize != 2) && + (WritePointer->PointerSize != 4) && (WritePointer->PointerSize != 8)) || (PointerItemSize < WritePointer->PointerSize) || (PointerItemSize - WritePointer->PointerSize < - WritePointer->PointerOffset)) { - DEBUG ((DEBUG_ERROR, "%a: invalid pointer location or size in \"%a\"\n", - __FUNCTION__, WritePointer->PointerFile)); + WritePointer->PointerOffset)) + { + DEBUG (( + DEBUG_ERROR, + "%a: invalid pointer location or size in \"%a\"\n", + __FUNCTION__, + WritePointer->PointerFile + )); return EFI_PROTOCOL_ERROR; } - PointeeBlob = OrderedCollectionUserStruct (PointeeEntry); + PointeeBlob = OrderedCollectionUserStruct (PointeeEntry); PointerValue = WritePointer->PointeeOffset; if (PointerValue >= PointeeBlob->Size) { DEBUG ((DEBUG_ERROR, "%a: invalid PointeeOffset\n", __FUNCTION__)); @@ -633,10 +713,15 @@ ProcessCmdWritePointer ( ASSERT ((UINTN)PointeeBlob->Base <= MAX_ADDRESS - PointeeBlob->Size); PointerValue += (UINT64)(UINTN)PointeeBlob->Base; - if (WritePointer->PointerSize < 8 && - RShiftU64 (PointerValue, WritePointer->PointerSize * 8) != 0) { - DEBUG ((DEBUG_ERROR, "%a: pointer value unrepresentable in \"%a\"\n", - __FUNCTION__, WritePointer->PointerFile)); + if ((WritePointer->PointerSize < 8) && + (RShiftU64 (PointerValue, WritePointer->PointerSize * 8) != 0)) + { + DEBUG (( + DEBUG_ERROR, + "%a: pointer value unrepresentable in \"%a\"\n", + __FUNCTION__, + WritePointer->PointerFile + )); return EFI_PROTOCOL_ERROR; } @@ -645,7 +730,7 @@ ProcessCmdWritePointer ( // form, to be replayed during S3 resume. // if (S3Context != NULL) { - EFI_STATUS SaveStatus; + EFI_STATUS SaveStatus; SaveStatus = SaveCondensedWritePointerToS3Context ( S3Context, @@ -670,15 +755,20 @@ ProcessCmdWritePointer ( // PointeeBlob->HostsOnlyTableData = FALSE; - DEBUG ((DEBUG_VERBOSE, "%a: PointerFile=\"%a\" PointeeFile=\"%a\" " - "PointerOffset=0x%x PointeeOffset=0x%x PointerSize=%d\n", __FUNCTION__, - WritePointer->PointerFile, WritePointer->PointeeFile, - WritePointer->PointerOffset, WritePointer->PointeeOffset, - WritePointer->PointerSize)); + DEBUG (( + DEBUG_VERBOSE, + "%a: PointerFile=\"%a\" PointeeFile=\"%a\" " + "PointerOffset=0x%x PointeeOffset=0x%x PointerSize=%d\n", + __FUNCTION__, + WritePointer->PointerFile, + WritePointer->PointeeFile, + WritePointer->PointerOffset, + WritePointer->PointeeOffset, + WritePointer->PointerSize + )); return EFI_SUCCESS; } - /** Undo a QEMU_LOADER_WRITE_POINTER command. @@ -692,16 +782,19 @@ ProcessCmdWritePointer ( STATIC VOID UndoCmdWritePointer ( - IN CONST QEMU_LOADER_WRITE_POINTER *WritePointer + IN CONST QEMU_LOADER_WRITE_POINTER *WritePointer ) { - RETURN_STATUS Status; - FIRMWARE_CONFIG_ITEM PointerItem; - UINTN PointerItemSize; - UINT64 PointerValue; - - Status = QemuFwCfgFindFile ((CONST CHAR8 *)WritePointer->PointerFile, - &PointerItem, &PointerItemSize); + RETURN_STATUS Status; + FIRMWARE_CONFIG_ITEM PointerItem; + UINTN PointerItemSize; + UINT64 PointerValue; + + Status = QemuFwCfgFindFile ( + (CONST CHAR8 *)WritePointer->PointerFile, + &PointerItem, + &PointerItemSize + ); ASSERT_RETURN_ERROR (Status); PointerValue = 0; @@ -709,18 +802,21 @@ UndoCmdWritePointer ( QemuFwCfgSkipBytes (WritePointer->PointerOffset); QemuFwCfgWriteBytes (WritePointer->PointerSize, &PointerValue); - DEBUG ((DEBUG_VERBOSE, - "%a: PointerFile=\"%a\" PointerOffset=0x%x PointerSize=%d\n", __FUNCTION__, - WritePointer->PointerFile, WritePointer->PointerOffset, - WritePointer->PointerSize)); + DEBUG (( + DEBUG_VERBOSE, + "%a: PointerFile=\"%a\" PointerOffset=0x%x PointerSize=%d\n", + __FUNCTION__, + WritePointer->PointerFile, + WritePointer->PointerOffset, + WritePointer->PointerSize + )); } - // // We'll be saving the keys of installed tables so that we can roll them back // in case of failure. 128 tables should be enough for anyone (TM). // -#define INSTALLED_TABLES_MAX 128 +#define INSTALLED_TABLES_MAX 128 /** Process a QEMU_LOADER_ADD_POINTER command in order to see if its target byte @@ -785,37 +881,37 @@ STATIC EFI_STATUS EFIAPI Process2ndPassCmdAddPointer ( - IN CONST QEMU_LOADER_ADD_POINTER *AddPointer, - IN CONST ORDERED_COLLECTION *Tracker, - IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, - IN OUT UINTN InstalledKey[INSTALLED_TABLES_MAX], - IN OUT INT32 *NumInstalled, - IN OUT ORDERED_COLLECTION *SeenPointers + IN CONST QEMU_LOADER_ADD_POINTER *AddPointer, + IN CONST ORDERED_COLLECTION *Tracker, + IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, + IN OUT UINTN InstalledKey[INSTALLED_TABLES_MAX], + IN OUT INT32 *NumInstalled, + IN OUT ORDERED_COLLECTION *SeenPointers ) { - CONST ORDERED_COLLECTION_ENTRY *TrackerEntry; - CONST ORDERED_COLLECTION_ENTRY *TrackerEntry2; - ORDERED_COLLECTION_ENTRY *SeenPointerEntry; - CONST BLOB *Blob; - BLOB *Blob2; - CONST UINT8 *PointerField; - UINT64 PointerValue; - UINTN Blob2Remaining; - UINTN TableSize; - CONST EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs; - CONST EFI_ACPI_DESCRIPTION_HEADER *Header; - EFI_STATUS Status; - - if (*NumInstalled < 0 || *NumInstalled > INSTALLED_TABLES_MAX) { + CONST ORDERED_COLLECTION_ENTRY *TrackerEntry; + CONST ORDERED_COLLECTION_ENTRY *TrackerEntry2; + ORDERED_COLLECTION_ENTRY *SeenPointerEntry; + CONST BLOB *Blob; + BLOB *Blob2; + CONST UINT8 *PointerField; + UINT64 PointerValue; + UINTN Blob2Remaining; + UINTN TableSize; + CONST EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs; + CONST EFI_ACPI_DESCRIPTION_HEADER *Header; + EFI_STATUS Status; + + if ((*NumInstalled < 0) || (*NumInstalled > INSTALLED_TABLES_MAX)) { return EFI_INVALID_PARAMETER; } - TrackerEntry = OrderedCollectionFind (Tracker, AddPointer->PointerFile); + TrackerEntry = OrderedCollectionFind (Tracker, AddPointer->PointerFile); TrackerEntry2 = OrderedCollectionFind (Tracker, AddPointer->PointeeFile); - Blob = OrderedCollectionUserStruct (TrackerEntry); - Blob2 = OrderedCollectionUserStruct (TrackerEntry2); - PointerField = Blob->Base + AddPointer->PointerOffset; - PointerValue = 0; + Blob = OrderedCollectionUserStruct (TrackerEntry); + Blob2 = OrderedCollectionUserStruct (TrackerEntry2); + PointerField = Blob->Base + AddPointer->PointerOffset; + PointerValue = 0; CopyMem (&PointerValue, PointerField, AddPointer->PointerSize); // @@ -823,7 +919,7 @@ Process2ndPassCmdAddPointer ( // by the Blob2->Size check and later checks in ProcessCmdAddPointer(). // Blob2Remaining = (UINTN)Blob2->Base; - ASSERT(PointerValue >= Blob2Remaining); + ASSERT (PointerValue >= Blob2Remaining); Blob2Remaining += Blob2->Size; ASSERT (PointerValue < Blob2Remaining); @@ -845,13 +941,20 @@ Process2ndPassCmdAddPointer ( )); Status = EFI_SUCCESS; } + return Status; } - Blob2Remaining -= (UINTN) PointerValue; - DEBUG ((DEBUG_VERBOSE, "%a: checking for ACPI header in \"%a\" at 0x%Lx " - "(remaining: 0x%Lx): ", __FUNCTION__, AddPointer->PointeeFile, - PointerValue, (UINT64)Blob2Remaining)); + Blob2Remaining -= (UINTN)PointerValue; + DEBUG (( + DEBUG_VERBOSE, + "%a: checking for ACPI header in \"%a\" at 0x%Lx " + "(remaining: 0x%Lx): ", + __FUNCTION__, + AddPointer->PointeeFile, + PointerValue, + (UINT64)Blob2Remaining + )); TableSize = 0; @@ -861,12 +964,17 @@ Process2ndPassCmdAddPointer ( if (sizeof *Facs <= Blob2Remaining) { Facs = (EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *)(UINTN)PointerValue; - if (Facs->Length >= sizeof *Facs && - Facs->Length <= Blob2Remaining && - Facs->Signature == - EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE) { - DEBUG ((DEBUG_VERBOSE, "found \"%-4.4a\" size 0x%x\n", - (CONST CHAR8 *)&Facs->Signature, Facs->Length)); + if ((Facs->Length >= sizeof *Facs) && + (Facs->Length <= Blob2Remaining) && + (Facs->Signature == + EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE)) + { + DEBUG (( + DEBUG_VERBOSE, + "found \"%-4.4a\" size 0x%x\n", + (CONST CHAR8 *)&Facs->Signature, + Facs->Length + )); TableSize = Facs->Length; } } @@ -874,28 +982,34 @@ Process2ndPassCmdAddPointer ( // // check for the uniform tables // - if (TableSize == 0 && sizeof *Header <= Blob2Remaining) { + if ((TableSize == 0) && (sizeof *Header <= Blob2Remaining)) { Header = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)PointerValue; - if (Header->Length >= sizeof *Header && - Header->Length <= Blob2Remaining && - CalculateSum8 ((CONST UINT8 *)Header, Header->Length) == 0) { + if ((Header->Length >= sizeof *Header) && + (Header->Length <= Blob2Remaining) && + (CalculateSum8 ((CONST UINT8 *)Header, Header->Length) == 0)) + { // // This looks very much like an ACPI table from QEMU: // - Length field consistent with both ACPI and containing blob size // - checksum is correct // - DEBUG ((DEBUG_VERBOSE, "found \"%-4.4a\" size 0x%x\n", - (CONST CHAR8 *)&Header->Signature, Header->Length)); + DEBUG (( + DEBUG_VERBOSE, + "found \"%-4.4a\" size 0x%x\n", + (CONST CHAR8 *)&Header->Signature, + Header->Length + )); TableSize = Header->Length; // // Skip RSDT and XSDT because those are handled by // EFI_ACPI_TABLE_PROTOCOL automatically. - if (Header->Signature == - EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE || - Header->Signature == - EFI_ACPI_2_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) { + if ((Header->Signature == + EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE) || + (Header->Signature == + EFI_ACPI_2_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE)) + { return EFI_SUCCESS; } } @@ -908,20 +1022,32 @@ Process2ndPassCmdAddPointer ( } if (*NumInstalled == INSTALLED_TABLES_MAX) { - DEBUG ((DEBUG_ERROR, "%a: can't install more than %d tables\n", - __FUNCTION__, INSTALLED_TABLES_MAX)); + DEBUG (( + DEBUG_ERROR, + "%a: can't install more than %d tables\n", + __FUNCTION__, + INSTALLED_TABLES_MAX + )); Status = EFI_OUT_OF_RESOURCES; goto RollbackSeenPointer; } - Status = AcpiProtocol->InstallAcpiTable (AcpiProtocol, - (VOID *)(UINTN)PointerValue, TableSize, - &InstalledKey[*NumInstalled]); + Status = AcpiProtocol->InstallAcpiTable ( + AcpiProtocol, + (VOID *)(UINTN)PointerValue, + TableSize, + &InstalledKey[*NumInstalled] + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: InstallAcpiTable(): %r\n", __FUNCTION__, - Status)); + DEBUG (( + DEBUG_ERROR, + "%a: InstallAcpiTable(): %r\n", + __FUNCTION__, + Status + )); goto RollbackSeenPointer; } + ++*NumInstalled; return EFI_SUCCESS; @@ -930,7 +1056,6 @@ RollbackSeenPointer: return Status; } - /** Download, process, and install ACPI table data from the QEMU loader interface. @@ -956,33 +1081,38 @@ RollbackSeenPointer: EFI_STATUS EFIAPI InstallQemuFwCfgTables ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol + IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol ) { - EFI_STATUS Status; - FIRMWARE_CONFIG_ITEM FwCfgItem; - UINTN FwCfgSize; - QEMU_LOADER_ENTRY *LoaderStart; - CONST QEMU_LOADER_ENTRY *LoaderEntry, *LoaderEnd; - CONST QEMU_LOADER_ENTRY *WritePointerSubsetEnd; - ORIGINAL_ATTRIBUTES *OriginalPciAttributes; - UINTN OriginalPciAttributesCount; - ORDERED_COLLECTION *AllocationsRestrictedTo32Bit; - S3_CONTEXT *S3Context; - ORDERED_COLLECTION *Tracker; - UINTN *InstalledKey; - INT32 Installed; - ORDERED_COLLECTION_ENTRY *TrackerEntry, *TrackerEntry2; - ORDERED_COLLECTION *SeenPointers; - ORDERED_COLLECTION_ENTRY *SeenPointerEntry, *SeenPointerEntry2; + EFI_STATUS Status; + FIRMWARE_CONFIG_ITEM FwCfgItem; + UINTN FwCfgSize; + QEMU_LOADER_ENTRY *LoaderStart; + CONST QEMU_LOADER_ENTRY *LoaderEntry, *LoaderEnd; + CONST QEMU_LOADER_ENTRY *WritePointerSubsetEnd; + ORIGINAL_ATTRIBUTES *OriginalPciAttributes; + UINTN OriginalPciAttributesCount; + ORDERED_COLLECTION *AllocationsRestrictedTo32Bit; + S3_CONTEXT *S3Context; + ORDERED_COLLECTION *Tracker; + UINTN *InstalledKey; + INT32 Installed; + ORDERED_COLLECTION_ENTRY *TrackerEntry, *TrackerEntry2; + ORDERED_COLLECTION *SeenPointers; + ORDERED_COLLECTION_ENTRY *SeenPointerEntry, *SeenPointerEntry2; Status = QemuFwCfgFindFile ("etc/table-loader", &FwCfgItem, &FwCfgSize); if (EFI_ERROR (Status)) { return Status; } + if (FwCfgSize % sizeof *LoaderEntry != 0) { - DEBUG ((DEBUG_ERROR, "%a: \"etc/table-loader\" has invalid size 0x%Lx\n", - __FUNCTION__, (UINT64)FwCfgSize)); + DEBUG (( + DEBUG_ERROR, + "%a: \"etc/table-loader\" has invalid size 0x%Lx\n", + __FUNCTION__, + (UINT64)FwCfgSize + )); return EFI_PROTOCOL_ERROR; } @@ -990,6 +1120,7 @@ InstallQemuFwCfgTables ( if (LoaderStart == NULL) { return EFI_OUT_OF_RESOURCES; } + EnablePciDecoding (&OriginalPciAttributes, &OriginalPciAttributesCount); QemuFwCfgSelectItem (FwCfgItem); QemuFwCfgReadBytes (FwCfgSize, LoaderStart); @@ -997,11 +1128,11 @@ InstallQemuFwCfgTables ( LoaderEnd = LoaderStart + FwCfgSize / sizeof *LoaderEntry; AllocationsRestrictedTo32Bit = NULL; - Status = CollectAllocationsRestrictedTo32Bit ( - &AllocationsRestrictedTo32Bit, - LoaderStart, - LoaderEnd - ); + Status = CollectAllocationsRestrictedTo32Bit ( + &AllocationsRestrictedTo32Bit, + LoaderStart, + LoaderEnd + ); if (EFI_ERROR (Status)) { goto FreeLoader; } @@ -1034,36 +1165,48 @@ InstallQemuFwCfgTables ( WritePointerSubsetEnd = LoaderStart; for (LoaderEntry = LoaderStart; LoaderEntry < LoaderEnd; ++LoaderEntry) { switch (LoaderEntry->Type) { - case QemuLoaderCmdAllocate: - Status = ProcessCmdAllocate ( - &LoaderEntry->Command.Allocate, - Tracker, - AllocationsRestrictedTo32Bit - ); - break; + case QemuLoaderCmdAllocate: + Status = ProcessCmdAllocate ( + &LoaderEntry->Command.Allocate, + Tracker, + AllocationsRestrictedTo32Bit + ); + break; - case QemuLoaderCmdAddPointer: - Status = ProcessCmdAddPointer (&LoaderEntry->Command.AddPointer, - Tracker); - break; + case QemuLoaderCmdAddPointer: + Status = ProcessCmdAddPointer ( + &LoaderEntry->Command.AddPointer, + Tracker + ); + break; - case QemuLoaderCmdAddChecksum: - Status = ProcessCmdAddChecksum (&LoaderEntry->Command.AddChecksum, - Tracker); - break; + case QemuLoaderCmdAddChecksum: + Status = ProcessCmdAddChecksum ( + &LoaderEntry->Command.AddChecksum, + Tracker + ); + break; - case QemuLoaderCmdWritePointer: - Status = ProcessCmdWritePointer (&LoaderEntry->Command.WritePointer, - Tracker, S3Context); + case QemuLoaderCmdWritePointer: + Status = ProcessCmdWritePointer ( + &LoaderEntry->Command.WritePointer, + Tracker, + S3Context + ); if (!EFI_ERROR (Status)) { WritePointerSubsetEnd = LoaderEntry + 1; } + break; - default: - DEBUG ((DEBUG_VERBOSE, "%a: unknown loader command: 0x%x\n", - __FUNCTION__, LoaderEntry->Type)); - break; + default: + DEBUG (( + DEBUG_VERBOSE, + "%a: unknown loader command: 0x%x\n", + __FUNCTION__, + LoaderEntry->Type + )); + break; } if (EFI_ERROR (Status)) { @@ -1113,6 +1256,7 @@ InstallQemuFwCfgTables ( if (EFI_ERROR (Status)) { goto UninstallAcpiTables; } + // // Ownership of S3Context has been transferred. // @@ -1134,10 +1278,12 @@ UninstallAcpiTables: for (SeenPointerEntry = OrderedCollectionMin (SeenPointers); SeenPointerEntry != NULL; - SeenPointerEntry = SeenPointerEntry2) { + SeenPointerEntry = SeenPointerEntry2) + { SeenPointerEntry2 = OrderedCollectionNext (SeenPointerEntry); OrderedCollectionDelete (SeenPointers, SeenPointerEntry, NULL); } + OrderedCollectionUninit (SeenPointers); FreeKeys: @@ -1164,21 +1310,28 @@ RollbackWritePointersAndFreeTracker: // not directly part of some ACPI table. // for (TrackerEntry = OrderedCollectionMin (Tracker); TrackerEntry != NULL; - TrackerEntry = TrackerEntry2) { - VOID *UserStruct; - BLOB *Blob; + TrackerEntry = TrackerEntry2) + { + VOID *UserStruct; + BLOB *Blob; TrackerEntry2 = OrderedCollectionNext (TrackerEntry); OrderedCollectionDelete (Tracker, TrackerEntry, &UserStruct); Blob = UserStruct; if (EFI_ERROR (Status) || Blob->HostsOnlyTableData) { - DEBUG ((DEBUG_VERBOSE, "%a: freeing \"%a\"\n", __FUNCTION__, - Blob->File)); + DEBUG (( + DEBUG_VERBOSE, + "%a: freeing \"%a\"\n", + __FUNCTION__, + Blob->File + )); gBS->FreePages ((UINTN)Blob->Base, EFI_SIZE_TO_PAGES (Blob->Size)); } + FreePool (Blob); } + OrderedCollectionUninit (Tracker); FreeS3Context: diff --git a/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpiPlatform.c b/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpiPlatform.c index 057a450af9..aff1ad0c97 100644 --- a/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpiPlatform.c +++ b/OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpiPlatform.c @@ -23,10 +23,10 @@ EFI_STATUS EFIAPI InstallAcpiTables ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable + IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = InstallQemuFwCfgTables (AcpiTable); return Status; diff --git a/OvmfPkg/AmdSev/BlobVerifierLibSevHashes/BlobVerifierSevHashes.c b/OvmfPkg/AmdSev/BlobVerifierLibSevHashes/BlobVerifierSevHashes.c index b9054879b0..65f040f947 100644 --- a/OvmfPkg/AmdSev/BlobVerifierLibSevHashes/BlobVerifierSevHashes.c +++ b/OvmfPkg/AmdSev/BlobVerifierLibSevHashes/BlobVerifierSevHashes.c @@ -42,25 +42,25 @@ #define SEV_CMDLINE_HASH_GUID \ (GUID) { 0x97d02dd8, 0xbd20, 0x4c94, { 0xaa, 0x78, 0xe7, 0x71, 0x4d, 0x36, 0xab, 0x2a } } -STATIC CONST EFI_GUID mSevKernelHashGuid = SEV_KERNEL_HASH_GUID; -STATIC CONST EFI_GUID mSevInitrdHashGuid = SEV_INITRD_HASH_GUID; -STATIC CONST EFI_GUID mSevCmdlineHashGuid = SEV_CMDLINE_HASH_GUID; +STATIC CONST EFI_GUID mSevKernelHashGuid = SEV_KERNEL_HASH_GUID; +STATIC CONST EFI_GUID mSevInitrdHashGuid = SEV_INITRD_HASH_GUID; +STATIC CONST EFI_GUID mSevCmdlineHashGuid = SEV_CMDLINE_HASH_GUID; #pragma pack (1) typedef struct { - GUID Guid; - UINT16 Len; - UINT8 Data[]; + GUID Guid; + UINT16 Len; + UINT8 Data[]; } HASH_TABLE; #pragma pack () -STATIC HASH_TABLE *mHashesTable; -STATIC UINT16 mHashesTableSize; +STATIC HASH_TABLE *mHashesTable; +STATIC UINT16 mHashesTableSize; STATIC -CONST GUID* +CONST GUID * FindBlobEntryGuid ( - IN CONST CHAR16 *BlobName + IN CONST CHAR16 *BlobName ) { if (StrCmp (BlobName, L"kernel") == 0) { @@ -88,26 +88,32 @@ FindBlobEntryGuid ( EFI_STATUS EFIAPI VerifyBlob ( - IN CONST CHAR16 *BlobName, - IN CONST VOID *Buf, - IN UINT32 BufSize + IN CONST CHAR16 *BlobName, + IN CONST VOID *Buf, + IN UINT32 BufSize ) { - CONST GUID *Guid; - INT32 Remaining; - HASH_TABLE *Entry; + CONST GUID *Guid; + INT32 Remaining; + HASH_TABLE *Entry; - if (mHashesTable == NULL || mHashesTableSize == 0) { - DEBUG ((DEBUG_ERROR, + if ((mHashesTable == NULL) || (mHashesTableSize == 0)) { + DEBUG (( + DEBUG_ERROR, "%a: Verifier called but no hashes table discoverd in MEMFD\n", - __FUNCTION__)); + __FUNCTION__ + )); return EFI_ACCESS_DENIED; } Guid = FindBlobEntryGuid (BlobName); if (Guid == NULL) { - DEBUG ((DEBUG_ERROR, "%a: Unknown blob name \"%s\"\n", __FUNCTION__, - BlobName)); + DEBUG (( + DEBUG_ERROR, + "%a: Unknown blob name \"%s\"\n", + __FUNCTION__, + BlobName + )); return EFI_ACCESS_DENIED; } @@ -118,10 +124,11 @@ VerifyBlob ( for (Entry = mHashesTable, Remaining = mHashesTableSize; Remaining >= sizeof *Entry && Remaining >= Entry->Len; Remaining -= Entry->Len, - Entry = (HASH_TABLE *)((UINT8 *)Entry + Entry->Len)) { - UINTN EntrySize; - EFI_STATUS Status; - UINT8 Hash[SHA256_DIGEST_SIZE]; + Entry = (HASH_TABLE *)((UINT8 *)Entry + Entry->Len)) + { + UINTN EntrySize; + EFI_STATUS Status; + UINT8 Hash[SHA256_DIGEST_SIZE]; if (!CompareGuid (&Entry->Guid, Guid)) { continue; @@ -131,8 +138,13 @@ VerifyBlob ( EntrySize = Entry->Len - sizeof Entry->Guid - sizeof Entry->Len; if (EntrySize != SHA256_DIGEST_SIZE) { - DEBUG ((DEBUG_ERROR, "%a: Hash has the wrong size %d != %d\n", - __FUNCTION__, EntrySize, SHA256_DIGEST_SIZE)); + DEBUG (( + DEBUG_ERROR, + "%a: Hash has the wrong size %d != %d\n", + __FUNCTION__, + EntrySize, + SHA256_DIGEST_SIZE + )); return EFI_ACCESS_DENIED; } @@ -144,18 +156,31 @@ VerifyBlob ( if (CompareMem (Entry->Data, Hash, EntrySize) == 0) { Status = EFI_SUCCESS; - DEBUG ((DEBUG_INFO, "%a: Hash comparison succeeded for \"%s\"\n", - __FUNCTION__, BlobName)); + DEBUG (( + DEBUG_INFO, + "%a: Hash comparison succeeded for \"%s\"\n", + __FUNCTION__, + BlobName + )); } else { Status = EFI_ACCESS_DENIED; - DEBUG ((DEBUG_ERROR, "%a: Hash comparison failed for \"%s\"\n", - __FUNCTION__, BlobName)); + DEBUG (( + DEBUG_ERROR, + "%a: Hash comparison failed for \"%s\"\n", + __FUNCTION__, + BlobName + )); } + return Status; } - DEBUG ((DEBUG_ERROR, "%a: Hash GUID %g not found in table\n", __FUNCTION__, - Guid)); + DEBUG (( + DEBUG_ERROR, + "%a: Hash GUID %g not found in table\n", + __FUNCTION__, + Guid + )); return EFI_ACCESS_DENIED; } @@ -174,29 +199,38 @@ BlobVerifierLibSevHashesConstructor ( VOID ) { - HASH_TABLE *Ptr; - UINT32 Size; + HASH_TABLE *Ptr; + UINT32 Size; - mHashesTable = NULL; + mHashesTable = NULL; mHashesTableSize = 0; - Ptr = (void *)(UINTN)FixedPcdGet64 (PcdQemuHashTableBase); + Ptr = (void *)(UINTN)FixedPcdGet64 (PcdQemuHashTableBase); Size = FixedPcdGet32 (PcdQemuHashTableSize); - if (Ptr == NULL || Size < sizeof *Ptr || + if ((Ptr == NULL) || (Size < sizeof *Ptr) || !CompareGuid (&Ptr->Guid, &SEV_HASH_TABLE_GUID) || - Ptr->Len < sizeof *Ptr || Ptr->Len > Size) { + (Ptr->Len < sizeof *Ptr) || (Ptr->Len > Size)) + { return RETURN_SUCCESS; } - DEBUG ((DEBUG_INFO, "%a: Found injected hashes table in secure location\n", - __FUNCTION__)); + DEBUG (( + DEBUG_INFO, + "%a: Found injected hashes table in secure location\n", + __FUNCTION__ + )); - mHashesTable = (HASH_TABLE *)Ptr->Data; + mHashesTable = (HASH_TABLE *)Ptr->Data; mHashesTableSize = Ptr->Len - sizeof Ptr->Guid - sizeof Ptr->Len; - DEBUG ((DEBUG_VERBOSE, "%a: mHashesTable=0x%p, Size=%u\n", __FUNCTION__, - mHashesTable, mHashesTableSize)); + DEBUG (( + DEBUG_VERBOSE, + "%a: mHashesTable=0x%p, Size=%u\n", + __FUNCTION__, + mHashesTable, + mHashesTableSize + )); return RETURN_SUCCESS; } diff --git a/OvmfPkg/AmdSev/SecretDxe/SecretDxe.c b/OvmfPkg/AmdSev/SecretDxe/SecretDxe.c index 934ad20763..3d84b25450 100644 --- a/OvmfPkg/AmdSev/SecretDxe/SecretDxe.c +++ b/OvmfPkg/AmdSev/SecretDxe/SecretDxe.c @@ -8,16 +8,16 @@ #include #include -STATIC CONFIDENTIAL_COMPUTING_SECRET_LOCATION mSecretDxeTable = { +STATIC CONFIDENTIAL_COMPUTING_SECRET_LOCATION mSecretDxeTable = { FixedPcdGet32 (PcdSevLaunchSecretBase), FixedPcdGet32 (PcdSevLaunchSecretSize), }; EFI_STATUS EFIAPI -InitializeSecretDxe( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable +InitializeSecretDxe ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { return gBS->InstallConfigurationTable ( diff --git a/OvmfPkg/AmdSevDxe/AmdSevDxe.c b/OvmfPkg/AmdSevDxe/AmdSevDxe.c index c66c4e9b92..be26dde71f 100644 --- a/OvmfPkg/AmdSevDxe/AmdSevDxe.c +++ b/OvmfPkg/AmdSevDxe/AmdSevDxe.c @@ -22,8 +22,8 @@ EFI_STATUS EFIAPI AmdSevDxeEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; @@ -48,11 +48,12 @@ AmdSevDxeEntryPoint ( Status = gDS->GetMemorySpaceMap (&NumEntries, &AllDescMap); if (!EFI_ERROR (Status)) { for (Index = 0; Index < NumEntries; Index++) { - CONST EFI_GCD_MEMORY_SPACE_DESCRIPTOR *Desc; + CONST EFI_GCD_MEMORY_SPACE_DESCRIPTOR *Desc; Desc = &AllDescMap[Index]; - if (Desc->GcdMemoryType == EfiGcdMemoryTypeMemoryMappedIo || - Desc->GcdMemoryType == EfiGcdMemoryTypeNonExistent) { + if ((Desc->GcdMemoryType == EfiGcdMemoryTypeMemoryMappedIo) || + (Desc->GcdMemoryType == EfiGcdMemoryTypeNonExistent)) + { Status = MemEncryptSevClearMmioPageEncMask ( 0, Desc->BaseAddress, @@ -101,8 +102,8 @@ AmdSevDxeEntryPoint ( // is completed (See OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c). // if (FeaturePcdGet (PcdSmmSmramRequire)) { - UINTN MapPagesBase; - UINTN MapPagesCount; + UINTN MapPagesBase; + UINTN MapPagesCount; Status = MemEncryptSevLocateInitialSmramSaveStateMapPages ( &MapPagesBase, @@ -123,8 +124,12 @@ AmdSevDxeEntryPoint ( MapPagesCount // NumPages ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: MemEncryptSevClearPageEncMask(): %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: MemEncryptSevClearPageEncMask(): %r\n", + __FUNCTION__, + Status + )); ASSERT (FALSE); CpuDeadLoop (); } diff --git a/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.c b/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.c index 9ccdb4d91c..999e9f151e 100644 --- a/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.c +++ b/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.c @@ -13,10 +13,10 @@ EFI_STATUS EFIAPI InstallAcpiTable ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, - IN VOID *AcpiTableBuffer, - IN UINTN AcpiTableBufferSize, - OUT UINTN *TableKey + IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, + IN VOID *AcpiTableBuffer, + IN UINTN AcpiTableBufferSize, + OUT UINTN *TableKey ) { return AcpiProtocol->InstallAcpiTable ( @@ -27,7 +27,6 @@ InstallAcpiTable ( ); } - /** Locate the first instance of a protocol. If the protocol requested is an FV protocol, then it will return the first FV that contains the ACPI table @@ -42,18 +41,18 @@ InstallAcpiTable ( **/ EFI_STATUS LocateFvInstanceWithTables ( - OUT EFI_FIRMWARE_VOLUME2_PROTOCOL **Instance + OUT EFI_FIRMWARE_VOLUME2_PROTOCOL **Instance ) { - EFI_STATUS Status; - EFI_HANDLE *HandleBuffer; - UINTN NumberOfHandles; - EFI_FV_FILETYPE FileType; - UINT32 FvStatus; - EFI_FV_FILE_ATTRIBUTES Attributes; - UINTN Size; - UINTN Index; - EFI_FIRMWARE_VOLUME2_PROTOCOL *FvInstance; + EFI_STATUS Status; + EFI_HANDLE *HandleBuffer; + UINTN NumberOfHandles; + EFI_FV_FILETYPE FileType; + UINT32 FvStatus; + EFI_FV_FILE_ATTRIBUTES Attributes; + UINTN Size; + UINTN Index; + EFI_FIRMWARE_VOLUME2_PROTOCOL *FvInstance; FvStatus = 0; @@ -61,12 +60,12 @@ LocateFvInstanceWithTables ( // Locate protocol. // Status = gBS->LocateHandleBuffer ( - ByProtocol, - &gEfiFirmwareVolume2ProtocolGuid, - NULL, - &NumberOfHandles, - &HandleBuffer - ); + ByProtocol, + &gEfiFirmwareVolume2ProtocolGuid, + NULL, + &NumberOfHandles, + &HandleBuffer + ); if (EFI_ERROR (Status)) { // // Defined errors at this time are not found and out of resources. @@ -83,10 +82,10 @@ LocateFvInstanceWithTables ( // This should not fail because of LocateHandleBuffer // Status = gBS->HandleProtocol ( - HandleBuffer[Index], - &gEfiFirmwareVolume2ProtocolGuid, - (VOID**) &FvInstance - ); + HandleBuffer[Index], + &gEfiFirmwareVolume2ProtocolGuid, + (VOID **)&FvInstance + ); ASSERT_EFI_ERROR (Status); // @@ -94,7 +93,7 @@ LocateFvInstanceWithTables ( // Status = FvInstance->ReadFile ( FvInstance, - (EFI_GUID*)PcdGetPtr (PcdAcpiTableStorageFile), + (EFI_GUID *)PcdGetPtr (PcdAcpiTableStorageFile), NULL, &Size, &FileType, @@ -124,7 +123,6 @@ LocateFvInstanceWithTables ( return Status; } - /** Find ACPI tables in an FV and install them. @@ -140,18 +138,18 @@ LocateFvInstanceWithTables ( EFI_STATUS EFIAPI InstallOvmfFvTables ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable + IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable ) { - EFI_STATUS Status; - EFI_FIRMWARE_VOLUME2_PROTOCOL *FwVol; - INTN Instance; - EFI_ACPI_COMMON_HEADER *CurrentTable; - UINTN TableHandle; - UINT32 FvStatus; - UINTN TableSize; - UINTN Size; - EFI_ACPI_TABLE_INSTALL_ACPI_TABLE TableInstallFunction; + EFI_STATUS Status; + EFI_FIRMWARE_VOLUME2_PROTOCOL *FwVol; + INTN Instance; + EFI_ACPI_COMMON_HEADER *CurrentTable; + UINTN TableHandle; + UINT32 FvStatus; + UINTN TableSize; + UINTN Size; + EFI_ACPI_TABLE_INSTALL_ACPI_TABLE TableInstallFunction; Instance = 0; CurrentTable = NULL; @@ -171,19 +169,19 @@ InstallOvmfFvTables ( if (EFI_ERROR (Status)) { return EFI_ABORTED; } + ASSERT (FwVol != NULL); // // Read tables from the storage file. // while (Status == EFI_SUCCESS) { - Status = FwVol->ReadSection ( FwVol, - (EFI_GUID*)PcdGetPtr (PcdAcpiTableStorageFile), + (EFI_GUID *)PcdGetPtr (PcdAcpiTableStorageFile), EFI_SECTION_RAW, Instance, - (VOID**) &CurrentTable, + (VOID **)&CurrentTable, &Size, &FvStatus ); @@ -193,7 +191,7 @@ InstallOvmfFvTables ( // TableHandle = 0; - TableSize = ((EFI_ACPI_DESCRIPTION_HEADER *) CurrentTable)->Length; + TableSize = ((EFI_ACPI_DESCRIPTION_HEADER *)CurrentTable)->Length; ASSERT (Size >= TableSize); // @@ -240,13 +238,12 @@ InstallOvmfFvTables ( EFI_STATUS EFIAPI InstallAcpiTables ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable + IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = InstallOvmfFvTables (AcpiTable); return Status; } - diff --git a/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.h b/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.h index 994ee2c7cd..54d1af073e 100644 --- a/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.h +++ b/OvmfPkg/Bhyve/AcpiPlatformDxe/AcpiPlatform.h @@ -22,8 +22,8 @@ #include typedef struct { - EFI_PCI_IO_PROTOCOL *PciIo; - UINT64 PciAttributes; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT64 PciAttributes; } ORIGINAL_ATTRIBUTES; typedef struct S3_CONTEXT S3_CONTEXT; @@ -31,43 +31,43 @@ typedef struct S3_CONTEXT S3_CONTEXT; EFI_STATUS EFIAPI InstallAcpiTable ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, - IN VOID *AcpiTableBuffer, - IN UINTN AcpiTableBufferSize, - OUT UINTN *TableKey + IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, + IN VOID *AcpiTableBuffer, + IN UINTN AcpiTableBufferSize, + OUT UINTN *TableKey ); EFI_STATUS EFIAPI -BhyveInstallAcpiTable( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, - IN VOID *AcpiTableBuffer, - IN UINTN AcpiTableBufferSize, - OUT UINTN *TableKey +BhyveInstallAcpiTable ( + IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, + IN VOID *AcpiTableBuffer, + IN UINTN AcpiTableBufferSize, + OUT UINTN *TableKey ); EFI_STATUS EFIAPI InstallXenTables ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol + IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol ); EFI_STATUS EFIAPI InstallAcpiTables ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable + IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable ); VOID EnablePciDecoding ( - OUT ORIGINAL_ATTRIBUTES **OriginalAttributes, - OUT UINTN *Count + OUT ORIGINAL_ATTRIBUTES **OriginalAttributes, + OUT UINTN *Count ); VOID RestorePciDecoding ( - IN ORIGINAL_ATTRIBUTES *OriginalAttributes, - IN UINTN Count + IN ORIGINAL_ATTRIBUTES *OriginalAttributes, + IN UINTN Count ); #endif /* _ACPI_PLATFORM_H_INCLUDED_ */ diff --git a/OvmfPkg/Bhyve/AcpiPlatformDxe/Bhyve.c b/OvmfPkg/Bhyve/AcpiPlatformDxe/Bhyve.c index 01ee894746..8e80aa33e1 100644 --- a/OvmfPkg/Bhyve/AcpiPlatformDxe/Bhyve.c +++ b/OvmfPkg/Bhyve/AcpiPlatformDxe/Bhyve.c @@ -16,28 +16,28 @@ STATIC EFI_STATUS EFIAPI BhyveInstallAcpiMadtTable ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, - IN VOID *AcpiTableBuffer, - IN UINTN AcpiTableBufferSize, - OUT UINTN *TableKey + IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, + IN VOID *AcpiTableBuffer, + IN UINTN AcpiTableBufferSize, + OUT UINTN *TableKey ) { - UINT32 CpuCount; - UINTN cSize; - UINTN NewBufferSize; - EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER *Madt; - EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE *LocalApic; - EFI_ACPI_1_0_IO_APIC_STRUCTURE *IoApic; - EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE *Iso; - VOID *Ptr; - UINTN Loop; - EFI_STATUS Status; + UINT32 CpuCount; + UINTN cSize; + UINTN NewBufferSize; + EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER *Madt; + EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE *LocalApic; + EFI_ACPI_1_0_IO_APIC_STRUCTURE *IoApic; + EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE *Iso; + VOID *Ptr; + UINTN Loop; + EFI_STATUS Status; ASSERT (AcpiTableBufferSize >= sizeof (EFI_ACPI_DESCRIPTION_HEADER)); // Query the host for the number of vCPUs CpuCount = 0; - cSize = sizeof(CpuCount); + cSize = sizeof (CpuCount); if (BhyveFwCtlGet ("hw.ncpu", &CpuCount, &cSize) == RETURN_SUCCESS) { DEBUG ((DEBUG_INFO, "Retrieved CpuCount %d\n", CpuCount)); ASSERT (CpuCount >= 1); @@ -57,44 +57,45 @@ BhyveInstallAcpiMadtTable ( } CopyMem (&(Madt->Header), AcpiTableBuffer, sizeof (EFI_ACPI_DESCRIPTION_HEADER)); - Madt->Header.Length = (UINT32) NewBufferSize; + Madt->Header.Length = (UINT32)NewBufferSize; Madt->LocalApicAddress = 0xFEE00000; Madt->Flags = EFI_ACPI_1_0_PCAT_COMPAT; - Ptr = Madt + 1; + Ptr = Madt + 1; LocalApic = Ptr; for (Loop = 0; Loop < CpuCount; ++Loop) { LocalApic->Type = EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC; LocalApic->Length = sizeof (*LocalApic); - LocalApic->AcpiProcessorId = (UINT8) Loop; - LocalApic->ApicId = (UINT8) Loop; + LocalApic->AcpiProcessorId = (UINT8)Loop; + LocalApic->ApicId = (UINT8)Loop; LocalApic->Flags = 1; // enabled ++LocalApic; } + Ptr = LocalApic; - IoApic = Ptr; + IoApic = Ptr; IoApic->Type = EFI_ACPI_1_0_IO_APIC; IoApic->Length = sizeof (*IoApic); - IoApic->IoApicId = (UINT8) CpuCount; + IoApic->IoApicId = (UINT8)CpuCount; IoApic->Reserved = EFI_ACPI_RESERVED_BYTE; IoApic->IoApicAddress = 0xFEC00000; IoApic->SystemVectorBase = 0x00000000; - Ptr = IoApic + 1; + Ptr = IoApic + 1; // // IRQ0 (8254 Timer) => IRQ2 (PIC) Interrupt Source Override Structure // - Iso = Ptr; + Iso = Ptr; Iso->Type = EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE; Iso->Length = sizeof (*Iso); Iso->Bus = 0x00; // ISA Iso->Source = 0x00; // IRQ0 Iso->GlobalSystemInterruptVector = 0x00000002; Iso->Flags = 0x0000; // Conforms to specs of the bus - Ptr = Iso + 1; + Ptr = Iso + 1; - ASSERT ((UINTN) ((UINT8 *)Ptr - (UINT8 *)Madt) == NewBufferSize); + ASSERT ((UINTN)((UINT8 *)Ptr - (UINT8 *)Madt) == NewBufferSize); Status = InstallAcpiTable (AcpiProtocol, Madt, NewBufferSize, TableKey); FreePool (Madt); @@ -105,22 +106,22 @@ BhyveInstallAcpiMadtTable ( EFI_STATUS EFIAPI BhyveInstallAcpiTable ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, - IN VOID *AcpiTableBuffer, - IN UINTN AcpiTableBufferSize, - OUT UINTN *TableKey + IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol, + IN VOID *AcpiTableBuffer, + IN UINTN AcpiTableBufferSize, + OUT UINTN *TableKey ) { EFI_ACPI_DESCRIPTION_HEADER *Hdr; EFI_ACPI_TABLE_INSTALL_ACPI_TABLE TableInstallFunction; - Hdr = (EFI_ACPI_DESCRIPTION_HEADER*) AcpiTableBuffer; + Hdr = (EFI_ACPI_DESCRIPTION_HEADER *)AcpiTableBuffer; switch (Hdr->Signature) { - case EFI_ACPI_1_0_APIC_SIGNATURE: - TableInstallFunction = BhyveInstallAcpiMadtTable; - break; - default: - TableInstallFunction = InstallAcpiTable; + case EFI_ACPI_1_0_APIC_SIGNATURE: + TableInstallFunction = BhyveInstallAcpiMadtTable; + break; + default: + TableInstallFunction = InstallAcpiTable; } return TableInstallFunction ( diff --git a/OvmfPkg/Bhyve/AcpiPlatformDxe/EntryPoint.c b/OvmfPkg/Bhyve/AcpiPlatformDxe/EntryPoint.c index f66f892911..b6ef101b2a 100644 --- a/OvmfPkg/Bhyve/AcpiPlatformDxe/EntryPoint.c +++ b/OvmfPkg/Bhyve/AcpiPlatformDxe/EntryPoint.c @@ -16,49 +16,50 @@ FindAcpiTableProtocol ( VOID ) { - EFI_STATUS Status; - EFI_ACPI_TABLE_PROTOCOL *AcpiTable; + EFI_STATUS Status; + EFI_ACPI_TABLE_PROTOCOL *AcpiTable; Status = gBS->LocateProtocol ( &gEfiAcpiTableProtocolGuid, NULL, - (VOID**)&AcpiTable + (VOID **)&AcpiTable ); ASSERT_EFI_ERROR (Status); return AcpiTable; } - STATIC VOID EFIAPI OnRootBridgesConnected ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - EFI_STATUS Status; + EFI_STATUS Status; - DEBUG ((DEBUG_INFO, + DEBUG (( + DEBUG_INFO, "%a: root bridges have been connected, installing ACPI tables\n", - __FUNCTION__)); + __FUNCTION__ + )); Status = InstallAcpiTables (FindAcpiTableProtocol ()); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: InstallAcpiTables: %r\n", __FUNCTION__, Status)); } + gBS->CloseEvent (Event); } - EFI_STATUS EFIAPI AcpiPlatformEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - EFI_EVENT RootBridgesConnected; + EFI_STATUS Status; + EFI_EVENT RootBridgesConnected; // // If the platform doesn't support PCI, or PCI enumeration has been disabled, @@ -66,8 +67,12 @@ AcpiPlatformEntryPoint ( // the full functionality. // if (PcdGetBool (PcdPciDisableBusEnumeration)) { - DEBUG ((DEBUG_INFO, "%a: PCI or its enumeration disabled, installing " - "ACPI tables\n", __FUNCTION__)); + DEBUG (( + DEBUG_INFO, + "%a: PCI or its enumeration disabled, installing " + "ACPI tables\n", + __FUNCTION__ + )); return InstallAcpiTables (FindAcpiTableProtocol ()); } @@ -77,13 +82,20 @@ AcpiPlatformEntryPoint ( // setup. (Note that we're a DXE_DRIVER; our entry point function is invoked // strictly before BDS is entered and can connect the root bridges.) // - Status = gBS->CreateEventEx (EVT_NOTIFY_SIGNAL, TPL_CALLBACK, - OnRootBridgesConnected, NULL /* Context */, - &gRootBridgesConnectedEventGroupGuid, &RootBridgesConnected); + Status = gBS->CreateEventEx ( + EVT_NOTIFY_SIGNAL, + TPL_CALLBACK, + OnRootBridgesConnected, + NULL /* Context */, + &gRootBridgesConnectedEventGroupGuid, + &RootBridgesConnected + ); if (!EFI_ERROR (Status)) { - DEBUG ((DEBUG_INFO, + DEBUG (( + DEBUG_INFO, "%a: waiting for root bridges to be connected, registered callback\n", - __FUNCTION__)); + __FUNCTION__ + )); } return Status; diff --git a/OvmfPkg/Bhyve/AcpiPlatformDxe/PciDecoding.c b/OvmfPkg/Bhyve/AcpiPlatformDxe/PciDecoding.c index 73894106c9..d31fd65393 100644 --- a/OvmfPkg/Bhyve/AcpiPlatformDxe/PciDecoding.c +++ b/OvmfPkg/Bhyve/AcpiPlatformDxe/PciDecoding.c @@ -11,7 +11,6 @@ #include "AcpiPlatform.h" - /** Collect all PciIo protocol instances in the system. Save their original attributes, and enable IO and MMIO decoding for each. @@ -38,15 +37,15 @@ **/ VOID EnablePciDecoding ( - OUT ORIGINAL_ATTRIBUTES **OriginalAttributes, - OUT UINTN *Count + OUT ORIGINAL_ATTRIBUTES **OriginalAttributes, + OUT UINTN *Count ) { - EFI_STATUS Status; - UINTN NoHandles; - EFI_HANDLE *Handles; - ORIGINAL_ATTRIBUTES *OrigAttrs; - UINTN Idx; + EFI_STATUS Status; + UINTN NoHandles; + EFI_HANDLE *Handles; + ORIGINAL_ATTRIBUTES *OrigAttrs; + UINTN Idx; *OriginalAttributes = NULL; *Count = 0; @@ -59,8 +58,13 @@ EnablePciDecoding ( return; } - Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiPciIoProtocolGuid, - NULL /* SearchKey */, &NoHandles, &Handles); + Status = gBS->LocateHandleBuffer ( + ByProtocol, + &gEfiPciIoProtocolGuid, + NULL /* SearchKey */, + &NoHandles, + &Handles + ); if (Status == EFI_NOT_FOUND) { // // No PCI devices were found on either of the root bridges. We're done. @@ -69,49 +73,75 @@ EnablePciDecoding ( } if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, "%a: LocateHandleBuffer(): %r\n", __FUNCTION__, - Status)); + DEBUG (( + DEBUG_WARN, + "%a: LocateHandleBuffer(): %r\n", + __FUNCTION__, + Status + )); return; } OrigAttrs = AllocatePool (NoHandles * sizeof *OrigAttrs); if (OrigAttrs == NULL) { - DEBUG ((DEBUG_WARN, "%a: AllocatePool(): out of resources\n", - __FUNCTION__)); + DEBUG (( + DEBUG_WARN, + "%a: AllocatePool(): out of resources\n", + __FUNCTION__ + )); goto FreeHandles; } for (Idx = 0; Idx < NoHandles; ++Idx) { - EFI_PCI_IO_PROTOCOL *PciIo; - UINT64 Attributes; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT64 Attributes; // // Look up PciIo on the handle and stash it // - Status = gBS->HandleProtocol (Handles[Idx], &gEfiPciIoProtocolGuid, - (VOID**)&PciIo); + Status = gBS->HandleProtocol ( + Handles[Idx], + &gEfiPciIoProtocolGuid, + (VOID **)&PciIo + ); ASSERT_EFI_ERROR (Status); OrigAttrs[Idx].PciIo = PciIo; // // Stash the current attributes // - Status = PciIo->Attributes (PciIo, EfiPciIoAttributeOperationGet, 0, - &OrigAttrs[Idx].PciAttributes); + Status = PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationGet, + 0, + &OrigAttrs[Idx].PciAttributes + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, "%a: EfiPciIoAttributeOperationGet: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_WARN, + "%a: EfiPciIoAttributeOperationGet: %r\n", + __FUNCTION__, + Status + )); goto RestoreAttributes; } // // Retrieve supported attributes // - Status = PciIo->Attributes (PciIo, EfiPciIoAttributeOperationSupported, 0, - &Attributes); + Status = PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationSupported, + 0, + &Attributes + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, "%a: EfiPciIoAttributeOperationSupported: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_WARN, + "%a: EfiPciIoAttributeOperationSupported: %r\n", + __FUNCTION__, + Status + )); goto RestoreAttributes; } @@ -119,11 +149,19 @@ EnablePciDecoding ( // Enable IO and MMIO decoding // Attributes &= EFI_PCI_IO_ATTRIBUTE_IO | EFI_PCI_IO_ATTRIBUTE_MEMORY; - Status = PciIo->Attributes (PciIo, EfiPciIoAttributeOperationEnable, - Attributes, NULL); + Status = PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationEnable, + Attributes, + NULL + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, "%a: EfiPciIoAttributeOperationEnable: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_WARN, + "%a: EfiPciIoAttributeOperationEnable: %r\n", + __FUNCTION__, + Status + )); goto RestoreAttributes; } } @@ -139,19 +177,20 @@ EnablePciDecoding ( RestoreAttributes: while (Idx > 0) { --Idx; - OrigAttrs[Idx].PciIo->Attributes (OrigAttrs[Idx].PciIo, + OrigAttrs[Idx].PciIo->Attributes ( + OrigAttrs[Idx].PciIo, EfiPciIoAttributeOperationSet, OrigAttrs[Idx].PciAttributes, NULL ); } + FreePool (OrigAttrs); FreeHandles: FreePool (Handles); } - /** Restore the original PCI attributes saved with EnablePciDecoding(). @@ -169,11 +208,11 @@ FreeHandles: **/ VOID RestorePciDecoding ( - IN ORIGINAL_ATTRIBUTES *OriginalAttributes, - IN UINTN Count + IN ORIGINAL_ATTRIBUTES *OriginalAttributes, + IN UINTN Count ) { - UINTN Idx; + UINTN Idx; ASSERT ((OriginalAttributes == NULL) == (Count == 0)); if (OriginalAttributes == NULL) { @@ -188,5 +227,6 @@ RestorePciDecoding ( NULL ); } + FreePool (OriginalAttributes); } diff --git a/OvmfPkg/Bhyve/AcpiTables/Platform.h b/OvmfPkg/Bhyve/AcpiTables/Platform.h index c6d43041f3..4561adc9f2 100644 --- a/OvmfPkg/Bhyve/AcpiTables/Platform.h +++ b/OvmfPkg/Bhyve/AcpiTables/Platform.h @@ -20,53 +20,53 @@ // // ACPI table information used to initialize tables. // -#define EFI_ACPI_OEM_ID 'B','H','Y','V','E',' ' // OEMID 6 bytes long -#define EFI_ACPI_OEM_REVISION 0x1 -#define EFI_ACPI_CREATOR_ID SIGNATURE_32('B','H','Y','V') -#define EFI_ACPI_CREATOR_REVISION 0x00000001 +#define EFI_ACPI_OEM_ID 'B','H','Y','V','E',' ' // OEMID 6 bytes long +#define EFI_ACPI_OEM_REVISION 0x1 +#define EFI_ACPI_CREATOR_ID SIGNATURE_32('B','H','Y','V') +#define EFI_ACPI_CREATOR_REVISION 0x00000001 -#define INT_MODEL 0x01 -#define SCI_INT_VECTOR 0x0009 -#define SMI_CMD_IO_PORT 0xB2 -#define ACPI_ENABLE 0xA0 -#define ACPI_DISABLE 0xA1 -#define S4BIOS_REQ 0x00 -#define PM1a_EVT_BLK 0x00000400 /* TNXXX */ -#define PM1b_EVT_BLK 0x00000000 -#define PM1a_CNT_BLK 0x00000404 /* TNXXX */ -#define PM1b_CNT_BLK 0x00000000 -#define PM2_CNT_BLK 0x00000000 -#define PM_TMR_BLK 0x00000408 -#define GPE0_BLK 0x00000000 -#define GPE1_BLK 0x00000000 -#define PM1_EVT_LEN 0x04 -#define PM1_CNT_LEN 0x02 -#define PM2_CNT_LEN 0x00 -#define PM_TM_LEN 0x04 -#define GPE0_BLK_LEN 0x00 -#define GPE1_BLK_LEN 0x00 -#define GPE1_BASE 0x00 -#define RESERVED 0x00 -#define P_LVL2_LAT 0x0000 -#define P_LVL3_LAT 0x0000 -#define FLUSH_SIZE 0x0000 -#define FLUSH_STRIDE 0x0000 -#define DUTY_OFFSET 0x00 -#define DUTY_WIDTH 0x00 -#define DAY_ALRM 0x00 -#define MON_ALRM 0x00 -#define CENTURY 0x32 -#define IAPC_BOOT_ARCH 0x12 /* 8042 present, disable PCIe ASPM */ -#define FACP_FLAGS (EFI_ACPI_1_0_WBINVD | EFI_ACPI_1_0_PROC_C1 | \ +#define INT_MODEL 0x01 +#define SCI_INT_VECTOR 0x0009 +#define SMI_CMD_IO_PORT 0xB2 +#define ACPI_ENABLE 0xA0 +#define ACPI_DISABLE 0xA1 +#define S4BIOS_REQ 0x00 +#define PM1a_EVT_BLK 0x00000400 /* TNXXX */ +#define PM1b_EVT_BLK 0x00000000 +#define PM1a_CNT_BLK 0x00000404 /* TNXXX */ +#define PM1b_CNT_BLK 0x00000000 +#define PM2_CNT_BLK 0x00000000 +#define PM_TMR_BLK 0x00000408 +#define GPE0_BLK 0x00000000 +#define GPE1_BLK 0x00000000 +#define PM1_EVT_LEN 0x04 +#define PM1_CNT_LEN 0x02 +#define PM2_CNT_LEN 0x00 +#define PM_TM_LEN 0x04 +#define GPE0_BLK_LEN 0x00 +#define GPE1_BLK_LEN 0x00 +#define GPE1_BASE 0x00 +#define RESERVED 0x00 +#define P_LVL2_LAT 0x0000 +#define P_LVL3_LAT 0x0000 +#define FLUSH_SIZE 0x0000 +#define FLUSH_STRIDE 0x0000 +#define DUTY_OFFSET 0x00 +#define DUTY_WIDTH 0x00 +#define DAY_ALRM 0x00 +#define MON_ALRM 0x00 +#define CENTURY 0x32 +#define IAPC_BOOT_ARCH 0x12 /* 8042 present, disable PCIe ASPM */ +#define FACP_FLAGS (EFI_ACPI_1_0_WBINVD | EFI_ACPI_1_0_PROC_C1 | \ EFI_ACPI_1_0_SLP_BUTTON | EFI_ACPI_1_0_TMR_VAL_EXT | \ EFI_ACPI_2_0_RESET_REG_SUP | \ EFI_ACPI_3_0_FORCE_APIC_PHYSICAL_DESTINATION_MODE) -#define FACP_RESET_REG { \ +#define FACP_RESET_REG { \ EFI_ACPI_3_0_SYSTEM_IO, /* Address Space ID */ \ 8, /* Bit Width */ \ 0, /* Bit Offset */ \ EFI_ACPI_3_0_BYTE, /* Byte Access */ \ 0xCF9 /* I/O Port */ \ } -#define FACP_RESET_VAL 0x6 +#define FACP_RESET_VAL 0x6 #endif diff --git a/OvmfPkg/Bhyve/BhyveRfbDxe/ComponentName.c b/OvmfPkg/Bhyve/BhyveRfbDxe/ComponentName.c index 673cd235a1..5e734d0503 100644 --- a/OvmfPkg/Bhyve/BhyveRfbDxe/ComponentName.c +++ b/OvmfPkg/Bhyve/BhyveRfbDxe/ComponentName.c @@ -30,17 +30,17 @@ EmuGopComponentNameGetDriverName ( EFI_STATUS EFIAPI EmuGopComponentNameGetControllerName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ); // // EFI Component Name Protocol // -EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName = { +EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName = { EmuGopComponentNameGetDriverName, EmuGopComponentNameGetControllerName, "eng" @@ -49,19 +49,17 @@ EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName = { // // EFI Component Name 2 Protocol // -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) EmuGopComponentNameGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) EmuGopComponentNameGetControllerName, +GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)EmuGopComponentNameGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)EmuGopComponentNameGetControllerName, "en" }; - -EFI_UNICODE_STRING_TABLE mEmuGopDriverNameTable[] = { +EFI_UNICODE_STRING_TABLE mEmuGopDriverNameTable[] = { { "eng", L"Emulator GOP Driver" }, - { NULL , NULL } + { NULL, NULL } }; - /** Retrieves a Unicode string that is the user readable name of the driver. @@ -118,7 +116,6 @@ EmuGopComponentNameGetDriverName ( ); } - /** Retrieves a Unicode string that is the user readable name of the controller that is being managed by a driver. @@ -190,11 +187,11 @@ EmuGopComponentNameGetDriverName ( EFI_STATUS EFIAPI EmuGopComponentNameGetControllerName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { return EFI_UNSUPPORTED; diff --git a/OvmfPkg/Bhyve/BhyveRfbDxe/Gop.h b/OvmfPkg/Bhyve/BhyveRfbDxe/Gop.h index 13cf397626..128b4a5fd4 100644 --- a/OvmfPkg/Bhyve/BhyveRfbDxe/Gop.h +++ b/OvmfPkg/Bhyve/BhyveRfbDxe/Gop.h @@ -31,27 +31,27 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include -#define GRAPHICS_OUTPUT_INVALID_MODE_NUMBER 0xffff +#define GRAPHICS_OUTPUT_INVALID_MODE_NUMBER 0xffff typedef struct { - UINT32 HorizontalResolution; - UINT32 VerticalResolution; - UINT32 ColorDepth; - UINT32 RefreshRate; + UINT32 HorizontalResolution; + UINT32 VerticalResolution; + UINT32 ColorDepth; + UINT32 RefreshRate; } GOP_MODE_DATA; -#define PIXEL_RED_SHIFT 0 -#define PIXEL_GREEN_SHIFT 3 -#define PIXEL_BLUE_SHIFT 6 +#define PIXEL_RED_SHIFT 0 +#define PIXEL_GREEN_SHIFT 3 +#define PIXEL_BLUE_SHIFT 6 #define PIXEL_RED_MASK (BIT7 | BIT6 | BIT5) #define PIXEL_GREEN_MASK (BIT4 | BIT3 | BIT2) #define PIXEL_BLUE_MASK (BIT1 | BIT0) -#define PIXEL_TO_COLOR_BYTE(pixel, mask, shift) ((UINT8) ((pixel & mask) << shift)) -#define PIXEL_TO_RED_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_RED_MASK, PIXEL_RED_SHIFT) -#define PIXEL_TO_GREEN_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_GREEN_MASK, PIXEL_GREEN_SHIFT) -#define PIXEL_TO_BLUE_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_BLUE_MASK, PIXEL_BLUE_SHIFT) +#define PIXEL_TO_COLOR_BYTE(pixel, mask, shift) ((UINT8) ((pixel & mask) << shift)) +#define PIXEL_TO_RED_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_RED_MASK, PIXEL_RED_SHIFT) +#define PIXEL_TO_GREEN_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_GREEN_MASK, PIXEL_GREEN_SHIFT) +#define PIXEL_TO_BLUE_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_BLUE_MASK, PIXEL_BLUE_SHIFT) #define RGB_BYTES_TO_PIXEL(Red, Green, Blue) \ (UINT8) ( (((Red) >> PIXEL_RED_SHIFT) & PIXEL_RED_MASK) | \ @@ -62,61 +62,60 @@ typedef struct { #define PIXEL24_GREEN_MASK 0x0000ff00 #define PIXEL24_BLUE_MASK 0x000000ff -extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding; -extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName; +extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding; +extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName; -#define EMU_UGA_CLASS_NAME L"EmuGopWindow" +#define EMU_UGA_CLASS_NAME L"EmuGopWindow" #define GOP_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('G', 'o', 'p', 'N') typedef struct { - UINT64 Signature; + UINT64 Signature; - EFI_HANDLE Handle; - EFI_PCI_IO_PROTOCOL *PciIo; - EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput; - EFI_DEVICE_PATH_PROTOCOL *GopDevicePath; + EFI_HANDLE Handle; + EFI_PCI_IO_PROTOCOL *PciIo; + EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput; + EFI_DEVICE_PATH_PROTOCOL *GopDevicePath; - EFI_UNICODE_STRING_TABLE *ControllerNameTable; + EFI_UNICODE_STRING_TABLE *ControllerNameTable; // // GOP Private Data for QueryMode () // - GOP_MODE_DATA *ModeData; + GOP_MODE_DATA *ModeData; - UINT64 FbAddr; - UINT32 FbSize; + UINT64 FbAddr; + UINT32 FbSize; } GOP_PRIVATE_DATA; - #define GOP_PRIVATE_DATA_FROM_THIS(a) \ CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE) typedef struct { - UINT32 FbSize; - UINT16 Width; - UINT16 Height; - UINT16 Depth; - UINT16 RefreshRate; + UINT32 FbSize; + UINT16 Width; + UINT16 Height; + UINT16 Depth; + UINT16 RefreshRate; } BHYVE_FBUF_MEMREGS; // // Global Protocol Variables // -extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding; -extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName; -extern EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2; +extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding; +extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName; +extern EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2; // // Gop Hardware abstraction internal worker functions // EFI_STATUS EmuGopConstructor ( - IN GOP_PRIVATE_DATA *Private + IN GOP_PRIVATE_DATA *Private ); EFI_STATUS EmuGopDestructor ( - IN GOP_PRIVATE_DATA *Private + IN GOP_PRIVATE_DATA *Private ); VOID @@ -129,21 +128,21 @@ ShutdownGopEvent ( VOID BhyveSetGraphicsMode ( GOP_PRIVATE_DATA *Private, - UINT16 Width, - UINT16 Height, - UINT16 Depth + UINT16 Width, + UINT16 Height, + UINT16 Depth ); VOID BhyveGetMemregs ( - GOP_PRIVATE_DATA *Private, - BHYVE_FBUF_MEMREGS *Memregs + GOP_PRIVATE_DATA *Private, + BHYVE_FBUF_MEMREGS *Memregs ); VOID InstallVbeShim ( - IN CONST CHAR16 *CardName, - IN EFI_PHYSICAL_ADDRESS FrameBufferBase + IN CONST CHAR16 *CardName, + IN EFI_PHYSICAL_ADDRESS FrameBufferBase ); #endif /* _GOP_H_ */ diff --git a/OvmfPkg/Bhyve/BhyveRfbDxe/GopDriver.c b/OvmfPkg/Bhyve/BhyveRfbDxe/GopDriver.c index bab4fbda53..bd8a0d804b 100644 --- a/OvmfPkg/Bhyve/BhyveRfbDxe/GopDriver.c +++ b/OvmfPkg/Bhyve/BhyveRfbDxe/GopDriver.c @@ -13,13 +13,12 @@ SPDX-License-Identifier: BSD-2-Clause-Patent STATIC VOID BhyveGetGraphicsMode ( - EFI_PCI_IO_PROTOCOL *PciIo, - UINT16 *Width, - UINT16 *Height, - UINT16 *Depth + EFI_PCI_IO_PROTOCOL *PciIo, + UINT16 *Width, + UINT16 *Height, + UINT16 *Depth ); - /** Tests to see if this driver supports a given controller. If a child device is provided, it further tests to see if this driver supports creating a handle for the specified child device. @@ -65,15 +64,15 @@ BhyveGetGraphicsMode ( EFI_STATUS EFIAPI EmuGopDriverBindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Handle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Handle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; - UINT16 Width, Height, Depth; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; + UINT16 Width, Height, Depth; // // Open the IO Abstraction(s) needed to perform the supported test @@ -81,7 +80,7 @@ EmuGopDriverBindingSupported ( Status = gBS->OpenProtocol ( Handle, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo, + (VOID **)&PciIo, This->DriverBindingHandle, Handle, EFI_OPEN_PROTOCOL_BY_DRIVER @@ -107,11 +106,11 @@ EmuGopDriverBindingSupported ( } Status = EFI_UNSUPPORTED; - if (Pci.Hdr.VendorId == 0xFB5D && Pci.Hdr.DeviceId == 0x40FB) { - DEBUG((DEBUG_INFO, "BHYVE framebuffer device detected\n")); + if ((Pci.Hdr.VendorId == 0xFB5D) && (Pci.Hdr.DeviceId == 0x40FB)) { + DEBUG ((DEBUG_INFO, "BHYVE framebuffer device detected\n")); Status = EFI_SUCCESS; - BhyveGetGraphicsMode(PciIo, &Width, &Height, &Depth); + BhyveGetGraphicsMode (PciIo, &Width, &Height, &Depth); PcdSet32S (PcdVideoHorizontalResolution, Width); PcdSet32S (PcdVideoVerticalResolution, Height); } @@ -121,16 +120,15 @@ Done: // Close the PCI I/O Protocol // gBS->CloseProtocol ( - Handle, - &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, - Handle - ); + Handle, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + Handle + ); return Status; } - /** Starts a device controller or a bus controller. @@ -169,25 +167,25 @@ Done: EFI_STATUS EFIAPI EmuGopDriverBindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Handle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Handle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - BHYVE_FBUF_MEMREGS Memregs; - GOP_PRIVATE_DATA *Private; - EFI_STATUS Status; - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *MmioDesc; + BHYVE_FBUF_MEMREGS Memregs; + GOP_PRIVATE_DATA *Private; + EFI_STATUS Status; + EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *MmioDesc; // // Allocate Private context data for SGO inteface. // Private = NULL; - Status = gBS->AllocatePool ( - EfiBootServicesData, - sizeof (GOP_PRIVATE_DATA), - (VOID **)&Private - ); + Status = gBS->AllocatePool ( + EfiBootServicesData, + sizeof (GOP_PRIVATE_DATA), + (VOID **)&Private + ); if (EFI_ERROR (Status)) { goto Done; } @@ -204,7 +202,7 @@ EmuGopDriverBindingStart ( Status = gBS->OpenProtocol ( Handle, &gEfiPciIoProtocolGuid, - (VOID **) &Private->PciIo, + (VOID **)&Private->PciIo, This->DriverBindingHandle, Handle, EFI_OPEN_PROTOCOL_BY_DRIVER @@ -217,24 +215,30 @@ EmuGopDriverBindingStart ( // Check if fbuf mmio BAR is present // MmioDesc = NULL; - Status = Private->PciIo->GetBarAttributes ( - Private->PciIo, - PCI_BAR_IDX0, - NULL, - (VOID**) &MmioDesc - ); + Status = Private->PciIo->GetBarAttributes ( + Private->PciIo, + PCI_BAR_IDX0, + NULL, + (VOID **)&MmioDesc + ); if (EFI_ERROR (Status) || - MmioDesc->ResType != ACPI_ADDRESS_SPACE_TYPE_MEM) { + (MmioDesc->ResType != ACPI_ADDRESS_SPACE_TYPE_MEM)) + { DEBUG ((DEBUG_INFO, "BHYVE GOP: No mmio bar\n")); } else { - DEBUG ((DEBUG_INFO, "BHYVE GOP: Using mmio bar @ 0x%lx\n", - MmioDesc->AddrRangeMin)); - BhyveGetMemregs(Private, &Memregs); + DEBUG (( + DEBUG_INFO, + "BHYVE GOP: Using mmio bar @ 0x%lx\n", + MmioDesc->AddrRangeMin + )); + BhyveGetMemregs (Private, &Memregs); Private->FbSize = Memregs.FbSize; } + if (MmioDesc != NULL) { FreePool (MmioDesc); } + if (EFI_ERROR (Status)) { goto Done; } @@ -243,18 +247,22 @@ EmuGopDriverBindingStart ( // Check if fbuf frame-buffer BAR is present // MmioDesc = NULL; - Status = Private->PciIo->GetBarAttributes ( - Private->PciIo, - PCI_BAR_IDX1, - NULL, - (VOID**) &MmioDesc - ); + Status = Private->PciIo->GetBarAttributes ( + Private->PciIo, + PCI_BAR_IDX1, + NULL, + (VOID **)&MmioDesc + ); if (EFI_ERROR (Status) || - MmioDesc->ResType != ACPI_ADDRESS_SPACE_TYPE_MEM) { + (MmioDesc->ResType != ACPI_ADDRESS_SPACE_TYPE_MEM)) + { DEBUG ((DEBUG_INFO, "BHYVE GOP: No frame-buffer bar\n")); } else { - DEBUG ((DEBUG_INFO, "BHYVE GOP: Using frame-buffer bar @ 0x%lx\n", - MmioDesc->AddrRangeMin)); + DEBUG (( + DEBUG_INFO, + "BHYVE GOP: Using frame-buffer bar @ 0x%lx\n", + MmioDesc->AddrRangeMin + )); Private->FbAddr = MmioDesc->AddrRangeMin; // XXX assert BAR is >= size } @@ -262,12 +270,17 @@ EmuGopDriverBindingStart ( if (MmioDesc != NULL) { FreePool (MmioDesc); } + if (EFI_ERROR (Status)) { goto Done; } - DEBUG ((DEBUG_INFO, "BHYVE GOP: Framebuf addr 0x%lx, size %x\n", - Private->FbAddr, Private->FbSize)); + DEBUG (( + DEBUG_INFO, + "BHYVE GOP: Framebuf addr 0x%lx, size %x\n", + Private->FbAddr, + Private->FbSize + )); Status = EmuGopConstructor (Private); if (EFI_ERROR (Status)) { @@ -279,18 +292,19 @@ EmuGopDriverBindingStart ( // Status = gBS->InstallMultipleProtocolInterfaces ( &Private->Handle, - &gEfiGraphicsOutputProtocolGuid, &Private->GraphicsOutput, + &gEfiGraphicsOutputProtocolGuid, + &Private->GraphicsOutput, NULL ); - DEBUG((DEBUG_INFO, "BHYVE framebuffer device started\n")); + DEBUG ((DEBUG_INFO, "BHYVE framebuffer device started\n")); // // Install int10 handler // -#ifndef CSM_ENABLE + #ifndef CSM_ENABLE InstallVbeShim (L"Framebuffer", Private->FbAddr); -#endif + #endif Done: if (EFI_ERROR (Status)) { @@ -309,8 +323,6 @@ Done: return Status; } - - /** Stops a device controller or a bus controller. @@ -346,11 +358,11 @@ EmuGopDriverBindingStop ( IN EFI_HANDLE *ChildHandleBuffer ) { - EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; - EFI_STATUS Status; - GOP_PRIVATE_DATA *Private; + EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; + EFI_STATUS Status; + GOP_PRIVATE_DATA *Private; - DEBUG((DEBUG_INFO, "BHYVE framebuffer device stopping\n")); + DEBUG ((DEBUG_INFO, "BHYVE framebuffer device stopping\n")); Status = gBS->OpenProtocol ( Handle, @@ -377,7 +389,8 @@ EmuGopDriverBindingStop ( // Status = gBS->UninstallMultipleProtocolInterfaces ( Private->Handle, - &gEfiGraphicsOutputProtocolGuid, &Private->GraphicsOutput, + &gEfiGraphicsOutputProtocolGuid, + &Private->GraphicsOutput, NULL ); if (!EFI_ERROR (Status)) { @@ -390,11 +403,11 @@ EmuGopDriverBindingStop ( } gBS->CloseProtocol ( - Handle, - &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, - Private->Handle - ); + Handle, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + Private->Handle + ); // // Free our instance data @@ -402,18 +415,16 @@ EmuGopDriverBindingStop ( FreeUnicodeStringTable (Private->ControllerNameTable); gBS->FreePool (Private); - } return Status; } - /// /// This protocol provides the services required to determine if a driver supports a given controller. /// If a controller is supported, then it also provides routines to start and stop the controller. /// -EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding = { +EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding = { EmuGopDriverBindingSupported, EmuGopDriverBindingStart, EmuGopDriverBindingStop, @@ -422,8 +433,6 @@ EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding = { NULL }; - - /** The user Entry Point for module EmuGop. The user code starts with this function. @@ -437,11 +446,11 @@ EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding = { EFI_STATUS EFIAPI InitializeEmuGop ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = EfiLibInstallDriverBindingComponentName2 ( ImageHandle, @@ -453,33 +462,31 @@ InitializeEmuGop ( ); ASSERT_EFI_ERROR (Status); - return Status; } STATIC VOID BhyveGetGraphicsMode ( - EFI_PCI_IO_PROTOCOL *PciIo, - UINT16 *Width, - UINT16 *Height, - UINT16 *Depth + EFI_PCI_IO_PROTOCOL *PciIo, + UINT16 *Width, + UINT16 *Height, + UINT16 *Depth ) { - BHYVE_FBUF_MEMREGS BhyveRegs; - UINT64 Offset; - EFI_STATUS Status; - + BHYVE_FBUF_MEMREGS BhyveRegs; + UINT64 Offset; + EFI_STATUS Status; Offset = (UINT64)&BhyveRegs.Width - (UINT64)&BhyveRegs; Status = PciIo->Mem.Read ( - PciIo, - EfiPciIoWidthUint16, - PCI_BAR_IDX0, - Offset, - 3, - &BhyveRegs.Width - ); + PciIo, + EfiPciIoWidthUint16, + PCI_BAR_IDX0, + Offset, + 3, + &BhyveRegs.Width + ); *Width = BhyveRegs.Width; *Height = BhyveRegs.Height; @@ -493,51 +500,56 @@ BhyveGetGraphicsMode ( VOID BhyveSetGraphicsMode ( GOP_PRIVATE_DATA *Private, - UINT16 Width, - UINT16 Height, - UINT16 Depth + UINT16 Width, + UINT16 Height, + UINT16 Depth ) { - BHYVE_FBUF_MEMREGS BhyveRegs; - UINT64 Offset; - EFI_STATUS Status; + BHYVE_FBUF_MEMREGS BhyveRegs; + UINT64 Offset; + EFI_STATUS Status; DEBUG ((DEBUG_INFO, "BHYVE Set Graphics Mode: w %d, h %d\n", Width, Height)); BhyveRegs.Width = Width; BhyveRegs.Height = Height; BhyveRegs.Depth = Depth; - Offset = (UINT64)&BhyveRegs.Width - (UINT64)&BhyveRegs; + Offset = (UINT64)&BhyveRegs.Width - (UINT64)&BhyveRegs; Status = Private->PciIo->Mem.Write ( - Private->PciIo, - EfiPciIoWidthUint16, - PCI_BAR_IDX0, - Offset, - 3, - &BhyveRegs.Width - ); + Private->PciIo, + EfiPciIoWidthUint16, + PCI_BAR_IDX0, + Offset, + 3, + &BhyveRegs.Width + ); ASSERT_EFI_ERROR (Status); } VOID BhyveGetMemregs ( - GOP_PRIVATE_DATA *Private, - BHYVE_FBUF_MEMREGS *Memregs + GOP_PRIVATE_DATA *Private, + BHYVE_FBUF_MEMREGS *Memregs ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = Private->PciIo->Mem.Read ( - Private->PciIo, - EfiPciIoWidthUint32, - PCI_BAR_IDX0, - 0, - 3, - Memregs - ); + Private->PciIo, + EfiPciIoWidthUint32, + PCI_BAR_IDX0, + 0, + 3, + Memregs + ); ASSERT_EFI_ERROR (Status); - DEBUG ((DEBUG_INFO, "BHYVE Get Memregs, size %d width %d height %d\n", - Memregs->FbSize, Memregs->Width, Memregs->Height)); + DEBUG (( + DEBUG_INFO, + "BHYVE Get Memregs, size %d width %d height %d\n", + Memregs->FbSize, + Memregs->Width, + Memregs->Height + )); } diff --git a/OvmfPkg/Bhyve/BhyveRfbDxe/GopScreen.c b/OvmfPkg/Bhyve/BhyveRfbDxe/GopScreen.c index 4eaf7001b4..2fcc1dd56a 100644 --- a/OvmfPkg/Bhyve/BhyveRfbDxe/GopScreen.c +++ b/OvmfPkg/Bhyve/BhyveRfbDxe/GopScreen.c @@ -22,45 +22,48 @@ Abstract: #include "Gop.h" #include +EFI_EVENT mGopScreenExitBootServicesEvent; -EFI_EVENT mGopScreenExitBootServicesEvent; - -GOP_MODE_DATA mGopModeData[] = { - { 0, 0, 32, 0 }, // Filled in with user-spec'd resolution - { 1024, 768, 32, 0 }, - { 800, 600, 32, 0 }, - { 640, 480, 32, 0 } - }; +GOP_MODE_DATA mGopModeData[] = { + { 0, 0, 32, 0 }, // Filled in with user-spec'd resolution + { 1024, 768, 32, 0 }, + { 800, 600, 32, 0 }, + { 640, 480, 32, 0 } +}; STATIC VOID BhyveGopCompleteModeInfo ( - IN GOP_MODE_DATA *ModeData, + IN GOP_MODE_DATA *ModeData, OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info ) { Info->Version = 0; if (ModeData->ColorDepth == 8) { - Info->PixelFormat = PixelBitMask; - Info->PixelInformation.RedMask = PIXEL_RED_MASK; - Info->PixelInformation.GreenMask = PIXEL_GREEN_MASK; - Info->PixelInformation.BlueMask = PIXEL_BLUE_MASK; + Info->PixelFormat = PixelBitMask; + Info->PixelInformation.RedMask = PIXEL_RED_MASK; + Info->PixelInformation.GreenMask = PIXEL_GREEN_MASK; + Info->PixelInformation.BlueMask = PIXEL_BLUE_MASK; Info->PixelInformation.ReservedMask = 0; } else if (ModeData->ColorDepth == 24) { - Info->PixelFormat = PixelBitMask; - Info->PixelInformation.RedMask = PIXEL24_RED_MASK; - Info->PixelInformation.GreenMask = PIXEL24_GREEN_MASK; - Info->PixelInformation.BlueMask = PIXEL24_BLUE_MASK; + Info->PixelFormat = PixelBitMask; + Info->PixelInformation.RedMask = PIXEL24_RED_MASK; + Info->PixelInformation.GreenMask = PIXEL24_GREEN_MASK; + Info->PixelInformation.BlueMask = PIXEL24_BLUE_MASK; Info->PixelInformation.ReservedMask = 0; } else if (ModeData->ColorDepth == 32) { - DEBUG ((DEBUG_INFO, "%dx%d PixelBlueGreenRedReserved8BitPerColor\n", - ModeData->HorizontalResolution, ModeData->VerticalResolution)); + DEBUG (( + DEBUG_INFO, + "%dx%d PixelBlueGreenRedReserved8BitPerColor\n", + ModeData->HorizontalResolution, + ModeData->VerticalResolution + )); Info->PixelFormat = PixelBlueGreenRedReserved8BitPerColor; } + Info->PixelsPerScanLine = Info->HorizontalResolution; } - /** Returns information for an available graphics mode that the graphics device and the set of active video output devices supports. @@ -91,7 +94,7 @@ EmuGopQuerytMode ( Private = GOP_PRIVATE_DATA_FROM_THIS (This); - if (Info == NULL || SizeOfInfo == NULL || (UINTN) ModeNumber >= This->Mode->MaxMode) { + if ((Info == NULL) || (SizeOfInfo == NULL) || ((UINTN)ModeNumber >= This->Mode->MaxMode)) { return EFI_INVALID_PARAMETER; } @@ -102,18 +105,16 @@ EmuGopQuerytMode ( *SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION); - ModeData = &Private->ModeData[ModeNumber]; - (*Info)->Version = 0; + ModeData = &Private->ModeData[ModeNumber]; + (*Info)->Version = 0; (*Info)->HorizontalResolution = ModeData->HorizontalResolution; (*Info)->VerticalResolution = ModeData->VerticalResolution; - (*Info)->PixelFormat = PixelBitMask; - (*Info)->PixelsPerScanLine = (*Info)->HorizontalResolution; - BhyveGopCompleteModeInfo(ModeData, *Info); + (*Info)->PixelFormat = PixelBitMask; + (*Info)->PixelsPerScanLine = (*Info)->HorizontalResolution; + BhyveGopCompleteModeInfo (ModeData, *Info); return EFI_SUCCESS; } - - /** Set the video device into the specified mode and clears the visible portions of the output display to black. @@ -127,7 +128,7 @@ EmuGopQuerytMode ( **/ -FRAME_BUFFER_CONFIGURE *fbconf; +FRAME_BUFFER_CONFIGURE *fbconf; EFI_STATUS EFIAPI @@ -136,37 +137,38 @@ EmuGopSetMode ( IN UINT32 ModeNumber ) { - GOP_PRIVATE_DATA *Private; - GOP_MODE_DATA *ModeData; - EFI_GRAPHICS_OUTPUT_BLT_PIXEL Fill; + GOP_PRIVATE_DATA *Private; + GOP_MODE_DATA *ModeData; + EFI_GRAPHICS_OUTPUT_BLT_PIXEL Fill; EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info; - UINTN confsize = 0; + UINTN confsize = 0; + fbconf = NULL; Private = GOP_PRIVATE_DATA_FROM_THIS (This); if (ModeNumber >= This->Mode->MaxMode) { // Tell bhyve that we are switching out of vesa - BhyveSetGraphicsMode(Private, 0, 0, 0); + BhyveSetGraphicsMode (Private, 0, 0, 0); return EFI_UNSUPPORTED; } DEBUG ((DEBUG_INFO, "BHYVE GopSetMode %d\n", ModeNumber)); - ModeData = &Private->ModeData[ModeNumber]; - This->Mode->Mode = ModeNumber; + ModeData = &Private->ModeData[ModeNumber]; + This->Mode->Mode = ModeNumber; Private->GraphicsOutput.Mode->Info->HorizontalResolution = ModeData->HorizontalResolution; - Private->GraphicsOutput.Mode->Info->VerticalResolution = ModeData->VerticalResolution; - Private->GraphicsOutput.Mode->Info->PixelsPerScanLine = ModeData->HorizontalResolution; + Private->GraphicsOutput.Mode->Info->VerticalResolution = ModeData->VerticalResolution; + Private->GraphicsOutput.Mode->Info->PixelsPerScanLine = ModeData->HorizontalResolution; Info = This->Mode->Info; - BhyveGopCompleteModeInfo(ModeData, Info); + BhyveGopCompleteModeInfo (ModeData, Info); This->Mode->Info->HorizontalResolution = ModeData->HorizontalResolution; - This->Mode->Info->VerticalResolution = ModeData->VerticalResolution; - This->Mode->SizeOfInfo = sizeof(EFI_GRAPHICS_OUTPUT_MODE_INFORMATION); - This->Mode->FrameBufferBase = Private->GraphicsOutput.Mode->FrameBufferBase; + This->Mode->Info->VerticalResolution = ModeData->VerticalResolution; + This->Mode->SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION); + This->Mode->FrameBufferBase = Private->GraphicsOutput.Mode->FrameBufferBase; /* This->Mode->FrameBufferSize = Info->HorizontalResolution * Info->VerticalResolution @@ -175,18 +177,24 @@ EmuGopSetMode ( This->Mode->FrameBufferSize = Private->FbSize; DEBUG ((DEBUG_INFO, "BHYVE GOP FrameBufferBase: 0x%x, FrameBufferSize: 0x%x\n", This->Mode->FrameBufferBase, This->Mode->FrameBufferSize)); - BhyveSetGraphicsMode(Private, (UINT16)ModeData->HorizontalResolution, (UINT16)ModeData->VerticalResolution, (UINT16)ModeData->ColorDepth); - - RETURN_STATUS ret = FrameBufferBltConfigure ( - (VOID*)(UINTN) This->Mode->FrameBufferBase, - This->Mode->Info, fbconf, &confsize - ); - if (ret == EFI_BUFFER_TOO_SMALL || ret == EFI_INVALID_PARAMETER) { - fbconf = AllocatePool(confsize); - ret = FrameBufferBltConfigure( - (VOID*)(UINTN)This->Mode->FrameBufferBase, - This->Mode->Info, fbconf, &confsize); - ASSERT(ret == EFI_SUCCESS); + BhyveSetGraphicsMode (Private, (UINT16)ModeData->HorizontalResolution, (UINT16)ModeData->VerticalResolution, (UINT16)ModeData->ColorDepth); + + RETURN_STATUS ret = FrameBufferBltConfigure ( + (VOID *)(UINTN)This->Mode->FrameBufferBase, + This->Mode->Info, + fbconf, + &confsize + ); + + if ((ret == EFI_BUFFER_TOO_SMALL) || (ret == EFI_INVALID_PARAMETER)) { + fbconf = AllocatePool (confsize); + ret = FrameBufferBltConfigure ( + (VOID *)(UINTN)This->Mode->FrameBufferBase, + This->Mode->Info, + fbconf, + &confsize + ); + ASSERT (ret == EFI_SUCCESS); } Fill.Red = 0; @@ -207,8 +215,6 @@ EmuGopSetMode ( return EFI_SUCCESS; } - - /** Blt a rectangle of pixels on the graphics screen. Blt stands for BLock Transfer. @@ -232,26 +238,26 @@ EmuGopSetMode ( EFI_STATUS EFIAPI EmuGopBlt ( - IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, - IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL, - IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, - IN UINTN SourceX, - IN UINTN SourceY, - IN UINTN DestinationX, - IN UINTN DestinationY, - IN UINTN Width, - IN UINTN Height, - IN UINTN Delta OPTIONAL + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL, + IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, + IN UINTN SourceX, + IN UINTN SourceY, + IN UINTN DestinationX, + IN UINTN DestinationY, + IN UINTN Width, + IN UINTN Height, + IN UINTN Delta OPTIONAL ) { - EFI_TPL OriginalTPL; - EFI_STATUS Status; + EFI_TPL OriginalTPL; + EFI_STATUS Status; if ((UINT32)BltOperation >= EfiGraphicsOutputBltOperationMax) { return EFI_INVALID_PARAMETER; } - if (Width == 0 || Height == 0) { + if ((Width == 0) || (Height == 0)) { return EFI_INVALID_PARAMETER; } @@ -263,27 +269,27 @@ EmuGopBlt ( OriginalTPL = gBS->RaiseTPL (TPL_NOTIFY); switch (BltOperation) { - case EfiBltVideoToBltBuffer: - case EfiBltBufferToVideo: - case EfiBltVideoFill: - case EfiBltVideoToVideo: - Status = FrameBufferBlt ( - fbconf, - BltBuffer, - BltOperation, - SourceX, - SourceY, - DestinationX, - DestinationY, - Width, - Height, - Delta - ); - break; - - default: - Status = EFI_INVALID_PARAMETER; - ASSERT (FALSE); + case EfiBltVideoToBltBuffer: + case EfiBltBufferToVideo: + case EfiBltVideoFill: + case EfiBltVideoToVideo: + Status = FrameBufferBlt ( + fbconf, + BltBuffer, + BltOperation, + SourceX, + SourceY, + DestinationX, + DestinationY, + Width, + Height, + Delta + ); + break; + + default: + Status = EFI_INVALID_PARAMETER; + ASSERT (FALSE); } gBS->RestoreTPL (OriginalTPL); @@ -291,25 +297,24 @@ EmuGopBlt ( return Status; } - // // Construction and Destruction functions // EFI_STATUS EmuGopConstructor ( - GOP_PRIVATE_DATA *Private + GOP_PRIVATE_DATA *Private ) { // Set mode 0 to be the requested resolution - mGopModeData[0].HorizontalResolution = PcdGet32 ( PcdVideoHorizontalResolution); - mGopModeData[0].VerticalResolution = PcdGet32 ( PcdVideoVerticalResolution ); + mGopModeData[0].HorizontalResolution = PcdGet32 (PcdVideoHorizontalResolution); + mGopModeData[0].VerticalResolution = PcdGet32 (PcdVideoVerticalResolution); Private->ModeData = mGopModeData; - Private->GraphicsOutput.QueryMode = EmuGopQuerytMode; - Private->GraphicsOutput.SetMode = EmuGopSetMode; - Private->GraphicsOutput.Blt = EmuGopBlt; + Private->GraphicsOutput.QueryMode = EmuGopQuerytMode; + Private->GraphicsOutput.SetMode = EmuGopSetMode; + Private->GraphicsOutput.Blt = EmuGopBlt; // // Allocate buffer for Graphics Output Protocol mode information @@ -318,35 +323,33 @@ EmuGopConstructor ( if (Private->GraphicsOutput.Mode == NULL) { return EFI_OUT_OF_RESOURCES; } + Private->GraphicsOutput.Mode->Info = AllocatePool (sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION)); if (Private->GraphicsOutput.Mode->Info == NULL) { return EFI_OUT_OF_RESOURCES; } - DEBUG ((DEBUG_INFO, "BHYVE Gop Constructor\n")); - Private->GraphicsOutput.Mode->MaxMode = sizeof(mGopModeData) / sizeof(GOP_MODE_DATA); + Private->GraphicsOutput.Mode->MaxMode = sizeof (mGopModeData) / sizeof (GOP_MODE_DATA); // // Till now, we have no idea about the window size. // - Private->GraphicsOutput.Mode->Mode = GRAPHICS_OUTPUT_INVALID_MODE_NUMBER; - Private->GraphicsOutput.Mode->Info->Version = 0; + Private->GraphicsOutput.Mode->Mode = GRAPHICS_OUTPUT_INVALID_MODE_NUMBER; + Private->GraphicsOutput.Mode->Info->Version = 0; Private->GraphicsOutput.Mode->Info->HorizontalResolution = 0; - Private->GraphicsOutput.Mode->Info->VerticalResolution = 0; - Private->GraphicsOutput.Mode->Info->PixelFormat = PixelBitMask; - Private->GraphicsOutput.Mode->SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION); - Private->GraphicsOutput.Mode->FrameBufferBase = (EFI_PHYSICAL_ADDRESS) Private->FbAddr; - Private->GraphicsOutput.Mode->FrameBufferSize = Private->FbSize; + Private->GraphicsOutput.Mode->Info->VerticalResolution = 0; + Private->GraphicsOutput.Mode->Info->PixelFormat = PixelBitMask; + Private->GraphicsOutput.Mode->SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION); + Private->GraphicsOutput.Mode->FrameBufferBase = (EFI_PHYSICAL_ADDRESS)Private->FbAddr; + Private->GraphicsOutput.Mode->FrameBufferSize = Private->FbSize; return EFI_SUCCESS; } - - EFI_STATUS EmuGopDestructor ( - GOP_PRIVATE_DATA *Private + GOP_PRIVATE_DATA *Private ) { // @@ -356,6 +359,7 @@ EmuGopDestructor ( if (Private->GraphicsOutput.Mode->Info != NULL) { FreePool (Private->GraphicsOutput.Mode->Info); } + FreePool (Private->GraphicsOutput.Mode); Private->GraphicsOutput.Mode = NULL; } @@ -363,13 +367,13 @@ EmuGopDestructor ( return EFI_SUCCESS; } - VOID EFIAPI ShutdownGopEvent ( IN EFI_EVENT Event, IN VOID *Context ) + /*++ Routine Description: diff --git a/OvmfPkg/Bhyve/BhyveRfbDxe/VbeShim.c b/OvmfPkg/Bhyve/BhyveRfbDxe/VbeShim.c index 740b966794..41f0180001 100644 --- a/OvmfPkg/Bhyve/BhyveRfbDxe/VbeShim.c +++ b/OvmfPkg/Bhyve/BhyveRfbDxe/VbeShim.c @@ -28,8 +28,8 @@ #pragma pack (1) typedef struct { - UINT16 Offset; - UINT16 Segment; + UINT16 Offset; + UINT16 Segment; } IVT_ENTRY; #pragma pack () @@ -37,52 +37,49 @@ typedef struct { // This string is displayed by Windows 2008 R2 SP1 in the Screen Resolution, // Advanced Settings dialog. It should be short. // -STATIC CONST CHAR8 mProductRevision[] = "2.0"; +STATIC CONST CHAR8 mProductRevision[] = "2.0"; -#define NUM_VBE_MODES 3 -STATIC CONST UINT16 vbeModeIds[] = { +#define NUM_VBE_MODES 3 +STATIC CONST UINT16 vbeModeIds[] = { 0x13f, // 640x480x32 0x140, // 800x600x32 0x141 // 1024x768x32 }; // Modes can be toggled with bit-0 -#define VBE_MODE_ENABLED 0x00BB -#define VBE_MODE_DISABLED 0x00BA +#define VBE_MODE_ENABLED 0x00BB +#define VBE_MODE_DISABLED 0x00BA -STATIC VBE2_MODE_INFO vbeModes[] = { +STATIC VBE2_MODE_INFO vbeModes[] = { { // 0x13f 640x480x32 - // ModeAttr - BytesPerScanLine - VBE_MODE_DISABLED, 0x07, 0x00, 0x40, 0x40, 0xA000, 0x00, 0x0000, 640*4, + VBE_MODE_DISABLED, 0x07, 0x00, 0x40, 0x40, 0xA000, 0x00, 0x0000, 640*4, // Width, Height..., Vbe3 - 640, 480, 16, 8, 1, 32, 1, 0x06, 0, 0, 1, + 640, 480, 16, 8, 1, 32, 1, 0x06, 0, 0, 1, // Masks - 0x08, 0x10, 0x08, 0x08, 0x08, 0x00, 0x08, 0x18, 0x00, + 0x08, 0x10, 0x08, 0x08, 0x08, 0x00, 0x08, 0x18, 0x00, // Framebuffer - 0xdeadbeef, 0x0000, 0x0000 + 0xdeadbeef, 0x0000, 0x0000 }, { // 0x140 800x600x32 - // ModeAttr - BytesPerScanLine - VBE_MODE_DISABLED, 0x07, 0x00, 0x40, 0x40, 0xA000, 0x00, 0x0000, 800*4, + VBE_MODE_DISABLED, 0x07, 0x00, 0x40, 0x40, 0xA000, 0x00, 0x0000, 800*4, // Width, Height..., Vbe3 - 800, 600, 16, 8, 1, 32, 1, 0x06, 0, 0, 1, + 800, 600, 16, 8, 1, 32, 1, 0x06, 0, 0, 1, // Masks - 0x08, 0x10, 0x08, 0x08, 0x08, 0x00, 0x08, 0x18, 0x00, + 0x08, 0x10, 0x08, 0x08, 0x08, 0x00, 0x08, 0x18, 0x00, // Framebuffer - 0xdeadbeef, 0x0000, 0x0000 + 0xdeadbeef, 0x0000, 0x0000 }, { // 0x141 1024x768x32 - // ModeAttr - BytesPerScanLine - VBE_MODE_ENABLED, 0x07, 0x00, 0x40, 0x40, 0xA000, 0x00, 0x0000, 1024*4, + VBE_MODE_ENABLED, 0x07, 0x00, 0x40, 0x40, 0xA000, 0x00, 0x0000, 1024*4, // Width, Height..., Vbe3 - 1024, 768, 16, 8, 1, 32, 1, 0x06, 0, 0, 1, + 1024, 768, 16, 8, 1, 32, 1, 0x06, 0, 0, 1, // Masks - 0x08, 0x10, 0x08, 0x08, 0x08, 0x00, 0x08, 0x18, 0x00, + 0x08, 0x10, 0x08, 0x08, 0x08, 0x00, 0x08, 0x18, 0x00, // Framebuffer - 0xdeadbeef, 0x0000, 0x0000 + 0xdeadbeef, 0x0000, 0x0000 } }; @@ -98,23 +95,23 @@ STATIC VBE2_MODE_INFO vbeModes[] = { **/ VOID InstallVbeShim ( - IN CONST CHAR16 *CardName, - IN EFI_PHYSICAL_ADDRESS FrameBufferBase + IN CONST CHAR16 *CardName, + IN EFI_PHYSICAL_ADDRESS FrameBufferBase ) { - EFI_PHYSICAL_ADDRESS Segment0, SegmentC, SegmentF; - UINTN Segment0Pages; - IVT_ENTRY *Int0x10; - EFI_STATUS Status; - UINTN Pam1Address; - UINT8 Pam1; - UINTN SegmentCPages; - VBE_INFO *VbeInfoFull; - VBE_INFO_BASE *VbeInfo; - UINT8 *Ptr; - UINTN Printed; - VBE_MODE_INFO *VbeModeInfo; - UINTN i; + EFI_PHYSICAL_ADDRESS Segment0, SegmentC, SegmentF; + UINTN Segment0Pages; + IVT_ENTRY *Int0x10; + EFI_STATUS Status; + UINTN Pam1Address; + UINT8 Pam1; + UINTN SegmentCPages; + VBE_INFO *VbeInfoFull; + VBE_INFO_BASE *VbeInfo; + UINT8 *Ptr; + UINTN Printed; + VBE_MODE_INFO *VbeModeInfo; + UINTN i; Segment0 = 0x00000; SegmentC = 0xC0000; @@ -130,11 +127,15 @@ InstallVbeShim ( // Segment0Pages = 1; Int0x10 = (IVT_ENTRY *)(UINTN)Segment0 + 0x10; - Status = gBS->AllocatePages (AllocateAddress, EfiBootServicesCode, - Segment0Pages, &Segment0); + Status = gBS->AllocatePages ( + AllocateAddress, + EfiBootServicesCode, + Segment0Pages, + &Segment0 + ); if (EFI_ERROR (Status)) { - EFI_PHYSICAL_ADDRESS Handler; + EFI_PHYSICAL_ADDRESS Handler; // // Check if a video BIOS handler has been installed previously -- we @@ -142,9 +143,14 @@ InstallVbeShim ( // it's already present. // Handler = (Int0x10->Segment << 4) + Int0x10->Offset; - if (Handler >= SegmentC && Handler < SegmentF) { - DEBUG ((DEBUG_VERBOSE, "%a: Video BIOS handler found at %04x:%04x\n", - __FUNCTION__, Int0x10->Segment, Int0x10->Offset)); + if ((Handler >= SegmentC) && (Handler < SegmentF)) { + DEBUG (( + DEBUG_VERBOSE, + "%a: Video BIOS handler found at %04x:%04x\n", + __FUNCTION__, + Int0x10->Segment, + Int0x10->Offset + )); return; } @@ -152,8 +158,12 @@ InstallVbeShim ( // Otherwise we'll overwrite the Int10h vector, even though we may not own // the page at zero. // - DEBUG ((DEBUG_VERBOSE, "%a: failed to allocate page at zero: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_VERBOSE, + "%a: failed to allocate page at zero: %r\n", + __FUNCTION__, + Status + )); } else { // // We managed to allocate the page at zero. SVN r14218 guarantees that it @@ -203,14 +213,15 @@ InstallVbeShim ( VbeInfo->Capabilities = BIT1 | BIT0; // DAC can be switched into 8-bit mode VbeInfo->ModeListAddress = (UINT32)SegmentC << 12 | (UINT16)((UINTN)Ptr-SegmentC); - for (i = 0; i < NUM_VBE_MODES; i ++) { - *(UINT16*)Ptr = vbeModeIds[i]; // mode number - Ptr += 2; + for (i = 0; i < NUM_VBE_MODES; i++) { + *(UINT16 *)Ptr = vbeModeIds[i]; // mode number + Ptr += 2; } - *(UINT16*)Ptr = 0xFFFF; // mode list terminator - Ptr += 2; - VbeInfo->VideoMem64K = (UINT16)((1024 * 768 * 4 + 65535) / 65536); + *(UINT16 *)Ptr = 0xFFFF; // mode list terminator + Ptr += 2; + + VbeInfo->VideoMem64K = (UINT16)((1024 * 768 * 4 + 65535) / 65536); VbeInfo->OemSoftwareVersion = 0x0200; VbeInfo->VendorNameAddress = (UINT32)SegmentC << 12 | (UINT16)((UINTN)Ptr-SegmentC); @@ -218,9 +229,12 @@ InstallVbeShim ( Ptr += 5; VbeInfo->ProductNameAddress = (UINT32)SegmentC << 12 | (UINT16)((UINTN)Ptr-SegmentC); - Printed = AsciiSPrint ((CHAR8 *)Ptr, - sizeof VbeInfoFull->Buffer - (Ptr - VbeInfoFull->Buffer), "%s", - CardName); + Printed = AsciiSPrint ( + (CHAR8 *)Ptr, + sizeof VbeInfoFull->Buffer - (Ptr - VbeInfoFull->Buffer), + "%s", + CardName + ); Ptr += Printed + 1; VbeInfo->ProductRevAddress = (UINT32)SegmentC << 12 | (UINT16)((UINTN)Ptr-SegmentC); @@ -234,7 +248,7 @@ InstallVbeShim ( // Fill in the VBE MODE INFO structure list // VbeModeInfo = (VBE_MODE_INFO *)(VbeInfoFull + 1); - Ptr = (UINT8 *)VbeModeInfo; + Ptr = (UINT8 *)VbeModeInfo; for (i = 0; i < NUM_VBE_MODES; i++) { vbeModes[i].LfbAddress = (UINT32)FrameBufferBase; CopyMem (Ptr, &vbeModes[i], 0x32); @@ -251,9 +265,14 @@ InstallVbeShim ( // // Second, point the Int10h vector at the shim. // - Int0x10->Segment = (UINT16) ((UINT32)SegmentC >> 4); - Int0x10->Offset = (UINT16) ((UINTN) (VbeModeInfo + 1) - SegmentC); - - DEBUG ((DEBUG_INFO, "%a: VBE shim installed to %x:%x\n", - __FUNCTION__, Int0x10->Segment, Int0x10->Offset)); + Int0x10->Segment = (UINT16)((UINT32)SegmentC >> 4); + Int0x10->Offset = (UINT16)((UINTN)(VbeModeInfo + 1) - SegmentC); + + DEBUG (( + DEBUG_INFO, + "%a: VBE shim installed to %x:%x\n", + __FUNCTION__, + Int0x10->Segment, + Int0x10->Offset + )); } diff --git a/OvmfPkg/Bhyve/BhyveRfbDxe/VbeShim.h b/OvmfPkg/Bhyve/BhyveRfbDxe/VbeShim.h index 72b8a3f25f..4becb1afa1 100644 --- a/OvmfPkg/Bhyve/BhyveRfbDxe/VbeShim.h +++ b/OvmfPkg/Bhyve/BhyveRfbDxe/VbeShim.h @@ -1,912 +1,913 @@ // // THIS FILE WAS GENERATED BY "VbeShim.sh". DO NOT EDIT. // + #ifndef _VBE_SHIM_H_ #define _VBE_SHIM_H_ -STATIC CONST UINT8 mVbeShim[] = { - /* 00000000 nop */ 0x90, - /* 00000001 nop */ 0x90, - /* 00000002 nop */ 0x90, - /* 00000003 nop */ 0x90, - /* 00000004 nop */ 0x90, - /* 00000005 nop */ 0x90, - /* 00000006 nop */ 0x90, - /* 00000007 nop */ 0x90, - /* 00000008 nop */ 0x90, - /* 00000009 nop */ 0x90, - /* 0000000A nop */ 0x90, - /* 0000000B nop */ 0x90, - /* 0000000C nop */ 0x90, - /* 0000000D nop */ 0x90, - /* 0000000E nop */ 0x90, - /* 0000000F nop */ 0x90, - /* 00000010 nop */ 0x90, - /* 00000011 nop */ 0x90, - /* 00000012 nop */ 0x90, - /* 00000013 nop */ 0x90, - /* 00000014 nop */ 0x90, - /* 00000015 nop */ 0x90, - /* 00000016 nop */ 0x90, - /* 00000017 nop */ 0x90, - /* 00000018 nop */ 0x90, - /* 00000019 nop */ 0x90, - /* 0000001A nop */ 0x90, - /* 0000001B nop */ 0x90, - /* 0000001C nop */ 0x90, - /* 0000001D nop */ 0x90, - /* 0000001E nop */ 0x90, - /* 0000001F nop */ 0x90, - /* 00000020 nop */ 0x90, - /* 00000021 nop */ 0x90, - /* 00000022 nop */ 0x90, - /* 00000023 nop */ 0x90, - /* 00000024 nop */ 0x90, - /* 00000025 nop */ 0x90, - /* 00000026 nop */ 0x90, - /* 00000027 nop */ 0x90, - /* 00000028 nop */ 0x90, - /* 00000029 nop */ 0x90, - /* 0000002A nop */ 0x90, - /* 0000002B nop */ 0x90, - /* 0000002C nop */ 0x90, - /* 0000002D nop */ 0x90, - /* 0000002E nop */ 0x90, - /* 0000002F nop */ 0x90, - /* 00000030 nop */ 0x90, - /* 00000031 nop */ 0x90, - /* 00000032 nop */ 0x90, - /* 00000033 nop */ 0x90, - /* 00000034 nop */ 0x90, - /* 00000035 nop */ 0x90, - /* 00000036 nop */ 0x90, - /* 00000037 nop */ 0x90, - /* 00000038 nop */ 0x90, - /* 00000039 nop */ 0x90, - /* 0000003A nop */ 0x90, - /* 0000003B nop */ 0x90, - /* 0000003C nop */ 0x90, - /* 0000003D nop */ 0x90, - /* 0000003E nop */ 0x90, - /* 0000003F nop */ 0x90, - /* 00000040 nop */ 0x90, - /* 00000041 nop */ 0x90, - /* 00000042 nop */ 0x90, - /* 00000043 nop */ 0x90, - /* 00000044 nop */ 0x90, - /* 00000045 nop */ 0x90, - /* 00000046 nop */ 0x90, - /* 00000047 nop */ 0x90, - /* 00000048 nop */ 0x90, - /* 00000049 nop */ 0x90, - /* 0000004A nop */ 0x90, - /* 0000004B nop */ 0x90, - /* 0000004C nop */ 0x90, - /* 0000004D nop */ 0x90, - /* 0000004E nop */ 0x90, - /* 0000004F nop */ 0x90, - /* 00000050 nop */ 0x90, - /* 00000051 nop */ 0x90, - /* 00000052 nop */ 0x90, - /* 00000053 nop */ 0x90, - /* 00000054 nop */ 0x90, - /* 00000055 nop */ 0x90, - /* 00000056 nop */ 0x90, - /* 00000057 nop */ 0x90, - /* 00000058 nop */ 0x90, - /* 00000059 nop */ 0x90, - /* 0000005A nop */ 0x90, - /* 0000005B nop */ 0x90, - /* 0000005C nop */ 0x90, - /* 0000005D nop */ 0x90, - /* 0000005E nop */ 0x90, - /* 0000005F nop */ 0x90, - /* 00000060 nop */ 0x90, - /* 00000061 nop */ 0x90, - /* 00000062 nop */ 0x90, - /* 00000063 nop */ 0x90, - /* 00000064 nop */ 0x90, - /* 00000065 nop */ 0x90, - /* 00000066 nop */ 0x90, - /* 00000067 nop */ 0x90, - /* 00000068 nop */ 0x90, - /* 00000069 nop */ 0x90, - /* 0000006A nop */ 0x90, - /* 0000006B nop */ 0x90, - /* 0000006C nop */ 0x90, - /* 0000006D nop */ 0x90, - /* 0000006E nop */ 0x90, - /* 0000006F nop */ 0x90, - /* 00000070 nop */ 0x90, - /* 00000071 nop */ 0x90, - /* 00000072 nop */ 0x90, - /* 00000073 nop */ 0x90, - /* 00000074 nop */ 0x90, - /* 00000075 nop */ 0x90, - /* 00000076 nop */ 0x90, - /* 00000077 nop */ 0x90, - /* 00000078 nop */ 0x90, - /* 00000079 nop */ 0x90, - /* 0000007A nop */ 0x90, - /* 0000007B nop */ 0x90, - /* 0000007C nop */ 0x90, - /* 0000007D nop */ 0x90, - /* 0000007E nop */ 0x90, - /* 0000007F nop */ 0x90, - /* 00000080 nop */ 0x90, - /* 00000081 nop */ 0x90, - /* 00000082 nop */ 0x90, - /* 00000083 nop */ 0x90, - /* 00000084 nop */ 0x90, - /* 00000085 nop */ 0x90, - /* 00000086 nop */ 0x90, - /* 00000087 nop */ 0x90, - /* 00000088 nop */ 0x90, - /* 00000089 nop */ 0x90, - /* 0000008A nop */ 0x90, - /* 0000008B nop */ 0x90, - /* 0000008C nop */ 0x90, - /* 0000008D nop */ 0x90, - /* 0000008E nop */ 0x90, - /* 0000008F nop */ 0x90, - /* 00000090 nop */ 0x90, - /* 00000091 nop */ 0x90, - /* 00000092 nop */ 0x90, - /* 00000093 nop */ 0x90, - /* 00000094 nop */ 0x90, - /* 00000095 nop */ 0x90, - /* 00000096 nop */ 0x90, - /* 00000097 nop */ 0x90, - /* 00000098 nop */ 0x90, - /* 00000099 nop */ 0x90, - /* 0000009A nop */ 0x90, - /* 0000009B nop */ 0x90, - /* 0000009C nop */ 0x90, - /* 0000009D nop */ 0x90, - /* 0000009E nop */ 0x90, - /* 0000009F nop */ 0x90, - /* 000000A0 nop */ 0x90, - /* 000000A1 nop */ 0x90, - /* 000000A2 nop */ 0x90, - /* 000000A3 nop */ 0x90, - /* 000000A4 nop */ 0x90, - /* 000000A5 nop */ 0x90, - /* 000000A6 nop */ 0x90, - /* 000000A7 nop */ 0x90, - /* 000000A8 nop */ 0x90, - /* 000000A9 nop */ 0x90, - /* 000000AA nop */ 0x90, - /* 000000AB nop */ 0x90, - /* 000000AC nop */ 0x90, - /* 000000AD nop */ 0x90, - /* 000000AE nop */ 0x90, - /* 000000AF nop */ 0x90, - /* 000000B0 nop */ 0x90, - /* 000000B1 nop */ 0x90, - /* 000000B2 nop */ 0x90, - /* 000000B3 nop */ 0x90, - /* 000000B4 nop */ 0x90, - /* 000000B5 nop */ 0x90, - /* 000000B6 nop */ 0x90, - /* 000000B7 nop */ 0x90, - /* 000000B8 nop */ 0x90, - /* 000000B9 nop */ 0x90, - /* 000000BA nop */ 0x90, - /* 000000BB nop */ 0x90, - /* 000000BC nop */ 0x90, - /* 000000BD nop */ 0x90, - /* 000000BE nop */ 0x90, - /* 000000BF nop */ 0x90, - /* 000000C0 nop */ 0x90, - /* 000000C1 nop */ 0x90, - /* 000000C2 nop */ 0x90, - /* 000000C3 nop */ 0x90, - /* 000000C4 nop */ 0x90, - /* 000000C5 nop */ 0x90, - /* 000000C6 nop */ 0x90, - /* 000000C7 nop */ 0x90, - /* 000000C8 nop */ 0x90, - /* 000000C9 nop */ 0x90, - /* 000000CA nop */ 0x90, - /* 000000CB nop */ 0x90, - /* 000000CC nop */ 0x90, - /* 000000CD nop */ 0x90, - /* 000000CE nop */ 0x90, - /* 000000CF nop */ 0x90, - /* 000000D0 nop */ 0x90, - /* 000000D1 nop */ 0x90, - /* 000000D2 nop */ 0x90, - /* 000000D3 nop */ 0x90, - /* 000000D4 nop */ 0x90, - /* 000000D5 nop */ 0x90, - /* 000000D6 nop */ 0x90, - /* 000000D7 nop */ 0x90, - /* 000000D8 nop */ 0x90, - /* 000000D9 nop */ 0x90, - /* 000000DA nop */ 0x90, - /* 000000DB nop */ 0x90, - /* 000000DC nop */ 0x90, - /* 000000DD nop */ 0x90, - /* 000000DE nop */ 0x90, - /* 000000DF nop */ 0x90, - /* 000000E0 nop */ 0x90, - /* 000000E1 nop */ 0x90, - /* 000000E2 nop */ 0x90, - /* 000000E3 nop */ 0x90, - /* 000000E4 nop */ 0x90, - /* 000000E5 nop */ 0x90, - /* 000000E6 nop */ 0x90, - /* 000000E7 nop */ 0x90, - /* 000000E8 nop */ 0x90, - /* 000000E9 nop */ 0x90, - /* 000000EA nop */ 0x90, - /* 000000EB nop */ 0x90, - /* 000000EC nop */ 0x90, - /* 000000ED nop */ 0x90, - /* 000000EE nop */ 0x90, - /* 000000EF nop */ 0x90, - /* 000000F0 nop */ 0x90, - /* 000000F1 nop */ 0x90, - /* 000000F2 nop */ 0x90, - /* 000000F3 nop */ 0x90, - /* 000000F4 nop */ 0x90, - /* 000000F5 nop */ 0x90, - /* 000000F6 nop */ 0x90, - /* 000000F7 nop */ 0x90, - /* 000000F8 nop */ 0x90, - /* 000000F9 nop */ 0x90, - /* 000000FA nop */ 0x90, - /* 000000FB nop */ 0x90, - /* 000000FC nop */ 0x90, - /* 000000FD nop */ 0x90, - /* 000000FE nop */ 0x90, - /* 000000FF nop */ 0x90, - /* 00000100 nop */ 0x90, - /* 00000101 nop */ 0x90, - /* 00000102 nop */ 0x90, - /* 00000103 nop */ 0x90, - /* 00000104 nop */ 0x90, - /* 00000105 nop */ 0x90, - /* 00000106 nop */ 0x90, - /* 00000107 nop */ 0x90, - /* 00000108 nop */ 0x90, - /* 00000109 nop */ 0x90, - /* 0000010A nop */ 0x90, - /* 0000010B nop */ 0x90, - /* 0000010C nop */ 0x90, - /* 0000010D nop */ 0x90, - /* 0000010E nop */ 0x90, - /* 0000010F nop */ 0x90, - /* 00000110 nop */ 0x90, - /* 00000111 nop */ 0x90, - /* 00000112 nop */ 0x90, - /* 00000113 nop */ 0x90, - /* 00000114 nop */ 0x90, - /* 00000115 nop */ 0x90, - /* 00000116 nop */ 0x90, - /* 00000117 nop */ 0x90, - /* 00000118 nop */ 0x90, - /* 00000119 nop */ 0x90, - /* 0000011A nop */ 0x90, - /* 0000011B nop */ 0x90, - /* 0000011C nop */ 0x90, - /* 0000011D nop */ 0x90, - /* 0000011E nop */ 0x90, - /* 0000011F nop */ 0x90, - /* 00000120 nop */ 0x90, - /* 00000121 nop */ 0x90, - /* 00000122 nop */ 0x90, - /* 00000123 nop */ 0x90, - /* 00000124 nop */ 0x90, - /* 00000125 nop */ 0x90, - /* 00000126 nop */ 0x90, - /* 00000127 nop */ 0x90, - /* 00000128 nop */ 0x90, - /* 00000129 nop */ 0x90, - /* 0000012A nop */ 0x90, - /* 0000012B nop */ 0x90, - /* 0000012C nop */ 0x90, - /* 0000012D nop */ 0x90, - /* 0000012E nop */ 0x90, - /* 0000012F nop */ 0x90, - /* 00000130 nop */ 0x90, - /* 00000131 nop */ 0x90, - /* 00000132 nop */ 0x90, - /* 00000133 nop */ 0x90, - /* 00000134 nop */ 0x90, - /* 00000135 nop */ 0x90, - /* 00000136 nop */ 0x90, - /* 00000137 nop */ 0x90, - /* 00000138 nop */ 0x90, - /* 00000139 nop */ 0x90, - /* 0000013A nop */ 0x90, - /* 0000013B nop */ 0x90, - /* 0000013C nop */ 0x90, - /* 0000013D nop */ 0x90, - /* 0000013E nop */ 0x90, - /* 0000013F nop */ 0x90, - /* 00000140 nop */ 0x90, - /* 00000141 nop */ 0x90, - /* 00000142 nop */ 0x90, - /* 00000143 nop */ 0x90, - /* 00000144 nop */ 0x90, - /* 00000145 nop */ 0x90, - /* 00000146 nop */ 0x90, - /* 00000147 nop */ 0x90, - /* 00000148 nop */ 0x90, - /* 00000149 nop */ 0x90, - /* 0000014A nop */ 0x90, - /* 0000014B nop */ 0x90, - /* 0000014C nop */ 0x90, - /* 0000014D nop */ 0x90, - /* 0000014E nop */ 0x90, - /* 0000014F nop */ 0x90, - /* 00000150 nop */ 0x90, - /* 00000151 nop */ 0x90, - /* 00000152 nop */ 0x90, - /* 00000153 nop */ 0x90, - /* 00000154 nop */ 0x90, - /* 00000155 nop */ 0x90, - /* 00000156 nop */ 0x90, - /* 00000157 nop */ 0x90, - /* 00000158 nop */ 0x90, - /* 00000159 nop */ 0x90, - /* 0000015A nop */ 0x90, - /* 0000015B nop */ 0x90, - /* 0000015C nop */ 0x90, - /* 0000015D nop */ 0x90, - /* 0000015E nop */ 0x90, - /* 0000015F nop */ 0x90, - /* 00000160 nop */ 0x90, - /* 00000161 nop */ 0x90, - /* 00000162 nop */ 0x90, - /* 00000163 nop */ 0x90, - /* 00000164 nop */ 0x90, - /* 00000165 nop */ 0x90, - /* 00000166 nop */ 0x90, - /* 00000167 nop */ 0x90, - /* 00000168 nop */ 0x90, - /* 00000169 nop */ 0x90, - /* 0000016A nop */ 0x90, - /* 0000016B nop */ 0x90, - /* 0000016C nop */ 0x90, - /* 0000016D nop */ 0x90, - /* 0000016E nop */ 0x90, - /* 0000016F nop */ 0x90, - /* 00000170 nop */ 0x90, - /* 00000171 nop */ 0x90, - /* 00000172 nop */ 0x90, - /* 00000173 nop */ 0x90, - /* 00000174 nop */ 0x90, - /* 00000175 nop */ 0x90, - /* 00000176 nop */ 0x90, - /* 00000177 nop */ 0x90, - /* 00000178 nop */ 0x90, - /* 00000179 nop */ 0x90, - /* 0000017A nop */ 0x90, - /* 0000017B nop */ 0x90, - /* 0000017C nop */ 0x90, - /* 0000017D nop */ 0x90, - /* 0000017E nop */ 0x90, - /* 0000017F nop */ 0x90, - /* 00000180 nop */ 0x90, - /* 00000181 nop */ 0x90, - /* 00000182 nop */ 0x90, - /* 00000183 nop */ 0x90, - /* 00000184 nop */ 0x90, - /* 00000185 nop */ 0x90, - /* 00000186 nop */ 0x90, - /* 00000187 nop */ 0x90, - /* 00000188 nop */ 0x90, - /* 00000189 nop */ 0x90, - /* 0000018A nop */ 0x90, - /* 0000018B nop */ 0x90, - /* 0000018C nop */ 0x90, - /* 0000018D nop */ 0x90, - /* 0000018E nop */ 0x90, - /* 0000018F nop */ 0x90, - /* 00000190 nop */ 0x90, - /* 00000191 nop */ 0x90, - /* 00000192 nop */ 0x90, - /* 00000193 nop */ 0x90, - /* 00000194 nop */ 0x90, - /* 00000195 nop */ 0x90, - /* 00000196 nop */ 0x90, - /* 00000197 nop */ 0x90, - /* 00000198 nop */ 0x90, - /* 00000199 nop */ 0x90, - /* 0000019A nop */ 0x90, - /* 0000019B nop */ 0x90, - /* 0000019C nop */ 0x90, - /* 0000019D nop */ 0x90, - /* 0000019E nop */ 0x90, - /* 0000019F nop */ 0x90, - /* 000001A0 nop */ 0x90, - /* 000001A1 nop */ 0x90, - /* 000001A2 nop */ 0x90, - /* 000001A3 nop */ 0x90, - /* 000001A4 nop */ 0x90, - /* 000001A5 nop */ 0x90, - /* 000001A6 nop */ 0x90, - /* 000001A7 nop */ 0x90, - /* 000001A8 nop */ 0x90, - /* 000001A9 nop */ 0x90, - /* 000001AA nop */ 0x90, - /* 000001AB nop */ 0x90, - /* 000001AC nop */ 0x90, - /* 000001AD nop */ 0x90, - /* 000001AE nop */ 0x90, - /* 000001AF nop */ 0x90, - /* 000001B0 nop */ 0x90, - /* 000001B1 nop */ 0x90, - /* 000001B2 nop */ 0x90, - /* 000001B3 nop */ 0x90, - /* 000001B4 nop */ 0x90, - /* 000001B5 nop */ 0x90, - /* 000001B6 nop */ 0x90, - /* 000001B7 nop */ 0x90, - /* 000001B8 nop */ 0x90, - /* 000001B9 nop */ 0x90, - /* 000001BA nop */ 0x90, - /* 000001BB nop */ 0x90, - /* 000001BC nop */ 0x90, - /* 000001BD nop */ 0x90, - /* 000001BE nop */ 0x90, - /* 000001BF nop */ 0x90, - /* 000001C0 nop */ 0x90, - /* 000001C1 nop */ 0x90, - /* 000001C2 nop */ 0x90, - /* 000001C3 nop */ 0x90, - /* 000001C4 nop */ 0x90, - /* 000001C5 nop */ 0x90, - /* 000001C6 nop */ 0x90, - /* 000001C7 nop */ 0x90, - /* 000001C8 nop */ 0x90, - /* 000001C9 nop */ 0x90, - /* 000001CA nop */ 0x90, - /* 000001CB nop */ 0x90, - /* 000001CC nop */ 0x90, - /* 000001CD nop */ 0x90, - /* 000001CE nop */ 0x90, - /* 000001CF nop */ 0x90, - /* 000001D0 nop */ 0x90, - /* 000001D1 nop */ 0x90, - /* 000001D2 nop */ 0x90, - /* 000001D3 nop */ 0x90, - /* 000001D4 nop */ 0x90, - /* 000001D5 nop */ 0x90, - /* 000001D6 nop */ 0x90, - /* 000001D7 nop */ 0x90, - /* 000001D8 nop */ 0x90, - /* 000001D9 nop */ 0x90, - /* 000001DA nop */ 0x90, - /* 000001DB nop */ 0x90, - /* 000001DC nop */ 0x90, - /* 000001DD nop */ 0x90, - /* 000001DE nop */ 0x90, - /* 000001DF nop */ 0x90, - /* 000001E0 nop */ 0x90, - /* 000001E1 nop */ 0x90, - /* 000001E2 nop */ 0x90, - /* 000001E3 nop */ 0x90, - /* 000001E4 nop */ 0x90, - /* 000001E5 nop */ 0x90, - /* 000001E6 nop */ 0x90, - /* 000001E7 nop */ 0x90, - /* 000001E8 nop */ 0x90, - /* 000001E9 nop */ 0x90, - /* 000001EA nop */ 0x90, - /* 000001EB nop */ 0x90, - /* 000001EC nop */ 0x90, - /* 000001ED nop */ 0x90, - /* 000001EE nop */ 0x90, - /* 000001EF nop */ 0x90, - /* 000001F0 nop */ 0x90, - /* 000001F1 nop */ 0x90, - /* 000001F2 nop */ 0x90, - /* 000001F3 nop */ 0x90, - /* 000001F4 nop */ 0x90, - /* 000001F5 nop */ 0x90, - /* 000001F6 nop */ 0x90, - /* 000001F7 nop */ 0x90, - /* 000001F8 nop */ 0x90, - /* 000001F9 nop */ 0x90, - /* 000001FA nop */ 0x90, - /* 000001FB nop */ 0x90, - /* 000001FC nop */ 0x90, - /* 000001FD nop */ 0x90, - /* 000001FE nop */ 0x90, - /* 000001FF nop */ 0x90, - /* 00000200 cmp ax,0x4f00 */ 0x3D, 0x00, 0x4F, - /* 00000203 jz 0x237 */ 0x74, 0x32, - /* 00000205 cmp ax,0x4f01 */ 0x3D, 0x01, 0x4F, - /* 00000208 jz 0x257 */ 0x74, 0x4D, - /* 0000020A cmp ax,0x4f02 */ 0x3D, 0x02, 0x4F, - /* 0000020D jz word 0x2c8 */ 0x0F, 0x84, 0xB7, 0x00, - /* 00000211 cmp ax,0x4f03 */ 0x3D, 0x03, 0x4F, - /* 00000214 jz word 0x325 */ 0x0F, 0x84, 0x0D, 0x01, - /* 00000218 cmp ax,0x4f10 */ 0x3D, 0x10, 0x4F, - /* 0000021B jz word 0x337 */ 0x0F, 0x84, 0x18, 0x01, - /* 0000021F cmp ax,0x4f15 */ 0x3D, 0x15, 0x4F, - /* 00000222 jz word 0x344 */ 0x0F, 0x84, 0x1E, 0x01, - /* 00000226 cmp ah,0x0 */ 0x80, 0xFC, 0x00, - /* 00000229 jz word 0x363 */ 0x0F, 0x84, 0x36, 0x01, - /* 0000022D push si */ 0x56, - /* 0000022E mov si,0x3d7 */ 0xBE, 0xD7, 0x03, - /* 00000231 call word 0x3ad */ 0xE8, 0x79, 0x01, - /* 00000234 pop si */ 0x5E, - /* 00000235 jmp short 0x235 */ 0xEB, 0xFE, - /* 00000237 push es */ 0x06, - /* 00000238 push di */ 0x57, - /* 00000239 push ds */ 0x1E, - /* 0000023A push si */ 0x56, - /* 0000023B push cx */ 0x51, - /* 0000023C push si */ 0x56, - /* 0000023D mov si,0x3eb */ 0xBE, 0xEB, 0x03, - /* 00000240 call word 0x3ad */ 0xE8, 0x6A, 0x01, - /* 00000243 pop si */ 0x5E, - /* 00000244 push cs */ 0x0E, - /* 00000245 pop ds */ 0x1F, - /* 00000246 mov si,0x0 */ 0xBE, 0x00, 0x00, - /* 00000249 mov cx,0x100 */ 0xB9, 0x00, 0x01, - /* 0000024C cld */ 0xFC, - /* 0000024D rep movsb */ 0xF3, 0xA4, - /* 0000024F pop cx */ 0x59, - /* 00000250 pop si */ 0x5E, - /* 00000251 pop ds */ 0x1F, - /* 00000252 pop di */ 0x5F, - /* 00000253 pop es */ 0x07, - /* 00000254 jmp word 0x395 */ 0xE9, 0x3E, 0x01, - /* 00000257 push es */ 0x06, - /* 00000258 push di */ 0x57, - /* 00000259 push ds */ 0x1E, - /* 0000025A push si */ 0x56, - /* 0000025B push cx */ 0x51, - /* 0000025C push si */ 0x56, - /* 0000025D mov si,0x3f6 */ 0xBE, 0xF6, 0x03, - /* 00000260 call word 0x3ad */ 0xE8, 0x4A, 0x01, - /* 00000263 pop si */ 0x5E, - /* 00000264 and cx,0xbfff */ 0x81, 0xE1, 0xFF, 0xBF, - /* 00000268 cmp cx,0x13f */ 0x81, 0xF9, 0x3F, 0x01, - /* 0000026C jz 0x284 */ 0x74, 0x16, - /* 0000026E cmp cx,0x140 */ 0x81, 0xF9, 0x40, 0x01, - /* 00000272 jz 0x291 */ 0x74, 0x1D, - /* 00000274 cmp cx,0x141 */ 0x81, 0xF9, 0x41, 0x01, - /* 00000278 jz 0x29e */ 0x74, 0x24, - /* 0000027A push si */ 0x56, - /* 0000027B mov si,0x42c */ 0xBE, 0x2C, 0x04, - /* 0000027E call word 0x3ad */ 0xE8, 0x2C, 0x01, - /* 00000281 pop si */ 0x5E, - /* 00000282 jmp short 0x235 */ 0xEB, 0xB1, - /* 00000284 push si */ 0x56, - /* 00000285 mov si,0x46b */ 0xBE, 0x6B, 0x04, - /* 00000288 call word 0x3ad */ 0xE8, 0x22, 0x01, - /* 0000028B pop si */ 0x5E, - /* 0000028C mov si,0x100 */ 0xBE, 0x00, 0x01, - /* 0000028F jmp short 0x2b8 */ 0xEB, 0x27, - /* 00000291 push si */ 0x56, - /* 00000292 mov si,0x47d */ 0xBE, 0x7D, 0x04, - /* 00000295 call word 0x3ad */ 0xE8, 0x15, 0x01, - /* 00000298 pop si */ 0x5E, - /* 00000299 mov si,0x132 */ 0xBE, 0x32, 0x01, - /* 0000029C jmp short 0x2b8 */ 0xEB, 0x1A, - /* 0000029E push si */ 0x56, - /* 0000029F mov si,0x48f */ 0xBE, 0x8F, 0x04, - /* 000002A2 call word 0x3ad */ 0xE8, 0x08, 0x01, - /* 000002A5 pop si */ 0x5E, - /* 000002A6 mov si,0x164 */ 0xBE, 0x64, 0x01, - /* 000002A9 jmp short 0x2b8 */ 0xEB, 0x0D, - /* 000002AB push si */ 0x56, - /* 000002AC mov si,0x4a2 */ 0xBE, 0xA2, 0x04, - /* 000002AF call word 0x3ad */ 0xE8, 0xFB, 0x00, - /* 000002B2 pop si */ 0x5E, - /* 000002B3 mov si,0x196 */ 0xBE, 0x96, 0x01, - /* 000002B6 jmp short 0x2b8 */ 0xEB, 0x00, - /* 000002B8 push cs */ 0x0E, - /* 000002B9 pop ds */ 0x1F, - /* 000002BA mov cx,0x32 */ 0xB9, 0x32, 0x00, - /* 000002BD cld */ 0xFC, - /* 000002BE rep movsb */ 0xF3, 0xA4, - /* 000002C0 pop cx */ 0x59, - /* 000002C1 pop si */ 0x5E, - /* 000002C2 pop ds */ 0x1F, - /* 000002C3 pop di */ 0x5F, - /* 000002C4 pop es */ 0x07, - /* 000002C5 jmp word 0x395 */ 0xE9, 0xCD, 0x00, - /* 000002C8 push dx */ 0x52, - /* 000002C9 push ax */ 0x50, - /* 000002CA push si */ 0x56, - /* 000002CB mov si,0x410 */ 0xBE, 0x10, 0x04, - /* 000002CE call word 0x3ad */ 0xE8, 0xDC, 0x00, - /* 000002D1 pop si */ 0x5E, - /* 000002D2 and bx,0xbfff */ 0x81, 0xE3, 0xFF, 0xBF, - /* 000002D6 cmp bx,0x13f */ 0x81, 0xFB, 0x3F, 0x01, - /* 000002DA jz 0x2f3 */ 0x74, 0x17, - /* 000002DC cmp bx,0x140 */ 0x81, 0xFB, 0x40, 0x01, - /* 000002E0 jz 0x2fd */ 0x74, 0x1B, - /* 000002E2 cmp bx,0x141 */ 0x81, 0xFB, 0x41, 0x01, - /* 000002E6 jz 0x307 */ 0x74, 0x1F, - /* 000002E8 push si */ 0x56, - /* 000002E9 mov si,0x42c */ 0xBE, 0x2C, 0x04, - /* 000002EC call word 0x3ad */ 0xE8, 0xBE, 0x00, - /* 000002EF pop si */ 0x5E, - /* 000002F0 jmp word 0x235 */ 0xE9, 0x42, 0xFF, - /* 000002F3 push si */ 0x56, - /* 000002F4 mov si,0x46b */ 0xBE, 0x6B, 0x04, - /* 000002F7 call word 0x3ad */ 0xE8, 0xB3, 0x00, - /* 000002FA pop si */ 0x5E, - /* 000002FB jmp short 0x319 */ 0xEB, 0x1C, - /* 000002FD push si */ 0x56, - /* 000002FE mov si,0x47d */ 0xBE, 0x7D, 0x04, - /* 00000301 call word 0x3ad */ 0xE8, 0xA9, 0x00, - /* 00000304 pop si */ 0x5E, - /* 00000305 jmp short 0x319 */ 0xEB, 0x12, - /* 00000307 push si */ 0x56, - /* 00000308 mov si,0x48f */ 0xBE, 0x8F, 0x04, - /* 0000030B call word 0x3ad */ 0xE8, 0x9F, 0x00, - /* 0000030E pop si */ 0x5E, - /* 0000030F jmp short 0x319 */ 0xEB, 0x08, - /* 00000311 push si */ 0x56, - /* 00000312 mov si,0x4a2 */ 0xBE, 0xA2, 0x04, - /* 00000315 call word 0x3ad */ 0xE8, 0x95, 0x00, - /* 00000318 pop si */ 0x5E, - /* 00000319 mov [0x4b0],bl */ 0x88, 0x1E, 0xB0, 0x04, - /* 0000031D mov [0x4b1],bh */ 0x88, 0x3E, 0xB1, 0x04, - /* 00000321 pop ax */ 0x58, - /* 00000322 pop dx */ 0x5A, - /* 00000323 jmp short 0x395 */ 0xEB, 0x70, - /* 00000325 push si */ 0x56, - /* 00000326 mov si,0x405 */ 0xBE, 0x05, 0x04, - /* 00000329 call word 0x3ad */ 0xE8, 0x81, 0x00, - /* 0000032C pop si */ 0x5E, - /* 0000032D mov bl,[0x4b0] */ 0x8A, 0x1E, 0xB0, 0x04, - /* 00000331 mov bh,[0x4b1] */ 0x8A, 0x3E, 0xB1, 0x04, - /* 00000335 jmp short 0x395 */ 0xEB, 0x5E, - /* 00000337 push si */ 0x56, - /* 00000338 mov si,0x43b */ 0xBE, 0x3B, 0x04, - /* 0000033B call word 0x3ad */ 0xE8, 0x6F, 0x00, - /* 0000033E pop si */ 0x5E, - /* 0000033F mov bx,0x80 */ 0xBB, 0x80, 0x00, - /* 00000342 jmp short 0x395 */ 0xEB, 0x51, - /* 00000344 push es */ 0x06, - /* 00000345 push di */ 0x57, - /* 00000346 push ds */ 0x1E, - /* 00000347 push si */ 0x56, - /* 00000348 push cx */ 0x51, - /* 00000349 push si */ 0x56, - /* 0000034A mov si,0x450 */ 0xBE, 0x50, 0x04, - /* 0000034D call word 0x3ad */ 0xE8, 0x5D, 0x00, - /* 00000350 pop si */ 0x5E, - /* 00000351 push cs */ 0x0E, - /* 00000352 pop ds */ 0x1F, - /* 00000353 mov si,0x4b2 */ 0xBE, 0xB2, 0x04, - /* 00000356 mov cx,0x80 */ 0xB9, 0x80, 0x00, - /* 00000359 cld */ 0xFC, - /* 0000035A rep movsb */ 0xF3, 0xA4, - /* 0000035C pop cx */ 0x59, - /* 0000035D pop si */ 0x5E, - /* 0000035E pop ds */ 0x1F, - /* 0000035F pop di */ 0x5F, - /* 00000360 pop es */ 0x07, - /* 00000361 jmp short 0x395 */ 0xEB, 0x32, - /* 00000363 push si */ 0x56, - /* 00000364 mov si,0x41b */ 0xBE, 0x1B, 0x04, - /* 00000367 call word 0x3ad */ 0xE8, 0x43, 0x00, - /* 0000036A pop si */ 0x5E, - /* 0000036B cmp al,0x3 */ 0x3C, 0x03, - /* 0000036D jz 0x37e */ 0x74, 0x0F, - /* 0000036F cmp al,0x12 */ 0x3C, 0x12, - /* 00000371 jz 0x38a */ 0x74, 0x17, - /* 00000373 push si */ 0x56, - /* 00000374 mov si,0x42c */ 0xBE, 0x2C, 0x04, - /* 00000377 call word 0x3ad */ 0xE8, 0x33, 0x00, - /* 0000037A pop si */ 0x5E, - /* 0000037B jmp word 0x235 */ 0xE9, 0xB7, 0xFE, - /* 0000037E push si */ 0x56, - /* 0000037F mov si,0x45c */ 0xBE, 0x5C, 0x04, - /* 00000382 call word 0x3ad */ 0xE8, 0x28, 0x00, - /* 00000385 pop si */ 0x5E, - /* 00000386 mov al,0x0 */ 0xB0, 0x00, - /* 00000388 jmp short 0x38c */ 0xEB, 0x02, - /* 0000038A mov al,0x0 */ 0xB0, 0x00, - /* 0000038C push si */ 0x56, - /* 0000038D mov si,0x3c2 */ 0xBE, 0xC2, 0x03, - /* 00000390 call word 0x3ad */ 0xE8, 0x1A, 0x00, - /* 00000393 pop si */ 0x5E, - /* 00000394 iretw */ 0xCF, - /* 00000395 push si */ 0x56, - /* 00000396 mov si,0x3c2 */ 0xBE, 0xC2, 0x03, - /* 00000399 call word 0x3ad */ 0xE8, 0x11, 0x00, - /* 0000039C pop si */ 0x5E, - /* 0000039D mov ax,0x4f */ 0xB8, 0x4F, 0x00, - /* 000003A0 iretw */ 0xCF, - /* 000003A1 push si */ 0x56, - /* 000003A2 mov si,0x3c8 */ 0xBE, 0xC8, 0x03, - /* 000003A5 call word 0x3ad */ 0xE8, 0x05, 0x00, - /* 000003A8 pop si */ 0x5E, - /* 000003A9 mov ax,0x24f */ 0xB8, 0x4F, 0x02, - /* 000003AC iretw */ 0xCF, - /* 000003AD pushaw */ 0x60, - /* 000003AE push ds */ 0x1E, - /* 000003AF push cs */ 0x0E, - /* 000003B0 pop ds */ 0x1F, - /* 000003B1 mov dx,0x220 */ 0xBA, 0x20, 0x02, - /* 000003B4 mov ax,0x0 */ 0xB8, 0x00, 0x00, - /* 000003B7 lodsb */ 0xAC, - /* 000003B8 cmp al,0x0 */ 0x3C, 0x00, - /* 000003BA jz 0x3bf */ 0x74, 0x03, - /* 000003BC out dx,al */ 0xEE, - /* 000003BD jmp short 0x3b7 */ 0xEB, 0xF8, - /* 000003BF pop ds */ 0x1F, - /* 000003C0 popaw */ 0x61, - /* 000003C1 ret */ 0xC3, - /* 000003C2 jna 0x413 */ 0x76, 0x4F, - /* 000003C4 imul cx,[di],byte +0xa */ 0x6B, 0x0D, 0x0A, - /* 000003C7 add [bp+0x55],dh */ 0x00, 0x76, 0x55, - /* 000003CA outsb */ 0x6E, - /* 000003CB jnc 0x442 */ 0x73, 0x75, - /* 000003CD jo 0x43f */ 0x70, 0x70, - /* 000003CF outsw */ 0x6F, - /* 000003D0 jc 0x446 */ 0x72, 0x74, - /* 000003D2 fs or ax,0xa */ 0x65, 0x64, 0x0D, 0x0A, 0x00, - /* 000003D7 jna 0x42e */ 0x76, 0x55, - /* 000003D9 outsb */ 0x6E, - /* 000003DA imul bp,[bp+0x6f],byte +0x77 */ 0x6B, 0x6E, 0x6F, 0x77, - /* 000003DE outsb */ 0x6E, - /* 000003DF and [bp+0x75],al */ 0x20, 0x46, 0x75, - /* 000003E2 outsb */ 0x6E, - /* 000003E3 arpl [si+0x69],si */ 0x63, 0x74, 0x69, - /* 000003E6 outsw */ 0x6F, - /* 000003E7 outsb */ 0x6E, - /* 000003E8 or ax,0xa */ 0x0D, 0x0A, 0x00, - /* 000003EB jna 0x434 */ 0x76, 0x47, - /* 000003ED gs jz 0x439 */ 0x65, 0x74, 0x49, - /* 000003F0 outsb */ 0x6E, - /* 000003F1 outsd */ 0x66, 0x6F, - /* 000003F3 or ax,0xa */ 0x0D, 0x0A, 0x00, - /* 000003F6 jna 0x43f */ 0x76, 0x47, - /* 000003F8 gs jz 0x448 */ 0x65, 0x74, 0x4D, - /* 000003FB outsw */ 0x6F, - /* 000003FC gs dec cx */ 0x64, 0x65, 0x49, - /* 000003FF outsb */ 0x6E, - /* 00000400 outsd */ 0x66, 0x6F, - /* 00000402 or ax,0xa */ 0x0D, 0x0A, 0x00, - /* 00000405 jna 0x44e */ 0x76, 0x47, - /* 00000407 gs jz 0x457 */ 0x65, 0x74, 0x4D, - /* 0000040A outsw */ 0x6F, - /* 0000040B gs or ax,0xa */ 0x64, 0x65, 0x0D, 0x0A, 0x00, - /* 00000410 jna 0x465 */ 0x76, 0x53, - /* 00000412 gs jz 0x462 */ 0x65, 0x74, 0x4D, - /* 00000415 outsw */ 0x6F, - /* 00000416 gs or ax,0xa */ 0x64, 0x65, 0x0D, 0x0A, 0x00, - /* 0000041B jna 0x470 */ 0x76, 0x53, - /* 0000041D gs jz 0x46d */ 0x65, 0x74, 0x4D, - /* 00000420 outsw */ 0x6F, - /* 00000421 gs dec sp */ 0x64, 0x65, 0x4C, - /* 00000424 gs a32 popaw */ 0x65, 0x67, 0x61, - /* 00000427 arpl [bx+di+0xd],di */ 0x63, 0x79, 0x0D, - /* 0000042A or al,[bx+si] */ 0x0A, 0x00, - /* 0000042C jna 0x483 */ 0x76, 0x55, - /* 0000042E outsb */ 0x6E, - /* 0000042F imul bp,[bx+0x77],byte +0x6e */ 0x6B, 0x6F, 0x77, 0x6E, - /* 00000433 and [di+0x6f],cl */ 0x20, 0x4D, 0x6F, - /* 00000436 gs or ax,0xa */ 0x64, 0x65, 0x0D, 0x0A, 0x00, - /* 0000043B jna 0x484 */ 0x76, 0x47, - /* 0000043D gs jz 0x490 */ 0x65, 0x74, 0x50, - /* 00000440 insw */ 0x6D, - /* 00000441 inc bx */ 0x43, - /* 00000442 popaw */ 0x61, - /* 00000443 jo 0x4a6 */ 0x70, 0x61, - /* 00000445 bound bp,[bx+di+0x6c] */ 0x62, 0x69, 0x6C, - /* 00000448 imul si,[si+0x69],word 0x7365 */ 0x69, 0x74, 0x69, 0x65, 0x73, - /* 0000044D or ax,0xa */ 0x0D, 0x0A, 0x00, - /* 00000450 jna 0x4a4 */ 0x76, 0x52, - /* 00000452 gs popaw */ 0x65, 0x61, - /* 00000454 fs inc bp */ 0x64, 0x45, - /* 00000456 imul sp,[fs:si+0xd],word 0xa */ 0x64, 0x69, 0x64, 0x0D, 0x0A, 0x00, - /* 0000045C jna 0x4aa */ 0x76, 0x4C, - /* 0000045E gs a32 popaw */ 0x65, 0x67, 0x61, - /* 00000461 arpl [bx+di+0x4d],di */ 0x63, 0x79, 0x4D, - /* 00000464 outsw */ 0x6F, - /* 00000465 xor cx,[gs:di] */ 0x64, 0x65, 0x33, 0x0D, - /* 00000469 or al,[bx+si] */ 0x0A, 0x00, - /* 0000046B insw */ 0x6D, - /* 0000046C outsw */ 0x6F, - /* 0000046D gs pop di */ 0x64, 0x65, 0x5F, - /* 00000470 ss xor al,0x30 */ 0x36, 0x34, 0x30, - /* 00000473 js 0x4a9 */ 0x78, 0x34, - /* 00000475 cmp [bx+si],dh */ 0x38, 0x30, - /* 00000477 js 0x4ac */ 0x78, 0x33, - /* 00000479 xor cl,[di] */ 0x32, 0x0D, - /* 0000047B or al,[bx+si] */ 0x0A, 0x00, - /* 0000047D insw */ 0x6D, - /* 0000047E outsw */ 0x6F, - /* 0000047F gs pop di */ 0x64, 0x65, 0x5F, - /* 00000482 cmp [bx+si],dh */ 0x38, 0x30, - /* 00000484 xor [bx+si+0x36],bh */ 0x30, 0x78, 0x36, - /* 00000487 xor [bx+si],dh */ 0x30, 0x30, - /* 00000489 js 0x4be */ 0x78, 0x33, - /* 0000048B xor cl,[di] */ 0x32, 0x0D, - /* 0000048D or al,[bx+si] */ 0x0A, 0x00, - /* 0000048F insw */ 0x6D, - /* 00000490 outsw */ 0x6F, - /* 00000491 gs pop di */ 0x64, 0x65, 0x5F, - /* 00000494 xor [bx+si],si */ 0x31, 0x30, - /* 00000496 xor dh,[si] */ 0x32, 0x34, - /* 00000498 js 0x4d1 */ 0x78, 0x37, - /* 0000049A cmp [ss:bx+si+0x33],bh */ 0x36, 0x38, 0x78, 0x33, - /* 0000049E xor cl,[di] */ 0x32, 0x0D, - /* 000004A0 or al,[bx+si] */ 0x0A, 0x00, - /* 000004A2 insw */ 0x6D, - /* 000004A3 outsw */ 0x6F, - /* 000004A4 gs pop di */ 0x64, 0x65, 0x5F, - /* 000004A7 jnz 0x517 */ 0x75, 0x6E, - /* 000004A9 jnz 0x51e */ 0x75, 0x73, - /* 000004AB fs or ax,0xa */ 0x65, 0x64, 0x0D, 0x0A, 0x00, - /* 000004B0 add [bx+si],al */ 0x00, 0x00, - /* 000004B2 add [bx+si],al */ 0x00, 0x00, - /* 000004B4 add [bx+si],al */ 0x00, 0x00, - /* 000004B6 add [bx+si],al */ 0x00, 0x00, - /* 000004B8 add [bx+si],al */ 0x00, 0x00, - /* 000004BA add [bx+si],al */ 0x00, 0x00, - /* 000004BC add [bx+si],al */ 0x00, 0x00, - /* 000004BE add [bx+si],al */ 0x00, 0x00, - /* 000004C0 add [bx+si],al */ 0x00, 0x00, - /* 000004C2 add [bx+si],al */ 0x00, 0x00, - /* 000004C4 add [bx+si],al */ 0x00, 0x00, - /* 000004C6 add [bx+si],al */ 0x00, 0x00, - /* 000004C8 add [bx+si],al */ 0x00, 0x00, - /* 000004CA add [bx+si],al */ 0x00, 0x00, - /* 000004CC add [bx+si],al */ 0x00, 0x00, - /* 000004CE add [bx+si],al */ 0x00, 0x00, - /* 000004D0 add [bx+si],al */ 0x00, 0x00, - /* 000004D2 add [bx+si],al */ 0x00, 0x00, - /* 000004D4 add [bx+si],al */ 0x00, 0x00, - /* 000004D6 add [bx+si],al */ 0x00, 0x00, - /* 000004D8 add [bx+si],al */ 0x00, 0x00, - /* 000004DA add [bx+si],al */ 0x00, 0x00, - /* 000004DC add [bx+si],al */ 0x00, 0x00, - /* 000004DE add [bx+si],al */ 0x00, 0x00, - /* 000004E0 add [bx+si],al */ 0x00, 0x00, - /* 000004E2 add [bx+si],al */ 0x00, 0x00, - /* 000004E4 add [bx+si],al */ 0x00, 0x00, - /* 000004E6 add [bx+si],al */ 0x00, 0x00, - /* 000004E8 add [bx+si],al */ 0x00, 0x00, - /* 000004EA add [bx+si],al */ 0x00, 0x00, - /* 000004EC add [bx+si],al */ 0x00, 0x00, - /* 000004EE add [bx+si],al */ 0x00, 0x00, - /* 000004F0 add [bx+si],al */ 0x00, 0x00, - /* 000004F2 add [bx+si],al */ 0x00, 0x00, - /* 000004F4 add [bx+si],al */ 0x00, 0x00, - /* 000004F6 add [bx+si],al */ 0x00, 0x00, - /* 000004F8 add [bx+si],al */ 0x00, 0x00, - /* 000004FA add [bx+si],al */ 0x00, 0x00, - /* 000004FC add [bx+si],al */ 0x00, 0x00, - /* 000004FE add [bx+si],al */ 0x00, 0x00, - /* 00000500 add [bx+si],al */ 0x00, 0x00, - /* 00000502 add [bx+si],al */ 0x00, 0x00, - /* 00000504 add [bx+si],al */ 0x00, 0x00, - /* 00000506 add [bx+si],al */ 0x00, 0x00, - /* 00000508 add [bx+si],al */ 0x00, 0x00, - /* 0000050A add [bx+si],al */ 0x00, 0x00, - /* 0000050C add [bx+si],al */ 0x00, 0x00, - /* 0000050E add [bx+si],al */ 0x00, 0x00, - /* 00000510 add [bx+si],al */ 0x00, 0x00, - /* 00000512 add [bx+si],al */ 0x00, 0x00, - /* 00000514 add [bx+si],al */ 0x00, 0x00, - /* 00000516 add [bx+si],al */ 0x00, 0x00, - /* 00000518 add [bx+si],al */ 0x00, 0x00, - /* 0000051A add [bx+si],al */ 0x00, 0x00, - /* 0000051C add [bx+si],al */ 0x00, 0x00, - /* 0000051E add [bx+si],al */ 0x00, 0x00, - /* 00000520 add [bx+si],al */ 0x00, 0x00, - /* 00000522 add [bx+si],al */ 0x00, 0x00, - /* 00000524 add [bx+si],al */ 0x00, 0x00, - /* 00000526 add [bx+si],al */ 0x00, 0x00, - /* 00000528 add [bx+si],al */ 0x00, 0x00, - /* 0000052A add [bx+si],al */ 0x00, 0x00, - /* 0000052C add [bx+si],al */ 0x00, 0x00, - /* 0000052E add [bx+si],al */ 0x00, 0x00, - /* 00000530 add [bx+si],al */ 0x00, 0x00, - /* 00000532 add [bx+si],al */ 0x00, 0x00, +STATIC CONST UINT8 mVbeShim[] = { + /* 00000000 nop */ 0x90, + /* 00000001 nop */ 0x90, + /* 00000002 nop */ 0x90, + /* 00000003 nop */ 0x90, + /* 00000004 nop */ 0x90, + /* 00000005 nop */ 0x90, + /* 00000006 nop */ 0x90, + /* 00000007 nop */ 0x90, + /* 00000008 nop */ 0x90, + /* 00000009 nop */ 0x90, + /* 0000000A nop */ 0x90, + /* 0000000B nop */ 0x90, + /* 0000000C nop */ 0x90, + /* 0000000D nop */ 0x90, + /* 0000000E nop */ 0x90, + /* 0000000F nop */ 0x90, + /* 00000010 nop */ 0x90, + /* 00000011 nop */ 0x90, + /* 00000012 nop */ 0x90, + /* 00000013 nop */ 0x90, + /* 00000014 nop */ 0x90, + /* 00000015 nop */ 0x90, + /* 00000016 nop */ 0x90, + /* 00000017 nop */ 0x90, + /* 00000018 nop */ 0x90, + /* 00000019 nop */ 0x90, + /* 0000001A nop */ 0x90, + /* 0000001B nop */ 0x90, + /* 0000001C nop */ 0x90, + /* 0000001D nop */ 0x90, + /* 0000001E nop */ 0x90, + /* 0000001F nop */ 0x90, + /* 00000020 nop */ 0x90, + /* 00000021 nop */ 0x90, + /* 00000022 nop */ 0x90, + /* 00000023 nop */ 0x90, + /* 00000024 nop */ 0x90, + /* 00000025 nop */ 0x90, + /* 00000026 nop */ 0x90, + /* 00000027 nop */ 0x90, + /* 00000028 nop */ 0x90, + /* 00000029 nop */ 0x90, + /* 0000002A nop */ 0x90, + /* 0000002B nop */ 0x90, + /* 0000002C nop */ 0x90, + /* 0000002D nop */ 0x90, + /* 0000002E nop */ 0x90, + /* 0000002F nop */ 0x90, + /* 00000030 nop */ 0x90, + /* 00000031 nop */ 0x90, + /* 00000032 nop */ 0x90, + /* 00000033 nop */ 0x90, + /* 00000034 nop */ 0x90, + /* 00000035 nop */ 0x90, + /* 00000036 nop */ 0x90, + /* 00000037 nop */ 0x90, + /* 00000038 nop */ 0x90, + /* 00000039 nop */ 0x90, + /* 0000003A nop */ 0x90, + /* 0000003B nop */ 0x90, + /* 0000003C nop */ 0x90, + /* 0000003D nop */ 0x90, + /* 0000003E nop */ 0x90, + /* 0000003F nop */ 0x90, + /* 00000040 nop */ 0x90, + /* 00000041 nop */ 0x90, + /* 00000042 nop */ 0x90, + /* 00000043 nop */ 0x90, + /* 00000044 nop */ 0x90, + /* 00000045 nop */ 0x90, + /* 00000046 nop */ 0x90, + /* 00000047 nop */ 0x90, + /* 00000048 nop */ 0x90, + /* 00000049 nop */ 0x90, + /* 0000004A nop */ 0x90, + /* 0000004B nop */ 0x90, + /* 0000004C nop */ 0x90, + /* 0000004D nop */ 0x90, + /* 0000004E nop */ 0x90, + /* 0000004F nop */ 0x90, + /* 00000050 nop */ 0x90, + /* 00000051 nop */ 0x90, + /* 00000052 nop */ 0x90, + /* 00000053 nop */ 0x90, + /* 00000054 nop */ 0x90, + /* 00000055 nop */ 0x90, + /* 00000056 nop */ 0x90, + /* 00000057 nop */ 0x90, + /* 00000058 nop */ 0x90, + /* 00000059 nop */ 0x90, + /* 0000005A nop */ 0x90, + /* 0000005B nop */ 0x90, + /* 0000005C nop */ 0x90, + /* 0000005D nop */ 0x90, + /* 0000005E nop */ 0x90, + /* 0000005F nop */ 0x90, + /* 00000060 nop */ 0x90, + /* 00000061 nop */ 0x90, + /* 00000062 nop */ 0x90, + /* 00000063 nop */ 0x90, + /* 00000064 nop */ 0x90, + /* 00000065 nop */ 0x90, + /* 00000066 nop */ 0x90, + /* 00000067 nop */ 0x90, + /* 00000068 nop */ 0x90, + /* 00000069 nop */ 0x90, + /* 0000006A nop */ 0x90, + /* 0000006B nop */ 0x90, + /* 0000006C nop */ 0x90, + /* 0000006D nop */ 0x90, + /* 0000006E nop */ 0x90, + /* 0000006F nop */ 0x90, + /* 00000070 nop */ 0x90, + /* 00000071 nop */ 0x90, + /* 00000072 nop */ 0x90, + /* 00000073 nop */ 0x90, + /* 00000074 nop */ 0x90, + /* 00000075 nop */ 0x90, + /* 00000076 nop */ 0x90, + /* 00000077 nop */ 0x90, + /* 00000078 nop */ 0x90, + /* 00000079 nop */ 0x90, + /* 0000007A nop */ 0x90, + /* 0000007B nop */ 0x90, + /* 0000007C nop */ 0x90, + /* 0000007D nop */ 0x90, + /* 0000007E nop */ 0x90, + /* 0000007F nop */ 0x90, + /* 00000080 nop */ 0x90, + /* 00000081 nop */ 0x90, + /* 00000082 nop */ 0x90, + /* 00000083 nop */ 0x90, + /* 00000084 nop */ 0x90, + /* 00000085 nop */ 0x90, + /* 00000086 nop */ 0x90, + /* 00000087 nop */ 0x90, + /* 00000088 nop */ 0x90, + /* 00000089 nop */ 0x90, + /* 0000008A nop */ 0x90, + /* 0000008B nop */ 0x90, + /* 0000008C nop */ 0x90, + /* 0000008D nop */ 0x90, + /* 0000008E nop */ 0x90, + /* 0000008F nop */ 0x90, + /* 00000090 nop */ 0x90, + /* 00000091 nop */ 0x90, + /* 00000092 nop */ 0x90, + /* 00000093 nop */ 0x90, + /* 00000094 nop */ 0x90, + /* 00000095 nop */ 0x90, + /* 00000096 nop */ 0x90, + /* 00000097 nop */ 0x90, + /* 00000098 nop */ 0x90, + /* 00000099 nop */ 0x90, + /* 0000009A nop */ 0x90, + /* 0000009B nop */ 0x90, + /* 0000009C nop */ 0x90, + /* 0000009D nop */ 0x90, + /* 0000009E nop */ 0x90, + /* 0000009F nop */ 0x90, + /* 000000A0 nop */ 0x90, + /* 000000A1 nop */ 0x90, + /* 000000A2 nop */ 0x90, + /* 000000A3 nop */ 0x90, + /* 000000A4 nop */ 0x90, + /* 000000A5 nop */ 0x90, + /* 000000A6 nop */ 0x90, + /* 000000A7 nop */ 0x90, + /* 000000A8 nop */ 0x90, + /* 000000A9 nop */ 0x90, + /* 000000AA nop */ 0x90, + /* 000000AB nop */ 0x90, + /* 000000AC nop */ 0x90, + /* 000000AD nop */ 0x90, + /* 000000AE nop */ 0x90, + /* 000000AF nop */ 0x90, + /* 000000B0 nop */ 0x90, + /* 000000B1 nop */ 0x90, + /* 000000B2 nop */ 0x90, + /* 000000B3 nop */ 0x90, + /* 000000B4 nop */ 0x90, + /* 000000B5 nop */ 0x90, + /* 000000B6 nop */ 0x90, + /* 000000B7 nop */ 0x90, + /* 000000B8 nop */ 0x90, + /* 000000B9 nop */ 0x90, + /* 000000BA nop */ 0x90, + /* 000000BB nop */ 0x90, + /* 000000BC nop */ 0x90, + /* 000000BD nop */ 0x90, + /* 000000BE nop */ 0x90, + /* 000000BF nop */ 0x90, + /* 000000C0 nop */ 0x90, + /* 000000C1 nop */ 0x90, + /* 000000C2 nop */ 0x90, + /* 000000C3 nop */ 0x90, + /* 000000C4 nop */ 0x90, + /* 000000C5 nop */ 0x90, + /* 000000C6 nop */ 0x90, + /* 000000C7 nop */ 0x90, + /* 000000C8 nop */ 0x90, + /* 000000C9 nop */ 0x90, + /* 000000CA nop */ 0x90, + /* 000000CB nop */ 0x90, + /* 000000CC nop */ 0x90, + /* 000000CD nop */ 0x90, + /* 000000CE nop */ 0x90, + /* 000000CF nop */ 0x90, + /* 000000D0 nop */ 0x90, + /* 000000D1 nop */ 0x90, + /* 000000D2 nop */ 0x90, + /* 000000D3 nop */ 0x90, + /* 000000D4 nop */ 0x90, + /* 000000D5 nop */ 0x90, + /* 000000D6 nop */ 0x90, + /* 000000D7 nop */ 0x90, + /* 000000D8 nop */ 0x90, + /* 000000D9 nop */ 0x90, + /* 000000DA nop */ 0x90, + /* 000000DB nop */ 0x90, + /* 000000DC nop */ 0x90, + /* 000000DD nop */ 0x90, + /* 000000DE nop */ 0x90, + /* 000000DF nop */ 0x90, + /* 000000E0 nop */ 0x90, + /* 000000E1 nop */ 0x90, + /* 000000E2 nop */ 0x90, + /* 000000E3 nop */ 0x90, + /* 000000E4 nop */ 0x90, + /* 000000E5 nop */ 0x90, + /* 000000E6 nop */ 0x90, + /* 000000E7 nop */ 0x90, + /* 000000E8 nop */ 0x90, + /* 000000E9 nop */ 0x90, + /* 000000EA nop */ 0x90, + /* 000000EB nop */ 0x90, + /* 000000EC nop */ 0x90, + /* 000000ED nop */ 0x90, + /* 000000EE nop */ 0x90, + /* 000000EF nop */ 0x90, + /* 000000F0 nop */ 0x90, + /* 000000F1 nop */ 0x90, + /* 000000F2 nop */ 0x90, + /* 000000F3 nop */ 0x90, + /* 000000F4 nop */ 0x90, + /* 000000F5 nop */ 0x90, + /* 000000F6 nop */ 0x90, + /* 000000F7 nop */ 0x90, + /* 000000F8 nop */ 0x90, + /* 000000F9 nop */ 0x90, + /* 000000FA nop */ 0x90, + /* 000000FB nop */ 0x90, + /* 000000FC nop */ 0x90, + /* 000000FD nop */ 0x90, + /* 000000FE nop */ 0x90, + /* 000000FF nop */ 0x90, + /* 00000100 nop */ 0x90, + /* 00000101 nop */ 0x90, + /* 00000102 nop */ 0x90, + /* 00000103 nop */ 0x90, + /* 00000104 nop */ 0x90, + /* 00000105 nop */ 0x90, + /* 00000106 nop */ 0x90, + /* 00000107 nop */ 0x90, + /* 00000108 nop */ 0x90, + /* 00000109 nop */ 0x90, + /* 0000010A nop */ 0x90, + /* 0000010B nop */ 0x90, + /* 0000010C nop */ 0x90, + /* 0000010D nop */ 0x90, + /* 0000010E nop */ 0x90, + /* 0000010F nop */ 0x90, + /* 00000110 nop */ 0x90, + /* 00000111 nop */ 0x90, + /* 00000112 nop */ 0x90, + /* 00000113 nop */ 0x90, + /* 00000114 nop */ 0x90, + /* 00000115 nop */ 0x90, + /* 00000116 nop */ 0x90, + /* 00000117 nop */ 0x90, + /* 00000118 nop */ 0x90, + /* 00000119 nop */ 0x90, + /* 0000011A nop */ 0x90, + /* 0000011B nop */ 0x90, + /* 0000011C nop */ 0x90, + /* 0000011D nop */ 0x90, + /* 0000011E nop */ 0x90, + /* 0000011F nop */ 0x90, + /* 00000120 nop */ 0x90, + /* 00000121 nop */ 0x90, + /* 00000122 nop */ 0x90, + /* 00000123 nop */ 0x90, + /* 00000124 nop */ 0x90, + /* 00000125 nop */ 0x90, + /* 00000126 nop */ 0x90, + /* 00000127 nop */ 0x90, + /* 00000128 nop */ 0x90, + /* 00000129 nop */ 0x90, + /* 0000012A nop */ 0x90, + /* 0000012B nop */ 0x90, + /* 0000012C nop */ 0x90, + /* 0000012D nop */ 0x90, + /* 0000012E nop */ 0x90, + /* 0000012F nop */ 0x90, + /* 00000130 nop */ 0x90, + /* 00000131 nop */ 0x90, + /* 00000132 nop */ 0x90, + /* 00000133 nop */ 0x90, + /* 00000134 nop */ 0x90, + /* 00000135 nop */ 0x90, + /* 00000136 nop */ 0x90, + /* 00000137 nop */ 0x90, + /* 00000138 nop */ 0x90, + /* 00000139 nop */ 0x90, + /* 0000013A nop */ 0x90, + /* 0000013B nop */ 0x90, + /* 0000013C nop */ 0x90, + /* 0000013D nop */ 0x90, + /* 0000013E nop */ 0x90, + /* 0000013F nop */ 0x90, + /* 00000140 nop */ 0x90, + /* 00000141 nop */ 0x90, + /* 00000142 nop */ 0x90, + /* 00000143 nop */ 0x90, + /* 00000144 nop */ 0x90, + /* 00000145 nop */ 0x90, + /* 00000146 nop */ 0x90, + /* 00000147 nop */ 0x90, + /* 00000148 nop */ 0x90, + /* 00000149 nop */ 0x90, + /* 0000014A nop */ 0x90, + /* 0000014B nop */ 0x90, + /* 0000014C nop */ 0x90, + /* 0000014D nop */ 0x90, + /* 0000014E nop */ 0x90, + /* 0000014F nop */ 0x90, + /* 00000150 nop */ 0x90, + /* 00000151 nop */ 0x90, + /* 00000152 nop */ 0x90, + /* 00000153 nop */ 0x90, + /* 00000154 nop */ 0x90, + /* 00000155 nop */ 0x90, + /* 00000156 nop */ 0x90, + /* 00000157 nop */ 0x90, + /* 00000158 nop */ 0x90, + /* 00000159 nop */ 0x90, + /* 0000015A nop */ 0x90, + /* 0000015B nop */ 0x90, + /* 0000015C nop */ 0x90, + /* 0000015D nop */ 0x90, + /* 0000015E nop */ 0x90, + /* 0000015F nop */ 0x90, + /* 00000160 nop */ 0x90, + /* 00000161 nop */ 0x90, + /* 00000162 nop */ 0x90, + /* 00000163 nop */ 0x90, + /* 00000164 nop */ 0x90, + /* 00000165 nop */ 0x90, + /* 00000166 nop */ 0x90, + /* 00000167 nop */ 0x90, + /* 00000168 nop */ 0x90, + /* 00000169 nop */ 0x90, + /* 0000016A nop */ 0x90, + /* 0000016B nop */ 0x90, + /* 0000016C nop */ 0x90, + /* 0000016D nop */ 0x90, + /* 0000016E nop */ 0x90, + /* 0000016F nop */ 0x90, + /* 00000170 nop */ 0x90, + /* 00000171 nop */ 0x90, + /* 00000172 nop */ 0x90, + /* 00000173 nop */ 0x90, + /* 00000174 nop */ 0x90, + /* 00000175 nop */ 0x90, + /* 00000176 nop */ 0x90, + /* 00000177 nop */ 0x90, + /* 00000178 nop */ 0x90, + /* 00000179 nop */ 0x90, + /* 0000017A nop */ 0x90, + /* 0000017B nop */ 0x90, + /* 0000017C nop */ 0x90, + /* 0000017D nop */ 0x90, + /* 0000017E nop */ 0x90, + /* 0000017F nop */ 0x90, + /* 00000180 nop */ 0x90, + /* 00000181 nop */ 0x90, + /* 00000182 nop */ 0x90, + /* 00000183 nop */ 0x90, + /* 00000184 nop */ 0x90, + /* 00000185 nop */ 0x90, + /* 00000186 nop */ 0x90, + /* 00000187 nop */ 0x90, + /* 00000188 nop */ 0x90, + /* 00000189 nop */ 0x90, + /* 0000018A nop */ 0x90, + /* 0000018B nop */ 0x90, + /* 0000018C nop */ 0x90, + /* 0000018D nop */ 0x90, + /* 0000018E nop */ 0x90, + /* 0000018F nop */ 0x90, + /* 00000190 nop */ 0x90, + /* 00000191 nop */ 0x90, + /* 00000192 nop */ 0x90, + /* 00000193 nop */ 0x90, + /* 00000194 nop */ 0x90, + /* 00000195 nop */ 0x90, + /* 00000196 nop */ 0x90, + /* 00000197 nop */ 0x90, + /* 00000198 nop */ 0x90, + /* 00000199 nop */ 0x90, + /* 0000019A nop */ 0x90, + /* 0000019B nop */ 0x90, + /* 0000019C nop */ 0x90, + /* 0000019D nop */ 0x90, + /* 0000019E nop */ 0x90, + /* 0000019F nop */ 0x90, + /* 000001A0 nop */ 0x90, + /* 000001A1 nop */ 0x90, + /* 000001A2 nop */ 0x90, + /* 000001A3 nop */ 0x90, + /* 000001A4 nop */ 0x90, + /* 000001A5 nop */ 0x90, + /* 000001A6 nop */ 0x90, + /* 000001A7 nop */ 0x90, + /* 000001A8 nop */ 0x90, + /* 000001A9 nop */ 0x90, + /* 000001AA nop */ 0x90, + /* 000001AB nop */ 0x90, + /* 000001AC nop */ 0x90, + /* 000001AD nop */ 0x90, + /* 000001AE nop */ 0x90, + /* 000001AF nop */ 0x90, + /* 000001B0 nop */ 0x90, + /* 000001B1 nop */ 0x90, + /* 000001B2 nop */ 0x90, + /* 000001B3 nop */ 0x90, + /* 000001B4 nop */ 0x90, + /* 000001B5 nop */ 0x90, + /* 000001B6 nop */ 0x90, + /* 000001B7 nop */ 0x90, + /* 000001B8 nop */ 0x90, + /* 000001B9 nop */ 0x90, + /* 000001BA nop */ 0x90, + /* 000001BB nop */ 0x90, + /* 000001BC nop */ 0x90, + /* 000001BD nop */ 0x90, + /* 000001BE nop */ 0x90, + /* 000001BF nop */ 0x90, + /* 000001C0 nop */ 0x90, + /* 000001C1 nop */ 0x90, + /* 000001C2 nop */ 0x90, + /* 000001C3 nop */ 0x90, + /* 000001C4 nop */ 0x90, + /* 000001C5 nop */ 0x90, + /* 000001C6 nop */ 0x90, + /* 000001C7 nop */ 0x90, + /* 000001C8 nop */ 0x90, + /* 000001C9 nop */ 0x90, + /* 000001CA nop */ 0x90, + /* 000001CB nop */ 0x90, + /* 000001CC nop */ 0x90, + /* 000001CD nop */ 0x90, + /* 000001CE nop */ 0x90, + /* 000001CF nop */ 0x90, + /* 000001D0 nop */ 0x90, + /* 000001D1 nop */ 0x90, + /* 000001D2 nop */ 0x90, + /* 000001D3 nop */ 0x90, + /* 000001D4 nop */ 0x90, + /* 000001D5 nop */ 0x90, + /* 000001D6 nop */ 0x90, + /* 000001D7 nop */ 0x90, + /* 000001D8 nop */ 0x90, + /* 000001D9 nop */ 0x90, + /* 000001DA nop */ 0x90, + /* 000001DB nop */ 0x90, + /* 000001DC nop */ 0x90, + /* 000001DD nop */ 0x90, + /* 000001DE nop */ 0x90, + /* 000001DF nop */ 0x90, + /* 000001E0 nop */ 0x90, + /* 000001E1 nop */ 0x90, + /* 000001E2 nop */ 0x90, + /* 000001E3 nop */ 0x90, + /* 000001E4 nop */ 0x90, + /* 000001E5 nop */ 0x90, + /* 000001E6 nop */ 0x90, + /* 000001E7 nop */ 0x90, + /* 000001E8 nop */ 0x90, + /* 000001E9 nop */ 0x90, + /* 000001EA nop */ 0x90, + /* 000001EB nop */ 0x90, + /* 000001EC nop */ 0x90, + /* 000001ED nop */ 0x90, + /* 000001EE nop */ 0x90, + /* 000001EF nop */ 0x90, + /* 000001F0 nop */ 0x90, + /* 000001F1 nop */ 0x90, + /* 000001F2 nop */ 0x90, + /* 000001F3 nop */ 0x90, + /* 000001F4 nop */ 0x90, + /* 000001F5 nop */ 0x90, + /* 000001F6 nop */ 0x90, + /* 000001F7 nop */ 0x90, + /* 000001F8 nop */ 0x90, + /* 000001F9 nop */ 0x90, + /* 000001FA nop */ 0x90, + /* 000001FB nop */ 0x90, + /* 000001FC nop */ 0x90, + /* 000001FD nop */ 0x90, + /* 000001FE nop */ 0x90, + /* 000001FF nop */ 0x90, + /* 00000200 cmp ax,0x4f00 */ 0x3D,0x00, 0x4F, + /* 00000203 jz 0x237 */ 0x74,0x32, + /* 00000205 cmp ax,0x4f01 */ 0x3D,0x01, 0x4F, + /* 00000208 jz 0x257 */ 0x74,0x4D, + /* 0000020A cmp ax,0x4f02 */ 0x3D,0x02, 0x4F, + /* 0000020D jz word 0x2c8 */ 0x0F,0x84, 0xB7,0x00, + /* 00000211 cmp ax,0x4f03 */ 0x3D,0x03, 0x4F, + /* 00000214 jz word 0x325 */ 0x0F,0x84, 0x0D,0x01, + /* 00000218 cmp ax,0x4f10 */ 0x3D,0x10, 0x4F, + /* 0000021B jz word 0x337 */ 0x0F,0x84, 0x18,0x01, + /* 0000021F cmp ax,0x4f15 */ 0x3D,0x15, 0x4F, + /* 00000222 jz word 0x344 */ 0x0F,0x84, 0x1E,0x01, + /* 00000226 cmp ah,0x0 */ 0x80,0xFC, 0x00, + /* 00000229 jz word 0x363 */ 0x0F,0x84, 0x36,0x01, + /* 0000022D push si */ 0x56, + /* 0000022E mov si,0x3d7 */ 0xBE,0xD7, 0x03, + /* 00000231 call word 0x3ad */ 0xE8,0x79, 0x01, + /* 00000234 pop si */ 0x5E, + /* 00000235 jmp short 0x235 */ 0xEB,0xFE, + /* 00000237 push es */ 0x06, + /* 00000238 push di */ 0x57, + /* 00000239 push ds */ 0x1E, + /* 0000023A push si */ 0x56, + /* 0000023B push cx */ 0x51, + /* 0000023C push si */ 0x56, + /* 0000023D mov si,0x3eb */ 0xBE,0xEB, 0x03, + /* 00000240 call word 0x3ad */ 0xE8,0x6A, 0x01, + /* 00000243 pop si */ 0x5E, + /* 00000244 push cs */ 0x0E, + /* 00000245 pop ds */ 0x1F, + /* 00000246 mov si,0x0 */ 0xBE,0x00, 0x00, + /* 00000249 mov cx,0x100 */ 0xB9,0x00, 0x01, + /* 0000024C cld */ 0xFC, + /* 0000024D rep movsb */ 0xF3,0xA4, + /* 0000024F pop cx */ 0x59, + /* 00000250 pop si */ 0x5E, + /* 00000251 pop ds */ 0x1F, + /* 00000252 pop di */ 0x5F, + /* 00000253 pop es */ 0x07, + /* 00000254 jmp word 0x395 */ 0xE9,0x3E, 0x01, + /* 00000257 push es */ 0x06, + /* 00000258 push di */ 0x57, + /* 00000259 push ds */ 0x1E, + /* 0000025A push si */ 0x56, + /* 0000025B push cx */ 0x51, + /* 0000025C push si */ 0x56, + /* 0000025D mov si,0x3f6 */ 0xBE,0xF6, 0x03, + /* 00000260 call word 0x3ad */ 0xE8,0x4A, 0x01, + /* 00000263 pop si */ 0x5E, + /* 00000264 and cx,0xbfff */ 0x81,0xE1, 0xFF,0xBF, + /* 00000268 cmp cx,0x13f */ 0x81,0xF9, 0x3F,0x01, + /* 0000026C jz 0x284 */ 0x74,0x16, + /* 0000026E cmp cx,0x140 */ 0x81,0xF9, 0x40,0x01, + /* 00000272 jz 0x291 */ 0x74,0x1D, + /* 00000274 cmp cx,0x141 */ 0x81,0xF9, 0x41,0x01, + /* 00000278 jz 0x29e */ 0x74,0x24, + /* 0000027A push si */ 0x56, + /* 0000027B mov si,0x42c */ 0xBE,0x2C, 0x04, + /* 0000027E call word 0x3ad */ 0xE8,0x2C, 0x01, + /* 00000281 pop si */ 0x5E, + /* 00000282 jmp short 0x235 */ 0xEB,0xB1, + /* 00000284 push si */ 0x56, + /* 00000285 mov si,0x46b */ 0xBE,0x6B, 0x04, + /* 00000288 call word 0x3ad */ 0xE8,0x22, 0x01, + /* 0000028B pop si */ 0x5E, + /* 0000028C mov si,0x100 */ 0xBE,0x00, 0x01, + /* 0000028F jmp short 0x2b8 */ 0xEB,0x27, + /* 00000291 push si */ 0x56, + /* 00000292 mov si,0x47d */ 0xBE,0x7D, 0x04, + /* 00000295 call word 0x3ad */ 0xE8,0x15, 0x01, + /* 00000298 pop si */ 0x5E, + /* 00000299 mov si,0x132 */ 0xBE,0x32, 0x01, + /* 0000029C jmp short 0x2b8 */ 0xEB,0x1A, + /* 0000029E push si */ 0x56, + /* 0000029F mov si,0x48f */ 0xBE,0x8F, 0x04, + /* 000002A2 call word 0x3ad */ 0xE8,0x08, 0x01, + /* 000002A5 pop si */ 0x5E, + /* 000002A6 mov si,0x164 */ 0xBE,0x64, 0x01, + /* 000002A9 jmp short 0x2b8 */ 0xEB,0x0D, + /* 000002AB push si */ 0x56, + /* 000002AC mov si,0x4a2 */ 0xBE,0xA2, 0x04, + /* 000002AF call word 0x3ad */ 0xE8,0xFB, 0x00, + /* 000002B2 pop si */ 0x5E, + /* 000002B3 mov si,0x196 */ 0xBE,0x96, 0x01, + /* 000002B6 jmp short 0x2b8 */ 0xEB,0x00, + /* 000002B8 push cs */ 0x0E, + /* 000002B9 pop ds */ 0x1F, + /* 000002BA mov cx,0x32 */ 0xB9,0x32, 0x00, + /* 000002BD cld */ 0xFC, + /* 000002BE rep movsb */ 0xF3,0xA4, + /* 000002C0 pop cx */ 0x59, + /* 000002C1 pop si */ 0x5E, + /* 000002C2 pop ds */ 0x1F, + /* 000002C3 pop di */ 0x5F, + /* 000002C4 pop es */ 0x07, + /* 000002C5 jmp word 0x395 */ 0xE9,0xCD, 0x00, + /* 000002C8 push dx */ 0x52, + /* 000002C9 push ax */ 0x50, + /* 000002CA push si */ 0x56, + /* 000002CB mov si,0x410 */ 0xBE,0x10, 0x04, + /* 000002CE call word 0x3ad */ 0xE8,0xDC, 0x00, + /* 000002D1 pop si */ 0x5E, + /* 000002D2 and bx,0xbfff */ 0x81,0xE3, 0xFF,0xBF, + /* 000002D6 cmp bx,0x13f */ 0x81,0xFB, 0x3F,0x01, + /* 000002DA jz 0x2f3 */ 0x74,0x17, + /* 000002DC cmp bx,0x140 */ 0x81,0xFB, 0x40,0x01, + /* 000002E0 jz 0x2fd */ 0x74,0x1B, + /* 000002E2 cmp bx,0x141 */ 0x81,0xFB, 0x41,0x01, + /* 000002E6 jz 0x307 */ 0x74,0x1F, + /* 000002E8 push si */ 0x56, + /* 000002E9 mov si,0x42c */ 0xBE,0x2C, 0x04, + /* 000002EC call word 0x3ad */ 0xE8,0xBE, 0x00, + /* 000002EF pop si */ 0x5E, + /* 000002F0 jmp word 0x235 */ 0xE9,0x42, 0xFF, + /* 000002F3 push si */ 0x56, + /* 000002F4 mov si,0x46b */ 0xBE,0x6B, 0x04, + /* 000002F7 call word 0x3ad */ 0xE8,0xB3, 0x00, + /* 000002FA pop si */ 0x5E, + /* 000002FB jmp short 0x319 */ 0xEB,0x1C, + /* 000002FD push si */ 0x56, + /* 000002FE mov si,0x47d */ 0xBE,0x7D, 0x04, + /* 00000301 call word 0x3ad */ 0xE8,0xA9, 0x00, + /* 00000304 pop si */ 0x5E, + /* 00000305 jmp short 0x319 */ 0xEB,0x12, + /* 00000307 push si */ 0x56, + /* 00000308 mov si,0x48f */ 0xBE,0x8F, 0x04, + /* 0000030B call word 0x3ad */ 0xE8,0x9F, 0x00, + /* 0000030E pop si */ 0x5E, + /* 0000030F jmp short 0x319 */ 0xEB,0x08, + /* 00000311 push si */ 0x56, + /* 00000312 mov si,0x4a2 */ 0xBE,0xA2, 0x04, + /* 00000315 call word 0x3ad */ 0xE8,0x95, 0x00, + /* 00000318 pop si */ 0x5E, + /* 00000319 mov [0x4b0],bl */ 0x88,0x1E, 0xB0,0x04, + /* 0000031D mov [0x4b1],bh */ 0x88,0x3E, 0xB1,0x04, + /* 00000321 pop ax */ 0x58, + /* 00000322 pop dx */ 0x5A, + /* 00000323 jmp short 0x395 */ 0xEB,0x70, + /* 00000325 push si */ 0x56, + /* 00000326 mov si,0x405 */ 0xBE,0x05, 0x04, + /* 00000329 call word 0x3ad */ 0xE8,0x81, 0x00, + /* 0000032C pop si */ 0x5E, + /* 0000032D mov bl,[0x4b0] */ 0x8A,0x1E, 0xB0,0x04, + /* 00000331 mov bh,[0x4b1] */ 0x8A,0x3E, 0xB1,0x04, + /* 00000335 jmp short 0x395 */ 0xEB,0x5E, + /* 00000337 push si */ 0x56, + /* 00000338 mov si,0x43b */ 0xBE,0x3B, 0x04, + /* 0000033B call word 0x3ad */ 0xE8,0x6F, 0x00, + /* 0000033E pop si */ 0x5E, + /* 0000033F mov bx,0x80 */ 0xBB,0x80, 0x00, + /* 00000342 jmp short 0x395 */ 0xEB,0x51, + /* 00000344 push es */ 0x06, + /* 00000345 push di */ 0x57, + /* 00000346 push ds */ 0x1E, + /* 00000347 push si */ 0x56, + /* 00000348 push cx */ 0x51, + /* 00000349 push si */ 0x56, + /* 0000034A mov si,0x450 */ 0xBE,0x50, 0x04, + /* 0000034D call word 0x3ad */ 0xE8,0x5D, 0x00, + /* 00000350 pop si */ 0x5E, + /* 00000351 push cs */ 0x0E, + /* 00000352 pop ds */ 0x1F, + /* 00000353 mov si,0x4b2 */ 0xBE,0xB2, 0x04, + /* 00000356 mov cx,0x80 */ 0xB9,0x80, 0x00, + /* 00000359 cld */ 0xFC, + /* 0000035A rep movsb */ 0xF3,0xA4, + /* 0000035C pop cx */ 0x59, + /* 0000035D pop si */ 0x5E, + /* 0000035E pop ds */ 0x1F, + /* 0000035F pop di */ 0x5F, + /* 00000360 pop es */ 0x07, + /* 00000361 jmp short 0x395 */ 0xEB,0x32, + /* 00000363 push si */ 0x56, + /* 00000364 mov si,0x41b */ 0xBE,0x1B, 0x04, + /* 00000367 call word 0x3ad */ 0xE8,0x43, 0x00, + /* 0000036A pop si */ 0x5E, + /* 0000036B cmp al,0x3 */ 0x3C,0x03, + /* 0000036D jz 0x37e */ 0x74,0x0F, + /* 0000036F cmp al,0x12 */ 0x3C,0x12, + /* 00000371 jz 0x38a */ 0x74,0x17, + /* 00000373 push si */ 0x56, + /* 00000374 mov si,0x42c */ 0xBE,0x2C, 0x04, + /* 00000377 call word 0x3ad */ 0xE8,0x33, 0x00, + /* 0000037A pop si */ 0x5E, + /* 0000037B jmp word 0x235 */ 0xE9,0xB7, 0xFE, + /* 0000037E push si */ 0x56, + /* 0000037F mov si,0x45c */ 0xBE,0x5C, 0x04, + /* 00000382 call word 0x3ad */ 0xE8,0x28, 0x00, + /* 00000385 pop si */ 0x5E, + /* 00000386 mov al,0x0 */ 0xB0,0x00, + /* 00000388 jmp short 0x38c */ 0xEB,0x02, + /* 0000038A mov al,0x0 */ 0xB0,0x00, + /* 0000038C push si */ 0x56, + /* 0000038D mov si,0x3c2 */ 0xBE,0xC2, 0x03, + /* 00000390 call word 0x3ad */ 0xE8,0x1A, 0x00, + /* 00000393 pop si */ 0x5E, + /* 00000394 iretw */ 0xCF, + /* 00000395 push si */ 0x56, + /* 00000396 mov si,0x3c2 */ 0xBE,0xC2, 0x03, + /* 00000399 call word 0x3ad */ 0xE8,0x11, 0x00, + /* 0000039C pop si */ 0x5E, + /* 0000039D mov ax,0x4f */ 0xB8,0x4F, 0x00, + /* 000003A0 iretw */ 0xCF, + /* 000003A1 push si */ 0x56, + /* 000003A2 mov si,0x3c8 */ 0xBE,0xC8, 0x03, + /* 000003A5 call word 0x3ad */ 0xE8,0x05, 0x00, + /* 000003A8 pop si */ 0x5E, + /* 000003A9 mov ax,0x24f */ 0xB8,0x4F, 0x02, + /* 000003AC iretw */ 0xCF, + /* 000003AD pushaw */ 0x60, + /* 000003AE push ds */ 0x1E, + /* 000003AF push cs */ 0x0E, + /* 000003B0 pop ds */ 0x1F, + /* 000003B1 mov dx,0x220 */ 0xBA,0x20, 0x02, + /* 000003B4 mov ax,0x0 */ 0xB8,0x00, 0x00, + /* 000003B7 lodsb */ 0xAC, + /* 000003B8 cmp al,0x0 */ 0x3C,0x00, + /* 000003BA jz 0x3bf */ 0x74,0x03, + /* 000003BC out dx,al */ 0xEE, + /* 000003BD jmp short 0x3b7 */ 0xEB,0xF8, + /* 000003BF pop ds */ 0x1F, + /* 000003C0 popaw */ 0x61, + /* 000003C1 ret */ 0xC3, + /* 000003C2 jna 0x413 */ 0x76,0x4F, + /* 000003C4 imul cx,[di],byte +0xa */ 0x6B,0x0D, 0x0A, + /* 000003C7 add [bp+0x55],dh */ 0x00,0x76, 0x55, + /* 000003CA outsb */ 0x6E, + /* 000003CB jnc 0x442 */ 0x73,0x75, + /* 000003CD jo 0x43f */ 0x70,0x70, + /* 000003CF outsw */ 0x6F, + /* 000003D0 jc 0x446 */ 0x72,0x74, + /* 000003D2 fs or ax,0xa */ 0x65,0x64, 0x0D,0x0A, 0x00, + /* 000003D7 jna 0x42e */ 0x76,0x55, + /* 000003D9 outsb */ 0x6E, + /* 000003DA imul bp,[bp+0x6f],byte +0x77 */ 0x6B,0x6E, 0x6F,0x77, + /* 000003DE outsb */ 0x6E, + /* 000003DF and [bp+0x75],al */ 0x20,0x46, 0x75, + /* 000003E2 outsb */ 0x6E, + /* 000003E3 arpl [si+0x69],si */ 0x63,0x74, 0x69, + /* 000003E6 outsw */ 0x6F, + /* 000003E7 outsb */ 0x6E, + /* 000003E8 or ax,0xa */ 0x0D,0x0A, 0x00, + /* 000003EB jna 0x434 */ 0x76,0x47, + /* 000003ED gs jz 0x439 */ 0x65,0x74, 0x49, + /* 000003F0 outsb */ 0x6E, + /* 000003F1 outsd */ 0x66,0x6F, + /* 000003F3 or ax,0xa */ 0x0D,0x0A, 0x00, + /* 000003F6 jna 0x43f */ 0x76,0x47, + /* 000003F8 gs jz 0x448 */ 0x65,0x74, 0x4D, + /* 000003FB outsw */ 0x6F, + /* 000003FC gs dec cx */ 0x64,0x65, 0x49, + /* 000003FF outsb */ 0x6E, + /* 00000400 outsd */ 0x66,0x6F, + /* 00000402 or ax,0xa */ 0x0D,0x0A, 0x00, + /* 00000405 jna 0x44e */ 0x76,0x47, + /* 00000407 gs jz 0x457 */ 0x65,0x74, 0x4D, + /* 0000040A outsw */ 0x6F, + /* 0000040B gs or ax,0xa */ 0x64,0x65, 0x0D,0x0A, 0x00, + /* 00000410 jna 0x465 */ 0x76,0x53, + /* 00000412 gs jz 0x462 */ 0x65,0x74, 0x4D, + /* 00000415 outsw */ 0x6F, + /* 00000416 gs or ax,0xa */ 0x64,0x65, 0x0D,0x0A, 0x00, + /* 0000041B jna 0x470 */ 0x76,0x53, + /* 0000041D gs jz 0x46d */ 0x65,0x74, 0x4D, + /* 00000420 outsw */ 0x6F, + /* 00000421 gs dec sp */ 0x64,0x65, 0x4C, + /* 00000424 gs a32 popaw */ 0x65,0x67, 0x61, + /* 00000427 arpl [bx+di+0xd],di */ 0x63,0x79, 0x0D, + /* 0000042A or al,[bx+si] */ 0x0A,0x00, + /* 0000042C jna 0x483 */ 0x76,0x55, + /* 0000042E outsb */ 0x6E, + /* 0000042F imul bp,[bx+0x77],byte +0x6e */ 0x6B,0x6F, 0x77,0x6E, + /* 00000433 and [di+0x6f],cl */ 0x20,0x4D, 0x6F, + /* 00000436 gs or ax,0xa */ 0x64,0x65, 0x0D,0x0A, 0x00, + /* 0000043B jna 0x484 */ 0x76,0x47, + /* 0000043D gs jz 0x490 */ 0x65,0x74, 0x50, + /* 00000440 insw */ 0x6D, + /* 00000441 inc bx */ 0x43, + /* 00000442 popaw */ 0x61, + /* 00000443 jo 0x4a6 */ 0x70,0x61, + /* 00000445 bound bp,[bx+di+0x6c] */ 0x62,0x69, 0x6C, + /* 00000448 imul si,[si+0x69],word 0x7365 */ 0x69,0x74, 0x69,0x65, 0x73, + /* 0000044D or ax,0xa */ 0x0D,0x0A, 0x00, + /* 00000450 jna 0x4a4 */ 0x76,0x52, + /* 00000452 gs popaw */ 0x65,0x61, + /* 00000454 fs inc bp */ 0x64,0x45, + /* 00000456 imul sp,[fs:si+0xd],word 0xa */ 0x64,0x69, 0x64,0x0D, 0x0A, 0x00, + /* 0000045C jna 0x4aa */ 0x76,0x4C, + /* 0000045E gs a32 popaw */ 0x65,0x67, 0x61, + /* 00000461 arpl [bx+di+0x4d],di */ 0x63,0x79, 0x4D, + /* 00000464 outsw */ 0x6F, + /* 00000465 xor cx,[gs:di] */ 0x64,0x65, 0x33,0x0D, + /* 00000469 or al,[bx+si] */ 0x0A,0x00, + /* 0000046B insw */ 0x6D, + /* 0000046C outsw */ 0x6F, + /* 0000046D gs pop di */ 0x64,0x65, 0x5F, + /* 00000470 ss xor al,0x30 */ 0x36,0x34, 0x30, + /* 00000473 js 0x4a9 */ 0x78,0x34, + /* 00000475 cmp [bx+si],dh */ 0x38,0x30, + /* 00000477 js 0x4ac */ 0x78,0x33, + /* 00000479 xor cl,[di] */ 0x32,0x0D, + /* 0000047B or al,[bx+si] */ 0x0A,0x00, + /* 0000047D insw */ 0x6D, + /* 0000047E outsw */ 0x6F, + /* 0000047F gs pop di */ 0x64,0x65, 0x5F, + /* 00000482 cmp [bx+si],dh */ 0x38,0x30, + /* 00000484 xor [bx+si+0x36],bh */ 0x30,0x78, 0x36, + /* 00000487 xor [bx+si],dh */ 0x30,0x30, + /* 00000489 js 0x4be */ 0x78,0x33, + /* 0000048B xor cl,[di] */ 0x32,0x0D, + /* 0000048D or al,[bx+si] */ 0x0A,0x00, + /* 0000048F insw */ 0x6D, + /* 00000490 outsw */ 0x6F, + /* 00000491 gs pop di */ 0x64,0x65, 0x5F, + /* 00000494 xor [bx+si],si */ 0x31,0x30, + /* 00000496 xor dh,[si] */ 0x32,0x34, + /* 00000498 js 0x4d1 */ 0x78,0x37, + /* 0000049A cmp [ss:bx+si+0x33],bh */ 0x36,0x38, 0x78,0x33, + /* 0000049E xor cl,[di] */ 0x32,0x0D, + /* 000004A0 or al,[bx+si] */ 0x0A,0x00, + /* 000004A2 insw */ 0x6D, + /* 000004A3 outsw */ 0x6F, + /* 000004A4 gs pop di */ 0x64,0x65, 0x5F, + /* 000004A7 jnz 0x517 */ 0x75,0x6E, + /* 000004A9 jnz 0x51e */ 0x75,0x73, + /* 000004AB fs or ax,0xa */ 0x65,0x64, 0x0D,0x0A, 0x00, + /* 000004B0 add [bx+si],al */ 0x00,0x00, + /* 000004B2 add [bx+si],al */ 0x00,0x00, + /* 000004B4 add [bx+si],al */ 0x00,0x00, + /* 000004B6 add [bx+si],al */ 0x00,0x00, + /* 000004B8 add [bx+si],al */ 0x00,0x00, + /* 000004BA add [bx+si],al */ 0x00,0x00, + /* 000004BC add [bx+si],al */ 0x00,0x00, + /* 000004BE add [bx+si],al */ 0x00,0x00, + /* 000004C0 add [bx+si],al */ 0x00,0x00, + /* 000004C2 add [bx+si],al */ 0x00,0x00, + /* 000004C4 add [bx+si],al */ 0x00,0x00, + /* 000004C6 add [bx+si],al */ 0x00,0x00, + /* 000004C8 add [bx+si],al */ 0x00,0x00, + /* 000004CA add [bx+si],al */ 0x00,0x00, + /* 000004CC add [bx+si],al */ 0x00,0x00, + /* 000004CE add [bx+si],al */ 0x00,0x00, + /* 000004D0 add [bx+si],al */ 0x00,0x00, + /* 000004D2 add [bx+si],al */ 0x00,0x00, + /* 000004D4 add [bx+si],al */ 0x00,0x00, + /* 000004D6 add [bx+si],al */ 0x00,0x00, + /* 000004D8 add [bx+si],al */ 0x00,0x00, + /* 000004DA add [bx+si],al */ 0x00,0x00, + /* 000004DC add [bx+si],al */ 0x00,0x00, + /* 000004DE add [bx+si],al */ 0x00,0x00, + /* 000004E0 add [bx+si],al */ 0x00,0x00, + /* 000004E2 add [bx+si],al */ 0x00,0x00, + /* 000004E4 add [bx+si],al */ 0x00,0x00, + /* 000004E6 add [bx+si],al */ 0x00,0x00, + /* 000004E8 add [bx+si],al */ 0x00,0x00, + /* 000004EA add [bx+si],al */ 0x00,0x00, + /* 000004EC add [bx+si],al */ 0x00,0x00, + /* 000004EE add [bx+si],al */ 0x00,0x00, + /* 000004F0 add [bx+si],al */ 0x00,0x00, + /* 000004F2 add [bx+si],al */ 0x00,0x00, + /* 000004F4 add [bx+si],al */ 0x00,0x00, + /* 000004F6 add [bx+si],al */ 0x00,0x00, + /* 000004F8 add [bx+si],al */ 0x00,0x00, + /* 000004FA add [bx+si],al */ 0x00,0x00, + /* 000004FC add [bx+si],al */ 0x00,0x00, + /* 000004FE add [bx+si],al */ 0x00,0x00, + /* 00000500 add [bx+si],al */ 0x00,0x00, + /* 00000502 add [bx+si],al */ 0x00,0x00, + /* 00000504 add [bx+si],al */ 0x00,0x00, + /* 00000506 add [bx+si],al */ 0x00,0x00, + /* 00000508 add [bx+si],al */ 0x00,0x00, + /* 0000050A add [bx+si],al */ 0x00,0x00, + /* 0000050C add [bx+si],al */ 0x00,0x00, + /* 0000050E add [bx+si],al */ 0x00,0x00, + /* 00000510 add [bx+si],al */ 0x00,0x00, + /* 00000512 add [bx+si],al */ 0x00,0x00, + /* 00000514 add [bx+si],al */ 0x00,0x00, + /* 00000516 add [bx+si],al */ 0x00,0x00, + /* 00000518 add [bx+si],al */ 0x00,0x00, + /* 0000051A add [bx+si],al */ 0x00,0x00, + /* 0000051C add [bx+si],al */ 0x00,0x00, + /* 0000051E add [bx+si],al */ 0x00,0x00, + /* 00000520 add [bx+si],al */ 0x00,0x00, + /* 00000522 add [bx+si],al */ 0x00,0x00, + /* 00000524 add [bx+si],al */ 0x00,0x00, + /* 00000526 add [bx+si],al */ 0x00,0x00, + /* 00000528 add [bx+si],al */ 0x00,0x00, + /* 0000052A add [bx+si],al */ 0x00,0x00, + /* 0000052C add [bx+si],al */ 0x00,0x00, + /* 0000052E add [bx+si],al */ 0x00,0x00, + /* 00000530 add [bx+si],al */ 0x00,0x00, + /* 00000532 add [bx+si],al */ 0x00,0x00, }; #endif diff --git a/OvmfPkg/Bhyve/PlatformPei/AmdSev.c b/OvmfPkg/Bhyve/PlatformPei/AmdSev.c index e3ed78581c..a85f4b760a 100644 --- a/OvmfPkg/Bhyve/PlatformPei/AmdSev.c +++ b/OvmfPkg/Bhyve/PlatformPei/AmdSev.c @@ -30,8 +30,8 @@ AmdSevInitialize ( VOID ) { - UINT64 EncryptionMask; - RETURN_STATUS PcdStatus; + UINT64 EncryptionMask; + RETURN_STATUS PcdStatus; // // Check if SEV is enabled @@ -44,7 +44,7 @@ AmdSevInitialize ( // Set Memory Encryption Mask PCD // EncryptionMask = MemEncryptSevGetEncryptionMask (); - PcdStatus = PcdSet64S (PcdPteMemoryEncryptionAddressOrMask, EncryptionMask); + PcdStatus = PcdSet64S (PcdPteMemoryEncryptionAddressOrMask, EncryptionMask); ASSERT_RETURN_ERROR (PcdStatus); DEBUG ((DEBUG_INFO, "SEV is enabled (mask 0x%lx)\n", EncryptionMask)); @@ -67,9 +67,9 @@ AmdSevInitialize ( // hypervisor. // if (FeaturePcdGet (PcdSmmSmramRequire) && (mBootMode != BOOT_ON_S3_RESUME)) { - RETURN_STATUS LocateMapStatus; - UINTN MapPagesBase; - UINTN MapPagesCount; + RETURN_STATUS LocateMapStatus; + UINTN MapPagesBase; + UINTN MapPagesCount; LocateMapStatus = MemEncryptSevLocateInitialSmramSaveStateMapPages ( &MapPagesBase, diff --git a/OvmfPkg/Bhyve/PlatformPei/ClearCache.c b/OvmfPkg/Bhyve/PlatformPei/ClearCache.c index 5c538c59e0..9f23f9a428 100644 --- a/OvmfPkg/Bhyve/PlatformPei/ClearCache.c +++ b/OvmfPkg/Bhyve/PlatformPei/ClearCache.c @@ -29,7 +29,7 @@ STATIC VOID EFIAPI ClearCache ( - IN OUT VOID *WorkSpace + IN OUT VOID *WorkSpace ) { WriteBackInvalidateDataCache (); @@ -56,8 +56,8 @@ ClearCacheOnMpServicesAvailable ( IN VOID *Ppi ) { - EFI_PEI_MP_SERVICES_PPI *MpServices; - EFI_STATUS Status; + EFI_PEI_MP_SERVICES_PPI *MpServices; + EFI_STATUS Status; DEBUG ((DEBUG_INFO, "%a: %a\n", gEfiCallerBaseName, __FUNCTION__)); @@ -65,15 +65,15 @@ ClearCacheOnMpServicesAvailable ( // Clear cache on all the APs in parallel. // MpServices = Ppi; - Status = MpServices->StartupAllAPs ( - (CONST EFI_PEI_SERVICES **)PeiServices, - MpServices, - ClearCache, // Procedure - FALSE, // SingleThread - 0, // TimeoutInMicroSeconds: inf. - NULL // ProcedureArgument - ); - if (EFI_ERROR (Status) && Status != EFI_NOT_STARTED) { + Status = MpServices->StartupAllAPs ( + (CONST EFI_PEI_SERVICES **)PeiServices, + MpServices, + ClearCache, // Procedure + FALSE, // SingleThread + 0, // TimeoutInMicroSeconds: inf. + NULL // ProcedureArgument + ); + if (EFI_ERROR (Status) && (Status != EFI_NOT_STARTED)) { DEBUG ((DEBUG_ERROR, "%a: StartupAllAps(): %r\n", __FUNCTION__, Status)); return Status; } @@ -89,7 +89,7 @@ ClearCacheOnMpServicesAvailable ( // Notification object for registering the callback, for when // EFI_PEI_MP_SERVICES_PPI becomes available. // -STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mMpServicesNotify = { +STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mMpServicesNotify = { EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | // Flags EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, &gEfiPeiMpServicesPpiGuid, // Guid @@ -101,11 +101,15 @@ InstallClearCacheCallback ( VOID ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = PeiServicesNotifyPpi (&mMpServicesNotify); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: failed to set up MP Services callback: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: failed to set up MP Services callback: %r\n", + __FUNCTION__, + Status + )); } } diff --git a/OvmfPkg/Bhyve/PlatformPei/Cmos.c b/OvmfPkg/Bhyve/PlatformPei/Cmos.c index 9b34e10b17..a01b3866be 100644 --- a/OvmfPkg/Bhyve/PlatformPei/Cmos.c +++ b/OvmfPkg/Bhyve/PlatformPei/Cmos.c @@ -6,7 +6,6 @@ **/ - #include "Cmos.h" #include "Library/IoLib.h" @@ -24,14 +23,13 @@ UINT8 EFIAPI CmosRead8 ( - IN UINTN Index + IN UINTN Index ) { - IoWrite8 (0x70, (UINT8) Index); + IoWrite8 (0x70, (UINT8)Index); return IoRead8 (0x71); } - /** Writes 8-bits of CMOS data. @@ -47,12 +45,11 @@ CmosRead8 ( UINT8 EFIAPI CmosWrite8 ( - IN UINTN Index, - IN UINT8 Value + IN UINTN Index, + IN UINT8 Value ) { - IoWrite8 (0x70, (UINT8) Index); + IoWrite8 (0x70, (UINT8)Index); IoWrite8 (0x71, Value); return Value; } - diff --git a/OvmfPkg/Bhyve/PlatformPei/Cmos.h b/OvmfPkg/Bhyve/PlatformPei/Cmos.h index ef7901fbea..e0ba81d4fa 100644 --- a/OvmfPkg/Bhyve/PlatformPei/Cmos.h +++ b/OvmfPkg/Bhyve/PlatformPei/Cmos.h @@ -23,7 +23,7 @@ UINT8 EFIAPI CmosRead8 ( - IN UINTN Index + IN UINTN Index ); /** @@ -41,10 +41,8 @@ CmosRead8 ( UINT8 EFIAPI CmosWrite8 ( - IN UINTN Index, - IN UINT8 Value + IN UINTN Index, + IN UINT8 Value ); - #endif /* _CMOS_H_ */ - diff --git a/OvmfPkg/Bhyve/PlatformPei/Fv.c b/OvmfPkg/Bhyve/PlatformPei/Fv.c index 94b7e21415..575600aa70 100644 --- a/OvmfPkg/Bhyve/PlatformPei/Fv.c +++ b/OvmfPkg/Bhyve/PlatformPei/Fv.c @@ -13,7 +13,6 @@ #include #include - /** Publish PEI & DXE (Decompressed) Memory based FVs to let PEI and DXE know about them. @@ -26,7 +25,7 @@ PeiFvInitialization ( VOID ) { - BOOLEAN SecureS3Needed; + BOOLEAN SecureS3Needed; DEBUG ((DEBUG_INFO, "Platform PEI Firmware Volume Initialization\n")); @@ -67,7 +66,7 @@ PeiFvInitialization ( // of DXEFV, so let's keep away the OS from there too. // if (SecureS3Needed) { - UINT32 DxeMemFvEnd; + UINT32 DxeMemFvEnd; DxeMemFvEnd = PcdGet32 (PcdOvmfDxeMemFvBase) + PcdGet32 (PcdOvmfDxeMemFvSize); @@ -83,7 +82,7 @@ PeiFvInitialization ( // PeiServicesInstallFvInfoPpi ( NULL, - (VOID *)(UINTN) PcdGet32 (PcdOvmfDxeMemFvBase), + (VOID *)(UINTN)PcdGet32 (PcdOvmfDxeMemFvBase), PcdGet32 (PcdOvmfDxeMemFvSize), NULL, NULL @@ -91,4 +90,3 @@ PeiFvInitialization ( return EFI_SUCCESS; } - diff --git a/OvmfPkg/Bhyve/PlatformPei/MemDetect.c b/OvmfPkg/Bhyve/PlatformPei/MemDetect.c index 1b556be69c..1949e586a0 100644 --- a/OvmfPkg/Bhyve/PlatformPei/MemDetect.c +++ b/OvmfPkg/Bhyve/PlatformPei/MemDetect.c @@ -36,22 +36,22 @@ Module Name: #include "Platform.h" #include "Cmos.h" -UINT8 mPhysMemAddressWidth; +UINT8 mPhysMemAddressWidth; -STATIC UINT32 mS3AcpiReservedMemoryBase; -STATIC UINT32 mS3AcpiReservedMemorySize; +STATIC UINT32 mS3AcpiReservedMemoryBase; +STATIC UINT32 mS3AcpiReservedMemorySize; -STATIC UINT16 mQ35TsegMbytes; +STATIC UINT16 mQ35TsegMbytes; -BOOLEAN mQ35SmramAtDefaultSmbase = FALSE; +BOOLEAN mQ35SmramAtDefaultSmbase = FALSE; VOID Q35TsegMbytesInitialization ( VOID ) { - UINT16 ExtendedTsegMbytes; - RETURN_STATUS PcdStatus; + UINT16 ExtendedTsegMbytes; + RETURN_STATUS PcdStatus; if (mHostBridgeDevId != INTEL_Q35_MCH_DEVICE_ID) { DEBUG (( @@ -100,14 +100,13 @@ Q35TsegMbytesInitialization ( mQ35TsegMbytes = ExtendedTsegMbytes; } - UINT32 GetSystemMemorySizeBelow4gb ( VOID ) { - UINT8 Cmos0x34; - UINT8 Cmos0x35; + UINT8 Cmos0x34; + UINT8 Cmos0x35; // // CMOS 0x34/0x35 specifies the system memory above 16 MB. @@ -118,20 +117,19 @@ GetSystemMemorySizeBelow4gb ( // into the calculation to get the total memory size. // - Cmos0x34 = (UINT8) CmosRead8 (0x34); - Cmos0x35 = (UINT8) CmosRead8 (0x35); + Cmos0x34 = (UINT8)CmosRead8 (0x34); + Cmos0x35 = (UINT8)CmosRead8 (0x35); - return (UINT32) (((UINTN)((Cmos0x35 << 8) + Cmos0x34) << 16) + SIZE_16MB); + return (UINT32)(((UINTN)((Cmos0x35 << 8) + Cmos0x34) << 16) + SIZE_16MB); } - STATIC UINT64 GetSystemMemorySizeAbove4gb ( ) { - UINT32 Size; - UINTN CmosIndex; + UINT32 Size; + UINTN CmosIndex; // // CMOS 0x5b-0x5d specifies the system memory above 4GB MB. @@ -143,13 +141,12 @@ GetSystemMemorySizeAbove4gb ( Size = 0; for (CmosIndex = 0x5d; CmosIndex >= 0x5b; CmosIndex--) { - Size = (UINT32) (Size << 8) + (UINT32) CmosRead8 (CmosIndex); + Size = (UINT32)(Size << 8) + (UINT32)CmosRead8 (CmosIndex); } return LShiftU64 (Size, 16); } - /** Return the highest address that DXE could possibly use, plus one. **/ @@ -159,9 +156,9 @@ GetFirstNonAddress ( VOID ) { - UINT64 FirstNonAddress; - UINT64 Pci64Base, Pci64Size; - RETURN_STATUS PcdStatus; + UINT64 FirstNonAddress; + UINT64 Pci64Base, Pci64Size; + RETURN_STATUS PcdStatus; FirstNonAddress = BASE_4GB + GetSystemMemorySizeAbove4gb (); @@ -170,11 +167,12 @@ GetFirstNonAddress ( // resources to 32-bit anyway. See DegradeResource() in // "PciResourceSupport.c". // -#ifdef MDE_CPU_IA32 + #ifdef MDE_CPU_IA32 if (!FeaturePcdGet (PcdDxeIplSwitchToLongMode)) { return FirstNonAddress; } -#endif + + #endif // // Otherwise, in order to calculate the highest address plus one, we must @@ -184,8 +182,11 @@ GetFirstNonAddress ( if (Pci64Size == 0) { if (mBootMode != BOOT_ON_S3_RESUME) { - DEBUG ((DEBUG_INFO, "%a: disabling 64-bit PCI host aperture\n", - __FUNCTION__)); + DEBUG (( + DEBUG_INFO, + "%a: disabling 64-bit PCI host aperture\n", + __FUNCTION__ + )); PcdStatus = PcdSet64S (PcdPciMmio64Size, 0); ASSERT_RETURN_ERROR (PcdStatus); } @@ -224,8 +225,13 @@ GetFirstNonAddress ( PcdStatus = PcdSet64S (PcdPciMmio64Size, Pci64Size); ASSERT_RETURN_ERROR (PcdStatus); - DEBUG ((DEBUG_INFO, "%a: Pci64Base=0x%Lx Pci64Size=0x%Lx\n", - __FUNCTION__, Pci64Base, Pci64Size)); + DEBUG (( + DEBUG_INFO, + "%a: Pci64Base=0x%Lx Pci64Size=0x%Lx\n", + __FUNCTION__, + Pci64Base, + Pci64Size + )); } // @@ -235,7 +241,6 @@ GetFirstNonAddress ( return FirstNonAddress; } - /** Initialize the mPhysMemAddressWidth variable, based on guest RAM size. **/ @@ -244,7 +249,7 @@ AddressWidthInitialization ( VOID ) { - UINT64 FirstNonAddress; + UINT64 FirstNonAddress; // // As guest-physical memory size grows, the permanent PEI RAM requirements @@ -272,10 +277,10 @@ AddressWidthInitialization ( if (mPhysMemAddressWidth <= 36) { mPhysMemAddressWidth = 36; } + ASSERT (mPhysMemAddressWidth <= 48); } - /** Calculate the cap for the permanent PEI memory. **/ @@ -285,21 +290,22 @@ GetPeiMemoryCap ( VOID ) { - BOOLEAN Page1GSupport; - UINT32 RegEax; - UINT32 RegEdx; - UINT32 Pml4Entries; - UINT32 PdpEntries; - UINTN TotalPages; + BOOLEAN Page1GSupport; + UINT32 RegEax; + UINT32 RegEdx; + UINT32 Pml4Entries; + UINT32 PdpEntries; + UINTN TotalPages; // // If DXE is 32-bit, then just return the traditional 64 MB cap. // -#ifdef MDE_CPU_IA32 + #ifdef MDE_CPU_IA32 if (!FeaturePcdGet (PcdDxeIplSwitchToLongMode)) { return SIZE_64MB; } -#endif + + #endif // // Dependent on physical address width, PEI memory allocations can be @@ -320,7 +326,7 @@ GetPeiMemoryCap ( if (mPhysMemAddressWidth <= 39) { Pml4Entries = 1; - PdpEntries = 1 << (mPhysMemAddressWidth - 30); + PdpEntries = 1 << (mPhysMemAddressWidth - 30); ASSERT (PdpEntries <= 0x200); } else { Pml4Entries = 1 << (mPhysMemAddressWidth - 39); @@ -329,7 +335,7 @@ GetPeiMemoryCap ( } TotalPages = Page1GSupport ? Pml4Entries + 1 : - (PdpEntries + 1) * Pml4Entries + 1; + (PdpEntries + 1) * Pml4Entries + 1; ASSERT (TotalPages <= 0x40201); // @@ -340,7 +346,6 @@ GetPeiMemoryCap ( return (UINT32)(EFI_PAGES_TO_SIZE (TotalPages) + SIZE_64MB); } - /** Publish PEI core memory @@ -352,11 +357,11 @@ PublishPeiMemory ( VOID ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS MemoryBase; - UINT64 MemorySize; - UINT32 LowerMemorySize; - UINT32 PeiMemoryCap; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS MemoryBase; + UINT64 MemorySize; + UINT32 LowerMemorySize; + UINT32 PeiMemoryCap; LowerMemorySize = GetSystemMemorySizeBelow4gb (); if (FeaturePcdGet (PcdSmmSmramRequire)) { @@ -373,10 +378,10 @@ PublishPeiMemory ( // if (mS3Supported) { mS3AcpiReservedMemorySize = SIZE_512KB + - mMaxCpuCount * - PcdGet32 (PcdCpuApStackSize); + mMaxCpuCount * + PcdGet32 (PcdCpuApStackSize); mS3AcpiReservedMemoryBase = LowerMemorySize - mS3AcpiReservedMemorySize; - LowerMemorySize = mS3AcpiReservedMemoryBase; + LowerMemorySize = mS3AcpiReservedMemoryBase; } if (mBootMode == BOOT_ON_S3_RESUME) { @@ -384,8 +389,13 @@ PublishPeiMemory ( MemorySize = mS3AcpiReservedMemorySize; } else { PeiMemoryCap = GetPeiMemoryCap (); - DEBUG ((DEBUG_INFO, "%a: mPhysMemAddressWidth=%d PeiMemoryCap=%u KB\n", - __FUNCTION__, mPhysMemAddressWidth, PeiMemoryCap >> 10)); + DEBUG (( + DEBUG_INFO, + "%a: mPhysMemAddressWidth=%d PeiMemoryCap=%u KB\n", + __FUNCTION__, + mPhysMemAddressWidth, + PeiMemoryCap >> 10 + )); // // Determine the range of memory to use during PEI @@ -398,8 +408,8 @@ PublishPeiMemory ( // shouldn't overlap with that HOB. // MemoryBase = mS3Supported && FeaturePcdGet (PcdSmmSmramRequire) ? - PcdGet32 (PcdOvmfDecompressionScratchEnd) : - PcdGet32 (PcdOvmfDxeMemFvBase) + PcdGet32 (PcdOvmfDxeMemFvSize); + PcdGet32 (PcdOvmfDecompressionScratchEnd) : + PcdGet32 (PcdOvmfDxeMemFvBase) + PcdGet32 (PcdOvmfDxeMemFvSize); MemorySize = LowerMemorySize - MemoryBase; if (MemorySize > PeiMemoryCap) { MemoryBase = LowerMemorySize - PeiMemoryCap; @@ -410,13 +420,12 @@ PublishPeiMemory ( // // Publish this memory to the PEI Core // - Status = PublishSystemMemory(MemoryBase, MemorySize); + Status = PublishSystemMemory (MemoryBase, MemorySize); ASSERT_EFI_ERROR (Status); return Status; } - /** Peform Memory Detection for QEMU / KVM @@ -427,10 +436,10 @@ QemuInitializeRam ( VOID ) { - UINT64 LowerMemorySize; - UINT64 UpperMemorySize; - MTRR_SETTINGS MtrrSettings; - EFI_STATUS Status; + UINT64 LowerMemorySize; + UINT64 UpperMemorySize; + MTRR_SETTINGS MtrrSettings; + EFI_STATUS Status; DEBUG ((DEBUG_INFO, "%a called\n", __FUNCTION__)); @@ -469,12 +478,15 @@ QemuInitializeRam ( AddMemoryRangeHob (0, BASE_512KB + BASE_128KB); if (FeaturePcdGet (PcdSmmSmramRequire)) { - UINT32 TsegSize; + UINT32 TsegSize; TsegSize = mQ35TsegMbytes * SIZE_1MB; AddMemoryRangeHob (BASE_1MB, LowerMemorySize - TsegSize); - AddReservedMemoryBaseSizeHob (LowerMemorySize - TsegSize, TsegSize, - TRUE); + AddReservedMemoryBaseSizeHob ( + LowerMemorySize - TsegSize, + TsegSize, + TRUE + ); } else { AddMemoryRangeHob (BASE_1MB, LowerMemorySize); } @@ -516,16 +528,22 @@ QemuInitializeRam ( // // Set memory range from 640KB to 1MB to uncacheable // - Status = MtrrSetMemoryAttribute (BASE_512KB + BASE_128KB, - BASE_1MB - (BASE_512KB + BASE_128KB), CacheUncacheable); + Status = MtrrSetMemoryAttribute ( + BASE_512KB + BASE_128KB, + BASE_1MB - (BASE_512KB + BASE_128KB), + CacheUncacheable + ); ASSERT_EFI_ERROR (Status); // // Set memory range from the "top of lower RAM" (RAM below 4GB) to 4GB as // uncacheable // - Status = MtrrSetMemoryAttribute (LowerMemorySize, - SIZE_4GB - LowerMemorySize, CacheUncacheable); + Status = MtrrSetMemoryAttribute ( + LowerMemorySize, + SIZE_4GB - LowerMemorySize, + CacheUncacheable + ); ASSERT_EFI_ERROR (Status); } } @@ -541,7 +559,7 @@ InitializeRamRegions ( { QemuInitializeRam (); - if (mS3Supported && mBootMode != BOOT_ON_S3_RESUME) { + if (mS3Supported && (mBootMode != BOOT_ON_S3_RESUME)) { // // This is the memory range that will be used for PEI on S3 resume // @@ -571,7 +589,7 @@ InitializeRamRegions ( EfiACPIMemoryNVS ); -#ifdef MDE_CPU_X64 + #ifdef MDE_CPU_X64 // // Reserve the initial page tables built by the reset vector code. // @@ -579,11 +597,11 @@ InitializeRamRegions ( // resume, it must be reserved as ACPI NVS. // BuildMemoryAllocationHob ( - (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdOvmfSecPageTablesBase), - (UINT64)(UINTN) PcdGet32 (PcdOvmfSecPageTablesSize), + (EFI_PHYSICAL_ADDRESS)(UINTN)PcdGet32 (PcdOvmfSecPageTablesBase), + (UINT64)(UINTN)PcdGet32 (PcdOvmfSecPageTablesSize), EfiACPIMemoryNVS ); -#endif + #endif } if (mBootMode != BOOT_ON_S3_RESUME) { @@ -599,18 +617,18 @@ InitializeRamRegions ( // such that they would overlap the LockBox storage. // ZeroMem ( - (VOID*)(UINTN) PcdGet32 (PcdOvmfLockBoxStorageBase), - (UINTN) PcdGet32 (PcdOvmfLockBoxStorageSize) + (VOID *)(UINTN)PcdGet32 (PcdOvmfLockBoxStorageBase), + (UINTN)PcdGet32 (PcdOvmfLockBoxStorageSize) ); BuildMemoryAllocationHob ( - (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdOvmfLockBoxStorageBase), - (UINT64)(UINTN) PcdGet32 (PcdOvmfLockBoxStorageSize), + (EFI_PHYSICAL_ADDRESS)(UINTN)PcdGet32 (PcdOvmfLockBoxStorageBase), + (UINT64)(UINTN)PcdGet32 (PcdOvmfLockBoxStorageSize), mS3Supported ? EfiACPIMemoryNVS : EfiBootServicesData ); } if (FeaturePcdGet (PcdSmmSmramRequire)) { - UINT32 TsegSize; + UINT32 TsegSize; // // Make sure the TSEG area that we reported as a reserved memory resource @@ -618,7 +636,7 @@ InitializeRamRegions ( // TsegSize = mQ35TsegMbytes * SIZE_1MB; BuildMemoryAllocationHob ( - GetSystemMemorySizeBelow4gb() - TsegSize, + GetSystemMemorySizeBelow4gb () - TsegSize, TsegSize, EfiReservedMemoryType ); diff --git a/OvmfPkg/Bhyve/PlatformPei/Platform.c b/OvmfPkg/Bhyve/PlatformPei/Platform.c index c23b906733..eba7c60fce 100644 --- a/OvmfPkg/Bhyve/PlatformPei/Platform.c +++ b/OvmfPkg/Bhyve/PlatformPei/Platform.c @@ -36,7 +36,7 @@ #include "Platform.h" #include "Cmos.h" -EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = { +EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = { { EfiACPIMemoryNVS, 0x004 }, { EfiACPIReclaimMemory, 0x008 }, { EfiReservedMemoryType, 0x004 }, @@ -47,8 +47,7 @@ EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = { { EfiMaxMemoryType, 0x000 } }; - -EFI_PEI_PPI_DESCRIPTOR mPpiBootMode[] = { +EFI_PEI_PPI_DESCRIPTOR mPpiBootMode[] = { { EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, &gEfiPeiMasterBootModePpiGuid, @@ -56,27 +55,26 @@ EFI_PEI_PPI_DESCRIPTOR mPpiBootMode[] = { } }; +UINT16 mHostBridgeDevId; -UINT16 mHostBridgeDevId; - -EFI_BOOT_MODE mBootMode = BOOT_WITH_FULL_CONFIGURATION; +EFI_BOOT_MODE mBootMode = BOOT_WITH_FULL_CONFIGURATION; -BOOLEAN mS3Supported = FALSE; +BOOLEAN mS3Supported = FALSE; -UINT32 mMaxCpuCount; +UINT32 mMaxCpuCount; VOID AddIoMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize ) { BuildResourceDescriptorHob ( EFI_RESOURCE_MEMORY_MAPPED_IO, - EFI_RESOURCE_ATTRIBUTE_PRESENT | - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | - EFI_RESOURCE_ATTRIBUTE_TESTED, + EFI_RESOURCE_ATTRIBUTE_PRESENT | + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | + EFI_RESOURCE_ATTRIBUTE_TESTED, MemoryBase, MemorySize ); @@ -84,23 +82,23 @@ AddIoMemoryBaseSizeHob ( VOID AddReservedMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize, - BOOLEAN Cacheable + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize, + BOOLEAN Cacheable ) { BuildResourceDescriptorHob ( EFI_RESOURCE_MEMORY_RESERVED, - EFI_RESOURCE_ATTRIBUTE_PRESENT | - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | - (Cacheable ? - EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE : - 0 - ) | - EFI_RESOURCE_ATTRIBUTE_TESTED, + EFI_RESOURCE_ATTRIBUTE_PRESENT | + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | + (Cacheable ? + EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE : + 0 + ) | + EFI_RESOURCE_ATTRIBUTE_TESTED, MemoryBase, MemorySize ); @@ -108,53 +106,50 @@ AddReservedMemoryBaseSizeHob ( VOID AddIoMemoryRangeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - EFI_PHYSICAL_ADDRESS MemoryLimit + EFI_PHYSICAL_ADDRESS MemoryBase, + EFI_PHYSICAL_ADDRESS MemoryLimit ) { AddIoMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase)); } - VOID AddMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize ) { BuildResourceDescriptorHob ( EFI_RESOURCE_SYSTEM_MEMORY, - EFI_RESOURCE_ATTRIBUTE_PRESENT | - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | - EFI_RESOURCE_ATTRIBUTE_TESTED, + EFI_RESOURCE_ATTRIBUTE_PRESENT | + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | + EFI_RESOURCE_ATTRIBUTE_TESTED, MemoryBase, MemorySize ); } - VOID AddMemoryRangeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - EFI_PHYSICAL_ADDRESS MemoryLimit + EFI_PHYSICAL_ADDRESS MemoryBase, + EFI_PHYSICAL_ADDRESS MemoryLimit ) { AddMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase)); } - VOID MemMapInitialization ( VOID ) { - UINT64 PciIoBase; - UINT64 PciIoSize; - RETURN_STATUS PcdStatus; + UINT64 PciIoBase; + UINT64 PciIoSize; + RETURN_STATUS PcdStatus; PciIoBase = 0xC000; PciIoSize = 0x4000; @@ -165,7 +160,7 @@ MemMapInitialization ( BuildGuidDataHob ( &gEfiMemoryTypeInformationGuid, mDefaultMemoryTypeInformation, - sizeof(mDefaultMemoryTypeInformation) + sizeof (mDefaultMemoryTypeInformation) ); // @@ -179,7 +174,7 @@ MemMapInitialization ( UINT32 PciBase; UINT32 PciSize; - TopOfLowRam = GetSystemMemorySizeBelow4gb (); + TopOfLowRam = GetSystemMemorySizeBelow4gb (); PciExBarBase = 0; if (mHostBridgeDevId == INTEL_Q35_MCH_DEVICE_ID) { // @@ -192,8 +187,9 @@ MemMapInitialization ( PciBase = (UINT32)(PciExBarBase + SIZE_256MB); } else { PciBase = (UINT32)PcdGet64 (PcdPciMmio32Base); - if (PciBase == 0) + if (PciBase == 0) { PciBase = (TopOfLowRam < BASE_2GB) ? BASE_2GB : TopOfLowRam; + } } // @@ -242,10 +238,14 @@ MemMapInitialization ( // uncacheable reserved memory right here. // AddReservedMemoryBaseSizeHob (PciExBarBase, SIZE_256MB, FALSE); - BuildMemoryAllocationHob (PciExBarBase, SIZE_256MB, - EfiReservedMemoryType); + BuildMemoryAllocationHob ( + PciExBarBase, + SIZE_256MB, + EfiReservedMemoryType + ); } - AddIoMemoryBaseSizeHob (PcdGet32(PcdCpuLocalApicBaseAddress), SIZE_1MB); + + AddIoMemoryBaseSizeHob (PcdGet32 (PcdCpuLocalApicBaseAddress), SIZE_1MB); // // On Q35, the IO Port space is available for PCI resource allocations from @@ -287,8 +287,8 @@ PciExBarInitialization ( ) { union { - UINT64 Uint64; - UINT32 Uint32[2]; + UINT64 Uint64; + UINT32 Uint32[2]; } PciExBarBase; // @@ -327,13 +327,13 @@ MiscInitialization ( VOID ) { - UINTN PmCmd; - UINTN Pmba; - UINT32 PmbaAndVal; - UINT32 PmbaOrVal; - UINTN AcpiCtlReg; - UINT8 AcpiEnBit; - RETURN_STATUS PcdStatus; + UINTN PmCmd; + UINTN Pmba; + UINT32 PmbaAndVal; + UINT32 PmbaOrVal; + UINTN AcpiCtlReg; + UINT8 AcpiEnBit; + RETURN_STATUS PcdStatus; // // Disable A20 Mask @@ -370,11 +370,16 @@ MiscInitialization ( AcpiEnBit = ICH9_ACPI_CNTL_ACPI_EN; break; default: - DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", - __FUNCTION__, mHostBridgeDevId)); + DEBUG (( + DEBUG_ERROR, + "%a: Unknown Host Bridge Device ID: 0x%04x\n", + __FUNCTION__, + mHostBridgeDevId + )); ASSERT (FALSE); return; } + PcdStatus = PcdSet16S (PcdOvmfHostBridgePciDevId, mHostBridgeDevId); ASSERT_RETURN_ERROR (PcdStatus); @@ -417,17 +422,17 @@ MiscInitialization ( } } - VOID BootModeInitialization ( VOID ) { - EFI_STATUS Status; + EFI_STATUS Status; if (CmosRead8 (0xF) == 0xFE) { mBootMode = BOOT_ON_S3_RESUME; } + CmosWrite8 (0xF, 0x00); Status = PeiServicesSetBootMode (mBootMode); @@ -437,13 +442,12 @@ BootModeInitialization ( ASSERT_EFI_ERROR (Status); } - VOID ReserveEmuVariableNvStore ( ) { - EFI_PHYSICAL_ADDRESS VariableStore; - RETURN_STATUS PcdStatus; + EFI_PHYSICAL_ADDRESS VariableStore; + RETURN_STATUS PcdStatus; // // Allocate storage for NV variables early on so it will be @@ -453,25 +457,25 @@ ReserveEmuVariableNvStore ( // VariableStore = (EFI_PHYSICAL_ADDRESS)(UINTN) - AllocateRuntimePages ( - EFI_SIZE_TO_PAGES (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) - ); - DEBUG ((DEBUG_INFO, - "Reserved variable store memory: 0x%lX; size: %dkb\n", - VariableStore, - (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) / 1024 - )); + AllocateRuntimePages ( + EFI_SIZE_TO_PAGES (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) + ); + DEBUG (( + DEBUG_INFO, + "Reserved variable store memory: 0x%lX; size: %dkb\n", + VariableStore, + (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) / 1024 + )); PcdStatus = PcdSet64S (PcdEmuVariableNvStoreReserved, VariableStore); ASSERT_RETURN_ERROR (PcdStatus); } - VOID DebugDumpCmos ( VOID ) { - UINT32 Loop; + UINT32 Loop; DEBUG ((DEBUG_INFO, "CMOS:\n")); @@ -479,6 +483,7 @@ DebugDumpCmos ( if ((Loop % 0x10) == 0) { DEBUG ((DEBUG_INFO, "%02x:", Loop)); } + DEBUG ((DEBUG_INFO, " %02x", CmosRead8 (Loop))); if ((Loop % 0x10) == 0xf) { DEBUG ((DEBUG_INFO, "\n")); @@ -486,27 +491,34 @@ DebugDumpCmos ( } } - VOID S3Verification ( VOID ) { -#if defined (MDE_CPU_X64) + #if defined (MDE_CPU_X64) if (FeaturePcdGet (PcdSmmSmramRequire) && mS3Supported) { - DEBUG ((DEBUG_ERROR, - "%a: S3Resume2Pei doesn't support X64 PEI + SMM yet.\n", __FUNCTION__)); - DEBUG ((DEBUG_ERROR, + DEBUG (( + DEBUG_ERROR, + "%a: S3Resume2Pei doesn't support X64 PEI + SMM yet.\n", + __FUNCTION__ + )); + DEBUG (( + DEBUG_ERROR, "%a: Please disable S3 on the QEMU command line (see the README),\n", - __FUNCTION__)); - DEBUG ((DEBUG_ERROR, - "%a: or build OVMF with \"OvmfPkgIa32X64.dsc\".\n", __FUNCTION__)); + __FUNCTION__ + )); + DEBUG (( + DEBUG_ERROR, + "%a: or build OVMF with \"OvmfPkgIa32X64.dsc\".\n", + __FUNCTION__ + )); ASSERT (FALSE); CpuDeadLoop (); } -#endif -} + #endif +} /** Fetch the number of boot CPUs from QEMU and expose it to UefiCpuPkg modules. @@ -517,8 +529,8 @@ MaxCpuCountInitialization ( VOID ) { - UINT16 ProcessorCount = 0; - RETURN_STATUS PcdStatus; + UINT16 ProcessorCount = 0; + RETURN_STATUS PcdStatus; // // If the fw_cfg key or fw_cfg entirely is unavailable, load mMaxCpuCount @@ -528,6 +540,7 @@ MaxCpuCountInitialization ( mMaxCpuCount = PcdGet32 (PcdCpuMaxLogicalProcessorNumber); return; } + // // Otherwise, set mMaxCpuCount to the value reported by QEMU. // @@ -542,11 +555,14 @@ MaxCpuCountInitialization ( ASSERT_RETURN_ERROR (PcdStatus); PcdStatus = PcdSet32S (PcdCpuApInitTimeOutInMicroSeconds, MAX_UINT32); ASSERT_RETURN_ERROR (PcdStatus); - DEBUG ((DEBUG_INFO, "%a: QEMU reports %d processor(s)\n", __FUNCTION__, - ProcessorCount)); + DEBUG (( + DEBUG_INFO, + "%a: QEMU reports %d processor(s)\n", + __FUNCTION__, + ProcessorCount + )); } - /** Perform Platform PEI initialization. @@ -596,6 +612,7 @@ InitializePlatform ( if (!FeaturePcdGet (PcdSmmSmramRequire)) { ReserveEmuVariableNvStore (); } + PeiFvInitialization (); MemMapInitialization (); NoexecDxeInitialization (); diff --git a/OvmfPkg/Bhyve/PlatformPei/Platform.h b/OvmfPkg/Bhyve/PlatformPei/Platform.h index 8239ca05ac..17b63dfef3 100644 --- a/OvmfPkg/Bhyve/PlatformPei/Platform.h +++ b/OvmfPkg/Bhyve/PlatformPei/Platform.h @@ -14,33 +14,33 @@ VOID AddIoMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize ); VOID AddIoMemoryRangeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - EFI_PHYSICAL_ADDRESS MemoryLimit + EFI_PHYSICAL_ADDRESS MemoryBase, + EFI_PHYSICAL_ADDRESS MemoryLimit ); VOID AddMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize ); VOID AddMemoryRangeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - EFI_PHYSICAL_ADDRESS MemoryLimit + EFI_PHYSICAL_ADDRESS MemoryBase, + EFI_PHYSICAL_ADDRESS MemoryLimit ); VOID AddReservedMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize, - BOOLEAN Cacheable + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize, + BOOLEAN Cacheable ); VOID @@ -113,25 +113,25 @@ AmdSevInitialize ( VOID ); -extern BOOLEAN mXen; +extern BOOLEAN mXen; VOID XenPublishRamRegions ( VOID ); -extern EFI_BOOT_MODE mBootMode; +extern EFI_BOOT_MODE mBootMode; -extern BOOLEAN mS3Supported; +extern BOOLEAN mS3Supported; -extern UINT8 mPhysMemAddressWidth; +extern UINT8 mPhysMemAddressWidth; -extern UINT32 mMaxCpuCount; +extern UINT32 mMaxCpuCount; -extern UINT16 mHostBridgeDevId; +extern UINT16 mHostBridgeDevId; -extern BOOLEAN mQ35SmramAtDefaultSmbase; +extern BOOLEAN mQ35SmramAtDefaultSmbase; -extern UINT32 mQemuUc32Base; +extern UINT32 mQemuUc32Base; #endif // _PLATFORM_PEI_H_INCLUDED_ diff --git a/OvmfPkg/Bhyve/SmbiosPlatformDxe/Bhyve.c b/OvmfPkg/Bhyve/SmbiosPlatformDxe/Bhyve.c index 6ca976daa6..b70285bc2a 100644 --- a/OvmfPkg/Bhyve/SmbiosPlatformDxe/Bhyve.c +++ b/OvmfPkg/Bhyve/SmbiosPlatformDxe/Bhyve.c @@ -7,8 +7,8 @@ #include "SmbiosPlatformDxe.h" -#define BHYVE_SMBIOS_PHYSICAL_ADDRESS 0x000F0000 -#define BHYVE_SMBIOS_PHYSICAL_END 0x000FFFFF +#define BHYVE_SMBIOS_PHYSICAL_ADDRESS 0x000F0000 +#define BHYVE_SMBIOS_PHYSICAL_END 0x000FFFFF /** Locates the bhyve SMBIOS data if it exists @@ -24,18 +24,17 @@ GetBhyveSmbiosTables ( UINT8 *BhyveSmbiosPtr; SMBIOS_TABLE_ENTRY_POINT *BhyveSmbiosEntryPointStructure; - for (BhyveSmbiosPtr = (UINT8*)(UINTN) BHYVE_SMBIOS_PHYSICAL_ADDRESS; - BhyveSmbiosPtr < (UINT8*)(UINTN) BHYVE_SMBIOS_PHYSICAL_END; - BhyveSmbiosPtr += 0x10) { - - BhyveSmbiosEntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *) BhyveSmbiosPtr; - - if (!AsciiStrnCmp ((CHAR8 *) BhyveSmbiosEntryPointStructure->AnchorString, "_SM_", 4) && - !AsciiStrnCmp ((CHAR8 *) BhyveSmbiosEntryPointStructure->IntermediateAnchorString, "_DMI_", 5) && - IsEntryPointStructureValid (BhyveSmbiosEntryPointStructure)) { + for (BhyveSmbiosPtr = (UINT8 *)(UINTN)BHYVE_SMBIOS_PHYSICAL_ADDRESS; + BhyveSmbiosPtr < (UINT8 *)(UINTN)BHYVE_SMBIOS_PHYSICAL_END; + BhyveSmbiosPtr += 0x10) + { + BhyveSmbiosEntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *)BhyveSmbiosPtr; + if (!AsciiStrnCmp ((CHAR8 *)BhyveSmbiosEntryPointStructure->AnchorString, "_SM_", 4) && + !AsciiStrnCmp ((CHAR8 *)BhyveSmbiosEntryPointStructure->IntermediateAnchorString, "_DMI_", 5) && + IsEntryPointStructureValid (BhyveSmbiosEntryPointStructure)) + { return BhyveSmbiosEntryPointStructure; - } } diff --git a/OvmfPkg/Bhyve/SmbiosPlatformDxe/SmbiosPlatformDxe.c b/OvmfPkg/Bhyve/SmbiosPlatformDxe/SmbiosPlatformDxe.c index 59f5d77a3b..ba21393f8e 100644 --- a/OvmfPkg/Bhyve/SmbiosPlatformDxe/SmbiosPlatformDxe.c +++ b/OvmfPkg/Bhyve/SmbiosPlatformDxe/SmbiosPlatformDxe.c @@ -20,34 +20,34 @@ // #pragma pack(1) typedef struct { - SMBIOS_TABLE_TYPE0 Base; - UINT8 Strings[sizeof(TYPE0_STRINGS)]; + SMBIOS_TABLE_TYPE0 Base; + UINT8 Strings[sizeof (TYPE0_STRINGS)]; } OVMF_TYPE0; #pragma pack() -STATIC CONST OVMF_TYPE0 mOvmfDefaultType0 = { +STATIC CONST OVMF_TYPE0 mOvmfDefaultType0 = { { // SMBIOS_STRUCTURE Hdr { EFI_SMBIOS_TYPE_BIOS_INFORMATION, // UINT8 Type sizeof (SMBIOS_TABLE_TYPE0), // UINT8 Length }, - 1, // SMBIOS_TABLE_STRING Vendor - 2, // SMBIOS_TABLE_STRING BiosVersion - 0xE800,// UINT16 BiosSegment - 3, // SMBIOS_TABLE_STRING BiosReleaseDate - 0, // UINT8 BiosSize + 1, // SMBIOS_TABLE_STRING Vendor + 2, // SMBIOS_TABLE_STRING BiosVersion + 0xE800, // UINT16 BiosSegment + 3, // SMBIOS_TABLE_STRING BiosReleaseDate + 0, // UINT8 BiosSize { // MISC_BIOS_CHARACTERISTICS BiosCharacteristics - 0, // Reserved :2 - 0, // Unknown :1 - 1, // BiosCharacteristicsNotSupported :1 - // Remaining BiosCharacteristics bits left unset :60 + 0, // Reserved :2 + 0, // Unknown :1 + 1, // BiosCharacteristicsNotSupported :1 + // Remaining BiosCharacteristics bits left unset :60 }, { // BIOSCharacteristicsExtensionBytes[2] - 0, // BiosReserved - 0x1C // SystemReserved = VirtualMachineSupported | - // UefiSpecificationSupported | - // TargetContentDistributionEnabled + 0, // BiosReserved + 0x1C // SystemReserved = VirtualMachineSupported | + // UefiSpecificationSupported | + // TargetContentDistributionEnabled }, 0, // UINT8 SystemBiosMajorRelease 0, // UINT8 SystemBiosMinorRelease @@ -58,7 +58,6 @@ STATIC CONST OVMF_TYPE0 mOvmfDefaultType0 = { TYPE0_STRINGS }; - /** Validates the SMBIOS entry point structure @@ -73,17 +72,17 @@ IsEntryPointStructureValid ( IN SMBIOS_TABLE_ENTRY_POINT *EntryPointStructure ) { - UINTN Index; - UINT8 Length; - UINT8 Checksum; - UINT8 *BytePtr; + UINTN Index; + UINT8 Length; + UINT8 Checksum; + UINT8 *BytePtr; - BytePtr = (UINT8*) EntryPointStructure; - Length = EntryPointStructure->EntryPointLength; + BytePtr = (UINT8 *)EntryPointStructure; + Length = EntryPointStructure->EntryPointLength; Checksum = 0; for (Index = 0; Index < Length; Index++) { - Checksum = Checksum + (UINT8) BytePtr[Index]; + Checksum = Checksum + (UINT8)BytePtr[Index]; } if (Checksum != 0) { @@ -93,7 +92,6 @@ IsEntryPointStructureValid ( } } - /** Get SMBIOS record length. @@ -102,7 +100,7 @@ IsEntryPointStructureValid ( **/ UINTN SmbiosTableLength ( - IN SMBIOS_STRUCTURE_POINTER SmbiosTable + IN SMBIOS_STRUCTURE_POINTER SmbiosTable ) { CHAR8 *AChar; @@ -114,14 +112,14 @@ SmbiosTableLength ( // Each structure shall be terminated by a double-null (SMBIOS spec.7.1) // while ((*AChar != 0) || (*(AChar + 1) != 0)) { - AChar ++; + AChar++; } + Length = ((UINTN)AChar - (UINTN)SmbiosTable.Raw + 2); return Length; } - /** Install all structures from the given SMBIOS structures block @@ -131,8 +129,8 @@ SmbiosTableLength ( **/ EFI_STATUS InstallAllStructures ( - IN EFI_SMBIOS_PROTOCOL *Smbios, - IN UINT8 *TableAddress + IN EFI_SMBIOS_PROTOCOL *Smbios, + IN UINT8 *TableAddress ) { EFI_STATUS Status; @@ -152,12 +150,12 @@ InstallAllStructures ( // Log the SMBIOS data for this structure // SmbiosHandle = SmbiosTable.Hdr->Handle; - Status = Smbios->Add ( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER*) SmbiosTable.Raw - ); + Status = Smbios->Add ( + Smbios, + NULL, + &SmbiosHandle, + (EFI_SMBIOS_TABLE_HEADER *)SmbiosTable.Raw + ); ASSERT_EFI_ERROR (Status); if (SmbiosTable.Hdr->Type == 0) { @@ -175,19 +173,18 @@ InstallAllStructures ( // Add OVMF default Type 0 (BIOS Information) table // SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; - Status = Smbios->Add ( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER*) &mOvmfDefaultType0 - ); + Status = Smbios->Add ( + Smbios, + NULL, + &SmbiosHandle, + (EFI_SMBIOS_TABLE_HEADER *)&mOvmfDefaultType0 + ); ASSERT_EFI_ERROR (Status); } return EFI_SUCCESS; } - /** Installs SMBIOS information for OVMF @@ -201,8 +198,8 @@ InstallAllStructures ( EFI_STATUS EFIAPI SmbiosTablePublishEntry ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; @@ -216,7 +213,7 @@ SmbiosTablePublishEntry ( Status = gBS->LocateProtocol ( &gEfiSmbiosProtocolGuid, NULL, - (VOID**)&Smbios + (VOID **)&Smbios ); if (EFI_ERROR (Status)) { return Status; @@ -227,7 +224,7 @@ SmbiosTablePublishEntry ( // EntryPointStructure = GetBhyveSmbiosTables (); if (EntryPointStructure != NULL) { - SmbiosTables = (UINT8*)(UINTN)EntryPointStructure->TableAddress; + SmbiosTables = (UINT8 *)(UINTN)EntryPointStructure->TableAddress; } if (SmbiosTables != NULL) { diff --git a/OvmfPkg/Bhyve/SmbiosPlatformDxe/SmbiosPlatformDxe.h b/OvmfPkg/Bhyve/SmbiosPlatformDxe/SmbiosPlatformDxe.h index 12d7be7b24..147370533d 100644 --- a/OvmfPkg/Bhyve/SmbiosPlatformDxe/SmbiosPlatformDxe.h +++ b/OvmfPkg/Bhyve/SmbiosPlatformDxe/SmbiosPlatformDxe.h @@ -21,7 +21,6 @@ #include #include - /** Locates the bhyve SMBIOS data if it exists @@ -33,7 +32,6 @@ GetBhyveSmbiosTables ( VOID ); - /** Validates the SMBIOS entry point structure diff --git a/OvmfPkg/CompatImageLoaderDxe/CompatImageLoaderDxe.c b/OvmfPkg/CompatImageLoaderDxe/CompatImageLoaderDxe.c index 41ddfbc517..c4416494a9 100644 --- a/OvmfPkg/CompatImageLoaderDxe/CompatImageLoaderDxe.c +++ b/OvmfPkg/CompatImageLoaderDxe/CompatImageLoaderDxe.c @@ -19,10 +19,10 @@ #pragma pack (1) typedef struct { - UINT8 Type; - UINT8 Size; - UINT16 MachineType; - UINT32 EntryPoint; + UINT8 Type; + UINT8 Size; + UINT16 MachineType; + UINT32 EntryPoint; } PE_COMPAT_TYPE1; #pragma pack () @@ -30,9 +30,9 @@ STATIC BOOLEAN EFIAPI IsImageSupported ( - IN EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL *This, - IN UINT16 ImageType, - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath OPTIONAL + IN EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL *This, + IN UINT16 ImageType, + IN EFI_DEVICE_PATH_PROTOCOL *DevicePath OPTIONAL ) { return ImageType == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION; @@ -42,16 +42,16 @@ STATIC EFI_IMAGE_ENTRY_POINT EFIAPI GetCompatEntryPoint ( - IN EFI_PHYSICAL_ADDRESS ImageBase + IN EFI_PHYSICAL_ADDRESS ImageBase ) { - EFI_IMAGE_DOS_HEADER *DosHdr; - UINTN PeCoffHeaderOffset; - EFI_IMAGE_NT_HEADERS32 *Pe32; - EFI_IMAGE_SECTION_HEADER *Section; - UINTN NumberOfSections; - PE_COMPAT_TYPE1 *PeCompat; - UINTN PeCompatEnd; + EFI_IMAGE_DOS_HEADER *DosHdr; + UINTN PeCoffHeaderOffset; + EFI_IMAGE_NT_HEADERS32 *Pe32; + EFI_IMAGE_SECTION_HEADER *Section; + UINTN NumberOfSections; + PE_COMPAT_TYPE1 *PeCompat; + UINTN PeCompatEnd; DosHdr = (EFI_IMAGE_DOS_HEADER *)(UINTN)ImageBase; if (DosHdr->e_magic != EFI_IMAGE_DOS_SIGNATURE) { @@ -59,7 +59,7 @@ GetCompatEntryPoint ( } PeCoffHeaderOffset = DosHdr->e_lfanew; - Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN)ImageBase + PeCoffHeaderOffset); + Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN)ImageBase + PeCoffHeaderOffset); Section = (EFI_IMAGE_SECTION_HEADER *)((UINTN)&Pe32->OptionalHeader + Pe32->FileHeader.SizeOfOptionalHeader); @@ -70,22 +70,25 @@ GetCompatEntryPoint ( // // Dereference the section contents to find the mixed mode entry point // - PeCompat = (PE_COMPAT_TYPE1 *)((UINTN)ImageBase + Section->VirtualAddress); + PeCompat = (PE_COMPAT_TYPE1 *)((UINTN)ImageBase + Section->VirtualAddress); PeCompatEnd = (UINTN)(VOID *)PeCompat + Section->Misc.VirtualSize; while (PeCompat->Type != 0 && (UINTN)(VOID *)PeCompat < PeCompatEnd) { - if (PeCompat->Type == 1 && - PeCompat->Size >= sizeof (PE_COMPAT_TYPE1) && - EFI_IMAGE_MACHINE_TYPE_SUPPORTED (PeCompat->MachineType)) { - + if ((PeCompat->Type == 1) && + (PeCompat->Size >= sizeof (PE_COMPAT_TYPE1)) && + EFI_IMAGE_MACHINE_TYPE_SUPPORTED (PeCompat->MachineType)) + { return (EFI_IMAGE_ENTRY_POINT)((UINTN)ImageBase + PeCompat->EntryPoint); } + PeCompat = (PE_COMPAT_TYPE1 *)((UINTN)PeCompat + PeCompat->Size); ASSERT ((UINTN)(VOID *)PeCompat < PeCompatEnd); } } + Section++; } + return NULL; } @@ -93,13 +96,13 @@ STATIC EFI_STATUS EFIAPI RegisterImage ( - IN EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL *This, - IN EFI_PHYSICAL_ADDRESS ImageBase, - IN UINT64 ImageSize, - IN OUT EFI_IMAGE_ENTRY_POINT *EntryPoint + IN EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL *This, + IN EFI_PHYSICAL_ADDRESS ImageBase, + IN UINT64 ImageSize, + IN OUT EFI_IMAGE_ENTRY_POINT *EntryPoint ) { - EFI_IMAGE_ENTRY_POINT CompatEntryPoint; + EFI_IMAGE_ENTRY_POINT CompatEntryPoint; CompatEntryPoint = GetCompatEntryPoint (ImageBase); if (CompatEntryPoint == NULL) { @@ -114,14 +117,14 @@ STATIC EFI_STATUS EFIAPI UnregisterImage ( - IN EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL *This, - IN EFI_PHYSICAL_ADDRESS ImageBase + IN EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL *This, + IN EFI_PHYSICAL_ADDRESS ImageBase ) { return EFI_SUCCESS; } -STATIC EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL mCompatLoaderPeCoffEmuProtocol = { +STATIC EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL mCompatLoaderPeCoffEmuProtocol = { IsImageSupported, RegisterImage, UnregisterImage, @@ -136,8 +139,10 @@ CompatImageLoaderDxeEntryPoint ( IN EFI_SYSTEM_TABLE *SystemTable ) { - return gBS->InstallProtocolInterface (&ImageHandle, + return gBS->InstallProtocolInterface ( + &ImageHandle, &gEdkiiPeCoffImageEmulatorProtocolGuid, EFI_NATIVE_INTERFACE, - &mCompatLoaderPeCoffEmuProtocol); + &mCompatLoaderPeCoffEmuProtocol + ); } diff --git a/OvmfPkg/CpuHotplugSmm/ApicId.h b/OvmfPkg/CpuHotplugSmm/ApicId.h index 3c365148ed..c0fa7f7978 100644 --- a/OvmfPkg/CpuHotplugSmm/ApicId.h +++ b/OvmfPkg/CpuHotplugSmm/ApicId.h @@ -18,6 +18,6 @@ typedef UINT32 APIC_ID; // // The PrintLib conversion specification for formatting an APIC_ID. // -#define FMT_APIC_ID "0x%08x" +#define FMT_APIC_ID "0x%08x" #endif // APIC_ID_H_ diff --git a/OvmfPkg/CpuHotplugSmm/CpuHotplug.c b/OvmfPkg/CpuHotplugSmm/CpuHotplug.c index 2c768f89f1..97ecd32eb6 100644 --- a/OvmfPkg/CpuHotplugSmm/CpuHotplug.c +++ b/OvmfPkg/CpuHotplugSmm/CpuHotplug.c @@ -28,19 +28,19 @@ // // We use this protocol for accessing IO Ports. // -STATIC EFI_MM_CPU_IO_PROTOCOL *mMmCpuIo; +STATIC EFI_MM_CPU_IO_PROTOCOL *mMmCpuIo; // // The following protocol is used to report the addition or removal of a CPU to // the SMM CPU driver (PiSmmCpuDxeSmm). // -STATIC EFI_SMM_CPU_SERVICE_PROTOCOL *mMmCpuService; +STATIC EFI_SMM_CPU_SERVICE_PROTOCOL *mMmCpuService; // // These structures serve as communication side-channels between the // EFI_SMM_CPU_SERVICE_PROTOCOL consumer (i.e., this driver) and provider // (i.e., PiSmmCpuDxeSmm). // -STATIC CPU_HOT_PLUG_DATA *mCpuHotPlugData; -STATIC CPU_HOT_EJECT_DATA *mCpuHotEjectData; +STATIC CPU_HOT_PLUG_DATA *mCpuHotPlugData; +STATIC CPU_HOT_EJECT_DATA *mCpuHotEjectData; // // SMRAM arrays for fetching the APIC IDs of processors with pending events (of // known event types), for the time of just one MMI. @@ -56,18 +56,18 @@ STATIC CPU_HOT_EJECT_DATA *mCpuHotEjectData; // in a single MMI. The numbers of used (populated) elements in the arrays are // determined on every MMI separately. // -STATIC APIC_ID *mPluggedApicIds; -STATIC APIC_ID *mToUnplugApicIds; -STATIC UINT32 *mToUnplugSelectors; +STATIC APIC_ID *mPluggedApicIds; +STATIC APIC_ID *mToUnplugApicIds; +STATIC UINT32 *mToUnplugSelectors; // // Address of the non-SMRAM reserved memory page that contains the Post-SMM Pen // for hot-added CPUs. // -STATIC UINT32 mPostSmmPenAddress; +STATIC UINT32 mPostSmmPenAddress; // // Represents the registration of the CPU Hotplug MMI handler. // -STATIC EFI_HANDLE mDispatchHandle; +STATIC EFI_HANDLE mDispatchHandle; /** Process CPUs that have been hot-added, per QemuCpuhpCollectApicIds(). @@ -93,13 +93,13 @@ STATIC EFI_HANDLE mDispatchHandle; STATIC EFI_STATUS ProcessHotAddedCpus ( - IN APIC_ID *PluggedApicIds, - IN UINT32 PluggedCount + IN APIC_ID *PluggedApicIds, + IN UINT32 PluggedCount ) { - EFI_STATUS Status; - UINT32 PluggedIdx; - UINT32 NewSlot; + EFI_STATUS Status; + UINT32 PluggedIdx; + UINT32 NewSlot; // // The Post-SMM Pen need not be reinstalled multiple times within a single @@ -110,11 +110,11 @@ ProcessHotAddedCpus ( SmbaseReinstallPostSmmPen (mPostSmmPenAddress); PluggedIdx = 0; - NewSlot = 0; + NewSlot = 0; while (PluggedIdx < PluggedCount) { - APIC_ID NewApicId; - UINT32 CheckSlot; - UINTN NewProcessorNumberByProtocol; + APIC_ID NewApicId; + UINT32 CheckSlot; + UINTN NewProcessorNumberByProtocol; NewApicId = PluggedApicIds[PluggedIdx]; @@ -123,14 +123,21 @@ ProcessHotAddedCpus ( // for (CheckSlot = 0; CheckSlot < mCpuHotPlugData->ArrayLength; - CheckSlot++) { + CheckSlot++) + { if (mCpuHotPlugData->ApicId[CheckSlot] == NewApicId) { break; } } + if (CheckSlot < mCpuHotPlugData->ArrayLength) { - DEBUG ((DEBUG_VERBOSE, "%a: APIC ID " FMT_APIC_ID " was hot-plugged " - "before; ignoring it\n", __FUNCTION__, NewApicId)); + DEBUG (( + DEBUG_VERBOSE, + "%a: APIC ID " FMT_APIC_ID " was hot-plugged " + "before; ignoring it\n", + __FUNCTION__, + NewApicId + )); PluggedIdx++; continue; } @@ -139,12 +146,18 @@ ProcessHotAddedCpus ( // Find the first empty slot in CPU_HOT_PLUG_DATA. // while (NewSlot < mCpuHotPlugData->ArrayLength && - mCpuHotPlugData->ApicId[NewSlot] != MAX_UINT64) { + mCpuHotPlugData->ApicId[NewSlot] != MAX_UINT64) + { NewSlot++; } + if (NewSlot == mCpuHotPlugData->ArrayLength) { - DEBUG ((DEBUG_ERROR, "%a: no room for APIC ID " FMT_APIC_ID "\n", - __FUNCTION__, NewApicId)); + DEBUG (( + DEBUG_ERROR, + "%a: no room for APIC ID " FMT_APIC_ID "\n", + __FUNCTION__, + NewApicId + )); return EFI_OUT_OF_RESOURCES; } @@ -156,8 +169,11 @@ ProcessHotAddedCpus ( // // Relocate the SMBASE of the new CPU. // - Status = SmbaseRelocate (NewApicId, mCpuHotPlugData->SmBase[NewSlot], - mPostSmmPenAddress); + Status = SmbaseRelocate ( + NewApicId, + mCpuHotPlugData->SmBase[NewSlot], + mPostSmmPenAddress + ); if (EFI_ERROR (Status)) { goto RevokeNewSlot; } @@ -165,18 +181,31 @@ ProcessHotAddedCpus ( // // Add the new CPU with EFI_SMM_CPU_SERVICE_PROTOCOL. // - Status = mMmCpuService->AddProcessor (mMmCpuService, NewApicId, - &NewProcessorNumberByProtocol); + Status = mMmCpuService->AddProcessor ( + mMmCpuService, + NewApicId, + &NewProcessorNumberByProtocol + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: AddProcessor(" FMT_APIC_ID "): %r\n", - __FUNCTION__, NewApicId, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: AddProcessor(" FMT_APIC_ID "): %r\n", + __FUNCTION__, + NewApicId, + Status + )); goto RevokeNewSlot; } - DEBUG ((DEBUG_INFO, "%a: hot-added APIC ID " FMT_APIC_ID ", SMBASE 0x%Lx, " - "EFI_SMM_CPU_SERVICE_PROTOCOL assigned number %Lu\n", __FUNCTION__, - NewApicId, (UINT64)mCpuHotPlugData->SmBase[NewSlot], - (UINT64)NewProcessorNumberByProtocol)); + DEBUG (( + DEBUG_INFO, + "%a: hot-added APIC ID " FMT_APIC_ID ", SMBASE 0x%Lx, " + "EFI_SMM_CPU_SERVICE_PROTOCOL assigned number %Lu\n", + __FUNCTION__, + NewApicId, + (UINT64)mCpuHotPlugData->SmBase[NewSlot], + (UINT64)NewProcessorNumberByProtocol + )); NewSlot++; PluggedIdx++; @@ -210,11 +239,11 @@ CheckIfBsp ( VOID ) { - MSR_IA32_APIC_BASE_REGISTER ApicBaseMsr; - BOOLEAN IsBsp; + MSR_IA32_APIC_BASE_REGISTER ApicBaseMsr; + BOOLEAN IsBsp; ApicBaseMsr.Uint64 = AsmReadMsr64 (MSR_IA32_APIC_BASE); - IsBsp = (BOOLEAN)(ApicBaseMsr.Bits.BSP == 1); + IsBsp = (BOOLEAN)(ApicBaseMsr.Bits.BSP == 1); return IsBsp; } @@ -238,13 +267,13 @@ CheckIfBsp ( VOID EFIAPI EjectCpu ( - IN UINTN ProcessorNum + IN UINTN ProcessorNum ) { - UINT64 QemuSelector; + UINT64 QemuSelector; if (CheckIfBsp ()) { - UINT32 Idx; + UINT32 Idx; for (Idx = 0; Idx < mCpuHotEjectData->ArrayLength; Idx++) { QemuSelector = mCpuHotEjectData->QemuSelectorMap[Idx]; @@ -258,7 +287,7 @@ EjectCpu ( // // Tell QEMU to context-switch it out. // - QemuCpuhpWriteCpuSelector (mMmCpuIo, (UINT32) QemuSelector); + QemuCpuhpWriteCpuSelector (mMmCpuIo, (UINT32)QemuSelector); QemuCpuhpWriteCpuStatus (mMmCpuIo, QEMU_CPUHP_STAT_EJECT); // @@ -277,8 +306,14 @@ EjectCpu ( mCpuHotEjectData->QemuSelectorMap[Idx] = CPU_EJECT_QEMU_SELECTOR_INVALID; - DEBUG ((DEBUG_INFO, "%a: Unplugged ProcessorNum %u, " - "QemuSelector %Lu\n", __FUNCTION__, Idx, QemuSelector)); + DEBUG (( + DEBUG_INFO, + "%a: Unplugged ProcessorNum %u, " + "QemuSelector %Lu\n", + __FUNCTION__, + Idx, + QemuSelector + )); } } @@ -330,7 +365,7 @@ EjectCpu ( // // Keep them penned here until the BSP tells QEMU to eject them. // - for (;;) { + for ( ; ;) { DisableInterrupts (); CpuSleep (); } @@ -371,21 +406,21 @@ EjectCpu ( STATIC EFI_STATUS UnplugCpus ( - IN APIC_ID *ToUnplugApicIds, - IN UINT32 *ToUnplugSelectors, - IN UINT32 ToUnplugCount + IN APIC_ID *ToUnplugApicIds, + IN UINT32 *ToUnplugSelectors, + IN UINT32 ToUnplugCount ) { - EFI_STATUS Status; - UINT32 ToUnplugIdx; - UINT32 EjectCount; - UINTN ProcessorNum; + EFI_STATUS Status; + UINT32 ToUnplugIdx; + UINT32 EjectCount; + UINTN ProcessorNum; ToUnplugIdx = 0; - EjectCount = 0; + EjectCount = 0; while (ToUnplugIdx < ToUnplugCount) { - APIC_ID RemoveApicId; - UINT32 QemuSelector; + APIC_ID RemoveApicId; + UINT32 QemuSelector; RemoveApicId = ToUnplugApicIds[ToUnplugIdx]; QemuSelector = ToUnplugSelectors[ToUnplugIdx]; @@ -404,7 +439,8 @@ UnplugCpus ( for (ProcessorNum = 0; ProcessorNum < mCpuHotPlugData->ArrayLength; - ProcessorNum++) { + ProcessorNum++) + { if (mCpuHotPlugData->ApicId[ProcessorNum] == RemoveApicId) { break; } @@ -414,8 +450,13 @@ UnplugCpus ( // Ignore the unplug if APIC ID not found // if (ProcessorNum == mCpuHotPlugData->ArrayLength) { - DEBUG ((DEBUG_VERBOSE, "%a: did not find APIC ID " FMT_APIC_ID - " to unplug\n", __FUNCTION__, RemoveApicId)); + DEBUG (( + DEBUG_VERBOSE, + "%a: did not find APIC ID " FMT_APIC_ID + " to unplug\n", + __FUNCTION__, + RemoveApicId + )); ToUnplugIdx++; continue; } @@ -425,13 +466,19 @@ UnplugCpus ( // Status = mMmCpuService->RemoveProcessor (mMmCpuService, ProcessorNum); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: RemoveProcessor(" FMT_APIC_ID "): %r\n", - __FUNCTION__, RemoveApicId, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: RemoveProcessor(" FMT_APIC_ID "): %r\n", + __FUNCTION__, + RemoveApicId, + Status + )); return Status; } if (mCpuHotEjectData->QemuSelectorMap[ProcessorNum] != - CPU_EJECT_QEMU_SELECTOR_INVALID) { + CPU_EJECT_QEMU_SELECTOR_INVALID) + { // // mCpuHotEjectData->QemuSelectorMap[ProcessorNum] is set to // CPU_EJECT_QEMU_SELECTOR_INVALID when mCpuHotEjectData->QemuSelectorMap @@ -442,9 +489,15 @@ UnplugCpus ( // never match more than one APIC ID -- nor, by transitivity, designate // more than one QemuSelector -- in a single invocation of UnplugCpus(). // - DEBUG ((DEBUG_ERROR, "%a: ProcessorNum %Lu maps to QemuSelector %Lu, " - "cannot also map to %u\n", __FUNCTION__, (UINT64)ProcessorNum, - mCpuHotEjectData->QemuSelectorMap[ProcessorNum], QemuSelector)); + DEBUG (( + DEBUG_ERROR, + "%a: ProcessorNum %Lu maps to QemuSelector %Lu, " + "cannot also map to %u\n", + __FUNCTION__, + (UINT64)ProcessorNum, + mCpuHotEjectData->QemuSelectorMap[ProcessorNum], + QemuSelector + )); return EFI_ALREADY_STARTED; } @@ -454,9 +507,15 @@ UnplugCpus ( // mCpuHotEjectData->QemuSelectorMap[ProcessorNum] = (UINT64)QemuSelector; - DEBUG ((DEBUG_INFO, "%a: Started hot-unplug on ProcessorNum %Lu, APIC ID " - FMT_APIC_ID ", QemuSelector %u\n", __FUNCTION__, (UINT64)ProcessorNum, - RemoveApicId, QemuSelector)); + DEBUG (( + DEBUG_INFO, + "%a: Started hot-unplug on ProcessorNum %Lu, APIC ID " + FMT_APIC_ID ", QemuSelector %u\n", + __FUNCTION__, + (UINT64)ProcessorNum, + RemoveApicId, + QemuSelector + )); EjectCount++; ToUnplugIdx++; @@ -539,16 +598,16 @@ STATIC EFI_STATUS EFIAPI CpuHotplugMmi ( - IN EFI_HANDLE DispatchHandle, - IN CONST VOID *Context OPTIONAL, - IN OUT VOID *CommBuffer OPTIONAL, - IN OUT UINTN *CommBufferSize OPTIONAL + IN EFI_HANDLE DispatchHandle, + IN CONST VOID *Context OPTIONAL, + IN OUT VOID *CommBuffer OPTIONAL, + IN OUT UINTN *CommBufferSize OPTIONAL ) { - EFI_STATUS Status; - UINT8 ApmControl; - UINT32 PluggedCount; - UINT32 ToUnplugCount; + EFI_STATUS Status; + UINT8 ApmControl; + UINT32 PluggedCount; + UINT32 ToUnplugCount; // // Assert that we are entering this function due to our root MMI handler @@ -565,11 +624,20 @@ CpuHotplugMmi ( // Read the MMI command value from the APM Control Port, to see if this is an // MMI we should care about. // - Status = mMmCpuIo->Io.Read (mMmCpuIo, MM_IO_UINT8, ICH9_APM_CNT, 1, - &ApmControl); + Status = mMmCpuIo->Io.Read ( + mMmCpuIo, + MM_IO_UINT8, + ICH9_APM_CNT, + 1, + &ApmControl + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: failed to read ICH9_APM_CNT: %r\n", __FUNCTION__, - Status)); + DEBUG (( + DEBUG_ERROR, + "%a: failed to read ICH9_APM_CNT: %r\n", + __FUNCTION__, + Status + )); // // We couldn't even determine if the MMI was for us or not. // @@ -628,21 +696,20 @@ Fatal: return EFI_INTERRUPT_PENDING; } - // // Entry point function of this driver. // EFI_STATUS EFIAPI CpuHotplugEntry ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - UINTN Len; - UINTN Size; - UINTN SizeSel; + EFI_STATUS Status; + UINTN Len; + UINTN Size; + UINTN SizeSel; // // This module should only be included when SMM support is required. @@ -663,17 +730,28 @@ CpuHotplugEntry ( // First, collect the protocols needed later. All of these protocols are // listed in our module DEPEX. // - Status = gMmst->MmLocateProtocol (&gEfiMmCpuIoProtocolGuid, - NULL /* Registration */, (VOID **)&mMmCpuIo); + Status = gMmst->MmLocateProtocol ( + &gEfiMmCpuIoProtocolGuid, + NULL /* Registration */, + (VOID **)&mMmCpuIo + ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: locate MmCpuIo: %r\n", __FUNCTION__, Status)); goto Fatal; } - Status = gMmst->MmLocateProtocol (&gEfiSmmCpuServiceProtocolGuid, - NULL /* Registration */, (VOID **)&mMmCpuService); + + Status = gMmst->MmLocateProtocol ( + &gEfiSmmCpuServiceProtocolGuid, + NULL /* Registration */, + (VOID **)&mMmCpuService + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: locate MmCpuService: %r\n", __FUNCTION__, - Status)); + DEBUG (( + DEBUG_ERROR, + "%a: locate MmCpuService: %r\n", + __FUNCTION__, + Status + )); goto Fatal; } @@ -684,7 +762,7 @@ CpuHotplugEntry ( // - PcdCpuHotEjectDataAddress to CPU_HOT_EJECT_DATA in SMRAM, if the // possible CPU count is greater than 1. // - mCpuHotPlugData = (VOID *)(UINTN)PcdGet64 (PcdCpuHotPlugDataAddress); + mCpuHotPlugData = (VOID *)(UINTN)PcdGet64 (PcdCpuHotPlugDataAddress); mCpuHotEjectData = (VOID *)(UINTN)PcdGet64 (PcdCpuHotEjectDataAddress); if (mCpuHotPlugData == NULL) { @@ -692,6 +770,7 @@ CpuHotplugEntry ( DEBUG ((DEBUG_ERROR, "%a: CPU_HOT_PLUG_DATA: %r\n", __FUNCTION__, Status)); goto Fatal; } + // // If the possible CPU count is 1, there's nothing for this driver to do. // @@ -706,6 +785,7 @@ CpuHotplugEntry ( } else { Status = EFI_SUCCESS; } + if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: CPU_HOT_EJECT_DATA: %r\n", __FUNCTION__, Status)); goto Fatal; @@ -716,25 +796,38 @@ CpuHotplugEntry ( // if (RETURN_ERROR (SafeUintnSub (mCpuHotPlugData->ArrayLength, 1, &Len)) || RETURN_ERROR (SafeUintnMult (sizeof (APIC_ID), Len, &Size)) || - RETURN_ERROR (SafeUintnMult (sizeof (UINT32), Len, &SizeSel))) { + RETURN_ERROR (SafeUintnMult (sizeof (UINT32), Len, &SizeSel))) + { Status = EFI_ABORTED; DEBUG ((DEBUG_ERROR, "%a: invalid CPU_HOT_PLUG_DATA\n", __FUNCTION__)); goto Fatal; } - Status = gMmst->MmAllocatePool (EfiRuntimeServicesData, Size, - (VOID **)&mPluggedApicIds); + + Status = gMmst->MmAllocatePool ( + EfiRuntimeServicesData, + Size, + (VOID **)&mPluggedApicIds + ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: MmAllocatePool(): %r\n", __FUNCTION__, Status)); goto Fatal; } - Status = gMmst->MmAllocatePool (EfiRuntimeServicesData, Size, - (VOID **)&mToUnplugApicIds); + + Status = gMmst->MmAllocatePool ( + EfiRuntimeServicesData, + Size, + (VOID **)&mToUnplugApicIds + ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: MmAllocatePool(): %r\n", __FUNCTION__, Status)); goto ReleasePluggedApicIds; } - Status = gMmst->MmAllocatePool (EfiRuntimeServicesData, SizeSel, - (VOID **)&mToUnplugSelectors); + + Status = gMmst->MmAllocatePool ( + EfiRuntimeServicesData, + SizeSel, + (VOID **)&mToUnplugSelectors + ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: MmAllocatePool(): %r\n", __FUNCTION__, Status)); goto ReleaseToUnplugApicIds; @@ -743,8 +836,10 @@ CpuHotplugEntry ( // // Allocate the Post-SMM Pen for hot-added CPUs. // - Status = SmbaseAllocatePostSmmPen (&mPostSmmPenAddress, - SystemTable->BootServices); + Status = SmbaseAllocatePostSmmPen ( + &mPostSmmPenAddress, + SystemTable->BootServices + ); if (EFI_ERROR (Status)) { goto ReleaseToUnplugSelectors; } @@ -776,8 +871,12 @@ CpuHotplugEntry ( QemuCpuhpWriteCommand (mMmCpuIo, QEMU_CPUHP_CMD_GET_PENDING); if (QemuCpuhpReadCommandData2 (mMmCpuIo) != 0) { Status = EFI_NOT_FOUND; - DEBUG ((DEBUG_ERROR, "%a: modern CPU hotplug interface: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: modern CPU hotplug interface: %r\n", + __FUNCTION__, + Status + )); goto ReleasePostSmmPen; } @@ -790,8 +889,12 @@ CpuHotplugEntry ( &mDispatchHandle ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: MmiHandlerRegister(): %r\n", __FUNCTION__, - Status)); + DEBUG (( + DEBUG_ERROR, + "%a: MmiHandlerRegister(): %r\n", + __FUNCTION__, + Status + )); goto ReleasePostSmmPen; } diff --git a/OvmfPkg/CpuHotplugSmm/FirstSmiHandlerContext.h b/OvmfPkg/CpuHotplugSmm/FirstSmiHandlerContext.h index 029de4cdea..6039532fd8 100644 --- a/OvmfPkg/CpuHotplugSmm/FirstSmiHandlerContext.h +++ b/OvmfPkg/CpuHotplugSmm/FirstSmiHandlerContext.h @@ -29,18 +29,18 @@ typedef struct { // This field is intentionally wider than APIC_ID (UINT32) because we need a // "gate locked" value that is different from all possible APIC_IDs. // - UINT64 ApicIdGate; + UINT64 ApicIdGate; // // The new SMBASE value for the hot-added CPU to set in the SMRAM Save State // Map, before leaving SMM with the RSM instruction. // - UINT32 NewSmbase; + UINT32 NewSmbase; // // The hot-added CPU sets this field to 1 right before executing the RSM // instruction. This tells the SMM Monarch to proceed to polling the last // byte of the normal RAM reserved page (Post-SMM Pen). // - UINT8 AboutToLeaveSmm; + UINT8 AboutToLeaveSmm; } FIRST_SMI_HANDLER_CONTEXT; #pragma pack () diff --git a/OvmfPkg/CpuHotplugSmm/QemuCpuhp.c b/OvmfPkg/CpuHotplugSmm/QemuCpuhp.c index dc86ab9677..ec3dc379f3 100644 --- a/OvmfPkg/CpuHotplugSmm/QemuCpuhp.c +++ b/OvmfPkg/CpuHotplugSmm/QemuCpuhp.c @@ -21,83 +21,86 @@ UINT32 QemuCpuhpReadCommandData2 ( - IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo ) { - UINT32 CommandData2; - EFI_STATUS Status; + UINT32 CommandData2; + EFI_STATUS Status; CommandData2 = 0; - Status = MmCpuIo->Io.Read ( - MmCpuIo, - MM_IO_UINT32, - ICH9_CPU_HOTPLUG_BASE + QEMU_CPUHP_R_CMD_DATA2, - 1, - &CommandData2 - ); + Status = MmCpuIo->Io.Read ( + MmCpuIo, + MM_IO_UINT32, + ICH9_CPU_HOTPLUG_BASE + QEMU_CPUHP_R_CMD_DATA2, + 1, + &CommandData2 + ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: %r\n", __FUNCTION__, Status)); ASSERT (FALSE); CpuDeadLoop (); } + return CommandData2; } UINT8 QemuCpuhpReadCpuStatus ( - IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo ) { - UINT8 CpuStatus; - EFI_STATUS Status; + UINT8 CpuStatus; + EFI_STATUS Status; CpuStatus = 0; - Status = MmCpuIo->Io.Read ( - MmCpuIo, - MM_IO_UINT8, - ICH9_CPU_HOTPLUG_BASE + QEMU_CPUHP_R_CPU_STAT, - 1, - &CpuStatus - ); + Status = MmCpuIo->Io.Read ( + MmCpuIo, + MM_IO_UINT8, + ICH9_CPU_HOTPLUG_BASE + QEMU_CPUHP_R_CPU_STAT, + 1, + &CpuStatus + ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: %r\n", __FUNCTION__, Status)); ASSERT (FALSE); CpuDeadLoop (); } + return CpuStatus; } UINT32 QemuCpuhpReadCommandData ( - IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo ) { - UINT32 CommandData; - EFI_STATUS Status; + UINT32 CommandData; + EFI_STATUS Status; CommandData = 0; - Status = MmCpuIo->Io.Read ( - MmCpuIo, - MM_IO_UINT32, - ICH9_CPU_HOTPLUG_BASE + QEMU_CPUHP_RW_CMD_DATA, - 1, - &CommandData - ); + Status = MmCpuIo->Io.Read ( + MmCpuIo, + MM_IO_UINT32, + ICH9_CPU_HOTPLUG_BASE + QEMU_CPUHP_RW_CMD_DATA, + 1, + &CommandData + ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: %r\n", __FUNCTION__, Status)); ASSERT (FALSE); CpuDeadLoop (); } + return CommandData; } VOID QemuCpuhpWriteCpuSelector ( - IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, - IN UINT32 Selector + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, + IN UINT32 Selector ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = MmCpuIo->Io.Write ( MmCpuIo, @@ -115,11 +118,11 @@ QemuCpuhpWriteCpuSelector ( VOID QemuCpuhpWriteCpuStatus ( - IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, - IN UINT8 CpuStatus + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, + IN UINT8 CpuStatus ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = MmCpuIo->Io.Write ( MmCpuIo, @@ -137,11 +140,11 @@ QemuCpuhpWriteCpuStatus ( VOID QemuCpuhpWriteCommand ( - IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, - IN UINT8 Command + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, + IN UINT8 Command ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = MmCpuIo->Io.Write ( MmCpuIo, @@ -206,33 +209,33 @@ QemuCpuhpWriteCommand ( **/ EFI_STATUS QemuCpuhpCollectApicIds ( - IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, - IN UINT32 PossibleCpuCount, - IN UINT32 ApicIdCount, - OUT APIC_ID *PluggedApicIds, - OUT UINT32 *PluggedCount, - OUT APIC_ID *ToUnplugApicIds, - OUT UINT32 *ToUnplugSelectors, - OUT UINT32 *ToUnplugCount + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, + IN UINT32 PossibleCpuCount, + IN UINT32 ApicIdCount, + OUT APIC_ID *PluggedApicIds, + OUT UINT32 *PluggedCount, + OUT APIC_ID *ToUnplugApicIds, + OUT UINT32 *ToUnplugSelectors, + OUT UINT32 *ToUnplugCount ) { - UINT32 CurrentSelector; + UINT32 CurrentSelector; - if (PossibleCpuCount == 0 || ApicIdCount == 0) { + if ((PossibleCpuCount == 0) || (ApicIdCount == 0)) { return EFI_INVALID_PARAMETER; } - *PluggedCount = 0; + *PluggedCount = 0; *ToUnplugCount = 0; CurrentSelector = 0; do { - UINT32 PendingSelector; - UINT8 CpuStatus; - APIC_ID *ExtendIds; - UINT32 *ExtendSels; - UINT32 *ExtendCount; - APIC_ID NewApicId; + UINT32 PendingSelector; + UINT8 CpuStatus; + APIC_ID *ExtendIds; + UINT32 *ExtendSels; + UINT32 *ExtendCount; + APIC_ID NewApicId; // // Write CurrentSelector (which is valid) to the CPU selector register. @@ -259,10 +262,17 @@ QemuCpuhpCollectApicIds ( QemuCpuhpWriteCommand (MmCpuIo, QEMU_CPUHP_CMD_GET_PENDING); PendingSelector = QemuCpuhpReadCommandData (MmCpuIo); if (PendingSelector < CurrentSelector) { - DEBUG ((DEBUG_VERBOSE, "%a: CurrentSelector=%u PendingSelector=%u: " - "wrap-around\n", __FUNCTION__, CurrentSelector, PendingSelector)); + DEBUG (( + DEBUG_VERBOSE, + "%a: CurrentSelector=%u PendingSelector=%u: " + "wrap-around\n", + __FUNCTION__, + CurrentSelector, + PendingSelector + )); break; } + CurrentSelector = PendingSelector; // @@ -274,16 +284,26 @@ QemuCpuhpCollectApicIds ( // The "insert" event guarantees the "enabled" status; plus it excludes // the "fw_remove" event. // - if ((CpuStatus & QEMU_CPUHP_STAT_ENABLED) == 0 || - (CpuStatus & QEMU_CPUHP_STAT_FW_REMOVE) != 0) { - DEBUG ((DEBUG_ERROR, "%a: CurrentSelector=%u CpuStatus=0x%x: " - "inconsistent CPU status\n", __FUNCTION__, CurrentSelector, - CpuStatus)); + if (((CpuStatus & QEMU_CPUHP_STAT_ENABLED) == 0) || + ((CpuStatus & QEMU_CPUHP_STAT_FW_REMOVE) != 0)) + { + DEBUG (( + DEBUG_ERROR, + "%a: CurrentSelector=%u CpuStatus=0x%x: " + "inconsistent CPU status\n", + __FUNCTION__, + CurrentSelector, + CpuStatus + )); return EFI_PROTOCOL_ERROR; } - DEBUG ((DEBUG_VERBOSE, "%a: CurrentSelector=%u: insert\n", __FUNCTION__, - CurrentSelector)); + DEBUG (( + DEBUG_VERBOSE, + "%a: CurrentSelector=%u: insert\n", + __FUNCTION__, + CurrentSelector + )); ExtendIds = PluggedApicIds; ExtendSels = NULL; @@ -293,14 +313,23 @@ QemuCpuhpCollectApicIds ( // "fw_remove" event guarantees "enabled". // if ((CpuStatus & QEMU_CPUHP_STAT_ENABLED) == 0) { - DEBUG ((DEBUG_ERROR, "%a: CurrentSelector=%u CpuStatus=0x%x: " - "inconsistent CPU status\n", __FUNCTION__, CurrentSelector, - CpuStatus)); + DEBUG (( + DEBUG_ERROR, + "%a: CurrentSelector=%u CpuStatus=0x%x: " + "inconsistent CPU status\n", + __FUNCTION__, + CurrentSelector, + CpuStatus + )); return EFI_PROTOCOL_ERROR; } - DEBUG ((DEBUG_VERBOSE, "%a: CurrentSelector=%u: fw_remove\n", - __FUNCTION__, CurrentSelector)); + DEBUG (( + DEBUG_VERBOSE, + "%a: CurrentSelector=%u: fw_remove\n", + __FUNCTION__, + CurrentSelector + )); ExtendIds = ToUnplugApicIds; ExtendSels = ToUnplugSelectors; @@ -309,15 +338,23 @@ QemuCpuhpCollectApicIds ( // // Let the OSPM deal with the "remove" event. // - DEBUG ((DEBUG_VERBOSE, "%a: CurrentSelector=%u: remove (ignored)\n", - __FUNCTION__, CurrentSelector)); + DEBUG (( + DEBUG_VERBOSE, + "%a: CurrentSelector=%u: remove (ignored)\n", + __FUNCTION__, + CurrentSelector + )); ExtendIds = NULL; ExtendSels = NULL; ExtendCount = NULL; } else { - DEBUG ((DEBUG_VERBOSE, "%a: CurrentSelector=%u: no event\n", - __FUNCTION__, CurrentSelector)); + DEBUG (( + DEBUG_VERBOSE, + "%a: CurrentSelector=%u: no event\n", + __FUNCTION__, + CurrentSelector + )); break; } @@ -334,15 +371,22 @@ QemuCpuhpCollectApicIds ( DEBUG ((DEBUG_ERROR, "%a: APIC ID array too small\n", __FUNCTION__)); return EFI_BUFFER_TOO_SMALL; } + QemuCpuhpWriteCommand (MmCpuIo, QEMU_CPUHP_CMD_GET_ARCH_ID); NewApicId = QemuCpuhpReadCommandData (MmCpuIo); - DEBUG ((DEBUG_VERBOSE, "%a: ApicId=" FMT_APIC_ID "\n", __FUNCTION__, - NewApicId)); + DEBUG (( + DEBUG_VERBOSE, + "%a: ApicId=" FMT_APIC_ID "\n", + __FUNCTION__, + NewApicId + )); if (ExtendSels != NULL) { ExtendSels[(*ExtendCount)] = CurrentSelector; } + ExtendIds[(*ExtendCount)++] = NewApicId; } + // // We've processed the CPU with (known) pending events, but we must never // clear events. Therefore we need to advance past this CPU manually; @@ -352,7 +396,12 @@ QemuCpuhpCollectApicIds ( CurrentSelector++; } while (CurrentSelector < PossibleCpuCount); - DEBUG ((DEBUG_VERBOSE, "%a: PluggedCount=%u ToUnplugCount=%u\n", - __FUNCTION__, *PluggedCount, *ToUnplugCount)); + DEBUG (( + DEBUG_VERBOSE, + "%a: PluggedCount=%u ToUnplugCount=%u\n", + __FUNCTION__, + *PluggedCount, + *ToUnplugCount + )); return EFI_SUCCESS; } diff --git a/OvmfPkg/CpuHotplugSmm/QemuCpuhp.h b/OvmfPkg/CpuHotplugSmm/QemuCpuhp.h index 8bb3c66e9b..1a4ae02398 100644 --- a/OvmfPkg/CpuHotplugSmm/QemuCpuhp.h +++ b/OvmfPkg/CpuHotplugSmm/QemuCpuhp.h @@ -22,47 +22,47 @@ UINT32 QemuCpuhpReadCommandData2 ( - IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo ); UINT8 QemuCpuhpReadCpuStatus ( - IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo ); UINT32 QemuCpuhpReadCommandData ( - IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo ); VOID QemuCpuhpWriteCpuSelector ( - IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, - IN UINT32 Selector + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, + IN UINT32 Selector ); VOID QemuCpuhpWriteCpuStatus ( - IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, - IN UINT8 CpuStatus + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, + IN UINT8 CpuStatus ); VOID QemuCpuhpWriteCommand ( - IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, - IN UINT8 Command + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, + IN UINT8 Command ); EFI_STATUS QemuCpuhpCollectApicIds ( - IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, - IN UINT32 PossibleCpuCount, - IN UINT32 ApicIdCount, - OUT APIC_ID *PluggedApicIds, - OUT UINT32 *PluggedCount, - OUT APIC_ID *ToUnplugApicIds, - OUT UINT32 *ToUnplugSelectors, - OUT UINT32 *ToUnplugCount + IN CONST EFI_MM_CPU_IO_PROTOCOL *MmCpuIo, + IN UINT32 PossibleCpuCount, + IN UINT32 ApicIdCount, + OUT APIC_ID *PluggedApicIds, + OUT UINT32 *PluggedCount, + OUT APIC_ID *ToUnplugApicIds, + OUT UINT32 *ToUnplugSelectors, + OUT UINT32 *ToUnplugCount ); #endif // QEMU_CPUHP_H_ diff --git a/OvmfPkg/CpuHotplugSmm/Smbase.c b/OvmfPkg/CpuHotplugSmm/Smbase.c index d8f45c4313..5d50605893 100644 --- a/OvmfPkg/CpuHotplugSmm/Smbase.c +++ b/OvmfPkg/CpuHotplugSmm/Smbase.c @@ -18,10 +18,10 @@ #include "Smbase.h" -extern CONST UINT8 mPostSmmPen[]; -extern CONST UINT16 mPostSmmPenSize; -extern CONST UINT8 mFirstSmiHandler[]; -extern CONST UINT16 mFirstSmiHandlerSize; +extern CONST UINT8 mPostSmmPen[]; +extern CONST UINT16 mPostSmmPenSize; +extern CONST UINT8 mFirstSmiHandler[]; +extern CONST UINT16 mFirstSmiHandlerSize; /** Allocate a non-SMRAM reserved memory page for the Post-SMM Pen for hot-added @@ -46,12 +46,12 @@ extern CONST UINT16 mFirstSmiHandlerSize; **/ EFI_STATUS SmbaseAllocatePostSmmPen ( - OUT UINT32 *PenAddress, - IN CONST EFI_BOOT_SERVICES *BootServices + OUT UINT32 *PenAddress, + IN CONST EFI_BOOT_SERVICES *BootServices ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS Address; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS Address; // // The pen code must fit in one page, and the last byte must remain free for @@ -59,14 +59,23 @@ SmbaseAllocatePostSmmPen ( // if (mPostSmmPenSize >= EFI_PAGE_SIZE) { Status = EFI_BAD_BUFFER_SIZE; - DEBUG ((DEBUG_ERROR, "%a: mPostSmmPenSize=%u: %r\n", __FUNCTION__, - mPostSmmPenSize, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: mPostSmmPenSize=%u: %r\n", + __FUNCTION__, + mPostSmmPenSize, + Status + )); return Status; } Address = BASE_1MB - 1; - Status = BootServices->AllocatePages (AllocateMaxAddress, - EfiReservedMemoryType, 1, &Address); + Status = BootServices->AllocatePages ( + AllocateMaxAddress, + EfiReservedMemoryType, + 1, + &Address + ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: AllocatePages(): %r\n", __FUNCTION__, Status)); return Status; @@ -90,7 +99,7 @@ SmbaseAllocatePostSmmPen ( **/ VOID SmbaseReinstallPostSmmPen ( - IN UINT32 PenAddress + IN UINT32 PenAddress ) { CopyMem ((VOID *)(UINTN)PenAddress, mPostSmmPen, mPostSmmPenSize); @@ -110,8 +119,8 @@ SmbaseReinstallPostSmmPen ( **/ VOID SmbaseReleasePostSmmPen ( - IN UINT32 PenAddress, - IN CONST EFI_BOOT_SERVICES *BootServices + IN UINT32 PenAddress, + IN CONST EFI_BOOT_SERVICES *BootServices ) { BootServices->FreePages (PenAddress, 1); @@ -133,12 +142,15 @@ SmbaseInstallFirstSmiHandler ( VOID ) { - FIRST_SMI_HANDLER_CONTEXT *Context; + FIRST_SMI_HANDLER_CONTEXT *Context; - CopyMem ((VOID *)(UINTN)(SMM_DEFAULT_SMBASE + SMM_HANDLER_OFFSET), - mFirstSmiHandler, mFirstSmiHandlerSize); + CopyMem ( + (VOID *)(UINTN)(SMM_DEFAULT_SMBASE + SMM_HANDLER_OFFSET), + mFirstSmiHandler, + mFirstSmiHandlerSize + ); - Context = (VOID *)(UINTN)SMM_DEFAULT_SMBASE; + Context = (VOID *)(UINTN)SMM_DEFAULT_SMBASE; Context->ApicIdGate = MAX_UINT64; } @@ -184,25 +196,31 @@ SmbaseInstallFirstSmiHandler ( **/ EFI_STATUS SmbaseRelocate ( - IN APIC_ID ApicId, - IN UINTN Smbase, - IN UINT32 PenAddress + IN APIC_ID ApicId, + IN UINTN Smbase, + IN UINT32 PenAddress ) { - EFI_STATUS Status; - volatile UINT8 *SmmVacated; - volatile FIRST_SMI_HANDLER_CONTEXT *Context; - UINT64 ExchangeResult; + EFI_STATUS Status; + volatile UINT8 *SmmVacated; + volatile FIRST_SMI_HANDLER_CONTEXT *Context; + UINT64 ExchangeResult; if (Smbase > MAX_UINT32) { Status = EFI_INVALID_PARAMETER; - DEBUG ((DEBUG_ERROR, "%a: ApicId=" FMT_APIC_ID " Smbase=0x%Lx: %r\n", - __FUNCTION__, ApicId, (UINT64)Smbase, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: ApicId=" FMT_APIC_ID " Smbase=0x%Lx: %r\n", + __FUNCTION__, + ApicId, + (UINT64)Smbase, + Status + )); return Status; } SmmVacated = (UINT8 *)(UINTN)PenAddress + (EFI_PAGE_SIZE - 1); - Context = (VOID *)(UINTN)SMM_DEFAULT_SMBASE; + Context = (VOID *)(UINTN)SMM_DEFAULT_SMBASE; // // Clear AboutToLeaveSmm, so we notice when the hot-added CPU is just about @@ -261,12 +279,21 @@ SmbaseRelocate ( // // Un-gate SMBASE relocation for the hot-added CPU whose APIC ID is ApicId. // - ExchangeResult = InterlockedCompareExchange64 (&Context->ApicIdGate, - MAX_UINT64, ApicId); + ExchangeResult = InterlockedCompareExchange64 ( + &Context->ApicIdGate, + MAX_UINT64, + ApicId + ); if (ExchangeResult != MAX_UINT64) { Status = EFI_PROTOCOL_ERROR; - DEBUG ((DEBUG_ERROR, "%a: ApicId=" FMT_APIC_ID " ApicIdGate=0x%Lx: %r\n", - __FUNCTION__, ApicId, ExchangeResult, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: ApicId=" FMT_APIC_ID " ApicIdGate=0x%Lx: %r\n", + __FUNCTION__, + ApicId, + ExchangeResult, + Status + )); return Status; } diff --git a/OvmfPkg/CpuHotplugSmm/Smbase.h b/OvmfPkg/CpuHotplugSmm/Smbase.h index e73730d199..31ce2c86de 100644 --- a/OvmfPkg/CpuHotplugSmm/Smbase.h +++ b/OvmfPkg/CpuHotplugSmm/Smbase.h @@ -16,19 +16,19 @@ EFI_STATUS SmbaseAllocatePostSmmPen ( - OUT UINT32 *PenAddress, - IN CONST EFI_BOOT_SERVICES *BootServices + OUT UINT32 *PenAddress, + IN CONST EFI_BOOT_SERVICES *BootServices ); VOID SmbaseReinstallPostSmmPen ( - IN UINT32 PenAddress + IN UINT32 PenAddress ); VOID SmbaseReleasePostSmmPen ( - IN UINT32 PenAddress, - IN CONST EFI_BOOT_SERVICES *BootServices + IN UINT32 PenAddress, + IN CONST EFI_BOOT_SERVICES *BootServices ); VOID @@ -38,9 +38,9 @@ SmbaseInstallFirstSmiHandler ( EFI_STATUS SmbaseRelocate ( - IN APIC_ID ApicId, - IN UINTN Smbase, - IN UINT32 PenAddress + IN APIC_ID ApicId, + IN UINTN Smbase, + IN UINT32 PenAddress ); #endif // SMBASE_H_ diff --git a/OvmfPkg/CpuS3DataDxe/CpuS3Data.c b/OvmfPkg/CpuS3DataDxe/CpuS3Data.c index de20d87567..c192a09cf1 100644 --- a/OvmfPkg/CpuS3DataDxe/CpuS3Data.c +++ b/OvmfPkg/CpuS3DataDxe/CpuS3Data.c @@ -34,10 +34,10 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // Data structure used to allocate ACPI_CPU_DATA and its supporting structures // typedef struct { - ACPI_CPU_DATA AcpiCpuData; - MTRR_SETTINGS MtrrTable; - IA32_DESCRIPTOR GdtrProfile; - IA32_DESCRIPTOR IdtrProfile; + ACPI_CPU_DATA AcpiCpuData; + MTRR_SETTINGS MtrrTable; + IA32_DESCRIPTOR GdtrProfile; + IA32_DESCRIPTOR IdtrProfile; } ACPI_CPU_DATA_EX; /** @@ -57,12 +57,12 @@ AllocateAcpiNvsMemory ( EFI_STATUS Status; VOID *Buffer; - Status = gBS->AllocatePages ( - AllocateAnyPages, - EfiACPIMemoryNVS, - EFI_SIZE_TO_PAGES (Size), - &Address - ); + Status = gBS->AllocatePages ( + AllocateAnyPages, + EfiACPIMemoryNVS, + EFI_SIZE_TO_PAGES (Size), + &Address + ); if (EFI_ERROR (Status)) { return NULL; } @@ -86,7 +86,7 @@ AllocateZeroPages ( IN UINTN Size ) { - VOID *Buffer; + VOID *Buffer; Buffer = AllocatePages (EFI_SIZE_TO_PAGES (Size)); if (Buffer != NULL) { @@ -95,6 +95,7 @@ AllocateZeroPages ( return Buffer; } + /** Callback function executed when the EndOfDxe event group is signaled. @@ -110,20 +111,20 @@ CpuS3DataOnEndOfDxe ( OUT VOID *Context ) { - EFI_STATUS Status; - ACPI_CPU_DATA_EX *AcpiCpuDataEx; + EFI_STATUS Status; + ACPI_CPU_DATA_EX *AcpiCpuDataEx; - AcpiCpuDataEx = (ACPI_CPU_DATA_EX *) Context; + AcpiCpuDataEx = (ACPI_CPU_DATA_EX *)Context; // // Allocate a 4KB reserved page below 1MB // AcpiCpuDataEx->AcpiCpuData.StartupVector = BASE_1MB - 1; - Status = gBS->AllocatePages ( - AllocateMaxAddress, - EfiReservedMemoryType, - 1, - &AcpiCpuDataEx->AcpiCpuData.StartupVector - ); + Status = gBS->AllocatePages ( + AllocateMaxAddress, + EfiReservedMemoryType, + 1, + &AcpiCpuDataEx->AcpiCpuData.StartupVector + ); ASSERT_EFI_ERROR (Status); DEBUG ((DEBUG_VERBOSE, "%a\n", __FUNCTION__)); @@ -158,18 +159,18 @@ CpuS3DataInitialize ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - ACPI_CPU_DATA_EX *AcpiCpuDataEx; - ACPI_CPU_DATA *AcpiCpuData; - EFI_MP_SERVICES_PROTOCOL *MpServices; - UINTN NumberOfCpus; - VOID *Stack; - UINTN GdtSize; - UINTN IdtSize; - VOID *Gdt; - VOID *Idt; - EFI_EVENT Event; - ACPI_CPU_DATA *OldAcpiCpuData; + EFI_STATUS Status; + ACPI_CPU_DATA_EX *AcpiCpuDataEx; + ACPI_CPU_DATA *AcpiCpuData; + EFI_MP_SERVICES_PROTOCOL *MpServices; + UINTN NumberOfCpus; + VOID *Stack; + UINTN GdtSize; + UINTN IdtSize; + VOID *Gdt; + VOID *Idt; + EFI_EVENT Event; + ACPI_CPU_DATA *OldAcpiCpuData; if (!PcdGetBool (PcdAcpiS3Enable)) { return EFI_UNSUPPORTED; @@ -178,7 +179,7 @@ CpuS3DataInitialize ( // // Set PcdCpuS3DataAddress to the base address of the ACPI_CPU_DATA structure // - OldAcpiCpuData = (ACPI_CPU_DATA *) (UINTN) PcdGet64 (PcdCpuS3DataAddress); + OldAcpiCpuData = (ACPI_CPU_DATA *)(UINTN)PcdGet64 (PcdCpuS3DataAddress); AcpiCpuDataEx = AllocateZeroPages (sizeof (ACPI_CPU_DATA_EX)); ASSERT (AcpiCpuDataEx != NULL); @@ -187,7 +188,7 @@ CpuS3DataInitialize ( if (PcdGetBool (PcdQ35SmramAtDefaultSmbase)) { NumberOfCpus = PcdGet32 (PcdCpuMaxLogicalProcessorNumber); } else { - UINTN NumberOfEnabledProcessors; + UINTN NumberOfEnabledProcessors; // // Get MP Services Protocol @@ -209,6 +210,7 @@ CpuS3DataInitialize ( ); ASSERT_EFI_ERROR (Status); } + AcpiCpuData->NumberOfCpus = (UINT32)NumberOfCpus; // @@ -217,9 +219,9 @@ CpuS3DataInitialize ( AcpiCpuData->StackSize = PcdGet32 (PcdCpuApStackSize); AcpiCpuData->ApMachineCheckHandlerBase = 0; AcpiCpuData->ApMachineCheckHandlerSize = 0; - AcpiCpuData->GdtrProfile = (EFI_PHYSICAL_ADDRESS)(UINTN)&AcpiCpuDataEx->GdtrProfile; - AcpiCpuData->IdtrProfile = (EFI_PHYSICAL_ADDRESS)(UINTN)&AcpiCpuDataEx->IdtrProfile; - AcpiCpuData->MtrrTable = (EFI_PHYSICAL_ADDRESS)(UINTN)&AcpiCpuDataEx->MtrrTable; + AcpiCpuData->GdtrProfile = (EFI_PHYSICAL_ADDRESS)(UINTN)&AcpiCpuDataEx->GdtrProfile; + AcpiCpuData->IdtrProfile = (EFI_PHYSICAL_ADDRESS)(UINTN)&AcpiCpuDataEx->IdtrProfile; + AcpiCpuData->MtrrTable = (EFI_PHYSICAL_ADDRESS)(UINTN)&AcpiCpuDataEx->MtrrTable; // // Allocate stack space for all CPUs. @@ -243,7 +245,7 @@ CpuS3DataInitialize ( // GdtSize = AcpiCpuDataEx->GdtrProfile.Limit + 1; IdtSize = AcpiCpuDataEx->IdtrProfile.Limit + 1; - Gdt = AllocateZeroPages (GdtSize + IdtSize); + Gdt = AllocateZeroPages (GdtSize + IdtSize); ASSERT (Gdt != NULL); Idt = (VOID *)((UINTN)Gdt + GdtSize); CopyMem (Gdt, (VOID *)AcpiCpuDataEx->GdtrProfile.Base, GdtSize); diff --git a/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.c b/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.c index 24d945b2eb..35a4a24f34 100644 --- a/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.c +++ b/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.c @@ -12,7 +12,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // // EFI Driver Binding Protocol Instance // -EFI_DRIVER_BINDING_PROTOCOL gBiosVideoDriverBinding = { +EFI_DRIVER_BINDING_PROTOCOL gBiosVideoDriverBinding = { BiosVideoDriverBindingSupported, BiosVideoDriverBindingStart, BiosVideoDriverBindingStop, @@ -24,17 +24,17 @@ EFI_DRIVER_BINDING_PROTOCOL gBiosVideoDriverBinding = { // // Global lookup tables for VGA graphics modes // -UINT8 mVgaLeftMaskTable[] = { 0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01 }; +UINT8 mVgaLeftMaskTable[] = { 0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01 }; -UINT8 mVgaRightMaskTable[] = { 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff }; +UINT8 mVgaRightMaskTable[] = { 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff }; -UINT8 mVgaBitMaskTable[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; +UINT8 mVgaBitMaskTable[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; // // Save controller attributes during first start // -UINT64 mOriginalPciAttributes; -BOOLEAN mPciAttributesSaved = FALSE; +UINT64 mOriginalPciAttributes; +BOOLEAN mPciAttributesSaved = FALSE; EFI_GRAPHICS_OUTPUT_BLT_PIXEL mVgaColorToGraphicsOutputColor[] = { { 0x00, 0x00, 0x00, 0x00 }, @@ -58,33 +58,33 @@ EFI_GRAPHICS_OUTPUT_BLT_PIXEL mVgaColorToGraphicsOutputColor[] = { // // Standard timing defined by VESA EDID // -VESA_BIOS_EXTENSIONS_EDID_TIMING mEstablishedEdidTiming[] = { +VESA_BIOS_EXTENSIONS_EDID_TIMING mEstablishedEdidTiming[] = { // // Established Timing I // - {800, 600, 60}, - {800, 600, 56}, - {640, 480, 75}, - {640, 480, 72}, - {640, 480, 67}, - {640, 480, 60}, - {720, 400, 88}, - {720, 400, 70}, + { 800, 600, 60 }, + { 800, 600, 56 }, + { 640, 480, 75 }, + { 640, 480, 72 }, + { 640, 480, 67 }, + { 640, 480, 60 }, + { 720, 400, 88 }, + { 720, 400, 70 }, // // Established Timing II // - {1280, 1024, 75}, - {1024, 768, 75}, - {1024, 768, 70}, - {1024, 768, 60}, - {1024, 768, 87}, - {832, 624, 75}, - {800, 600, 75}, - {800, 600, 72}, + { 1280, 1024, 75 }, + { 1024, 768, 75 }, + { 1024, 768, 70 }, + { 1024, 768, 60 }, + { 1024, 768, 87 }, + { 832, 624, 75 }, + { 800, 600, 75 }, + { 800, 600, 72 }, // // Established Timing III // - {1152, 870, 75} + { 1152, 870, 75 } }; /** @@ -117,7 +117,7 @@ BiosVideoDriverBindingSupported ( // // See if the Legacy BIOS Protocol is available // - Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios); + Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **)&LegacyBios); if (EFI_ERROR (Status)) { return Status; } @@ -128,7 +128,7 @@ BiosVideoDriverBindingSupported ( Status = gBS->OpenProtocol ( Controller, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo, + (VOID **)&PciIo, This->DriverBindingHandle, Controller, EFI_OPEN_PROTOCOL_BY_DRIVER @@ -154,6 +154,7 @@ BiosVideoDriverBindingSupported ( return EFI_ALREADY_STARTED; } } + // // See if this is a PCI Graphics Controller by looking at the Command register and // Class Code Register @@ -171,15 +172,14 @@ BiosVideoDriverBindingSupported ( } Status = EFI_UNSUPPORTED; - if (Pci.Hdr.ClassCode[2] == 0x03 || (Pci.Hdr.ClassCode[2] == 0x00 && Pci.Hdr.ClassCode[1] == 0x01)) { - + if ((Pci.Hdr.ClassCode[2] == 0x03) || ((Pci.Hdr.ClassCode[2] == 0x00) && (Pci.Hdr.ClassCode[1] == 0x01))) { Status = EFI_SUCCESS; // // If this is a graphics controller, // go further check RemainingDevicePath validation // if (RemainingDevicePath != NULL) { - Node = (EFI_DEV_PATH *) RemainingDevicePath; + Node = (EFI_DEV_PATH *)RemainingDevicePath; // // Check if RemainingDevicePath is the End of Device Path Node, // if yes, return EFI_SUCCESS @@ -189,9 +189,10 @@ BiosVideoDriverBindingSupported ( // If RemainingDevicePath isn't the End of Device Path Node, // check its validation // - if (Node->DevPath.Type != ACPI_DEVICE_PATH || - Node->DevPath.SubType != ACPI_ADR_DP || - DevicePathNodeLength(&Node->DevPath) < sizeof(ACPI_ADR_DEVICE_PATH)) { + if ((Node->DevPath.Type != ACPI_DEVICE_PATH) || + (Node->DevPath.SubType != ACPI_ADR_DP) || + (DevicePathNodeLength (&Node->DevPath) < sizeof (ACPI_ADR_DEVICE_PATH))) + { Status = EFI_UNSUPPORTED; } } @@ -209,7 +210,6 @@ Done: return Status; } - /** Install Graphics Output Protocol onto VGA device handles. @@ -246,7 +246,7 @@ BiosVideoDriverBindingStart ( // // See if the Legacy BIOS Protocol is available // - Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios); + Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **)&LegacyBios); if (EFI_ERROR (Status)) { return Status; } @@ -257,7 +257,7 @@ BiosVideoDriverBindingStart ( Status = gBS->HandleProtocol ( Controller, &gEfiDevicePathProtocolGuid, - (VOID **) &ParentDevicePath + (VOID **)&ParentDevicePath ); if (EFI_ERROR (Status)) { return Status; @@ -269,7 +269,7 @@ BiosVideoDriverBindingStart ( Status = gBS->OpenProtocol ( Controller, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo, + (VOID **)&PciIo, This->DriverBindingHandle, Controller, EFI_OPEN_PROTOCOL_BY_DRIVER @@ -292,6 +292,7 @@ BiosVideoDriverBindingStart ( if (EFI_ERROR (Status)) { goto Done; } + mPciAttributesSaved = TRUE; } @@ -309,7 +310,7 @@ BiosVideoDriverBindingStart ( } Supports &= (UINT64)(EFI_PCI_IO_ATTRIBUTE_VGA_IO | EFI_PCI_IO_ATTRIBUTE_VGA_IO_16); - if (Supports == 0 || Supports == (EFI_PCI_IO_ATTRIBUTE_VGA_IO | EFI_PCI_IO_ATTRIBUTE_VGA_IO_16)) { + if ((Supports == 0) || (Supports == (EFI_PCI_IO_ATTRIBUTE_VGA_IO | EFI_PCI_IO_ATTRIBUTE_VGA_IO_16))) { Status = EFI_UNSUPPORTED; goto Done; } @@ -323,11 +324,11 @@ BiosVideoDriverBindingStart ( // Enable the device and make sure VGA cycles are being forwarded to this VGA device // Status = PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationEnable, - EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY | Supports, - NULL - ); + PciIo, + EfiPciIoAttributeOperationEnable, + EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY | Supports, + NULL + ); if (EFI_ERROR (Status)) { REPORT_STATUS_CODE_WITH_DEVICE_PATH ( EFI_ERROR_CODE | EFI_ERROR_MINOR, @@ -336,6 +337,7 @@ BiosVideoDriverBindingStart ( ); goto Done; } + // // Check to see if there is a legacy option ROM image associated with this PCI device // @@ -349,6 +351,7 @@ BiosVideoDriverBindingStart ( if (EFI_ERROR (Status)) { goto Done; } + // // Post the legacy option ROM if it is available. // @@ -378,7 +381,8 @@ BiosVideoDriverBindingStart ( if (RemainingDevicePath != NULL) { if (IsDevicePathEnd (RemainingDevicePath) && - (FeaturePcdGet (PcdBiosVideoCheckVbeEnable) || FeaturePcdGet (PcdBiosVideoCheckVgaEnable))) { + (FeaturePcdGet (PcdBiosVideoCheckVbeEnable) || FeaturePcdGet (PcdBiosVideoCheckVgaEnable))) + { // // If RemainingDevicePath is the End of Device Path Node, // don't create any child device and return EFI_SUCCESS @@ -418,13 +422,14 @@ Done: // Restore original PCI attributes // PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationSet, - mOriginalPciAttributes, - NULL - ); + PciIo, + EfiPciIoAttributeOperationSet, + mOriginalPciAttributes, + NULL + ); } } + // // Release PCI I/O Protocols on the controller handle. // @@ -439,7 +444,6 @@ Done: return Status; } - /** Stop. @@ -455,16 +459,16 @@ Done: EFI_STATUS EFIAPI BiosVideoDriverBindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) { - EFI_STATUS Status; - BOOLEAN AllChildrenStopped; - UINTN Index; - EFI_PCI_IO_PROTOCOL *PciIo; + EFI_STATUS Status; + BOOLEAN AllChildrenStopped; + UINTN Index; + EFI_PCI_IO_PROTOCOL *PciIo; AllChildrenStopped = TRUE; @@ -499,7 +503,7 @@ BiosVideoDriverBindingStop ( Status = gBS->HandleProtocol ( Controller, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); ASSERT_EFI_ERROR (Status); @@ -516,11 +520,9 @@ BiosVideoDriverBindingStop ( } } - return EFI_SUCCESS; } - /** Install child handles if the Handle supports MBR format. @@ -545,18 +547,18 @@ BiosVideoChildHandleInstall ( IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - BIOS_VIDEO_DEV *BiosVideoPrivate; - PCI_TYPE00 Pci; - ACPI_ADR_DEVICE_PATH AcpiDeviceNode; - BOOLEAN ProtocolInstalled; + EFI_STATUS Status; + BIOS_VIDEO_DEV *BiosVideoPrivate; + PCI_TYPE00 Pci; + ACPI_ADR_DEVICE_PATH AcpiDeviceNode; + BOOLEAN ProtocolInstalled; // // Allocate the private device structure for video device // - BiosVideoPrivate = (BIOS_VIDEO_DEV *) AllocateZeroPool ( - sizeof (BIOS_VIDEO_DEV) - ); + BiosVideoPrivate = (BIOS_VIDEO_DEV *)AllocateZeroPool ( + sizeof (BIOS_VIDEO_DEV) + ); if (NULL == BiosVideoPrivate) { Status = EFI_OUT_OF_RESOURCES; goto Done; @@ -566,12 +568,12 @@ BiosVideoChildHandleInstall ( // See if this is a VGA compatible controller or not // Status = ParentPciIo->Pci.Read ( - ParentPciIo, - EfiPciIoWidthUint32, - 0, - sizeof (Pci) / sizeof (UINT32), - &Pci - ); + ParentPciIo, + EfiPciIoWidthUint32, + 0, + sizeof (Pci) / sizeof (UINT32), + &Pci + ); if (EFI_ERROR (Status)) { REPORT_STATUS_CODE_WITH_DEVICE_PATH ( EFI_ERROR_CODE | EFI_ERROR_MINOR, @@ -580,16 +582,17 @@ BiosVideoChildHandleInstall ( ); goto Done; } + BiosVideoPrivate->VgaCompatible = FALSE; - if (Pci.Hdr.ClassCode[2] == 0x00 && Pci.Hdr.ClassCode[1] == 0x01) { + if ((Pci.Hdr.ClassCode[2] == 0x00) && (Pci.Hdr.ClassCode[1] == 0x01)) { BiosVideoPrivate->VgaCompatible = TRUE; } - if (Pci.Hdr.ClassCode[2] == 0x03 && Pci.Hdr.ClassCode[1] == 0x00 && Pci.Hdr.ClassCode[0] == 0x00) { + if ((Pci.Hdr.ClassCode[2] == 0x03) && (Pci.Hdr.ClassCode[1] == 0x00) && (Pci.Hdr.ClassCode[0] == 0x00)) { BiosVideoPrivate->VgaCompatible = TRUE; } - if (PcdGetBool (PcdBiosVideoSetTextVgaModeEnable)) { + if (PcdGetBool (PcdBiosVideoSetTextVgaModeEnable)) { // // Create EXIT_BOOT_SERIVES Event // @@ -626,21 +629,20 @@ BiosVideoChildHandleInstall ( BiosVideoPrivate->GraphicsOutput.QueryMode = BiosVideoGraphicsOutputQueryMode; BiosVideoPrivate->GraphicsOutput.SetMode = BiosVideoGraphicsOutputSetMode; - // // Allocate buffer for Graphics Output Protocol mode information // - BiosVideoPrivate->GraphicsOutput.Mode = (EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *) AllocatePool ( - sizeof (EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE) - ); + BiosVideoPrivate->GraphicsOutput.Mode = (EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *)AllocatePool ( + sizeof (EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE) + ); if (NULL == BiosVideoPrivate->GraphicsOutput.Mode) { Status = EFI_OUT_OF_RESOURCES; goto Done; } - BiosVideoPrivate->GraphicsOutput.Mode->Info = (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *) AllocatePool ( - sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION) - ); + BiosVideoPrivate->GraphicsOutput.Mode->Info = (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *)AllocatePool ( + sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION) + ); if (NULL == BiosVideoPrivate->GraphicsOutput.Mode->Info) { Status = EFI_OUT_OF_RESOURCES; goto Done; @@ -657,14 +659,14 @@ BiosVideoChildHandleInstall ( if ((RemainingDevicePath == NULL) || (!IsDevicePathEnd (RemainingDevicePath))) { if (RemainingDevicePath == NULL) { ZeroMem (&AcpiDeviceNode, sizeof (ACPI_ADR_DEVICE_PATH)); - AcpiDeviceNode.Header.Type = ACPI_DEVICE_PATH; + AcpiDeviceNode.Header.Type = ACPI_DEVICE_PATH; AcpiDeviceNode.Header.SubType = ACPI_ADR_DP; - AcpiDeviceNode.ADR = ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_VGA, 0, 0); + AcpiDeviceNode.ADR = ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_VGA, 0, 0); SetDevicePathNodeLength (&AcpiDeviceNode.Header, sizeof (ACPI_ADR_DEVICE_PATH)); BiosVideoPrivate->GopDevicePath = AppendDevicePathNode ( ParentDevicePath, - (EFI_DEVICE_PATH_PROTOCOL *) &AcpiDeviceNode + (EFI_DEVICE_PATH_PROTOCOL *)&AcpiDeviceNode ); } else { BiosVideoPrivate->GopDevicePath = AppendDevicePathNode (ParentDevicePath, RemainingDevicePath); @@ -674,12 +676,12 @@ BiosVideoChildHandleInstall ( // Creat child handle and device path protocol firstly // BiosVideoPrivate->Handle = NULL; - Status = gBS->InstallMultipleProtocolInterfaces ( - &BiosVideoPrivate->Handle, - &gEfiDevicePathProtocolGuid, - BiosVideoPrivate->GopDevicePath, - NULL - ); + Status = gBS->InstallMultipleProtocolInterfaces ( + &BiosVideoPrivate->Handle, + &gEfiDevicePathProtocolGuid, + BiosVideoPrivate->GopDevicePath, + NULL + ); if (EFI_ERROR (Status)) { goto Done; } @@ -704,7 +706,7 @@ BiosVideoChildHandleInstall ( // // When check for VBE, PCI I/O protocol is needed, so use parent's protocol interface temporally // - BiosVideoPrivate->PciIo = ParentPciIo; + BiosVideoPrivate->PciIo = ParentPciIo; // // Check for VESA BIOS Extensions for modes that are compatible with Graphics Output @@ -715,6 +717,7 @@ BiosVideoChildHandleInstall ( } else { Status = EFI_UNSUPPORTED; } + if (EFI_ERROR (Status)) { // // The VESA BIOS Extensions are not compatible with Graphics Output, so check for support @@ -740,6 +743,7 @@ BiosVideoChildHandleInstall ( FreePool (BiosVideoPrivate->GraphicsOutput.Mode->Info); BiosVideoPrivate->GraphicsOutput.Mode->Info = NULL; } + FreePool (BiosVideoPrivate->GraphicsOutput.Mode); BiosVideoPrivate->GraphicsOutput.Mode = NULL; } @@ -781,7 +785,7 @@ BiosVideoChildHandleInstall ( Status = gBS->OpenProtocol ( ParentHandle, &gEfiPciIoProtocolGuid, - (VOID **) &BiosVideoPrivate->PciIo, + (VOID **)&BiosVideoPrivate->PciIo, This->DriverBindingHandle, BiosVideoPrivate->Handle, EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER @@ -789,6 +793,7 @@ BiosVideoChildHandleInstall ( if (EFI_ERROR (Status)) { goto Done; } + ProtocolInstalled = TRUE; } } @@ -810,6 +815,7 @@ Done: if ((BiosVideoPrivate != NULL) && (BiosVideoPrivate->ExitBootServicesEvent != NULL)) { gBS->CloseEvent (BiosVideoPrivate->ExitBootServicesEvent); } + // // Free private data structure // @@ -819,7 +825,6 @@ Done: return Status; } - /** Deregister an video child handle and free resources. @@ -832,17 +837,17 @@ Done: **/ EFI_STATUS BiosVideoChildHandleUninstall ( - EFI_DRIVER_BINDING_PROTOCOL *This, - EFI_HANDLE Controller, - EFI_HANDLE Handle + EFI_DRIVER_BINDING_PROTOCOL *This, + EFI_HANDLE Controller, + EFI_HANDLE Handle ) { - EFI_STATUS Status; - EFI_IA32_REGISTER_SET Regs; - EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; - EFI_VGA_MINI_PORT_PROTOCOL *VgaMiniPort; - BIOS_VIDEO_DEV *BiosVideoPrivate; - EFI_PCI_IO_PROTOCOL *PciIo; + EFI_STATUS Status; + EFI_IA32_REGISTER_SET Regs; + EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; + EFI_VGA_MINI_PORT_PROTOCOL *VgaMiniPort; + BIOS_VIDEO_DEV *BiosVideoPrivate; + EFI_PCI_IO_PROTOCOL *PciIo; BiosVideoPrivate = NULL; GraphicsOutput = NULL; @@ -852,24 +857,24 @@ BiosVideoChildHandleUninstall ( Status = gBS->OpenProtocol ( Handle, &gEfiGraphicsOutputProtocolGuid, - (VOID **) &GraphicsOutput, + (VOID **)&GraphicsOutput, This->DriverBindingHandle, Handle, EFI_OPEN_PROTOCOL_GET_PROTOCOL ); if (!EFI_ERROR (Status)) { - BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_GRAPHICS_OUTPUT_THIS (GraphicsOutput); + BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_GRAPHICS_OUTPUT_THIS (GraphicsOutput); } if (EFI_ERROR (Status)) { Status = gBS->OpenProtocol ( - Handle, - &gEfiVgaMiniPortProtocolGuid, - (VOID **) &VgaMiniPort, - This->DriverBindingHandle, - Handle, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); + Handle, + &gEfiVgaMiniPortProtocolGuid, + (VOID **)&VgaMiniPort, + This->DriverBindingHandle, + Handle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); if (!EFI_ERROR (Status)) { BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_VGA_MINI_PORT_THIS (VgaMiniPort); } @@ -918,6 +923,7 @@ BiosVideoChildHandleUninstall ( NULL ); } + if (!BiosVideoPrivate->ProduceGraphicsOutput) { Status = gBS->UninstallMultipleProtocolInterfaces ( Controller, @@ -931,7 +937,7 @@ BiosVideoChildHandleUninstall ( gBS->OpenProtocol ( Controller, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo, + (VOID **)&PciIo, This->DriverBindingHandle, Handle, EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER @@ -954,7 +960,6 @@ BiosVideoChildHandleUninstall ( return EFI_SUCCESS; } - /** Release resource for biso video instance. @@ -967,7 +972,7 @@ BiosVideoDeviceReleaseResource ( ) { if (BiosVideoPrivate == NULL) { - return ; + return; } // @@ -980,24 +985,28 @@ BiosVideoDeviceReleaseResource ( if (BiosVideoPrivate->VgaFrameBuffer != NULL) { FreePool (BiosVideoPrivate->VgaFrameBuffer); } + // // Free VBE Frame Buffer // if (BiosVideoPrivate->VbeFrameBuffer != NULL) { FreePool (BiosVideoPrivate->VbeFrameBuffer); } + // // Free line buffer // if (BiosVideoPrivate->LineBuffer != NULL) { FreePool (BiosVideoPrivate->LineBuffer); } + // // Free mode data // if (BiosVideoPrivate->ModeData != NULL) { FreePool (BiosVideoPrivate->ModeData); } + // // Free memory allocated below 1MB // @@ -1014,18 +1023,21 @@ BiosVideoDeviceReleaseResource ( // if (BiosVideoPrivate->GraphicsOutput.Mode != NULL) { if (BiosVideoPrivate->GraphicsOutput.Mode->Info != NULL) { - FreePool (BiosVideoPrivate->GraphicsOutput.Mode->Info); - BiosVideoPrivate->GraphicsOutput.Mode->Info = NULL; + FreePool (BiosVideoPrivate->GraphicsOutput.Mode->Info); + BiosVideoPrivate->GraphicsOutput.Mode->Info = NULL; } + FreePool (BiosVideoPrivate->GraphicsOutput.Mode); BiosVideoPrivate->GraphicsOutput.Mode = NULL; } + // // Free EDID discovered protocol occupied resource // if (BiosVideoPrivate->EdidDiscovered.Edid != NULL) { FreePool (BiosVideoPrivate->EdidDiscovered.Edid); } + // // Free EDID active protocol occupied resource // @@ -1033,16 +1045,15 @@ BiosVideoDeviceReleaseResource ( FreePool (BiosVideoPrivate->EdidActive.Edid); } - if (BiosVideoPrivate->GopDevicePath!= NULL) { + if (BiosVideoPrivate->GopDevicePath != NULL) { FreePool (BiosVideoPrivate->GopDevicePath); } FreePool (BiosVideoPrivate); - return ; + return; } - /** Generate a search key for a specified timing data. @@ -1053,10 +1064,10 @@ BiosVideoDeviceReleaseResource ( **/ UINT32 CalculateEdidKey ( - VESA_BIOS_EXTENSIONS_EDID_TIMING *EdidTiming + VESA_BIOS_EXTENSIONS_EDID_TIMING *EdidTiming ) { - UINT32 Key; + UINT32 Key; // // Be sure no conflicts for all standard timing defined by VESA. @@ -1065,7 +1076,6 @@ CalculateEdidKey ( return Key; } - /** Parse the Established Timing and Standard Timing in EDID data block. @@ -1078,31 +1088,32 @@ CalculateEdidKey ( **/ BOOLEAN ParseEdidData ( - UINT8 *EdidBuffer, - VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING *ValidEdidTiming + UINT8 *EdidBuffer, + VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING *ValidEdidTiming ) { - UINT8 CheckSum; - UINT32 Index; - UINT32 ValidNumber; - UINT32 TimingBits; - UINT8 *BufferIndex; - UINT16 HorizontalResolution; - UINT16 VerticalResolution; - UINT8 AspectRatio; - UINT8 RefreshRate; - VESA_BIOS_EXTENSIONS_EDID_TIMING TempTiming; - VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK *EdidDataBlock; + UINT8 CheckSum; + UINT32 Index; + UINT32 ValidNumber; + UINT32 TimingBits; + UINT8 *BufferIndex; + UINT16 HorizontalResolution; + UINT16 VerticalResolution; + UINT8 AspectRatio; + UINT8 RefreshRate; + VESA_BIOS_EXTENSIONS_EDID_TIMING TempTiming; + VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK *EdidDataBlock; - EdidDataBlock = (VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK *) EdidBuffer; + EdidDataBlock = (VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK *)EdidBuffer; // // Check the checksum of EDID data // CheckSum = 0; - for (Index = 0; Index < VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE; Index ++) { - CheckSum = (UINT8) (CheckSum + EdidBuffer[Index]); + for (Index = 0; Index < VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE; Index++) { + CheckSum = (UINT8)(CheckSum + EdidBuffer[Index]); } + if (CheckSum != 0) { return FALSE; } @@ -1113,20 +1124,26 @@ ParseEdidData ( if ((EdidDataBlock->EstablishedTimings[0] != 0) || (EdidDataBlock->EstablishedTimings[1] != 0) || (EdidDataBlock->EstablishedTimings[2] != 0) - ) { + ) + { // // Established timing data // TimingBits = EdidDataBlock->EstablishedTimings[0] | (EdidDataBlock->EstablishedTimings[1] << 8) | - ((EdidDataBlock->EstablishedTimings[2] & 0x80) << 9) ; - for (Index = 0; Index < VESA_BIOS_EXTENSIONS_EDID_ESTABLISHED_TIMING_MAX_NUMBER; Index ++) { + ((EdidDataBlock->EstablishedTimings[2] & 0x80) << 9); + for (Index = 0; Index < VESA_BIOS_EXTENSIONS_EDID_ESTABLISHED_TIMING_MAX_NUMBER; Index++) { if ((TimingBits & 0x1) != 0) { - DEBUG ((DEBUG_INFO, "Established Timing: %d x %d\n", - mEstablishedEdidTiming[Index].HorizontalResolution, mEstablishedEdidTiming[Index].VerticalResolution)); + DEBUG (( + DEBUG_INFO, + "Established Timing: %d x %d\n", + mEstablishedEdidTiming[Index].HorizontalResolution, + mEstablishedEdidTiming[Index].VerticalResolution + )); ValidEdidTiming->Key[ValidNumber] = CalculateEdidKey (&mEstablishedEdidTiming[Index]); - ValidNumber ++; + ValidNumber++; } + TimingBits = TimingBits >> 1; } } @@ -1135,42 +1152,44 @@ ParseEdidData ( // Parse the standard timing data // BufferIndex = &EdidDataBlock->StandardTimingIdentification[0]; - for (Index = 0; Index < 8; Index ++) { + for (Index = 0; Index < 8; Index++) { // // Check if this is a valid Standard Timing entry // VESA documents unused fields should be set to 01h // - if ((BufferIndex[0] != 0x1) && (BufferIndex[1] != 0x1)){ + if ((BufferIndex[0] != 0x1) && (BufferIndex[1] != 0x1)) { // // A valid Standard Timing // - HorizontalResolution = (UINT16) (BufferIndex[0] * 8 + 248); - AspectRatio = (UINT8) (BufferIndex[1] >> 6); + HorizontalResolution = (UINT16)(BufferIndex[0] * 8 + 248); + AspectRatio = (UINT8)(BufferIndex[1] >> 6); switch (AspectRatio) { case 0: - VerticalResolution = (UINT16) (HorizontalResolution / 16 * 10); + VerticalResolution = (UINT16)(HorizontalResolution / 16 * 10); break; case 1: - VerticalResolution = (UINT16) (HorizontalResolution / 4 * 3); + VerticalResolution = (UINT16)(HorizontalResolution / 4 * 3); break; case 2: - VerticalResolution = (UINT16) (HorizontalResolution / 5 * 4); + VerticalResolution = (UINT16)(HorizontalResolution / 5 * 4); break; case 3: - VerticalResolution = (UINT16) (HorizontalResolution / 16 * 9); + VerticalResolution = (UINT16)(HorizontalResolution / 16 * 9); break; default: - VerticalResolution = (UINT16) (HorizontalResolution / 4 * 3); + VerticalResolution = (UINT16)(HorizontalResolution / 4 * 3); break; } - RefreshRate = (UINT8) ((BufferIndex[1] & 0x1f) + 60); + + RefreshRate = (UINT8)((BufferIndex[1] & 0x1f) + 60); DEBUG ((DEBUG_INFO, "Standard Timing: %d x %d\n", HorizontalResolution, VerticalResolution)); - TempTiming.HorizontalResolution = HorizontalResolution; - TempTiming.VerticalResolution = VerticalResolution; - TempTiming.RefreshRate = RefreshRate; + TempTiming.HorizontalResolution = HorizontalResolution; + TempTiming.VerticalResolution = VerticalResolution; + TempTiming.RefreshRate = RefreshRate; ValidEdidTiming->Key[ValidNumber] = CalculateEdidKey (&TempTiming); - ValidNumber ++; + ValidNumber++; } + BufferIndex += 2; } @@ -1178,7 +1197,7 @@ ParseEdidData ( // Parse the Detailed Timing data // BufferIndex = &EdidDataBlock->DetailedTimingDescriptions[0]; - for (Index = 0; Index < 4; Index ++, BufferIndex += VESA_BIOS_EXTENSIONS_DETAILED_TIMING_EACH_DESCRIPTOR_SIZE) { + for (Index = 0; Index < 4; Index++, BufferIndex += VESA_BIOS_EXTENSIONS_DETAILED_TIMING_EACH_DESCRIPTOR_SIZE) { if ((BufferIndex[0] == 0x0) && (BufferIndex[1] == 0x0)) { // // Check if this is a valid Detailed Timing Descriptor @@ -1186,22 +1205,27 @@ ParseEdidData ( // continue; } + // // Calculate Horizontal and Vertical resolution // TempTiming.HorizontalResolution = ((UINT16)(BufferIndex[4] & 0xF0) << 4) | (BufferIndex[2]); - TempTiming.VerticalResolution = ((UINT16)(BufferIndex[7] & 0xF0) << 4) | (BufferIndex[5]); - DEBUG ((DEBUG_INFO, "Detailed Timing %d: %d x %d\n", - Index, TempTiming.HorizontalResolution, TempTiming.VerticalResolution)); + TempTiming.VerticalResolution = ((UINT16)(BufferIndex[7] & 0xF0) << 4) | (BufferIndex[5]); + DEBUG (( + DEBUG_INFO, + "Detailed Timing %d: %d x %d\n", + Index, + TempTiming.HorizontalResolution, + TempTiming.VerticalResolution + )); ValidEdidTiming->Key[ValidNumber] = CalculateEdidKey (&TempTiming); - ValidNumber ++; + ValidNumber++; } ValidEdidTiming->ValidNumber = ValidNumber; return TRUE; } - /** Search a specified Timing in all the valid EDID timings. @@ -1214,16 +1238,16 @@ ParseEdidData ( **/ BOOLEAN SearchEdidTiming ( - VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING *ValidEdidTiming, - VESA_BIOS_EXTENSIONS_EDID_TIMING *EdidTiming + VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING *ValidEdidTiming, + VESA_BIOS_EXTENSIONS_EDID_TIMING *EdidTiming ) { - UINT32 Index; - UINT32 Key; + UINT32 Index; + UINT32 Key; Key = CalculateEdidKey (EdidTiming); - for (Index = 0; Index < ValidEdidTiming->ValidNumber; Index ++) { + for (Index = 0; Index < ValidEdidTiming->ValidNumber; Index++) { if (Key == ValidEdidTiming->Key[Index]) { return TRUE; } @@ -1281,34 +1305,34 @@ BiosVideoCheckForVbe ( IN OUT BIOS_VIDEO_DEV *BiosVideoPrivate ) { - EFI_STATUS Status; - EFI_IA32_REGISTER_SET Regs; - UINT16 *ModeNumberPtr; - UINT16 VbeModeNumber; - BOOLEAN ModeFound; - BOOLEAN EdidFound; - BIOS_VIDEO_MODE_DATA *ModeBuffer; - BIOS_VIDEO_MODE_DATA *CurrentModeData; - UINTN PreferMode; - UINTN ModeNumber; - VESA_BIOS_EXTENSIONS_EDID_TIMING Timing; - VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING ValidEdidTiming; - EFI_EDID_OVERRIDE_PROTOCOL *EdidOverride; - UINT32 EdidAttributes; - BOOLEAN EdidOverrideFound; - UINTN EdidOverrideDataSize; - UINT8 *EdidOverrideDataBlock; - UINTN EdidActiveDataSize; - UINT8 *EdidActiveDataBlock; - UINT32 HighestHorizontalResolution; - UINT32 HighestVerticalResolution; - UINTN HighestResolutionMode; - - EdidFound = TRUE; - EdidOverrideFound = FALSE; - EdidOverrideDataBlock = NULL; - EdidActiveDataSize = 0; - EdidActiveDataBlock = NULL; + EFI_STATUS Status; + EFI_IA32_REGISTER_SET Regs; + UINT16 *ModeNumberPtr; + UINT16 VbeModeNumber; + BOOLEAN ModeFound; + BOOLEAN EdidFound; + BIOS_VIDEO_MODE_DATA *ModeBuffer; + BIOS_VIDEO_MODE_DATA *CurrentModeData; + UINTN PreferMode; + UINTN ModeNumber; + VESA_BIOS_EXTENSIONS_EDID_TIMING Timing; + VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING ValidEdidTiming; + EFI_EDID_OVERRIDE_PROTOCOL *EdidOverride; + UINT32 EdidAttributes; + BOOLEAN EdidOverrideFound; + UINTN EdidOverrideDataSize; + UINT8 *EdidOverrideDataBlock; + UINTN EdidActiveDataSize; + UINT8 *EdidActiveDataBlock; + UINT32 HighestHorizontalResolution; + UINT32 HighestVerticalResolution; + UINTN HighestResolutionMode; + + EdidFound = TRUE; + EdidOverrideFound = FALSE; + EdidOverrideDataBlock = NULL; + EdidActiveDataSize = 0; + EdidActiveDataBlock = NULL; HighestHorizontalResolution = 0; HighestVerticalResolution = 0; HighestResolutionMode = 0; @@ -1340,12 +1364,12 @@ BiosVideoCheckForVbe ( // // Fill in the VBE related data structures // - BiosVideoPrivate->VbeInformationBlock = (VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK *) (UINTN) (BiosVideoPrivate->PagesBelow1MB); - BiosVideoPrivate->VbeModeInformationBlock = (VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK *) (BiosVideoPrivate->VbeInformationBlock + 1); - BiosVideoPrivate->VbeEdidDataBlock = (VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK *) (BiosVideoPrivate->VbeModeInformationBlock + 1); - BiosVideoPrivate->VbeCrtcInformationBlock = (VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK *) (BiosVideoPrivate->VbeEdidDataBlock + 1); - BiosVideoPrivate->VbeSaveRestorePages = 0; - BiosVideoPrivate->VbeSaveRestoreBuffer = 0; + BiosVideoPrivate->VbeInformationBlock = (VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK *)(UINTN)(BiosVideoPrivate->PagesBelow1MB); + BiosVideoPrivate->VbeModeInformationBlock = (VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK *)(BiosVideoPrivate->VbeInformationBlock + 1); + BiosVideoPrivate->VbeEdidDataBlock = (VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK *)(BiosVideoPrivate->VbeModeInformationBlock + 1); + BiosVideoPrivate->VbeCrtcInformationBlock = (VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK *)(BiosVideoPrivate->VbeEdidDataBlock + 1); + BiosVideoPrivate->VbeSaveRestorePages = 0; + BiosVideoPrivate->VbeSaveRestoreBuffer = 0; // // Test to see if the Video Adapter is compliant with VBE 3.0 @@ -1353,9 +1377,9 @@ BiosVideoCheckForVbe ( gBS->SetMem (&Regs, sizeof (Regs), 0); Regs.X.AX = VESA_BIOS_EXTENSIONS_RETURN_CONTROLLER_INFORMATION; gBS->SetMem (BiosVideoPrivate->VbeInformationBlock, sizeof (VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK), 0); - BiosVideoPrivate->VbeInformationBlock->VESASignature = VESA_BIOS_EXTENSIONS_VBE2_SIGNATURE; - Regs.X.ES = EFI_SEGMENT ((UINTN) BiosVideoPrivate->VbeInformationBlock); - Regs.X.DI = EFI_OFFSET ((UINTN) BiosVideoPrivate->VbeInformationBlock); + BiosVideoPrivate->VbeInformationBlock->VESASignature = VESA_BIOS_EXTENSIONS_VBE2_SIGNATURE; + Regs.X.ES = EFI_SEGMENT ((UINTN)BiosVideoPrivate->VbeInformationBlock); + Regs.X.DI = EFI_OFFSET ((UINTN)BiosVideoPrivate->VbeInformationBlock); BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs); @@ -1367,12 +1391,14 @@ BiosVideoCheckForVbe ( if (Regs.X.AX != VESA_BIOS_EXTENSIONS_STATUS_SUCCESS) { return Status; } + // // Check for 'VESA' signature // if (BiosVideoPrivate->VbeInformationBlock->VESASignature != VESA_BIOS_EXTENSIONS_VESA_SIGNATURE) { return Status; } + // // Check to see if this is VBE 2.0 or higher // @@ -1388,10 +1414,10 @@ BiosVideoCheckForVbe ( // Find EDID Override protocol firstly, this protocol is installed by platform if needed. // Status = gBS->LocateProtocol ( - &gEfiEdidOverrideProtocolGuid, - NULL, - (VOID **) &EdidOverride - ); + &gEfiEdidOverrideProtocolGuid, + NULL, + (VOID **)&EdidOverride + ); if (!EFI_ERROR (Status)) { // // Allocate double size of VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE to avoid overflow @@ -1407,11 +1433,12 @@ BiosVideoCheckForVbe ( BiosVideoPrivate->Handle, &EdidAttributes, &EdidOverrideDataSize, - (UINT8 **) &EdidOverrideDataBlock + (UINT8 **)&EdidOverrideDataBlock ); if (!EFI_ERROR (Status) && - EdidAttributes == 0 && - EdidOverrideDataSize != 0) { + (EdidAttributes == 0) && + (EdidOverrideDataSize != 0)) + { // // Succeeded to get EDID Override Data // @@ -1419,7 +1446,7 @@ BiosVideoCheckForVbe ( } } - if (!EdidOverrideFound || EdidAttributes == EFI_EDID_OVERRIDE_DONT_OVERRIDE) { + if (!EdidOverrideFound || (EdidAttributes == EFI_EDID_OVERRIDE_DONT_OVERRIDE)) { // // If EDID Override data doesn't exist or EFI_EDID_OVERRIDE_DONT_OVERRIDE returned, // read EDID information through INT10 call @@ -1430,8 +1457,8 @@ BiosVideoCheckForVbe ( Regs.X.BX = 1; Regs.X.CX = 0; Regs.X.DX = 0; - Regs.X.ES = EFI_SEGMENT ((UINTN) BiosVideoPrivate->VbeEdidDataBlock); - Regs.X.DI = EFI_OFFSET ((UINTN) BiosVideoPrivate->VbeEdidDataBlock); + Regs.X.ES = EFI_SEGMENT ((UINTN)BiosVideoPrivate->VbeEdidDataBlock); + Regs.X.DI = EFI_OFFSET ((UINTN)BiosVideoPrivate->VbeEdidDataBlock); BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs); // @@ -1442,13 +1469,13 @@ BiosVideoCheckForVbe ( // Set EDID Discovered Data // BiosVideoPrivate->EdidDiscovered.SizeOfEdid = VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE; - BiosVideoPrivate->EdidDiscovered.Edid = (UINT8 *) AllocateCopyPool ( - VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE, - BiosVideoPrivate->VbeEdidDataBlock - ); + BiosVideoPrivate->EdidDiscovered.Edid = (UINT8 *)AllocateCopyPool ( + VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE, + BiosVideoPrivate->VbeEdidDataBlock + ); if (NULL == BiosVideoPrivate->EdidDiscovered.Edid) { - Status = EFI_OUT_OF_RESOURCES; + Status = EFI_OUT_OF_RESOURCES; goto Done; } @@ -1462,41 +1489,41 @@ BiosVideoCheckForVbe ( } else if (EdidOverrideFound) { EdidActiveDataSize = EdidOverrideDataSize; EdidActiveDataBlock = EdidOverrideDataBlock; - EdidFound = TRUE; - } + EdidFound = TRUE; + } - if (EdidFound) { + if (EdidFound) { // // Parse EDID data structure to retrieve modes supported by monitor // - if (ParseEdidData ((UINT8 *) EdidActiveDataBlock, &ValidEdidTiming)) { + if (ParseEdidData ((UINT8 *)EdidActiveDataBlock, &ValidEdidTiming)) { // // Copy EDID Override Data to EDID Active Data // - BiosVideoPrivate->EdidActive.SizeOfEdid = (UINT32) EdidActiveDataSize; - BiosVideoPrivate->EdidActive.Edid = (UINT8 *) AllocateCopyPool ( - EdidActiveDataSize, - EdidActiveDataBlock - ); + BiosVideoPrivate->EdidActive.SizeOfEdid = (UINT32)EdidActiveDataSize; + BiosVideoPrivate->EdidActive.Edid = (UINT8 *)AllocateCopyPool ( + EdidActiveDataSize, + EdidActiveDataBlock + ); if (NULL == BiosVideoPrivate->EdidActive.Edid) { - Status = EFI_OUT_OF_RESOURCES; + Status = EFI_OUT_OF_RESOURCES; goto Done; } } } else { BiosVideoPrivate->EdidActive.SizeOfEdid = 0; - BiosVideoPrivate->EdidActive.Edid = NULL; - EdidFound = FALSE; + BiosVideoPrivate->EdidActive.Edid = NULL; + EdidFound = FALSE; } // // Walk through the mode list to see if there is at least one mode the is compatible with the EDID mode // ModeNumberPtr = (UINT16 *) - ( - (((UINTN) BiosVideoPrivate->VbeInformationBlock->VideoModePtr & 0xffff0000) >> 12) | - ((UINTN) BiosVideoPrivate->VbeInformationBlock->VideoModePtr & 0x0000ffff) - ); + ( + (((UINTN)BiosVideoPrivate->VbeInformationBlock->VideoModePtr & 0xffff0000) >> 12) | + ((UINTN)BiosVideoPrivate->VbeInformationBlock->VideoModePtr & 0x0000ffff) + ); PreferMode = 0; ModeNumber = 0; @@ -1506,13 +1533,15 @@ BiosVideoCheckForVbe ( // for (VbeModeNumber = ReadUnaligned16 (ModeNumberPtr); VbeModeNumber != VESA_BIOS_EXTENSIONS_END_OF_MODE_LIST; - VbeModeNumber = ReadUnaligned16 (++ModeNumberPtr)) { + VbeModeNumber = ReadUnaligned16 (++ModeNumberPtr)) + { // // Make sure this is a mode number defined by the VESA VBE specification. If it isn'tm then skip this mode number. // if ((VbeModeNumber & VESA_BIOS_EXTENSIONS_MODE_NUMBER_VESA) == 0) { continue; } + // // Get the information about the mode // @@ -1520,8 +1549,8 @@ BiosVideoCheckForVbe ( Regs.X.AX = VESA_BIOS_EXTENSIONS_RETURN_MODE_INFORMATION; Regs.X.CX = VbeModeNumber; gBS->SetMem (BiosVideoPrivate->VbeModeInformationBlock, sizeof (VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK), 0); - Regs.X.ES = EFI_SEGMENT ((UINTN) BiosVideoPrivate->VbeModeInformationBlock); - Regs.X.DI = EFI_OFFSET ((UINTN) BiosVideoPrivate->VbeModeInformationBlock); + Regs.X.ES = EFI_SEGMENT ((UINTN)BiosVideoPrivate->VbeModeInformationBlock); + Regs.X.DI = EFI_OFFSET ((UINTN)BiosVideoPrivate->VbeModeInformationBlock); BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs); @@ -1531,24 +1560,28 @@ BiosVideoCheckForVbe ( if (Regs.X.AX != VESA_BIOS_EXTENSIONS_STATUS_SUCCESS) { continue; } + // // See if the mode supports color. If it doesn't then try the next mode. // if ((BiosVideoPrivate->VbeModeInformationBlock->ModeAttributes & VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_COLOR) == 0) { continue; } + // // See if the mode supports graphics. If it doesn't then try the next mode. // if ((BiosVideoPrivate->VbeModeInformationBlock->ModeAttributes & VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_GRAPHICS) == 0) { continue; } + // // See if the mode supports a linear frame buffer. If it doesn't then try the next mode. // if ((BiosVideoPrivate->VbeModeInformationBlock->ModeAttributes & VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER) == 0) { continue; } + // // See if the mode supports 32 bit color. If it doesn't then try the next mode. // 32 bit mode can be implemented by 24 Bits Per Pixels. Also make sure the @@ -1565,6 +1598,7 @@ BiosVideoCheckForVbe ( if ((BiosVideoPrivate->VbeModeInformationBlock->BitsPerPixel % 8) != 0) { continue; } + // // See if the physical base pointer for the linear mode is valid. If it isn't then try the next mode. // @@ -1572,25 +1606,31 @@ BiosVideoCheckForVbe ( continue; } - DEBUG ((DEBUG_INFO, "Video Controller Mode 0x%x: %d x %d\n", - VbeModeNumber, BiosVideoPrivate->VbeModeInformationBlock->XResolution, BiosVideoPrivate->VbeModeInformationBlock->YResolution)); + DEBUG (( + DEBUG_INFO, + "Video Controller Mode 0x%x: %d x %d\n", + VbeModeNumber, + BiosVideoPrivate->VbeModeInformationBlock->XResolution, + BiosVideoPrivate->VbeModeInformationBlock->YResolution + )); if (EdidFound && (ValidEdidTiming.ValidNumber > 0)) { // // EDID exist, check whether this mode match with any mode in EDID // Timing.HorizontalResolution = BiosVideoPrivate->VbeModeInformationBlock->XResolution; - Timing.VerticalResolution = BiosVideoPrivate->VbeModeInformationBlock->YResolution; + Timing.VerticalResolution = BiosVideoPrivate->VbeModeInformationBlock->YResolution; if (!SearchEdidTiming (&ValidEdidTiming, &Timing)) { // // When EDID comes from INT10 call, EDID does not include 800x600, 640x480 and 1024x768, // but INT10 can support these modes, we add them into GOP mode. // if ((BiosVideoPrivate->EdidDiscovered.SizeOfEdid != 0) && - !((Timing.HorizontalResolution) == 1024 && (Timing.VerticalResolution == 768)) && - !((Timing.HorizontalResolution) == 800 && (Timing.VerticalResolution == 600)) && - !((Timing.HorizontalResolution) == 640 && (Timing.VerticalResolution == 480))) { - continue; + !(((Timing.HorizontalResolution) == 1024) && (Timing.VerticalResolution == 768)) && + !(((Timing.HorizontalResolution) == 800) && (Timing.VerticalResolution == 600)) && + !(((Timing.HorizontalResolution) == 640) && (Timing.VerticalResolution == 480))) + { + continue; } } } @@ -1600,20 +1640,25 @@ BiosVideoCheckForVbe ( // ModeFound = FALSE; - if (BiosVideoPrivate->VbeModeInformationBlock->XResolution == 1024 && - BiosVideoPrivate->VbeModeInformationBlock->YResolution == 768 - ) { + if ((BiosVideoPrivate->VbeModeInformationBlock->XResolution == 1024) && + (BiosVideoPrivate->VbeModeInformationBlock->YResolution == 768) + ) + { ModeFound = TRUE; } - if (BiosVideoPrivate->VbeModeInformationBlock->XResolution == 800 && - BiosVideoPrivate->VbeModeInformationBlock->YResolution == 600 - ) { - ModeFound = TRUE; + + if ((BiosVideoPrivate->VbeModeInformationBlock->XResolution == 800) && + (BiosVideoPrivate->VbeModeInformationBlock->YResolution == 600) + ) + { + ModeFound = TRUE; PreferMode = ModeNumber; } - if (BiosVideoPrivate->VbeModeInformationBlock->XResolution == 640 && - BiosVideoPrivate->VbeModeInformationBlock->YResolution == 480 - ) { + + if ((BiosVideoPrivate->VbeModeInformationBlock->XResolution == 640) && + (BiosVideoPrivate->VbeModeInformationBlock->YResolution == 480) + ) + { ModeFound = TRUE; } @@ -1629,19 +1674,20 @@ BiosVideoCheckForVbe ( // if ((BiosVideoPrivate->VbeModeInformationBlock->XResolution > HighestHorizontalResolution) || ((BiosVideoPrivate->VbeModeInformationBlock->XResolution == HighestHorizontalResolution) && - (BiosVideoPrivate->VbeModeInformationBlock->YResolution > HighestVerticalResolution))) { + (BiosVideoPrivate->VbeModeInformationBlock->YResolution > HighestVerticalResolution))) + { HighestHorizontalResolution = BiosVideoPrivate->VbeModeInformationBlock->XResolution; - HighestVerticalResolution = BiosVideoPrivate->VbeModeInformationBlock->YResolution; - HighestResolutionMode = ModeNumber; + HighestVerticalResolution = BiosVideoPrivate->VbeModeInformationBlock->YResolution; + HighestResolutionMode = ModeNumber; } // // Add mode to the list of available modes // - ModeNumber ++; - ModeBuffer = (BIOS_VIDEO_MODE_DATA *) AllocatePool ( - ModeNumber * sizeof (BIOS_VIDEO_MODE_DATA) - ); + ModeNumber++; + ModeBuffer = (BIOS_VIDEO_MODE_DATA *)AllocatePool ( + ModeNumber * sizeof (BIOS_VIDEO_MODE_DATA) + ); if (NULL == ModeBuffer) { Status = EFI_OUT_OF_RESOURCES; goto Done; @@ -1659,33 +1705,34 @@ BiosVideoCheckForVbe ( FreePool (BiosVideoPrivate->ModeData); } - CurrentModeData = &ModeBuffer[ModeNumber - 1]; + CurrentModeData = &ModeBuffer[ModeNumber - 1]; CurrentModeData->VbeModeNumber = VbeModeNumber; if (BiosVideoPrivate->VbeInformationBlock->VESAVersion >= VESA_BIOS_EXTENSIONS_VERSION_3_0) { - CurrentModeData->BytesPerScanLine = BiosVideoPrivate->VbeModeInformationBlock->LinBytesPerScanLine; - CurrentModeData->Red.Position = BiosVideoPrivate->VbeModeInformationBlock->LinRedFieldPosition; - CurrentModeData->Red.Mask = (UINT8) ((1 << BiosVideoPrivate->VbeModeInformationBlock->LinRedMaskSize) - 1); - CurrentModeData->Blue.Position = BiosVideoPrivate->VbeModeInformationBlock->LinBlueFieldPosition; - CurrentModeData->Blue.Mask = (UINT8) ((1 << BiosVideoPrivate->VbeModeInformationBlock->LinBlueMaskSize) - 1); - CurrentModeData->Green.Position = BiosVideoPrivate->VbeModeInformationBlock->LinGreenFieldPosition; - CurrentModeData->Green.Mask = (UINT8) ((1 << BiosVideoPrivate->VbeModeInformationBlock->LinGreenMaskSize) - 1); + CurrentModeData->BytesPerScanLine = BiosVideoPrivate->VbeModeInformationBlock->LinBytesPerScanLine; + CurrentModeData->Red.Position = BiosVideoPrivate->VbeModeInformationBlock->LinRedFieldPosition; + CurrentModeData->Red.Mask = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->LinRedMaskSize) - 1); + CurrentModeData->Blue.Position = BiosVideoPrivate->VbeModeInformationBlock->LinBlueFieldPosition; + CurrentModeData->Blue.Mask = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->LinBlueMaskSize) - 1); + CurrentModeData->Green.Position = BiosVideoPrivate->VbeModeInformationBlock->LinGreenFieldPosition; + CurrentModeData->Green.Mask = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->LinGreenMaskSize) - 1); CurrentModeData->Reserved.Position = BiosVideoPrivate->VbeModeInformationBlock->LinRsvdFieldPosition; - CurrentModeData->Reserved.Mask = (UINT8) ((1 << BiosVideoPrivate->VbeModeInformationBlock->LinRsvdMaskSize) - 1); + CurrentModeData->Reserved.Mask = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->LinRsvdMaskSize) - 1); } else { - CurrentModeData->BytesPerScanLine = BiosVideoPrivate->VbeModeInformationBlock->BytesPerScanLine; - CurrentModeData->Red.Position = BiosVideoPrivate->VbeModeInformationBlock->RedFieldPosition; - CurrentModeData->Red.Mask = (UINT8) ((1 << BiosVideoPrivate->VbeModeInformationBlock->RedMaskSize) - 1); - CurrentModeData->Blue.Position = BiosVideoPrivate->VbeModeInformationBlock->BlueFieldPosition; - CurrentModeData->Blue.Mask = (UINT8) ((1 << BiosVideoPrivate->VbeModeInformationBlock->BlueMaskSize) - 1); - CurrentModeData->Green.Position = BiosVideoPrivate->VbeModeInformationBlock->GreenFieldPosition; - CurrentModeData->Green.Mask = (UINT8) ((1 << BiosVideoPrivate->VbeModeInformationBlock->GreenMaskSize) - 1); + CurrentModeData->BytesPerScanLine = BiosVideoPrivate->VbeModeInformationBlock->BytesPerScanLine; + CurrentModeData->Red.Position = BiosVideoPrivate->VbeModeInformationBlock->RedFieldPosition; + CurrentModeData->Red.Mask = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->RedMaskSize) - 1); + CurrentModeData->Blue.Position = BiosVideoPrivate->VbeModeInformationBlock->BlueFieldPosition; + CurrentModeData->Blue.Mask = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->BlueMaskSize) - 1); + CurrentModeData->Green.Position = BiosVideoPrivate->VbeModeInformationBlock->GreenFieldPosition; + CurrentModeData->Green.Mask = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->GreenMaskSize) - 1); CurrentModeData->Reserved.Position = BiosVideoPrivate->VbeModeInformationBlock->RsvdFieldPosition; - CurrentModeData->Reserved.Mask = (UINT8) ((1 << BiosVideoPrivate->VbeModeInformationBlock->RsvdMaskSize) - 1); + CurrentModeData->Reserved.Mask = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->RsvdMaskSize) - 1); } CurrentModeData->PixelFormat = PixelBitMask; if ((BiosVideoPrivate->VbeModeInformationBlock->BitsPerPixel == 32) && - (CurrentModeData->Red.Mask == 0xff) && (CurrentModeData->Green.Mask == 0xff) && (CurrentModeData->Blue.Mask == 0xff)) { + (CurrentModeData->Red.Mask == 0xff) && (CurrentModeData->Green.Mask == 0xff) && (CurrentModeData->Blue.Mask == 0xff)) + { if ((CurrentModeData->Red.Position == 0) && (CurrentModeData->Green.Position == 8) && (CurrentModeData->Blue.Position == 16)) { CurrentModeData->PixelFormat = PixelRedGreenBlueReserved8BitPerColor; } else if ((CurrentModeData->Blue.Position == 0) && (CurrentModeData->Green.Position == 8) && (CurrentModeData->Red.Position == 16)) { @@ -1693,16 +1740,16 @@ BiosVideoCheckForVbe ( } } - CurrentModeData->PixelBitMask.RedMask = ((UINT32) CurrentModeData->Red.Mask) << CurrentModeData->Red.Position; - CurrentModeData->PixelBitMask.GreenMask = ((UINT32) CurrentModeData->Green.Mask) << CurrentModeData->Green.Position; - CurrentModeData->PixelBitMask.BlueMask = ((UINT32) CurrentModeData->Blue.Mask) << CurrentModeData->Blue.Position; - CurrentModeData->PixelBitMask.ReservedMask = ((UINT32) CurrentModeData->Reserved.Mask) << CurrentModeData->Reserved.Position; + CurrentModeData->PixelBitMask.RedMask = ((UINT32)CurrentModeData->Red.Mask) << CurrentModeData->Red.Position; + CurrentModeData->PixelBitMask.GreenMask = ((UINT32)CurrentModeData->Green.Mask) << CurrentModeData->Green.Position; + CurrentModeData->PixelBitMask.BlueMask = ((UINT32)CurrentModeData->Blue.Mask) << CurrentModeData->Blue.Position; + CurrentModeData->PixelBitMask.ReservedMask = ((UINT32)CurrentModeData->Reserved.Mask) << CurrentModeData->Reserved.Position; - CurrentModeData->LinearFrameBuffer = (VOID *) (UINTN)BiosVideoPrivate->VbeModeInformationBlock->PhysBasePtr; + CurrentModeData->LinearFrameBuffer = (VOID *)(UINTN)BiosVideoPrivate->VbeModeInformationBlock->PhysBasePtr; CurrentModeData->HorizontalResolution = BiosVideoPrivate->VbeModeInformationBlock->XResolution; - CurrentModeData->VerticalResolution = BiosVideoPrivate->VbeModeInformationBlock->YResolution; + CurrentModeData->VerticalResolution = BiosVideoPrivate->VbeModeInformationBlock->YResolution; - CurrentModeData->BitsPerPixel = BiosVideoPrivate->VbeModeInformationBlock->BitsPerPixel; + CurrentModeData->BitsPerPixel = BiosVideoPrivate->VbeModeInformationBlock->BitsPerPixel; CurrentModeData->FrameBufferSize = CurrentModeData->BytesPerScanLine * CurrentModeData->VerticalResolution; // // Make sure the FrameBufferSize does not exceed the max available frame buffer size reported by VEB. @@ -1711,6 +1758,7 @@ BiosVideoCheckForVbe ( BiosVideoPrivate->ModeData = ModeBuffer; } + // // Check to see if we found any modes that are compatible with GRAPHICS OUTPUT // @@ -1722,9 +1770,9 @@ BiosVideoCheckForVbe ( // // Assign Gop's Blt function // - BiosVideoPrivate->GraphicsOutput.Blt = BiosVideoGraphicsOutputVbeBlt; + BiosVideoPrivate->GraphicsOutput.Blt = BiosVideoGraphicsOutputVbeBlt; - BiosVideoPrivate->GraphicsOutput.Mode->MaxMode = (UINT32) ModeNumber; + BiosVideoPrivate->GraphicsOutput.Mode->MaxMode = (UINT32)ModeNumber; // // Current mode is unknow till now, set it to an invalid mode. // @@ -1737,22 +1785,28 @@ BiosVideoCheckForVbe ( DEBUG_CODE ( BIOS_VIDEO_MODE_DATA *ModeData; ModeData = &BiosVideoPrivate->ModeData[HighestResolutionMode]; - DEBUG ((DEBUG_INFO, "BiosVideo set highest resolution %d x %d\n", - ModeData->HorizontalResolution, ModeData->VerticalResolution)); - ); + DEBUG (( + DEBUG_INFO, + "BiosVideo set highest resolution %d x %d\n", + ModeData->HorizontalResolution, + ModeData->VerticalResolution + )); + ); PreferMode = HighestResolutionMode; } - Status = BiosVideoGraphicsOutputSetMode (&BiosVideoPrivate->GraphicsOutput, (UINT32) PreferMode); + + Status = BiosVideoGraphicsOutputSetMode (&BiosVideoPrivate->GraphicsOutput, (UINT32)PreferMode); if (EFI_ERROR (Status)) { - for (PreferMode = 0; PreferMode < ModeNumber; PreferMode ++) { + for (PreferMode = 0; PreferMode < ModeNumber; PreferMode++) { Status = BiosVideoGraphicsOutputSetMode ( - &BiosVideoPrivate->GraphicsOutput, - (UINT32) PreferMode - ); + &BiosVideoPrivate->GraphicsOutput, + (UINT32)PreferMode + ); if (!EFI_ERROR (Status)) { break; } } + if (PreferMode == ModeNumber) { // // None mode is set successfully. @@ -1768,9 +1822,10 @@ Done: if (EFI_ERROR (Status)) { if (BiosVideoPrivate->ModeData != NULL) { FreePool (BiosVideoPrivate->ModeData); - BiosVideoPrivate->ModeData = NULL; - BiosVideoPrivate->MaxMode = 0; + BiosVideoPrivate->ModeData = NULL; + BiosVideoPrivate->MaxMode = 0; } + if (EdidOverrideDataBlock != NULL) { FreePool (EdidOverrideDataBlock); } @@ -1779,7 +1834,6 @@ Done: return Status; } - /** Check for VGA device. @@ -1801,7 +1855,7 @@ BiosVideoCheckForVga ( // // Assign Gop's Blt function // - BiosVideoPrivate->GraphicsOutput.Blt = BiosVideoGraphicsOutputVgaBlt; + BiosVideoPrivate->GraphicsOutput.Blt = BiosVideoGraphicsOutputVgaBlt; // // Add mode to the list of available modes @@ -1810,23 +1864,23 @@ BiosVideoCheckForVga ( ASSERT (BiosVideoPrivate->GraphicsOutput.Mode != NULL); BiosVideoPrivate->GraphicsOutput.Mode->MaxMode = 1; - ModeBuffer = (BIOS_VIDEO_MODE_DATA *) AllocatePool ( - sizeof (BIOS_VIDEO_MODE_DATA) - ); + ModeBuffer = (BIOS_VIDEO_MODE_DATA *)AllocatePool ( + sizeof (BIOS_VIDEO_MODE_DATA) + ); if (NULL == ModeBuffer) { Status = EFI_OUT_OF_RESOURCES; goto Done; } - ModeBuffer->VbeModeNumber = 0x0012; - ModeBuffer->BytesPerScanLine = 640; - ModeBuffer->LinearFrameBuffer = (VOID *) (UINTN) (0xa0000); - ModeBuffer->HorizontalResolution = 640; - ModeBuffer->VerticalResolution = 480; - ModeBuffer->PixelFormat = PixelBltOnly; - ModeBuffer->BitsPerPixel = 8; - ModeBuffer->ColorDepth = 32; - ModeBuffer->RefreshRate = 60; + ModeBuffer->VbeModeNumber = 0x0012; + ModeBuffer->BytesPerScanLine = 640; + ModeBuffer->LinearFrameBuffer = (VOID *)(UINTN)(0xa0000); + ModeBuffer->HorizontalResolution = 640; + ModeBuffer->VerticalResolution = 480; + ModeBuffer->PixelFormat = PixelBltOnly; + ModeBuffer->BitsPerPixel = 8; + ModeBuffer->ColorDepth = 32; + ModeBuffer->RefreshRate = 60; BiosVideoPrivate->ModeData = ModeBuffer; @@ -1834,7 +1888,7 @@ BiosVideoCheckForVga ( // Test to see if the Video Adapter support the 640x480 16 color mode // BiosVideoPrivate->GraphicsOutput.Mode->Mode = GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER; - Status = BiosVideoGraphicsOutputSetMode (&BiosVideoPrivate->GraphicsOutput, 0); + Status = BiosVideoGraphicsOutputSetMode (&BiosVideoPrivate->GraphicsOutput, 0); Done: // @@ -1845,15 +1899,18 @@ Done: FreePool (BiosVideoPrivate->ModeData); BiosVideoPrivate->ModeData = NULL; } + if (BiosVideoPrivate->GraphicsOutput.Mode != NULL) { if (BiosVideoPrivate->GraphicsOutput.Mode->Info != NULL) { FreePool (BiosVideoPrivate->GraphicsOutput.Mode->Info); BiosVideoPrivate->GraphicsOutput.Mode->Info = NULL; } + FreePool (BiosVideoPrivate->GraphicsOutput.Mode); BiosVideoPrivate->GraphicsOutput.Mode = NULL; } } + return Status; } @@ -1901,11 +1958,11 @@ BiosVideoGraphicsOutputQueryMode ( return EFI_NOT_STARTED; } - if (This == NULL || Info == NULL || SizeOfInfo == NULL || ModeNumber >= This->Mode->MaxMode) { + if ((This == NULL) || (Info == NULL) || (SizeOfInfo == NULL) || (ModeNumber >= This->Mode->MaxMode)) { return EFI_INVALID_PARAMETER; } - *Info = (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *) AllocatePool ( + *Info = (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *)AllocatePool ( sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION) ); if (NULL == *Info) { @@ -1914,12 +1971,12 @@ BiosVideoGraphicsOutputQueryMode ( *SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION); - ModeData = &BiosVideoPrivate->ModeData[ModeNumber]; - (*Info)->Version = 0; + ModeData = &BiosVideoPrivate->ModeData[ModeNumber]; + (*Info)->Version = 0; (*Info)->HorizontalResolution = ModeData->HorizontalResolution; (*Info)->VerticalResolution = ModeData->VerticalResolution; - (*Info)->PixelFormat = ModeData->PixelFormat; - CopyMem (&((*Info)->PixelInformation), &(ModeData->PixelBitMask), sizeof(ModeData->PixelBitMask)); + (*Info)->PixelFormat = ModeData->PixelFormat; + CopyMem (&((*Info)->PixelInformation), &(ModeData->PixelBitMask), sizeof (ModeData->PixelBitMask)); (*Info)->PixelsPerScanLine = (ModeData->BytesPerScanLine * 8) / ModeData->BitsPerPixel; @@ -1941,13 +1998,13 @@ BiosVideoGraphicsOutputQueryMode ( **/ EFI_STATUS BiosVideoSetModeWorker ( - IN BIOS_VIDEO_DEV *BiosVideoPrivate, - IN BIOS_VIDEO_MODE_DATA *ModeData, - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath + IN BIOS_VIDEO_DEV *BiosVideoPrivate, + IN BIOS_VIDEO_MODE_DATA *ModeData, + IN EFI_DEVICE_PATH_PROTOCOL *DevicePath ) { - EFI_STATUS Status; - EFI_IA32_REGISTER_SET Regs; + EFI_STATUS Status; + EFI_IA32_REGISTER_SET Regs; if (BiosVideoPrivate->LineBuffer != NULL) { FreePool (BiosVideoPrivate->LineBuffer); @@ -1961,12 +2018,13 @@ BiosVideoSetModeWorker ( FreePool (BiosVideoPrivate->VbeFrameBuffer); } - BiosVideoPrivate->LineBuffer = (UINT8 *) AllocatePool ( - ModeData->BytesPerScanLine - ); + BiosVideoPrivate->LineBuffer = (UINT8 *)AllocatePool ( + ModeData->BytesPerScanLine + ); if (NULL == BiosVideoPrivate->LineBuffer) { return EFI_OUT_OF_RESOURCES; } + // // Clear all registers // @@ -1976,35 +2034,36 @@ BiosVideoSetModeWorker ( // // Allocate a working buffer for BLT operations to the VGA frame buffer // - BiosVideoPrivate->VgaFrameBuffer = (UINT8 *) AllocatePool (4 * 480 * 80); + BiosVideoPrivate->VgaFrameBuffer = (UINT8 *)AllocatePool (4 * 480 * 80); if (NULL == BiosVideoPrivate->VgaFrameBuffer) { return EFI_OUT_OF_RESOURCES; } + // // Set VGA Mode // Regs.X.AX = ModeData->VbeModeNumber; BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs); - } else { // // Allocate a working buffer for BLT operations to the VBE frame buffer // BiosVideoPrivate->VbeFrameBuffer = - (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) AllocatePool ( - ModeData->BytesPerScanLine * ModeData->VerticalResolution - ); + (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)AllocatePool ( + ModeData->BytesPerScanLine * ModeData->VerticalResolution + ); if (NULL == BiosVideoPrivate->VbeFrameBuffer) { return EFI_OUT_OF_RESOURCES; } + // // Set VBE mode // Regs.X.AX = VESA_BIOS_EXTENSIONS_SET_MODE; - Regs.X.BX = (UINT16) (ModeData->VbeModeNumber | VESA_BIOS_EXTENSIONS_MODE_NUMBER_LINEAR_FRAME_BUFFER); + Regs.X.BX = (UINT16)(ModeData->VbeModeNumber | VESA_BIOS_EXTENSIONS_MODE_NUMBER_LINEAR_FRAME_BUFFER); ZeroMem (BiosVideoPrivate->VbeCrtcInformationBlock, sizeof (VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK)); - Regs.X.ES = EFI_SEGMENT ((UINTN) BiosVideoPrivate->VbeCrtcInformationBlock); - Regs.X.DI = EFI_OFFSET ((UINTN) BiosVideoPrivate->VbeCrtcInformationBlock); + Regs.X.ES = EFI_SEGMENT ((UINTN)BiosVideoPrivate->VbeCrtcInformationBlock); + Regs.X.DI = EFI_OFFSET ((UINTN)BiosVideoPrivate->VbeCrtcInformationBlock); BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs); // @@ -2018,6 +2077,7 @@ BiosVideoSetModeWorker ( ); return EFI_DEVICE_ERROR; } + // // Initialize the state of the VbeFrameBuffer // @@ -2025,7 +2085,7 @@ BiosVideoSetModeWorker ( BiosVideoPrivate->PciIo, EfiPciIoWidthUint32, EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) (UINTN) ModeData->LinearFrameBuffer, + (UINT64)(UINTN)ModeData->LinearFrameBuffer, (ModeData->BytesPerScanLine * ModeData->VerticalResolution) >> 2, BiosVideoPrivate->VbeFrameBuffer ); @@ -2052,14 +2112,14 @@ BiosVideoSetModeWorker ( EFI_STATUS EFIAPI BiosVideoGraphicsOutputSetMode ( - IN EFI_GRAPHICS_OUTPUT_PROTOCOL * This, - IN UINT32 ModeNumber + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, + IN UINT32 ModeNumber ) { - EFI_STATUS Status; - BIOS_VIDEO_DEV *BiosVideoPrivate; - BIOS_VIDEO_MODE_DATA *ModeData; - EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background; + EFI_STATUS Status; + BIOS_VIDEO_DEV *BiosVideoPrivate; + BIOS_VIDEO_MODE_DATA *ModeData; + EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background; if (This == NULL) { return EFI_INVALID_PARAMETER; @@ -2079,17 +2139,17 @@ BiosVideoGraphicsOutputSetMode ( // ZeroMem (&Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); BiosVideoGraphicsOutputVbeBlt ( - This, - &Background, - EfiBltVideoFill, - 0, - 0, - 0, - 0, - ModeData->HorizontalResolution, - ModeData->VerticalResolution, - 0 - ); + This, + &Background, + EfiBltVideoFill, + 0, + 0, + 0, + 0, + ModeData->HorizontalResolution, + ModeData->VerticalResolution, + 0 + ); return EFI_SUCCESS; } @@ -2098,16 +2158,16 @@ BiosVideoGraphicsOutputSetMode ( return Status; } - This->Mode->Mode = ModeNumber; - This->Mode->Info->Version = 0; + This->Mode->Mode = ModeNumber; + This->Mode->Info->Version = 0; This->Mode->Info->HorizontalResolution = ModeData->HorizontalResolution; - This->Mode->Info->VerticalResolution = ModeData->VerticalResolution; - This->Mode->Info->PixelFormat = ModeData->PixelFormat; + This->Mode->Info->VerticalResolution = ModeData->VerticalResolution; + This->Mode->Info->PixelFormat = ModeData->PixelFormat; CopyMem (&(This->Mode->Info->PixelInformation), &(ModeData->PixelBitMask), sizeof (ModeData->PixelBitMask)); This->Mode->Info->PixelsPerScanLine = (ModeData->BytesPerScanLine * 8) / ModeData->BitsPerPixel; - This->Mode->SizeOfInfo = sizeof(EFI_GRAPHICS_OUTPUT_MODE_INFORMATION); - This->Mode->FrameBufferSize = ModeData->FrameBufferSize; - This->Mode->FrameBufferBase = (EFI_PHYSICAL_ADDRESS) (UINTN) ModeData->LinearFrameBuffer; + This->Mode->SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION); + This->Mode->FrameBufferSize = ModeData->FrameBufferSize; + This->Mode->FrameBufferBase = (EFI_PHYSICAL_ADDRESS)(UINTN)ModeData->LinearFrameBuffer; BiosVideoPrivate->HardwareNeedsStarting = FALSE; @@ -2129,36 +2189,36 @@ BiosVideoGraphicsOutputSetMode ( **/ VOID CopyVideoBuffer ( - IN EFI_PCI_IO_PROTOCOL *PciIo, - IN UINT8 *VbeBuffer, - IN VOID *MemAddress, - IN UINTN DestinationX, - IN UINTN DestinationY, - IN UINTN TotalBytes, - IN UINT32 VbePixelWidth, - IN UINTN BytesPerScanLine + IN EFI_PCI_IO_PROTOCOL *PciIo, + IN UINT8 *VbeBuffer, + IN VOID *MemAddress, + IN UINTN DestinationX, + IN UINTN DestinationY, + IN UINTN TotalBytes, + IN UINT32 VbePixelWidth, + IN UINTN BytesPerScanLine ) { - UINTN FrameBufferAddr; - UINTN CopyBlockNum; - UINTN RemainingBytes; - UINTN UnalignedBytes; - EFI_STATUS Status; + UINTN FrameBufferAddr; + UINTN CopyBlockNum; + UINTN RemainingBytes; + UINTN UnalignedBytes; + EFI_STATUS Status; - FrameBufferAddr = (UINTN) MemAddress + (DestinationY * BytesPerScanLine) + DestinationX * VbePixelWidth; + FrameBufferAddr = (UINTN)MemAddress + (DestinationY * BytesPerScanLine) + DestinationX * VbePixelWidth; // // If TotalBytes is less than 4 bytes, only start byte copy. // if (TotalBytes < 4) { Status = PciIo->Mem.Write ( - PciIo, - EfiPciIoWidthUint8, - EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) FrameBufferAddr, - TotalBytes, - VbeBuffer - ); + PciIo, + EfiPciIoWidthUint8, + EFI_PCI_IO_PASS_THROUGH_BAR, + (UINT64)FrameBufferAddr, + TotalBytes, + VbeBuffer + ); ASSERT_EFI_ERROR (Status); return; } @@ -2166,17 +2226,17 @@ CopyVideoBuffer ( // // If VbeBuffer is not 4-byte aligned, start byte copy. // - UnalignedBytes = (4 - ((UINTN) VbeBuffer & 0x3)) & 0x3; + UnalignedBytes = (4 - ((UINTN)VbeBuffer & 0x3)) & 0x3; if (UnalignedBytes != 0) { Status = PciIo->Mem.Write ( - PciIo, - EfiPciIoWidthUint8, - EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) FrameBufferAddr, - UnalignedBytes, - VbeBuffer - ); + PciIo, + EfiPciIoWidthUint8, + EFI_PCI_IO_PASS_THROUGH_BAR, + (UINT64)FrameBufferAddr, + UnalignedBytes, + VbeBuffer + ); ASSERT_EFI_ERROR (Status); FrameBufferAddr += UnalignedBytes; VbeBuffer += UnalignedBytes; @@ -2193,27 +2253,27 @@ CopyVideoBuffer ( // if (CopyBlockNum != 0) { Status = PciIo->Mem.Write ( - PciIo, - EfiPciIoWidthUint32, - EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) FrameBufferAddr, - CopyBlockNum, - VbeBuffer - ); + PciIo, + EfiPciIoWidthUint32, + EFI_PCI_IO_PASS_THROUGH_BAR, + (UINT64)FrameBufferAddr, + CopyBlockNum, + VbeBuffer + ); ASSERT_EFI_ERROR (Status); } if (RemainingBytes != 0) { FrameBufferAddr += (CopyBlockNum << 2); VbeBuffer += (CopyBlockNum << 2); - Status = PciIo->Mem.Write ( - PciIo, - EfiPciIoWidthUint8, - EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) FrameBufferAddr, - RemainingBytes, - VbeBuffer - ); + Status = PciIo->Mem.Write ( + PciIo, + EfiPciIoWidthUint8, + EFI_PCI_IO_PASS_THROUGH_BAR, + (UINT64)FrameBufferAddr, + RemainingBytes, + VbeBuffer + ); ASSERT_EFI_ERROR (Status); } } @@ -2278,22 +2338,23 @@ BiosVideoVbeBltWorker ( UINT32 Pixel; UINTN TotalBytes; - PciIo = BiosVideoPrivate->PciIo; + PciIo = BiosVideoPrivate->PciIo; - VbeFrameBuffer = BiosVideoPrivate->VbeFrameBuffer; - MemAddress = Mode->LinearFrameBuffer; - BytesPerScanLine = Mode->BytesPerScanLine; - VbePixelWidth = Mode->BitsPerPixel / 8; - BltUint8 = (UINT8 *) BltBuffer; - TotalBytes = Width * VbePixelWidth; + VbeFrameBuffer = BiosVideoPrivate->VbeFrameBuffer; + MemAddress = Mode->LinearFrameBuffer; + BytesPerScanLine = Mode->BytesPerScanLine; + VbePixelWidth = Mode->BitsPerPixel / 8; + BltUint8 = (UINT8 *)BltBuffer; + TotalBytes = Width * VbePixelWidth; - if (((UINTN) BltOperation) >= EfiGraphicsOutputBltOperationMax) { + if (((UINTN)BltOperation) >= EfiGraphicsOutputBltOperationMax) { return EFI_INVALID_PARAMETER; } - if (Width == 0 || Height == 0) { + if ((Width == 0) || (Height == 0)) { return EFI_INVALID_PARAMETER; } + // // We need to fill the Virtual Screen buffer with the blt data. // The virtual screen is upside down, as the first row is the bootom row of @@ -2322,6 +2383,7 @@ BiosVideoVbeBltWorker ( return EFI_INVALID_PARAMETER; } } + // // If Delta is zero, then the entire BltBuffer is being used, so Delta // is the number of bytes in each row of BltBuffer. Since BltBuffer is Width pixels size, @@ -2330,6 +2392,7 @@ BiosVideoVbeBltWorker ( if (Delta == 0) { Delta = Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL); } + // // We have to raise to TPL Notify, so we make an atomic write the frame buffer. // We would not want a timer based event (Cursor, ...) to come in while we are @@ -2338,148 +2401,151 @@ BiosVideoVbeBltWorker ( OriginalTPL = gBS->RaiseTPL (TPL_NOTIFY); switch (BltOperation) { - case EfiBltVideoToBltBuffer: - for (SrcY = SourceY, DstY = DestinationY; DstY < (Height + DestinationY); SrcY++, DstY++) { - Blt = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) (BltUint8 + DstY * Delta + DestinationX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); - // - // Shuffle the packed bytes in the hardware buffer to match EFI_GRAPHICS_OUTPUT_BLT_PIXEL - // - VbeBuffer = ((UINT8 *) VbeFrameBuffer + (SrcY * BytesPerScanLine + SourceX * VbePixelWidth)); - for (DstX = DestinationX; DstX < (Width + DestinationX); DstX++) { - Pixel = VbeBuffer[0] | VbeBuffer[1] << 8 | VbeBuffer[2] << 16 | VbeBuffer[3] << 24; - Blt->Red = (UINT8) ((Pixel >> Mode->Red.Position) & Mode->Red.Mask); - Blt->Blue = (UINT8) ((Pixel >> Mode->Blue.Position) & Mode->Blue.Mask); - Blt->Green = (UINT8) ((Pixel >> Mode->Green.Position) & Mode->Green.Mask); - Blt->Reserved = 0; - Blt++; - VbeBuffer += VbePixelWidth; + case EfiBltVideoToBltBuffer: + for (SrcY = SourceY, DstY = DestinationY; DstY < (Height + DestinationY); SrcY++, DstY++) { + Blt = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)(BltUint8 + DstY * Delta + DestinationX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); + // + // Shuffle the packed bytes in the hardware buffer to match EFI_GRAPHICS_OUTPUT_BLT_PIXEL + // + VbeBuffer = ((UINT8 *)VbeFrameBuffer + (SrcY * BytesPerScanLine + SourceX * VbePixelWidth)); + for (DstX = DestinationX; DstX < (Width + DestinationX); DstX++) { + Pixel = VbeBuffer[0] | VbeBuffer[1] << 8 | VbeBuffer[2] << 16 | VbeBuffer[3] << 24; + Blt->Red = (UINT8)((Pixel >> Mode->Red.Position) & Mode->Red.Mask); + Blt->Blue = (UINT8)((Pixel >> Mode->Blue.Position) & Mode->Blue.Mask); + Blt->Green = (UINT8)((Pixel >> Mode->Green.Position) & Mode->Green.Mask); + Blt->Reserved = 0; + Blt++; + VbeBuffer += VbePixelWidth; + } } - } - break; + break; - case EfiBltVideoToVideo: - for (Index = 0; Index < Height; Index++) { - if (DestinationY <= SourceY) { - SrcY = SourceY + Index; - DstY = DestinationY + Index; - } else { - SrcY = SourceY + Height - Index - 1; - DstY = DestinationY + Height - Index - 1; - } + case EfiBltVideoToVideo: + for (Index = 0; Index < Height; Index++) { + if (DestinationY <= SourceY) { + SrcY = SourceY + Index; + DstY = DestinationY + Index; + } else { + SrcY = SourceY + Height - Index - 1; + DstY = DestinationY + Height - Index - 1; + } - VbeBuffer = ((UINT8 *) VbeFrameBuffer + DstY * BytesPerScanLine + DestinationX * VbePixelWidth); - VbeBuffer1 = ((UINT8 *) VbeFrameBuffer + SrcY * BytesPerScanLine + SourceX * VbePixelWidth); + VbeBuffer = ((UINT8 *)VbeFrameBuffer + DstY * BytesPerScanLine + DestinationX * VbePixelWidth); + VbeBuffer1 = ((UINT8 *)VbeFrameBuffer + SrcY * BytesPerScanLine + SourceX * VbePixelWidth); - gBS->CopyMem ( - VbeBuffer, - VbeBuffer1, - TotalBytes - ); + gBS->CopyMem ( + VbeBuffer, + VbeBuffer1, + TotalBytes + ); + + // + // Update physical frame buffer. + // + CopyVideoBuffer ( + PciIo, + VbeBuffer, + MemAddress, + DestinationX, + DstY, + TotalBytes, + VbePixelWidth, + BytesPerScanLine + ); + } + + break; + case EfiBltVideoFill: + VbeBuffer = (UINT8 *)((UINTN)VbeFrameBuffer + (DestinationY * BytesPerScanLine) + DestinationX * VbePixelWidth); + Blt = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)BltUint8; // - // Update physical frame buffer. + // Shuffle the RGB fields in EFI_GRAPHICS_OUTPUT_BLT_PIXEL to match the hardware buffer // - CopyVideoBuffer ( - PciIo, - VbeBuffer, - MemAddress, - DestinationX, - DstY, - TotalBytes, - VbePixelWidth, - BytesPerScanLine - ); - } - break; + Pixel = ((Blt->Red & Mode->Red.Mask) << Mode->Red.Position) | + ( + (Blt->Green & Mode->Green.Mask) << + Mode->Green.Position + ) | + ((Blt->Blue & Mode->Blue.Mask) << Mode->Blue.Position); + + for (Index = 0; Index < Width; Index++) { + gBS->CopyMem ( + VbeBuffer, + &Pixel, + VbePixelWidth + ); + VbeBuffer += VbePixelWidth; + } - case EfiBltVideoFill: - VbeBuffer = (UINT8 *) ((UINTN) VbeFrameBuffer + (DestinationY * BytesPerScanLine) + DestinationX * VbePixelWidth); - Blt = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) BltUint8; - // - // Shuffle the RGB fields in EFI_GRAPHICS_OUTPUT_BLT_PIXEL to match the hardware buffer - // - Pixel = ((Blt->Red & Mode->Red.Mask) << Mode->Red.Position) | - ( - (Blt->Green & Mode->Green.Mask) << - Mode->Green.Position - ) | - ((Blt->Blue & Mode->Blue.Mask) << Mode->Blue.Position); + VbeBuffer = (UINT8 *)((UINTN)VbeFrameBuffer + (DestinationY * BytesPerScanLine) + DestinationX * VbePixelWidth); + for (DstY = DestinationY + 1; DstY < (Height + DestinationY); DstY++) { + gBS->CopyMem ( + (VOID *)((UINTN)VbeFrameBuffer + (DstY * BytesPerScanLine) + DestinationX * VbePixelWidth), + VbeBuffer, + TotalBytes + ); + } - for (Index = 0; Index < Width; Index++) { - gBS->CopyMem ( - VbeBuffer, - &Pixel, - VbePixelWidth - ); - VbeBuffer += VbePixelWidth; - } + for (DstY = DestinationY; DstY < (Height + DestinationY); DstY++) { + // + // Update physical frame buffer. + // + CopyVideoBuffer ( + PciIo, + VbeBuffer, + MemAddress, + DestinationX, + DstY, + TotalBytes, + VbePixelWidth, + BytesPerScanLine + ); + } - VbeBuffer = (UINT8 *) ((UINTN) VbeFrameBuffer + (DestinationY * BytesPerScanLine) + DestinationX * VbePixelWidth); - for (DstY = DestinationY + 1; DstY < (Height + DestinationY); DstY++) { - gBS->CopyMem ( - (VOID *) ((UINTN) VbeFrameBuffer + (DstY * BytesPerScanLine) + DestinationX * VbePixelWidth), - VbeBuffer, - TotalBytes - ); - } + break; - for (DstY = DestinationY; DstY < (Height + DestinationY); DstY++) { - // - // Update physical frame buffer. - // - CopyVideoBuffer ( - PciIo, - VbeBuffer, - MemAddress, - DestinationX, - DstY, - TotalBytes, - VbePixelWidth, - BytesPerScanLine - ); - } - break; + case EfiBltBufferToVideo: + for (SrcY = SourceY, DstY = DestinationY; SrcY < (Height + SourceY); SrcY++, DstY++) { + Blt = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)(BltUint8 + (SrcY * Delta) + (SourceX) * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); + VbeBuffer = ((UINT8 *)VbeFrameBuffer + (DstY * BytesPerScanLine + DestinationX * VbePixelWidth)); + for (DstX = DestinationX; DstX < (Width + DestinationX); DstX++) { + // + // Shuffle the RGB fields in EFI_GRAPHICS_OUTPUT_BLT_PIXEL to match the hardware buffer + // + Pixel = ((Blt->Red & Mode->Red.Mask) << Mode->Red.Position) | + ((Blt->Green & Mode->Green.Mask) << Mode->Green.Position) | + ((Blt->Blue & Mode->Blue.Mask) << Mode->Blue.Position); + gBS->CopyMem ( + VbeBuffer, + &Pixel, + VbePixelWidth + ); + Blt++; + VbeBuffer += VbePixelWidth; + } + + VbeBuffer = ((UINT8 *)VbeFrameBuffer + (DstY * BytesPerScanLine + DestinationX * VbePixelWidth)); - case EfiBltBufferToVideo: - for (SrcY = SourceY, DstY = DestinationY; SrcY < (Height + SourceY); SrcY++, DstY++) { - Blt = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) (BltUint8 + (SrcY * Delta) + (SourceX) * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); - VbeBuffer = ((UINT8 *) VbeFrameBuffer + (DstY * BytesPerScanLine + DestinationX * VbePixelWidth)); - for (DstX = DestinationX; DstX < (Width + DestinationX); DstX++) { // - // Shuffle the RGB fields in EFI_GRAPHICS_OUTPUT_BLT_PIXEL to match the hardware buffer + // Update physical frame buffer. // - Pixel = ((Blt->Red & Mode->Red.Mask) << Mode->Red.Position) | - ((Blt->Green & Mode->Green.Mask) << Mode->Green.Position) | - ((Blt->Blue & Mode->Blue.Mask) << Mode->Blue.Position); - gBS->CopyMem ( - VbeBuffer, - &Pixel, - VbePixelWidth - ); - Blt++; - VbeBuffer += VbePixelWidth; + CopyVideoBuffer ( + PciIo, + VbeBuffer, + MemAddress, + DestinationX, + DstY, + TotalBytes, + VbePixelWidth, + BytesPerScanLine + ); } - VbeBuffer = ((UINT8 *) VbeFrameBuffer + (DstY * BytesPerScanLine + DestinationX * VbePixelWidth)); + break; - // - // Update physical frame buffer. - // - CopyVideoBuffer ( - PciIo, - VbeBuffer, - MemAddress, - DestinationX, - DstY, - TotalBytes, - VbePixelWidth, - BytesPerScanLine - ); - } - break; - - default: ; + default:; } gBS->RestoreTPL (OriginalTPL); @@ -2529,15 +2595,15 @@ BiosVideoGraphicsOutputVbeBlt ( IN UINTN Delta ) { - BIOS_VIDEO_DEV *BiosVideoPrivate; - BIOS_VIDEO_MODE_DATA *Mode; + BIOS_VIDEO_DEV *BiosVideoPrivate; + BIOS_VIDEO_MODE_DATA *Mode; if (This == NULL) { return EFI_INVALID_PARAMETER; } - BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_GRAPHICS_OUTPUT_THIS (This); - Mode = &BiosVideoPrivate->ModeData[This->Mode->Mode]; + BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_GRAPHICS_OUTPUT_THIS (This); + Mode = &BiosVideoPrivate->ModeData[This->Mode->Mode]; return BiosVideoVbeBltWorker ( BiosVideoPrivate, @@ -2583,7 +2649,6 @@ WriteGraphicsController ( ); } - /** Read the four bit plane of VGA frame buffer. @@ -2606,11 +2671,11 @@ VgaReadBitPlanes ( UINTN Height ) { - UINTN BitPlane; - UINTN Rows; - UINTN FrameBufferOffset; - UINT8 *Source; - UINT8 *Destination; + UINTN BitPlane; + UINTN Rows; + UINTN FrameBufferOffset; + UINT8 *Source; + UINT8 *Destination; // // Program the Mode Register Write mode 0, Read mode 0 @@ -2624,7 +2689,8 @@ VgaReadBitPlanes ( for (BitPlane = 0, FrameBufferOffset = 0; BitPlane < VGA_NUMBER_OF_BIT_PLANES; BitPlane++, FrameBufferOffset += VGA_BYTES_PER_BIT_PLANE - ) { + ) + { // // Program the Read Map Select Register to select the correct bit plane // @@ -2639,18 +2705,17 @@ VgaReadBitPlanes ( for (Rows = 0; Rows < Height; Rows++, Source += VGA_BYTES_PER_SCAN_LINE, Destination += VGA_BYTES_PER_SCAN_LINE) { PciIo->Mem.Read ( - PciIo, - EfiPciIoWidthUint8, - EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) (UINTN) Source, - WidthInBytes, - (VOID *) Destination - ); + PciIo, + EfiPciIoWidthUint8, + EFI_PCI_IO_PASS_THROUGH_BAR, + (UINT64)(UINTN)Source, + WidthInBytes, + (VOID *)Destination + ); } } } - /** Internal routine to convert VGA color to Grahpics Output color. @@ -2670,12 +2735,12 @@ VgaConvertToGraphicsOutputColor ( EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer ) { - UINTN Mask; - UINTN Bit; - UINTN Color; + UINTN Mask; + UINTN Bit; + UINTN Color; MemoryBuffer += ((CoordinateY << 6) + (CoordinateY << 4) + (CoordinateX >> 3)); - Mask = mVgaBitMaskTable[CoordinateX & 0x07]; + Mask = mVgaBitMaskTable[CoordinateX & 0x07]; for (Bit = 0x01, Color = 0; Bit < 0x10; Bit <<= 1, MemoryBuffer += VGA_BYTES_PER_BIT_PLANE) { if ((*MemoryBuffer & Mask) != 0) { Color |= Bit; @@ -2695,12 +2760,12 @@ VgaConvertToGraphicsOutputColor ( **/ UINT8 VgaConvertColor ( - IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer ) { - UINT8 Color; + UINT8 Color; - Color = (UINT8) ((BltBuffer->Blue >> 7) | ((BltBuffer->Green >> 6) & 0x02) | ((BltBuffer->Red >> 5) & 0x04)); + Color = (UINT8)((BltBuffer->Blue >> 7) | ((BltBuffer->Green >> 6) & 0x02) | ((BltBuffer->Red >> 5) & 0x04)); if ((BltBuffer->Red + BltBuffer->Green + BltBuffer->Blue) > 0x180) { Color |= 0x08; } @@ -2708,7 +2773,6 @@ VgaConvertColor ( return Color; } - /** Grahpics Output protocol instance to block transfer for VGA device. @@ -2751,51 +2815,51 @@ BiosVideoGraphicsOutputVgaBlt ( IN UINTN Delta ) { - BIOS_VIDEO_DEV *BiosVideoPrivate; - EFI_TPL OriginalTPL; - UINT8 *MemAddress; - UINTN BytesPerScanLine; - UINTN Bit; - UINTN Index; - UINTN Index1; - UINTN StartAddress; - UINTN Bytes; - UINTN Offset; - UINT8 LeftMask; - UINT8 RightMask; - UINTN Address; - UINTN AddressFix; - UINT8 *Address1; - UINT8 *SourceAddress; - UINT8 *DestinationAddress; - EFI_PCI_IO_PROTOCOL *PciIo; - UINT8 Data; - UINT8 PixelColor; - UINT8 *VgaFrameBuffer; - UINTN SourceOffset; - UINTN SourceWidth; - UINTN Rows; - UINTN Columns; - UINTN CoordinateX; - UINTN CoordinateY; - UINTN CurrentMode; - - if (This == NULL || ((UINTN) BltOperation) >= EfiGraphicsOutputBltOperationMax) { + BIOS_VIDEO_DEV *BiosVideoPrivate; + EFI_TPL OriginalTPL; + UINT8 *MemAddress; + UINTN BytesPerScanLine; + UINTN Bit; + UINTN Index; + UINTN Index1; + UINTN StartAddress; + UINTN Bytes; + UINTN Offset; + UINT8 LeftMask; + UINT8 RightMask; + UINTN Address; + UINTN AddressFix; + UINT8 *Address1; + UINT8 *SourceAddress; + UINT8 *DestinationAddress; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT8 Data; + UINT8 PixelColor; + UINT8 *VgaFrameBuffer; + UINTN SourceOffset; + UINTN SourceWidth; + UINTN Rows; + UINTN Columns; + UINTN CoordinateX; + UINTN CoordinateY; + UINTN CurrentMode; + + if ((This == NULL) || (((UINTN)BltOperation) >= EfiGraphicsOutputBltOperationMax)) { return EFI_INVALID_PARAMETER; } - BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_GRAPHICS_OUTPUT_THIS (This); - - CurrentMode = This->Mode->Mode; - PciIo = BiosVideoPrivate->PciIo; - MemAddress = BiosVideoPrivate->ModeData[CurrentMode].LinearFrameBuffer; - BytesPerScanLine = BiosVideoPrivate->ModeData[CurrentMode].BytesPerScanLine >> 3; - VgaFrameBuffer = BiosVideoPrivate->VgaFrameBuffer; + BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_GRAPHICS_OUTPUT_THIS (This); + CurrentMode = This->Mode->Mode; + PciIo = BiosVideoPrivate->PciIo; + MemAddress = BiosVideoPrivate->ModeData[CurrentMode].LinearFrameBuffer; + BytesPerScanLine = BiosVideoPrivate->ModeData[CurrentMode].BytesPerScanLine >> 3; + VgaFrameBuffer = BiosVideoPrivate->VgaFrameBuffer; - if (Width == 0 || Height == 0) { + if ((Width == 0) || (Height == 0)) { return EFI_INVALID_PARAMETER; } + // // We need to fill the Virtual Screen buffer with the blt data. // The virtual screen is upside down, as the first row is the bootom row of @@ -2824,6 +2888,7 @@ BiosVideoGraphicsOutputVgaBlt ( return EFI_INVALID_PARAMETER; } } + // // If Delta is zero, then the entire BltBuffer is being used, so Delta // is the number of bytes in each row of BltBuffer. Since BltBuffer is Width pixels size, @@ -2832,6 +2897,7 @@ BiosVideoGraphicsOutputVgaBlt ( if (Delta == 0) { Delta = Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL); } + // // We have to raise to TPL Notify, so we make an atomic write the frame buffer. // We would not want a timer based event (Cursor, ...) to come in while we are @@ -2843,67 +2909,10 @@ BiosVideoGraphicsOutputVgaBlt ( // Compute some values we need for VGA // switch (BltOperation) { - case EfiBltVideoToBltBuffer: - - SourceOffset = (SourceY << 6) + (SourceY << 4) + (SourceX >> 3); - SourceWidth = ((SourceX + Width - 1) >> 3) - (SourceX >> 3) + 1; - - // - // Read all the pixels in the 4 bit planes into a memory buffer that looks like the VGA buffer - // - VgaReadBitPlanes ( - PciIo, - MemAddress + SourceOffset, - VgaFrameBuffer + SourceOffset, - SourceWidth, - Height - ); - - // - // Convert VGA Bit Planes to a Graphics Output 32-bit color value - // - BltBuffer += (DestinationY * (Delta >> 2) + DestinationX); - for (Rows = 0, CoordinateY = SourceY; Rows < Height; Rows++, CoordinateY++, BltBuffer += (Delta >> 2)) { - for (Columns = 0, CoordinateX = SourceX; Columns < Width; Columns++, CoordinateX++, BltBuffer++) { - VgaConvertToGraphicsOutputColor (VgaFrameBuffer, CoordinateX, CoordinateY, BltBuffer); - } - - BltBuffer -= Width; - } + case EfiBltVideoToBltBuffer: - break; - - case EfiBltVideoToVideo: - // - // Check for an aligned Video to Video operation - // - if ((SourceX & 0x07) == 0x00 && (DestinationX & 0x07) == 0x00 && (Width & 0x07) == 0x00) { - // - // Program the Mode Register Write mode 1, Read mode 0 - // - WriteGraphicsController ( - PciIo, - VGA_GRAPHICS_CONTROLLER_MODE_REGISTER, - VGA_GRAPHICS_CONTROLLER_READ_MODE_0 | VGA_GRAPHICS_CONTROLLER_WRITE_MODE_1 - ); - - SourceAddress = (UINT8 *) (MemAddress + (SourceY << 6) + (SourceY << 4) + (SourceX >> 3)); - DestinationAddress = (UINT8 *) (MemAddress + (DestinationY << 6) + (DestinationY << 4) + (DestinationX >> 3)); - Bytes = Width >> 3; - for (Index = 0, Offset = 0; Index < Height; Index++, Offset += BytesPerScanLine) { - PciIo->CopyMem ( - PciIo, - EfiPciIoWidthUint8, - EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) (UINTN) (DestinationAddress + Offset), - EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) (UINTN) (SourceAddress + Offset), - Bytes - ); - } - } else { - SourceOffset = (SourceY << 6) + (SourceY << 4) + (SourceX >> 3); - SourceWidth = ((SourceX + Width - 1) >> 3) - (SourceX >> 3) + 1; + SourceOffset = (SourceY << 6) + (SourceY << 4) + (SourceX >> 3); + SourceWidth = ((SourceX + Width - 1) >> 3) - (SourceX >> 3) + 1; // // Read all the pixels in the 4 bit planes into a memory buffer that looks like the VGA buffer @@ -2915,218 +2924,277 @@ BiosVideoGraphicsOutputVgaBlt ( SourceWidth, Height ); - } - break; - - case EfiBltVideoFill: - StartAddress = (UINTN) (MemAddress + (DestinationY << 6) + (DestinationY << 4) + (DestinationX >> 3)); - Bytes = ((DestinationX + Width - 1) >> 3) - (DestinationX >> 3); - LeftMask = mVgaLeftMaskTable[DestinationX & 0x07]; - RightMask = mVgaRightMaskTable[(DestinationX + Width - 1) & 0x07]; - if (Bytes == 0) { - LeftMask = (UINT8) (LeftMask & RightMask); - RightMask = 0; - } - - if (LeftMask == 0xff) { - StartAddress--; - Bytes++; - LeftMask = 0; - } - - if (RightMask == 0xff) { - Bytes++; - RightMask = 0; - } - - PixelColor = VgaConvertColor (BltBuffer); + // + // Convert VGA Bit Planes to a Graphics Output 32-bit color value + // + BltBuffer += (DestinationY * (Delta >> 2) + DestinationX); + for (Rows = 0, CoordinateY = SourceY; Rows < Height; Rows++, CoordinateY++, BltBuffer += (Delta >> 2)) { + for (Columns = 0, CoordinateX = SourceX; Columns < Width; Columns++, CoordinateX++, BltBuffer++) { + VgaConvertToGraphicsOutputColor (VgaFrameBuffer, CoordinateX, CoordinateY, BltBuffer); + } - // - // Program the Mode Register Write mode 2, Read mode 0 - // - WriteGraphicsController ( - PciIo, - VGA_GRAPHICS_CONTROLLER_MODE_REGISTER, - VGA_GRAPHICS_CONTROLLER_READ_MODE_0 | VGA_GRAPHICS_CONTROLLER_WRITE_MODE_2 - ); + BltBuffer -= Width; + } - // - // Program the Data Rotate/Function Select Register to replace - // - WriteGraphicsController ( - PciIo, - VGA_GRAPHICS_CONTROLLER_DATA_ROTATE_REGISTER, - VGA_GRAPHICS_CONTROLLER_FUNCTION_REPLACE - ); + break; - if (LeftMask != 0) { + case EfiBltVideoToVideo: // - // Program the BitMask register with the Left column mask + // Check for an aligned Video to Video operation // - WriteGraphicsController ( - PciIo, - VGA_GRAPHICS_CONTROLLER_BIT_MASK_REGISTER, - LeftMask - ); - - for (Index = 0, Address = StartAddress; Index < Height; Index++, Address += BytesPerScanLine) { + if (((SourceX & 0x07) == 0x00) && ((DestinationX & 0x07) == 0x00) && ((Width & 0x07) == 0x00)) { // - // Read data from the bit planes into the latches + // Program the Mode Register Write mode 1, Read mode 0 // - PciIo->Mem.Read ( - PciIo, - EfiPciIoWidthUint8, - EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) (UINTN) Address, - 1, - &Data - ); + WriteGraphicsController ( + PciIo, + VGA_GRAPHICS_CONTROLLER_MODE_REGISTER, + VGA_GRAPHICS_CONTROLLER_READ_MODE_0 | VGA_GRAPHICS_CONTROLLER_WRITE_MODE_1 + ); + + SourceAddress = (UINT8 *)(MemAddress + (SourceY << 6) + (SourceY << 4) + (SourceX >> 3)); + DestinationAddress = (UINT8 *)(MemAddress + (DestinationY << 6) + (DestinationY << 4) + (DestinationX >> 3)); + Bytes = Width >> 3; + for (Index = 0, Offset = 0; Index < Height; Index++, Offset += BytesPerScanLine) { + PciIo->CopyMem ( + PciIo, + EfiPciIoWidthUint8, + EFI_PCI_IO_PASS_THROUGH_BAR, + (UINT64)(UINTN)(DestinationAddress + Offset), + EFI_PCI_IO_PASS_THROUGH_BAR, + (UINT64)(UINTN)(SourceAddress + Offset), + Bytes + ); + } + } else { + SourceOffset = (SourceY << 6) + (SourceY << 4) + (SourceX >> 3); + SourceWidth = ((SourceX + Width - 1) >> 3) - (SourceX >> 3) + 1; + // - // Write the lower 4 bits of PixelColor to the bit planes in the pixels enabled by BitMask + // Read all the pixels in the 4 bit planes into a memory buffer that looks like the VGA buffer // - PciIo->Mem.Write ( - PciIo, - EfiPciIoWidthUint8, - EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) (UINTN) Address, - 1, - &PixelColor - ); + VgaReadBitPlanes ( + PciIo, + MemAddress + SourceOffset, + VgaFrameBuffer + SourceOffset, + SourceWidth, + Height + ); } - } - if (Bytes > 1) { + break; + + case EfiBltVideoFill: + StartAddress = (UINTN)(MemAddress + (DestinationY << 6) + (DestinationY << 4) + (DestinationX >> 3)); + Bytes = ((DestinationX + Width - 1) >> 3) - (DestinationX >> 3); + LeftMask = mVgaLeftMaskTable[DestinationX & 0x07]; + RightMask = mVgaRightMaskTable[(DestinationX + Width - 1) & 0x07]; + if (Bytes == 0) { + LeftMask = (UINT8)(LeftMask & RightMask); + RightMask = 0; + } + + if (LeftMask == 0xff) { + StartAddress--; + Bytes++; + LeftMask = 0; + } + + if (RightMask == 0xff) { + Bytes++; + RightMask = 0; + } + + PixelColor = VgaConvertColor (BltBuffer); + // - // Program the BitMask register with the middle column mask of 0xff + // Program the Mode Register Write mode 2, Read mode 0 // WriteGraphicsController ( PciIo, - VGA_GRAPHICS_CONTROLLER_BIT_MASK_REGISTER, - 0xff + VGA_GRAPHICS_CONTROLLER_MODE_REGISTER, + VGA_GRAPHICS_CONTROLLER_READ_MODE_0 | VGA_GRAPHICS_CONTROLLER_WRITE_MODE_2 ); - for (Index = 0, Address = StartAddress + 1; Index < Height; Index++, Address += BytesPerScanLine) { - PciIo->Mem.Write ( - PciIo, - EfiPciIoWidthFillUint8, - EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) (UINTN) Address, - Bytes - 1, - &PixelColor - ); - } - } - - if (RightMask != 0) { // - // Program the BitMask register with the Right column mask + // Program the Data Rotate/Function Select Register to replace // WriteGraphicsController ( PciIo, - VGA_GRAPHICS_CONTROLLER_BIT_MASK_REGISTER, - RightMask + VGA_GRAPHICS_CONTROLLER_DATA_ROTATE_REGISTER, + VGA_GRAPHICS_CONTROLLER_FUNCTION_REPLACE ); - for (Index = 0, Address = StartAddress + Bytes; Index < Height; Index++, Address += BytesPerScanLine) { - // - // Read data from the bit planes into the latches - // - PciIo->Mem.Read ( - PciIo, - EfiPciIoWidthUint8, - EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) (UINTN) Address, - 1, - &Data - ); + if (LeftMask != 0) { // - // Write the lower 4 bits of PixelColor to the bit planes in the pixels enabled by BitMask + // Program the BitMask register with the Left column mask // - PciIo->Mem.Write ( - PciIo, - EfiPciIoWidthUint8, - EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) (UINTN) Address, - 1, - &PixelColor - ); - } - } - break; - - case EfiBltBufferToVideo: - StartAddress = (UINTN) (MemAddress + (DestinationY << 6) + (DestinationY << 4) + (DestinationX >> 3)); - LeftMask = mVgaBitMaskTable[DestinationX & 0x07]; + WriteGraphicsController ( + PciIo, + VGA_GRAPHICS_CONTROLLER_BIT_MASK_REGISTER, + LeftMask + ); - // - // Program the Mode Register Write mode 2, Read mode 0 - // - WriteGraphicsController ( - PciIo, - VGA_GRAPHICS_CONTROLLER_MODE_REGISTER, - VGA_GRAPHICS_CONTROLLER_READ_MODE_0 | VGA_GRAPHICS_CONTROLLER_WRITE_MODE_2 - ); + for (Index = 0, Address = StartAddress; Index < Height; Index++, Address += BytesPerScanLine) { + // + // Read data from the bit planes into the latches + // + PciIo->Mem.Read ( + PciIo, + EfiPciIoWidthUint8, + EFI_PCI_IO_PASS_THROUGH_BAR, + (UINT64)(UINTN)Address, + 1, + &Data + ); + // + // Write the lower 4 bits of PixelColor to the bit planes in the pixels enabled by BitMask + // + PciIo->Mem.Write ( + PciIo, + EfiPciIoWidthUint8, + EFI_PCI_IO_PASS_THROUGH_BAR, + (UINT64)(UINTN)Address, + 1, + &PixelColor + ); + } + } - // - // Program the Data Rotate/Function Select Register to replace - // - WriteGraphicsController ( - PciIo, - VGA_GRAPHICS_CONTROLLER_DATA_ROTATE_REGISTER, - VGA_GRAPHICS_CONTROLLER_FUNCTION_REPLACE - ); + if (Bytes > 1) { + // + // Program the BitMask register with the middle column mask of 0xff + // + WriteGraphicsController ( + PciIo, + VGA_GRAPHICS_CONTROLLER_BIT_MASK_REGISTER, + 0xff + ); - for (Index = 0, Address = StartAddress; Index < Height; Index++, Address += BytesPerScanLine) { - for (Index1 = 0; Index1 < Width; Index1++) { - BiosVideoPrivate->LineBuffer[Index1] = VgaConvertColor (&BltBuffer[(SourceY + Index) * (Delta >> 2) + SourceX + Index1]); + for (Index = 0, Address = StartAddress + 1; Index < Height; Index++, Address += BytesPerScanLine) { + PciIo->Mem.Write ( + PciIo, + EfiPciIoWidthFillUint8, + EFI_PCI_IO_PASS_THROUGH_BAR, + (UINT64)(UINTN)Address, + Bytes - 1, + &PixelColor + ); + } } - AddressFix = Address; - for (Bit = 0; Bit < 8; Bit++) { + if (RightMask != 0) { // - // Program the BitMask register with the Left column mask + // Program the BitMask register with the Right column mask // WriteGraphicsController ( PciIo, VGA_GRAPHICS_CONTROLLER_BIT_MASK_REGISTER, - LeftMask + RightMask ); - for (Index1 = Bit, Address1 = (UINT8 *) AddressFix; Index1 < Width; Index1 += 8, Address1++) { + for (Index = 0, Address = StartAddress + Bytes; Index < Height; Index++, Address += BytesPerScanLine) { // // Read data from the bit planes into the latches // PciIo->Mem.Read ( - PciIo, - EfiPciIoWidthUint8, - EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) (UINTN) Address1, - 1, - &Data - ); - + PciIo, + EfiPciIoWidthUint8, + EFI_PCI_IO_PASS_THROUGH_BAR, + (UINT64)(UINTN)Address, + 1, + &Data + ); + // + // Write the lower 4 bits of PixelColor to the bit planes in the pixels enabled by BitMask + // PciIo->Mem.Write ( - PciIo, - EfiPciIoWidthUint8, - EFI_PCI_IO_PASS_THROUGH_BAR, - (UINT64) (UINTN) Address1, - 1, - &BiosVideoPrivate->LineBuffer[Index1] - ); + PciIo, + EfiPciIoWidthUint8, + EFI_PCI_IO_PASS_THROUGH_BAR, + (UINT64)(UINTN)Address, + 1, + &PixelColor + ); } + } + + break; + + case EfiBltBufferToVideo: + StartAddress = (UINTN)(MemAddress + (DestinationY << 6) + (DestinationY << 4) + (DestinationX >> 3)); + LeftMask = mVgaBitMaskTable[DestinationX & 0x07]; + + // + // Program the Mode Register Write mode 2, Read mode 0 + // + WriteGraphicsController ( + PciIo, + VGA_GRAPHICS_CONTROLLER_MODE_REGISTER, + VGA_GRAPHICS_CONTROLLER_READ_MODE_0 | VGA_GRAPHICS_CONTROLLER_WRITE_MODE_2 + ); + + // + // Program the Data Rotate/Function Select Register to replace + // + WriteGraphicsController ( + PciIo, + VGA_GRAPHICS_CONTROLLER_DATA_ROTATE_REGISTER, + VGA_GRAPHICS_CONTROLLER_FUNCTION_REPLACE + ); - LeftMask = (UINT8) (LeftMask >> 1); - if (LeftMask == 0) { - LeftMask = 0x80; - AddressFix++; + for (Index = 0, Address = StartAddress; Index < Height; Index++, Address += BytesPerScanLine) { + for (Index1 = 0; Index1 < Width; Index1++) { + BiosVideoPrivate->LineBuffer[Index1] = VgaConvertColor (&BltBuffer[(SourceY + Index) * (Delta >> 2) + SourceX + Index1]); + } + + AddressFix = Address; + + for (Bit = 0; Bit < 8; Bit++) { + // + // Program the BitMask register with the Left column mask + // + WriteGraphicsController ( + PciIo, + VGA_GRAPHICS_CONTROLLER_BIT_MASK_REGISTER, + LeftMask + ); + + for (Index1 = Bit, Address1 = (UINT8 *)AddressFix; Index1 < Width; Index1 += 8, Address1++) { + // + // Read data from the bit planes into the latches + // + PciIo->Mem.Read ( + PciIo, + EfiPciIoWidthUint8, + EFI_PCI_IO_PASS_THROUGH_BAR, + (UINT64)(UINTN)Address1, + 1, + &Data + ); + + PciIo->Mem.Write ( + PciIo, + EfiPciIoWidthUint8, + EFI_PCI_IO_PASS_THROUGH_BAR, + (UINT64)(UINTN)Address1, + 1, + &BiosVideoPrivate->LineBuffer[Index1] + ); + } + + LeftMask = (UINT8)(LeftMask >> 1); + if (LeftMask == 0) { + LeftMask = 0x80; + AddressFix++; + } } } - } - break; + break; - default: ; + default:; } gBS->RestoreTPL (OriginalTPL); @@ -3155,8 +3223,8 @@ BiosVideoVgaMiniPortSetMode ( IN UINTN ModeNumber ) { - BIOS_VIDEO_DEV *BiosVideoPrivate; - EFI_IA32_REGISTER_SET Regs; + BIOS_VIDEO_DEV *BiosVideoPrivate; + EFI_IA32_REGISTER_SET Regs; if (This == NULL) { return EFI_INVALID_PARAMETER; @@ -3168,41 +3236,42 @@ BiosVideoVgaMiniPortSetMode ( if (ModeNumber >= This->MaxMode) { return EFI_UNSUPPORTED; } + // // Get the device structure for this device // BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_VGA_MINI_PORT_THIS (This); switch (ModeNumber) { - case 0: - // - // Set the 80x25 Text VGA Mode - // - Regs.H.AH = 0x00; - Regs.H.AL = 0x83; - BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs); + case 0: + // + // Set the 80x25 Text VGA Mode + // + Regs.H.AH = 0x00; + Regs.H.AL = 0x83; + BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs); - Regs.H.AH = 0x11; - Regs.H.AL = 0x14; - Regs.H.BL = 0; - BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs); - break; + Regs.H.AH = 0x11; + Regs.H.AL = 0x14; + Regs.H.BL = 0; + BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs); + break; - case 1: - // - // Set the 80x50 Text VGA Mode - // - Regs.H.AH = 0x00; - Regs.H.AL = 0x83; - BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs); - Regs.H.AH = 0x11; - Regs.H.AL = 0x12; - Regs.H.BL = 0; - BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs); - break; + case 1: + // + // Set the 80x50 Text VGA Mode + // + Regs.H.AH = 0x00; + Regs.H.AL = 0x83; + BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs); + Regs.H.AH = 0x11; + Regs.H.AL = 0x12; + Regs.H.BL = 0; + BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs); + break; - default: - return EFI_UNSUPPORTED; + default: + return EFI_UNSUPPORTED; } return EFI_SUCCESS; @@ -3218,14 +3287,14 @@ BiosVideoVgaMiniPortSetMode ( VOID EFIAPI BiosVideoNotifyExitBootServices ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { BIOS_VIDEO_DEV *BiosVideoPrivate; EFI_IA32_REGISTER_SET Regs; - BiosVideoPrivate = (BIOS_VIDEO_DEV *)Context; + BiosVideoPrivate = (BIOS_VIDEO_DEV *)Context; // // Set the 80x25 Text VGA Mode @@ -3256,9 +3325,9 @@ BiosVideoNotifyExitBootServices ( **/ EFI_STATUS EFIAPI -BiosVideoEntryPoint( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable +BiosVideoEntryPoint ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; diff --git a/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.h b/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.h index fb4cc65fd9..a2cb624d5a 100644 --- a/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.h +++ b/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.h @@ -42,88 +42,88 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // position of RGB in the frame buffer is specified in the VBE Mode information // typedef struct { - UINT8 Position; // Position of the color - UINT8 Mask; // The number of bits expressed as a mask + UINT8 Position; // Position of the color + UINT8 Mask; // The number of bits expressed as a mask } BIOS_VIDEO_COLOR_PLACEMENT; // // BIOS Graphics Output Graphical Mode Data // typedef struct { - UINT16 VbeModeNumber; - UINT16 BytesPerScanLine; - VOID *LinearFrameBuffer; - UINTN FrameBufferSize; - UINT32 HorizontalResolution; - UINT32 VerticalResolution; - UINT32 ColorDepth; - UINT32 RefreshRate; - UINT32 BitsPerPixel; - BIOS_VIDEO_COLOR_PLACEMENT Red; - BIOS_VIDEO_COLOR_PLACEMENT Green; - BIOS_VIDEO_COLOR_PLACEMENT Blue; - BIOS_VIDEO_COLOR_PLACEMENT Reserved; - EFI_GRAPHICS_PIXEL_FORMAT PixelFormat; - EFI_PIXEL_BITMASK PixelBitMask; + UINT16 VbeModeNumber; + UINT16 BytesPerScanLine; + VOID *LinearFrameBuffer; + UINTN FrameBufferSize; + UINT32 HorizontalResolution; + UINT32 VerticalResolution; + UINT32 ColorDepth; + UINT32 RefreshRate; + UINT32 BitsPerPixel; + BIOS_VIDEO_COLOR_PLACEMENT Red; + BIOS_VIDEO_COLOR_PLACEMENT Green; + BIOS_VIDEO_COLOR_PLACEMENT Blue; + BIOS_VIDEO_COLOR_PLACEMENT Reserved; + EFI_GRAPHICS_PIXEL_FORMAT PixelFormat; + EFI_PIXEL_BITMASK PixelBitMask; } BIOS_VIDEO_MODE_DATA; // // BIOS video child handle private data Structure // -#define BIOS_VIDEO_DEV_SIGNATURE SIGNATURE_32 ('B', 'V', 'M', 'p') +#define BIOS_VIDEO_DEV_SIGNATURE SIGNATURE_32 ('B', 'V', 'M', 'p') typedef struct { - UINTN Signature; - EFI_HANDLE Handle; + UINTN Signature; + EFI_HANDLE Handle; // // Consumed Protocols // - EFI_PCI_IO_PROTOCOL *PciIo; - EFI_LEGACY_BIOS_PROTOCOL *LegacyBios; + EFI_PCI_IO_PROTOCOL *PciIo; + EFI_LEGACY_BIOS_PROTOCOL *LegacyBios; // // Produced Protocols // - EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput; - EFI_EDID_DISCOVERED_PROTOCOL EdidDiscovered; - EFI_EDID_ACTIVE_PROTOCOL EdidActive; - EFI_VGA_MINI_PORT_PROTOCOL VgaMiniPort; + EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput; + EFI_EDID_DISCOVERED_PROTOCOL EdidDiscovered; + EFI_EDID_ACTIVE_PROTOCOL EdidActive; + EFI_VGA_MINI_PORT_PROTOCOL VgaMiniPort; // // General fields // - BOOLEAN VgaCompatible; - BOOLEAN ProduceGraphicsOutput; + BOOLEAN VgaCompatible; + BOOLEAN ProduceGraphicsOutput; // // Graphics Output Protocol related fields // - BOOLEAN HardwareNeedsStarting; - UINTN CurrentMode; - UINTN MaxMode; - BIOS_VIDEO_MODE_DATA *ModeData; - UINT8 *LineBuffer; - EFI_GRAPHICS_OUTPUT_BLT_PIXEL *VbeFrameBuffer; - UINT8 *VgaFrameBuffer; + BOOLEAN HardwareNeedsStarting; + UINTN CurrentMode; + UINTN MaxMode; + BIOS_VIDEO_MODE_DATA *ModeData; + UINT8 *LineBuffer; + EFI_GRAPHICS_OUTPUT_BLT_PIXEL *VbeFrameBuffer; + UINT8 *VgaFrameBuffer; // // VESA Bios Extensions related fields // - UINTN NumberOfPagesBelow1MB; // Number of 4KB pages in PagesBelow1MB - EFI_PHYSICAL_ADDRESS PagesBelow1MB; // Buffer for all VBE Information Blocks - VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK *VbeInformationBlock; // 0x200 bytes. Must be allocated below 1MB - VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK *VbeModeInformationBlock; // 0x100 bytes. Must be allocated below 1MB - VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK *VbeEdidDataBlock; // 0x80 bytes. Must be allocated below 1MB - VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK *VbeCrtcInformationBlock; // 59 bytes. Must be allocated below 1MB - UINTN VbeSaveRestorePages; // Number of 4KB pages in VbeSaveRestoreBuffer - EFI_PHYSICAL_ADDRESS VbeSaveRestoreBuffer; // Must be allocated below 1MB + UINTN NumberOfPagesBelow1MB; // Number of 4KB pages in PagesBelow1MB + EFI_PHYSICAL_ADDRESS PagesBelow1MB; // Buffer for all VBE Information Blocks + VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK *VbeInformationBlock; // 0x200 bytes. Must be allocated below 1MB + VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK *VbeModeInformationBlock; // 0x100 bytes. Must be allocated below 1MB + VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK *VbeEdidDataBlock; // 0x80 bytes. Must be allocated below 1MB + VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK *VbeCrtcInformationBlock; // 59 bytes. Must be allocated below 1MB + UINTN VbeSaveRestorePages; // Number of 4KB pages in VbeSaveRestoreBuffer + EFI_PHYSICAL_ADDRESS VbeSaveRestoreBuffer; // Must be allocated below 1MB // // Status code // - EFI_DEVICE_PATH_PROTOCOL *GopDevicePath; + EFI_DEVICE_PATH_PROTOCOL *GopDevicePath; - EFI_EVENT ExitBootServicesEvent; + EFI_EVENT ExitBootServicesEvent; } BIOS_VIDEO_DEV; #define BIOS_VIDEO_DEV_FROM_PCI_IO_THIS(a) CR (a, BIOS_VIDEO_DEV, PciIo, BIOS_VIDEO_DEV_SIGNATURE) @@ -164,7 +164,6 @@ BiosVideoDriverBindingSupported ( IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); - /** Install Graphics Output Protocol onto VGA device handles. @@ -184,7 +183,6 @@ BiosVideoDriverBindingStart ( IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); - /** Stop. @@ -223,7 +221,6 @@ BiosVideoCheckForVbe ( IN OUT BIOS_VIDEO_DEV *BiosVideoPrivate ); - /** Check for VGA device. @@ -237,9 +234,6 @@ BiosVideoCheckForVga ( IN OUT BIOS_VIDEO_DEV *BiosVideoPrivate ); - - - /** Release resource for BIOS video instance. @@ -282,7 +276,6 @@ BiosVideoGraphicsOutputQueryMode ( OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info ); - /** Graphics Output protocol interface to set video mode. @@ -298,11 +291,10 @@ BiosVideoGraphicsOutputQueryMode ( EFI_STATUS EFIAPI BiosVideoGraphicsOutputSetMode ( - IN EFI_GRAPHICS_OUTPUT_PROTOCOL * This, - IN UINT32 ModeNumber + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, + IN UINT32 ModeNumber ); - /** Graphics Output protocol instance to block transfer for VBE device. @@ -345,7 +337,6 @@ BiosVideoGraphicsOutputVbeBlt ( IN UINTN Delta ); - /** Graphics Output protocol instance to block transfer for VGA device. @@ -419,50 +410,50 @@ BiosVideoVgaMiniPortSetMode ( VOID EFIAPI BiosVideoNotifyExitBootServices ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ); // // Standard VGA Definitions // -#define VGA_HORIZONTAL_RESOLUTION 640 -#define VGA_VERTICAL_RESOLUTION 480 -#define VGA_NUMBER_OF_BIT_PLANES 4 -#define VGA_PIXELS_PER_BYTE 8 -#define VGA_BYTES_PER_SCAN_LINE (VGA_HORIZONTAL_RESOLUTION / VGA_PIXELS_PER_BYTE) -#define VGA_BYTES_PER_BIT_PLANE (VGA_VERTICAL_RESOLUTION * VGA_BYTES_PER_SCAN_LINE) +#define VGA_HORIZONTAL_RESOLUTION 640 +#define VGA_VERTICAL_RESOLUTION 480 +#define VGA_NUMBER_OF_BIT_PLANES 4 +#define VGA_PIXELS_PER_BYTE 8 +#define VGA_BYTES_PER_SCAN_LINE (VGA_HORIZONTAL_RESOLUTION / VGA_PIXELS_PER_BYTE) +#define VGA_BYTES_PER_BIT_PLANE (VGA_VERTICAL_RESOLUTION * VGA_BYTES_PER_SCAN_LINE) -#define VGA_GRAPHICS_CONTROLLER_ADDRESS_REGISTER 0x3ce -#define VGA_GRAPHICS_CONTROLLER_DATA_REGISTER 0x3cf +#define VGA_GRAPHICS_CONTROLLER_ADDRESS_REGISTER 0x3ce +#define VGA_GRAPHICS_CONTROLLER_DATA_REGISTER 0x3cf -#define VGA_GRAPHICS_CONTROLLER_SET_RESET_REGISTER 0x00 +#define VGA_GRAPHICS_CONTROLLER_SET_RESET_REGISTER 0x00 -#define VGA_GRAPHICS_CONTROLLER_ENABLE_SET_RESET_REGISTER 0x01 +#define VGA_GRAPHICS_CONTROLLER_ENABLE_SET_RESET_REGISTER 0x01 -#define VGA_GRAPHICS_CONTROLLER_COLOR_COMPARE_REGISTER 0x02 +#define VGA_GRAPHICS_CONTROLLER_COLOR_COMPARE_REGISTER 0x02 -#define VGA_GRAPHICS_CONTROLLER_DATA_ROTATE_REGISTER 0x03 -#define VGA_GRAPHICS_CONTROLLER_FUNCTION_REPLACE 0x00 -#define VGA_GRAPHICS_CONTROLLER_FUNCTION_AND 0x08 -#define VGA_GRAPHICS_CONTROLLER_FUNCTION_OR 0x10 -#define VGA_GRAPHICS_CONTROLLER_FUNCTION_XOR 0x18 +#define VGA_GRAPHICS_CONTROLLER_DATA_ROTATE_REGISTER 0x03 +#define VGA_GRAPHICS_CONTROLLER_FUNCTION_REPLACE 0x00 +#define VGA_GRAPHICS_CONTROLLER_FUNCTION_AND 0x08 +#define VGA_GRAPHICS_CONTROLLER_FUNCTION_OR 0x10 +#define VGA_GRAPHICS_CONTROLLER_FUNCTION_XOR 0x18 #define VGA_GRAPHICS_CONTROLLER_READ_MAP_SELECT_REGISTER 0x04 -#define VGA_GRAPHICS_CONTROLLER_MODE_REGISTER 0x05 -#define VGA_GRAPHICS_CONTROLLER_READ_MODE_0 0x00 -#define VGA_GRAPHICS_CONTROLLER_READ_MODE_1 0x08 -#define VGA_GRAPHICS_CONTROLLER_WRITE_MODE_0 0x00 -#define VGA_GRAPHICS_CONTROLLER_WRITE_MODE_1 0x01 -#define VGA_GRAPHICS_CONTROLLER_WRITE_MODE_2 0x02 -#define VGA_GRAPHICS_CONTROLLER_WRITE_MODE_3 0x03 +#define VGA_GRAPHICS_CONTROLLER_MODE_REGISTER 0x05 +#define VGA_GRAPHICS_CONTROLLER_READ_MODE_0 0x00 +#define VGA_GRAPHICS_CONTROLLER_READ_MODE_1 0x08 +#define VGA_GRAPHICS_CONTROLLER_WRITE_MODE_0 0x00 +#define VGA_GRAPHICS_CONTROLLER_WRITE_MODE_1 0x01 +#define VGA_GRAPHICS_CONTROLLER_WRITE_MODE_2 0x02 +#define VGA_GRAPHICS_CONTROLLER_WRITE_MODE_3 0x03 -#define VGA_GRAPHICS_CONTROLLER_MISCELLANEOUS_REGISTER 0x06 +#define VGA_GRAPHICS_CONTROLLER_MISCELLANEOUS_REGISTER 0x06 #define VGA_GRAPHICS_CONTROLLER_COLOR_DONT_CARE_REGISTER 0x07 -#define VGA_GRAPHICS_CONTROLLER_BIT_MASK_REGISTER 0x08 +#define VGA_GRAPHICS_CONTROLLER_BIT_MASK_REGISTER 0x08 /** Install child handles if the Handle supports MBR format. @@ -500,9 +491,9 @@ BiosVideoChildHandleInstall ( **/ EFI_STATUS BiosVideoChildHandleUninstall ( - EFI_DRIVER_BINDING_PROTOCOL *This, - EFI_HANDLE Controller, - EFI_HANDLE Handle + EFI_DRIVER_BINDING_PROTOCOL *This, + EFI_HANDLE Controller, + EFI_HANDLE Handle ); /** @@ -529,4 +520,5 @@ BOOLEAN HasChildHandle ( IN EFI_HANDLE Controller ); + #endif diff --git a/OvmfPkg/Csm/BiosThunk/VideoDxe/ComponentName.c b/OvmfPkg/Csm/BiosThunk/VideoDxe/ComponentName.c index dc914aa2f3..c401ed943b 100644 --- a/OvmfPkg/Csm/BiosThunk/VideoDxe/ComponentName.c +++ b/OvmfPkg/Csm/BiosThunk/VideoDxe/ComponentName.c @@ -11,6 +11,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // // EFI Component Name Functions // + /** Retrieves a Unicode string that is the user readable name of the driver. @@ -58,7 +59,6 @@ BiosVideoComponentNameGetDriverName ( OUT CHAR16 **DriverName ); - /** Retrieves a Unicode string that is the user readable name of the controller that is being managed by a driver. @@ -130,14 +130,13 @@ BiosVideoComponentNameGetDriverName ( EFI_STATUS EFIAPI BiosVideoComponentNameGetControllerName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ); - // // EFI Component Name Protocol // @@ -150,14 +149,13 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gBiosVideoComponentNa // // EFI Component Name 2 Protocol // -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gBiosVideoComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) BiosVideoComponentNameGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) BiosVideoComponentNameGetControllerName, +GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gBiosVideoComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)BiosVideoComponentNameGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)BiosVideoComponentNameGetControllerName, "en" }; - -GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mBiosVideoDriverNameTable[] = { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mBiosVideoDriverNameTable[] = { { "eng;en", L"BIOS[INT10] Video Driver" @@ -295,11 +293,11 @@ BiosVideoComponentNameGetDriverName ( EFI_STATUS EFIAPI BiosVideoComponentNameGetControllerName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { return EFI_UNSUPPORTED; diff --git a/OvmfPkg/Csm/BiosThunk/VideoDxe/VesaBiosExtensions.h b/OvmfPkg/Csm/BiosThunk/VideoDxe/VesaBiosExtensions.h index 88065f15c6..0c8e62c064 100644 --- a/OvmfPkg/Csm/BiosThunk/VideoDxe/VesaBiosExtensions.h +++ b/OvmfPkg/Csm/BiosThunk/VideoDxe/VesaBiosExtensions.h @@ -16,7 +16,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // // VESA BIOS Extensions status codes // -#define VESA_BIOS_EXTENSIONS_STATUS_SUCCESS 0x004f +#define VESA_BIOS_EXTENSIONS_STATUS_SUCCESS 0x004f // // VESA BIOS Extensions Services @@ -52,7 +52,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent AX = Return Status --*/ -#define VESA_BIOS_EXTENSIONS_SET_MODE 0x4f02 +#define VESA_BIOS_EXTENSIONS_SET_MODE 0x4f02 /*++ @@ -97,7 +97,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent = 1 - Memory not cleared at last mode set --*/ -#define VESA_BIOS_EXTENSIONS_SAVE_RESTORE_STATE 0x4f04 +#define VESA_BIOS_EXTENSIONS_SAVE_RESTORE_STATE 0x4f04 /*++ @@ -158,89 +158,89 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // // Timing data from EDID data block // -#define VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE 128 -#define VESA_BIOS_EXTENSIONS_EDID_ESTABLISHED_TIMING_MAX_NUMBER 17 +#define VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE 128 +#define VESA_BIOS_EXTENSIONS_EDID_ESTABLISHED_TIMING_MAX_NUMBER 17 // // Established Timings: 24 possible resolutions // Standard Timings: 8 possible resolutions // Detailed Timings: 4 possible resolutions // -#define VESA_BIOS_EXTENSIONS_EDID_TIMING_MAX_NUMBER 36 +#define VESA_BIOS_EXTENSIONS_EDID_TIMING_MAX_NUMBER 36 // // Timing data size for Established Timings, Standard Timings and Detailed Timings // -#define VESA_BIOS_EXTENSIONS_ESTABLISHED_TIMING_SIZE 3 -#define VESA_BIOS_EXTENSIONS_STANDARD_TIMING_SIZE 16 -#define VESA_BIOS_EXTENSIONS_DETAILED_TIMING_EACH_DESCRIPTOR_SIZE 18 -#define VESA_BIOS_EXTENSIONS_DETAILED_TIMING_DESCRIPTOR_MAX_SIZE 72 +#define VESA_BIOS_EXTENSIONS_ESTABLISHED_TIMING_SIZE 3 +#define VESA_BIOS_EXTENSIONS_STANDARD_TIMING_SIZE 16 +#define VESA_BIOS_EXTENSIONS_DETAILED_TIMING_EACH_DESCRIPTOR_SIZE 18 +#define VESA_BIOS_EXTENSIONS_DETAILED_TIMING_DESCRIPTOR_MAX_SIZE 72 typedef struct { - UINT16 HorizontalResolution; - UINT16 VerticalResolution; - UINT16 RefreshRate; + UINT16 HorizontalResolution; + UINT16 VerticalResolution; + UINT16 RefreshRate; } VESA_BIOS_EXTENSIONS_EDID_TIMING; typedef struct { - UINT32 ValidNumber; - UINT32 Key[VESA_BIOS_EXTENSIONS_EDID_TIMING_MAX_NUMBER]; + UINT32 ValidNumber; + UINT32 Key[VESA_BIOS_EXTENSIONS_EDID_TIMING_MAX_NUMBER]; } VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING; typedef struct { - UINT8 Header[8]; //EDID header "00 FF FF FF FF FF FF 00" - UINT16 ManufactureName; //EISA 3-character ID - UINT16 ProductCode; //Vendor assigned code - UINT32 SerialNumber; //32-bit serial number - UINT8 WeekOfManufacture; //Week number - UINT8 YearOfManufacture; //Year - UINT8 EdidVersion; //EDID Structure Version - UINT8 EdidRevision; //EDID Structure Revision - UINT8 VideoInputDefinition; - UINT8 MaxHorizontalImageSize; //cm - UINT8 MaxVerticalImageSize; //cm - UINT8 DisplayTransferCharacteristic; - UINT8 FeatureSupport; - UINT8 RedGreenLowBits; //Rx1 Rx0 Ry1 Ry0 Gx1 Gx0 Gy1Gy0 - UINT8 BlueWhiteLowBits; //Bx1 Bx0 By1 By0 Wx1 Wx0 Wy1 Wy0 - UINT8 RedX; //Red-x Bits 9 - 2 - UINT8 RedY; //Red-y Bits 9 - 2 - UINT8 GreenX; //Green-x Bits 9 - 2 - UINT8 GreenY; //Green-y Bits 9 - 2 - UINT8 BlueX; //Blue-x Bits 9 - 2 - UINT8 BlueY; //Blue-y Bits 9 - 2 - UINT8 WhiteX; //White-x Bits 9 - 2 - UINT8 WhiteY; //White-x Bits 9 - 2 - UINT8 EstablishedTimings[VESA_BIOS_EXTENSIONS_ESTABLISHED_TIMING_SIZE]; - UINT8 StandardTimingIdentification[VESA_BIOS_EXTENSIONS_STANDARD_TIMING_SIZE]; - UINT8 DetailedTimingDescriptions[VESA_BIOS_EXTENSIONS_DETAILED_TIMING_DESCRIPTOR_MAX_SIZE]; - UINT8 ExtensionFlag; //Number of (optional) 128-byte EDID extension blocks to follow - UINT8 Checksum; + UINT8 Header[8]; // EDID header "00 FF FF FF FF FF FF 00" + UINT16 ManufactureName; // EISA 3-character ID + UINT16 ProductCode; // Vendor assigned code + UINT32 SerialNumber; // 32-bit serial number + UINT8 WeekOfManufacture; // Week number + UINT8 YearOfManufacture; // Year + UINT8 EdidVersion; // EDID Structure Version + UINT8 EdidRevision; // EDID Structure Revision + UINT8 VideoInputDefinition; + UINT8 MaxHorizontalImageSize; // cm + UINT8 MaxVerticalImageSize; // cm + UINT8 DisplayTransferCharacteristic; + UINT8 FeatureSupport; + UINT8 RedGreenLowBits; // Rx1 Rx0 Ry1 Ry0 Gx1 Gx0 Gy1Gy0 + UINT8 BlueWhiteLowBits; // Bx1 Bx0 By1 By0 Wx1 Wx0 Wy1 Wy0 + UINT8 RedX; // Red-x Bits 9 - 2 + UINT8 RedY; // Red-y Bits 9 - 2 + UINT8 GreenX; // Green-x Bits 9 - 2 + UINT8 GreenY; // Green-y Bits 9 - 2 + UINT8 BlueX; // Blue-x Bits 9 - 2 + UINT8 BlueY; // Blue-y Bits 9 - 2 + UINT8 WhiteX; // White-x Bits 9 - 2 + UINT8 WhiteY; // White-x Bits 9 - 2 + UINT8 EstablishedTimings[VESA_BIOS_EXTENSIONS_ESTABLISHED_TIMING_SIZE]; + UINT8 StandardTimingIdentification[VESA_BIOS_EXTENSIONS_STANDARD_TIMING_SIZE]; + UINT8 DetailedTimingDescriptions[VESA_BIOS_EXTENSIONS_DETAILED_TIMING_DESCRIPTOR_MAX_SIZE]; + UINT8 ExtensionFlag; // Number of (optional) 128-byte EDID extension blocks to follow + UINT8 Checksum; } VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK; // // Super VGA Information Block // typedef struct { - UINT32 VESASignature; // 'VESA' 4 byte signature - UINT16 VESAVersion; // VBE version number - UINT32 OEMStringPtr; // Pointer to OEM string - UINT32 Capabilities; // Capabilities of video card - UINT32 VideoModePtr; // Pointer to an array of 16-bit supported modes values terminated by 0xFFFF - UINT16 TotalMemory; // Number of 64kb memory blocks - UINT16 OemSoftwareRev; // VBE implementation Software revision - UINT32 OemVendorNamePtr; // VbeFarPtr to Vendor Name String - UINT32 OemProductNamePtr; // VbeFarPtr to Product Name String - UINT32 OemProductRevPtr; // VbeFarPtr to Product Revision String - UINT8 Reserved[222]; // Reserved for VBE implementation scratch area - UINT8 OemData[256]; // Data area for OEM strings. Pad to 512 byte block size + UINT32 VESASignature; // 'VESA' 4 byte signature + UINT16 VESAVersion; // VBE version number + UINT32 OEMStringPtr; // Pointer to OEM string + UINT32 Capabilities; // Capabilities of video card + UINT32 VideoModePtr; // Pointer to an array of 16-bit supported modes values terminated by 0xFFFF + UINT16 TotalMemory; // Number of 64kb memory blocks + UINT16 OemSoftwareRev; // VBE implementation Software revision + UINT32 OemVendorNamePtr; // VbeFarPtr to Vendor Name String + UINT32 OemProductNamePtr; // VbeFarPtr to Product Name String + UINT32 OemProductRevPtr; // VbeFarPtr to Product Revision String + UINT8 Reserved[222]; // Reserved for VBE implementation scratch area + UINT8 OemData[256]; // Data area for OEM strings. Pad to 512 byte block size } VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK; // // Super VGA Information Block VESASignature values // -#define VESA_BIOS_EXTENSIONS_VESA_SIGNATURE SIGNATURE_32 ('V', 'E', 'S', 'A') -#define VESA_BIOS_EXTENSIONS_VBE2_SIGNATURE SIGNATURE_32 ('V', 'B', 'E', '2') +#define VESA_BIOS_EXTENSIONS_VESA_SIGNATURE SIGNATURE_32 ('V', 'E', 'S', 'A') +#define VESA_BIOS_EXTENSIONS_VBE2_SIGNATURE SIGNATURE_32 ('V', 'B', 'E', '2') // // Super VGA Information Block VESAVersion values @@ -252,13 +252,13 @@ typedef struct { // // Super VGA Information Block Capabilities field bit definitions // -#define VESA_BIOS_EXTENSIONS_CAPABILITY_8_BIT_DAC 0x01 // 0: DAC width is fixed at 6 bits/color +#define VESA_BIOS_EXTENSIONS_CAPABILITY_8_BIT_DAC 0x01 // 0: DAC width is fixed at 6 bits/color // 1: DAC width switchable to 8 bits/color // -#define VESA_BIOS_EXTENSIONS_CAPABILITY_NOT_VGA 0x02 // 0: Controller is VGA compatible +#define VESA_BIOS_EXTENSIONS_CAPABILITY_NOT_VGA 0x02 // 0: Controller is VGA compatible // 1: Controller is not VGA compatible // -#define VESA_BIOS_EXTENSIONS_CAPABILITY_NOT_NORMAL_RAMDAC 0x04 // 0: Normal RAMDAC operation +#define VESA_BIOS_EXTENSIONS_CAPABILITY_NOT_NORMAL_RAMDAC 0x04 // 0: Normal RAMDAC operation // 1: Use blank bit in function 9 to program RAMDAC // #define VESA_BIOS_EXTENSIONS_CAPABILITY_STEREOSCOPIC 0x08 // 0: No hardware stereoscopic signal support @@ -269,10 +269,10 @@ typedef struct { // // Super VGA mode number bite field definitions // -#define VESA_BIOS_EXTENSIONS_MODE_NUMBER_VESA 0x0100 // 0: Not a VESA defined VBE mode +#define VESA_BIOS_EXTENSIONS_MODE_NUMBER_VESA 0x0100 // 0: Not a VESA defined VBE mode // 1: A VESA defined VBE mode // -#define VESA_BIOS_EXTENSIONS_MODE_NUMBER_REFRESH_CONTROL_USER 0x0800 // 0: Use current BIOS default referesh rate +#define VESA_BIOS_EXTENSIONS_MODE_NUMBER_REFRESH_CONTROL_USER 0x0800 // 0: Use current BIOS default referesh rate // 1: Use the user specified CRTC values for refresh rate // #define VESA_BIOS_EXTENSIONS_MODE_NUMBER_LINEAR_FRAME_BUFFER 0x4000 // 0: Use a banked/windowed frame buffer @@ -283,7 +283,7 @@ typedef struct { // // Super VGA Information Block mode list terminator value // -#define VESA_BIOS_EXTENSIONS_END_OF_MODE_LIST 0xffff +#define VESA_BIOS_EXTENSIONS_END_OF_MODE_LIST 0xffff // // Window Function @@ -301,60 +301,60 @@ typedef struct { // // Manadory fields for all VESA Bios Extensions revisions // - UINT16 ModeAttributes; // Mode attributes - UINT8 WinAAttributes; // Window A attributes - UINT8 WinBAttributes; // Window B attributes - UINT16 WinGranularity; // Window granularity in k - UINT16 WinSize; // Window size in k - UINT16 WinASegment; // Window A segment - UINT16 WinBSegment; // Window B segment - UINT32 WindowFunction; // Pointer to window function - UINT16 BytesPerScanLine; // Bytes per scanline + UINT16 ModeAttributes; // Mode attributes + UINT8 WinAAttributes; // Window A attributes + UINT8 WinBAttributes; // Window B attributes + UINT16 WinGranularity; // Window granularity in k + UINT16 WinSize; // Window size in k + UINT16 WinASegment; // Window A segment + UINT16 WinBSegment; // Window B segment + UINT32 WindowFunction; // Pointer to window function + UINT16 BytesPerScanLine; // Bytes per scanline // // Manadory fields for VESA Bios Extensions 1.2 and above // - UINT16 XResolution; // Horizontal resolution - UINT16 YResolution; // Vertical resolution - UINT8 XCharSize; // Character cell width - UINT8 YCharSize; // Character cell height - UINT8 NumberOfPlanes; // Number of memory planes - UINT8 BitsPerPixel; // Bits per pixel - UINT8 NumberOfBanks; // Number of CGA style banks - UINT8 MemoryModel; // Memory model type - UINT8 BankSize; // Size of CGA style banks - UINT8 NumberOfImagePages; // Number of images pages - UINT8 Reserved1; // Reserved - UINT8 RedMaskSize; // Size of direct color red mask - UINT8 RedFieldPosition; // Bit posn of lsb of red mask - UINT8 GreenMaskSize; // Size of direct color green mask - UINT8 GreenFieldPosition; // Bit posn of lsb of green mask - UINT8 BlueMaskSize; // Size of direct color blue mask - UINT8 BlueFieldPosition; // Bit posn of lsb of blue mask - UINT8 RsvdMaskSize; // Size of direct color res mask - UINT8 RsvdFieldPosition; // Bit posn of lsb of res mask - UINT8 DirectColorModeInfo; // Direct color mode attributes + UINT16 XResolution; // Horizontal resolution + UINT16 YResolution; // Vertical resolution + UINT8 XCharSize; // Character cell width + UINT8 YCharSize; // Character cell height + UINT8 NumberOfPlanes; // Number of memory planes + UINT8 BitsPerPixel; // Bits per pixel + UINT8 NumberOfBanks; // Number of CGA style banks + UINT8 MemoryModel; // Memory model type + UINT8 BankSize; // Size of CGA style banks + UINT8 NumberOfImagePages; // Number of images pages + UINT8 Reserved1; // Reserved + UINT8 RedMaskSize; // Size of direct color red mask + UINT8 RedFieldPosition; // Bit posn of lsb of red mask + UINT8 GreenMaskSize; // Size of direct color green mask + UINT8 GreenFieldPosition; // Bit posn of lsb of green mask + UINT8 BlueMaskSize; // Size of direct color blue mask + UINT8 BlueFieldPosition; // Bit posn of lsb of blue mask + UINT8 RsvdMaskSize; // Size of direct color res mask + UINT8 RsvdFieldPosition; // Bit posn of lsb of res mask + UINT8 DirectColorModeInfo; // Direct color mode attributes // // Manadory fields for VESA Bios Extensions 2.0 and above // - UINT32 PhysBasePtr; // Physical Address for flat memory frame buffer - UINT32 Reserved2; // Reserved - UINT16 Reserved3; // Reserved + UINT32 PhysBasePtr; // Physical Address for flat memory frame buffer + UINT32 Reserved2; // Reserved + UINT16 Reserved3; // Reserved // // Manadory fields for VESA Bios Extensions 3.0 and above // - UINT16 LinBytesPerScanLine; // Bytes/scan line for linear modes - UINT8 BnkNumberOfImagePages; // Number of images for banked modes - UINT8 LinNumberOfImagePages; // Number of images for linear modes - UINT8 LinRedMaskSize; // Size of direct color red mask (linear mode) - UINT8 LinRedFieldPosition; // Bit posiiton of lsb of red mask (linear modes) - UINT8 LinGreenMaskSize; // Size of direct color green mask (linear mode) - UINT8 LinGreenFieldPosition; // Bit posiiton of lsb of green mask (linear modes) - UINT8 LinBlueMaskSize; // Size of direct color blue mask (linear mode) - UINT8 LinBlueFieldPosition; // Bit posiiton of lsb of blue mask (linear modes) - UINT8 LinRsvdMaskSize; // Size of direct color reserved mask (linear mode) - UINT8 LinRsvdFieldPosition; // Bit posiiton of lsb of reserved mask (linear modes) - UINT32 MaxPixelClock; // Maximum pixel clock (in Hz) for graphics mode - UINT8 Pad[190]; // Pad to 256 byte block size + UINT16 LinBytesPerScanLine; // Bytes/scan line for linear modes + UINT8 BnkNumberOfImagePages; // Number of images for banked modes + UINT8 LinNumberOfImagePages; // Number of images for linear modes + UINT8 LinRedMaskSize; // Size of direct color red mask (linear mode) + UINT8 LinRedFieldPosition; // Bit posiiton of lsb of red mask (linear modes) + UINT8 LinGreenMaskSize; // Size of direct color green mask (linear mode) + UINT8 LinGreenFieldPosition; // Bit posiiton of lsb of green mask (linear modes) + UINT8 LinBlueMaskSize; // Size of direct color blue mask (linear mode) + UINT8 LinBlueFieldPosition; // Bit posiiton of lsb of blue mask (linear modes) + UINT8 LinRsvdMaskSize; // Size of direct color reserved mask (linear mode) + UINT8 LinRsvdFieldPosition; // Bit posiiton of lsb of reserved mask (linear modes) + UINT32 MaxPixelClock; // Maximum pixel clock (in Hz) for graphics mode + UINT8 Pad[190]; // Pad to 256 byte block size } VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK; // @@ -363,31 +363,31 @@ typedef struct { #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_HARDWARE 0x0001 // 0: Mode not supported in handware // 1: Mode supported in handware // -#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_TTY 0x0004 // 0: TTY Output functions not supported by BIOS +#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_TTY 0x0004 // 0: TTY Output functions not supported by BIOS // 1: TTY Output functions supported by BIOS // -#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_COLOR 0x0008 // 0: Monochrome mode +#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_COLOR 0x0008 // 0: Monochrome mode // 1: Color mode // #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_GRAPHICS 0x0010 // 0: Text mode // 1: Graphics mode // -#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NOT_VGA 0x0020 // 0: VGA compatible mode +#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NOT_VGA 0x0020 // 0: VGA compatible mode // 1: Not a VGA compatible mode // #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NOT_WINDOWED 0x0040 // 0: VGA compatible windowed memory mode // 1: Not a VGA compatible windowed memory mode // -#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER 0x0080 // 0: No linear fram buffer mode available +#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER 0x0080 // 0: No linear fram buffer mode available // 1: Linear frame buffer mode available // -#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_DOUBLE_SCAN 0x0100 // 0: No double scan mode available +#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_DOUBLE_SCAN 0x0100 // 0: No double scan mode available // 1: Double scan mode available // #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_INTERLACED 0x0200 // 0: No interlaced mode is available // 1: Interlaced mode is available // -#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NO_TRIPPLE_BUFFER 0x0400 // 0: No hardware triple buffer mode support available +#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NO_TRIPPLE_BUFFER 0x0400 // 0: No hardware triple buffer mode support available // 1: Hardware triple buffer mode support available // #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_STEREOSCOPIC 0x0800 // 0: No hardware steroscopic display support @@ -398,7 +398,7 @@ typedef struct { // // Super VGA Mode Information Block WinAAttribite/WinBAttributes field bit definitions // -#define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_RELOCATABLE 0x01 // 0: Single non-relocatable window only +#define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_RELOCATABLE 0x01 // 0: Single non-relocatable window only // 1: Relocatable window(s) are supported // #define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_READABLE 0x02 // 0: Window is not readable @@ -418,38 +418,38 @@ typedef struct { // Super VGA Memory Models // typedef enum { - MemPL = 3, // Planar memory model - MemPK = 4, // Packed pixel memory model - MemRGB= 6, // Direct color RGB memory model - MemYUV= 7 // Direct color YUV memory model + MemPL = 3, // Planar memory model + MemPK = 4, // Packed pixel memory model + MemRGB = 6, // Direct color RGB memory model + MemYUV = 7 // Direct color YUV memory model } VESA_BIOS_EXTENSIONS_MEMORY_MODELS; // // Super VGA CRTC Information Block // typedef struct { - UINT16 HorizontalTotal; // Horizontal total in pixels - UINT16 HorizontalSyncStart; // Horizontal sync start in pixels - UINT16 HorizontalSyncEnd; // Horizontal sync end in pixels - UINT16 VericalTotal; // Vertical total in pixels - UINT16 VericalSyncStart; // Vertical sync start in pixels - UINT16 VericalSyncEnd; // Vertical sync end in pixels - UINT8 Flags; // Flags (Interlaced/DoubleScan/etc). - UINT32 PixelClock; // Pixel clock in units of Hz - UINT16 RefreshRate; // Refresh rate in units of 0.01 Hz - UINT8 Reserved[40]; // Pad + UINT16 HorizontalTotal; // Horizontal total in pixels + UINT16 HorizontalSyncStart; // Horizontal sync start in pixels + UINT16 HorizontalSyncEnd; // Horizontal sync end in pixels + UINT16 VericalTotal; // Vertical total in pixels + UINT16 VericalSyncStart; // Vertical sync start in pixels + UINT16 VericalSyncEnd; // Vertical sync end in pixels + UINT8 Flags; // Flags (Interlaced/DoubleScan/etc). + UINT32 PixelClock; // Pixel clock in units of Hz + UINT16 RefreshRate; // Refresh rate in units of 0.01 Hz + UINT8 Reserved[40]; // Pad } VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK; -#define VESA_BIOS_EXTENSIONS_CRTC_FLAGS_DOUBLE_SCAN 0x01 // 0: Graphics mode is not souble scanned +#define VESA_BIOS_EXTENSIONS_CRTC_FLAGS_DOUBLE_SCAN 0x01 // 0: Graphics mode is not souble scanned // 1: Graphics mode is double scanned // -#define VESA_BIOS_EXTENSIONS_CRTC_FLAGSINTERLACED 0x02 // 0: Graphics mode is not interlaced +#define VESA_BIOS_EXTENSIONS_CRTC_FLAGSINTERLACED 0x02 // 0: Graphics mode is not interlaced // 1: Graphics mode is interlaced // #define VESA_BIOS_EXTENSIONS_CRTC_HORIZONTAL_SYNC_NEGATIVE 0x04 // 0: Horizontal sync polarity is positive(+) // 0: Horizontal sync polarity is negative(-) // -#define VESA_BIOS_EXTENSIONS_CRTC_VERITICAL_SYNC_NEGATIVE 0x08 // 0: Verical sync polarity is positive(+) +#define VESA_BIOS_EXTENSIONS_CRTC_VERITICAL_SYNC_NEGATIVE 0x08 // 0: Verical sync polarity is positive(+) // 0: Verical sync polarity is negative(-) // // Turn off byte packing of data structures diff --git a/OvmfPkg/Csm/CsmSupportLib/CsmSupportLib.c b/OvmfPkg/Csm/CsmSupportLib/CsmSupportLib.c index 533b078593..3ffd6e92b2 100644 --- a/OvmfPkg/Csm/CsmSupportLib/CsmSupportLib.c +++ b/OvmfPkg/Csm/CsmSupportLib/CsmSupportLib.c @@ -29,4 +29,3 @@ CsmSupportLibConstructor ( return EFI_SUCCESS; } - diff --git a/OvmfPkg/Csm/CsmSupportLib/CsmSupportLib.h b/OvmfPkg/Csm/CsmSupportLib/CsmSupportLib.h index 922a6aba2c..a6ee93f167 100644 --- a/OvmfPkg/Csm/CsmSupportLib/CsmSupportLib.h +++ b/OvmfPkg/Csm/CsmSupportLib/CsmSupportLib.h @@ -46,4 +46,3 @@ LegacyBiosPlatformInstall ( ); #endif - diff --git a/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c b/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c index 97ca21945f..5bed2e2b51 100644 --- a/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c +++ b/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c @@ -12,25 +12,24 @@ // // Handle for the Legacy Interrupt Protocol instance produced by this driver // -STATIC EFI_HANDLE mLegacyInterruptHandle = NULL; +STATIC EFI_HANDLE mLegacyInterruptHandle = NULL; // // Legacy Interrupt Device number (0x01 on piix4, 0x1f on q35/mch) // -STATIC UINT8 mLegacyInterruptDevice; +STATIC UINT8 mLegacyInterruptDevice; // // The Legacy Interrupt Protocol instance produced by this driver // -STATIC EFI_LEGACY_INTERRUPT_PROTOCOL mLegacyInterrupt = { +STATIC EFI_LEGACY_INTERRUPT_PROTOCOL mLegacyInterrupt = { GetNumberPirqs, GetLocation, ReadPirq, WritePirq }; -STATIC UINT8 PirqReg[MAX_PIRQ_NUMBER] = { PIRQA, PIRQB, PIRQC, PIRQD, PIRQE, PIRQF, PIRQG, PIRQH }; - +STATIC UINT8 PirqReg[MAX_PIRQ_NUMBER] = { PIRQA, PIRQB, PIRQC, PIRQD, PIRQE, PIRQF, PIRQG, PIRQH }; /** Return the number of PIRQs supported by this chipset. @@ -53,7 +52,6 @@ GetNumberPirqs ( return EFI_SUCCESS; } - /** Return PCI location of this device. $PIR table requires this info. @@ -82,7 +80,6 @@ GetLocation ( return EFI_SUCCESS; } - /** Builds the PCI configuration address for the register specified by PirqNumber @@ -95,12 +92,12 @@ GetAddress ( UINT8 PirqNumber ) { - return PCI_LIB_ADDRESS( - LEGACY_INT_BUS, - mLegacyInterruptDevice, - LEGACY_INT_FUNC, - PirqReg[PirqNumber] - ); + return PCI_LIB_ADDRESS ( + LEGACY_INT_BUS, + mLegacyInterruptDevice, + LEGACY_INT_FUNC, + PirqReg[PirqNumber] + ); } /** @@ -127,12 +124,11 @@ ReadPirq ( } *PirqData = PciRead8 (GetAddress (PirqNumber)); - *PirqData = (UINT8) (*PirqData & 0x7f); + *PirqData = (UINT8)(*PirqData & 0x7f); return EFI_SUCCESS; } - /** Write the given PIRQ register @@ -160,7 +156,6 @@ WritePirq ( return EFI_SUCCESS; } - /** Initialize Legacy Interrupt support @@ -178,7 +173,7 @@ LegacyInterruptInstall ( // // Make sure the Legacy Interrupt Protocol is not already installed in the system // - ASSERT_PROTOCOL_ALREADY_INSTALLED(NULL, &gEfiLegacyInterruptProtocolGuid); + ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiLegacyInterruptProtocolGuid); // // Query Host Bridge DID to determine platform type, then set device number @@ -192,8 +187,12 @@ LegacyInterruptInstall ( mLegacyInterruptDevice = LEGACY_INT_DEV_Q35; break; default: - DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", - __FUNCTION__, HostBridgeDevId)); + DEBUG (( + DEBUG_ERROR, + "%a: Unknown Host Bridge Device ID: 0x%04x\n", + __FUNCTION__, + HostBridgeDevId + )); ASSERT (FALSE); return EFI_UNSUPPORTED; } @@ -207,8 +206,7 @@ LegacyInterruptInstall ( &mLegacyInterrupt, NULL ); - ASSERT_EFI_ERROR(Status); + ASSERT_EFI_ERROR (Status); return Status; } - diff --git a/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.h b/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.h index 1e37a41a57..132365b9cc 100644 --- a/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.h +++ b/OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.h @@ -20,23 +20,22 @@ #include #include - -#define LEGACY_INT_BUS 0 +#define LEGACY_INT_BUS 0 #define LEGACY_INT_DEV_PIIX4 0x01 #define LEGACY_INT_DEV_Q35 0x1f -#define LEGACY_INT_FUNC 0 +#define LEGACY_INT_FUNC 0 -#define PIRQN 0x00 // PIRQ Null -#define PIRQA 0x60 -#define PIRQB 0x61 -#define PIRQC 0x62 -#define PIRQD 0x63 -#define PIRQE 0x68 -#define PIRQF 0x69 -#define PIRQG 0x6A -#define PIRQH 0x6B +#define PIRQN 0x00 // PIRQ Null +#define PIRQA 0x60 +#define PIRQB 0x61 +#define PIRQC 0x62 +#define PIRQD 0x63 +#define PIRQE 0x68 +#define PIRQF 0x69 +#define PIRQG 0x6A +#define PIRQH 0x6B -#define MAX_PIRQ_NUMBER 8 +#define MAX_PIRQ_NUMBER 8 /** Return the number of PIRQs supported by this chipset. @@ -114,4 +113,3 @@ WritePirq ( ); #endif - diff --git a/OvmfPkg/Csm/CsmSupportLib/LegacyPlatform.c b/OvmfPkg/Csm/CsmSupportLib/LegacyPlatform.c index 4bd6d70a1a..491897adbd 100644 --- a/OvmfPkg/Csm/CsmSupportLib/LegacyPlatform.c +++ b/OvmfPkg/Csm/CsmSupportLib/LegacyPlatform.c @@ -9,15 +9,15 @@ #include "LegacyPlatform.h" -EFI_SETUP_BBS_MAP mSetupBbsMap[] = { - { 1, 2, 1, 1 }, // ATA HardDrive - { 2, 3, 1, 1 }, // ATAPI CDROM - { 3, 0x80, 2, 0 }, // PXE - { 4, 1, 0, 6 }, // USB Floppy - { 4, 2, 0, 6 }, // USB HDD - { 4, 3, 0, 6 }, // USB CD - { 4, 1, 0, 0 }, // USB ZIP Bugbug since Class/SubClass code is uninitialized - { 4, 2, 0, 0 } // USB ZIP Bugbug since Class/SubClass code is uninitialized +EFI_SETUP_BBS_MAP mSetupBbsMap[] = { + { 1, 2, 1, 1 }, // ATA HardDrive + { 2, 3, 1, 1 }, // ATAPI CDROM + { 3, 0x80, 2, 0 }, // PXE + { 4, 1, 0, 6 }, // USB Floppy + { 4, 2, 0, 6 }, // USB HDD + { 4, 3, 0, 6 }, // USB CD + { 4, 1, 0, 0 }, // USB ZIP Bugbug since Class/SubClass code is uninitialized + { 4, 2, 0, 0 } // USB ZIP Bugbug since Class/SubClass code is uninitialized }; // @@ -29,23 +29,23 @@ EFI_SETUP_BBS_MAP mSetupBbsMap[] = { #define NULL_ROM_FILE_GUID \ { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } -SYSTEM_ROM_TABLE mSystemRomTable[] = { - { SYSTEM_ROM_FILE_GUID, 1 }, - { NULL_ROM_FILE_GUID, 0 } +SYSTEM_ROM_TABLE mSystemRomTable[] = { + { SYSTEM_ROM_FILE_GUID, 1 }, + { NULL_ROM_FILE_GUID, 0 } }; EFI_HANDLE mVgaHandles[0x20]; EFI_HANDLE mDiskHandles[0x20]; EFI_HANDLE mIsaHandles[0x20]; -EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY IrqPriorityTable[MAX_IRQ_PRIORITY_ENTRIES] = { - {0x0B,0}, - {0x09,0}, - {0x0A,0}, - {0x05,0}, - {0x07,0}, - {0x00,0}, - {0x00,0} +EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY IrqPriorityTable[MAX_IRQ_PRIORITY_ENTRIES] = { + { 0x0B, 0 }, + { 0x09, 0 }, + { 0x0A, 0 }, + { 0x05, 0 }, + { 0x07, 0 }, + { 0x00, 0 }, + { 0x00, 0 } }; // @@ -54,18 +54,18 @@ EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY IrqPriorityTable[MAX_IRQ_PRIORITY_ENTRIES] = // to check to get bus number. The Slot number - 1 is an index into a decode // table to get the bridge information. // -EFI_LEGACY_PIRQ_TABLE PirqTableHead = { +EFI_LEGACY_PIRQ_TABLE PirqTableHead = { { EFI_LEGACY_PIRQ_TABLE_SIGNATURE, // UINT32 Signature - 0x00, // UINT8 MinorVersion - 0x01, // UINT8 MajorVersion - 0x0000, // UINT16 TableSize - 0x00, // UINT8 Bus - 0x08, // UINT8 DevFun - 0x0000, // UINT16 PciOnlyIrq - 0x8086, // UINT16 CompatibleVid - 0x122e, // UINT16 CompatibleDid - 0x00000000, // UINT32 Miniport + 0x00, // UINT8 MinorVersion + 0x01, // UINT8 MajorVersion + 0x0000, // UINT16 TableSize + 0x00, // UINT8 Bus + 0x08, // UINT8 DevFun + 0x0000, // UINT16 PciOnlyIrq + 0x8086, // UINT16 CompatibleVid + 0x122e, // UINT16 CompatibleDid + 0x00000000, // UINT32 Miniport { // UINT8 Reserved[11] 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 @@ -76,17 +76,29 @@ EFI_LEGACY_PIRQ_TABLE PirqTableHead = { // -- Pin 1 -- -- Pin 2 -- -- Pin 3 -- -- Pin 4 -- // Bus Dev Reg Map Reg Map Reg Map Reg Map // - {0x00,0x08,{{0x60,0xDEB8},{0x61,0xDEB8},{0x62,0xDEB8},{0x63,0xDEB8}},0x00,0x00}, - {0x00,0x10,{{0x61,0xDEB8},{0x62,0xDEB8},{0x63,0xDEB8},{0x60,0xDEB8}},0x01,0x00}, - {0x00,0x18,{{0x62,0xDEB8},{0x63,0xDEB8},{0x60,0xDEB8},{0x61,0xDEB8}},0x02,0x00}, - {0x00,0x20,{{0x63,0xDEB8},{0x60,0xDEB8},{0x61,0xDEB8},{0x62,0xDEB8}},0x03,0x00}, - {0x00,0x28,{{0x60,0xDEB8},{0x61,0xDEB8},{0x62,0xDEB8},{0x63,0xDEB8}},0x04,0x00}, - {0x00,0x30,{{0x61,0xDEB8},{0x62,0xDEB8},{0x63,0xDEB8},{0x60,0xDEB8}},0x05,0x00}, + { 0x00, 0x08, { + { 0x60, 0xDEB8 }, { 0x61, 0xDEB8 }, { 0x62, 0xDEB8 }, { 0x63, 0xDEB8 } + }, 0x00, 0x00 }, + { 0x00, 0x10, { + { 0x61, 0xDEB8 }, { 0x62, 0xDEB8 }, { 0x63, 0xDEB8 }, { 0x60, 0xDEB8 } + }, 0x01, 0x00 }, + { 0x00, 0x18, { + { 0x62, 0xDEB8 }, { 0x63, 0xDEB8 }, { 0x60, 0xDEB8 }, { 0x61, 0xDEB8 } + }, 0x02, 0x00 }, + { 0x00, 0x20, { + { 0x63, 0xDEB8 }, { 0x60, 0xDEB8 }, { 0x61, 0xDEB8 }, { 0x62, 0xDEB8 } + }, 0x03, 0x00 }, + { 0x00, 0x28, { + { 0x60, 0xDEB8 }, { 0x61, 0xDEB8 }, { 0x62, 0xDEB8 }, { 0x63, 0xDEB8 } + }, 0x04, 0x00 }, + { 0x00, 0x30, { + { 0x61, 0xDEB8 }, { 0x62, 0xDEB8 }, { 0x63, 0xDEB8 }, { 0x60, 0xDEB8 } + }, 0x05, 0x00 }, } }; -LEGACY_BIOS_PLATFORM_INSTANCE mPrivateData; -EFI_HANDLE mImageHandle = NULL; +LEGACY_BIOS_PLATFORM_INSTANCE mPrivateData; +EFI_HANDLE mImageHandle = NULL; /** Return the handles and assorted information for the specified PCI Class code @@ -102,32 +114,32 @@ EFI_HANDLE mImageHandle = NULL; **/ EFI_STATUS FindAllDeviceTypes ( - IN PCI_CLASS_RECORD *PciClasses, - IN OUT DEVICE_STRUCTURE *DeviceTable, - IN OUT UINT16 *DeviceIndex, - IN BOOLEAN DeviceFlags + IN PCI_CLASS_RECORD *PciClasses, + IN OUT DEVICE_STRUCTURE *DeviceTable, + IN OUT UINT16 *DeviceIndex, + IN BOOLEAN DeviceFlags ) { - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN Index; - UINTN StartIndex; - PCI_TYPE00 PciConfigHeader; - EFI_PCI_IO_PROTOCOL *PciIo; - EFI_LEGACY_BIOS_PROTOCOL *LegacyBios; - UINTN Flags; - EFI_STATUS Status; - UINTN Index2; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + UINTN Index; + UINTN StartIndex; + PCI_TYPE00 PciConfigHeader; + EFI_PCI_IO_PROTOCOL *PciIo; + EFI_LEGACY_BIOS_PROTOCOL *LegacyBios; + UINTN Flags; + EFI_STATUS Status; + UINTN Index2; // // Get legacy BIOS protocol as it is required to deal with Option ROMs. // StartIndex = *DeviceIndex; - Status = gBS->LocateProtocol ( - &gEfiLegacyBiosProtocolGuid, - NULL, - (VOID**)&LegacyBios - ); + Status = gBS->LocateProtocol ( + &gEfiLegacyBiosProtocolGuid, + NULL, + (VOID **)&LegacyBios + ); ASSERT_EFI_ERROR (Status); // @@ -144,7 +156,7 @@ FindAllDeviceTypes ( gBS->HandleProtocol ( HandleBuffer[Index], &gEfiPciIoProtocolGuid, - (VOID**)&PciIo + (VOID **)&PciIo ); PciIo->Pci.Read ( PciIo, @@ -154,8 +166,9 @@ FindAllDeviceTypes ( &PciConfigHeader ); for (Index2 = 0; PciClasses[Index2].Class != 0xff; Index2++) { - if ((PciConfigHeader.Hdr.ClassCode[2] == PciClasses[Index2].Class) && - (PciConfigHeader.Hdr.ClassCode[1] == PciClasses[Index2].SubClass)) { + if ((PciConfigHeader.Hdr.ClassCode[2] == PciClasses[Index2].Class) && + (PciConfigHeader.Hdr.ClassCode[1] == PciClasses[Index2].SubClass)) + { LegacyBios->CheckPciRom ( LegacyBios, HandleBuffer[Index], @@ -173,13 +186,14 @@ FindAllDeviceTypes ( if ( ((DeviceFlags != 0) && (Flags == NO_ROM)) || ((Flags & (ROM_FOUND | VALID_LEGACY_ROM)) == (ROM_FOUND | VALID_LEGACY_ROM)) - ) { + ) + { DeviceTable->Handle = HandleBuffer[Index]; DeviceTable->Vid = PciConfigHeader.Hdr.VendorId; DeviceTable->Did = PciConfigHeader.Hdr.DeviceId; DeviceTable->SvId = PciConfigHeader.Device.SubsystemVendorID; DeviceTable->SysId = PciConfigHeader.Device.SubsystemID; - ++ *DeviceIndex; + ++*DeviceIndex; DeviceTable++; } } @@ -211,8 +225,8 @@ FindAllDeviceTypes ( EFI_STATUS EFIAPI SmmInit ( - IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This, - IN VOID *EfiToLegacy16BootTable + IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This, + IN VOID *EfiToLegacy16BootTable ) { return EFI_SUCCESS; @@ -226,23 +240,23 @@ SmmInit ( **/ VOID GetSelectedVgaDeviceInfo ( - OUT EFI_HANDLE *VgaHandle + OUT EFI_HANDLE *VgaHandle ) { - EFI_STATUS Status; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN Index; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; - UINT8 MinBus; - UINT8 MaxBus; - UINTN Segment; - UINTN Bus; - UINTN Device; - UINTN Function; - UINTN SelectedAddress; - UINTN CurrentAddress; + EFI_STATUS Status; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + UINTN Index; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; + UINT8 MinBus; + UINT8 MaxBus; + UINTN Segment; + UINTN Bus; + UINTN Device; + UINTN Function; + UINTN SelectedAddress; + UINTN CurrentAddress; // // Initialize return to 'not found' state @@ -253,9 +267,9 @@ GetSelectedVgaDeviceInfo ( // Initialize variable states. This is important for selecting the VGA // device if multiple devices exist behind a single bridge. // - HandleCount = 0; - HandleBuffer = NULL; - SelectedAddress = PCI_LIB_ADDRESS(0xff, 0x1f, 0x7, 0); + HandleCount = 0; + HandleBuffer = NULL; + SelectedAddress = PCI_LIB_ADDRESS (0xff, 0x1f, 0x7, 0); // // The bus range to search for a VGA device in. @@ -265,27 +279,27 @@ GetSelectedVgaDeviceInfo ( // // Start to check all the pci io to find all possible VGA device // - HandleCount = 0; + HandleCount = 0; HandleBuffer = NULL; - Status = gBS->LocateHandleBuffer ( - ByProtocol, - &gEfiPciIoProtocolGuid, - NULL, - &HandleCount, - &HandleBuffer - ); + Status = gBS->LocateHandleBuffer ( + ByProtocol, + &gEfiPciIoProtocolGuid, + NULL, + &HandleCount, + &HandleBuffer + ); if (EFI_ERROR (Status)) { return; } for (Index = 0; Index < HandleCount; Index++) { - Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiPciIoProtocolGuid, (VOID**)&PciIo); + Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiPciIoProtocolGuid, (VOID **)&PciIo); if (!EFI_ERROR (Status)) { // // Determine if this is in the correct bus range. // Status = PciIo->GetLocation (PciIo, &Segment, &Bus, &Device, &Function); - if (EFI_ERROR(Status) || (Bus < MinBus || Bus > MaxBus)) { + if (EFI_ERROR (Status) || ((Bus < MinBus) || (Bus > MaxBus))) { continue; } @@ -293,12 +307,12 @@ GetSelectedVgaDeviceInfo ( // Read device information. // Status = PciIo->Pci.Read ( - PciIo, - EfiPciIoWidthUint32, - 0, - sizeof (Pci) / sizeof (UINT32), - &Pci - ); + PciIo, + EfiPciIoWidthUint32, + 0, + sizeof (Pci) / sizeof (UINT32), + &Pci + ); if (EFI_ERROR (Status)) { continue; } @@ -309,7 +323,9 @@ GetSelectedVgaDeviceInfo ( if (!IS_PCI_VGA (&Pci)) { continue; } - DEBUG ((DEBUG_INFO, + + DEBUG (( + DEBUG_INFO, "PCI VGA: 0x%04x:0x%04x\n", Pci.Hdr.VendorId, Pci.Hdr.DeviceId @@ -319,10 +335,10 @@ GetSelectedVgaDeviceInfo ( // Currently we use the lowest numbered bus/device/function if multiple // devices are found in the target bus range. // - CurrentAddress = PCI_LIB_ADDRESS(Bus, Device, Function, 0); + CurrentAddress = PCI_LIB_ADDRESS (Bus, Device, Function, 0); if (CurrentAddress < SelectedAddress) { SelectedAddress = CurrentAddress; - *VgaHandle = HandleBuffer[Index]; + *VgaHandle = HandleBuffer[Index]; } } } @@ -330,7 +346,6 @@ GetSelectedVgaDeviceInfo ( FreePool (HandleBuffer); } - /** Returns a buffer of handles for the requested subfunction. @@ -349,42 +364,42 @@ GetSelectedVgaDeviceInfo ( EFI_STATUS EFIAPI GetPlatformHandle ( - IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This, - IN EFI_GET_PLATFORM_HANDLE_MODE Mode, - IN UINT16 Type, - OUT EFI_HANDLE **HandleBuffer, - OUT UINTN *HandleCount, - OUT VOID **AdditionalData OPTIONAL + IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This, + IN EFI_GET_PLATFORM_HANDLE_MODE Mode, + IN UINT16 Type, + OUT EFI_HANDLE **HandleBuffer, + OUT UINTN *HandleCount, + OUT VOID **AdditionalData OPTIONAL ) { - DEVICE_STRUCTURE LocalDevice[0x40]; - UINT32 LocalIndex; - UINT32 Index; - DEVICE_STRUCTURE TempDevice; - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - UINTN Segment; - UINTN Bus; - UINTN Device; - UINTN Function; - HDD_INFO *HddInfo; - PCI_TYPE00 PciConfigHeader; - UINT32 HddIndex; - EFI_HANDLE IdeHandle; + DEVICE_STRUCTURE LocalDevice[0x40]; + UINT32 LocalIndex; + UINT32 Index; + DEVICE_STRUCTURE TempDevice; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + UINTN Segment; + UINTN Bus; + UINTN Device; + UINTN Function; + HDD_INFO *HddInfo; + PCI_TYPE00 PciConfigHeader; + UINT32 HddIndex; + EFI_HANDLE IdeHandle; EFI_LEGACY_BIOS_PROTOCOL *LegacyBios; - PCI_CLASS_RECORD ClassLists[10]; - UINTN PriorityIndex; + PCI_CLASS_RECORD ClassLists[10]; + UINTN PriorityIndex; - static BOOLEAN bConnected = FALSE; + static BOOLEAN bConnected = FALSE; - LocalIndex = 0x00; - HddInfo = NULL; - HddIndex = 0; + LocalIndex = 0x00; + HddInfo = NULL; + HddIndex = 0; Status = gBS->LocateProtocol ( &gEfiLegacyBiosProtocolGuid, NULL, - (VOID**)&LegacyBios + (VOID **)&LegacyBios ); // @@ -400,9 +415,9 @@ GetPlatformHandle ( *HandleCount = (mVgaHandles[0] != NULL) ? 1 : 0; return EFI_SUCCESS; case EfiGetPlatformIdeHandle: - IdeHandle = NULL; + IdeHandle = NULL; if (AdditionalData != NULL) { - HddInfo = (HDD_INFO *) *AdditionalData; + HddInfo = (HDD_INFO *)*AdditionalData; } // @@ -417,7 +432,7 @@ GetPlatformHandle ( ClassLists[3].Class = PCI_CLASS_MASS_STORAGE; ClassLists[3].SubClass = PCI_CLASS_MASS_STORAGE_SATADPA; ClassLists[4].Class = 0xff; - FindAllDeviceTypes (ClassLists, LocalDevice, (UINT16 *) &LocalIndex, TRUE); + FindAllDeviceTypes (ClassLists, LocalDevice, (UINT16 *)&LocalIndex, TRUE); if (LocalIndex == 0) { return EFI_NOT_FOUND; } @@ -449,10 +464,10 @@ GetPlatformHandle ( // PriorityIndex = 0; for (Index = 0; Index < LocalIndex; Index++) { - if (LocalDevice[Index].Handle == IdeHandle && PriorityIndex == 0) { - TempDevice = LocalDevice[PriorityIndex]; + if ((LocalDevice[Index].Handle == IdeHandle) && (PriorityIndex == 0)) { + TempDevice = LocalDevice[PriorityIndex]; LocalDevice[PriorityIndex] = LocalDevice[Index]; - LocalDevice[Index] = TempDevice; + LocalDevice[Index] = TempDevice; PriorityIndex++; break; } @@ -464,6 +479,7 @@ GetPlatformHandle ( for (Index = 0; Index < LocalIndex; Index++) { mDiskHandles[Index] = LocalDevice[Index].Handle; } + *HandleBuffer = &mDiskHandles[0]; *HandleCount = LocalIndex; @@ -477,11 +493,12 @@ GetPlatformHandle ( // for (Index = 0; (Index < LocalIndex) && (AdditionalData != NULL); Index++) { if ((LocalDevice[Index].Handle != NULL) && - (LocalDevice[Index].Handle == IdeHandle)) { + (LocalDevice[Index].Handle == IdeHandle)) + { Status = gBS->HandleProtocol ( LocalDevice[Index].Handle, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); PciIo->Pci.Read ( PciIo, @@ -503,14 +520,14 @@ GetPlatformHandle ( // Be sure to only fill out correct information based on platform // configuration. // - HddInfo[HddIndex].Status |= HDD_PRIMARY; - HddInfo[HddIndex].Bus = (UINT32)Bus; - HddInfo[HddIndex].Device = (UINT32)Device; - HddInfo[HddIndex].Function = (UINT32)Function; - HddInfo[HddIndex + 1].Status |= HDD_SECONDARY; - HddInfo[HddIndex + 1].Bus = (UINT32)Bus; - HddInfo[HddIndex + 1].Device = (UINT32)Device; - HddInfo[HddIndex + 1].Function = (UINT32)Function; + HddInfo[HddIndex].Status |= HDD_PRIMARY; + HddInfo[HddIndex].Bus = (UINT32)Bus; + HddInfo[HddIndex].Device = (UINT32)Device; + HddInfo[HddIndex].Function = (UINT32)Function; + HddInfo[HddIndex + 1].Status |= HDD_SECONDARY; + HddInfo[HddIndex + 1].Bus = (UINT32)Bus; + HddInfo[HddIndex + 1].Device = (UINT32)Device; + HddInfo[HddIndex + 1].Function = (UINT32)Function; // // Primary controller data @@ -524,11 +541,12 @@ GetPlatformHandle ( (UINT16)(PciConfigHeader.Device.Bar[4] & 0xfffc); HddInfo[HddIndex].HddIrq = PciConfigHeader.Device.InterruptLine; } else { - HddInfo[HddIndex].HddIrq = 14; + HddInfo[HddIndex].HddIrq = 14; HddInfo[HddIndex].CommandBaseAddress = 0x1f0; HddInfo[HddIndex].ControlBaseAddress = 0x3f6; - HddInfo[HddIndex].BusMasterAddress = 0; + HddInfo[HddIndex].BusMasterAddress = 0; } + HddIndex++; // @@ -543,27 +561,29 @@ GetPlatformHandle ( (UINT16)(HddInfo[HddIndex].BusMasterAddress + 8); HddInfo[HddIndex].HddIrq = PciConfigHeader.Device.InterruptLine; } else { - HddInfo[HddIndex].HddIrq = 15; + HddInfo[HddIndex].HddIrq = 15; HddInfo[HddIndex].CommandBaseAddress = 0x170; HddInfo[HddIndex].ControlBaseAddress = 0x376; - HddInfo[HddIndex].BusMasterAddress = 0; + HddInfo[HddIndex].BusMasterAddress = 0; } + HddIndex++; } } } + return EFI_SUCCESS; case EfiGetPlatformIsaBusHandle: - ClassLists[0].Class = (UINT8) PCI_CLASS_BRIDGE; - ClassLists[0].SubClass = (UINT8) PCI_CLASS_BRIDGE_ISA_PDECODE; - ClassLists[1].Class = (UINT8) PCI_CLASS_BRIDGE; - ClassLists[1].SubClass = (UINT8) PCI_CLASS_BRIDGE_ISA; + ClassLists[0].Class = (UINT8)PCI_CLASS_BRIDGE; + ClassLists[0].SubClass = (UINT8)PCI_CLASS_BRIDGE_ISA_PDECODE; + ClassLists[1].Class = (UINT8)PCI_CLASS_BRIDGE; + ClassLists[1].SubClass = (UINT8)PCI_CLASS_BRIDGE_ISA; ClassLists[2].Class = 0xff; // // Locate all found block io devices // - FindAllDeviceTypes (ClassLists, LocalDevice, (UINT16 *) (&LocalIndex), TRUE); + FindAllDeviceTypes (ClassLists, LocalDevice, (UINT16 *)(&LocalIndex), TRUE); if (LocalIndex == 0) { return EFI_NOT_FOUND; } @@ -573,9 +593,9 @@ GetPlatformHandle ( // for (Index = 0; Index < LocalIndex; Index++) { if (LocalDevice[Index].Vid == V_INTEL_VENDOR_ID) { - TempDevice = LocalDevice[0]; - LocalDevice[0] = LocalDevice[Index]; - LocalDevice[Index] = TempDevice; + TempDevice = LocalDevice[0]; + LocalDevice[0] = LocalDevice[Index]; + LocalDevice[Index] = TempDevice; } } @@ -585,13 +605,14 @@ GetPlatformHandle ( for (Index = 0; Index < LocalIndex; Index++) { mIsaHandles[Index] = LocalDevice[Index].Handle; } + *HandleBuffer = &mIsaHandles[0]; *HandleCount = LocalIndex; return EFI_SUCCESS; case EfiGetPlatformUsbHandle: default: return EFI_UNSUPPORTED; - }; + } } /** @@ -613,13 +634,13 @@ GetPlatformHandle ( EFI_STATUS EFIAPI PlatformHooks ( - IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This, - IN EFI_GET_PLATFORM_HOOK_MODE Mode, - IN UINT16 Type, - OUT EFI_HANDLE DeviceHandle OPTIONAL, - IN OUT UINTN *Shadowaddress OPTIONAL, - IN EFI_COMPATIBILITY16_TABLE *Compatibility16Table OPTIONAL, - OUT VOID **AdditionalData OPTIONAL + IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This, + IN EFI_GET_PLATFORM_HOOK_MODE Mode, + IN UINT16 Type, + OUT EFI_HANDLE DeviceHandle OPTIONAL, + IN OUT UINTN *Shadowaddress OPTIONAL, + IN EFI_COMPATIBILITY16_TABLE *Compatibility16Table OPTIONAL, + OUT VOID **AdditionalData OPTIONAL ) { EFI_IA32_REGISTER_SET Regs; @@ -631,7 +652,7 @@ PlatformHooks ( Status = gBS->LocateProtocol ( &gEfiLegacyBiosProtocolGuid, NULL, - (VOID**)&LegacyBios + (VOID **)&LegacyBios ); // @@ -639,14 +660,14 @@ PlatformHooks ( // Regs.H.AH = 0x00; Regs.H.AL = 0x03; - Status = LegacyBios->Int86 (LegacyBios, 0x10, &Regs); + Status = LegacyBios->Int86 (LegacyBios, 0x10, &Regs); return Status; case EfiPlatformHookShadowServiceRoms: return EFI_SUCCESS; case EfiPlatformHookAfterRomInit: default: return EFI_UNSUPPORTED; - }; + } } /** @@ -671,24 +692,24 @@ PlatformHooks ( EFI_STATUS EFIAPI GetRoutingTable ( - IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This, - OUT VOID **RoutingTable, - OUT UINTN *RoutingTableEntries, - OUT VOID **LocalPirqTable OPTIONAL, - OUT UINTN *PirqTableSize OPTIONAL, - OUT VOID **LocalIrqPriorityTable OPTIONAL, - OUT UINTN *IrqPriorityTableEntries OPTIONAL + IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This, + OUT VOID **RoutingTable, + OUT UINTN *RoutingTableEntries, + OUT VOID **LocalPirqTable OPTIONAL, + OUT UINTN *PirqTableSize OPTIONAL, + OUT VOID **LocalIrqPriorityTable OPTIONAL, + OUT UINTN *IrqPriorityTableEntries OPTIONAL ) { - UINT16 PTableSize; - UINT32 Index; - UINT8 Bus; - UINT8 Device; - UINT8 Function; - UINT8 Checksum; - UINT8 *Ptr; - EFI_STATUS Status; - EFI_LEGACY_INTERRUPT_PROTOCOL *LegacyInterrupt; + UINT16 PTableSize; + UINT32 Index; + UINT8 Bus; + UINT8 Device; + UINT8 Function; + UINT8 Checksum; + UINT8 *Ptr; + EFI_STATUS Status; + EFI_LEGACY_INTERRUPT_PROTOCOL *LegacyInterrupt; Checksum = 0; @@ -699,7 +720,7 @@ GetRoutingTable ( Status = gBS->LocateProtocol ( &gEfiLegacyInterruptProtocolGuid, NULL, - (VOID**)&LegacyInterrupt + (VOID **)&LegacyInterrupt ); ASSERT_EFI_ERROR (Status); LegacyInterrupt->GetLocation ( @@ -714,34 +735,35 @@ GetRoutingTable ( // PirqTableHead.PirqTable.TableSize = PTableSize; PirqTableHead.PirqTable.Bus = Bus; - PirqTableHead.PirqTable.DevFun = (UINT8) ((Device << 3) + Function); - Ptr = (UINT8 *) (&PirqTableHead); + PirqTableHead.PirqTable.DevFun = (UINT8)((Device << 3) + Function); + Ptr = (UINT8 *)(&PirqTableHead); // // Calculate checksum. // for (Index = 0; Index < PTableSize; Index++) { - Checksum = (UINT8) (Checksum + (UINT8) *Ptr); - Ptr += 1; + Checksum = (UINT8)(Checksum + (UINT8)*Ptr); + Ptr += 1; } - Checksum = (UINT8) (0x00 - Checksum); - PirqTableHead.PirqTable.Checksum = Checksum; + + Checksum = (UINT8)(0x00 - Checksum); + PirqTableHead.PirqTable.Checksum = Checksum; // // Update return values. // - *LocalPirqTable = (VOID *) (&PirqTableHead); - *PirqTableSize = PTableSize; + *LocalPirqTable = (VOID *)(&PirqTableHead); + *PirqTableSize = PTableSize; } // // More items to return. // - *RoutingTable = PirqTableHead.IrqRoutingEntry; - *RoutingTableEntries = MAX_IRQ_ROUTING_ENTRIES; + *RoutingTable = PirqTableHead.IrqRoutingEntry; + *RoutingTableEntries = MAX_IRQ_ROUTING_ENTRIES; if (LocalIrqPriorityTable != NULL) { - *LocalIrqPriorityTable = IrqPriorityTable; - *IrqPriorityTableEntries = MAX_IRQ_PRIORITY_ENTRIES; + *LocalIrqPriorityTable = IrqPriorityTable; + *IrqPriorityTableEntries = MAX_IRQ_PRIORITY_ENTRIES; } return EFI_SUCCESS; @@ -767,18 +789,18 @@ GetRoutingTable ( EFI_STATUS EFIAPI GetPlatformInfo ( - IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This, - IN EFI_GET_PLATFORM_INFO_MODE Mode, - OUT VOID **Table, - OUT UINTN *TableSize, - OUT UINTN *Location, - OUT UINTN *Alignment, - IN UINT16 LegacySegment, - IN UINT16 LegacyOffset + IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This, + IN EFI_GET_PLATFORM_INFO_MODE Mode, + OUT VOID **Table, + OUT UINTN *TableSize, + OUT UINTN *Location, + OUT UINTN *Alignment, + IN UINT16 LegacySegment, + IN UINT16 LegacyOffset ) { - EFI_STATUS Status; - UINTN Index; + EFI_STATUS Status; + UINTN Index; switch (Mode) { case EfiGetPlatformBinarySystemRom: @@ -791,11 +813,12 @@ GetPlatformInfo ( EFI_SECTION_RAW, 0, Table, - (UINTN *) TableSize + (UINTN *)TableSize ); if (EFI_ERROR (Status)) { continue; } + return EFI_SUCCESS; } @@ -808,7 +831,7 @@ GetPlatformInfo ( case EfiGetPlatformPciExpressBase: default: return EFI_UNSUPPORTED; - }; + } } /** @@ -830,34 +853,35 @@ GetPlatformInfo ( EFI_STATUS EFIAPI TranslatePirq ( - IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This, - IN UINTN PciBus, - IN UINTN PciDevice, - IN UINTN PciFunction, - IN OUT UINT8 *Pirq, - OUT UINT8 *PciIrq + IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This, + IN UINTN PciBus, + IN UINTN PciDevice, + IN UINTN PciFunction, + IN OUT UINT8 *Pirq, + OUT UINT8 *PciIrq ) { - EFI_LEGACY_INTERRUPT_PROTOCOL *LegacyInterrupt; - EFI_STATUS Status; - UINTN Index; - UINTN Index1; - UINT8 LocalPirq; - UINT8 PirqData; - UINT8 MatchData; + EFI_LEGACY_INTERRUPT_PROTOCOL *LegacyInterrupt; + EFI_STATUS Status; + UINTN Index; + UINTN Index1; + UINT8 LocalPirq; + UINT8 PirqData; + UINT8 MatchData; Status = gBS->LocateProtocol ( &gEfiLegacyInterruptProtocolGuid, NULL, - (VOID**)&LegacyInterrupt + (VOID **)&LegacyInterrupt ); ASSERT_EFI_ERROR (Status); - LocalPirq = (UINT8) (*Pirq); + LocalPirq = (UINT8)(*Pirq); for (Index = 0; Index < MAX_IRQ_ROUTING_ENTRIES; Index++) { if ((PirqTableHead.IrqRoutingEntry[Index].Bus == PciBus) && - (PirqTableHead.IrqRoutingEntry[Index].Device == PciDevice)) { - LocalPirq = (UINT8) (PirqTableHead.IrqRoutingEntry[Index].PirqEntry[LocalPirq].Pirq & 0x0f); + (PirqTableHead.IrqRoutingEntry[Index].Device == PciDevice)) + { + LocalPirq = (UINT8)(PirqTableHead.IrqRoutingEntry[Index].PirqEntry[LocalPirq].Pirq & 0x0f); if (LocalPirq > 4) { LocalPirq -= 4; } @@ -867,8 +891,9 @@ TranslatePirq ( while (PirqData == 0) { for (Index1 = 0; Index1 < MAX_IRQ_PRIORITY_ENTRIES; Index1++) { if ((IrqPriorityTable[Index1].Used == MatchData) && - (IrqPriorityTable[Index1].Irq != 0)) { - PirqData = IrqPriorityTable[Index1].Irq; + (IrqPriorityTable[Index1].Irq != 0)) + { + PirqData = IrqPriorityTable[Index1].Irq; IrqPriorityTable[Index1].Used = 0xff; LegacyInterrupt->WritePirq ( LegacyInterrupt, @@ -880,11 +905,10 @@ TranslatePirq ( } if (PirqData == 0) { - // // No unused interrupts, so start reusing them. // - MatchData = (UINT8) (~MatchData); + MatchData = (UINT8)(~MatchData); } } @@ -896,7 +920,6 @@ TranslatePirq ( return EFI_SUCCESS; } - /** Attempt to legacy boot the BootOption. If the EFI contexted has been compromised this function will not return. @@ -914,26 +937,26 @@ TranslatePirq ( EFI_STATUS EFIAPI PrepareToBoot ( - IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This, - IN BBS_BBS_DEVICE_PATH *BbsDevicePath, - IN VOID *BbsTable, - IN UINT32 LoadOptionsSize, - IN VOID *LoadOptions, - IN VOID *EfiToLegacy16BootTable + IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This, + IN BBS_BBS_DEVICE_PATH *BbsDevicePath, + IN VOID *BbsTable, + IN UINT32 LoadOptionsSize, + IN VOID *LoadOptions, + IN VOID *EfiToLegacy16BootTable ) { - BBS_TABLE *LocalBbsTable; - EFI_TO_COMPATIBILITY16_BOOT_TABLE *Legacy16BootTable; - DEVICE_PRODUCER_DATA_HEADER *SioPtr; - UINT16 DevicePathType; - UINT16 Index; - UINT16 Priority; + BBS_TABLE *LocalBbsTable; + EFI_TO_COMPATIBILITY16_BOOT_TABLE *Legacy16BootTable; + DEVICE_PRODUCER_DATA_HEADER *SioPtr; + UINT16 DevicePathType; + UINT16 Index; + UINT16 Priority; // // Initialize values // - Priority = 0; - Legacy16BootTable = (EFI_TO_COMPATIBILITY16_BOOT_TABLE*) EfiToLegacy16BootTable; + Priority = 0; + Legacy16BootTable = (EFI_TO_COMPATIBILITY16_BOOT_TABLE *)EfiToLegacy16BootTable; // // Set how Gate A20 is gated by hardware @@ -943,7 +966,7 @@ PrepareToBoot ( SioPtr->Flags.A20Port90 = 1; SioPtr->MousePresent = 1; - LocalBbsTable = BbsTable; + LocalBbsTable = BbsTable; // // There are 2 cases that must be covered. @@ -966,8 +989,9 @@ PrepareToBoot ( if ((LocalBbsTable[Index].BootPriority != BBS_UNPRIORITIZED_ENTRY) && (LocalBbsTable[Index].BootPriority != BBS_IGNORE_ENTRY) && (LocalBbsTable[Index].BootPriority != BBS_LOWEST_PRIORITY) && - (Priority <= LocalBbsTable[Index].BootPriority)) { - Priority = (UINT16) (LocalBbsTable[Index].BootPriority + 1); + (Priority <= LocalBbsTable[Index].BootPriority)) + { + Priority = (UINT16)(LocalBbsTable[Index].BootPriority + 1); } } @@ -978,28 +1002,32 @@ PrepareToBoot ( case BBS_EMBED_NETWORK: for (Index = 0; Index < Legacy16BootTable->NumberBbsEntries; Index++) { if ((LocalBbsTable[Index].BootPriority == BBS_UNPRIORITIZED_ENTRY) && - (LocalBbsTable[Index].DeviceType == DevicePathType)) { + (LocalBbsTable[Index].DeviceType == DevicePathType)) + { LocalBbsTable[Index].BootPriority = Priority; ++Priority; } } + break; case BBS_BEV_DEVICE: for (Index = 0; Index < Legacy16BootTable->NumberBbsEntries; Index++) { if ((LocalBbsTable[Index].BootPriority == BBS_UNPRIORITIZED_ENTRY) && (LocalBbsTable[Index].Class == 01) && - (LocalBbsTable[Index].SubClass == 01)) { + (LocalBbsTable[Index].SubClass == 01)) + { LocalBbsTable[Index].BootPriority = Priority; ++Priority; } } + break; case BBS_USB: case BBS_PCMCIA: case BBS_UNKNOWN: default: break; - }; + } // // Set priority for rest of devices @@ -1014,7 +1042,6 @@ PrepareToBoot ( return EFI_SUCCESS; } - /** Initialize Legacy Platform support @@ -1026,16 +1053,16 @@ LegacyBiosPlatformInstall ( VOID ) { - EFI_STATUS Status; - LEGACY_BIOS_PLATFORM_INSTANCE *Private; + EFI_STATUS Status; + LEGACY_BIOS_PLATFORM_INSTANCE *Private; mImageHandle = gImageHandle; - Private = &mPrivateData; + Private = &mPrivateData; // // Grab a copy of all the protocols we depend on. // - Private->Signature = LEGACY_BIOS_PLATFORM_INSTANCE_SIGNATURE; + Private->Signature = LEGACY_BIOS_PLATFORM_INSTANCE_SIGNATURE; Private->LegacyBiosPlatform.GetPlatformInfo = GetPlatformInfo; Private->LegacyBiosPlatform.GetPlatformHandle = GetPlatformHandle; Private->LegacyBiosPlatform.SmmInit = SmmInit; @@ -1043,17 +1070,17 @@ LegacyBiosPlatformInstall ( Private->LegacyBiosPlatform.GetRoutingTable = GetRoutingTable; Private->LegacyBiosPlatform.TranslatePirq = TranslatePirq; Private->LegacyBiosPlatform.PrepareToBoot = PrepareToBoot; - Private->ImageHandle = gImageHandle; + Private->ImageHandle = gImageHandle; // // Make a new handle and install the protocol // Private->Handle = NULL; - Status = gBS->InstallProtocolInterface ( - &Private->Handle, - &gEfiLegacyBiosPlatformProtocolGuid, - EFI_NATIVE_INTERFACE, - &Private->LegacyBiosPlatform - ); + Status = gBS->InstallProtocolInterface ( + &Private->Handle, + &gEfiLegacyBiosPlatformProtocolGuid, + EFI_NATIVE_INTERFACE, + &Private->LegacyBiosPlatform + ); return Status; } diff --git a/OvmfPkg/Csm/CsmSupportLib/LegacyPlatform.h b/OvmfPkg/Csm/CsmSupportLib/LegacyPlatform.h index 1479efc749..7dddd5200f 100644 --- a/OvmfPkg/Csm/CsmSupportLib/LegacyPlatform.h +++ b/OvmfPkg/Csm/CsmSupportLib/LegacyPlatform.h @@ -38,54 +38,54 @@ // // PIRQ information constants. // -#define MAX_IRQ_ROUTING_ENTRIES 6 -#define MAX_IRQ_PRIORITY_ENTRIES 7 +#define MAX_IRQ_ROUTING_ENTRIES 6 +#define MAX_IRQ_PRIORITY_ENTRIES 7 -#define V_INTEL_VENDOR_ID 0x8086 -#define V_PIIX4_IDE_DEVICE_ID 0x7010 +#define V_INTEL_VENDOR_ID 0x8086 +#define V_PIIX4_IDE_DEVICE_ID 0x7010 // // Type declarations // typedef struct { - UINT8 SetupValue; - UINT16 DeviceType; - UINT8 Class; - UINT8 SubClass; + UINT8 SetupValue; + UINT16 DeviceType; + UINT8 Class; + UINT8 SubClass; } EFI_SETUP_BBS_MAP; typedef struct { - UINT8 Class; - UINT8 SubClass; + UINT8 Class; + UINT8 SubClass; } PCI_CLASS_RECORD; typedef struct { - EFI_LEGACY_PIRQ_TABLE_HEADER PirqTable; - EFI_LEGACY_IRQ_ROUTING_ENTRY IrqRoutingEntry[MAX_IRQ_ROUTING_ENTRIES]; + EFI_LEGACY_PIRQ_TABLE_HEADER PirqTable; + EFI_LEGACY_IRQ_ROUTING_ENTRY IrqRoutingEntry[MAX_IRQ_ROUTING_ENTRIES]; } EFI_LEGACY_PIRQ_TABLE; typedef struct { - EFI_HANDLE Handle; - UINT16 Vid; - UINT16 Did; - UINT16 SvId; - UINT16 SysId; + EFI_HANDLE Handle; + UINT16 Vid; + UINT16 Did; + UINT16 SvId; + UINT16 SysId; } DEVICE_STRUCTURE; typedef struct { - EFI_GUID FileName; - UINTN Valid; + EFI_GUID FileName; + UINTN Valid; } SYSTEM_ROM_TABLE; typedef struct { - UINT32 Signature; - EFI_HANDLE Handle; - EFI_LEGACY_BIOS_PLATFORM_PROTOCOL LegacyBiosPlatform; - EFI_HANDLE ImageHandle; - EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo; + UINT32 Signature; + EFI_HANDLE Handle; + EFI_LEGACY_BIOS_PLATFORM_PROTOCOL LegacyBiosPlatform; + EFI_HANDLE ImageHandle; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo; } LEGACY_BIOS_PLATFORM_INSTANCE; -#define LEGACY_BIOS_PLATFORM_INSTANCE_SIGNATURE SIGNATURE_32('P','B','I','O') +#define LEGACY_BIOS_PLATFORM_INSTANCE_SIGNATURE SIGNATURE_32('P','B','I','O') #define LEGACY_BIOS_PLATFORM_INSTANCE_FROM_THIS(this) \ CR (this, \ @@ -95,4 +95,3 @@ typedef struct { ) #endif - diff --git a/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c b/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c index fe9ae27c9d..4969c88dc3 100644 --- a/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c +++ b/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c @@ -29,55 +29,55 @@ // 0xEC000-0xEFFFF 0x5f 0x96 5:4 00 = DRAM Disabled, 01= Read Only, 10 = Write Only, 11 = Normal // 0xF0000-0xFFFFF 0x59 0x90 5:4 00 = DRAM Disabled, 01= Read Only, 10 = Write Only, 11 = Normal // -STATIC LEGACY_MEMORY_SECTION_INFO mSectionArray[] = { - {0xC0000, SIZE_16KB, FALSE, FALSE}, - {0xC4000, SIZE_16KB, FALSE, FALSE}, - {0xC8000, SIZE_16KB, FALSE, FALSE}, - {0xCC000, SIZE_16KB, FALSE, FALSE}, - {0xD0000, SIZE_16KB, FALSE, FALSE}, - {0xD4000, SIZE_16KB, FALSE, FALSE}, - {0xD8000, SIZE_16KB, FALSE, FALSE}, - {0xDC000, SIZE_16KB, FALSE, FALSE}, - {0xE0000, SIZE_16KB, FALSE, FALSE}, - {0xE4000, SIZE_16KB, FALSE, FALSE}, - {0xE8000, SIZE_16KB, FALSE, FALSE}, - {0xEC000, SIZE_16KB, FALSE, FALSE}, - {0xF0000, SIZE_64KB, FALSE, FALSE} +STATIC LEGACY_MEMORY_SECTION_INFO mSectionArray[] = { + { 0xC0000, SIZE_16KB, FALSE, FALSE }, + { 0xC4000, SIZE_16KB, FALSE, FALSE }, + { 0xC8000, SIZE_16KB, FALSE, FALSE }, + { 0xCC000, SIZE_16KB, FALSE, FALSE }, + { 0xD0000, SIZE_16KB, FALSE, FALSE }, + { 0xD4000, SIZE_16KB, FALSE, FALSE }, + { 0xD8000, SIZE_16KB, FALSE, FALSE }, + { 0xDC000, SIZE_16KB, FALSE, FALSE }, + { 0xE0000, SIZE_16KB, FALSE, FALSE }, + { 0xE4000, SIZE_16KB, FALSE, FALSE }, + { 0xE8000, SIZE_16KB, FALSE, FALSE }, + { 0xEC000, SIZE_16KB, FALSE, FALSE }, + { 0xF0000, SIZE_64KB, FALSE, FALSE } }; STATIC PAM_REGISTER_VALUE mRegisterValues440[] = { - {PMC_REGISTER_PIIX4 (PIIX4_PAM1), 0x01, 0x02}, - {PMC_REGISTER_PIIX4 (PIIX4_PAM1), 0x10, 0x20}, - {PMC_REGISTER_PIIX4 (PIIX4_PAM2), 0x01, 0x02}, - {PMC_REGISTER_PIIX4 (PIIX4_PAM2), 0x10, 0x20}, - {PMC_REGISTER_PIIX4 (PIIX4_PAM3), 0x01, 0x02}, - {PMC_REGISTER_PIIX4 (PIIX4_PAM3), 0x10, 0x20}, - {PMC_REGISTER_PIIX4 (PIIX4_PAM4), 0x01, 0x02}, - {PMC_REGISTER_PIIX4 (PIIX4_PAM4), 0x10, 0x20}, - {PMC_REGISTER_PIIX4 (PIIX4_PAM5), 0x01, 0x02}, - {PMC_REGISTER_PIIX4 (PIIX4_PAM5), 0x10, 0x20}, - {PMC_REGISTER_PIIX4 (PIIX4_PAM6), 0x01, 0x02}, - {PMC_REGISTER_PIIX4 (PIIX4_PAM6), 0x10, 0x20}, - {PMC_REGISTER_PIIX4 (PIIX4_PAM0), 0x10, 0x20} + { PMC_REGISTER_PIIX4 (PIIX4_PAM1), 0x01, 0x02 }, + { PMC_REGISTER_PIIX4 (PIIX4_PAM1), 0x10, 0x20 }, + { PMC_REGISTER_PIIX4 (PIIX4_PAM2), 0x01, 0x02 }, + { PMC_REGISTER_PIIX4 (PIIX4_PAM2), 0x10, 0x20 }, + { PMC_REGISTER_PIIX4 (PIIX4_PAM3), 0x01, 0x02 }, + { PMC_REGISTER_PIIX4 (PIIX4_PAM3), 0x10, 0x20 }, + { PMC_REGISTER_PIIX4 (PIIX4_PAM4), 0x01, 0x02 }, + { PMC_REGISTER_PIIX4 (PIIX4_PAM4), 0x10, 0x20 }, + { PMC_REGISTER_PIIX4 (PIIX4_PAM5), 0x01, 0x02 }, + { PMC_REGISTER_PIIX4 (PIIX4_PAM5), 0x10, 0x20 }, + { PMC_REGISTER_PIIX4 (PIIX4_PAM6), 0x01, 0x02 }, + { PMC_REGISTER_PIIX4 (PIIX4_PAM6), 0x10, 0x20 }, + { PMC_REGISTER_PIIX4 (PIIX4_PAM0), 0x10, 0x20 } }; STATIC PAM_REGISTER_VALUE mRegisterValuesQ35[] = { - {DRAMC_REGISTER_Q35 (MCH_PAM1), 0x01, 0x02}, - {DRAMC_REGISTER_Q35 (MCH_PAM1), 0x10, 0x20}, - {DRAMC_REGISTER_Q35 (MCH_PAM2), 0x01, 0x02}, - {DRAMC_REGISTER_Q35 (MCH_PAM2), 0x10, 0x20}, - {DRAMC_REGISTER_Q35 (MCH_PAM3), 0x01, 0x02}, - {DRAMC_REGISTER_Q35 (MCH_PAM3), 0x10, 0x20}, - {DRAMC_REGISTER_Q35 (MCH_PAM4), 0x01, 0x02}, - {DRAMC_REGISTER_Q35 (MCH_PAM4), 0x10, 0x20}, - {DRAMC_REGISTER_Q35 (MCH_PAM5), 0x01, 0x02}, - {DRAMC_REGISTER_Q35 (MCH_PAM5), 0x10, 0x20}, - {DRAMC_REGISTER_Q35 (MCH_PAM6), 0x01, 0x02}, - {DRAMC_REGISTER_Q35 (MCH_PAM6), 0x10, 0x20}, - {DRAMC_REGISTER_Q35 (MCH_PAM0), 0x10, 0x20} + { DRAMC_REGISTER_Q35 (MCH_PAM1), 0x01, 0x02 }, + { DRAMC_REGISTER_Q35 (MCH_PAM1), 0x10, 0x20 }, + { DRAMC_REGISTER_Q35 (MCH_PAM2), 0x01, 0x02 }, + { DRAMC_REGISTER_Q35 (MCH_PAM2), 0x10, 0x20 }, + { DRAMC_REGISTER_Q35 (MCH_PAM3), 0x01, 0x02 }, + { DRAMC_REGISTER_Q35 (MCH_PAM3), 0x10, 0x20 }, + { DRAMC_REGISTER_Q35 (MCH_PAM4), 0x01, 0x02 }, + { DRAMC_REGISTER_Q35 (MCH_PAM4), 0x10, 0x20 }, + { DRAMC_REGISTER_Q35 (MCH_PAM5), 0x01, 0x02 }, + { DRAMC_REGISTER_Q35 (MCH_PAM5), 0x10, 0x20 }, + { DRAMC_REGISTER_Q35 (MCH_PAM6), 0x01, 0x02 }, + { DRAMC_REGISTER_Q35 (MCH_PAM6), 0x10, 0x20 }, + { DRAMC_REGISTER_Q35 (MCH_PAM0), 0x10, 0x20 } }; -STATIC PAM_REGISTER_VALUE *mRegisterValues; +STATIC PAM_REGISTER_VALUE *mRegisterValues; // // Handle used to install the Legacy Region Protocol @@ -98,25 +98,26 @@ STATIC EFI_LEGACY_REGION2_PROTOCOL mLegacyRegion2 = { STATIC EFI_STATUS LegacyRegionManipulationInternal ( - IN UINT32 Start, - IN UINT32 Length, - IN BOOLEAN *ReadEnable, - IN BOOLEAN *WriteEnable, - OUT UINT32 *Granularity + IN UINT32 Start, + IN UINT32 Length, + IN BOOLEAN *ReadEnable, + IN BOOLEAN *WriteEnable, + OUT UINT32 *Granularity ) { - UINT32 EndAddress; - UINTN Index; - UINTN StartIndex; + UINT32 EndAddress; + UINTN Index; + UINTN StartIndex; // // Validate input parameters. // - if (Length == 0 || Granularity == NULL) { + if ((Length == 0) || (Granularity == NULL)) { return EFI_INVALID_PARAMETER; } + EndAddress = Start + Length - 1; - if ((Start < PAM_BASE_ADDRESS) || EndAddress > PAM_LIMIT_ADDRESS) { + if ((Start < PAM_BASE_ADDRESS) || (EndAddress > PAM_LIMIT_ADDRESS)) { return EFI_INVALID_PARAMETER; } @@ -130,6 +131,7 @@ LegacyRegionManipulationInternal ( break; } } + ASSERT (Index < ARRAY_SIZE (mSectionArray)); // @@ -145,10 +147,11 @@ LegacyRegionManipulationInternal ( } else { PciAnd8 ( mRegisterValues[Index].PAMRegPciLibAddress, - (UINT8) (~mRegisterValues[Index].ReadEnableData) + (UINT8)(~mRegisterValues[Index].ReadEnableData) ); } } + if (WriteEnable != NULL) { if (*WriteEnable) { PciOr8 ( @@ -158,7 +161,7 @@ LegacyRegionManipulationInternal ( } else { PciAnd8 ( mRegisterValues[Index].PAMRegPciLibAddress, - (UINT8) (~mRegisterValues[Index].WriteEnableData) + (UINT8)(~mRegisterValues[Index].WriteEnableData) ); } } @@ -171,6 +174,7 @@ LegacyRegionManipulationInternal ( break; } } + ASSERT (Index < ARRAY_SIZE (mSectionArray)); return EFI_SUCCESS; @@ -179,30 +183,31 @@ LegacyRegionManipulationInternal ( STATIC EFI_STATUS LegacyRegionGetInfoInternal ( - OUT UINT32 *DescriptorCount, - OUT LEGACY_MEMORY_SECTION_INFO **Descriptor + OUT UINT32 *DescriptorCount, + OUT LEGACY_MEMORY_SECTION_INFO **Descriptor ) { - UINTN Index; - UINT8 PamValue; + UINTN Index; + UINT8 PamValue; // // Check input parameters // - if (DescriptorCount == NULL || Descriptor == NULL) { + if ((DescriptorCount == NULL) || (Descriptor == NULL)) { return EFI_INVALID_PARAMETER; } // // Fill in current status of legacy region. // - *DescriptorCount = sizeof(mSectionArray) / sizeof (mSectionArray[0]); + *DescriptorCount = sizeof (mSectionArray) / sizeof (mSectionArray[0]); for (Index = 0; Index < *DescriptorCount; Index++) { - PamValue = PciRead8 (mRegisterValues[Index].PAMRegPciLibAddress); + PamValue = PciRead8 (mRegisterValues[Index].PAMRegPciLibAddress); mSectionArray[Index].ReadEnabled = FALSE; if ((PamValue & mRegisterValues[Index].ReadEnableData) != 0) { mSectionArray[Index].ReadEnabled = TRUE; } + mSectionArray[Index].WriteEnabled = FALSE; if ((PamValue & mRegisterValues[Index].WriteEnableData) != 0) { mSectionArray[Index].WriteEnabled = TRUE; @@ -250,7 +255,6 @@ LegacyRegion2Decode ( return LegacyRegionManipulationInternal (Start, Length, On, NULL, Granularity); } - /** Modify the hardware to disallow memory attribute changes in a region. @@ -279,10 +283,10 @@ LegacyRegion2Decode ( EFI_STATUS EFIAPI LegacyRegion2BootLock ( - IN EFI_LEGACY_REGION2_PROTOCOL *This, - IN UINT32 Start, - IN UINT32 Length, - OUT UINT32 *Granularity + IN EFI_LEGACY_REGION2_PROTOCOL *This, + IN UINT32 Start, + IN UINT32 Length, + OUT UINT32 *Granularity ) { if ((Start < 0xC0000) || ((Start + Length - 1) > 0xFFFFF)) { @@ -292,7 +296,6 @@ LegacyRegion2BootLock ( return EFI_UNSUPPORTED; } - /** Modify the hardware to disallow memory writes in a region. @@ -316,10 +319,10 @@ LegacyRegion2BootLock ( EFI_STATUS EFIAPI LegacyRegion2Lock ( - IN EFI_LEGACY_REGION2_PROTOCOL *This, - IN UINT32 Start, - IN UINT32 Length, - OUT UINT32 *Granularity + IN EFI_LEGACY_REGION2_PROTOCOL *This, + IN UINT32 Start, + IN UINT32 Length, + OUT UINT32 *Granularity ) { BOOLEAN WriteEnable; @@ -328,7 +331,6 @@ LegacyRegion2Lock ( return LegacyRegionManipulationInternal (Start, Length, NULL, &WriteEnable, Granularity); } - /** Modify the hardware to allow memory writes in a region. @@ -391,11 +393,11 @@ LegacyRegionGetInfo ( OUT EFI_LEGACY_REGION_DESCRIPTOR **Descriptor ) { - LEGACY_MEMORY_SECTION_INFO *SectionInfo; - UINT32 SectionCount; - EFI_LEGACY_REGION_DESCRIPTOR *DescriptorArray; - UINTN Index; - UINTN DescriptorIndex; + LEGACY_MEMORY_SECTION_INFO *SectionInfo; + UINT32 SectionCount; + EFI_LEGACY_REGION_DESCRIPTOR *DescriptorArray; + UINTN Index; + UINTN DescriptorIndex; // // Get section numbers and information @@ -416,10 +418,11 @@ LegacyRegionGetInfo ( DescriptorArray[DescriptorIndex].Length = SectionInfo[Index].Length; DescriptorArray[DescriptorIndex].Granularity = SectionInfo[Index].Length; if (SectionInfo[Index].ReadEnabled) { - DescriptorArray[DescriptorIndex].Attribute = LegacyRegionDecoded; + DescriptorArray[DescriptorIndex].Attribute = LegacyRegionDecoded; } else { - DescriptorArray[DescriptorIndex].Attribute = LegacyRegionNotDecoded; + DescriptorArray[DescriptorIndex].Attribute = LegacyRegionNotDecoded; } + DescriptorIndex++; // @@ -433,6 +436,7 @@ LegacyRegionGetInfo ( } else { DescriptorArray[DescriptorIndex].Attribute = LegacyRegionWriteDisabled; } + DescriptorIndex++; // @@ -445,7 +449,7 @@ LegacyRegionGetInfo ( DescriptorIndex++; } - *DescriptorCount = (UINT32) DescriptorIndex; + *DescriptorCount = (UINT32)DescriptorIndex; *Descriptor = DescriptorArray; return EFI_SUCCESS; @@ -470,17 +474,21 @@ LegacyRegionInit ( // HostBridgeDevId = PcdGet16 (PcdOvmfHostBridgePciDevId); switch (HostBridgeDevId) { - case INTEL_82441_DEVICE_ID: - mRegisterValues = mRegisterValues440; - break; - case INTEL_Q35_MCH_DEVICE_ID: - mRegisterValues = mRegisterValuesQ35; - break; - default: - DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", - __FUNCTION__, HostBridgeDevId)); - ASSERT (FALSE); - return RETURN_UNSUPPORTED; + case INTEL_82441_DEVICE_ID: + mRegisterValues = mRegisterValues440; + break; + case INTEL_Q35_MCH_DEVICE_ID: + mRegisterValues = mRegisterValuesQ35; + break; + default: + DEBUG (( + DEBUG_ERROR, + "%a: Unknown Host Bridge Device ID: 0x%04x\n", + __FUNCTION__, + HostBridgeDevId + )); + ASSERT (FALSE); + return RETURN_UNSUPPORTED; } // @@ -488,11 +496,11 @@ LegacyRegionInit ( // Status = gBS->InstallMultipleProtocolInterfaces ( &mHandle, - &gEfiLegacyRegion2ProtocolGuid, &mLegacyRegion2, + &gEfiLegacyRegion2ProtocolGuid, + &mLegacyRegion2, NULL ); ASSERT_EFI_ERROR (Status); return Status; } - diff --git a/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h b/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h index e18cb97949..8ffe42a6a5 100644 --- a/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h +++ b/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h @@ -31,19 +31,19 @@ // Describes Legacy Region blocks and status. // typedef struct { - UINT32 Start; - UINT32 Length; - BOOLEAN ReadEnabled; - BOOLEAN WriteEnabled; + UINT32 Start; + UINT32 Length; + BOOLEAN ReadEnabled; + BOOLEAN WriteEnabled; } LEGACY_MEMORY_SECTION_INFO; // // Provides a map of the PAM registers and bits used to set Read/Write access. // typedef struct { - UINTN PAMRegPciLibAddress; - UINT8 ReadEnableData; - UINT8 WriteEnableData; + UINTN PAMRegPciLibAddress; + UINT8 ReadEnableData; + UINT8 WriteEnableData; } PAM_REGISTER_VALUE; /** @@ -103,10 +103,10 @@ LegacyRegion2Decode ( EFI_STATUS EFIAPI LegacyRegion2Lock ( - IN EFI_LEGACY_REGION2_PROTOCOL *This, - IN UINT32 Start, - IN UINT32 Length, - OUT UINT32 *Granularity + IN EFI_LEGACY_REGION2_PROTOCOL *This, + IN UINT32 Start, + IN UINT32 Length, + OUT UINT32 *Granularity ); /** @@ -137,10 +137,10 @@ LegacyRegion2Lock ( EFI_STATUS EFIAPI LegacyRegion2BootLock ( - IN EFI_LEGACY_REGION2_PROTOCOL *This, - IN UINT32 Start, - IN UINT32 Length, - OUT UINT32 *Granularity + IN EFI_LEGACY_REGION2_PROTOCOL *This, + IN UINT32 Start, + IN UINT32 Length, + OUT UINT32 *Granularity ); /** @@ -200,4 +200,3 @@ LegacyRegionGetInfo ( ); #endif - diff --git a/OvmfPkg/Csm/Include/Framework/BootScript.h b/OvmfPkg/Csm/Include/Framework/BootScript.h index a3518ea837..ea1d03cf47 100644 --- a/OvmfPkg/Csm/Include/Framework/BootScript.h +++ b/OvmfPkg/Csm/Include/Framework/BootScript.h @@ -17,25 +17,24 @@ SPDX-License-Identifier: BSD-2-Clause-Patent /// /// S3 Boot Script Table identifier. /// -#define FRAMEWORK_EFI_ACPI_S3_RESUME_SCRIPT_TABLE 0x00 +#define FRAMEWORK_EFI_ACPI_S3_RESUME_SCRIPT_TABLE 0x00 /// /// The opcode is used to add a record for memory reads of the memory location and continues when the /// exit criteria is satisfied, or after a defined duration. /// -#define FRAMEWORK_EFI_BOOT_SCRIPT_MEM_POLL_OPCODE 0x09 +#define FRAMEWORK_EFI_BOOT_SCRIPT_MEM_POLL_OPCODE 0x09 /// /// The opcode is used to add a record for dispatching specified arbitrary code into a specified /// boot script table. /// -#define FRAMEWORK_EFI_BOOT_SCRIPT_DISPATCH_2_OPCODE 0x0D +#define FRAMEWORK_EFI_BOOT_SCRIPT_DISPATCH_2_OPCODE 0x0D /// /// The opcode indicates the start of the boot script table. /// -#define FRAMEWORK_EFI_BOOT_SCRIPT_TABLE_OPCODE 0xAA +#define FRAMEWORK_EFI_BOOT_SCRIPT_TABLE_OPCODE 0xAA /// /// The opcode indicates the end of the boot script table. /// -#define FRAMEWORK_EFI_BOOT_SCRIPT_TERMINATE_OPCODE 0xFF - +#define FRAMEWORK_EFI_BOOT_SCRIPT_TERMINATE_OPCODE 0xFF #endif diff --git a/OvmfPkg/Csm/Include/Framework/DxeCis.h b/OvmfPkg/Csm/Include/Framework/DxeCis.h index 98a947e420..d2ee61d681 100644 --- a/OvmfPkg/Csm/Include/Framework/DxeCis.h +++ b/OvmfPkg/Csm/Include/Framework/DxeCis.h @@ -33,35 +33,35 @@ typedef struct { // // Table header for the Framework EFI Runtime Services Table // - EFI_TABLE_HEADER Hdr; + EFI_TABLE_HEADER Hdr; // // Time services // - EFI_GET_TIME GetTime; - EFI_SET_TIME SetTime; - EFI_GET_WAKEUP_TIME GetWakeupTime; - EFI_SET_WAKEUP_TIME SetWakeupTime; + EFI_GET_TIME GetTime; + EFI_SET_TIME SetTime; + EFI_GET_WAKEUP_TIME GetWakeupTime; + EFI_SET_WAKEUP_TIME SetWakeupTime; // // Virtual memory services // - EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; - EFI_CONVERT_POINTER ConvertPointer; + EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; + EFI_CONVERT_POINTER ConvertPointer; // // Variable services // - EFI_GET_VARIABLE GetVariable; - EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; - EFI_SET_VARIABLE SetVariable; + EFI_GET_VARIABLE GetVariable; + EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; + EFI_SET_VARIABLE SetVariable; // // Misc // - EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount; - EFI_RESET_SYSTEM ResetSystem; + EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount; + EFI_RESET_SYSTEM ResetSystem; /// /// A Framework extension to the EFI 1.10 runtime table. /// It was moved to a protocol to avoid conflict with UEFI 2.0. /// - EFI_REPORT_STATUS_CODE ReportStatusCode; + EFI_REPORT_STATUS_CODE ReportStatusCode; } FRAMEWORK_EFI_RUNTIME_SERVICES; /// @@ -71,94 +71,94 @@ typedef struct { /// /// The table header for the EFI Boot Services Table. /// - EFI_TABLE_HEADER Hdr; + EFI_TABLE_HEADER Hdr; // // Task Priority Services // - EFI_RAISE_TPL RaiseTPL; - EFI_RESTORE_TPL RestoreTPL; + EFI_RAISE_TPL RaiseTPL; + EFI_RESTORE_TPL RestoreTPL; // // Memory Services // - EFI_ALLOCATE_PAGES AllocatePages; - EFI_FREE_PAGES FreePages; - EFI_GET_MEMORY_MAP GetMemoryMap; - EFI_ALLOCATE_POOL AllocatePool; - EFI_FREE_POOL FreePool; + EFI_ALLOCATE_PAGES AllocatePages; + EFI_FREE_PAGES FreePages; + EFI_GET_MEMORY_MAP GetMemoryMap; + EFI_ALLOCATE_POOL AllocatePool; + EFI_FREE_POOL FreePool; // // Event & Timer Services // - EFI_CREATE_EVENT CreateEvent; - EFI_SET_TIMER SetTimer; - EFI_WAIT_FOR_EVENT WaitForEvent; - EFI_SIGNAL_EVENT SignalEvent; - EFI_CLOSE_EVENT CloseEvent; - EFI_CHECK_EVENT CheckEvent; + EFI_CREATE_EVENT CreateEvent; + EFI_SET_TIMER SetTimer; + EFI_WAIT_FOR_EVENT WaitForEvent; + EFI_SIGNAL_EVENT SignalEvent; + EFI_CLOSE_EVENT CloseEvent; + EFI_CHECK_EVENT CheckEvent; // // Protocol Handler Services // - EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; - EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; - EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; - EFI_HANDLE_PROTOCOL HandleProtocol; - EFI_HANDLE_PROTOCOL PcHandleProtocol; - EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; - EFI_LOCATE_HANDLE LocateHandle; - EFI_LOCATE_DEVICE_PATH LocateDevicePath; - EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; + EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; + EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; + EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; + EFI_HANDLE_PROTOCOL HandleProtocol; + EFI_HANDLE_PROTOCOL PcHandleProtocol; + EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; + EFI_LOCATE_HANDLE LocateHandle; + EFI_LOCATE_DEVICE_PATH LocateDevicePath; + EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; // // Image Services // - EFI_IMAGE_LOAD LoadImage; - EFI_IMAGE_START StartImage; - EFI_EXIT Exit; - EFI_IMAGE_UNLOAD UnloadImage; - EFI_EXIT_BOOT_SERVICES ExitBootServices; + EFI_IMAGE_LOAD LoadImage; + EFI_IMAGE_START StartImage; + EFI_EXIT Exit; + EFI_IMAGE_UNLOAD UnloadImage; + EFI_EXIT_BOOT_SERVICES ExitBootServices; // // Miscellaneous Services // - EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; - EFI_STALL Stall; - EFI_SET_WATCHDOG_TIMER SetWatchdogTimer; + EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; + EFI_STALL Stall; + EFI_SET_WATCHDOG_TIMER SetWatchdogTimer; // // DriverSupport Services // - EFI_CONNECT_CONTROLLER ConnectController; - EFI_DISCONNECT_CONTROLLER DisconnectController; + EFI_CONNECT_CONTROLLER ConnectController; + EFI_DISCONNECT_CONTROLLER DisconnectController; // // Open and Close Protocol Services // - EFI_OPEN_PROTOCOL OpenProtocol; - EFI_CLOSE_PROTOCOL CloseProtocol; - EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation; + EFI_OPEN_PROTOCOL OpenProtocol; + EFI_CLOSE_PROTOCOL CloseProtocol; + EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation; // // Library Services // - EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle; - EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer; - EFI_LOCATE_PROTOCOL LocateProtocol; - EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces; - EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces; + EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle; + EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer; + EFI_LOCATE_PROTOCOL LocateProtocol; + EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces; + EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces; // // 32-bit CRC Services // - EFI_CALCULATE_CRC32 CalculateCrc32; + EFI_CALCULATE_CRC32 CalculateCrc32; // // Miscellaneous Services // - EFI_COPY_MEM CopyMem; - EFI_SET_MEM SetMem; + EFI_COPY_MEM CopyMem; + EFI_SET_MEM SetMem; } FRAMEWORK_EFI_BOOT_SERVICES; #define EFI_EVENT_RUNTIME_CONTEXT 0x20000000 @@ -167,4 +167,3 @@ typedef struct { #define EFI_EVENT_SIGNAL_LEGACY_BOOT 0x00000204 #endif - diff --git a/OvmfPkg/Csm/Include/Framework/FirmwareVolumeHeader.h b/OvmfPkg/Csm/Include/Framework/FirmwareVolumeHeader.h index e2b5a28b8b..8da429286a 100644 --- a/OvmfPkg/Csm/Include/Framework/FirmwareVolumeHeader.h +++ b/OvmfPkg/Csm/Include/Framework/FirmwareVolumeHeader.h @@ -17,38 +17,38 @@ SPDX-License-Identifier: BSD-2-Clause-Patent /// /// Firmware Volume Block Attributes bit definitions. ///@{ -#define EFI_FVB_READ_DISABLED_CAP 0x00000001 -#define EFI_FVB_READ_ENABLED_CAP 0x00000002 -#define EFI_FVB_READ_STATUS 0x00000004 +#define EFI_FVB_READ_DISABLED_CAP 0x00000001 +#define EFI_FVB_READ_ENABLED_CAP 0x00000002 +#define EFI_FVB_READ_STATUS 0x00000004 #define EFI_FVB_WRITE_DISABLED_CAP 0x00000008 #define EFI_FVB_WRITE_ENABLED_CAP 0x00000010 #define EFI_FVB_WRITE_STATUS 0x00000020 -#define EFI_FVB_LOCK_CAP 0x00000040 -#define EFI_FVB_LOCK_STATUS 0x00000080 +#define EFI_FVB_LOCK_CAP 0x00000040 +#define EFI_FVB_LOCK_STATUS 0x00000080 -#define EFI_FVB_STICKY_WRITE 0x00000200 -#define EFI_FVB_MEMORY_MAPPED 0x00000400 -#define EFI_FVB_ERASE_POLARITY 0x00000800 +#define EFI_FVB_STICKY_WRITE 0x00000200 +#define EFI_FVB_MEMORY_MAPPED 0x00000400 +#define EFI_FVB_ERASE_POLARITY 0x00000800 -#define EFI_FVB_ALIGNMENT_CAP 0x00008000 -#define EFI_FVB_ALIGNMENT_2 0x00010000 -#define EFI_FVB_ALIGNMENT_4 0x00020000 -#define EFI_FVB_ALIGNMENT_8 0x00040000 -#define EFI_FVB_ALIGNMENT_16 0x00080000 -#define EFI_FVB_ALIGNMENT_32 0x00100000 -#define EFI_FVB_ALIGNMENT_64 0x00200000 -#define EFI_FVB_ALIGNMENT_128 0x00400000 -#define EFI_FVB_ALIGNMENT_256 0x00800000 -#define EFI_FVB_ALIGNMENT_512 0x01000000 -#define EFI_FVB_ALIGNMENT_1K 0x02000000 -#define EFI_FVB_ALIGNMENT_2K 0x04000000 -#define EFI_FVB_ALIGNMENT_4K 0x08000000 -#define EFI_FVB_ALIGNMENT_8K 0x10000000 -#define EFI_FVB_ALIGNMENT_16K 0x20000000 -#define EFI_FVB_ALIGNMENT_32K 0x40000000 -#define EFI_FVB_ALIGNMENT_64K 0x80000000 +#define EFI_FVB_ALIGNMENT_CAP 0x00008000 +#define EFI_FVB_ALIGNMENT_2 0x00010000 +#define EFI_FVB_ALIGNMENT_4 0x00020000 +#define EFI_FVB_ALIGNMENT_8 0x00040000 +#define EFI_FVB_ALIGNMENT_16 0x00080000 +#define EFI_FVB_ALIGNMENT_32 0x00100000 +#define EFI_FVB_ALIGNMENT_64 0x00200000 +#define EFI_FVB_ALIGNMENT_128 0x00400000 +#define EFI_FVB_ALIGNMENT_256 0x00800000 +#define EFI_FVB_ALIGNMENT_512 0x01000000 +#define EFI_FVB_ALIGNMENT_1K 0x02000000 +#define EFI_FVB_ALIGNMENT_2K 0x04000000 +#define EFI_FVB_ALIGNMENT_4K 0x08000000 +#define EFI_FVB_ALIGNMENT_8K 0x10000000 +#define EFI_FVB_ALIGNMENT_16K 0x20000000 +#define EFI_FVB_ALIGNMENT_32K 0x40000000 +#define EFI_FVB_ALIGNMENT_64K 0x80000000 ///@} /// This is a simple macro defined as the set of all FV Block Attributes signifying capabilities. @@ -68,12 +68,12 @@ SPDX-License-Identifier: BSD-2-Clause-Patent * @param Bit A value indicating the bit(s) to test. * If multiple bits are set, the logical OR of their tests is the expression's value. **/ -#define EFI_TEST_FFS_ATTRIBUTES_BIT( FvbAttributes, TestAttributes, Bit) \ +#define EFI_TEST_FFS_ATTRIBUTES_BIT(FvbAttributes, TestAttributes, Bit) \ ((BOOLEAN) \ ((FvbAttributes & EFI_FVB_ERASE_POLARITY) ? (((~TestAttributes) & Bit) == Bit) : ((TestAttributes & Bit) == Bit)) \ ) /// A simple macro defined as the set of all FV Block Attribute bits that indicate status. -#define EFI_FVB_STATUS (EFI_FVB_READ_STATUS | EFI_FVB_WRITE_STATUS | EFI_FVB_LOCK_STATUS) +#define EFI_FVB_STATUS (EFI_FVB_READ_STATUS | EFI_FVB_WRITE_STATUS | EFI_FVB_LOCK_STATUS) -#endif /* __EFI_FIRMWARE_VOLUME_HEADER_H__ */ +#endif /* __EFI_FIRMWARE_VOLUME_HEADER_H__ */ diff --git a/OvmfPkg/Csm/Include/Framework/FirmwareVolumeImageFormat.h b/OvmfPkg/Csm/Include/Framework/FirmwareVolumeImageFormat.h index c77e39b4c0..02fadd1351 100644 --- a/OvmfPkg/Csm/Include/Framework/FirmwareVolumeImageFormat.h +++ b/OvmfPkg/Csm/Include/Framework/FirmwareVolumeImageFormat.h @@ -17,16 +17,16 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // // Bit values for AuthenticationStatus // -#define EFI_AGGREGATE_AUTH_STATUS_PLATFORM_OVERRIDE 0x000001 -#define EFI_AGGREGATE_AUTH_STATUS_IMAGE_SIGNED 0x000002 -#define EFI_AGGREGATE_AUTH_STATUS_NOT_TESTED 0x000004 -#define EFI_AGGREGATE_AUTH_STATUS_TEST_FAILED 0x000008 -#define EFI_AGGREGATE_AUTH_STATUS_ALL 0x00000f +#define EFI_AGGREGATE_AUTH_STATUS_PLATFORM_OVERRIDE 0x000001 +#define EFI_AGGREGATE_AUTH_STATUS_IMAGE_SIGNED 0x000002 +#define EFI_AGGREGATE_AUTH_STATUS_NOT_TESTED 0x000004 +#define EFI_AGGREGATE_AUTH_STATUS_TEST_FAILED 0x000008 +#define EFI_AGGREGATE_AUTH_STATUS_ALL 0x00000f -#define EFI_LOCAL_AUTH_STATUS_PLATFORM_OVERRIDE 0x010000 -#define EFI_LOCAL_AUTH_STATUS_IMAGE_SIGNED 0x020000 -#define EFI_LOCAL_AUTH_STATUS_NOT_TESTED 0x040000 -#define EFI_LOCAL_AUTH_STATUS_TEST_FAILED 0x080000 -#define EFI_LOCAL_AUTH_STATUS_ALL 0x0f0000 +#define EFI_LOCAL_AUTH_STATUS_PLATFORM_OVERRIDE 0x010000 +#define EFI_LOCAL_AUTH_STATUS_IMAGE_SIGNED 0x020000 +#define EFI_LOCAL_AUTH_STATUS_NOT_TESTED 0x040000 +#define EFI_LOCAL_AUTH_STATUS_TEST_FAILED 0x080000 +#define EFI_LOCAL_AUTH_STATUS_ALL 0x0f0000 #endif diff --git a/OvmfPkg/Csm/Include/Framework/FrameworkInternalFormRepresentation.h b/OvmfPkg/Csm/Include/Framework/FrameworkInternalFormRepresentation.h index f10fc52312..2dcf6380e3 100644 --- a/OvmfPkg/Csm/Include/Framework/FrameworkInternalFormRepresentation.h +++ b/OvmfPkg/Csm/Include/Framework/FrameworkInternalFormRepresentation.h @@ -14,72 +14,72 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #ifndef __FRAMEWORK_INTERNAL_FORMREPRESENTATION_H__ #define __FRAMEWORK_INTERNAL_FORMREPRESENTATION_H__ -typedef UINT16 STRING_REF; +typedef UINT16 STRING_REF; // // IFR Op codes // -#define FRAMEWORK_EFI_IFR_FORM_OP 0x01 -#define FRAMEWORK_EFI_IFR_SUBTITLE_OP 0x02 -#define FRAMEWORK_EFI_IFR_TEXT_OP 0x03 -#define EFI_IFR_GRAPHIC_OP 0x04 -#define FRAMEWORK_EFI_IFR_ONE_OF_OP 0x05 -#define FRAMEWORK_EFI_IFR_CHECKBOX_OP 0x06 -#define FRAMEWORK_EFI_IFR_NUMERIC_OP 0x07 -#define FRAMEWORK_EFI_IFR_PASSWORD_OP 0x08 -#define FRAMEWORK_EFI_IFR_ONE_OF_OPTION_OP 0x09 ///< ONEOF OPTION field. -#define FRAMEWORK_EFI_IFR_SUPPRESS_IF_OP 0x0A -#define EFI_IFR_END_FORM_OP 0x0B -#define EFI_IFR_HIDDEN_OP 0x0C -#define EFI_IFR_END_FORM_SET_OP 0x0D -#define FRAMEWORK_EFI_IFR_FORM_SET_OP 0x0E -#define FRAMEWORK_EFI_IFR_REF_OP 0x0F -#define EFI_IFR_END_ONE_OF_OP 0x10 -#define FRAMEWORK_EFI_IFR_END_OP EFI_IFR_END_ONE_OF_OP -#define FRAMEWORK_EFI_IFR_INCONSISTENT_IF_OP 0x11 -#define FRAMEWORK_EFI_IFR_EQ_ID_VAL_OP 0x12 -#define FRAMEWORK_EFI_IFR_EQ_ID_ID_OP 0x13 -#define FRAMEWORK_EFI_IFR_EQ_ID_LIST_OP 0x14 -#define FRAMEWORK_EFI_IFR_AND_OP 0x15 -#define FRAMEWORK_EFI_IFR_OR_OP 0x16 -#define FRAMEWORK_EFI_IFR_NOT_OP 0x17 -#define EFI_IFR_END_IF_OP 0x18 ///< For endif of inconsistentif, suppressif, grayoutif. -#define EFI_IFR_GRAYOUT_IF_OP 0x19 -#define FRAMEWORK_EFI_IFR_DATE_OP 0x1A -#define FRAMEWORK_EFI_IFR_TIME_OP 0x1B -#define FRAMEWORK_EFI_IFR_STRING_OP 0x1C -#define EFI_IFR_LABEL_OP 0x1D -#define EFI_IFR_SAVE_DEFAULTS_OP 0x1E -#define EFI_IFR_RESTORE_DEFAULTS_OP 0x1F -#define EFI_IFR_BANNER_OP 0x20 -#define EFI_IFR_INVENTORY_OP 0x21 -#define EFI_IFR_EQ_VAR_VAL_OP 0x22 -#define FRAMEWORK_EFI_IFR_ORDERED_LIST_OP 0x23 -#define FRAMEWORK_EFI_IFR_VARSTORE_OP 0x24 -#define EFI_IFR_VARSTORE_SELECT_OP 0x25 -#define EFI_IFR_VARSTORE_SELECT_PAIR_OP 0x26 -#define EFI_IFR_LAST_OPCODE EFI_IFR_VARSTORE_SELECT_PAIR_OP -#define EFI_IFR_OEM_OP 0xFE -#define EFI_IFR_NV_ACCESS_COMMAND 0xFF +#define FRAMEWORK_EFI_IFR_FORM_OP 0x01 +#define FRAMEWORK_EFI_IFR_SUBTITLE_OP 0x02 +#define FRAMEWORK_EFI_IFR_TEXT_OP 0x03 +#define EFI_IFR_GRAPHIC_OP 0x04 +#define FRAMEWORK_EFI_IFR_ONE_OF_OP 0x05 +#define FRAMEWORK_EFI_IFR_CHECKBOX_OP 0x06 +#define FRAMEWORK_EFI_IFR_NUMERIC_OP 0x07 +#define FRAMEWORK_EFI_IFR_PASSWORD_OP 0x08 +#define FRAMEWORK_EFI_IFR_ONE_OF_OPTION_OP 0x09 ///< ONEOF OPTION field. +#define FRAMEWORK_EFI_IFR_SUPPRESS_IF_OP 0x0A +#define EFI_IFR_END_FORM_OP 0x0B +#define EFI_IFR_HIDDEN_OP 0x0C +#define EFI_IFR_END_FORM_SET_OP 0x0D +#define FRAMEWORK_EFI_IFR_FORM_SET_OP 0x0E +#define FRAMEWORK_EFI_IFR_REF_OP 0x0F +#define EFI_IFR_END_ONE_OF_OP 0x10 +#define FRAMEWORK_EFI_IFR_END_OP EFI_IFR_END_ONE_OF_OP +#define FRAMEWORK_EFI_IFR_INCONSISTENT_IF_OP 0x11 +#define FRAMEWORK_EFI_IFR_EQ_ID_VAL_OP 0x12 +#define FRAMEWORK_EFI_IFR_EQ_ID_ID_OP 0x13 +#define FRAMEWORK_EFI_IFR_EQ_ID_LIST_OP 0x14 +#define FRAMEWORK_EFI_IFR_AND_OP 0x15 +#define FRAMEWORK_EFI_IFR_OR_OP 0x16 +#define FRAMEWORK_EFI_IFR_NOT_OP 0x17 +#define EFI_IFR_END_IF_OP 0x18 ///< For endif of inconsistentif, suppressif, grayoutif. +#define EFI_IFR_GRAYOUT_IF_OP 0x19 +#define FRAMEWORK_EFI_IFR_DATE_OP 0x1A +#define FRAMEWORK_EFI_IFR_TIME_OP 0x1B +#define FRAMEWORK_EFI_IFR_STRING_OP 0x1C +#define EFI_IFR_LABEL_OP 0x1D +#define EFI_IFR_SAVE_DEFAULTS_OP 0x1E +#define EFI_IFR_RESTORE_DEFAULTS_OP 0x1F +#define EFI_IFR_BANNER_OP 0x20 +#define EFI_IFR_INVENTORY_OP 0x21 +#define EFI_IFR_EQ_VAR_VAL_OP 0x22 +#define FRAMEWORK_EFI_IFR_ORDERED_LIST_OP 0x23 +#define FRAMEWORK_EFI_IFR_VARSTORE_OP 0x24 +#define EFI_IFR_VARSTORE_SELECT_OP 0x25 +#define EFI_IFR_VARSTORE_SELECT_PAIR_OP 0x26 +#define EFI_IFR_LAST_OPCODE EFI_IFR_VARSTORE_SELECT_PAIR_OP +#define EFI_IFR_OEM_OP 0xFE +#define EFI_IFR_NV_ACCESS_COMMAND 0xFF // // Define values for the flags fields in some VFR opcodes. These are // bitmasks. // -#define EFI_IFR_FLAG_DEFAULT 0x01 -#define EFI_IFR_FLAG_MANUFACTURING 0x02 -#define EFI_IFR_FLAG_INTERACTIVE 0x04 -#define EFI_IFR_FLAG_NV_ACCESS 0x08 -#define EFI_IFR_FLAG_RESET_REQUIRED 0x10 -#define EFI_IFR_FLAG_LATE_CHECK 0x20 - -#define EFI_NON_DEVICE_CLASS 0x00 ///< Useful when you do not want something in the Device Manager. -#define EFI_DISK_DEVICE_CLASS 0x01 -#define EFI_VIDEO_DEVICE_CLASS 0x02 -#define EFI_NETWORK_DEVICE_CLASS 0x04 -#define EFI_INPUT_DEVICE_CLASS 0x08 -#define EFI_ON_BOARD_DEVICE_CLASS 0x10 -#define EFI_OTHER_DEVICE_CLASS 0x20 +#define EFI_IFR_FLAG_DEFAULT 0x01 +#define EFI_IFR_FLAG_MANUFACTURING 0x02 +#define EFI_IFR_FLAG_INTERACTIVE 0x04 +#define EFI_IFR_FLAG_NV_ACCESS 0x08 +#define EFI_IFR_FLAG_RESET_REQUIRED 0x10 +#define EFI_IFR_FLAG_LATE_CHECK 0x20 + +#define EFI_NON_DEVICE_CLASS 0x00 ///< Useful when you do not want something in the Device Manager. +#define EFI_DISK_DEVICE_CLASS 0x01 +#define EFI_VIDEO_DEVICE_CLASS 0x02 +#define EFI_NETWORK_DEVICE_CLASS 0x04 +#define EFI_INPUT_DEVICE_CLASS 0x08 +#define EFI_ON_BOARD_DEVICE_CLASS 0x10 +#define EFI_OTHER_DEVICE_CLASS 0x20 #define EFI_SETUP_APPLICATION_SUBCLASS 0x00 #define EFI_GENERAL_APPLICATION_SUBCLASS 0x01 @@ -96,70 +96,69 @@ typedef UINT16 STRING_REF; /// #define EFI_IFR_FLAG_CREATED 128 - #pragma pack(1) // // IFR Structure definitions // typedef struct { - UINT8 OpCode; - UINT8 Length; + UINT8 OpCode; + UINT8 Length; } FRAMEWORK_EFI_IFR_OP_HEADER; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - EFI_GUID Guid; - STRING_REF FormSetTitle; - STRING_REF Help; - EFI_PHYSICAL_ADDRESS CallbackHandle; - UINT16 Class; - UINT16 SubClass; - UINT16 NvDataSize; ///< Set once; the size of the NV data as defined in the script. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + EFI_GUID Guid; + STRING_REF FormSetTitle; + STRING_REF Help; + EFI_PHYSICAL_ADDRESS CallbackHandle; + UINT16 Class; + UINT16 SubClass; + UINT16 NvDataSize; ///< Set once; the size of the NV data as defined in the script. } FRAMEWORK_EFI_IFR_FORM_SET; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 FormId; - STRING_REF FormTitle; + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 FormId; + STRING_REF FormTitle; } FRAMEWORK_EFI_IFR_FORM; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 LabelId; + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 LabelId; } EFI_IFR_LABEL; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - STRING_REF SubTitle; + FRAMEWORK_EFI_IFR_OP_HEADER Header; + STRING_REF SubTitle; } FRAMEWORK_EFI_IFR_SUBTITLE; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - STRING_REF Help; - STRING_REF Text; - STRING_REF TextTwo; - UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support. - UINT16 Key; ///< The value to be passed to the caller to identify this particular op-code. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + STRING_REF Help; + STRING_REF Text; + STRING_REF TextTwo; + UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support. + UINT16 Key; ///< The value to be passed to the caller to identify this particular op-code. } FRAMEWORK_EFI_IFR_TEXT; // // goto // typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 FormId; - STRING_REF Prompt; - STRING_REF Help; ///< The string Token for the context-help. - UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support. - UINT16 Key; ///< The value to be passed to the caller to identify this particular op-code. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 FormId; + STRING_REF Prompt; + STRING_REF Help; ///< The string Token for the context-help. + UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support. + UINT16 Key; ///< The value to be passed to the caller to identify this particular op-code. } FRAMEWORK_EFI_IFR_REF; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; + FRAMEWORK_EFI_IFR_OP_HEADER Header; } EFI_IFR_END_FORM; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; + FRAMEWORK_EFI_IFR_OP_HEADER Header; } EFI_IFR_END_FORM_SET; // @@ -167,51 +166,51 @@ typedef struct { // code assumes this to be true, if this ever changes we need to revisit the InitializeTagStructures code // typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 QuestionId; ///< The ID designating what the question is about... - UINT8 Width; ///< The Size of the Data being saved. - STRING_REF Prompt; ///< The String Token for the Prompt. - STRING_REF Help; ///< The string Token for the context-help. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 QuestionId; ///< The ID designating what the question is about... + UINT8 Width; ///< The Size of the Data being saved. + STRING_REF Prompt; ///< The String Token for the Prompt. + STRING_REF Help; ///< The string Token for the context-help. } FRAMEWORK_EFI_IFR_ONE_OF; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 QuestionId; ///< The offset in NV for storage of the data. - UINT8 MaxEntries; ///< The maximum number of options in the ordered list (=size of NVStore). - STRING_REF Prompt; ///< The string token for the prompt. - STRING_REF Help; ///< The string token for the context-help. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 QuestionId; ///< The offset in NV for storage of the data. + UINT8 MaxEntries; ///< The maximum number of options in the ordered list (=size of NVStore). + STRING_REF Prompt; ///< The string token for the prompt. + STRING_REF Help; ///< The string token for the context-help. } FRAMEWORK_EFI_IFR_ORDERED_LIST; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 QuestionId; ///< The ID designating what the question is about... - UINT8 Width; ///< The Size of the Data being saved. - STRING_REF Prompt; ///< The String Token for the Prompt. - STRING_REF Help; ///< The string Token for the context-help. - UINT8 Flags; ///< If non-zero, it means that it is the default option. - UINT16 Key; ///< Value to be passed to caller to identify this particular op-code. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 QuestionId; ///< The ID designating what the question is about... + UINT8 Width; ///< The Size of the Data being saved. + STRING_REF Prompt; ///< The String Token for the Prompt. + STRING_REF Help; ///< The string Token for the context-help. + UINT8 Flags; ///< If non-zero, it means that it is the default option. + UINT16 Key; ///< Value to be passed to caller to identify this particular op-code. } FRAMEWORK_EFI_IFR_CHECKBOX, EFI_IFR_CHECK_BOX; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - STRING_REF Option; ///< The string token describing the option. - UINT16 Value; ///< The value associated with this option that is stored in the NVRAM. - UINT8 Flags; ///< If non-zero, it means that it is the default option. - UINT16 Key; ///< Value to be passed to caller to identify this particular op-code. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + STRING_REF Option; ///< The string token describing the option. + UINT16 Value; ///< The value associated with this option that is stored in the NVRAM. + UINT8 Flags; ///< If non-zero, it means that it is the default option. + UINT16 Key; ///< Value to be passed to caller to identify this particular op-code. } FRAMEWORK_EFI_IFR_ONE_OF_OPTION; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 QuestionId; ///< The ID designating what the question is about... - UINT8 Width; ///< The Size of the Data being saved. - STRING_REF Prompt; ///< The String Token for the Prompt. - STRING_REF Help; ///< The string Token for the context-help. - UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support. - UINT16 Key; ///< The value to be passed to caller to identify this particular op-code. - UINT16 Minimum; - UINT16 Maximum; - UINT16 Step; ///< Zero means manual input. Otherwise, arrow selection is called for. - UINT16 Default; + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 QuestionId; ///< The ID designating what the question is about... + UINT8 Width; ///< The Size of the Data being saved. + STRING_REF Prompt; ///< The String Token for the Prompt. + STRING_REF Help; ///< The string Token for the context-help. + UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support. + UINT16 Key; ///< The value to be passed to caller to identify this particular op-code. + UINT16 Minimum; + UINT16 Maximum; + UINT16 Step; ///< Zero means manual input. Otherwise, arrow selection is called for. + UINT16 Default; } FRAMEWORK_EFI_IFR_NUMERIC; // @@ -223,50 +222,50 @@ typedef struct { // gRT->GetXXXX series of calls. // typedef struct { - FRAMEWORK_EFI_IFR_NUMERIC Hour; - FRAMEWORK_EFI_IFR_NUMERIC Minute; - FRAMEWORK_EFI_IFR_NUMERIC Second; + FRAMEWORK_EFI_IFR_NUMERIC Hour; + FRAMEWORK_EFI_IFR_NUMERIC Minute; + FRAMEWORK_EFI_IFR_NUMERIC Second; } FRAMEWORK_EFI_IFR_TIME; typedef struct { - FRAMEWORK_EFI_IFR_NUMERIC Year; - FRAMEWORK_EFI_IFR_NUMERIC Month; - FRAMEWORK_EFI_IFR_NUMERIC Day; + FRAMEWORK_EFI_IFR_NUMERIC Year; + FRAMEWORK_EFI_IFR_NUMERIC Month; + FRAMEWORK_EFI_IFR_NUMERIC Day; } FRAMEWORK_EFI_IFR_DATE; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 QuestionId;///< The ID designating what the question is about... - UINT8 Width; ///< The Size of the Data being saved. - STRING_REF Prompt; ///< The String Token for the Prompt. - STRING_REF Help; ///< The string Token for the context-help. - UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support. - UINT16 Key; ///< The value to be passed to caller to identify this particular op-code. - UINT8 MinSize; ///< Minimum allowable sized password. - UINT8 MaxSize; ///< Maximum allowable sized password. - UINT16 Encoding; + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 QuestionId; ///< The ID designating what the question is about... + UINT8 Width; ///< The Size of the Data being saved. + STRING_REF Prompt; ///< The String Token for the Prompt. + STRING_REF Help; ///< The string Token for the context-help. + UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support. + UINT16 Key; ///< The value to be passed to caller to identify this particular op-code. + UINT8 MinSize; ///< Minimum allowable sized password. + UINT8 MaxSize; ///< Maximum allowable sized password. + UINT16 Encoding; } FRAMEWORK_EFI_IFR_PASSWORD; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 QuestionId; ///< The ID designating what the question is about... - UINT8 Width; ///< The Size of the Data being saved. - STRING_REF Prompt; ///< The String Token for the Prompt. - STRING_REF Help; ///< The string Token for the context-help. - UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support. - UINT16 Key; ///< The value to be passed to caller to identify this particular op-code. - UINT8 MinSize; ///< Minimum allowable sized password. - UINT8 MaxSize; ///< Maximum allowable sized password. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 QuestionId; ///< The ID designating what the question is about... + UINT8 Width; ///< The Size of the Data being saved. + STRING_REF Prompt; ///< The String Token for the Prompt. + STRING_REF Help; ///< The string Token for the context-help. + UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support. + UINT16 Key; ///< The value to be passed to caller to identify this particular op-code. + UINT8 MinSize; ///< Minimum allowable sized password. + UINT8 MaxSize; ///< Maximum allowable sized password. } FRAMEWORK_EFI_IFR_STRING; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; + FRAMEWORK_EFI_IFR_OP_HEADER Header; } EFI_IFR_END_ONE_OF; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 Value; - UINT16 Key; + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 Value; + UINT16 Key; } EFI_IFR_HIDDEN; /// @@ -275,92 +274,92 @@ typedef struct { /// keep the inconsistant is for implementation needed. ///@{ typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT8 Flags; + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT8 Flags; } EFI_IFR_SUPPRESS; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT8 Flags; + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT8 Flags; } EFI_IFR_GRAY_OUT; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - STRING_REF Popup; - UINT8 Flags; + FRAMEWORK_EFI_IFR_OP_HEADER Header; + STRING_REF Popup; + UINT8 Flags; } EFI_IFR_INCONSISTENT; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 QuestionId; ///< The offset into variable storage. - UINT8 Width; ///< The size of variable storage. - UINT16 Value; ///< The value to compare against. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 QuestionId; ///< The offset into variable storage. + UINT8 Width; ///< The size of variable storage. + UINT16 Value; ///< The value to compare against. } FRAMEWORK_EFI_IFR_EQ_ID_VAL; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 QuestionId; ///< The offset into variable storage. - UINT8 Width; ///< The size of variable storage. - UINT16 ListLength; - UINT16 ValueList[1]; + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 QuestionId; ///< The offset into variable storage. + UINT8 Width; ///< The size of variable storage. + UINT16 ListLength; + UINT16 ValueList[1]; } FRAMEWORK_EFI_IFR_EQ_ID_LIST; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 QuestionId1; ///< The offset into variable storage for first value to compare. - UINT8 Width; ///< The size of variable storage (must be same for both). - UINT16 QuestionId2; ///< The offset into variable storage for second value to compare. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 QuestionId1; ///< The offset into variable storage for first value to compare. + UINT8 Width; ///< The size of variable storage (must be same for both). + UINT16 QuestionId2; ///< The offset into variable storage for second value to compare. } FRAMEWORK_EFI_IFR_EQ_ID_ID; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 VariableId; ///< The offset into variable storage. - UINT16 Value; ///< The value to compare against. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 VariableId; ///< The offset into variable storage. + UINT16 Value; ///< The value to compare against. } EFI_IFR_EQ_VAR_VAL; ///@} typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; + FRAMEWORK_EFI_IFR_OP_HEADER Header; } FRAMEWORK_EFI_IFR_AND; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; + FRAMEWORK_EFI_IFR_OP_HEADER Header; } FRAMEWORK_EFI_IFR_OR; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; + FRAMEWORK_EFI_IFR_OP_HEADER Header; } FRAMEWORK_EFI_IFR_NOT; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; + FRAMEWORK_EFI_IFR_OP_HEADER Header; } EFI_IFR_END_EXPR, EFI_IFR_END_IF; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 FormId; - STRING_REF Prompt; - STRING_REF Help; - UINT8 Flags; - UINT16 Key; + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 FormId; + STRING_REF Prompt; + STRING_REF Help; + UINT8 Flags; + UINT16 Key; } EFI_IFR_SAVE_DEFAULTS; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - STRING_REF Help; - STRING_REF Text; - STRING_REF TextTwo; ///< Optional text. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + STRING_REF Help; + STRING_REF Text; + STRING_REF TextTwo; ///< Optional text. } EFI_IFR_INVENTORY; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - EFI_GUID Guid; ///< GUID for the variable. - UINT16 VarId; ///< The variable store ID, as referenced elsewhere in the form. - UINT16 Size; ///< The size of the variable storage. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + EFI_GUID Guid; ///< GUID for the variable. + UINT16 VarId; ///< The variable store ID, as referenced elsewhere in the form. + UINT16 Size; ///< The size of the variable storage. } FRAMEWORK_EFI_IFR_VARSTORE; typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 VarId; ///< The variable store ID, as referenced elsewhere in the form. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 VarId; ///< The variable store ID, as referenced elsewhere in the form. } EFI_IFR_VARSTORE_SELECT; /// @@ -370,9 +369,9 @@ typedef struct { /// IFR opcodes use the VarId as defined here. /// typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - UINT16 VarId; ///< The variable store ID, as referenced elsewhere in the form. - UINT16 SecondaryVarId; ///< The variable store ID, as referenced elsewhere in the form. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + UINT16 VarId; ///< The variable store ID, as referenced elsewhere in the form. + UINT16 SecondaryVarId; ///< The variable store ID, as referenced elsewhere in the form. } EFI_IFR_VARSTORE_SELECT_PAIR; /// @@ -381,16 +380,16 @@ typedef struct { #define EFI_IFR_RESTORE_DEFAULTS EFI_IFR_SAVE_DEFAULTS typedef struct { - FRAMEWORK_EFI_IFR_OP_HEADER Header; - STRING_REF Title; ///< The string token for the banner title. - UINT16 LineNumber; ///< 1-based line number. - UINT8 Alignment; ///< Left, center, or right-aligned. + FRAMEWORK_EFI_IFR_OP_HEADER Header; + STRING_REF Title; ///< The string token for the banner title. + UINT16 LineNumber; ///< 1-based line number. + UINT8 Alignment; ///< Left, center, or right-aligned. } EFI_IFR_BANNER; -#define EFI_IFR_BANNER_ALIGN_LEFT 0 -#define EFI_IFR_BANNER_ALIGN_CENTER 1 -#define EFI_IFR_BANNER_ALIGN_RIGHT 2 -#define EFI_IFR_BANNER_TIMEOUT 0xFF +#define EFI_IFR_BANNER_ALIGN_LEFT 0 +#define EFI_IFR_BANNER_ALIGN_CENTER 1 +#define EFI_IFR_BANNER_ALIGN_RIGHT 2 +#define EFI_IFR_BANNER_TIMEOUT 0xFF #pragma pack() diff --git a/OvmfPkg/Csm/Include/Framework/Hob.h b/OvmfPkg/Csm/Include/Framework/Hob.h index f6a71fabe4..592a179bc2 100644 --- a/OvmfPkg/Csm/Include/Framework/Hob.h +++ b/OvmfPkg/Csm/Include/Framework/Hob.h @@ -17,12 +17,12 @@ SPDX-License-Identifier: BSD-2-Clause-Patent /// This macro is defined to comply with the hob Framework Spec. And the marco was /// retired in the PI1.0 specification. /// -#define EFI_HOB_TYPE_CV 0x0008 +#define EFI_HOB_TYPE_CV 0x0008 typedef struct { - EFI_HOB_GENERIC_HEADER Header; - EFI_PHYSICAL_ADDRESS BaseAddress; - UINT64 Length; + EFI_HOB_GENERIC_HEADER Header; + EFI_PHYSICAL_ADDRESS BaseAddress; + UINT64 Length; } EFI_HOB_CAPSULE_VOLUME; #endif diff --git a/OvmfPkg/Csm/Include/Framework/StatusCode.h b/OvmfPkg/Csm/Include/Framework/StatusCode.h index 753029c13c..5678127a24 100644 --- a/OvmfPkg/Csm/Include/Framework/StatusCode.h +++ b/OvmfPkg/Csm/Include/Framework/StatusCode.h @@ -26,8 +26,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent /// The Framework Specification, StatusCodes 0.92, does not define the macros. /// ///@{ -#define EFI_SW_DXE_BS_PC_BEGIN_CONNECTING_DRIVERS (EFI_SUBCLASS_SPECIFIC | 0x00000005) -#define EFI_SW_DXE_BS_PC_VERIFYING_PASSWORD (EFI_SUBCLASS_SPECIFIC | 0x00000006) +#define EFI_SW_DXE_BS_PC_BEGIN_CONNECTING_DRIVERS (EFI_SUBCLASS_SPECIFIC | 0x00000005) +#define EFI_SW_DXE_BS_PC_VERIFYING_PASSWORD (EFI_SUBCLASS_SPECIFIC | 0x00000006) ///@} /// @@ -37,12 +37,12 @@ SPDX-License-Identifier: BSD-2-Clause-Patent /// The Framework Specification, StatusCodes 0.92, does not define the macros. /// ///@{ -#define EFI_SW_DXE_RT_PC_S0 (EFI_SUBCLASS_SPECIFIC | 0x00000000) -#define EFI_SW_DXE_RT_PC_S1 (EFI_SUBCLASS_SPECIFIC | 0x00000001) -#define EFI_SW_DXE_RT_PC_S2 (EFI_SUBCLASS_SPECIFIC | 0x00000002) -#define EFI_SW_DXE_RT_PC_S3 (EFI_SUBCLASS_SPECIFIC | 0x00000003) -#define EFI_SW_DXE_RT_PC_S4 (EFI_SUBCLASS_SPECIFIC | 0x00000004) -#define EFI_SW_DXE_RT_PC_S5 (EFI_SUBCLASS_SPECIFIC | 0x00000005) +#define EFI_SW_DXE_RT_PC_S0 (EFI_SUBCLASS_SPECIFIC | 0x00000000) +#define EFI_SW_DXE_RT_PC_S1 (EFI_SUBCLASS_SPECIFIC | 0x00000001) +#define EFI_SW_DXE_RT_PC_S2 (EFI_SUBCLASS_SPECIFIC | 0x00000002) +#define EFI_SW_DXE_RT_PC_S3 (EFI_SUBCLASS_SPECIFIC | 0x00000003) +#define EFI_SW_DXE_RT_PC_S4 (EFI_SUBCLASS_SPECIFIC | 0x00000004) +#define EFI_SW_DXE_RT_PC_S5 (EFI_SUBCLASS_SPECIFIC | 0x00000005) ///@} /// @@ -51,7 +51,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent /// Inconsistent with specification here: /// The Framework Specification, StatusCodes 0.92, does not define the macros. /// -#define EFI_SOFTWARE_X64_EXCEPTION (EFI_SOFTWARE | 0x00130000) +#define EFI_SOFTWARE_X64_EXCEPTION (EFI_SOFTWARE | 0x00130000) /// /// Software Class X64 Exception Subclass Error Code definitions. @@ -62,31 +62,31 @@ SPDX-License-Identifier: BSD-2-Clause-Patent /// The Framework Specification, StatusCodes 0.92, does not define the macros. /// ///@{ -#define EFI_SW_EC_X64_DIVIDE_ERROR EXCEPT_X64_DIVIDE_ERROR -#define EFI_SW_EC_X64_DEBUG EXCEPT_X64_DEBUG -#define EFI_SW_EC_X64_NMI EXCEPT_X64_NMI -#define EFI_SW_EC_X64_BREAKPOINT EXCEPT_X64_BREAKPOINT -#define EFI_SW_EC_X64_OVERFLOW EXCEPT_X64_OVERFLOW -#define EFI_SW_EC_X64_BOUND EXCEPT_X64_BOUND -#define EFI_SW_EC_X64_INVALID_OPCODE EXCEPT_X64_INVALID_OPCODE -#define EFI_SW_EC_X64_DOUBLE_FAULT EXCEPT_X64_DOUBLE_FAULT -#define EFI_SW_EC_X64_INVALID_TSS EXCEPT_X64_INVALID_TSS -#define EFI_SW_EC_X64_SEG_NOT_PRESENT EXCEPT_X64_SEG_NOT_PRESENT -#define EFI_SW_EC_X64_STACK_FAULT EXCEPT_X64_STACK_FAULT -#define EFI_SW_EC_X64_GP_FAULT EXCEPT_X64_GP_FAULT -#define EFI_SW_EC_X64_PAGE_FAULT EXCEPT_X64_PAGE_FAULT -#define EFI_SW_EC_X64_FP_ERROR EXCEPT_X64_FP_ERROR -#define EFI_SW_EC_X64_ALIGNMENT_CHECK EXCEPT_X64_ALIGNMENT_CHECK -#define EFI_SW_EC_X64_MACHINE_CHECK EXCEPT_X64_MACHINE_CHECK -#define EFI_SW_EC_X64_SIMD EXCEPT_X64_SIMD +#define EFI_SW_EC_X64_DIVIDE_ERROR EXCEPT_X64_DIVIDE_ERROR +#define EFI_SW_EC_X64_DEBUG EXCEPT_X64_DEBUG +#define EFI_SW_EC_X64_NMI EXCEPT_X64_NMI +#define EFI_SW_EC_X64_BREAKPOINT EXCEPT_X64_BREAKPOINT +#define EFI_SW_EC_X64_OVERFLOW EXCEPT_X64_OVERFLOW +#define EFI_SW_EC_X64_BOUND EXCEPT_X64_BOUND +#define EFI_SW_EC_X64_INVALID_OPCODE EXCEPT_X64_INVALID_OPCODE +#define EFI_SW_EC_X64_DOUBLE_FAULT EXCEPT_X64_DOUBLE_FAULT +#define EFI_SW_EC_X64_INVALID_TSS EXCEPT_X64_INVALID_TSS +#define EFI_SW_EC_X64_SEG_NOT_PRESENT EXCEPT_X64_SEG_NOT_PRESENT +#define EFI_SW_EC_X64_STACK_FAULT EXCEPT_X64_STACK_FAULT +#define EFI_SW_EC_X64_GP_FAULT EXCEPT_X64_GP_FAULT +#define EFI_SW_EC_X64_PAGE_FAULT EXCEPT_X64_PAGE_FAULT +#define EFI_SW_EC_X64_FP_ERROR EXCEPT_X64_FP_ERROR +#define EFI_SW_EC_X64_ALIGNMENT_CHECK EXCEPT_X64_ALIGNMENT_CHECK +#define EFI_SW_EC_X64_MACHINE_CHECK EXCEPT_X64_MACHINE_CHECK +#define EFI_SW_EC_X64_SIMD EXCEPT_X64_SIMD ///@} /// /// Software Class EFI After Life Subclass Progress Code definitions. /// ///@{ -#define EFI_SW_AL_PC_ENTRY_POINT (EFI_SUBCLASS_SPECIFIC | 0x00000000) -#define EFI_SW_AL_PC_RETURN_TO_LAST (EFI_SUBCLASS_SPECIFIC | 0x00000001) +#define EFI_SW_AL_PC_ENTRY_POINT (EFI_SUBCLASS_SPECIFIC | 0x00000000) +#define EFI_SW_AL_PC_RETURN_TO_LAST (EFI_SUBCLASS_SPECIFIC | 0x00000001) ///@} /// @@ -95,7 +95,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent /// Inconsistent with specification here: /// The Framework Specification, StatusCodes 0.92, does not define the macros. /// -#define EFI_SW_CSM_LEGACY_ROM_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000000) +#define EFI_SW_CSM_LEGACY_ROM_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000000) /// /// IO Bus Class ATA/ATAPI Subclass Progress Code definitions. @@ -130,7 +130,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent /// The Framework Specification, StatusCodes 0.92, does not define the macros. /// ///@{ -#define EFI_CPU_CAUSE_NOT_DISABLED 0x0000 +#define EFI_CPU_CAUSE_NOT_DISABLED 0x0000 ///@} /// diff --git a/OvmfPkg/Csm/Include/Guid/LegacyBios.h b/OvmfPkg/Csm/Include/Guid/LegacyBios.h index e35fbff8d5..b196844d00 100644 --- a/OvmfPkg/Csm/Include/Guid/LegacyBios.h +++ b/OvmfPkg/Csm/Include/Guid/LegacyBios.h @@ -24,6 +24,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent 0x2e3044ac, 0x879f, 0x490f, {0x97, 0x60, 0xbb, 0xdf, 0xaf, 0x69, 0x5f, 0x50 } \ } -extern EFI_GUID gEfiLegacyBiosGuid; +extern EFI_GUID gEfiLegacyBiosGuid; #endif diff --git a/OvmfPkg/Csm/Include/Guid/LegacyDevOrder.h b/OvmfPkg/Csm/Include/Guid/LegacyDevOrder.h index 8ec3de5e38..4446b005cb 100644 --- a/OvmfPkg/Csm/Include/Guid/LegacyDevOrder.h +++ b/OvmfPkg/Csm/Include/Guid/LegacyDevOrder.h @@ -23,17 +23,17 @@ typedef UINT8 BBS_TYPE; #pragma pack(1) typedef struct { - BBS_TYPE BbsType; + BBS_TYPE BbsType; /// /// Length = sizeof (UINT16) + sizeof (Data) /// - UINT16 Length; - UINT16 Data[1]; + UINT16 Length; + UINT16 Data[1]; } LEGACY_DEV_ORDER_ENTRY; #pragma pack() -#define VAR_LEGACY_DEV_ORDER L"LegacyDevOrder" +#define VAR_LEGACY_DEV_ORDER L"LegacyDevOrder" -extern EFI_GUID gEfiLegacyDevOrderVariableGuid; +extern EFI_GUID gEfiLegacyDevOrderVariableGuid; #endif diff --git a/OvmfPkg/Csm/Include/Protocol/FirmwareVolume.h b/OvmfPkg/Csm/Include/Protocol/FirmwareVolume.h index 5e0216c765..bac03c11c4 100644 --- a/OvmfPkg/Csm/Include/Protocol/FirmwareVolume.h +++ b/OvmfPkg/Csm/Include/Protocol/FirmwareVolume.h @@ -19,7 +19,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #ifndef _FIRMWARE_VOLUME_H_ #define _FIRMWARE_VOLUME_H_ - // // Firmware Volume Protocol GUID definition // @@ -28,49 +27,49 @@ SPDX-License-Identifier: BSD-2-Clause-Patent 0x389F751F, 0x1838, 0x4388, {0x83, 0x90, 0xCD, 0x81, 0x54, 0xBD, 0x27, 0xF8 } \ } -#define FV_DEVICE_SIGNATURE SIGNATURE_32 ('_', 'F', 'V', '_') +#define FV_DEVICE_SIGNATURE SIGNATURE_32 ('_', 'F', 'V', '_') -typedef struct _EFI_FIRMWARE_VOLUME_PROTOCOL EFI_FIRMWARE_VOLUME_PROTOCOL; +typedef struct _EFI_FIRMWARE_VOLUME_PROTOCOL EFI_FIRMWARE_VOLUME_PROTOCOL; // // FRAMEWORK_EFI_FV_ATTRIBUTES bit definitions // -typedef UINT64 FRAMEWORK_EFI_FV_ATTRIBUTES; +typedef UINT64 FRAMEWORK_EFI_FV_ATTRIBUTES; // // ************************************************************ // FRAMEWORK_EFI_FV_ATTRIBUTES bit definitions // ************************************************************ // -#define EFI_FV_READ_DISABLE_CAP 0x0000000000000001ULL -#define EFI_FV_READ_ENABLE_CAP 0x0000000000000002ULL -#define EFI_FV_READ_STATUS 0x0000000000000004ULL +#define EFI_FV_READ_DISABLE_CAP 0x0000000000000001ULL +#define EFI_FV_READ_ENABLE_CAP 0x0000000000000002ULL +#define EFI_FV_READ_STATUS 0x0000000000000004ULL -#define EFI_FV_WRITE_DISABLE_CAP 0x0000000000000008ULL -#define EFI_FV_WRITE_ENABLE_CAP 0x0000000000000010ULL -#define EFI_FV_WRITE_STATUS 0x0000000000000020ULL +#define EFI_FV_WRITE_DISABLE_CAP 0x0000000000000008ULL +#define EFI_FV_WRITE_ENABLE_CAP 0x0000000000000010ULL +#define EFI_FV_WRITE_STATUS 0x0000000000000020ULL #define EFI_FV_LOCK_CAP 0x0000000000000040ULL #define EFI_FV_LOCK_STATUS 0x0000000000000080ULL #define EFI_FV_WRITE_POLICY_RELIABLE 0x0000000000000100ULL -#define EFI_FV_ALIGNMENT_CAP 0x0000000000008000ULL -#define EFI_FV_ALIGNMENT_2 0x0000000000010000ULL -#define EFI_FV_ALIGNMENT_4 0x0000000000020000ULL -#define EFI_FV_ALIGNMENT_8 0x0000000000040000ULL -#define EFI_FV_ALIGNMENT_16 0x0000000000080000ULL -#define EFI_FV_ALIGNMENT_32 0x0000000000100000ULL -#define EFI_FV_ALIGNMENT_64 0x0000000000200000ULL -#define EFI_FV_ALIGNMENT_128 0x0000000000400000ULL -#define EFI_FV_ALIGNMENT_256 0x0000000000800000ULL -#define EFI_FV_ALIGNMENT_512 0x0000000001000000ULL -#define EFI_FV_ALIGNMENT_1K 0x0000000002000000ULL -#define EFI_FV_ALIGNMENT_2K 0x0000000004000000ULL -#define EFI_FV_ALIGNMENT_4K 0x0000000008000000ULL -#define EFI_FV_ALIGNMENT_8K 0x0000000010000000ULL -#define EFI_FV_ALIGNMENT_16K 0x0000000020000000ULL -#define EFI_FV_ALIGNMENT_32K 0x0000000040000000ULL -#define EFI_FV_ALIGNMENT_64K 0x0000000080000000ULL +#define EFI_FV_ALIGNMENT_CAP 0x0000000000008000ULL +#define EFI_FV_ALIGNMENT_2 0x0000000000010000ULL +#define EFI_FV_ALIGNMENT_4 0x0000000000020000ULL +#define EFI_FV_ALIGNMENT_8 0x0000000000040000ULL +#define EFI_FV_ALIGNMENT_16 0x0000000000080000ULL +#define EFI_FV_ALIGNMENT_32 0x0000000000100000ULL +#define EFI_FV_ALIGNMENT_64 0x0000000000200000ULL +#define EFI_FV_ALIGNMENT_128 0x0000000000400000ULL +#define EFI_FV_ALIGNMENT_256 0x0000000000800000ULL +#define EFI_FV_ALIGNMENT_512 0x0000000001000000ULL +#define EFI_FV_ALIGNMENT_1K 0x0000000002000000ULL +#define EFI_FV_ALIGNMENT_2K 0x0000000004000000ULL +#define EFI_FV_ALIGNMENT_4K 0x0000000008000000ULL +#define EFI_FV_ALIGNMENT_8K 0x0000000010000000ULL +#define EFI_FV_ALIGNMENT_16K 0x0000000020000000ULL +#define EFI_FV_ALIGNMENT_32K 0x0000000040000000ULL +#define EFI_FV_ALIGNMENT_64K 0x0000000080000000ULL // // Protocol API definitions @@ -210,17 +209,17 @@ EFI_STATUS OUT UINT32 *AuthenticationStatus ); -typedef UINT32 FRAMEWORK_EFI_FV_WRITE_POLICY; +typedef UINT32 FRAMEWORK_EFI_FV_WRITE_POLICY; -#define FRAMEWORK_EFI_FV_UNRELIABLE_WRITE 0x00000000 -#define FRAMEWORK_EFI_FV_RELIABLE_WRITE 0x00000001 +#define FRAMEWORK_EFI_FV_UNRELIABLE_WRITE 0x00000000 +#define FRAMEWORK_EFI_FV_RELIABLE_WRITE 0x00000001 typedef struct { - EFI_GUID *NameGuid; - EFI_FV_FILETYPE Type; - EFI_FV_FILE_ATTRIBUTES FileAttributes; - VOID *Buffer; - UINT32 BufferSize; + EFI_GUID *NameGuid; + EFI_FV_FILETYPE Type; + EFI_FV_FILE_ATTRIBUTES FileAttributes; + VOID *Buffer; + UINT32 BufferSize; } FRAMEWORK_EFI_FV_WRITE_FILE_DATA; /** @@ -296,45 +295,45 @@ struct _EFI_FIRMWARE_VOLUME_PROTOCOL { /// /// Retrieves volume capabilities and current settings. /// - FRAMEWORK_EFI_FV_GET_ATTRIBUTES GetVolumeAttributes; + FRAMEWORK_EFI_FV_GET_ATTRIBUTES GetVolumeAttributes; /// /// Modifies the current settings of the firmware volume. /// - FRAMEWORK_EFI_FV_SET_ATTRIBUTES SetVolumeAttributes; + FRAMEWORK_EFI_FV_SET_ATTRIBUTES SetVolumeAttributes; /// /// Reads an entire file from the firmware volume. /// - FRAMEWORK_EFI_FV_READ_FILE ReadFile; + FRAMEWORK_EFI_FV_READ_FILE ReadFile; /// /// Reads a single section from a file into a buffer. /// - FRAMEWORK_EFI_FV_READ_SECTION ReadSection; + FRAMEWORK_EFI_FV_READ_SECTION ReadSection; /// /// Writes an entire file into the firmware volume. /// - FRAMEWORK_EFI_FV_WRITE_FILE WriteFile; + FRAMEWORK_EFI_FV_WRITE_FILE WriteFile; /// /// Provides service to allow searching the firmware volume. /// - FRAMEWORK_EFI_FV_GET_NEXT_FILE GetNextFile; + FRAMEWORK_EFI_FV_GET_NEXT_FILE GetNextFile; /// /// Data field that indicates the size in bytes of the Key input buffer for /// the GetNextFile() API. /// - UINT32 KeySize; + UINT32 KeySize; /// /// Handle of the parent firmware volume. /// - EFI_HANDLE ParentHandle; + EFI_HANDLE ParentHandle; }; -extern EFI_GUID gEfiFirmwareVolumeProtocolGuid; +extern EFI_GUID gEfiFirmwareVolumeProtocolGuid; #endif diff --git a/OvmfPkg/Csm/Include/Protocol/IsaAcpi.h b/OvmfPkg/Csm/Include/Protocol/IsaAcpi.h index 0ff57aa118..afb415a388 100644 --- a/OvmfPkg/Csm/Include/Protocol/IsaAcpi.h +++ b/OvmfPkg/Csm/Include/Protocol/IsaAcpi.h @@ -49,20 +49,20 @@ typedef struct _EFI_ISA_ACPI_PROTOCOL EFI_ISA_ACPI_PROTOCOL; /// /// ISA ACPI Protocol MMIO resource attributes /// -#define EFI_ISA_ACPI_MEMORY_WIDTH_MASK 0x03 ///< Bit mask of supported ISA memory width attributes. -#define EFI_ISA_ACPI_MEMORY_WIDTH_8_BIT 0x00 ///< ISA MMIO region only supports 8-bit access. -#define EFI_ISA_ACPI_MEMORY_WIDTH_16_BIT 0x01 ///< ISA MMIO region only supports 16-bit access. -#define EFI_ISA_ACPI_MEMORY_WIDTH_8_BIT_AND_16_BIT 0x02 ///< ISA MMIO region supports both 8-bit and 16-bit access. -#define EFI_ISA_ACPI_MEMORY_WRITEABLE 0x04 ///< ISA MMIO region supports write transactions. -#define EFI_ISA_ACPI_MEMORY_CACHEABLE 0x08 ///< ISA MMIO region supports being cached. -#define EFI_ISA_ACPI_MEMORY_SHADOWABLE 0x10 ///< ISA MMIO region may be shadowed. -#define EFI_ISA_ACPI_MEMORY_EXPANSION_ROM 0x20 ///< ISA MMIO region is an expansion ROM. +#define EFI_ISA_ACPI_MEMORY_WIDTH_MASK 0x03 ///< Bit mask of supported ISA memory width attributes. +#define EFI_ISA_ACPI_MEMORY_WIDTH_8_BIT 0x00 ///< ISA MMIO region only supports 8-bit access. +#define EFI_ISA_ACPI_MEMORY_WIDTH_16_BIT 0x01 ///< ISA MMIO region only supports 16-bit access. +#define EFI_ISA_ACPI_MEMORY_WIDTH_8_BIT_AND_16_BIT 0x02 ///< ISA MMIO region supports both 8-bit and 16-bit access. +#define EFI_ISA_ACPI_MEMORY_WRITEABLE 0x04 ///< ISA MMIO region supports write transactions. +#define EFI_ISA_ACPI_MEMORY_CACHEABLE 0x08 ///< ISA MMIO region supports being cached. +#define EFI_ISA_ACPI_MEMORY_SHADOWABLE 0x10 ///< ISA MMIO region may be shadowed. +#define EFI_ISA_ACPI_MEMORY_EXPANSION_ROM 0x20 ///< ISA MMIO region is an expansion ROM. /// /// ISA ACPI Protocol I/O resource attributes /// -#define EFI_ISA_ACPI_IO_DECODE_10_BITS 0x01 ///< ISA controllers uses a 10-bit address decoder for I/O cycles. -#define EFI_ISA_ACPI_IO_DECODE_16_BITS 0x02 ///< ISA controllers uses a 16-bit address decoder for I/O cycles. +#define EFI_ISA_ACPI_IO_DECODE_10_BITS 0x01 ///< ISA controllers uses a 10-bit address decoder for I/O cycles. +#define EFI_ISA_ACPI_IO_DECODE_16_BITS 0x02 ///< ISA controllers uses a 16-bit address decoder for I/O cycles. /// /// EFI ISA ACPI resource type @@ -79,26 +79,26 @@ typedef enum { /// EFI ISA ACPI generic resource structure /// typedef struct { - EFI_ISA_ACPI_RESOURCE_TYPE Type; ///< The type of resource (I/O, MMIO, DMA, Interrupt). - UINT32 Attribute; ///< Bit mask of attributes associated with this resource. See EFI_ISA_ACPI_xxx macros for valid combinations. - UINT32 StartRange; ///< The start of the resource range. - UINT32 EndRange; ///< The end of the resource range. + EFI_ISA_ACPI_RESOURCE_TYPE Type; ///< The type of resource (I/O, MMIO, DMA, Interrupt). + UINT32 Attribute; ///< Bit mask of attributes associated with this resource. See EFI_ISA_ACPI_xxx macros for valid combinations. + UINT32 StartRange; ///< The start of the resource range. + UINT32 EndRange; ///< The end of the resource range. } EFI_ISA_ACPI_RESOURCE; /// /// EFI ISA ACPI resource device identifier /// typedef struct { - UINT32 HID; ///< The ACPI Hardware Identifier value associated with an ISA controller. Matchs ACPI DSDT contents. - UINT32 UID; ///< The ACPI Unique Identifier value associated with an ISA controller. Matches ACPI DSDT contents. + UINT32 HID; ///< The ACPI Hardware Identifier value associated with an ISA controller. Matchs ACPI DSDT contents. + UINT32 UID; ///< The ACPI Unique Identifier value associated with an ISA controller. Matches ACPI DSDT contents. } EFI_ISA_ACPI_DEVICE_ID; /// /// EFI ISA ACPI resource list /// typedef struct { - EFI_ISA_ACPI_DEVICE_ID Device; ///< The ACPI HID/UID associated with an ISA controller. - EFI_ISA_ACPI_RESOURCE *ResourceItem; ///< A pointer to the list of resources associated with an ISA controller. + EFI_ISA_ACPI_DEVICE_ID Device; ///< The ACPI HID/UID associated with an ISA controller. + EFI_ISA_ACPI_RESOURCE *ResourceItem; ///< A pointer to the list of resources associated with an ISA controller. } EFI_ISA_ACPI_RESOURCE_LIST; /** @@ -283,16 +283,16 @@ EFI_STATUS /// and assign resources to an ISA controller. /// struct _EFI_ISA_ACPI_PROTOCOL { - EFI_ISA_ACPI_DEVICE_ENUMERATE DeviceEnumerate; - EFI_ISA_ACPI_SET_DEVICE_POWER SetPower; - EFI_ISA_ACPI_GET_CUR_RESOURCE GetCurResource; - EFI_ISA_ACPI_GET_POS_RESOURCE GetPosResource; - EFI_ISA_ACPI_SET_RESOURCE SetResource; - EFI_ISA_ACPI_ENABLE_DEVICE EnableDevice; - EFI_ISA_ACPI_INIT_DEVICE InitDevice; - EFI_ISA_ACPI_INTERFACE_INIT InterfaceInit; + EFI_ISA_ACPI_DEVICE_ENUMERATE DeviceEnumerate; + EFI_ISA_ACPI_SET_DEVICE_POWER SetPower; + EFI_ISA_ACPI_GET_CUR_RESOURCE GetCurResource; + EFI_ISA_ACPI_GET_POS_RESOURCE GetPosResource; + EFI_ISA_ACPI_SET_RESOURCE SetResource; + EFI_ISA_ACPI_ENABLE_DEVICE EnableDevice; + EFI_ISA_ACPI_INIT_DEVICE InitDevice; + EFI_ISA_ACPI_INTERFACE_INIT InterfaceInit; }; -extern EFI_GUID gEfiIsaAcpiProtocolGuid; +extern EFI_GUID gEfiIsaAcpiProtocolGuid; #endif diff --git a/OvmfPkg/Csm/Include/Protocol/IsaIo.h b/OvmfPkg/Csm/Include/Protocol/IsaIo.h index 8807e421fe..40a8171e95 100644 --- a/OvmfPkg/Csm/Include/Protocol/IsaIo.h +++ b/OvmfPkg/Csm/Include/Protocol/IsaIo.h @@ -128,11 +128,11 @@ typedef struct { /// /// Read from ISA I/O or MMIO space. /// - EFI_ISA_IO_PROTOCOL_IO_MEM Read; + EFI_ISA_IO_PROTOCOL_IO_MEM Read; /// /// Write to ISA I/O or MMIO space. /// - EFI_ISA_IO_PROTOCOL_IO_MEM Write; + EFI_ISA_IO_PROTOCOL_IO_MEM Write; } EFI_ISA_IO_PROTOCOL_ACCESS; /** @@ -326,31 +326,31 @@ EFI_STATUS /// ISA_PCI_IO_PROTOCOL instance associated with the ISA controller. /// struct _EFI_ISA_IO_PROTOCOL { - EFI_ISA_IO_PROTOCOL_ACCESS Mem; - EFI_ISA_IO_PROTOCOL_ACCESS Io; - EFI_ISA_IO_PROTOCOL_COPY_MEM CopyMem; - EFI_ISA_IO_PROTOCOL_MAP Map; - EFI_ISA_IO_PROTOCOL_UNMAP Unmap; - EFI_ISA_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer; - EFI_ISA_IO_PROTOCOL_FREE_BUFFER FreeBuffer; - EFI_ISA_IO_PROTOCOL_FLUSH Flush; + EFI_ISA_IO_PROTOCOL_ACCESS Mem; + EFI_ISA_IO_PROTOCOL_ACCESS Io; + EFI_ISA_IO_PROTOCOL_COPY_MEM CopyMem; + EFI_ISA_IO_PROTOCOL_MAP Map; + EFI_ISA_IO_PROTOCOL_UNMAP Unmap; + EFI_ISA_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer; + EFI_ISA_IO_PROTOCOL_FREE_BUFFER FreeBuffer; + EFI_ISA_IO_PROTOCOL_FLUSH Flush; /// /// The list of I/O , MMIO, DMA, and Interrupt resources associated with the /// ISA controller abstracted by this instance of the EFI_ISA_IO_PROTOCOL. /// - EFI_ISA_ACPI_RESOURCE_LIST *ResourceList; + EFI_ISA_ACPI_RESOURCE_LIST *ResourceList; /// /// The size, in bytes, of the ROM image. /// - UINT32 RomSize; + UINT32 RomSize; /// /// A pointer to the in memory copy of the ROM image. The ISA Bus Driver is responsible /// for allocating memory for the ROM image, and copying the contents of the ROM to memory /// during ISA Bus initialization. /// - VOID *RomImage; + VOID *RomImage; }; -extern EFI_GUID gEfiIsaIoProtocolGuid; +extern EFI_GUID gEfiIsaIoProtocolGuid; #endif diff --git a/OvmfPkg/Csm/Include/Protocol/LegacyBios.h b/OvmfPkg/Csm/Include/Protocol/LegacyBios.h index 443f0c11a4..b9a225a874 100644 --- a/OvmfPkg/Csm/Include/Protocol/LegacyBios.h +++ b/OvmfPkg/Csm/Include/Protocol/LegacyBios.h @@ -26,10 +26,10 @@ SPDX-License-Identifier: BSD-2-Clause-Patent /// #pragma pack(1) -typedef UINT8 SERIAL_MODE; -typedef UINT8 PARALLEL_MODE; +typedef UINT8 SERIAL_MODE; +typedef UINT8 PARALLEL_MODE; -#define EFI_COMPATIBILITY16_TABLE_SIGNATURE SIGNATURE_32 ('I', 'F', 'E', '$') +#define EFI_COMPATIBILITY16_TABLE_SIGNATURE SIGNATURE_32 ('I', 'F', 'E', '$') /// /// There is a table located within the traditional BIOS in either the 0xF000:xxxx or 0xE000:xxxx @@ -44,75 +44,75 @@ typedef struct { /// The string "$EFI" denotes the start of the EfiCompatibility table. Byte 0 is "I," byte /// 1 is "F," byte 2 is "E," and byte 3 is "$" and is normally accessed as a DWORD or UINT32. /// - UINT32 Signature; + UINT32 Signature; /// /// The value required such that byte checksum of TableLength equals zero. /// - UINT8 TableChecksum; + UINT8 TableChecksum; /// /// The length of this table. /// - UINT8 TableLength; + UINT8 TableLength; /// /// The major EFI revision for which this table was generated. /// - UINT8 EfiMajorRevision; + UINT8 EfiMajorRevision; /// /// The minor EFI revision for which this table was generated. /// - UINT8 EfiMinorRevision; + UINT8 EfiMinorRevision; /// /// The major revision of this table. /// - UINT8 TableMajorRevision; + UINT8 TableMajorRevision; /// /// The minor revision of this table. /// - UINT8 TableMinorRevision; + UINT8 TableMinorRevision; /// /// Reserved for future usage. /// - UINT16 Reserved; + UINT16 Reserved; /// /// The segment of the entry point within the traditional BIOS for Compatibility16 functions. /// - UINT16 Compatibility16CallSegment; + UINT16 Compatibility16CallSegment; /// /// The offset of the entry point within the traditional BIOS for Compatibility16 functions. /// - UINT16 Compatibility16CallOffset; + UINT16 Compatibility16CallOffset; /// /// The segment of the entry point within the traditional BIOS for EfiCompatibility /// to invoke the PnP installation check. /// - UINT16 PnPInstallationCheckSegment; + UINT16 PnPInstallationCheckSegment; /// /// The Offset of the entry point within the traditional BIOS for EfiCompatibility /// to invoke the PnP installation check. /// - UINT16 PnPInstallationCheckOffset; + UINT16 PnPInstallationCheckOffset; /// /// EFI system resources table. Type EFI_SYSTEM_TABLE is defined in the IntelPlatform - ///Innovation Framework for EFI Driver Execution Environment Core Interface Specification (DXE CIS). + /// Innovation Framework for EFI Driver Execution Environment Core Interface Specification (DXE CIS). /// - UINT32 EfiSystemTable; + UINT32 EfiSystemTable; /// /// The address of an OEM-provided identifier string. The string is null terminated. /// - UINT32 OemIdStringPointer; + UINT32 OemIdStringPointer; /// /// The 32-bit physical address where ACPI RSD PTR is stored within the traditional @@ -120,93 +120,93 @@ typedef struct { /// reserved is the maximum for ACPI 2.0. The EfiCompatibility will fill in the ACPI /// RSD PTR with either the ACPI 1.0b or 2.0 values. /// - UINT32 AcpiRsdPtrPointer; + UINT32 AcpiRsdPtrPointer; /// /// The OEM revision number. Usage is undefined but provided for OEM module usage. /// - UINT16 OemRevision; + UINT16 OemRevision; /// /// The 32-bit physical address where INT15 E820 data is stored within the traditional /// BIOS. The EfiCompatibility code will fill in the E820Pointer value and copy the /// data to the indicated area. /// - UINT32 E820Pointer; + UINT32 E820Pointer; /// /// The length of the E820 data and is filled in by the EfiCompatibility code. /// - UINT32 E820Length; + UINT32 E820Length; /// /// The 32-bit physical address where the $PIR table is stored in the traditional BIOS. /// The EfiCompatibility code will fill in the IrqRoutingTablePointer value and /// copy the data to the indicated area. /// - UINT32 IrqRoutingTablePointer; + UINT32 IrqRoutingTablePointer; /// /// The length of the $PIR table and is filled in by the EfiCompatibility code. /// - UINT32 IrqRoutingTableLength; + UINT32 IrqRoutingTableLength; /// /// The 32-bit physical address where the MP table is stored in the traditional BIOS. /// The EfiCompatibility code will fill in the MpTablePtr value and copy the data /// to the indicated area. /// - UINT32 MpTablePtr; + UINT32 MpTablePtr; /// /// The length of the MP table and is filled in by the EfiCompatibility code. /// - UINT32 MpTableLength; + UINT32 MpTableLength; /// /// The segment of the OEM-specific INT table/code. /// - UINT16 OemIntSegment; + UINT16 OemIntSegment; /// /// The offset of the OEM-specific INT table/code. /// - UINT16 OemIntOffset; + UINT16 OemIntOffset; /// /// The segment of the OEM-specific 32-bit table/code. /// - UINT16 Oem32Segment; + UINT16 Oem32Segment; /// /// The offset of the OEM-specific 32-bit table/code. /// - UINT16 Oem32Offset; + UINT16 Oem32Offset; /// /// The segment of the OEM-specific 16-bit table/code. /// - UINT16 Oem16Segment; + UINT16 Oem16Segment; /// /// The offset of the OEM-specific 16-bit table/code. /// - UINT16 Oem16Offset; + UINT16 Oem16Offset; /// /// The segment of the TPM binary passed to 16-bit CSM. /// - UINT16 TpmSegment; + UINT16 TpmSegment; /// /// The offset of the TPM binary passed to 16-bit CSM. /// - UINT16 TpmOffset; + UINT16 TpmOffset; /// /// A pointer to a string identifying the independent BIOS vendor. /// - UINT32 IbvPointer; + UINT32 IbvPointer; /// /// This field is NULL for all systems not supporting PCI Express. This field is the base @@ -216,37 +216,37 @@ typedef struct { /// Compatibility16InitializeYourself() is defined in Compatibility16 /// Functions. /// - UINT32 PciExpressBase; + UINT32 PciExpressBase; /// /// Maximum PCI bus number assigned. /// - UINT8 LastPciBus; + UINT8 LastPciBus; /// /// Start Address of Upper Memory Area (UMA) to be set as Read/Write. If /// UmaAddress is a valid address in the shadow RAM, it also indicates that the region /// from 0xC0000 to (UmaAddress - 1) can be used for Option ROM. /// - UINT32 UmaAddress; + UINT32 UmaAddress; /// /// Upper Memory Area size in bytes to be set as Read/Write. If zero, no UMA region /// will be set as Read/Write (i.e. all Shadow RAM is set as Read-Only). /// - UINT32 UmaSize; + UINT32 UmaSize; /// /// Start Address of high memory that can be used for permanent allocation. If zero, /// high memory is not available for permanent allocation. /// - UINT32 HiPermanentMemoryAddress; + UINT32 HiPermanentMemoryAddress; /// /// Size of high memory that can be used for permanent allocation in bytes. If zero, /// high memory is not available for permanent allocation. /// - UINT32 HiPermanentMemorySize; + UINT32 HiPermanentMemorySize; } EFI_COMPATIBILITY16_TABLE; /// @@ -267,7 +267,7 @@ typedef enum { /// Return: /// AX = Return Status codes /// - Legacy16InitializeYourself = 0x0000, + Legacy16InitializeYourself = 0x0000, /// /// Causes the Compatibility16 BIOS to perform any drive number translations to match the boot sequence. @@ -277,7 +277,7 @@ typedef enum { /// Return: /// AX = Returned status codes /// - Legacy16UpdateBbs = 0x0001, + Legacy16UpdateBbs = 0x0001, /// /// Allows the Compatibility16 code to perform any final actions before booting. The Compatibility16 @@ -288,7 +288,7 @@ typedef enum { /// Return: /// AX = Returned status codes /// - Legacy16PrepareToBoot = 0x0002, + Legacy16PrepareToBoot = 0x0002, /// /// Causes the Compatibility16 BIOS to boot. The Compatibility16 code is Read/Only. @@ -297,7 +297,7 @@ typedef enum { /// Output: /// AX = Returned status codes /// - Legacy16Boot = 0x0003, + Legacy16Boot = 0x0003, /// /// Allows the Compatibility16 code to get the last device from which a boot was attempted. This is @@ -319,7 +319,7 @@ typedef enum { /// AX = Returned status codes /// BX = Number of non-BBS-compliant devices found. Equals 0 if BBS compliant. /// - Legacy16DispatchOprom = 0x0005, + Legacy16DispatchOprom = 0x0005, /// /// Finds a free area in the 0xFxxxx or 0xExxxx region of the specified length and returns the address @@ -336,7 +336,7 @@ typedef enum { /// AX = Returned status codes /// DS:BX = Address of the region /// - Legacy16GetTableAddress = 0x0006, + Legacy16GetTableAddress = 0x0006, /// /// Enables the EfiCompatibility module to do any nonstandard processing of keyboard LEDs or state. @@ -349,7 +349,7 @@ typedef enum { /// Output: /// AX = Returned status codes /// - Legacy16SetKeyboardLeds = 0x0007, + Legacy16SetKeyboardLeds = 0x0007, /// /// Enables the EfiCompatibility module to install an interrupt handler for PCI mass media devices that @@ -360,29 +360,27 @@ typedef enum { /// Output: /// AX = Returned status codes /// - Legacy16InstallPciHandler = 0x0008 + Legacy16InstallPciHandler = 0x0008 } EFI_COMPATIBILITY_FUNCTIONS; - /// /// EFI_DISPATCH_OPROM_TABLE /// typedef struct { - UINT16 PnPInstallationCheckSegment; ///< A pointer to the PnpInstallationCheck data structure. - UINT16 PnPInstallationCheckOffset; ///< A pointer to the PnpInstallationCheck data structure. - UINT16 OpromSegment; ///< The segment where the OpROM was placed. Offset is assumed to be 3. - UINT8 PciBus; ///< The PCI bus. - UINT8 PciDeviceFunction; ///< The PCI device * 0x08 | PCI function. - UINT8 NumberBbsEntries; ///< The number of valid BBS table entries upon entry and exit. The IBV code may - ///< increase this number, if BBS-compliant devices also hook INTs in order to force the - ///< OpROM BIOS Setup to be executed. - UINT32 BbsTablePointer; ///< A pointer to the BBS table. - UINT16 RuntimeSegment; ///< The segment where the OpROM can be relocated to. If this value is 0x0000, this - ///< means that the relocation of this run time code is not supported. - ///< Inconsistent with specification here: - ///< The member's name "OpromDestinationSegment" [defined in Intel Framework Compatibility Support Module Specification / 0.97 version] - ///< has been changed to "RuntimeSegment" since keeping backward compatible. - + UINT16 PnPInstallationCheckSegment; ///< A pointer to the PnpInstallationCheck data structure. + UINT16 PnPInstallationCheckOffset; ///< A pointer to the PnpInstallationCheck data structure. + UINT16 OpromSegment; ///< The segment where the OpROM was placed. Offset is assumed to be 3. + UINT8 PciBus; ///< The PCI bus. + UINT8 PciDeviceFunction; ///< The PCI device * 0x08 | PCI function. + UINT8 NumberBbsEntries; ///< The number of valid BBS table entries upon entry and exit. The IBV code may + ///< increase this number, if BBS-compliant devices also hook INTs in order to force the + ///< OpROM BIOS Setup to be executed. + UINT32 BbsTablePointer; ///< A pointer to the BBS table. + UINT16 RuntimeSegment; ///< The segment where the OpROM can be relocated to. If this value is 0x0000, this + ///< means that the relocation of this run time code is not supported. + ///< Inconsistent with specification here: + ///< The member's name "OpromDestinationSegment" [defined in Intel Framework Compatibility Support Module Specification / 0.97 version] + ///< has been changed to "RuntimeSegment" since keeping backward compatible. } EFI_DISPATCH_OPROM_TABLE; /// @@ -392,132 +390,132 @@ typedef struct { /// /// Starting address of memory under 1 MB. The ending address is assumed to be 640 KB or 0x9FFFF. /// - UINT32 BiosLessThan1MB; + UINT32 BiosLessThan1MB; /// /// The starting address of the high memory block. /// - UINT32 HiPmmMemory; + UINT32 HiPmmMemory; /// /// The length of high memory block. /// - UINT32 HiPmmMemorySizeInBytes; + UINT32 HiPmmMemorySizeInBytes; /// /// The segment of the reverse thunk call code. /// - UINT16 ReverseThunkCallSegment; + UINT16 ReverseThunkCallSegment; /// /// The offset of the reverse thunk call code. /// - UINT16 ReverseThunkCallOffset; + UINT16 ReverseThunkCallOffset; /// /// The number of E820 entries copied to the Compatibility16 BIOS. /// - UINT32 NumberE820Entries; + UINT32 NumberE820Entries; /// /// The amount of usable memory above 1 MB, e.g., E820 type 1 memory. /// - UINT32 OsMemoryAbove1Mb; + UINT32 OsMemoryAbove1Mb; /// /// The start of thunk code in main memory. Memory cannot be used by BIOS or PMM. /// - UINT32 ThunkStart; + UINT32 ThunkStart; /// /// The size of the thunk code. /// - UINT32 ThunkSizeInBytes; + UINT32 ThunkSizeInBytes; /// /// Starting address of memory under 1 MB. /// - UINT32 LowPmmMemory; + UINT32 LowPmmMemory; /// /// The length of low Memory block. /// - UINT32 LowPmmMemorySizeInBytes; + UINT32 LowPmmMemorySizeInBytes; } EFI_TO_COMPATIBILITY16_INIT_TABLE; /// /// DEVICE_PRODUCER_SERIAL. /// typedef struct { - UINT16 Address; ///< I/O address assigned to the serial port. - UINT8 Irq; ///< IRQ assigned to the serial port. - SERIAL_MODE Mode; ///< Mode of serial port. Values are defined below. + UINT16 Address; ///< I/O address assigned to the serial port. + UINT8 Irq; ///< IRQ assigned to the serial port. + SERIAL_MODE Mode; ///< Mode of serial port. Values are defined below. } DEVICE_PRODUCER_SERIAL; /// /// DEVICE_PRODUCER_SERIAL's modes. ///@{ -#define DEVICE_SERIAL_MODE_NORMAL 0x00 -#define DEVICE_SERIAL_MODE_IRDA 0x01 -#define DEVICE_SERIAL_MODE_ASK_IR 0x02 -#define DEVICE_SERIAL_MODE_DUPLEX_HALF 0x00 -#define DEVICE_SERIAL_MODE_DUPLEX_FULL 0x10 -///@) +#define DEVICE_SERIAL_MODE_NORMAL 0x00 +#define DEVICE_SERIAL_MODE_IRDA 0x01 +#define DEVICE_SERIAL_MODE_ASK_IR 0x02 +#define DEVICE_SERIAL_MODE_DUPLEX_HALF 0x00 +#define DEVICE_SERIAL_MODE_DUPLEX_FULL 0x10 +/// @) /// /// DEVICE_PRODUCER_PARALLEL. /// typedef struct { - UINT16 Address; ///< I/O address assigned to the parallel port. - UINT8 Irq; ///< IRQ assigned to the parallel port. - UINT8 Dma; ///< DMA assigned to the parallel port. - PARALLEL_MODE Mode; ///< Mode of the parallel port. Values are defined below. + UINT16 Address; ///< I/O address assigned to the parallel port. + UINT8 Irq; ///< IRQ assigned to the parallel port. + UINT8 Dma; ///< DMA assigned to the parallel port. + PARALLEL_MODE Mode; ///< Mode of the parallel port. Values are defined below. } DEVICE_PRODUCER_PARALLEL; /// /// DEVICE_PRODUCER_PARALLEL's modes. ///@{ -#define DEVICE_PARALLEL_MODE_MODE_OUTPUT_ONLY 0x00 -#define DEVICE_PARALLEL_MODE_MODE_BIDIRECTIONAL 0x01 -#define DEVICE_PARALLEL_MODE_MODE_EPP 0x02 -#define DEVICE_PARALLEL_MODE_MODE_ECP 0x03 +#define DEVICE_PARALLEL_MODE_MODE_OUTPUT_ONLY 0x00 +#define DEVICE_PARALLEL_MODE_MODE_BIDIRECTIONAL 0x01 +#define DEVICE_PARALLEL_MODE_MODE_EPP 0x02 +#define DEVICE_PARALLEL_MODE_MODE_ECP 0x03 ///@} /// /// DEVICE_PRODUCER_FLOPPY /// typedef struct { - UINT16 Address; ///< I/O address assigned to the floppy. - UINT8 Irq; ///< IRQ assigned to the floppy. - UINT8 Dma; ///< DMA assigned to the floppy. - UINT8 NumberOfFloppy; ///< Number of floppies in the system. + UINT16 Address; ///< I/O address assigned to the floppy. + UINT8 Irq; ///< IRQ assigned to the floppy. + UINT8 Dma; ///< DMA assigned to the floppy. + UINT8 NumberOfFloppy; ///< Number of floppies in the system. } DEVICE_PRODUCER_FLOPPY; /// /// LEGACY_DEVICE_FLAGS /// typedef struct { - UINT32 A20Kybd : 1; ///< A20 controller by keyboard controller. - UINT32 A20Port90 : 1; ///< A20 controlled by port 0x92. - UINT32 Reserved : 30; ///< Reserved for future usage. + UINT32 A20Kybd : 1; ///< A20 controller by keyboard controller. + UINT32 A20Port90 : 1; ///< A20 controlled by port 0x92. + UINT32 Reserved : 30; ///< Reserved for future usage. } LEGACY_DEVICE_FLAGS; /// /// DEVICE_PRODUCER_DATA_HEADER /// typedef struct { - DEVICE_PRODUCER_SERIAL Serial[4]; ///< Data for serial port x. Type DEVICE_PRODUCER_SERIAL is defined below. - DEVICE_PRODUCER_PARALLEL Parallel[3]; ///< Data for parallel port x. Type DEVICE_PRODUCER_PARALLEL is defined below. - DEVICE_PRODUCER_FLOPPY Floppy; ///< Data for floppy. Type DEVICE_PRODUCER_FLOPPY is defined below. - UINT8 MousePresent; ///< Flag to indicate if mouse is present. - LEGACY_DEVICE_FLAGS Flags; ///< Miscellaneous Boolean state information passed to CSM. + DEVICE_PRODUCER_SERIAL Serial[4]; ///< Data for serial port x. Type DEVICE_PRODUCER_SERIAL is defined below. + DEVICE_PRODUCER_PARALLEL Parallel[3]; ///< Data for parallel port x. Type DEVICE_PRODUCER_PARALLEL is defined below. + DEVICE_PRODUCER_FLOPPY Floppy; ///< Data for floppy. Type DEVICE_PRODUCER_FLOPPY is defined below. + UINT8 MousePresent; ///< Flag to indicate if mouse is present. + LEGACY_DEVICE_FLAGS Flags; ///< Miscellaneous Boolean state information passed to CSM. } DEVICE_PRODUCER_DATA_HEADER; /// /// ATAPI_IDENTIFY /// typedef struct { - UINT16 Raw[256]; ///< Raw data from the IDE IdentifyDrive command. + UINT16 Raw[256]; ///< Raw data from the IDE IdentifyDrive command. } ATAPI_IDENTIFY; /// @@ -529,44 +527,44 @@ typedef struct { /// per IDE controller. The IdentifyDrive is per drive. Index 0 is master and index /// 1 is slave. /// - UINT16 Status; + UINT16 Status; /// /// PCI bus of IDE controller. /// - UINT32 Bus; + UINT32 Bus; /// /// PCI device of IDE controller. /// - UINT32 Device; + UINT32 Device; /// /// PCI function of IDE controller. /// - UINT32 Function; + UINT32 Function; /// /// Command ports base address. /// - UINT16 CommandBaseAddress; + UINT16 CommandBaseAddress; /// /// Control ports base address. /// - UINT16 ControlBaseAddress; + UINT16 ControlBaseAddress; /// /// Bus master address. /// - UINT16 BusMasterAddress; + UINT16 BusMasterAddress; - UINT8 HddIrq; + UINT8 HddIrq; /// /// Data that identifies the drive data; one per possible attached drive. /// - ATAPI_IDENTIFY IdentifyDrive[2]; + ATAPI_IDENTIFY IdentifyDrive[2]; } HDD_INFO; /// @@ -585,10 +583,10 @@ typedef struct { /// BBS_STATUS_FLAGS;\. /// typedef struct { - UINT16 OldPosition : 4; ///< Prior priority. - UINT16 Reserved1 : 4; ///< Reserved for future use. - UINT16 Enabled : 1; ///< If 0, ignore this entry. - UINT16 Failed : 1; ///< 0 = Not known if boot failure occurred. + UINT16 OldPosition : 4; ///< Prior priority. + UINT16 Reserved1 : 4; ///< Reserved for future use. + UINT16 Enabled : 1; ///< If 0, ignore this entry. + UINT16 Failed : 1; ///< 0 = Not known if boot failure occurred. ///< 1 = Boot attempted failed. /// @@ -598,8 +596,8 @@ typedef struct { /// 10 = Media is present and appears bootable. /// 11 = Reserved. /// - UINT16 MediaPresent : 2; - UINT16 Reserved2 : 4; ///< Reserved for future use. + UINT16 MediaPresent : 2; + UINT16 Reserved2 : 4; ///< Reserved for future use. } BBS_STATUS_FLAGS; /// @@ -609,134 +607,134 @@ typedef struct { /// /// The boot priority for this boot device. Values are defined below. /// - UINT16 BootPriority; + UINT16 BootPriority; /// /// The PCI bus for this boot device. /// - UINT32 Bus; + UINT32 Bus; /// /// The PCI device for this boot device. /// - UINT32 Device; + UINT32 Device; /// /// The PCI function for the boot device. /// - UINT32 Function; + UINT32 Function; /// /// The PCI class for this boot device. /// - UINT8 Class; + UINT8 Class; /// /// The PCI Subclass for this boot device. /// - UINT8 SubClass; + UINT8 SubClass; /// /// Segment:offset address of an ASCIIZ description string describing the manufacturer. /// - UINT16 MfgStringOffset; + UINT16 MfgStringOffset; /// /// Segment:offset address of an ASCIIZ description string describing the manufacturer. /// - UINT16 MfgStringSegment; + UINT16 MfgStringSegment; /// /// BBS device type. BBS device types are defined below. /// - UINT16 DeviceType; + UINT16 DeviceType; /// /// Status of this boot device. Type BBS_STATUS_FLAGS is defined below. /// - BBS_STATUS_FLAGS StatusFlags; + BBS_STATUS_FLAGS StatusFlags; /// /// Segment:Offset address of boot loader for IPL devices or install INT13 handler for /// BCV devices. /// - UINT16 BootHandlerOffset; + UINT16 BootHandlerOffset; /// /// Segment:Offset address of boot loader for IPL devices or install INT13 handler for /// BCV devices. /// - UINT16 BootHandlerSegment; + UINT16 BootHandlerSegment; /// /// Segment:offset address of an ASCIIZ description string describing this device. /// - UINT16 DescStringOffset; + UINT16 DescStringOffset; /// /// Segment:offset address of an ASCIIZ description string describing this device. /// - UINT16 DescStringSegment; + UINT16 DescStringSegment; /// /// Reserved. /// - UINT32 InitPerReserved; + UINT32 InitPerReserved; /// /// The use of these fields is IBV dependent. They can be used to flag that an OpROM /// has hooked the specified IRQ. The OpROM may be BBS compliant as some SCSI /// BBS-compliant OpROMs also hook IRQ vectors in order to run their BIOS Setup /// - UINT32 AdditionalIrq13Handler; + UINT32 AdditionalIrq13Handler; /// /// The use of these fields is IBV dependent. They can be used to flag that an OpROM /// has hooked the specified IRQ. The OpROM may be BBS compliant as some SCSI /// BBS-compliant OpROMs also hook IRQ vectors in order to run their BIOS Setup /// - UINT32 AdditionalIrq18Handler; + UINT32 AdditionalIrq18Handler; /// /// The use of these fields is IBV dependent. They can be used to flag that an OpROM /// has hooked the specified IRQ. The OpROM may be BBS compliant as some SCSI /// BBS-compliant OpROMs also hook IRQ vectors in order to run their BIOS Setup /// - UINT32 AdditionalIrq19Handler; + UINT32 AdditionalIrq19Handler; /// /// The use of these fields is IBV dependent. They can be used to flag that an OpROM /// has hooked the specified IRQ. The OpROM may be BBS compliant as some SCSI /// BBS-compliant OpROMs also hook IRQ vectors in order to run their BIOS Setup /// - UINT32 AdditionalIrq40Handler; - UINT8 AssignedDriveNumber; - UINT32 AdditionalIrq41Handler; - UINT32 AdditionalIrq46Handler; - UINT32 IBV1; - UINT32 IBV2; + UINT32 AdditionalIrq40Handler; + UINT8 AssignedDriveNumber; + UINT32 AdditionalIrq41Handler; + UINT32 AdditionalIrq46Handler; + UINT32 IBV1; + UINT32 IBV2; } BBS_TABLE; /// /// BBS device type values ///@{ -#define BBS_FLOPPY 0x01 -#define BBS_HARDDISK 0x02 -#define BBS_CDROM 0x03 -#define BBS_PCMCIA 0x04 -#define BBS_USB 0x05 -#define BBS_EMBED_NETWORK 0x06 -#define BBS_BEV_DEVICE 0x80 -#define BBS_UNKNOWN 0xff +#define BBS_FLOPPY 0x01 +#define BBS_HARDDISK 0x02 +#define BBS_CDROM 0x03 +#define BBS_PCMCIA 0x04 +#define BBS_USB 0x05 +#define BBS_EMBED_NETWORK 0x06 +#define BBS_BEV_DEVICE 0x80 +#define BBS_UNKNOWN 0xff ///@} /// /// BBS boot priority values ///@{ -#define BBS_DO_NOT_BOOT_FROM 0xFFFC -#define BBS_LOWEST_PRIORITY 0xFFFD -#define BBS_UNPRIORITIZED_ENTRY 0xFFFE -#define BBS_IGNORE_ENTRY 0xFFFF +#define BBS_DO_NOT_BOOT_FROM 0xFFFC +#define BBS_LOWEST_PRIORITY 0xFFFD +#define BBS_UNPRIORITIZED_ENTRY 0xFFFE +#define BBS_IGNORE_ENTRY 0xFFFF ///@} /// @@ -747,70 +745,70 @@ typedef struct { /// Access mechanism used to generate the soft SMI. Defined types are below. The other /// values are reserved for future usage. /// - UINT16 Type : 3; + UINT16 Type : 3; /// /// The size of "port" in bits. Defined values are below. /// - UINT16 PortGranularity : 3; + UINT16 PortGranularity : 3; /// /// The size of data in bits. Defined values are below. /// - UINT16 DataGranularity : 3; + UINT16 DataGranularity : 3; /// /// Reserved for future use. /// - UINT16 Reserved : 7; + UINT16 Reserved : 7; } SMM_ATTRIBUTES; /// /// SMM_ATTRIBUTES type values. ///@{ -#define STANDARD_IO 0x00 -#define STANDARD_MEMORY 0x01 +#define STANDARD_IO 0x00 +#define STANDARD_MEMORY 0x01 ///@} /// /// SMM_ATTRIBUTES port size constants. ///@{ -#define PORT_SIZE_8 0x00 -#define PORT_SIZE_16 0x01 -#define PORT_SIZE_32 0x02 -#define PORT_SIZE_64 0x03 +#define PORT_SIZE_8 0x00 +#define PORT_SIZE_16 0x01 +#define PORT_SIZE_32 0x02 +#define PORT_SIZE_64 0x03 ///@} /// /// SMM_ATTRIBUTES data size constants. ///@{ -#define DATA_SIZE_8 0x00 -#define DATA_SIZE_16 0x01 -#define DATA_SIZE_32 0x02 -#define DATA_SIZE_64 0x03 +#define DATA_SIZE_8 0x00 +#define DATA_SIZE_16 0x01 +#define DATA_SIZE_32 0x02 +#define DATA_SIZE_64 0x03 ///@} /// /// SMM_FUNCTION & relating constants. /// typedef struct { - UINT16 Function : 15; - UINT16 Owner : 1; + UINT16 Function : 15; + UINT16 Owner : 1; } SMM_FUNCTION; /// /// SMM_FUNCTION Function constants. ///@{ -#define INT15_D042 0x0000 -#define GET_USB_BOOT_INFO 0x0001 -#define DMI_PNP_50_57 0x0002 +#define INT15_D042 0x0000 +#define GET_USB_BOOT_INFO 0x0001 +#define DMI_PNP_50_57 0x0002 ///@} /// /// SMM_FUNCTION Owner constants. ///@{ -#define STANDARD_OWNER 0x0 -#define OEM_OWNER 0x1 +#define STANDARD_OWNER 0x0 +#define OEM_OWNER 0x1 ///@} /// @@ -822,30 +820,30 @@ typedef struct { /// Describes the access mechanism, SmmPort, and SmmData sizes. Type /// SMM_ATTRIBUTES is defined below. /// - SMM_ATTRIBUTES SmmAttributes; + SMM_ATTRIBUTES SmmAttributes; /// /// Function Soft SMI is to perform. Type SMM_FUNCTION is defined below. /// - SMM_FUNCTION SmmFunction; + SMM_FUNCTION SmmFunction; /// /// SmmPort size depends upon SmmAttributes and ranges from2 bytes to 16 bytes. /// - UINT8 SmmPort; + UINT8 SmmPort; /// /// SmmData size depends upon SmmAttributes and ranges from2 bytes to 16 bytes. /// - UINT8 SmmData; + UINT8 SmmData; } SMM_ENTRY; /// /// SMM_TABLE /// typedef struct { - UINT16 NumSmmEntries; ///< Number of entries represented by SmmEntry. - SMM_ENTRY SmmEntry; ///< One entry per function. Type SMM_ENTRY is defined below. + UINT16 NumSmmEntries; ///< Number of entries represented by SmmEntry. + SMM_ENTRY SmmEntry; ///< One entry per function. Type SMM_ENTRY is defined below. } SMM_TABLE; /// @@ -855,23 +853,23 @@ typedef struct { /// /// This bit set indicates that the ServiceAreaData is valid. /// - UINT8 DirectoryServiceValidity : 1; + UINT8 DirectoryServiceValidity : 1; /// /// This bit set indicates to use the Reserve Area Boot Code Address (RACBA) only if /// DirectoryServiceValidity is 0. /// - UINT8 RabcaUsedFlag : 1; + UINT8 RabcaUsedFlag : 1; /// /// This bit set indicates to execute hard disk diagnostics. /// - UINT8 ExecuteHddDiagnosticsFlag : 1; + UINT8 ExecuteHddDiagnosticsFlag : 1; /// /// Reserved for future use. Set to 0. /// - UINT8 Reserved : 5; + UINT8 Reserved : 5; } UDC_ATTRIBUTES; /// @@ -882,74 +880,74 @@ typedef struct { /// This field contains the bit-mapped attributes of the PARTIES information. Type /// UDC_ATTRIBUTES is defined below. /// - UDC_ATTRIBUTES Attributes; + UDC_ATTRIBUTES Attributes; /// /// This field contains the zero-based device on which the selected /// ServiceDataArea is present. It is 0 for master and 1 for the slave device. /// - UINT8 DeviceNumber; + UINT8 DeviceNumber; /// /// This field contains the zero-based index into the BbsTable for the parent device. /// This index allows the user to reference the parent device information such as PCI /// bus, device function. /// - UINT8 BbsTableEntryNumberForParentDevice; + UINT8 BbsTableEntryNumberForParentDevice; /// /// This field contains the zero-based index into the BbsTable for the boot entry. /// - UINT8 BbsTableEntryNumberForBoot; + UINT8 BbsTableEntryNumberForBoot; /// /// This field contains the zero-based index into the BbsTable for the HDD diagnostics entry. /// - UINT8 BbsTableEntryNumberForHddDiag; + UINT8 BbsTableEntryNumberForHddDiag; /// /// The raw Beer data. /// - UINT8 BeerData[128]; + UINT8 BeerData[128]; /// /// The raw data of selected service area. /// - UINT8 ServiceAreaData[64]; + UINT8 ServiceAreaData[64]; } UD_TABLE; -#define EFI_TO_LEGACY_MAJOR_VERSION 0x02 -#define EFI_TO_LEGACY_MINOR_VERSION 0x00 -#define MAX_IDE_CONTROLLER 8 +#define EFI_TO_LEGACY_MAJOR_VERSION 0x02 +#define EFI_TO_LEGACY_MINOR_VERSION 0x00 +#define MAX_IDE_CONTROLLER 8 /// /// EFI_TO_COMPATIBILITY16_BOOT_TABLE /// typedef struct { - UINT16 MajorVersion; ///< The EfiCompatibility major version number. - UINT16 MinorVersion; ///< The EfiCompatibility minor version number. - UINT32 AcpiTable; ///< The location of the RSDT ACPI table. < 4G range. - UINT32 SmbiosTable; ///< The location of the SMBIOS table in EFI memory. < 4G range. - UINT32 SmbiosTableLength; + UINT16 MajorVersion; ///< The EfiCompatibility major version number. + UINT16 MinorVersion; ///< The EfiCompatibility minor version number. + UINT32 AcpiTable; ///< The location of the RSDT ACPI table. < 4G range. + UINT32 SmbiosTable; ///< The location of the SMBIOS table in EFI memory. < 4G range. + UINT32 SmbiosTableLength; // // Legacy SIO state // - DEVICE_PRODUCER_DATA_HEADER SioData; ///< Standard traditional device information. - UINT16 DevicePathType; ///< The default boot type. - UINT16 PciIrqMask; ///< Mask of which IRQs have been assigned to PCI. - UINT32 NumberE820Entries; ///< Number of E820 entries. The number can change from the + DEVICE_PRODUCER_DATA_HEADER SioData; ///< Standard traditional device information. + UINT16 DevicePathType; ///< The default boot type. + UINT16 PciIrqMask; ///< Mask of which IRQs have been assigned to PCI. + UINT32 NumberE820Entries; ///< Number of E820 entries. The number can change from the ///< Compatibility16InitializeYourself() function. // // Controller & Drive Identify[2] per controller information // - HDD_INFO HddInfo[MAX_IDE_CONTROLLER]; ///< Hard disk drive information, including raw Identify Drive data. - UINT32 NumberBbsEntries; ///< Number of entries in the BBS table - UINT32 BbsTable; ///< A pointer to the BBS table. Type BBS_TABLE is defined below. - UINT32 SmmTable; ///< A pointer to the SMM table. Type SMM_TABLE is defined below. - UINT32 OsMemoryAbove1Mb; ///< The amount of usable memory above 1 MB, i.e. E820 type 1 memory. This value can + HDD_INFO HddInfo[MAX_IDE_CONTROLLER]; ///< Hard disk drive information, including raw Identify Drive data. + UINT32 NumberBbsEntries; ///< Number of entries in the BBS table + UINT32 BbsTable; ///< A pointer to the BBS table. Type BBS_TABLE is defined below. + UINT32 SmmTable; ///< A pointer to the SMM table. Type SMM_TABLE is defined below. + UINT32 OsMemoryAbove1Mb; ///< The amount of usable memory above 1 MB, i.e. E820 type 1 memory. This value can ///< differ from the value in EFI_TO_COMPATIBILITY16_INIT_TABLE as more ///< memory may have been discovered. - UINT32 UnconventionalDeviceTable; ///< Information to boot off an unconventional device like a PARTIES partition. Type + UINT32 UnconventionalDeviceTable; ///< Information to boot off an unconventional device like a PARTIES partition. Type ///< UD_TABLE is defined below. } EFI_TO_COMPATIBILITY16_BOOT_TABLE; @@ -957,28 +955,28 @@ typedef struct { /// EFI_LEGACY_INSTALL_PCI_HANDLER /// typedef struct { - UINT8 PciBus; ///< The PCI bus of the device. - UINT8 PciDeviceFun; ///< The PCI device in bits 7:3 and function in bits 2:0. - UINT8 PciSegment; ///< The PCI segment of the device. - UINT8 PciClass; ///< The PCI class code of the device. - UINT8 PciSubclass; ///< The PCI subclass code of the device. - UINT8 PciInterface; ///< The PCI interface code of the device. + UINT8 PciBus; ///< The PCI bus of the device. + UINT8 PciDeviceFun; ///< The PCI device in bits 7:3 and function in bits 2:0. + UINT8 PciSegment; ///< The PCI segment of the device. + UINT8 PciClass; ///< The PCI class code of the device. + UINT8 PciSubclass; ///< The PCI subclass code of the device. + UINT8 PciInterface; ///< The PCI interface code of the device. // // Primary section // - UINT8 PrimaryIrq; ///< The primary device IRQ. - UINT8 PrimaryReserved; ///< Reserved. - UINT16 PrimaryControl; ///< The primary device control I/O base. - UINT16 PrimaryBase; ///< The primary device I/O base. - UINT16 PrimaryBusMaster; ///< The primary device bus master I/O base. + UINT8 PrimaryIrq; ///< The primary device IRQ. + UINT8 PrimaryReserved; ///< Reserved. + UINT16 PrimaryControl; ///< The primary device control I/O base. + UINT16 PrimaryBase; ///< The primary device I/O base. + UINT16 PrimaryBusMaster; ///< The primary device bus master I/O base. // // Secondary Section // - UINT8 SecondaryIrq; ///< The secondary device IRQ. - UINT8 SecondaryReserved; ///< Reserved. - UINT16 SecondaryControl; ///< The secondary device control I/O base. - UINT16 SecondaryBase; ///< The secondary device I/O base. - UINT16 SecondaryBusMaster; ///< The secondary device bus master I/O base. + UINT8 SecondaryIrq; ///< The secondary device IRQ. + UINT8 SecondaryReserved; ///< Reserved. + UINT16 SecondaryControl; ///< The secondary device control I/O base. + UINT16 SecondaryBase; ///< The secondary device I/O base. + UINT16 SecondaryBusMaster; ///< The secondary device bus master I/O base. } EFI_LEGACY_INSTALL_PCI_HANDLER; // @@ -1007,128 +1005,128 @@ typedef struct _EFI_LEGACY_BIOS_PROTOCOL EFI_LEGACY_BIOS_PROTOCOL; /// to Segment:Offset 16-bit form. /// ///@{ -#define EFI_SEGMENT(_Adr) (UINT16) ((UINT16) (((UINTN) (_Adr)) >> 4) & 0xf000) -#define EFI_OFFSET(_Adr) (UINT16) (((UINT16) ((UINTN) (_Adr))) & 0xffff) +#define EFI_SEGMENT(_Adr) (UINT16) ((UINT16) (((UINTN) (_Adr)) >> 4) & 0xf000) +#define EFI_OFFSET(_Adr) (UINT16) (((UINT16) ((UINTN) (_Adr))) & 0xffff) ///@} -#define CARRY_FLAG 0x01 +#define CARRY_FLAG 0x01 /// /// EFI_EFLAGS_REG /// typedef struct { - UINT32 CF:1; - UINT32 Reserved1:1; - UINT32 PF:1; - UINT32 Reserved2:1; - UINT32 AF:1; - UINT32 Reserved3:1; - UINT32 ZF:1; - UINT32 SF:1; - UINT32 TF:1; - UINT32 IF:1; - UINT32 DF:1; - UINT32 OF:1; - UINT32 IOPL:2; - UINT32 NT:1; - UINT32 Reserved4:2; - UINT32 VM:1; - UINT32 Reserved5:14; + UINT32 CF : 1; + UINT32 Reserved1 : 1; + UINT32 PF : 1; + UINT32 Reserved2 : 1; + UINT32 AF : 1; + UINT32 Reserved3 : 1; + UINT32 ZF : 1; + UINT32 SF : 1; + UINT32 TF : 1; + UINT32 IF : 1; + UINT32 DF : 1; + UINT32 OF : 1; + UINT32 IOPL : 2; + UINT32 NT : 1; + UINT32 Reserved4 : 2; + UINT32 VM : 1; + UINT32 Reserved5 : 14; } EFI_EFLAGS_REG; /// /// EFI_DWORD_REGS /// typedef struct { - UINT32 EAX; - UINT32 EBX; - UINT32 ECX; - UINT32 EDX; - UINT32 ESI; - UINT32 EDI; - EFI_EFLAGS_REG EFlags; - UINT16 ES; - UINT16 CS; - UINT16 SS; - UINT16 DS; - UINT16 FS; - UINT16 GS; - UINT32 EBP; - UINT32 ESP; + UINT32 EAX; + UINT32 EBX; + UINT32 ECX; + UINT32 EDX; + UINT32 ESI; + UINT32 EDI; + EFI_EFLAGS_REG EFlags; + UINT16 ES; + UINT16 CS; + UINT16 SS; + UINT16 DS; + UINT16 FS; + UINT16 GS; + UINT32 EBP; + UINT32 ESP; } EFI_DWORD_REGS; /// /// EFI_FLAGS_REG /// typedef struct { - UINT16 CF:1; - UINT16 Reserved1:1; - UINT16 PF:1; - UINT16 Reserved2:1; - UINT16 AF:1; - UINT16 Reserved3:1; - UINT16 ZF:1; - UINT16 SF:1; - UINT16 TF:1; - UINT16 IF:1; - UINT16 DF:1; - UINT16 OF:1; - UINT16 IOPL:2; - UINT16 NT:1; - UINT16 Reserved4:1; + UINT16 CF : 1; + UINT16 Reserved1 : 1; + UINT16 PF : 1; + UINT16 Reserved2 : 1; + UINT16 AF : 1; + UINT16 Reserved3 : 1; + UINT16 ZF : 1; + UINT16 SF : 1; + UINT16 TF : 1; + UINT16 IF : 1; + UINT16 DF : 1; + UINT16 OF : 1; + UINT16 IOPL : 2; + UINT16 NT : 1; + UINT16 Reserved4 : 1; } EFI_FLAGS_REG; /// /// EFI_WORD_REGS /// typedef struct { - UINT16 AX; - UINT16 ReservedAX; - UINT16 BX; - UINT16 ReservedBX; - UINT16 CX; - UINT16 ReservedCX; - UINT16 DX; - UINT16 ReservedDX; - UINT16 SI; - UINT16 ReservedSI; - UINT16 DI; - UINT16 ReservedDI; - EFI_FLAGS_REG Flags; - UINT16 ReservedFlags; - UINT16 ES; - UINT16 CS; - UINT16 SS; - UINT16 DS; - UINT16 FS; - UINT16 GS; - UINT16 BP; - UINT16 ReservedBP; - UINT16 SP; - UINT16 ReservedSP; + UINT16 AX; + UINT16 ReservedAX; + UINT16 BX; + UINT16 ReservedBX; + UINT16 CX; + UINT16 ReservedCX; + UINT16 DX; + UINT16 ReservedDX; + UINT16 SI; + UINT16 ReservedSI; + UINT16 DI; + UINT16 ReservedDI; + EFI_FLAGS_REG Flags; + UINT16 ReservedFlags; + UINT16 ES; + UINT16 CS; + UINT16 SS; + UINT16 DS; + UINT16 FS; + UINT16 GS; + UINT16 BP; + UINT16 ReservedBP; + UINT16 SP; + UINT16 ReservedSP; } EFI_WORD_REGS; /// /// EFI_BYTE_REGS /// typedef struct { - UINT8 AL, AH; - UINT16 ReservedAX; - UINT8 BL, BH; - UINT16 ReservedBX; - UINT8 CL, CH; - UINT16 ReservedCX; - UINT8 DL, DH; - UINT16 ReservedDX; + UINT8 AL, AH; + UINT16 ReservedAX; + UINT8 BL, BH; + UINT16 ReservedBX; + UINT8 CL, CH; + UINT16 ReservedCX; + UINT8 DL, DH; + UINT16 ReservedDX; } EFI_BYTE_REGS; /// /// EFI_IA32_REGISTER_SET /// typedef union { - EFI_DWORD_REGS E; - EFI_WORD_REGS X; - EFI_BYTE_REGS H; + EFI_DWORD_REGS E; + EFI_WORD_REGS X; + EFI_BYTE_REGS H; } EFI_IA32_REGISTER_SET; /** @@ -1453,63 +1451,63 @@ struct _EFI_LEGACY_BIOS_PROTOCOL { /// /// Performs traditional software INT. See the Int86() function description. /// - EFI_LEGACY_BIOS_INT86 Int86; + EFI_LEGACY_BIOS_INT86 Int86; /// /// Performs a far call into Compatibility16 or traditional OpROM code. /// - EFI_LEGACY_BIOS_FARCALL86 FarCall86; + EFI_LEGACY_BIOS_FARCALL86 FarCall86; /// /// Checks if a traditional OpROM exists for this device. /// - EFI_LEGACY_BIOS_CHECK_ROM CheckPciRom; + EFI_LEGACY_BIOS_CHECK_ROM CheckPciRom; /// /// Loads a traditional OpROM in traditional OpROM address space. /// - EFI_LEGACY_BIOS_INSTALL_ROM InstallPciRom; + EFI_LEGACY_BIOS_INSTALL_ROM InstallPciRom; /// /// Boots a traditional OS. /// - EFI_LEGACY_BIOS_BOOT LegacyBoot; + EFI_LEGACY_BIOS_BOOT LegacyBoot; /// /// Updates BDA to reflect the current EFI keyboard LED status. /// - EFI_LEGACY_BIOS_UPDATE_KEYBOARD_LED_STATUS UpdateKeyboardLedStatus; + EFI_LEGACY_BIOS_UPDATE_KEYBOARD_LED_STATUS UpdateKeyboardLedStatus; /// /// Allows an external agent, such as BIOS Setup, to get the BBS data. /// - EFI_LEGACY_BIOS_GET_BBS_INFO GetBbsInfo; + EFI_LEGACY_BIOS_GET_BBS_INFO GetBbsInfo; /// /// Causes all legacy OpROMs to be shadowed. /// - EFI_LEGACY_BIOS_SHADOW_ALL_LEGACY_OPROMS ShadowAllLegacyOproms; + EFI_LEGACY_BIOS_SHADOW_ALL_LEGACY_OPROMS ShadowAllLegacyOproms; /// /// Performs all actions prior to boot. Used when booting an EFI-aware OS /// rather than a legacy OS. /// - EFI_LEGACY_BIOS_PREPARE_TO_BOOT_EFI PrepareToBootEfi; + EFI_LEGACY_BIOS_PREPARE_TO_BOOT_EFI PrepareToBootEfi; /// /// Allows EFI to reserve an area in the 0xE0000 or 0xF0000 block. /// - EFI_LEGACY_BIOS_GET_LEGACY_REGION GetLegacyRegion; + EFI_LEGACY_BIOS_GET_LEGACY_REGION GetLegacyRegion; /// /// Allows EFI to copy data to the area specified by GetLegacyRegion. /// - EFI_LEGACY_BIOS_COPY_LEGACY_REGION CopyLegacyRegion; + EFI_LEGACY_BIOS_COPY_LEGACY_REGION CopyLegacyRegion; /// /// Allows the user to boot off an unconventional device such as a PARTIES partition. /// - EFI_LEGACY_BIOS_BOOT_UNCONVENTIONAL_DEVICE BootUnconventionalDevice; + EFI_LEGACY_BIOS_BOOT_UNCONVENTIONAL_DEVICE BootUnconventionalDevice; }; // @@ -1548,6 +1546,6 @@ struct _EFI_LEGACY_BIOS_PROTOCOL { } \ } while (FALSE) -extern EFI_GUID gEfiLegacyBiosProtocolGuid; +extern EFI_GUID gEfiLegacyBiosProtocolGuid; #endif diff --git a/OvmfPkg/Csm/Include/Protocol/LegacyBiosPlatform.h b/OvmfPkg/Csm/Include/Protocol/LegacyBiosPlatform.h index 37f5d9178b..941b1c8331 100644 --- a/OvmfPkg/Csm/Include/Protocol/LegacyBiosPlatform.h +++ b/OvmfPkg/Csm/Include/Protocol/LegacyBiosPlatform.h @@ -66,7 +66,7 @@ typedef enum { /// /// EFI_UNSUPPORTED The MP table is not supported on this platform. /// - EfiGetPlatformBinaryMpTable = 0, + EfiGetPlatformBinaryMpTable = 0, /// /// This mode returns a block of data. The content and usage is IBV or OEM defined. /// OEMs or IBVs normally use this function for nonstandard Compatibility16 runtime soft @@ -104,7 +104,7 @@ typedef enum { /// /// EFI_UNSUPPORTED Oem INT is not supported on this platform. /// - EfiGetPlatformBinaryOemIntData = 1, + EfiGetPlatformBinaryOemIntData = 1, /// /// This mode returns a block of data. The content and usage is IBV defined. OEMs or /// IBVs normally use this mode for nonstandard Compatibility16 runtime 16 bit routines. It @@ -146,57 +146,57 @@ typedef enum { /// /// EFI_UNSUPPORTED Oem16 is not supported on this platform. /// - EfiGetPlatformBinaryOem16Data = 2, -/// -/// This mode returns a block of data. The content and usage are IBV defined. OEMs or -/// IBVs normally use this mode for nonstandard Compatibility16 runtime 32 bit routines. It -/// is the responsibility of this routine to coalesce multiple OEM 32 bit functions, if they -/// exist, into one coherent package that is understandable by the Compatibility16 code. -/// -/// Example usage: A legacy mobile BIOS that has a pre existing runtime -/// interface to return the battery status to calling applications. -/// -/// This mode is invoked twice. The first invocation has LegacySegment and -/// LegacyOffset set to 0. The mode returns the table address in EFI memory and its size. -/// -/// The second invocation has LegacySegment and LegacyOffset set to the location -/// in the 0xF0000 or 0xE0000 block to which the table is to be copied. The second -/// invocation allows any table address fix ups to occur in the EFI memory copy of the table. -/// The caller, not EfiGetPlatformBinaryOem32Data, copies the modified table to -/// the allocated region in 0xF0000 or 0xE0000 block after the second invocation.. -/// -/// Note: There are two generic mechanisms by which this mode can be used. -/// Mechanism 1: This mode returns the data and the Legacy BIOS Protocol copies -/// the data into the F0000 or E0000 block in the Compatibility16 code. The -/// EFI_COMPATIBILITY16_TABLE entries Oem32Segment and Oem32Offset can -/// be viewed as two UINT16 entries. -/// Mechanism 2: This mode directly fills in the EFI_COMPATIBILITY16_TABLE with -/// a pointer to the INT15 E820 region containing the 32 bit code. It returns -/// EFI_UNSUPPORTED. The EFI_COMPATIBILITY16_TABLE entries, -/// Oem32Segment and Oem32Offset, can be viewed as two UINT16 entries or -/// as a single UINT32 entry as determined by the IBV. -/// -/// The function parameters associated with this mode are: -/// -/// TableSize Size of data. -/// -/// Location Location to place the table. 0x00 or 0xE0000 or 0xF0000 64 KB blocks. -/// Bit 0 = 1 0xF0000 64 KB block. -/// Bit 1 = 1 0xE0000 64 KB block. -/// Multiple bits can be set. -/// -/// Alignment Bit mapped address alignment granularity. -/// The first nonzero bit from the right is the address granularity. -/// -/// LegacySegment Segment in which EfiCompatibility code will place the table or data. -/// -/// LegacyOffset Offset in which EfiCompatibility code will place the table or data. -/// -/// The return values associated with this mode are: -/// EFI_SUCCESS The data was returned successfully. -/// EFI_UNSUPPORTED Oem32 is not supported on this platform. -/// -EfiGetPlatformBinaryOem32Data = 3, + EfiGetPlatformBinaryOem16Data = 2, + /// + /// This mode returns a block of data. The content and usage are IBV defined. OEMs or + /// IBVs normally use this mode for nonstandard Compatibility16 runtime 32 bit routines. It + /// is the responsibility of this routine to coalesce multiple OEM 32 bit functions, if they + /// exist, into one coherent package that is understandable by the Compatibility16 code. + /// + /// Example usage: A legacy mobile BIOS that has a pre existing runtime + /// interface to return the battery status to calling applications. + /// + /// This mode is invoked twice. The first invocation has LegacySegment and + /// LegacyOffset set to 0. The mode returns the table address in EFI memory and its size. + /// + /// The second invocation has LegacySegment and LegacyOffset set to the location + /// in the 0xF0000 or 0xE0000 block to which the table is to be copied. The second + /// invocation allows any table address fix ups to occur in the EFI memory copy of the table. + /// The caller, not EfiGetPlatformBinaryOem32Data, copies the modified table to + /// the allocated region in 0xF0000 or 0xE0000 block after the second invocation.. + /// + /// Note: There are two generic mechanisms by which this mode can be used. + /// Mechanism 1: This mode returns the data and the Legacy BIOS Protocol copies + /// the data into the F0000 or E0000 block in the Compatibility16 code. The + /// EFI_COMPATIBILITY16_TABLE entries Oem32Segment and Oem32Offset can + /// be viewed as two UINT16 entries. + /// Mechanism 2: This mode directly fills in the EFI_COMPATIBILITY16_TABLE with + /// a pointer to the INT15 E820 region containing the 32 bit code. It returns + /// EFI_UNSUPPORTED. The EFI_COMPATIBILITY16_TABLE entries, + /// Oem32Segment and Oem32Offset, can be viewed as two UINT16 entries or + /// as a single UINT32 entry as determined by the IBV. + /// + /// The function parameters associated with this mode are: + /// + /// TableSize Size of data. + /// + /// Location Location to place the table. 0x00 or 0xE0000 or 0xF0000 64 KB blocks. + /// Bit 0 = 1 0xF0000 64 KB block. + /// Bit 1 = 1 0xE0000 64 KB block. + /// Multiple bits can be set. + /// + /// Alignment Bit mapped address alignment granularity. + /// The first nonzero bit from the right is the address granularity. + /// + /// LegacySegment Segment in which EfiCompatibility code will place the table or data. + /// + /// LegacyOffset Offset in which EfiCompatibility code will place the table or data. + /// + /// The return values associated with this mode are: + /// EFI_SUCCESS The data was returned successfully. + /// EFI_UNSUPPORTED Oem32 is not supported on this platform. + /// + EfiGetPlatformBinaryOem32Data = 3, /// /// This mode returns a TPM binary image for the onboard TPM device. /// @@ -226,7 +226,7 @@ EfiGetPlatformBinaryOem32Data = 3, /// /// EFI_NOT_FOUND No BinaryImage was found. /// - EfiGetPlatformBinaryTpmBinary = 4, + EfiGetPlatformBinaryTpmBinary = 4, /// /// The mode finds the Compatibility16 Rom Image. /// @@ -250,7 +250,7 @@ EfiGetPlatformBinaryOem32Data = 3, /// /// EFI_NOT_FOUND ROM not found. /// - EfiGetPlatformBinarySystemRom = 5, + EfiGetPlatformBinarySystemRom = 5, /// /// This mode returns the Base address of PciExpress memory mapped configuration /// address space. @@ -275,9 +275,9 @@ EfiGetPlatformBinaryOem32Data = 3, /// /// EFI_UNSUPPORTED System does not PciExpress. /// - EfiGetPlatformPciExpressBase = 6, + EfiGetPlatformPciExpressBase = 6, /// - EfiGetPlatformPmmSize = 7, + EfiGetPlatformPmmSize = 7, /// EfiGetPlatformEndOpromShadowAddr = 8, /// @@ -301,7 +301,7 @@ typedef enum { /// /// AdditionalData NULL. /// - EfiGetPlatformVgaHandle = 0, + EfiGetPlatformVgaHandle = 0, /// /// This mode returns the Compatibility16 policy for the device that should be the IDE /// controller used during a Compatibility16 boot. @@ -317,7 +317,7 @@ typedef enum { /// AdditionalData Pointer to HddInfo. /// Information about all onboard IDE controllers. /// - EfiGetPlatformIdeHandle = 1, + EfiGetPlatformIdeHandle = 1, /// /// This mode returns the Compatibility16 policy for the device that should be the ISA bus /// controller used during a Compatibility16 boot. @@ -332,7 +332,7 @@ typedef enum { /// /// AdditionalData NULL. /// - EfiGetPlatformIsaBusHandle = 2, + EfiGetPlatformIsaBusHandle = 2, /// /// This mode returns the Compatibility16 policy for the device that should be the USB /// device used during a Compatibility16 boot. @@ -347,7 +347,7 @@ typedef enum { /// /// AdditionalData NULL. /// - EfiGetPlatformUsbHandle = 3 + EfiGetPlatformUsbHandle = 3 } EFI_GET_PLATFORM_HANDLE_MODE; /** @@ -387,7 +387,7 @@ typedef enum { /// /// AdditionalData NULL. /// - EfiPlatformHookShadowServiceRoms= 1, + EfiPlatformHookShadowServiceRoms = 1, /// /// This mode allows platform to perform any required operation after an OpROM has /// completed its initialization. @@ -404,21 +404,21 @@ typedef enum { /// /// AdditionalData NULL. /// - EfiPlatformHookAfterRomInit = 2 + EfiPlatformHookAfterRomInit = 2 } EFI_GET_PLATFORM_HOOK_MODE; /// /// This IRQ has not been assigned to PCI. /// -#define PCI_UNUSED 0x00 +#define PCI_UNUSED 0x00 /// /// This IRQ has been assigned to PCI. /// -#define PCI_USED 0xFF +#define PCI_USED 0xFF /// /// This IRQ has been used by an SIO legacy device and cannot be used by PCI. /// -#define LEGACY_USED 0xFE +#define LEGACY_USED 0xFE #pragma pack(1) @@ -426,7 +426,7 @@ typedef struct { /// /// IRQ for this entry. /// - UINT8 Irq; + UINT8 Irq; /// /// Status of this IRQ. /// @@ -437,103 +437,101 @@ typedef struct { /// LEGACY_USED 0xFE. This IRQ has been used by an SIO legacy /// device and cannot be used by PCI. /// - UINT8 Used; + UINT8 Used; } EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY; // // Define PIR table structures // -#define EFI_LEGACY_PIRQ_TABLE_SIGNATURE SIGNATURE_32 ('$', 'P', 'I', 'R') +#define EFI_LEGACY_PIRQ_TABLE_SIGNATURE SIGNATURE_32 ('$', 'P', 'I', 'R') typedef struct { /// /// $PIR. /// - UINT32 Signature; + UINT32 Signature; /// /// 0x00. /// - UINT8 MinorVersion; + UINT8 MinorVersion; /// /// 0x01 for table version 1.0. /// - UINT8 MajorVersion; + UINT8 MajorVersion; /// /// 0x20 + RoutingTableEntries * 0x10. /// - UINT16 TableSize; + UINT16 TableSize; /// /// PCI interrupt router bus. /// - UINT8 Bus; + UINT8 Bus; /// /// PCI interrupt router device/function. /// - UINT8 DevFun; + UINT8 DevFun; /// /// If nonzero, bit map of IRQs reserved for PCI. /// - UINT16 PciOnlyIrq; + UINT16 PciOnlyIrq; /// /// Vendor ID of a compatible PCI interrupt router. /// - UINT16 CompatibleVid; + UINT16 CompatibleVid; /// /// Device ID of a compatible PCI interrupt router. /// - UINT16 CompatibleDid; + UINT16 CompatibleDid; /// /// If nonzero, a value passed directly to the IRQ miniport's Initialize function. /// - UINT32 Miniport; + UINT32 Miniport; /// /// Reserved for future usage. /// - UINT8 Reserved[11]; + UINT8 Reserved[11]; /// /// This byte plus the sum of all other bytes in the LocalPirqTable equal 0x00. /// - UINT8 Checksum; + UINT8 Checksum; } EFI_LEGACY_PIRQ_TABLE_HEADER; - typedef struct { /// /// If nonzero, a value assigned by the IBV. /// - UINT8 Pirq; + UINT8 Pirq; /// /// If nonzero, the IRQs that can be assigned to this device. /// - UINT16 IrqMask; + UINT16 IrqMask; } EFI_LEGACY_PIRQ_ENTRY; typedef struct { /// /// PCI bus of the entry. /// - UINT8 Bus; + UINT8 Bus; /// /// PCI device of this entry. /// - UINT8 Device; + UINT8 Device; /// /// An IBV value and IRQ mask for PIRQ pins A through D. /// - EFI_LEGACY_PIRQ_ENTRY PirqEntry[4]; + EFI_LEGACY_PIRQ_ENTRY PirqEntry[4]; /// /// If nonzero, the slot number assigned by the board manufacturer. /// - UINT8 Slot; + UINT8 Slot; /// /// Reserved for future use. /// - UINT8 Reserved; + UINT8 Reserved; } EFI_LEGACY_IRQ_ROUTING_ENTRY; #pragma pack() - /** Finds the binary data or other platform information. @@ -725,31 +723,31 @@ struct _EFI_LEGACY_BIOS_PLATFORM_PROTOCOL { /// /// Gets binary data or other platform information. /// - EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO GetPlatformInfo; + EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO GetPlatformInfo; /// /// Returns a buffer of all handles matching the requested subfunction. /// - EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE GetPlatformHandle; + EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE GetPlatformHandle; /// /// Loads and initializes the traditional BIOS SMM handler. - EFI_LEGACY_BIOS_PLATFORM_SMM_INIT SmmInit; + EFI_LEGACY_BIOS_PLATFORM_SMM_INIT SmmInit; /// /// Allows platform to perform any required actions after a LegacyBios operation. /// - EFI_LEGACY_BIOS_PLATFORM_HOOKS PlatformHooks; + EFI_LEGACY_BIOS_PLATFORM_HOOKS PlatformHooks; /// /// Gets $PIR table. - EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE GetRoutingTable; + EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE GetRoutingTable; /// /// Translates the given PIRQ to the final value after traversing any PCI bridges. /// - EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ TranslatePirq; + EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ TranslatePirq; /// /// Final platform function before the system attempts to boot to a traditional OS. /// - EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT PrepareToBoot; + EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT PrepareToBoot; }; -extern EFI_GUID gEfiLegacyBiosPlatformProtocolGuid; +extern EFI_GUID gEfiLegacyBiosPlatformProtocolGuid; #endif diff --git a/OvmfPkg/Csm/Include/Protocol/LegacyInterrupt.h b/OvmfPkg/Csm/Include/Protocol/LegacyInterrupt.h index b3ad2ffb3c..8287ad5b5c 100644 --- a/OvmfPkg/Csm/Include/Protocol/LegacyInterrupt.h +++ b/OvmfPkg/Csm/Include/Protocol/LegacyInterrupt.h @@ -13,7 +13,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #ifndef _EFI_LEGACY_INTERRUPT_H_ #define _EFI_LEGACY_INTERRUPT_H_ - #define EFI_LEGACY_INTERRUPT_PROTOCOL_GUID \ { \ 0x31ce593d, 0x108a, 0x485d, {0xad, 0xb2, 0x78, 0xf2, 0x1f, 0x29, 0x66, 0xbe } \ @@ -99,24 +98,24 @@ struct _EFI_LEGACY_INTERRUPT_PROTOCOL { /// /// Gets the number of PIRQs supported. /// - EFI_LEGACY_INTERRUPT_GET_NUMBER_PIRQS GetNumberPirqs; + EFI_LEGACY_INTERRUPT_GET_NUMBER_PIRQS GetNumberPirqs; /// /// Gets the PCI bus, device, and function that is associated with this protocol. /// - EFI_LEGACY_INTERRUPT_GET_LOCATION GetLocation; + EFI_LEGACY_INTERRUPT_GET_LOCATION GetLocation; /// /// Reads the indicated PIRQ register. /// - EFI_LEGACY_INTERRUPT_READ_PIRQ ReadPirq; + EFI_LEGACY_INTERRUPT_READ_PIRQ ReadPirq; /// /// Writes to the indicated PIRQ register. /// - EFI_LEGACY_INTERRUPT_WRITE_PIRQ WritePirq; + EFI_LEGACY_INTERRUPT_WRITE_PIRQ WritePirq; }; -extern EFI_GUID gEfiLegacyInterruptProtocolGuid; +extern EFI_GUID gEfiLegacyInterruptProtocolGuid; #endif diff --git a/OvmfPkg/Csm/Include/Protocol/VgaMiniPort.h b/OvmfPkg/Csm/Include/Protocol/VgaMiniPort.h index 5071c712ff..fa023a2dfa 100644 --- a/OvmfPkg/Csm/Include/Protocol/VgaMiniPort.h +++ b/OvmfPkg/Csm/Include/Protocol/VgaMiniPort.h @@ -20,7 +20,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent /// /// Forward declaration for the EFI_VGA_MINI_PORT_PROTOCOL. /// -typedef struct _EFI_VGA_MINI_PORT_PROTOCOL EFI_VGA_MINI_PORT_PROTOCOL; +typedef struct _EFI_VGA_MINI_PORT_PROTOCOL EFI_VGA_MINI_PORT_PROTOCOL; /** Sets the text display mode of a VGA controller. @@ -49,40 +49,40 @@ EFI_STATUS ); struct _EFI_VGA_MINI_PORT_PROTOCOL { - EFI_VGA_MINI_PORT_SET_MODE SetMode; + EFI_VGA_MINI_PORT_SET_MODE SetMode; /// /// MMIO base address of the VGA text mode framebuffer. Typically set to 0xB8000. /// - UINT64 VgaMemoryOffset; + UINT64 VgaMemoryOffset; /// /// I/O Port address for the VGA CRTC address register. Typically set to 0x3D4. /// - UINT64 CrtcAddressRegisterOffset; + UINT64 CrtcAddressRegisterOffset; /// /// I/O Port address for the VGA CRTC data register. Typically set to 0x3D5. /// - UINT64 CrtcDataRegisterOffset; + UINT64 CrtcDataRegisterOffset; /// /// PCI Controller MMIO BAR index of the VGA text mode frame buffer. Typically /// set to EFI_PCI_IO_PASS_THROUGH_BAR /// - UINT8 VgaMemoryBar; + UINT8 VgaMemoryBar; /// /// PCI Controller I/O BAR index of the VGA CRTC address register. Typically /// set to EFI_PCI_IO_PASS_THROUGH_BAR /// - UINT8 CrtcAddressRegisterBar; + UINT8 CrtcAddressRegisterBar; /// /// PCI Controller I/O BAR index of the VGA CRTC data register. Typically set /// to EFI_PCI_IO_PASS_THROUGH_BAR /// - UINT8 CrtcDataRegisterBar; + UINT8 CrtcDataRegisterBar; /// /// The maximum number of text modes that this VGA controller supports. /// - UINT8 MaxMode; + UINT8 MaxMode; }; -extern EFI_GUID gEfiVgaMiniPortProtocolGuid; +extern EFI_GUID gEfiVgaMiniPortProtocolGuid; #endif diff --git a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBbs.c b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBbs.c index 5e4c7a249e..cd80720a1d 100644 --- a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBbs.c +++ b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBbs.c @@ -14,13 +14,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // FLOPPY_NOT_PRESENT = No floppy controller present // FLOPPY_PRESENT_NO_MEDIA = Floppy controller present but no media inserted // -#define FLOPPY_NOT_PRESENT 0 -#define FLOPPY_PRESENT_WITH_MEDIA 1 -#define FLOPPY_PRESENT_NO_MEDIA 2 +#define FLOPPY_NOT_PRESENT 0 +#define FLOPPY_PRESENT_WITH_MEDIA 1 +#define FLOPPY_PRESENT_NO_MEDIA 2 -BBS_TABLE *mBbsTable; -BOOLEAN mBbsTableDoneFlag = FALSE; -BOOLEAN IsHaveMediaInFloppy = TRUE; +BBS_TABLE *mBbsTable; +BOOLEAN mBbsTableDoneFlag = FALSE; +BOOLEAN IsHaveMediaInFloppy = TRUE; /** Checks the state of the floppy and if media is inserted. @@ -44,23 +44,23 @@ HasMediaInFloppy ( VOID ) { - EFI_STATUS Status; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN Index; - EFI_ISA_IO_PROTOCOL *IsaIo; - EFI_BLOCK_IO_PROTOCOL *BlkIo; + EFI_STATUS Status; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + UINTN Index; + EFI_ISA_IO_PROTOCOL *IsaIo; + EFI_BLOCK_IO_PROTOCOL *BlkIo; - HandleBuffer = NULL; - HandleCount = 0; + HandleBuffer = NULL; + HandleCount = 0; gBS->LocateHandleBuffer ( - ByProtocol, - &gEfiIsaIoProtocolGuid, - NULL, - &HandleCount, - &HandleBuffer - ); + ByProtocol, + &gEfiIsaIoProtocolGuid, + NULL, + &HandleCount, + &HandleBuffer + ); // // If don't find any ISA/IO protocol assume no floppy. Need for floppy @@ -76,7 +76,7 @@ HasMediaInFloppy ( Status = gBS->HandleProtocol ( HandleBuffer[Index], &gEfiIsaIoProtocolGuid, - (VOID **) &IsaIo + (VOID **)&IsaIo ); if (EFI_ERROR (Status)) { continue; @@ -85,6 +85,7 @@ HasMediaInFloppy ( if (IsaIo->ResourceList->Device.HID != EISA_PNP_ID (0x604)) { continue; } + // // Update blockio in case the floppy is inserted in during BdsTimeout // @@ -103,7 +104,7 @@ HasMediaInFloppy ( Status = gBS->HandleProtocol ( HandleBuffer[Index], &gEfiBlockIoProtocolGuid, - (VOID **) &BlkIo + (VOID **)&BlkIo ); if (EFI_ERROR (Status)) { continue; @@ -121,10 +122,8 @@ HasMediaInFloppy ( FreePool (HandleBuffer); return FLOPPY_NOT_PRESENT; - } - /** Complete build of BBS TABLE. @@ -136,8 +135,8 @@ HasMediaInFloppy ( **/ EFI_STATUS LegacyBiosBuildBbs ( - IN LEGACY_BIOS_INSTANCE *Private, - IN BBS_TABLE *BbsTable + IN LEGACY_BIOS_INSTANCE *Private, + IN BBS_TABLE *BbsTable ) { UINTN BbsIndex; @@ -172,18 +171,18 @@ LegacyBiosBuildBbs ( } } - BbsTable[0].Bus = 0xff; - BbsTable[0].Device = 0xff; - BbsTable[0].Function = 0xff; - BbsTable[0].DeviceType = BBS_FLOPPY; - BbsTable[0].Class = 01; - BbsTable[0].SubClass = 02; - BbsTable[0].StatusFlags.OldPosition = 0; - BbsTable[0].StatusFlags.Reserved1 = 0; - BbsTable[0].StatusFlags.Enabled = 0; - BbsTable[0].StatusFlags.Failed = 0; - BbsTable[0].StatusFlags.MediaPresent = 0; - BbsTable[0].StatusFlags.Reserved2 = 0; + BbsTable[0].Bus = 0xff; + BbsTable[0].Device = 0xff; + BbsTable[0].Function = 0xff; + BbsTable[0].DeviceType = BBS_FLOPPY; + BbsTable[0].Class = 01; + BbsTable[0].SubClass = 02; + BbsTable[0].StatusFlags.OldPosition = 0; + BbsTable[0].StatusFlags.Reserved1 = 0; + BbsTable[0].StatusFlags.Enabled = 0; + BbsTable[0].StatusFlags.Failed = 0; + BbsTable[0].StatusFlags.MediaPresent = 0; + BbsTable[0].StatusFlags.Reserved2 = 0; // // Onboard HDD - Note Each HDD controller controls 2 drives @@ -196,10 +195,8 @@ LegacyBiosBuildBbs ( LegacyBiosBuildIdeData (Private, &HddInfo, 0); for (HddIndex = 0; HddIndex < MAX_IDE_CONTROLLER; HddIndex++) { - BbsIndex = HddIndex * 2 + 1; for (Index = 0; Index < 2; ++Index) { - BbsTable[BbsIndex + Index].Bus = HddInfo[HddIndex].Bus; BbsTable[BbsIndex + Index].Device = HddInfo[HddIndex].Device; BbsTable[BbsIndex + Index].Function = HddInfo[HddIndex].Function; @@ -286,7 +283,7 @@ LegacyBiosBuildBbs ( Status = gBS->HandleProtocol ( BlockIoHandles[BlockIndex], &gEfiBlockIoProtocolGuid, - (VOID **) &BlkIo + (VOID **)&BlkIo ); if (EFI_ERROR (Status)) { @@ -313,7 +310,7 @@ LegacyBiosBuildBbs ( Status = gBS->HandleProtocol ( BlockIoHandles[BlockIndex], &gEfiDevicePathProtocolGuid, - (VOID **) &DevicePath + (VOID **)&DevicePath ); if (EFI_ERROR (Status)) { continue; @@ -324,14 +321,17 @@ LegacyBiosBuildBbs ( // DevicePathNode = DevicePath; while (!IsDevicePathEnd (DevicePathNode)) { - if (DevicePathType (DevicePathNode) == MESSAGING_DEVICE_PATH && - DevicePathSubType (DevicePathNode) == MSG_ATAPI_DP) { + if ((DevicePathType (DevicePathNode) == MESSAGING_DEVICE_PATH) && + (DevicePathSubType (DevicePathNode) == MSG_ATAPI_DP)) + { break; } + DevicePathNode = NextDevicePathNode (DevicePathNode); } + if (!IsDevicePathEnd (DevicePathNode)) { - continue; + continue; } // @@ -349,7 +349,7 @@ LegacyBiosBuildBbs ( Status = gBS->HandleProtocol ( PciHandle, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); if (EFI_ERROR (Status)) { continue; @@ -367,13 +367,21 @@ LegacyBiosBuildBbs ( } if (SegNum != 0) { - DEBUG ((DEBUG_WARN, "CSM cannot use PCI devices in segment %Lu\n", - (UINT64) SegNum)); + DEBUG (( + DEBUG_WARN, + "CSM cannot use PCI devices in segment %Lu\n", + (UINT64)SegNum + )); continue; } - DEBUG ((DEBUG_INFO, "Add Legacy Bbs entry for PCI %d/%d/%d\n", - BusNum, DevNum, FuncNum)); + DEBUG (( + DEBUG_INFO, + "Add Legacy Bbs entry for PCI %d/%d/%d\n", + BusNum, + DevNum, + FuncNum + )); BbsTable[BbsIndex].Bus = BusNum; BbsTable[BbsIndex].Device = DevNum; @@ -403,7 +411,6 @@ LegacyBiosBuildBbs ( return EFI_SUCCESS; } - /** Get all BBS info @@ -421,30 +428,30 @@ LegacyBiosBuildBbs ( EFI_STATUS EFIAPI LegacyBiosGetBbsInfo ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - OUT UINT16 *HddCount, - OUT HDD_INFO **HddInfo, - OUT UINT16 *BbsCount, - OUT BBS_TABLE **BbsTable + IN EFI_LEGACY_BIOS_PROTOCOL *This, + OUT UINT16 *HddCount, + OUT HDD_INFO **HddInfo, + OUT UINT16 *BbsCount, + OUT BBS_TABLE **BbsTable ) { - LEGACY_BIOS_INSTANCE *Private; - EFI_IA32_REGISTER_SET Regs; - EFI_TO_COMPATIBILITY16_BOOT_TABLE *EfiToLegacy16BootTable; -// HDD_INFO *LocalHddInfo; -// IN BBS_TABLE *LocalBbsTable; - UINTN NumHandles; - EFI_HANDLE *HandleBuffer; - UINTN Index; - UINTN TempData; - UINT32 Granularity; - - HandleBuffer = NULL; - - Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); - EfiToLegacy16BootTable = &Private->IntThunk->EfiToLegacy16BootTable; -// LocalHddInfo = EfiToLegacy16BootTable->HddInfo; -// LocalBbsTable = (BBS_TABLE*)(UINTN)EfiToLegacy16BootTable->BbsTable; + LEGACY_BIOS_INSTANCE *Private; + EFI_IA32_REGISTER_SET Regs; + EFI_TO_COMPATIBILITY16_BOOT_TABLE *EfiToLegacy16BootTable; + // HDD_INFO *LocalHddInfo; + // IN BBS_TABLE *LocalBbsTable; + UINTN NumHandles; + EFI_HANDLE *HandleBuffer; + UINTN Index; + UINTN TempData; + UINT32 Granularity; + + HandleBuffer = NULL; + + Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); + EfiToLegacy16BootTable = &Private->IntThunk->EfiToLegacy16BootTable; + // LocalHddInfo = EfiToLegacy16BootTable->HddInfo; + // LocalBbsTable = (BBS_TABLE*)(UINTN)EfiToLegacy16BootTable->BbsTable; if (!mBbsTableDoneFlag) { mBbsTable = Private->BbsTablePtr; @@ -457,12 +464,12 @@ LegacyBiosGetBbsInfo ( // Get PciRootBridgeIO protocol // gBS->LocateHandleBuffer ( - ByProtocol, - &gEfiPciRootBridgeIoProtocolGuid, - NULL, - &NumHandles, - &HandleBuffer - ); + ByProtocol, + &gEfiPciRootBridgeIoProtocolGuid, + NULL, + &NumHandles, + &HandleBuffer + ); if (NumHandles == 0) { return EFI_NOT_FOUND; @@ -475,7 +482,6 @@ LegacyBiosGetBbsInfo ( // PCI bus driver enumerate all subsequent handles // gBS->ConnectController (HandleBuffer[Index], NULL, NULL, FALSE); - } LegacyBiosBuildBbs (Private, mBbsTable); @@ -491,18 +497,18 @@ LegacyBiosGetBbsInfo ( // // Pass in handoff data // - TempData = (UINTN) EfiToLegacy16BootTable; - Regs.X.ES = NORMALIZE_EFI_SEGMENT ((UINT32) TempData); - Regs.X.BX = NORMALIZE_EFI_OFFSET ((UINT32) TempData); + TempData = (UINTN)EfiToLegacy16BootTable; + Regs.X.ES = NORMALIZE_EFI_SEGMENT ((UINT32)TempData); + Regs.X.BX = NORMALIZE_EFI_OFFSET ((UINT32)TempData); Private->LegacyBios.FarCall86 ( - This, - Private->Legacy16CallSegment, - Private->Legacy16CallOffset, - &Regs, - NULL, - 0 - ); + This, + Private->Legacy16CallSegment, + Private->Legacy16CallOffset, + &Regs, + NULL, + 0 + ); Private->Cpu->FlushDataCache (Private->Cpu, 0xE0000, 0x20000, EfiCpuFlushTypeWriteBackInvalidate); Private->LegacyRegion->Lock (Private->LegacyRegion, 0xe0000, 0x20000, &Granularity); @@ -518,7 +524,7 @@ LegacyBiosGetBbsInfo ( *HddCount = MAX_IDE_CONTROLLER; *HddInfo = EfiToLegacy16BootTable->HddInfo; - *BbsTable = (BBS_TABLE*)(UINTN)EfiToLegacy16BootTable->BbsTable; - *BbsCount = (UINT16) (sizeof (Private->IntThunk->BbsTable) / sizeof (BBS_TABLE)); + *BbsTable = (BBS_TABLE *)(UINTN)EfiToLegacy16BootTable->BbsTable; + *BbsCount = (UINT16)(sizeof (Private->IntThunk->BbsTable) / sizeof (BBS_TABLE)); return EFI_SUCCESS; } diff --git a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBda.c b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBda.c index aa6e07ab91..a873015d06 100644 --- a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBda.c +++ b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBda.c @@ -21,25 +21,25 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ EFI_STATUS LegacyBiosInitBda ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ) { - BDA_STRUC *Bda; - UINT8 *Ebda; + BDA_STRUC *Bda; + UINT8 *Ebda; - Bda = (BDA_STRUC *) ((UINTN) 0x400); - Ebda = (UINT8 *) ((UINTN) 0x9fc00); + Bda = (BDA_STRUC *)((UINTN)0x400); + Ebda = (UINT8 *)((UINTN)0x9fc00); ACCESS_PAGE0_CODE ( ZeroMem (Bda, 0x100); // // 640k-1k for EBDA // - Bda->MemSize = 0x27f; - Bda->KeyHead = 0x1e; - Bda->KeyTail = 0x1e; - Bda->FloppyData = 0x00; - Bda->FloppyTimeout = 0xff; + Bda->MemSize = 0x27f; + Bda->KeyHead = 0x1e; + Bda->KeyTail = 0x1e; + Bda->FloppyData = 0x00; + Bda->FloppyTimeout = 0xff; Bda->KeyStart = 0x001E; Bda->KeyEnd = 0x003E; @@ -50,10 +50,10 @@ LegacyBiosInitBda ( // Move LPT time out here and zero out LPT4 since some SCSI OPROMS // use this as scratch pad (LPT4 is Reserved) // - Bda->Lpt1_2Timeout = 0x1414; - Bda->Lpt3_4Timeout = 0x1400; + Bda->Lpt1_2Timeout = 0x1414; + Bda->Lpt3_4Timeout = 0x1400; - ); + ); ZeroMem (Ebda, 0x400); *Ebda = 0x01; diff --git a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c index 3ce19496b0..d587b55e3b 100644 --- a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c +++ b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBios.c @@ -13,7 +13,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // // define maximum number of HDD system supports // -#define MAX_HDD_ENTRIES 0x30 +#define MAX_HDD_ENTRIES 0x30 // // Module Global: @@ -25,7 +25,7 @@ LEGACY_BIOS_INSTANCE mPrivateData; // // The SMBIOS table in EfiRuntimeServicesData memory // -VOID *mRuntimeSmbiosEntryPoint = NULL; +VOID *mRuntimeSmbiosEntryPoint = NULL; // // The SMBIOS table in EfiReservedMemoryType memory @@ -50,27 +50,27 @@ BOOLEAN mEndOfDxe = FALSE; **/ EFI_STATUS AllocateLegacyMemory ( - IN EFI_ALLOCATE_TYPE AllocateType, - IN EFI_MEMORY_TYPE MemoryType, - IN EFI_PHYSICAL_ADDRESS StartPageAddress, - IN UINTN Pages, - OUT EFI_PHYSICAL_ADDRESS *Result + IN EFI_ALLOCATE_TYPE AllocateType, + IN EFI_MEMORY_TYPE MemoryType, + IN EFI_PHYSICAL_ADDRESS StartPageAddress, + IN UINTN Pages, + OUT EFI_PHYSICAL_ADDRESS *Result ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS MemPage; - EFI_GCD_MEMORY_SPACE_DESCRIPTOR MemDesc; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS MemPage; + EFI_GCD_MEMORY_SPACE_DESCRIPTOR MemDesc; // // Allocate Pages of memory less <= StartPageAddress // - MemPage = (EFI_PHYSICAL_ADDRESS) (UINTN) StartPageAddress; - Status = gBS->AllocatePages ( - AllocateType, - MemoryType, - Pages, - &MemPage - ); + MemPage = (EFI_PHYSICAL_ADDRESS)(UINTN)StartPageAddress; + Status = gBS->AllocatePages ( + AllocateType, + MemoryType, + Pages, + &MemPage + ); // // Do not ASSERT on Status error but let caller decide since some cases // memory is already taken but that is ok. @@ -81,13 +81,14 @@ AllocateLegacyMemory ( // Make sure that the buffer can be used to store code. // Status = gDS->GetMemorySpaceDescriptor (MemPage, &MemDesc); - if (!EFI_ERROR (Status) && (MemDesc.Attributes & EFI_MEMORY_XP) != 0) { + if (!EFI_ERROR (Status) && ((MemDesc.Attributes & EFI_MEMORY_XP) != 0)) { Status = gDS->SetMemorySpaceAttributes ( MemPage, EFI_PAGES_TO_SIZE (Pages), MemDesc.Attributes & (~EFI_MEMORY_XP) ); } + if (EFI_ERROR (Status)) { gBS->FreePages (MemPage, Pages); } @@ -95,13 +96,12 @@ AllocateLegacyMemory ( } if (!EFI_ERROR (Status)) { - *Result = (EFI_PHYSICAL_ADDRESS) (UINTN) MemPage; + *Result = (EFI_PHYSICAL_ADDRESS)(UINTN)MemPage; } return Status; } - /** This function is called when EFI needs to reserve an area in the 0xE0000 or 0xF0000 64 KB blocks. @@ -126,39 +126,38 @@ AllocateLegacyMemory ( EFI_STATUS EFIAPI LegacyBiosGetLegacyRegion ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN UINTN LegacyMemorySize, - IN UINTN Region, - IN UINTN Alignment, - OUT VOID **LegacyMemoryAddress + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN UINTN LegacyMemorySize, + IN UINTN Region, + IN UINTN Alignment, + OUT VOID **LegacyMemoryAddress ) { - - LEGACY_BIOS_INSTANCE *Private; - EFI_IA32_REGISTER_SET Regs; - EFI_STATUS Status; - UINT32 Granularity; + LEGACY_BIOS_INSTANCE *Private; + EFI_IA32_REGISTER_SET Regs; + EFI_STATUS Status; + UINT32 Granularity; Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); Private->LegacyRegion->UnLock (Private->LegacyRegion, 0xE0000, 0x20000, &Granularity); ZeroMem (&Regs, sizeof (EFI_IA32_REGISTER_SET)); Regs.X.AX = Legacy16GetTableAddress; - Regs.X.BX = (UINT16) Region; - Regs.X.CX = (UINT16) LegacyMemorySize; - Regs.X.DX = (UINT16) Alignment; + Regs.X.BX = (UINT16)Region; + Regs.X.CX = (UINT16)LegacyMemorySize; + Regs.X.DX = (UINT16)Alignment; Private->LegacyBios.FarCall86 ( - &Private->LegacyBios, - Private->Legacy16CallSegment, - Private->Legacy16CallOffset, - &Regs, - NULL, - 0 - ); + &Private->LegacyBios, + Private->Legacy16CallSegment, + Private->Legacy16CallOffset, + &Regs, + NULL, + 0 + ); if (Regs.X.AX == 0) { - *LegacyMemoryAddress = (VOID *) (((UINTN) Regs.X.DS << 4) + Regs.X.BX); - Status = EFI_SUCCESS; + *LegacyMemoryAddress = (VOID *)(((UINTN)Regs.X.DS << 4) + Regs.X.BX); + Status = EFI_SUCCESS; } else { Status = EFI_OUT_OF_RESOURCES; } @@ -169,7 +168,6 @@ LegacyBiosGetLegacyRegion ( return Status; } - /** This function is called when copying data to the region assigned by EFI_LEGACY_BIOS_PROTOCOL.GetLegacyRegion(). @@ -187,21 +185,22 @@ LegacyBiosGetLegacyRegion ( EFI_STATUS EFIAPI LegacyBiosCopyLegacyRegion ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN UINTN LegacyMemorySize, - IN VOID *LegacyMemoryAddress, - IN VOID *LegacyMemorySourceAddress + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN UINTN LegacyMemorySize, + IN VOID *LegacyMemoryAddress, + IN VOID *LegacyMemorySourceAddress ) { - LEGACY_BIOS_INSTANCE *Private; UINT32 Granularity; - if ((LegacyMemoryAddress < (VOID *)(UINTN)0xE0000 ) || - ((UINTN) LegacyMemoryAddress + LegacyMemorySize > (UINTN) 0x100000) - ) { + if ((LegacyMemoryAddress < (VOID *)(UINTN)0xE0000) || + ((UINTN)LegacyMemoryAddress + LegacyMemorySize > (UINTN)0x100000) + ) + { return EFI_ACCESS_DENIED; } + // // There is no protection from writes over lapping if this function is // called multiple times. @@ -216,7 +215,6 @@ LegacyBiosCopyLegacyRegion ( return EFI_SUCCESS; } - /** Find Legacy16 BIOS image in the FLASH device and shadow it into memory. Find the $EFI table in the shadow area. Thunk into the Legacy16 code after it had @@ -233,33 +231,33 @@ ShadowAndStartLegacy16 ( IN LEGACY_BIOS_INSTANCE *Private ) { - EFI_STATUS Status; - UINT8 *Ptr; - UINT8 *PtrEnd; - BOOLEAN Done; - EFI_COMPATIBILITY16_TABLE *Table; - UINT8 CheckSum; - EFI_IA32_REGISTER_SET Regs; - EFI_TO_COMPATIBILITY16_INIT_TABLE *EfiToLegacy16InitTable; - EFI_TO_COMPATIBILITY16_BOOT_TABLE *EfiToLegacy16BootTable; - VOID *LegacyBiosImage; - UINTN LegacyBiosImageSize; - UINTN E820Size; - UINT32 *ClearPtr; - BBS_TABLE *BbsTable; - LEGACY_EFI_HDD_TABLE *LegacyEfiHddTable; - UINTN Index; - UINT32 TpmPointer; - VOID *TpmBinaryImage; - UINTN TpmBinaryImageSize; - UINTN Location; - UINTN Alignment; - UINTN TempData; - EFI_PHYSICAL_ADDRESS Address; - UINT16 OldMask; - UINT16 NewMask; - UINT32 Granularity; - EFI_GCD_MEMORY_SPACE_DESCRIPTOR Descriptor; + EFI_STATUS Status; + UINT8 *Ptr; + UINT8 *PtrEnd; + BOOLEAN Done; + EFI_COMPATIBILITY16_TABLE *Table; + UINT8 CheckSum; + EFI_IA32_REGISTER_SET Regs; + EFI_TO_COMPATIBILITY16_INIT_TABLE *EfiToLegacy16InitTable; + EFI_TO_COMPATIBILITY16_BOOT_TABLE *EfiToLegacy16BootTable; + VOID *LegacyBiosImage; + UINTN LegacyBiosImageSize; + UINTN E820Size; + UINT32 *ClearPtr; + BBS_TABLE *BbsTable; + LEGACY_EFI_HDD_TABLE *LegacyEfiHddTable; + UINTN Index; + UINT32 TpmPointer; + VOID *TpmBinaryImage; + UINTN TpmBinaryImageSize; + UINTN Location; + UINTN Alignment; + UINTN TempData; + EFI_PHYSICAL_ADDRESS Address; + UINT16 OldMask; + UINT16 NewMask; + UINT32 Granularity; + EFI_GCD_MEMORY_SPACE_DESCRIPTOR Descriptor; Location = 0; Alignment = 0; @@ -300,23 +298,23 @@ ShadowAndStartLegacy16 ( // end testtest // EfiToLegacy16BootTable = &Private->IntThunk->EfiToLegacy16BootTable; - Status = Private->LegacyBiosPlatform->GetPlatformInfo ( - Private->LegacyBiosPlatform, - EfiGetPlatformBinarySystemRom, - &LegacyBiosImage, - &LegacyBiosImageSize, - &Location, - &Alignment, - 0, - 0 - ); + Status = Private->LegacyBiosPlatform->GetPlatformInfo ( + Private->LegacyBiosPlatform, + EfiGetPlatformBinarySystemRom, + &LegacyBiosImage, + &LegacyBiosImageSize, + &Location, + &Alignment, + 0, + 0 + ); if (EFI_ERROR (Status)) { return Status; } - Private->BiosStart = (UINT32) (0x100000 - LegacyBiosImageSize); - Private->OptionRom = 0xc0000; - Private->LegacyBiosImageSize = (UINT32) LegacyBiosImageSize; + Private->BiosStart = (UINT32)(0x100000 - LegacyBiosImageSize); + Private->OptionRom = 0xc0000; + Private->LegacyBiosImageSize = (UINT32)LegacyBiosImageSize; // // Can only shadow into memory allocated for legacy usage. @@ -328,20 +326,20 @@ ShadowAndStartLegacy16 ( // Private->LegacyRegion->UnLock (Private->LegacyRegion, 0xc0000, 0x40000, &Granularity); - ClearPtr = (VOID *) ((UINTN) 0xc0000); + ClearPtr = (VOID *)((UINTN)0xc0000); // // Initialize region from 0xc0000 to start of BIOS to all ffs. This allows unused // regions to be used by EMM386 etc. // - SetMem ((VOID *) ClearPtr, (UINTN) (0x40000 - LegacyBiosImageSize), 0xff); + SetMem ((VOID *)ClearPtr, (UINTN)(0x40000 - LegacyBiosImageSize), 0xff); TempData = Private->BiosStart; CopyMem ( - (VOID *) TempData, + (VOID *)TempData, LegacyBiosImage, - (UINTN) LegacyBiosImageSize + (UINTN)LegacyBiosImageSize ); Private->Cpu->FlushDataCache (Private->Cpu, 0xc0000, 0x40000, EfiCpuFlushTypeWriteBackInvalidate); @@ -351,12 +349,12 @@ ShadowAndStartLegacy16 ( // Done = FALSE; Table = NULL; - for (Ptr = (UINT8 *) TempData; Ptr < (UINT8 *) ((UINTN) 0x100000) && !Done; Ptr += 0x10) { - if (*(UINT32 *) Ptr == SIGNATURE_32 ('I', 'F', 'E', '$')) { - Table = (EFI_COMPATIBILITY16_TABLE *) Ptr; - PtrEnd = Ptr + Table->TableLength; + for (Ptr = (UINT8 *)TempData; Ptr < (UINT8 *)((UINTN)0x100000) && !Done; Ptr += 0x10) { + if (*(UINT32 *)Ptr == SIGNATURE_32 ('I', 'F', 'E', '$')) { + Table = (EFI_COMPATIBILITY16_TABLE *)Ptr; + PtrEnd = Ptr + Table->TableLength; for (CheckSum = 0; Ptr < PtrEnd; Ptr++) { - CheckSum = (UINT8) (CheckSum +*Ptr); + CheckSum = (UINT8)(CheckSum +*Ptr); } Done = TRUE; @@ -378,24 +376,24 @@ ShadowAndStartLegacy16 ( // // Remember location of the Legacy16 table // - Private->Legacy16Table = Table; - Private->Legacy16CallSegment = Table->Compatibility16CallSegment; - Private->Legacy16CallOffset = Table->Compatibility16CallOffset; - EfiToLegacy16InitTable = &Private->IntThunk->EfiToLegacy16InitTable; - Private->Legacy16InitPtr = EfiToLegacy16InitTable; - Private->Legacy16BootPtr = &Private->IntThunk->EfiToLegacy16BootTable; - Private->InternalIrqRoutingTable = NULL; - Private->NumberIrqRoutingEntries = 0; - Private->BbsTablePtr = NULL; - Private->LegacyEfiHddTable = NULL; - Private->DiskEnd = 0; - Private->Disk4075 = 0; - Private->HddTablePtr = &Private->IntThunk->EfiToLegacy16BootTable.HddInfo; - Private->NumberHddControllers = MAX_IDE_CONTROLLER; - Private->Dump[0] = 'D'; - Private->Dump[1] = 'U'; - Private->Dump[2] = 'M'; - Private->Dump[3] = 'P'; + Private->Legacy16Table = Table; + Private->Legacy16CallSegment = Table->Compatibility16CallSegment; + Private->Legacy16CallOffset = Table->Compatibility16CallOffset; + EfiToLegacy16InitTable = &Private->IntThunk->EfiToLegacy16InitTable; + Private->Legacy16InitPtr = EfiToLegacy16InitTable; + Private->Legacy16BootPtr = &Private->IntThunk->EfiToLegacy16BootTable; + Private->InternalIrqRoutingTable = NULL; + Private->NumberIrqRoutingEntries = 0; + Private->BbsTablePtr = NULL; + Private->LegacyEfiHddTable = NULL; + Private->DiskEnd = 0; + Private->Disk4075 = 0; + Private->HddTablePtr = &Private->IntThunk->EfiToLegacy16BootTable.HddInfo; + Private->NumberHddControllers = MAX_IDE_CONTROLLER; + Private->Dump[0] = 'D'; + Private->Dump[1] = 'U'; + Private->Dump[2] = 'M'; + Private->Dump[3] = 'P'; ZeroMem ( Private->Legacy16BootPtr, @@ -405,7 +403,7 @@ ShadowAndStartLegacy16 ( // // Store away a copy of the EFI System Table // - Table->EfiSystemTable = (UINT32) (UINTN) gST; + Table->EfiSystemTable = (UINT32)(UINTN)gST; // // IPF CSM integration -Bug @@ -423,31 +421,31 @@ ShadowAndStartLegacy16 ( // // All legacy interrupt should be masked when do initialization work from legacy 16 code. // - Private->Legacy8259->GetMask(Private->Legacy8259, &OldMask, NULL, NULL, NULL); + Private->Legacy8259->GetMask (Private->Legacy8259, &OldMask, NULL, NULL, NULL); NewMask = 0xFFFF; - Private->Legacy8259->SetMask(Private->Legacy8259, &NewMask, NULL, NULL, NULL); + Private->Legacy8259->SetMask (Private->Legacy8259, &NewMask, NULL, NULL, NULL); // // Call into Legacy16 code to do an INIT // ZeroMem (&Regs, sizeof (EFI_IA32_REGISTER_SET)); Regs.X.AX = Legacy16InitializeYourself; - Regs.X.ES = EFI_SEGMENT (*((UINT32 *) &EfiToLegacy16InitTable)); - Regs.X.BX = EFI_OFFSET (*((UINT32 *) &EfiToLegacy16InitTable)); + Regs.X.ES = EFI_SEGMENT (*((UINT32 *)&EfiToLegacy16InitTable)); + Regs.X.BX = EFI_OFFSET (*((UINT32 *)&EfiToLegacy16InitTable)); Private->LegacyBios.FarCall86 ( - &Private->LegacyBios, - Table->Compatibility16CallSegment, - Table->Compatibility16CallOffset, - &Regs, - NULL, - 0 - ); + &Private->LegacyBios, + Table->Compatibility16CallSegment, + Table->Compatibility16CallOffset, + &Regs, + NULL, + 0 + ); // // Restore original legacy interrupt mask value // - Private->Legacy8259->SetMask(Private->Legacy8259, &OldMask, NULL, NULL, NULL); + Private->Legacy8259->SetMask (Private->Legacy8259, &OldMask, NULL, NULL, NULL); if (Regs.X.AX != 0) { return EFI_DEVICE_ERROR; @@ -469,30 +467,31 @@ ShadowAndStartLegacy16 ( // ZeroMem (&Regs, sizeof (EFI_IA32_REGISTER_SET)); Regs.X.AX = Legacy16GetTableAddress; - Regs.X.CX = (UINT16) E820Size; + Regs.X.CX = (UINT16)E820Size; Regs.X.DX = 1; Private->LegacyBios.FarCall86 ( - &Private->LegacyBios, - Table->Compatibility16CallSegment, - Table->Compatibility16CallOffset, - &Regs, - NULL, - 0 - ); + &Private->LegacyBios, + Table->Compatibility16CallSegment, + Table->Compatibility16CallOffset, + &Regs, + NULL, + 0 + ); - Table->E820Pointer = (UINT32) (Regs.X.DS * 16 + Regs.X.BX); - Table->E820Length = (UINT32) E820Size; + Table->E820Pointer = (UINT32)(Regs.X.DS * 16 + Regs.X.BX); + Table->E820Length = (UINT32)E820Size; if (Regs.X.AX != 0) { DEBUG ((DEBUG_ERROR, "Legacy16 E820 length insufficient\n")); } else { TempData = Table->E820Pointer; - CopyMem ((VOID *) TempData, Private->E820Table, E820Size); + CopyMem ((VOID *)TempData, Private->E820Table, E820Size); } + // // Get PnPInstallationCheck Info. // - Private->PnPInstallationCheckSegment = Table->PnPInstallationCheckSegment; - Private->PnPInstallationCheckOffset = Table->PnPInstallationCheckOffset; + Private->PnPInstallationCheckSegment = Table->PnPInstallationCheckSegment; + Private->PnPInstallationCheckOffset = Table->PnPInstallationCheckOffset; // // Check if PCI Express is supported. If yes, Save base address. @@ -508,9 +507,10 @@ ShadowAndStartLegacy16 ( 0 ); if (!EFI_ERROR (Status)) { - Private->Legacy16Table->PciExpressBase = (UINT32)Location; - Location = 0; + Private->Legacy16Table->PciExpressBase = (UINT32)Location; + Location = 0; } + // // Check if TPM is supported. If yes get a region in E0000,F0000 to copy it // into, copy it and update pointer to binary image. This needs to be @@ -527,35 +527,34 @@ ShadowAndStartLegacy16 ( 0 ); if (!EFI_ERROR (Status)) { - ZeroMem (&Regs, sizeof (EFI_IA32_REGISTER_SET)); Regs.X.AX = Legacy16GetTableAddress; - Regs.X.CX = (UINT16) TpmBinaryImageSize; + Regs.X.CX = (UINT16)TpmBinaryImageSize; Regs.X.DX = 1; Private->LegacyBios.FarCall86 ( - &Private->LegacyBios, - Table->Compatibility16CallSegment, - Table->Compatibility16CallOffset, - &Regs, - NULL, - 0 - ); - - TpmPointer = (UINT32) (Regs.X.DS * 16 + Regs.X.BX); + &Private->LegacyBios, + Table->Compatibility16CallSegment, + Table->Compatibility16CallOffset, + &Regs, + NULL, + 0 + ); + + TpmPointer = (UINT32)(Regs.X.DS * 16 + Regs.X.BX); if (Regs.X.AX != 0) { DEBUG ((DEBUG_ERROR, "TPM cannot be loaded\n")); } else { - CopyMem ((VOID *) (UINTN)TpmPointer, TpmBinaryImage, TpmBinaryImageSize); + CopyMem ((VOID *)(UINTN)TpmPointer, TpmBinaryImage, TpmBinaryImageSize); Table->TpmSegment = Regs.X.DS; Table->TpmOffset = Regs.X.BX; - } } + // // Lock the Legacy BIOS region // - Private->Cpu->FlushDataCache (Private->Cpu, Private->BiosStart, (UINT32) LegacyBiosImageSize, EfiCpuFlushTypeWriteBackInvalidate); - Private->LegacyRegion->Lock (Private->LegacyRegion, Private->BiosStart, (UINT32) LegacyBiosImageSize, &Granularity); + Private->Cpu->FlushDataCache (Private->Cpu, Private->BiosStart, (UINT32)LegacyBiosImageSize, EfiCpuFlushTypeWriteBackInvalidate); + Private->LegacyRegion->Lock (Private->LegacyRegion, Private->BiosStart, (UINT32)LegacyBiosImageSize, &Granularity); // // Get the BbsTable from LOW_MEMORY_THUNK @@ -563,8 +562,8 @@ ShadowAndStartLegacy16 ( BbsTable = (BBS_TABLE *)(UINTN)Private->IntThunk->BbsTable; ZeroMem ((VOID *)BbsTable, sizeof (Private->IntThunk->BbsTable)); - EfiToLegacy16BootTable->BbsTable = (UINT32)(UINTN)BbsTable; - Private->BbsTablePtr = (VOID *) BbsTable; + EfiToLegacy16BootTable->BbsTable = (UINT32)(UINTN)BbsTable; + Private->BbsTablePtr = (VOID *)BbsTable; // // Populate entire table with BBS_IGNORE_ENTRY @@ -574,10 +573,11 @@ ShadowAndStartLegacy16 ( for (Index = 0; Index < MAX_BBS_ENTRIES; Index++) { BbsTable[Index].BootPriority = BBS_IGNORE_ENTRY; } + // // Allocate space for Legacy HDD table // - LegacyEfiHddTable = (LEGACY_EFI_HDD_TABLE *) AllocateZeroPool ((UINTN) MAX_HDD_ENTRIES * sizeof (LEGACY_EFI_HDD_TABLE)); + LegacyEfiHddTable = (LEGACY_EFI_HDD_TABLE *)AllocateZeroPool ((UINTN)MAX_HDD_ENTRIES * sizeof (LEGACY_EFI_HDD_TABLE)); ASSERT (LegacyEfiHddTable); Private->LegacyEfiHddTable = LegacyEfiHddTable; @@ -612,7 +612,7 @@ ShadowAndStartLegacy16 ( EFI_STATUS EFIAPI LegacyBiosShadowAllLegacyOproms ( - IN EFI_LEGACY_BIOS_PROTOCOL *This + IN EFI_LEGACY_BIOS_PROTOCOL *This ) { LEGACY_BIOS_INSTANCE *Private; @@ -657,16 +657,16 @@ LegacyBiosShadowAllLegacyOproms ( **/ UINT16 GetPciInterfaceVersion ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ) { - EFI_IA32_REGISTER_SET Reg; - BOOLEAN ThunkFailed; - UINT16 PciInterfaceVersion; + EFI_IA32_REGISTER_SET Reg; + BOOLEAN ThunkFailed; + UINT16 PciInterfaceVersion; PciInterfaceVersion = 0; - Reg.X.AX = 0xB101; + Reg.X.AX = 0xB101; Reg.E.EDI = 0; ThunkFailed = Private->LegacyBios.Int86 (&Private->LegacyBios, 0x1A, &Reg); @@ -684,6 +684,7 @@ GetPciInterfaceVersion ( PciInterfaceVersion = Reg.X.BX; } } + return PciInterfaceVersion; } @@ -699,25 +700,25 @@ GetPciInterfaceVersion ( VOID EFIAPI InstallSmbiosEventCallback ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - EFI_STATUS Status; - SMBIOS_TABLE_ENTRY_POINT *EntryPointStructure; + EFI_STATUS Status; + SMBIOS_TABLE_ENTRY_POINT *EntryPointStructure; // // Get SMBIOS table from EFI configuration table // Status = EfiGetSystemConfigurationTable ( - &gEfiSmbiosTableGuid, - &mRuntimeSmbiosEntryPoint - ); + &gEfiSmbiosTableGuid, + &mRuntimeSmbiosEntryPoint + ); if ((EFI_ERROR (Status)) || (mRuntimeSmbiosEntryPoint == NULL)) { return; } - EntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *) mRuntimeSmbiosEntryPoint; + EntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *)mRuntimeSmbiosEntryPoint; // // Allocate memory for SMBIOS Entry Point Structure. @@ -728,21 +729,23 @@ InstallSmbiosEventCallback ( // Entrypoint structure with fixed size is allocated only once. // mReserveSmbiosEntryPoint = SIZE_4GB - 1; - Status = gBS->AllocatePages ( - AllocateMaxAddress, - EfiReservedMemoryType, - EFI_SIZE_TO_PAGES ((UINTN) (EntryPointStructure->EntryPointLength)), - &mReserveSmbiosEntryPoint - ); + Status = gBS->AllocatePages ( + AllocateMaxAddress, + EfiReservedMemoryType, + EFI_SIZE_TO_PAGES ((UINTN)(EntryPointStructure->EntryPointLength)), + &mReserveSmbiosEntryPoint + ); if (EFI_ERROR (Status)) { mReserveSmbiosEntryPoint = 0; return; } + DEBUG ((DEBUG_INFO, "Allocate memory for Smbios Entry Point Structure\n")); } if ((mStructureTableAddress != 0) && - (mStructureTablePages < EFI_SIZE_TO_PAGES ((UINT32)EntryPointStructure->TableLength))) { + (mStructureTablePages < EFI_SIZE_TO_PAGES ((UINT32)EntryPointStructure->TableLength))) + { // // If original buffer is not enough for the new SMBIOS table, free original buffer and re-allocate // @@ -759,22 +762,23 @@ InstallSmbiosEventCallback ( // mStructureTableAddress = SIZE_4GB - 1; mStructureTablePages = EFI_SIZE_TO_PAGES (EntryPointStructure->TableLength); - Status = gBS->AllocatePages ( - AllocateMaxAddress, - EfiReservedMemoryType, - mStructureTablePages, - &mStructureTableAddress - ); + Status = gBS->AllocatePages ( + AllocateMaxAddress, + EfiReservedMemoryType, + mStructureTablePages, + &mStructureTableAddress + ); if (EFI_ERROR (Status)) { gBS->FreePages ( - mReserveSmbiosEntryPoint, - EFI_SIZE_TO_PAGES ((UINTN) (EntryPointStructure->EntryPointLength)) - ); + mReserveSmbiosEntryPoint, + EFI_SIZE_TO_PAGES ((UINTN)(EntryPointStructure->EntryPointLength)) + ); mReserveSmbiosEntryPoint = 0; mStructureTableAddress = 0; mStructureTablePages = 0; return; } + DEBUG ((DEBUG_INFO, "Allocate memory for Smbios Structure Table\n")); } } @@ -791,8 +795,8 @@ InstallSmbiosEventCallback ( VOID EFIAPI ToggleEndOfDxeStatus ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { mEndOfDxe = TRUE; @@ -812,8 +816,8 @@ ToggleEndOfDxeStatus ( EFI_STATUS EFIAPI LegacyBiosInstall ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; @@ -850,7 +854,7 @@ LegacyBiosInstall ( // When UEFI Secure Boot is enabled, CSM module will not start any more. // SecureBoot = NULL; - GetEfiGlobalVariable2 (EFI_SECURE_BOOT_MODE_NAME, (VOID**)&SecureBoot, NULL); + GetEfiGlobalVariable2 (EFI_SECURE_BOOT_MODE_NAME, (VOID **)&SecureBoot, NULL); if ((SecureBoot != NULL) && (*SecureBoot == SECURE_BOOT_MODE_ENABLE)) { FreePool (SecureBoot); return EFI_SECURITY_VIOLATION; @@ -867,22 +871,22 @@ LegacyBiosInstall ( // Grab a copy of all the protocols we depend on. Any error would // be a dispatcher bug!. // - Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **) &Private->Cpu); + Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)&Private->Cpu); ASSERT_EFI_ERROR (Status); - Status = gBS->LocateProtocol (&gEfiTimerArchProtocolGuid, NULL, (VOID **) &Private->Timer); + Status = gBS->LocateProtocol (&gEfiTimerArchProtocolGuid, NULL, (VOID **)&Private->Timer); ASSERT_EFI_ERROR (Status); - Status = gBS->LocateProtocol (&gEfiLegacyRegion2ProtocolGuid, NULL, (VOID **) &Private->LegacyRegion); + Status = gBS->LocateProtocol (&gEfiLegacyRegion2ProtocolGuid, NULL, (VOID **)&Private->LegacyRegion); ASSERT_EFI_ERROR (Status); - Status = gBS->LocateProtocol (&gEfiLegacyBiosPlatformProtocolGuid, NULL, (VOID **) &Private->LegacyBiosPlatform); + Status = gBS->LocateProtocol (&gEfiLegacyBiosPlatformProtocolGuid, NULL, (VOID **)&Private->LegacyBiosPlatform); ASSERT_EFI_ERROR (Status); - Status = gBS->LocateProtocol (&gEfiLegacy8259ProtocolGuid, NULL, (VOID **) &Private->Legacy8259); + Status = gBS->LocateProtocol (&gEfiLegacy8259ProtocolGuid, NULL, (VOID **)&Private->Legacy8259); ASSERT_EFI_ERROR (Status); - Status = gBS->LocateProtocol (&gEfiLegacyInterruptProtocolGuid, NULL, (VOID **) &Private->LegacyInterrupt); + Status = gBS->LocateProtocol (&gEfiLegacyInterruptProtocolGuid, NULL, (VOID **)&Private->LegacyInterrupt); ASSERT_EFI_ERROR (Status); // @@ -891,7 +895,7 @@ LegacyBiosInstall ( Status = gBS->LocateProtocol ( &gEfiGenericMemTestProtocolGuid, NULL, - (VOID **) &Private->GenericMemoryTest + (VOID **)&Private->GenericMemoryTest ); ASSERT_EFI_ERROR (Status); @@ -904,6 +908,7 @@ LegacyBiosInstall ( StartAddress = Descriptor.BaseAddress + Descriptor.Length; continue; } + Length = MIN (Descriptor.Length, 0xa0000 - StartAddress); Private->GenericMemoryTest->CompatibleRangeTest ( Private->GenericMemoryTest, @@ -912,6 +917,7 @@ LegacyBiosInstall ( ); StartAddress = StartAddress + Length; } + // // Make sure all memory from 1MB to 16MB is tested and added to memory map // @@ -921,6 +927,7 @@ LegacyBiosInstall ( StartAddress = Descriptor.BaseAddress + Descriptor.Length; continue; } + Length = MIN (Descriptor.Length, BASE_16MB - StartAddress); Private->GenericMemoryTest->CompatibleRangeTest ( Private->GenericMemoryTest, @@ -932,17 +939,17 @@ LegacyBiosInstall ( Private->Signature = LEGACY_BIOS_INSTANCE_SIGNATURE; - Private->LegacyBios.Int86 = LegacyBiosInt86; - Private->LegacyBios.FarCall86 = LegacyBiosFarCall86; - Private->LegacyBios.CheckPciRom = LegacyBiosCheckPciRom; - Private->LegacyBios.InstallPciRom = LegacyBiosInstallPciRom; - Private->LegacyBios.LegacyBoot = LegacyBiosLegacyBoot; - Private->LegacyBios.UpdateKeyboardLedStatus = LegacyBiosUpdateKeyboardLedStatus; - Private->LegacyBios.GetBbsInfo = LegacyBiosGetBbsInfo; - Private->LegacyBios.ShadowAllLegacyOproms = LegacyBiosShadowAllLegacyOproms; - Private->LegacyBios.PrepareToBootEfi = LegacyBiosPrepareToBootEfi; - Private->LegacyBios.GetLegacyRegion = LegacyBiosGetLegacyRegion; - Private->LegacyBios.CopyLegacyRegion = LegacyBiosCopyLegacyRegion; + Private->LegacyBios.Int86 = LegacyBiosInt86; + Private->LegacyBios.FarCall86 = LegacyBiosFarCall86; + Private->LegacyBios.CheckPciRom = LegacyBiosCheckPciRom; + Private->LegacyBios.InstallPciRom = LegacyBiosInstallPciRom; + Private->LegacyBios.LegacyBoot = LegacyBiosLegacyBoot; + Private->LegacyBios.UpdateKeyboardLedStatus = LegacyBiosUpdateKeyboardLedStatus; + Private->LegacyBios.GetBbsInfo = LegacyBiosGetBbsInfo; + Private->LegacyBios.ShadowAllLegacyOproms = LegacyBiosShadowAllLegacyOproms; + Private->LegacyBios.PrepareToBootEfi = LegacyBiosPrepareToBootEfi; + Private->LegacyBios.GetLegacyRegion = LegacyBiosGetLegacyRegion; + Private->LegacyBios.CopyLegacyRegion = LegacyBiosCopyLegacyRegion; Private->LegacyBios.BootUnconventionalDevice = LegacyBiosBootUnconventionalDevice; Private->ImageHandle = ImageHandle; @@ -994,16 +1001,16 @@ LegacyBiosInstall ( ); ASSERT (MemoryAddress == 0x000000000); - ClearPtr = (VOID *) ((UINTN) 0x0000); + ClearPtr = (VOID *)((UINTN)0x0000); // // Initialize region from 0x0000 to 4k. This initializes interrupt vector // range. // ACCESS_PAGE0_CODE ( - gBS->SetMem ((VOID *) ClearPtr, 0x400, INITIAL_VALUE_BELOW_1K); - ZeroMem ((VOID *) ((UINTN)ClearPtr + 0x400), 0xC00); - ); + gBS->SetMem ((VOID *)ClearPtr, 0x400, INITIAL_VALUE_BELOW_1K); + ZeroMem ((VOID *)((UINTN)ClearPtr + 0x400), 0xC00); + ); // // Allocate pages for OPROM usage @@ -1020,7 +1027,7 @@ LegacyBiosInstall ( ); ASSERT_EFI_ERROR (Status); - ZeroMem ((VOID *) ((UINTN) MemoryAddress), MemorySize); + ZeroMem ((VOID *)((UINTN)MemoryAddress), MemorySize); // // Allocate all 32k chunks from 0x60000 ~ 0x88000 for Legacy OPROMs that @@ -1028,8 +1035,8 @@ LegacyBiosInstall ( // OpROMs expect different areas to be free // EbdaReservedBaseAddress = MemoryAddress; - MemoryAddress = PcdGet32 (PcdOpromReservedMemoryBase); - MemorySize = PcdGet32 (PcdOpromReservedMemorySize); + MemoryAddress = PcdGet32 (PcdOpromReservedMemoryBase); + MemorySize = PcdGet32 (PcdOpromReservedMemorySize); // // Check if base address and size for reserved memory are 4KB aligned. // @@ -1048,7 +1055,7 @@ LegacyBiosInstall ( &StartAddress ); if (!EFI_ERROR (Status)) { - MemoryPtr = (VOID *) ((UINTN) StartAddress); + MemoryPtr = (VOID *)((UINTN)StartAddress); ZeroMem (MemoryPtr, 0x1000); } else { DEBUG ((DEBUG_ERROR, "WARNING: Allocate legacy memory fail for SCSI card - %x\n", MemStart)); @@ -1069,7 +1076,7 @@ LegacyBiosInstall ( ); ASSERT_EFI_ERROR (Status); - ZeroMem ((VOID *) ((UINTN) MemoryAddressUnder1MB), MemorySize); + ZeroMem ((VOID *)((UINTN)MemoryAddressUnder1MB), MemorySize); // // Allocate space for thunker and Init Thunker @@ -1082,10 +1089,10 @@ LegacyBiosInstall ( &MemoryAddress ); ASSERT_EFI_ERROR (Status); - Private->IntThunk = (LOW_MEMORY_THUNK *) (UINTN) MemoryAddress; + Private->IntThunk = (LOW_MEMORY_THUNK *)(UINTN)MemoryAddress; EfiToLegacy16InitTable = &Private->IntThunk->EfiToLegacy16InitTable; - EfiToLegacy16InitTable->ThunkStart = (UINT32) (EFI_PHYSICAL_ADDRESS) (UINTN) MemoryAddress; - EfiToLegacy16InitTable->ThunkSizeInBytes = (UINT32) (sizeof (LOW_MEMORY_THUNK)); + EfiToLegacy16InitTable->ThunkStart = (UINT32)(EFI_PHYSICAL_ADDRESS)(UINTN)MemoryAddress; + EfiToLegacy16InitTable->ThunkSizeInBytes = (UINT32)(sizeof (LOW_MEMORY_THUNK)); Status = LegacyBiosInitializeThunk (Private); ASSERT_EFI_ERROR (Status); @@ -1093,8 +1100,8 @@ LegacyBiosInstall ( // // Init the legacy memory map in memory < 1 MB. // - EfiToLegacy16InitTable->BiosLessThan1MB = (UINT32) MemoryAddressUnder1MB; - EfiToLegacy16InitTable->LowPmmMemory = (UINT32) MemoryAddressUnder1MB; + EfiToLegacy16InitTable->BiosLessThan1MB = (UINT32)MemoryAddressUnder1MB; + EfiToLegacy16InitTable->LowPmmMemory = (UINT32)MemoryAddressUnder1MB; EfiToLegacy16InitTable->LowPmmMemorySizeInBytes = MemorySize; MemorySize = PcdGet32 (PcdHighPmmMemorySize); @@ -1121,8 +1128,9 @@ LegacyBiosInstall ( &MemoryAddress ); } + if (!EFI_ERROR (Status)) { - EfiToLegacy16InitTable->HiPmmMemory = (UINT32) (EFI_PHYSICAL_ADDRESS) (UINTN) MemoryAddress; + EfiToLegacy16InitTable->HiPmmMemory = (UINT32)(EFI_PHYSICAL_ADDRESS)(UINTN)MemoryAddress; EfiToLegacy16InitTable->HiPmmMemorySizeInBytes = MemorySize; } @@ -1135,32 +1143,34 @@ LegacyBiosInstall ( if (EFI_ERROR (Status)) { return Status; } + // // Initialize interrupt redirection code and entries; // IDT Vectors 0x68-0x6f must be redirected to IDT Vectors 0x08-0x0f. // CopyMem ( - Private->IntThunk->InterruptRedirectionCode, - (VOID *) (UINTN) InterruptRedirectionTemplate, - sizeof (Private->IntThunk->InterruptRedirectionCode) - ); + Private->IntThunk->InterruptRedirectionCode, + (VOID *)(UINTN)InterruptRedirectionTemplate, + sizeof (Private->IntThunk->InterruptRedirectionCode) + ); // // Save Unexpected interrupt vector so can restore it just prior to boot // ACCESS_PAGE0_CODE ( - BaseVectorMaster = (UINT32 *) (sizeof (UINT32) * PROTECTED_MODE_BASE_VECTOR_MASTER); + BaseVectorMaster = (UINT32 *)(sizeof (UINT32) * PROTECTED_MODE_BASE_VECTOR_MASTER); Private->BiosUnexpectedInt = BaseVectorMaster[0]; - IntRedirCode = (UINT32) (UINTN) Private->IntThunk->InterruptRedirectionCode; + IntRedirCode = (UINT32)(UINTN)Private->IntThunk->InterruptRedirectionCode; for (Index = 0; Index < 8; Index++) { - BaseVectorMaster[Index] = (EFI_SEGMENT (IntRedirCode + Index * 4) << 16) | EFI_OFFSET (IntRedirCode + Index * 4); - } - ); + BaseVectorMaster[Index] = (EFI_SEGMENT (IntRedirCode + Index * 4) << 16) | EFI_OFFSET (IntRedirCode + Index * 4); + } + + ); // // Save EFI value // - Private->ThunkSeg = (UINT16) (EFI_SEGMENT (IntRedirCode)); + Private->ThunkSeg = (UINT16)(EFI_SEGMENT (IntRedirCode)); // // Allocate reserved memory for SMBIOS table used in legacy boot if SMBIOS table exists @@ -1198,18 +1208,20 @@ LegacyBiosInstall ( // Make a new handle and install the protocol // Private->Handle = NULL; - Status = gBS->InstallProtocolInterface ( - &Private->Handle, - &gEfiLegacyBiosProtocolGuid, - EFI_NATIVE_INTERFACE, - &Private->LegacyBios - ); + Status = gBS->InstallProtocolInterface ( + &Private->Handle, + &gEfiLegacyBiosProtocolGuid, + EFI_NATIVE_INTERFACE, + &Private->LegacyBios + ); Private->Csm16PciInterfaceVersion = GetPciInterfaceVersion (Private); - DEBUG ((DEBUG_INFO, "CSM16 PCI BIOS Interface Version: %02x.%02x\n", - (UINT8) (Private->Csm16PciInterfaceVersion >> 8), - (UINT8) Private->Csm16PciInterfaceVersion - )); + DEBUG (( + DEBUG_INFO, + "CSM16 PCI BIOS Interface Version: %02x.%02x\n", + (UINT8)(Private->Csm16PciInterfaceVersion >> 8), + (UINT8)Private->Csm16PciInterfaceVersion + )); ASSERT (Private->Csm16PciInterfaceVersion != 0); return Status; } diff --git a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBiosInterface.h b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBiosInterface.h index f437d0cc42..5a706d9ea6 100644 --- a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBiosInterface.h +++ b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBiosInterface.h @@ -9,7 +9,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #ifndef _LEGACY_BIOS_INTERFACE_ #define _LEGACY_BIOS_INTERFACE_ - #include #include #include @@ -62,7 +61,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // BUGBUG: This entry maybe changed to PCD in future and wait for // redesign of BDS library // -#define MAX_BBS_ENTRIES 0x100 +#define MAX_BBS_ENTRIES 0x100 // // Thunk Status Codes @@ -79,8 +78,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // // 8259 Hardware definitions // -#define LEGACY_MODE_BASE_VECTOR_MASTER 0x08 -#define LEGACY_MODE_BASE_VECTOR_SLAVE 0x70 +#define LEGACY_MODE_BASE_VECTOR_MASTER 0x08 +#define LEGACY_MODE_BASE_VECTOR_SLAVE 0x70 // // The original PC used INT8-F for master PIC. Since these mapped over @@ -96,53 +95,53 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // offset + 0xabcd could overflow which exceeds 0xFFFF which is invalid in real mode. // So this will keep offset as small as possible to avoid offset overflow in real mode. // -#define NORMALIZE_EFI_SEGMENT(_Adr) (UINT16) (((UINTN) (_Adr)) >> 4) -#define NORMALIZE_EFI_OFFSET(_Adr) (UINT16) (((UINT16) ((UINTN) (_Adr))) & 0xf) +#define NORMALIZE_EFI_SEGMENT(_Adr) (UINT16) (((UINTN) (_Adr)) >> 4) +#define NORMALIZE_EFI_OFFSET(_Adr) (UINT16) (((UINT16) ((UINTN) (_Adr))) & 0xf) // // Trace defines // // -#define LEGACY_BDA_TRACE 0x000 -#define LEGACY_BIOS_TRACE 0x040 -#define LEGACY_BOOT_TRACE 0x080 -#define LEGACY_CMOS_TRACE 0x0C0 -#define LEGACY_IDE_TRACE 0x100 -#define LEGACY_MP_TRACE 0x140 -#define LEGACY_PCI_TRACE 0x180 -#define LEGACY_SIO_TRACE 0x1C0 - -#define LEGACY_PCI_TRACE_000 LEGACY_PCI_TRACE + 0x00 -#define LEGACY_PCI_TRACE_001 LEGACY_PCI_TRACE + 0x01 -#define LEGACY_PCI_TRACE_002 LEGACY_PCI_TRACE + 0x02 -#define LEGACY_PCI_TRACE_003 LEGACY_PCI_TRACE + 0x03 -#define LEGACY_PCI_TRACE_004 LEGACY_PCI_TRACE + 0x04 -#define LEGACY_PCI_TRACE_005 LEGACY_PCI_TRACE + 0x05 -#define LEGACY_PCI_TRACE_006 LEGACY_PCI_TRACE + 0x06 -#define LEGACY_PCI_TRACE_007 LEGACY_PCI_TRACE + 0x07 -#define LEGACY_PCI_TRACE_008 LEGACY_PCI_TRACE + 0x08 -#define LEGACY_PCI_TRACE_009 LEGACY_PCI_TRACE + 0x09 -#define LEGACY_PCI_TRACE_00A LEGACY_PCI_TRACE + 0x0A -#define LEGACY_PCI_TRACE_00B LEGACY_PCI_TRACE + 0x0B -#define LEGACY_PCI_TRACE_00C LEGACY_PCI_TRACE + 0x0C -#define LEGACY_PCI_TRACE_00D LEGACY_PCI_TRACE + 0x0D -#define LEGACY_PCI_TRACE_00E LEGACY_PCI_TRACE + 0x0E -#define LEGACY_PCI_TRACE_00F LEGACY_PCI_TRACE + 0x0F - -#define BDA_VIDEO_MODE 0x49 - -#define IDE_PI_REGISTER_PNE BIT0 -#define IDE_PI_REGISTER_SNE BIT2 +#define LEGACY_BDA_TRACE 0x000 +#define LEGACY_BIOS_TRACE 0x040 +#define LEGACY_BOOT_TRACE 0x080 +#define LEGACY_CMOS_TRACE 0x0C0 +#define LEGACY_IDE_TRACE 0x100 +#define LEGACY_MP_TRACE 0x140 +#define LEGACY_PCI_TRACE 0x180 +#define LEGACY_SIO_TRACE 0x1C0 + +#define LEGACY_PCI_TRACE_000 LEGACY_PCI_TRACE + 0x00 +#define LEGACY_PCI_TRACE_001 LEGACY_PCI_TRACE + 0x01 +#define LEGACY_PCI_TRACE_002 LEGACY_PCI_TRACE + 0x02 +#define LEGACY_PCI_TRACE_003 LEGACY_PCI_TRACE + 0x03 +#define LEGACY_PCI_TRACE_004 LEGACY_PCI_TRACE + 0x04 +#define LEGACY_PCI_TRACE_005 LEGACY_PCI_TRACE + 0x05 +#define LEGACY_PCI_TRACE_006 LEGACY_PCI_TRACE + 0x06 +#define LEGACY_PCI_TRACE_007 LEGACY_PCI_TRACE + 0x07 +#define LEGACY_PCI_TRACE_008 LEGACY_PCI_TRACE + 0x08 +#define LEGACY_PCI_TRACE_009 LEGACY_PCI_TRACE + 0x09 +#define LEGACY_PCI_TRACE_00A LEGACY_PCI_TRACE + 0x0A +#define LEGACY_PCI_TRACE_00B LEGACY_PCI_TRACE + 0x0B +#define LEGACY_PCI_TRACE_00C LEGACY_PCI_TRACE + 0x0C +#define LEGACY_PCI_TRACE_00D LEGACY_PCI_TRACE + 0x0D +#define LEGACY_PCI_TRACE_00E LEGACY_PCI_TRACE + 0x0E +#define LEGACY_PCI_TRACE_00F LEGACY_PCI_TRACE + 0x0F + +#define BDA_VIDEO_MODE 0x49 + +#define IDE_PI_REGISTER_PNE BIT0 +#define IDE_PI_REGISTER_SNE BIT2 typedef struct { - UINTN PciSegment; - UINTN PciBus; - UINTN PciDevice; - UINTN PciFunction; - UINT32 ShadowAddress; - UINT32 ShadowedSize; - UINT8 DiskStart; - UINT8 DiskEnd; + UINTN PciSegment; + UINTN PciBus; + UINTN PciDevice; + UINTN PciFunction; + UINT32 ShadowAddress; + UINT32 ShadowedSize; + UINT8 DiskStart; + UINT8 DiskEnd; } ROM_INSTANCE_ENTRY; // @@ -150,15 +149,15 @@ typedef struct { // #if defined (MDE_CPU_IA32) -#define NUM_REAL_GDT_ENTRIES 3 -#define CONVENTIONAL_MEMORY_TOP 0xA0000 // 640 KB -#define INITIAL_VALUE_BELOW_1K 0x0 +#define NUM_REAL_GDT_ENTRIES 3 +#define CONVENTIONAL_MEMORY_TOP 0xA0000 // 640 KB +#define INITIAL_VALUE_BELOW_1K 0x0 #elif defined (MDE_CPU_X64) -#define NUM_REAL_GDT_ENTRIES 8 -#define CONVENTIONAL_MEMORY_TOP 0xA0000 // 640 KB -#define INITIAL_VALUE_BELOW_1K 0x0 +#define NUM_REAL_GDT_ENTRIES 8 +#define CONVENTIONAL_MEMORY_TOP 0xA0000 // 640 KB +#define INITIAL_VALUE_BELOW_1K 0x0 #endif @@ -168,28 +167,28 @@ typedef struct { // Define what a processor GDT looks like // typedef struct { - UINT32 LimitLo : 16; - UINT32 BaseLo : 16; - UINT32 BaseMid : 8; - UINT32 Type : 4; - UINT32 System : 1; - UINT32 Dpl : 2; - UINT32 Present : 1; - UINT32 LimitHi : 4; - UINT32 Software : 1; - UINT32 Reserved : 1; - UINT32 DefaultSize : 1; - UINT32 Granularity : 1; - UINT32 BaseHi : 8; + UINT32 LimitLo : 16; + UINT32 BaseLo : 16; + UINT32 BaseMid : 8; + UINT32 Type : 4; + UINT32 System : 1; + UINT32 Dpl : 2; + UINT32 Present : 1; + UINT32 LimitHi : 4; + UINT32 Software : 1; + UINT32 Reserved : 1; + UINT32 DefaultSize : 1; + UINT32 Granularity : 1; + UINT32 BaseHi : 8; } GDT32; typedef struct { - UINT16 LimitLow; - UINT16 BaseLow; - UINT8 BaseMid; - UINT8 Attribute; - UINT8 LimitHi; - UINT8 BaseHi; + UINT16 LimitLow; + UINT16 BaseLow; + UINT8 BaseMid; + UINT8 Attribute; + UINT8 LimitHi; + UINT8 BaseHi; } GDT64; // @@ -197,13 +196,13 @@ typedef struct { // This data structure must be kept in sync with ASM STRUCT in Thunk.inc // typedef struct { - UINT16 Limit; - UINT64 Base; + UINT16 Limit; + UINT64 Base; } DESCRIPTOR64; typedef struct { - UINT16 Limit; - UINT32 Base; + UINT16 Limit; + UINT32 Base; } DESCRIPTOR32; // @@ -220,33 +219,33 @@ typedef struct { // Space for the code // The address of Code is also the beginning of the relocated Thunk code // - CHAR8 Code[4096]; // ? + CHAR8 Code[4096]; // ? // // The address of the Reverse Thunk code // Note that this member CONTAINS the address of the relocated reverse thunk // code unlike the member variable 'Code', which IS the address of the Thunk // code. // - UINT32 LowReverseThunkStart; + UINT32 LowReverseThunkStart; // // Data for the code (cs releative) // - DESCRIPTOR32 GdtDesc; // Protected mode GDT - DESCRIPTOR32 IdtDesc; // Protected mode IDT - UINT32 FlatSs; - UINT32 FlatEsp; + DESCRIPTOR32 GdtDesc; // Protected mode GDT + DESCRIPTOR32 IdtDesc; // Protected mode IDT + UINT32 FlatSs; + UINT32 FlatEsp; - UINT32 LowCodeSelector; // Low code selector in GDT - UINT32 LowDataSelector; // Low data selector in GDT - UINT32 LowStack; - DESCRIPTOR32 RealModeIdtDesc; + UINT32 LowCodeSelector; // Low code selector in GDT + UINT32 LowDataSelector; // Low data selector in GDT + UINT32 LowStack; + DESCRIPTOR32 RealModeIdtDesc; // // real-mode GDT (temporary GDT with two real mode segment descriptors) // - GDT32 RealModeGdt[NUM_REAL_GDT_ENTRIES]; - DESCRIPTOR32 RealModeGdtDesc; + GDT32 RealModeGdt[NUM_REAL_GDT_ENTRIES]; + DESCRIPTOR32 RealModeGdtDesc; // // Members specifically for the reverse thunk @@ -254,36 +253,36 @@ typedef struct { // before performing the reverse thunk. The RevFlat* members must be set // before calling the reverse thunk assembly code. // - UINT16 RevRealDs; - UINT16 RevRealSs; - UINT32 RevRealEsp; - DESCRIPTOR32 RevRealIdtDesc; - UINT16 RevFlatDataSelector; // Flat data selector in GDT - UINT32 RevFlatStack; + UINT16 RevRealDs; + UINT16 RevRealSs; + UINT32 RevRealEsp; + DESCRIPTOR32 RevRealIdtDesc; + UINT16 RevFlatDataSelector; // Flat data selector in GDT + UINT32 RevFlatStack; // // A low memory stack // - CHAR8 Stack[LOW_STACK_SIZE]; + CHAR8 Stack[LOW_STACK_SIZE]; // // Stack for flat mode after reverse thunk // @bug - This may no longer be necessary if the reverse thunk interface // is changed to have the flat stack in a different location. // - CHAR8 RevThunkStack[LOW_STACK_SIZE]; + CHAR8 RevThunkStack[LOW_STACK_SIZE]; // // Legacy16 Init memory map info // - EFI_TO_COMPATIBILITY16_INIT_TABLE EfiToLegacy16InitTable; + EFI_TO_COMPATIBILITY16_INIT_TABLE EfiToLegacy16InitTable; - EFI_TO_COMPATIBILITY16_BOOT_TABLE EfiToLegacy16BootTable; + EFI_TO_COMPATIBILITY16_BOOT_TABLE EfiToLegacy16BootTable; - CHAR8 InterruptRedirectionCode[32]; - EFI_LEGACY_INSTALL_PCI_HANDLER PciHandler; - EFI_DISPATCH_OPROM_TABLE DispatchOpromTable; - BBS_TABLE BbsTable[MAX_BBS_ENTRIES]; + CHAR8 InterruptRedirectionCode[32]; + EFI_LEGACY_INSTALL_PCI_HANDLER PciHandler; + EFI_DISPATCH_OPROM_TABLE DispatchOpromTable; + BBS_TABLE BbsTable[MAX_BBS_ENTRIES]; } LOW_MEMORY_THUNK; #elif defined (MDE_CPU_X64) @@ -293,42 +292,42 @@ typedef struct { // Space for the code // The address of Code is also the beginning of the relocated Thunk code // - CHAR8 Code[4096]; // ? + CHAR8 Code[4096]; // ? // // Data for the code (cs releative) // - DESCRIPTOR64 X64GdtDesc; // Protected mode GDT - DESCRIPTOR64 X64IdtDesc; // Protected mode IDT - UINTN X64Ss; - UINTN X64Esp; + DESCRIPTOR64 X64GdtDesc; // Protected mode GDT + DESCRIPTOR64 X64IdtDesc; // Protected mode IDT + UINTN X64Ss; + UINTN X64Esp; - UINTN RealStack; - DESCRIPTOR32 RealModeIdtDesc; - DESCRIPTOR32 RealModeGdtDesc; + UINTN RealStack; + DESCRIPTOR32 RealModeIdtDesc; + DESCRIPTOR32 RealModeGdtDesc; // // real-mode GDT (temporary GDT with two real mode segment descriptors) // - GDT64 RealModeGdt[NUM_REAL_GDT_ENTRIES]; - UINT64 PageMapLevel4; + GDT64 RealModeGdt[NUM_REAL_GDT_ENTRIES]; + UINT64 PageMapLevel4; // // A low memory stack // - CHAR8 Stack[LOW_STACK_SIZE]; + CHAR8 Stack[LOW_STACK_SIZE]; // // Legacy16 Init memory map info // - EFI_TO_COMPATIBILITY16_INIT_TABLE EfiToLegacy16InitTable; + EFI_TO_COMPATIBILITY16_INIT_TABLE EfiToLegacy16InitTable; - EFI_TO_COMPATIBILITY16_BOOT_TABLE EfiToLegacy16BootTable; + EFI_TO_COMPATIBILITY16_BOOT_TABLE EfiToLegacy16BootTable; - CHAR8 InterruptRedirectionCode[32]; - EFI_LEGACY_INSTALL_PCI_HANDLER PciHandler; - EFI_DISPATCH_OPROM_TABLE DispatchOpromTable; - BBS_TABLE BbsTable[MAX_BBS_ENTRIES]; + CHAR8 InterruptRedirectionCode[32]; + EFI_LEGACY_INSTALL_PCI_HANDLER PciHandler; + EFI_DISPATCH_OPROM_TABLE DispatchOpromTable; + BBS_TABLE BbsTable[MAX_BBS_ENTRIES]; } LOW_MEMORY_THUNK; #endif @@ -337,42 +336,42 @@ typedef struct { // PnP Expansion Header // typedef struct { - UINT32 PnpSignature; - UINT8 Revision; - UINT8 Length; - UINT16 NextHeader; - UINT8 Reserved1; - UINT8 Checksum; - UINT32 DeviceId; - UINT16 MfgPointer; - UINT16 ProductNamePointer; - UINT8 Class; - UINT8 SubClass; - UINT8 Interface; - UINT8 DeviceIndicators; - UINT16 Bcv; - UINT16 DisconnectVector; - UINT16 Bev; - UINT16 Reserved2; - UINT16 StaticResourceVector; + UINT32 PnpSignature; + UINT8 Revision; + UINT8 Length; + UINT16 NextHeader; + UINT8 Reserved1; + UINT8 Checksum; + UINT32 DeviceId; + UINT16 MfgPointer; + UINT16 ProductNamePointer; + UINT8 Class; + UINT8 SubClass; + UINT8 Interface; + UINT8 DeviceIndicators; + UINT16 Bcv; + UINT16 DisconnectVector; + UINT16 Bev; + UINT16 Reserved2; + UINT16 StaticResourceVector; } LEGACY_PNP_EXPANSION_HEADER; typedef struct { - UINT8 PciSegment; - UINT8 PciBus; - UINT8 PciDevice; - UINT8 PciFunction; - UINT16 Vid; - UINT16 Did; - UINT16 SysSid; - UINT16 SVid; - UINT8 Class; - UINT8 SubClass; - UINT8 Interface; - UINT8 Reserved; - UINTN RomStart; - UINTN ManufacturerString; - UINTN ProductNameString; + UINT8 PciSegment; + UINT8 PciBus; + UINT8 PciDevice; + UINT8 PciFunction; + UINT16 Vid; + UINT16 Did; + UINT16 SysSid; + UINT16 SVid; + UINT8 Class; + UINT8 SubClass; + UINT8 Interface; + UINT8 Reserved; + UINTN RomStart; + UINTN ManufacturerString; + UINTN ProductNameString; } LEGACY_ROM_AND_BBS_TABLE; // @@ -382,219 +381,217 @@ typedef struct { // This mapping is ignored booting to a legacy OS. // typedef struct { - UINT8 PciSegment; - UINT8 PciBus; - UINT8 PciDevice; - UINT8 PciFunction; - UINT8 StartDriveNumber; - UINT8 EndDriveNumber; + UINT8 PciSegment; + UINT8 PciBus; + UINT8 PciDevice; + UINT8 PciFunction; + UINT8 StartDriveNumber; + UINT8 EndDriveNumber; } LEGACY_EFI_HDD_TABLE; // // This data is passed to Leacy16Boot // typedef enum { - EfiAcpiAddressRangeMemory = 1, - EfiAcpiAddressRangeReserved = 2, - EfiAcpiAddressRangeACPI = 3, - EfiAcpiAddressRangeNVS = 4, + EfiAcpiAddressRangeMemory = 1, + EfiAcpiAddressRangeReserved = 2, + EfiAcpiAddressRangeACPI = 3, + EfiAcpiAddressRangeNVS = 4, EfiAddressRangePersistentMemory = 7 } EFI_ACPI_MEMORY_TYPE; typedef struct { - UINT64 BaseAddr; - UINT64 Length; - EFI_ACPI_MEMORY_TYPE Type; + UINT64 BaseAddr; + UINT64 Length; + EFI_ACPI_MEMORY_TYPE Type; } EFI_E820_ENTRY64; typedef struct { - UINT32 BassAddrLow; - UINT32 BaseAddrHigh; - UINT32 LengthLow; - UINT32 LengthHigh; - EFI_ACPI_MEMORY_TYPE Type; + UINT32 BassAddrLow; + UINT32 BaseAddrHigh; + UINT32 LengthLow; + UINT32 LengthHigh; + EFI_ACPI_MEMORY_TYPE Type; } EFI_E820_ENTRY; #pragma pack() -extern BBS_TABLE *mBbsTable; - -extern EFI_GENERIC_MEMORY_TEST_PROTOCOL *gGenMemoryTest; - -extern BOOLEAN mEndOfDxe; - -#define PORT_70 0x70 -#define PORT_71 0x71 - -#define CMOS_0A 0x0a ///< Status register A -#define CMOS_0D 0x0d ///< Status register D -#define CMOS_0E 0x0e ///< Diagnostic Status -#define CMOS_0F 0x0f ///< Shutdown status -#define CMOS_10 0x10 ///< Floppy type -#define CMOS_12 0x12 ///< IDE type -#define CMOS_14 0x14 ///< Same as BDA 40:10 -#define CMOS_15 0x15 ///< Low byte of base memory in 1k increments -#define CMOS_16 0x16 ///< High byte of base memory in 1k increments -#define CMOS_17 0x17 ///< Low byte of 1MB+ memory in 1k increments - max 15 MB -#define CMOS_18 0x18 ///< High byte of 1MB+ memory in 1k increments - max 15 MB -#define CMOS_19 0x19 ///< C: extended drive type -#define CMOS_1A 0x1a ///< D: extended drive type -#define CMOS_2E 0x2e ///< Most significient byte of standard checksum -#define CMOS_2F 0x2f ///< Least significient byte of standard checksum -#define CMOS_30 0x30 ///< CMOS 0x17 -#define CMOS_31 0x31 ///< CMOS 0x18 -#define CMOS_32 0x32 ///< Century byte +extern BBS_TABLE *mBbsTable; + +extern EFI_GENERIC_MEMORY_TEST_PROTOCOL *gGenMemoryTest; + +extern BOOLEAN mEndOfDxe; + +#define PORT_70 0x70 +#define PORT_71 0x71 + +#define CMOS_0A 0x0a ///< Status register A +#define CMOS_0D 0x0d ///< Status register D +#define CMOS_0E 0x0e ///< Diagnostic Status +#define CMOS_0F 0x0f ///< Shutdown status +#define CMOS_10 0x10 ///< Floppy type +#define CMOS_12 0x12 ///< IDE type +#define CMOS_14 0x14 ///< Same as BDA 40:10 +#define CMOS_15 0x15 ///< Low byte of base memory in 1k increments +#define CMOS_16 0x16 ///< High byte of base memory in 1k increments +#define CMOS_17 0x17 ///< Low byte of 1MB+ memory in 1k increments - max 15 MB +#define CMOS_18 0x18 ///< High byte of 1MB+ memory in 1k increments - max 15 MB +#define CMOS_19 0x19 ///< C: extended drive type +#define CMOS_1A 0x1a ///< D: extended drive type +#define CMOS_2E 0x2e ///< Most significient byte of standard checksum +#define CMOS_2F 0x2f ///< Least significient byte of standard checksum +#define CMOS_30 0x30 ///< CMOS 0x17 +#define CMOS_31 0x31 ///< CMOS 0x18 +#define CMOS_32 0x32 ///< Century byte // // 8254 Timer registers // -#define TIMER0_COUNT_PORT 0x40 -#define TIMER1_COUNT_PORT 0x41 -#define TIMER2_COUNT_PORT 0x42 -#define TIMER_CONTROL_PORT 0x43 +#define TIMER0_COUNT_PORT 0x40 +#define TIMER1_COUNT_PORT 0x41 +#define TIMER2_COUNT_PORT 0x42 +#define TIMER_CONTROL_PORT 0x43 // // Timer 0, Read/Write LSB then MSB, Square wave output, binary count use. // -#define TIMER0_CONTROL_WORD 0x36 +#define TIMER0_CONTROL_WORD 0x36 #define LEGACY_BIOS_INSTANCE_SIGNATURE SIGNATURE_32 ('L', 'B', 'I', 'T') typedef struct { - UINTN Signature; + UINTN Signature; - EFI_HANDLE Handle; - EFI_LEGACY_BIOS_PROTOCOL LegacyBios; + EFI_HANDLE Handle; + EFI_LEGACY_BIOS_PROTOCOL LegacyBios; - EFI_HANDLE ImageHandle; + EFI_HANDLE ImageHandle; // // CPU Architectural Protocol // - EFI_CPU_ARCH_PROTOCOL *Cpu; + EFI_CPU_ARCH_PROTOCOL *Cpu; // // Timer Architectural Protocol // - EFI_TIMER_ARCH_PROTOCOL *Timer; - BOOLEAN TimerUses8254; + EFI_TIMER_ARCH_PROTOCOL *Timer; + BOOLEAN TimerUses8254; // // Protocol to Lock and Unlock 0xc0000 - 0xfffff // - EFI_LEGACY_REGION2_PROTOCOL *LegacyRegion; + EFI_LEGACY_REGION2_PROTOCOL *LegacyRegion; - EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *LegacyBiosPlatform; + EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *LegacyBiosPlatform; // // Interrupt control for thunk and PCI IRQ // - EFI_LEGACY_8259_PROTOCOL *Legacy8259; + EFI_LEGACY_8259_PROTOCOL *Legacy8259; // // PCI Interrupt PIRQ control // - EFI_LEGACY_INTERRUPT_PROTOCOL *LegacyInterrupt; + EFI_LEGACY_INTERRUPT_PROTOCOL *LegacyInterrupt; // // Generic Memory Test // - EFI_GENERIC_MEMORY_TEST_PROTOCOL *GenericMemoryTest; + EFI_GENERIC_MEMORY_TEST_PROTOCOL *GenericMemoryTest; // // TRUE if PCI Interrupt Line registers have been programmed. // - BOOLEAN PciInterruptLine; + BOOLEAN PciInterruptLine; // // Code space below 1MB needed by thunker to transition to real mode. // Contains stack and real mode code fragments // - LOW_MEMORY_THUNK *IntThunk; + LOW_MEMORY_THUNK *IntThunk; // // Starting shadow address of the Legacy BIOS // - UINT32 BiosStart; - UINT32 LegacyBiosImageSize; + UINT32 BiosStart; + UINT32 LegacyBiosImageSize; // // Start of variables used by CsmItp.mac ITP macro file and/os LegacyBios // - UINT8 Dump[4]; + UINT8 Dump[4]; // // $EFI Legacy16 code entry info in memory < 1 MB; // - EFI_COMPATIBILITY16_TABLE *Legacy16Table; - VOID *Legacy16InitPtr; - VOID *Legacy16BootPtr; - VOID *InternalIrqRoutingTable; - UINT32 NumberIrqRoutingEntries; - VOID *BbsTablePtr; - VOID *HddTablePtr; - UINT32 NumberHddControllers; + EFI_COMPATIBILITY16_TABLE *Legacy16Table; + VOID *Legacy16InitPtr; + VOID *Legacy16BootPtr; + VOID *InternalIrqRoutingTable; + UINT32 NumberIrqRoutingEntries; + VOID *BbsTablePtr; + VOID *HddTablePtr; + UINT32 NumberHddControllers; // // Cached copy of Legacy16 entry point // - UINT16 Legacy16CallSegment; - UINT16 Legacy16CallOffset; + UINT16 Legacy16CallSegment; + UINT16 Legacy16CallOffset; // // Returned from $EFI and passed in to OPROMS // - UINT16 PnPInstallationCheckSegment; - UINT16 PnPInstallationCheckOffset; + UINT16 PnPInstallationCheckSegment; + UINT16 PnPInstallationCheckOffset; // // E820 table // - EFI_E820_ENTRY E820Table[EFI_MAX_E820_ENTRY]; - UINT32 NumberE820Entries; + EFI_E820_ENTRY E820Table[EFI_MAX_E820_ENTRY]; + UINT32 NumberE820Entries; // // True if legacy VGA INT 10h handler installed // - BOOLEAN VgaInstalled; + BOOLEAN VgaInstalled; // // Number of IDE drives // - UINT8 IdeDriveCount; + UINT8 IdeDriveCount; // // Current Free Option ROM space. An option ROM must NOT go past // BiosStart. // - UINT32 OptionRom; + UINT32 OptionRom; // // Save Legacy16 unexpected interrupt vector. Reprogram INT 68-6F from // EFI values to legacy value just before boot. // - UINT32 BiosUnexpectedInt; - UINT32 ThunkSavedInt[8]; - UINT16 ThunkSeg; - LEGACY_EFI_HDD_TABLE *LegacyEfiHddTable; - UINT16 LegacyEfiHddTableIndex; - UINT8 DiskEnd; - UINT8 Disk4075; - UINT16 TraceIndex; - UINT16 Trace[0x200]; + UINT32 BiosUnexpectedInt; + UINT32 ThunkSavedInt[8]; + UINT16 ThunkSeg; + LEGACY_EFI_HDD_TABLE *LegacyEfiHddTable; + UINT16 LegacyEfiHddTableIndex; + UINT8 DiskEnd; + UINT8 Disk4075; + UINT16 TraceIndex; + UINT16 Trace[0x200]; // // Indicate that whether GenericLegacyBoot is entered or not // - BOOLEAN LegacyBootEntered; + BOOLEAN LegacyBootEntered; // // CSM16 PCI Interface Version // - UINT16 Csm16PciInterfaceVersion; - + UINT16 Csm16PciInterfaceVersion; } LEGACY_BIOS_INSTANCE; - #pragma pack(1) /* @@ -636,41 +633,41 @@ typedef struct { 40:98-101 skip */ typedef struct { - UINT16 Com1; - UINT16 Com2; - UINT16 Com3; - UINT16 Com4; - UINT16 Lpt1; - UINT16 Lpt2; - UINT16 Lpt3; - UINT16 Ebda; - UINT16 MachineConfig; - UINT8 Bda12; - UINT16 MemSize; - UINT8 Bda15_16[0x02]; - UINT8 ShiftStatus; - UINT8 Bda18_19[0x02]; - UINT16 KeyHead; - UINT16 KeyTail; - UINT16 Bda1E_3D[0x10]; - UINT16 FloppyData; - UINT8 FloppyTimeout; - UINT8 Bda41_74[0x34]; - UINT8 NumberOfDrives; - UINT8 Bda76_77[0x02]; - UINT16 Lpt1_2Timeout; - UINT16 Lpt3_4Timeout; - UINT16 Com1_2Timeout; - UINT16 Com3_4Timeout; - UINT16 KeyStart; - UINT16 KeyEnd; - UINT8 Bda84_87[0x4]; - UINT8 DataXmit; - UINT8 Bda89_8F[0x07]; - UINT8 FloppyXRate; - UINT8 Bda91_95[0x05]; - UINT8 KeyboardStatus; - UINT8 LedStatus; + UINT16 Com1; + UINT16 Com2; + UINT16 Com3; + UINT16 Com4; + UINT16 Lpt1; + UINT16 Lpt2; + UINT16 Lpt3; + UINT16 Ebda; + UINT16 MachineConfig; + UINT8 Bda12; + UINT16 MemSize; + UINT8 Bda15_16[0x02]; + UINT8 ShiftStatus; + UINT8 Bda18_19[0x02]; + UINT16 KeyHead; + UINT16 KeyTail; + UINT16 Bda1E_3D[0x10]; + UINT16 FloppyData; + UINT8 FloppyTimeout; + UINT8 Bda41_74[0x34]; + UINT8 NumberOfDrives; + UINT8 Bda76_77[0x02]; + UINT16 Lpt1_2Timeout; + UINT16 Lpt3_4Timeout; + UINT16 Com1_2Timeout; + UINT16 Com3_4Timeout; + UINT16 KeyStart; + UINT16 KeyEnd; + UINT8 Bda84_87[0x4]; + UINT8 DataXmit; + UINT8 Bda89_8F[0x07]; + UINT8 FloppyXRate; + UINT8 Bda91_95[0x05]; + UINT8 KeyboardStatus; + UINT8 LedStatus; } BDA_STRUC; #pragma pack() @@ -694,12 +691,11 @@ typedef struct { BOOLEAN EFIAPI LegacyBiosInt86 ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN UINT8 BiosInt, - IN EFI_IA32_REGISTER_SET *Regs + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN UINT8 BiosInt, + IN EFI_IA32_REGISTER_SET *Regs ); - /** Thunk to 16-bit real mode and call Segment:Offset. Regs will contain the 16-bit register context on entry and exit. Arguments can be passed on @@ -721,15 +717,14 @@ LegacyBiosInt86 ( BOOLEAN EFIAPI LegacyBiosFarCall86 ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN UINT16 Segment, - IN UINT16 Offset, - IN EFI_IA32_REGISTER_SET *Regs, - IN VOID *Stack, - IN UINTN StackSize + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN UINT16 Segment, + IN UINT16 Offset, + IN EFI_IA32_REGISTER_SET *Regs, + IN VOID *Stack, + IN UINTN StackSize ); - /** Test to see if a legacy PCI ROM exists for this device. Optionally return the Legacy ROM instance for this PCI device. @@ -748,14 +743,13 @@ LegacyBiosFarCall86 ( EFI_STATUS EFIAPI LegacyBiosCheckPciRom ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN EFI_HANDLE PciHandle, - OUT VOID **RomImage OPTIONAL, - OUT UINTN *RomSize OPTIONAL, - OUT UINTN *Flags + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN EFI_HANDLE PciHandle, + OUT VOID **RomImage OPTIONAL, + OUT UINTN *RomSize OPTIONAL, + OUT UINTN *Flags ); - /** Assign drive number to legacy HDD drives prior to booting an EFI aware OS so the OS can access drives without an EFI driver. @@ -772,12 +766,11 @@ LegacyBiosCheckPciRom ( EFI_STATUS EFIAPI LegacyBiosPrepareToBootEfi ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - OUT UINT16 *BbsCount, - OUT BBS_TABLE **BbsTable + IN EFI_LEGACY_BIOS_PROTOCOL *This, + OUT UINT16 *BbsCount, + OUT BBS_TABLE **BbsTable ); - /** To boot from an unconventional device like parties and/or execute HDD diagnostics. @@ -796,14 +789,13 @@ LegacyBiosPrepareToBootEfi ( EFI_STATUS EFIAPI LegacyBiosBootUnconventionalDevice ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN UDC_ATTRIBUTES Attributes, - IN UINTN BbsEntry, - IN VOID *BeerData, - IN VOID *ServiceAreaData + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN UDC_ATTRIBUTES Attributes, + IN UINTN BbsEntry, + IN VOID *BeerData, + IN VOID *ServiceAreaData ); - /** Load a legacy PC-AT OPROM on the PciHandle device. Return information about how many disks were added by the OPROM and the shadow address and @@ -834,17 +826,16 @@ LegacyBiosBootUnconventionalDevice ( EFI_STATUS EFIAPI LegacyBiosInstallPciRom ( - IN EFI_LEGACY_BIOS_PROTOCOL * This, - IN EFI_HANDLE PciHandle, - IN VOID **RomImage, - OUT UINTN *Flags, - OUT UINT8 *DiskStart OPTIONAL, - OUT UINT8 *DiskEnd OPTIONAL, - OUT VOID **RomShadowAddress OPTIONAL, - OUT UINT32 *RomShadowedSize OPTIONAL + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN EFI_HANDLE PciHandle, + IN VOID **RomImage, + OUT UINTN *Flags, + OUT UINT8 *DiskStart OPTIONAL, + OUT UINT8 *DiskEnd OPTIONAL, + OUT VOID **RomShadowAddress OPTIONAL, + OUT UINT32 *RomShadowedSize OPTIONAL ); - /** Fill in the standard BDA for Keyboard LEDs @@ -857,11 +848,10 @@ LegacyBiosInstallPciRom ( EFI_STATUS EFIAPI LegacyBiosUpdateKeyboardLedStatus ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN UINT8 Leds + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN UINT8 Leds ); - /** Get all BBS info @@ -879,14 +869,13 @@ LegacyBiosUpdateKeyboardLedStatus ( EFI_STATUS EFIAPI LegacyBiosGetBbsInfo ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - OUT UINT16 *HddCount, - OUT HDD_INFO **HddInfo, - OUT UINT16 *BbsCount, - OUT BBS_TABLE **BbsTable + IN EFI_LEGACY_BIOS_PROTOCOL *This, + OUT UINT16 *HddCount, + OUT HDD_INFO **HddInfo, + OUT UINT16 *BbsCount, + OUT BBS_TABLE **BbsTable ); - /** Shadow all legacy16 OPROMs that haven't been shadowed. Warning: Use this with caution. This routine disconnects all EFI @@ -901,10 +890,9 @@ LegacyBiosGetBbsInfo ( EFI_STATUS EFIAPI LegacyBiosShadowAllLegacyOproms ( - IN EFI_LEGACY_BIOS_PROTOCOL *This + IN EFI_LEGACY_BIOS_PROTOCOL *This ); - /** Attempt to legacy boot the BootOption. If the EFI contexted has been compromised this function will not return. @@ -920,13 +908,12 @@ LegacyBiosShadowAllLegacyOproms ( EFI_STATUS EFIAPI LegacyBiosLegacyBoot ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN BBS_BBS_DEVICE_PATH *BbsDevicePath, - IN UINT32 LoadOptionsSize, - IN VOID *LoadOptions + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN BBS_BBS_DEVICE_PATH *BbsDevicePath, + IN UINT32 LoadOptionsSize, + IN VOID *LoadOptions ); - /** Allocate memory < 1 MB and copy the thunker code into low memory. Se up all the descriptors. @@ -938,10 +925,9 @@ LegacyBiosLegacyBoot ( **/ EFI_STATUS LegacyBiosInitializeThunk ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ); - /** Fill in the standard BDA and EBDA stuff before Legacy16 load @@ -952,10 +938,9 @@ LegacyBiosInitializeThunk ( **/ EFI_STATUS LegacyBiosInitBda ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ); - /** Collect IDE Inquiry data from the IDE disks @@ -968,12 +953,11 @@ LegacyBiosInitBda ( **/ EFI_STATUS LegacyBiosBuildIdeData ( - IN LEGACY_BIOS_INSTANCE *Private, - IN HDD_INFO **HddInfo, - IN UINT16 Flag + IN LEGACY_BIOS_INSTANCE *Private, + IN HDD_INFO **HddInfo, + IN UINT16 Flag ); - /** Enable ide controller. This gets disabled when LegacyBoot.c is about to run the Option ROMs. @@ -984,10 +968,9 @@ LegacyBiosBuildIdeData ( **/ VOID EnableIdeController ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ); - /** If the IDE channel is in compatibility (legacy) mode, remove all PCI I/O BAR addresses from the controller. @@ -998,10 +981,9 @@ EnableIdeController ( **/ VOID InitLegacyIdeController ( - IN EFI_HANDLE IdeController + IN EFI_HANDLE IdeController ); - /** Program the interrupt routing register in all the PCI devices. On a PC AT system this register contains the 8259 IRQ vector that matches its PCI interrupt. @@ -1014,10 +996,9 @@ InitLegacyIdeController ( **/ EFI_STATUS PciProgramAllInterruptLineRegisters ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ); - /** Collect EFI Info about legacy devices. @@ -1028,10 +1009,9 @@ PciProgramAllInterruptLineRegisters ( **/ EFI_STATUS LegacyBiosBuildSioData ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ); - /** Shadow all the PCI legacy ROMs. Use data from the Legacy BIOS Protocol to chose the order. Skip any devices that have already have legacy @@ -1045,10 +1025,9 @@ LegacyBiosBuildSioData ( **/ EFI_STATUS PciShadowRoms ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ); - /** Fill in the standard BDA and EBDA stuff prior to legacy Boot @@ -1059,10 +1038,9 @@ PciShadowRoms ( **/ EFI_STATUS LegacyBiosCompleteBdaBeforeBoot ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ); - /** Fill in the standard CMOS stuff before Legacy16 load @@ -1073,10 +1051,9 @@ LegacyBiosCompleteBdaBeforeBoot ( **/ EFI_STATUS LegacyBiosInitCmos ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ); - /** Fill in the standard CMOS stuff prior to legacy Boot @@ -1087,10 +1064,9 @@ LegacyBiosInitCmos ( **/ EFI_STATUS LegacyBiosCompleteStandardCmosBeforeBoot ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ); - /** Contains the code that is copied into low memory (below 640K). This code reflects interrupts 0x68-0x6f to interrupts 0x08-0x0f. @@ -1105,7 +1081,6 @@ InterruptRedirectionTemplate ( VOID ); - /** Build the E820 table. @@ -1117,8 +1092,8 @@ InterruptRedirectionTemplate ( **/ EFI_STATUS LegacyBiosBuildE820 ( - IN LEGACY_BIOS_INSTANCE *Private, - OUT UINTN *Size + IN LEGACY_BIOS_INSTANCE *Private, + OUT UINTN *Size ); /** @@ -1129,7 +1104,7 @@ LegacyBiosBuildE820 ( **/ VOID ShutdownAPs ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ); /** @@ -1141,7 +1116,7 @@ ShutdownAPs ( **/ VOID GetRegisters ( - LOW_MEMORY_THUNK *IntThunk + LOW_MEMORY_THUNK *IntThunk ); /** @@ -1156,9 +1131,9 @@ GetRegisters ( **/ UINTN CallRealThunkCode ( - UINT8 *RealCode, - UINT8 BiosInt, - UINT32 CallAddress + UINT8 *RealCode, + UINT8 BiosInt, + UINT32 CallAddress ); /** @@ -1169,7 +1144,7 @@ CallRealThunkCode ( **/ VOID GenerateSoftInit ( - UINT8 Vector + UINT8 Vector ); /** @@ -1187,11 +1162,11 @@ GenerateSoftInit ( **/ EFI_STATUS AllocateLegacyMemory ( - IN EFI_ALLOCATE_TYPE AllocateType, - IN EFI_MEMORY_TYPE MemoryType, - IN EFI_PHYSICAL_ADDRESS StartPageAddress, - IN UINTN Pages, - OUT EFI_PHYSICAL_ADDRESS *Result + IN EFI_ALLOCATE_TYPE AllocateType, + IN EFI_MEMORY_TYPE MemoryType, + IN EFI_PHYSICAL_ADDRESS StartPageAddress, + IN UINTN Pages, + OUT EFI_PHYSICAL_ADDRESS *Result ); /** @@ -1214,11 +1189,11 @@ AllocateLegacyMemory ( EFI_STATUS EFIAPI LegacyBiosGetLegacyRegion ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN UINTN LegacyMemorySize, - IN UINTN Region, - IN UINTN Alignment, - OUT VOID **LegacyMemoryAddress + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN UINTN LegacyMemorySize, + IN UINTN Region, + IN UINTN Alignment, + OUT VOID **LegacyMemoryAddress ); /** @@ -1238,10 +1213,10 @@ LegacyBiosGetLegacyRegion ( EFI_STATUS EFIAPI LegacyBiosCopyLegacyRegion ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN UINTN LegacyMemorySize, - IN VOID *LegacyMemoryAddress, - IN VOID *LegacyMemorySourceAddress + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN UINTN LegacyMemorySize, + IN VOID *LegacyMemoryAddress, + IN VOID *LegacyMemorySourceAddress ); /** @@ -1295,8 +1270,8 @@ HasMediaInFloppy ( **/ EFI_STATUS CalculateIdentifyDriveChecksum ( - IN UINT8 *IdentifyDriveData, - OUT UINT8 *Checksum + IN UINT8 *IdentifyDriveData, + OUT UINT8 *Checksum ); /** @@ -1307,7 +1282,7 @@ CalculateIdentifyDriveChecksum ( **/ VOID UpdateIdentifyDriveData ( - IN UINT8 *IdentifyDriveData + IN UINT8 *IdentifyDriveData ); /** @@ -1321,8 +1296,8 @@ UpdateIdentifyDriveData ( **/ EFI_STATUS LegacyBiosBuildBbs ( - IN LEGACY_BIOS_INSTANCE *Private, - IN BBS_TABLE *BbsTable + IN LEGACY_BIOS_INSTANCE *Private, + IN BBS_TABLE *BbsTable ); /** @@ -1386,14 +1361,14 @@ LegacyCalculateWriteStandardCmosChecksum ( **/ EFI_STATUS LegacyBiosCheckPciRomEx ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN EFI_HANDLE PciHandle, - OUT VOID **RomImage OPTIONAL, - OUT UINTN *RomSize OPTIONAL, - OUT UINTN *RuntimeImageLength OPTIONAL, - OUT UINTN *Flags OPTIONAL, - OUT UINT8 *OpromRevision OPTIONAL, - OUT VOID **ConfigUtilityCodeHeader OPTIONAL + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN EFI_HANDLE PciHandle, + OUT VOID **RomImage OPTIONAL, + OUT UINTN *RomSize OPTIONAL, + OUT UINTN *RuntimeImageLength OPTIONAL, + OUT UINTN *Flags OPTIONAL, + OUT UINT8 *OpromRevision OPTIONAL, + OUT VOID **ConfigUtilityCodeHeader OPTIONAL ); /** @@ -1408,8 +1383,8 @@ LegacyBiosCheckPciRomEx ( **/ EFI_STATUS RelocateImageUnder4GIfNeeded ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ); /** @@ -1433,12 +1408,12 @@ RelocateImageUnder4GIfNeeded ( BOOLEAN EFIAPI InternalLegacyBiosFarCall ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN UINT16 Segment, - IN UINT16 Offset, - IN EFI_IA32_REGISTER_SET *Regs, - IN VOID *Stack, - IN UINTN StackSize + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN UINT16 Segment, + IN UINT16 Offset, + IN EFI_IA32_REGISTER_SET *Regs, + IN VOID *Stack, + IN UINTN StackSize ); /** @@ -1454,7 +1429,7 @@ InternalLegacyBiosFarCall ( **/ EFI_STATUS LegacyBiosInstallVgaRom ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ); #endif diff --git a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBootSupport.c b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBootSupport.c index 9a09d72307..83d94cf289 100644 --- a/OvmfPkg/Csm/LegacyBiosDxe/LegacyBootSupport.c +++ b/OvmfPkg/Csm/LegacyBiosDxe/LegacyBootSupport.c @@ -13,18 +13,18 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #define BOOT_EFI_OS 1 #define BOOT_UNCONVENTIONAL_DEVICE 2 -UINT32 mLoadOptionsSize = 0; -UINTN mBootMode = BOOT_LEGACY_OS; -VOID *mLoadOptions = NULL; -BBS_BBS_DEVICE_PATH *mBbsDevicePathPtr = NULL; -BBS_BBS_DEVICE_PATH mBbsDevicePathNode; -UDC_ATTRIBUTES mAttributes = { 0, 0, 0, 0 }; -UINTN mBbsEntry = 0; -VOID *mBeerData = NULL; -VOID *mServiceAreaData = NULL; -UINT64 mLowWater = 0xffffffffffffffffULL; - -extern BBS_TABLE *mBbsTable; +UINT32 mLoadOptionsSize = 0; +UINTN mBootMode = BOOT_LEGACY_OS; +VOID *mLoadOptions = NULL; +BBS_BBS_DEVICE_PATH *mBbsDevicePathPtr = NULL; +BBS_BBS_DEVICE_PATH mBbsDevicePathNode; +UDC_ATTRIBUTES mAttributes = { 0, 0, 0, 0 }; +UINTN mBbsEntry = 0; +VOID *mBeerData = NULL; +VOID *mServiceAreaData = NULL; +UINT64 mLowWater = 0xffffffffffffffffULL; + +extern BBS_TABLE *mBbsTable; extern VOID *mRuntimeSmbiosEntryPoint; extern EFI_PHYSICAL_ADDRESS mReserveSmbiosEntryPoint; @@ -39,12 +39,12 @@ extern EFI_PHYSICAL_ADDRESS mStructureTableAddress; **/ VOID PrintBbsTable ( - IN BBS_TABLE *BbsTable + IN BBS_TABLE *BbsTable ) { - UINT16 Index; - UINT16 SubIndex; - CHAR8 *String; + UINT16 Index; + UINT16 SubIndex; + CHAR8 *String; DEBUG ((DEBUG_INFO, "\n")); DEBUG ((DEBUG_INFO, " NO Prio bb/dd/ff cl/sc Type Stat segm:offs mfgs:mfgo dess:deso\n")); @@ -60,25 +60,25 @@ PrintBbsTable ( DEBUG (( DEBUG_INFO, " %02x: %04x %02x/%02x/%02x %02x/%02x %04x %04x", - (UINTN) Index, - (UINTN) BbsTable[Index].BootPriority, - (UINTN) BbsTable[Index].Bus, - (UINTN) BbsTable[Index].Device, - (UINTN) BbsTable[Index].Function, - (UINTN) BbsTable[Index].Class, - (UINTN) BbsTable[Index].SubClass, - (UINTN) BbsTable[Index].DeviceType, - (UINTN) * (UINT16 *) &BbsTable[Index].StatusFlags + (UINTN)Index, + (UINTN)BbsTable[Index].BootPriority, + (UINTN)BbsTable[Index].Bus, + (UINTN)BbsTable[Index].Device, + (UINTN)BbsTable[Index].Function, + (UINTN)BbsTable[Index].Class, + (UINTN)BbsTable[Index].SubClass, + (UINTN)BbsTable[Index].DeviceType, + (UINTN)*(UINT16 *)&BbsTable[Index].StatusFlags )); DEBUG (( DEBUG_INFO, " %04x:%04x %04x:%04x %04x:%04x", - (UINTN) BbsTable[Index].BootHandlerSegment, - (UINTN) BbsTable[Index].BootHandlerOffset, - (UINTN) BbsTable[Index].MfgStringSegment, - (UINTN) BbsTable[Index].MfgStringOffset, - (UINTN) BbsTable[Index].DescStringSegment, - (UINTN) BbsTable[Index].DescStringOffset + (UINTN)BbsTable[Index].BootHandlerSegment, + (UINTN)BbsTable[Index].BootHandlerOffset, + (UINTN)BbsTable[Index].MfgStringSegment, + (UINTN)BbsTable[Index].MfgStringOffset, + (UINTN)BbsTable[Index].DescStringSegment, + (UINTN)BbsTable[Index].DescStringOffset )); // @@ -86,18 +86,20 @@ PrintBbsTable ( // String = (CHAR8 *)(((UINTN)BbsTable[Index].DescStringSegment << 4) + BbsTable[Index].DescStringOffset); if (String != NULL) { - DEBUG ((DEBUG_INFO," (")); + DEBUG ((DEBUG_INFO, " (")); for (SubIndex = 0; String[SubIndex] != 0; SubIndex++) { DEBUG ((DEBUG_INFO, "%c", String[SubIndex])); } - DEBUG ((DEBUG_INFO,")")); + + DEBUG ((DEBUG_INFO, ")")); } - DEBUG ((DEBUG_INFO,"\n")); + + DEBUG ((DEBUG_INFO, "\n")); } DEBUG ((DEBUG_INFO, "\n")); - return ; + return; } /** @@ -109,10 +111,10 @@ PrintBbsTable ( **/ VOID PrintHddInfo ( - IN HDD_INFO *HddInfo + IN HDD_INFO *HddInfo ) { - UINTN Index; + UINTN Index; DEBUG ((DEBUG_INFO, "\n")); for (Index = 0; Index < MAX_IDE_CONTROLLER; Index++) { @@ -129,7 +131,7 @@ PrintHddInfo ( DEBUG ((DEBUG_INFO, "\n")); - return ; + return; } /** @@ -140,16 +142,16 @@ PrintPciInterruptRegister ( VOID ) { - EFI_STATUS Status; - UINTN Index; - EFI_HANDLE *Handles; - UINTN HandleNum; - EFI_PCI_IO_PROTOCOL *PciIo; - UINT8 Interrupt[2]; - UINTN Segment; - UINTN Bus; - UINTN Device; - UINTN Function; + EFI_STATUS Status; + UINTN Index; + EFI_HANDLE *Handles; + UINTN HandleNum; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT8 Interrupt[2]; + UINTN Segment; + UINTN Bus; + UINTN Device; + UINTN Function; gBS->LocateHandleBuffer ( ByProtocol, @@ -167,7 +169,7 @@ PrintPciInterruptRegister ( DEBUG ((DEBUG_INFO, " bb/dd/ff interrupt line interrupt pin\n")); DEBUG ((DEBUG_INFO, "======================================\n")); for (Index = 0; Index < HandleNum; Index++) { - Status = gBS->HandleProtocol (Handles[Index], &gEfiPciIoProtocolGuid, (VOID **) &PciIo); + Status = gBS->HandleProtocol (Handles[Index], &gEfiPciIoProtocolGuid, (VOID **)&PciIo); if (!EFI_ERROR (Status)) { Status = PciIo->Pci.Read ( PciIo, @@ -177,6 +179,7 @@ PrintPciInterruptRegister ( Interrupt ); } + if (!EFI_ERROR (Status)) { Status = PciIo->GetLocation ( PciIo, @@ -186,11 +189,20 @@ PrintPciInterruptRegister ( &Function ); } + if (!EFI_ERROR (Status)) { - DEBUG ((DEBUG_INFO, " %02x/%02x/%02x 0x%02x 0x%02x\n", - Bus, Device, Function, Interrupt[0], Interrupt[1])); + DEBUG (( + DEBUG_INFO, + " %02x/%02x/%02x 0x%02x 0x%02x\n", + Bus, + Device, + Function, + Interrupt[0], + Interrupt[1] + )); } } + DEBUG ((DEBUG_INFO, "\n")); if (Handles != NULL) { @@ -206,7 +218,7 @@ PrintPciInterruptRegister ( **/ VOID UpdateIdentifyDriveData ( - IN UINT8 *IdentifyDriveData + IN UINT8 *IdentifyDriveData ); /** @@ -219,30 +231,30 @@ UpdateIdentifyDriveData ( **/ EFI_STATUS UpdateSioData ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ) { - EFI_STATUS Status; - UINTN Index; - UINTN Index1; - UINT8 LegacyInterrupts[16]; - EFI_LEGACY_IRQ_ROUTING_ENTRY *RoutingTable; - UINTN RoutingTableEntries; - EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY *IrqPriorityTable; - UINTN NumberPriorityEntries; - EFI_TO_COMPATIBILITY16_BOOT_TABLE *EfiToLegacy16BootTable; - UINT8 HddIrq; - UINT16 LegacyInt; - UINT16 LegMask; - UINT32 Register; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - EFI_ISA_IO_PROTOCOL *IsaIo; - - LegacyInt = 0; - HandleBuffer = NULL; - - EfiToLegacy16BootTable = &Private->IntThunk->EfiToLegacy16BootTable; + EFI_STATUS Status; + UINTN Index; + UINTN Index1; + UINT8 LegacyInterrupts[16]; + EFI_LEGACY_IRQ_ROUTING_ENTRY *RoutingTable; + UINTN RoutingTableEntries; + EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY *IrqPriorityTable; + UINTN NumberPriorityEntries; + EFI_TO_COMPATIBILITY16_BOOT_TABLE *EfiToLegacy16BootTable; + UINT8 HddIrq; + UINT16 LegacyInt; + UINT16 LegMask; + UINT32 Register; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + EFI_ISA_IO_PROTOCOL *IsaIo; + + LegacyInt = 0; + HandleBuffer = NULL; + + EfiToLegacy16BootTable = &Private->IntThunk->EfiToLegacy16BootTable; LegacyBiosBuildSioData (Private); SetMem (LegacyInterrupts, sizeof (LegacyInterrupts), 0); @@ -270,21 +282,21 @@ UpdateSioData ( } Private->LegacyBiosPlatform->GetRoutingTable ( - Private->LegacyBiosPlatform, - (VOID *) &RoutingTable, - &RoutingTableEntries, - NULL, - NULL, - (VOID **) &IrqPriorityTable, - &NumberPriorityEntries - ); + Private->LegacyBiosPlatform, + (VOID *)&RoutingTable, + &RoutingTableEntries, + NULL, + NULL, + (VOID **)&IrqPriorityTable, + &NumberPriorityEntries + ); // // Remove legacy interrupts from the list of PCI interrupts available. // for (Index = 0; Index <= 0x0b; Index++) { for (Index1 = 0; Index1 <= NumberPriorityEntries; Index1++) { if (LegacyInterrupts[Index] != 0) { - LegacyInt = (UINT16) (LegacyInt | (1 << LegacyInterrupts[Index])); + LegacyInt = (UINT16)(LegacyInt | (1 << LegacyInterrupts[Index])); if (LegacyInterrupts[Index] == IrqPriorityTable[Index1].Irq) { IrqPriorityTable[Index1].Used = LEGACY_USED; } @@ -293,37 +305,37 @@ UpdateSioData ( } Private->Legacy8259->GetMask ( - Private->Legacy8259, - &LegMask, - NULL, - NULL, - NULL - ); + Private->Legacy8259, + &LegMask, + NULL, + NULL, + NULL + ); // // Set SIO interrupts and disable mouse. Let mouse driver // re-enable it. // - LegMask = (UINT16) ((LegMask &~LegacyInt) | 0x1000); + LegMask = (UINT16)((LegMask &~LegacyInt) | 0x1000); Private->Legacy8259->SetMask ( - Private->Legacy8259, - &LegMask, - NULL, - NULL, - NULL - ); + Private->Legacy8259, + &LegMask, + NULL, + NULL, + NULL + ); // // Disable mouse in keyboard controller // Register = 0xA7; - Status = gBS->LocateHandleBuffer ( - ByProtocol, - &gEfiIsaIoProtocolGuid, - NULL, - &HandleCount, - &HandleBuffer - ); + Status = gBS->LocateHandleBuffer ( + ByProtocol, + &gEfiIsaIoProtocolGuid, + NULL, + &HandleCount, + &HandleBuffer + ); if (EFI_ERROR (Status)) { return Status; } @@ -332,11 +344,10 @@ UpdateSioData ( Status = gBS->HandleProtocol ( HandleBuffer[Index], &gEfiIsaIoProtocolGuid, - (VOID **) &IsaIo + (VOID **)&IsaIo ); ASSERT_EFI_ERROR (Status); IsaIo->Io.Write (IsaIo, EfiIsaIoWidthUint8, 0x64, 1, &Register); - } if (HandleBuffer != NULL) { @@ -344,7 +355,6 @@ UpdateSioData ( } return EFI_SUCCESS; - } /** @@ -360,12 +370,13 @@ UpdateSioData ( **/ EFI_STATUS CalculateIdentifyDriveChecksum ( - IN UINT8 *IdentifyDriveData, - OUT UINT8 *Checksum + IN UINT8 *IdentifyDriveData, + OUT UINT8 *Checksum ) { - UINTN Index; - UINT8 LocalChecksum; + UINTN Index; + UINT8 LocalChecksum; + LocalChecksum = 0; *Checksum = 0; if (IdentifyDriveData[510] != 0xA5) { @@ -373,14 +384,13 @@ CalculateIdentifyDriveChecksum ( } for (Index = 0; Index < 512; Index++) { - LocalChecksum = (UINT8) (LocalChecksum + IdentifyDriveData[Index]); + LocalChecksum = (UINT8)(LocalChecksum + IdentifyDriveData[Index]); } *Checksum = LocalChecksum; return EFI_SUCCESS; } - /** Identify drive data must be updated to actual parameters before boot. @@ -390,7 +400,7 @@ CalculateIdentifyDriveChecksum ( **/ VOID UpdateIdentifyDriveData ( - IN UINT8 *IdentifyDriveData + IN UINT8 *IdentifyDriveData ) { UINT16 NumberCylinders; @@ -406,31 +416,32 @@ UpdateIdentifyDriveData ( // Status indicates if Integrity byte is correct. Checksum should be // 0 if valid. // - ReadInfo = (ATAPI_IDENTIFY *) IdentifyDriveData; - Status = CalculateIdentifyDriveChecksum (IdentifyDriveData, &OriginalChecksum); + ReadInfo = (ATAPI_IDENTIFY *)IdentifyDriveData; + Status = CalculateIdentifyDriveChecksum (IdentifyDriveData, &OriginalChecksum); if (OriginalChecksum != 0) { Status = EFI_SECURITY_VIOLATION; } + // // If NumberCylinders = 0 then do data(Controller present but don drive attached). // NumberCylinders = ReadInfo->Raw[1]; if (NumberCylinders != 0) { - ReadInfo->Raw[54] = NumberCylinders; + ReadInfo->Raw[54] = NumberCylinders; - NumberHeads = ReadInfo->Raw[3]; - ReadInfo->Raw[55] = NumberHeads; + NumberHeads = ReadInfo->Raw[3]; + ReadInfo->Raw[55] = NumberHeads; - NumberSectorsTrack = ReadInfo->Raw[6]; - ReadInfo->Raw[56] = NumberSectorsTrack; + NumberSectorsTrack = ReadInfo->Raw[6]; + ReadInfo->Raw[56] = NumberSectorsTrack; // // Copy Multisector info and set valid bit. // - ReadInfo->Raw[59] = (UINT16) (ReadInfo->Raw[47] + 0x100); - CapacityInSectors = (UINT32) ((UINT32) (NumberCylinders) * (UINT32) (NumberHeads) * (UINT32) (NumberSectorsTrack)); - ReadInfo->Raw[57] = (UINT16) (CapacityInSectors >> 16); - ReadInfo->Raw[58] = (UINT16) (CapacityInSectors & 0xffff); + ReadInfo->Raw[59] = (UINT16)(ReadInfo->Raw[47] + 0x100); + CapacityInSectors = (UINT32)((UINT32)(NumberCylinders) * (UINT32)(NumberHeads) * (UINT32)(NumberSectorsTrack)); + ReadInfo->Raw[57] = (UINT16)(CapacityInSectors >> 16); + ReadInfo->Raw[58] = (UINT16)(CapacityInSectors & 0xffff); if (Status == EFI_SUCCESS) { // // Forece checksum byte to 0 and get new checksum. @@ -441,8 +452,8 @@ UpdateIdentifyDriveData ( // // Force new checksum such that sum is 0. // - FinalChecksum = (UINT8) ((UINT8)0 - FinalChecksum); - ReadInfo->Raw[255] = (UINT16) (ReadInfo->Raw[255] | (FinalChecksum << 8)); + FinalChecksum = (UINT8)((UINT8)0 - FinalChecksum); + ReadInfo->Raw[255] = (UINT16)(ReadInfo->Raw[255] | (FinalChecksum << 8)); } } } @@ -457,7 +468,7 @@ UpdateIdentifyDriveData ( **/ VOID UpdateAllIdentifyDriveData ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ) { UINTN Index; @@ -470,11 +481,11 @@ UpdateAllIdentifyDriveData ( // Each controller can have 2 devices. Update for each device // if ((HddInfo[Index].Status & HDD_MASTER_IDE) != 0) { - UpdateIdentifyDriveData ((UINT8 *) (&HddInfo[Index].IdentifyDrive[0].Raw[0])); + UpdateIdentifyDriveData ((UINT8 *)(&HddInfo[Index].IdentifyDrive[0].Raw[0])); } if ((HddInfo[Index].Status & HDD_SLAVE_IDE) != 0) { - UpdateIdentifyDriveData ((UINT8 *) (&HddInfo[Index].IdentifyDrive[1].Raw[0])); + UpdateIdentifyDriveData ((UINT8 *)(&HddInfo[Index].IdentifyDrive[1].Raw[0])); } } } @@ -489,15 +500,15 @@ UpdateAllIdentifyDriveData ( **/ VOID EnableIdeController ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ) { - EFI_PCI_IO_PROTOCOL *PciIo; - EFI_STATUS Status; - EFI_HANDLE IdeController; - UINT8 ByteBuffer; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; + EFI_PCI_IO_PROTOCOL *PciIo; + EFI_STATUS Status; + EFI_HANDLE IdeController; + UINT8 ByteBuffer; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; Status = Private->LegacyBiosPlatform->GetPlatformHandle ( Private->LegacyBiosPlatform, @@ -509,11 +520,11 @@ EnableIdeController ( ); if (!EFI_ERROR (Status)) { IdeController = HandleBuffer[0]; - Status = gBS->HandleProtocol ( - IdeController, - &gEfiPciIoProtocolGuid, - (VOID **) &PciIo - ); + Status = gBS->HandleProtocol ( + IdeController, + &gEfiPciIoProtocolGuid, + (VOID **)&PciIo + ); ByteBuffer = 0x1f; if (!EFI_ERROR (Status)) { PciIo->Pci.Write (PciIo, EfiPciIoWidthUint8, 0x04, 1, &ByteBuffer); @@ -521,7 +532,6 @@ EnableIdeController ( } } - /** Enable ide controller. This gets disabled when LegacyBoot.c is about to run the Option ROMs. @@ -532,15 +542,15 @@ EnableIdeController ( **/ VOID EnableAllControllers ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ) { - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN Index; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE01 PciConfigHeader; - EFI_STATUS Status; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + UINTN Index; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE01 PciConfigHeader; + EFI_STATUS Status; // // @@ -563,17 +573,17 @@ EnableAllControllers ( Status = gBS->HandleProtocol ( HandleBuffer[Index], &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); ASSERT_EFI_ERROR (Status); PciIo->Pci.Read ( - PciIo, - EfiPciIoWidthUint32, - 0, - sizeof (PciConfigHeader) / sizeof (UINT32), - &PciConfigHeader - ); + PciIo, + EfiPciIoWidthUint32, + 0, + sizeof (PciConfigHeader) / sizeof (UINT32), + &PciConfigHeader + ); // // We do not enable PPB here. This is for HotPlug Consideration. @@ -600,8 +610,8 @@ EnableAllControllers ( IS_PCI_IDE (&PciConfigHeader) || IS_PCI_P2P (&PciConfigHeader) || IS_PCI_P2P_SUB (&PciConfigHeader) || - IS_PCI_LPC (&PciConfigHeader) )) { - + IS_PCI_LPC (&PciConfigHeader))) + { PciConfigHeader.Hdr.Command |= 0x1f; PciIo->Pci.Write (PciIo, EfiPciIoWidthUint32, 4, 1, &PciConfigHeader.Hdr.Command); @@ -627,52 +637,52 @@ EnableAllControllers ( **/ EFI_STATUS LegacyGetDataOrTable ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN EFI_GET_PLATFORM_INFO_MODE Id + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN EFI_GET_PLATFORM_INFO_MODE Id ) { - VOID *Table; - UINT32 TablePtr; - UINTN TableSize; - UINTN Alignment; - UINTN Location; - EFI_STATUS Status; - EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *LegacyBiosPlatform; - EFI_COMPATIBILITY16_TABLE *Legacy16Table; - EFI_IA32_REGISTER_SET Regs; - LEGACY_BIOS_INSTANCE *Private; + VOID *Table; + UINT32 TablePtr; + UINTN TableSize; + UINTN Alignment; + UINTN Location; + EFI_STATUS Status; + EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *LegacyBiosPlatform; + EFI_COMPATIBILITY16_TABLE *Legacy16Table; + EFI_IA32_REGISTER_SET Regs; + LEGACY_BIOS_INSTANCE *Private; - Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); + Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); - LegacyBiosPlatform = Private->LegacyBiosPlatform; - Legacy16Table = Private->Legacy16Table; + LegacyBiosPlatform = Private->LegacyBiosPlatform; + Legacy16Table = Private->Legacy16Table; // // Phase 1 - get an address allocated in 16-bit code // while (TRUE) { switch (Id) { - case EfiGetPlatformBinaryMpTable: - case EfiGetPlatformBinaryOemIntData: - case EfiGetPlatformBinaryOem32Data: - case EfiGetPlatformBinaryOem16Data: + case EfiGetPlatformBinaryMpTable: + case EfiGetPlatformBinaryOemIntData: + case EfiGetPlatformBinaryOem32Data: + case EfiGetPlatformBinaryOem16Data: { Status = LegacyBiosPlatform->GetPlatformInfo ( - LegacyBiosPlatform, - Id, - (VOID *) &Table, - &TableSize, - &Location, - &Alignment, - 0, - 0 - ); + LegacyBiosPlatform, + Id, + (VOID *)&Table, + &TableSize, + &Location, + &Alignment, + 0, + 0 + ); DEBUG ((DEBUG_INFO, "LegacyGetDataOrTable - ID: %x, %r\n", (UINTN)Id, Status)); DEBUG ((DEBUG_INFO, " Table - %x, Size - %x, Location - %x, Alignment - %x\n", (UINTN)Table, (UINTN)TableSize, (UINTN)Location, (UINTN)Alignment)); break; } - default: + default: { return EFI_INVALID_PARAMETER; } @@ -684,17 +694,17 @@ LegacyGetDataOrTable ( ZeroMem (&Regs, sizeof (EFI_IA32_REGISTER_SET)); Regs.X.AX = Legacy16GetTableAddress; - Regs.X.CX = (UINT16) TableSize; - Regs.X.BX = (UINT16) Location; - Regs.X.DX = (UINT16) Alignment; + Regs.X.CX = (UINT16)TableSize; + Regs.X.BX = (UINT16)Location; + Regs.X.DX = (UINT16)Alignment; Private->LegacyBios.FarCall86 ( - This, - Private->Legacy16CallSegment, - Private->Legacy16CallOffset, - &Regs, - NULL, - 0 - ); + This, + Private->Legacy16CallSegment, + Private->Legacy16CallOffset, + &Regs, + NULL, + 0 + ); if (Regs.X.AX != 0) { DEBUG ((DEBUG_ERROR, "Table ID %x length insufficient\n", Id)); @@ -703,38 +713,38 @@ LegacyGetDataOrTable ( break; } } + // // Phase 2 Call routine second time with address to allow address adjustment // Status = LegacyBiosPlatform->GetPlatformInfo ( - LegacyBiosPlatform, - Id, - (VOID *) &Table, - &TableSize, - &Location, - &Alignment, - Regs.X.DS, - Regs.X.BX - ); + LegacyBiosPlatform, + Id, + (VOID *)&Table, + &TableSize, + &Location, + &Alignment, + Regs.X.DS, + Regs.X.BX + ); switch (Id) { - case EfiGetPlatformBinaryMpTable: + case EfiGetPlatformBinaryMpTable: { - Legacy16Table->MpTablePtr = (UINT32) (Regs.X.DS * 16 + Regs.X.BX); - Legacy16Table->MpTableLength = (UINT32)TableSize; + Legacy16Table->MpTablePtr = (UINT32)(Regs.X.DS * 16 + Regs.X.BX); + Legacy16Table->MpTableLength = (UINT32)TableSize; DEBUG ((DEBUG_INFO, "MP table in legacy region - %x\n", (UINTN)Legacy16Table->MpTablePtr)); break; } - case EfiGetPlatformBinaryOemIntData: + case EfiGetPlatformBinaryOemIntData: { - - Legacy16Table->OemIntSegment = Regs.X.DS; - Legacy16Table->OemIntOffset = Regs.X.BX; + Legacy16Table->OemIntSegment = Regs.X.DS; + Legacy16Table->OemIntOffset = Regs.X.BX; DEBUG ((DEBUG_INFO, "OemInt table in legacy region - %04x:%04x\n", (UINTN)Legacy16Table->OemIntSegment, (UINTN)Legacy16Table->OemIntOffset)); break; } - case EfiGetPlatformBinaryOem32Data: + case EfiGetPlatformBinaryOem32Data: { Legacy16Table->Oem32Segment = Regs.X.DS; Legacy16Table->Oem32Offset = Regs.X.BX; @@ -742,7 +752,7 @@ LegacyGetDataOrTable ( break; } - case EfiGetPlatformBinaryOem16Data: + case EfiGetPlatformBinaryOem16Data: { // // Legacy16Table->Oem16Segment = Regs.X.DS; @@ -751,7 +761,7 @@ LegacyGetDataOrTable ( break; } - default: + default: { return EFI_INVALID_PARAMETER; } @@ -760,13 +770,14 @@ LegacyGetDataOrTable ( if (EFI_ERROR (Status)) { return Status; } + // // Phase 3 Copy table to final location // - TablePtr = (UINT32) (Regs.X.DS * 16 + Regs.X.BX); + TablePtr = (UINT32)(Regs.X.DS * 16 + Regs.X.BX); CopyMem ( - (VOID *) (UINTN)TablePtr, + (VOID *)(UINTN)TablePtr, Table, TableSize ); @@ -783,53 +794,54 @@ CreateSmbiosTableInReservedMemory ( VOID ) { - SMBIOS_TABLE_ENTRY_POINT *EntryPointStructure; + SMBIOS_TABLE_ENTRY_POINT *EntryPointStructure; if ((mRuntimeSmbiosEntryPoint == NULL) || (mReserveSmbiosEntryPoint == 0) || - (mStructureTableAddress == 0)) { + (mStructureTableAddress == 0)) + { return; } - EntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *) mRuntimeSmbiosEntryPoint; + EntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *)mRuntimeSmbiosEntryPoint; // // Copy SMBIOS Entry Point Structure // CopyMem ( - (VOID *)(UINTN) mReserveSmbiosEntryPoint, + (VOID *)(UINTN)mReserveSmbiosEntryPoint, EntryPointStructure, EntryPointStructure->EntryPointLength - ); + ); // // Copy SMBIOS Structure Table into EfiReservedMemoryType memory // CopyMem ( - (VOID *)(UINTN) mStructureTableAddress, - (VOID *)(UINTN) EntryPointStructure->TableAddress, + (VOID *)(UINTN)mStructureTableAddress, + (VOID *)(UINTN)EntryPointStructure->TableAddress, EntryPointStructure->TableLength - ); + ); // // Update TableAddress in Entry Point Structure // - EntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *)(UINTN) mReserveSmbiosEntryPoint; - EntryPointStructure->TableAddress = (UINT32)(UINTN) mStructureTableAddress; + EntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *)(UINTN)mReserveSmbiosEntryPoint; + EntryPointStructure->TableAddress = (UINT32)(UINTN)mStructureTableAddress; // // Fixup checksums in the Entry Point Structure // - EntryPointStructure->IntermediateChecksum = 0; + EntryPointStructure->IntermediateChecksum = 0; EntryPointStructure->EntryPointStructureChecksum = 0; EntryPointStructure->IntermediateChecksum = CalculateCheckSum8 ( - (UINT8 *) EntryPointStructure + OFFSET_OF (SMBIOS_TABLE_ENTRY_POINT, IntermediateAnchorString), + (UINT8 *)EntryPointStructure + OFFSET_OF (SMBIOS_TABLE_ENTRY_POINT, IntermediateAnchorString), EntryPointStructure->EntryPointLength - OFFSET_OF (SMBIOS_TABLE_ENTRY_POINT, IntermediateAnchorString) ); EntryPointStructure->EntryPointStructureChecksum = - CalculateCheckSum8 ((UINT8 *) EntryPointStructure, EntryPointStructure->EntryPointLength); + CalculateCheckSum8 ((UINT8 *)EntryPointStructure, EntryPointStructure->EntryPointLength); } /** @@ -845,47 +857,47 @@ CreateSmbiosTableInReservedMemory ( **/ EFI_STATUS GenericLegacyBoot ( - IN EFI_LEGACY_BIOS_PROTOCOL *This + IN EFI_LEGACY_BIOS_PROTOCOL *This ) { - EFI_STATUS Status; - LEGACY_BIOS_INSTANCE *Private; - EFI_IA32_REGISTER_SET Regs; - EFI_TO_COMPATIBILITY16_BOOT_TABLE *EfiToLegacy16BootTable; - EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *LegacyBiosPlatform; - UINTN CopySize; - VOID *AcpiPtr; - HDD_INFO *HddInfo; - HDD_INFO *LocalHddInfo; - UINTN Index; - EFI_COMPATIBILITY16_TABLE *Legacy16Table; - UINT32 *BdaPtr; - UINT16 HddCount; - UINT16 BbsCount; - BBS_TABLE *LocalBbsTable; - UINT32 *BaseVectorMaster; - EFI_TIME BootTime; - UINT32 LocalTime; - EFI_HANDLE IdeController; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - VOID *AcpiTable; - UINTN ShadowAddress; - UINT32 Granularity; + EFI_STATUS Status; + LEGACY_BIOS_INSTANCE *Private; + EFI_IA32_REGISTER_SET Regs; + EFI_TO_COMPATIBILITY16_BOOT_TABLE *EfiToLegacy16BootTable; + EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *LegacyBiosPlatform; + UINTN CopySize; + VOID *AcpiPtr; + HDD_INFO *HddInfo; + HDD_INFO *LocalHddInfo; + UINTN Index; + EFI_COMPATIBILITY16_TABLE *Legacy16Table; + UINT32 *BdaPtr; + UINT16 HddCount; + UINT16 BbsCount; + BBS_TABLE *LocalBbsTable; + UINT32 *BaseVectorMaster; + EFI_TIME BootTime; + UINT32 LocalTime; + EFI_HANDLE IdeController; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + VOID *AcpiTable; + UINTN ShadowAddress; + UINT32 Granularity; LocalHddInfo = NULL; HddCount = 0; BbsCount = 0; LocalBbsTable = NULL; - Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); + Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); DEBUG_CODE ( DEBUG ((DEBUG_ERROR, "Start of legacy boot\n")); - ); + ); - Legacy16Table = Private->Legacy16Table; - EfiToLegacy16BootTable = &Private->IntThunk->EfiToLegacy16BootTable; - HddInfo = &EfiToLegacy16BootTable->HddInfo[0]; + Legacy16Table = Private->Legacy16Table; + EfiToLegacy16BootTable = &Private->IntThunk->EfiToLegacy16BootTable; + HddInfo = &EfiToLegacy16BootTable->HddInfo[0]; LegacyBiosPlatform = Private->LegacyBiosPlatform; @@ -900,17 +912,18 @@ GenericLegacyBoot ( IdeController = NULL; if ((mBootMode == BOOT_LEGACY_OS) || (mBootMode == BOOT_UNCONVENTIONAL_DEVICE)) { Status = LegacyBiosPlatform->GetPlatformHandle ( - Private->LegacyBiosPlatform, - EfiGetPlatformIdeHandle, - 0, - &HandleBuffer, - &HandleCount, - NULL - ); + Private->LegacyBiosPlatform, + EfiGetPlatformIdeHandle, + 0, + &HandleBuffer, + &HandleCount, + NULL + ); if (!EFI_ERROR (Status)) { IdeController = HandleBuffer[0]; } } + // // Unlock the Legacy BIOS region // @@ -928,37 +941,37 @@ GenericLegacyBoot ( if (CopySize > Private->Legacy16Table->E820Length) { ZeroMem (&Regs, sizeof (EFI_IA32_REGISTER_SET)); Regs.X.AX = Legacy16GetTableAddress; - Regs.X.BX = (UINT16) 0x0; // Any region - Regs.X.CX = (UINT16) CopySize; - Regs.X.DX = (UINT16) 0x4; // Alignment + Regs.X.BX = (UINT16)0x0; // Any region + Regs.X.CX = (UINT16)CopySize; + Regs.X.DX = (UINT16)0x4; // Alignment Private->LegacyBios.FarCall86 ( - &Private->LegacyBios, - Private->Legacy16Table->Compatibility16CallSegment, - Private->Legacy16Table->Compatibility16CallOffset, - &Regs, - NULL, - 0 - ); - - Private->Legacy16Table->E820Pointer = (UINT32) (Regs.X.DS * 16 + Regs.X.BX); - Private->Legacy16Table->E820Length = (UINT32) CopySize; + &Private->LegacyBios, + Private->Legacy16Table->Compatibility16CallSegment, + Private->Legacy16Table->Compatibility16CallOffset, + &Regs, + NULL, + 0 + ); + + Private->Legacy16Table->E820Pointer = (UINT32)(Regs.X.DS * 16 + Regs.X.BX); + Private->Legacy16Table->E820Length = (UINT32)CopySize; if (Regs.X.AX != 0) { DEBUG ((DEBUG_ERROR, "Legacy16 E820 length insufficient\n")); return EFI_OUT_OF_RESOURCES; } else { CopyMem ( - (VOID *)(UINTN) Private->Legacy16Table->E820Pointer, + (VOID *)(UINTN)Private->Legacy16Table->E820Pointer, Private->E820Table, CopySize ); } } else { CopyMem ( - (VOID *)(UINTN) Private->Legacy16Table->E820Pointer, + (VOID *)(UINTN)Private->Legacy16Table->E820Pointer, Private->E820Table, CopySize ); - Private->Legacy16Table->E820Length = (UINT32) CopySize; + Private->Legacy16Table->E820Length = (UINT32)CopySize; } // @@ -967,26 +980,29 @@ GenericLegacyBoot ( if (mReserveSmbiosEntryPoint == 0) { DEBUG ((DEBUG_INFO, "Smbios table is not found!\n")); } + CreateSmbiosTableInReservedMemory (); EfiToLegacy16BootTable->SmbiosTable = (UINT32)(UINTN)mReserveSmbiosEntryPoint; AcpiTable = NULL; - Status = EfiGetSystemConfigurationTable ( - &gEfiAcpi20TableGuid, - &AcpiTable - ); + Status = EfiGetSystemConfigurationTable ( + &gEfiAcpi20TableGuid, + &AcpiTable + ); if (EFI_ERROR (Status)) { Status = EfiGetSystemConfigurationTable ( &gEfiAcpi10TableGuid, &AcpiTable ); } + // // We do not ASSERT if AcpiTable not found. It is possible that a platform does not produce AcpiTable. // if (AcpiTable == NULL) { DEBUG ((DEBUG_INFO, "ACPI table is not found!\n")); } + EfiToLegacy16BootTable->AcpiTable = (UINT32)(UINTN)AcpiTable; // @@ -995,21 +1011,21 @@ GenericLegacyBoot ( // Rev != 0 Length is UINT32 at offset 20 decimal // if (AcpiTable != NULL) { - AcpiPtr = AcpiTable; - if (*((UINT8 *) AcpiPtr + 15) == 0) { + if (*((UINT8 *)AcpiPtr + 15) == 0) { CopySize = 20; } else { - AcpiPtr = ((UINT8 *) AcpiPtr + 20); - CopySize = (*(UINT32 *) AcpiPtr); + AcpiPtr = ((UINT8 *)AcpiPtr + 20); + CopySize = (*(UINT32 *)AcpiPtr); } CopyMem ( - (VOID *)(UINTN) Private->Legacy16Table->AcpiRsdPtrPointer, + (VOID *)(UINTN)Private->Legacy16Table->AcpiRsdPtrPointer, AcpiTable, CopySize ); } + // // Make sure all PCI Interrupt Line register are programmed to match 8259 // @@ -1034,12 +1050,13 @@ GenericLegacyBoot ( if ((mBootMode == BOOT_LEGACY_OS) || (mBootMode == BOOT_UNCONVENTIONAL_DEVICE)) { UpdateSioData (Private); } + // // Setup BDA and EBDA standard areas before Legacy Boot // ACCESS_PAGE0_CODE ( LegacyBiosCompleteBdaBeforeBoot (Private); - ); + ); LegacyBiosCompleteStandardCmosBeforeBoot (Private); // @@ -1063,7 +1080,7 @@ GenericLegacyBoot ( // Adjust value by 1 second. // gRT->GetTime (&BootTime, NULL); - LocalTime = BootTime.Hour * 3600 + BootTime.Minute * 60 + BootTime.Second; + LocalTime = BootTime.Hour * 3600 + BootTime.Minute * 60 + BootTime.Second; LocalTime += 1; // @@ -1072,9 +1089,9 @@ GenericLegacyBoot ( // LocalTime = (LocalTime * 182) / 10; ACCESS_PAGE0_CODE ( - BdaPtr = (UINT32 *) (UINTN)0x46C; - *BdaPtr = LocalTime; - ); + BdaPtr = (UINT32 *)(UINTN)0x46C; + *BdaPtr = LocalTime; + ); // // Shadow PCI ROMs. We must do this near the end since this will kick @@ -1130,13 +1147,15 @@ GenericLegacyBoot ( for (Index = 0; Index < MAX_IDE_CONTROLLER; Index++) { if ((LocalHddInfo[Index].IdentifyDrive[0].Raw[0] != 0) && (LocalBbsTable[2 * Index + 1].BootPriority == BBS_IGNORE_ENTRY) - ) { + ) + { LocalBbsTable[2 * Index + 1].BootPriority = BBS_UNPRIORITIZED_ENTRY; } if ((LocalHddInfo[Index].IdentifyDrive[1].Raw[0] != 0) && (LocalBbsTable[2 * Index + 2].BootPriority == BBS_IGNORE_ENTRY) - ) { + ) + { LocalBbsTable[2 * Index + 2].BootPriority = BBS_UNPRIORITIZED_ENTRY; } } @@ -1154,24 +1173,27 @@ GenericLegacyBoot ( mBbsTable, mLoadOptionsSize, mLoadOptions, - (VOID *) &Private->IntThunk->EfiToLegacy16BootTable + (VOID *)&Private->IntThunk->EfiToLegacy16BootTable ); // // If no boot device return to BDS // if ((mBootMode == BOOT_LEGACY_OS) || (mBootMode == BOOT_UNCONVENTIONAL_DEVICE)) { - for (Index = 0; Index < BbsCount; Index++){ + for (Index = 0; Index < BbsCount; Index++) { if ((LocalBbsTable[Index].BootPriority != BBS_DO_NOT_BOOT_FROM) && (LocalBbsTable[Index].BootPriority != BBS_UNPRIORITIZED_ENTRY) && - (LocalBbsTable[Index].BootPriority != BBS_IGNORE_ENTRY)) { + (LocalBbsTable[Index].BootPriority != BBS_IGNORE_ENTRY)) + { break; } } + if (Index == BbsCount) { return EFI_DEVICE_ERROR; } } + // // Let the Legacy16 code know the device path type for legacy boot // @@ -1218,17 +1240,18 @@ GenericLegacyBoot ( Regs.X.BX = NORMALIZE_EFI_OFFSET ((UINTN)EfiToLegacy16BootTable); Private->LegacyBios.FarCall86 ( - This, - Private->Legacy16CallSegment, - Private->Legacy16CallOffset, - &Regs, - NULL, - 0 - ); + This, + Private->Legacy16CallSegment, + Private->Legacy16CallOffset, + &Regs, + NULL, + 0 + ); if (Regs.X.AX != 0) { return EFI_DEVICE_ERROR; } + // // Lock the Legacy BIOS region // @@ -1240,13 +1263,18 @@ GenericLegacyBoot ( ); if ((Private->Legacy16Table->TableLength >= OFFSET_OF (EFI_COMPATIBILITY16_TABLE, HiPermanentMemoryAddress)) && - ((Private->Legacy16Table->UmaAddress != 0) && (Private->Legacy16Table->UmaSize != 0))) { + ((Private->Legacy16Table->UmaAddress != 0) && (Private->Legacy16Table->UmaSize != 0))) + { // // Here we could reduce UmaAddress down as far as Private->OptionRom, taking into // account the granularity of the access control. // - DEBUG((DEBUG_INFO, "Unlocking UMB RAM region 0x%x-0x%x\n", Private->Legacy16Table->UmaAddress, - Private->Legacy16Table->UmaAddress + Private->Legacy16Table->UmaSize)); + DEBUG (( + DEBUG_INFO, + "Unlocking UMB RAM region 0x%x-0x%x\n", + Private->Legacy16Table->UmaAddress, + Private->Legacy16Table->UmaAddress + Private->Legacy16Table->UmaSize + )); Private->LegacyRegion->UnLock ( Private->LegacyRegion, @@ -1271,7 +1299,6 @@ GenericLegacyBoot ( // EnableAllControllers (Private); if ((mBootMode == BOOT_LEGACY_OS) || (mBootMode == BOOT_UNCONVENTIONAL_DEVICE)) { - // // Signal all the events that are waiting on EVT_SIGNAL_LEGACY_BOOT // @@ -1297,7 +1324,6 @@ GenericLegacyBoot ( // SaveAndSetDebugTimerInterrupt (FALSE); - // // Put the 8259 into its legacy mode by reprogramming the vector bases // @@ -1321,34 +1347,37 @@ GenericLegacyBoot ( // // ACCESS_PAGE0_CODE ( - BaseVectorMaster = (UINT32 *) (sizeof (UINT32) * PROTECTED_MODE_BASE_VECTOR_MASTER); + BaseVectorMaster = (UINT32 *)(sizeof (UINT32) * PROTECTED_MODE_BASE_VECTOR_MASTER); for (Index = 0; Index < 8; Index++) { - Private->ThunkSavedInt[Index] = BaseVectorMaster[Index]; - if (Private->ThunkSeg == (UINT16) (BaseVectorMaster[Index] >> 16)) { - BaseVectorMaster[Index] = (UINT32) (Private->BiosUnexpectedInt); - } + Private->ThunkSavedInt[Index] = BaseVectorMaster[Index]; + if (Private->ThunkSeg == (UINT16)(BaseVectorMaster[Index] >> 16)) { + BaseVectorMaster[Index] = (UINT32)(Private->BiosUnexpectedInt); } - ); + } + + ); ZeroMem (&Regs, sizeof (EFI_IA32_REGISTER_SET)); Regs.X.AX = Legacy16Boot; Private->LegacyBios.FarCall86 ( - This, - Private->Legacy16CallSegment, - Private->Legacy16CallOffset, - &Regs, - NULL, - 0 - ); + This, + Private->Legacy16CallSegment, + Private->Legacy16CallOffset, + &Regs, + NULL, + 0 + ); ACCESS_PAGE0_CODE ( - BaseVectorMaster = (UINT32 *) (sizeof (UINT32) * PROTECTED_MODE_BASE_VECTOR_MASTER); + BaseVectorMaster = (UINT32 *)(sizeof (UINT32) * PROTECTED_MODE_BASE_VECTOR_MASTER); for (Index = 0; Index < 8; Index++) { - BaseVectorMaster[Index] = Private->ThunkSavedInt[Index]; - } - ); + BaseVectorMaster[Index] = Private->ThunkSavedInt[Index]; + } + + ); } + Private->LegacyBootEntered = TRUE; if ((mBootMode == BOOT_LEGACY_OS) || (mBootMode == BOOT_UNCONVENTIONAL_DEVICE)) { // @@ -1364,7 +1393,6 @@ GenericLegacyBoot ( } } - /** Assign drive number to legacy HDD drives prior to booting an EFI aware OS so the OS can access drives without an EFI driver. @@ -1381,22 +1409,22 @@ GenericLegacyBoot ( EFI_STATUS EFIAPI LegacyBiosPrepareToBootEfi ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - OUT UINT16 *BbsCount, - OUT BBS_TABLE **BbsTable + IN EFI_LEGACY_BIOS_PROTOCOL *This, + OUT UINT16 *BbsCount, + OUT BBS_TABLE **BbsTable ) { - EFI_STATUS Status; - EFI_TO_COMPATIBILITY16_BOOT_TABLE *EfiToLegacy16BootTable; - LEGACY_BIOS_INSTANCE *Private; - - Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); - EfiToLegacy16BootTable = &Private->IntThunk->EfiToLegacy16BootTable; - mBootMode = BOOT_EFI_OS; - mBbsDevicePathPtr = NULL; - Status = GenericLegacyBoot (This); - *BbsTable = (BBS_TABLE*)(UINTN)EfiToLegacy16BootTable->BbsTable; - *BbsCount = (UINT16) (sizeof (Private->IntThunk->BbsTable) / sizeof (BBS_TABLE)); + EFI_STATUS Status; + EFI_TO_COMPATIBILITY16_BOOT_TABLE *EfiToLegacy16BootTable; + LEGACY_BIOS_INSTANCE *Private; + + Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); + EfiToLegacy16BootTable = &Private->IntThunk->EfiToLegacy16BootTable; + mBootMode = BOOT_EFI_OS; + mBbsDevicePathPtr = NULL; + Status = GenericLegacyBoot (This); + *BbsTable = (BBS_TABLE *)(UINTN)EfiToLegacy16BootTable->BbsTable; + *BbsCount = (UINT16)(sizeof (Private->IntThunk->BbsTable) / sizeof (BBS_TABLE)); return Status; } @@ -1418,28 +1446,28 @@ LegacyBiosPrepareToBootEfi ( EFI_STATUS EFIAPI LegacyBiosBootUnconventionalDevice ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN UDC_ATTRIBUTES Attributes, - IN UINTN BbsEntry, - IN VOID *BeerData, - IN VOID *ServiceAreaData + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN UDC_ATTRIBUTES Attributes, + IN UINTN BbsEntry, + IN VOID *BeerData, + IN VOID *ServiceAreaData ) { - EFI_STATUS Status; - EFI_TO_COMPATIBILITY16_BOOT_TABLE *EfiToLegacy16BootTable; - LEGACY_BIOS_INSTANCE *Private; - UD_TABLE *UcdTable; - UINTN Index; - UINT16 BootPriority; - BBS_TABLE *BbsTable; - - BootPriority = 0; - Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); - mBootMode = BOOT_UNCONVENTIONAL_DEVICE; + EFI_STATUS Status; + EFI_TO_COMPATIBILITY16_BOOT_TABLE *EfiToLegacy16BootTable; + LEGACY_BIOS_INSTANCE *Private; + UD_TABLE *UcdTable; + UINTN Index; + UINT16 BootPriority; + BBS_TABLE *BbsTable; + + BootPriority = 0; + Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); + mBootMode = BOOT_UNCONVENTIONAL_DEVICE; mBbsDevicePathPtr = &mBbsDevicePathNode; - mAttributes = Attributes; - mBbsEntry = BbsEntry; - mBeerData = BeerData, mServiceAreaData = ServiceAreaData; + mAttributes = Attributes; + mBbsEntry = BbsEntry; + mBeerData = BeerData, mServiceAreaData = ServiceAreaData; EfiToLegacy16BootTable = &Private->IntThunk->EfiToLegacy16BootTable; @@ -1449,58 +1477,62 @@ LegacyBiosBootUnconventionalDevice ( if ((Attributes.DirectoryServiceValidity == 0) && (Attributes.RabcaUsedFlag == 0) && (Attributes.ExecuteHddDiagnosticsFlag == 0) - ) { + ) + { return EFI_INVALID_PARAMETER; } if (((Attributes.DirectoryServiceValidity != 0) && (ServiceAreaData == NULL)) || (((Attributes.DirectoryServiceValidity | Attributes.RabcaUsedFlag) != 0) && (BeerData == NULL)) - ) { + ) + { return EFI_INVALID_PARAMETER; } - UcdTable = (UD_TABLE *) AllocatePool ( - sizeof (UD_TABLE) - ); + UcdTable = (UD_TABLE *)AllocatePool ( + sizeof (UD_TABLE) + ); if (NULL == UcdTable) { return EFI_OUT_OF_RESOURCES; } EfiToLegacy16BootTable->UnconventionalDeviceTable = (UINT32)(UINTN)UcdTable; - UcdTable->Attributes = Attributes; - UcdTable->BbsTableEntryNumberForParentDevice = (UINT8) BbsEntry; + UcdTable->Attributes = Attributes; + UcdTable->BbsTableEntryNumberForParentDevice = (UINT8)BbsEntry; // // Force all existing BBS entries to DoNotBoot. This allows 16-bit CSM // to assign drive numbers but bot boot from. Only newly created entries // will be valid. // - BbsTable = (BBS_TABLE*)(UINTN)EfiToLegacy16BootTable->BbsTable; + BbsTable = (BBS_TABLE *)(UINTN)EfiToLegacy16BootTable->BbsTable; for (Index = 0; Index < EfiToLegacy16BootTable->NumberBbsEntries; Index++) { BbsTable[Index].BootPriority = BBS_DO_NOT_BOOT_FROM; } + // // If parent is onboard IDE then assign controller & device number // else they are 0. // if (BbsEntry < MAX_IDE_CONTROLLER * 2) { - UcdTable->DeviceNumber = (UINT8) ((BbsEntry - 1) % 2); + UcdTable->DeviceNumber = (UINT8)((BbsEntry - 1) % 2); } if (BeerData != NULL) { CopyMem ( - (VOID *) UcdTable->BeerData, + (VOID *)UcdTable->BeerData, BeerData, - (UINTN) 128 + (UINTN)128 ); } if (ServiceAreaData != NULL) { CopyMem ( - (VOID *) UcdTable->ServiceAreaData, + (VOID *)UcdTable->ServiceAreaData, ServiceAreaData, - (UINTN) 64 + (UINTN)64 ); } + // // For each new entry do the following: // 1. Increment current number of BBS entries @@ -1514,8 +1546,8 @@ LegacyBiosBootUnconventionalDevice ( EfiToLegacy16BootTable->NumberBbsEntries += 1; CopyMem ( - (VOID *) &BbsTable[EfiToLegacy16BootTable->NumberBbsEntries].BootPriority, - (VOID *) &BbsTable[BbsEntry].BootPriority, + (VOID *)&BbsTable[EfiToLegacy16BootTable->NumberBbsEntries].BootPriority, + (VOID *)&BbsTable[BbsEntry].BootPriority, sizeof (BBS_TABLE) ); @@ -1523,10 +1555,10 @@ LegacyBiosBootUnconventionalDevice ( BbsTable[EfiToLegacy16BootTable->NumberBbsEntries].BootHandlerSegment = 0; BbsTable[EfiToLegacy16BootTable->NumberBbsEntries].DeviceType = 0x80; - UcdTable->BbsTableEntryNumberForHddDiag = (UINT8) (EfiToLegacy16BootTable->NumberBbsEntries - 1); + UcdTable->BbsTableEntryNumberForHddDiag = (UINT8)(EfiToLegacy16BootTable->NumberBbsEntries - 1); BbsTable[EfiToLegacy16BootTable->NumberBbsEntries].BootPriority = BootPriority; - BootPriority += 1; + BootPriority += 1; // // Set device type as BBS_TYPE_DEV for PARTIES diagnostic @@ -1537,22 +1569,23 @@ LegacyBiosBootUnconventionalDevice ( if (((Attributes.DirectoryServiceValidity | Attributes.RabcaUsedFlag)) != 0) { EfiToLegacy16BootTable->NumberBbsEntries += 1; CopyMem ( - (VOID *) &BbsTable[EfiToLegacy16BootTable->NumberBbsEntries].BootPriority, - (VOID *) &BbsTable[BbsEntry].BootPriority, + (VOID *)&BbsTable[EfiToLegacy16BootTable->NumberBbsEntries].BootPriority, + (VOID *)&BbsTable[BbsEntry].BootPriority, sizeof (BBS_TABLE) ); BbsTable[EfiToLegacy16BootTable->NumberBbsEntries].BootHandlerOffset = 0; BbsTable[EfiToLegacy16BootTable->NumberBbsEntries].BootHandlerSegment = 0; BbsTable[EfiToLegacy16BootTable->NumberBbsEntries].DeviceType = 0x01; - UcdTable->BbsTableEntryNumberForBoot = (UINT8) (EfiToLegacy16BootTable->NumberBbsEntries - 1); - BbsTable[EfiToLegacy16BootTable->NumberBbsEntries].BootPriority = BootPriority; + UcdTable->BbsTableEntryNumberForBoot = (UINT8)(EfiToLegacy16BootTable->NumberBbsEntries - 1); + BbsTable[EfiToLegacy16BootTable->NumberBbsEntries].BootPriority = BootPriority; // // Set device type as BBS_TYPE_FLOPPY for PARTIES boot as floppy // mBbsDevicePathNode.DeviceType = BBS_TYPE_FLOPPY; } + // // Build the BBS Device Path for this boot selection // @@ -1562,7 +1595,7 @@ LegacyBiosBootUnconventionalDevice ( mBbsDevicePathNode.StatusFlag = 0; mBbsDevicePathNode.String[0] = 0; - Status = GenericLegacyBoot (This); + Status = GenericLegacyBoot (This); return Status; } @@ -1581,10 +1614,10 @@ LegacyBiosBootUnconventionalDevice ( EFI_STATUS EFIAPI LegacyBiosLegacyBoot ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN BBS_BBS_DEVICE_PATH *BbsDevicePath, - IN UINT32 LoadOptionsSize, - IN VOID *LoadOptions + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN BBS_BBS_DEVICE_PATH *BbsDevicePath, + IN UINT32 LoadOptionsSize, + IN VOID *LoadOptions ) { EFI_STATUS Status; @@ -1608,46 +1641,46 @@ LegacyBiosLegacyBoot ( **/ EFI_ACPI_MEMORY_TYPE EfiMemoryTypeToE820Type ( - IN UINT32 Type + IN UINT32 Type ) { switch (Type) { - case EfiLoaderCode: - case EfiLoaderData: - case EfiBootServicesCode: - case EfiBootServicesData: - case EfiConventionalMemory: - // - // The memory of EfiRuntimeServicesCode and EfiRuntimeServicesData are - // usable memory for legacy OS, because legacy OS is not aware of EFI runtime concept. - // In ACPI specification, EfiRuntimeServiceCode and EfiRuntimeServiceData - // should be mapped to AddressRangeReserved. This statement is for UEFI OS, not for legacy OS. - // - case EfiRuntimeServicesCode: - case EfiRuntimeServicesData: - return EfiAcpiAddressRangeMemory; + case EfiLoaderCode: + case EfiLoaderData: + case EfiBootServicesCode: + case EfiBootServicesData: + case EfiConventionalMemory: + // + // The memory of EfiRuntimeServicesCode and EfiRuntimeServicesData are + // usable memory for legacy OS, because legacy OS is not aware of EFI runtime concept. + // In ACPI specification, EfiRuntimeServiceCode and EfiRuntimeServiceData + // should be mapped to AddressRangeReserved. This statement is for UEFI OS, not for legacy OS. + // + case EfiRuntimeServicesCode: + case EfiRuntimeServicesData: + return EfiAcpiAddressRangeMemory; - case EfiPersistentMemory: - return EfiAddressRangePersistentMemory; + case EfiPersistentMemory: + return EfiAddressRangePersistentMemory; - case EfiACPIReclaimMemory: - return EfiAcpiAddressRangeACPI; + case EfiACPIReclaimMemory: + return EfiAcpiAddressRangeACPI; - case EfiACPIMemoryNVS: - return EfiAcpiAddressRangeNVS; + case EfiACPIMemoryNVS: + return EfiAcpiAddressRangeNVS; - // - // All other types map to reserved. - // Adding the code just waists FLASH space. - // - // case EfiReservedMemoryType: - // case EfiUnusableMemory: - // case EfiMemoryMappedIO: - // case EfiMemoryMappedIOPortSpace: - // case EfiPalCode: - // - default: - return EfiAcpiAddressRangeReserved; + // + // All other types map to reserved. + // Adding the code just waists FLASH space. + // + // case EfiReservedMemoryType: + // case EfiUnusableMemory: + // case EfiMemoryMappedIO: + // case EfiMemoryMappedIOPortSpace: + // case EfiPalCode: + // + default: + return EfiAcpiAddressRangeReserved; } } @@ -1662,47 +1695,47 @@ EfiMemoryTypeToE820Type ( **/ EFI_STATUS LegacyBiosBuildE820 ( - IN LEGACY_BIOS_INSTANCE *Private, - OUT UINTN *Size + IN LEGACY_BIOS_INSTANCE *Private, + OUT UINTN *Size ) { - EFI_STATUS Status; - EFI_E820_ENTRY64 *E820Table; - EFI_MEMORY_DESCRIPTOR *EfiMemoryMap; - EFI_MEMORY_DESCRIPTOR *EfiMemoryMapEnd; - EFI_MEMORY_DESCRIPTOR *EfiEntry; - EFI_MEMORY_DESCRIPTOR *NextEfiEntry; - EFI_MEMORY_DESCRIPTOR TempEfiEntry; - UINTN EfiMemoryMapSize; - UINTN EfiMapKey; - UINTN EfiDescriptorSize; - UINT32 EfiDescriptorVersion; - UINTN Index; - EFI_PEI_HOB_POINTERS Hob; - EFI_HOB_RESOURCE_DESCRIPTOR *ResourceHob; - UINTN TempIndex; - UINTN IndexSort; - UINTN TempNextIndex; - EFI_E820_ENTRY64 TempE820; - EFI_ACPI_MEMORY_TYPE TempType; - BOOLEAN ChangedFlag; - UINTN Above1MIndex; - UINT64 MemoryBlockLength; - - E820Table = (EFI_E820_ENTRY64 *) Private->E820Table; + EFI_STATUS Status; + EFI_E820_ENTRY64 *E820Table; + EFI_MEMORY_DESCRIPTOR *EfiMemoryMap; + EFI_MEMORY_DESCRIPTOR *EfiMemoryMapEnd; + EFI_MEMORY_DESCRIPTOR *EfiEntry; + EFI_MEMORY_DESCRIPTOR *NextEfiEntry; + EFI_MEMORY_DESCRIPTOR TempEfiEntry; + UINTN EfiMemoryMapSize; + UINTN EfiMapKey; + UINTN EfiDescriptorSize; + UINT32 EfiDescriptorVersion; + UINTN Index; + EFI_PEI_HOB_POINTERS Hob; + EFI_HOB_RESOURCE_DESCRIPTOR *ResourceHob; + UINTN TempIndex; + UINTN IndexSort; + UINTN TempNextIndex; + EFI_E820_ENTRY64 TempE820; + EFI_ACPI_MEMORY_TYPE TempType; + BOOLEAN ChangedFlag; + UINTN Above1MIndex; + UINT64 MemoryBlockLength; + + E820Table = (EFI_E820_ENTRY64 *)Private->E820Table; // // Get the EFI memory map. // - EfiMemoryMapSize = 0; - EfiMemoryMap = NULL; - Status = gBS->GetMemoryMap ( - &EfiMemoryMapSize, - EfiMemoryMap, - &EfiMapKey, - &EfiDescriptorSize, - &EfiDescriptorVersion - ); + EfiMemoryMapSize = 0; + EfiMemoryMap = NULL; + Status = gBS->GetMemoryMap ( + &EfiMemoryMapSize, + EfiMemoryMap, + &EfiMapKey, + &EfiDescriptorSize, + &EfiDescriptorVersion + ); ASSERT (Status == EFI_BUFFER_TOO_SMALL); do { @@ -1712,7 +1745,7 @@ LegacyBiosBuildE820 ( // EfiMemoryMapEnd which is dependent upon EfiMemoryMapSize. Otherwise // we process bogus entries and create bogus E820 entries. // - EfiMemoryMap = (EFI_MEMORY_DESCRIPTOR *) AllocatePool (EfiMemoryMapSize); + EfiMemoryMap = (EFI_MEMORY_DESCRIPTOR *)AllocatePool (EfiMemoryMapSize); ASSERT (EfiMemoryMap != NULL); Status = gBS->GetMemoryMap ( &EfiMemoryMapSize, @@ -1736,17 +1769,17 @@ LegacyBiosBuildE820 ( // First entry is 0 to (640k - EBDA) // ACCESS_PAGE0_CODE ( - E820Table[0].BaseAddr = 0; - E820Table[0].Length = (UINT64) ((*(UINT16 *) (UINTN)0x40E) << 4); - E820Table[0].Type = EfiAcpiAddressRangeMemory; - ); + E820Table[0].BaseAddr = 0; + E820Table[0].Length = (UINT64)((*(UINT16 *)(UINTN)0x40E) << 4); + E820Table[0].Type = EfiAcpiAddressRangeMemory; + ); // // Second entry is (640k - EBDA) to 640k // - E820Table[1].BaseAddr = E820Table[0].Length; - E820Table[1].Length = (UINT64) ((640 * 1024) - E820Table[0].Length); - E820Table[1].Type = EfiAcpiAddressRangeReserved; + E820Table[1].BaseAddr = E820Table[0].Length; + E820Table[1].Length = (UINT64)((640 * 1024) - E820Table[0].Length); + E820Table[1].Type = EfiAcpiAddressRangeReserved; // // Third Entry is legacy BIOS @@ -1760,9 +1793,9 @@ LegacyBiosBuildE820 ( // The CSM binary image size is not the actually size that CSM binary used, // to avoid memory corrupt, we declare the 0E0000 - 0FFFFF is used by CSM binary. // - E820Table[2].BaseAddr = 0xE0000; - E820Table[2].Length = 0x20000; - E820Table[2].Type = EfiAcpiAddressRangeReserved; + E820Table[2].BaseAddr = 0xE0000; + E820Table[2].Length = 0x20000; + E820Table[2].Type = EfiAcpiAddressRangeReserved; Above1MIndex = 2; @@ -1775,7 +1808,7 @@ LegacyBiosBuildE820 ( // EfiEntry = EfiMemoryMap; NextEfiEntry = NEXT_MEMORY_DESCRIPTOR (EfiEntry, EfiDescriptorSize); - EfiMemoryMapEnd = (EFI_MEMORY_DESCRIPTOR *) ((UINT8 *) EfiMemoryMap + EfiMemoryMapSize); + EfiMemoryMapEnd = (EFI_MEMORY_DESCRIPTOR *)((UINT8 *)EfiMemoryMap + EfiMemoryMapSize); while (EfiEntry < EfiMemoryMapEnd) { while (NextEfiEntry < EfiMemoryMapEnd) { if (EfiEntry->PhysicalStart > NextEfiEntry->PhysicalStart) { @@ -1787,14 +1820,14 @@ LegacyBiosBuildE820 ( NextEfiEntry = NEXT_MEMORY_DESCRIPTOR (NextEfiEntry, EfiDescriptorSize); } - EfiEntry = NEXT_MEMORY_DESCRIPTOR (EfiEntry, EfiDescriptorSize); - NextEfiEntry = NEXT_MEMORY_DESCRIPTOR (EfiEntry, EfiDescriptorSize); + EfiEntry = NEXT_MEMORY_DESCRIPTOR (EfiEntry, EfiDescriptorSize); + NextEfiEntry = NEXT_MEMORY_DESCRIPTOR (EfiEntry, EfiDescriptorSize); } EfiEntry = EfiMemoryMap; - EfiMemoryMapEnd = (EFI_MEMORY_DESCRIPTOR *) ((UINT8 *) EfiMemoryMap + EfiMemoryMapSize); + EfiMemoryMapEnd = (EFI_MEMORY_DESCRIPTOR *)((UINT8 *)EfiMemoryMap + EfiMemoryMapSize); for (Index = Above1MIndex; (EfiEntry < EfiMemoryMapEnd) && (Index < EFI_MAX_E820_ENTRY - 1); ) { - MemoryBlockLength = (UINT64) (LShiftU64 (EfiEntry->NumberOfPages, 12)); + MemoryBlockLength = (UINT64)(LShiftU64 (EfiEntry->NumberOfPages, 12)); if ((EfiEntry->PhysicalStart + MemoryBlockLength) < 0x100000) { // // Skip the memory block if under 1MB @@ -1804,7 +1837,7 @@ LegacyBiosBuildE820 ( // // When the memory block spans below 1MB, ensure the memory block start address is at least 1MB // - MemoryBlockLength -= 0x100000 - EfiEntry->PhysicalStart; + MemoryBlockLength -= 0x100000 - EfiEntry->PhysicalStart; EfiEntry->PhysicalStart = 0x100000; } @@ -1823,11 +1856,12 @@ LegacyBiosBuildE820 ( // Make a new entry // ++Index; - E820Table[Index].BaseAddr = EfiEntry->PhysicalStart; - E820Table[Index].Length = MemoryBlockLength; - E820Table[Index].Type = TempType; + E820Table[Index].BaseAddr = EfiEntry->PhysicalStart; + E820Table[Index].Length = MemoryBlockLength; + E820Table[Index].Type = TempType; } } + EfiEntry = NEXT_MEMORY_DESCRIPTOR (EfiEntry, EfiDescriptorSize); } @@ -1837,26 +1871,27 @@ LegacyBiosBuildE820 ( // Process the reserved memory map to produce E820 map ; // for (Hob.Raw = GetHobList (); !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) { - if (Hob.Raw != NULL && GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) { + if ((Hob.Raw != NULL) && (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR)) { ResourceHob = Hob.ResourceDescriptor; if (((ResourceHob->ResourceType == EFI_RESOURCE_MEMORY_MAPPED_IO) || - (ResourceHob->ResourceType == EFI_RESOURCE_FIRMWARE_DEVICE) || - (ResourceHob->ResourceType == EFI_RESOURCE_MEMORY_RESERVED) ) && + (ResourceHob->ResourceType == EFI_RESOURCE_FIRMWARE_DEVICE) || + (ResourceHob->ResourceType == EFI_RESOURCE_MEMORY_RESERVED)) && (ResourceHob->PhysicalStart > 0x100000) && - (Index < EFI_MAX_E820_ENTRY - 1)) { + (Index < EFI_MAX_E820_ENTRY - 1)) + { ++Index; - E820Table[Index].BaseAddr = ResourceHob->PhysicalStart; - E820Table[Index].Length = ResourceHob->ResourceLength; - E820Table[Index].Type = EfiAcpiAddressRangeReserved; + E820Table[Index].BaseAddr = ResourceHob->PhysicalStart; + E820Table[Index].Length = ResourceHob->ResourceLength; + E820Table[Index].Type = EfiAcpiAddressRangeReserved; } } } - Index ++; + Index++; Private->IntThunk->EfiToLegacy16InitTable.NumberE820Entries = (UINT32)Index; Private->IntThunk->EfiToLegacy16BootTable.NumberE820Entries = (UINT32)Index; - Private->NumberE820Entries = (UINT32)Index; - *Size = (UINTN) (Index * sizeof (EFI_E820_ENTRY64)); + Private->NumberE820Entries = (UINT32)Index; + *Size = (UINTN)(Index * sizeof (EFI_E820_ENTRY64)); // // Sort E820Table from low to high @@ -1865,18 +1900,18 @@ LegacyBiosBuildE820 ( ChangedFlag = FALSE; for (TempNextIndex = 1; TempNextIndex < Index - TempIndex; TempNextIndex++) { if (E820Table[TempNextIndex - 1].BaseAddr > E820Table[TempNextIndex].BaseAddr) { - ChangedFlag = TRUE; - TempE820.BaseAddr = E820Table[TempNextIndex - 1].BaseAddr; - TempE820.Length = E820Table[TempNextIndex - 1].Length; - TempE820.Type = E820Table[TempNextIndex - 1].Type; - - E820Table[TempNextIndex - 1].BaseAddr = E820Table[TempNextIndex].BaseAddr; - E820Table[TempNextIndex - 1].Length = E820Table[TempNextIndex].Length; - E820Table[TempNextIndex - 1].Type = E820Table[TempNextIndex].Type; - - E820Table[TempNextIndex].BaseAddr = TempE820.BaseAddr; - E820Table[TempNextIndex].Length = TempE820.Length; - E820Table[TempNextIndex].Type = TempE820.Type; + ChangedFlag = TRUE; + TempE820.BaseAddr = E820Table[TempNextIndex - 1].BaseAddr; + TempE820.Length = E820Table[TempNextIndex - 1].Length; + TempE820.Type = E820Table[TempNextIndex - 1].Type; + + E820Table[TempNextIndex - 1].BaseAddr = E820Table[TempNextIndex].BaseAddr; + E820Table[TempNextIndex - 1].Length = E820Table[TempNextIndex].Length; + E820Table[TempNextIndex - 1].Type = E820Table[TempNextIndex].Type; + + E820Table[TempNextIndex].BaseAddr = TempE820.BaseAddr; + E820Table[TempNextIndex].Length = TempE820.Length; + E820Table[TempNextIndex].Type = TempE820.Type; } } @@ -1889,49 +1924,50 @@ LegacyBiosBuildE820 ( // Remove the overlap range // for (TempIndex = 1; TempIndex < Index; TempIndex++) { - if (E820Table[TempIndex - 1].BaseAddr <= E820Table[TempIndex].BaseAddr && + if ((E820Table[TempIndex - 1].BaseAddr <= E820Table[TempIndex].BaseAddr) && ((E820Table[TempIndex - 1].BaseAddr + E820Table[TempIndex - 1].Length) >= - (E820Table[TempIndex].BaseAddr +E820Table[TempIndex].Length))) { - // - //Overlap range is found - // - ASSERT (E820Table[TempIndex - 1].Type == E820Table[TempIndex].Type); - - if (TempIndex == Index - 1) { - E820Table[TempIndex].BaseAddr = 0; - E820Table[TempIndex].Length = 0; - E820Table[TempIndex].Type = (EFI_ACPI_MEMORY_TYPE) 0; - Index--; - break; - } else { - for (IndexSort = TempIndex; IndexSort < Index - 1; IndexSort ++) { - E820Table[IndexSort].BaseAddr = E820Table[IndexSort + 1].BaseAddr; - E820Table[IndexSort].Length = E820Table[IndexSort + 1].Length; - E820Table[IndexSort].Type = E820Table[IndexSort + 1].Type; - } - Index--; - } - } - } + (E820Table[TempIndex].BaseAddr +E820Table[TempIndex].Length))) + { + // + // Overlap range is found + // + ASSERT (E820Table[TempIndex - 1].Type == E820Table[TempIndex].Type); + if (TempIndex == Index - 1) { + E820Table[TempIndex].BaseAddr = 0; + E820Table[TempIndex].Length = 0; + E820Table[TempIndex].Type = (EFI_ACPI_MEMORY_TYPE)0; + Index--; + break; + } else { + for (IndexSort = TempIndex; IndexSort < Index - 1; IndexSort++) { + E820Table[IndexSort].BaseAddr = E820Table[IndexSort + 1].BaseAddr; + E820Table[IndexSort].Length = E820Table[IndexSort + 1].Length; + E820Table[IndexSort].Type = E820Table[IndexSort + 1].Type; + } + Index--; + } + } + } Private->IntThunk->EfiToLegacy16InitTable.NumberE820Entries = (UINT32)Index; Private->IntThunk->EfiToLegacy16BootTable.NumberE820Entries = (UINT32)Index; - Private->NumberE820Entries = (UINT32)Index; - *Size = (UINTN) (Index * sizeof (EFI_E820_ENTRY64)); + Private->NumberE820Entries = (UINT32)Index; + *Size = (UINTN)(Index * sizeof (EFI_E820_ENTRY64)); // // Determine OS usable memory above 1MB // Private->IntThunk->EfiToLegacy16BootTable.OsMemoryAbove1Mb = 0x0000; for (TempIndex = Above1MIndex; TempIndex < Index; TempIndex++) { - if (E820Table[TempIndex].BaseAddr >= 0x100000 && E820Table[TempIndex].BaseAddr < 0x100000000ULL) { // not include above 4G memory + if ((E820Table[TempIndex].BaseAddr >= 0x100000) && (E820Table[TempIndex].BaseAddr < 0x100000000ULL)) { + // not include above 4G memory // // ACPIReclaimMemory is also usable memory for ACPI OS, after OS dumps all ACPI tables. // if ((E820Table[TempIndex].Type == EfiAcpiAddressRangeMemory) || (E820Table[TempIndex].Type == EfiAcpiAddressRangeACPI)) { - Private->IntThunk->EfiToLegacy16BootTable.OsMemoryAbove1Mb += (UINT32) (E820Table[TempIndex].Length); + Private->IntThunk->EfiToLegacy16BootTable.OsMemoryAbove1Mb += (UINT32)(E820Table[TempIndex].Length); } else { break; // break at first not normal memory, because SMM may use reserved memory. } @@ -1944,7 +1980,9 @@ LegacyBiosBuildE820 ( // Print DEBUG information // for (TempIndex = 0; TempIndex < Index; TempIndex++) { - DEBUG((DEBUG_INFO, "E820[%2d]: 0x%016lx - 0x%016lx, Type = %d\n", + DEBUG (( + DEBUG_INFO, + "E820[%2d]: 0x%016lx - 0x%016lx, Type = %d\n", TempIndex, E820Table[TempIndex].BaseAddr, (E820Table[TempIndex].BaseAddr + E820Table[TempIndex].Length), @@ -1955,7 +1993,6 @@ LegacyBiosBuildE820 ( return EFI_SUCCESS; } - /** Fill in the standard BDA and EBDA stuff prior to legacy Boot @@ -1966,21 +2003,21 @@ LegacyBiosBuildE820 ( **/ EFI_STATUS LegacyBiosCompleteBdaBeforeBoot ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ) { - BDA_STRUC *Bda; - UINT16 MachineConfig; - DEVICE_PRODUCER_DATA_HEADER *SioPtr; + BDA_STRUC *Bda; + UINT16 MachineConfig; + DEVICE_PRODUCER_DATA_HEADER *SioPtr; - Bda = (BDA_STRUC *) ((UINTN) 0x400); + Bda = (BDA_STRUC *)((UINTN)0x400); MachineConfig = 0; - SioPtr = &(Private->IntThunk->EfiToLegacy16BootTable.SioData); - Bda->Com1 = SioPtr->Serial[0].Address; - Bda->Com2 = SioPtr->Serial[1].Address; - Bda->Com3 = SioPtr->Serial[2].Address; - Bda->Com4 = SioPtr->Serial[3].Address; + SioPtr = &(Private->IntThunk->EfiToLegacy16BootTable.SioData); + Bda->Com1 = SioPtr->Serial[0].Address; + Bda->Com2 = SioPtr->Serial[1].Address; + Bda->Com3 = SioPtr->Serial[2].Address; + Bda->Com4 = SioPtr->Serial[3].Address; if (SioPtr->Serial[0].Address != 0x00) { MachineConfig += 0x200; @@ -2014,22 +2051,22 @@ LegacyBiosCompleteBdaBeforeBoot ( MachineConfig += 0x4000; } - Bda->NumberOfDrives = (UINT8) (Bda->NumberOfDrives + Private->IdeDriveCount); + Bda->NumberOfDrives = (UINT8)(Bda->NumberOfDrives + Private->IdeDriveCount); if (SioPtr->Floppy.NumberOfFloppy != 0x00) { - MachineConfig = (UINT16) (MachineConfig + 0x01 + (SioPtr->Floppy.NumberOfFloppy - 1) * 0x40); - Bda->FloppyXRate = 0x07; + MachineConfig = (UINT16)(MachineConfig + 0x01 + (SioPtr->Floppy.NumberOfFloppy - 1) * 0x40); + Bda->FloppyXRate = 0x07; } - Bda->Lpt1_2Timeout = 0x1414; - Bda->Lpt3_4Timeout = 0x1414; - Bda->Com1_2Timeout = 0x0101; - Bda->Com3_4Timeout = 0x0101; + Bda->Lpt1_2Timeout = 0x1414; + Bda->Lpt3_4Timeout = 0x1414; + Bda->Com1_2Timeout = 0x0101; + Bda->Com3_4Timeout = 0x0101; // // Force VGA and Coprocessor, indicate 101/102 keyboard // - MachineConfig = (UINT16) (MachineConfig + 0x00 + 0x02 + (SioPtr->MousePresent * 0x04)); - Bda->MachineConfig = MachineConfig; + MachineConfig = (UINT16)(MachineConfig + 0x00 + 0x02 + (SioPtr->MousePresent * 0x04)); + Bda->MachineConfig = MachineConfig; return EFI_SUCCESS; } @@ -2046,26 +2083,26 @@ LegacyBiosCompleteBdaBeforeBoot ( EFI_STATUS EFIAPI LegacyBiosUpdateKeyboardLedStatus ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN UINT8 Leds + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN UINT8 Leds ) { - LEGACY_BIOS_INSTANCE *Private; - BDA_STRUC *Bda; - UINT8 LocalLeds; - EFI_IA32_REGISTER_SET Regs; + LEGACY_BIOS_INSTANCE *Private; + BDA_STRUC *Bda; + UINT8 LocalLeds; + EFI_IA32_REGISTER_SET Regs; - Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); + Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); ACCESS_PAGE0_CODE ( - Bda = (BDA_STRUC *) ((UINTN) 0x400); + Bda = (BDA_STRUC *)((UINTN)0x400); LocalLeds = Leds; - Bda->LedStatus = (UINT8) ((Bda->LedStatus &~0x07) | LocalLeds); - LocalLeds = (UINT8) (LocalLeds << 4); - Bda->ShiftStatus = (UINT8) ((Bda->ShiftStatus &~0x70) | LocalLeds); - LocalLeds = (UINT8) (Leds & 0x20); - Bda->KeyboardStatus = (UINT8) ((Bda->KeyboardStatus &~0x20) | LocalLeds); - ); + Bda->LedStatus = (UINT8)((Bda->LedStatus &~0x07) | LocalLeds); + LocalLeds = (UINT8)(LocalLeds << 4); + Bda->ShiftStatus = (UINT8)((Bda->ShiftStatus &~0x70) | LocalLeds); + LocalLeds = (UINT8)(Leds & 0x20); + Bda->KeyboardStatus = (UINT8)((Bda->KeyboardStatus &~0x20) | LocalLeds); + ); // // Call into Legacy16 code to allow it to do any processing @@ -2075,18 +2112,17 @@ LegacyBiosUpdateKeyboardLedStatus ( Regs.H.CL = Leds; Private->LegacyBios.FarCall86 ( - &Private->LegacyBios, - Private->Legacy16Table->Compatibility16CallSegment, - Private->Legacy16Table->Compatibility16CallOffset, - &Regs, - NULL, - 0 - ); + &Private->LegacyBios, + Private->Legacy16Table->Compatibility16CallSegment, + Private->Legacy16Table->Compatibility16CallOffset, + &Regs, + NULL, + 0 + ); return EFI_SUCCESS; } - /** Fill in the standard CMOS stuff prior to legacy Boot @@ -2097,7 +2133,7 @@ LegacyBiosUpdateKeyboardLedStatus ( **/ EFI_STATUS LegacyBiosCompleteStandardCmosBeforeBoot ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ) { UINT8 Bda; @@ -2113,7 +2149,7 @@ LegacyBiosCompleteStandardCmosBeforeBoot ( // ACCESS_PAGE0_CODE ( Bda = (UINT8)(*((UINT8 *)((UINTN)0x410)) | BIT3); - ); + ); // // Force display enabled @@ -2143,7 +2179,7 @@ LegacyBiosCompleteStandardCmosBeforeBoot ( // Size = (15 * SIZE_1MB) >> 10; if (Private->IntThunk->EfiToLegacy16InitTable.OsMemoryAbove1Mb < (15 * SIZE_1MB)) { - Size = Private->IntThunk->EfiToLegacy16InitTable.OsMemoryAbove1Mb >> 10; + Size = Private->IntThunk->EfiToLegacy16InitTable.OsMemoryAbove1Mb >> 10; } LegacyWriteStandardCmos (CMOS_17, (UINT8)(Size & 0xFF)); @@ -2168,8 +2204,8 @@ LegacyBiosCompleteStandardCmosBeforeBoot ( **/ EFI_STATUS RelocateImageUnder4GIfNeeded ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { return EFI_SUCCESS; diff --git a/OvmfPkg/Csm/LegacyBiosDxe/LegacyCmos.c b/OvmfPkg/Csm/LegacyBiosDxe/LegacyCmos.c index de25e06184..7220d8e65a 100644 --- a/OvmfPkg/Csm/LegacyBiosDxe/LegacyCmos.c +++ b/OvmfPkg/Csm/LegacyBiosDxe/LegacyCmos.c @@ -66,12 +66,12 @@ LegacyCalculateWriteStandardCmosChecksum ( for (Checksum = 0, Register = 0x10; Register < 0x2e; Register++) { Checksum = (UINT16)(Checksum + LegacyReadStandardCmos (Register)); } + LegacyWriteStandardCmos (CMOS_2E, (UINT8)(Checksum >> 8)); LegacyWriteStandardCmos (CMOS_2F, (UINT8)(Checksum & 0xff)); return EFI_SUCCESS; } - /** Fill in the standard CMOS stuff before Legacy16 load @@ -82,7 +82,7 @@ LegacyCalculateWriteStandardCmosChecksum ( **/ EFI_STATUS LegacyBiosInitCmos ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ) { UINT32 Size; @@ -103,7 +103,7 @@ LegacyBiosInitCmos ( Size = 15 * SIZE_1MB; if (Private->IntThunk->EfiToLegacy16InitTable.OsMemoryAbove1Mb < (15 * SIZE_1MB)) { - Size = Private->IntThunk->EfiToLegacy16InitTable.OsMemoryAbove1Mb >> 10; + Size = Private->IntThunk->EfiToLegacy16InitTable.OsMemoryAbove1Mb >> 10; } LegacyWriteStandardCmos (CMOS_17, (UINT8)(Size & 0xFF)); diff --git a/OvmfPkg/Csm/LegacyBiosDxe/LegacyIde.c b/OvmfPkg/Csm/LegacyBiosDxe/LegacyIde.c index 789f48370e..323f76c970 100644 --- a/OvmfPkg/Csm/LegacyBiosDxe/LegacyIde.c +++ b/OvmfPkg/Csm/LegacyBiosDxe/LegacyIde.c @@ -9,7 +9,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "LegacyBiosInterface.h" -BOOLEAN mIdeDataBuiltFlag = FALSE; +BOOLEAN mIdeDataBuiltFlag = FALSE; /** Collect IDE Inquiry data from the IDE disks @@ -23,9 +23,9 @@ BOOLEAN mIdeDataBuiltFlag = FALSE; **/ EFI_STATUS LegacyBiosBuildIdeData ( - IN LEGACY_BIOS_INSTANCE *Private, - IN HDD_INFO **HddInfo, - IN UINT16 Flag + IN LEGACY_BIOS_INSTANCE *Private, + IN HDD_INFO **HddInfo, + IN UINT16 Flag ) { EFI_STATUS Status; @@ -60,14 +60,14 @@ LegacyBiosBuildIdeData ( // PciDevicePath = NULL; LocalHddInfo = *HddInfo; - Status = Private->LegacyBiosPlatform->GetPlatformHandle ( - Private->LegacyBiosPlatform, - EfiGetPlatformIdeHandle, - 0, - &HandleBuffer, - &HandleCount, - (VOID *) &LocalHddInfo - ); + Status = Private->LegacyBiosPlatform->GetPlatformHandle ( + Private->LegacyBiosPlatform, + EfiGetPlatformIdeHandle, + 0, + &HandleBuffer, + &HandleCount, + (VOID *)&LocalHddInfo + ); if (!EFI_ERROR (Status)) { IdeController = HandleBuffer[0]; // @@ -75,10 +75,10 @@ LegacyBiosBuildIdeData ( // if (Flag != 0) { gBS->DisconnectController ( - IdeController, - NULL, - NULL - ); + IdeController, + NULL, + NULL + ); } gBS->ConnectController (IdeController, NULL, NULL, FALSE); @@ -88,13 +88,13 @@ LegacyBiosBuildIdeData ( // And GetIdeHandle will switch to Legacy mode, if required. // Private->LegacyBiosPlatform->GetPlatformHandle ( - Private->LegacyBiosPlatform, - EfiGetPlatformIdeHandle, - 0, - &HandleBuffer, - &HandleCount, - (VOID *) &LocalHddInfo - ); + Private->LegacyBiosPlatform, + EfiGetPlatformIdeHandle, + 0, + &HandleBuffer, + &HandleCount, + (VOID *)&LocalHddInfo + ); } mIdeDataBuiltFlag = TRUE; @@ -103,19 +103,19 @@ LegacyBiosBuildIdeData ( // Get Identity command from all drives // gBS->LocateHandleBuffer ( - ByProtocol, - &gEfiDiskInfoProtocolGuid, - NULL, - &HandleCount, - &HandleBuffer - ); - - Private->IdeDriveCount = (UINT8) HandleCount; + ByProtocol, + &gEfiDiskInfoProtocolGuid, + NULL, + &HandleCount, + &HandleBuffer + ); + + Private->IdeDriveCount = (UINT8)HandleCount; for (Index = 0; Index < HandleCount; Index++) { Status = gBS->HandleProtocol ( HandleBuffer[Index], &gEfiDiskInfoProtocolGuid, - (VOID **) &DiskInfo + (VOID **)&DiskInfo ); ASSERT_EFI_ERROR (Status); @@ -126,7 +126,7 @@ LegacyBiosBuildIdeData ( Status = gBS->HandleProtocol ( HandleBuffer[Index], &gEfiDevicePathProtocolGuid, - (VOID *) &DevicePath + (VOID *)&DevicePath ); ASSERT_EFI_ERROR (Status); @@ -134,12 +134,14 @@ LegacyBiosBuildIdeData ( while (!IsDevicePathEnd (DevicePathNode)) { TempDevicePathNode = NextDevicePathNode (DevicePathNode); if ((DevicePathType (DevicePathNode) == HARDWARE_DEVICE_PATH) && - ( DevicePathSubType (DevicePathNode) == HW_PCI_DP) && - ( DevicePathType(TempDevicePathNode) == MESSAGING_DEVICE_PATH) && - ( DevicePathSubType(TempDevicePathNode) == MSG_ATAPI_DP) ) { - PciDevicePath = (PCI_DEVICE_PATH *) DevicePathNode; + (DevicePathSubType (DevicePathNode) == HW_PCI_DP) && + (DevicePathType (TempDevicePathNode) == MESSAGING_DEVICE_PATH) && + (DevicePathSubType (TempDevicePathNode) == MSG_ATAPI_DP)) + { + PciDevicePath = (PCI_DEVICE_PATH *)DevicePathNode; break; } + DevicePathNode = NextDevicePathNode (DevicePathNode); } @@ -161,7 +163,8 @@ LegacyBiosBuildIdeData ( for (PciIndex = 0; PciIndex < 8; PciIndex++) { if ((PciDevicePath->Device == LocalHddInfo[PciIndex].Device) && (PciDevicePath->Function == LocalHddInfo[PciIndex].Function) - ) { + ) + { break; } } @@ -186,15 +189,15 @@ LegacyBiosBuildIdeData ( InquiryData = NULL; InquiryDataSize = 0; - Status = DiskInfo->Inquiry ( - DiskInfo, - NULL, - &InquiryDataSize - ); + Status = DiskInfo->Inquiry ( + DiskInfo, + NULL, + &InquiryDataSize + ); if (Status == EFI_BUFFER_TOO_SMALL) { - InquiryData = (UINT8 *) AllocatePool ( - InquiryDataSize - ); + InquiryData = (UINT8 *)AllocatePool ( + InquiryDataSize + ); if (InquiryData != NULL) { Status = DiskInfo->Inquiry ( DiskInfo, @@ -227,6 +230,7 @@ LegacyBiosBuildIdeData ( LocalHddInfo[PciIndex + IdeChannel].Status |= HDD_SLAVE_ATAPI_ZIPDISK; } } + FreePool (InquiryData); } else { if (IdeDevice == 0) { @@ -246,7 +250,6 @@ LegacyBiosBuildIdeData ( return EFI_SUCCESS; } - /** If the IDE channel is in compatibility (legacy) mode, remove all PCI I/O BAR addresses from the controller. @@ -257,13 +260,13 @@ LegacyBiosBuildIdeData ( **/ VOID InitLegacyIdeController ( - IN EFI_HANDLE IdeController + IN EFI_HANDLE IdeController ) { - EFI_PCI_IO_PROTOCOL *PciIo; - UINT32 IOBarClear; - EFI_STATUS Status; - PCI_TYPE00 PciData; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT32 IOBarClear; + EFI_STATUS Status; + PCI_TYPE00 PciData; // // If the IDE channel is in compatibility (legacy) mode, remove all @@ -277,20 +280,21 @@ InitLegacyIdeController ( (VOID **)&PciIo ); if (EFI_ERROR (Status)) { - return ; + return; } Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8, 0, sizeof (PciData), &PciData); if (EFI_ERROR (Status)) { - return ; + return; } // // Check whether this is IDE // if ((PciData.Hdr.ClassCode[2] != PCI_CLASS_MASS_STORAGE) || - (PciData.Hdr.ClassCode[1] != PCI_CLASS_MASS_STORAGE_IDE)) { - return ; + (PciData.Hdr.ClassCode[1] != PCI_CLASS_MASS_STORAGE_IDE)) + { + return; } // @@ -301,10 +305,11 @@ InitLegacyIdeController ( PciIo->Pci.Write (PciIo, EfiPciIoWidthUint32, 0x10, 1, &IOBarClear); PciIo->Pci.Write (PciIo, EfiPciIoWidthUint32, 0x14, 1, &IOBarClear); } + if ((PciData.Hdr.ClassCode[0] & IDE_PI_REGISTER_SNE) == 0) { PciIo->Pci.Write (PciIo, EfiPciIoWidthUint32, 0x18, 1, &IOBarClear); PciIo->Pci.Write (PciIo, EfiPciIoWidthUint32, 0x1C, 1, &IOBarClear); } - return ; + return; } diff --git a/OvmfPkg/Csm/LegacyBiosDxe/LegacyPci.c b/OvmfPkg/Csm/LegacyBiosDxe/LegacyPci.c index ea0df4972b..07ee5ab099 100644 --- a/OvmfPkg/Csm/LegacyBiosDxe/LegacyPci.c +++ b/OvmfPkg/Csm/LegacyBiosDxe/LegacyPci.c @@ -9,32 +9,32 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "LegacyBiosInterface.h" #include -#define PCI_START_ADDRESS(x) (((x) + 0x7ff) & ~0x7ff) +#define PCI_START_ADDRESS(x) (((x) + 0x7ff) & ~0x7ff) #define MAX_BRIDGE_INDEX 0x20 typedef struct { - UINTN PciSegment; - UINTN PciBus; - UINTN PciDevice; - UINTN PciFunction; - UINT8 PrimaryBus; - UINT8 SecondaryBus; - UINT8 SubordinateBus; + UINTN PciSegment; + UINTN PciBus; + UINTN PciDevice; + UINTN PciFunction; + UINT8 PrimaryBus; + UINT8 SecondaryBus; + UINT8 SubordinateBus; } BRIDGE_TABLE; -#define ROM_MAX_ENTRIES 24 -BRIDGE_TABLE Bridges[MAX_BRIDGE_INDEX]; -UINTN SortedBridgeIndex[MAX_BRIDGE_INDEX]; -UINTN NumberOfBridges; +#define ROM_MAX_ENTRIES 24 +BRIDGE_TABLE Bridges[MAX_BRIDGE_INDEX]; +UINTN SortedBridgeIndex[MAX_BRIDGE_INDEX]; +UINTN NumberOfBridges; LEGACY_PNP_EXPANSION_HEADER *mBasePnpPtr; -UINT16 mBbsRomSegment; -UINTN mHandleCount; -EFI_HANDLE mVgaHandle; -BOOLEAN mIgnoreBbsUpdateFlag; -BOOLEAN mVgaInstallationInProgress = FALSE; -UINT32 mRomCount = 0x00; -ROM_INSTANCE_ENTRY mRomEntry[ROM_MAX_ENTRIES]; -EDKII_IOMMU_PROTOCOL *mIoMmu; +UINT16 mBbsRomSegment; +UINTN mHandleCount; +EFI_HANDLE mVgaHandle; +BOOLEAN mIgnoreBbsUpdateFlag; +BOOLEAN mVgaInstallationInProgress = FALSE; +UINT32 mRomCount = 0x00; +ROM_INSTANCE_ENTRY mRomEntry[ROM_MAX_ENTRIES]; +EDKII_IOMMU_PROTOCOL *mIoMmu; /** Query shadowed legacy ROM parameters registered by RomShadow() previously. @@ -51,20 +51,20 @@ EDKII_IOMMU_PROTOCOL *mIoMmu; **/ EFI_STATUS GetShadowedRomParameters ( - IN EFI_HANDLE PciHandle, - OUT UINT8 *DiskStart OPTIONAL, - OUT UINT8 *DiskEnd OPTIONAL, - OUT VOID **RomShadowAddress OPTIONAL, - OUT UINTN *ShadowedSize OPTIONAL + IN EFI_HANDLE PciHandle, + OUT UINT8 *DiskStart OPTIONAL, + OUT UINT8 *DiskEnd OPTIONAL, + OUT VOID **RomShadowAddress OPTIONAL, + OUT UINTN *ShadowedSize OPTIONAL ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - UINTN Index; - UINTN PciSegment; - UINTN PciBus; - UINTN PciDevice; - UINTN PciFunction; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + UINTN Index; + UINTN PciSegment; + UINTN PciBus; + UINTN PciDevice; + UINTN PciFunction; // // Get the PCI I/O Protocol on PciHandle @@ -72,7 +72,7 @@ GetShadowedRomParameters ( Status = gBS->HandleProtocol ( PciHandle, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); if (EFI_ERROR (Status)) { return Status; @@ -89,11 +89,12 @@ GetShadowedRomParameters ( &PciFunction ); - for(Index = 0; Index < mRomCount; Index++) { + for (Index = 0; Index < mRomCount; Index++) { if ((mRomEntry[Index].PciSegment == PciSegment) && (mRomEntry[Index].PciBus == PciBus) && (mRomEntry[Index].PciDevice == PciDevice) && - (mRomEntry[Index].PciFunction == PciFunction)) { + (mRomEntry[Index].PciFunction == PciFunction)) + { break; } } @@ -141,15 +142,15 @@ GetShadowedRomParameters ( **/ EFI_STATUS RomShadow ( - IN EFI_HANDLE PciHandle, - IN UINT32 ShadowAddress, - IN UINT32 ShadowedSize, - IN UINT8 DiskStart, - IN UINT8 DiskEnd + IN EFI_HANDLE PciHandle, + IN UINT32 ShadowAddress, + IN UINT32 ShadowedSize, + IN UINT8 DiskStart, + IN UINT8 DiskEnd ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; // // See if there is room to register another option ROM @@ -157,17 +158,19 @@ RomShadow ( if (mRomCount >= ROM_MAX_ENTRIES) { return EFI_OUT_OF_RESOURCES; } + // // Get the PCI I/O Protocol on PciHandle // Status = gBS->HandleProtocol ( PciHandle, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); if (EFI_ERROR (Status)) { return Status; } + // // Get the location of the PCI device // @@ -188,7 +191,6 @@ RomShadow ( return EFI_SUCCESS; } - /** Return EFI_SUCCESS if PciHandle has had a legacy BIOS ROM shadowed. This information represents every call to RomShadow () @@ -201,16 +203,16 @@ RomShadow ( **/ EFI_STATUS IsLegacyRom ( - IN EFI_HANDLE PciHandle + IN EFI_HANDLE PciHandle ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - UINTN Index; - UINTN Segment; - UINTN Bus; - UINTN Device; - UINTN Function; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + UINTN Index; + UINTN Segment; + UINTN Bus; + UINTN Device; + UINTN Function; // // Get the PCI I/O Protocol on PciHandle @@ -218,11 +220,12 @@ IsLegacyRom ( Status = gBS->HandleProtocol ( PciHandle, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); if (EFI_ERROR (Status)) { return Status; } + // // Get the location of the PCI device // @@ -238,11 +241,12 @@ IsLegacyRom ( // See if the option ROM from PciHandle has been previously posted // for (Index = 0; Index < mRomCount; Index++) { - if (mRomEntry[Index].PciSegment == Segment && - mRomEntry[Index].PciBus == Bus && - mRomEntry[Index].PciDevice == Device && - mRomEntry[Index].PciFunction == Function - ) { + if ((mRomEntry[Index].PciSegment == Segment) && + (mRomEntry[Index].PciBus == Bus) && + (mRomEntry[Index].PciDevice == Device) && + (mRomEntry[Index].PciFunction == Function) + ) + { return EFI_SUCCESS; } } @@ -271,14 +275,14 @@ IsLegacyRom ( **/ EFI_STATUS GetPciLegacyRom ( - IN UINT16 Csm16Revision, - IN UINT16 VendorId, - IN UINT16 DeviceId, - IN OUT VOID **Rom, - IN OUT UINTN *ImageSize, - OUT UINTN *MaxRuntimeImageLength OPTIONAL, - OUT UINT8 *OpRomRevision OPTIONAL, - OUT VOID **ConfigUtilityCodeHeader OPTIONAL + IN UINT16 Csm16Revision, + IN UINT16 VendorId, + IN UINT16 DeviceId, + IN OUT VOID **Rom, + IN OUT UINTN *ImageSize, + OUT UINTN *MaxRuntimeImageLength OPTIONAL, + OUT UINT8 *OpRomRevision OPTIONAL, + OUT VOID **ConfigUtilityCodeHeader OPTIONAL ) { BOOLEAN Match; @@ -288,7 +292,6 @@ GetPciLegacyRom ( VOID *BackupImage; VOID *BestImage; - if (*ImageSize < sizeof (EFI_PCI_ROM_HEADER)) { return EFI_NOT_FOUND; } @@ -297,13 +300,14 @@ GetPciLegacyRom ( BackupImage = NULL; RomHeader.Raw = *Rom; while (RomHeader.Generic->Signature == PCI_EXPANSION_ROM_HEADER_SIGNATURE) { - if (RomHeader.Generic->PcirOffset == 0 || - (RomHeader.Generic->PcirOffset & 3) !=0 || - *ImageSize < RomHeader.Raw - (UINT8 *) *Rom + RomHeader.Generic->PcirOffset + sizeof (PCI_DATA_STRUCTURE)) { + if ((RomHeader.Generic->PcirOffset == 0) || + ((RomHeader.Generic->PcirOffset & 3) != 0) || + (*ImageSize < RomHeader.Raw - (UINT8 *)*Rom + RomHeader.Generic->PcirOffset + sizeof (PCI_DATA_STRUCTURE))) + { break; } - Pcir = (PCI_3_0_DATA_STRUCTURE *) (RomHeader.Raw + RomHeader.Generic->PcirOffset); + Pcir = (PCI_3_0_DATA_STRUCTURE *)(RomHeader.Raw + RomHeader.Generic->PcirOffset); // // Check signature in the PCI Data Structure. // @@ -321,7 +325,7 @@ GetPciLegacyRom ( if (Pcir->DeviceId == DeviceId) { Match = TRUE; } else if ((Pcir->Revision >= 3) && (Pcir->DeviceListOffset != 0)) { - DeviceIdList = (UINT16 *)(((UINT8 *) Pcir) + Pcir->DeviceListOffset); + DeviceIdList = (UINT16 *)(((UINT8 *)Pcir) + Pcir->DeviceListOffset); // // Checking the device list // @@ -330,7 +334,8 @@ GetPciLegacyRom ( Match = TRUE; break; } - DeviceIdList ++; + + DeviceIdList++; } } } @@ -345,7 +350,7 @@ GetPciLegacyRom ( // case 1.1: meets OpRom 3.0 // Perfect!!! // - BestImage = RomHeader.Raw; + BestImage = RomHeader.Raw; break; } else { // @@ -369,7 +374,7 @@ GetPciLegacyRom ( // case 2.2: meets OpRom 2.x // Perfect!!! // - BestImage = RomHeader.Raw; + BestImage = RomHeader.Raw; break; } } @@ -389,15 +394,17 @@ GetPciLegacyRom ( if (BackupImage == NULL) { return EFI_NOT_FOUND; } + // // The versions of CSM16 and OpRom don't match exactly // BestImage = BackupImage; } + RomHeader.Raw = BestImage; - Pcir = (PCI_3_0_DATA_STRUCTURE *) (RomHeader.Raw + RomHeader.Generic->PcirOffset); - *Rom = BestImage; - *ImageSize = Pcir->ImageLength * 512; + Pcir = (PCI_3_0_DATA_STRUCTURE *)(RomHeader.Raw + RomHeader.Generic->PcirOffset); + *Rom = BestImage; + *ImageSize = Pcir->ImageLength * 512; if (MaxRuntimeImageLength != NULL) { if (Pcir->Revision < 3) { @@ -444,22 +451,22 @@ GetPciLegacyRom ( **/ EFI_STATUS CreateBridgeTable ( - IN EFI_LEGACY_IRQ_ROUTING_ENTRY *RoutingTable, - IN UINTN RoutingTableEntries + IN EFI_LEGACY_IRQ_ROUTING_ENTRY *RoutingTable, + IN UINTN RoutingTableEntries ) { - EFI_STATUS Status; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN BridgeIndex; - UINTN Index; - UINTN Index1; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE01 PciConfigHeader; - BRIDGE_TABLE SlotBridges[MAX_BRIDGE_INDEX]; - UINTN SlotBridgeIndex; - - BridgeIndex = 0x00; + EFI_STATUS Status; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + UINTN BridgeIndex; + UINTN Index; + UINTN Index1; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE01 PciConfigHeader; + BRIDGE_TABLE SlotBridges[MAX_BRIDGE_INDEX]; + UINTN SlotBridgeIndex; + + BridgeIndex = 0x00; SlotBridgeIndex = 0x00; // @@ -475,11 +482,12 @@ CreateBridgeTable ( if (EFI_ERROR (Status)) { return EFI_NOT_FOUND; } + for (Index = 0; Index < HandleCount; Index++) { Status = gBS->HandleProtocol ( HandleBuffer[Index], &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); if (EFI_ERROR (Status)) { continue; @@ -502,19 +510,20 @@ CreateBridgeTable ( &Bridges[BridgeIndex].PciFunction ); - Bridges[BridgeIndex].PrimaryBus = PciConfigHeader.Bridge.PrimaryBus; + Bridges[BridgeIndex].PrimaryBus = PciConfigHeader.Bridge.PrimaryBus; - Bridges[BridgeIndex].SecondaryBus = PciConfigHeader.Bridge.SecondaryBus; + Bridges[BridgeIndex].SecondaryBus = PciConfigHeader.Bridge.SecondaryBus; Bridges[BridgeIndex].SubordinateBus = PciConfigHeader.Bridge.SubordinateBus; - for (Index1 = 0; Index1 < RoutingTableEntries; Index1++){ + for (Index1 = 0; Index1 < RoutingTableEntries; Index1++) { // // Test whether we have found the Bridge in the slot, must be the one that directly interfaced to the board // Once we find one, store it in the SlotBridges[] // - if ((RoutingTable[Index1].Slot != 0) && (Bridges[BridgeIndex].PrimaryBus == RoutingTable[Index1].Bus) - && ((Bridges[BridgeIndex].PciDevice << 3) == RoutingTable[Index1].Device)) { + if ( (RoutingTable[Index1].Slot != 0) && (Bridges[BridgeIndex].PrimaryBus == RoutingTable[Index1].Bus) + && ((Bridges[BridgeIndex].PciDevice << 3) == RoutingTable[Index1].Device)) + { CopyMem (&SlotBridges[SlotBridgeIndex], &Bridges[BridgeIndex], sizeof (BRIDGE_TABLE)); SlotBridgeIndex++; @@ -529,10 +538,11 @@ CreateBridgeTable ( // // Pack up Bridges by removing those useless ones // - for (Index = 0; Index < BridgeIndex;){ + for (Index = 0; Index < BridgeIndex;) { for (Index1 = 0; Index1 < SlotBridgeIndex; Index1++) { if (((Bridges[Index].PciBus == SlotBridges[Index1].PrimaryBus) && (Bridges[Index].PciDevice == SlotBridges[Index1].PciDevice)) || - ((Bridges[Index].PciBus >= SlotBridges[Index1].SecondaryBus) && (Bridges[Index].PciBus <= SlotBridges[Index1].SubordinateBus))) { + ((Bridges[Index].PciBus >= SlotBridges[Index1].SecondaryBus) && (Bridges[Index].PciBus <= SlotBridges[Index1].SubordinateBus))) + { // // We have found one that meets our criteria // @@ -545,7 +555,7 @@ CreateBridgeTable ( // This one doesn't meet criteria, pack it // if (Index1 >= SlotBridgeIndex) { - for (Index1 = Index; BridgeIndex > 1 && Index1 < BridgeIndex - 1 ; Index1++) { + for (Index1 = Index; BridgeIndex > 1 && Index1 < BridgeIndex - 1; Index1++) { CopyMem (&Bridges[Index1], &Bridges[Index1 + 1], sizeof (BRIDGE_TABLE)); } @@ -574,18 +584,19 @@ CreateBridgeTable ( if ((Bridges[Index].SecondaryBus == Bridges[Index1].SecondaryBus) && (Bridges[Index].SubordinateBus > Bridges[Index1].SubordinateBus) - ) { + ) + { SortedBridgeIndex[Index] = Index1; SortedBridgeIndex[Index1] = Index; } } } } + FreePool (HandleBuffer); return EFI_SUCCESS; } - /** Find base Bridge for device. @@ -601,14 +612,15 @@ CreateBridgeTable ( **/ EFI_STATUS GetBaseBus ( - IN LEGACY_BIOS_INSTANCE *Private, - IN UINTN PciBus, - IN UINTN PciDevice, - IN EFI_LEGACY_IRQ_ROUTING_ENTRY *RoutingTable, - IN UINTN RoutingTableEntries + IN LEGACY_BIOS_INSTANCE *Private, + IN UINTN PciBus, + IN UINTN PciDevice, + IN EFI_LEGACY_IRQ_ROUTING_ENTRY *RoutingTable, + IN UINTN RoutingTableEntries ) { - UINTN Index; + UINTN Index; + for (Index = 0; Index < RoutingTableEntries; Index++) { if ((RoutingTable[Index].Bus == PciBus) && (RoutingTable[Index].Device == (PciDevice << 3))) { return EFI_SUCCESS; @@ -635,11 +647,11 @@ GetBaseBus ( **/ EFI_STATUS TranslateBusPirq ( - IN LEGACY_BIOS_INSTANCE *Private, - IN OUT UINTN *PciBus, - IN OUT UINTN *PciDevice, - IN OUT UINTN *PciFunction, - IN OUT UINT8 *PirqIndex + IN LEGACY_BIOS_INSTANCE *Private, + IN OUT UINTN *PciBus, + IN OUT UINTN *PciDevice, + IN OUT UINTN *PciFunction, + IN OUT UINT8 *PirqIndex ) { /* @@ -689,24 +701,25 @@ No other busses match criteria. Device to be programmed is Bus 5, Device 1. Rotate (B,C,D,A) by 1 giving C,D,A,B. Translated PIRQ is C. */ - UINTN LocalBus; - UINTN LocalDevice; - UINTN BaseBus; - UINTN BaseDevice; - UINTN BaseFunction; - UINT8 LocalPirqIndex; - BOOLEAN BaseIndexFlag; - UINTN BridgeIndex; - UINTN SBridgeIndex; - BaseIndexFlag = FALSE; - BridgeIndex = 0x00; - - LocalPirqIndex = *PirqIndex; - LocalBus = *PciBus; - LocalDevice = *PciDevice; - BaseBus = *PciBus; - BaseDevice = *PciDevice; - BaseFunction = *PciFunction; + UINTN LocalBus; + UINTN LocalDevice; + UINTN BaseBus; + UINTN BaseDevice; + UINTN BaseFunction; + UINT8 LocalPirqIndex; + BOOLEAN BaseIndexFlag; + UINTN BridgeIndex; + UINTN SBridgeIndex; + + BaseIndexFlag = FALSE; + BridgeIndex = 0x00; + + LocalPirqIndex = *PirqIndex; + LocalBus = *PciBus; + LocalDevice = *PciDevice; + BaseBus = *PciBus; + BaseDevice = *PciDevice; + BaseFunction = *PciFunction; // // LocalPirqIndex list PIRQs in rotated fashion @@ -732,17 +745,17 @@ Rotate (B,C,D,A) by 1 giving C,D,A,B. Translated PIRQ is C. BaseFunction = Bridges[SBridgeIndex].PciFunction; BaseIndexFlag = TRUE; } else { - LocalPirqIndex = (UINT8) ((LocalPirqIndex + (UINT8)Bridges[SBridgeIndex].PciDevice)%4); + LocalPirqIndex = (UINT8)((LocalPirqIndex + (UINT8)Bridges[SBridgeIndex].PciDevice)%4); } // // Check if at device. If not get new PCI location & PIRQ // - if (Bridges[SBridgeIndex].SecondaryBus == (UINT8) LocalBus) { + if (Bridges[SBridgeIndex].SecondaryBus == (UINT8)LocalBus) { // // Translate PIRQ // - LocalPirqIndex = (UINT8) ((LocalPirqIndex + (UINT8) (LocalDevice)) % 4); + LocalPirqIndex = (UINT8)((LocalPirqIndex + (UINT8)(LocalDevice)) % 4); break; } } @@ -751,19 +764,18 @@ Rotate (B,C,D,A) by 1 giving C,D,A,B. Translated PIRQ is C. // // In case we fail to find the Bridge just above us, this is some potential error and we want to warn the user // - if(BridgeIndex >= NumberOfBridges){ + if (BridgeIndex >= NumberOfBridges) { DEBUG ((DEBUG_ERROR, "Cannot Find IRQ Routing for Bus %d, Device %d, Function %d\n", *PciBus, *PciDevice, *PciFunction)); } - *PirqIndex = LocalPirqIndex; - *PciBus = BaseBus; - *PciDevice = BaseDevice; - *PciFunction = BaseFunction; + *PirqIndex = LocalPirqIndex; + *PciBus = BaseBus; + *PciDevice = BaseDevice; + *PciFunction = BaseFunction; return EFI_SUCCESS; } - /** Copy the $PIR table as required. @@ -776,59 +788,59 @@ Rotate (B,C,D,A) by 1 giving C,D,A,B. Translated PIRQ is C. **/ VOID CopyPirqTable ( - IN LEGACY_BIOS_INSTANCE *Private, - IN EFI_LEGACY_IRQ_ROUTING_ENTRY *RoutingTable, - IN UINTN RoutingTableEntries, - IN EFI_LEGACY_PIRQ_TABLE_HEADER *PirqTable, - IN UINTN PirqTableSize + IN LEGACY_BIOS_INSTANCE *Private, + IN EFI_LEGACY_IRQ_ROUTING_ENTRY *RoutingTable, + IN UINTN RoutingTableEntries, + IN EFI_LEGACY_PIRQ_TABLE_HEADER *PirqTable, + IN UINTN PirqTableSize ) { - EFI_IA32_REGISTER_SET Regs; - UINT32 Granularity; + EFI_IA32_REGISTER_SET Regs; + UINT32 Granularity; // // Copy $PIR table, if it exists. // if (PirqTable != NULL) { Private->LegacyRegion->UnLock ( - Private->LegacyRegion, - 0xE0000, - 0x20000, - &Granularity - ); - - Private->InternalIrqRoutingTable = RoutingTable; - Private->NumberIrqRoutingEntries = (UINT16) (RoutingTableEntries); + Private->LegacyRegion, + 0xE0000, + 0x20000, + &Granularity + ); + + Private->InternalIrqRoutingTable = RoutingTable; + Private->NumberIrqRoutingEntries = (UINT16)(RoutingTableEntries); ZeroMem (&Regs, sizeof (EFI_IA32_REGISTER_SET)); Regs.X.AX = Legacy16GetTableAddress; - Regs.X.CX = (UINT16) PirqTableSize; + Regs.X.CX = (UINT16)PirqTableSize; // // Allocate at F segment according to PCI IRQ Routing Table Specification // - Regs.X.BX = (UINT16) 0x1; + Regs.X.BX = (UINT16)0x1; // // 16-byte boundary alignment requirement according to // PCI IRQ Routing Table Specification // Regs.X.DX = 0x10; Private->LegacyBios.FarCall86 ( - &Private->LegacyBios, - Private->Legacy16CallSegment, - Private->Legacy16CallOffset, - &Regs, - NULL, - 0 - ); + &Private->LegacyBios, + Private->Legacy16CallSegment, + Private->Legacy16CallOffset, + &Regs, + NULL, + 0 + ); - Private->Legacy16Table->IrqRoutingTablePointer = (UINT32) (Regs.X.DS * 16 + Regs.X.BX); + Private->Legacy16Table->IrqRoutingTablePointer = (UINT32)(Regs.X.DS * 16 + Regs.X.BX); if (Regs.X.AX != 0) { DEBUG ((DEBUG_ERROR, "PIRQ table length insufficient - %x\n", PirqTableSize)); } else { DEBUG ((DEBUG_INFO, "PIRQ table in legacy region - %x\n", Private->Legacy16Table->IrqRoutingTablePointer)); Private->Legacy16Table->IrqRoutingTableLength = (UINT32)PirqTableSize; CopyMem ( - (VOID *) (UINTN)Private->Legacy16Table->IrqRoutingTablePointer, + (VOID *)(UINTN)Private->Legacy16Table->IrqRoutingTablePointer, PirqTable, PirqTableSize ); @@ -890,10 +902,10 @@ DumpPciHandle ( **/ VOID InstallLegacyIrqHandler ( - IN LEGACY_BIOS_INSTANCE *Private, - IN EFI_PCI_IO_PROTOCOL *PciIo, - IN UINT8 PciIrq, - IN PCI_TYPE00 *PciConfigHeader + IN LEGACY_BIOS_INSTANCE *Private, + IN EFI_PCI_IO_PROTOCOL *PciIo, + IN UINT8 PciIrq, + IN PCI_TYPE00 *PciConfigHeader ) { EFI_IA32_REGISTER_SET Regs; @@ -924,7 +936,7 @@ InstallLegacyIrqHandler ( NULL ); - LegMask = (UINT16) (LegMask | (UINT16) (1 << PciIrq)); + LegMask = (UINT16)(LegMask | (UINT16)(1 << PciIrq)); Legacy8259->SetMask ( Legacy8259, @@ -935,18 +947,18 @@ InstallLegacyIrqHandler ( ); PciIo->GetLocation ( - PciIo, - &PciSegment, - &PciBus, - &PciDevice, - &PciFunction - ); - Private->IntThunk->PciHandler.PciBus = (UINT8) PciBus; - Private->IntThunk->PciHandler.PciDeviceFun = (UINT8) ((PciDevice << 3) + PciFunction); - Private->IntThunk->PciHandler.PciSegment = (UINT8) PciSegment; - Private->IntThunk->PciHandler.PciClass = PciConfigHeader->Hdr.ClassCode[2]; - Private->IntThunk->PciHandler.PciSubclass = PciConfigHeader->Hdr.ClassCode[1]; - Private->IntThunk->PciHandler.PciInterface = PciConfigHeader->Hdr.ClassCode[0]; + PciIo, + &PciSegment, + &PciBus, + &PciDevice, + &PciFunction + ); + Private->IntThunk->PciHandler.PciBus = (UINT8)PciBus; + Private->IntThunk->PciHandler.PciDeviceFun = (UINT8)((PciDevice << 3) + PciFunction); + Private->IntThunk->PciHandler.PciSegment = (UINT8)PciSegment; + Private->IntThunk->PciHandler.PciClass = PciConfigHeader->Hdr.ClassCode[2]; + Private->IntThunk->PciHandler.PciSubclass = PciConfigHeader->Hdr.ClassCode[1]; + Private->IntThunk->PciHandler.PciInterface = PciConfigHeader->Hdr.ClassCode[0]; // // Use native mode base address registers in two cases: @@ -954,30 +966,30 @@ InstallLegacyIrqHandler ( // in native mode OR // 2. PCI device Sub Class Code is not IDE // - Private->IntThunk->PciHandler.PrimaryBusMaster = (UINT16)(PciConfigHeader->Device.Bar[4] & 0xfffc); + Private->IntThunk->PciHandler.PrimaryBusMaster = (UINT16)(PciConfigHeader->Device.Bar[4] & 0xfffc); if (((PciConfigHeader->Hdr.ClassCode[0] & 0x01) != 0) || (PciConfigHeader->Hdr.ClassCode[1] != PCI_CLASS_MASS_STORAGE_IDE)) { - Private->IntThunk->PciHandler.PrimaryIrq = PciIrq; - Private->IntThunk->PciHandler.PrimaryBase = (UINT16) (PciConfigHeader->Device.Bar[0] & 0xfffc); - Private->IntThunk->PciHandler.PrimaryControl = (UINT16) ((PciConfigHeader->Device.Bar[1] & 0xfffc) + 2); + Private->IntThunk->PciHandler.PrimaryIrq = PciIrq; + Private->IntThunk->PciHandler.PrimaryBase = (UINT16)(PciConfigHeader->Device.Bar[0] & 0xfffc); + Private->IntThunk->PciHandler.PrimaryControl = (UINT16)((PciConfigHeader->Device.Bar[1] & 0xfffc) + 2); } else { - Private->IntThunk->PciHandler.PrimaryIrq = 14; - Private->IntThunk->PciHandler.PrimaryBase = 0x1f0; - Private->IntThunk->PciHandler.PrimaryControl = 0x3f6; + Private->IntThunk->PciHandler.PrimaryIrq = 14; + Private->IntThunk->PciHandler.PrimaryBase = 0x1f0; + Private->IntThunk->PciHandler.PrimaryControl = 0x3f6; } + // // Secondary controller data // if (Private->IntThunk->PciHandler.PrimaryBusMaster != 0) { - Private->IntThunk->PciHandler.SecondaryBusMaster = (UINT16) ((PciConfigHeader->Device.Bar[4] & 0xfffc) + 8); - PrimaryMaster = (UINT16) (Private->IntThunk->PciHandler.PrimaryBusMaster + 2); - SecondaryMaster = (UINT16) (Private->IntThunk->PciHandler.SecondaryBusMaster + 2); + Private->IntThunk->PciHandler.SecondaryBusMaster = (UINT16)((PciConfigHeader->Device.Bar[4] & 0xfffc) + 8); + PrimaryMaster = (UINT16)(Private->IntThunk->PciHandler.PrimaryBusMaster + 2); + SecondaryMaster = (UINT16)(Private->IntThunk->PciHandler.SecondaryBusMaster + 2); // // Clear pending interrupts in Bus Master registers // IoWrite16 (PrimaryMaster, 0x04); IoWrite16 (SecondaryMaster, 0x04); - } // @@ -987,14 +999,13 @@ InstallLegacyIrqHandler ( // 2. PCI device Sub Class Code is not IDE // if (((PciConfigHeader->Hdr.ClassCode[0] & 0x04) != 0) || (PciConfigHeader->Hdr.ClassCode[1] != PCI_CLASS_MASS_STORAGE_IDE)) { - Private->IntThunk->PciHandler.SecondaryIrq = PciIrq; - Private->IntThunk->PciHandler.SecondaryBase = (UINT16) (PciConfigHeader->Device.Bar[2] & 0xfffc); - Private->IntThunk->PciHandler.SecondaryControl = (UINT16) ((PciConfigHeader->Device.Bar[3] & 0xfffc) + 2); + Private->IntThunk->PciHandler.SecondaryIrq = PciIrq; + Private->IntThunk->PciHandler.SecondaryBase = (UINT16)(PciConfigHeader->Device.Bar[2] & 0xfffc); + Private->IntThunk->PciHandler.SecondaryControl = (UINT16)((PciConfigHeader->Device.Bar[3] & 0xfffc) + 2); } else { - - Private->IntThunk->PciHandler.SecondaryIrq = 15; - Private->IntThunk->PciHandler.SecondaryBase = 0x170; - Private->IntThunk->PciHandler.SecondaryControl = 0x376; + Private->IntThunk->PciHandler.SecondaryIrq = 15; + Private->IntThunk->PciHandler.SecondaryBase = 0x170; + Private->IntThunk->PciHandler.SecondaryControl = 0x376; } // @@ -1021,20 +1032,20 @@ InstallLegacyIrqHandler ( ); Regs.X.AX = Legacy16InstallPciHandler; - TempData = (UINTN) &Private->IntThunk->PciHandler; - Regs.X.ES = EFI_SEGMENT ((UINT32) TempData); - Regs.X.BX = EFI_OFFSET ((UINT32) TempData); + TempData = (UINTN)&Private->IntThunk->PciHandler; + Regs.X.ES = EFI_SEGMENT ((UINT32)TempData); + Regs.X.BX = EFI_OFFSET ((UINT32)TempData); DumpPciHandle (&Private->IntThunk->PciHandler); Private->LegacyBios.FarCall86 ( - &Private->LegacyBios, - Private->Legacy16CallSegment, - Private->Legacy16CallOffset, - &Regs, - NULL, - 0 - ); + &Private->LegacyBios, + Private->Legacy16CallSegment, + Private->Legacy16CallOffset, + &Regs, + NULL, + 0 + ); Private->Cpu->FlushDataCache (Private->Cpu, 0xE0000, 0x20000, EfiCpuFlushTypeWriteBackInvalidate); Private->LegacyRegion->Lock ( @@ -1043,10 +1054,8 @@ InstallLegacyIrqHandler ( 0x20000, &Granularity ); - } - /** Program the interrupt routing register in all the PCI devices. On a PC AT system this register contains the 8259 IRQ vector that matches its PCI interrupt. @@ -1059,37 +1068,37 @@ InstallLegacyIrqHandler ( **/ EFI_STATUS PciProgramAllInterruptLineRegisters ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - EFI_LEGACY_8259_PROTOCOL *Legacy8259; - EFI_LEGACY_INTERRUPT_PROTOCOL *LegacyInterrupt; - EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *LegacyBiosPlatform; - UINT8 InterruptPin; - UINTN Index; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN MassStorageHandleCount; - EFI_HANDLE *MassStorageHandleBuffer; - UINTN MassStorageHandleIndex; - UINT8 PciIrq; - UINT16 Command; - UINTN PciSegment; - UINTN PciBus; - UINTN PciDevice; - UINTN PciFunction; - EFI_LEGACY_IRQ_ROUTING_ENTRY *RoutingTable; - UINTN RoutingTableEntries; - UINT16 LegMask; - UINT16 LegEdgeLevel; - PCI_TYPE00 PciConfigHeader; - EFI_LEGACY_PIRQ_TABLE_HEADER *PirqTable; - UINTN PirqTableSize; - UINTN Flags; - HDD_INFO *HddInfo; - UINT64 Supports; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + EFI_LEGACY_8259_PROTOCOL *Legacy8259; + EFI_LEGACY_INTERRUPT_PROTOCOL *LegacyInterrupt; + EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *LegacyBiosPlatform; + UINT8 InterruptPin; + UINTN Index; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + UINTN MassStorageHandleCount; + EFI_HANDLE *MassStorageHandleBuffer; + UINTN MassStorageHandleIndex; + UINT8 PciIrq; + UINT16 Command; + UINTN PciSegment; + UINTN PciBus; + UINTN PciDevice; + UINTN PciFunction; + EFI_LEGACY_IRQ_ROUTING_ENTRY *RoutingTable; + UINTN RoutingTableEntries; + UINT16 LegMask; + UINT16 LegEdgeLevel; + PCI_TYPE00 PciConfigHeader; + EFI_LEGACY_PIRQ_TABLE_HEADER *PirqTable; + UINTN PirqTableSize; + UINTN Flags; + HDD_INFO *HddInfo; + UINT64 Supports; // // Note - This routine use to return immediately if Private->PciInterruptLine @@ -1101,15 +1110,15 @@ PciProgramAllInterruptLineRegisters ( // EFI_ALREADY_STARTED. In addition check if PCI device InterruptLine != 0. // If zero then function unprogrammed else skip function. // - Legacy8259 = Private->Legacy8259; - LegacyInterrupt = Private->LegacyInterrupt; - LegacyBiosPlatform = Private->LegacyBiosPlatform; + Legacy8259 = Private->Legacy8259; + LegacyInterrupt = Private->LegacyInterrupt; + LegacyBiosPlatform = Private->LegacyBiosPlatform; LegacyBiosPlatform->GetRoutingTable ( Private->LegacyBiosPlatform, - (VOID *) &RoutingTable, + (VOID *)&RoutingTable, &RoutingTableEntries, - (VOID *) &PirqTable, + (VOID *)&PirqTable, &PirqTableSize, NULL, NULL @@ -1136,6 +1145,7 @@ PciProgramAllInterruptLineRegisters ( if (EFI_ERROR (Status)) { return EFI_NOT_FOUND; } + if (HandleCount == mHandleCount) { FreePool (HandleBuffer); return EFI_ALREADY_STARTED; @@ -1164,7 +1174,7 @@ PciProgramAllInterruptLineRegisters ( Status = gBS->HandleProtocol ( HandleBuffer[Index], &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); ASSERT_EFI_ERROR (Status); @@ -1192,13 +1202,14 @@ PciProgramAllInterruptLineRegisters ( ); if (!EFI_ERROR (Status)) { Supports &= (UINT64)EFI_PCI_DEVICE_ENABLE; - Status = PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationEnable, - Supports, - NULL - ); + Status = PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationEnable, + Supports, + NULL + ); } + PciIo->Pci.Write (PciIo, EfiPciIoWidthUint16, 0x04, 1, &Command); if (EFI_ERROR (Status)) { @@ -1238,6 +1249,7 @@ PciProgramAllInterruptLineRegisters ( &InterruptPin ); } + // // Translate InterruptPin(0-3) into PIRQ // @@ -1290,7 +1302,7 @@ PciProgramAllInterruptLineRegisters ( // since ConnectController may force native mode and we don't // want that for primary IDE controller // - MassStorageHandleCount = 0; + MassStorageHandleCount = 0; MassStorageHandleBuffer = NULL; LegacyBiosPlatform->GetPlatformHandle ( Private->LegacyBiosPlatform, @@ -1327,6 +1339,7 @@ PciProgramAllInterruptLineRegisters ( } } } + // // Write InterruptPin and enable 8259. // @@ -1337,7 +1350,7 @@ PciProgramAllInterruptLineRegisters ( 1, &PciIrq ); - Private->IntThunk->EfiToLegacy16BootTable.PciIrqMask = (UINT16) (Private->IntThunk->EfiToLegacy16BootTable.PciIrqMask | (UINT16) (1 << PciIrq)); + Private->IntThunk->EfiToLegacy16BootTable.PciIrqMask = (UINT16)(Private->IntThunk->EfiToLegacy16BootTable.PciIrqMask | (UINT16)(1 << PciIrq)); Legacy8259->GetMask ( Legacy8259, @@ -1347,8 +1360,8 @@ PciProgramAllInterruptLineRegisters ( NULL ); - LegMask = (UINT16) (LegMask & (UINT16)~(1 << PciIrq)); - LegEdgeLevel = (UINT16) (LegEdgeLevel | (UINT16) (1 << PciIrq)); + LegMask = (UINT16)(LegMask & (UINT16) ~(1 << PciIrq)); + LegEdgeLevel = (UINT16)(LegEdgeLevel | (UINT16)(1 << PciIrq)); Legacy8259->SetMask ( Legacy8259, &LegMask, @@ -1358,11 +1371,11 @@ PciProgramAllInterruptLineRegisters ( ); } } + FreePool (HandleBuffer); return EFI_SUCCESS; } - /** Find & verify PnP Expansion header in ROM image @@ -1377,43 +1390,43 @@ PciProgramAllInterruptLineRegisters ( **/ EFI_STATUS FindNextPnpExpansionHeader ( - IN LEGACY_BIOS_INSTANCE *Private, - IN BOOLEAN FirstHeader, - IN OUT LEGACY_PNP_EXPANSION_HEADER **PnpPtr + IN LEGACY_BIOS_INSTANCE *Private, + IN BOOLEAN FirstHeader, + IN OUT LEGACY_PNP_EXPANSION_HEADER **PnpPtr ) { - UINTN TempData; - LEGACY_PNP_EXPANSION_HEADER *LocalPnpPtr; + UINTN TempData; + LEGACY_PNP_EXPANSION_HEADER *LocalPnpPtr; + LocalPnpPtr = *PnpPtr; if (FirstHeader == FIRST_INSTANCE) { - mBasePnpPtr = LocalPnpPtr; - mBbsRomSegment = (UINT16) ((UINTN) mBasePnpPtr >> 4); + mBasePnpPtr = LocalPnpPtr; + mBbsRomSegment = (UINT16)((UINTN)mBasePnpPtr >> 4); // // Offset 0x1a gives offset to PnP expansion header for the first // instance, there after the structure gives the offset to the next // structure // - LocalPnpPtr = (LEGACY_PNP_EXPANSION_HEADER *) ((UINT8 *) LocalPnpPtr + 0x1a); - TempData = (*((UINT16 *) LocalPnpPtr)); + LocalPnpPtr = (LEGACY_PNP_EXPANSION_HEADER *)((UINT8 *)LocalPnpPtr + 0x1a); + TempData = (*((UINT16 *)LocalPnpPtr)); } else { - TempData = (UINT16) LocalPnpPtr->NextHeader; + TempData = (UINT16)LocalPnpPtr->NextHeader; } - LocalPnpPtr = (LEGACY_PNP_EXPANSION_HEADER *) (((UINT8 *) mBasePnpPtr + TempData)); + LocalPnpPtr = (LEGACY_PNP_EXPANSION_HEADER *)(((UINT8 *)mBasePnpPtr + TempData)); // // Search for PnP table in Shadowed ROM // *PnpPtr = LocalPnpPtr; - if (*(UINT32 *) LocalPnpPtr == SIGNATURE_32 ('$', 'P', 'n', 'P')) { + if (*(UINT32 *)LocalPnpPtr == SIGNATURE_32 ('$', 'P', 'n', 'P')) { return EFI_SUCCESS; } else { return EFI_NOT_FOUND; } } - /** Update list of Bev or BCV table entries. @@ -1432,38 +1445,39 @@ UpdateBevBcvTable ( IN EFI_PCI_IO_PROTOCOL *PciIo ) { - VOID *RomEnd; - BBS_TABLE *BbsTable; - UINTN BbsIndex; - EFI_LEGACY_EXPANSION_ROM_HEADER *PciPtr; - LEGACY_PNP_EXPANSION_HEADER *PnpPtr; - BOOLEAN Instance; - EFI_STATUS Status; - UINTN Segment; - UINTN Bus; - UINTN Device; - UINTN Function; - UINT8 Class; - UINT16 DeviceType; - Segment = 0; - Bus = 0; - Device = 0; - Function = 0; - Class = 0; - DeviceType = BBS_UNKNOWN; + VOID *RomEnd; + BBS_TABLE *BbsTable; + UINTN BbsIndex; + EFI_LEGACY_EXPANSION_ROM_HEADER *PciPtr; + LEGACY_PNP_EXPANSION_HEADER *PnpPtr; + BOOLEAN Instance; + EFI_STATUS Status; + UINTN Segment; + UINTN Bus; + UINTN Device; + UINTN Function; + UINT8 Class; + UINT16 DeviceType; + + Segment = 0; + Bus = 0; + Device = 0; + Function = 0; + Class = 0; + DeviceType = BBS_UNKNOWN; // // Skip floppy and 2*onboard IDE controller entries(Master/Slave per // controller). // - BbsIndex = Private->IntThunk->EfiToLegacy16BootTable.NumberBbsEntries; + BbsIndex = Private->IntThunk->EfiToLegacy16BootTable.NumberBbsEntries; - BbsTable = (BBS_TABLE*)(UINTN) Private->IntThunk->EfiToLegacy16BootTable.BbsTable; - PnpPtr = (LEGACY_PNP_EXPANSION_HEADER *) RomStart; - PciPtr = (EFI_LEGACY_EXPANSION_ROM_HEADER *) RomStart; + BbsTable = (BBS_TABLE *)(UINTN)Private->IntThunk->EfiToLegacy16BootTable.BbsTable; + PnpPtr = (LEGACY_PNP_EXPANSION_HEADER *)RomStart; + PciPtr = (EFI_LEGACY_EXPANSION_ROM_HEADER *)RomStart; - RomEnd = (VOID *) (PciPtr->Size512 * 512 + (UINTN) PciPtr); - Instance = FIRST_INSTANCE; + RomEnd = (VOID *)(PciPtr->Size512 * 512 + (UINTN)PciPtr); + Instance = FIRST_INSTANCE; // // OPROMs like PXE may not be tied to a piece of hardware and thus // don't have a PciIo associated with them @@ -1494,20 +1508,21 @@ UpdateBevBcvTable ( } while (TRUE) { - Status = FindNextPnpExpansionHeader (Private, Instance, &PnpPtr); - Instance = NOT_FIRST_INSTANCE; + Status = FindNextPnpExpansionHeader (Private, Instance, &PnpPtr); + Instance = NOT_FIRST_INSTANCE; if (EFI_ERROR (Status)) { break; } + // // There can be additional $PnP headers within the OPROM. // Example: SCSI can have one per drive. // BbsTable[BbsIndex].BootPriority = BBS_UNPRIORITIZED_ENTRY; BbsTable[BbsIndex].DeviceType = DeviceType; - BbsTable[BbsIndex].Bus = (UINT32) Bus; - BbsTable[BbsIndex].Device = (UINT32) Device; - BbsTable[BbsIndex].Function = (UINT32) Function; + BbsTable[BbsIndex].Bus = (UINT32)Bus; + BbsTable[BbsIndex].Device = (UINT32)Device; + BbsTable[BbsIndex].Function = (UINT32)Function; BbsTable[BbsIndex].StatusFlags.OldPosition = 0; BbsTable[BbsIndex].StatusFlags.Reserved1 = 0; BbsTable[BbsIndex].StatusFlags.Enabled = 0; @@ -1532,22 +1547,21 @@ UpdateBevBcvTable ( } if (PnpPtr->Bev != 0) { - BbsTable[BbsIndex].BootHandlerOffset = PnpPtr->Bev; - BbsTable[BbsIndex].DeviceType = BBS_BEV_DEVICE; + BbsTable[BbsIndex].BootHandlerOffset = PnpPtr->Bev; + BbsTable[BbsIndex].DeviceType = BBS_BEV_DEVICE; ++BbsIndex; } - if ((PnpPtr == (LEGACY_PNP_EXPANSION_HEADER *) PciPtr) || (PnpPtr > (LEGACY_PNP_EXPANSION_HEADER *) RomEnd)) { + if ((PnpPtr == (LEGACY_PNP_EXPANSION_HEADER *)PciPtr) || (PnpPtr > (LEGACY_PNP_EXPANSION_HEADER *)RomEnd)) { break; } } - BbsTable[BbsIndex].BootPriority = BBS_IGNORE_ENTRY; - Private->IntThunk->EfiToLegacy16BootTable.NumberBbsEntries = (UINT32) BbsIndex; + BbsTable[BbsIndex].BootPriority = BBS_IGNORE_ENTRY; + Private->IntThunk->EfiToLegacy16BootTable.NumberBbsEntries = (UINT32)BbsIndex; return EFI_SUCCESS; } - /** Shadow all the PCI legacy ROMs. Use data from the Legacy BIOS Protocol to chose the order. Skip any devices that have already have legacy @@ -1561,22 +1575,22 @@ UpdateBevBcvTable ( **/ EFI_STATUS PciShadowRoms ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; - UINTN Index; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - EFI_HANDLE VgaHandle; - EFI_HANDLE FirstHandle; - VOID **RomStart; - UINTN Flags; - PCI_TYPE00 PciConfigHeader; - UINT16 *Command; - UINT64 Supports; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; + UINTN Index; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + EFI_HANDLE VgaHandle; + EFI_HANDLE FirstHandle; + VOID **RomStart; + UINTN Flags; + PCI_TYPE00 PciConfigHeader; + UINT16 *Command; + UINT64 Supports; // // Make the VGA device first @@ -1606,6 +1620,7 @@ PciShadowRoms ( if (EFI_ERROR (Status)) { return Status; } + // // Place the VGA handle as first. // @@ -1617,27 +1632,28 @@ PciShadowRoms ( break; } } + // // Allocate memory to save Command WORD from each device. We do this // to restore devices to same state as EFI after switching to legacy. // - Command = (UINT16 *) AllocatePool ( - sizeof (UINT16) * (HandleCount + 1) - ); + Command = (UINT16 *)AllocatePool ( + sizeof (UINT16) * (HandleCount + 1) + ); if (NULL == Command) { FreePool (HandleBuffer); return EFI_OUT_OF_RESOURCES; } + // // Disconnect all EFI devices first. This covers cases where alegacy BIOS // may control multiple PCI devices. // for (Index = 0; Index < HandleCount; Index++) { - Status = gBS->HandleProtocol ( HandleBuffer[Index], &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); ASSERT_EFI_ERROR (Status); @@ -1659,6 +1675,7 @@ PciShadowRoms ( if (!EFI_ERROR (Status)) { continue; } + // // Stop EFI Drivers with oprom. // @@ -1668,15 +1685,15 @@ PciShadowRoms ( NULL ); } + // // For every device that has not had a legacy ROM started. Start a legacy ROM. // for (Index = 0; Index < HandleCount; Index++) { - Status = gBS->HandleProtocol ( HandleBuffer[Index], &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); ASSERT_EFI_ERROR (Status); @@ -1698,9 +1715,10 @@ PciShadowRoms ( // one will work in legacy mode (OPROM will be given control) and // other Video devices will work in native mode (OS driver will handle these devices). // - if (IS_PCI_DISPLAY (&Pci) && Index != 0) { + if (IS_PCI_DISPLAY (&Pci) && (Index != 0)) { continue; } + // // Skip any device that already has a legacy ROM run // @@ -1712,7 +1730,7 @@ PciShadowRoms ( // // If legacy VBIOS Oprom has not been dispatched before, install legacy VBIOS here. // - if (IS_PCI_DISPLAY (&Pci) && Index == 0) { + if (IS_PCI_DISPLAY (&Pci) && (Index == 0)) { Status = LegacyBiosInstallVgaRom (Private); // // A return status of EFI_NOT_FOUND is considered valid (No EFI @@ -1732,7 +1750,7 @@ PciShadowRoms ( &Flags, NULL, NULL, - (VOID **) &RomStart, + (VOID **)&RomStart, NULL ); if (EFI_ERROR (Status)) { @@ -1740,6 +1758,7 @@ PciShadowRoms ( continue; } } + // // Restore Command register so legacy has same devices enabled or disabled // as EFI. @@ -1766,13 +1785,14 @@ PciShadowRoms ( ); if (!EFI_ERROR (Status)) { Supports &= (UINT64)EFI_PCI_DEVICE_ENABLE; - Status = PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationEnable, - Supports, - NULL - ); + Status = PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationEnable, + Supports, + NULL + ); } + if (!EFI_ERROR (Status)) { Command[Index] = 0x1f; } @@ -1793,7 +1813,6 @@ PciShadowRoms ( return EFI_SUCCESS; } - /** Test to see if a legacy PCI ROM exists for this device. Optionally return the Legacy ROM instance for this PCI device. @@ -1812,11 +1831,11 @@ PciShadowRoms ( EFI_STATUS EFIAPI LegacyBiosCheckPciRom ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN EFI_HANDLE PciHandle, - OUT VOID **RomImage OPTIONAL, - OUT UINTN *RomSize OPTIONAL, - OUT UINTN *Flags + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN EFI_HANDLE PciHandle, + OUT VOID **RomImage OPTIONAL, + OUT UINTN *RomSize OPTIONAL, + OUT UINTN *Flags ) { return LegacyBiosCheckPciRomEx ( @@ -1829,7 +1848,6 @@ LegacyBiosCheckPciRom ( NULL, NULL ); - } /** @@ -1854,31 +1872,31 @@ LegacyBiosCheckPciRom ( **/ EFI_STATUS LegacyBiosCheckPciRomEx ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN EFI_HANDLE PciHandle, - OUT VOID **RomImage OPTIONAL, - OUT UINTN *RomSize OPTIONAL, - OUT UINTN *RuntimeImageLength OPTIONAL, - OUT UINTN *Flags OPTIONAL, - OUT UINT8 *OpromRevision OPTIONAL, - OUT VOID **ConfigUtilityCodeHeader OPTIONAL + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN EFI_HANDLE PciHandle, + OUT VOID **RomImage OPTIONAL, + OUT UINTN *RomSize OPTIONAL, + OUT UINTN *RuntimeImageLength OPTIONAL, + OUT UINTN *Flags OPTIONAL, + OUT UINT8 *OpromRevision OPTIONAL, + OUT VOID **ConfigUtilityCodeHeader OPTIONAL ) { - EFI_STATUS Status; - LEGACY_BIOS_INSTANCE *Private; - EFI_PCI_IO_PROTOCOL *PciIo; - UINTN LocalRomSize; - VOID *LocalRomImage; - PCI_TYPE00 PciConfigHeader; - VOID *LocalConfigUtilityCodeHeader; + EFI_STATUS Status; + LEGACY_BIOS_INSTANCE *Private; + EFI_PCI_IO_PROTOCOL *PciIo; + UINTN LocalRomSize; + VOID *LocalRomImage; + PCI_TYPE00 PciConfigHeader; + VOID *LocalConfigUtilityCodeHeader; LocalConfigUtilityCodeHeader = NULL; - *Flags = NO_ROM; - Status = gBS->HandleProtocol ( - PciHandle, - &gEfiPciIoProtocolGuid, - (VOID **) &PciIo - ); + *Flags = NO_ROM; + Status = gBS->HandleProtocol ( + PciHandle, + &gEfiPciIoProtocolGuid, + (VOID **)&PciIo + ); if (EFI_ERROR (Status)) { return EFI_UNSUPPORTED; } @@ -1891,10 +1909,11 @@ LegacyBiosCheckPciRomEx ( *Flags |= (UINTN)(ROM_FOUND | VALID_LEGACY_ROM); return EFI_SUCCESS; } + // // Check for PCI ROM Bar // - LocalRomSize = (UINTN) PciIo->RomSize; + LocalRomSize = (UINTN)PciIo->RomSize; LocalRomImage = PciIo->RomImage; if (LocalRomSize != 0) { *Flags |= ROM_FOUND; @@ -1912,16 +1931,16 @@ LegacyBiosCheckPciRomEx ( ); Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); - Status = GetPciLegacyRom ( - Private->Csm16PciInterfaceVersion, - PciConfigHeader.Hdr.VendorId, - PciConfigHeader.Hdr.DeviceId, - &LocalRomImage, - &LocalRomSize, - RuntimeImageLength, - OpromRevision, - &LocalConfigUtilityCodeHeader - ); + Status = GetPciLegacyRom ( + Private->Csm16PciInterfaceVersion, + PciConfigHeader.Hdr.VendorId, + PciConfigHeader.Hdr.DeviceId, + &LocalRomImage, + &LocalRomSize, + RuntimeImageLength, + OpromRevision, + &LocalConfigUtilityCodeHeader + ); if (EFI_ERROR (Status)) { return EFI_UNSUPPORTED; } @@ -1964,11 +1983,11 @@ EnablePs2Keyboard ( VOID ) { - EFI_STATUS Status; - EFI_HANDLE *HandleBuffer; - UINTN HandleCount; - EFI_ISA_IO_PROTOCOL *IsaIo; - UINTN Index; + EFI_STATUS Status; + EFI_HANDLE *HandleBuffer; + UINTN HandleCount; + EFI_ISA_IO_PROTOCOL *IsaIo; + UINTN Index; // // Get SimpleTextIn and find PS2 controller @@ -1983,6 +2002,7 @@ EnablePs2Keyboard ( if (EFI_ERROR (Status)) { return EFI_NOT_FOUND; } + for (Index = 0; Index < HandleCount; Index++) { // // Open the IO Abstraction(s) needed to perform the supported test @@ -1990,7 +2010,7 @@ EnablePs2Keyboard ( Status = gBS->OpenProtocol ( HandleBuffer[Index], &gEfiIsaIoProtocolGuid, - (VOID **) &IsaIo, + (VOID **)&IsaIo, NULL, HandleBuffer[Index], EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL @@ -2001,7 +2021,7 @@ EnablePs2Keyboard ( // Use the ISA I/O Protocol to see if Controller is the Keyboard // controller // - if (IsaIo->ResourceList->Device.HID != EISA_PNP_ID (0x303) || IsaIo->ResourceList->Device.UID != 0) { + if ((IsaIo->ResourceList->Device.HID != EISA_PNP_ID (0x303)) || (IsaIo->ResourceList->Device.UID != 0)) { Status = EFI_UNSUPPORTED; } @@ -2017,11 +2037,11 @@ EnablePs2Keyboard ( gBS->ConnectController (HandleBuffer[Index], NULL, NULL, FALSE); } } + FreePool (HandleBuffer); return EFI_SUCCESS; } - /** Load a legacy PC-AT OpROM for VGA controller. @@ -2035,7 +2055,7 @@ EnablePs2Keyboard ( **/ EFI_STATUS LegacyBiosInstallVgaRom ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ) { EFI_STATUS Status; @@ -2103,7 +2123,7 @@ LegacyBiosInstallVgaRom ( Status = gBS->HandleProtocol ( OpenInfoBuffer[Index].AgentHandle, &gEfiLegacyBiosGuid, - (VOID **) &Interface + (VOID **)&Interface ); if (!EFI_ERROR (Status)) { // @@ -2132,19 +2152,20 @@ LegacyBiosInstallVgaRom ( return Status; } } + // // Find all the Thunk Driver // HandleBuffer = NULL; - Status = gBS->LocateHandleBuffer ( - ByProtocol, - &gEfiLegacyBiosGuid, - NULL, - &HandleCount, - &HandleBuffer - ); + Status = gBS->LocateHandleBuffer ( + ByProtocol, + &gEfiLegacyBiosGuid, + NULL, + &HandleCount, + &HandleBuffer + ); ASSERT_EFI_ERROR (Status); - ConnectHandleBuffer = (EFI_HANDLE *) AllocatePool (sizeof (EFI_HANDLE) * (HandleCount + 1)); + ConnectHandleBuffer = (EFI_HANDLE *)AllocatePool (sizeof (EFI_HANDLE) * (HandleCount + 1)); ASSERT (ConnectHandleBuffer != NULL); CopyMem ( @@ -2162,7 +2183,7 @@ LegacyBiosInstallVgaRom ( Status = gBS->HandleProtocol ( VgaHandle, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); ASSERT_EFI_ERROR (Status); PciIo->Pci.Read ( @@ -2208,7 +2229,6 @@ LegacyBiosInstallVgaRom ( FreePool (ConnectHandleBuffer); if (EFI_ERROR (Status)) { - Private->VgaInstalled = FALSE; // @@ -2221,7 +2241,6 @@ LegacyBiosInstallVgaRom ( return EFI_SUCCESS; } - /** Load a legacy PC-AT OpROM. @@ -2249,41 +2268,41 @@ LegacyBiosInstallVgaRom ( EFI_STATUS EFIAPI LegacyBiosInstallRom ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN LEGACY_BIOS_INSTANCE *Private, - IN EFI_HANDLE PciHandle, - IN UINT8 OpromRevision, - IN VOID *RomImage, - IN UINTN ImageSize, - IN OUT UINTN *RuntimeImageLength, - OUT UINT8 *DiskStart OPTIONAL, - OUT UINT8 *DiskEnd OPTIONAL, - OUT VOID **RomShadowAddress OPTIONAL + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN LEGACY_BIOS_INSTANCE *Private, + IN EFI_HANDLE PciHandle, + IN UINT8 OpromRevision, + IN VOID *RomImage, + IN UINTN ImageSize, + IN OUT UINTN *RuntimeImageLength, + OUT UINT8 *DiskStart OPTIONAL, + OUT UINT8 *DiskEnd OPTIONAL, + OUT VOID **RomShadowAddress OPTIONAL ) { - EFI_STATUS Status; - EFI_STATUS PciEnableStatus; - EFI_PCI_IO_PROTOCOL *PciIo; - UINT8 LocalDiskStart; - UINT8 LocalDiskEnd; - UINTN Segment; - UINTN Bus; - UINTN Device; - UINTN Function; - EFI_IA32_REGISTER_SET Regs; - UINT8 VideoMode; - UINT8 OldVideoMode; - EFI_TIME BootTime; - UINT32 *BdaPtr; - UINT32 LocalTime; - UINT32 StartBbsIndex; - UINT32 EndBbsIndex; - UINT32 MaxRomAddr; - UINTN TempData; - UINTN InitAddress; - UINTN RuntimeAddress; - EFI_PHYSICAL_ADDRESS PhysicalAddress; - UINT32 Granularity; + EFI_STATUS Status; + EFI_STATUS PciEnableStatus; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT8 LocalDiskStart; + UINT8 LocalDiskEnd; + UINTN Segment; + UINTN Bus; + UINTN Device; + UINTN Function; + EFI_IA32_REGISTER_SET Regs; + UINT8 VideoMode; + UINT8 OldVideoMode; + EFI_TIME BootTime; + UINT32 *BdaPtr; + UINT32 LocalTime; + UINT32 StartBbsIndex; + UINT32 EndBbsIndex; + UINT32 MaxRomAddr; + UINTN TempData; + UINTN InitAddress; + UINTN RuntimeAddress; + EFI_PHYSICAL_ADDRESS PhysicalAddress; + UINT32 Granularity; PciIo = NULL; LocalDiskStart = 0; @@ -2297,14 +2316,14 @@ LegacyBiosInstallRom ( PhysicalAddress = 0; MaxRomAddr = PcdGet32 (PcdEndOpromShadowAddress); - if ((Private->Legacy16Table->TableLength >= OFFSET_OF(EFI_COMPATIBILITY16_TABLE, HiPermanentMemoryAddress)) && + if ((Private->Legacy16Table->TableLength >= OFFSET_OF (EFI_COMPATIBILITY16_TABLE, HiPermanentMemoryAddress)) && (Private->Legacy16Table->UmaAddress != 0) && (Private->Legacy16Table->UmaSize != 0) && - (MaxRomAddr > (Private->Legacy16Table->UmaAddress))) { + (MaxRomAddr > (Private->Legacy16Table->UmaAddress))) + { MaxRomAddr = Private->Legacy16Table->UmaAddress; } - PciProgramAllInterruptLineRegisters (Private); if ((OpromRevision >= 3) && (Private->Csm16PciInterfaceVersion >= 0x0300)) { @@ -2313,12 +2332,12 @@ LegacyBiosInstallRom ( // first test if there is enough space for its INIT code // PhysicalAddress = CONVENTIONAL_MEMORY_TOP; - Status = gBS->AllocatePages ( - AllocateMaxAddress, - EfiBootServicesCode, - EFI_SIZE_TO_PAGES (ImageSize), - &PhysicalAddress - ); + Status = gBS->AllocatePages ( + AllocateMaxAddress, + EfiBootServicesCode, + EFI_SIZE_TO_PAGES (ImageSize), + &PhysicalAddress + ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "return LegacyBiosInstallRom(%d): EFI_OUT_OF_RESOURCES (no more space for OpROM)\n", DEBUG_LINE_NUMBER)); @@ -2331,7 +2350,8 @@ LegacyBiosInstallRom ( ); return EFI_OUT_OF_RESOURCES; } - InitAddress = (UINTN) PhysicalAddress; + + InitAddress = (UINTN)PhysicalAddress; // // then test if there is enough space for its RT code // @@ -2353,7 +2373,7 @@ LegacyBiosInstallRom ( // CSM16 2.x meets PCI 2.x/3.0 OpROM // test if there is enough space for its INIT code // - InitAddress = PCI_START_ADDRESS (Private->OptionRom); + InitAddress = PCI_START_ADDRESS (Private->OptionRom); if (InitAddress + ImageSize > MaxRomAddr) { DEBUG ((DEBUG_ERROR, "return LegacyBiosInstallRom(%d): EFI_OUT_OF_RESOURCES (no more space for OpROM)\n", DEBUG_LINE_NUMBER)); // @@ -2378,14 +2398,14 @@ LegacyBiosInstallRom ( Private->LegacyRegion->UnLock ( Private->LegacyRegion, - (UINT32) RuntimeAddress, - (UINT32) ImageSize, + (UINT32)RuntimeAddress, + (UINT32)ImageSize, &Granularity ); DEBUG ((DEBUG_INFO, " Shadowing OpROM init/runtime/isize = %x/%x/%x\n", InitAddress, RuntimeAddress, ImageSize)); - CopyMem ((VOID *) InitAddress, RomImage, ImageSize); + CopyMem ((VOID *)InitAddress, RomImage, ImageSize); // // Read the highest disk number "installed: and assume a new disk will @@ -2397,32 +2417,32 @@ LegacyBiosInstallRom ( // 3. Onboard IDE controllers will change 40:75 // ACCESS_PAGE0_CODE ( - LocalDiskStart = (UINT8) ((*(UINT8 *) ((UINTN) 0x475)) + 0x80); + LocalDiskStart = (UINT8)((*(UINT8 *)((UINTN)0x475)) + 0x80); if ((Private->Disk4075 + 0x80) < LocalDiskStart) { - // - // Update table since onboard IDE drives found - // - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciSegment = 0xff; - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciBus = 0xff; - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciDevice = 0xff; - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciFunction = 0xff; - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].StartDriveNumber = (UINT8) (Private->Disk4075 + 0x80); - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].EndDriveNumber = LocalDiskStart; - Private->LegacyEfiHddTableIndex ++; - Private->Disk4075 = (UINT8) (LocalDiskStart & 0x7f); - Private->DiskEnd = LocalDiskStart; - } + // + // Update table since onboard IDE drives found + // + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciSegment = 0xff; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciBus = 0xff; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciDevice = 0xff; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciFunction = 0xff; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].StartDriveNumber = (UINT8)(Private->Disk4075 + 0x80); + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].EndDriveNumber = LocalDiskStart; + Private->LegacyEfiHddTableIndex++; + Private->Disk4075 = (UINT8)(LocalDiskStart & 0x7f); + Private->DiskEnd = LocalDiskStart; + } if (PciHandle != mVgaHandle) { + EnablePs2Keyboard (); - EnablePs2Keyboard (); + // + // Store current mode settings since PrepareToScanRom may change mode. + // + VideoMode = *(UINT8 *)((UINTN)(0x400 + BDA_VIDEO_MODE)); + } - // - // Store current mode settings since PrepareToScanRom may change mode. - // - VideoMode = *(UINT8 *) ((UINTN) (0x400 + BDA_VIDEO_MODE)); - } - ); + ); // // Notify the platform that we are about to scan the ROM @@ -2466,9 +2486,9 @@ LegacyBiosInstallRom ( // ACCESS_PAGE0_CODE ( LocalTime = (LocalTime * 182) / 10; - BdaPtr = (UINT32 *) ((UINTN) 0x46C); + BdaPtr = (UINT32 *)((UINTN)0x46C); *BdaPtr = LocalTime; - ); + ); // // Pass in handoff data @@ -2476,11 +2496,10 @@ LegacyBiosInstallRom ( PciEnableStatus = EFI_UNSUPPORTED; ZeroMem (&Regs, sizeof (Regs)); if (PciHandle != NULL) { - Status = gBS->HandleProtocol ( PciHandle, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); ASSERT_EFI_ERROR (Status); @@ -2504,23 +2523,23 @@ LegacyBiosInstallRom ( DEBUG ((DEBUG_INFO, "Shadowing OpROM on the PCI device %x/%x/%x\n", Bus, Device, Function)); } - mIgnoreBbsUpdateFlag = FALSE; - Regs.X.AX = Legacy16DispatchOprom; + mIgnoreBbsUpdateFlag = FALSE; + Regs.X.AX = Legacy16DispatchOprom; // // Generate DispatchOpRomTable data // Private->IntThunk->DispatchOpromTable.PnPInstallationCheckSegment = Private->Legacy16Table->PnPInstallationCheckSegment; Private->IntThunk->DispatchOpromTable.PnPInstallationCheckOffset = Private->Legacy16Table->PnPInstallationCheckOffset; - Private->IntThunk->DispatchOpromTable.OpromSegment = (UINT16) (InitAddress >> 4); - Private->IntThunk->DispatchOpromTable.PciBus = (UINT8) Bus; - Private->IntThunk->DispatchOpromTable.PciDeviceFunction = (UINT8) ((Device << 3) | Function); - Private->IntThunk->DispatchOpromTable.NumberBbsEntries = (UINT8) Private->IntThunk->EfiToLegacy16BootTable.NumberBbsEntries; - Private->IntThunk->DispatchOpromTable.BbsTablePointer = (UINT32) (UINTN) Private->BbsTablePtr; + Private->IntThunk->DispatchOpromTable.OpromSegment = (UINT16)(InitAddress >> 4); + Private->IntThunk->DispatchOpromTable.PciBus = (UINT8)Bus; + Private->IntThunk->DispatchOpromTable.PciDeviceFunction = (UINT8)((Device << 3) | Function); + Private->IntThunk->DispatchOpromTable.NumberBbsEntries = (UINT8)Private->IntThunk->EfiToLegacy16BootTable.NumberBbsEntries; + Private->IntThunk->DispatchOpromTable.BbsTablePointer = (UINT32)(UINTN)Private->BbsTablePtr; Private->IntThunk->DispatchOpromTable.RuntimeSegment = (UINT16)((OpromRevision < 3) ? 0xffff : (RuntimeAddress >> 4)); - TempData = (UINTN) &Private->IntThunk->DispatchOpromTable; - Regs.X.ES = EFI_SEGMENT ((UINT32) TempData); - Regs.X.BX = EFI_OFFSET ((UINT32) TempData); + TempData = (UINTN)&Private->IntThunk->DispatchOpromTable; + Regs.X.ES = EFI_SEGMENT ((UINT32)TempData); + Regs.X.BX = EFI_OFFSET ((UINT32)TempData); // // Skip dispatching ROM for those PCI devices that can not be enabled by PciIo->Attributes // Otherwise, it may cause the system to hang in some cases @@ -2528,35 +2547,37 @@ LegacyBiosInstallRom ( if (!EFI_ERROR (PciEnableStatus)) { DEBUG ((DEBUG_INFO, " Legacy16DispatchOprom - %02x/%02x/%02x\n", Bus, Device, Function)); Private->LegacyBios.FarCall86 ( - &Private->LegacyBios, - Private->Legacy16CallSegment, - Private->Legacy16CallOffset, - &Regs, - NULL, - 0 - ); + &Private->LegacyBios, + Private->Legacy16CallSegment, + Private->Legacy16CallOffset, + &Regs, + NULL, + 0 + ); } else { Regs.X.BX = 0; } - if (Private->IntThunk->DispatchOpromTable.NumberBbsEntries != (UINT8) Private->IntThunk->EfiToLegacy16BootTable.NumberBbsEntries) { - Private->IntThunk->EfiToLegacy16BootTable.NumberBbsEntries = (UINT8) Private->IntThunk->DispatchOpromTable.NumberBbsEntries; - mIgnoreBbsUpdateFlag = TRUE; + if (Private->IntThunk->DispatchOpromTable.NumberBbsEntries != (UINT8)Private->IntThunk->EfiToLegacy16BootTable.NumberBbsEntries) { + Private->IntThunk->EfiToLegacy16BootTable.NumberBbsEntries = (UINT8)Private->IntThunk->DispatchOpromTable.NumberBbsEntries; + mIgnoreBbsUpdateFlag = TRUE; } + // // Check if non-BBS compliant drives found // if (Regs.X.BX != 0) { - LocalDiskEnd = (UINT8) (LocalDiskStart + Regs.H.BL); - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciSegment = (UINT8) Segment; - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciBus = (UINT8) Bus; - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciDevice = (UINT8) Device; - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciFunction = (UINT8) Function; - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].StartDriveNumber = Private->DiskEnd; - Private->DiskEnd = LocalDiskEnd; - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].EndDriveNumber = Private->DiskEnd; - Private->LegacyEfiHddTableIndex += 1; + LocalDiskEnd = (UINT8)(LocalDiskStart + Regs.H.BL); + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciSegment = (UINT8)Segment; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciBus = (UINT8)Bus; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciDevice = (UINT8)Device; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciFunction = (UINT8)Function; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].StartDriveNumber = Private->DiskEnd; + Private->DiskEnd = LocalDiskEnd; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].EndDriveNumber = Private->DiskEnd; + Private->LegacyEfiHddTableIndex += 1; } + // // Skip video mode set, if installing VGA // @@ -2564,9 +2585,11 @@ LegacyBiosInstallRom ( // // Set mode settings since PrepareToScanRom may change mode // - ACCESS_PAGE0_CODE ({ - OldVideoMode = *(UINT8 *) ((UINTN) (0x400 + BDA_VIDEO_MODE)); - }); + ACCESS_PAGE0_CODE ( + { + OldVideoMode = *(UINT8 *)((UINTN)(0x400 + BDA_VIDEO_MODE)); + } + ); if (VideoMode != OldVideoMode) { // @@ -2577,6 +2600,7 @@ LegacyBiosInstallRom ( Private->LegacyBios.Int86 (&Private->LegacyBios, 0x10, &Regs); } } + // // Regs.X.AX from the adapter initializion is ignored since some adapters // do not follow the standard of setting AX = 0 on success. @@ -2584,14 +2608,14 @@ LegacyBiosInstallRom ( // // The ROM could have updated its size so we need to read again. // - if (((EFI_LEGACY_EXPANSION_ROM_HEADER *) RuntimeAddress)->Signature != PCI_EXPANSION_ROM_HEADER_SIGNATURE) { + if (((EFI_LEGACY_EXPANSION_ROM_HEADER *)RuntimeAddress)->Signature != PCI_EXPANSION_ROM_HEADER_SIGNATURE) { // // Now we check the signature (0xaa55) to judge whether the run-time code is truly generated by INIT function. // If signature is not valid, that means the INIT function didn't copy the run-time code to RuntimeAddress. // *RuntimeImageLength = 0; } else { - *RuntimeImageLength = ((EFI_LEGACY_EXPANSION_ROM_HEADER *) RuntimeAddress)->Size512 * 512; + *RuntimeImageLength = ((EFI_LEGACY_EXPANSION_ROM_HEADER *)RuntimeAddress)->Size512 * 512; } DEBUG ((DEBUG_INFO, " fsize = %x\n", *RuntimeImageLength)); @@ -2604,13 +2628,13 @@ LegacyBiosInstallRom ( // // Make area from end of shadowed rom to end of original rom all ffs // - gBS->SetMem ((VOID *) (InitAddress + *RuntimeImageLength), ImageSize - *RuntimeImageLength, 0xff); + gBS->SetMem ((VOID *)(InitAddress + *RuntimeImageLength), ImageSize - *RuntimeImageLength, 0xff); } } ACCESS_PAGE0_CODE ( - LocalDiskEnd = (UINT8) ((*(UINT8 *) ((UINTN) 0x475)) + 0x80); - ); + LocalDiskEnd = (UINT8)((*(UINT8 *)((UINTN)0x475)) + 0x80); + ); // // Allow platform to perform any required actions after the @@ -2634,29 +2658,30 @@ LegacyBiosInstallRom ( TempData = RuntimeAddress; UpdateBevBcvTable ( Private, - (EFI_LEGACY_EXPANSION_ROM_HEADER *) TempData, + (EFI_LEGACY_EXPANSION_ROM_HEADER *)TempData, PciIo ); - EndBbsIndex = Private->IntThunk->EfiToLegacy16BootTable.NumberBbsEntries; - LocalDiskEnd = (UINT8) (LocalDiskStart + (UINT8) (EndBbsIndex - StartBbsIndex)); + EndBbsIndex = Private->IntThunk->EfiToLegacy16BootTable.NumberBbsEntries; + LocalDiskEnd = (UINT8)(LocalDiskStart + (UINT8)(EndBbsIndex - StartBbsIndex)); if (LocalDiskEnd != LocalDiskStart) { - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciSegment = (UINT8) Segment; - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciBus = (UINT8) Bus; - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciDevice = (UINT8) Device; - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciFunction = (UINT8) Function; - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].StartDriveNumber = Private->DiskEnd; - Private->DiskEnd = LocalDiskEnd; - Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].EndDriveNumber = Private->DiskEnd; - Private->LegacyEfiHddTableIndex += 1; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciSegment = (UINT8)Segment; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciBus = (UINT8)Bus; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciDevice = (UINT8)Device; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].PciFunction = (UINT8)Function; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].StartDriveNumber = Private->DiskEnd; + Private->DiskEnd = LocalDiskEnd; + Private->LegacyEfiHddTable[Private->LegacyEfiHddTableIndex].EndDriveNumber = Private->DiskEnd; + Private->LegacyEfiHddTableIndex += 1; } } + // // Mark PCI device as having a legacy BIOS ROM loaded. // RomShadow ( PciHandle, - (UINT32) RuntimeAddress, - (UINT32) *RuntimeImageLength, + (UINT32)RuntimeAddress, + (UINT32)*RuntimeImageLength, LocalDiskStart, LocalDiskEnd ); @@ -2666,7 +2691,7 @@ LegacyBiosInstallRom ( // Stuff caller's OPTIONAL return parameters. // if (RomShadowAddress != NULL) { - *RomShadowAddress = (VOID *) RuntimeAddress; + *RomShadowAddress = (VOID *)RuntimeAddress; } if (DiskStart != NULL) { @@ -2677,7 +2702,7 @@ LegacyBiosInstallRom ( *DiskEnd = LocalDiskEnd; } - Private->OptionRom = (UINT32) (RuntimeAddress + *RuntimeImageLength); + Private->OptionRom = (UINT32)(RuntimeAddress + *RuntimeImageLength); Status = EFI_SUCCESS; @@ -2713,14 +2738,14 @@ Done: **/ EFI_STATUS IoMmuGrantAccess ( - IN EFI_HANDLE PciHandle, - IN EFI_PHYSICAL_ADDRESS HostAddress, - IN UINTN NumberOfBytes + IN EFI_HANDLE PciHandle, + IN EFI_PHYSICAL_ADDRESS HostAddress, + IN UINTN NumberOfBytes ) { - EFI_PHYSICAL_ADDRESS DeviceAddress; - VOID *Mapping; - EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS DeviceAddress; + VOID *Mapping; + EFI_STATUS Status; if (PciHandle == NULL) { return EFI_UNSUPPORTED; @@ -2730,6 +2755,7 @@ IoMmuGrantAccess ( if (mIoMmu == NULL) { gBS->LocateProtocol (&gEdkiiIoMmuProtocolGuid, NULL, (VOID **)&mIoMmu); } + if (mIoMmu != NULL) { Status = mIoMmu->Map ( mIoMmu, @@ -2739,7 +2765,7 @@ IoMmuGrantAccess ( &DeviceAddress, &Mapping ); - if (EFI_ERROR(Status)) { + if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "LegacyPci - IoMmuMap - %r\n", Status)); } else { ASSERT (DeviceAddress == HostAddress); @@ -2749,11 +2775,12 @@ IoMmuGrantAccess ( Mapping, EDKII_IOMMU_ACCESS_READ | EDKII_IOMMU_ACCESS_WRITE ); - if (EFI_ERROR(Status)) { + if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "LegacyPci - IoMmuSetAttribute - %r\n", Status)); } } } + return Status; } @@ -2787,34 +2814,34 @@ IoMmuGrantAccess ( EFI_STATUS EFIAPI LegacyBiosInstallPciRom ( - IN EFI_LEGACY_BIOS_PROTOCOL * This, - IN EFI_HANDLE PciHandle, - IN VOID **RomImage, - OUT UINTN *Flags, - OUT UINT8 *DiskStart OPTIONAL, - OUT UINT8 *DiskEnd OPTIONAL, - OUT VOID **RomShadowAddress OPTIONAL, - OUT UINT32 *RomShadowedSize OPTIONAL + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN EFI_HANDLE PciHandle, + IN VOID **RomImage, + OUT UINTN *Flags, + OUT UINT8 *DiskStart OPTIONAL, + OUT UINT8 *DiskEnd OPTIONAL, + OUT VOID **RomShadowAddress OPTIONAL, + OUT UINT32 *RomShadowedSize OPTIONAL ) { - EFI_STATUS Status; - LEGACY_BIOS_INSTANCE *Private; - VOID *LocalRomImage; - UINTN ImageSize; - UINTN RuntimeImageLength; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE01 PciConfigHeader; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN PciSegment; - UINTN PciBus; - UINTN PciDevice; - UINTN PciFunction; - UINTN LastBus; - UINTN Index; - UINT8 OpromRevision; - UINT32 Granularity; - PCI_3_0_DATA_STRUCTURE *Pcir; + EFI_STATUS Status; + LEGACY_BIOS_INSTANCE *Private; + VOID *LocalRomImage; + UINTN ImageSize; + UINTN RuntimeImageLength; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE01 PciConfigHeader; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + UINTN PciSegment; + UINTN PciBus; + UINTN PciDevice; + UINTN PciFunction; + UINTN LastBus; + UINTN Index; + UINT8 OpromRevision; + UINT32 Granularity; + PCI_3_0_DATA_STRUCTURE *Pcir; OpromRevision = 0; @@ -2836,7 +2863,7 @@ LegacyBiosInstallPciRom ( Status = gBS->HandleProtocol ( HandleBuffer[Index], &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); if (EFI_ERROR (Status)) { continue; @@ -2860,7 +2887,7 @@ LegacyBiosInstallPciRom ( 0x20000, &Granularity ); - Private->Legacy16Table->LastPciBus = (UINT8) LastBus; + Private->Legacy16Table->LastPciBus = (UINT8)LastBus; Private->LegacyRegion->Lock ( Private->LegacyRegion, 0xE0000, @@ -2878,7 +2905,7 @@ LegacyBiosInstallPciRom ( Status = gBS->HandleProtocol ( PciHandle, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo + (VOID **)&PciIo ); if (!EFI_ERROR (Status)) { @@ -2894,16 +2921,17 @@ LegacyBiosInstallPciRom ( // if video installed & OPROM is video return // if ( - ( - ((PciConfigHeader.Hdr.ClassCode[2] == PCI_CLASS_OLD) && - (PciConfigHeader.Hdr.ClassCode[1] == PCI_CLASS_OLD_VGA)) - || - ((PciConfigHeader.Hdr.ClassCode[2] == PCI_CLASS_DISPLAY) && - (PciConfigHeader.Hdr.ClassCode[1] == PCI_CLASS_DISPLAY_VGA)) - ) - && - (!Private->VgaInstalled) - ) { + ( + ((PciConfigHeader.Hdr.ClassCode[2] == PCI_CLASS_OLD) && + (PciConfigHeader.Hdr.ClassCode[1] == PCI_CLASS_OLD_VGA)) + || + ((PciConfigHeader.Hdr.ClassCode[2] == PCI_CLASS_DISPLAY) && + (PciConfigHeader.Hdr.ClassCode[1] == PCI_CLASS_DISPLAY_VGA)) + ) + && + (!Private->VgaInstalled) + ) + { mVgaInstallationInProgress = TRUE; // @@ -2911,6 +2939,7 @@ LegacyBiosInstallPciRom ( // } } + // // To run any legacy image, the VGA needs to be installed first. // if installing the video, then don't need the thunk as already installed. @@ -2931,8 +2960,8 @@ LegacyBiosInstallPciRom ( // A return status of EFI_NOT_FOUND is considered valid (No EFI // driver is controlling video. // - mVgaInstallationInProgress = TRUE; - Status = LegacyBiosInstallVgaRom (Private); + mVgaInstallationInProgress = TRUE; + Status = LegacyBiosInstallVgaRom (Private); if (EFI_ERROR (Status)) { if (Status != EFI_NOT_FOUND) { mVgaInstallationInProgress = FALSE; @@ -2943,6 +2972,7 @@ LegacyBiosInstallPciRom ( } } } + // // See if the option ROM for PciHandle has already been executed // @@ -2955,7 +2985,7 @@ LegacyBiosInstallPciRom ( DiskStart, DiskEnd, RomShadowAddress, - (UINTN *) RomShadowedSize + (UINTN *)RomShadowedSize ); return EFI_SUCCESS; } @@ -2999,8 +3029,8 @@ LegacyBiosInstallPciRom ( // A return status of EFI_NOT_FOUND is considered valid (No EFI // driver is controlling video. // - mVgaInstallationInProgress = TRUE; - Status = LegacyBiosInstallVgaRom (Private); + mVgaInstallationInProgress = TRUE; + Status = LegacyBiosInstallVgaRom (Private); if (EFI_ERROR (Status)) { if (Status != EFI_NOT_FOUND) { mVgaInstallationInProgress = FALSE; @@ -3012,15 +3042,16 @@ LegacyBiosInstallPciRom ( } LocalRomImage = *RomImage; - if (((PCI_EXPANSION_ROM_HEADER *) LocalRomImage)->Signature != PCI_EXPANSION_ROM_HEADER_SIGNATURE || - ((PCI_EXPANSION_ROM_HEADER *) LocalRomImage)->PcirOffset == 0 || - (((PCI_EXPANSION_ROM_HEADER *) LocalRomImage)->PcirOffset & 3 ) != 0) { + if ((((PCI_EXPANSION_ROM_HEADER *)LocalRomImage)->Signature != PCI_EXPANSION_ROM_HEADER_SIGNATURE) || + (((PCI_EXPANSION_ROM_HEADER *)LocalRomImage)->PcirOffset == 0) || + ((((PCI_EXPANSION_ROM_HEADER *)LocalRomImage)->PcirOffset & 3) != 0)) + { mVgaInstallationInProgress = FALSE; return EFI_UNSUPPORTED; } Pcir = (PCI_3_0_DATA_STRUCTURE *) - ((UINT8 *) LocalRomImage + ((PCI_EXPANSION_ROM_HEADER *) LocalRomImage)->PcirOffset); + ((UINT8 *)LocalRomImage + ((PCI_EXPANSION_ROM_HEADER *)LocalRomImage)->PcirOffset); if ((Pcir->Signature != PCI_DATA_STRUCTURE_SIGNATURE) || (Pcir->CodeType != PCI_CODE_TYPE_PCAT_IMAGE)) { mVgaInstallationInProgress = FALSE; @@ -3033,6 +3064,7 @@ LegacyBiosInstallPciRom ( } else { OpromRevision = 0; } + if (Pcir->Revision < 3) { RuntimeImageLength = 0; } else { @@ -3059,22 +3091,22 @@ LegacyBiosInstallPciRom ( // ASSERT (Private->TraceIndex < 0x200); Private->Trace[Private->TraceIndex] = LEGACY_PCI_TRACE_000; - Private->TraceIndex ++; - Private->TraceIndex = (UINT16) (Private->TraceIndex % 0x200); - Status = LegacyBiosInstallRom ( - This, - Private, - PciHandle, - OpromRevision, - LocalRomImage, - ImageSize, - &RuntimeImageLength, - DiskStart, - DiskEnd, - RomShadowAddress - ); + Private->TraceIndex++; + Private->TraceIndex = (UINT16)(Private->TraceIndex % 0x200); + Status = LegacyBiosInstallRom ( + This, + Private, + PciHandle, + OpromRevision, + LocalRomImage, + ImageSize, + &RuntimeImageLength, + DiskStart, + DiskEnd, + RomShadowAddress + ); if (RomShadowedSize != NULL) { - *RomShadowedSize = (UINT32) RuntimeImageLength; + *RomShadowedSize = (UINT32)RuntimeImageLength; } mVgaInstallationInProgress = FALSE; diff --git a/OvmfPkg/Csm/LegacyBiosDxe/LegacySio.c b/OvmfPkg/Csm/LegacyBiosDxe/LegacySio.c index 6b9bb5ed8b..0cb48fa8ab 100644 --- a/OvmfPkg/Csm/LegacyBiosDxe/LegacySio.c +++ b/OvmfPkg/Csm/LegacyBiosDxe/LegacySio.c @@ -21,32 +21,32 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ EFI_STATUS LegacyBiosBuildSioDataFromSio ( - IN DEVICE_PRODUCER_DATA_HEADER *SioPtr + IN DEVICE_PRODUCER_DATA_HEADER *SioPtr ) { - EFI_STATUS Status; - DEVICE_PRODUCER_SERIAL *SioSerial; - DEVICE_PRODUCER_PARALLEL *SioParallel; - DEVICE_PRODUCER_FLOPPY *SioFloppy; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN Index; - UINTN ChildIndex; - EFI_SIO_PROTOCOL *Sio; - ACPI_RESOURCE_HEADER_PTR Resources; - EFI_ACPI_IO_PORT_DESCRIPTOR *IoResource; - EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR *FixedIoResource; - EFI_ACPI_DMA_DESCRIPTOR *DmaResource; - EFI_ACPI_IRQ_NOFLAG_DESCRIPTOR *IrqResource; - UINT16 Address; - UINT8 Dma; - UINT8 Irq; - UINTN EntryCount; - EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *OpenInfoBuffer; - EFI_BLOCK_IO_PROTOCOL *BlockIo; - EFI_SERIAL_IO_PROTOCOL *SerialIo; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - ACPI_HID_DEVICE_PATH *Acpi; + EFI_STATUS Status; + DEVICE_PRODUCER_SERIAL *SioSerial; + DEVICE_PRODUCER_PARALLEL *SioParallel; + DEVICE_PRODUCER_FLOPPY *SioFloppy; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + UINTN Index; + UINTN ChildIndex; + EFI_SIO_PROTOCOL *Sio; + ACPI_RESOURCE_HEADER_PTR Resources; + EFI_ACPI_IO_PORT_DESCRIPTOR *IoResource; + EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR *FixedIoResource; + EFI_ACPI_DMA_DESCRIPTOR *DmaResource; + EFI_ACPI_IRQ_NOFLAG_DESCRIPTOR *IrqResource; + UINT16 Address; + UINT8 Dma; + UINT8 Irq; + UINTN EntryCount; + EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *OpenInfoBuffer; + EFI_BLOCK_IO_PROTOCOL *BlockIo; + EFI_SERIAL_IO_PROTOCOL *SerialIo; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + ACPI_HID_DEVICE_PATH *Acpi; // // Get the list of ISA controllers in the system @@ -61,11 +61,12 @@ LegacyBiosBuildSioDataFromSio ( if (EFI_ERROR (Status)) { return EFI_NOT_FOUND; } + // // Collect legacy information from each of the ISA controllers in the system // for (Index = 0; Index < HandleCount; Index++) { - Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiSioProtocolGuid, (VOID **) &Sio); + Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiSioProtocolGuid, (VOID **)&Sio); if (EFI_ERROR (Status)) { continue; } @@ -73,46 +74,46 @@ LegacyBiosBuildSioDataFromSio ( Address = MAX_UINT16; Dma = MAX_UINT8; Irq = MAX_UINT8; - Status = Sio->GetResources (Sio, &Resources); + Status = Sio->GetResources (Sio, &Resources); if (!EFI_ERROR (Status)) { // // Get the base address information from ACPI resource descriptor. // while (Resources.SmallHeader->Byte != ACPI_END_TAG_DESCRIPTOR) { switch (Resources.SmallHeader->Byte) { - case ACPI_IO_PORT_DESCRIPTOR: - IoResource = (EFI_ACPI_IO_PORT_DESCRIPTOR *) Resources.SmallHeader; - Address = IoResource->BaseAddressMin; - break; - - case ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR: - FixedIoResource = (EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR *) Resources.SmallHeader; - Address = FixedIoResource->BaseAddress; - break; - - case ACPI_DMA_DESCRIPTOR: - DmaResource = (EFI_ACPI_DMA_DESCRIPTOR *) Resources.SmallHeader; - Dma = (UINT8) LowBitSet32 (DmaResource->ChannelMask); - break; - - case ACPI_IRQ_DESCRIPTOR: - case ACPI_IRQ_NOFLAG_DESCRIPTOR: - IrqResource = (EFI_ACPI_IRQ_NOFLAG_DESCRIPTOR *) Resources.SmallHeader; - Irq = (UINT8) LowBitSet32 (IrqResource->Mask); - break; - - default: - break; + case ACPI_IO_PORT_DESCRIPTOR: + IoResource = (EFI_ACPI_IO_PORT_DESCRIPTOR *)Resources.SmallHeader; + Address = IoResource->BaseAddressMin; + break; + + case ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR: + FixedIoResource = (EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR *)Resources.SmallHeader; + Address = FixedIoResource->BaseAddress; + break; + + case ACPI_DMA_DESCRIPTOR: + DmaResource = (EFI_ACPI_DMA_DESCRIPTOR *)Resources.SmallHeader; + Dma = (UINT8)LowBitSet32 (DmaResource->ChannelMask); + break; + + case ACPI_IRQ_DESCRIPTOR: + case ACPI_IRQ_NOFLAG_DESCRIPTOR: + IrqResource = (EFI_ACPI_IRQ_NOFLAG_DESCRIPTOR *)Resources.SmallHeader; + Irq = (UINT8)LowBitSet32 (IrqResource->Mask); + break; + + default: + break; } if (Resources.SmallHeader->Bits.Type == 0) { - Resources.SmallHeader = (ACPI_SMALL_RESOURCE_HEADER *) ((UINT8 *) Resources.SmallHeader - + Resources.SmallHeader->Bits.Length - + sizeof (*Resources.SmallHeader)); + Resources.SmallHeader = (ACPI_SMALL_RESOURCE_HEADER *)((UINT8 *)Resources.SmallHeader + + Resources.SmallHeader->Bits.Length + + sizeof (*Resources.SmallHeader)); } else { - Resources.LargeHeader = (ACPI_LARGE_RESOURCE_HEADER *) ((UINT8 *) Resources.LargeHeader - + Resources.LargeHeader->Length - + sizeof (*Resources.LargeHeader)); + Resources.LargeHeader = (ACPI_LARGE_RESOURCE_HEADER *)((UINT8 *)Resources.LargeHeader + + Resources.LargeHeader->Length + + sizeof (*Resources.LargeHeader)); } } } @@ -126,13 +127,14 @@ LegacyBiosBuildSioDataFromSio ( Acpi = NULL; while (!IsDevicePathEnd (DevicePath)) { - Acpi = (ACPI_HID_DEVICE_PATH *) DevicePath; + Acpi = (ACPI_HID_DEVICE_PATH *)DevicePath; DevicePath = NextDevicePathNode (DevicePath); } if ((Acpi == NULL) || (DevicePathType (Acpi) != ACPI_DEVICE_PATH) || ((DevicePathSubType (Acpi) != ACPI_DP) && (DevicePathSubType (Acpi) != ACPI_EXTENDED_DP)) - ) { + ) + { continue; } @@ -141,9 +143,8 @@ LegacyBiosBuildSioDataFromSio ( // // Ignore DMA resource since it is always returned NULL // - if (Acpi->HID == EISA_PNP_ID (0x500) || Acpi->HID == EISA_PNP_ID (0x501)) { - - if (Acpi->UID < 4 && Address != MAX_UINT16 && Irq != MAX_UINT8) { + if ((Acpi->HID == EISA_PNP_ID (0x500)) || (Acpi->HID == EISA_PNP_ID (0x501))) { + if ((Acpi->UID < 4) && (Address != MAX_UINT16) && (Irq != MAX_UINT8)) { // // Get the handle of the child device that has opened the Super I/O Protocol // @@ -156,14 +157,15 @@ LegacyBiosBuildSioDataFromSio ( if (EFI_ERROR (Status)) { continue; } + for (ChildIndex = 0; ChildIndex < EntryCount; ChildIndex++) { if ((OpenInfoBuffer[ChildIndex].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) { - Status = gBS->HandleProtocol (OpenInfoBuffer[ChildIndex].ControllerHandle, &gEfiSerialIoProtocolGuid, (VOID **) &SerialIo); + Status = gBS->HandleProtocol (OpenInfoBuffer[ChildIndex].ControllerHandle, &gEfiSerialIoProtocolGuid, (VOID **)&SerialIo); if (!EFI_ERROR (Status)) { - SioSerial = &SioPtr->Serial[Acpi->UID]; - SioSerial->Address = Address; - SioSerial->Irq = Irq; - SioSerial->Mode = DEVICE_SERIAL_MODE_NORMAL | DEVICE_SERIAL_MODE_DUPLEX_HALF; + SioSerial = &SioPtr->Serial[Acpi->UID]; + SioSerial->Address = Address; + SioSerial->Irq = Irq; + SioSerial->Mode = DEVICE_SERIAL_MODE_NORMAL | DEVICE_SERIAL_MODE_DUPLEX_HALF; break; } } @@ -172,36 +174,39 @@ LegacyBiosBuildSioDataFromSio ( FreePool (OpenInfoBuffer); } } + // // See if this is an ISA parallel port // // Ignore DMA resource since it is always returned NULL, port // only used in output mode. // - if (Acpi->HID == EISA_PNP_ID (0x400) || Acpi->HID == EISA_PNP_ID (0x401)) { - if (Acpi->UID < 3 && Address != MAX_UINT16 && Irq != MAX_UINT8 && Dma != MAX_UINT8) { - SioParallel = &SioPtr->Parallel[Acpi->UID]; - SioParallel->Address = Address; - SioParallel->Irq = Irq; - SioParallel->Dma = Dma; - SioParallel->Mode = DEVICE_PARALLEL_MODE_MODE_OUTPUT_ONLY; + if ((Acpi->HID == EISA_PNP_ID (0x400)) || (Acpi->HID == EISA_PNP_ID (0x401))) { + if ((Acpi->UID < 3) && (Address != MAX_UINT16) && (Irq != MAX_UINT8) && (Dma != MAX_UINT8)) { + SioParallel = &SioPtr->Parallel[Acpi->UID]; + SioParallel->Address = Address; + SioParallel->Irq = Irq; + SioParallel->Dma = Dma; + SioParallel->Mode = DEVICE_PARALLEL_MODE_MODE_OUTPUT_ONLY; } } + // // See if this is an ISA floppy controller // if (Acpi->HID == EISA_PNP_ID (0x604)) { - if (Address != MAX_UINT16 && Irq != MAX_UINT8 && Dma != MAX_UINT8) { - Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiBlockIoProtocolGuid, (VOID **) &BlockIo); + if ((Address != MAX_UINT16) && (Irq != MAX_UINT8) && (Dma != MAX_UINT8)) { + Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiBlockIoProtocolGuid, (VOID **)&BlockIo); if (!EFI_ERROR (Status)) { - SioFloppy = &SioPtr->Floppy; - SioFloppy->Address = Address; - SioFloppy->Irq = Irq; - SioFloppy->Dma = Dma; + SioFloppy = &SioPtr->Floppy; + SioFloppy->Address = Address; + SioFloppy->Irq = Irq; + SioFloppy->Dma = Dma; SioFloppy->NumberOfFloppy++; } } } + // // See if this is a mouse // Always set mouse found so USB hot plug will work @@ -225,7 +230,6 @@ LegacyBiosBuildSioDataFromSio ( FreePool (HandleBuffer); return EFI_SUCCESS; - } /** @@ -239,27 +243,27 @@ LegacyBiosBuildSioDataFromSio ( **/ EFI_STATUS LegacyBiosBuildSioDataFromIsaIo ( - IN DEVICE_PRODUCER_DATA_HEADER *SioPtr + IN DEVICE_PRODUCER_DATA_HEADER *SioPtr ) { - EFI_STATUS Status; - DEVICE_PRODUCER_SERIAL *SioSerial; - DEVICE_PRODUCER_PARALLEL *SioParallel; - DEVICE_PRODUCER_FLOPPY *SioFloppy; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN Index; - UINTN ResourceIndex; - UINTN ChildIndex; - EFI_ISA_IO_PROTOCOL *IsaIo; - EFI_ISA_ACPI_RESOURCE_LIST *ResourceList; - EFI_ISA_ACPI_RESOURCE *IoResource; - EFI_ISA_ACPI_RESOURCE *DmaResource; - EFI_ISA_ACPI_RESOURCE *InterruptResource; - UINTN EntryCount; - EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *OpenInfoBuffer; - EFI_BLOCK_IO_PROTOCOL *BlockIo; - EFI_SERIAL_IO_PROTOCOL *SerialIo; + EFI_STATUS Status; + DEVICE_PRODUCER_SERIAL *SioSerial; + DEVICE_PRODUCER_PARALLEL *SioParallel; + DEVICE_PRODUCER_FLOPPY *SioFloppy; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + UINTN Index; + UINTN ResourceIndex; + UINTN ChildIndex; + EFI_ISA_IO_PROTOCOL *IsaIo; + EFI_ISA_ACPI_RESOURCE_LIST *ResourceList; + EFI_ISA_ACPI_RESOURCE *IoResource; + EFI_ISA_ACPI_RESOURCE *DmaResource; + EFI_ISA_ACPI_RESOURCE *InterruptResource; + UINTN EntryCount; + EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *OpenInfoBuffer; + EFI_BLOCK_IO_PROTOCOL *BlockIo; + EFI_SERIAL_IO_PROTOCOL *SerialIo; // // Get the list of ISA controllers in the system @@ -274,12 +278,12 @@ LegacyBiosBuildSioDataFromIsaIo ( if (EFI_ERROR (Status)) { return EFI_NOT_FOUND; } + // // Collect legacy information from each of the ISA controllers in the system // for (Index = 0; Index < HandleCount; Index++) { - - Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiIsaIoProtocolGuid, (VOID **) &IsaIo); + Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiIsaIoProtocolGuid, (VOID **)&IsaIo); if (EFI_ERROR (Status)) { continue; } @@ -289,6 +293,7 @@ LegacyBiosBuildSioDataFromIsaIo ( if (ResourceList == NULL) { continue; } + // // Collect the resource types neededto fill in the SIO data structure // @@ -298,38 +303,40 @@ LegacyBiosBuildSioDataFromIsaIo ( for (ResourceIndex = 0; ResourceList->ResourceItem[ResourceIndex].Type != EfiIsaAcpiResourceEndOfList; ResourceIndex++ - ) { + ) + { switch (ResourceList->ResourceItem[ResourceIndex].Type) { - case EfiIsaAcpiResourceIo: - IoResource = &ResourceList->ResourceItem[ResourceIndex]; - break; + case EfiIsaAcpiResourceIo: + IoResource = &ResourceList->ResourceItem[ResourceIndex]; + break; - case EfiIsaAcpiResourceMemory: - break; + case EfiIsaAcpiResourceMemory: + break; - case EfiIsaAcpiResourceDma: - DmaResource = &ResourceList->ResourceItem[ResourceIndex]; - break; + case EfiIsaAcpiResourceDma: + DmaResource = &ResourceList->ResourceItem[ResourceIndex]; + break; - case EfiIsaAcpiResourceInterrupt: - InterruptResource = &ResourceList->ResourceItem[ResourceIndex]; - break; + case EfiIsaAcpiResourceInterrupt: + InterruptResource = &ResourceList->ResourceItem[ResourceIndex]; + break; - default: - break; + default: + break; } } + // // See if this is an ISA serial port // // Ignore DMA resource since it is always returned NULL // - if (ResourceList->Device.HID == EISA_PNP_ID (0x500) || ResourceList->Device.HID == EISA_PNP_ID (0x501)) { - - if (ResourceList->Device.UID <= 3 && - IoResource != NULL && - InterruptResource != NULL - ) { + if ((ResourceList->Device.HID == EISA_PNP_ID (0x500)) || (ResourceList->Device.HID == EISA_PNP_ID (0x501))) { + if ((ResourceList->Device.UID <= 3) && + (IoResource != NULL) && + (InterruptResource != NULL) + ) + { // // Get the handle of the child device that has opened the ISA I/O Protocol // @@ -342,17 +349,18 @@ LegacyBiosBuildSioDataFromIsaIo ( if (EFI_ERROR (Status)) { continue; } + // // We want resource for legacy even if no 32-bit driver installed // for (ChildIndex = 0; ChildIndex < EntryCount; ChildIndex++) { if ((OpenInfoBuffer[ChildIndex].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) { - Status = gBS->HandleProtocol (OpenInfoBuffer[ChildIndex].ControllerHandle, &gEfiSerialIoProtocolGuid, (VOID **) &SerialIo); + Status = gBS->HandleProtocol (OpenInfoBuffer[ChildIndex].ControllerHandle, &gEfiSerialIoProtocolGuid, (VOID **)&SerialIo); if (!EFI_ERROR (Status)) { - SioSerial = &SioPtr->Serial[ResourceList->Device.UID]; - SioSerial->Address = (UINT16) IoResource->StartRange; - SioSerial->Irq = (UINT8) InterruptResource->StartRange; - SioSerial->Mode = DEVICE_SERIAL_MODE_NORMAL | DEVICE_SERIAL_MODE_DUPLEX_HALF; + SioSerial = &SioPtr->Serial[ResourceList->Device.UID]; + SioSerial->Address = (UINT16)IoResource->StartRange; + SioSerial->Irq = (UINT8)InterruptResource->StartRange; + SioSerial->Mode = DEVICE_SERIAL_MODE_NORMAL | DEVICE_SERIAL_MODE_DUPLEX_HALF; break; } } @@ -361,40 +369,44 @@ LegacyBiosBuildSioDataFromIsaIo ( FreePool (OpenInfoBuffer); } } + // // See if this is an ISA parallel port // // Ignore DMA resource since it is always returned NULL, port // only used in output mode. // - if (ResourceList->Device.HID == EISA_PNP_ID (0x400) || ResourceList->Device.HID == EISA_PNP_ID (0x401)) { - if (ResourceList->Device.UID <= 2 && - IoResource != NULL && - InterruptResource != NULL && - DmaResource != NULL - ) { - SioParallel = &SioPtr->Parallel[ResourceList->Device.UID]; - SioParallel->Address = (UINT16) IoResource->StartRange; - SioParallel->Irq = (UINT8) InterruptResource->StartRange; - SioParallel->Dma = (UINT8) DmaResource->StartRange; - SioParallel->Mode = DEVICE_PARALLEL_MODE_MODE_OUTPUT_ONLY; + if ((ResourceList->Device.HID == EISA_PNP_ID (0x400)) || (ResourceList->Device.HID == EISA_PNP_ID (0x401))) { + if ((ResourceList->Device.UID <= 2) && + (IoResource != NULL) && + (InterruptResource != NULL) && + (DmaResource != NULL) + ) + { + SioParallel = &SioPtr->Parallel[ResourceList->Device.UID]; + SioParallel->Address = (UINT16)IoResource->StartRange; + SioParallel->Irq = (UINT8)InterruptResource->StartRange; + SioParallel->Dma = (UINT8)DmaResource->StartRange; + SioParallel->Mode = DEVICE_PARALLEL_MODE_MODE_OUTPUT_ONLY; } } + // // See if this is an ISA floppy controller // if (ResourceList->Device.HID == EISA_PNP_ID (0x604)) { - if (IoResource != NULL && InterruptResource != NULL && DmaResource != NULL) { - Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiBlockIoProtocolGuid, (VOID **) &BlockIo); + if ((IoResource != NULL) && (InterruptResource != NULL) && (DmaResource != NULL)) { + Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiBlockIoProtocolGuid, (VOID **)&BlockIo); if (!EFI_ERROR (Status)) { - SioFloppy = &SioPtr->Floppy; - SioFloppy->Address = (UINT16) IoResource->StartRange; - SioFloppy->Irq = (UINT8) InterruptResource->StartRange; - SioFloppy->Dma = (UINT8) DmaResource->StartRange; + SioFloppy = &SioPtr->Floppy; + SioFloppy->Address = (UINT16)IoResource->StartRange; + SioFloppy->Irq = (UINT8)InterruptResource->StartRange; + SioFloppy->Dma = (UINT8)DmaResource->StartRange; SioFloppy->NumberOfFloppy++; } } } + // // See if this is a mouse // Always set mouse found so USB hot plug will work @@ -430,14 +442,14 @@ LegacyBiosBuildSioDataFromIsaIo ( **/ EFI_STATUS LegacyBiosBuildSioData ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ) { - EFI_STATUS Status; - DEVICE_PRODUCER_DATA_HEADER *SioPtr; - EFI_HANDLE IsaBusController; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; + EFI_STATUS Status; + DEVICE_PRODUCER_DATA_HEADER *SioPtr; + EFI_HANDLE IsaBusController; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; // // Get the pointer to the SIO data structure diff --git a/OvmfPkg/Csm/LegacyBiosDxe/Thunk.c b/OvmfPkg/Csm/LegacyBiosDxe/Thunk.c index dd706fbd6e..62f19b6519 100644 --- a/OvmfPkg/Csm/LegacyBiosDxe/Thunk.c +++ b/OvmfPkg/Csm/LegacyBiosDxe/Thunk.c @@ -9,7 +9,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "LegacyBiosInterface.h" -THUNK_CONTEXT mThunkContext; +THUNK_CONTEXT mThunkContext; /** Sets the counter value for Timer #0 in a legacy 8254 timer. @@ -23,8 +23,8 @@ SetPitCount ( ) { IoWrite8 (TIMER_CONTROL_PORT, TIMER0_CONTROL_WORD); - IoWrite8 (TIMER0_COUNT_PORT, (UINT8) (Count & 0xFF)); - IoWrite8 (TIMER0_COUNT_PORT, (UINT8) ((Count>>8) & 0xFF)); + IoWrite8 (TIMER0_COUNT_PORT, (UINT8)(Count & 0xFF)); + IoWrite8 (TIMER0_COUNT_PORT, (UINT8)((Count>>8) & 0xFF)); } /** @@ -45,13 +45,13 @@ SetPitCount ( BOOLEAN EFIAPI LegacyBiosInt86 ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN UINT8 BiosInt, - IN EFI_IA32_REGISTER_SET *Regs + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN UINT8 BiosInt, + IN EFI_IA32_REGISTER_SET *Regs ) { - UINT16 Segment; - UINT16 Offset; + UINT16 Segment; + UINT16 Offset; Regs->X.Flags.Reserved1 = 1; Regs->X.Flags.Reserved2 = 0; @@ -67,9 +67,9 @@ LegacyBiosInt86 ( // We use this base address to get the legacy interrupt handler. // ACCESS_PAGE0_CODE ( - Segment = (UINT16)(((UINT32 *)0)[BiosInt] >> 16); - Offset = (UINT16)((UINT32 *)0)[BiosInt]; - ); + Segment = (UINT16)(((UINT32 *)0)[BiosInt] >> 16); + Offset = (UINT16)((UINT32 *)0)[BiosInt]; + ); return InternalLegacyBiosFarCall ( This, @@ -102,12 +102,12 @@ LegacyBiosInt86 ( BOOLEAN EFIAPI LegacyBiosFarCall86 ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN UINT16 Segment, - IN UINT16 Offset, - IN EFI_IA32_REGISTER_SET *Regs, - IN VOID *Stack, - IN UINTN StackSize + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN UINT16 Segment, + IN UINT16 Offset, + IN EFI_IA32_REGISTER_SET *Regs, + IN VOID *Stack, + IN UINTN StackSize ) { Regs->X.Flags.Reserved1 = 1; @@ -134,8 +134,8 @@ LegacyBiosFarCall86 ( VOID EFIAPI LegacyBiosNullInterruptHandler ( - IN EFI_EXCEPTION_TYPE InterruptType, - IN EFI_SYSTEM_CONTEXT SystemContext + IN EFI_EXCEPTION_TYPE InterruptType, + IN EFI_SYSTEM_CONTEXT SystemContext ) { } @@ -161,12 +161,12 @@ LegacyBiosNullInterruptHandler ( BOOLEAN EFIAPI InternalLegacyBiosFarCall ( - IN EFI_LEGACY_BIOS_PROTOCOL *This, - IN UINT16 Segment, - IN UINT16 Offset, - IN EFI_IA32_REGISTER_SET *Regs, - IN VOID *Stack, - IN UINTN StackSize + IN EFI_LEGACY_BIOS_PROTOCOL *This, + IN UINT16 Segment, + IN UINT16 Offset, + IN EFI_IA32_REGISTER_SET *Regs, + IN VOID *Stack, + IN UINTN StackSize ) { UINTN Status; @@ -180,19 +180,19 @@ InternalLegacyBiosFarCall ( Private = LEGACY_BIOS_INSTANCE_FROM_THIS (This); ZeroMem (&ThunkRegSet, sizeof (ThunkRegSet)); - ThunkRegSet.X.DI = Regs->X.DI; - ThunkRegSet.X.SI = Regs->X.SI; - ThunkRegSet.X.BP = Regs->X.BP; - ThunkRegSet.X.BX = Regs->X.BX; - ThunkRegSet.X.DX = Regs->X.DX; + ThunkRegSet.X.DI = Regs->X.DI; + ThunkRegSet.X.SI = Regs->X.SI; + ThunkRegSet.X.BP = Regs->X.BP; + ThunkRegSet.X.BX = Regs->X.BX; + ThunkRegSet.X.DX = Regs->X.DX; // // Sometimes, ECX is used to pass in 32 bit data. For example, INT 1Ah, AX = B10Dh is // "PCI BIOS v2.0c + Write Configuration DWORD" and ECX has the dword to write. // - ThunkRegSet.E.ECX = Regs->E.ECX; - ThunkRegSet.X.AX = Regs->X.AX; - ThunkRegSet.E.DS = Regs->X.DS; - ThunkRegSet.E.ES = Regs->X.ES; + ThunkRegSet.E.ECX = Regs->E.ECX; + ThunkRegSet.X.AX = Regs->X.AX; + ThunkRegSet.E.DS = Regs->X.DS; + ThunkRegSet.E.ES = Regs->X.ES; CopyMem (&(ThunkRegSet.E.EFLAGS.UintN), &(Regs->X.Flags), sizeof (Regs->X.Flags)); @@ -200,7 +200,7 @@ InternalLegacyBiosFarCall ( // Clear the error flag; thunk code may set it. Stack16 should be the high address // Make Statk16 address the low 16 bit must be not zero. // - Stack16 = (UINT16 *)((UINT8 *) mThunkContext.RealModeBuffer + mThunkContext.RealModeBufferSize - sizeof (UINT16)); + Stack16 = (UINT16 *)((UINT8 *)mThunkContext.RealModeBuffer + mThunkContext.RealModeBufferSize - sizeof (UINT16)); // // Save current rate of DXE Timer @@ -229,22 +229,25 @@ InternalLegacyBiosFarCall ( // handled properly from real mode. // DEBUG_CODE_BEGIN (); - UINTN Vector; - UINTN Count; - - for (Vector = 0x20, Count = 0; Vector < 0x100; Vector++) { - Status = Private->Cpu->RegisterInterruptHandler (Private->Cpu, Vector, LegacyBiosNullInterruptHandler); - if (Status == EFI_ALREADY_STARTED) { - Count++; - } - if (Status == EFI_SUCCESS) { - Private->Cpu->RegisterInterruptHandler (Private->Cpu, Vector, NULL); - } + UINTN Vector; + UINTN Count; + + for (Vector = 0x20, Count = 0; Vector < 0x100; Vector++) { + Status = Private->Cpu->RegisterInterruptHandler (Private->Cpu, Vector, LegacyBiosNullInterruptHandler); + if (Status == EFI_ALREADY_STARTED) { + Count++; } - if (Count >= 2) { - DEBUG ((DEBUG_ERROR, "ERROR: More than one HW interrupt active with CSM enabled\n")); + + if (Status == EFI_SUCCESS) { + Private->Cpu->RegisterInterruptHandler (Private->Cpu, Vector, NULL); } - ASSERT (Count < 2); + } + + if (Count >= 2) { + DEBUG ((DEBUG_ERROR, "ERROR: More than one HW interrupt active with CSM enabled\n")); + } + + ASSERT (Count < 2); DEBUG_CODE_END (); // @@ -252,11 +255,11 @@ InternalLegacyBiosFarCall ( // period is less than the CSM required rate of 54.9254, then force the 8254 // PIT counter to 0, which is the CSM required rate of 54.9254 ms // - if (Private->TimerUses8254 && TimerPeriod < 549254) { + if (Private->TimerUses8254 && (TimerPeriod < 549254)) { SetPitCount (0); } - if (Stack != NULL && StackSize != 0) { + if ((Stack != NULL) && (StackSize != 0)) { // // Copy Stack to low memory stack // @@ -264,12 +267,12 @@ InternalLegacyBiosFarCall ( CopyMem (Stack16, Stack, StackSize); } - ThunkRegSet.E.SS = (UINT16) (((UINTN) Stack16 >> 16) << 12); - ThunkRegSet.E.ESP = (UINT16) (UINTN) Stack16; - ThunkRegSet.E.CS = Segment; - ThunkRegSet.E.Eip = Offset; + ThunkRegSet.E.SS = (UINT16)(((UINTN)Stack16 >> 16) << 12); + ThunkRegSet.E.ESP = (UINT16)(UINTN)Stack16; + ThunkRegSet.E.CS = Segment; + ThunkRegSet.E.Eip = Offset; - mThunkContext.RealModeState = &ThunkRegSet; + mThunkContext.RealModeState = &ThunkRegSet; // // Set Legacy16 state. 0x08, 0x70 is legacy 8259 vector bases. @@ -279,7 +282,7 @@ InternalLegacyBiosFarCall ( AsmThunk16 (&mThunkContext); - if (Stack != NULL && StackSize != 0) { + if ((Stack != NULL) && (StackSize != 0)) { // // Copy low memory stack to Stack // @@ -311,17 +314,17 @@ InternalLegacyBiosFarCall ( // PcdEbdaReservedMemorySize should be adjusted to larger for more OPROMs. // DEBUG_CODE_BEGIN (); - { - UINTN EbdaBaseAddress; - UINTN ReservedEbdaBaseAddress; - - ACCESS_PAGE0_CODE ( - EbdaBaseAddress = (*(UINT16 *) (UINTN) 0x40E) << 4; - ReservedEbdaBaseAddress = CONVENTIONAL_MEMORY_TOP - - PcdGet32 (PcdEbdaReservedMemorySize); - ASSERT (ReservedEbdaBaseAddress <= EbdaBaseAddress); + { + UINTN EbdaBaseAddress; + UINTN ReservedEbdaBaseAddress; + + ACCESS_PAGE0_CODE ( + EbdaBaseAddress = (*(UINT16 *)(UINTN)0x40E) << 4; + ReservedEbdaBaseAddress = CONVENTIONAL_MEMORY_TOP + - PcdGet32 (PcdEbdaReservedMemorySize); + ASSERT (ReservedEbdaBaseAddress <= EbdaBaseAddress); ); - } + } DEBUG_CODE_END (); // @@ -329,21 +332,21 @@ InternalLegacyBiosFarCall ( // SaveAndSetDebugTimerInterrupt (InterruptState); - Regs->E.EDI = ThunkRegSet.E.EDI; - Regs->E.ESI = ThunkRegSet.E.ESI; - Regs->E.EBP = ThunkRegSet.E.EBP; - Regs->E.EBX = ThunkRegSet.E.EBX; - Regs->E.EDX = ThunkRegSet.E.EDX; - Regs->E.ECX = ThunkRegSet.E.ECX; - Regs->E.EAX = ThunkRegSet.E.EAX; - Regs->X.SS = ThunkRegSet.E.SS; - Regs->X.CS = ThunkRegSet.E.CS; - Regs->X.DS = ThunkRegSet.E.DS; - Regs->X.ES = ThunkRegSet.E.ES; + Regs->E.EDI = ThunkRegSet.E.EDI; + Regs->E.ESI = ThunkRegSet.E.ESI; + Regs->E.EBP = ThunkRegSet.E.EBP; + Regs->E.EBX = ThunkRegSet.E.EBX; + Regs->E.EDX = ThunkRegSet.E.EDX; + Regs->E.ECX = ThunkRegSet.E.ECX; + Regs->E.EAX = ThunkRegSet.E.EAX; + Regs->X.SS = ThunkRegSet.E.SS; + Regs->X.CS = ThunkRegSet.E.CS; + Regs->X.DS = ThunkRegSet.E.DS; + Regs->X.ES = ThunkRegSet.E.ES; CopyMem (&(Regs->X.Flags), &(ThunkRegSet.E.EFLAGS.UintN), sizeof (Regs->X.Flags)); - return (BOOLEAN) (Regs->X.Flags.CF == 1); + return (BOOLEAN)(Regs->X.Flags.CF == 1); } /** @@ -357,16 +360,16 @@ InternalLegacyBiosFarCall ( **/ EFI_STATUS LegacyBiosInitializeThunk ( - IN LEGACY_BIOS_INSTANCE *Private + IN LEGACY_BIOS_INSTANCE *Private ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS MemoryAddress; - UINT8 TimerVector; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS MemoryAddress; + UINT8 TimerVector; - MemoryAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) Private->IntThunk; + MemoryAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)Private->IntThunk; - mThunkContext.RealModeBuffer = (VOID *) (UINTN) (MemoryAddress + ((sizeof (LOW_MEMORY_THUNK) / EFI_PAGE_SIZE) + 1) * EFI_PAGE_SIZE); + mThunkContext.RealModeBuffer = (VOID *)(UINTN)(MemoryAddress + ((sizeof (LOW_MEMORY_THUNK) / EFI_PAGE_SIZE) + 1) * EFI_PAGE_SIZE); mThunkContext.RealModeBufferSize = EFI_PAGE_SIZE; mThunkContext.ThunkAttributes = THUNK_ATTRIBUTE_BIG_REAL_MODE | THUNK_ATTRIBUTE_DISABLE_A20_MASK_INT_15; @@ -376,7 +379,7 @@ LegacyBiosInitializeThunk ( // Get the interrupt vector number corresponding to IRQ0 from the 8259 driver // TimerVector = 0; - Status = Private->Legacy8259->GetVector (Private->Legacy8259, Efi8259Irq0, &TimerVector); + Status = Private->Legacy8259->GetVector (Private->Legacy8259, Efi8259Irq0, &TimerVector); ASSERT_EFI_ERROR (Status); // diff --git a/OvmfPkg/Csm/LegacyBootMaintUiLib/LegacyBootMaintUi.c b/OvmfPkg/Csm/LegacyBootMaintUiLib/LegacyBootMaintUi.c index 31e211a7b9..6b4fa933f2 100644 --- a/OvmfPkg/Csm/LegacyBootMaintUiLib/LegacyBootMaintUi.c +++ b/OvmfPkg/Csm/LegacyBootMaintUiLib/LegacyBootMaintUi.c @@ -7,67 +7,63 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ - #include "LegacyBootMaintUi.h" LEGACY_BOOT_OPTION_CALLBACK_DATA *mLegacyBootOptionPrivate = NULL; -EFI_GUID mLegacyBootOptionGuid = LEGACY_BOOT_OPTION_FORMSET_GUID; -CHAR16 mLegacyBootStorageName[] = L"LegacyBootData"; -BBS_TYPE mBbsType[] = {BBS_FLOPPY, BBS_HARDDISK, BBS_CDROM, BBS_EMBED_NETWORK, BBS_BEV_DEVICE, BBS_UNKNOWN}; -BOOLEAN mFirstEnterLegacyForm = FALSE; - +EFI_GUID mLegacyBootOptionGuid = LEGACY_BOOT_OPTION_FORMSET_GUID; +CHAR16 mLegacyBootStorageName[] = L"LegacyBootData"; +BBS_TYPE mBbsType[] = { BBS_FLOPPY, BBS_HARDDISK, BBS_CDROM, BBS_EMBED_NETWORK, BBS_BEV_DEVICE, BBS_UNKNOWN }; +BOOLEAN mFirstEnterLegacyForm = FALSE; /// /// Legacy FD Info from LegacyBios.GetBbsInfo() /// -LEGACY_MENU_OPTION LegacyFDMenu = { +LEGACY_MENU_OPTION LegacyFDMenu = { LEGACY_MENU_OPTION_SIGNATURE, - {NULL}, + { NULL }, 0 }; /// /// Legacy HD Info from LegacyBios.GetBbsInfo() /// -LEGACY_MENU_OPTION LegacyHDMenu = { +LEGACY_MENU_OPTION LegacyHDMenu = { LEGACY_MENU_OPTION_SIGNATURE, - {NULL}, + { NULL }, 0 }; /// /// Legacy CD Info from LegacyBios.GetBbsInfo() /// -LEGACY_MENU_OPTION LegacyCDMenu = { +LEGACY_MENU_OPTION LegacyCDMenu = { LEGACY_MENU_OPTION_SIGNATURE, - {NULL}, + { NULL }, 0 }; /// /// Legacy NET Info from LegacyBios.GetBbsInfo() /// -LEGACY_MENU_OPTION LegacyNETMenu = { +LEGACY_MENU_OPTION LegacyNETMenu = { LEGACY_MENU_OPTION_SIGNATURE, - {NULL}, + { NULL }, 0 }; /// /// Legacy NET Info from LegacyBios.GetBbsInfo() /// -LEGACY_MENU_OPTION LegacyBEVMenu = { +LEGACY_MENU_OPTION LegacyBEVMenu = { LEGACY_MENU_OPTION_SIGNATURE, - {NULL}, + { NULL }, 0 }; - VOID *mLegacyStartOpCodeHandle = NULL; -VOID *mLegacyEndOpCodeHandle = NULL; -EFI_IFR_GUID_LABEL *mLegacyStartLabel = NULL; -EFI_IFR_GUID_LABEL *mLegacyEndLabel = NULL; - +VOID *mLegacyEndOpCodeHandle = NULL; +EFI_IFR_GUID_LABEL *mLegacyStartLabel = NULL; +EFI_IFR_GUID_LABEL *mLegacyEndLabel = NULL; HII_VENDOR_DEVICE_PATH mLegacyBootOptionHiiVendorDevicePath = { { @@ -75,18 +71,19 @@ HII_VENDOR_DEVICE_PATH mLegacyBootOptionHiiVendorDevicePath = { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, { - (UINT8) (sizeof (VENDOR_DEVICE_PATH)), - (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (VENDOR_DEVICE_PATH)), + (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) } }, - { 0x6bc75598, 0x89b4, 0x483d, { 0x91, 0x60, 0x7f, 0x46, 0x9a, 0x96, 0x35, 0x31 } } + { 0x6bc75598, 0x89b4, 0x483d, { 0x91, 0x60, 0x7f, 0x46, 0x9a, 0x96, 0x35, 0x31 } + } }, { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { - (UINT8) (END_DEVICE_PATH_LENGTH), - (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8) + (UINT8)(END_DEVICE_PATH_LENGTH), + (UINT8)((END_DEVICE_PATH_LENGTH) >> 8) } } }; @@ -101,7 +98,6 @@ GetLegacyOptions ( VOID ); - /** Base on the L"LegacyDevOrder" variable to build the current order data. @@ -131,28 +127,28 @@ GetLegacyOptionsOrder ( **/ EFI_STATUS OrderLegacyBootOption4SameType ( - UINT16 *DevOrder, - UINTN DevOrderCount, - UINT16 **EnBootOption, - UINTN *EnBootOptionCount, - UINT16 **DisBootOption, - UINTN *DisBootOptionCount + UINT16 *DevOrder, + UINTN DevOrderCount, + UINT16 **EnBootOption, + UINTN *EnBootOptionCount, + UINT16 **DisBootOption, + UINTN *DisBootOptionCount ) { - EFI_STATUS Status; - UINT16 *NewBootOption; - UINT16 *BootOrder; - UINTN BootOrderSize; - UINTN Index; - UINTN StartPosition; + EFI_STATUS Status; + UINT16 *NewBootOption; + UINT16 *BootOrder; + UINTN BootOrderSize; + UINTN Index; + UINTN StartPosition; - EFI_BOOT_MANAGER_LOAD_OPTION BootOption; + EFI_BOOT_MANAGER_LOAD_OPTION BootOption; - CHAR16 OptionName[sizeof ("Boot####")]; - UINT16 *BbsIndexArray; - UINT16 *DeviceTypeArray; + CHAR16 OptionName[sizeof ("Boot####")]; + UINT16 *BbsIndexArray; + UINT16 *DeviceTypeArray; - GetEfiGlobalVariable2 (L"BootOrder", (VOID **) &BootOrder, &BootOrderSize); + GetEfiGlobalVariable2 (L"BootOrder", (VOID **)&BootOrder, &BootOrderSize); ASSERT (BootOrder != NULL); BbsIndexArray = AllocatePool (BootOrderSize); @@ -170,24 +166,25 @@ OrderLegacyBootOption4SameType ( ASSERT (*DisBootOption != NULL); for (Index = 0; Index < BootOrderSize / sizeof (UINT16); Index++) { - UnicodeSPrint (OptionName, sizeof (OptionName), L"Boot%04x", BootOrder[Index]); Status = EfiBootManagerVariableToLoadOption (OptionName, &BootOption); ASSERT_EFI_ERROR (Status); if ((DevicePathType (BootOption.FilePath) == BBS_DEVICE_PATH) && - (DevicePathSubType (BootOption.FilePath) == BBS_BBS_DP)) { + (DevicePathSubType (BootOption.FilePath) == BBS_BBS_DP)) + { // // Legacy Boot Option // ASSERT (BootOption.OptionalDataSize == sizeof (LEGACY_BOOT_OPTION_BBS_DATA)); - DeviceTypeArray[Index] = ((BBS_BBS_DEVICE_PATH *) BootOption.FilePath)->DeviceType; - BbsIndexArray [Index] = ((LEGACY_BOOT_OPTION_BBS_DATA *) BootOption.OptionalData)->BbsIndex; + DeviceTypeArray[Index] = ((BBS_BBS_DEVICE_PATH *)BootOption.FilePath)->DeviceType; + BbsIndexArray[Index] = ((LEGACY_BOOT_OPTION_BBS_DATA *)BootOption.OptionalData)->BbsIndex; } else { DeviceTypeArray[Index] = BBS_TYPE_UNKNOWN; - BbsIndexArray [Index] = 0xFFFF; + BbsIndexArray[Index] = 0xFFFF; } + EfiBootManagerFreeLoadOption (&BootOption); } @@ -201,7 +198,7 @@ OrderLegacyBootOption4SameType ( while (DevOrderCount-- != 0) { for (Index = 0; Index < BootOrderSize / sizeof (UINT16); Index++) { if (BbsIndexArray[Index] == (DevOrder[DevOrderCount] & 0xFF)) { - StartPosition = MIN (StartPosition, Index); + StartPosition = MIN (StartPosition, Index); NewBootOption[DevOrderCount] = BootOrder[Index]; if ((DevOrder[DevOrderCount] & 0xFF00) == 0xFF00) { @@ -211,6 +208,7 @@ OrderLegacyBootOption4SameType ( (*EnBootOption)[*EnBootOptionCount] = BootOrder[Index]; (*EnBootOptionCount)++; } + break; } } @@ -249,93 +247,92 @@ OrderLegacyBootOption4SameType ( **/ EFI_STATUS UpdateBBSOption ( - IN LEGACY_BOOT_NV_DATA *NVMapData + IN LEGACY_BOOT_NV_DATA *NVMapData ) { - UINTN Index; - UINTN Index2; - UINTN CurrentType; - VOID *BootOptionVar; - CHAR16 VarName[100]; - UINTN OptionSize; - EFI_STATUS Status; - UINT32 *Attribute; - LEGACY_MENU_OPTION *OptionMenu; - UINT16 *LegacyDev; - UINT16 *InitialLegacyDev; - UINT8 *VarData; - UINTN VarSize; - LEGACY_DEV_ORDER_ENTRY *DevOrder; - UINT8 *OriginalPtr; - UINT8 *DisMap; - UINTN Pos; - UINTN Bit; - UINT16 *NewOrder; - UINT16 Tmp; - UINT16 *EnBootOption; - UINTN EnBootOptionCount; - UINT16 *DisBootOption; - UINTN DisBootOptionCount; - UINTN BufferSize; - - - DisMap = NULL; - NewOrder = NULL; - CurrentType = 0; - EnBootOption = NULL; - DisBootOption = NULL; - - - DisMap = mLegacyBootOptionPrivate->MaintainMapData->DisableMap; - Status = EFI_SUCCESS; + UINTN Index; + UINTN Index2; + UINTN CurrentType; + VOID *BootOptionVar; + CHAR16 VarName[100]; + UINTN OptionSize; + EFI_STATUS Status; + UINT32 *Attribute; + LEGACY_MENU_OPTION *OptionMenu; + UINT16 *LegacyDev; + UINT16 *InitialLegacyDev; + UINT8 *VarData; + UINTN VarSize; + LEGACY_DEV_ORDER_ENTRY *DevOrder; + UINT8 *OriginalPtr; + UINT8 *DisMap; + UINTN Pos; + UINTN Bit; + UINT16 *NewOrder; + UINT16 Tmp; + UINT16 *EnBootOption; + UINTN EnBootOptionCount; + UINT16 *DisBootOption; + UINTN DisBootOptionCount; + UINTN BufferSize; + + DisMap = NULL; + NewOrder = NULL; + CurrentType = 0; + EnBootOption = NULL; + DisBootOption = NULL; + + DisMap = mLegacyBootOptionPrivate->MaintainMapData->DisableMap; + Status = EFI_SUCCESS; // // Update the Variable "LegacyDevOrder" // - GetVariable2 (VAR_LEGACY_DEV_ORDER, &gEfiLegacyDevOrderVariableGuid, (VOID **) &VarData, &VarSize); + GetVariable2 (VAR_LEGACY_DEV_ORDER, &gEfiLegacyDevOrderVariableGuid, (VOID **)&VarData, &VarSize); if (VarData == NULL) { return EFI_NOT_FOUND; } + OriginalPtr = VarData; while (mBbsType[CurrentType] != BBS_UNKNOWN) { switch (mBbsType[CurrentType]) { - case BBS_FLOPPY: - OptionMenu = (LEGACY_MENU_OPTION *) &LegacyFDMenu; - LegacyDev = NVMapData->LegacyFD; - InitialLegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyFD; - BufferSize = sizeof (NVMapData->LegacyFD); - break; + case BBS_FLOPPY: + OptionMenu = (LEGACY_MENU_OPTION *)&LegacyFDMenu; + LegacyDev = NVMapData->LegacyFD; + InitialLegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyFD; + BufferSize = sizeof (NVMapData->LegacyFD); + break; - case BBS_HARDDISK: - OptionMenu = (LEGACY_MENU_OPTION *) &LegacyHDMenu; - LegacyDev = NVMapData->LegacyHD; - InitialLegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyHD; + case BBS_HARDDISK: + OptionMenu = (LEGACY_MENU_OPTION *)&LegacyHDMenu; + LegacyDev = NVMapData->LegacyHD; + InitialLegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyHD; - BufferSize = sizeof (NVMapData->LegacyHD); - break; + BufferSize = sizeof (NVMapData->LegacyHD); + break; - case BBS_CDROM: - OptionMenu = (LEGACY_MENU_OPTION *) &LegacyCDMenu; - LegacyDev = NVMapData->LegacyCD; - InitialLegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyCD; - BufferSize = sizeof (NVMapData->LegacyCD); - break; + case BBS_CDROM: + OptionMenu = (LEGACY_MENU_OPTION *)&LegacyCDMenu; + LegacyDev = NVMapData->LegacyCD; + InitialLegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyCD; + BufferSize = sizeof (NVMapData->LegacyCD); + break; - case BBS_EMBED_NETWORK: - OptionMenu = (LEGACY_MENU_OPTION *) &LegacyNETMenu; - LegacyDev = NVMapData->LegacyNET; - InitialLegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyNET; - BufferSize = sizeof (NVMapData->LegacyNET); - break; + case BBS_EMBED_NETWORK: + OptionMenu = (LEGACY_MENU_OPTION *)&LegacyNETMenu; + LegacyDev = NVMapData->LegacyNET; + InitialLegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyNET; + BufferSize = sizeof (NVMapData->LegacyNET); + break; - default: - ASSERT (mBbsType[CurrentType] == BBS_BEV_DEVICE); - OptionMenu = (LEGACY_MENU_OPTION *) &LegacyBEVMenu; - LegacyDev = NVMapData->LegacyBEV; - InitialLegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyBEV; - BufferSize = sizeof (NVMapData->LegacyBEV); - break; + default: + ASSERT (mBbsType[CurrentType] == BBS_BEV_DEVICE); + OptionMenu = (LEGACY_MENU_OPTION *)&LegacyBEVMenu; + LegacyDev = NVMapData->LegacyBEV; + InitialLegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyBEV; + BufferSize = sizeof (NVMapData->LegacyBEV); + break; } // @@ -346,14 +343,14 @@ UpdateBBSOption ( continue; } - DevOrder = (LEGACY_DEV_ORDER_ENTRY *) OriginalPtr; + DevOrder = (LEGACY_DEV_ORDER_ENTRY *)OriginalPtr; while (VarData < OriginalPtr + VarSize) { if (DevOrder->BbsType == mBbsType[CurrentType]) { break; } VarData += sizeof (BBS_TYPE) + DevOrder->Length; - DevOrder = (LEGACY_DEV_ORDER_ENTRY *) VarData; + DevOrder = (LEGACY_DEV_ORDER_ENTRY *)VarData; } if (VarData >= OriginalPtr + VarSize) { @@ -382,11 +379,11 @@ UpdateBBSOption ( // so we use DisMap to set en/dis state of each item in NewOrder array // for (Index2 = 0; Index2 < OptionMenu->MenuNumber; Index2++) { - Tmp = (UINT16) (DevOrder->Data[Index2] & 0xFF); + Tmp = (UINT16)(DevOrder->Data[Index2] & 0xFF); Pos = Tmp / 8; Bit = 7 - (Tmp % 8); if ((DisMap[Pos] & (1 << Bit)) != 0) { - NewOrder[Index] = (UINT16) (0xFF00 | Tmp); + NewOrder[Index] = (UINT16)(0xFF00 | Tmp); Index++; } } @@ -406,25 +403,25 @@ UpdateBBSOption ( ASSERT (OptionMenu->MenuNumber == DevOrder->Length / sizeof (UINT16) - 1); Status = OrderLegacyBootOption4SameType ( - DevOrder->Data, - DevOrder->Length / sizeof (UINT16) - 1, - &EnBootOption, - &EnBootOptionCount, - &DisBootOption, - &DisBootOptionCount - ); - if (EFI_ERROR(Status)) { - goto Fail; - } + DevOrder->Data, + DevOrder->Length / sizeof (UINT16) - 1, + &EnBootOption, + &EnBootOptionCount, + &DisBootOption, + &DisBootOptionCount + ); + if (EFI_ERROR (Status)) { + goto Fail; + } // // 2. Deactivate the DisBootOption and activate the EnBootOption // for (Index = 0; Index < DisBootOptionCount; Index++) { UnicodeSPrint (VarName, sizeof (VarName), L"Boot%04x", DisBootOption[Index]); - GetEfiGlobalVariable2 (VarName, (VOID **) &BootOptionVar, &OptionSize); + GetEfiGlobalVariable2 (VarName, (VOID **)&BootOptionVar, &OptionSize); if (BootOptionVar != NULL) { - Attribute = (UINT32 *) BootOptionVar; + Attribute = (UINT32 *)BootOptionVar; *Attribute &= ~LOAD_OPTION_ACTIVE; Status = gRT->SetVariable ( @@ -441,9 +438,9 @@ UpdateBBSOption ( for (Index = 0; Index < EnBootOptionCount; Index++) { UnicodeSPrint (VarName, sizeof (VarName), L"Boot%04x", EnBootOption[Index]); - GetEfiGlobalVariable2 (VarName, (VOID **) &BootOptionVar, &OptionSize); + GetEfiGlobalVariable2 (VarName, (VOID **)&BootOptionVar, &OptionSize); if (BootOptionVar != NULL) { - Attribute = (UINT32 *) BootOptionVar; + Attribute = (UINT32 *)BootOptionVar; *Attribute |= LOAD_OPTION_ACTIVE; Status = gRT->SetVariable ( @@ -458,7 +455,6 @@ UpdateBBSOption ( } } - FreePool (EnBootOption); FreePool (DisBootOption); @@ -511,15 +507,16 @@ Fail: EFI_STATUS EFIAPI LegacyBootOptionExtractConfig ( - IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, - IN CONST EFI_STRING Request, - OUT EFI_STRING *Progress, - OUT EFI_STRING *Results + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, + IN CONST EFI_STRING Request, + OUT EFI_STRING *Progress, + OUT EFI_STRING *Results ) { - if (Progress == NULL || Results == NULL) { + if ((Progress == NULL) || (Results == NULL)) { return EFI_INVALID_PARAMETER; } + *Progress = Request; return EFI_NOT_FOUND; } @@ -543,18 +540,17 @@ LegacyBootOptionExtractConfig ( EFI_STATUS EFIAPI LegacyBootOptionRouteConfig ( - IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, - IN CONST EFI_STRING Configuration, - OUT EFI_STRING *Progress + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, + IN CONST EFI_STRING Configuration, + OUT EFI_STRING *Progress ) { - EFI_STATUS Status; - EFI_HII_CONFIG_ROUTING_PROTOCOL *ConfigRouting; - LEGACY_BOOT_NV_DATA *CurrentNVMapData; - UINTN BufferSize; + EFI_STATUS Status; + EFI_HII_CONFIG_ROUTING_PROTOCOL *ConfigRouting; + LEGACY_BOOT_NV_DATA *CurrentNVMapData; + UINTN BufferSize; - - if (Configuration == NULL || Progress == NULL) { + if ((Configuration == NULL) || (Progress == NULL)) { return EFI_INVALID_PARAMETER; } @@ -571,7 +567,7 @@ LegacyBootOptionRouteConfig ( Status = gBS->LocateProtocol ( &gEfiHiiConfigRoutingProtocolGuid, NULL, - (VOID **) &ConfigRouting + (VOID **)&ConfigRouting ); if (EFI_ERROR (Status)) { return Status; @@ -581,13 +577,13 @@ LegacyBootOptionRouteConfig ( // Convert to buffer data by helper function ConfigToBlock() // CurrentNVMapData = &mLegacyBootOptionPrivate->MaintainMapData->CurrentNvData; - Status = ConfigRouting->ConfigToBlock ( - ConfigRouting, - Configuration, - (UINT8 *) CurrentNVMapData, - &BufferSize, - Progress - ); + Status = ConfigRouting->ConfigToBlock ( + ConfigRouting, + Configuration, + (UINT8 *)CurrentNVMapData, + &BufferSize, + Progress + ); ASSERT_EFI_ERROR (Status); Status = UpdateBBSOption (CurrentNVMapData); @@ -610,6 +606,7 @@ RefreshLegacyUpdateData ( if (mLegacyStartOpCodeHandle != NULL) { HiiFreeOpCodeHandle (mLegacyStartOpCodeHandle); } + if (mLegacyEndOpCodeHandle != NULL) { HiiFreeOpCodeHandle (mLegacyEndOpCodeHandle); } @@ -618,17 +615,17 @@ RefreshLegacyUpdateData ( // Create new OpCode Handle // mLegacyStartOpCodeHandle = HiiAllocateOpCodeHandle (); - mLegacyEndOpCodeHandle = HiiAllocateOpCodeHandle (); + mLegacyEndOpCodeHandle = HiiAllocateOpCodeHandle (); // // Create Hii Extend Label OpCode as the start opcode // - mLegacyStartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode ( - mLegacyStartOpCodeHandle, - &gEfiIfrTianoGuid, - NULL, - sizeof (EFI_IFR_GUID_LABEL) - ); + mLegacyStartLabel = (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode ( + mLegacyStartOpCodeHandle, + &gEfiIfrTianoGuid, + NULL, + sizeof (EFI_IFR_GUID_LABEL) + ); mLegacyStartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL; mLegacyStartLabel->Number = FORM_BOOT_LEGACY_DEVICE_ID; @@ -636,16 +633,15 @@ RefreshLegacyUpdateData ( // // Create Hii Extend Label OpCode as the start opcode // - mLegacyEndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode ( - mLegacyEndOpCodeHandle, - &gEfiIfrTianoGuid, - NULL, - sizeof (EFI_IFR_GUID_LABEL) - ); + mLegacyEndLabel = (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode ( + mLegacyEndOpCodeHandle, + &gEfiIfrTianoGuid, + NULL, + sizeof (EFI_IFR_GUID_LABEL) + ); mLegacyEndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL; mLegacyEndLabel->Number = FORM_BOOT_LEGACY_LABEL_END; - } /** @@ -662,13 +658,13 @@ RefreshLegacyUpdateData ( **/ LEGACY_MENU_ENTRY * GetMenuEntry ( - LEGACY_MENU_OPTION *MenuOption, - UINTN MenuNumber + LEGACY_MENU_OPTION *MenuOption, + UINTN MenuNumber ) { - LEGACY_MENU_ENTRY *NewMenuEntry; - UINTN Index; - LIST_ENTRY *List; + LEGACY_MENU_ENTRY *NewMenuEntry; + UINTN Index; + LIST_ENTRY *List; ASSERT (MenuNumber < MenuOption->MenuNumber); @@ -691,12 +687,12 @@ GetMenuEntry ( **/ VOID CreateLegacyMenuStringToken ( - IN EFI_HII_HANDLE HiiHandle, - IN LEGACY_MENU_OPTION *MenuOption + IN EFI_HII_HANDLE HiiHandle, + IN LEGACY_MENU_OPTION *MenuOption ) { - LEGACY_MENU_ENTRY *NewMenuEntry; - UINTN Index; + LEGACY_MENU_ENTRY *NewMenuEntry; + UINTN Index; for (Index = 0; Index < MenuOption->MenuNumber; Index++) { NewMenuEntry = GetMenuEntry (MenuOption, Index); @@ -731,22 +727,22 @@ CreateLegacyMenuStringToken ( **/ VOID UpdateLegacyDeviceOrderPage ( - IN UINT16 UpdatePageId + IN UINT16 UpdatePageId ) { - LEGACY_MENU_OPTION *OptionMenu; - LEGACY_MENU_ENTRY *NewMenuEntry; - EFI_STRING_ID StrRef; - EFI_STRING_ID StrRefHelp; - UINT16 *Default; - UINT16 Index; - UINT16 Key; - CHAR16 String[100]; - CHAR16 *TypeStr; - CHAR16 *TypeStrHelp; - CHAR16 *FormTitle; - VOID *OptionsOpCodeHandle; - VOID *DefaultOpCodeHandle; + LEGACY_MENU_OPTION *OptionMenu; + LEGACY_MENU_ENTRY *NewMenuEntry; + EFI_STRING_ID StrRef; + EFI_STRING_ID StrRefHelp; + UINT16 *Default; + UINT16 Index; + UINT16 Key; + CHAR16 String[100]; + CHAR16 *TypeStr; + CHAR16 *TypeStrHelp; + CHAR16 *FormTitle; + VOID *OptionsOpCodeHandle; + VOID *DefaultOpCodeHandle; Key = 0; StrRef = 0; @@ -756,70 +752,69 @@ UpdateLegacyDeviceOrderPage ( TypeStrHelp = NULL; Default = NULL; - RefreshLegacyUpdateData(); + RefreshLegacyUpdateData (); // // Create oneof option list // switch (UpdatePageId) { - case FORM_FLOPPY_BOOT_ID: - OptionMenu = (LEGACY_MENU_OPTION *) &LegacyFDMenu; - Key = (UINT16) LEGACY_FD_QUESTION_ID; - TypeStr = STR_FLOPPY; - TypeStrHelp = STR_FLOPPY_HELP; - FormTitle = STR_FLOPPY_TITLE; - Default = mLegacyBootOptionPrivate->MaintainMapData->CurrentNvData.LegacyFD; - break; - - case FORM_HARDDISK_BOOT_ID: - OptionMenu = (LEGACY_MENU_OPTION *) &LegacyHDMenu; - Key = (UINT16) LEGACY_HD_QUESTION_ID; - TypeStr = STR_HARDDISK; - TypeStrHelp = STR_HARDDISK_HELP; - FormTitle = STR_HARDDISK_TITLE; - Default = mLegacyBootOptionPrivate->MaintainMapData->CurrentNvData.LegacyHD; - break; - - case FORM_CDROM_BOOT_ID: - OptionMenu = (LEGACY_MENU_OPTION *) &LegacyCDMenu; - Key = (UINT16) LEGACY_CD_QUESTION_ID; - TypeStr = STR_CDROM; - TypeStrHelp = STR_CDROM_HELP; - FormTitle = STR_CDROM_TITLE; - Default = mLegacyBootOptionPrivate->MaintainMapData->CurrentNvData.LegacyCD; - break; - - case FORM_NET_BOOT_ID: - OptionMenu = (LEGACY_MENU_OPTION *) &LegacyNETMenu; - Key = (UINT16) LEGACY_NET_QUESTION_ID; - TypeStr = STR_NET; - TypeStrHelp = STR_NET_HELP; - FormTitle = STR_NET_TITLE; - Default = mLegacyBootOptionPrivate->MaintainMapData->CurrentNvData.LegacyNET; - break; - - case FORM_BEV_BOOT_ID: - OptionMenu = (LEGACY_MENU_OPTION *) &LegacyBEVMenu; - Key = (UINT16) LEGACY_BEV_QUESTION_ID; - TypeStr = STR_BEV; - TypeStrHelp = STR_BEV_HELP; - FormTitle = STR_BEV_TITLE; - Default = mLegacyBootOptionPrivate->MaintainMapData->CurrentNvData.LegacyBEV; - break; - - default: - DEBUG ((DEBUG_ERROR, "Invalid command ID for updating page!\n")); - return; + case FORM_FLOPPY_BOOT_ID: + OptionMenu = (LEGACY_MENU_OPTION *)&LegacyFDMenu; + Key = (UINT16)LEGACY_FD_QUESTION_ID; + TypeStr = STR_FLOPPY; + TypeStrHelp = STR_FLOPPY_HELP; + FormTitle = STR_FLOPPY_TITLE; + Default = mLegacyBootOptionPrivate->MaintainMapData->CurrentNvData.LegacyFD; + break; + + case FORM_HARDDISK_BOOT_ID: + OptionMenu = (LEGACY_MENU_OPTION *)&LegacyHDMenu; + Key = (UINT16)LEGACY_HD_QUESTION_ID; + TypeStr = STR_HARDDISK; + TypeStrHelp = STR_HARDDISK_HELP; + FormTitle = STR_HARDDISK_TITLE; + Default = mLegacyBootOptionPrivate->MaintainMapData->CurrentNvData.LegacyHD; + break; + + case FORM_CDROM_BOOT_ID: + OptionMenu = (LEGACY_MENU_OPTION *)&LegacyCDMenu; + Key = (UINT16)LEGACY_CD_QUESTION_ID; + TypeStr = STR_CDROM; + TypeStrHelp = STR_CDROM_HELP; + FormTitle = STR_CDROM_TITLE; + Default = mLegacyBootOptionPrivate->MaintainMapData->CurrentNvData.LegacyCD; + break; + + case FORM_NET_BOOT_ID: + OptionMenu = (LEGACY_MENU_OPTION *)&LegacyNETMenu; + Key = (UINT16)LEGACY_NET_QUESTION_ID; + TypeStr = STR_NET; + TypeStrHelp = STR_NET_HELP; + FormTitle = STR_NET_TITLE; + Default = mLegacyBootOptionPrivate->MaintainMapData->CurrentNvData.LegacyNET; + break; + + case FORM_BEV_BOOT_ID: + OptionMenu = (LEGACY_MENU_OPTION *)&LegacyBEVMenu; + Key = (UINT16)LEGACY_BEV_QUESTION_ID; + TypeStr = STR_BEV; + TypeStrHelp = STR_BEV_HELP; + FormTitle = STR_BEV_TITLE; + Default = mLegacyBootOptionPrivate->MaintainMapData->CurrentNvData.LegacyBEV; + break; + + default: + DEBUG ((DEBUG_ERROR, "Invalid command ID for updating page!\n")); + return; } - HiiSetString (mLegacyBootOptionPrivate->HiiHandle, STRING_TOKEN(STR_ORDER_CHANGE_PROMPT), FormTitle, NULL); + HiiSetString (mLegacyBootOptionPrivate->HiiHandle, STRING_TOKEN (STR_ORDER_CHANGE_PROMPT), FormTitle, NULL); CreateLegacyMenuStringToken (mLegacyBootOptionPrivate->HiiHandle, OptionMenu); OptionsOpCodeHandle = HiiAllocateOpCodeHandle (); ASSERT (OptionsOpCodeHandle != NULL); - for (Index = 0; Index < OptionMenu->MenuNumber; Index++) { NewMenuEntry = GetMenuEntry (OptionMenu, Index); // @@ -830,7 +825,7 @@ UpdateLegacyDeviceOrderPage ( NewMenuEntry->DisplayStringToken, 0, EFI_IFR_TYPE_NUM_SIZE_16, - ((LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->BbsIndex + ((LEGACY_DEVICE_CONTEXT *)NewMenuEntry->VariableContext)->BbsIndex ); } @@ -870,15 +865,15 @@ UpdateLegacyDeviceOrderPage ( HiiCreateOneOfOpCode ( mLegacyStartOpCodeHandle, - (EFI_QUESTION_ID) (Key + Index), + (EFI_QUESTION_ID)(Key + Index), VARSTORE_ID_LEGACY_BOOT, - (UINT16) (Key + Index * 2 - CONFIG_OPTION_OFFSET), + (UINT16)(Key + Index * 2 - CONFIG_OPTION_OFFSET), StrRef, StrRefHelp, EFI_IFR_FLAG_CALLBACK, EFI_IFR_NUMERIC_SIZE_2, OptionsOpCodeHandle, - DefaultOpCodeHandle //NULL // + DefaultOpCodeHandle // NULL // ); HiiFreeOpCodeHandle (DefaultOpCodeHandle); @@ -895,7 +890,6 @@ UpdateLegacyDeviceOrderPage ( HiiFreeOpCodeHandle (OptionsOpCodeHandle); } - /** Adjust question value when one question value has been changed. @@ -905,30 +899,30 @@ UpdateLegacyDeviceOrderPage ( **/ VOID AdjustOptionValue ( - IN UINT16 QuestionId, - IN EFI_IFR_TYPE_VALUE *Value + IN UINT16 QuestionId, + IN EFI_IFR_TYPE_VALUE *Value ) { - UINTN Number; - UINT16 *Default; - LEGACY_BOOT_NV_DATA *CurrentNVMap; - UINT16 *CurrentVal; - UINTN Index; - UINTN Index2; - UINTN Index3; - UINTN NewValuePos; - UINTN OldValue; - UINTN NewValue; - UINT8 *DisMap; - UINTN Pos; - UINTN Bit; - - Number = 0; - CurrentVal = 0; - Default = NULL; - NewValue = 0; + UINTN Number; + UINT16 *Default; + LEGACY_BOOT_NV_DATA *CurrentNVMap; + UINT16 *CurrentVal; + UINTN Index; + UINTN Index2; + UINTN Index3; + UINTN NewValuePos; + UINTN OldValue; + UINTN NewValue; + UINT8 *DisMap; + UINTN Pos; + UINTN Bit; + + Number = 0; + CurrentVal = 0; + Default = NULL; + NewValue = 0; NewValuePos = 0; - OldValue = 0; + OldValue = 0; // // Update Select FD/HD/CD/NET/BEV Order Form @@ -936,29 +930,29 @@ AdjustOptionValue ( ASSERT ((QuestionId >= LEGACY_FD_QUESTION_ID) && (QuestionId < LEGACY_BEV_QUESTION_ID + MAX_MENU_NUMBER)); CurrentNVMap = &mLegacyBootOptionPrivate->MaintainMapData->CurrentNvData; - HiiGetBrowserData (&mLegacyBootOptionGuid, mLegacyBootStorageName, sizeof (LEGACY_BOOT_NV_DATA), (UINT8 *) CurrentNVMap); - DisMap = mLegacyBootOptionPrivate->MaintainMapData->DisableMap; - - if (QuestionId >= LEGACY_FD_QUESTION_ID && QuestionId < LEGACY_FD_QUESTION_ID + MAX_MENU_NUMBER) { - Number = (UINT16) LegacyFDMenu.MenuNumber; - CurrentVal = CurrentNVMap->LegacyFD; - Default = mLegacyBootOptionPrivate->MaintainMapData->LastTimeNvData.LegacyFD; - } else if (QuestionId >= LEGACY_HD_QUESTION_ID && QuestionId < LEGACY_HD_QUESTION_ID + MAX_MENU_NUMBER) { - Number = (UINT16) LegacyHDMenu.MenuNumber; - CurrentVal = CurrentNVMap->LegacyHD; - Default = mLegacyBootOptionPrivate->MaintainMapData->LastTimeNvData.LegacyHD; - } else if (QuestionId >= LEGACY_CD_QUESTION_ID && QuestionId < LEGACY_CD_QUESTION_ID + MAX_MENU_NUMBER) { - Number = (UINT16) LegacyCDMenu.MenuNumber; - CurrentVal = CurrentNVMap->LegacyCD; - Default = mLegacyBootOptionPrivate->MaintainMapData->LastTimeNvData.LegacyCD; - } else if (QuestionId >= LEGACY_NET_QUESTION_ID && QuestionId < LEGACY_NET_QUESTION_ID + MAX_MENU_NUMBER) { - Number = (UINT16) LegacyNETMenu.MenuNumber; - CurrentVal = CurrentNVMap->LegacyNET; - Default = mLegacyBootOptionPrivate->MaintainMapData->LastTimeNvData.LegacyNET; - } else if (QuestionId >= LEGACY_BEV_QUESTION_ID && QuestionId < LEGACY_BEV_QUESTION_ID + MAX_MENU_NUMBER) { - Number = (UINT16) LegacyBEVMenu.MenuNumber; - CurrentVal = CurrentNVMap->LegacyBEV; - Default = mLegacyBootOptionPrivate->MaintainMapData->LastTimeNvData.LegacyBEV; + HiiGetBrowserData (&mLegacyBootOptionGuid, mLegacyBootStorageName, sizeof (LEGACY_BOOT_NV_DATA), (UINT8 *)CurrentNVMap); + DisMap = mLegacyBootOptionPrivate->MaintainMapData->DisableMap; + + if ((QuestionId >= LEGACY_FD_QUESTION_ID) && (QuestionId < LEGACY_FD_QUESTION_ID + MAX_MENU_NUMBER)) { + Number = (UINT16)LegacyFDMenu.MenuNumber; + CurrentVal = CurrentNVMap->LegacyFD; + Default = mLegacyBootOptionPrivate->MaintainMapData->LastTimeNvData.LegacyFD; + } else if ((QuestionId >= LEGACY_HD_QUESTION_ID) && (QuestionId < LEGACY_HD_QUESTION_ID + MAX_MENU_NUMBER)) { + Number = (UINT16)LegacyHDMenu.MenuNumber; + CurrentVal = CurrentNVMap->LegacyHD; + Default = mLegacyBootOptionPrivate->MaintainMapData->LastTimeNvData.LegacyHD; + } else if ((QuestionId >= LEGACY_CD_QUESTION_ID) && (QuestionId < LEGACY_CD_QUESTION_ID + MAX_MENU_NUMBER)) { + Number = (UINT16)LegacyCDMenu.MenuNumber; + CurrentVal = CurrentNVMap->LegacyCD; + Default = mLegacyBootOptionPrivate->MaintainMapData->LastTimeNvData.LegacyCD; + } else if ((QuestionId >= LEGACY_NET_QUESTION_ID) && (QuestionId < LEGACY_NET_QUESTION_ID + MAX_MENU_NUMBER)) { + Number = (UINT16)LegacyNETMenu.MenuNumber; + CurrentVal = CurrentNVMap->LegacyNET; + Default = mLegacyBootOptionPrivate->MaintainMapData->LastTimeNvData.LegacyNET; + } else if ((QuestionId >= LEGACY_BEV_QUESTION_ID) && (QuestionId < LEGACY_BEV_QUESTION_ID + MAX_MENU_NUMBER)) { + Number = (UINT16)LegacyBEVMenu.MenuNumber; + CurrentVal = CurrentNVMap->LegacyBEV; + Default = mLegacyBootOptionPrivate->MaintainMapData->LastTimeNvData.LegacyBEV; } // @@ -967,8 +961,8 @@ AdjustOptionValue ( // for (Index = 0; Index < Number; Index++) { if (CurrentVal[Index] != Default[Index]) { - OldValue = Default[Index]; - NewValue = CurrentVal[Index]; + OldValue = Default[Index]; + NewValue = CurrentVal[Index]; break; } } @@ -982,9 +976,9 @@ AdjustOptionValue ( // This item will be disable // Just move the items behind this forward to overlap it // - Pos = OldValue / 8; - Bit = 7 - (OldValue % 8); - DisMap[Pos] = (UINT8) (DisMap[Pos] | (UINT8) (1 << Bit)); + Pos = OldValue / 8; + Bit = 7 - (OldValue % 8); + DisMap[Pos] = (UINT8)(DisMap[Pos] | (UINT8)(1 << Bit)); for (Index2 = Index; Index2 < Number - 1; Index2++) { CurrentVal[Index2] = CurrentVal[Index2 + 1]; } @@ -1025,27 +1019,28 @@ AdjustOptionValue ( // If NewValue is not in OldlegacyDev array, we are changing to a disabled item // so we should modify DisMap to reflect the change // - Pos = NewValue / 8; - Bit = 7 - (NewValue % 8); - DisMap[Pos] = (UINT8) (DisMap[Pos] & (~ (UINT8) (1 << Bit))); + Pos = NewValue / 8; + Bit = 7 - (NewValue % 8); + DisMap[Pos] = (UINT8)(DisMap[Pos] & (~(UINT8)(1 << Bit))); if (0xFF != OldValue) { // // Because NewValue is a item that was disabled before // so after changing the OldValue should be disabled // actually we are doing a swap of enable-disable states of two items // - Pos = OldValue / 8; - Bit = 7 - (OldValue % 8); - DisMap[Pos] = (UINT8) (DisMap[Pos] | (UINT8) (1 << Bit)); + Pos = OldValue / 8; + Bit = 7 - (OldValue % 8); + DisMap[Pos] = (UINT8)(DisMap[Pos] | (UINT8)(1 << Bit)); } } } + // // To prevent DISABLE appears in the middle of the list // we should perform a re-ordering // Index3 = Index; - Index = 0; + Index = 0; while (Index < Number) { if (0xFF != CurrentVal[Index]) { Index++; @@ -1063,8 +1058,8 @@ AdjustOptionValue ( } if (Index2 < Number) { - CurrentVal[Index] = CurrentVal[Index2]; - CurrentVal[Index2] = 0xFF; + CurrentVal[Index] = CurrentVal[Index2]; + CurrentVal[Index2] = 0xFF; } Index++; @@ -1080,7 +1075,7 @@ AdjustOptionValue ( // // Pass changed uncommitted data back to Form Browser // - HiiSetBrowserData (&mLegacyBootOptionGuid, mLegacyBootStorageName, sizeof (LEGACY_BOOT_NV_DATA), (UINT8 *) CurrentNVMap, NULL); + HiiSetBrowserData (&mLegacyBootOptionGuid, mLegacyBootStorageName, sizeof (LEGACY_BOOT_NV_DATA), (UINT8 *)CurrentNVMap, NULL); } /** @@ -1104,15 +1099,15 @@ AdjustOptionValue ( EFI_STATUS EFIAPI LegacyBootOptionCallback ( - IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, - IN EFI_BROWSER_ACTION Action, - IN EFI_QUESTION_ID QuestionId, - IN UINT8 Type, - IN EFI_IFR_TYPE_VALUE *Value, - OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, + IN EFI_BROWSER_ACTION Action, + IN EFI_QUESTION_ID QuestionId, + IN UINT8 Type, + IN EFI_IFR_TYPE_VALUE *Value, + OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest ) { - if (Action != EFI_BROWSER_ACTION_CHANGED && Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_FORM_OPEN) { + if ((Action != EFI_BROWSER_ACTION_CHANGED) && (Action != EFI_BROWSER_ACTION_CHANGING) && (Action != EFI_BROWSER_ACTION_FORM_OPEN)) { // // Do nothing for other UEFI Action. Only do call back when data is changed or the form is open. // @@ -1140,16 +1135,16 @@ LegacyBootOptionCallback ( if (Action == EFI_BROWSER_ACTION_CHANGING) { switch (QuestionId) { - case FORM_FLOPPY_BOOT_ID: - case FORM_HARDDISK_BOOT_ID: - case FORM_CDROM_BOOT_ID: - case FORM_NET_BOOT_ID: - case FORM_BEV_BOOT_ID: - UpdateLegacyDeviceOrderPage (QuestionId); - break; + case FORM_FLOPPY_BOOT_ID: + case FORM_HARDDISK_BOOT_ID: + case FORM_CDROM_BOOT_ID: + case FORM_NET_BOOT_ID: + case FORM_BEV_BOOT_ID: + UpdateLegacyDeviceOrderPage (QuestionId); + break; - default: - break; + default: + break; } } else if (Action == EFI_BROWSER_ACTION_CHANGED) { if ((Value == NULL) || (ActionRequest == NULL)) { @@ -1157,13 +1152,13 @@ LegacyBootOptionCallback ( } if ((QuestionId >= LEGACY_FD_QUESTION_ID) && (QuestionId < LEGACY_BEV_QUESTION_ID + MAX_MENU_NUMBER)) { - AdjustOptionValue(QuestionId, Value); + AdjustOptionValue (QuestionId, Value); } } + return EFI_SUCCESS; } - /** Create a menu entry by given menu type. @@ -1178,7 +1173,7 @@ CreateMenuEntry ( VOID ) { - LEGACY_MENU_ENTRY *MenuEntry; + LEGACY_MENU_ENTRY *MenuEntry; // // Create new menu entry @@ -1194,7 +1189,7 @@ CreateMenuEntry ( return NULL; } - MenuEntry->Signature = LEGACY_MENU_ENTRY_SIGNATURE; + MenuEntry->Signature = LEGACY_MENU_ENTRY_SIGNATURE; return MenuEntry; } @@ -1208,20 +1203,20 @@ GetLegacyOptionsOrder ( VOID ) { - UINTN VarSize; - UINT8 *VarData; - UINT8 *VarTmp; - LEGACY_DEV_ORDER_ENTRY *DevOrder; - UINT16 *LegacyDev; - UINTN Index; - LEGACY_MENU_OPTION *OptionMenu; - UINT16 VarDevOrder; - UINTN Pos; - UINTN Bit; - UINT8 *DisMap; - UINTN TotalLength; - - LegacyDev = NULL; + UINTN VarSize; + UINT8 *VarData; + UINT8 *VarTmp; + LEGACY_DEV_ORDER_ENTRY *DevOrder; + UINT16 *LegacyDev; + UINTN Index; + LEGACY_MENU_OPTION *OptionMenu; + UINT16 VarDevOrder; + UINTN Pos; + UINTN Bit; + UINT8 *DisMap; + UINTN TotalLength; + + LegacyDev = NULL; OptionMenu = NULL; DisMap = ZeroMem (mLegacyBootOptionPrivate->MaintainMapData->DisableMap, sizeof (mLegacyBootOptionPrivate->MaintainMapData->DisableMap)); @@ -1229,42 +1224,42 @@ GetLegacyOptionsOrder ( // // Get Device Order from variable // - GetVariable2 (VAR_LEGACY_DEV_ORDER, &gEfiLegacyDevOrderVariableGuid, (VOID **) &VarData, &VarSize); + GetVariable2 (VAR_LEGACY_DEV_ORDER, &gEfiLegacyDevOrderVariableGuid, (VOID **)&VarData, &VarSize); VarTmp = VarData; if (NULL != VarData) { - DevOrder = (LEGACY_DEV_ORDER_ENTRY *) VarData; + DevOrder = (LEGACY_DEV_ORDER_ENTRY *)VarData; while (VarData < VarTmp + VarSize) { switch (DevOrder->BbsType) { - case BBS_FLOPPY: - LegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyFD; - OptionMenu = &LegacyFDMenu; - break; + case BBS_FLOPPY: + LegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyFD; + OptionMenu = &LegacyFDMenu; + break; - case BBS_HARDDISK: - LegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyHD; - OptionMenu = &LegacyHDMenu; - break; + case BBS_HARDDISK: + LegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyHD; + OptionMenu = &LegacyHDMenu; + break; - case BBS_CDROM: - LegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyCD; - OptionMenu = &LegacyCDMenu; - break; + case BBS_CDROM: + LegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyCD; + OptionMenu = &LegacyCDMenu; + break; - case BBS_EMBED_NETWORK: - LegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyNET; - OptionMenu = &LegacyNETMenu; - break; + case BBS_EMBED_NETWORK: + LegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyNET; + OptionMenu = &LegacyNETMenu; + break; - case BBS_BEV_DEVICE: - LegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyBEV; - OptionMenu = &LegacyBEVMenu; - break; + case BBS_BEV_DEVICE: + LegacyDev = mLegacyBootOptionPrivate->MaintainMapData->InitialNvData.LegacyBEV; + OptionMenu = &LegacyBEVMenu; + break; - case BBS_UNKNOWN: - default: - ASSERT (FALSE); - DEBUG ((DEBUG_ERROR, "Unsupported device type found!\n")); - break; + case BBS_UNKNOWN: + default: + ASSERT (FALSE); + DEBUG ((DEBUG_ERROR, "Unsupported device type found!\n")); + break; } // @@ -1272,21 +1267,21 @@ GetLegacyOptionsOrder ( // for (Index = 0; Index < OptionMenu->MenuNumber; Index++) { TotalLength = sizeof (BBS_TYPE) + sizeof (UINT16) + Index * sizeof (UINT16); - VarDevOrder = *(UINT16 *) ((UINT8 *) DevOrder + TotalLength); + VarDevOrder = *(UINT16 *)((UINT8 *)DevOrder + TotalLength); if (0xFF00 == (VarDevOrder & 0xFF00)) { - LegacyDev[Index] = 0xFF; - Pos = (VarDevOrder & 0xFF) / 8; - Bit = 7 - ((VarDevOrder & 0xFF) % 8); - DisMap[Pos] = (UINT8) (DisMap[Pos] | (UINT8) (1 << Bit)); + LegacyDev[Index] = 0xFF; + Pos = (VarDevOrder & 0xFF) / 8; + Bit = 7 - ((VarDevOrder & 0xFF) % 8); + DisMap[Pos] = (UINT8)(DisMap[Pos] | (UINT8)(1 << Bit)); } else { LegacyDev[Index] = VarDevOrder & 0xFF; } } - VarData ++; - VarData += *(UINT16 *) VarData; - DevOrder = (LEGACY_DEV_ORDER_ENTRY *) VarData; + VarData++; + VarData += *(UINT16 *)VarData; + DevOrder = (LEGACY_DEV_ORDER_ENTRY *)VarData; } } @@ -1324,11 +1319,11 @@ GetLegacyOptions ( InitializeListHead (&LegacyNETMenu.Head); InitializeListHead (&LegacyBEVMenu.Head); - FDNum = 0; - HDNum = 0; - CDNum = 0; - NETNum = 0; - BEVNum = 0; + FDNum = 0; + HDNum = 0; + CDNum = 0; + NETNum = 0; + BEVNum = 0; EfiBootManagerConnectAll (); @@ -1343,59 +1338,60 @@ GetLegacyOptions ( for (Index = 0; Index < BootOptionCount; Index++) { if ((DevicePathType (BootOption[Index].FilePath) != BBS_DEVICE_PATH) || (DevicePathSubType (BootOption[Index].FilePath) != BBS_BBS_DP) - ) { + ) + { continue; } + ASSERT (BootOption[Index].OptionalDataSize == sizeof (LEGACY_BOOT_OPTION_BBS_DATA)); NewMenuEntry = CreateMenuEntry (); ASSERT (NewMenuEntry != NULL); - NewLegacyDevContext = (LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext; - NewLegacyDevContext->BbsIndex = ((LEGACY_BOOT_OPTION_BBS_DATA *) BootOption[Index].OptionalData)->BbsIndex; + NewLegacyDevContext = (LEGACY_DEVICE_CONTEXT *)NewMenuEntry->VariableContext; + NewLegacyDevContext->BbsIndex = ((LEGACY_BOOT_OPTION_BBS_DATA *)BootOption[Index].OptionalData)->BbsIndex; NewLegacyDevContext->Description = AllocateCopyPool (StrSize (BootOption[Index].Description), BootOption[Index].Description); ASSERT (NewLegacyDevContext->Description != NULL); NewMenuEntry->DisplayString = NewLegacyDevContext->Description; NewMenuEntry->HelpString = NULL; - switch (((BBS_BBS_DEVICE_PATH *) BootOption[Index].FilePath)->DeviceType) { - case BBS_TYPE_FLOPPY: - InsertTailList (&LegacyFDMenu.Head, &NewMenuEntry->Link); - FDNum++; - break; + switch (((BBS_BBS_DEVICE_PATH *)BootOption[Index].FilePath)->DeviceType) { + case BBS_TYPE_FLOPPY: + InsertTailList (&LegacyFDMenu.Head, &NewMenuEntry->Link); + FDNum++; + break; - case BBS_TYPE_HARDDRIVE: - InsertTailList (&LegacyHDMenu.Head, &NewMenuEntry->Link); - HDNum++; - break; + case BBS_TYPE_HARDDRIVE: + InsertTailList (&LegacyHDMenu.Head, &NewMenuEntry->Link); + HDNum++; + break; - case BBS_TYPE_CDROM: - InsertTailList (&LegacyCDMenu.Head, &NewMenuEntry->Link); - CDNum++; - break; + case BBS_TYPE_CDROM: + InsertTailList (&LegacyCDMenu.Head, &NewMenuEntry->Link); + CDNum++; + break; - case BBS_TYPE_EMBEDDED_NETWORK: - InsertTailList (&LegacyNETMenu.Head, &NewMenuEntry->Link); - NETNum++; - break; + case BBS_TYPE_EMBEDDED_NETWORK: + InsertTailList (&LegacyNETMenu.Head, &NewMenuEntry->Link); + NETNum++; + break; - case BBS_TYPE_BEV: - InsertTailList (&LegacyBEVMenu.Head, &NewMenuEntry->Link); - BEVNum++; - break; + case BBS_TYPE_BEV: + InsertTailList (&LegacyBEVMenu.Head, &NewMenuEntry->Link); + BEVNum++; + break; } } EfiBootManagerFreeLoadOptions (BootOption, BootOptionCount); - LegacyFDMenu.MenuNumber = FDNum; - LegacyHDMenu.MenuNumber = HDNum; - LegacyCDMenu.MenuNumber = CDNum; - LegacyNETMenu.MenuNumber = NETNum; - LegacyBEVMenu.MenuNumber = BEVNum; + LegacyFDMenu.MenuNumber = FDNum; + LegacyHDMenu.MenuNumber = HDNum; + LegacyCDMenu.MenuNumber = CDNum; + LegacyNETMenu.MenuNumber = NETNum; + LegacyBEVMenu.MenuNumber = BEVNum; } - /** Install Boot Manager Menu driver. @@ -1410,15 +1406,15 @@ GetLegacyOptions ( EFI_STATUS EFIAPI LegacyBootMaintUiLibConstructor ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_LEGACY_BIOS_PROTOCOL *LegacyBios; LEGACY_BOOT_OPTION_CALLBACK_DATA *LegacyBootOptionData; - Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios); + Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **)&LegacyBios); if (!EFI_ERROR (Status)) { // // Create LegacyBootOptionData structures for Driver Callback @@ -1450,12 +1446,12 @@ LegacyBootMaintUiLibConstructor ( // Publish our HII data // LegacyBootOptionData->HiiHandle = HiiAddPackages ( - &mLegacyBootOptionGuid, - LegacyBootOptionData->DriverHandle, - LegacyBootMaintUiVfrBin, - LegacyBootMaintUiLibStrings, - NULL - ); + &mLegacyBootOptionGuid, + LegacyBootOptionData->DriverHandle, + LegacyBootMaintUiVfrBin, + LegacyBootMaintUiLibStrings, + NULL + ); ASSERT (LegacyBootOptionData->HiiHandle != NULL); mLegacyBootOptionPrivate = LegacyBootOptionData; @@ -1481,9 +1477,9 @@ LegacyBootMaintUiLibDestructor ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; + EFI_STATUS Status; - if (mLegacyBootOptionPrivate != NULL && mLegacyBootOptionPrivate->DriverHandle != NULL) { + if ((mLegacyBootOptionPrivate != NULL) && (mLegacyBootOptionPrivate->DriverHandle != NULL)) { Status = gBS->UninstallMultipleProtocolInterfaces ( mLegacyBootOptionPrivate->DriverHandle, &gEfiDevicePathProtocolGuid, @@ -1502,4 +1498,3 @@ LegacyBootMaintUiLibDestructor ( return EFI_SUCCESS; } - diff --git a/OvmfPkg/Csm/LegacyBootMaintUiLib/LegacyBootMaintUi.h b/OvmfPkg/Csm/LegacyBootMaintUiLib/LegacyBootMaintUi.h index 87290294df..65aa89327a 100644 --- a/OvmfPkg/Csm/LegacyBootMaintUiLib/LegacyBootMaintUi.h +++ b/OvmfPkg/Csm/LegacyBootMaintUiLib/LegacyBootMaintUi.h @@ -6,13 +6,11 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ - #ifndef _EFI_LEGACY_BOOT_OPTION_H_ #define _EFI_LEGACY_BOOT_OPTION_H_ #include - #include #include #include @@ -38,42 +36,40 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include "LegacyBootMaintUiVfr.h" -#define CONFIG_OPTION_OFFSET 0x1200 +#define CONFIG_OPTION_OFFSET 0x1200 // // VarOffset that will be used to create question // all these values are computed from the structure // defined below // -#define VAR_OFFSET(Field) ((UINT16) ((UINTN) &(((LEGACY_BOOT_NV_DATA *) 0)->Field))) +#define VAR_OFFSET(Field) ((UINT16) ((UINTN) &(((LEGACY_BOOT_NV_DATA *) 0)->Field))) // // Question Id of Zero is invalid, so add an offset to it // -#define QUESTION_ID(Field) (VAR_OFFSET (Field) + CONFIG_OPTION_OFFSET) - - -#define LEGACY_FD_QUESTION_ID QUESTION_ID (LegacyFD) -#define LEGACY_HD_QUESTION_ID QUESTION_ID (LegacyHD) -#define LEGACY_CD_QUESTION_ID QUESTION_ID (LegacyCD) -#define LEGACY_NET_QUESTION_ID QUESTION_ID (LegacyNET) -#define LEGACY_BEV_QUESTION_ID QUESTION_ID (LegacyBEV) +#define QUESTION_ID(Field) (VAR_OFFSET (Field) + CONFIG_OPTION_OFFSET) +#define LEGACY_FD_QUESTION_ID QUESTION_ID (LegacyFD) +#define LEGACY_HD_QUESTION_ID QUESTION_ID (LegacyHD) +#define LEGACY_CD_QUESTION_ID QUESTION_ID (LegacyCD) +#define LEGACY_NET_QUESTION_ID QUESTION_ID (LegacyNET) +#define LEGACY_BEV_QUESTION_ID QUESTION_ID (LegacyBEV) // // String Constant // -#define STR_FLOPPY L"Floppy Drive #%02x" -#define STR_HARDDISK L"HardDisk Drive #%02x" -#define STR_CDROM L"ATAPI CDROM Drive #%02x" -#define STR_NET L"NET Drive #%02x" -#define STR_BEV L"BEV Drive #%02x" - -#define STR_FLOPPY_HELP L"Select Floppy Drive #%02x" -#define STR_HARDDISK_HELP L"Select HardDisk Drive #%02x" -#define STR_CDROM_HELP L"Select ATAPI CDROM Drive #%02x" -#define STR_NET_HELP L"NET Drive #%02x" -#define STR_BEV_HELP L"BEV Drive #%02x" +#define STR_FLOPPY L"Floppy Drive #%02x" +#define STR_HARDDISK L"HardDisk Drive #%02x" +#define STR_CDROM L"ATAPI CDROM Drive #%02x" +#define STR_NET L"NET Drive #%02x" +#define STR_BEV L"BEV Drive #%02x" + +#define STR_FLOPPY_HELP L"Select Floppy Drive #%02x" +#define STR_HARDDISK_HELP L"Select HardDisk Drive #%02x" +#define STR_CDROM_HELP L"Select ATAPI CDROM Drive #%02x" +#define STR_NET_HELP L"NET Drive #%02x" +#define STR_BEV_HELP L"BEV Drive #%02x" #define STR_FLOPPY_TITLE L"Set Legacy Floppy Drive Order" #define STR_HARDDISK_TITLE L"Set Legacy HardDisk Drive Order" @@ -84,7 +80,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // // These are the VFR compiler generated data representing our VFR data. // -extern UINT8 LegacyBootMaintUiVfrBin[]; +extern UINT8 LegacyBootMaintUiVfrBin[]; #pragma pack(1) @@ -92,52 +88,49 @@ extern UINT8 LegacyBootMaintUiVfrBin[]; /// HII specific Vendor Device Path definition. /// typedef struct { - VENDOR_DEVICE_PATH VendorDevicePath; - EFI_DEVICE_PATH_PROTOCOL End; + VENDOR_DEVICE_PATH VendorDevicePath; + EFI_DEVICE_PATH_PROTOCOL End; } HII_VENDOR_DEVICE_PATH; - - // // Variable created with this flag will be "Efi:...." // #define VAR_FLAG EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE - #define LEGACY_BOOT_OPTION_CALLBACK_DATA_SIGNATURE SIGNATURE_32 ('L', 'G', 'C', 'B') typedef struct { - UINTN Signature; + UINTN Signature; // // HII relative handles // - EFI_HII_HANDLE HiiHandle; - EFI_HANDLE DriverHandle; + EFI_HII_HANDLE HiiHandle; + EFI_HANDLE DriverHandle; // // Produced protocols // - EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess; + EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess; // // Maintain the data. // - LEGACY_BOOT_MAINTAIN_DATA *MaintainMapData; + LEGACY_BOOT_MAINTAIN_DATA *MaintainMapData; } LEGACY_BOOT_OPTION_CALLBACK_DATA; // // All of the signatures that will be used in list structure // -#define LEGACY_MENU_OPTION_SIGNATURE SIGNATURE_32 ('m', 'e', 'n', 'u') -#define LEGACY_MENU_ENTRY_SIGNATURE SIGNATURE_32 ('e', 'n', 't', 'r') +#define LEGACY_MENU_OPTION_SIGNATURE SIGNATURE_32 ('m', 'e', 'n', 'u') +#define LEGACY_MENU_ENTRY_SIGNATURE SIGNATURE_32 ('e', 'n', 't', 'r') #define LEGACY_LEGACY_DEV_CONTEXT_SELECT 0x9 typedef struct { - UINTN Signature; - LIST_ENTRY Head; - UINTN MenuNumber; + UINTN Signature; + LIST_ENTRY Head; + UINTN MenuNumber; } LEGACY_MENU_OPTION; typedef struct { @@ -146,18 +139,18 @@ typedef struct { } LEGACY_DEVICE_CONTEXT; typedef struct { - UINTN Signature; - LIST_ENTRY Link; - UINTN OptionNumber; - UINT16 *DisplayString; - UINT16 *HelpString; - EFI_STRING_ID DisplayStringToken; - EFI_STRING_ID HelpStringToken; - VOID *VariableContext; + UINTN Signature; + LIST_ENTRY Link; + UINTN OptionNumber; + UINT16 *DisplayString; + UINT16 *HelpString; + EFI_STRING_ID DisplayStringToken; + EFI_STRING_ID HelpStringToken; + VOID *VariableContext; } LEGACY_MENU_ENTRY; typedef struct { - UINT16 BbsIndex; + UINT16 BbsIndex; } LEGACY_BOOT_OPTION_BBS_DATA; #pragma pack() @@ -183,12 +176,12 @@ typedef struct { EFI_STATUS EFIAPI LegacyBootOptionCallback ( - IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, - IN EFI_BROWSER_ACTION Action, - IN EFI_QUESTION_ID QuestionId, - IN UINT8 Type, - IN EFI_IFR_TYPE_VALUE *Value, - OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, + IN EFI_BROWSER_ACTION Action, + IN EFI_QUESTION_ID QuestionId, + IN UINT8 Type, + IN EFI_IFR_TYPE_VALUE *Value, + OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest ); /** @@ -216,10 +209,10 @@ LegacyBootOptionCallback ( EFI_STATUS EFIAPI LegacyBootOptionExtractConfig ( - IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, - IN CONST EFI_STRING Request, - OUT EFI_STRING *Progress, - OUT EFI_STRING *Results + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, + IN CONST EFI_STRING Request, + OUT EFI_STRING *Progress, + OUT EFI_STRING *Results ); /** @@ -241,9 +234,9 @@ LegacyBootOptionExtractConfig ( EFI_STATUS EFIAPI LegacyBootOptionRouteConfig ( - IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, - IN CONST EFI_STRING Configuration, - OUT EFI_STRING *Progress + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, + IN CONST EFI_STRING Configuration, + OUT EFI_STRING *Progress ); #endif diff --git a/OvmfPkg/Csm/LegacyBootMaintUiLib/LegacyBootMaintUiVfr.h b/OvmfPkg/Csm/LegacyBootMaintUiLib/LegacyBootMaintUiVfr.h index 1335486574..7c751fc73c 100644 --- a/OvmfPkg/Csm/LegacyBootMaintUiLib/LegacyBootMaintUiVfr.h +++ b/OvmfPkg/Csm/LegacyBootMaintUiLib/LegacyBootMaintUiVfr.h @@ -6,34 +6,28 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ - #ifndef _EFI_LEGACY_BOOT_OPTION_VFR_H_ #define _EFI_LEGACY_BOOT_OPTION_VFR_H_ #include -#define MAX_MENU_NUMBER 100 +#define MAX_MENU_NUMBER 100 #define LEGACY_BOOT_OPTION_FORMSET_GUID { 0x6bc75598, 0x89b4, 0x483d, { 0x91, 0x60, 0x7f, 0x46, 0x9a, 0x96, 0x35, 0x31 } } -#define VARSTORE_ID_LEGACY_BOOT 0x0001 - +#define VARSTORE_ID_LEGACY_BOOT 0x0001 #define LEGACY_BOOT_FORM_ID 0x1000 #define LEGACY_ORDER_CHANGE_FORM_ID 0x1001 +#define FORM_FLOPPY_BOOT_ID 0x2000 +#define FORM_HARDDISK_BOOT_ID 0x2001 +#define FORM_CDROM_BOOT_ID 0x2002 +#define FORM_NET_BOOT_ID 0x2003 +#define FORM_BEV_BOOT_ID 0x2004 -#define FORM_FLOPPY_BOOT_ID 0x2000 -#define FORM_HARDDISK_BOOT_ID 0x2001 -#define FORM_CDROM_BOOT_ID 0x2002 -#define FORM_NET_BOOT_ID 0x2003 -#define FORM_BEV_BOOT_ID 0x2004 - - - -#define FORM_BOOT_LEGACY_DEVICE_ID 0x9000 -#define FORM_BOOT_LEGACY_LABEL_END 0x9001 - +#define FORM_BOOT_LEGACY_DEVICE_ID 0x9000 +#define FORM_BOOT_LEGACY_LABEL_END 0x9001 #pragma pack(1) @@ -49,11 +43,11 @@ typedef struct { // // Legacy Device Order Selection Storage // - UINT16 LegacyFD[MAX_MENU_NUMBER]; - UINT16 LegacyHD[MAX_MENU_NUMBER]; - UINT16 LegacyCD[MAX_MENU_NUMBER]; - UINT16 LegacyNET[MAX_MENU_NUMBER]; - UINT16 LegacyBEV[MAX_MENU_NUMBER]; + UINT16 LegacyFD[MAX_MENU_NUMBER]; + UINT16 LegacyHD[MAX_MENU_NUMBER]; + UINT16 LegacyCD[MAX_MENU_NUMBER]; + UINT16 LegacyNET[MAX_MENU_NUMBER]; + UINT16 LegacyBEV[MAX_MENU_NUMBER]; } LEGACY_BOOT_NV_DATA; /// @@ -68,10 +62,10 @@ typedef struct { // // Legacy Device Order Selection Storage // - LEGACY_BOOT_NV_DATA InitialNvData; - LEGACY_BOOT_NV_DATA CurrentNvData; - LEGACY_BOOT_NV_DATA LastTimeNvData; - UINT8 DisableMap[32]; + LEGACY_BOOT_NV_DATA InitialNvData; + LEGACY_BOOT_NV_DATA CurrentNvData; + LEGACY_BOOT_NV_DATA LastTimeNvData; + UINT8 DisableMap[32]; } LEGACY_BOOT_MAINTAIN_DATA; #pragma pack() diff --git a/OvmfPkg/Csm/LegacyBootManagerLib/InternalLegacyBm.h b/OvmfPkg/Csm/LegacyBootManagerLib/InternalLegacyBm.h index 292e2c1e7a..8dd8b884d3 100644 --- a/OvmfPkg/Csm/LegacyBootManagerLib/InternalLegacyBm.h +++ b/OvmfPkg/Csm/LegacyBootManagerLib/InternalLegacyBm.h @@ -28,7 +28,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #pragma pack(1) typedef struct { - UINT16 BbsIndex; + UINT16 BbsIndex; } LEGACY_BM_BOOT_OPTION_BBS_DATA; #pragma pack() @@ -44,7 +44,7 @@ typedef struct { VOID EFIAPI LegacyBmBoot ( - IN EFI_BOOT_MANAGER_LOAD_OPTION *BootOption + IN EFI_BOOT_MANAGER_LOAD_OPTION *BootOption ); /** diff --git a/OvmfPkg/Csm/LegacyBootManagerLib/LegacyBm.c b/OvmfPkg/Csm/LegacyBootManagerLib/LegacyBm.c index cd0e02060f..032aacba68 100644 --- a/OvmfPkg/Csm/LegacyBootManagerLib/LegacyBm.c +++ b/OvmfPkg/Csm/LegacyBootManagerLib/LegacyBm.c @@ -25,9 +25,9 @@ SPDX-License-Identifier: BSD-2-Clause-Patent EFI_STATUS EFIAPI LegacyBootManagerLibConstructor ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable -) + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) { EfiBootManagerRegisterLegacyBootSupport ( LegacyBmRefreshAllBootOption, @@ -45,12 +45,14 @@ LegacyBootManagerLibConstructor ( **/ UINT16 LegacyBmDeviceType ( - EFI_DEVICE_PATH_PROTOCOL *DevicePath + EFI_DEVICE_PATH_PROTOCOL *DevicePath ) { - ASSERT ((DevicePathType (DevicePath) == BBS_DEVICE_PATH) && - (DevicePathSubType (DevicePath) == BBS_BBS_DP)); - return ((BBS_BBS_DEVICE_PATH *) DevicePath)->DeviceType; + ASSERT ( + (DevicePathType (DevicePath) == BBS_DEVICE_PATH) && + (DevicePathSubType (DevicePath) == BBS_BBS_DP) + ); + return ((BBS_BBS_DEVICE_PATH *)DevicePath)->DeviceType; } /** @@ -63,7 +65,7 @@ LegacyBmDeviceType ( **/ BOOLEAN LegacyBmValidBbsEntry ( - IN BBS_TABLE *BbsEntry + IN BBS_TABLE *BbsEntry ) { switch (BbsEntry->BootPriority) { @@ -87,10 +89,10 @@ LegacyBmValidBbsEntry ( **/ VOID LegacyBmBuildLegacyDevNameString ( - IN BBS_TABLE *CurBBSEntry, - IN UINTN Index, - IN UINTN BufSize, - OUT CHAR16 *BootString + IN BBS_TABLE *CurBBSEntry, + IN UINTN Index, + IN UINTN BufSize, + OUT CHAR16 *BootString ) { CHAR16 *Fmt; @@ -100,77 +102,78 @@ LegacyBmBuildLegacyDevNameString ( CHAR16 StringBufferU[LEGACY_BM_BOOT_DESCRIPTION_LENGTH + 1]; switch (Index) { - // - // Primary Master - // - case 1: - Fmt = L"Primary Master %s"; - break; + // + // Primary Master + // + case 1: + Fmt = L"Primary Master %s"; + break; - // - // Primary Slave - // - case 2: - Fmt = L"Primary Slave %s"; - break; + // + // Primary Slave + // + case 2: + Fmt = L"Primary Slave %s"; + break; - // - // Secondary Master - // - case 3: - Fmt = L"Secondary Master %s"; - break; + // + // Secondary Master + // + case 3: + Fmt = L"Secondary Master %s"; + break; - // - // Secondary Slave - // - case 4: - Fmt = L"Secondary Slave %s"; - break; + // + // Secondary Slave + // + case 4: + Fmt = L"Secondary Slave %s"; + break; - default: - Fmt = L"%s"; - break; + default: + Fmt = L"%s"; + break; } switch (CurBBSEntry->DeviceType) { - case BBS_FLOPPY: - Type = L"Floppy"; - break; - - case BBS_HARDDISK: - Type = L"Harddisk"; - break; - - case BBS_CDROM: - Type = L"CDROM"; - break; - - case BBS_PCMCIA: - Type = L"PCMCIAe"; - break; - - case BBS_USB: - Type = L"USB"; - break; - - case BBS_EMBED_NETWORK: - Type = L"Network"; - break; - - case BBS_BEV_DEVICE: - Type = L"BEVe"; - break; - - case BBS_UNKNOWN: - default: - Type = L"Unknown"; - break; + case BBS_FLOPPY: + Type = L"Floppy"; + break; + + case BBS_HARDDISK: + Type = L"Harddisk"; + break; + + case BBS_CDROM: + Type = L"CDROM"; + break; + + case BBS_PCMCIA: + Type = L"PCMCIAe"; + break; + + case BBS_USB: + Type = L"USB"; + break; + + case BBS_EMBED_NETWORK: + Type = L"Network"; + break; + + case BBS_BEV_DEVICE: + Type = L"BEVe"; + break; + + case BBS_UNKNOWN: + default: + Type = L"Unknown"; + break; } + // // If current BBS entry has its description then use it. // - StringDesc = (CHAR8 *) (((UINTN) CurBBSEntry->DescStringSegment << 4) + CurBBSEntry->DescStringOffset); + StringDesc = (CHAR8 *)(((UINTN)CurBBSEntry->DescStringSegment << 4) + CurBBSEntry->DescStringOffset); if (NULL != StringDesc) { // // Only get first 32 characters, this is suggested by BBS spec @@ -178,15 +181,15 @@ LegacyBmBuildLegacyDevNameString ( CopyMem (StringBufferA, StringDesc, LEGACY_BM_BOOT_DESCRIPTION_LENGTH); StringBufferA[LEGACY_BM_BOOT_DESCRIPTION_LENGTH] = 0; AsciiStrToUnicodeStrS (StringBufferA, StringBufferU, ARRAY_SIZE (StringBufferU)); - Fmt = L"%s"; - Type = StringBufferU; + Fmt = L"%s"; + Type = StringBufferU; } // // BbsTable 16 entries are for onboard IDE. // Set description string for SATA harddisks, Harddisk 0 ~ Harddisk 11 // - if (Index >= 5 && Index <= 16 && (CurBBSEntry->DeviceType == BBS_HARDDISK || CurBBSEntry->DeviceType == BBS_CDROM)) { + if ((Index >= 5) && (Index <= 16) && ((CurBBSEntry->DeviceType == BBS_HARDDISK) || (CurBBSEntry->DeviceType == BBS_CDROM))) { Fmt = L"%s %d"; UnicodeSPrint (BootString, BufSize, Fmt, Type, Index - 5); } else { @@ -206,23 +209,24 @@ LegacyBmBuildLegacyDevNameString ( **/ UINT16 LegacyBmFuzzyMatch ( - EFI_BOOT_MANAGER_LOAD_OPTION *BootOption, - BBS_TABLE *BbsTable, - UINT16 BbsCount, - BOOLEAN *BbsIndexUsed + EFI_BOOT_MANAGER_LOAD_OPTION *BootOption, + BBS_TABLE *BbsTable, + UINT16 BbsCount, + BOOLEAN *BbsIndexUsed ) { - UINT16 Index; - LEGACY_BM_BOOT_OPTION_BBS_DATA *BbsData; - CHAR16 Description[LEGACY_BM_BOOT_DESCRIPTION_LENGTH + 1]; + UINT16 Index; + LEGACY_BM_BOOT_OPTION_BBS_DATA *BbsData; + CHAR16 Description[LEGACY_BM_BOOT_DESCRIPTION_LENGTH + 1]; - BbsData = (LEGACY_BM_BOOT_OPTION_BBS_DATA *) BootOption->OptionalData; + BbsData = (LEGACY_BM_BOOT_OPTION_BBS_DATA *)BootOption->OptionalData; // // Directly check the BBS index stored in BootOption // if ((BbsData->BbsIndex < BbsCount) && - (LegacyBmDeviceType (BootOption->FilePath) == BbsTable[BbsData->BbsIndex].DeviceType)) { + (LegacyBmDeviceType (BootOption->FilePath) == BbsTable[BbsData->BbsIndex].DeviceType)) + { LegacyBmBuildLegacyDevNameString ( &BbsTable[BbsData->BbsIndex], BbsData->BbsIndex, @@ -246,7 +250,8 @@ LegacyBmFuzzyMatch ( // for (Index = 0; Index < BbsCount; Index++) { if (!LegacyBmValidBbsEntry (&BbsTable[Index]) || - (BbsTable[Index].DeviceType != LegacyBmDeviceType (BootOption->FilePath))) { + (BbsTable[Index].DeviceType != LegacyBmDeviceType (BootOption->FilePath))) + { continue; } @@ -289,44 +294,48 @@ LegacyBmFuzzyMatch ( **/ VOID LegacyBmUpdateBbsIndex ( - LEGACY_DEV_ORDER_ENTRY *LegacyDevOrder, - UINTN *LegacyDevOrderSize, - UINT16 DeviceType, - UINT16 OldBbsIndex, - UINT16 NewBbsIndex // Delete entry if -1 + LEGACY_DEV_ORDER_ENTRY *LegacyDevOrder, + UINTN *LegacyDevOrderSize, + UINT16 DeviceType, + UINT16 OldBbsIndex, + UINT16 NewBbsIndex // Delete entry if -1 ) { - LEGACY_DEV_ORDER_ENTRY *Entry; - UINTN Index; + LEGACY_DEV_ORDER_ENTRY *Entry; + UINTN Index; - ASSERT (((LegacyDevOrder == NULL) && (*LegacyDevOrderSize == 0)) || - ((LegacyDevOrder != NULL) && (*LegacyDevOrderSize != 0)) - ); + ASSERT ( + ((LegacyDevOrder == NULL) && (*LegacyDevOrderSize == 0)) || + ((LegacyDevOrder != NULL) && (*LegacyDevOrderSize != 0)) + ); for (Entry = LegacyDevOrder; - Entry < (LEGACY_DEV_ORDER_ENTRY *) ((UINT8 *) LegacyDevOrder + *LegacyDevOrderSize); - Entry = (LEGACY_DEV_ORDER_ENTRY *) ((UINTN) Entry + sizeof (BBS_TYPE) + Entry->Length) - ) { + Entry < (LEGACY_DEV_ORDER_ENTRY *)((UINT8 *)LegacyDevOrder + *LegacyDevOrderSize); + Entry = (LEGACY_DEV_ORDER_ENTRY *)((UINTN)Entry + sizeof (BBS_TYPE) + Entry->Length) + ) + { if (Entry->BbsType == DeviceType) { for (Index = 0; Index < Entry->Length / sizeof (UINT16) - 1; Index++) { if (Entry->Data[Index] == OldBbsIndex) { - if (NewBbsIndex == (UINT16) -1) { + if (NewBbsIndex == (UINT16)-1) { // // Delete the old entry // CopyMem ( &Entry->Data[Index], &Entry->Data[Index + 1], - (UINT8 *) LegacyDevOrder + *LegacyDevOrderSize - (UINT8 *) &Entry->Data[Index + 1] + (UINT8 *)LegacyDevOrder + *LegacyDevOrderSize - (UINT8 *)&Entry->Data[Index + 1] ); Entry->Length -= sizeof (UINT16); - *LegacyDevOrderSize -= sizeof(UINT16); + *LegacyDevOrderSize -= sizeof (UINT16); } else { - Entry->Data[Index] = NewBbsIndex; + Entry->Data[Index] = NewBbsIndex; } + break; } } + break; } } @@ -350,7 +359,8 @@ LegacyBmDeleteAllBootOptions ( BootOption = EfiBootManagerGetLoadOptions (&BootOptionCount, LoadOptionTypeBoot); for (Index = 0; Index < BootOptionCount; Index++) { if ((DevicePathType (BootOption[Index].FilePath) == BBS_DEVICE_PATH) && - (DevicePathSubType (BootOption[Index].FilePath) == BBS_BBS_DP)) { + (DevicePathSubType (BootOption[Index].FilePath) == BBS_BBS_DP)) + { Status = EfiBootManagerDeleteLoadOptionVariable (BootOption[Index].OptionNumber, BootOption[Index].OptionType); // // Deleting variable with current variable implementation shouldn't fail. @@ -374,7 +384,6 @@ LegacyBmDeleteAllBootOptions ( return EFI_SUCCESS; } - /** Delete all the invalid legacy boot options. @@ -401,12 +410,12 @@ LegacyBmDeleteAllInvalidBootOptions ( UINTN LegacyDevOrderSize; BOOLEAN *BbsIndexUsed; - HddCount = 0; - BbsCount = 0; - HddInfo = NULL; - BbsTable = NULL; + HddCount = 0; + BbsCount = 0; + HddInfo = NULL; + BbsTable = NULL; - Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios); + Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **)&LegacyBios); if (EFI_ERROR (Status)) { return Status; } @@ -422,7 +431,7 @@ LegacyBmDeleteAllInvalidBootOptions ( return Status; } - GetVariable2 (VAR_LEGACY_DEV_ORDER, &gEfiLegacyDevOrderVariableGuid, (VOID **) &LegacyDevOrder, &LegacyDevOrderSize); + GetVariable2 (VAR_LEGACY_DEV_ORDER, &gEfiLegacyDevOrderVariableGuid, (VOID **)&LegacyDevOrder, &LegacyDevOrderSize); BootOption = EfiBootManagerGetLoadOptions (&BootOptionCount, LoadOptionTypeBoot); @@ -434,13 +443,14 @@ LegacyBmDeleteAllInvalidBootOptions ( // Skip non legacy boot option // if ((DevicePathType (BootOption[Index].FilePath) != BBS_DEVICE_PATH) || - (DevicePathSubType (BootOption[Index].FilePath) != BBS_BBS_DP)) { + (DevicePathSubType (BootOption[Index].FilePath) != BBS_BBS_DP)) + { continue; } BbsIndex = LegacyBmFuzzyMatch (&BootOption[Index], BbsTable, BbsCount, BbsIndexUsed); if (BbsIndex == BbsCount) { - DEBUG ((DEBUG_INFO, "[LegacyBds] Delete Boot Option Boot%04x: %s\n", (UINTN) BootOption[Index].OptionNumber, BootOption[Index].Description)); + DEBUG ((DEBUG_INFO, "[LegacyBds] Delete Boot Option Boot%04x: %s\n", (UINTN)BootOption[Index].OptionNumber, BootOption[Index].Description)); // // Delete entry from LegacyDevOrder // @@ -448,14 +458,20 @@ LegacyBmDeleteAllInvalidBootOptions ( LegacyDevOrder, &LegacyDevOrderSize, LegacyBmDeviceType (BootOption[Index].FilePath), - ((LEGACY_BM_BOOT_OPTION_BBS_DATA *) BootOption[Index].OptionalData)->BbsIndex, - (UINT16) -1 + ((LEGACY_BM_BOOT_OPTION_BBS_DATA *)BootOption[Index].OptionalData)->BbsIndex, + (UINT16)-1 ); EfiBootManagerDeleteLoadOptionVariable (BootOption[Index].OptionNumber, BootOption[Index].OptionType); } else { - if (((LEGACY_BM_BOOT_OPTION_BBS_DATA *) BootOption[Index].OptionalData)->BbsIndex != BbsIndex) { - DEBUG ((DEBUG_INFO, "[LegacyBds] Update Boot Option Boot%04x: %s Bbs0x%04x->Bbs0x%04x\n", (UINTN) BootOption[Index].OptionNumber, BootOption[Index].Description, - (UINTN) ((LEGACY_BM_BOOT_OPTION_BBS_DATA *) BootOption[Index].OptionalData)->BbsIndex, (UINTN) BbsIndex)); + if (((LEGACY_BM_BOOT_OPTION_BBS_DATA *)BootOption[Index].OptionalData)->BbsIndex != BbsIndex) { + DEBUG (( + DEBUG_INFO, + "[LegacyBds] Update Boot Option Boot%04x: %s Bbs0x%04x->Bbs0x%04x\n", + (UINTN)BootOption[Index].OptionNumber, + BootOption[Index].Description, + (UINTN)((LEGACY_BM_BOOT_OPTION_BBS_DATA *)BootOption[Index].OptionalData)->BbsIndex, + (UINTN)BbsIndex + )); // // Update the BBS index in LegacyDevOrder // @@ -463,18 +479,19 @@ LegacyBmDeleteAllInvalidBootOptions ( LegacyDevOrder, &LegacyDevOrderSize, LegacyBmDeviceType (BootOption[Index].FilePath), - ((LEGACY_BM_BOOT_OPTION_BBS_DATA *) BootOption[Index].OptionalData)->BbsIndex, + ((LEGACY_BM_BOOT_OPTION_BBS_DATA *)BootOption[Index].OptionalData)->BbsIndex, BbsIndex ); // // Update the OptionalData in the Boot#### variable // - ((LEGACY_BM_BOOT_OPTION_BBS_DATA *) BootOption[Index].OptionalData)->BbsIndex = BbsIndex; + ((LEGACY_BM_BOOT_OPTION_BBS_DATA *)BootOption[Index].OptionalData)->BbsIndex = BbsIndex; EfiBootManagerLoadOptionToVariable (&BootOption[Index]); } } } + EfiBootManagerFreeLoadOptions (BootOption, BootOptionCount); if (LegacyDevOrder != NULL) { @@ -492,7 +509,8 @@ LegacyBmDeleteAllInvalidBootOptions ( FreePool (LegacyDevOrder); } - FreePool(BbsIndexUsed); + + FreePool (BbsIndexUsed); return Status; } @@ -514,13 +532,13 @@ LegacyBmCreateLegacyBootOption ( IN UINT16 BbsIndex ) { - EFI_STATUS Status; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - CHAR16 Description[LEGACY_BM_BOOT_DESCRIPTION_LENGTH + 1]; - CHAR8 HelpString[LEGACY_BM_BOOT_DESCRIPTION_LENGTH + 1]; - UINTN StringLen; + EFI_STATUS Status; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + CHAR16 Description[LEGACY_BM_BOOT_DESCRIPTION_LENGTH + 1]; + CHAR8 HelpString[LEGACY_BM_BOOT_DESCRIPTION_LENGTH + 1]; + UINTN StringLen; LEGACY_BM_BOOT_OPTION_BBS_DATA *OptionalData; - BBS_BBS_DEVICE_PATH *BbsNode; + BBS_BBS_DEVICE_PATH *BbsNode; if ((BootOption == NULL) || (BbsEntry == NULL)) { return EFI_INVALID_PARAMETER; @@ -532,11 +550,11 @@ LegacyBmCreateLegacyBootOption ( // Create the BBS device path with description string // UnicodeStrToAsciiStrS (Description, HelpString, sizeof (HelpString)); - StringLen = AsciiStrLen (HelpString); + StringLen = AsciiStrLen (HelpString); DevicePath = AllocatePool (sizeof (BBS_BBS_DEVICE_PATH) + StringLen + END_DEVICE_PATH_LENGTH); ASSERT (DevicePath != NULL); - BbsNode = (BBS_BBS_DEVICE_PATH *) DevicePath; + BbsNode = (BBS_BBS_DEVICE_PATH *)DevicePath; SetDevicePathNodeLength (BbsNode, sizeof (BBS_BBS_DEVICE_PATH) + StringLen); BbsNode->Header.Type = BBS_DEVICE_PATH; BbsNode->Header.SubType = BBS_BBS_DP; @@ -563,7 +581,7 @@ LegacyBmCreateLegacyBootOption ( LOAD_OPTION_ACTIVE, Description, DevicePath, - (UINT8 *) OptionalData, + (UINT8 *)OptionalData, sizeof (LEGACY_BM_BOOT_OPTION_BBS_DATA) ); FreePool (DevicePath); @@ -585,13 +603,13 @@ LegacyBmCreateLegacyBootOption ( **/ UINT16 * LegacyBmFillDevOrderBuf ( - IN BBS_TABLE *BbsTable, - IN BBS_TYPE BbsType, - IN UINTN BbsCount, - OUT UINT16 *Buf + IN BBS_TABLE *BbsTable, + IN BBS_TYPE BbsType, + IN UINTN BbsCount, + OUT UINT16 *Buf ) { - UINTN Index; + UINTN Index; for (Index = 0; Index < BbsCount; Index++) { if (!LegacyBmValidBbsEntry (&BbsTable[Index])) { @@ -602,7 +620,7 @@ LegacyBmFillDevOrderBuf ( continue; } - *Buf = (UINT16) (Index & 0xFF); + *Buf = (UINT16)(Index & 0xFF); Buf++; } @@ -624,31 +642,31 @@ LegacyBmFillDevOrderBuf ( **/ EFI_STATUS LegacyBmCreateDevOrder ( - IN BBS_TABLE *BbsTable, - IN UINT16 BbsCount + IN BBS_TABLE *BbsTable, + IN UINT16 BbsCount ) { - UINTN Index; - UINTN FDCount; - UINTN HDCount; - UINTN CDCount; - UINTN NETCount; - UINTN BEVCount; - UINTN TotalSize; - UINTN HeaderSize; - LEGACY_DEV_ORDER_ENTRY *DevOrder; - LEGACY_DEV_ORDER_ENTRY *DevOrderPtr; - EFI_STATUS Status; - - FDCount = 0; - HDCount = 0; - CDCount = 0; - NETCount = 0; - BEVCount = 0; - TotalSize = 0; - HeaderSize = sizeof (BBS_TYPE) + sizeof (UINT16); - DevOrder = NULL; - Status = EFI_SUCCESS; + UINTN Index; + UINTN FDCount; + UINTN HDCount; + UINTN CDCount; + UINTN NETCount; + UINTN BEVCount; + UINTN TotalSize; + UINTN HeaderSize; + LEGACY_DEV_ORDER_ENTRY *DevOrder; + LEGACY_DEV_ORDER_ENTRY *DevOrderPtr; + EFI_STATUS Status; + + FDCount = 0; + HDCount = 0; + CDCount = 0; + NETCount = 0; + BEVCount = 0; + TotalSize = 0; + HeaderSize = sizeof (BBS_TYPE) + sizeof (UINT16); + DevOrder = NULL; + Status = EFI_SUCCESS; // // Count all boot devices @@ -659,28 +677,28 @@ LegacyBmCreateDevOrder ( } switch (BbsTable[Index].DeviceType) { - case BBS_FLOPPY: - FDCount++; - break; + case BBS_FLOPPY: + FDCount++; + break; - case BBS_HARDDISK: - HDCount++; - break; + case BBS_HARDDISK: + HDCount++; + break; - case BBS_CDROM: - CDCount++; - break; + case BBS_CDROM: + CDCount++; + break; - case BBS_EMBED_NETWORK: - NETCount++; - break; + case BBS_EMBED_NETWORK: + NETCount++; + break; - case BBS_BEV_DEVICE: - BEVCount++; - break; + case BBS_BEV_DEVICE: + BEVCount++; + break; - default: - break; + default: + break; } } @@ -697,29 +715,30 @@ LegacyBmCreateDevOrder ( if (NULL == DevOrder) { return EFI_OUT_OF_RESOURCES; } - DevOrderPtr = DevOrder; + + DevOrderPtr = DevOrder; DevOrderPtr->BbsType = BBS_FLOPPY; - DevOrderPtr->Length = (UINT16) (sizeof (DevOrderPtr->Length) + FDCount * sizeof (UINT16)); - DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) LegacyBmFillDevOrderBuf (BbsTable, BBS_FLOPPY, BbsCount, DevOrderPtr->Data); + DevOrderPtr->Length = (UINT16)(sizeof (DevOrderPtr->Length) + FDCount * sizeof (UINT16)); + DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *)LegacyBmFillDevOrderBuf (BbsTable, BBS_FLOPPY, BbsCount, DevOrderPtr->Data); DevOrderPtr->BbsType = BBS_HARDDISK; - DevOrderPtr->Length = (UINT16) (sizeof (UINT16) + HDCount * sizeof (UINT16)); - DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) LegacyBmFillDevOrderBuf (BbsTable, BBS_HARDDISK, BbsCount, DevOrderPtr->Data); + DevOrderPtr->Length = (UINT16)(sizeof (UINT16) + HDCount * sizeof (UINT16)); + DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *)LegacyBmFillDevOrderBuf (BbsTable, BBS_HARDDISK, BbsCount, DevOrderPtr->Data); DevOrderPtr->BbsType = BBS_CDROM; - DevOrderPtr->Length = (UINT16) (sizeof (UINT16) + CDCount * sizeof (UINT16)); - DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) LegacyBmFillDevOrderBuf (BbsTable, BBS_CDROM, BbsCount, DevOrderPtr->Data); + DevOrderPtr->Length = (UINT16)(sizeof (UINT16) + CDCount * sizeof (UINT16)); + DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *)LegacyBmFillDevOrderBuf (BbsTable, BBS_CDROM, BbsCount, DevOrderPtr->Data); DevOrderPtr->BbsType = BBS_EMBED_NETWORK; - DevOrderPtr->Length = (UINT16) (sizeof (UINT16) + NETCount * sizeof (UINT16)); - DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) LegacyBmFillDevOrderBuf (BbsTable, BBS_EMBED_NETWORK, BbsCount, DevOrderPtr->Data); + DevOrderPtr->Length = (UINT16)(sizeof (UINT16) + NETCount * sizeof (UINT16)); + DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *)LegacyBmFillDevOrderBuf (BbsTable, BBS_EMBED_NETWORK, BbsCount, DevOrderPtr->Data); DevOrderPtr->BbsType = BBS_BEV_DEVICE; - DevOrderPtr->Length = (UINT16) (sizeof (UINT16) + BEVCount * sizeof (UINT16)); - DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) LegacyBmFillDevOrderBuf (BbsTable, BBS_BEV_DEVICE, BbsCount, DevOrderPtr->Data); + DevOrderPtr->Length = (UINT16)(sizeof (UINT16) + BEVCount * sizeof (UINT16)); + DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *)LegacyBmFillDevOrderBuf (BbsTable, BBS_BEV_DEVICE, BbsCount, DevOrderPtr->Data); - ASSERT (TotalSize == ((UINTN) DevOrderPtr - (UINTN) DevOrder)); + ASSERT (TotalSize == ((UINTN)DevOrderPtr - (UINTN)DevOrder)); // // Save device order for legacy boot device to variable. @@ -751,54 +770,54 @@ LegacyBmUpdateDevOrder ( VOID ) { - LEGACY_DEV_ORDER_ENTRY *DevOrder; - LEGACY_DEV_ORDER_ENTRY *NewDevOrder; - LEGACY_DEV_ORDER_ENTRY *Ptr; - LEGACY_DEV_ORDER_ENTRY *NewPtr; - EFI_LEGACY_BIOS_PROTOCOL *LegacyBios; - EFI_STATUS Status; - UINT16 HddCount; - UINT16 BbsCount; - HDD_INFO *LocalHddInfo; - BBS_TABLE *LocalBbsTable; - UINTN Index; - UINTN Index2; - UINTN *Idx; - UINTN FDCount; - UINTN HDCount; - UINTN CDCount; - UINTN NETCount; - UINTN BEVCount; - UINTN TotalSize; - UINTN HeaderSize; - UINT16 *NewFDPtr; - UINT16 *NewHDPtr; - UINT16 *NewCDPtr; - UINT16 *NewNETPtr; - UINT16 *NewBEVPtr; - UINT16 *NewDevPtr; - UINTN FDIndex; - UINTN HDIndex; - UINTN CDIndex; - UINTN NETIndex; - UINTN BEVIndex; - - Idx = NULL; - FDCount = 0; - HDCount = 0; - CDCount = 0; - NETCount = 0; - BEVCount = 0; - TotalSize = 0; - HeaderSize = sizeof (BBS_TYPE) + sizeof (UINT16); - FDIndex = 0; - HDIndex = 0; - CDIndex = 0; - NETIndex = 0; - BEVIndex = 0; - NewDevPtr = NULL; - - Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios); + LEGACY_DEV_ORDER_ENTRY *DevOrder; + LEGACY_DEV_ORDER_ENTRY *NewDevOrder; + LEGACY_DEV_ORDER_ENTRY *Ptr; + LEGACY_DEV_ORDER_ENTRY *NewPtr; + EFI_LEGACY_BIOS_PROTOCOL *LegacyBios; + EFI_STATUS Status; + UINT16 HddCount; + UINT16 BbsCount; + HDD_INFO *LocalHddInfo; + BBS_TABLE *LocalBbsTable; + UINTN Index; + UINTN Index2; + UINTN *Idx; + UINTN FDCount; + UINTN HDCount; + UINTN CDCount; + UINTN NETCount; + UINTN BEVCount; + UINTN TotalSize; + UINTN HeaderSize; + UINT16 *NewFDPtr; + UINT16 *NewHDPtr; + UINT16 *NewCDPtr; + UINT16 *NewNETPtr; + UINT16 *NewBEVPtr; + UINT16 *NewDevPtr; + UINTN FDIndex; + UINTN HDIndex; + UINTN CDIndex; + UINTN NETIndex; + UINTN BEVIndex; + + Idx = NULL; + FDCount = 0; + HDCount = 0; + CDCount = 0; + NETCount = 0; + BEVCount = 0; + TotalSize = 0; + HeaderSize = sizeof (BBS_TYPE) + sizeof (UINT16); + FDIndex = 0; + HDIndex = 0; + CDIndex = 0; + NETIndex = 0; + BEVIndex = 0; + NewDevPtr = NULL; + + Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **)&LegacyBios); if (EFI_ERROR (Status)) { return Status; } @@ -814,10 +833,11 @@ LegacyBmUpdateDevOrder ( return Status; } - GetVariable2 (VAR_LEGACY_DEV_ORDER, &gEfiLegacyDevOrderVariableGuid, (VOID **) &DevOrder, NULL); + GetVariable2 (VAR_LEGACY_DEV_ORDER, &gEfiLegacyDevOrderVariableGuid, (VOID **)&DevOrder, NULL); if (NULL == DevOrder) { return LegacyBmCreateDevOrder (LocalBbsTable, BbsCount); } + // // First we figure out how many boot devices with same device type respectively // @@ -827,28 +847,28 @@ LegacyBmUpdateDevOrder ( } switch (LocalBbsTable[Index].DeviceType) { - case BBS_FLOPPY: - FDCount++; - break; + case BBS_FLOPPY: + FDCount++; + break; - case BBS_HARDDISK: - HDCount++; - break; + case BBS_HARDDISK: + HDCount++; + break; - case BBS_CDROM: - CDCount++; - break; + case BBS_CDROM: + CDCount++; + break; - case BBS_EMBED_NETWORK: - NETCount++; - break; + case BBS_EMBED_NETWORK: + NETCount++; + break; - case BBS_BEV_DEVICE: - BEVCount++; - break; + case BBS_BEV_DEVICE: + BEVCount++; + break; - default: - break; + default: + break; } } @@ -869,93 +889,103 @@ LegacyBmUpdateDevOrder ( Ptr = DevOrder; NewPtr = NewDevOrder; NewPtr->BbsType = Ptr->BbsType; - NewPtr->Length = (UINT16) (sizeof (UINT16) + FDCount * sizeof (UINT16)); + NewPtr->Length = (UINT16)(sizeof (UINT16) + FDCount * sizeof (UINT16)); for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) { if (!LegacyBmValidBbsEntry (&LocalBbsTable[Ptr->Data[Index] & 0xFF]) || - LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_FLOPPY - ) { + (LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_FLOPPY) + ) + { continue; } NewPtr->Data[FDIndex] = Ptr->Data[Index]; FDIndex++; } + NewFDPtr = NewPtr->Data; // // copy HD // - Ptr = (LEGACY_DEV_ORDER_ENTRY *) (&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]); - NewPtr = (LEGACY_DEV_ORDER_ENTRY *) (&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]); + Ptr = (LEGACY_DEV_ORDER_ENTRY *)(&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]); + NewPtr = (LEGACY_DEV_ORDER_ENTRY *)(&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]); NewPtr->BbsType = Ptr->BbsType; - NewPtr->Length = (UINT16) (sizeof (UINT16) + HDCount * sizeof (UINT16)); + NewPtr->Length = (UINT16)(sizeof (UINT16) + HDCount * sizeof (UINT16)); for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) { if (!LegacyBmValidBbsEntry (&LocalBbsTable[Ptr->Data[Index] & 0xFF]) || - LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_HARDDISK - ) { + (LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_HARDDISK) + ) + { continue; } NewPtr->Data[HDIndex] = Ptr->Data[Index]; HDIndex++; } + NewHDPtr = NewPtr->Data; // // copy CD // - Ptr = (LEGACY_DEV_ORDER_ENTRY *) (&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]); - NewPtr = (LEGACY_DEV_ORDER_ENTRY *) (&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]); + Ptr = (LEGACY_DEV_ORDER_ENTRY *)(&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]); + NewPtr = (LEGACY_DEV_ORDER_ENTRY *)(&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]); NewPtr->BbsType = Ptr->BbsType; - NewPtr->Length = (UINT16) (sizeof (UINT16) + CDCount * sizeof (UINT16)); + NewPtr->Length = (UINT16)(sizeof (UINT16) + CDCount * sizeof (UINT16)); for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) { if (!LegacyBmValidBbsEntry (&LocalBbsTable[Ptr->Data[Index] & 0xFF]) || - LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_CDROM - ) { + (LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_CDROM) + ) + { continue; } NewPtr->Data[CDIndex] = Ptr->Data[Index]; CDIndex++; } + NewCDPtr = NewPtr->Data; // // copy NET // - Ptr = (LEGACY_DEV_ORDER_ENTRY *) (&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]); - NewPtr = (LEGACY_DEV_ORDER_ENTRY *) (&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]); + Ptr = (LEGACY_DEV_ORDER_ENTRY *)(&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]); + NewPtr = (LEGACY_DEV_ORDER_ENTRY *)(&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]); NewPtr->BbsType = Ptr->BbsType; - NewPtr->Length = (UINT16) (sizeof (UINT16) + NETCount * sizeof (UINT16)); + NewPtr->Length = (UINT16)(sizeof (UINT16) + NETCount * sizeof (UINT16)); for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) { if (!LegacyBmValidBbsEntry (&LocalBbsTable[Ptr->Data[Index] & 0xFF]) || - LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_EMBED_NETWORK - ) { + (LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_EMBED_NETWORK) + ) + { continue; } NewPtr->Data[NETIndex] = Ptr->Data[Index]; NETIndex++; } + NewNETPtr = NewPtr->Data; // // copy BEV // - Ptr = (LEGACY_DEV_ORDER_ENTRY *) (&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]); - NewPtr = (LEGACY_DEV_ORDER_ENTRY *) (&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]); + Ptr = (LEGACY_DEV_ORDER_ENTRY *)(&Ptr->Data[Ptr->Length / sizeof (UINT16) - 1]); + NewPtr = (LEGACY_DEV_ORDER_ENTRY *)(&NewPtr->Data[NewPtr->Length / sizeof (UINT16) -1]); NewPtr->BbsType = Ptr->BbsType; - NewPtr->Length = (UINT16) (sizeof (UINT16) + BEVCount * sizeof (UINT16)); + NewPtr->Length = (UINT16)(sizeof (UINT16) + BEVCount * sizeof (UINT16)); for (Index = 0; Index < Ptr->Length / sizeof (UINT16) - 1; Index++) { if (!LegacyBmValidBbsEntry (&LocalBbsTable[Ptr->Data[Index] & 0xFF]) || - LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_BEV_DEVICE - ) { + (LocalBbsTable[Ptr->Data[Index] & 0xFF].DeviceType != BBS_BEV_DEVICE) + ) + { continue; } NewPtr->Data[BEVIndex] = Ptr->Data[Index]; BEVIndex++; } + NewBEVPtr = NewPtr->Data; for (Index = 0; Index < BbsCount; Index++) { @@ -964,42 +994,43 @@ LegacyBmUpdateDevOrder ( } switch (LocalBbsTable[Index].DeviceType) { - case BBS_FLOPPY: - Idx = &FDIndex; - NewDevPtr = NewFDPtr; - break; + case BBS_FLOPPY: + Idx = &FDIndex; + NewDevPtr = NewFDPtr; + break; - case BBS_HARDDISK: - Idx = &HDIndex; - NewDevPtr = NewHDPtr; - break; + case BBS_HARDDISK: + Idx = &HDIndex; + NewDevPtr = NewHDPtr; + break; - case BBS_CDROM: - Idx = &CDIndex; - NewDevPtr = NewCDPtr; - break; + case BBS_CDROM: + Idx = &CDIndex; + NewDevPtr = NewCDPtr; + break; - case BBS_EMBED_NETWORK: - Idx = &NETIndex; - NewDevPtr = NewNETPtr; - break; + case BBS_EMBED_NETWORK: + Idx = &NETIndex; + NewDevPtr = NewNETPtr; + break; - case BBS_BEV_DEVICE: - Idx = &BEVIndex; - NewDevPtr = NewBEVPtr; - break; + case BBS_BEV_DEVICE: + Idx = &BEVIndex; + NewDevPtr = NewBEVPtr; + break; - default: - Idx = NULL; - break; + default: + Idx = NULL; + break; } + // // at this point we have copied those valid indexes to new buffer // and we should check if there is any new appeared boot device // if (Idx != NULL) { for (Index2 = 0; Index2 < *Idx; Index2++) { - if ((NewDevPtr[Index2] & 0xFF) == (UINT16) Index) { + if ((NewDevPtr[Index2] & 0xFF) == (UINT16)Index) { break; } } @@ -1015,8 +1046,9 @@ LegacyBmUpdateDevOrder ( break; } } + CopyMem (&NewDevPtr[Index2 + 1], &NewDevPtr[Index2], (*Idx - Index2) * sizeof (UINT16)); - NewDevPtr[Index2] = (UINT16) (Index & 0xFF); + NewDevPtr[Index2] = (UINT16)(Index & 0xFF); (*Idx)++; } } @@ -1051,37 +1083,37 @@ LegacyBmUpdateDevOrder ( **/ EFI_STATUS LegacyBmSetPriorityForSameTypeDev ( - IN UINT16 DeviceType, - IN UINTN BbsIndex, - IN OUT BBS_TABLE *LocalBbsTable, - IN OUT UINT16 *Priority + IN UINT16 DeviceType, + IN UINTN BbsIndex, + IN OUT BBS_TABLE *LocalBbsTable, + IN OUT UINT16 *Priority ) { - LEGACY_DEV_ORDER_ENTRY *DevOrder; - LEGACY_DEV_ORDER_ENTRY *DevOrderPtr; - UINTN DevOrderSize; - UINTN Index; + LEGACY_DEV_ORDER_ENTRY *DevOrder; + LEGACY_DEV_ORDER_ENTRY *DevOrderPtr; + UINTN DevOrderSize; + UINTN Index; - GetVariable2 (VAR_LEGACY_DEV_ORDER, &gEfiLegacyDevOrderVariableGuid, (VOID **) &DevOrder, &DevOrderSize); + GetVariable2 (VAR_LEGACY_DEV_ORDER, &gEfiLegacyDevOrderVariableGuid, (VOID **)&DevOrder, &DevOrderSize); if (NULL == DevOrder) { return EFI_OUT_OF_RESOURCES; } DevOrderPtr = DevOrder; - while ((UINT8 *) DevOrderPtr < (UINT8 *) DevOrder + DevOrderSize) { + while ((UINT8 *)DevOrderPtr < (UINT8 *)DevOrder + DevOrderSize) { if (DevOrderPtr->BbsType == DeviceType) { break; } - DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *) ((UINTN) DevOrderPtr + sizeof (BBS_TYPE) + DevOrderPtr->Length); + DevOrderPtr = (LEGACY_DEV_ORDER_ENTRY *)((UINTN)DevOrderPtr + sizeof (BBS_TYPE) + DevOrderPtr->Length); } - if ((UINT8 *) DevOrderPtr >= (UINT8 *) DevOrder + DevOrderSize) { + if ((UINT8 *)DevOrderPtr >= (UINT8 *)DevOrder + DevOrderSize) { FreePool (DevOrder); return EFI_NOT_FOUND; } - if (BbsIndex != (UINTN) -1) { + if (BbsIndex != (UINTN)-1) { // // In case the BBS entry isn't valid because devices were plugged or removed. // @@ -1089,9 +1121,11 @@ LegacyBmSetPriorityForSameTypeDev ( FreePool (DevOrder); return EFI_NOT_FOUND; } + LocalBbsTable[BbsIndex].BootPriority = *Priority; (*Priority)++; } + // // If the high byte of the DevIndex is 0xFF, it indicates that this device has been disabled. // @@ -1134,20 +1168,20 @@ LegacyBmPrintBbsTable ( DEBUG ( (DEBUG_INFO, - " %02x: %04x %02x/%02x/%02x %02x/%02x %04x %04x %04x:%04x\n", - (UINTN) Index, - (UINTN) LocalBbsTable[Index].BootPriority, - (UINTN) LocalBbsTable[Index].Bus, - (UINTN) LocalBbsTable[Index].Device, - (UINTN) LocalBbsTable[Index].Function, - (UINTN) LocalBbsTable[Index].Class, - (UINTN) LocalBbsTable[Index].SubClass, - (UINTN) LocalBbsTable[Index].DeviceType, - (UINTN) * (UINT16 *) &LocalBbsTable[Index].StatusFlags, - (UINTN) LocalBbsTable[Index].BootHandlerSegment, - (UINTN) LocalBbsTable[Index].BootHandlerOffset, - (UINTN) ((LocalBbsTable[Index].MfgStringSegment << 4) + LocalBbsTable[Index].MfgStringOffset), - (UINTN) ((LocalBbsTable[Index].DescStringSegment << 4) + LocalBbsTable[Index].DescStringOffset)) + " %02x: %04x %02x/%02x/%02x %02x/%02x %04x %04x %04x:%04x\n", + (UINTN)Index, + (UINTN)LocalBbsTable[Index].BootPriority, + (UINTN)LocalBbsTable[Index].Bus, + (UINTN)LocalBbsTable[Index].Device, + (UINTN)LocalBbsTable[Index].Function, + (UINTN)LocalBbsTable[Index].Class, + (UINTN)LocalBbsTable[Index].SubClass, + (UINTN)LocalBbsTable[Index].DeviceType, + (UINTN)*(UINT16 *)&LocalBbsTable[Index].StatusFlags, + (UINTN)LocalBbsTable[Index].BootHandlerSegment, + (UINTN)LocalBbsTable[Index].BootHandlerOffset, + (UINTN)((LocalBbsTable[Index].MfgStringSegment << 4) + LocalBbsTable[Index].MfgStringOffset), + (UINTN)((LocalBbsTable[Index].DescStringSegment << 4) + LocalBbsTable[Index].DescStringOffset)) ); } @@ -1165,7 +1199,7 @@ LegacyBmPrintBbsTable ( **/ EFI_STATUS LegacyBmRefreshBbsTableForBoot ( - IN EFI_BOOT_MANAGER_LOAD_OPTION *BootOption + IN EFI_BOOT_MANAGER_LOAD_OPTION *BootOption ) { EFI_STATUS Status; @@ -1190,7 +1224,7 @@ LegacyBmRefreshBbsTableForBoot ( LocalBbsTable = NULL; DevType = BBS_UNKNOWN; - Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios); + Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **)&LegacyBios); if (EFI_ERROR (Status)) { return Status; } @@ -1215,38 +1249,42 @@ LegacyBmRefreshBbsTableForBoot ( LocalBbsTable[Index].BootPriority = BBS_UNPRIORITIZED_ENTRY; } } + // // boot priority always starts at 0 // Priority = 0; if ((DevicePathType (BootOption->FilePath) == BBS_DEVICE_PATH) && - (DevicePathSubType (BootOption->FilePath) == BBS_BBS_DP)) { + (DevicePathSubType (BootOption->FilePath) == BBS_BBS_DP)) + { // // If BootOption stands for a legacy boot option, we prioritize the devices with the same type first. // DevType = LegacyBmDeviceType (BootOption->FilePath); - BbsIndex = ((LEGACY_BM_BOOT_OPTION_BBS_DATA *) BootOption->OptionalData)->BbsIndex; - Status = LegacyBmSetPriorityForSameTypeDev ( - DevType, - BbsIndex, - LocalBbsTable, - &Priority - ); + BbsIndex = ((LEGACY_BM_BOOT_OPTION_BBS_DATA *)BootOption->OptionalData)->BbsIndex; + Status = LegacyBmSetPriorityForSameTypeDev ( + DevType, + BbsIndex, + LocalBbsTable, + &Priority + ); if (EFI_ERROR (Status)) { return Status; } } + // // we have to set the boot priority for other BBS entries with different device types // - Option = EfiBootManagerGetLoadOptions (&OptionCount, LoadOptionTypeBoot); - DeviceType = AllocatePool (sizeof (UINT16) * OptionCount); + Option = EfiBootManagerGetLoadOptions (&OptionCount, LoadOptionTypeBoot); + DeviceType = AllocatePool (sizeof (UINT16) * OptionCount); ASSERT (DeviceType != NULL); DeviceType[0] = DevType; DeviceTypeCount = 1; for (Index = 0; Index < OptionCount; Index++) { if ((DevicePathType (Option[Index].FilePath) != BBS_DEVICE_PATH) || - (DevicePathSubType (Option[Index].FilePath) != BBS_BBS_DP)) { + (DevicePathSubType (Option[Index].FilePath) != BBS_BBS_DP)) + { continue; } @@ -1256,6 +1294,7 @@ LegacyBmRefreshBbsTableForBoot ( break; } } + if (DeviceTypeIndex < DeviceTypeCount) { // // We don't want to process twice for a device type @@ -1268,21 +1307,21 @@ LegacyBmRefreshBbsTableForBoot ( Status = LegacyBmSetPriorityForSameTypeDev ( DevType, - (UINTN) -1, + (UINTN)-1, LocalBbsTable, &Priority ); } + EfiBootManagerFreeLoadOptions (Option, OptionCount); - DEBUG_CODE_BEGIN(); - LegacyBmPrintBbsTable (LocalBbsTable, BbsCount); - DEBUG_CODE_END(); + DEBUG_CODE_BEGIN (); + LegacyBmPrintBbsTable (LocalBbsTable, BbsCount); + DEBUG_CODE_END (); return Status; } - /** Boot the legacy system with the boot option. @@ -1295,13 +1334,13 @@ LegacyBmRefreshBbsTableForBoot ( VOID EFIAPI LegacyBmBoot ( - IN EFI_BOOT_MANAGER_LOAD_OPTION *BootOption + IN EFI_BOOT_MANAGER_LOAD_OPTION *BootOption ) { EFI_STATUS Status; EFI_LEGACY_BIOS_PROTOCOL *LegacyBios; - Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios); + Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **)&LegacyBios); if (EFI_ERROR (Status)) { // // If no LegacyBios protocol we do not support legacy boot @@ -1309,6 +1348,7 @@ LegacyBmBoot ( BootOption->Status = EFI_UNSUPPORTED; return; } + // // Notes: if we separate the int 19, then we don't need to refresh BBS // @@ -1320,7 +1360,7 @@ LegacyBmBoot ( BootOption->Status = LegacyBios->LegacyBoot ( LegacyBios, - (BBS_BBS_DEVICE_PATH *) BootOption->FilePath, + (BBS_BBS_DEVICE_PATH *)BootOption->FilePath, BootOption->OptionalDataSize, BootOption->OptionalData ); @@ -1335,7 +1375,7 @@ LegacyBmBoot ( **/ EFI_BOOT_MANAGER_LOAD_OPTION * LegacyBmEnumerateAllBootOptions ( - UINTN *BootOptionCount + UINTN *BootOptionCount ) { EFI_STATUS Status; @@ -1353,7 +1393,7 @@ LegacyBmEnumerateAllBootOptions ( *BootOptionCount = 0; BbsCount = 0; - Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios); + Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **)&LegacyBios); if (EFI_ERROR (Status)) { return NULL; } @@ -1402,19 +1442,20 @@ LegacyBmEnumerateAllBootOptions ( **/ INTN LegacyBmFindBootOption ( - IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *Key, - IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *Array, - IN UINTN Count + IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *Key, + IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *Array, + IN UINTN Count ) { - UINTN Index; + UINTN Index; for (Index = 0; Index < Count; Index++) { if ((StrCmp (Key->Description, Array[Index].Description) == 0) && (CompareMem (Key->FilePath, Array[Index].FilePath, GetDevicePathSize (Key->FilePath)) == 0) && (Key->OptionalDataSize == Array[Index].OptionalDataSize) && - (CompareMem (Key->OptionalData, Array[Index].OptionalData, Key->OptionalDataSize) == 0)) { - return (INTN) Index; + (CompareMem (Key->OptionalData, Array[Index].OptionalData, Key->OptionalDataSize) == 0)) + { + return (INTN)Index; } } @@ -1431,25 +1472,26 @@ LegacyBmRefreshAllBootOption ( VOID ) { - EFI_STATUS Status; - EFI_LEGACY_BIOS_PROTOCOL *LegacyBios; - UINTN RootBridgeHandleCount; - EFI_HANDLE *RootBridgeHandleBuffer; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN RootBridgeIndex; - UINTN Index; - UINTN Flags; - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; - UINTN BootOptionCount; - EFI_BOOT_MANAGER_LOAD_OPTION *ExistingBootOptions; - UINTN ExistingBootOptionCount; - - Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **) &LegacyBios); + EFI_STATUS Status; + EFI_LEGACY_BIOS_PROTOCOL *LegacyBios; + UINTN RootBridgeHandleCount; + EFI_HANDLE *RootBridgeHandleBuffer; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + UINTN RootBridgeIndex; + UINTN Index; + UINTN Flags; + EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; + UINTN BootOptionCount; + EFI_BOOT_MANAGER_LOAD_OPTION *ExistingBootOptions; + UINTN ExistingBootOptionCount; + + Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **)&LegacyBios); if (EFI_ERROR (Status)) { LegacyBmDeleteAllBootOptions (); return; } + PERF_START (NULL, "LegacyBootOptionEnum", "BDS", 0); // @@ -1500,15 +1542,16 @@ LegacyBmRefreshAllBootOption ( LegacyBmDeleteAllInvalidBootOptions (); ExistingBootOptions = EfiBootManagerGetLoadOptions (&ExistingBootOptionCount, LoadOptionTypeBoot); - BootOptions = LegacyBmEnumerateAllBootOptions (&BootOptionCount); + BootOptions = LegacyBmEnumerateAllBootOptions (&BootOptionCount); for (Index = 0; Index < BootOptionCount; Index++) { if (LegacyBmFindBootOption (&BootOptions[Index], ExistingBootOptions, ExistingBootOptionCount) == -1) { - Status = EfiBootManagerAddLoadOptionVariable (&BootOptions[Index], (UINTN) -1); + Status = EfiBootManagerAddLoadOptionVariable (&BootOptions[Index], (UINTN)-1); DEBUG (( - DEBUG_INFO, "[LegacyBds] New Boot Option: Boot%04x Bbs0x%04x %s %r\n", - (UINTN) BootOptions[Index].OptionNumber, - (UINTN) ((LEGACY_BM_BOOT_OPTION_BBS_DATA *) BootOptions[Index].OptionalData)->BbsIndex, + DEBUG_INFO, + "[LegacyBds] New Boot Option: Boot%04x Bbs0x%04x %s %r\n", + (UINTN)BootOptions[Index].OptionNumber, + (UINTN)((LEGACY_BM_BOOT_OPTION_BBS_DATA *)BootOptions[Index].OptionalData)->BbsIndex, BootOptions[Index].Description, Status )); @@ -1519,12 +1562,12 @@ LegacyBmRefreshAllBootOption ( } EfiBootManagerFreeLoadOptions (ExistingBootOptions, ExistingBootOptionCount); - EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount); + EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount); // // Failure to create LegacyDevOrder variable only impacts the boot order. // LegacyBmUpdateDevOrder (); - PERF_END (NULL, "LegacyBootOptionEnum", "BDS", 0); + PERF_END (NULL, "LegacyBootOptionEnum", "BDS", 0); } diff --git a/OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.c b/OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.c index 766ad1e59f..99558e97eb 100644 --- a/OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.c +++ b/OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.c @@ -36,13 +36,13 @@ // // This is needed for runtime variable access. // -EFI_EVENT mEmuVarsFvbAddrChangeEvent = NULL; +EFI_EVENT mEmuVarsFvbAddrChangeEvent = NULL; // // This is the single instance supported by this driver. It // supports the FVB and Device Path protocols. // -EFI_FW_VOL_BLOCK_DEVICE mEmuVarsFvb = { +EFI_FW_VOL_BLOCK_DEVICE mEmuVarsFvb = { FVB_DEVICE_SIGNATURE, { // DevicePath { @@ -67,9 +67,9 @@ EFI_FW_VOL_BLOCK_DEVICE mEmuVarsFvb = { } } }, - NULL, // BufferPtr + NULL, // BufferPtr EMU_FVB_BLOCK_SIZE, // BlockSize - EMU_FVB_SIZE, // Size + EMU_FVB_SIZE, // Size { // FwVolBlockInstance FvbProtocolGetAttributes, FvbProtocolSetAttributes, @@ -82,7 +82,6 @@ EFI_FW_VOL_BLOCK_DEVICE mEmuVarsFvb = { }, }; - /** Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. @@ -96,14 +95,13 @@ EFI_FW_VOL_BLOCK_DEVICE mEmuVarsFvb = { VOID EFIAPI FvbVirtualAddressChangeEvent ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { EfiConvertPointer (0x0, &mEmuVarsFvb.BufferPtr); } - // // FVB protocol APIs // @@ -128,20 +126,19 @@ FvbVirtualAddressChangeEvent ( EFI_STATUS EFIAPI FvbProtocolGetPhysicalAddress ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, - OUT EFI_PHYSICAL_ADDRESS *Address + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + OUT EFI_PHYSICAL_ADDRESS *Address ) { - EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; + EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; FvbDevice = FVB_DEVICE_FROM_THIS (This); - *Address = (EFI_PHYSICAL_ADDRESS)(UINTN) FvbDevice->BufferPtr; + *Address = (EFI_PHYSICAL_ADDRESS)(UINTN)FvbDevice->BufferPtr; return EFI_SUCCESS; } - /** The GetBlockSize() function retrieves the size of the requested block. It also returns the number of additional blocks with @@ -171,13 +168,13 @@ FvbProtocolGetPhysicalAddress ( EFI_STATUS EFIAPI FvbProtocolGetBlockSize ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, - IN EFI_LBA Lba, - OUT UINTN *BlockSize, - OUT UINTN *NumberOfBlocks + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + IN EFI_LBA Lba, + OUT UINTN *BlockSize, + OUT UINTN *NumberOfBlocks ) { - EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; + EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; if (Lba >= EMU_FVB_NUM_TOTAL_BLOCKS) { return EFI_INVALID_PARAMETER; @@ -185,13 +182,12 @@ FvbProtocolGetBlockSize ( FvbDevice = FVB_DEVICE_FROM_THIS (This); - *BlockSize = FvbDevice->BlockSize; + *BlockSize = FvbDevice->BlockSize; *NumberOfBlocks = (UINTN)(EMU_FVB_NUM_TOTAL_BLOCKS - Lba); return EFI_SUCCESS; } - /** The GetAttributes() function retrieves the attributes and current settings of the block. Status Codes Returned @@ -210,23 +206,22 @@ FvbProtocolGetBlockSize ( EFI_STATUS EFIAPI FvbProtocolGetAttributes ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, - OUT EFI_FVB_ATTRIBUTES_2 *Attributes + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + OUT EFI_FVB_ATTRIBUTES_2 *Attributes ) { *Attributes = - (EFI_FVB_ATTRIBUTES_2) ( - EFI_FVB2_READ_ENABLED_CAP | - EFI_FVB2_READ_STATUS | - EFI_FVB2_WRITE_ENABLED_CAP | - EFI_FVB2_WRITE_STATUS | - EFI_FVB2_ERASE_POLARITY - ); + (EFI_FVB_ATTRIBUTES_2)( + EFI_FVB2_READ_ENABLED_CAP | + EFI_FVB2_READ_STATUS | + EFI_FVB2_WRITE_ENABLED_CAP | + EFI_FVB2_WRITE_STATUS | + EFI_FVB2_ERASE_POLARITY + ); return EFI_SUCCESS; } - /** The SetAttributes() function sets configurable firmware volume attributes and returns the new settings of the firmware volume. @@ -252,14 +247,13 @@ FvbProtocolGetAttributes ( EFI_STATUS EFIAPI FvbProtocolSetAttributes ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, - IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes ) { return EFI_ACCESS_DENIED; } - /** Erases and initializes a firmware volume block. @@ -311,16 +305,16 @@ FvbProtocolSetAttributes ( EFI_STATUS EFIAPI FvbProtocolEraseBlocks ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, ... ) { - EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; - VA_LIST Args; - EFI_LBA StartingLba; - UINTN NumOfLba; - UINT8 *ErasePtr; - UINTN EraseSize; + EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; + VA_LIST Args; + EFI_LBA StartingLba; + UINTN NumOfLba; + UINT8 *ErasePtr; + UINTN EraseSize; FvbDevice = FVB_DEVICE_FROM_THIS (This); @@ -333,14 +327,17 @@ FvbProtocolEraseBlocks ( if (StartingLba == EFI_LBA_LIST_TERMINATOR) { break; } + NumOfLba = VA_ARG (Args, UINTN); - if (StartingLba > EMU_FVB_NUM_TOTAL_BLOCKS || - NumOfLba > EMU_FVB_NUM_TOTAL_BLOCKS - StartingLba) { + if ((StartingLba > EMU_FVB_NUM_TOTAL_BLOCKS) || + (NumOfLba > EMU_FVB_NUM_TOTAL_BLOCKS - StartingLba)) + { VA_END (Args); return EFI_INVALID_PARAMETER; } } while (1); + VA_END (Args); // @@ -352,14 +349,16 @@ FvbProtocolEraseBlocks ( if (StartingLba == EFI_LBA_LIST_TERMINATOR) { break; } + NumOfLba = VA_ARG (Args, UINTN); - ErasePtr = FvbDevice->BufferPtr; + ErasePtr = FvbDevice->BufferPtr; ErasePtr += (UINTN)StartingLba * FvbDevice->BlockSize; EraseSize = NumOfLba * FvbDevice->BlockSize; SetMem (ErasePtr, EraseSize, ERASED_UINT8); } while (1); + VA_END (Args); // @@ -372,7 +371,6 @@ FvbProtocolEraseBlocks ( return EFI_SUCCESS; } - /** Writes the specified number of bytes from the input buffer to the block. @@ -435,31 +433,32 @@ FvbProtocolEraseBlocks ( EFI_STATUS EFIAPI FvbProtocolWrite ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, - IN EFI_LBA Lba, - IN UINTN Offset, - IN OUT UINTN *NumBytes, - IN UINT8 *Buffer + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Offset, + IN OUT UINTN *NumBytes, + IN UINT8 *Buffer ) { - EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; - UINT8 *FvbDataPtr; - EFI_STATUS Status; + EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; + UINT8 *FvbDataPtr; + EFI_STATUS Status; FvbDevice = FVB_DEVICE_FROM_THIS (This); - if (Lba >= EMU_FVB_NUM_TOTAL_BLOCKS || - Offset > FvbDevice->BlockSize) { + if ((Lba >= EMU_FVB_NUM_TOTAL_BLOCKS) || + (Offset > FvbDevice->BlockSize)) + { return EFI_INVALID_PARAMETER; } Status = EFI_SUCCESS; if (*NumBytes > FvbDevice->BlockSize - Offset) { *NumBytes = FvbDevice->BlockSize - Offset; - Status = EFI_BAD_BUFFER_SIZE; + Status = EFI_BAD_BUFFER_SIZE; } - FvbDataPtr = FvbDevice->BufferPtr; + FvbDataPtr = FvbDevice->BufferPtr; FvbDataPtr += (UINTN)Lba * FvbDevice->BlockSize; FvbDataPtr += Offset; @@ -468,7 +467,6 @@ FvbProtocolWrite ( return Status; } - /** Reads the specified number of bytes into a buffer from the specified block. @@ -519,31 +517,32 @@ FvbProtocolWrite ( EFI_STATUS EFIAPI FvbProtocolRead ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, - IN EFI_LBA Lba, - IN UINTN Offset, - IN OUT UINTN *NumBytes, - IN OUT UINT8 *Buffer + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Offset, + IN OUT UINTN *NumBytes, + IN OUT UINT8 *Buffer ) { - EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; - UINT8 *FvbDataPtr; - EFI_STATUS Status; + EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; + UINT8 *FvbDataPtr; + EFI_STATUS Status; FvbDevice = FVB_DEVICE_FROM_THIS (This); - if (Lba >= EMU_FVB_NUM_TOTAL_BLOCKS || - Offset > FvbDevice->BlockSize) { + if ((Lba >= EMU_FVB_NUM_TOTAL_BLOCKS) || + (Offset > FvbDevice->BlockSize)) + { return EFI_INVALID_PARAMETER; } Status = EFI_SUCCESS; if (*NumBytes > FvbDevice->BlockSize - Offset) { *NumBytes = FvbDevice->BlockSize - Offset; - Status = EFI_BAD_BUFFER_SIZE; + Status = EFI_BAD_BUFFER_SIZE; } - FvbDataPtr = FvbDevice->BufferPtr; + FvbDataPtr = FvbDevice->BufferPtr; FvbDataPtr += (UINTN)Lba * FvbDevice->BlockSize; FvbDataPtr += Offset; @@ -552,7 +551,6 @@ FvbProtocolRead ( return Status; } - /** Check the integrity of firmware volume header. @@ -564,7 +562,7 @@ FvbProtocolRead ( **/ EFI_STATUS ValidateFvHeader ( - IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader + IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader ) { UINT16 Checksum; @@ -578,14 +576,16 @@ ValidateFvHeader ( (FwVolHeader->Signature != EFI_FVH_SIGNATURE) || (FwVolHeader->FvLength != EMU_FVB_SIZE) || (FwVolHeader->HeaderLength != EMU_FV_HEADER_LENGTH) - ) { + ) + { DEBUG ((DEBUG_INFO, "EMU Variable FVB: Basic FV headers were invalid\n")); return EFI_NOT_FOUND; } + // // Verify the header checksum // - Checksum = CalculateSum16((VOID*) FwVolHeader, FwVolHeader->HeaderLength); + Checksum = CalculateSum16 ((VOID *)FwVolHeader, FwVolHeader->HeaderLength); if (Checksum != 0) { DEBUG ((DEBUG_INFO, "EMU Variable FVB: FV checksum was invalid\n")); @@ -595,7 +595,6 @@ ValidateFvHeader ( return EFI_SUCCESS; } - /** Initializes the FV Header and Variable Store Header to support variable operations. @@ -605,13 +604,13 @@ ValidateFvHeader ( **/ VOID InitializeFvAndVariableStoreHeaders ( - IN VOID *Ptr + IN VOID *Ptr ) { // // Templates for authenticated variable FV header // - STATIC FVB_FV_HDR_AND_VARS_TEMPLATE FvAndAuthenticatedVarTemplate = { + STATIC FVB_FV_HDR_AND_VARS_TEMPLATE FvAndAuthenticatedVarTemplate = { { // EFI_FIRMWARE_VOLUME_HEADER FvHdr; // UINT8 ZeroVector[16]; { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, @@ -638,7 +637,7 @@ InitializeFvAndVariableStoreHeaders ( 0, // UINT8 Reserved[1]; - {0}, + { 0 }, // UINT8 Revision; EFI_FVH_REVISION, @@ -647,20 +646,20 @@ InitializeFvAndVariableStoreHeaders ( { { EMU_FVB_NUM_TOTAL_BLOCKS, // UINT32 NumBlocks; - EMU_FVB_BLOCK_SIZE // UINT32 Length; + EMU_FVB_BLOCK_SIZE // UINT32 Length; } } }, // EFI_FV_BLOCK_MAP_ENTRY EndBlockMap; { 0, 0 }, // End of block map { // VARIABLE_STORE_HEADER VarHdr; - // EFI_GUID Signature; // need authenticated variables for secure boot - EFI_AUTHENTICATED_VARIABLE_GUID, + // EFI_GUID Signature; // need authenticated variables for secure boot + EFI_AUTHENTICATED_VARIABLE_GUID, // UINT32 Size; ( - FixedPcdGet32 (PcdFlashNvStorageVariableSize) - - OFFSET_OF (FVB_FV_HDR_AND_VARS_TEMPLATE, VarHdr) + FixedPcdGet32 (PcdFlashNvStorageVariableSize) - + OFFSET_OF (FVB_FV_HDR_AND_VARS_TEMPLATE, VarHdr) ), // UINT8 Format; @@ -691,7 +690,7 @@ InitializeFvAndVariableStoreHeaders ( // // Update the checksum for the FV header // - Fv = (EFI_FIRMWARE_VOLUME_HEADER*) Ptr; + Fv = (EFI_FIRMWARE_VOLUME_HEADER *)Ptr; Fv->Checksum = CalculateCheckSum16 (Ptr, Fv->HeaderLength); } @@ -707,38 +706,44 @@ InitializeFvAndVariableStoreHeaders ( EFI_STATUS EFIAPI FvbInitialize ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - VOID *Ptr; - VOID *SubPtr; - BOOLEAN Initialize; - EFI_HANDLE Handle; - EFI_PHYSICAL_ADDRESS Address; - RETURN_STATUS PcdStatus; + EFI_STATUS Status; + VOID *Ptr; + VOID *SubPtr; + BOOLEAN Initialize; + EFI_HANDLE Handle; + EFI_PHYSICAL_ADDRESS Address; + RETURN_STATUS PcdStatus; DEBUG ((DEBUG_INFO, "EMU Variable FVB Started\n")); // // Verify that the PCD's are set correctly. // - ASSERT (FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize) % - EMU_FVB_BLOCK_SIZE == 0); + ASSERT ( + FixedPcdGet32 (PcdFlashNvStorageFtwSpareSize) % + EMU_FVB_BLOCK_SIZE == 0 + ); if ( - (PcdGet32 (PcdFlashNvStorageVariableSize) + - PcdGet32 (PcdFlashNvStorageFtwWorkingSize) - ) > - EMU_FVB_NUM_SPARE_BLOCKS * EMU_FVB_BLOCK_SIZE - ) { + (PcdGet32 (PcdFlashNvStorageVariableSize) + + PcdGet32 (PcdFlashNvStorageFtwWorkingSize) + ) > + EMU_FVB_NUM_SPARE_BLOCKS * EMU_FVB_BLOCK_SIZE + ) + { DEBUG ((DEBUG_ERROR, "EMU Variable invalid PCD sizes\n")); return EFI_INVALID_PARAMETER; } if (PcdGet64 (PcdFlashNvStorageVariableBase64) != 0) { - DEBUG ((DEBUG_INFO, "Disabling EMU Variable FVB since " - "flash variables appear to be supported.\n")); + DEBUG (( + DEBUG_INFO, + "Disabling EMU Variable FVB since " + "flash variables appear to be supported.\n" + )); return EFI_ABORTED; } @@ -752,7 +757,7 @@ FvbInitialize ( // Initialize = TRUE; if (PcdGet64 (PcdEmuVariableNvStoreReserved) != 0) { - Ptr = (VOID*)(UINTN) PcdGet64 (PcdEmuVariableNvStoreReserved); + Ptr = (VOID *)(UINTN)PcdGet64 (PcdEmuVariableNvStoreReserved); DEBUG (( DEBUG_INFO, "EMU Variable FVB: Using pre-reserved block at %p\n", @@ -776,32 +781,37 @@ FvbInitialize ( SetMem (Ptr, EMU_FVB_SIZE, ERASED_UINT8); InitializeFvAndVariableStoreHeaders (Ptr); } - PcdStatus = PcdSet64S (PcdFlashNvStorageVariableBase64, (UINT32)(UINTN) Ptr); + + PcdStatus = PcdSet64S (PcdFlashNvStorageVariableBase64, (UINT32)(UINTN)Ptr); ASSERT_RETURN_ERROR (PcdStatus); // // Initialize the Fault Tolerant Write data area // - SubPtr = (VOID*) ((UINT8*) Ptr + PcdGet32 (PcdFlashNvStorageVariableSize)); - PcdStatus = PcdSet32S (PcdFlashNvStorageFtwWorkingBase, - (UINT32)(UINTN) SubPtr); + SubPtr = (VOID *)((UINT8 *)Ptr + PcdGet32 (PcdFlashNvStorageVariableSize)); + PcdStatus = PcdSet32S ( + PcdFlashNvStorageFtwWorkingBase, + (UINT32)(UINTN)SubPtr + ); ASSERT_RETURN_ERROR (PcdStatus); // // Initialize the Fault Tolerant Write spare block // - SubPtr = (VOID*) ((UINT8*) Ptr + + SubPtr = (VOID *)((UINT8 *)Ptr + EMU_FVB_NUM_SPARE_BLOCKS * EMU_FVB_BLOCK_SIZE); - PcdStatus = PcdSet32S (PcdFlashNvStorageFtwSpareBase, - (UINT32)(UINTN) SubPtr); + PcdStatus = PcdSet32S ( + PcdFlashNvStorageFtwSpareBase, + (UINT32)(UINTN)SubPtr + ); ASSERT_RETURN_ERROR (PcdStatus); // // Setup FVB device path // - Address = (EFI_PHYSICAL_ADDRESS)(UINTN) Ptr; + Address = (EFI_PHYSICAL_ADDRESS)(UINTN)Ptr; mEmuVarsFvb.DevicePath.MemMapDevPath.StartingAddress = Address; - mEmuVarsFvb.DevicePath.MemMapDevPath.EndingAddress = Address + EMU_FVB_SIZE - 1; + mEmuVarsFvb.DevicePath.MemMapDevPath.EndingAddress = Address + EMU_FVB_SIZE - 1; // // Install the protocols @@ -833,5 +843,3 @@ FvbInitialize ( return EFI_SUCCESS; } - - diff --git a/OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.h b/OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.h index 4cf8a38ba5..8299fe3f11 100644 --- a/OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.h +++ b/OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.h @@ -19,36 +19,33 @@ Abstract: // // Fvb Protocol instance data // -#define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE) -#define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N') +#define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, FwVolBlockInstance, FVB_DEVICE_SIGNATURE) +#define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N') #pragma pack (1) typedef struct { - - EFI_FIRMWARE_VOLUME_HEADER FvHdr; - EFI_FV_BLOCK_MAP_ENTRY EndBlockMap; - VARIABLE_STORE_HEADER VarHdr; - + EFI_FIRMWARE_VOLUME_HEADER FvHdr; + EFI_FV_BLOCK_MAP_ENTRY EndBlockMap; + VARIABLE_STORE_HEADER VarHdr; } FVB_FV_HDR_AND_VARS_TEMPLATE; typedef struct { - MEMMAP_DEVICE_PATH MemMapDevPath; - EFI_DEVICE_PATH_PROTOCOL EndDevPath; + MEMMAP_DEVICE_PATH MemMapDevPath; + EFI_DEVICE_PATH_PROTOCOL EndDevPath; } FV_DEVICE_PATH; #pragma pack () typedef struct { - UINTN Signature; - FV_DEVICE_PATH DevicePath; - VOID *BufferPtr; - UINTN BlockSize; - UINTN Size; - EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance; + UINTN Signature; + FV_DEVICE_PATH DevicePath; + VOID *BufferPtr; + UINTN BlockSize; + UINTN Size; + EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance; } EFI_FW_VOL_BLOCK_DEVICE; - // // Constants // @@ -63,12 +60,12 @@ typedef struct { #define FTW_WRITE_QUEUE_SIZE \ (FixedPcdGet32 (PcdFlashNvStorageFtwWorkingSize) - \ sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER)) -#define EMU_FV_HEADER_LENGTH OFFSET_OF (FVB_FV_HDR_AND_VARS_TEMPLATE, VarHdr) +#define EMU_FV_HEADER_LENGTH OFFSET_OF (FVB_FV_HDR_AND_VARS_TEMPLATE, VarHdr) -#define NOT_ERASED_BIT 0 -#define ERASED_BIT 1 -#define ERASED_UINT8 0xff -#define ERASED_UINT32 0xffffffff +#define NOT_ERASED_BIT 0 +#define ERASED_BIT 1 +#define ERASED_UINT8 0xff +#define ERASED_UINT32 0xffffffff // // Protocol APIs diff --git a/OvmfPkg/EnrollDefaultKeys/AuthData.c b/OvmfPkg/EnrollDefaultKeys/AuthData.c index 3b4856a01f..53ee7f7003 100644 --- a/OvmfPkg/EnrollDefaultKeys/AuthData.c +++ b/OvmfPkg/EnrollDefaultKeys/AuthData.c @@ -8,14 +8,13 @@ #include "EnrollDefaultKeys.h" - // // Second KEK: "Microsoft Corporation KEK CA 2011". // SHA1: 31:59:0b:fd:89:c9:d7:4e:d0:87:df:ac:66:33:4b:39:31:25:4b:30 // // "dbx" updates in "dbxtool" are signed with a key derived from this KEK. // -CONST UINT8 mMicrosoftKek[] = { +CONST UINT8 mMicrosoftKek[] = { 0x30, 0x82, 0x05, 0xe8, 0x30, 0x82, 0x03, 0xd0, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0a, 0x61, 0x0a, 0xd1, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, @@ -135,8 +134,7 @@ CONST UINT8 mMicrosoftKek[] = { 0x57, 0x4e, 0x36, 0xd2, 0x32, 0x84, 0xbf, 0x9e }; -CONST UINTN mSizeOfMicrosoftKek = sizeof mMicrosoftKek; - +CONST UINTN mSizeOfMicrosoftKek = sizeof mMicrosoftKek; // // First DB entry: "Microsoft Windows Production PCA 2011" @@ -145,7 +143,7 @@ CONST UINTN mSizeOfMicrosoftKek = sizeof mMicrosoftKek; // Windows 8 and Windows Server 2012 R2 boot loaders are signed with a chain // rooted in this certificate. // -CONST UINT8 mMicrosoftPca[] = { +CONST UINT8 mMicrosoftPca[] = { 0x30, 0x82, 0x05, 0xd7, 0x30, 0x82, 0x03, 0xbf, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0a, 0x61, 0x07, 0x76, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, @@ -264,8 +262,7 @@ CONST UINT8 mMicrosoftPca[] = { 0x62, 0x1c, 0x59, 0x7e }; -CONST UINTN mSizeOfMicrosoftPca = sizeof mMicrosoftPca; - +CONST UINTN mSizeOfMicrosoftPca = sizeof mMicrosoftPca; // // Second DB entry: "Microsoft Corporation UEFI CA 2011" @@ -273,7 +270,7 @@ CONST UINTN mSizeOfMicrosoftPca = sizeof mMicrosoftPca; // // To verify the "shim" binary and PCI expansion ROMs with. // -CONST UINT8 mMicrosoftUefiCa[] = { +CONST UINT8 mMicrosoftUefiCa[] = { 0x30, 0x82, 0x06, 0x10, 0x30, 0x82, 0x03, 0xf8, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0a, 0x61, 0x08, 0xd3, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, @@ -396,8 +393,7 @@ CONST UINT8 mMicrosoftUefiCa[] = { 0x07, 0x92, 0x9b, 0xf5, 0xa6, 0xbc, 0x59, 0x83, 0x58 }; -CONST UINTN mSizeOfMicrosoftUefiCa = sizeof mMicrosoftUefiCa; - +CONST UINTN mSizeOfMicrosoftUefiCa = sizeof mMicrosoftUefiCa; // // The Microsoft.UefiSecureBootLogo.Tests.OutOfBoxConfirmDBXisPresent test case @@ -431,10 +427,10 @@ CONST UINTN mSizeOfMicrosoftUefiCa = sizeof mMicrosoftUefiCa; // practice recommended -- in natural English langauge -- in the // above-referenced TechNet article. // -CONST UINT8 mSha256OfDevNull[] = { +CONST UINT8 mSha256OfDevNull[] = { 0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55 }; -CONST UINTN mSizeOfSha256OfDevNull = sizeof mSha256OfDevNull; +CONST UINTN mSizeOfSha256OfDevNull = sizeof mSha256OfDevNull; diff --git a/OvmfPkg/EnrollDefaultKeys/EnrollDefaultKeys.c b/OvmfPkg/EnrollDefaultKeys/EnrollDefaultKeys.c index 302b80d977..094e4c821b 100644 --- a/OvmfPkg/EnrollDefaultKeys/EnrollDefaultKeys.c +++ b/OvmfPkg/EnrollDefaultKeys/EnrollDefaultKeys.c @@ -24,7 +24,6 @@ #include "EnrollDefaultKeys.h" - /** Fetch the X509 certificate (to be used as Platform Key and first Key Exchange Key) from SMBIOS. @@ -54,47 +53,55 @@ STATIC EFI_STATUS GetPkKek1 ( - OUT UINT8 **PkKek1, - OUT UINTN *SizeOfPkKek1 + OUT UINT8 **PkKek1, + OUT UINTN *SizeOfPkKek1 ) { - CONST CHAR8 *Base64Cert; - CHAR8 OvmfPkKek1AppPrefix[GUID_STRING_LENGTH + 1 + 1]; - EFI_STATUS Status; - EFI_SMBIOS_PROTOCOL *Smbios; - EFI_SMBIOS_HANDLE Handle; - EFI_SMBIOS_TYPE Type; - EFI_SMBIOS_TABLE_HEADER *Header; - SMBIOS_TABLE_TYPE11 *OemStringsTable; - UINTN Base64CertLen; - UINTN DecodedCertSize; - UINT8 *DecodedCert; + CONST CHAR8 *Base64Cert; + CHAR8 OvmfPkKek1AppPrefix[GUID_STRING_LENGTH + 1 + 1]; + EFI_STATUS Status; + EFI_SMBIOS_PROTOCOL *Smbios; + EFI_SMBIOS_HANDLE Handle; + EFI_SMBIOS_TYPE Type; + EFI_SMBIOS_TABLE_HEADER *Header; + SMBIOS_TABLE_TYPE11 *OemStringsTable; + UINTN Base64CertLen; + UINTN DecodedCertSize; + UINT8 *DecodedCert; Base64Cert = NULL; // // Format the application prefix, for OEM String matching. // - AsciiSPrint (OvmfPkKek1AppPrefix, sizeof OvmfPkKek1AppPrefix, "%g:", - &gOvmfPkKek1AppPrefixGuid); + AsciiSPrint ( + OvmfPkKek1AppPrefix, + sizeof OvmfPkKek1AppPrefix, + "%g:", + &gOvmfPkKek1AppPrefixGuid + ); // // Scan all "OEM Strings" tables. // - Status = gBS->LocateProtocol (&gEfiSmbiosProtocolGuid, NULL, - (VOID **)&Smbios); + Status = gBS->LocateProtocol ( + &gEfiSmbiosProtocolGuid, + NULL, + (VOID **)&Smbios + ); if (EFI_ERROR (Status)) { AsciiPrint ("error: failed to locate EFI_SMBIOS_PROTOCOL: %r\n", Status); return Status; } Handle = SMBIOS_HANDLE_PI_RESERVED; - Type = SMBIOS_TYPE_OEM_STRINGS; + Type = SMBIOS_TYPE_OEM_STRINGS; for (Status = Smbios->GetNext (Smbios, &Handle, &Type, &Header, NULL); !EFI_ERROR (Status); - Status = Smbios->GetNext (Smbios, &Handle, &Type, &Header, NULL)) { - CONST CHAR8 *OemString; - UINTN Idx; + Status = Smbios->GetNext (Smbios, &Handle, &Type, &Header, NULL)) + { + CONST CHAR8 *OemString; + UINTN Idx; if (Header->Length < sizeof *OemStringsTable) { // @@ -102,6 +109,7 @@ GetPkKek1 ( // continue; } + OemStringsTable = (SMBIOS_TABLE_TYPE11 *)Header; // @@ -110,13 +118,17 @@ GetPkKek1 ( // OemString = (CONST CHAR8 *)(OemStringsTable + 1); for (Idx = 0; Idx < OemStringsTable->StringCount; ++Idx) { - CHAR8 CandidatePrefix[sizeof OvmfPkKek1AppPrefix]; + CHAR8 CandidatePrefix[sizeof OvmfPkKek1AppPrefix]; // // NUL-terminate the candidate prefix for case-insensitive comparison. // - AsciiStrnCpyS (CandidatePrefix, sizeof CandidatePrefix, OemString, - GUID_STRING_LENGTH + 1); + AsciiStrnCpyS ( + CandidatePrefix, + sizeof CandidatePrefix, + OemString, + GUID_STRING_LENGTH + 1 + ); if (AsciiStriCmp (OvmfPkKek1AppPrefix, CandidatePrefix) == 0) { // // The current string matches the prefix. @@ -124,6 +136,7 @@ GetPkKek1 ( Base64Cert = OemString + GUID_STRING_LENGTH + 1; break; } + OemString += AsciiStrSize (OemString); } @@ -139,8 +152,11 @@ GetPkKek1 ( // // No table with a matching string has been found. // - AsciiPrint ("error: OEM String with app prefix %g not found: %r\n", - &gOvmfPkKek1AppPrefixGuid, Status); + AsciiPrint ( + "error: OEM String with app prefix %g not found: %r\n", + &gOvmfPkKek1AppPrefixGuid, + Status + ); return EFI_NOT_FOUND; } @@ -151,19 +167,23 @@ GetPkKek1 ( // Verify the base64 encoding, and determine the decoded size. // DecodedCertSize = 0; - Status = Base64Decode (Base64Cert, Base64CertLen, NULL, &DecodedCertSize); + Status = Base64Decode (Base64Cert, Base64CertLen, NULL, &DecodedCertSize); switch (Status) { - case EFI_BUFFER_TOO_SMALL: - ASSERT (DecodedCertSize > 0); - break; - case EFI_SUCCESS: - AsciiPrint ("error: empty certificate after app prefix %g\n", - &gOvmfPkKek1AppPrefixGuid); - return EFI_PROTOCOL_ERROR; - default: - AsciiPrint ("error: invalid base64 string after app prefix %g\n", - &gOvmfPkKek1AppPrefixGuid); - return EFI_PROTOCOL_ERROR; + case EFI_BUFFER_TOO_SMALL: + ASSERT (DecodedCertSize > 0); + break; + case EFI_SUCCESS: + AsciiPrint ( + "error: empty certificate after app prefix %g\n", + &gOvmfPkKek1AppPrefixGuid + ); + return EFI_PROTOCOL_ERROR; + default: + AsciiPrint ( + "error: invalid base64 string after app prefix %g\n", + &gOvmfPkKek1AppPrefixGuid + ); + return EFI_PROTOCOL_ERROR; } // @@ -178,16 +198,19 @@ GetPkKek1 ( // // Decoding will succeed at this point. // - Status = Base64Decode (Base64Cert, Base64CertLen, DecodedCert, - &DecodedCertSize); + Status = Base64Decode ( + Base64Cert, + Base64CertLen, + DecodedCert, + &DecodedCertSize + ); ASSERT_EFI_ERROR (Status); - *PkKek1 = DecodedCert; + *PkKek1 = DecodedCert; *SizeOfPkKek1 = DecodedCertSize; return EFI_SUCCESS; } - /** Enroll a set of certificates in a global variable, overwriting it. @@ -235,20 +258,20 @@ STATIC EFI_STATUS EFIAPI EnrollListOfCerts ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN EFI_GUID *CertType, + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + IN EFI_GUID *CertType, ... ) { - UINTN DataSize; - SINGLE_HEADER *SingleHeader; - REPEATING_HEADER *RepeatingHeader; - VA_LIST Marker; - CONST UINT8 *Cert; - EFI_STATUS Status; - UINT8 *Data; - UINT8 *Position; + UINTN DataSize; + SINGLE_HEADER *SingleHeader; + REPEATING_HEADER *RepeatingHeader; + VA_LIST Marker; + CONST UINT8 *Cert; + EFI_STATUS Status; + UINT8 *Data; + UINT8 *Position; Status = EFI_SUCCESS; @@ -259,25 +282,30 @@ EnrollListOfCerts ( VA_START (Marker, CertType); for (Cert = VA_ARG (Marker, CONST UINT8 *); Cert != NULL; - Cert = VA_ARG (Marker, CONST UINT8 *)) { - UINTN CertSize; + Cert = VA_ARG (Marker, CONST UINT8 *)) + { + UINTN CertSize; CertSize = VA_ARG (Marker, UINTN); (VOID)VA_ARG (Marker, CONST EFI_GUID *); - if (CertSize == 0 || - CertSize > MAX_UINT32 - sizeof *RepeatingHeader || - DataSize > MAX_UINT32 - sizeof *RepeatingHeader - CertSize) { + if ((CertSize == 0) || + (CertSize > MAX_UINT32 - sizeof *RepeatingHeader) || + (DataSize > MAX_UINT32 - sizeof *RepeatingHeader - CertSize)) + { Status = EFI_INVALID_PARAMETER; break; } + DataSize += sizeof *RepeatingHeader + CertSize; } + VA_END (Marker); if (DataSize == sizeof *SingleHeader) { Status = EFI_INVALID_PARAMETER; } + if (EFI_ERROR (Status)) { goto Out; } @@ -291,27 +319,28 @@ EnrollListOfCerts ( Position = Data; SingleHeader = (SINGLE_HEADER *)Position; - Status = gRT->GetTime (&SingleHeader->TimeStamp, NULL); + Status = gRT->GetTime (&SingleHeader->TimeStamp, NULL); if (EFI_ERROR (Status)) { goto FreeData; } + SingleHeader->TimeStamp.Pad1 = 0; SingleHeader->TimeStamp.Nanosecond = 0; SingleHeader->TimeStamp.TimeZone = 0; SingleHeader->TimeStamp.Daylight = 0; SingleHeader->TimeStamp.Pad2 = 0; -#if 0 - SingleHeader->dwLength = DataSize - sizeof SingleHeader->TimeStamp; -#else + #if 0 + SingleHeader->dwLength = DataSize - sizeof SingleHeader->TimeStamp; + #else // // This looks like a bug in edk2. According to the UEFI specification, // dwLength is "The length of the entire certificate, including the length of // the header, in bytes". That shouldn't stop right after CertType -- it // should include everything below it. // - SingleHeader->dwLength = sizeof *SingleHeader - - sizeof SingleHeader->TimeStamp; -#endif + SingleHeader->dwLength = sizeof *SingleHeader + - sizeof SingleHeader->TimeStamp; + #endif SingleHeader->wRevision = 0x0200; SingleHeader->wCertificateType = WIN_CERT_TYPE_EFI_GUID; CopyGuid (&SingleHeader->CertType, &gEfiCertPkcs7Guid); @@ -320,16 +349,17 @@ EnrollListOfCerts ( VA_START (Marker, CertType); for (Cert = VA_ARG (Marker, CONST UINT8 *); Cert != NULL; - Cert = VA_ARG (Marker, CONST UINT8 *)) { - UINTN CertSize; - CONST EFI_GUID *OwnerGuid; + Cert = VA_ARG (Marker, CONST UINT8 *)) + { + UINTN CertSize; + CONST EFI_GUID *OwnerGuid; CertSize = VA_ARG (Marker, UINTN); OwnerGuid = VA_ARG (Marker, CONST EFI_GUID *); RepeatingHeader = (REPEATING_HEADER *)Position; CopyGuid (&RepeatingHeader->SignatureType, CertType); - RepeatingHeader->SignatureListSize = + RepeatingHeader->SignatureListSize = (UINT32)(sizeof *RepeatingHeader + CertSize); RepeatingHeader->SignatureHeaderSize = 0; RepeatingHeader->SignatureSize = @@ -340,29 +370,39 @@ EnrollListOfCerts ( CopyMem (Position, Cert, CertSize); Position += CertSize; } + VA_END (Marker); ASSERT (Data + DataSize == Position); - Status = gRT->SetVariable (VariableName, VendorGuid, + Status = gRT->SetVariable ( + VariableName, + VendorGuid, (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS), - DataSize, Data); + DataSize, + Data + ); FreeData: FreePool (Data); Out: if (EFI_ERROR (Status)) { - AsciiPrint ("error: %a(\"%s\", %g): %r\n", __FUNCTION__, VariableName, - VendorGuid, Status); + AsciiPrint ( + "error: %a(\"%s\", %g): %r\n", + __FUNCTION__, + VariableName, + VendorGuid, + Status + ); } + return Status; } - /** Read a UEFI variable into a caller-allocated buffer, enforcing an exact size. @@ -404,39 +444,48 @@ Out: STATIC EFI_STATUS GetExact ( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - OUT VOID *Data, - IN UINTN DataSize, - IN BOOLEAN AllowMissing + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + OUT VOID *Data, + IN UINTN DataSize, + IN BOOLEAN AllowMissing ) { - UINTN Size; - EFI_STATUS Status; + UINTN Size; + EFI_STATUS Status; - Size = DataSize; + Size = DataSize; Status = gRT->GetVariable (VariableName, VendorGuid, NULL, &Size, Data); if (EFI_ERROR (Status)) { - if (Status == EFI_NOT_FOUND && AllowMissing) { + if ((Status == EFI_NOT_FOUND) && AllowMissing) { ZeroMem (Data, DataSize); return EFI_SUCCESS; } - AsciiPrint ("error: GetVariable(\"%s\", %g): %r\n", VariableName, - VendorGuid, Status); + AsciiPrint ( + "error: GetVariable(\"%s\", %g): %r\n", + VariableName, + VendorGuid, + Status + ); return Status; } if (Size != DataSize) { - AsciiPrint ("error: GetVariable(\"%s\", %g): expected size 0x%Lx, " - "got 0x%Lx\n", VariableName, VendorGuid, (UINT64)DataSize, (UINT64)Size); + AsciiPrint ( + "error: GetVariable(\"%s\", %g): expected size 0x%Lx, " + "got 0x%Lx\n", + VariableName, + VendorGuid, + (UINT64)DataSize, + (UINT64)Size + ); return EFI_PROTOCOL_ERROR; } return EFI_SUCCESS; } - /** Populate a SETTINGS structure from the underlying UEFI variables. @@ -464,42 +513,65 @@ GetExact ( STATIC EFI_STATUS GetSettings ( - OUT SETTINGS *Settings + OUT SETTINGS *Settings ) { - EFI_STATUS Status; + EFI_STATUS Status; - Status = GetExact (EFI_SETUP_MODE_NAME, &gEfiGlobalVariableGuid, - &Settings->SetupMode, sizeof Settings->SetupMode, FALSE); + Status = GetExact ( + EFI_SETUP_MODE_NAME, + &gEfiGlobalVariableGuid, + &Settings->SetupMode, + sizeof Settings->SetupMode, + FALSE + ); if (EFI_ERROR (Status)) { return Status; } - Status = GetExact (EFI_SECURE_BOOT_MODE_NAME, &gEfiGlobalVariableGuid, - &Settings->SecureBoot, sizeof Settings->SecureBoot, FALSE); + Status = GetExact ( + EFI_SECURE_BOOT_MODE_NAME, + &gEfiGlobalVariableGuid, + &Settings->SecureBoot, + sizeof Settings->SecureBoot, + FALSE + ); if (EFI_ERROR (Status)) { return Status; } - Status = GetExact (EFI_SECURE_BOOT_ENABLE_NAME, - &gEfiSecureBootEnableDisableGuid, &Settings->SecureBootEnable, - sizeof Settings->SecureBootEnable, TRUE); + Status = GetExact ( + EFI_SECURE_BOOT_ENABLE_NAME, + &gEfiSecureBootEnableDisableGuid, + &Settings->SecureBootEnable, + sizeof Settings->SecureBootEnable, + TRUE + ); if (EFI_ERROR (Status)) { return Status; } - Status = GetExact (EFI_CUSTOM_MODE_NAME, &gEfiCustomModeEnableGuid, - &Settings->CustomMode, sizeof Settings->CustomMode, FALSE); + Status = GetExact ( + EFI_CUSTOM_MODE_NAME, + &gEfiCustomModeEnableGuid, + &Settings->CustomMode, + sizeof Settings->CustomMode, + FALSE + ); if (EFI_ERROR (Status)) { return Status; } - Status = GetExact (EFI_VENDOR_KEYS_VARIABLE_NAME, &gEfiGlobalVariableGuid, - &Settings->VendorKeys, sizeof Settings->VendorKeys, FALSE); + Status = GetExact ( + EFI_VENDOR_KEYS_VARIABLE_NAME, + &gEfiGlobalVariableGuid, + &Settings->VendorKeys, + sizeof Settings->VendorKeys, + FALSE + ); return Status; } - /** Print the contents of a SETTINGS structure to the UEFI console. @@ -508,33 +580,38 @@ GetSettings ( STATIC VOID PrintSettings ( - IN CONST SETTINGS *Settings + IN CONST SETTINGS *Settings ) { - AsciiPrint ("info: SetupMode=%d SecureBoot=%d SecureBootEnable=%d " - "CustomMode=%d VendorKeys=%d\n", Settings->SetupMode, Settings->SecureBoot, - Settings->SecureBootEnable, Settings->CustomMode, Settings->VendorKeys); + AsciiPrint ( + "info: SetupMode=%d SecureBoot=%d SecureBootEnable=%d " + "CustomMode=%d VendorKeys=%d\n", + Settings->SetupMode, + Settings->SecureBoot, + Settings->SecureBootEnable, + Settings->CustomMode, + Settings->VendorKeys + ); } - /** Entry point function of this shell application. **/ INTN EFIAPI ShellAppMain ( - IN UINTN Argc, - IN CHAR16 **Argv + IN UINTN Argc, + IN CHAR16 **Argv ) { - INTN RetVal; - EFI_STATUS Status; - SETTINGS Settings; - UINT8 *PkKek1; - UINTN SizeOfPkKek1; - BOOLEAN NoDefault; - - if (Argc == 2 && StrCmp (Argv[1], L"--no-default") == 0) { + INTN RetVal; + EFI_STATUS Status; + SETTINGS Settings; + UINT8 *PkKek1; + UINTN SizeOfPkKek1; + BOOLEAN NoDefault; + + if ((Argc == 2) && (StrCmp (Argv[1], L"--no-default") == 0)) { NoDefault = TRUE; } else { NoDefault = FALSE; @@ -552,6 +629,7 @@ ShellAppMain ( if (EFI_ERROR (Status)) { return RetVal; } + PrintSettings (&Settings); if (Settings.SetupMode != 1) { @@ -563,7 +641,7 @@ ShellAppMain ( // Set PkKek1 and SizeOfPkKek1 to suppress incorrect compiler/analyzer // warnings. // - PkKek1 = NULL; + PkKek1 = NULL; SizeOfPkKek1 = 0; // @@ -581,13 +659,21 @@ ShellAppMain ( // if (Settings.CustomMode != CUSTOM_SECURE_BOOT_MODE) { Settings.CustomMode = CUSTOM_SECURE_BOOT_MODE; - Status = gRT->SetVariable (EFI_CUSTOM_MODE_NAME, &gEfiCustomModeEnableGuid, - (EFI_VARIABLE_NON_VOLATILE | - EFI_VARIABLE_BOOTSERVICE_ACCESS), - sizeof Settings.CustomMode, &Settings.CustomMode); + Status = gRT->SetVariable ( + EFI_CUSTOM_MODE_NAME, + &gEfiCustomModeEnableGuid, + (EFI_VARIABLE_NON_VOLATILE | + EFI_VARIABLE_BOOTSERVICE_ACCESS), + sizeof Settings.CustomMode, + &Settings.CustomMode + ); if (EFI_ERROR (Status)) { - AsciiPrint ("error: SetVariable(\"%s\", %g): %r\n", EFI_CUSTOM_MODE_NAME, - &gEfiCustomModeEnableGuid, Status); + AsciiPrint ( + "error: SetVariable(\"%s\", %g): %r\n", + EFI_CUSTOM_MODE_NAME, + &gEfiCustomModeEnableGuid, + Status + ); goto FreePkKek1; } } @@ -600,17 +686,26 @@ ShellAppMain ( EFI_IMAGE_SECURITY_DATABASE, &gEfiImageSecurityDatabaseGuid, &gEfiCertX509Guid, - PkKek1, SizeOfPkKek1, &gEfiCallerIdGuid, - NULL); + PkKek1, + SizeOfPkKek1, + &gEfiCallerIdGuid, + NULL + ); } else { Status = EnrollListOfCerts ( EFI_IMAGE_SECURITY_DATABASE, &gEfiImageSecurityDatabaseGuid, &gEfiCertX509Guid, - mMicrosoftPca, mSizeOfMicrosoftPca, &gMicrosoftVendorGuid, - mMicrosoftUefiCa, mSizeOfMicrosoftUefiCa, &gMicrosoftVendorGuid, - NULL); + mMicrosoftPca, + mSizeOfMicrosoftPca, + &gMicrosoftVendorGuid, + mMicrosoftUefiCa, + mSizeOfMicrosoftUefiCa, + &gMicrosoftVendorGuid, + NULL + ); } + if (EFI_ERROR (Status)) { goto FreePkKek1; } @@ -622,8 +717,11 @@ ShellAppMain ( EFI_IMAGE_SECURITY_DATABASE1, &gEfiImageSecurityDatabaseGuid, &gEfiCertSha256Guid, - mSha256OfDevNull, mSizeOfSha256OfDevNull, &gEfiCallerIdGuid, - NULL); + mSha256OfDevNull, + mSizeOfSha256OfDevNull, + &gEfiCallerIdGuid, + NULL + ); if (EFI_ERROR (Status)) { goto FreePkKek1; } @@ -636,17 +734,26 @@ ShellAppMain ( EFI_KEY_EXCHANGE_KEY_NAME, &gEfiGlobalVariableGuid, &gEfiCertX509Guid, - PkKek1, SizeOfPkKek1, &gEfiCallerIdGuid, - NULL); + PkKek1, + SizeOfPkKek1, + &gEfiCallerIdGuid, + NULL + ); } else { Status = EnrollListOfCerts ( EFI_KEY_EXCHANGE_KEY_NAME, &gEfiGlobalVariableGuid, &gEfiCertX509Guid, - PkKek1, SizeOfPkKek1, &gEfiCallerIdGuid, - mMicrosoftKek, mSizeOfMicrosoftKek, &gMicrosoftVendorGuid, - NULL); + PkKek1, + SizeOfPkKek1, + &gEfiCallerIdGuid, + mMicrosoftKek, + mSizeOfMicrosoftKek, + &gMicrosoftVendorGuid, + NULL + ); } + if (EFI_ERROR (Status)) { goto FreePkKek1; } @@ -658,8 +765,11 @@ ShellAppMain ( EFI_PLATFORM_KEY_NAME, &gEfiGlobalVariableGuid, &gEfiCertX509Guid, - PkKek1, SizeOfPkKek1, &gEfiGlobalVariableGuid, - NULL); + PkKek1, + SizeOfPkKek1, + &gEfiGlobalVariableGuid, + NULL + ); if (EFI_ERROR (Status)) { goto FreePkKek1; } @@ -669,12 +779,20 @@ ShellAppMain ( // signatures. // Settings.CustomMode = STANDARD_SECURE_BOOT_MODE; - Status = gRT->SetVariable (EFI_CUSTOM_MODE_NAME, &gEfiCustomModeEnableGuid, - EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS, - sizeof Settings.CustomMode, &Settings.CustomMode); + Status = gRT->SetVariable ( + EFI_CUSTOM_MODE_NAME, + &gEfiCustomModeEnableGuid, + EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS, + sizeof Settings.CustomMode, + &Settings.CustomMode + ); if (EFI_ERROR (Status)) { - AsciiPrint ("error: SetVariable(\"%s\", %g): %r\n", EFI_CUSTOM_MODE_NAME, - &gEfiCustomModeEnableGuid, Status); + AsciiPrint ( + "error: SetVariable(\"%s\", %g): %r\n", + EFI_CUSTOM_MODE_NAME, + &gEfiCustomModeEnableGuid, + Status + ); goto FreePkKek1; } @@ -713,11 +831,13 @@ ShellAppMain ( if (EFI_ERROR (Status)) { goto FreePkKek1; } + PrintSettings (&Settings); - if (Settings.SetupMode != 0 || Settings.SecureBoot != 1 || - Settings.SecureBootEnable != 1 || Settings.CustomMode != 0 || - Settings.VendorKeys != 0) { + if ((Settings.SetupMode != 0) || (Settings.SecureBoot != 1) || + (Settings.SecureBootEnable != 1) || (Settings.CustomMode != 0) || + (Settings.VendorKeys != 0)) + { AsciiPrint ("error: unexpected\n"); goto FreePkKek1; } diff --git a/OvmfPkg/EnrollDefaultKeys/EnrollDefaultKeys.h b/OvmfPkg/EnrollDefaultKeys/EnrollDefaultKeys.h index 8e61f0a77b..56da9c71d6 100644 --- a/OvmfPkg/EnrollDefaultKeys/EnrollDefaultKeys.h +++ b/OvmfPkg/EnrollDefaultKeys/EnrollDefaultKeys.h @@ -75,30 +75,30 @@ // #pragma pack (1) typedef struct { - EFI_TIME TimeStamp; + EFI_TIME TimeStamp; // // dwLength covers data below // - UINT32 dwLength; - UINT16 wRevision; - UINT16 wCertificateType; - EFI_GUID CertType; + UINT32 dwLength; + UINT16 wRevision; + UINT16 wCertificateType; + EFI_GUID CertType; } SINGLE_HEADER; typedef struct { // // SignatureListSize covers data below // - EFI_GUID SignatureType; - UINT32 SignatureListSize; - UINT32 SignatureHeaderSize; // constant 0 - UINT32 SignatureSize; + EFI_GUID SignatureType; + UINT32 SignatureListSize; + UINT32 SignatureHeaderSize; // constant 0 + UINT32 SignatureSize; // // SignatureSize covers data below // - EFI_GUID SignatureOwner; + EFI_GUID SignatureOwner; // // X.509 certificate follows @@ -106,33 +106,31 @@ typedef struct { } REPEATING_HEADER; #pragma pack () - // // A structure that collects the values of UEFI variables related to Secure // Boot. // typedef struct { - UINT8 SetupMode; - UINT8 SecureBoot; - UINT8 SecureBootEnable; - UINT8 CustomMode; - UINT8 VendorKeys; + UINT8 SetupMode; + UINT8 SecureBoot; + UINT8 SecureBootEnable; + UINT8 CustomMode; + UINT8 VendorKeys; } SETTINGS; - // // Refer to "AuthData.c" for details on the following objects. // -extern CONST UINT8 mMicrosoftKek[]; -extern CONST UINTN mSizeOfMicrosoftKek; +extern CONST UINT8 mMicrosoftKek[]; +extern CONST UINTN mSizeOfMicrosoftKek; -extern CONST UINT8 mMicrosoftPca[]; -extern CONST UINTN mSizeOfMicrosoftPca; +extern CONST UINT8 mMicrosoftPca[]; +extern CONST UINTN mSizeOfMicrosoftPca; -extern CONST UINT8 mMicrosoftUefiCa[]; -extern CONST UINTN mSizeOfMicrosoftUefiCa; +extern CONST UINT8 mMicrosoftUefiCa[]; +extern CONST UINTN mSizeOfMicrosoftUefiCa; -extern CONST UINT8 mSha256OfDevNull[]; -extern CONST UINTN mSizeOfSha256OfDevNull; +extern CONST UINT8 mSha256OfDevNull[]; +extern CONST UINTN mSizeOfSha256OfDevNull; #endif /* ENROLL_DEFAULT_KEYS_H_ */ diff --git a/OvmfPkg/Fdt/FdtPciHostBridgeLib/FdtPciHostBridgeLib.c b/OvmfPkg/Fdt/FdtPciHostBridgeLib/FdtPciHostBridgeLib.c index 56d00edb7c..98828e0b26 100644 --- a/OvmfPkg/Fdt/FdtPciHostBridgeLib/FdtPciHostBridgeLib.c +++ b/OvmfPkg/Fdt/FdtPciHostBridgeLib/FdtPciHostBridgeLib.c @@ -27,103 +27,124 @@ // #pragma pack (1) typedef struct { - UINT32 Type; - UINT64 ChildBase; - UINT64 CpuBase; - UINT64 Size; + UINT32 Type; + UINT64 ChildBase; + UINT64 CpuBase; + UINT64 Size; } DTB_PCI_HOST_RANGE_RECORD; #pragma pack () -#define DTB_PCI_HOST_RANGE_RELOCATABLE BIT31 -#define DTB_PCI_HOST_RANGE_PREFETCHABLE BIT30 -#define DTB_PCI_HOST_RANGE_ALIASED BIT29 -#define DTB_PCI_HOST_RANGE_MMIO32 BIT25 -#define DTB_PCI_HOST_RANGE_MMIO64 (BIT25 | BIT24) -#define DTB_PCI_HOST_RANGE_IO BIT24 -#define DTB_PCI_HOST_RANGE_TYPEMASK (BIT31 | BIT30 | BIT29 | BIT25 | BIT24) +#define DTB_PCI_HOST_RANGE_RELOCATABLE BIT31 +#define DTB_PCI_HOST_RANGE_PREFETCHABLE BIT30 +#define DTB_PCI_HOST_RANGE_ALIASED BIT29 +#define DTB_PCI_HOST_RANGE_MMIO32 BIT25 +#define DTB_PCI_HOST_RANGE_MMIO64 (BIT25 | BIT24) +#define DTB_PCI_HOST_RANGE_IO BIT24 +#define DTB_PCI_HOST_RANGE_TYPEMASK (BIT31 | BIT30 | BIT29 | BIT25 | BIT24) STATIC EFI_STATUS MapGcdMmioSpace ( - IN UINT64 Base, - IN UINT64 Size + IN UINT64 Base, + IN UINT64 Size ) { - EFI_STATUS Status; - - Status = gDS->AddMemorySpace (EfiGcdMemoryTypeMemoryMappedIo, Base, Size, - EFI_MEMORY_UC); + EFI_STATUS Status; + + Status = gDS->AddMemorySpace ( + EfiGcdMemoryTypeMemoryMappedIo, + Base, + Size, + EFI_MEMORY_UC + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, + DEBUG (( + DEBUG_ERROR, "%a: failed to add GCD memory space for region [0x%Lx+0x%Lx)\n", - __FUNCTION__, Base, Size)); + __FUNCTION__, + Base, + Size + )); return Status; } Status = gDS->SetMemorySpaceAttributes (Base, Size, EFI_MEMORY_UC); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, + DEBUG (( + DEBUG_ERROR, "%a: failed to set memory space attributes for region [0x%Lx+0x%Lx)\n", - __FUNCTION__, Base, Size)); + __FUNCTION__, + Base, + Size + )); } + return Status; } STATIC EFI_STATUS ProcessPciHost ( - OUT UINT64 *IoBase, - OUT UINT64 *IoSize, - OUT UINT64 *Mmio32Base, - OUT UINT64 *Mmio32Size, - OUT UINT64 *Mmio64Base, - OUT UINT64 *Mmio64Size, - OUT UINT32 *BusMin, - OUT UINT32 *BusMax + OUT UINT64 *IoBase, + OUT UINT64 *IoSize, + OUT UINT64 *Mmio32Base, + OUT UINT64 *Mmio32Size, + OUT UINT64 *Mmio64Base, + OUT UINT64 *Mmio64Size, + OUT UINT32 *BusMin, + OUT UINT32 *BusMax ) { - FDT_CLIENT_PROTOCOL *FdtClient; - INT32 Node; - UINT64 ConfigBase, ConfigSize; - CONST VOID *Prop; - UINT32 Len; - UINT32 RecordIdx; - EFI_STATUS Status; - UINT64 IoTranslation; - UINT64 Mmio32Translation; - UINT64 Mmio64Translation; + FDT_CLIENT_PROTOCOL *FdtClient; + INT32 Node; + UINT64 ConfigBase, ConfigSize; + CONST VOID *Prop; + UINT32 Len; + UINT32 RecordIdx; + EFI_STATUS Status; + UINT64 IoTranslation; + UINT64 Mmio32Translation; + UINT64 Mmio64Translation; // // The following output arguments are initialized only in // order to suppress '-Werror=maybe-uninitialized' warnings // *incorrectly* emitted by some gcc versions. // - *IoBase = 0; + *IoBase = 0; *Mmio32Base = 0; *Mmio64Base = MAX_UINT64; - *BusMin = 0; - *BusMax = 0; + *BusMin = 0; + *BusMax = 0; // // *IoSize, *Mmio##Size and IoTranslation are initialized to zero because the // logic below requires it. However, since they are also affected by the issue // reported above, they are initialized early. // - *IoSize = 0; - *Mmio32Size = 0; - *Mmio64Size = 0; + *IoSize = 0; + *Mmio32Size = 0; + *Mmio64Size = 0; IoTranslation = 0; - Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL, - (VOID **)&FdtClient); + Status = gBS->LocateProtocol ( + &gFdtClientProtocolGuid, + NULL, + (VOID **)&FdtClient + ); ASSERT_EFI_ERROR (Status); - Status = FdtClient->FindCompatibleNode (FdtClient, "pci-host-ecam-generic", - &Node); + Status = FdtClient->FindCompatibleNode ( + FdtClient, + "pci-host-ecam-generic", + &Node + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_INFO, + DEBUG (( + DEBUG_INFO, "%a: No 'pci-host-ecam-generic' compatible DT node found\n", - __FUNCTION__)); + __FUNCTION__ + )); return EFI_NOT_FOUND; } @@ -134,15 +155,22 @@ ProcessPciHost ( // A DT can legally describe multiple PCI host bridges, but we are not // equipped to deal with that. So assert that there is only one. // - Status = FdtClient->FindNextCompatibleNode (FdtClient, - "pci-host-ecam-generic", Node, &Tmp); + Status = FdtClient->FindNextCompatibleNode ( + FdtClient, + "pci-host-ecam-generic", + Node, + &Tmp + ); ASSERT (Status == EFI_NOT_FOUND); - ); + ); Status = FdtClient->GetNodeProperty (FdtClient, Node, "reg", &Prop, &Len); - if (EFI_ERROR (Status) || Len != 2 * sizeof (UINT64)) { - DEBUG ((DEBUG_ERROR, "%a: 'reg' property not found or invalid\n", - __FUNCTION__)); + if (EFI_ERROR (Status) || (Len != 2 * sizeof (UINT64))) { + DEBUG (( + DEBUG_ERROR, + "%a: 'reg' property not found or invalid\n", + __FUNCTION__ + )); return EFI_PROTOCOL_ERROR; } @@ -155,13 +183,22 @@ ProcessPciHost ( // // Fetch the bus range (note: inclusive). // - Status = FdtClient->GetNodeProperty (FdtClient, Node, "bus-range", &Prop, - &Len); - if (EFI_ERROR (Status) || Len != 2 * sizeof (UINT32)) { - DEBUG ((DEBUG_ERROR, "%a: 'bus-range' not found or invalid\n", - __FUNCTION__)); + Status = FdtClient->GetNodeProperty ( + FdtClient, + Node, + "bus-range", + &Prop, + &Len + ); + if (EFI_ERROR (Status) || (Len != 2 * sizeof (UINT32))) { + DEBUG (( + DEBUG_ERROR, + "%a: 'bus-range' not found or invalid\n", + __FUNCTION__ + )); return EFI_PROTOCOL_ERROR; } + *BusMin = SwapBytes32 (((CONST UINT32 *)Prop)[0]); *BusMax = SwapBytes32 (((CONST UINT32 *)Prop)[1]); @@ -169,10 +206,14 @@ ProcessPciHost ( // Sanity check: the config space must accommodate all 4K register bytes of // all 8 functions of all 32 devices of all buses. // - if (*BusMax < *BusMin || *BusMax - *BusMin == MAX_UINT32 || - DivU64x32 (ConfigSize, SIZE_4KB * 8 * 32) < *BusMax - *BusMin + 1) { - DEBUG ((DEBUG_ERROR, "%a: invalid 'bus-range' and/or 'reg'\n", - __FUNCTION__)); + if ((*BusMax < *BusMin) || (*BusMax - *BusMin == MAX_UINT32) || + (DivU64x32 (ConfigSize, SIZE_4KB * 8 * 32) < *BusMax - *BusMin + 1)) + { + DEBUG (( + DEBUG_ERROR, + "%a: invalid 'bus-range' and/or 'reg'\n", + __FUNCTION__ + )); return EFI_PROTOCOL_ERROR; } @@ -180,66 +221,84 @@ ProcessPciHost ( // Iterate over "ranges". // Status = FdtClient->GetNodeProperty (FdtClient, Node, "ranges", &Prop, &Len); - if (EFI_ERROR (Status) || Len == 0 || - Len % sizeof (DTB_PCI_HOST_RANGE_RECORD) != 0) { + if (EFI_ERROR (Status) || (Len == 0) || + (Len % sizeof (DTB_PCI_HOST_RANGE_RECORD) != 0)) + { DEBUG ((DEBUG_ERROR, "%a: 'ranges' not found or invalid\n", __FUNCTION__)); return EFI_PROTOCOL_ERROR; } for (RecordIdx = 0; RecordIdx < Len / sizeof (DTB_PCI_HOST_RANGE_RECORD); - ++RecordIdx) { - CONST DTB_PCI_HOST_RANGE_RECORD *Record; + ++RecordIdx) + { + CONST DTB_PCI_HOST_RANGE_RECORD *Record; Record = (CONST DTB_PCI_HOST_RANGE_RECORD *)Prop + RecordIdx; switch (SwapBytes32 (Record->Type) & DTB_PCI_HOST_RANGE_TYPEMASK) { - case DTB_PCI_HOST_RANGE_IO: - *IoBase = SwapBytes64 (Record->ChildBase); - *IoSize = SwapBytes64 (Record->Size); - IoTranslation = SwapBytes64 (Record->CpuBase) - *IoBase; - - ASSERT (PcdGet64 (PcdPciIoTranslation) == IoTranslation); - break; - - case DTB_PCI_HOST_RANGE_MMIO32: - *Mmio32Base = SwapBytes64 (Record->ChildBase); - *Mmio32Size = SwapBytes64 (Record->Size); - Mmio32Translation = SwapBytes64 (Record->CpuBase) - *Mmio32Base; - - if (*Mmio32Base > MAX_UINT32 || *Mmio32Size > MAX_UINT32 || - *Mmio32Base + *Mmio32Size > SIZE_4GB) { - DEBUG ((DEBUG_ERROR, "%a: MMIO32 space invalid\n", __FUNCTION__)); - return EFI_PROTOCOL_ERROR; - } - - ASSERT (PcdGet64 (PcdPciMmio32Translation) == Mmio32Translation); - - if (Mmio32Translation != 0) { - DEBUG ((DEBUG_ERROR, "%a: unsupported nonzero MMIO32 translation " - "0x%Lx\n", __FUNCTION__, Mmio32Translation)); - return EFI_UNSUPPORTED; - } - - break; - - case DTB_PCI_HOST_RANGE_MMIO64: - *Mmio64Base = SwapBytes64 (Record->ChildBase); - *Mmio64Size = SwapBytes64 (Record->Size); - Mmio64Translation = SwapBytes64 (Record->CpuBase) - *Mmio64Base; - - ASSERT (PcdGet64 (PcdPciMmio64Translation) == Mmio64Translation); - - if (Mmio64Translation != 0) { - DEBUG ((DEBUG_ERROR, "%a: unsupported nonzero MMIO64 translation " - "0x%Lx\n", __FUNCTION__, Mmio64Translation)); - return EFI_UNSUPPORTED; - } - - break; + case DTB_PCI_HOST_RANGE_IO: + *IoBase = SwapBytes64 (Record->ChildBase); + *IoSize = SwapBytes64 (Record->Size); + IoTranslation = SwapBytes64 (Record->CpuBase) - *IoBase; + + ASSERT (PcdGet64 (PcdPciIoTranslation) == IoTranslation); + break; + + case DTB_PCI_HOST_RANGE_MMIO32: + *Mmio32Base = SwapBytes64 (Record->ChildBase); + *Mmio32Size = SwapBytes64 (Record->Size); + Mmio32Translation = SwapBytes64 (Record->CpuBase) - *Mmio32Base; + + if ((*Mmio32Base > MAX_UINT32) || (*Mmio32Size > MAX_UINT32) || + (*Mmio32Base + *Mmio32Size > SIZE_4GB)) + { + DEBUG ((DEBUG_ERROR, "%a: MMIO32 space invalid\n", __FUNCTION__)); + return EFI_PROTOCOL_ERROR; + } + + ASSERT (PcdGet64 (PcdPciMmio32Translation) == Mmio32Translation); + + if (Mmio32Translation != 0) { + DEBUG (( + DEBUG_ERROR, + "%a: unsupported nonzero MMIO32 translation " + "0x%Lx\n", + __FUNCTION__, + Mmio32Translation + )); + return EFI_UNSUPPORTED; + } + + break; + + case DTB_PCI_HOST_RANGE_MMIO64: + *Mmio64Base = SwapBytes64 (Record->ChildBase); + *Mmio64Size = SwapBytes64 (Record->Size); + Mmio64Translation = SwapBytes64 (Record->CpuBase) - *Mmio64Base; + + ASSERT (PcdGet64 (PcdPciMmio64Translation) == Mmio64Translation); + + if (Mmio64Translation != 0) { + DEBUG (( + DEBUG_ERROR, + "%a: unsupported nonzero MMIO64 translation " + "0x%Lx\n", + __FUNCTION__, + Mmio64Translation + )); + return EFI_UNSUPPORTED; + } + + break; } } - if (*IoSize == 0 || *Mmio32Size == 0) { - DEBUG ((DEBUG_ERROR, "%a: %a space empty\n", __FUNCTION__, - (*IoSize == 0) ? "IO" : "MMIO32")); + + if ((*IoSize == 0) || (*Mmio32Size == 0)) { + DEBUG (( + DEBUG_ERROR, + "%a: %a space empty\n", + __FUNCTION__, + (*IoSize == 0) ? "IO" : "MMIO32" + )); return EFI_PROTOCOL_ERROR; } @@ -249,10 +308,23 @@ ProcessPciHost ( // ASSERT (PcdGet64 (PcdPciExpressBaseAddress) == ConfigBase); - DEBUG ((DEBUG_INFO, "%a: Config[0x%Lx+0x%Lx) Bus[0x%x..0x%x] " + DEBUG (( + DEBUG_INFO, + "%a: Config[0x%Lx+0x%Lx) Bus[0x%x..0x%x] " "Io[0x%Lx+0x%Lx)@0x%Lx Mem32[0x%Lx+0x%Lx)@0x0 Mem64[0x%Lx+0x%Lx)@0x0\n", - __FUNCTION__, ConfigBase, ConfigSize, *BusMin, *BusMax, *IoBase, *IoSize, - IoTranslation, *Mmio32Base, *Mmio32Size, *Mmio64Base, *Mmio64Size)); + __FUNCTION__, + ConfigBase, + ConfigSize, + *BusMin, + *BusMax, + *IoBase, + *IoSize, + IoTranslation, + *Mmio32Base, + *Mmio32Size, + *Mmio64Base, + *Mmio64Size + )); // Map the ECAM space in the GCD memory map Status = MapGcdMmioSpace (ConfigBase, ConfigSize); @@ -284,21 +356,21 @@ ProcessPciHost ( PCI_ROOT_BRIDGE * EFIAPI PciHostBridgeGetRootBridges ( - UINTN *Count + UINTN *Count ) { - UINT64 IoBase, IoSize; - UINT64 Mmio32Base, Mmio32Size; - UINT64 Mmio64Base, Mmio64Size; - UINT32 BusMin, BusMax; - EFI_STATUS Status; - UINT64 Attributes; - UINT64 AllocationAttributes; - PCI_ROOT_BRIDGE_APERTURE Io; - PCI_ROOT_BRIDGE_APERTURE Mem; - PCI_ROOT_BRIDGE_APERTURE MemAbove4G; - PCI_ROOT_BRIDGE_APERTURE PMem; - PCI_ROOT_BRIDGE_APERTURE PMemAbove4G; + UINT64 IoBase, IoSize; + UINT64 Mmio32Base, Mmio32Size; + UINT64 Mmio64Base, Mmio64Size; + UINT32 BusMin, BusMax; + EFI_STATUS Status; + UINT64 Attributes; + UINT64 AllocationAttributes; + PCI_ROOT_BRIDGE_APERTURE Io; + PCI_ROOT_BRIDGE_APERTURE Mem; + PCI_ROOT_BRIDGE_APERTURE MemAbove4G; + PCI_ROOT_BRIDGE_APERTURE PMem; + PCI_ROOT_BRIDGE_APERTURE PMemAbove4G; if (PcdGet64 (PcdPciExpressBaseAddress) == 0) { DEBUG ((DEBUG_INFO, "%a: PCI host bridge not present\n", __FUNCTION__)); @@ -307,11 +379,23 @@ PciHostBridgeGetRootBridges ( return NULL; } - Status = ProcessPciHost (&IoBase, &IoSize, &Mmio32Base, &Mmio32Size, - &Mmio64Base, &Mmio64Size, &BusMin, &BusMax); + Status = ProcessPciHost ( + &IoBase, + &IoSize, + &Mmio32Base, + &Mmio32Size, + &Mmio64Base, + &Mmio64Size, + &BusMin, + &BusMax + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: failed to discover PCI host bridge: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: failed to discover PCI host bridge: %r\n", + __FUNCTION__, + Status + )); *Count = 0; return NULL; } @@ -322,21 +406,21 @@ PciHostBridgeGetRootBridges ( ZeroMem (&PMem, sizeof (PMem)); ZeroMem (&PMemAbove4G, sizeof (PMemAbove4G)); - Attributes = EFI_PCI_ATTRIBUTE_ISA_IO_16 | - EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO | - EFI_PCI_ATTRIBUTE_VGA_IO_16 | - EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16; + Attributes = EFI_PCI_ATTRIBUTE_ISA_IO_16 | + EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO | + EFI_PCI_ATTRIBUTE_VGA_IO_16 | + EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16; AllocationAttributes = EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM; - Io.Base = IoBase; - Io.Limit = IoBase + IoSize - 1; - Mem.Base = Mmio32Base; - Mem.Limit = Mmio32Base + Mmio32Size - 1; + Io.Base = IoBase; + Io.Limit = IoBase + IoSize - 1; + Mem.Base = Mmio32Base; + Mem.Limit = Mmio32Base + Mmio32Size - 1; if (sizeof (UINTN) == sizeof (UINT64)) { - MemAbove4G.Base = Mmio64Base; - MemAbove4G.Limit = Mmio64Base + Mmio64Size - 1; + MemAbove4G.Base = Mmio64Base; + MemAbove4G.Limit = Mmio64Base + Mmio64Size - 1; if (Mmio64Size > 0) { AllocationAttributes |= EFI_PCI_HOST_BRIDGE_MEM64_DECODE; } @@ -347,32 +431,32 @@ PciHostBridgeGetRootBridges ( // BARs unless they are allocated below 4 GB. So ignore the range above // 4 GB in this case. // - MemAbove4G.Base = MAX_UINT64; - MemAbove4G.Limit = 0; + MemAbove4G.Base = MAX_UINT64; + MemAbove4G.Limit = 0; } // // No separate ranges for prefetchable and non-prefetchable BARs // - PMem.Base = MAX_UINT64; - PMem.Limit = 0; - PMemAbove4G.Base = MAX_UINT64; - PMemAbove4G.Limit = 0; + PMem.Base = MAX_UINT64; + PMem.Limit = 0; + PMemAbove4G.Base = MAX_UINT64; + PMemAbove4G.Limit = 0; return PciHostBridgeUtilityGetRootBridges ( - Count, - Attributes, - AllocationAttributes, - TRUE, - FALSE, - BusMin, - BusMax, - &Io, - &Mem, - &MemAbove4G, - &PMem, - &PMemAbove4G - ); + Count, + Attributes, + AllocationAttributes, + TRUE, + FALSE, + BusMin, + BusMax, + &Io, + &Mem, + &MemAbove4G, + &PMem, + &PMemAbove4G + ); } /** @@ -385,8 +469,8 @@ PciHostBridgeGetRootBridges ( VOID EFIAPI PciHostBridgeFreeRootBridges ( - PCI_ROOT_BRIDGE *Bridges, - UINTN Count + PCI_ROOT_BRIDGE *Bridges, + UINTN Count ) { PciHostBridgeUtilityFreeRootBridges (Bridges, Count); @@ -409,8 +493,8 @@ PciHostBridgeFreeRootBridges ( VOID EFIAPI PciHostBridgeResourceConflict ( - EFI_HANDLE HostBridgeHandle, - VOID *Configuration + EFI_HANDLE HostBridgeHandle, + VOID *Configuration ) { PciHostBridgeUtilityResourceConflict (Configuration); diff --git a/OvmfPkg/Fdt/FdtPciPcdProducerLib/FdtPciPcdProducerLib.c b/OvmfPkg/Fdt/FdtPciPcdProducerLib/FdtPciPcdProducerLib.c index 8dd8fc9b3d..b5a6718146 100644 --- a/OvmfPkg/Fdt/FdtPciPcdProducerLib/FdtPciPcdProducerLib.c +++ b/OvmfPkg/Fdt/FdtPciPcdProducerLib/FdtPciPcdProducerLib.c @@ -22,59 +22,62 @@ // #pragma pack (1) typedef struct { - UINT32 Type; - UINT64 ChildBase; - UINT64 CpuBase; - UINT64 Size; + UINT32 Type; + UINT64 ChildBase; + UINT64 CpuBase; + UINT64 Size; } DTB_PCI_HOST_RANGE_RECORD; #pragma pack () -#define DTB_PCI_HOST_RANGE_RELOCATABLE BIT31 -#define DTB_PCI_HOST_RANGE_PREFETCHABLE BIT30 -#define DTB_PCI_HOST_RANGE_ALIASED BIT29 -#define DTB_PCI_HOST_RANGE_MMIO32 BIT25 -#define DTB_PCI_HOST_RANGE_MMIO64 (BIT25 | BIT24) -#define DTB_PCI_HOST_RANGE_IO BIT24 -#define DTB_PCI_HOST_RANGE_TYPEMASK (BIT31 | BIT30 | BIT29 | BIT25 | BIT24) +#define DTB_PCI_HOST_RANGE_RELOCATABLE BIT31 +#define DTB_PCI_HOST_RANGE_PREFETCHABLE BIT30 +#define DTB_PCI_HOST_RANGE_ALIASED BIT29 +#define DTB_PCI_HOST_RANGE_MMIO32 BIT25 +#define DTB_PCI_HOST_RANGE_MMIO64 (BIT25 | BIT24) +#define DTB_PCI_HOST_RANGE_IO BIT24 +#define DTB_PCI_HOST_RANGE_TYPEMASK (BIT31 | BIT30 | BIT29 | BIT25 | BIT24) STATIC RETURN_STATUS GetPciIoTranslation ( - IN FDT_CLIENT_PROTOCOL *FdtClient, - IN INT32 Node, - OUT UINT64 *IoTranslation + IN FDT_CLIENT_PROTOCOL *FdtClient, + IN INT32 Node, + OUT UINT64 *IoTranslation ) { - UINT32 RecordIdx; - CONST VOID *Prop; - UINT32 Len; - EFI_STATUS Status; - UINT64 IoBase; + UINT32 RecordIdx; + CONST VOID *Prop; + UINT32 Len; + EFI_STATUS Status; + UINT64 IoBase; // // Iterate over "ranges". // Status = FdtClient->GetNodeProperty (FdtClient, Node, "ranges", &Prop, &Len); - if (EFI_ERROR (Status) || Len == 0 || - Len % sizeof (DTB_PCI_HOST_RANGE_RECORD) != 0) { + if (EFI_ERROR (Status) || (Len == 0) || + (Len % sizeof (DTB_PCI_HOST_RANGE_RECORD) != 0)) + { DEBUG ((DEBUG_ERROR, "%a: 'ranges' not found or invalid\n", __FUNCTION__)); return RETURN_PROTOCOL_ERROR; } for (RecordIdx = 0; RecordIdx < Len / sizeof (DTB_PCI_HOST_RANGE_RECORD); - ++RecordIdx) { - CONST DTB_PCI_HOST_RANGE_RECORD *Record; - UINT32 Type; + ++RecordIdx) + { + CONST DTB_PCI_HOST_RANGE_RECORD *Record; + UINT32 Type; Record = (CONST DTB_PCI_HOST_RANGE_RECORD *)Prop + RecordIdx; - Type = SwapBytes32 (Record->Type) & DTB_PCI_HOST_RANGE_TYPEMASK; + Type = SwapBytes32 (Record->Type) & DTB_PCI_HOST_RANGE_TYPEMASK; if (Type == DTB_PCI_HOST_RANGE_IO) { - IoBase = SwapBytes64 (Record->ChildBase); + IoBase = SwapBytes64 (Record->ChildBase); *IoTranslation = SwapBytes64 (Record->CpuBase) - IoBase; return RETURN_SUCCESS; } } + return RETURN_NOT_FOUND; } @@ -84,15 +87,15 @@ FdtPciPcdProducerLibConstructor ( VOID ) { - UINT64 PciExpressBaseAddress; - FDT_CLIENT_PROTOCOL *FdtClient; - CONST UINT64 *Reg; - UINT32 RegSize; - EFI_STATUS Status; - INT32 Node; - RETURN_STATUS RetStatus; - UINT64 IoTranslation; - RETURN_STATUS PcdStatus; + UINT64 PciExpressBaseAddress; + FDT_CLIENT_PROTOCOL *FdtClient; + CONST UINT64 *Reg; + UINT32 RegSize; + EFI_STATUS Status; + INT32 Node; + RETURN_STATUS RetStatus; + UINT64 IoTranslation; + RETURN_STATUS PcdStatus; PciExpressBaseAddress = PcdGet64 (PcdPciExpressBaseAddress); if (PciExpressBaseAddress != MAX_UINT64) { @@ -106,38 +109,51 @@ FdtPciPcdProducerLibConstructor ( return EFI_SUCCESS; } - Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL, - (VOID **)&FdtClient); + Status = gBS->LocateProtocol ( + &gFdtClientProtocolGuid, + NULL, + (VOID **)&FdtClient + ); ASSERT_EFI_ERROR (Status); PciExpressBaseAddress = 0; - Status = FdtClient->FindCompatibleNode (FdtClient, "pci-host-ecam-generic", - &Node); + Status = FdtClient->FindCompatibleNode ( + FdtClient, + "pci-host-ecam-generic", + &Node + ); if (!EFI_ERROR (Status)) { - Status = FdtClient->GetNodeProperty (FdtClient, Node, "reg", - (CONST VOID **)&Reg, &RegSize); - - if (!EFI_ERROR (Status) && RegSize == 2 * sizeof (UINT64)) { + Status = FdtClient->GetNodeProperty ( + FdtClient, + Node, + "reg", + (CONST VOID **)&Reg, + &RegSize + ); + + if (!EFI_ERROR (Status) && (RegSize == 2 * sizeof (UINT64))) { PciExpressBaseAddress = SwapBytes64 (*Reg); PcdStatus = PcdSetBoolS (PcdPciDisableBusEnumeration, FALSE); ASSERT_RETURN_ERROR (PcdStatus); IoTranslation = 0; - RetStatus = GetPciIoTranslation (FdtClient, Node, &IoTranslation); + RetStatus = GetPciIoTranslation (FdtClient, Node, &IoTranslation); if (!RETURN_ERROR (RetStatus)) { - PcdStatus = PcdSet64S (PcdPciIoTranslation, IoTranslation); - ASSERT_RETURN_ERROR (PcdStatus); + PcdStatus = PcdSet64S (PcdPciIoTranslation, IoTranslation); + ASSERT_RETURN_ERROR (PcdStatus); } else { // // Support for I/O BARs is not mandatory, and so it does not make sense // to abort in the general case. So leave it up to the actual driver to // complain about this if it wants to, and just issue a warning here. // - DEBUG ((DEBUG_WARN, + DEBUG (( + DEBUG_WARN, "%a: 'pci-host-ecam-generic' device encountered with no I/O range\n", - __FUNCTION__)); + __FUNCTION__ + )); } } } diff --git a/OvmfPkg/Fdt/HighMemDxe/HighMemDxe.c b/OvmfPkg/Fdt/HighMemDxe/HighMemDxe.c index e2ae706127..87bc8b6827 100644 --- a/OvmfPkg/Fdt/HighMemDxe/HighMemDxe.c +++ b/OvmfPkg/Fdt/HighMemDxe/HighMemDxe.c @@ -20,40 +20,58 @@ EFI_STATUS EFIAPI InitializeHighMemDxe ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - FDT_CLIENT_PROTOCOL *FdtClient; - EFI_CPU_ARCH_PROTOCOL *Cpu; - EFI_STATUS Status, FindNodeStatus; - INT32 Node; - CONST UINT32 *Reg; - UINT32 RegSize; - UINTN AddressCells, SizeCells; - UINT64 CurBase; - UINT64 CurSize; - UINT64 Attributes; - EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor; - - Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL, - (VOID **)&FdtClient); + FDT_CLIENT_PROTOCOL *FdtClient; + EFI_CPU_ARCH_PROTOCOL *Cpu; + EFI_STATUS Status, FindNodeStatus; + INT32 Node; + CONST UINT32 *Reg; + UINT32 RegSize; + UINTN AddressCells, SizeCells; + UINT64 CurBase; + UINT64 CurSize; + UINT64 Attributes; + EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor; + + Status = gBS->LocateProtocol ( + &gFdtClientProtocolGuid, + NULL, + (VOID **)&FdtClient + ); ASSERT_EFI_ERROR (Status); - Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, - (VOID **)&Cpu); + Status = gBS->LocateProtocol ( + &gEfiCpuArchProtocolGuid, + NULL, + (VOID **)&Cpu + ); ASSERT_EFI_ERROR (Status); // // Check for memory node and add the memory spaces except the lowest one // - for (FindNodeStatus = FdtClient->FindMemoryNodeReg (FdtClient, &Node, - (CONST VOID **) &Reg, &AddressCells, - &SizeCells, &RegSize); + for (FindNodeStatus = FdtClient->FindMemoryNodeReg ( + FdtClient, + &Node, + (CONST VOID **)&Reg, + &AddressCells, + &SizeCells, + &RegSize + ); !EFI_ERROR (FindNodeStatus); - FindNodeStatus = FdtClient->FindNextMemoryNodeReg (FdtClient, Node, - &Node, (CONST VOID **) &Reg, &AddressCells, - &SizeCells, &RegSize)) { + FindNodeStatus = FdtClient->FindNextMemoryNodeReg ( + FdtClient, + Node, + &Node, + (CONST VOID **)&Reg, + &AddressCells, + &SizeCells, + &RegSize + )) + { ASSERT (AddressCells <= 2); ASSERT (SizeCells <= 2); @@ -62,36 +80,60 @@ InitializeHighMemDxe ( if (AddressCells > 1) { CurBase = (CurBase << 32) | SwapBytes32 (*Reg++); } + CurSize = SwapBytes32 (*Reg++); if (SizeCells > 1) { CurSize = (CurSize << 32) | SwapBytes32 (*Reg++); } + RegSize -= (AddressCells + SizeCells) * sizeof (UINT32); Status = gDS->GetMemorySpaceDescriptor (CurBase, &GcdDescriptor); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, + DEBUG (( + DEBUG_WARN, "%a: Region 0x%lx - 0x%lx not found in the GCD memory space map\n", - __FUNCTION__, CurBase, CurBase + CurSize - 1)); - continue; + __FUNCTION__, + CurBase, + CurBase + CurSize - 1 + )); + continue; } + if (GcdDescriptor.GcdMemoryType == EfiGcdMemoryTypeNonExistent) { - Status = gDS->AddMemorySpace (EfiGcdMemoryTypeSystemMemory, CurBase, - CurSize, EFI_MEMORY_WB); + Status = gDS->AddMemorySpace ( + EfiGcdMemoryTypeSystemMemory, + CurBase, + CurSize, + EFI_MEMORY_WB + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, + DEBUG (( + DEBUG_ERROR, "%a: Failed to add System RAM @ 0x%lx - 0x%lx (%r)\n", - __FUNCTION__, CurBase, CurBase + CurSize - 1, Status)); + __FUNCTION__, + CurBase, + CurBase + CurSize - 1, + Status + )); continue; } - Status = gDS->SetMemorySpaceAttributes (CurBase, CurSize, - EFI_MEMORY_WB); + Status = gDS->SetMemorySpaceAttributes ( + CurBase, + CurSize, + EFI_MEMORY_WB + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, + DEBUG (( + DEBUG_WARN, "%a: gDS->SetMemorySpaceAttributes() failed on region 0x%lx - 0x%lx (%r)\n", - __FUNCTION__, CurBase, CurBase + CurSize - 1, Status)); + __FUNCTION__, + CurBase, + CurBase + CurSize - 1, + Status + )); } // @@ -107,19 +149,30 @@ InitializeHighMemDxe ( // Attributes = EFI_MEMORY_WB; if ((PcdGet64 (PcdDxeNxMemoryProtectionPolicy) & - (1U << (UINT32)EfiConventionalMemory)) != 0) { + (1U << (UINT32)EfiConventionalMemory)) != 0) + { Attributes |= EFI_MEMORY_XP; } Status = Cpu->SetMemoryAttributes (Cpu, CurBase, CurSize, Attributes); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, + DEBUG (( + DEBUG_ERROR, "%a: Failed to set System RAM @ 0x%lx - 0x%lx attribute (%r)\n", - __FUNCTION__, CurBase, CurBase + CurSize - 1, Status)); + __FUNCTION__, + CurBase, + CurBase + CurSize - 1, + Status + )); } else { - DEBUG ((DEBUG_INFO, "%a: Add System RAM @ 0x%lx - 0x%lx\n", - __FUNCTION__, CurBase, CurBase + CurSize - 1)); + DEBUG (( + DEBUG_INFO, + "%a: Add System RAM @ 0x%lx - 0x%lx\n", + __FUNCTION__, + CurBase, + CurBase + CurSize - 1 + )); } } } diff --git a/OvmfPkg/Fdt/VirtioFdtDxe/VirtioFdtDxe.c b/OvmfPkg/Fdt/VirtioFdtDxe/VirtioFdtDxe.c index fdef5f166a..619740e6e7 100644 --- a/OvmfPkg/Fdt/VirtioFdtDxe/VirtioFdtDxe.c +++ b/OvmfPkg/Fdt/VirtioFdtDxe/VirtioFdtDxe.c @@ -22,43 +22,62 @@ #pragma pack (1) typedef struct { - VENDOR_DEVICE_PATH Vendor; - UINT64 PhysBase; - EFI_DEVICE_PATH_PROTOCOL End; + VENDOR_DEVICE_PATH Vendor; + UINT64 PhysBase; + EFI_DEVICE_PATH_PROTOCOL End; } VIRTIO_TRANSPORT_DEVICE_PATH; #pragma pack () EFI_STATUS EFIAPI InitializeVirtioFdtDxe ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status, FindNodeStatus; - FDT_CLIENT_PROTOCOL *FdtClient; - INT32 Node; - CONST UINT64 *Reg; - UINT32 RegSize; - VIRTIO_TRANSPORT_DEVICE_PATH *DevicePath; - EFI_HANDLE Handle; - UINT64 RegBase; - - Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL, - (VOID **)&FdtClient); + EFI_STATUS Status, FindNodeStatus; + FDT_CLIENT_PROTOCOL *FdtClient; + INT32 Node; + CONST UINT64 *Reg; + UINT32 RegSize; + VIRTIO_TRANSPORT_DEVICE_PATH *DevicePath; + EFI_HANDLE Handle; + UINT64 RegBase; + + Status = gBS->LocateProtocol ( + &gFdtClientProtocolGuid, + NULL, + (VOID **)&FdtClient + ); ASSERT_EFI_ERROR (Status); - for (FindNodeStatus = FdtClient->FindCompatibleNode (FdtClient, - "virtio,mmio", &Node); + for (FindNodeStatus = FdtClient->FindCompatibleNode ( + FdtClient, + "virtio,mmio", + &Node + ); !EFI_ERROR (FindNodeStatus); - FindNodeStatus = FdtClient->FindNextCompatibleNode (FdtClient, - "virtio,mmio", Node, &Node)) { - - Status = FdtClient->GetNodeProperty (FdtClient, Node, "reg", - (CONST VOID **)&Reg, &RegSize); + FindNodeStatus = FdtClient->FindNextCompatibleNode ( + FdtClient, + "virtio,mmio", + Node, + &Node + )) + { + Status = FdtClient->GetNodeProperty ( + FdtClient, + Node, + "reg", + (CONST VOID **)&Reg, + &RegSize + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: GetNodeProperty () failed (Status == %r)\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: GetNodeProperty () failed (Status == %r)\n", + __FUNCTION__, + Status + )); continue; } @@ -67,11 +86,12 @@ InitializeVirtioFdtDxe ( // // Create a unique device path for this transport on the fly // - RegBase = SwapBytes64 (*Reg); + RegBase = SwapBytes64 (*Reg); DevicePath = (VIRTIO_TRANSPORT_DEVICE_PATH *)CreateDeviceNode ( - HARDWARE_DEVICE_PATH, - HW_VENDOR_DP, - sizeof (VIRTIO_TRANSPORT_DEVICE_PATH)); + HARDWARE_DEVICE_PATH, + HW_VENDOR_DP, + sizeof (VIRTIO_TRANSPORT_DEVICE_PATH) + ); if (DevicePath == NULL) { DEBUG ((DEBUG_ERROR, "%a: Out of memory\n", __FUNCTION__)); continue; @@ -79,39 +99,62 @@ InitializeVirtioFdtDxe ( CopyGuid (&DevicePath->Vendor.Guid, &gVirtioMmioTransportGuid); DevicePath->PhysBase = RegBase; - SetDevicePathNodeLength (&DevicePath->Vendor, - sizeof (*DevicePath) - sizeof (DevicePath->End)); + SetDevicePathNodeLength ( + &DevicePath->Vendor, + sizeof (*DevicePath) - sizeof (DevicePath->End) + ); SetDevicePathEndNode (&DevicePath->End); Handle = NULL; - Status = gBS->InstallProtocolInterface (&Handle, - &gEfiDevicePathProtocolGuid, EFI_NATIVE_INTERFACE, - DevicePath); + Status = gBS->InstallProtocolInterface ( + &Handle, + &gEfiDevicePathProtocolGuid, + EFI_NATIVE_INTERFACE, + DevicePath + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: Failed to install the EFI_DEVICE_PATH " + DEBUG (( + DEBUG_ERROR, + "%a: Failed to install the EFI_DEVICE_PATH " "protocol on a new handle (Status == %r)\n", - __FUNCTION__, Status)); + __FUNCTION__, + Status + )); FreePool (DevicePath); continue; } Status = VirtioMmioInstallDevice (RegBase, Handle); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: Failed to install VirtIO transport @ 0x%Lx " - "on handle %p (Status == %r)\n", __FUNCTION__, RegBase, - Handle, Status)); - - Status = gBS->UninstallProtocolInterface (Handle, - &gEfiDevicePathProtocolGuid, DevicePath); + DEBUG (( + DEBUG_ERROR, + "%a: Failed to install VirtIO transport @ 0x%Lx " + "on handle %p (Status == %r)\n", + __FUNCTION__, + RegBase, + Handle, + Status + )); + + Status = gBS->UninstallProtocolInterface ( + Handle, + &gEfiDevicePathProtocolGuid, + DevicePath + ); ASSERT_EFI_ERROR (Status); FreePool (DevicePath); continue; } } - if (EFI_ERROR (FindNodeStatus) && FindNodeStatus != EFI_NOT_FOUND) { - DEBUG ((DEBUG_ERROR, "%a: Error occurred while iterating DT nodes " - "(FindNodeStatus == %r)\n", __FUNCTION__, FindNodeStatus)); + if (EFI_ERROR (FindNodeStatus) && (FindNodeStatus != EFI_NOT_FOUND)) { + DEBUG (( + DEBUG_ERROR, + "%a: Error occurred while iterating DT nodes " + "(FindNodeStatus == %r)\n", + __FUNCTION__, + FindNodeStatus + )); } return EFI_SUCCESS; diff --git a/OvmfPkg/Include/Guid/ConfidentialComputingSecret.h b/OvmfPkg/Include/Guid/ConfidentialComputingSecret.h index 7026fc5b08..b935573539 100644 --- a/OvmfPkg/Include/Guid/ConfidentialComputingSecret.h +++ b/OvmfPkg/Include/Guid/ConfidentialComputingSecret.h @@ -1,4 +1,4 @@ - /** @file +/** @file UEFI Configuration Table for exposing the SEV Launch Secret location to UEFI applications (boot loaders). @@ -19,10 +19,10 @@ } typedef struct { - UINT64 Base; - UINT64 Size; + UINT64 Base; + UINT64 Size; } CONFIDENTIAL_COMPUTING_SECRET_LOCATION; -extern EFI_GUID gConfidentialComputingSecretGuid; +extern EFI_GUID gConfidentialComputingSecretGuid; #endif // SEV_LAUNCH_SECRET_H_ diff --git a/OvmfPkg/Include/Guid/MicrosoftVendor.h b/OvmfPkg/Include/Guid/MicrosoftVendor.h index db7a326c31..0462f72588 100644 --- a/OvmfPkg/Include/Guid/MicrosoftVendor.h +++ b/OvmfPkg/Include/Guid/MicrosoftVendor.h @@ -50,6 +50,6 @@ { 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b }, \ } -extern EFI_GUID gMicrosoftVendorGuid; +extern EFI_GUID gMicrosoftVendorGuid; #endif /* MICROSOFT_VENDOR_H_ */ diff --git a/OvmfPkg/Include/Guid/OvmfPkKek1AppPrefix.h b/OvmfPkg/Include/Guid/OvmfPkKek1AppPrefix.h index e05d2fe021..b039a47454 100644 --- a/OvmfPkg/Include/Guid/OvmfPkKek1AppPrefix.h +++ b/OvmfPkg/Include/Guid/OvmfPkKek1AppPrefix.h @@ -40,6 +40,6 @@ { 0x81, 0xd3, 0x5b, 0xb9, 0x71, 0x5f, 0x97, 0x27 }, \ } -extern EFI_GUID gOvmfPkKek1AppPrefixGuid; +extern EFI_GUID gOvmfPkKek1AppPrefixGuid; #endif /* OVMF_PK_KEK1_APP_PREFIX_H_ */ diff --git a/OvmfPkg/Include/Guid/OvmfPlatformConfig.h b/OvmfPkg/Include/Guid/OvmfPlatformConfig.h index 19b3936cf9..4bf0d8a089 100644 --- a/OvmfPkg/Include/Guid/OvmfPlatformConfig.h +++ b/OvmfPkg/Include/Guid/OvmfPlatformConfig.h @@ -13,6 +13,6 @@ #define OVMF_PLATFORM_CONFIG_GUID \ {0x7235c51c, 0x0c80, 0x4cab, {0x87, 0xac, 0x3b, 0x08, 0x4a, 0x63, 0x04, 0xb1}} -extern EFI_GUID gOvmfPlatformConfigGuid; +extern EFI_GUID gOvmfPlatformConfigGuid; #endif diff --git a/OvmfPkg/Include/Guid/QemuKernelLoaderFsMedia.h b/OvmfPkg/Include/Guid/QemuKernelLoaderFsMedia.h index 225c3c4946..fa64e4e3f5 100644 --- a/OvmfPkg/Include/Guid/QemuKernelLoaderFsMedia.h +++ b/OvmfPkg/Include/Guid/QemuKernelLoaderFsMedia.h @@ -13,6 +13,6 @@ #define QEMU_KERNEL_LOADER_FS_MEDIA_GUID \ {0x1428f772, 0xb64a, 0x441e, {0xb8, 0xc3, 0x9e, 0xbd, 0xd7, 0xf8, 0x93, 0xc7}} -extern EFI_GUID gQemuKernelLoaderFsMediaGuid; +extern EFI_GUID gQemuKernelLoaderFsMediaGuid; #endif diff --git a/OvmfPkg/Include/Guid/QemuRamfb.h b/OvmfPkg/Include/Guid/QemuRamfb.h index b0102ec053..74d59bb089 100644 --- a/OvmfPkg/Include/Guid/QemuRamfb.h +++ b/OvmfPkg/Include/Guid/QemuRamfb.h @@ -14,6 +14,6 @@ #define QEMU_RAMFB_GUID \ {0x557423a1, 0x63ab, 0x406c, {0xbe, 0x7e, 0x91, 0xcd, 0xbc, 0x08, 0xc4, 0x57}} -extern EFI_GUID gQemuRamfbGuid; +extern EFI_GUID gQemuRamfbGuid; #endif diff --git a/OvmfPkg/Include/Guid/RootBridgesConnectedEventGroup.h b/OvmfPkg/Include/Guid/RootBridgesConnectedEventGroup.h index b85f8743c6..e4542d645f 100644 --- a/OvmfPkg/Include/Guid/RootBridgesConnectedEventGroup.h +++ b/OvmfPkg/Include/Guid/RootBridgesConnectedEventGroup.h @@ -22,6 +22,6 @@ { 0x90, 0x42, 0xf2, 0x6e, 0x47, 0x97, 0xee, 0x69 }, \ } -extern EFI_GUID gRootBridgesConnectedEventGroupGuid; +extern EFI_GUID gRootBridgesConnectedEventGroupGuid; #endif diff --git a/OvmfPkg/Include/Guid/VirtioMmioTransport.h b/OvmfPkg/Include/Guid/VirtioMmioTransport.h index 91e1f13910..280700d404 100644 --- a/OvmfPkg/Include/Guid/VirtioMmioTransport.h +++ b/OvmfPkg/Include/Guid/VirtioMmioTransport.h @@ -14,6 +14,6 @@ #define VIRTIO_MMIO_TRANSPORT_GUID \ {0x837dca9e, 0xe874, 0x4d82, {0xb2, 0x9a, 0x23, 0xfe, 0x0e, 0x23, 0xd1, 0xe2}} -extern EFI_GUID gVirtioMmioTransportGuid; +extern EFI_GUID gVirtioMmioTransportGuid; #endif diff --git a/OvmfPkg/Include/Guid/XenBusRootDevice.h b/OvmfPkg/Include/Guid/XenBusRootDevice.h index 932f6cf7fe..e17de76fea 100644 --- a/OvmfPkg/Include/Guid/XenBusRootDevice.h +++ b/OvmfPkg/Include/Guid/XenBusRootDevice.h @@ -13,6 +13,6 @@ #define XENBUS_ROOT_DEVICE_GUID \ {0xa732241f, 0x383d, 0x4d9c, {0x8a, 0xe1, 0x8e, 0x09, 0x83, 0x75, 0x89, 0xd7}} -extern EFI_GUID gXenBusRootDeviceGuid; +extern EFI_GUID gXenBusRootDeviceGuid; #endif diff --git a/OvmfPkg/Include/Guid/XenInfo.h b/OvmfPkg/Include/Guid/XenInfo.h index 25743b3884..a8f6a36f1c 100644 --- a/OvmfPkg/Include/Guid/XenInfo.h +++ b/OvmfPkg/Include/Guid/XenInfo.h @@ -16,21 +16,21 @@ typedef struct { /// /// Beginning of the hypercall page. /// - VOID *HyperPages; + VOID *HyperPages; /// /// Hypervisor major version. /// - UINT16 VersionMajor; + UINT16 VersionMajor; /// /// Hypervisor minor version. /// - UINT16 VersionMinor; + UINT16 VersionMinor; /// /// Pointer to the RSDP found in the hvm_start_info provided to a PVH guest /// - VOID *RsdpPvh; + VOID *RsdpPvh; } EFI_XEN_INFO; -extern EFI_GUID gEfiXenInfoGuid; +extern EFI_GUID gEfiXenInfoGuid; #endif diff --git a/OvmfPkg/Include/IndustryStandard/Bhyve.h b/OvmfPkg/Include/IndustryStandard/Bhyve.h index ab8f2b0729..c22d301d47 100644 --- a/OvmfPkg/Include/IndustryStandard/Bhyve.h +++ b/OvmfPkg/Include/IndustryStandard/Bhyve.h @@ -11,8 +11,8 @@ #ifndef __BHYVE_H__ #define __BHYVE_H__ -#define BHYVE_ACPI_TIMER_IO_ADDR 0x408 +#define BHYVE_ACPI_TIMER_IO_ADDR 0x408 -#define BHYVE_PM_REG 0x404 +#define BHYVE_PM_REG 0x404 #endif // __BHYVE_H__ diff --git a/OvmfPkg/Include/IndustryStandard/E820.h b/OvmfPkg/Include/IndustryStandard/E820.h index 1fa0956d2c..e41be5af3c 100644 --- a/OvmfPkg/Include/IndustryStandard/E820.h +++ b/OvmfPkg/Include/IndustryStandard/E820.h @@ -7,7 +7,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ - #ifndef __E820_H__ #define __E820_H__ @@ -21,17 +20,17 @@ typedef enum { } EFI_ACPI_MEMORY_TYPE; typedef struct { - UINT64 BaseAddr; - UINT64 Length; - EFI_ACPI_MEMORY_TYPE Type; + UINT64 BaseAddr; + UINT64 Length; + EFI_ACPI_MEMORY_TYPE Type; } EFI_E820_ENTRY64; typedef struct { - UINT32 BassAddrLow; - UINT32 BaseAddrHigh; - UINT32 LengthLow; - UINT32 LengthHigh; - EFI_ACPI_MEMORY_TYPE Type; + UINT32 BassAddrLow; + UINT32 BaseAddrHigh; + UINT32 LengthLow; + UINT32 LengthHigh; + EFI_ACPI_MEMORY_TYPE Type; } EFI_E820_ENTRY; #pragma pack() diff --git a/OvmfPkg/Include/IndustryStandard/FusionMptScsi.h b/OvmfPkg/Include/IndustryStandard/FusionMptScsi.h index 99778d1537..ad5dbaa414 100644 --- a/OvmfPkg/Include/IndustryStandard/FusionMptScsi.h +++ b/OvmfPkg/Include/IndustryStandard/FusionMptScsi.h @@ -15,43 +15,43 @@ // Device offsets and constants // -#define LSI_LOGIC_PCI_VENDOR_ID 0x1000 -#define LSI_53C1030_PCI_DEVICE_ID 0x0030 -#define LSI_SAS1068_PCI_DEVICE_ID 0x0054 -#define LSI_SAS1068E_PCI_DEVICE_ID 0x0058 +#define LSI_LOGIC_PCI_VENDOR_ID 0x1000 +#define LSI_53C1030_PCI_DEVICE_ID 0x0030 +#define LSI_SAS1068_PCI_DEVICE_ID 0x0054 +#define LSI_SAS1068E_PCI_DEVICE_ID 0x0058 -#define MPT_REG_DOORBELL 0x00 -#define MPT_REG_WRITE_SEQ 0x04 -#define MPT_REG_HOST_DIAG 0x08 -#define MPT_REG_TEST 0x0c -#define MPT_REG_DIAG_DATA 0x10 -#define MPT_REG_DIAG_ADDR 0x14 -#define MPT_REG_ISTATUS 0x30 -#define MPT_REG_IMASK 0x34 -#define MPT_REG_REQ_Q 0x40 -#define MPT_REG_REP_Q 0x44 +#define MPT_REG_DOORBELL 0x00 +#define MPT_REG_WRITE_SEQ 0x04 +#define MPT_REG_HOST_DIAG 0x08 +#define MPT_REG_TEST 0x0c +#define MPT_REG_DIAG_DATA 0x10 +#define MPT_REG_DIAG_ADDR 0x14 +#define MPT_REG_ISTATUS 0x30 +#define MPT_REG_IMASK 0x34 +#define MPT_REG_REQ_Q 0x40 +#define MPT_REG_REP_Q 0x44 -#define MPT_DOORBELL_RESET 0x40 -#define MPT_DOORBELL_HANDSHAKE 0x42 +#define MPT_DOORBELL_RESET 0x40 +#define MPT_DOORBELL_HANDSHAKE 0x42 -#define MPT_IMASK_DOORBELL 0x01 -#define MPT_IMASK_REPLY 0x08 +#define MPT_IMASK_DOORBELL 0x01 +#define MPT_IMASK_REPLY 0x08 -#define MPT_MESSAGE_HDR_FUNCTION_SCSI_IO_REQUEST 0x00 -#define MPT_MESSAGE_HDR_FUNCTION_IOC_INIT 0x02 +#define MPT_MESSAGE_HDR_FUNCTION_SCSI_IO_REQUEST 0x00 +#define MPT_MESSAGE_HDR_FUNCTION_IOC_INIT 0x02 -#define MPT_SG_ENTRY_TYPE_SIMPLE 0x01 +#define MPT_SG_ENTRY_TYPE_SIMPLE 0x01 -#define MPT_IOC_WHOINIT_ROM_BIOS 0x02 +#define MPT_IOC_WHOINIT_ROM_BIOS 0x02 -#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_NONE (0x00 << 24) -#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_WRITE (0x01 << 24) -#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_READ (0x02 << 24) +#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_NONE (0x00 << 24) +#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_WRITE (0x01 << 24) +#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_READ (0x02 << 24) -#define MPT_SCSI_IOCSTATUS_SUCCESS 0x0000 -#define MPT_SCSI_IOCSTATUS_DEVICE_NOT_THERE 0x0043 -#define MPT_SCSI_IOCSTATUS_DATA_OVERRUN 0x0044 -#define MPT_SCSI_IOCSTATUS_DATA_UNDERRUN 0x0045 +#define MPT_SCSI_IOCSTATUS_SUCCESS 0x0000 +#define MPT_SCSI_IOCSTATUS_DEVICE_NOT_THERE 0x0043 +#define MPT_SCSI_IOCSTATUS_DATA_OVERRUN 0x0044 +#define MPT_SCSI_IOCSTATUS_DATA_UNDERRUN 0x0045 // // Device structures @@ -107,18 +107,18 @@ typedef struct { } MPT_SCSI_IO_REQUEST; typedef struct { - UINT32 Length: 24; - UINT32 EndOfList: 1; - UINT32 Is64BitAddress: 1; + UINT32 Length : 24; + UINT32 EndOfList : 1; + UINT32 Is64BitAddress : 1; // // True when the buffer contains data to be transfered. Otherwise it's the // destination buffer // - UINT32 BufferContainsData: 1; - UINT32 LocalAddress: 1; - UINT32 ElementType: 2; - UINT32 EndOfBuffer: 1; - UINT32 LastElement: 1; + UINT32 BufferContainsData : 1; + UINT32 LocalAddress : 1; + UINT32 ElementType : 2; + UINT32 EndOfBuffer : 1; + UINT32 LastElement : 1; UINT64 DataBufferAddress; } MPT_SG_ENTRY_SIMPLE; @@ -142,19 +142,19 @@ typedef struct { } MPT_SCSI_IO_REPLY; typedef struct { - MPT_SCSI_IO_REQUEST Header; - MPT_SG_ENTRY_SIMPLE Sg; + MPT_SCSI_IO_REQUEST Header; + MPT_SG_ENTRY_SIMPLE Sg; } MPT_SCSI_REQUEST_WITH_SG; #pragma pack () typedef union { - MPT_SCSI_IO_REPLY Data; - UINT64 Uint64; // 8 byte alignment required by HW + MPT_SCSI_IO_REPLY Data; + UINT64 Uint64; // 8 byte alignment required by HW } MPT_SCSI_IO_REPLY_ALIGNED; typedef union { - MPT_SCSI_REQUEST_WITH_SG Data; - UINT64 Uint64; // 8 byte alignment required by HW + MPT_SCSI_REQUEST_WITH_SG Data; + UINT64 Uint64; // 8 byte alignment required by HW } MPT_SCSI_REQUEST_ALIGNED; #endif // __FUSION_MPT_SCSI_H__ diff --git a/OvmfPkg/Include/IndustryStandard/I440FxPiix4.h b/OvmfPkg/Include/IndustryStandard/I440FxPiix4.h index 3973ff0a95..b4c374c920 100644 --- a/OvmfPkg/Include/IndustryStandard/I440FxPiix4.h +++ b/OvmfPkg/Include/IndustryStandard/I440FxPiix4.h @@ -19,36 +19,36 @@ // // Host Bridge Device ID (DID) value for I440FX // -#define INTEL_82441_DEVICE_ID 0x1237 +#define INTEL_82441_DEVICE_ID 0x1237 // // B/D/F/Type: 0/0/0/PCI // -#define PMC_REGISTER_PIIX4(Offset) PCI_LIB_ADDRESS (0, 0, 0, (Offset)) +#define PMC_REGISTER_PIIX4(Offset) PCI_LIB_ADDRESS (0, 0, 0, (Offset)) -#define PIIX4_PAM0 0x59 -#define PIIX4_PAM1 0x5A -#define PIIX4_PAM2 0x5B -#define PIIX4_PAM3 0x5C -#define PIIX4_PAM4 0x5D -#define PIIX4_PAM5 0x5E -#define PIIX4_PAM6 0x5F +#define PIIX4_PAM0 0x59 +#define PIIX4_PAM1 0x5A +#define PIIX4_PAM2 0x5B +#define PIIX4_PAM3 0x5C +#define PIIX4_PAM4 0x5D +#define PIIX4_PAM5 0x5E +#define PIIX4_PAM6 0x5F // // B/D/F/Type: 0/1/3/PCI // -#define POWER_MGMT_REGISTER_PIIX4(Offset) PCI_LIB_ADDRESS (0, 1, 3, (Offset)) +#define POWER_MGMT_REGISTER_PIIX4(Offset) PCI_LIB_ADDRESS (0, 1, 3, (Offset)) -#define PIIX4_PMBA 0x40 -#define PIIX4_PMBA_MASK (BIT15 | BIT14 | BIT13 | BIT12 | BIT11 | \ +#define PIIX4_PMBA 0x40 +#define PIIX4_PMBA_MASK (BIT15 | BIT14 | BIT13 | BIT12 | BIT11 | \ BIT10 | BIT9 | BIT8 | BIT7 | BIT6) -#define PIIX4_PMREGMISC 0x80 -#define PIIX4_PMREGMISC_PMIOSE BIT0 +#define PIIX4_PMREGMISC 0x80 +#define PIIX4_PMREGMISC_PMIOSE BIT0 // // IO ports // -#define PIIX4_CPU_HOTPLUG_BASE 0xAF00 +#define PIIX4_CPU_HOTPLUG_BASE 0xAF00 #endif diff --git a/OvmfPkg/Include/IndustryStandard/InstructionParsing.h b/OvmfPkg/Include/IndustryStandard/InstructionParsing.h index 149ff328e0..e70557a933 100644 --- a/OvmfPkg/Include/IndustryStandard/InstructionParsing.h +++ b/OvmfPkg/Include/IndustryStandard/InstructionParsing.h @@ -17,14 +17,14 @@ // typedef union { struct { - UINT8 BitB:1; - UINT8 BitX:1; - UINT8 BitR:1; - UINT8 BitW:1; - UINT8 Rex:4; + UINT8 BitB : 1; + UINT8 BitX : 1; + UINT8 BitR : 1; + UINT8 BitW : 1; + UINT8 Rex : 4; } Bits; - UINT8 Uint8; + UINT8 Uint8; } INSTRUCTION_REX_PREFIX; // @@ -32,12 +32,12 @@ typedef union { // typedef union { struct { - UINT8 Rm:3; - UINT8 Reg:3; - UINT8 Mod:2; + UINT8 Rm : 3; + UINT8 Reg : 3; + UINT8 Mod : 2; } Bits; - UINT8 Uint8; + UINT8 Uint8; } INSTRUCTION_MODRM; // @@ -45,28 +45,28 @@ typedef union { // typedef union { struct { - UINT8 Base:3; - UINT8 Index:3; - UINT8 Scale:2; + UINT8 Base : 3; + UINT8 Index : 3; + UINT8 Scale : 2; } Bits; - UINT8 Uint8; + UINT8 Uint8; } INSTRUCTION_SIB; // // Legacy Instruction Prefixes // -#define OVERRIDE_SEGMENT_CS 0x2E -#define OVERRIDE_SEGMENT_DS 0x3E -#define OVERRIDE_SEGMENT_ES 0x26 -#define OVERRIDE_SEGMENT_SS 0x36 -#define OVERRIDE_SEGMENT_FS 0x64 -#define OVERRIDE_SEGMENT_GS 0x65 -#define OVERRIDE_OPERAND_SIZE 0x66 -#define OVERRIDE_ADDRESS_SIZE 0x67 -#define LOCK_PREFIX 0xF0 -#define REPNZ_PREFIX 0xF2 -#define REPZ_PREFIX 0xF3 +#define OVERRIDE_SEGMENT_CS 0x2E +#define OVERRIDE_SEGMENT_DS 0x3E +#define OVERRIDE_SEGMENT_ES 0x26 +#define OVERRIDE_SEGMENT_SS 0x36 +#define OVERRIDE_SEGMENT_FS 0x64 +#define OVERRIDE_SEGMENT_GS 0x65 +#define OVERRIDE_OPERAND_SIZE 0x66 +#define OVERRIDE_ADDRESS_SIZE 0x67 +#define LOCK_PREFIX 0xF0 +#define REPNZ_PREFIX 0xF2 +#define REPZ_PREFIX 0xF3 // // REX Prefixes @@ -78,6 +78,6 @@ typedef union { // // Two-byte Opcode Flag // -#define TWO_BYTE_OPCODE_ESCAPE 0x0F +#define TWO_BYTE_OPCODE_ESCAPE 0x0F #endif diff --git a/OvmfPkg/Include/IndustryStandard/LegacyVgaBios.h b/OvmfPkg/Include/IndustryStandard/LegacyVgaBios.h index 38360a68b2..7568d585a9 100644 --- a/OvmfPkg/Include/IndustryStandard/LegacyVgaBios.h +++ b/OvmfPkg/Include/IndustryStandard/LegacyVgaBios.h @@ -18,111 +18,111 @@ #pragma pack (1) typedef struct { - UINT8 Signature[4]; - UINT16 VesaVersion; - UINT32 OemNameAddress; - UINT32 Capabilities; - UINT32 ModeListAddress; - UINT16 VideoMem64K; - UINT16 OemSoftwareVersion; - UINT32 VendorNameAddress; - UINT32 ProductNameAddress; - UINT32 ProductRevAddress; + UINT8 Signature[4]; + UINT16 VesaVersion; + UINT32 OemNameAddress; + UINT32 Capabilities; + UINT32 ModeListAddress; + UINT16 VideoMem64K; + UINT16 OemSoftwareVersion; + UINT32 VendorNameAddress; + UINT32 ProductNameAddress; + UINT32 ProductRevAddress; } VBE_INFO_BASE; typedef struct { - VBE_INFO_BASE Base; - UINT8 Buffer[256 - sizeof (VBE_INFO_BASE)]; + VBE_INFO_BASE Base; + UINT8 Buffer[256 - sizeof (VBE_INFO_BASE)]; } VBE_INFO; typedef struct { - UINT16 ModeAttr; - UINT8 WindowAAttr; - UINT8 WindowBAttr; - UINT16 WindowGranularityKB; - UINT16 WindowSizeKB; - UINT16 WindowAStartSegment; - UINT16 WindowBStartSegment; - UINT32 WindowPositioningAddress; - UINT16 BytesPerScanLine; - - UINT16 Width; - UINT16 Height; - UINT8 CharCellWidth; - UINT8 CharCellHeight; - UINT8 NumPlanes; - UINT8 BitsPerPixel; - UINT8 NumBanks; - UINT8 MemoryModel; - UINT8 BankSizeKB; - UINT8 NumImagePagesLessOne; - UINT8 Vbe3; - - UINT8 RedMaskSize; - UINT8 RedMaskPos; - UINT8 GreenMaskSize; - UINT8 GreenMaskPos; - UINT8 BlueMaskSize; - UINT8 BlueMaskPos; - UINT8 ReservedMaskSize; - UINT8 ReservedMaskPos; - UINT8 DirectColorModeInfo; - - UINT32 LfbAddress; - UINT32 OffScreenAddress; - UINT16 OffScreenSizeKB; - - UINT16 BytesPerScanLineLinear; - UINT8 NumImagesLessOneBanked; - UINT8 NumImagesLessOneLinear; - UINT8 RedMaskSizeLinear; - UINT8 RedMaskPosLinear; - UINT8 GreenMaskSizeLinear; - UINT8 GreenMaskPosLinear; - UINT8 BlueMaskSizeLinear; - UINT8 BlueMaskPosLinear; - UINT8 ReservedMaskSizeLinear; - UINT8 ReservedMaskPosLinear; - UINT32 MaxPixelClockHz; - UINT8 Reserved[190]; + UINT16 ModeAttr; + UINT8 WindowAAttr; + UINT8 WindowBAttr; + UINT16 WindowGranularityKB; + UINT16 WindowSizeKB; + UINT16 WindowAStartSegment; + UINT16 WindowBStartSegment; + UINT32 WindowPositioningAddress; + UINT16 BytesPerScanLine; + + UINT16 Width; + UINT16 Height; + UINT8 CharCellWidth; + UINT8 CharCellHeight; + UINT8 NumPlanes; + UINT8 BitsPerPixel; + UINT8 NumBanks; + UINT8 MemoryModel; + UINT8 BankSizeKB; + UINT8 NumImagePagesLessOne; + UINT8 Vbe3; + + UINT8 RedMaskSize; + UINT8 RedMaskPos; + UINT8 GreenMaskSize; + UINT8 GreenMaskPos; + UINT8 BlueMaskSize; + UINT8 BlueMaskPos; + UINT8 ReservedMaskSize; + UINT8 ReservedMaskPos; + UINT8 DirectColorModeInfo; + + UINT32 LfbAddress; + UINT32 OffScreenAddress; + UINT16 OffScreenSizeKB; + + UINT16 BytesPerScanLineLinear; + UINT8 NumImagesLessOneBanked; + UINT8 NumImagesLessOneLinear; + UINT8 RedMaskSizeLinear; + UINT8 RedMaskPosLinear; + UINT8 GreenMaskSizeLinear; + UINT8 GreenMaskPosLinear; + UINT8 BlueMaskSizeLinear; + UINT8 BlueMaskPosLinear; + UINT8 ReservedMaskSizeLinear; + UINT8 ReservedMaskPosLinear; + UINT32 MaxPixelClockHz; + UINT8 Reserved[190]; } VBE_MODE_INFO; typedef struct { - UINT16 ModeAttr; - UINT8 WindowAAttr; - UINT8 WindowBAttr; - UINT16 WindowGranularityKB; - UINT16 WindowSizeKB; - UINT16 WindowAStartSegment; - UINT16 WindowBStartSegment; - UINT32 WindowPositioningAddress; - UINT16 BytesPerScanLine; - - UINT16 Width; - UINT16 Height; - UINT8 CharCellWidth; - UINT8 CharCellHeight; - UINT8 NumPlanes; - UINT8 BitsPerPixel; - UINT8 NumBanks; - UINT8 MemoryModel; - UINT8 BankSizeKB; - UINT8 NumImagePagesLessOne; - UINT8 Vbe3; - - UINT8 RedMaskSize; - UINT8 RedMaskPos; - UINT8 GreenMaskSize; - UINT8 GreenMaskPos; - UINT8 BlueMaskSize; - UINT8 BlueMaskPos; - UINT8 ReservedMaskSize; - UINT8 ReservedMaskPos; - UINT8 DirectColorModeInfo; - - UINT32 LfbAddress; - UINT32 OffScreenAddress; - UINT16 OffScreenSizeKB; + UINT16 ModeAttr; + UINT8 WindowAAttr; + UINT8 WindowBAttr; + UINT16 WindowGranularityKB; + UINT16 WindowSizeKB; + UINT16 WindowAStartSegment; + UINT16 WindowBStartSegment; + UINT32 WindowPositioningAddress; + UINT16 BytesPerScanLine; + + UINT16 Width; + UINT16 Height; + UINT8 CharCellWidth; + UINT8 CharCellHeight; + UINT8 NumPlanes; + UINT8 BitsPerPixel; + UINT8 NumBanks; + UINT8 MemoryModel; + UINT8 BankSizeKB; + UINT8 NumImagePagesLessOne; + UINT8 Vbe3; + + UINT8 RedMaskSize; + UINT8 RedMaskPos; + UINT8 GreenMaskSize; + UINT8 GreenMaskPos; + UINT8 BlueMaskSize; + UINT8 BlueMaskPos; + UINT8 ReservedMaskSize; + UINT8 ReservedMaskPos; + UINT8 DirectColorModeInfo; + + UINT32 LfbAddress; + UINT32 OffScreenAddress; + UINT16 OffScreenSizeKB; } VBE2_MODE_INFO; #pragma pack () diff --git a/OvmfPkg/Include/IndustryStandard/LinuxBzimage.h b/OvmfPkg/Include/IndustryStandard/LinuxBzimage.h index aa00ddaf41..08d0fcab44 100644 --- a/OvmfPkg/Include/IndustryStandard/LinuxBzimage.h +++ b/OvmfPkg/Include/IndustryStandard/LinuxBzimage.h @@ -8,151 +8,154 @@ #ifndef __LINUX_BZIMAGE_H__ #define __LINUX_BZIMAGE_H__ -#define BOOTSIG 0x1FE -#define SETUP_HDR 0x53726448 /* 0x53726448 == "HdrS" */ +#define BOOTSIG 0x1FE +#define SETUP_HDR 0x53726448 /* 0x53726448 == "HdrS" */ -#define E820_RAM 1 -#define E820_RESERVED 2 -#define E820_ACPI 3 -#define E820_NVS 4 -#define E820_UNUSABLE 5 +#define E820_RAM 1 +#define E820_RESERVED 2 +#define E820_ACPI 3 +#define E820_NVS 4 +#define E820_UNUSABLE 5 #pragma pack(1) struct setup_header { - UINT8 setup_secs; /* Sectors for setup code */ - UINT16 root_flags; - UINT32 sys_size; - UINT16 ram_size; - UINT16 video_mode; - UINT16 root_dev; - UINT16 signature; /* Boot signature */ - UINT16 jump; - UINT32 header; - UINT16 version; - UINT16 su_switch; - UINT16 setup_seg; - UINT16 start_sys; - UINT16 kernel_ver; - UINT8 loader_id; - UINT8 load_flags; - UINT16 movesize; - UINT32 code32_start; /* Start of code loaded high */ - UINT32 ramdisk_start; /* Start of initial ramdisk */ - UINT32 ramdisk_len; /* Length of initial ramdisk */ - UINT32 bootsect_kludge; - UINT16 heap_end; - UINT8 ext_loader_ver; /* Extended boot loader version */ - UINT8 ext_loader_type; /* Extended boot loader ID */ - UINT32 cmd_line_ptr; /* 32-bit pointer to the kernel command line */ - UINT32 ramdisk_max; /* Highest legal initrd address */ - UINT32 kernel_alignment; /* Physical addr alignment required for kernel */ - UINT8 relocatable_kernel; /* Whether kernel is relocatable or not */ - UINT8 min_alignment; - UINT16 xloadflags; - UINT32 cmdline_size; - UINT32 hardware_subarch; - UINT64 hardware_subarch_data; - UINT32 payload_offset; - UINT32 payload_length; - UINT64 setup_data; - UINT64 pref_address; - UINT32 init_size; - UINT32 handover_offset; + UINT8 setup_secs; /* Sectors for setup code */ + UINT16 root_flags; + UINT32 sys_size; + UINT16 ram_size; + UINT16 video_mode; + UINT16 root_dev; + UINT16 signature; /* Boot signature */ + UINT16 jump; + UINT32 header; + UINT16 version; + UINT16 su_switch; + UINT16 setup_seg; + UINT16 start_sys; + UINT16 kernel_ver; + UINT8 loader_id; + UINT8 load_flags; + UINT16 movesize; + UINT32 code32_start; /* Start of code loaded high */ + UINT32 ramdisk_start; /* Start of initial ramdisk */ + UINT32 ramdisk_len; /* Length of initial ramdisk */ + UINT32 bootsect_kludge; + UINT16 heap_end; + UINT8 ext_loader_ver; /* Extended boot loader version */ + UINT8 ext_loader_type; /* Extended boot loader ID */ + UINT32 cmd_line_ptr; /* 32-bit pointer to the kernel command line */ + UINT32 ramdisk_max; /* Highest legal initrd address */ + UINT32 kernel_alignment; /* Physical addr alignment required for kernel */ + UINT8 relocatable_kernel; /* Whether kernel is relocatable or not */ + UINT8 min_alignment; + UINT16 xloadflags; + UINT32 cmdline_size; + UINT32 hardware_subarch; + UINT64 hardware_subarch_data; + UINT32 payload_offset; + UINT32 payload_length; + UINT64 setup_data; + UINT64 pref_address; + UINT32 init_size; + UINT32 handover_offset; }; struct efi_info { - UINT32 efi_loader_signature; - UINT32 efi_systab; - UINT32 efi_memdesc_size; - UINT32 efi_memdesc_version; - UINT32 efi_memmap; - UINT32 efi_memmap_size; - UINT32 efi_systab_hi; - UINT32 efi_memmap_hi; + UINT32 efi_loader_signature; + UINT32 efi_systab; + UINT32 efi_memdesc_size; + UINT32 efi_memdesc_version; + UINT32 efi_memmap; + UINT32 efi_memmap_size; + UINT32 efi_systab_hi; + UINT32 efi_memmap_hi; }; struct e820_entry { - UINT64 addr; /* start of memory segment */ - UINT64 size; /* size of memory segment */ - UINT32 type; /* type of memory segment */ + UINT64 addr; /* start of memory segment */ + UINT64 size; /* size of memory segment */ + UINT32 type; /* type of memory segment */ }; struct screen_info { - UINT8 orig_x; /* 0x00 */ - UINT8 orig_y; /* 0x01 */ - UINT16 ext_mem_k; /* 0x02 */ - UINT16 orig_video_page; /* 0x04 */ - UINT8 orig_video_mode; /* 0x06 */ - UINT8 orig_video_cols; /* 0x07 */ - UINT8 flags; /* 0x08 */ - UINT8 unused2; /* 0x09 */ - UINT16 orig_video_ega_bx;/* 0x0a */ - UINT16 unused3; /* 0x0c */ - UINT8 orig_video_lines; /* 0x0e */ - UINT8 orig_video_isVGA; /* 0x0f */ - UINT16 orig_video_points;/* 0x10 */ - - /* VESA graphic mode -- linear frame buffer */ - UINT16 lfb_width; /* 0x12 */ - UINT16 lfb_height; /* 0x14 */ - UINT16 lfb_depth; /* 0x16 */ - UINT32 lfb_base; /* 0x18 */ - UINT32 lfb_size; /* 0x1c */ - UINT16 cl_magic, cl_offset; /* 0x20 */ - UINT16 lfb_linelength; /* 0x24 */ - UINT8 red_size; /* 0x26 */ - UINT8 red_pos; /* 0x27 */ - UINT8 green_size; /* 0x28 */ - UINT8 green_pos; /* 0x29 */ - UINT8 blue_size; /* 0x2a */ - UINT8 blue_pos; /* 0x2b */ - UINT8 rsvd_size; /* 0x2c */ - UINT8 rsvd_pos; /* 0x2d */ - UINT16 vesapm_seg; /* 0x2e */ - UINT16 vesapm_off; /* 0x30 */ - UINT16 pages; /* 0x32 */ - UINT16 vesa_attributes; /* 0x34 */ - UINT32 capabilities; /* 0x36 */ - UINT8 _reserved[6]; /* 0x3a */ + UINT8 orig_x; /* 0x00 */ + UINT8 orig_y; /* 0x01 */ + UINT16 ext_mem_k; /* 0x02 */ + UINT16 orig_video_page; /* 0x04 */ + UINT8 orig_video_mode; /* 0x06 */ + UINT8 orig_video_cols; /* 0x07 */ + UINT8 flags; /* 0x08 */ + UINT8 unused2; /* 0x09 */ + UINT16 orig_video_ega_bx; /* 0x0a */ + UINT16 unused3; /* 0x0c */ + UINT8 orig_video_lines; /* 0x0e */ + UINT8 orig_video_isVGA; /* 0x0f */ + UINT16 orig_video_points; /* 0x10 */ + + /* VESA graphic mode -- linear frame buffer */ + UINT16 lfb_width; /* 0x12 */ + UINT16 lfb_height; /* 0x14 */ + UINT16 lfb_depth; /* 0x16 */ + UINT32 lfb_base; /* 0x18 */ + UINT32 lfb_size; /* 0x1c */ + UINT16 cl_magic, cl_offset; /* 0x20 */ + UINT16 lfb_linelength; /* 0x24 */ + UINT8 red_size; /* 0x26 */ + UINT8 red_pos; /* 0x27 */ + UINT8 green_size; /* 0x28 */ + UINT8 green_pos; /* 0x29 */ + UINT8 blue_size; /* 0x2a */ + UINT8 blue_pos; /* 0x2b */ + UINT8 rsvd_size; /* 0x2c */ + UINT8 rsvd_pos; /* 0x2d */ + UINT16 vesapm_seg; /* 0x2e */ + UINT16 vesapm_off; /* 0x30 */ + UINT16 pages; /* 0x32 */ + UINT16 vesa_attributes; /* 0x34 */ + UINT32 capabilities; /* 0x36 */ + UINT8 _reserved[6]; /* 0x3a */ }; struct boot_params { - struct screen_info screen_info; - UINT8 apm_bios_info[0x14]; - UINT8 _pad2[4]; - UINT64 tboot_addr; - UINT8 ist_info[0x10]; - UINT8 _pad3[16]; - UINT8 hd0_info[16]; - UINT8 hd1_info[16]; - UINT8 sys_desc_table[0x10]; - UINT8 olpc_ofw_header[0x10]; - UINT8 _pad4[128]; - UINT8 edid_info[0x80]; - struct efi_info efi_info; - UINT32 alt_mem_k; - UINT32 scratch; - UINT8 e820_entries; - UINT8 eddbuf_entries; - UINT8 edd_mbr_sig_buf_entries; - UINT8 _pad6[6]; - struct setup_header hdr; - UINT8 _pad7[0x290-0x1f1-sizeof(struct setup_header)]; - UINT32 edd_mbr_sig_buffer[16]; - struct e820_entry e820_map[128]; - UINT8 _pad8[48]; - UINT8 eddbuf[0x1ec]; - UINT8 _pad9[276]; + struct screen_info screen_info; + UINT8 apm_bios_info[0x14]; + UINT8 _pad2[4]; + UINT64 tboot_addr; + UINT8 ist_info[0x10]; + UINT8 _pad3[16]; + UINT8 hd0_info[16]; + UINT8 hd1_info[16]; + UINT8 sys_desc_table[0x10]; + UINT8 olpc_ofw_header[0x10]; + UINT8 _pad4[128]; + UINT8 edid_info[0x80]; + struct efi_info efi_info; + UINT32 alt_mem_k; + UINT32 scratch; + UINT8 e820_entries; + UINT8 eddbuf_entries; + UINT8 edd_mbr_sig_buf_entries; + UINT8 _pad6[6]; + struct setup_header hdr; + UINT8 _pad7[0x290-0x1f1-sizeof (struct setup_header)]; + UINT32 edd_mbr_sig_buffer[16]; + struct e820_entry e820_map[128]; + UINT8 _pad8[48]; + UINT8 eddbuf[0x1ec]; + UINT8 _pad9[276]; }; typedef struct { - UINT16 limit; - UINT64 *base; + UINT16 limit; + UINT64 *base; } dt_addr_t; #pragma pack() -extern EFI_STATUS setup_graphics(struct boot_params *buf); +extern EFI_STATUS +setup_graphics ( + struct boot_params *buf + ); #endif /* __LINUX_BZIMAGE_H__ */ diff --git a/OvmfPkg/Include/IndustryStandard/LsiScsi.h b/OvmfPkg/Include/IndustryStandard/LsiScsi.h index 01d75323cd..affff53889 100644 --- a/OvmfPkg/Include/IndustryStandard/LsiScsi.h +++ b/OvmfPkg/Include/IndustryStandard/LsiScsi.h @@ -14,90 +14,90 @@ // // Device ID // -#define LSI_LOGIC_PCI_VENDOR_ID 0x1000 -#define LSI_53C895A_PCI_DEVICE_ID 0x0012 +#define LSI_LOGIC_PCI_VENDOR_ID 0x1000 +#define LSI_53C895A_PCI_DEVICE_ID 0x0012 // // LSI 53C895A Registers // -#define LSI_REG_DSTAT 0x0C -#define LSI_REG_ISTAT0 0x14 -#define LSI_REG_DSP 0x2C -#define LSI_REG_SIST0 0x42 -#define LSI_REG_SIST1 0x43 -#define LSI_REG_CSBC 0xDC +#define LSI_REG_DSTAT 0x0C +#define LSI_REG_ISTAT0 0x14 +#define LSI_REG_DSP 0x2C +#define LSI_REG_SIST0 0x42 +#define LSI_REG_SIST1 0x43 +#define LSI_REG_CSBC 0xDC // // The status bits for DMA Status (DSTAT) // -#define LSI_DSTAT_IID BIT0 -#define LSI_DSTAT_R BIT1 -#define LSI_DSTAT_SIR BIT2 -#define LSI_DSTAT_SSI BIT3 -#define LSI_DSTAT_ABRT BIT4 -#define LSI_DSTAT_BF BIT5 -#define LSI_DSTAT_MDPE BIT6 -#define LSI_DSTAT_DFE BIT7 +#define LSI_DSTAT_IID BIT0 +#define LSI_DSTAT_R BIT1 +#define LSI_DSTAT_SIR BIT2 +#define LSI_DSTAT_SSI BIT3 +#define LSI_DSTAT_ABRT BIT4 +#define LSI_DSTAT_BF BIT5 +#define LSI_DSTAT_MDPE BIT6 +#define LSI_DSTAT_DFE BIT7 // // The status bits for Interrupt Status Zero (ISTAT0) // -#define LSI_ISTAT0_DIP BIT0 -#define LSI_ISTAT0_SIP BIT1 -#define LSI_ISTAT0_INTF BIT2 -#define LSI_ISTAT0_CON BIT3 -#define LSI_ISTAT0_SEM BIT4 -#define LSI_ISTAT0_SIGP BIT5 -#define LSI_ISTAT0_SRST BIT6 -#define LSI_ISTAT0_ABRT BIT7 +#define LSI_ISTAT0_DIP BIT0 +#define LSI_ISTAT0_SIP BIT1 +#define LSI_ISTAT0_INTF BIT2 +#define LSI_ISTAT0_CON BIT3 +#define LSI_ISTAT0_SEM BIT4 +#define LSI_ISTAT0_SIGP BIT5 +#define LSI_ISTAT0_SRST BIT6 +#define LSI_ISTAT0_ABRT BIT7 // // The status bits for SCSI Interrupt Status Zero (SIST0) // -#define LSI_SIST0_PAR BIT0 -#define LSI_SIST0_RST BIT1 -#define LSI_SIST0_UDC BIT2 -#define LSI_SIST0_SGE BIT3 -#define LSI_SIST0_RSL BIT4 -#define LSI_SIST0_SEL BIT5 -#define LSI_SIST0_CMP BIT6 -#define LSI_SIST0_MA BIT7 +#define LSI_SIST0_PAR BIT0 +#define LSI_SIST0_RST BIT1 +#define LSI_SIST0_UDC BIT2 +#define LSI_SIST0_SGE BIT3 +#define LSI_SIST0_RSL BIT4 +#define LSI_SIST0_SEL BIT5 +#define LSI_SIST0_CMP BIT6 +#define LSI_SIST0_MA BIT7 // // The status bits for SCSI Interrupt Status One (SIST1) // -#define LSI_SIST1_HTH BIT0 -#define LSI_SIST1_GEN BIT1 -#define LSI_SIST1_STO BIT2 -#define LSI_SIST1_R3 BIT3 -#define LSI_SIST1_SBMC BIT4 -#define LSI_SIST1_R5 BIT5 -#define LSI_SIST1_R6 BIT6 -#define LSI_SIST1_R7 BIT7 +#define LSI_SIST1_HTH BIT0 +#define LSI_SIST1_GEN BIT1 +#define LSI_SIST1_STO BIT2 +#define LSI_SIST1_R3 BIT3 +#define LSI_SIST1_SBMC BIT4 +#define LSI_SIST1_R5 BIT5 +#define LSI_SIST1_R6 BIT6 +#define LSI_SIST1_R7 BIT7 // // LSI 53C895A Script Instructions // -#define LSI_INS_TYPE_BLK 0x00000000 -#define LSI_INS_TYPE_IO BIT30 -#define LSI_INS_TYPE_TC BIT31 - -#define LSI_INS_BLK_SCSIP_DAT_OUT 0x00000000 -#define LSI_INS_BLK_SCSIP_DAT_IN BIT24 -#define LSI_INS_BLK_SCSIP_CMD BIT25 -#define LSI_INS_BLK_SCSIP_STAT (BIT24 | BIT25) -#define LSI_INS_BLK_SCSIP_MSG_OUT (BIT25 | BIT26) -#define LSI_INS_BLK_SCSIP_MSG_IN (BIT24 | BIT25 | BIT26) - -#define LSI_INS_IO_OPC_SEL 0x00000000 -#define LSI_INS_IO_OPC_WAIT_RESEL BIT28 - -#define LSI_INS_TC_CP BIT17 -#define LSI_INS_TC_JMP BIT19 -#define LSI_INS_TC_RA BIT23 - -#define LSI_INS_TC_OPC_JMP 0x00000000 -#define LSI_INS_TC_OPC_INT (BIT27 | BIT28) +#define LSI_INS_TYPE_BLK 0x00000000 +#define LSI_INS_TYPE_IO BIT30 +#define LSI_INS_TYPE_TC BIT31 + +#define LSI_INS_BLK_SCSIP_DAT_OUT 0x00000000 +#define LSI_INS_BLK_SCSIP_DAT_IN BIT24 +#define LSI_INS_BLK_SCSIP_CMD BIT25 +#define LSI_INS_BLK_SCSIP_STAT (BIT24 | BIT25) +#define LSI_INS_BLK_SCSIP_MSG_OUT (BIT25 | BIT26) +#define LSI_INS_BLK_SCSIP_MSG_IN (BIT24 | BIT25 | BIT26) + +#define LSI_INS_IO_OPC_SEL 0x00000000 +#define LSI_INS_IO_OPC_WAIT_RESEL BIT28 + +#define LSI_INS_TC_CP BIT17 +#define LSI_INS_TC_JMP BIT19 +#define LSI_INS_TC_RA BIT23 + +#define LSI_INS_TC_OPC_JMP 0x00000000 +#define LSI_INS_TC_OPC_INT (BIT27 | BIT28) #define LSI_INS_TC_SCSIP_DAT_OUT 0x00000000 #define LSI_INS_TC_SCSIP_MSG_IN (BIT24 | BIT25 | BIT26) diff --git a/OvmfPkg/Include/IndustryStandard/Microvm.h b/OvmfPkg/Include/IndustryStandard/Microvm.h index ae0c2e5311..4f669766c4 100644 --- a/OvmfPkg/Include/IndustryStandard/Microvm.h +++ b/OvmfPkg/Include/IndustryStandard/Microvm.h @@ -4,16 +4,17 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ + #ifndef __MICROVM_H__ #define __MICROVM_H__ -#define MICROVM_PSEUDO_DEVICE_ID 0xfff1 +#define MICROVM_PSEUDO_DEVICE_ID 0xfff1 /* generic event device */ -#define MICROVM_GED_MMIO_BASE 0xfea00000 -#define MICROVM_GED_MMIO_BASE_REGS (MICROVM_GED_MMIO_BASE + 0x200) -#define MICROVM_ACPI_GED_REG_SLEEP_CTL 0x00 -#define MICROVM_ACPI_GED_REG_RESET 0x02 -#define MICROVM_ACPI_GED_RESET_VALUE 0x42 +#define MICROVM_GED_MMIO_BASE 0xfea00000 +#define MICROVM_GED_MMIO_BASE_REGS (MICROVM_GED_MMIO_BASE + 0x200) +#define MICROVM_ACPI_GED_REG_SLEEP_CTL 0x00 +#define MICROVM_ACPI_GED_REG_RESET 0x02 +#define MICROVM_ACPI_GED_RESET_VALUE 0x42 #endif // __MICROVM_H__ diff --git a/OvmfPkg/Include/IndustryStandard/PageTable.h b/OvmfPkg/Include/IndustryStandard/PageTable.h index 5e797eeea8..a75b3fcfe7 100644 --- a/OvmfPkg/Include/IndustryStandard/PageTable.h +++ b/OvmfPkg/Include/IndustryStandard/PageTable.h @@ -25,21 +25,21 @@ typedef union { struct { - UINT64 Present:1; // 0 = Not present in memory, - // 1 = Present in memory - UINT64 ReadWrite:1; // 0 = Read-Only, 1= Read/Write - UINT64 UserSupervisor:1; // 0 = Supervisor, 1=User - UINT64 WriteThrough:1; // 0 = Write-Back caching, - // 1 = Write-Through caching - UINT64 CacheDisabled:1; // 0 = Cached, 1=Non-Cached - UINT64 Accessed:1; // 0 = Not accessed, - // 1 = Accessed (set by CPU) - UINT64 Reserved:1; // Reserved - UINT64 MustBeZero:2; // Must Be Zero - UINT64 Available:3; // Available for use by system software - UINT64 PageTableBaseAddress:40; // Page Table Base Address - UINT64 AvabilableHigh:11; // Available for use by system software - UINT64 Nx:1; // No Execute bit + UINT64 Present : 1; // 0 = Not present in memory, + // 1 = Present in memory + UINT64 ReadWrite : 1; // 0 = Read-Only, 1= Read/Write + UINT64 UserSupervisor : 1; // 0 = Supervisor, 1=User + UINT64 WriteThrough : 1; // 0 = Write-Back caching, + // 1 = Write-Through caching + UINT64 CacheDisabled : 1; // 0 = Cached, 1=Non-Cached + UINT64 Accessed : 1; // 0 = Not accessed, + // 1 = Accessed (set by CPU) + UINT64 Reserved : 1; // Reserved + UINT64 MustBeZero : 2; // Must Be Zero + UINT64 Available : 3; // Available for use by system software + UINT64 PageTableBaseAddress : 40; // Page Table Base Address + UINT64 AvabilableHigh : 11; // Available for use by system software + UINT64 Nx : 1; // No Execute bit } Bits; UINT64 Uint64; } PAGE_MAP_AND_DIRECTORY_POINTER; @@ -49,25 +49,25 @@ typedef union { // typedef union { struct { - UINT64 Present:1; // 0 = Not present in memory, - // 1 = Present in memory - UINT64 ReadWrite:1; // 0 = Read-Only, 1= Read/Write - UINT64 UserSupervisor:1; // 0 = Supervisor, 1=User - UINT64 WriteThrough:1; // 0 = Write-Back caching, - // 1 = Write-Through caching - UINT64 CacheDisabled:1; // 0 = Cached, 1=Non-Cached - UINT64 Accessed:1; // 0 = Not accessed, - // 1 = Accessed (set by CPU) - UINT64 Dirty:1; // 0 = Not Dirty, 1 = written by - // processor on access to page - UINT64 PAT:1; // - UINT64 Global:1; // 0 = Not global page, 1 = global page - // TLB not cleared on CR3 write - UINT64 Available:3; // Available for use by system software - UINT64 PageTableBaseAddress:40; // Page Table Base Address - UINT64 AvabilableHigh:11; // Available for use by system software - UINT64 Nx:1; // 0 = Execute Code, - // 1 = No Code Execution + UINT64 Present : 1; // 0 = Not present in memory, + // 1 = Present in memory + UINT64 ReadWrite : 1; // 0 = Read-Only, 1= Read/Write + UINT64 UserSupervisor : 1; // 0 = Supervisor, 1=User + UINT64 WriteThrough : 1; // 0 = Write-Back caching, + // 1 = Write-Through caching + UINT64 CacheDisabled : 1; // 0 = Cached, 1=Non-Cached + UINT64 Accessed : 1; // 0 = Not accessed, + // 1 = Accessed (set by CPU) + UINT64 Dirty : 1; // 0 = Not Dirty, 1 = written by + // processor on access to page + UINT64 PAT : 1; // + UINT64 Global : 1; // 0 = Not global page, 1 = global page + // TLB not cleared on CR3 write + UINT64 Available : 3; // Available for use by system software + UINT64 PageTableBaseAddress : 40; // Page Table Base Address + UINT64 AvabilableHigh : 11; // Available for use by system software + UINT64 Nx : 1; // 0 = Execute Code, + // 1 = No Code Execution } Bits; UINT64 Uint64; } PAGE_TABLE_4K_ENTRY; @@ -77,27 +77,27 @@ typedef union { // typedef union { struct { - UINT64 Present:1; // 0 = Not present in memory, - // 1 = Present in memory - UINT64 ReadWrite:1; // 0 = Read-Only, 1= Read/Write - UINT64 UserSupervisor:1; // 0 = Supervisor, 1=User - UINT64 WriteThrough:1; // 0 = Write-Back caching, - // 1=Write-Through caching - UINT64 CacheDisabled:1; // 0 = Cached, 1=Non-Cached - UINT64 Accessed:1; // 0 = Not accessed, - // 1 = Accessed (set by CPU) - UINT64 Dirty:1; // 0 = Not Dirty, 1 = written by - // processor on access to page - UINT64 MustBe1:1; // Must be 1 - UINT64 Global:1; // 0 = Not global page, 1 = global page - // TLB not cleared on CR3 write - UINT64 Available:3; // Available for use by system software - UINT64 PAT:1; // - UINT64 MustBeZero:8; // Must be zero; - UINT64 PageTableBaseAddress:31; // Page Table Base Address - UINT64 AvabilableHigh:11; // Available for use by system software - UINT64 Nx:1; // 0 = Execute Code, - // 1 = No Code Execution + UINT64 Present : 1; // 0 = Not present in memory, + // 1 = Present in memory + UINT64 ReadWrite : 1; // 0 = Read-Only, 1= Read/Write + UINT64 UserSupervisor : 1; // 0 = Supervisor, 1=User + UINT64 WriteThrough : 1; // 0 = Write-Back caching, + // 1=Write-Through caching + UINT64 CacheDisabled : 1; // 0 = Cached, 1=Non-Cached + UINT64 Accessed : 1; // 0 = Not accessed, + // 1 = Accessed (set by CPU) + UINT64 Dirty : 1; // 0 = Not Dirty, 1 = written by + // processor on access to page + UINT64 MustBe1 : 1; // Must be 1 + UINT64 Global : 1; // 0 = Not global page, 1 = global page + // TLB not cleared on CR3 write + UINT64 Available : 3; // Available for use by system software + UINT64 PAT : 1; // + UINT64 MustBeZero : 8; // Must be zero; + UINT64 PageTableBaseAddress : 31; // Page Table Base Address + UINT64 AvabilableHigh : 11; // Available for use by system software + UINT64 Nx : 1; // 0 = Execute Code, + // 1 = No Code Execution } Bits; UINT64 Uint64; } PAGE_TABLE_ENTRY; @@ -107,55 +107,55 @@ typedef union { // typedef union { struct { - UINT64 Present:1; // 0 = Not present in memory, - // 1 = Present in memory - UINT64 ReadWrite:1; // 0 = Read-Only, 1= Read/Write - UINT64 UserSupervisor:1; // 0 = Supervisor, 1=User - UINT64 WriteThrough:1; // 0 = Write-Back caching, - // 1 = Write-Through caching - UINT64 CacheDisabled:1; // 0 = Cached, 1=Non-Cached - UINT64 Accessed:1; // 0 = Not accessed, - // 1 = Accessed (set by CPU) - UINT64 Dirty:1; // 0 = Not Dirty, 1 = written by - // processor on access to page - UINT64 MustBe1:1; // Must be 1 - UINT64 Global:1; // 0 = Not global page, 1 = global page - // TLB not cleared on CR3 write - UINT64 Available:3; // Available for use by system software - UINT64 PAT:1; // - UINT64 MustBeZero:17; // Must be zero; - UINT64 PageTableBaseAddress:22; // Page Table Base Address - UINT64 AvabilableHigh:11; // Available for use by system software - UINT64 Nx:1; // 0 = Execute Code, - // 1 = No Code Execution + UINT64 Present : 1; // 0 = Not present in memory, + // 1 = Present in memory + UINT64 ReadWrite : 1; // 0 = Read-Only, 1= Read/Write + UINT64 UserSupervisor : 1; // 0 = Supervisor, 1=User + UINT64 WriteThrough : 1; // 0 = Write-Back caching, + // 1 = Write-Through caching + UINT64 CacheDisabled : 1; // 0 = Cached, 1=Non-Cached + UINT64 Accessed : 1; // 0 = Not accessed, + // 1 = Accessed (set by CPU) + UINT64 Dirty : 1; // 0 = Not Dirty, 1 = written by + // processor on access to page + UINT64 MustBe1 : 1; // Must be 1 + UINT64 Global : 1; // 0 = Not global page, 1 = global page + // TLB not cleared on CR3 write + UINT64 Available : 3; // Available for use by system software + UINT64 PAT : 1; // + UINT64 MustBeZero : 17; // Must be zero; + UINT64 PageTableBaseAddress : 22; // Page Table Base Address + UINT64 AvabilableHigh : 11; // Available for use by system software + UINT64 Nx : 1; // 0 = Execute Code, + // 1 = No Code Execution } Bits; UINT64 Uint64; } PAGE_TABLE_1G_ENTRY; #pragma pack() -#define IA32_PG_P BIT0 -#define IA32_PG_RW BIT1 -#define IA32_PG_PS BIT7 +#define IA32_PG_P BIT0 +#define IA32_PG_RW BIT1 +#define IA32_PG_PS BIT7 -#define PAGING_PAE_INDEX_MASK 0x1FF +#define PAGING_PAE_INDEX_MASK 0x1FF -#define PAGING_4K_ADDRESS_MASK_64 0x000FFFFFFFFFF000ull -#define PAGING_2M_ADDRESS_MASK_64 0x000FFFFFFFE00000ull -#define PAGING_1G_ADDRESS_MASK_64 0x000FFFFFC0000000ull +#define PAGING_4K_ADDRESS_MASK_64 0x000FFFFFFFFFF000ull +#define PAGING_2M_ADDRESS_MASK_64 0x000FFFFFFFE00000ull +#define PAGING_1G_ADDRESS_MASK_64 0x000FFFFFC0000000ull -#define PAGING_L1_ADDRESS_SHIFT 12 -#define PAGING_L2_ADDRESS_SHIFT 21 -#define PAGING_L3_ADDRESS_SHIFT 30 -#define PAGING_L4_ADDRESS_SHIFT 39 +#define PAGING_L1_ADDRESS_SHIFT 12 +#define PAGING_L2_ADDRESS_SHIFT 21 +#define PAGING_L3_ADDRESS_SHIFT 30 +#define PAGING_L4_ADDRESS_SHIFT 39 -#define PAGING_PML4E_NUMBER 4 +#define PAGING_PML4E_NUMBER 4 -#define PAGETABLE_ENTRY_MASK ((1UL << 9) - 1) -#define PML4_OFFSET(x) ( (x >> 39) & PAGETABLE_ENTRY_MASK) -#define PDP_OFFSET(x) ( (x >> 30) & PAGETABLE_ENTRY_MASK) -#define PDE_OFFSET(x) ( (x >> 21) & PAGETABLE_ENTRY_MASK) -#define PTE_OFFSET(x) ( (x >> 12) & PAGETABLE_ENTRY_MASK) -#define PAGING_1G_ADDRESS_MASK_64 0x000FFFFFC0000000ull +#define PAGETABLE_ENTRY_MASK ((1UL << 9) - 1) +#define PML4_OFFSET(x) ( (x >> 39) & PAGETABLE_ENTRY_MASK) +#define PDP_OFFSET(x) ( (x >> 30) & PAGETABLE_ENTRY_MASK) +#define PDE_OFFSET(x) ( (x >> 21) & PAGETABLE_ENTRY_MASK) +#define PTE_OFFSET(x) ( (x >> 12) & PAGETABLE_ENTRY_MASK) +#define PAGING_1G_ADDRESS_MASK_64 0x000FFFFFC0000000ull #endif diff --git a/OvmfPkg/Include/IndustryStandard/PvScsi.h b/OvmfPkg/Include/IndustryStandard/PvScsi.h index a4d6634f3b..70ed91ddb3 100644 --- a/OvmfPkg/Include/IndustryStandard/PvScsi.h +++ b/OvmfPkg/Include/IndustryStandard/PvScsi.h @@ -15,60 +15,60 @@ // Device offsets and constants // -#define PCI_VENDOR_ID_VMWARE (0x15ad) -#define PCI_DEVICE_ID_VMWARE_PVSCSI (0x07c0) +#define PCI_VENDOR_ID_VMWARE (0x15ad) +#define PCI_DEVICE_ID_VMWARE_PVSCSI (0x07c0) // // CDB (Command Descriptor Block) with size above this constant // should be considered out-of-band // -#define PVSCSI_CDB_MAX_SIZE (16) +#define PVSCSI_CDB_MAX_SIZE (16) typedef enum { - PvScsiRegOffsetCommand = 0x0, - PvScsiRegOffsetCommandData = 0x4, - PvScsiRegOffsetCommandStatus = 0x8, - PvScsiRegOffsetLastSts0 = 0x100, - PvScsiRegOffsetLastSts1 = 0x104, - PvScsiRegOffsetLastSts2 = 0x108, - PvScsiRegOffsetLastSts3 = 0x10c, - PvScsiRegOffsetIntrStatus = 0x100c, - PvScsiRegOffsetIntrMask = 0x2010, - PvScsiRegOffsetKickNonRwIo = 0x3014, - PvScsiRegOffsetDebug = 0x3018, - PvScsiRegOffsetKickRwIo = 0x4018, + PvScsiRegOffsetCommand = 0x0, + PvScsiRegOffsetCommandData = 0x4, + PvScsiRegOffsetCommandStatus = 0x8, + PvScsiRegOffsetLastSts0 = 0x100, + PvScsiRegOffsetLastSts1 = 0x104, + PvScsiRegOffsetLastSts2 = 0x108, + PvScsiRegOffsetLastSts3 = 0x10c, + PvScsiRegOffsetIntrStatus = 0x100c, + PvScsiRegOffsetIntrMask = 0x2010, + PvScsiRegOffsetKickNonRwIo = 0x3014, + PvScsiRegOffsetDebug = 0x3018, + PvScsiRegOffsetKickRwIo = 0x4018, } PVSCSI_BAR0_OFFSETS; // // Define Interrupt-Status register flags // -#define PVSCSI_INTR_CMPL_0 BIT0 -#define PVSCSI_INTR_CMPL_1 BIT1 -#define PVSCSI_INTR_CMPL_MASK (PVSCSI_INTR_CMPL_0 | PVSCSI_INTR_CMPL_1) +#define PVSCSI_INTR_CMPL_0 BIT0 +#define PVSCSI_INTR_CMPL_1 BIT1 +#define PVSCSI_INTR_CMPL_MASK (PVSCSI_INTR_CMPL_0 | PVSCSI_INTR_CMPL_1) typedef enum { - PvScsiCmdFirst = 0, - PvScsiCmdAdapterReset = 1, - PvScsiCmdIssueScsi = 2, - PvScsiCmdSetupRings = 3, - PvScsiCmdResetBus = 4, - PvScsiCmdResetDevice = 5, - PvScsiCmdAbortCmd = 6, - PvScsiCmdConfig = 7, - PvScsiCmdSetupMsgRing = 8, - PvScsiCmdDeviceUnplug = 9, - PvScsiCmdLast = 10 + PvScsiCmdFirst = 0, + PvScsiCmdAdapterReset = 1, + PvScsiCmdIssueScsi = 2, + PvScsiCmdSetupRings = 3, + PvScsiCmdResetBus = 4, + PvScsiCmdResetDevice = 5, + PvScsiCmdAbortCmd = 6, + PvScsiCmdConfig = 7, + PvScsiCmdSetupMsgRing = 8, + PvScsiCmdDeviceUnplug = 9, + PvScsiCmdLast = 10 } PVSCSI_COMMANDS; -#define PVSCSI_SETUP_RINGS_MAX_NUM_PAGES (32) +#define PVSCSI_SETUP_RINGS_MAX_NUM_PAGES (32) #pragma pack (1) typedef struct { - UINT32 ReqRingNumPages; - UINT32 CmpRingNumPages; - UINT64 RingsStatePPN; - UINT64 ReqRingPPNs[PVSCSI_SETUP_RINGS_MAX_NUM_PAGES]; - UINT64 CmpRingPPNs[PVSCSI_SETUP_RINGS_MAX_NUM_PAGES]; + UINT32 ReqRingNumPages; + UINT32 CmpRingNumPages; + UINT64 RingsStatePPN; + UINT64 ReqRingPPNs[PVSCSI_SETUP_RINGS_MAX_NUM_PAGES]; + UINT64 CmpRingPPNs[PVSCSI_SETUP_RINGS_MAX_NUM_PAGES]; } PVSCSI_CMD_DESC_SETUP_RINGS; #pragma pack () @@ -77,52 +77,52 @@ typedef struct { #pragma pack (1) typedef struct { - UINT32 ReqProdIdx; - UINT32 ReqConsIdx; - UINT32 ReqNumEntriesLog2; + UINT32 ReqProdIdx; + UINT32 ReqConsIdx; + UINT32 ReqNumEntriesLog2; - UINT32 CmpProdIdx; - UINT32 CmpConsIdx; - UINT32 CmpNumEntriesLog2; + UINT32 CmpProdIdx; + UINT32 CmpConsIdx; + UINT32 CmpNumEntriesLog2; - UINT8 Pad[104]; + UINT8 Pad[104]; - UINT32 MsgProdIdx; - UINT32 MsgConsIdx; - UINT32 MsgNumEntriesLog2; + UINT32 MsgProdIdx; + UINT32 MsgConsIdx; + UINT32 MsgNumEntriesLog2; } PVSCSI_RINGS_STATE; #pragma pack () // // Define PVSCSI request descriptor tags // -#define PVSCSI_SIMPLE_QUEUE_TAG (0x20) +#define PVSCSI_SIMPLE_QUEUE_TAG (0x20) // // Define PVSCSI request descriptor flags // -#define PVSCSI_FLAG_CMD_WITH_SG_LIST BIT0 -#define PVSCSI_FLAG_CMD_OUT_OF_BAND_CDB BIT1 -#define PVSCSI_FLAG_CMD_DIR_NONE BIT2 -#define PVSCSI_FLAG_CMD_DIR_TOHOST BIT3 -#define PVSCSI_FLAG_CMD_DIR_TODEVICE BIT4 +#define PVSCSI_FLAG_CMD_WITH_SG_LIST BIT0 +#define PVSCSI_FLAG_CMD_OUT_OF_BAND_CDB BIT1 +#define PVSCSI_FLAG_CMD_DIR_NONE BIT2 +#define PVSCSI_FLAG_CMD_DIR_TOHOST BIT3 +#define PVSCSI_FLAG_CMD_DIR_TODEVICE BIT4 #pragma pack (1) typedef struct { - UINT64 Context; - UINT64 DataAddr; - UINT64 DataLen; - UINT64 SenseAddr; - UINT32 SenseLen; - UINT32 Flags; - UINT8 Cdb[16]; - UINT8 CdbLen; - UINT8 Lun[8]; - UINT8 Tag; - UINT8 Bus; - UINT8 Target; - UINT8 VcpuHint; - UINT8 Unused[59]; + UINT64 Context; + UINT64 DataAddr; + UINT64 DataLen; + UINT64 SenseAddr; + UINT32 SenseLen; + UINT32 Flags; + UINT8 Cdb[16]; + UINT8 CdbLen; + UINT8 Lun[8]; + UINT8 Tag; + UINT8 Bus; + UINT8 Target; + UINT8 VcpuHint; + UINT8 Unused[59]; } PVSCSI_RING_REQ_DESC; #pragma pack () @@ -130,56 +130,56 @@ typedef struct { // Host adapter status/error codes // typedef enum { - PvScsiBtStatSuccess = 0x00, // CCB complete normally with no errors + PvScsiBtStatSuccess = 0x00, // CCB complete normally with no errors PvScsiBtStatLinkedCommandCompleted = 0x0a, PvScsiBtStatLinkedCommandCompletedWithFlag = 0x0b, - PvScsiBtStatDataUnderrun = 0x0c, - PvScsiBtStatSelTimeout = 0x11, // SCSI selection timeout - PvScsiBtStatDatarun = 0x12, // Data overrun/underrun - PvScsiBtStatBusFree = 0x13, // Unexpected bus free - PvScsiBtStatInvPhase = 0x14, // - // Invalid bus phase or sequence requested - // by target - // - PvScsiBtStatLunMismatch = 0x17, // - // Linked CCB has different LUN from first - // CCB - // - PvScsiBtStatSensFailed = 0x1b, // Auto request sense failed - PvScsiBtStatTagReject = 0x1c, // - // SCSI II tagged queueing message rejected - // by target - // - PvScsiBtStatBadMsg = 0x1d, // - // Unsupported message received by the host - // adapter - // - PvScsiBtStatHaHardware = 0x20, // Host adapter hardware failed - PvScsiBtStatNoResponse = 0x21, // - // Target did not respond to SCSI ATN sent - // a SCSI RST - // - PvScsiBtStatSentRst = 0x22, // Host adapter asserted a SCSI RST - PvScsiBtStatRecvRst = 0x23, // Other SCSI devices asserted a SCSI RST - PvScsiBtStatDisconnect = 0x24, // - // Target device reconnected improperly - // (w/o tag) - // - PvScsiBtStatBusReset = 0x25, // Host adapter issued BUS device reset - PvScsiBtStatAbortQueue = 0x26, // Abort queue generated - PvScsiBtStatHaSoftware = 0x27, // Host adapter software error - PvScsiBtStatHaTimeout = 0x30, // Host adapter hardware timeout error - PvScsiBtStatScsiParity = 0x34, // SCSI parity error detected + PvScsiBtStatDataUnderrun = 0x0c, + PvScsiBtStatSelTimeout = 0x11, // SCSI selection timeout + PvScsiBtStatDatarun = 0x12, // Data overrun/underrun + PvScsiBtStatBusFree = 0x13, // Unexpected bus free + PvScsiBtStatInvPhase = 0x14, // + // Invalid bus phase or sequence requested + // by target + // + PvScsiBtStatLunMismatch = 0x17, // + // Linked CCB has different LUN from first + // CCB + // + PvScsiBtStatSensFailed = 0x1b, // Auto request sense failed + PvScsiBtStatTagReject = 0x1c, // + // SCSI II tagged queueing message rejected + // by target + // + PvScsiBtStatBadMsg = 0x1d, // + // Unsupported message received by the host + // adapter + // + PvScsiBtStatHaHardware = 0x20, // Host adapter hardware failed + PvScsiBtStatNoResponse = 0x21, // + // Target did not respond to SCSI ATN sent + // a SCSI RST + // + PvScsiBtStatSentRst = 0x22, // Host adapter asserted a SCSI RST + PvScsiBtStatRecvRst = 0x23, // Other SCSI devices asserted a SCSI RST + PvScsiBtStatDisconnect = 0x24, // + // Target device reconnected improperly + // (w/o tag) + // + PvScsiBtStatBusReset = 0x25, // Host adapter issued BUS device reset + PvScsiBtStatAbortQueue = 0x26, // Abort queue generated + PvScsiBtStatHaSoftware = 0x27, // Host adapter software error + PvScsiBtStatHaTimeout = 0x30, // Host adapter hardware timeout error + PvScsiBtStatScsiParity = 0x34, // SCSI parity error detected } PVSCSI_HOST_BUS_ADAPTER_STATUS; #pragma pack (1) typedef struct { - UINT64 Context; - UINT64 DataLen; - UINT32 SenseLen; - UINT16 HostStatus; - UINT16 ScsiStatus; - UINT32 Pad[2]; + UINT64 Context; + UINT64 DataLen; + UINT32 SenseLen; + UINT16 HostStatus; + UINT16 ScsiStatus; + UINT32 Pad[2]; } PVSCSI_RING_CMP_DESC; #pragma pack () diff --git a/OvmfPkg/Include/IndustryStandard/Q35MchIch9.h b/OvmfPkg/Include/IndustryStandard/Q35MchIch9.h index 73db4b59a1..db828d31b3 100644 --- a/OvmfPkg/Include/IndustryStandard/Q35MchIch9.h +++ b/OvmfPkg/Include/IndustryStandard/Q35MchIch9.h @@ -20,69 +20,69 @@ // // Host Bridge Device ID (DID) value for Q35/MCH // -#define INTEL_Q35_MCH_DEVICE_ID 0x29C0 +#define INTEL_Q35_MCH_DEVICE_ID 0x29C0 // // B/D/F/Type: 0/0/0/PCI // -#define DRAMC_REGISTER_Q35(Offset) PCI_LIB_ADDRESS (0, 0, 0, (Offset)) - -#define MCH_EXT_TSEG_MB 0x50 -#define MCH_EXT_TSEG_MB_QUERY 0xFFFF - -#define MCH_GGC 0x52 -#define MCH_GGC_IVD BIT1 - -#define MCH_PCIEXBAR_LOW 0x60 -#define MCH_PCIEXBAR_LOWMASK 0x0FFFFFFF -#define MCH_PCIEXBAR_BUS_FF 0 -#define MCH_PCIEXBAR_EN BIT0 - -#define MCH_PCIEXBAR_HIGH 0x64 -#define MCH_PCIEXBAR_HIGHMASK 0xFFFFFFF0 - -#define MCH_PAM0 0x90 -#define MCH_PAM1 0x91 -#define MCH_PAM2 0x92 -#define MCH_PAM3 0x93 -#define MCH_PAM4 0x94 -#define MCH_PAM5 0x95 -#define MCH_PAM6 0x96 - -#define MCH_DEFAULT_SMBASE_CTL 0x9C -#define MCH_DEFAULT_SMBASE_QUERY 0xFF -#define MCH_DEFAULT_SMBASE_IN_RAM 0x01 -#define MCH_DEFAULT_SMBASE_LCK 0x02 -#define MCH_DEFAULT_SMBASE_SIZE SIZE_128KB - -#define MCH_SMRAM 0x9D -#define MCH_SMRAM_D_LCK BIT4 -#define MCH_SMRAM_G_SMRAME BIT3 - -#define MCH_ESMRAMC 0x9E -#define MCH_ESMRAMC_H_SMRAME BIT7 -#define MCH_ESMRAMC_E_SMERR BIT6 -#define MCH_ESMRAMC_SM_CACHE BIT5 -#define MCH_ESMRAMC_SM_L1 BIT4 -#define MCH_ESMRAMC_SM_L2 BIT3 -#define MCH_ESMRAMC_TSEG_EXT (BIT2 | BIT1) -#define MCH_ESMRAMC_TSEG_8MB BIT2 -#define MCH_ESMRAMC_TSEG_2MB BIT1 -#define MCH_ESMRAMC_TSEG_1MB 0 -#define MCH_ESMRAMC_TSEG_MASK (BIT2 | BIT1) -#define MCH_ESMRAMC_T_EN BIT0 - -#define MCH_GBSM 0xA4 -#define MCH_GBSM_MB_SHIFT 20 - -#define MCH_BGSM 0xA8 -#define MCH_BGSM_MB_SHIFT 20 - -#define MCH_TSEGMB 0xAC -#define MCH_TSEGMB_MB_SHIFT 20 - -#define MCH_TOLUD 0xB0 -#define MCH_TOLUD_MB_SHIFT 4 +#define DRAMC_REGISTER_Q35(Offset) PCI_LIB_ADDRESS (0, 0, 0, (Offset)) + +#define MCH_EXT_TSEG_MB 0x50 +#define MCH_EXT_TSEG_MB_QUERY 0xFFFF + +#define MCH_GGC 0x52 +#define MCH_GGC_IVD BIT1 + +#define MCH_PCIEXBAR_LOW 0x60 +#define MCH_PCIEXBAR_LOWMASK 0x0FFFFFFF +#define MCH_PCIEXBAR_BUS_FF 0 +#define MCH_PCIEXBAR_EN BIT0 + +#define MCH_PCIEXBAR_HIGH 0x64 +#define MCH_PCIEXBAR_HIGHMASK 0xFFFFFFF0 + +#define MCH_PAM0 0x90 +#define MCH_PAM1 0x91 +#define MCH_PAM2 0x92 +#define MCH_PAM3 0x93 +#define MCH_PAM4 0x94 +#define MCH_PAM5 0x95 +#define MCH_PAM6 0x96 + +#define MCH_DEFAULT_SMBASE_CTL 0x9C +#define MCH_DEFAULT_SMBASE_QUERY 0xFF +#define MCH_DEFAULT_SMBASE_IN_RAM 0x01 +#define MCH_DEFAULT_SMBASE_LCK 0x02 +#define MCH_DEFAULT_SMBASE_SIZE SIZE_128KB + +#define MCH_SMRAM 0x9D +#define MCH_SMRAM_D_LCK BIT4 +#define MCH_SMRAM_G_SMRAME BIT3 + +#define MCH_ESMRAMC 0x9E +#define MCH_ESMRAMC_H_SMRAME BIT7 +#define MCH_ESMRAMC_E_SMERR BIT6 +#define MCH_ESMRAMC_SM_CACHE BIT5 +#define MCH_ESMRAMC_SM_L1 BIT4 +#define MCH_ESMRAMC_SM_L2 BIT3 +#define MCH_ESMRAMC_TSEG_EXT (BIT2 | BIT1) +#define MCH_ESMRAMC_TSEG_8MB BIT2 +#define MCH_ESMRAMC_TSEG_2MB BIT1 +#define MCH_ESMRAMC_TSEG_1MB 0 +#define MCH_ESMRAMC_TSEG_MASK (BIT2 | BIT1) +#define MCH_ESMRAMC_T_EN BIT0 + +#define MCH_GBSM 0xA4 +#define MCH_GBSM_MB_SHIFT 20 + +#define MCH_BGSM 0xA8 +#define MCH_BGSM_MB_SHIFT 20 + +#define MCH_TSEGMB 0xAC +#define MCH_TSEGMB_MB_SHIFT 20 + +#define MCH_TOLUD 0xB0 +#define MCH_TOLUD_MB_SHIFT 4 // // B/D/F/Type: 0/0x1f/0/PCI @@ -93,35 +93,35 @@ #define POWER_MGMT_REGISTER_Q35_EFI_PCI_ADDRESS(Offset) \ EFI_PCI_ADDRESS (0, 0x1f, 0, (Offset)) -#define ICH9_PMBASE 0x40 -#define ICH9_PMBASE_MASK (BIT15 | BIT14 | BIT13 | BIT12 | BIT11 | \ +#define ICH9_PMBASE 0x40 +#define ICH9_PMBASE_MASK (BIT15 | BIT14 | BIT13 | BIT12 | BIT11 | \ BIT10 | BIT9 | BIT8 | BIT7) -#define ICH9_ACPI_CNTL 0x44 -#define ICH9_ACPI_CNTL_ACPI_EN BIT7 +#define ICH9_ACPI_CNTL 0x44 +#define ICH9_ACPI_CNTL_ACPI_EN BIT7 -#define ICH9_GEN_PMCON_1 0xA0 -#define ICH9_GEN_PMCON_1_SMI_LOCK BIT4 +#define ICH9_GEN_PMCON_1 0xA0 +#define ICH9_GEN_PMCON_1_SMI_LOCK BIT4 -#define ICH9_RCBA 0xF0 -#define ICH9_RCBA_EN BIT0 +#define ICH9_RCBA 0xF0 +#define ICH9_RCBA_EN BIT0 // // IO ports // #define ICH9_APM_CNT 0xB2 -#define ICH9_APM_CNT_CPU_HOTPLUG 0x04 +#define ICH9_APM_CNT_CPU_HOTPLUG 0x04 #define ICH9_APM_STS 0xB3 -#define ICH9_CPU_HOTPLUG_BASE 0x0CD8 +#define ICH9_CPU_HOTPLUG_BASE 0x0CD8 // // IO ports relative to PMBASE // -#define ICH9_PMBASE_OFS_SMI_EN 0x30 -#define ICH9_SMI_EN_APMC_EN BIT5 -#define ICH9_SMI_EN_GBL_SMI_EN BIT0 +#define ICH9_PMBASE_OFS_SMI_EN 0x30 +#define ICH9_SMI_EN_APMC_EN BIT5 +#define ICH9_SMI_EN_GBL_SMI_EN BIT0 -#define ICH9_ROOT_COMPLEX_BASE 0xFED1C000 +#define ICH9_ROOT_COMPLEX_BASE 0xFED1C000 #endif diff --git a/OvmfPkg/Include/IndustryStandard/QemuCpuHotplug.h b/OvmfPkg/Include/IndustryStandard/QemuCpuHotplug.h index d0e83102c1..1b7c6c8df3 100644 --- a/OvmfPkg/Include/IndustryStandard/QemuCpuHotplug.h +++ b/OvmfPkg/Include/IndustryStandard/QemuCpuHotplug.h @@ -28,21 +28,21 @@ // register, // - followed by distinguished bitmasks or values in the register. // -#define QEMU_CPUHP_R_CMD_DATA2 0x0 +#define QEMU_CPUHP_R_CMD_DATA2 0x0 -#define QEMU_CPUHP_R_CPU_STAT 0x4 -#define QEMU_CPUHP_STAT_ENABLED BIT0 -#define QEMU_CPUHP_STAT_INSERT BIT1 -#define QEMU_CPUHP_STAT_REMOVE BIT2 -#define QEMU_CPUHP_STAT_EJECT BIT3 -#define QEMU_CPUHP_STAT_FW_REMOVE BIT4 +#define QEMU_CPUHP_R_CPU_STAT 0x4 +#define QEMU_CPUHP_STAT_ENABLED BIT0 +#define QEMU_CPUHP_STAT_INSERT BIT1 +#define QEMU_CPUHP_STAT_REMOVE BIT2 +#define QEMU_CPUHP_STAT_EJECT BIT3 +#define QEMU_CPUHP_STAT_FW_REMOVE BIT4 -#define QEMU_CPUHP_RW_CMD_DATA 0x8 +#define QEMU_CPUHP_RW_CMD_DATA 0x8 -#define QEMU_CPUHP_W_CPU_SEL 0x0 +#define QEMU_CPUHP_W_CPU_SEL 0x0 -#define QEMU_CPUHP_W_CMD 0x5 -#define QEMU_CPUHP_CMD_GET_PENDING 0x0 -#define QEMU_CPUHP_CMD_GET_ARCH_ID 0x3 +#define QEMU_CPUHP_W_CMD 0x5 +#define QEMU_CPUHP_CMD_GET_PENDING 0x0 +#define QEMU_CPUHP_CMD_GET_ARCH_ID 0x3 #endif // QEMU_CPU_HOTPLUG_H_ diff --git a/OvmfPkg/Include/IndustryStandard/QemuFwCfg.h b/OvmfPkg/Include/IndustryStandard/QemuFwCfg.h index 7969aba3ca..9adf158c22 100644 --- a/OvmfPkg/Include/IndustryStandard/QemuFwCfg.h +++ b/OvmfPkg/Include/IndustryStandard/QemuFwCfg.h @@ -18,69 +18,68 @@ // The size, in bytes, of names of firmware configuration files, including at // least one terminating NUL byte. // -#define QEMU_FW_CFG_FNAME_SIZE 56 +#define QEMU_FW_CFG_FNAME_SIZE 56 // // If the following bit is set in the UINT32 fw_cfg revision / feature bitmap // -- read from key 0x0001 with the basic IO Port or MMIO method --, then the // DMA interface is available. // -#define FW_CFG_F_DMA BIT1 +#define FW_CFG_F_DMA BIT1 // // Macros for the FW_CFG_DMA_ACCESS.Control bitmap (in native encoding). // -#define FW_CFG_DMA_CTL_ERROR BIT0 -#define FW_CFG_DMA_CTL_READ BIT1 -#define FW_CFG_DMA_CTL_SKIP BIT2 -#define FW_CFG_DMA_CTL_SELECT BIT3 -#define FW_CFG_DMA_CTL_WRITE BIT4 +#define FW_CFG_DMA_CTL_ERROR BIT0 +#define FW_CFG_DMA_CTL_READ BIT1 +#define FW_CFG_DMA_CTL_SKIP BIT2 +#define FW_CFG_DMA_CTL_SELECT BIT3 +#define FW_CFG_DMA_CTL_WRITE BIT4 // // The fw_cfg registers can be found at these IO Ports, on the IO-mapped // platforms (Ia32 and X64). // -#define FW_CFG_IO_SELECTOR 0x510 -#define FW_CFG_IO_DATA 0x511 -#define FW_CFG_IO_DMA_ADDRESS 0x514 +#define FW_CFG_IO_SELECTOR 0x510 +#define FW_CFG_IO_DATA 0x511 +#define FW_CFG_IO_DMA_ADDRESS 0x514 // // Numerically defined keys. // typedef enum { - QemuFwCfgItemSignature = 0x0000, - QemuFwCfgItemInterfaceVersion = 0x0001, - QemuFwCfgItemSystemUuid = 0x0002, - QemuFwCfgItemRamSize = 0x0003, - QemuFwCfgItemGraphicsEnabled = 0x0004, - QemuFwCfgItemSmpCpuCount = 0x0005, - QemuFwCfgItemMachineId = 0x0006, - QemuFwCfgItemKernelAddress = 0x0007, - QemuFwCfgItemKernelSize = 0x0008, - QemuFwCfgItemKernelCommandLine = 0x0009, - QemuFwCfgItemInitrdAddress = 0x000a, - QemuFwCfgItemInitrdSize = 0x000b, - QemuFwCfgItemBootDevice = 0x000c, - QemuFwCfgItemNumaData = 0x000d, - QemuFwCfgItemBootMenu = 0x000e, - QemuFwCfgItemMaximumCpuCount = 0x000f, - QemuFwCfgItemKernelEntry = 0x0010, - QemuFwCfgItemKernelData = 0x0011, - QemuFwCfgItemInitrdData = 0x0012, - QemuFwCfgItemCommandLineAddress = 0x0013, - QemuFwCfgItemCommandLineSize = 0x0014, - QemuFwCfgItemCommandLineData = 0x0015, - QemuFwCfgItemKernelSetupAddress = 0x0016, - QemuFwCfgItemKernelSetupSize = 0x0017, - QemuFwCfgItemKernelSetupData = 0x0018, - QemuFwCfgItemFileDir = 0x0019, - - QemuFwCfgItemX86AcpiTables = 0x8000, - QemuFwCfgItemX86SmbiosTables = 0x8001, - QemuFwCfgItemX86Irq0Override = 0x8002, - QemuFwCfgItemX86E820Table = 0x8003, - QemuFwCfgItemX86HpetData = 0x8004, + QemuFwCfgItemSignature = 0x0000, + QemuFwCfgItemInterfaceVersion = 0x0001, + QemuFwCfgItemSystemUuid = 0x0002, + QemuFwCfgItemRamSize = 0x0003, + QemuFwCfgItemGraphicsEnabled = 0x0004, + QemuFwCfgItemSmpCpuCount = 0x0005, + QemuFwCfgItemMachineId = 0x0006, + QemuFwCfgItemKernelAddress = 0x0007, + QemuFwCfgItemKernelSize = 0x0008, + QemuFwCfgItemKernelCommandLine = 0x0009, + QemuFwCfgItemInitrdAddress = 0x000a, + QemuFwCfgItemInitrdSize = 0x000b, + QemuFwCfgItemBootDevice = 0x000c, + QemuFwCfgItemNumaData = 0x000d, + QemuFwCfgItemBootMenu = 0x000e, + QemuFwCfgItemMaximumCpuCount = 0x000f, + QemuFwCfgItemKernelEntry = 0x0010, + QemuFwCfgItemKernelData = 0x0011, + QemuFwCfgItemInitrdData = 0x0012, + QemuFwCfgItemCommandLineAddress = 0x0013, + QemuFwCfgItemCommandLineSize = 0x0014, + QemuFwCfgItemCommandLineData = 0x0015, + QemuFwCfgItemKernelSetupAddress = 0x0016, + QemuFwCfgItemKernelSetupSize = 0x0017, + QemuFwCfgItemKernelSetupData = 0x0018, + QemuFwCfgItemFileDir = 0x0019, + QemuFwCfgItemX86AcpiTables = 0x8000, + QemuFwCfgItemX86SmbiosTables = 0x8001, + QemuFwCfgItemX86Irq0Override = 0x8002, + QemuFwCfgItemX86E820Table = 0x8003, + QemuFwCfgItemX86HpetData = 0x8004, } FIRMWARE_CONFIG_ITEM; // @@ -89,9 +88,9 @@ typedef enum { // #pragma pack (1) typedef struct { - UINT32 Control; - UINT32 Length; - UINT64 Address; + UINT32 Control; + UINT32 Length; + UINT64 Address; } FW_CFG_DMA_ACCESS; #pragma pack () diff --git a/OvmfPkg/Include/IndustryStandard/QemuLoader.h b/OvmfPkg/Include/IndustryStandard/QemuLoader.h index 5782a23c43..cf953c448b 100644 --- a/OvmfPkg/Include/IndustryStandard/QemuLoader.h +++ b/OvmfPkg/Include/IndustryStandard/QemuLoader.h @@ -16,7 +16,7 @@ // // The types and the documentation reflects the SeaBIOS interface. // -#define QEMU_LOADER_FNAME_SIZE QEMU_FW_CFG_FNAME_SIZE +#define QEMU_LOADER_FNAME_SIZE QEMU_FW_CFG_FNAME_SIZE typedef enum { QemuLoaderCmdAllocate = 1, @@ -36,9 +36,9 @@ typedef enum { // allocated in the zone specified by Zone, aligned at a multiple of Alignment. // typedef struct { - UINT8 File[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated - UINT32 Alignment; // power of two - UINT8 Zone; // QEMU_LOADER_ALLOC_ZONE values + UINT8 File[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated + UINT32 Alignment; // power of two + UINT8 Zone; // QEMU_LOADER_ALLOC_ZONE values } QEMU_LOADER_ALLOCATE; // @@ -49,10 +49,10 @@ typedef struct { // been placed (when QemuLoaderCmdAllocate has been executed for PointeeFile). // typedef struct { - UINT8 PointerFile[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated - UINT8 PointeeFile[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated - UINT32 PointerOffset; - UINT8 PointerSize; // one of 1, 2, 4, 8 + UINT8 PointerFile[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated + UINT8 PointeeFile[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated + UINT32 PointerOffset; + UINT8 PointerSize; // one of 1, 2, 4, 8 } QEMU_LOADER_ADD_POINTER; // @@ -61,10 +61,10 @@ typedef struct { // UINT8 result at ResultOffset in the same File. // typedef struct { - UINT8 File[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated - UINT32 ResultOffset; - UINT32 Start; - UINT32 Length; + UINT8 File[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated + UINT32 ResultOffset; + UINT32 Start; + UINT32 Length; } QEMU_LOADER_ADD_CHECKSUM; // @@ -84,21 +84,21 @@ typedef struct { // field. // typedef struct { - UINT8 PointerFile[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated - UINT8 PointeeFile[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated - UINT32 PointerOffset; - UINT32 PointeeOffset; - UINT8 PointerSize; // one of 1, 2, 4, 8 + UINT8 PointerFile[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated + UINT8 PointeeFile[QEMU_LOADER_FNAME_SIZE]; // NUL-terminated + UINT32 PointerOffset; + UINT32 PointeeOffset; + UINT8 PointerSize; // one of 1, 2, 4, 8 } QEMU_LOADER_WRITE_POINTER; typedef struct { - UINT32 Type; // QEMU_LOADER_COMMAND_TYPE values + UINT32 Type; // QEMU_LOADER_COMMAND_TYPE values union { - QEMU_LOADER_ALLOCATE Allocate; - QEMU_LOADER_ADD_POINTER AddPointer; - QEMU_LOADER_ADD_CHECKSUM AddChecksum; - QEMU_LOADER_WRITE_POINTER WritePointer; - UINT8 Padding[124]; + QEMU_LOADER_ALLOCATE Allocate; + QEMU_LOADER_ADD_POINTER AddPointer; + QEMU_LOADER_ADD_CHECKSUM AddChecksum; + QEMU_LOADER_WRITE_POINTER WritePointer; + UINT8 Padding[124]; } Command; } QEMU_LOADER_ENTRY; #pragma pack () diff --git a/OvmfPkg/Include/IndustryStandard/QemuPciBridgeCapabilities.h b/OvmfPkg/Include/IndustryStandard/QemuPciBridgeCapabilities.h index e4fc5df26e..a70b99fccf 100644 --- a/OvmfPkg/Include/IndustryStandard/QemuPciBridgeCapabilities.h +++ b/OvmfPkg/Include/IndustryStandard/QemuPciBridgeCapabilities.h @@ -18,22 +18,22 @@ // The hints apply to PCI Bridges whose PCI_DEVICE_INDEPENDENT_REGION.VendorId // equals the following value. // -#define QEMU_PCI_BRIDGE_VENDOR_ID_REDHAT 0x1B36 +#define QEMU_PCI_BRIDGE_VENDOR_ID_REDHAT 0x1B36 // // Common capability header for all hints. // #pragma pack (1) typedef struct { - EFI_PCI_CAPABILITY_VENDOR_HDR VendorHdr; - UINT8 Type; + EFI_PCI_CAPABILITY_VENDOR_HDR VendorHdr; + UINT8 Type; } QEMU_PCI_BRIDGE_CAPABILITY_HDR; #pragma pack () // // Values defined for QEMU_PCI_BRIDGE_CAPABILITY_HDR.Type. // -#define QEMU_PCI_BRIDGE_CAPABILITY_TYPE_RESOURCE_RESERVATION 0x01 +#define QEMU_PCI_BRIDGE_CAPABILITY_TYPE_RESOURCE_RESERVATION 0x01 // // PCI Resource Reservation structure for when @@ -42,12 +42,12 @@ typedef struct { // #pragma pack (1) typedef struct { - QEMU_PCI_BRIDGE_CAPABILITY_HDR BridgeHdr; - UINT32 BusNumbers; - UINT64 Io; - UINT32 NonPrefetchable32BitMmio; - UINT32 Prefetchable32BitMmio; - UINT64 Prefetchable64BitMmio; + QEMU_PCI_BRIDGE_CAPABILITY_HDR BridgeHdr; + UINT32 BusNumbers; + UINT64 Io; + UINT32 NonPrefetchable32BitMmio; + UINT32 Prefetchable32BitMmio; + UINT64 Prefetchable64BitMmio; } QEMU_PCI_BRIDGE_CAPABILITY_RESOURCE_RESERVATION; #pragma pack () diff --git a/OvmfPkg/Include/IndustryStandard/QemuTpm.h b/OvmfPkg/Include/IndustryStandard/QemuTpm.h index a43e2547bd..1a269e6ad8 100644 --- a/OvmfPkg/Include/IndustryStandard/QemuTpm.h +++ b/OvmfPkg/Include/IndustryStandard/QemuTpm.h @@ -17,28 +17,28 @@ // // whether function is blocked by BIOS settings; bits 0, 1, 2 // -#define QEMU_TPM_PPI_FUNC_NOT_IMPLEMENTED (0 << 0) -#define QEMU_TPM_PPI_FUNC_BIOS_ONLY (1 << 0) -#define QEMU_TPM_PPI_FUNC_BLOCKED (2 << 0) -#define QEMU_TPM_PPI_FUNC_ALLOWED_USR_REQ (3 << 0) -#define QEMU_TPM_PPI_FUNC_ALLOWED_USR_NOT_REQ (4 << 0) -#define QEMU_TPM_PPI_FUNC_MASK (7 << 0) +#define QEMU_TPM_PPI_FUNC_NOT_IMPLEMENTED (0 << 0) +#define QEMU_TPM_PPI_FUNC_BIOS_ONLY (1 << 0) +#define QEMU_TPM_PPI_FUNC_BLOCKED (2 << 0) +#define QEMU_TPM_PPI_FUNC_ALLOWED_USR_REQ (3 << 0) +#define QEMU_TPM_PPI_FUNC_ALLOWED_USR_NOT_REQ (4 << 0) +#define QEMU_TPM_PPI_FUNC_MASK (7 << 0) // // The following structure is shared between firmware and ACPI. // #pragma pack (1) typedef struct { - UINT8 Func[256]; // func - UINT8 In; // ppin - UINT32 Ip; // ppip - UINT32 Response; // pprp - UINT32 Request; // pprq - UINT32 RequestParameter; // pprm - UINT32 LastRequest; // lppr - UINT32 FRet; // fret - UINT8 Res1[0x40]; // res1 - UINT8 NextStep; // next_step + UINT8 Func[256]; // func + UINT8 In; // ppin + UINT32 Ip; // ppip + UINT32 Response; // pprp + UINT32 Request; // pprq + UINT32 RequestParameter; // pprm + UINT32 LastRequest; // lppr + UINT32 FRet; // fret + UINT8 Res1[0x40]; // res1 + UINT8 NextStep; // next_step } QEMU_TPM_PPI; #pragma pack () @@ -47,15 +47,15 @@ typedef struct { // #pragma pack (1) typedef struct { - UINT32 PpiAddress; - UINT8 TpmVersion; - UINT8 PpiVersion; + UINT32 PpiAddress; + UINT8 TpmVersion; + UINT8 PpiVersion; } QEMU_FWCFG_TPM_CONFIG; #pragma pack () -#define QEMU_TPM_VERSION_UNSPEC 0 -#define QEMU_TPM_VERSION_1_2 1 -#define QEMU_TPM_VERSION_2 2 +#define QEMU_TPM_VERSION_UNSPEC 0 +#define QEMU_TPM_VERSION_1_2 1 +#define QEMU_TPM_VERSION_2 2 #define QEMU_TPM_PPI_VERSION_NONE 0 #define QEMU_TPM_PPI_VERSION_1_30 1 diff --git a/OvmfPkg/Include/IndustryStandard/Virtio095.h b/OvmfPkg/Include/IndustryStandard/Virtio095.h index fe886d223e..e06f87db79 100644 --- a/OvmfPkg/Include/IndustryStandard/Virtio095.h +++ b/OvmfPkg/Include/IndustryStandard/Virtio095.h @@ -32,9 +32,8 @@ // // Virtio IDs // -#define VIRTIO_VENDOR_ID 0x1AF4 -#define VIRTIO_MMIO_MAGIC 0x74726976 // "virt" - +#define VIRTIO_VENDOR_ID 0x1AF4 +#define VIRTIO_MMIO_MAGIC 0x74726976 // "virt" // // VirtIo Device Specific Configuration Offsets @@ -46,36 +45,36 @@ // // PCI VirtIo Header Offsets // -#define VIRTIO_PCI_OFFSET_DEVICE_FEATURES 0x00 -#define VIRTIO_PCI_OFFSET_GUEST_FEATURES 0x04 -#define VIRTIO_PCI_OFFSET_QUEUE_ADDRESS 0x08 -#define VIRTIO_PCI_OFFSET_QUEUE_SIZE 0x0C -#define VIRTIO_PCI_OFFSET_QUEUE_SELECT 0x0E -#define VIRTIO_PCI_OFFSET_QUEUE_NOTIFY 0x10 -#define VIRTIO_PCI_OFFSET_QUEUE_DEVICE_STATUS 0x12 -#define VIRTIO_PCI_OFFSET_QUEUE_DEVICE_ISR 0x13 +#define VIRTIO_PCI_OFFSET_DEVICE_FEATURES 0x00 +#define VIRTIO_PCI_OFFSET_GUEST_FEATURES 0x04 +#define VIRTIO_PCI_OFFSET_QUEUE_ADDRESS 0x08 +#define VIRTIO_PCI_OFFSET_QUEUE_SIZE 0x0C +#define VIRTIO_PCI_OFFSET_QUEUE_SELECT 0x0E +#define VIRTIO_PCI_OFFSET_QUEUE_NOTIFY 0x10 +#define VIRTIO_PCI_OFFSET_QUEUE_DEVICE_STATUS 0x12 +#define VIRTIO_PCI_OFFSET_QUEUE_DEVICE_ISR 0x13 // // MMIO VirtIo Header Offsets // -#define VIRTIO_MMIO_OFFSET_MAGIC 0x00 -#define VIRTIO_MMIO_OFFSET_VERSION 0x04 -#define VIRTIO_MMIO_OFFSET_DEVICE_ID 0x08 -#define VIRTIO_MMIO_OFFSET_VENDOR_ID 0x0C -#define VIRTIO_MMIO_OFFSET_HOST_FEATURES 0x10 -#define VIRTIO_MMIO_OFFSET_HOST_FEATURES_SEL 0x14 -#define VIRTIO_MMIO_OFFSET_GUEST_FEATURES 0x20 -#define VIRTIO_MMIO_OFFSET_GUEST_FEATURES_SEL 0x24 -#define VIRTIO_MMIO_OFFSET_GUEST_PAGE_SIZE 0x28 -#define VIRTIO_MMIO_OFFSET_QUEUE_SEL 0x30 -#define VIRTIO_MMIO_OFFSET_QUEUE_NUM_MAX 0x34 -#define VIRTIO_MMIO_OFFSET_QUEUE_NUM 0x38 -#define VIRTIO_MMIO_OFFSET_QUEUE_ALIGN 0x3C -#define VIRTIO_MMIO_OFFSET_QUEUE_PFN 0x40 -#define VIRTIO_MMIO_OFFSET_QUEUE_NOTIFY 0x50 -#define VIRTIO_MMIO_OFFSET_INTERRUPT_STATUS 0x60 -#define VIRTIO_MMIO_OFFSET_INTERRUPT_ACK 0x64 -#define VIRTIO_MMIO_OFFSET_STATUS 0x70 +#define VIRTIO_MMIO_OFFSET_MAGIC 0x00 +#define VIRTIO_MMIO_OFFSET_VERSION 0x04 +#define VIRTIO_MMIO_OFFSET_DEVICE_ID 0x08 +#define VIRTIO_MMIO_OFFSET_VENDOR_ID 0x0C +#define VIRTIO_MMIO_OFFSET_HOST_FEATURES 0x10 +#define VIRTIO_MMIO_OFFSET_HOST_FEATURES_SEL 0x14 +#define VIRTIO_MMIO_OFFSET_GUEST_FEATURES 0x20 +#define VIRTIO_MMIO_OFFSET_GUEST_FEATURES_SEL 0x24 +#define VIRTIO_MMIO_OFFSET_GUEST_PAGE_SIZE 0x28 +#define VIRTIO_MMIO_OFFSET_QUEUE_SEL 0x30 +#define VIRTIO_MMIO_OFFSET_QUEUE_NUM_MAX 0x34 +#define VIRTIO_MMIO_OFFSET_QUEUE_NUM 0x38 +#define VIRTIO_MMIO_OFFSET_QUEUE_ALIGN 0x3C +#define VIRTIO_MMIO_OFFSET_QUEUE_PFN 0x40 +#define VIRTIO_MMIO_OFFSET_QUEUE_NOTIFY 0x50 +#define VIRTIO_MMIO_OFFSET_INTERRUPT_STATUS 0x60 +#define VIRTIO_MMIO_OFFSET_INTERRUPT_ACK 0x64 +#define VIRTIO_MMIO_OFFSET_STATUS 0x70 // // Data in the communication area is defined as packed and accessed as @@ -94,76 +93,73 @@ // // virtio-0.9.5, 2.3.4 Available Ring // -#define VRING_AVAIL_F_NO_INTERRUPT BIT0 +#define VRING_AVAIL_F_NO_INTERRUPT BIT0 typedef struct { - volatile UINT16 *Flags; - volatile UINT16 *Idx; + volatile UINT16 *Flags; + volatile UINT16 *Idx; - volatile UINT16 *Ring; // QueueSize elements - volatile UINT16 *UsedEvent; // unused as per negotiation + volatile UINT16 *Ring; // QueueSize elements + volatile UINT16 *UsedEvent; // unused as per negotiation } VRING_AVAIL; - // // virtio-0.9.5, 2.3.5 Used Ring // -#define VRING_USED_F_NO_NOTIFY BIT0 +#define VRING_USED_F_NO_NOTIFY BIT0 #pragma pack(1) typedef struct { - UINT32 Id; - UINT32 Len; + UINT32 Id; + UINT32 Len; } VRING_USED_ELEM; #pragma pack() typedef struct { - volatile UINT16 *Flags; - volatile UINT16 *Idx; - volatile VRING_USED_ELEM *UsedElem; // QueueSize elements - volatile UINT16 *AvailEvent; // unused as per negotiation + volatile UINT16 *Flags; + volatile UINT16 *Idx; + volatile VRING_USED_ELEM *UsedElem; // QueueSize elements + volatile UINT16 *AvailEvent; // unused as per negotiation } VRING_USED; - // // virtio-0.9.5, 2.3.2 Descriptor Table // -#define VRING_DESC_F_NEXT BIT0 // more descriptors in this request -#define VRING_DESC_F_WRITE BIT1 // buffer to be written *by the host* -#define VRING_DESC_F_INDIRECT BIT2 // unused +#define VRING_DESC_F_NEXT BIT0 // more descriptors in this request +#define VRING_DESC_F_WRITE BIT1 // buffer to be written *by the host* +#define VRING_DESC_F_INDIRECT BIT2 // unused #pragma pack(1) typedef struct { - UINT64 Addr; - UINT32 Len; - UINT16 Flags; - UINT16 Next; + UINT64 Addr; + UINT32 Len; + UINT16 Flags; + UINT16 Next; } VRING_DESC; #pragma pack() typedef struct { - UINTN NumPages; - VOID *Base; // deallocate only this field - volatile VRING_DESC *Desc; // QueueSize elements - VRING_AVAIL Avail; - VRING_USED Used; - UINT16 QueueSize; + UINTN NumPages; + VOID *Base; // deallocate only this field + volatile VRING_DESC *Desc; // QueueSize elements + VRING_AVAIL Avail; + VRING_USED Used; + UINT16 QueueSize; } VRING; // // virtio-0.9.5, 2.2.2.1 Device Status // -#define VSTAT_ACK BIT0 -#define VSTAT_DRIVER BIT1 -#define VSTAT_DRIVER_OK BIT2 -#define VSTAT_FAILED BIT7 +#define VSTAT_ACK BIT0 +#define VSTAT_DRIVER BIT1 +#define VSTAT_DRIVER_OK BIT2 +#define VSTAT_FAILED BIT7 // // virtio-0.9.5, Appendix B: Reserved (Device-Independent) Feature Bits // -#define VIRTIO_F_NOTIFY_ON_EMPTY BIT24 -#define VIRTIO_F_RING_INDIRECT_DESC BIT28 -#define VIRTIO_F_RING_EVENT_IDX BIT29 - +#define VIRTIO_F_NOTIFY_ON_EMPTY BIT24 +#define VIRTIO_F_RING_INDIRECT_DESC BIT28 +#define VIRTIO_F_RING_EVENT_IDX BIT29 #endif // _VIRTIO_0_9_5_H_ diff --git a/OvmfPkg/Include/IndustryStandard/Virtio095Net.h b/OvmfPkg/Include/IndustryStandard/Virtio095Net.h index 9c0ed5ed24..372015a0f5 100644 --- a/OvmfPkg/Include/IndustryStandard/Virtio095Net.h +++ b/OvmfPkg/Include/IndustryStandard/Virtio095Net.h @@ -18,74 +18,74 @@ // #pragma pack(1) typedef struct { - UINT8 Mac[6]; - UINT16 LinkStatus; + UINT8 Mac[6]; + UINT16 LinkStatus; } VIRTIO_NET_CONFIG; #pragma pack() -#define OFFSET_OF_VNET(Field) OFFSET_OF (VIRTIO_NET_CONFIG, Field) -#define SIZE_OF_VNET(Field) (sizeof ((VIRTIO_NET_CONFIG *) 0)->Field) +#define OFFSET_OF_VNET(Field) OFFSET_OF (VIRTIO_NET_CONFIG, Field) +#define SIZE_OF_VNET(Field) (sizeof ((VIRTIO_NET_CONFIG *) 0)->Field) // // Queue Identifiers // -#define VIRTIO_NET_Q_RX 0 -#define VIRTIO_NET_Q_TX 1 +#define VIRTIO_NET_Q_RX 0 +#define VIRTIO_NET_Q_TX 1 // // Feature Bits // -#define VIRTIO_NET_F_CSUM BIT0 // host to checksum outgoing packets -#define VIRTIO_NET_F_GUEST_CSUM BIT1 // guest to checksum incoming packets -#define VIRTIO_NET_F_MAC BIT5 // MAC available to guest -#define VIRTIO_NET_F_GSO BIT6 // deprecated -#define VIRTIO_NET_F_GUEST_TSO4 BIT7 // guest can receive TSOv4 -#define VIRTIO_NET_F_GUEST_TSO6 BIT8 // guest can receive TSOv6 -#define VIRTIO_NET_F_GUEST_ECN BIT9 // guest can receive TSO with ECN -#define VIRTIO_NET_F_GUEST_UFO BIT10 // guest can receive UFO -#define VIRTIO_NET_F_HOST_TSO4 BIT11 // host can receive TSOv4 -#define VIRTIO_NET_F_HOST_TSO6 BIT12 // host can receive TSOv6 -#define VIRTIO_NET_F_HOST_ECN BIT13 // host can receive TSO with ECN -#define VIRTIO_NET_F_HOST_UFO BIT14 // host can receive UFO -#define VIRTIO_NET_F_MRG_RXBUF BIT15 // guest can merge receive buffers -#define VIRTIO_NET_F_STATUS BIT16 // link status available to guest -#define VIRTIO_NET_F_CTRL_VQ BIT17 // control channel available -#define VIRTIO_NET_F_CTRL_RX BIT18 // control channel RX mode support -#define VIRTIO_NET_F_CTRL_VLAN BIT19 // control channel VLAN filtering -#define VIRTIO_NET_F_GUEST_ANNOUNCE BIT21 // guest can send gratuitous pkts +#define VIRTIO_NET_F_CSUM BIT0 // host to checksum outgoing packets +#define VIRTIO_NET_F_GUEST_CSUM BIT1 // guest to checksum incoming packets +#define VIRTIO_NET_F_MAC BIT5 // MAC available to guest +#define VIRTIO_NET_F_GSO BIT6 // deprecated +#define VIRTIO_NET_F_GUEST_TSO4 BIT7 // guest can receive TSOv4 +#define VIRTIO_NET_F_GUEST_TSO6 BIT8 // guest can receive TSOv6 +#define VIRTIO_NET_F_GUEST_ECN BIT9 // guest can receive TSO with ECN +#define VIRTIO_NET_F_GUEST_UFO BIT10 // guest can receive UFO +#define VIRTIO_NET_F_HOST_TSO4 BIT11 // host can receive TSOv4 +#define VIRTIO_NET_F_HOST_TSO6 BIT12 // host can receive TSOv6 +#define VIRTIO_NET_F_HOST_ECN BIT13 // host can receive TSO with ECN +#define VIRTIO_NET_F_HOST_UFO BIT14 // host can receive UFO +#define VIRTIO_NET_F_MRG_RXBUF BIT15 // guest can merge receive buffers +#define VIRTIO_NET_F_STATUS BIT16 // link status available to guest +#define VIRTIO_NET_F_CTRL_VQ BIT17 // control channel available +#define VIRTIO_NET_F_CTRL_RX BIT18 // control channel RX mode support +#define VIRTIO_NET_F_CTRL_VLAN BIT19 // control channel VLAN filtering +#define VIRTIO_NET_F_GUEST_ANNOUNCE BIT21 // guest can send gratuitous pkts // // Packet Header // #pragma pack(1) typedef struct { - UINT8 Flags; - UINT8 GsoType; - UINT16 HdrLen; - UINT16 GsoSize; - UINT16 CsumStart; - UINT16 CsumOffset; + UINT8 Flags; + UINT8 GsoType; + UINT16 HdrLen; + UINT16 GsoSize; + UINT16 CsumStart; + UINT16 CsumOffset; } VIRTIO_NET_REQ; #pragma pack() // // Bits in VIRTIO_NET_REQ.Flags // -#define VIRTIO_NET_HDR_F_NEEDS_CSUM BIT0 +#define VIRTIO_NET_HDR_F_NEEDS_CSUM BIT0 // // Types/Bits for VIRTIO_NET_REQ.GsoType // -#define VIRTIO_NET_HDR_GSO_NONE 0x00 -#define VIRTIO_NET_HDR_GSO_TCPV4 0x01 -#define VIRTIO_NET_HDR_GSO_UDP 0x03 -#define VIRTIO_NET_HDR_GSO_TCPV6 0x04 -#define VIRTIO_NET_HDR_GSO_ECN BIT7 +#define VIRTIO_NET_HDR_GSO_NONE 0x00 +#define VIRTIO_NET_HDR_GSO_TCPV4 0x01 +#define VIRTIO_NET_HDR_GSO_UDP 0x03 +#define VIRTIO_NET_HDR_GSO_TCPV6 0x04 +#define VIRTIO_NET_HDR_GSO_ECN BIT7 // // Link Status Bits in VIRTIO_NET_CONFIG.LinkStatus // -#define VIRTIO_NET_S_LINK_UP BIT0 -#define VIRTIO_NET_S_ANNOUNCE BIT1 +#define VIRTIO_NET_S_LINK_UP BIT0 +#define VIRTIO_NET_S_ANNOUNCE BIT1 #endif // _VIRTIO_0_9_5_NET_H_ diff --git a/OvmfPkg/Include/IndustryStandard/Virtio10.h b/OvmfPkg/Include/IndustryStandard/Virtio10.h index a1712247e0..c47bcbd41a 100644 --- a/OvmfPkg/Include/IndustryStandard/Virtio10.h +++ b/OvmfPkg/Include/IndustryStandard/Virtio10.h @@ -16,12 +16,12 @@ // // Subsystem Device IDs (to be) introduced in VirtIo 1.0 // -#define VIRTIO_SUBSYSTEM_GPU_DEVICE 16 +#define VIRTIO_SUBSYSTEM_GPU_DEVICE 16 // // Subsystem Device IDs from the VirtIo spec at git commit 87fa6b5d8155; // . // -#define VIRTIO_SUBSYSTEM_FILESYSTEM 26 +#define VIRTIO_SUBSYSTEM_FILESYSTEM 26 // // Structures for parsing the VirtIo 1.0 specific PCI capabilities from the @@ -29,21 +29,21 @@ // #pragma pack (1) typedef struct { - EFI_PCI_CAPABILITY_VENDOR_HDR VendorHdr; - UINT8 ConfigType; // Identifies the specific VirtIo 1.0 config structure - UINT8 Bar; // The BAR that contains the structure - UINT8 Padding[3]; - UINT32 Offset; // Offset within Bar until the start of the structure - UINT32 Length; // Length of the structure + EFI_PCI_CAPABILITY_VENDOR_HDR VendorHdr; + UINT8 ConfigType; // Identifies the specific VirtIo 1.0 config structure + UINT8 Bar; // The BAR that contains the structure + UINT8 Padding[3]; + UINT32 Offset; // Offset within Bar until the start of the structure + UINT32 Length; // Length of the structure } VIRTIO_PCI_CAP; #pragma pack () // // Values for the VIRTIO_PCI_CAP.ConfigType field // -#define VIRTIO_PCI_CAP_COMMON_CFG 1 // Common configuration -#define VIRTIO_PCI_CAP_NOTIFY_CFG 2 // Notifications -#define VIRTIO_PCI_CAP_DEVICE_CFG 4 // Device specific configuration +#define VIRTIO_PCI_CAP_COMMON_CFG 1 // Common configuration +#define VIRTIO_PCI_CAP_NOTIFY_CFG 2 // Notifications +#define VIRTIO_PCI_CAP_DEVICE_CFG 4 // Device specific configuration // // Structure pointed-to by Bar and Offset in VIRTIO_PCI_CAP when ConfigType is @@ -51,46 +51,46 @@ typedef struct { // #pragma pack (1) typedef struct { - UINT32 DeviceFeatureSelect; - UINT32 DeviceFeature; - UINT32 DriverFeatureSelect; - UINT32 DriverFeature; - UINT16 MsixConfig; - UINT16 NumQueues; - UINT8 DeviceStatus; - UINT8 ConfigGeneration; - UINT16 QueueSelect; - UINT16 QueueSize; - UINT16 QueueMsixVector; - UINT16 QueueEnable; - UINT16 QueueNotifyOff; - UINT64 QueueDesc; - UINT64 QueueAvail; - UINT64 QueueUsed; + UINT32 DeviceFeatureSelect; + UINT32 DeviceFeature; + UINT32 DriverFeatureSelect; + UINT32 DriverFeature; + UINT16 MsixConfig; + UINT16 NumQueues; + UINT8 DeviceStatus; + UINT8 ConfigGeneration; + UINT16 QueueSelect; + UINT16 QueueSize; + UINT16 QueueMsixVector; + UINT16 QueueEnable; + UINT16 QueueNotifyOff; + UINT64 QueueDesc; + UINT64 QueueAvail; + UINT64 QueueUsed; } VIRTIO_PCI_COMMON_CFG; #pragma pack () // // VirtIo 1.0 device status bits // -#define VSTAT_FEATURES_OK BIT3 +#define VSTAT_FEATURES_OK BIT3 // // VirtIo 1.0 reserved (device-independent) feature bits // -#define VIRTIO_F_VERSION_1 BIT32 -#define VIRTIO_F_IOMMU_PLATFORM BIT33 +#define VIRTIO_F_VERSION_1 BIT32 +#define VIRTIO_F_IOMMU_PLATFORM BIT33 // // MMIO VirtIo Header Offsets // -#define VIRTIO_MMIO_OFFSET_QUEUE_READY 0x44 -#define VIRTIO_MMIO_OFFSET_QUEUE_DESC_LO 0x80 -#define VIRTIO_MMIO_OFFSET_QUEUE_DESC_HI 0x84 -#define VIRTIO_MMIO_OFFSET_QUEUE_AVAIL_LO 0x90 -#define VIRTIO_MMIO_OFFSET_QUEUE_AVAIL_HI 0x94 -#define VIRTIO_MMIO_OFFSET_QUEUE_USED_LO 0xa0 -#define VIRTIO_MMIO_OFFSET_QUEUE_USED_HI 0xa4 -#define VIRTIO_MMIO_OFFSET_CONFIG_GENERATION 0xfc +#define VIRTIO_MMIO_OFFSET_QUEUE_READY 0x44 +#define VIRTIO_MMIO_OFFSET_QUEUE_DESC_LO 0x80 +#define VIRTIO_MMIO_OFFSET_QUEUE_DESC_HI 0x84 +#define VIRTIO_MMIO_OFFSET_QUEUE_AVAIL_LO 0x90 +#define VIRTIO_MMIO_OFFSET_QUEUE_AVAIL_HI 0x94 +#define VIRTIO_MMIO_OFFSET_QUEUE_USED_LO 0xa0 +#define VIRTIO_MMIO_OFFSET_QUEUE_USED_HI 0xa4 +#define VIRTIO_MMIO_OFFSET_CONFIG_GENERATION 0xfc #endif // _VIRTIO_1_0_H_ diff --git a/OvmfPkg/Include/IndustryStandard/Virtio10Net.h b/OvmfPkg/Include/IndustryStandard/Virtio10Net.h index 69dcaca465..4efb916408 100644 --- a/OvmfPkg/Include/IndustryStandard/Virtio10Net.h +++ b/OvmfPkg/Include/IndustryStandard/Virtio10Net.h @@ -18,8 +18,8 @@ // #pragma pack (1) typedef struct { - VIRTIO_NET_REQ V0_9_5; - UINT16 NumBuffers; + VIRTIO_NET_REQ V0_9_5; + UINT16 NumBuffers; } VIRTIO_1_0_NET_REQ; #pragma pack () diff --git a/OvmfPkg/Include/IndustryStandard/VirtioBlk.h b/OvmfPkg/Include/IndustryStandard/VirtioBlk.h index 23da619d77..7a904975c3 100644 --- a/OvmfPkg/Include/IndustryStandard/VirtioBlk.h +++ b/OvmfPkg/Include/IndustryStandard/VirtioBlk.h @@ -14,46 +14,45 @@ #include - // // virtio-0.9.5, Appendix D: Block Device // #pragma pack(1) typedef struct { - UINT8 PhysicalBlockExp; // # of logical blocks per physical block (log2) - UINT8 AlignmentOffset; // offset of first aligned logical block - UINT16 MinIoSize; // suggested minimum I/O size in blocks - UINT32 OptIoSize; // optimal (suggested maximum) I/O size in blocks + UINT8 PhysicalBlockExp; // # of logical blocks per physical block (log2) + UINT8 AlignmentOffset; // offset of first aligned logical block + UINT16 MinIoSize; // suggested minimum I/O size in blocks + UINT32 OptIoSize; // optimal (suggested maximum) I/O size in blocks } VIRTIO_BLK_TOPOLOGY; typedef struct { - UINT64 Capacity; - UINT32 SizeMax; - UINT32 SegMax; - UINT16 Cylinders; - UINT8 Heads; - UINT8 Sectors; - UINT32 BlkSize; - VIRTIO_BLK_TOPOLOGY Topology; + UINT64 Capacity; + UINT32 SizeMax; + UINT32 SegMax; + UINT16 Cylinders; + UINT8 Heads; + UINT8 Sectors; + UINT32 BlkSize; + VIRTIO_BLK_TOPOLOGY Topology; } VIRTIO_BLK_CONFIG; #pragma pack() -#define OFFSET_OF_VBLK(Field) OFFSET_OF (VIRTIO_BLK_CONFIG, Field) -#define SIZE_OF_VBLK(Field) (sizeof ((VIRTIO_BLK_CONFIG *) 0)->Field) +#define OFFSET_OF_VBLK(Field) OFFSET_OF (VIRTIO_BLK_CONFIG, Field) +#define SIZE_OF_VBLK(Field) (sizeof ((VIRTIO_BLK_CONFIG *) 0)->Field) -#define VIRTIO_BLK_F_BARRIER BIT0 -#define VIRTIO_BLK_F_SIZE_MAX BIT1 -#define VIRTIO_BLK_F_SEG_MAX BIT2 -#define VIRTIO_BLK_F_GEOMETRY BIT4 -#define VIRTIO_BLK_F_RO BIT5 -#define VIRTIO_BLK_F_BLK_SIZE BIT6 // treated as "logical block size" in +#define VIRTIO_BLK_F_BARRIER BIT0 +#define VIRTIO_BLK_F_SIZE_MAX BIT1 +#define VIRTIO_BLK_F_SEG_MAX BIT2 +#define VIRTIO_BLK_F_GEOMETRY BIT4 +#define VIRTIO_BLK_F_RO BIT5 +#define VIRTIO_BLK_F_BLK_SIZE BIT6 // treated as "logical block size" in // practice; actual host side // implementation negotiates "optimal" // block size separately, via // VIRTIO_BLK_F_TOPOLOGY -#define VIRTIO_BLK_F_SCSI BIT7 -#define VIRTIO_BLK_F_FLUSH BIT9 // identical to "write cache enabled" -#define VIRTIO_BLK_F_TOPOLOGY BIT10 // information on optimal I/O alignment +#define VIRTIO_BLK_F_SCSI BIT7 +#define VIRTIO_BLK_F_FLUSH BIT9 // identical to "write cache enabled" +#define VIRTIO_BLK_F_TOPOLOGY BIT10 // information on optimal I/O alignment // // We keep the status byte separate from the rest of the virtio-blk request @@ -62,22 +61,22 @@ typedef struct { // #pragma pack(1) typedef struct { - UINT32 Type; - UINT32 IoPrio; - UINT64 Sector; + UINT32 Type; + UINT32 IoPrio; + UINT64 Sector; } VIRTIO_BLK_REQ; #pragma pack() -#define VIRTIO_BLK_T_IN 0x00000000 -#define VIRTIO_BLK_T_OUT 0x00000001 -#define VIRTIO_BLK_T_SCSI_CMD 0x00000002 -#define VIRTIO_BLK_T_SCSI_CMD_OUT 0x00000003 -#define VIRTIO_BLK_T_FLUSH 0x00000004 -#define VIRTIO_BLK_T_FLUSH_OUT 0x00000005 -#define VIRTIO_BLK_T_BARRIER BIT31 +#define VIRTIO_BLK_T_IN 0x00000000 +#define VIRTIO_BLK_T_OUT 0x00000001 +#define VIRTIO_BLK_T_SCSI_CMD 0x00000002 +#define VIRTIO_BLK_T_SCSI_CMD_OUT 0x00000003 +#define VIRTIO_BLK_T_FLUSH 0x00000004 +#define VIRTIO_BLK_T_FLUSH_OUT 0x00000005 +#define VIRTIO_BLK_T_BARRIER BIT31 -#define VIRTIO_BLK_S_OK 0x00 -#define VIRTIO_BLK_S_IOERR 0x01 -#define VIRTIO_BLK_S_UNSUPP 0x02 +#define VIRTIO_BLK_S_OK 0x00 +#define VIRTIO_BLK_S_IOERR 0x01 +#define VIRTIO_BLK_S_UNSUPP 0x02 #endif // _VIRTIO_BLK_H_ diff --git a/OvmfPkg/Include/IndustryStandard/VirtioFs.h b/OvmfPkg/Include/IndustryStandard/VirtioFs.h index dee437ec0d..dbcb62f6ca 100644 --- a/OvmfPkg/Include/IndustryStandard/VirtioFs.h +++ b/OvmfPkg/Include/IndustryStandard/VirtioFs.h @@ -22,12 +22,12 @@ // // Lowest numbered queue for sending normal priority requests. // -#define VIRTIO_FS_REQUEST_QUEUE 1 +#define VIRTIO_FS_REQUEST_QUEUE 1 // // Number of bytes in the "VIRTIO_FS_CONFIG.Tag" field. // -#define VIRTIO_FS_TAG_BYTES 36 +#define VIRTIO_FS_TAG_BYTES 36 // // Device configuration layout. @@ -40,12 +40,12 @@ typedef struct { // encoded bytes take up the entire Tag field, then there is no NUL // terminator. // - UINT8 Tag[VIRTIO_FS_TAG_BYTES]; + UINT8 Tag[VIRTIO_FS_TAG_BYTES]; // // The total number of request virtqueues exposed by the device (i.e., // excluding the "hiprio" queue). // - UINT32 NumReqQueues; + UINT32 NumReqQueues; } VIRTIO_FS_CONFIG; #pragma pack () @@ -74,56 +74,56 @@ typedef struct { // interface version 7.32. // #define VIRTIO_FS_FUSE_MAJOR 7 -#define VIRTIO_FS_FUSE_MINOR 31 +#define VIRTIO_FS_FUSE_MINOR 31 // // The inode number of the root directory. // -#define VIRTIO_FS_FUSE_ROOT_DIR_NODE_ID 1 +#define VIRTIO_FS_FUSE_ROOT_DIR_NODE_ID 1 // // Distinguished errno values. // -#define VIRTIO_FS_FUSE_ERRNO_ENOENT (-2) +#define VIRTIO_FS_FUSE_ERRNO_ENOENT (-2) // // File mode bitmasks. // -#define VIRTIO_FS_FUSE_MODE_TYPE_MASK 0170000u -#define VIRTIO_FS_FUSE_MODE_TYPE_REG 0100000u -#define VIRTIO_FS_FUSE_MODE_TYPE_DIR 0040000u -#define VIRTIO_FS_FUSE_MODE_PERM_RWXU 0000700u -#define VIRTIO_FS_FUSE_MODE_PERM_RUSR 0000400u -#define VIRTIO_FS_FUSE_MODE_PERM_WUSR 0000200u -#define VIRTIO_FS_FUSE_MODE_PERM_XUSR 0000100u -#define VIRTIO_FS_FUSE_MODE_PERM_RWXG 0000070u -#define VIRTIO_FS_FUSE_MODE_PERM_RGRP 0000040u -#define VIRTIO_FS_FUSE_MODE_PERM_WGRP 0000020u -#define VIRTIO_FS_FUSE_MODE_PERM_XGRP 0000010u -#define VIRTIO_FS_FUSE_MODE_PERM_RWXO 0000007u -#define VIRTIO_FS_FUSE_MODE_PERM_ROTH 0000004u -#define VIRTIO_FS_FUSE_MODE_PERM_WOTH 0000002u -#define VIRTIO_FS_FUSE_MODE_PERM_XOTH 0000001u +#define VIRTIO_FS_FUSE_MODE_TYPE_MASK 0170000u +#define VIRTIO_FS_FUSE_MODE_TYPE_REG 0100000u +#define VIRTIO_FS_FUSE_MODE_TYPE_DIR 0040000u +#define VIRTIO_FS_FUSE_MODE_PERM_RWXU 0000700u +#define VIRTIO_FS_FUSE_MODE_PERM_RUSR 0000400u +#define VIRTIO_FS_FUSE_MODE_PERM_WUSR 0000200u +#define VIRTIO_FS_FUSE_MODE_PERM_XUSR 0000100u +#define VIRTIO_FS_FUSE_MODE_PERM_RWXG 0000070u +#define VIRTIO_FS_FUSE_MODE_PERM_RGRP 0000040u +#define VIRTIO_FS_FUSE_MODE_PERM_WGRP 0000020u +#define VIRTIO_FS_FUSE_MODE_PERM_XGRP 0000010u +#define VIRTIO_FS_FUSE_MODE_PERM_RWXO 0000007u +#define VIRTIO_FS_FUSE_MODE_PERM_ROTH 0000004u +#define VIRTIO_FS_FUSE_MODE_PERM_WOTH 0000002u +#define VIRTIO_FS_FUSE_MODE_PERM_XOTH 0000001u // // Flags for VirtioFsFuseOpSetAttr, in the VIRTIO_FS_FUSE_SETATTR_REQUEST.Valid // field. // -#define VIRTIO_FS_FUSE_SETATTR_REQ_F_MODE BIT0 -#define VIRTIO_FS_FUSE_SETATTR_REQ_F_SIZE BIT3 -#define VIRTIO_FS_FUSE_SETATTR_REQ_F_ATIME BIT4 -#define VIRTIO_FS_FUSE_SETATTR_REQ_F_MTIME BIT5 +#define VIRTIO_FS_FUSE_SETATTR_REQ_F_MODE BIT0 +#define VIRTIO_FS_FUSE_SETATTR_REQ_F_SIZE BIT3 +#define VIRTIO_FS_FUSE_SETATTR_REQ_F_ATIME BIT4 +#define VIRTIO_FS_FUSE_SETATTR_REQ_F_MTIME BIT5 // // Flags for VirtioFsFuseOpOpen. // -#define VIRTIO_FS_FUSE_OPEN_REQ_F_RDONLY 0 -#define VIRTIO_FS_FUSE_OPEN_REQ_F_RDWR 2 +#define VIRTIO_FS_FUSE_OPEN_REQ_F_RDONLY 0 +#define VIRTIO_FS_FUSE_OPEN_REQ_F_RDWR 2 // // Flags for VirtioFsFuseOpInit. // -#define VIRTIO_FS_FUSE_INIT_REQ_F_DO_READDIRPLUS BIT13 +#define VIRTIO_FS_FUSE_INIT_REQ_F_DO_READDIRPLUS BIT13 /** Macro for calculating the size of a directory stream entry. @@ -156,7 +156,7 @@ typedef struct { // // Flags for VirtioFsFuseOpRename2. // -#define VIRTIO_FS_FUSE_RENAME2_REQ_F_NOREPLACE BIT0 +#define VIRTIO_FS_FUSE_RENAME2_REQ_F_NOREPLACE BIT0 // // FUSE operation codes. @@ -190,20 +190,20 @@ typedef enum { // Request-response headers common to all request types. // typedef struct { - UINT32 Len; - UINT32 Opcode; - UINT64 Unique; - UINT64 NodeId; - UINT32 Uid; - UINT32 Gid; - UINT32 Pid; - UINT32 Padding; + UINT32 Len; + UINT32 Opcode; + UINT64 Unique; + UINT64 NodeId; + UINT32 Uid; + UINT32 Gid; + UINT32 Pid; + UINT32 Padding; } VIRTIO_FS_FUSE_REQUEST; typedef struct { - UINT32 Len; - INT32 Error; - UINT64 Unique; + UINT32 Len; + INT32 Error; + UINT64 Unique; } VIRTIO_FS_FUSE_RESPONSE; // @@ -213,12 +213,12 @@ typedef struct { // an inode. // typedef struct { - UINT64 NodeId; - UINT64 Generation; - UINT64 EntryValid; - UINT64 AttrValid; - UINT32 EntryValidNsec; - UINT32 AttrValidNsec; + UINT64 NodeId; + UINT64 Generation; + UINT64 EntryValid; + UINT64 AttrValid; + UINT32 EntryValidNsec; + UINT32 AttrValidNsec; } VIRTIO_FS_FUSE_NODE_RESPONSE; // @@ -227,29 +227,29 @@ typedef struct { // an inode. // typedef struct { - UINT64 Ino; - UINT64 Size; - UINT64 Blocks; - UINT64 Atime; - UINT64 Mtime; - UINT64 Ctime; - UINT32 AtimeNsec; - UINT32 MtimeNsec; - UINT32 CtimeNsec; - UINT32 Mode; - UINT32 Nlink; - UINT32 Uid; - UINT32 Gid; - UINT32 Rdev; - UINT32 Blksize; - UINT32 Padding; + UINT64 Ino; + UINT64 Size; + UINT64 Blocks; + UINT64 Atime; + UINT64 Mtime; + UINT64 Ctime; + UINT32 AtimeNsec; + UINT32 MtimeNsec; + UINT32 CtimeNsec; + UINT32 Mode; + UINT32 Nlink; + UINT32 Uid; + UINT32 Gid; + UINT32 Rdev; + UINT32 Blksize; + UINT32 Padding; } VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE; // // Header for VirtioFsFuseOpForget. // typedef struct { - UINT64 NumberOfLookups; + UINT64 NumberOfLookups; } VIRTIO_FS_FUSE_FORGET_REQUEST; // @@ -257,169 +257,169 @@ typedef struct { // for VirtioFsFuseOpSetAttr). // typedef struct { - UINT32 GetAttrFlags; - UINT32 Dummy; - UINT64 FileHandle; + UINT32 GetAttrFlags; + UINT32 Dummy; + UINT64 FileHandle; } VIRTIO_FS_FUSE_GETATTR_REQUEST; typedef struct { - UINT64 AttrValid; - UINT32 AttrValidNsec; - UINT32 Dummy; + UINT64 AttrValid; + UINT32 AttrValidNsec; + UINT32 Dummy; } VIRTIO_FS_FUSE_GETATTR_RESPONSE; // // Header for VirtioFsFuseOpSetAttr. // typedef struct { - UINT32 Valid; - UINT32 Padding; - UINT64 FileHandle; - UINT64 Size; - UINT64 LockOwner; - UINT64 Atime; - UINT64 Mtime; - UINT64 Ctime; - UINT32 AtimeNsec; - UINT32 MtimeNsec; - UINT32 CtimeNsec; - UINT32 Mode; - UINT32 Unused4; - UINT32 Uid; - UINT32 Gid; - UINT32 Unused5; + UINT32 Valid; + UINT32 Padding; + UINT64 FileHandle; + UINT64 Size; + UINT64 LockOwner; + UINT64 Atime; + UINT64 Mtime; + UINT64 Ctime; + UINT32 AtimeNsec; + UINT32 MtimeNsec; + UINT32 CtimeNsec; + UINT32 Mode; + UINT32 Unused4; + UINT32 Uid; + UINT32 Gid; + UINT32 Unused5; } VIRTIO_FS_FUSE_SETATTR_REQUEST; // // Header for VirtioFsFuseOpMkDir. // typedef struct { - UINT32 Mode; - UINT32 Umask; + UINT32 Mode; + UINT32 Umask; } VIRTIO_FS_FUSE_MKDIR_REQUEST; // // Headers for VirtioFsFuseOpOpen and VirtioFsFuseOpOpenDir. // typedef struct { - UINT32 Flags; - UINT32 Unused; + UINT32 Flags; + UINT32 Unused; } VIRTIO_FS_FUSE_OPEN_REQUEST; typedef struct { - UINT64 FileHandle; - UINT32 OpenFlags; - UINT32 Padding; + UINT64 FileHandle; + UINT32 OpenFlags; + UINT32 Padding; } VIRTIO_FS_FUSE_OPEN_RESPONSE; // // Header for VirtioFsFuseOpRead and VirtioFsFuseOpReadDirPlus. // typedef struct { - UINT64 FileHandle; - UINT64 Offset; - UINT32 Size; - UINT32 ReadFlags; - UINT64 LockOwner; - UINT32 Flags; - UINT32 Padding; + UINT64 FileHandle; + UINT64 Offset; + UINT32 Size; + UINT32 ReadFlags; + UINT64 LockOwner; + UINT32 Flags; + UINT32 Padding; } VIRTIO_FS_FUSE_READ_REQUEST; // // Headers for VirtioFsFuseOpWrite. // typedef struct { - UINT64 FileHandle; - UINT64 Offset; - UINT32 Size; - UINT32 WriteFlags; - UINT64 LockOwner; - UINT32 Flags; - UINT32 Padding; + UINT64 FileHandle; + UINT64 Offset; + UINT32 Size; + UINT32 WriteFlags; + UINT64 LockOwner; + UINT32 Flags; + UINT32 Padding; } VIRTIO_FS_FUSE_WRITE_REQUEST; typedef struct { - UINT32 Size; - UINT32 Padding; + UINT32 Size; + UINT32 Padding; } VIRTIO_FS_FUSE_WRITE_RESPONSE; // // Header for VirtioFsFuseOpStatFs. // typedef struct { - UINT64 Blocks; - UINT64 Bfree; - UINT64 Bavail; - UINT64 Files; - UINT64 Ffree; - UINT32 Bsize; - UINT32 Namelen; - UINT32 Frsize; - UINT32 Padding; - UINT32 Spare[6]; + UINT64 Blocks; + UINT64 Bfree; + UINT64 Bavail; + UINT64 Files; + UINT64 Ffree; + UINT32 Bsize; + UINT32 Namelen; + UINT32 Frsize; + UINT32 Padding; + UINT32 Spare[6]; } VIRTIO_FS_FUSE_STATFS_RESPONSE; // // Header for VirtioFsFuseOpRelease and VirtioFsFuseOpReleaseDir. // typedef struct { - UINT64 FileHandle; - UINT32 Flags; - UINT32 ReleaseFlags; - UINT64 LockOwner; + UINT64 FileHandle; + UINT32 Flags; + UINT32 ReleaseFlags; + UINT64 LockOwner; } VIRTIO_FS_FUSE_RELEASE_REQUEST; // // Header for VirtioFsFuseOpFsync and VirtioFsFuseOpFsyncDir. // typedef struct { - UINT64 FileHandle; - UINT32 FsyncFlags; - UINT32 Padding; + UINT64 FileHandle; + UINT32 FsyncFlags; + UINT32 Padding; } VIRTIO_FS_FUSE_FSYNC_REQUEST; // // Header for VirtioFsFuseOpFlush. // typedef struct { - UINT64 FileHandle; - UINT32 Unused; - UINT32 Padding; - UINT64 LockOwner; + UINT64 FileHandle; + UINT32 Unused; + UINT32 Padding; + UINT64 LockOwner; } VIRTIO_FS_FUSE_FLUSH_REQUEST; // // Headers for VirtioFsFuseOpInit. // typedef struct { - UINT32 Major; - UINT32 Minor; - UINT32 MaxReadahead; - UINT32 Flags; + UINT32 Major; + UINT32 Minor; + UINT32 MaxReadahead; + UINT32 Flags; } VIRTIO_FS_FUSE_INIT_REQUEST; typedef struct { - UINT32 Major; - UINT32 Minor; - UINT32 MaxReadahead; - UINT32 Flags; - UINT16 MaxBackground; - UINT16 CongestionThreshold; - UINT32 MaxWrite; - UINT32 TimeGran; - UINT16 MaxPages; - UINT16 MapAlignment; - UINT32 Unused[8]; + UINT32 Major; + UINT32 Minor; + UINT32 MaxReadahead; + UINT32 Flags; + UINT16 MaxBackground; + UINT16 CongestionThreshold; + UINT32 MaxWrite; + UINT32 TimeGran; + UINT16 MaxPages; + UINT16 MapAlignment; + UINT32 Unused[8]; } VIRTIO_FS_FUSE_INIT_RESPONSE; // // Header for VirtioFsFuseOpCreate. // typedef struct { - UINT32 Flags; - UINT32 Mode; - UINT32 Umask; - UINT32 Padding; + UINT32 Flags; + UINT32 Mode; + UINT32 Umask; + UINT32 Padding; } VIRTIO_FS_FUSE_CREATE_REQUEST; // @@ -433,21 +433,21 @@ typedef struct { // sizes. // typedef struct { - VIRTIO_FS_FUSE_NODE_RESPONSE NodeResp; - VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE AttrResp; - UINT64 NodeId; - UINT64 CookieForNextEntry; - UINT32 Namelen; - UINT32 Type; + VIRTIO_FS_FUSE_NODE_RESPONSE NodeResp; + VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE AttrResp; + UINT64 NodeId; + UINT64 CookieForNextEntry; + UINT32 Namelen; + UINT32 Type; } VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE; // // Header for VirtioFsFuseOpRename2. // typedef struct { - UINT64 NewDir; - UINT32 Flags; - UINT32 Padding; + UINT64 NewDir; + UINT32 Flags; + UINT32 Padding; } VIRTIO_FS_FUSE_RENAME2_REQUEST; #pragma pack () diff --git a/OvmfPkg/Include/IndustryStandard/VirtioGpu.h b/OvmfPkg/Include/IndustryStandard/VirtioGpu.h index b0094a5ac6..12559ccef5 100644 --- a/OvmfPkg/Include/IndustryStandard/VirtioGpu.h +++ b/OvmfPkg/Include/IndustryStandard/VirtioGpu.h @@ -26,7 +26,7 @@ // // Queue number for sending control commands. // -#define VIRTIO_GPU_CONTROL_QUEUE 0 +#define VIRTIO_GPU_CONTROL_QUEUE 0 // // Command and response types. @@ -37,8 +37,8 @@ typedef enum { // // - create/release a host-side 2D resource, // - VirtioGpuCmdResourceCreate2d = 0x0101, - VirtioGpuCmdResourceUnref = 0x0102, + VirtioGpuCmdResourceCreate2d = 0x0101, + VirtioGpuCmdResourceUnref = 0x0102, // // - attach/detach guest RAM to/from a host-side 2D resource, // @@ -47,7 +47,7 @@ typedef enum { // // - assign/unassign a host-side 2D resource to/from a scanout ("head"). // - VirtioGpuCmdSetScanout = 0x0103, + VirtioGpuCmdSetScanout = 0x0103, // // Commands related to drawing: @@ -55,22 +55,22 @@ typedef enum { // - transfer a guest RAM update to the host-side 2D resource (does not imply // host display refresh), // - VirtioGpuCmdTransferToHost2d = 0x0105, + VirtioGpuCmdTransferToHost2d = 0x0105, // // - trigger a host display refresh from the 2D resource. // - VirtioGpuCmdResourceFlush = 0x0104, + VirtioGpuCmdResourceFlush = 0x0104, // // Success code for all of the above commands. // - VirtioGpuRespOkNodata = 0x1100, + VirtioGpuRespOkNodata = 0x1100, } VIRTIO_GPU_CONTROL_TYPE; // // Common request/response header. // -#define VIRTIO_GPU_FLAG_FENCE BIT0 +#define VIRTIO_GPU_FLAG_FENCE BIT0 #pragma pack (1) typedef struct { @@ -78,20 +78,20 @@ typedef struct { // The guest sets Type to VirtioGpuCmd* in the requests. The host sets Type // to VirtioGpuResp* in the responses. // - UINT32 Type; + UINT32 Type; // // Fencing forces the host to complete the command before producing a // response. // - UINT32 Flags; - UINT64 FenceId; + UINT32 Flags; + UINT64 FenceId; // // Unused. // - UINT32 CtxId; - UINT32 Padding; + UINT32 CtxId; + UINT32 Padding; } VIRTIO_GPU_CONTROL_HEADER; #pragma pack () @@ -100,10 +100,10 @@ typedef struct { // #pragma pack (1) typedef struct { - UINT32 X; - UINT32 Y; - UINT32 Width; - UINT32 Height; + UINT32 X; + UINT32 Y; + UINT32 Width; + UINT32 Height; } VIRTIO_GPU_RECTANGLE; #pragma pack () @@ -119,11 +119,11 @@ typedef enum { #pragma pack (1) typedef struct { - VIRTIO_GPU_CONTROL_HEADER Header; - UINT32 ResourceId; // note: 0 is invalid - UINT32 Format; // from VIRTIO_GPU_FORMATS - UINT32 Width; - UINT32 Height; + VIRTIO_GPU_CONTROL_HEADER Header; + UINT32 ResourceId; // note: 0 is invalid + UINT32 Format; // from VIRTIO_GPU_FORMATS + UINT32 Width; + UINT32 Height; } VIRTIO_GPU_RESOURCE_CREATE_2D; #pragma pack () @@ -132,9 +132,9 @@ typedef struct { // #pragma pack (1) typedef struct { - VIRTIO_GPU_CONTROL_HEADER Header; - UINT32 ResourceId; - UINT32 Padding; + VIRTIO_GPU_CONTROL_HEADER Header; + UINT32 ResourceId; + UINT32 Padding; } VIRTIO_GPU_RESOURCE_UNREF; #pragma pack () @@ -146,16 +146,16 @@ typedef struct { // #pragma pack (1) typedef struct { - UINT64 Addr; - UINT32 Length; - UINT32 Padding; + UINT64 Addr; + UINT32 Length; + UINT32 Padding; } VIRTIO_GPU_MEM_ENTRY; typedef struct { - VIRTIO_GPU_CONTROL_HEADER Header; - UINT32 ResourceId; - UINT32 NrEntries; // number of entries: constant 1 - VIRTIO_GPU_MEM_ENTRY Entry; + VIRTIO_GPU_CONTROL_HEADER Header; + UINT32 ResourceId; + UINT32 NrEntries; // number of entries: constant 1 + VIRTIO_GPU_MEM_ENTRY Entry; } VIRTIO_GPU_RESOURCE_ATTACH_BACKING; #pragma pack () @@ -164,9 +164,9 @@ typedef struct { // #pragma pack (1) typedef struct { - VIRTIO_GPU_CONTROL_HEADER Header; - UINT32 ResourceId; - UINT32 Padding; + VIRTIO_GPU_CONTROL_HEADER Header; + UINT32 ResourceId; + UINT32 Padding; } VIRTIO_GPU_RESOURCE_DETACH_BACKING; #pragma pack () @@ -175,10 +175,10 @@ typedef struct { // #pragma pack (1) typedef struct { - VIRTIO_GPU_CONTROL_HEADER Header; - VIRTIO_GPU_RECTANGLE Rectangle; - UINT32 ScanoutId; - UINT32 ResourceId; + VIRTIO_GPU_CONTROL_HEADER Header; + VIRTIO_GPU_RECTANGLE Rectangle; + UINT32 ScanoutId; + UINT32 ResourceId; } VIRTIO_GPU_SET_SCANOUT; #pragma pack () @@ -187,11 +187,11 @@ typedef struct { // #pragma pack (1) typedef struct { - VIRTIO_GPU_CONTROL_HEADER Header; - VIRTIO_GPU_RECTANGLE Rectangle; - UINT64 Offset; - UINT32 ResourceId; - UINT32 Padding; + VIRTIO_GPU_CONTROL_HEADER Header; + VIRTIO_GPU_RECTANGLE Rectangle; + UINT64 Offset; + UINT32 ResourceId; + UINT32 Padding; } VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D; #pragma pack () @@ -200,10 +200,10 @@ typedef struct { // #pragma pack (1) typedef struct { - VIRTIO_GPU_CONTROL_HEADER Header; - VIRTIO_GPU_RECTANGLE Rectangle; - UINT32 ResourceId; - UINT32 Padding; + VIRTIO_GPU_CONTROL_HEADER Header; + VIRTIO_GPU_RECTANGLE Rectangle; + UINT32 ResourceId; + UINT32 Padding; } VIRTIO_GPU_RESOURCE_FLUSH; #pragma pack () diff --git a/OvmfPkg/Include/IndustryStandard/VirtioScsi.h b/OvmfPkg/Include/IndustryStandard/VirtioScsi.h index 7969d41c1b..2a097bd0ec 100644 --- a/OvmfPkg/Include/IndustryStandard/VirtioScsi.h +++ b/OvmfPkg/Include/IndustryStandard/VirtioScsi.h @@ -14,38 +14,37 @@ #include - // // virtio-0.9.5, Appendix I: SCSI Host Device // #pragma pack(1) typedef struct { - UINT32 NumQueues; - UINT32 SegMax; - UINT32 MaxSectors; - UINT32 CmdPerLun; - UINT32 EventInfoSize; - UINT32 SenseSize; - UINT32 CdbSize; - UINT16 MaxChannel; - UINT16 MaxTarget; - UINT32 MaxLun; + UINT32 NumQueues; + UINT32 SegMax; + UINT32 MaxSectors; + UINT32 CmdPerLun; + UINT32 EventInfoSize; + UINT32 SenseSize; + UINT32 CdbSize; + UINT16 MaxChannel; + UINT16 MaxTarget; + UINT32 MaxLun; } VIRTIO_SCSI_CONFIG; #pragma pack() -#define OFFSET_OF_VSCSI(Field) OFFSET_OF (VIRTIO_SCSI_CONFIG, Field) -#define SIZE_OF_VSCSI(Field) (sizeof ((VIRTIO_SCSI_CONFIG *) 0)->Field) +#define OFFSET_OF_VSCSI(Field) OFFSET_OF (VIRTIO_SCSI_CONFIG, Field) +#define SIZE_OF_VSCSI(Field) (sizeof ((VIRTIO_SCSI_CONFIG *) 0)->Field) -#define VIRTIO_SCSI_F_INOUT BIT0 -#define VIRTIO_SCSI_F_HOTPLUG BIT1 +#define VIRTIO_SCSI_F_INOUT BIT0 +#define VIRTIO_SCSI_F_HOTPLUG BIT1 // // We expect these maximum sizes from the host. Also we force the CdbLength and // SenseDataLength parameters of EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru() not // to exceed these limits. See UEFI 2.3.1 errata C 14.7. // -#define VIRTIO_SCSI_CDB_SIZE 32 -#define VIRTIO_SCSI_SENSE_SIZE 96 +#define VIRTIO_SCSI_CDB_SIZE 32 +#define VIRTIO_SCSI_SENSE_SIZE 96 // // We pass the dynamically sized buffers ("dataout", "datain") in separate ring @@ -53,41 +52,41 @@ typedef struct { // #pragma pack(1) typedef struct { - UINT8 Lun[8]; - UINT64 Id; - UINT8 TaskAttr; - UINT8 Prio; - UINT8 Crn; - UINT8 Cdb[VIRTIO_SCSI_CDB_SIZE]; + UINT8 Lun[8]; + UINT64 Id; + UINT8 TaskAttr; + UINT8 Prio; + UINT8 Crn; + UINT8 Cdb[VIRTIO_SCSI_CDB_SIZE]; } VIRTIO_SCSI_REQ; typedef struct { - UINT32 SenseLen; - UINT32 Residual; - UINT16 StatusQualifier; - UINT8 Status; - UINT8 Response; - UINT8 Sense[VIRTIO_SCSI_SENSE_SIZE]; + UINT32 SenseLen; + UINT32 Residual; + UINT16 StatusQualifier; + UINT8 Status; + UINT8 Response; + UINT8 Sense[VIRTIO_SCSI_SENSE_SIZE]; } VIRTIO_SCSI_RESP; #pragma pack() // // selector of first virtio queue usable for request transfer // -#define VIRTIO_SCSI_REQUEST_QUEUE 2 +#define VIRTIO_SCSI_REQUEST_QUEUE 2 // // host response codes // -#define VIRTIO_SCSI_S_OK 0 -#define VIRTIO_SCSI_S_OVERRUN 1 -#define VIRTIO_SCSI_S_ABORTED 2 -#define VIRTIO_SCSI_S_BAD_TARGET 3 -#define VIRTIO_SCSI_S_RESET 4 -#define VIRTIO_SCSI_S_BUSY 5 -#define VIRTIO_SCSI_S_TRANSPORT_FAILURE 6 -#define VIRTIO_SCSI_S_TARGET_FAILURE 7 -#define VIRTIO_SCSI_S_NEXUS_FAILURE 8 -#define VIRTIO_SCSI_S_FAILURE 9 +#define VIRTIO_SCSI_S_OK 0 +#define VIRTIO_SCSI_S_OVERRUN 1 +#define VIRTIO_SCSI_S_ABORTED 2 +#define VIRTIO_SCSI_S_BAD_TARGET 3 +#define VIRTIO_SCSI_S_RESET 4 +#define VIRTIO_SCSI_S_BUSY 5 +#define VIRTIO_SCSI_S_TRANSPORT_FAILURE 6 +#define VIRTIO_SCSI_S_TARGET_FAILURE 7 +#define VIRTIO_SCSI_S_NEXUS_FAILURE 8 +#define VIRTIO_SCSI_S_FAILURE 9 #endif // _VIRTIO_SCSI_H_ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/arch-arm/xen.h b/OvmfPkg/Include/IndustryStandard/Xen/arch-arm/xen.h index 36338d063a..dd3d21118e 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/arch-arm/xen.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/arch-arm/xen.h @@ -152,9 +152,9 @@ * at Documentation/devicetree/bindings/arm/xen.txt. */ -#define XEN_HYPERCALL_TAG 0xEA1 +#define XEN_HYPERCALL_TAG 0xEA1 -#define uint64_aligned_t UINT64 __attribute__((aligned(8))) +#define uint64_aligned_t UINT64 __attribute__((aligned(8))) #ifndef __ASSEMBLY__ #define ___DEFINE_XEN_GUEST_HANDLE(name, type) \ @@ -173,134 +173,137 @@ #define __DEFINE_XEN_GUEST_HANDLE(name, type) \ ___DEFINE_XEN_GUEST_HANDLE(name, type); \ ___DEFINE_XEN_GUEST_HANDLE(const_##name, const type) -#define DEFINE_XEN_GUEST_HANDLE(name) __DEFINE_XEN_GUEST_HANDLE(name, name) -#define __XEN_GUEST_HANDLE(name) __guest_handle_64_ ## name -#define XEN_GUEST_HANDLE(name) __XEN_GUEST_HANDLE(name) +#define DEFINE_XEN_GUEST_HANDLE(name) __DEFINE_XEN_GUEST_HANDLE(name, name) +#define __XEN_GUEST_HANDLE(name) __guest_handle_64_ ## name +#define XEN_GUEST_HANDLE(name) __XEN_GUEST_HANDLE(name) /* this is going to be changed on 64 bit */ -#define XEN_GUEST_HANDLE_PARAM(name) __guest_handle_ ## name +#define XEN_GUEST_HANDLE_PARAM(name) __guest_handle_ ## name #define set_xen_guest_handle_raw(hnd, val) \ do { \ typeof(&(hnd)) _sxghr_tmp = &(hnd); \ _sxghr_tmp->q = 0; \ _sxghr_tmp->p = val; \ } while ( 0 ) -#ifdef __XEN_TOOLS__ + #ifdef __XEN_TOOLS__ #define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0) -#endif -#define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val) + #endif +#define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val) -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) + #if defined (__GNUC__) && !defined (__STRICT_ANSI__) /* Anonymous union includes both 32- and 64-bit names (e.g., r0/x0). */ -# define __DECL_REG(n64, n32) union { \ +#define __DECL_REG(n64, n32) union { \ UINT64 n64; \ UINT32 n32; \ } -#else + #else /* Non-gcc sources must always use the proper 64-bit name (e.g., x0). */ -#define __DECL_REG(n64, n32) UINT64 n64 -#endif - -struct vcpu_guest_core_regs -{ - /* Aarch64 Aarch32 */ - __DECL_REG(x0, r0_usr); - __DECL_REG(x1, r1_usr); - __DECL_REG(x2, r2_usr); - __DECL_REG(x3, r3_usr); - __DECL_REG(x4, r4_usr); - __DECL_REG(x5, r5_usr); - __DECL_REG(x6, r6_usr); - __DECL_REG(x7, r7_usr); - __DECL_REG(x8, r8_usr); - __DECL_REG(x9, r9_usr); - __DECL_REG(x10, r10_usr); - __DECL_REG(x11, r11_usr); - __DECL_REG(x12, r12_usr); - - __DECL_REG(x13, sp_usr); - __DECL_REG(x14, lr_usr); - - __DECL_REG(x15, __unused_sp_hyp); - - __DECL_REG(x16, lr_irq); - __DECL_REG(x17, sp_irq); - - __DECL_REG(x18, lr_svc); - __DECL_REG(x19, sp_svc); - - __DECL_REG(x20, lr_abt); - __DECL_REG(x21, sp_abt); - - __DECL_REG(x22, lr_und); - __DECL_REG(x23, sp_und); - - __DECL_REG(x24, r8_fiq); - __DECL_REG(x25, r9_fiq); - __DECL_REG(x26, r10_fiq); - __DECL_REG(x27, r11_fiq); - __DECL_REG(x28, r12_fiq); - - __DECL_REG(x29, sp_fiq); - __DECL_REG(x30, lr_fiq); - - /* Return address and mode */ - __DECL_REG(pc64, pc32); /* ELR_EL2 */ - UINT32 cpsr; /* SPSR_EL2 */ - - union { - UINT32 spsr_el1; /* AArch64 */ - UINT32 spsr_svc; /* AArch32 */ - }; - - /* AArch32 guests only */ - UINT32 spsr_fiq, spsr_irq, spsr_und, spsr_abt; - - /* AArch64 guests only */ - UINT64 sp_el0; - UINT64 sp_el1, elr_el1; +#define __DECL_REG(n64, n32) UINT64 n64 + #endif + +struct vcpu_guest_core_regs { + /* Aarch64 Aarch32 */ + __DECL_REG (x0, r0_usr); + __DECL_REG (x1, r1_usr); + __DECL_REG (x2, r2_usr); + __DECL_REG (x3, r3_usr); + __DECL_REG (x4, r4_usr); + __DECL_REG (x5, r5_usr); + __DECL_REG (x6, r6_usr); + __DECL_REG (x7, r7_usr); + __DECL_REG (x8, r8_usr); + __DECL_REG (x9, r9_usr); + __DECL_REG (x10, r10_usr); + __DECL_REG (x11, r11_usr); + __DECL_REG (x12, r12_usr); + + __DECL_REG (x13, sp_usr); + __DECL_REG (x14, lr_usr); + + __DECL_REG (x15, __unused_sp_hyp); + + __DECL_REG (x16, lr_irq); + __DECL_REG (x17, sp_irq); + + __DECL_REG (x18, lr_svc); + __DECL_REG (x19, sp_svc); + + __DECL_REG (x20, lr_abt); + __DECL_REG (x21, sp_abt); + + __DECL_REG (x22, lr_und); + __DECL_REG (x23, sp_und); + + __DECL_REG (x24, r8_fiq); + __DECL_REG (x25, r9_fiq); + __DECL_REG (x26, r10_fiq); + __DECL_REG (x27, r11_fiq); + __DECL_REG (x28, r12_fiq); + + __DECL_REG (x29, sp_fiq); + __DECL_REG (x30, lr_fiq); + + /* Return address and mode */ + __DECL_REG (pc64, pc32); /* ELR_EL2 */ + UINT32 cpsr; /* SPSR_EL2 */ + + union { + UINT32 spsr_el1; /* AArch64 */ + UINT32 spsr_svc; /* AArch32 */ + }; + + /* AArch32 guests only */ + UINT32 spsr_fiq, spsr_irq, spsr_und, spsr_abt; + + /* AArch64 guests only */ + UINT64 sp_el0; + UINT64 sp_el1, elr_el1; }; + typedef struct vcpu_guest_core_regs vcpu_guest_core_regs_t; -DEFINE_XEN_GUEST_HANDLE(vcpu_guest_core_regs_t); +DEFINE_XEN_GUEST_HANDLE (vcpu_guest_core_regs_t); -#undef __DECL_REG + #undef __DECL_REG typedef UINT64 xen_pfn_t; -#define PRI_xen_pfn PRIx64 +#define PRI_xen_pfn PRIx64 /* Maximum number of virtual CPUs in legacy multi-processor guests. */ /* Only one. All other VCPUS must use VCPUOP_register_vcpu_info */ -#define XEN_LEGACY_MAX_VCPUS 1 +#define XEN_LEGACY_MAX_VCPUS 1 typedef UINT64 xen_ulong_t; -#define PRI_xen_ulong PRIx64 +#define PRI_xen_ulong PRIx64 -#if defined(__XEN__) || defined(__XEN_TOOLS__) + #if defined (__XEN__) || defined (__XEN_TOOLS__) struct vcpu_guest_context { -#define _VGCF_online 0 -#define VGCF_online (1<<_VGCF_online) - UINT32 flags; /* VGCF_* */ + #define _VGCF_online 0 + #define VGCF_online (1<<_VGCF_online) + UINT32 flags; /* VGCF_* */ - struct vcpu_guest_core_regs user_regs; /* Core CPU registers */ + struct vcpu_guest_core_regs user_regs; /* Core CPU registers */ - UINT32 sctlr; - UINT64 ttbcr, ttbr0, ttbr1; + UINT32 sctlr; + UINT64 ttbcr, ttbr0, ttbr1; }; + typedef struct vcpu_guest_context vcpu_guest_context_t; -DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t); -#endif +DEFINE_XEN_GUEST_HANDLE (vcpu_guest_context_t); + #endif struct arch_vcpu_info { }; + typedef struct arch_vcpu_info arch_vcpu_info_t; struct arch_shared_info { }; + typedef struct arch_shared_info arch_shared_info_t; -typedef UINT64 xen_callback_t; +typedef UINT64 xen_callback_t; #endif -#if defined(__XEN__) || defined(__XEN_TOOLS__) +#if defined (__XEN__) || defined (__XEN_TOOLS__) /* PSR bits (CPSR, SPSR)*/ @@ -314,30 +317,30 @@ typedef UINT64 xen_callback_t; #define PSR_JAZELLE (1<<24) /* Jazelle Mode */ /* 32 bit modes */ -#define PSR_MODE_USR 0x10 -#define PSR_MODE_FIQ 0x11 -#define PSR_MODE_IRQ 0x12 -#define PSR_MODE_SVC 0x13 -#define PSR_MODE_MON 0x16 -#define PSR_MODE_ABT 0x17 -#define PSR_MODE_HYP 0x1a -#define PSR_MODE_UND 0x1b -#define PSR_MODE_SYS 0x1f +#define PSR_MODE_USR 0x10 +#define PSR_MODE_FIQ 0x11 +#define PSR_MODE_IRQ 0x12 +#define PSR_MODE_SVC 0x13 +#define PSR_MODE_MON 0x16 +#define PSR_MODE_ABT 0x17 +#define PSR_MODE_HYP 0x1a +#define PSR_MODE_UND 0x1b +#define PSR_MODE_SYS 0x1f /* 64 bit modes */ -#define PSR_MODE_BIT 0x10 /* Set iff AArch32 */ -#define PSR_MODE_EL3h 0x0d -#define PSR_MODE_EL3t 0x0c -#define PSR_MODE_EL2h 0x09 -#define PSR_MODE_EL2t 0x08 -#define PSR_MODE_EL1h 0x05 -#define PSR_MODE_EL1t 0x04 -#define PSR_MODE_EL0t 0x00 +#define PSR_MODE_BIT 0x10/* Set iff AArch32 */ +#define PSR_MODE_EL3h 0x0d +#define PSR_MODE_EL3t 0x0c +#define PSR_MODE_EL2h 0x09 +#define PSR_MODE_EL2t 0x08 +#define PSR_MODE_EL1h 0x05 +#define PSR_MODE_EL1t 0x04 +#define PSR_MODE_EL0t 0x00 #define PSR_GUEST32_INIT (PSR_ABT_MASK|PSR_FIQ_MASK|PSR_IRQ_MASK|PSR_MODE_SVC) -#define PSR_GUEST64_INIT (PSR_ABT_MASK|PSR_FIQ_MASK|PSR_IRQ_MASK|PSR_MODE_EL1h) +#define PSR_GUEST64_INIT (PSR_ABT_MASK|PSR_FIQ_MASK|PSR_IRQ_MASK|PSR_MODE_EL1h) -#define SCTLR_GUEST_INIT 0x00c50078 +#define SCTLR_GUEST_INIT 0x00c50078 /* * Virtual machine platform (memory layout, interrupts) @@ -354,56 +357,56 @@ typedef UINT64 xen_callback_t; */ /* vGIC v2 mappings */ -#define GUEST_GICD_BASE 0x03001000ULL -#define GUEST_GICD_SIZE 0x00001000ULL -#define GUEST_GICC_BASE 0x03002000ULL -#define GUEST_GICC_SIZE 0x00000100ULL +#define GUEST_GICD_BASE 0x03001000ULL +#define GUEST_GICD_SIZE 0x00001000ULL +#define GUEST_GICC_BASE 0x03002000ULL +#define GUEST_GICC_SIZE 0x00000100ULL /* vGIC v3 mappings */ -#define GUEST_GICV3_GICD_BASE 0x03001000ULL -#define GUEST_GICV3_GICD_SIZE 0x00010000ULL +#define GUEST_GICV3_GICD_BASE 0x03001000ULL +#define GUEST_GICV3_GICD_SIZE 0x00010000ULL #define GUEST_GICV3_RDIST_STRIDE 0x20000ULL #define GUEST_GICV3_RDIST_REGIONS 1 -#define GUEST_GICV3_GICR0_BASE 0x03020000ULL /* vCPU0 - vCPU7 */ -#define GUEST_GICV3_GICR0_SIZE 0x00100000ULL +#define GUEST_GICV3_GICR0_BASE 0x03020000ULL /* vCPU0 - vCPU7 */ +#define GUEST_GICV3_GICR0_SIZE 0x00100000ULL /* 16MB == 4096 pages reserved for guest to use as a region to map its * grant table in. */ -#define GUEST_GNTTAB_BASE 0x38000000ULL -#define GUEST_GNTTAB_SIZE 0x01000000ULL +#define GUEST_GNTTAB_BASE 0x38000000ULL +#define GUEST_GNTTAB_SIZE 0x01000000ULL #define GUEST_MAGIC_BASE 0x39000000ULL #define GUEST_MAGIC_SIZE 0x01000000ULL -#define GUEST_RAM_BANKS 2 +#define GUEST_RAM_BANKS 2 -#define GUEST_RAM0_BASE 0x40000000ULL /* 3GB of low RAM @ 1GB */ -#define GUEST_RAM0_SIZE 0xc0000000ULL +#define GUEST_RAM0_BASE 0x40000000ULL /* 3GB of low RAM @ 1GB */ +#define GUEST_RAM0_SIZE 0xc0000000ULL -#define GUEST_RAM1_BASE 0x0200000000ULL /* 1016GB of RAM @ 8GB */ -#define GUEST_RAM1_SIZE 0xfe00000000ULL +#define GUEST_RAM1_BASE 0x0200000000ULL /* 1016GB of RAM @ 8GB */ +#define GUEST_RAM1_SIZE 0xfe00000000ULL -#define GUEST_RAM_BASE GUEST_RAM0_BASE /* Lowest RAM address */ +#define GUEST_RAM_BASE GUEST_RAM0_BASE /* Lowest RAM address */ /* Largest amount of actual RAM, not including holes */ -#define GUEST_RAM_MAX (GUEST_RAM0_SIZE + GUEST_RAM1_SIZE) +#define GUEST_RAM_MAX (GUEST_RAM0_SIZE + GUEST_RAM1_SIZE) /* Suitable for e.g. const uint64_t ramfoo[] = GUEST_RAM_BANK_FOOS; */ -#define GUEST_RAM_BANK_BASES { GUEST_RAM0_BASE, GUEST_RAM1_BASE } -#define GUEST_RAM_BANK_SIZES { GUEST_RAM0_SIZE, GUEST_RAM1_SIZE } +#define GUEST_RAM_BANK_BASES { GUEST_RAM0_BASE, GUEST_RAM1_BASE } +#define GUEST_RAM_BANK_SIZES { GUEST_RAM0_SIZE, GUEST_RAM1_SIZE } /* Interrupts */ -#define GUEST_TIMER_VIRT_PPI 27 -#define GUEST_TIMER_PHYS_S_PPI 29 -#define GUEST_TIMER_PHYS_NS_PPI 30 -#define GUEST_EVTCHN_PPI 31 +#define GUEST_TIMER_VIRT_PPI 27 +#define GUEST_TIMER_PHYS_S_PPI 29 +#define GUEST_TIMER_PHYS_NS_PPI 30 +#define GUEST_EVTCHN_PPI 31 /* PSCI functions */ -#define PSCI_cpu_suspend 0 -#define PSCI_cpu_off 1 -#define PSCI_cpu_on 2 -#define PSCI_migrate 3 +#define PSCI_cpu_suspend 0 +#define PSCI_cpu_off 1 +#define PSCI_cpu_on 2 +#define PSCI_migrate 3 #endif diff --git a/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/hvm/start_info.h b/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/hvm/start_info.h index 15708d6dd5..1922415de8 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/hvm/start_info.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/hvm/start_info.h @@ -84,7 +84,7 @@ * of the structure must check that memmap_entries is non-zero * before trying to read the memory map. */ -#define XEN_HVM_START_MAGIC_VALUE 0x336ec578 +#define XEN_HVM_START_MAGIC_VALUE 0x336ec578 /* * The values used in the type field of the memory map table entries are @@ -107,37 +107,37 @@ * represent the layout described there using C types. */ struct hvm_start_info { - UINT32 magic; /* Contains the magic value 0x336ec578 */ + UINT32 magic; /* Contains the magic value 0x336ec578 */ /* ("xEn3" with the 0x80 bit of the "E" set).*/ - UINT32 version; /* Version of this structure. */ - UINT32 flags; /* SIF_xxx flags. */ - UINT32 nr_modules; /* Number of modules passed to the kernel. */ - UINT64 modlist_paddr; /* Physical address of an array of */ + UINT32 version; /* Version of this structure. */ + UINT32 flags; /* SIF_xxx flags. */ + UINT32 nr_modules; /* Number of modules passed to the kernel. */ + UINT64 modlist_paddr; /* Physical address of an array of */ /* hvm_modlist_entry. */ - UINT64 cmdline_paddr; /* Physical address of the command line. */ - UINT64 rsdp_paddr; /* Physical address of the RSDP ACPI data */ + UINT64 cmdline_paddr; /* Physical address of the command line. */ + UINT64 rsdp_paddr; /* Physical address of the RSDP ACPI data */ /* structure. */ - /* All following fields only present in version 1 and newer */ - UINT64 memmap_paddr; /* Physical address of an array of */ + /* All following fields only present in version 1 and newer */ + UINT64 memmap_paddr; /* Physical address of an array of */ /* hvm_memmap_table_entry. */ - UINT32 memmap_entries; /* Number of entries in the memmap table. */ + UINT32 memmap_entries; /* Number of entries in the memmap table. */ /* Value will be zero if there is no memory */ /* map being provided. */ - UINT32 reserved; /* Must be zero. */ + UINT32 reserved; /* Must be zero. */ }; struct hvm_modlist_entry { - UINT64 paddr; /* Physical address of the module. */ - UINT64 size; /* Size of the module in bytes. */ - UINT64 cmdline_paddr; /* Physical address of the command line. */ - UINT64 reserved; + UINT64 paddr; /* Physical address of the module. */ + UINT64 size; /* Size of the module in bytes. */ + UINT64 cmdline_paddr; /* Physical address of the command line. */ + UINT64 reserved; }; struct hvm_memmap_table_entry { - UINT64 addr; /* Base address of the memory region */ - UINT64 size; /* Size of the memory region in bytes */ - UINT32 type; /* Mapping type */ - UINT32 reserved; /* Must be zero for Version 1. */ + UINT64 addr; /* Base address of the memory region */ + UINT64 size; /* Size of the memory region in bytes */ + UINT32 type; /* Mapping type */ + UINT32 reserved; /* Must be zero for Version 1. */ }; #endif /* __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__ */ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/xen-x86_32.h b/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/xen-x86_32.h index 0314877f0b..caa4df5e80 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/xen-x86_32.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/xen-x86_32.h @@ -23,9 +23,10 @@ #ifndef __ASSEMBLY__ struct arch_vcpu_info { - UINTN cr2; - UINTN pad[5]; /* sizeof(vcpu_info_t) == 64 */ + UINTN cr2; + UINTN pad[5]; /* sizeof(vcpu_info_t) == 64 */ }; + typedef struct arch_vcpu_info arch_vcpu_info_t; #endif /* !__ASSEMBLY__ */ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/xen-x86_64.h b/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/xen-x86_64.h index c8f54c5746..76027b361c 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/xen-x86_64.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/xen-x86_64.h @@ -23,9 +23,10 @@ #ifndef __ASSEMBLY__ struct arch_vcpu_info { - UINTN cr2; - UINTN pad; /* sizeof(vcpu_info_t) == 64 */ + UINTN cr2; + UINTN pad; /* sizeof(vcpu_info_t) == 64 */ }; + typedef struct arch_vcpu_info arch_vcpu_info_t; #endif /* !__ASSEMBLY__ */ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/xen.h b/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/xen.h index 3c07c59f38..ecf2047ee8 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/xen.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/arch-x86/xen.h @@ -14,13 +14,13 @@ #define __XEN_PUBLIC_ARCH_X86_XEN_H__ /* Structural guest handles introduced in 0x00030201. */ -#if __XEN_INTERFACE_VERSION__ >= 0x00030201 + #if __XEN_INTERFACE_VERSION__ >= 0x00030201 #define ___DEFINE_XEN_GUEST_HANDLE(name, type) \ typedef struct { type *p; } __guest_handle_ ## name -#else + #else #define ___DEFINE_XEN_GUEST_HANDLE(name, type) \ typedef type * __guest_handle_ ## name -#endif + #endif /* * XEN_GUEST_HANDLE represents a guest pointer, when passed as a field @@ -33,55 +33,56 @@ #define __DEFINE_XEN_GUEST_HANDLE(name, type) \ ___DEFINE_XEN_GUEST_HANDLE(name, type); \ ___DEFINE_XEN_GUEST_HANDLE(const_##name, const type) -#define DEFINE_XEN_GUEST_HANDLE(name) __DEFINE_XEN_GUEST_HANDLE(name, name) -#define __XEN_GUEST_HANDLE(name) __guest_handle_ ## name -#define XEN_GUEST_HANDLE(name) __XEN_GUEST_HANDLE(name) -#define XEN_GUEST_HANDLE_PARAM(name) XEN_GUEST_HANDLE(name) +#define DEFINE_XEN_GUEST_HANDLE(name) __DEFINE_XEN_GUEST_HANDLE(name, name) +#define __XEN_GUEST_HANDLE(name) __guest_handle_ ## name +#define XEN_GUEST_HANDLE(name) __XEN_GUEST_HANDLE(name) +#define XEN_GUEST_HANDLE_PARAM(name) XEN_GUEST_HANDLE(name) #define set_xen_guest_handle_raw(hnd, val) do { (hnd).p = val; } while (0) -#ifdef __XEN_TOOLS__ + #ifdef __XEN_TOOLS__ #define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0) -#endif -#define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val) + #endif +#define set_xen_guest_handle(hnd, val) set_xen_guest_handle_raw(hnd, val) -#if defined(MDE_CPU_IA32) -#include "xen-x86_32.h" -#elif defined(MDE_CPU_X64) -#include "xen-x86_64.h" -#endif + #if defined (MDE_CPU_IA32) + #include "xen-x86_32.h" + #elif defined (MDE_CPU_X64) + #include "xen-x86_64.h" + #endif -#ifndef __ASSEMBLY__ + #ifndef __ASSEMBLY__ typedef UINTN xen_pfn_t; -#define PRI_xen_pfn "lx" -#endif +#define PRI_xen_pfn "lx" + #endif -#define XEN_HAVE_PV_UPCALL_MASK 1 +#define XEN_HAVE_PV_UPCALL_MASK 1 /* Maximum number of virtual CPUs in legacy multi-processor guests. */ -#define XEN_LEGACY_MAX_VCPUS 32 +#define XEN_LEGACY_MAX_VCPUS 32 -#ifndef __ASSEMBLY__ + #ifndef __ASSEMBLY__ typedef UINTN xen_ulong_t; -#define PRI_xen_ulong "lx" +#define PRI_xen_ulong "lx" typedef UINT64 tsc_timestamp_t; /* RDTSC timestamp */ -#ifdef MDE_CPU_IA32 -#pragma pack(4) -#endif + #ifdef MDE_CPU_IA32 + #pragma pack(4) + #endif struct arch_shared_info { - UINTN max_pfn; /* max pfn that appears in table */ - /* Frame containing list of mfns containing list of mfns containing p2m. */ - xen_pfn_t pfn_to_mfn_frame_list_list; - UINTN nmi_reason; - UINT64 pad[32]; + UINTN max_pfn; /* max pfn that appears in table */ + /* Frame containing list of mfns containing list of mfns containing p2m. */ + xen_pfn_t pfn_to_mfn_frame_list_list; + UINTN nmi_reason; + UINT64 pad[32]; }; + typedef struct arch_shared_info arch_shared_info_t; -#ifdef MDE_CPU_IA32 -#pragma pack() -#endif + #ifdef MDE_CPU_IA32 + #pragma pack() + #endif -#endif /* !__ASSEMBLY__ */ + #endif /* !__ASSEMBLY__ */ #endif /* __XEN_PUBLIC_ARCH_X86_XEN_H__ */ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/event_channel.h b/OvmfPkg/Include/IndustryStandard/Xen/event_channel.h index 4fff5654af..0e2554ee30 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/event_channel.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/event_channel.h @@ -44,13 +44,13 @@ */ /* ` enum event_channel_op { // EVTCHNOP_* => struct evtchn_* */ -#define EVTCHNOP_close 3 -#define EVTCHNOP_send 4 -#define EVTCHNOP_alloc_unbound 6 +#define EVTCHNOP_close 3 +#define EVTCHNOP_send 4 +#define EVTCHNOP_alloc_unbound 6 /* ` } */ typedef UINT32 evtchn_port_t; -DEFINE_XEN_GUEST_HANDLE(evtchn_port_t); +DEFINE_XEN_GUEST_HANDLE (evtchn_port_t); /* * EVTCHNOP_alloc_unbound: Allocate a port in domain and mark as @@ -61,11 +61,12 @@ DEFINE_XEN_GUEST_HANDLE(evtchn_port_t); * 2. may be DOMID_SELF, allowing loopback connections. */ struct evtchn_alloc_unbound { - /* IN parameters */ - domid_t dom, remote_dom; - /* OUT parameters */ - evtchn_port_t port; + /* IN parameters */ + domid_t dom, remote_dom; + /* OUT parameters */ + evtchn_port_t port; }; + typedef struct evtchn_alloc_unbound evtchn_alloc_unbound_t; /* @@ -74,9 +75,10 @@ typedef struct evtchn_alloc_unbound evtchn_alloc_unbound_t; * (EVTCHNSTAT_unbound), awaiting a new connection. */ struct evtchn_close { - /* IN parameters. */ - evtchn_port_t port; + /* IN parameters. */ + evtchn_port_t port; }; + typedef struct evtchn_close evtchn_close_t; /* @@ -84,9 +86,10 @@ typedef struct evtchn_close evtchn_close_t; * endpoint is . */ struct evtchn_send { - /* IN parameters. */ - evtchn_port_t port; + /* IN parameters. */ + evtchn_port_t port; }; + typedef struct evtchn_send evtchn_send_t; #endif /* __XEN_PUBLIC_EVENT_CHANNEL_H__ */ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/grant_table.h b/OvmfPkg/Include/IndustryStandard/Xen/grant_table.h index 54af1dbc38..b2adaec346 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/grant_table.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/grant_table.h @@ -109,28 +109,30 @@ typedef UINT32 grant_ref_t; * for backwards compatibility. New guests should use version 2. */ #if __XEN_INTERFACE_VERSION__ < 0x0003020a -#define grant_entry_v1 grant_entry -#define grant_entry_v1_t grant_entry_t +#define grant_entry_v1 grant_entry +#define grant_entry_v1_t grant_entry_t #endif struct grant_entry_v1 { - /* GTF_xxx: various type and flag information. [XEN,GST] */ - UINT16 flags; - /* The domain being granted foreign privileges. [GST] */ - domid_t domid; - /* - * GTF_permit_access: Frame that @domid is allowed to map and access. [GST] - * GTF_accept_transfer: Frame whose ownership transferred by @domid. [XEN] - */ - UINT32 frame; + /* GTF_xxx: various type and flag information. [XEN,GST] */ + UINT16 flags; + /* The domain being granted foreign privileges. [GST] */ + domid_t domid; + + /* + * GTF_permit_access: Frame that @domid is allowed to map and access. [GST] + * GTF_accept_transfer: Frame whose ownership transferred by @domid. [XEN] + */ + UINT32 frame; }; + typedef struct grant_entry_v1 grant_entry_v1_t; /* The first few grant table entries will be preserved across grant table * version changes and may be pre-populated at domain creation by tools. */ -#define GNTTAB_NR_RESERVED_ENTRIES 8 -#define GNTTAB_RESERVED_CONSOLE 0 -#define GNTTAB_RESERVED_XENSTORE 1 +#define GNTTAB_NR_RESERVED_ENTRIES 8 +#define GNTTAB_RESERVED_CONSOLE 0 +#define GNTTAB_RESERVED_XENSTORE 1 /* * Type of grant entry. @@ -141,11 +143,11 @@ typedef struct grant_entry_v1 grant_entry_v1_t; * GTF_transitive: Allow @domid to transitively access a subrange of * @trans_grant in @trans_domid. No mappings are allowed. */ -#define GTF_invalid (0U<<0) -#define GTF_permit_access (1U<<0) -#define GTF_accept_transfer (2U<<0) -#define GTF_transitive (3U<<0) -#define GTF_type_mask (3U<<0) +#define GTF_invalid (0U<<0) +#define GTF_permit_access (1U<<0) +#define GTF_accept_transfer (2U<<0) +#define GTF_transitive (3U<<0) +#define GTF_type_mask (3U<<0) /* * Subflags for GTF_permit_access. @@ -157,20 +159,20 @@ typedef struct grant_entry_v1 grant_entry_v1_t; * will only be allowed to copy from the grant, and not * map it. [GST] */ -#define _GTF_readonly (2) -#define GTF_readonly (1U<<_GTF_readonly) -#define _GTF_reading (3) -#define GTF_reading (1U<<_GTF_reading) -#define _GTF_writing (4) -#define GTF_writing (1U<<_GTF_writing) -#define _GTF_PWT (5) -#define GTF_PWT (1U<<_GTF_PWT) -#define _GTF_PCD (6) -#define GTF_PCD (1U<<_GTF_PCD) -#define _GTF_PAT (7) -#define GTF_PAT (1U<<_GTF_PAT) -#define _GTF_sub_page (8) -#define GTF_sub_page (1U<<_GTF_sub_page) +#define _GTF_readonly (2) +#define GTF_readonly (1U<<_GTF_readonly) +#define _GTF_reading (3) +#define GTF_reading (1U<<_GTF_reading) +#define _GTF_writing (4) +#define GTF_writing (1U<<_GTF_writing) +#define _GTF_PWT (5) +#define GTF_PWT (1U<<_GTF_PWT) +#define _GTF_PCD (6) +#define GTF_PCD (1U<<_GTF_PCD) +#define _GTF_PAT (7) +#define GTF_PAT (1U<<_GTF_PAT) +#define _GTF_sub_page (8) +#define GTF_sub_page (1U<<_GTF_sub_page) /* * Subflags for GTF_accept_transfer: @@ -182,10 +184,10 @@ typedef struct grant_entry_v1 grant_entry_v1_t; * after reading GTF_transfer_committed. Xen will always write the frame * address, followed by ORing this flag, in a timely manner. */ -#define _GTF_transfer_committed (2) -#define GTF_transfer_committed (1U<<_GTF_transfer_committed) -#define _GTF_transfer_completed (3) -#define GTF_transfer_completed (1U<<_GTF_transfer_completed) +#define _GTF_transfer_committed (2) +#define GTF_transfer_committed (1U<<_GTF_transfer_committed) +#define _GTF_transfer_completed (3) +#define GTF_transfer_completed (1U<<_GTF_transfer_completed) /* * Version 2 grant table entries. These fulfil the same role as @@ -197,68 +199,71 @@ typedef struct grant_entry_v1 grant_entry_v1_t; * on the grant table version in use by the other domain. */ #if __XEN_INTERFACE_VERSION__ >= 0x0003020a + /* * Version 1 and version 2 grant entries share a common prefix. The * fields of the prefix are documented as part of struct * grant_entry_v1. */ struct grant_entry_header { - UINT16 flags; - domid_t domid; + UINT16 flags; + domid_t domid; }; + typedef struct grant_entry_header grant_entry_header_t; /* * Version 2 of the grant entry structure. */ union grant_entry_v2 { - grant_entry_header_t hdr; - - /* - * This member is used for V1-style full page grants, where either: - * - * -- hdr.type is GTF_accept_transfer, or - * -- hdr.type is GTF_permit_access and GTF_sub_page is not set. - * - * In that case, the frame field has the same semantics as the - * field of the same name in the V1 entry structure. - */ - struct { - grant_entry_header_t hdr; - UINT32 pad0; - UINT64 frame; - } full_page; - - /* - * If the grant type is GTF_grant_access and GTF_sub_page is set, - * @domid is allowed to access bytes [@page_off,@page_off+@length) - * in frame @frame. - */ - struct { - grant_entry_header_t hdr; - UINT16 page_off; - UINT16 length; - UINT64 frame; - } sub_page; - - /* - * If the grant is GTF_transitive, @domid is allowed to use the - * grant @gref in domain @trans_domid, as if it was the local - * domain. Obviously, the transitive access must be compatible - * with the original grant. - * - * The current version of Xen does not allow transitive grants - * to be mapped. - */ - struct { - grant_entry_header_t hdr; - domid_t trans_domid; - UINT16 pad0; - grant_ref_t gref; - } transitive; - - UINT32 __spacer[4]; /* Pad to a power of two */ + grant_entry_header_t hdr; + + /* + * This member is used for V1-style full page grants, where either: + * + * -- hdr.type is GTF_accept_transfer, or + * -- hdr.type is GTF_permit_access and GTF_sub_page is not set. + * + * In that case, the frame field has the same semantics as the + * field of the same name in the V1 entry structure. + */ + struct { + grant_entry_header_t hdr; + UINT32 pad0; + UINT64 frame; + } full_page; + + /* + * If the grant type is GTF_grant_access and GTF_sub_page is set, + * @domid is allowed to access bytes [@page_off,@page_off+@length) + * in frame @frame. + */ + struct { + grant_entry_header_t hdr; + UINT16 page_off; + UINT16 length; + UINT64 frame; + } sub_page; + + /* + * If the grant is GTF_transitive, @domid is allowed to use the + * grant @gref in domain @trans_domid, as if it was the local + * domain. Obviously, the transitive access must be compatible + * with the original grant. + * + * The current version of Xen does not allow transitive grants + * to be mapped. + */ + struct { + grant_entry_header_t hdr; + domid_t trans_domid; + UINT16 pad0; + grant_ref_t gref; + } transitive; + + UINT32 __spacer[4]; /* Pad to a power of two */ }; + typedef union grant_entry_v2 grant_entry_v2_t; typedef UINT16 grant_status_t; @@ -280,8 +285,8 @@ typedef UINT16 grant_status_t; */ /* ` enum grant_table_op { // GNTTABOP_* => struct gnttab_* */ -#define GNTTABOP_map_grant_ref 0 -#define GNTTABOP_unmap_grant_ref 1 +#define GNTTABOP_map_grant_ref 0 +#define GNTTABOP_unmap_grant_ref 1 /* ` } */ /* @@ -307,18 +312,19 @@ typedef UINT32 grant_handle_t; * to be accounted to the correct grant reference! */ struct gnttab_map_grant_ref { - /* IN parameters. */ - UINT64 host_addr; - UINT32 flags; /* GNTMAP_* */ - grant_ref_t ref; - domid_t dom; - /* OUT parameters. */ - INT16 status; /* => enum grant_status */ - grant_handle_t handle; - UINT64 dev_bus_addr; + /* IN parameters. */ + UINT64 host_addr; + UINT32 flags; /* GNTMAP_* */ + grant_ref_t ref; + domid_t dom; + /* OUT parameters. */ + INT16 status; /* => enum grant_status */ + grant_handle_t handle; + UINT64 dev_bus_addr; }; + typedef struct gnttab_map_grant_ref gnttab_map_grant_ref_t; -DEFINE_XEN_GUEST_HANDLE(gnttab_map_grant_ref_t); +DEFINE_XEN_GUEST_HANDLE (gnttab_map_grant_ref_t); /* * GNTTABOP_unmap_grant_ref: Destroy one or more grant-reference mappings @@ -332,74 +338,76 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_map_grant_ref_t); * mappings will remain in the device or host TLBs. */ struct gnttab_unmap_grant_ref { - /* IN parameters. */ - UINT64 host_addr; - UINT64 dev_bus_addr; - grant_handle_t handle; - /* OUT parameters. */ - INT16 status; /* => enum grant_status */ + /* IN parameters. */ + UINT64 host_addr; + UINT64 dev_bus_addr; + grant_handle_t handle; + /* OUT parameters. */ + INT16 status; /* => enum grant_status */ }; + typedef struct gnttab_unmap_grant_ref gnttab_unmap_grant_ref_t; -DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_grant_ref_t); +DEFINE_XEN_GUEST_HANDLE (gnttab_unmap_grant_ref_t); /* * Bitfield values for gnttab_map_grant_ref.flags. */ - /* Map the grant entry for access by I/O devices. */ -#define _GNTMAP_device_map (0) -#define GNTMAP_device_map (1<<_GNTMAP_device_map) - /* Map the grant entry for access by host CPUs. */ -#define _GNTMAP_host_map (1) -#define GNTMAP_host_map (1<<_GNTMAP_host_map) - /* Accesses to the granted frame will be restricted to read-only access. */ -#define _GNTMAP_readonly (2) -#define GNTMAP_readonly (1<<_GNTMAP_readonly) - /* - * GNTMAP_host_map subflag: - * 0 => The host mapping is usable only by the guest OS. - * 1 => The host mapping is usable by guest OS + current application. - */ -#define _GNTMAP_application_map (3) -#define GNTMAP_application_map (1<<_GNTMAP_application_map) - - /* - * GNTMAP_contains_pte subflag: - * 0 => This map request contains a host virtual address. - * 1 => This map request contains the machine address of the PTE to update. - */ -#define _GNTMAP_contains_pte (4) -#define GNTMAP_contains_pte (1<<_GNTMAP_contains_pte) - -#define _GNTMAP_can_fail (5) -#define GNTMAP_can_fail (1<<_GNTMAP_can_fail) +/* Map the grant entry for access by I/O devices. */ +#define _GNTMAP_device_map (0) +#define GNTMAP_device_map (1<<_GNTMAP_device_map) +/* Map the grant entry for access by host CPUs. */ +#define _GNTMAP_host_map (1) +#define GNTMAP_host_map (1<<_GNTMAP_host_map) +/* Accesses to the granted frame will be restricted to read-only access. */ +#define _GNTMAP_readonly (2) +#define GNTMAP_readonly (1<<_GNTMAP_readonly) + +/* + * GNTMAP_host_map subflag: + * 0 => The host mapping is usable only by the guest OS. + * 1 => The host mapping is usable by guest OS + current application. + */ +#define _GNTMAP_application_map (3) +#define GNTMAP_application_map (1<<_GNTMAP_application_map) + +/* + * GNTMAP_contains_pte subflag: + * 0 => This map request contains a host virtual address. + * 1 => This map request contains the machine address of the PTE to update. + */ +#define _GNTMAP_contains_pte (4) +#define GNTMAP_contains_pte (1<<_GNTMAP_contains_pte) + +#define _GNTMAP_can_fail (5) +#define GNTMAP_can_fail (1<<_GNTMAP_can_fail) /* * Bits to be placed in guest kernel available PTE bits (architecture * dependent; only supported when XENFEAT_gnttab_map_avail_bits is set). */ -#define _GNTMAP_guest_avail0 (16) -#define GNTMAP_guest_avail_mask ((UINT32)~0 << _GNTMAP_guest_avail0) +#define _GNTMAP_guest_avail0 (16) +#define GNTMAP_guest_avail_mask ((UINT32)~0 << _GNTMAP_guest_avail0) /* * Values for error status returns. All errors are -ve. */ /* ` enum grant_status { */ -#define GNTST_okay (0) /* Normal return. */ -#define GNTST_general_error (-1) /* General undefined error. */ -#define GNTST_bad_domain (-2) /* Unrecognised domain id. */ -#define GNTST_bad_gntref (-3) /* Unrecognised or inappropriate gntref. */ -#define GNTST_bad_handle (-4) /* Unrecognised or inappropriate handle. */ -#define GNTST_bad_virt_addr (-5) /* Inappropriate virtual address to map. */ -#define GNTST_bad_dev_addr (-6) /* Inappropriate device address to unmap.*/ -#define GNTST_no_device_space (-7) /* Out of space in I/O MMU. */ -#define GNTST_permission_denied (-8) /* Not enough privilege for operation. */ -#define GNTST_bad_page (-9) /* Specified page was invalid for op. */ -#define GNTST_bad_copy_arg (-10) /* copy arguments cross page boundary. */ -#define GNTST_address_too_big (-11) /* transfer page address too large. */ -#define GNTST_eagain (-12) /* Operation not done; try again. */ +#define GNTST_okay (0) /* Normal return. */ +#define GNTST_general_error (-1) /* General undefined error. */ +#define GNTST_bad_domain (-2) /* Unrecognised domain id. */ +#define GNTST_bad_gntref (-3) /* Unrecognised or inappropriate gntref. */ +#define GNTST_bad_handle (-4) /* Unrecognised or inappropriate handle. */ +#define GNTST_bad_virt_addr (-5) /* Inappropriate virtual address to map. */ +#define GNTST_bad_dev_addr (-6) /* Inappropriate device address to unmap.*/ +#define GNTST_no_device_space (-7) /* Out of space in I/O MMU. */ +#define GNTST_permission_denied (-8) /* Not enough privilege for operation. */ +#define GNTST_bad_page (-9) /* Specified page was invalid for op. */ +#define GNTST_bad_copy_arg (-10) /* copy arguments cross page boundary. */ +#define GNTST_address_too_big (-11) /* transfer page address too large. */ +#define GNTST_eagain (-12) /* Operation not done; try again. */ /* ` } */ -#define GNTTABOP_error_msgs { \ +#define GNTTABOP_error_msgs { \ "okay", \ "undefined error", \ "unrecognised domain id", \ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/hvm/hvm_op.h b/OvmfPkg/Include/IndustryStandard/Xen/hvm/hvm_op.h index 5eca23c205..eb0d9a595f 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/hvm/hvm_op.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/hvm/hvm_op.h @@ -8,14 +8,15 @@ #include "../xen.h" /* Get/set subcommands: extra argument == pointer to xen_hvm_param struct. */ -#define HVMOP_set_param 0 -#define HVMOP_get_param 1 +#define HVMOP_set_param 0 +#define HVMOP_get_param 1 struct xen_hvm_param { - domid_t domid; /* IN */ - UINT32 index; /* IN */ - UINT64 value; /* IN/OUT */ + domid_t domid; /* IN */ + UINT32 index; /* IN */ + UINT64 value; /* IN/OUT */ }; + typedef struct xen_hvm_param xen_hvm_param_t; -DEFINE_XEN_GUEST_HANDLE(xen_hvm_param_t); +DEFINE_XEN_GUEST_HANDLE (xen_hvm_param_t); #endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/hvm/params.h b/OvmfPkg/Include/IndustryStandard/Xen/hvm/params.h index 15aa93e2f5..19c75468fc 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/hvm/params.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/hvm/params.h @@ -22,26 +22,26 @@ * method is available. * If val == 0 then CPU0 event-channel notifications are not delivered. */ -#define HVM_PARAM_CALLBACK_IRQ 0 +#define HVM_PARAM_CALLBACK_IRQ 0 /* * These are not used by Xen. They are here for convenience of HVM-guest * xenbus implementations. */ -#define HVM_PARAM_STORE_PFN 1 -#define HVM_PARAM_STORE_EVTCHN 2 +#define HVM_PARAM_STORE_PFN 1 +#define HVM_PARAM_STORE_EVTCHN 2 #define HVM_PARAM_PAE_ENABLED 4 -#define HVM_PARAM_IOREQ_PFN 5 +#define HVM_PARAM_IOREQ_PFN 5 -#define HVM_PARAM_BUFIOREQ_PFN 6 -#define HVM_PARAM_BUFIOREQ_EVTCHN 26 +#define HVM_PARAM_BUFIOREQ_PFN 6 +#define HVM_PARAM_BUFIOREQ_EVTCHN 26 -#if defined(MDE_CPU_IA32) || defined(MDE_CPU_X64) +#if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64) /* Expose Viridian interfaces to this HVM guest? */ -#define HVM_PARAM_VIRIDIAN 9 +#define HVM_PARAM_VIRIDIAN 9 #endif @@ -64,33 +64,33 @@ * Missed interrupts are collapsed together and delivered as one 'late tick'. * Guest time always tracks wallclock (i.e., real) time. */ -#define HVM_PARAM_TIMER_MODE 10 -#define HVMPTM_delay_for_missed_ticks 0 -#define HVMPTM_no_delay_for_missed_ticks 1 -#define HVMPTM_no_missed_ticks_pending 2 -#define HVMPTM_one_missed_tick_pending 3 +#define HVM_PARAM_TIMER_MODE 10 +#define HVMPTM_delay_for_missed_ticks 0 +#define HVMPTM_no_delay_for_missed_ticks 1 +#define HVMPTM_no_missed_ticks_pending 2 +#define HVMPTM_one_missed_tick_pending 3 /* Boolean: Enable virtual HPET (high-precision event timer)? (x86-only) */ -#define HVM_PARAM_HPET_ENABLED 11 +#define HVM_PARAM_HPET_ENABLED 11 /* Identity-map page directory used by Intel EPT when CR0.PG=0. */ -#define HVM_PARAM_IDENT_PT 12 +#define HVM_PARAM_IDENT_PT 12 /* Device Model domain, defaults to 0. */ -#define HVM_PARAM_DM_DOMAIN 13 +#define HVM_PARAM_DM_DOMAIN 13 /* ACPI S state: currently support S0 and S3 on x86. */ -#define HVM_PARAM_ACPI_S_STATE 14 +#define HVM_PARAM_ACPI_S_STATE 14 /* TSS used on Intel when CR0.PE=0. */ -#define HVM_PARAM_VM86_TSS 15 +#define HVM_PARAM_VM86_TSS 15 /* Boolean: Enable aligning all periodic vpts to reduce interrupts */ -#define HVM_PARAM_VPT_ALIGN 16 +#define HVM_PARAM_VPT_ALIGN 16 /* Console debug shared memory ring and event channel */ -#define HVM_PARAM_CONSOLE_PFN 17 -#define HVM_PARAM_CONSOLE_EVTCHN 18 +#define HVM_PARAM_CONSOLE_PFN 17 +#define HVM_PARAM_CONSOLE_EVTCHN 18 /* * Select location of ACPI PM1a and TMR control blocks. Currently two locations @@ -101,7 +101,7 @@ * PM1A_EVT == 0xb000; PM1A_CNT == 0xb004; PM_TMR == 0xb008 * You can find these address definitions in */ -#define HVM_PARAM_ACPI_IOPORTS_LOCATION 19 +#define HVM_PARAM_ACPI_IOPORTS_LOCATION 19 /* Enable blocking memory events, async or sync (pause vcpu until response) * onchangeonly indicates messages only on a change of value */ @@ -112,14 +112,14 @@ #define HVM_PARAM_MEMORY_EVENT_SINGLE_STEP 25 #define HVM_PARAM_MEMORY_EVENT_MSR 30 -#define HVMPME_MODE_MASK (3 << 0) -#define HVMPME_mode_disabled 0 -#define HVMPME_mode_async 1 -#define HVMPME_mode_sync 2 -#define HVMPME_onchangeonly (1 << 2) +#define HVMPME_MODE_MASK (3 << 0) +#define HVMPME_mode_disabled 0 +#define HVMPME_mode_async 1 +#define HVMPME_mode_sync 2 +#define HVMPME_onchangeonly (1 << 2) /* Boolean: Enable nestedhvm (hvm only) */ -#define HVM_PARAM_NESTEDHVM 24 +#define HVM_PARAM_NESTEDHVM 24 /* Params for the mem event rings */ #define HVM_PARAM_PAGING_RING_PFN 27 @@ -127,8 +127,8 @@ #define HVM_PARAM_SHARING_RING_PFN 29 /* SHUTDOWN_* action in case of a triple fault */ -#define HVM_PARAM_TRIPLE_FAULT_REASON 31 +#define HVM_PARAM_TRIPLE_FAULT_REASON 31 -#define HVM_NR_PARAMS 32 +#define HVM_NR_PARAMS 32 #endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/io/blkif.h b/OvmfPkg/Include/IndustryStandard/Xen/io/blkif.h index 5939610a96..8a34f9eba2 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/io/blkif.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/io/blkif.h @@ -28,9 +28,9 @@ */ #ifndef blkif_vdev_t -#define blkif_vdev_t UINT16 +#define blkif_vdev_t UINT16 #endif -#define blkif_sector_t UINT64 +#define blkif_sector_t UINT64 /* * Feature and Parameter Negotiation @@ -415,8 +415,9 @@ /* * REQUEST CODES. */ -#define BLKIF_OP_READ 0 -#define BLKIF_OP_WRITE 1 +#define BLKIF_OP_READ 0 +#define BLKIF_OP_WRITE 1 + /* * All writes issued prior to a request with the BLKIF_OP_WRITE_BARRIER * operation code ("barrier request") must be completed prior to the @@ -425,19 +426,22 @@ * * Optional. See "feature-barrier" XenBus node documentation above. */ -#define BLKIF_OP_WRITE_BARRIER 2 +#define BLKIF_OP_WRITE_BARRIER 2 + /* * Commit any uncommitted contents of the backing device's volatile cache * to stable storage. * * Optional. See "feature-flush-cache" XenBus node documentation above. */ -#define BLKIF_OP_FLUSH_DISKCACHE 3 +#define BLKIF_OP_FLUSH_DISKCACHE 3 + /* * Used in SLES sources for device specific command packet * contained within the request. Reserved for that purpose. */ -#define BLKIF_OP_RESERVED_1 4 +#define BLKIF_OP_RESERVED_1 4 + /* * Indicate to the backend device that a region of storage is no longer in * use, and may be discarded at any time without impact to the client. If @@ -458,7 +462,7 @@ * "discard-granularity", and "discard-secure" in the XenBus node * documentation above. */ -#define BLKIF_OP_DISCARD 5 +#define BLKIF_OP_DISCARD 5 /* * Recognized if "feature-max-indirect-segments" in present in the backend @@ -482,19 +486,19 @@ * If a backend does not recognize BLKIF_OP_INDIRECT, it should *not* * create the "feature-max-indirect-segments" node! */ -#define BLKIF_OP_INDIRECT 6 +#define BLKIF_OP_INDIRECT 6 /* * Maximum scatter/gather segments per request. * This is carefully chosen so that sizeof(blkif_ring_t) <= PAGE_SIZE. * NB. This could be 12 if the ring indexes weren't stored in the same page. */ -#define BLKIF_MAX_SEGMENTS_PER_REQUEST 11 +#define BLKIF_MAX_SEGMENTS_PER_REQUEST 11 /* * Maximum number of indirect pages to use per request. */ -#define BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST 8 +#define BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST 8 /* * NB. first_sect and last_sect in blkif_request_segment, as well as @@ -505,31 +509,32 @@ * 512-byte units. */ struct blkif_request_segment { - grant_ref_t gref; /* reference to I/O buffer frame */ - /* @first_sect: first sector in frame to transfer (inclusive). */ - /* @last_sect: last sector in frame to transfer (inclusive). */ - UINT8 first_sect, last_sect; + grant_ref_t gref; /* reference to I/O buffer frame */ + /* @first_sect: first sector in frame to transfer (inclusive). */ + /* @last_sect: last sector in frame to transfer (inclusive). */ + UINT8 first_sect, last_sect; }; /* * Starting ring element for any I/O request. */ -#if defined(MDE_CPU_IA32) +#if defined (MDE_CPU_IA32) // // pack(4) is necessary when these structs are compiled for Ia32. // Without it, the struct will have a different alignment than the one // a backend expect for a 32bit guest. // -#pragma pack(4) + #pragma pack(4) #endif struct blkif_request { - UINT8 operation; /* BLKIF_OP_??? */ - UINT8 nr_segments; /* number of segments */ - blkif_vdev_t handle; /* only for read/write requests */ - UINT64 id; /* private guest value, echoed in resp */ - blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */ - struct blkif_request_segment seg[BLKIF_MAX_SEGMENTS_PER_REQUEST]; + UINT8 operation; /* BLKIF_OP_??? */ + UINT8 nr_segments; /* number of segments */ + blkif_vdev_t handle; /* only for read/write requests */ + UINT64 id; /* private guest value, echoed in resp */ + blkif_sector_t sector_number; /* start sector idx on disk (r/w only) */ + struct blkif_request_segment seg[BLKIF_MAX_SEGMENTS_PER_REQUEST]; }; + typedef struct blkif_request blkif_request_t; /* @@ -537,58 +542,61 @@ typedef struct blkif_request blkif_request_t; * sizeof(struct blkif_request_discard) <= sizeof(struct blkif_request) */ struct blkif_request_discard { - UINT8 operation; /* BLKIF_OP_DISCARD */ - UINT8 flag; /* BLKIF_DISCARD_SECURE or zero */ -#define BLKIF_DISCARD_SECURE (1<<0) /* ignored if discard-secure=0 */ - blkif_vdev_t handle; /* same as for read/write requests */ - UINT64 id; /* private guest value, echoed in resp */ - blkif_sector_t sector_number;/* start sector idx on disk */ - UINT64 nr_sectors; /* number of contiguous sectors to discard*/ + UINT8 operation; /* BLKIF_OP_DISCARD */ + UINT8 flag; /* BLKIF_DISCARD_SECURE or zero */ + #define BLKIF_DISCARD_SECURE (1<<0) /* ignored if discard-secure=0 */ + blkif_vdev_t handle; /* same as for read/write requests */ + UINT64 id; /* private guest value, echoed in resp */ + blkif_sector_t sector_number; /* start sector idx on disk */ + UINT64 nr_sectors; /* number of contiguous sectors to discard*/ }; + typedef struct blkif_request_discard blkif_request_discard_t; struct blkif_request_indirect { - UINT8 operation; /* BLKIF_OP_INDIRECT */ - UINT8 indirect_op; /* BLKIF_OP_{READ/WRITE} */ - UINT16 nr_segments; /* number of segments */ - UINT64 id; /* private guest value, echoed in resp */ - blkif_sector_t sector_number;/* start sector idx on disk (r/w only) */ - blkif_vdev_t handle; /* same as for read/write requests */ - grant_ref_t indirect_grefs[BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST]; -#ifdef MDE_CPU_IA32 - UINT64 pad; /* Make it 64 byte aligned on i386 */ -#endif + UINT8 operation; /* BLKIF_OP_INDIRECT */ + UINT8 indirect_op; /* BLKIF_OP_{READ/WRITE} */ + UINT16 nr_segments; /* number of segments */ + UINT64 id; /* private guest value, echoed in resp */ + blkif_sector_t sector_number; /* start sector idx on disk (r/w only) */ + blkif_vdev_t handle; /* same as for read/write requests */ + grant_ref_t indirect_grefs[BLKIF_MAX_INDIRECT_PAGES_PER_REQUEST]; + #ifdef MDE_CPU_IA32 + UINT64 pad; /* Make it 64 byte aligned on i386 */ + #endif }; + typedef struct blkif_request_indirect blkif_request_indirect_t; struct blkif_response { - UINT64 id; /* copied from request */ - UINT8 operation; /* copied from request */ - INT16 status; /* BLKIF_RSP_??? */ + UINT64 id; /* copied from request */ + UINT8 operation; /* copied from request */ + INT16 status; /* BLKIF_RSP_??? */ }; + typedef struct blkif_response blkif_response_t; -#if defined(MDE_CPU_IA32) -#pragma pack() +#if defined (MDE_CPU_IA32) + #pragma pack() #endif /* * STATUS RETURN CODES. */ - /* Operation not supported (only happens on barrier writes). */ +/* Operation not supported (only happens on barrier writes). */ #define BLKIF_RSP_EOPNOTSUPP -2 - /* Operation failed for some unspecified reason (-EIO). */ -#define BLKIF_RSP_ERROR -1 - /* Operation completed successfully. */ -#define BLKIF_RSP_OKAY 0 +/* Operation failed for some unspecified reason (-EIO). */ +#define BLKIF_RSP_ERROR -1 +/* Operation completed successfully. */ +#define BLKIF_RSP_OKAY 0 /* * Generate blkif ring structures and types. */ -DEFINE_RING_TYPES(blkif, struct blkif_request, struct blkif_response); +DEFINE_RING_TYPES (blkif, struct blkif_request, struct blkif_response); -#define VDISK_CDROM 0x1 -#define VDISK_REMOVABLE 0x2 -#define VDISK_READONLY 0x4 +#define VDISK_CDROM 0x1 +#define VDISK_REMOVABLE 0x2 +#define VDISK_READONLY 0x4 #endif /* __XEN_PUBLIC_IO_BLKIF_H__ */ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/io/console.h b/OvmfPkg/Include/IndustryStandard/Xen/io/console.h index c38d88b07a..bc59fdd869 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/io/console.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/io/console.h @@ -13,13 +13,13 @@ typedef UINT32 XENCONS_RING_IDX; -#define MASK_XENCONS_IDX(idx, ring) ((idx) & (sizeof(ring)-1)) +#define MASK_XENCONS_IDX(idx, ring) ((idx) & (sizeof(ring)-1)) struct xencons_interface { - char in[1024]; - char out[2048]; - XENCONS_RING_IDX in_cons, in_prod; - XENCONS_RING_IDX out_cons, out_prod; + char in[1024]; + char out[2048]; + XENCONS_RING_IDX in_cons, in_prod; + XENCONS_RING_IDX out_cons, out_prod; }; #endif /* __XEN_PUBLIC_IO_CONSOLE_H__ */ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/io/protocols.h b/OvmfPkg/Include/IndustryStandard/Xen/io/protocols.h index 4303d37c30..4ea3b42b98 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/io/protocols.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/io/protocols.h @@ -7,18 +7,18 @@ #ifndef __XEN_PROTOCOLS_H__ #define __XEN_PROTOCOLS_H__ -#define XEN_IO_PROTO_ABI_X86_32 "x86_32-abi" -#define XEN_IO_PROTO_ABI_X86_64 "x86_64-abi" -#define XEN_IO_PROTO_ABI_ARM "arm-abi" +#define XEN_IO_PROTO_ABI_X86_32 "x86_32-abi" +#define XEN_IO_PROTO_ABI_X86_64 "x86_64-abi" +#define XEN_IO_PROTO_ABI_ARM "arm-abi" -#if defined(MDE_CPU_IA32) -# define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_X86_32 -#elif defined(MDE_CPU_X64) -# define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_X86_64 -#elif defined(__arm__) || defined(__aarch64__) -# define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_ARM +#if defined (MDE_CPU_IA32) +#define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_X86_32 +#elif defined (MDE_CPU_X64) +#define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_X86_64 +#elif defined (__arm__) || defined (__aarch64__) +#define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_ARM #else -# error arch fixup needed here + #error arch fixup needed here #endif #endif diff --git a/OvmfPkg/Include/IndustryStandard/Xen/io/ring.h b/OvmfPkg/Include/IndustryStandard/Xen/io/ring.h index 2fa5d20ca0..d044cfb0a5 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/io/ring.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/io/ring.h @@ -14,19 +14,19 @@ #include "../xen-compat.h" #if __XEN_INTERFACE_VERSION__ < 0x00030208 -#define xen_mb() mb() -#define xen_rmb() rmb() -#define xen_wmb() wmb() +#define xen_mb() mb() +#define xen_rmb() rmb() +#define xen_wmb() wmb() #endif typedef UINT32 RING_IDX; /* Round a 32-bit unsigned constant down to the nearest power of two. */ -#define __RD2(_x) (((_x) & 0x00000002) ? 0x2 : ((_x) & 0x1)) -#define __RD4(_x) (((_x) & 0x0000000c) ? __RD2((_x)>>2)<<2 : __RD2(_x)) -#define __RD8(_x) (((_x) & 0x000000f0) ? __RD4((_x)>>4)<<4 : __RD4(_x)) -#define __RD16(_x) (((_x) & 0x0000ff00) ? __RD8((_x)>>8)<<8 : __RD8(_x)) -#define __RD32(_x) (((_x) & 0xffff0000) ? __RD16((_x)>>16)<<16 : __RD16(_x)) +#define __RD2(_x) (((_x) & 0x00000002) ? 0x2 : ((_x) & 0x1)) +#define __RD4(_x) (((_x) & 0x0000000c) ? __RD2((_x)>>2)<<2 : __RD2(_x)) +#define __RD8(_x) (((_x) & 0x000000f0) ? __RD4((_x)>>4)<<4 : __RD4(_x)) +#define __RD16(_x) (((_x) & 0x0000ff00) ? __RD8((_x)>>8)<<8 : __RD8(_x)) +#define __RD32(_x) (((_x) & 0xffff0000) ? __RD16((_x)>>16)<<16 : __RD16(_x)) /* * Calculate size of a shared ring, given the total available space for the @@ -36,7 +36,8 @@ typedef UINT32 RING_IDX; */ #define __CONST_RING_SIZE(_s, _sz) \ (__RD32(((_sz) - offsetof(struct _s##_sring, ring)) / \ - sizeof(((struct _s##_sring *)0)->ring[0]))) + sizeof(((struct _s##_sring *)0)->ring[0]))) + /* * The same for passing in an actual pointer instead of a name tag. */ @@ -77,13 +78,13 @@ typedef UINT32 RING_IDX; #define DEFINE_RING_TYPES(__name, __req_t, __rsp_t) \ \ -/* Shared ring entry */ \ + /* Shared ring entry */ \ union __name##_sring_entry { \ __req_t req; \ __rsp_t rsp; \ }; \ \ -/* Shared ring page */ \ + /* Shared ring page */ \ struct __name##_sring { \ RING_IDX req_prod, req_event; \ RING_IDX rsp_prod, rsp_event; \ @@ -100,7 +101,7 @@ struct __name##_sring { \ union __name##_sring_entry ring[1]; /* variable-length */ \ }; \ \ -/* "Front" end's private variables */ \ + /* "Front" end's private variables */ \ struct __name##_front_ring { \ RING_IDX req_prod_pvt; \ RING_IDX rsp_cons; \ @@ -108,7 +109,7 @@ struct __name##_front_ring { \ struct __name##_sring *sring; \ }; \ \ -/* "Back" end's private variables */ \ + /* "Back" end's private variables */ \ struct __name##_back_ring { \ RING_IDX rsp_prod_pvt; \ RING_IDX req_cons; \ @@ -116,7 +117,7 @@ struct __name##_back_ring { \ struct __name##_sring *sring; \ }; \ \ -/* Syntactic sugar */ \ + /* Syntactic sugar */ \ typedef struct __name##_sring __name##_sring_t; \ typedef struct __name##_front_ring __name##_front_ring_t; \ typedef struct __name##_back_ring __name##_back_ring_t @@ -137,21 +138,21 @@ typedef struct __name##_back_ring __name##_back_ring_t */ /* Initialising empty rings */ -#define SHARED_RING_INIT(_s) do { \ +#define SHARED_RING_INIT(_s) do { \ (_s)->req_prod = (_s)->rsp_prod = 0; \ (_s)->req_event = (_s)->rsp_event = 1; \ (VOID)ZeroMem((_s)->private.pvt_pad, sizeof((_s)->private.pvt_pad)); \ (VOID)ZeroMem((_s)->__pad, sizeof((_s)->__pad)); \ } while(0) -#define FRONT_RING_INIT(_r, _s, __size) do { \ +#define FRONT_RING_INIT(_r, _s, __size) do { \ (_r)->req_prod_pvt = 0; \ (_r)->rsp_cons = 0; \ (_r)->nr_ents = __RING_SIZE(_s, __size); \ (_r)->sring = (_s); \ } while (0) -#define BACK_RING_INIT(_r, _s, __size) do { \ +#define BACK_RING_INIT(_r, _s, __size) do { \ (_r)->rsp_prod_pvt = 0; \ (_r)->req_cons = 0; \ (_r)->nr_ents = __RING_SIZE(_s, __size); \ @@ -177,7 +178,7 @@ typedef struct __name##_back_ring __name##_back_ring_t ((_r)->sring->rsp_prod - (_r)->rsp_cons) #ifdef __GNUC__ -#define RING_HAS_UNCONSUMED_REQUESTS(_r) ({ \ +#define RING_HAS_UNCONSUMED_REQUESTS(_r) ({ \ UINT32 req = (_r)->sring->req_prod - (_r)->req_cons; \ UINT32 rsp = RING_SIZE(_r) - \ ((_r)->req_cons - (_r)->rsp_prod_pvt); \ @@ -207,12 +208,12 @@ typedef struct __name##_back_ring __name##_back_ring_t #define RING_REQUEST_PROD_OVERFLOW(_r, _prod) \ (((_prod) - (_r)->rsp_prod_pvt) > RING_SIZE(_r)) -#define RING_PUSH_REQUESTS(_r) do { \ +#define RING_PUSH_REQUESTS(_r) do { \ xen_wmb(); /* back sees requests /before/ updated producer index */ \ (_r)->sring->req_prod = (_r)->req_prod_pvt; \ } while (0) -#define RING_PUSH_RESPONSES(_r) do { \ +#define RING_PUSH_RESPONSES(_r) do { \ xen_wmb(); /* front sees resps /before/ updated producer index */ \ (_r)->sring->rsp_prod = (_r)->rsp_prod_pvt; \ } while (0) @@ -247,7 +248,7 @@ typedef struct __name##_back_ring __name##_back_ring_t * field appropriately. */ -#define RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(_r, _notify) do { \ +#define RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(_r, _notify) do { \ RING_IDX __old = (_r)->sring->req_prod; \ RING_IDX __new = (_r)->req_prod_pvt; \ xen_wmb(); /* back sees requests /before/ updated producer index */ \ @@ -257,7 +258,7 @@ typedef struct __name##_back_ring __name##_back_ring_t (RING_IDX)(__new - __old)); \ } while (0) -#define RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(_r, _notify) do { \ +#define RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(_r, _notify) do { \ RING_IDX __old = (_r)->sring->rsp_prod; \ RING_IDX __new = (_r)->rsp_prod_pvt; \ xen_wmb(); /* front sees resps /before/ updated producer index */ \ @@ -267,7 +268,7 @@ typedef struct __name##_back_ring __name##_back_ring_t (RING_IDX)(__new - __old)); \ } while (0) -#define RING_FINAL_CHECK_FOR_REQUESTS(_r, _work_to_do) do { \ +#define RING_FINAL_CHECK_FOR_REQUESTS(_r, _work_to_do) do { \ (_work_to_do) = RING_HAS_UNCONSUMED_REQUESTS(_r); \ if (_work_to_do) break; \ (_r)->sring->req_event = (_r)->req_cons + 1; \ @@ -275,7 +276,7 @@ typedef struct __name##_back_ring __name##_back_ring_t (_work_to_do) = RING_HAS_UNCONSUMED_REQUESTS(_r); \ } while (0) -#define RING_FINAL_CHECK_FOR_RESPONSES(_r, _work_to_do) do { \ +#define RING_FINAL_CHECK_FOR_RESPONSES(_r, _work_to_do) do { \ (_work_to_do) = RING_HAS_UNCONSUMED_RESPONSES(_r); \ if (_work_to_do) break; \ (_r)->sring->rsp_event = (_r)->rsp_cons + 1; \ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/io/xenbus.h b/OvmfPkg/Include/IndustryStandard/Xen/io/xenbus.h index 80db1909e9..1a50619bbf 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/io/xenbus.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/io/xenbus.h @@ -18,37 +18,38 @@ * layers. */ enum xenbus_state { - XenbusStateUnknown = 0, + XenbusStateUnknown = 0, - XenbusStateInitialising = 1, + XenbusStateInitialising = 1, - /* - * InitWait: Finished early initialisation but waiting for information - * from the peer or hotplug scripts. - */ - XenbusStateInitWait = 2, + /* + * InitWait: Finished early initialisation but waiting for information + * from the peer or hotplug scripts. + */ + XenbusStateInitWait = 2, - /* - * Initialised: Waiting for a connection from the peer. - */ - XenbusStateInitialised = 3, + /* + * Initialised: Waiting for a connection from the peer. + */ + XenbusStateInitialised = 3, - XenbusStateConnected = 4, + XenbusStateConnected = 4, - /* - * Closing: The device is being closed due to an error or an unplug event. - */ - XenbusStateClosing = 5, + /* + * Closing: The device is being closed due to an error or an unplug event. + */ + XenbusStateClosing = 5, - XenbusStateClosed = 6, + XenbusStateClosed = 6, - /* - * Reconfiguring: The device is being reconfigured. - */ - XenbusStateReconfiguring = 7, + /* + * Reconfiguring: The device is being reconfigured. + */ + XenbusStateReconfiguring = 7, - XenbusStateReconfigured = 8 + XenbusStateReconfigured = 8 }; + typedef enum xenbus_state XenbusState; #endif /* _XEN_PUBLIC_IO_XENBUS_H */ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/io/xs_wire.h b/OvmfPkg/Include/IndustryStandard/Xen/io/xs_wire.h index fb4e48d591..a6b75b8b22 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/io/xs_wire.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/io/xs_wire.h @@ -10,115 +10,112 @@ #ifndef _XS_WIRE_H #define _XS_WIRE_H -enum xsd_sockmsg_type -{ - XS_DEBUG, - XS_DIRECTORY, - XS_READ, - XS_GET_PERMS, - XS_WATCH, - XS_UNWATCH, - XS_TRANSACTION_START, - XS_TRANSACTION_END, - XS_INTRODUCE, - XS_RELEASE, - XS_GET_DOMAIN_PATH, - XS_WRITE, - XS_MKDIR, - XS_RM, - XS_SET_PERMS, - XS_WATCH_EVENT, - XS_ERROR, - XS_IS_DOMAIN_INTRODUCED, - XS_RESUME, - XS_SET_TARGET, - XS_RESTRICT, - XS_RESET_WATCHES, - - XS_INVALID = 0xffff /* Guaranteed to remain an invalid type */ +enum xsd_sockmsg_type { + XS_DEBUG, + XS_DIRECTORY, + XS_READ, + XS_GET_PERMS, + XS_WATCH, + XS_UNWATCH, + XS_TRANSACTION_START, + XS_TRANSACTION_END, + XS_INTRODUCE, + XS_RELEASE, + XS_GET_DOMAIN_PATH, + XS_WRITE, + XS_MKDIR, + XS_RM, + XS_SET_PERMS, + XS_WATCH_EVENT, + XS_ERROR, + XS_IS_DOMAIN_INTRODUCED, + XS_RESUME, + XS_SET_TARGET, + XS_RESTRICT, + XS_RESET_WATCHES, + + XS_INVALID = 0xffff /* Guaranteed to remain an invalid type */ }; -#define XS_WRITE_NONE "NONE" -#define XS_WRITE_CREATE "CREATE" -#define XS_WRITE_CREATE_EXCL "CREATE|EXCL" +#define XS_WRITE_NONE "NONE" +#define XS_WRITE_CREATE "CREATE" +#define XS_WRITE_CREATE_EXCL "CREATE|EXCL" /* We hand errors as strings, for portability. */ -struct xsd_errors -{ - INT32 errnum; - const CHAR8 *errstring; +struct xsd_errors { + INT32 errnum; + const CHAR8 *errstring; }; + #ifdef EINVAL -#define XSD_ERROR(x) { x, #x } +#define XSD_ERROR(x) { x, #x } /* LINTED: static unused */ static struct xsd_errors xsd_errors[] -#if defined(__GNUC__) -__attribute__((unused)) -#endif - = { - XSD_ERROR(EINVAL), - XSD_ERROR(EACCES), - XSD_ERROR(EEXIST), - XSD_ERROR(EISDIR), - XSD_ERROR(ENOENT), - XSD_ERROR(ENOMEM), - XSD_ERROR(ENOSPC), - XSD_ERROR(EIO), - XSD_ERROR(ENOTEMPTY), - XSD_ERROR(ENOSYS), - XSD_ERROR(EROFS), - XSD_ERROR(EBUSY), - XSD_ERROR(EAGAIN), - XSD_ERROR(EISCONN), - XSD_ERROR(E2BIG) -}; + #if defined (__GNUC__) +__attribute__ ((unused)) + #endif + = { + XSD_ERROR (EINVAL), + XSD_ERROR (EACCES), + XSD_ERROR (EEXIST), + XSD_ERROR (EISDIR), + XSD_ERROR (ENOENT), + XSD_ERROR (ENOMEM), + XSD_ERROR (ENOSPC), + XSD_ERROR (EIO), + XSD_ERROR (ENOTEMPTY), + XSD_ERROR (ENOSYS), + XSD_ERROR (EROFS), + XSD_ERROR (EBUSY), + XSD_ERROR (EAGAIN), + XSD_ERROR (EISCONN), + XSD_ERROR (E2BIG) + }; #endif -struct xsd_sockmsg -{ - UINT32 type; /* XS_??? */ - UINT32 req_id;/* Request identifier, echoed in daemon's response. */ - UINT32 tx_id; /* Transaction id (0 if not related to a transaction). */ - UINT32 len; /* Length of data following this. */ +struct xsd_sockmsg { + UINT32 type; /* XS_??? */ + UINT32 req_id; /* Request identifier, echoed in daemon's response. */ + UINT32 tx_id; /* Transaction id (0 if not related to a transaction). */ + UINT32 len; /* Length of data following this. */ - /* Generally followed by nul-terminated string(s). */ + /* Generally followed by nul-terminated string(s). */ }; -enum xs_watch_type -{ - XS_WATCH_PATH = 0, - XS_WATCH_TOKEN +enum xs_watch_type { + XS_WATCH_PATH = 0, + XS_WATCH_TOKEN }; /* * `incontents 150 xenstore_struct XenStore wire protocol. * * Inter-domain shared memory communications. */ -#define XENSTORE_RING_SIZE 1024 +#define XENSTORE_RING_SIZE 1024 typedef UINT32 XENSTORE_RING_IDX; -#define MASK_XENSTORE_IDX(idx) ((idx) & (XENSTORE_RING_SIZE-1)) +#define MASK_XENSTORE_IDX(idx) ((idx) & (XENSTORE_RING_SIZE-1)) struct xenstore_domain_interface { - CHAR8 req[XENSTORE_RING_SIZE]; /* Requests to xenstore daemon. */ - CHAR8 rsp[XENSTORE_RING_SIZE]; /* Replies and async watch events. */ - XENSTORE_RING_IDX req_cons, req_prod; - XENSTORE_RING_IDX rsp_cons, rsp_prod; - UINT32 server_features; /* Bitmap of features supported by the server */ - UINT32 connection; + CHAR8 req[XENSTORE_RING_SIZE]; /* Requests to xenstore daemon. */ + CHAR8 rsp[XENSTORE_RING_SIZE]; /* Replies and async watch events. */ + XENSTORE_RING_IDX req_cons, req_prod; + XENSTORE_RING_IDX rsp_cons, rsp_prod; + UINT32 server_features; /* Bitmap of features supported by the server */ + UINT32 connection; }; /* Violating this is very bad. See docs/misc/xenstore.txt. */ -#define XENSTORE_PAYLOAD_MAX 4096 +#define XENSTORE_PAYLOAD_MAX 4096 /* Violating these just gets you an error back */ -#define XENSTORE_ABS_PATH_MAX 3072 -#define XENSTORE_REL_PATH_MAX 2048 +#define XENSTORE_ABS_PATH_MAX 3072 +#define XENSTORE_REL_PATH_MAX 2048 /* The ability to reconnect a ring */ -#define XENSTORE_SERVER_FEATURE_RECONNECTION 1 +#define XENSTORE_SERVER_FEATURE_RECONNECTION 1 /* Valid values for the connection field */ -#define XENSTORE_CONNECTED 0 /* the steady-state */ -#define XENSTORE_RECONNECT 1 /* guest has initiated a reconnect */ +#define XENSTORE_CONNECTED 0 /* the steady-state */ +#define XENSTORE_RECONNECT 1 /* guest has initiated a reconnect */ #endif /* _XS_WIRE_H */ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/memory.h b/OvmfPkg/Include/IndustryStandard/Xen/memory.h index 54ee4b4654..e2b209f3d7 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/memory.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/memory.h @@ -15,11 +15,11 @@ /* Source mapping space. */ /* ` enum phys_map_space { */ -#define XENMAPSPACE_shared_info 0 /* shared info page */ -#define XENMAPSPACE_grant_table 1 /* grant table page */ -#define XENMAPSPACE_gmfn 2 /* GMFN */ -#define XENMAPSPACE_gmfn_range 3 /* GMFN range, XENMEM_add_to_physmap only. */ -#define XENMAPSPACE_gmfn_foreign 4 /* GMFN from another dom, +#define XENMAPSPACE_shared_info 0 /* shared info page */ +#define XENMAPSPACE_grant_table 1 /* grant table page */ +#define XENMAPSPACE_gmfn 2 /* GMFN */ +#define XENMAPSPACE_gmfn_range 3 /* GMFN range, XENMEM_add_to_physmap only. */ +#define XENMAPSPACE_gmfn_foreign 4 /* GMFN from another dom, * XENMEM_add_to_physmap_batch only. */ /* ` } */ @@ -28,65 +28,68 @@ * pseudophysical address space. * arg == addr of xen_add_to_physmap_t. */ -#define XENMEM_add_to_physmap 7 +#define XENMEM_add_to_physmap 7 struct xen_add_to_physmap { - /* Which domain to change the mapping for. */ - domid_t domid; + /* Which domain to change the mapping for. */ + domid_t domid; - /* Number of pages to go through for gmfn_range */ - UINT16 size; + /* Number of pages to go through for gmfn_range */ + UINT16 size; - UINT32 space; /* => enum phys_map_space */ + UINT32 space; /* => enum phys_map_space */ -#define XENMAPIDX_grant_table_status 0x80000000 + #define XENMAPIDX_grant_table_status 0x80000000 - /* Index into space being mapped. */ - xen_ulong_t idx; + /* Index into space being mapped. */ + xen_ulong_t idx; - /* GPFN in domid where the source mapping page should appear. */ - xen_pfn_t gpfn; + /* GPFN in domid where the source mapping page should appear. */ + xen_pfn_t gpfn; }; + typedef struct xen_add_to_physmap xen_add_to_physmap_t; -DEFINE_XEN_GUEST_HANDLE(xen_add_to_physmap_t); +DEFINE_XEN_GUEST_HANDLE (xen_add_to_physmap_t); /* * Unmaps the page appearing at a particular GPFN from the specified guest's * pseudophysical address space. * arg == addr of xen_remove_from_physmap_t. */ -#define XENMEM_remove_from_physmap 15 +#define XENMEM_remove_from_physmap 15 struct xen_remove_from_physmap { - /* Which domain to change the mapping for. */ - domid_t domid; + /* Which domain to change the mapping for. */ + domid_t domid; - /* GPFN of the current mapping of the page. */ - xen_pfn_t gpfn; + /* GPFN of the current mapping of the page. */ + xen_pfn_t gpfn; }; + typedef struct xen_remove_from_physmap xen_remove_from_physmap_t; -DEFINE_XEN_GUEST_HANDLE(xen_remove_from_physmap_t); +DEFINE_XEN_GUEST_HANDLE (xen_remove_from_physmap_t); /* * Returns the pseudo-physical memory map as it was when the domain * was started (specified by XENMEM_set_memory_map). * arg == addr of xen_memory_map_t. */ -#define XENMEM_memory_map 9 +#define XENMEM_memory_map 9 struct xen_memory_map { - /* - * On call the number of entries which can be stored in buffer. On - * return the number of entries which have been stored in - * buffer. - */ - UINT32 nr_entries; - - /* - * Entries in the buffer are in the same format as returned by the - * BIOS INT 0x15 EAX=0xE820 call. - */ - XEN_GUEST_HANDLE(void) buffer; + /* + * On call the number of entries which can be stored in buffer. On + * return the number of entries which have been stored in + * buffer. + */ + UINT32 nr_entries; + + /* + * Entries in the buffer are in the same format as returned by the + * BIOS INT 0x15 EAX=0xE820 call. + */ + XEN_GUEST_HANDLE (void) buffer; }; + typedef struct xen_memory_map xen_memory_map_t; -DEFINE_XEN_GUEST_HANDLE(xen_memory_map_t); +DEFINE_XEN_GUEST_HANDLE (xen_memory_map_t); #endif /* __XEN_PUBLIC_MEMORY_H__ */ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/xen-compat.h b/OvmfPkg/Include/IndustryStandard/Xen/xen-compat.h index c77049f796..1e9e304ced 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/xen-compat.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/xen-compat.h @@ -11,18 +11,18 @@ #ifndef __XEN_PUBLIC_XEN_COMPAT_H__ #define __XEN_PUBLIC_XEN_COMPAT_H__ -#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040400 +#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040400 -#if defined(__XEN__) || defined(__XEN_TOOLS__) +#if defined (__XEN__) || defined (__XEN_TOOLS__) /* Xen is built with matching headers and implements the latest interface. */ -#define __XEN_INTERFACE_VERSION__ __XEN_LATEST_INTERFACE_VERSION__ -#elif !defined(__XEN_INTERFACE_VERSION__) +#define __XEN_INTERFACE_VERSION__ __XEN_LATEST_INTERFACE_VERSION__ +#elif !defined (__XEN_INTERFACE_VERSION__) /* Guests which do not specify a version get the legacy interface. */ -#define __XEN_INTERFACE_VERSION__ 0x00000000 +#define __XEN_INTERFACE_VERSION__ 0x00000000 #endif #if __XEN_INTERFACE_VERSION__ > __XEN_LATEST_INTERFACE_VERSION__ -#error "These header files do not support the requested interface version." + #error "These header files do not support the requested interface version." #endif #endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */ diff --git a/OvmfPkg/Include/IndustryStandard/Xen/xen.h b/OvmfPkg/Include/IndustryStandard/Xen/xen.h index 79a4e212e7..f28a1d47fc 100644 --- a/OvmfPkg/Include/IndustryStandard/Xen/xen.h +++ b/OvmfPkg/Include/IndustryStandard/Xen/xen.h @@ -14,33 +14,33 @@ // // Xen interface version used by Tianocore // -#define __XEN_INTERFACE_VERSION__ 0x00040400 +#define __XEN_INTERFACE_VERSION__ 0x00040400 #include "xen-compat.h" -#if defined(MDE_CPU_IA32) || defined(MDE_CPU_X64) -#include "arch-x86/xen.h" -#elif defined(__arm__) || defined (__aarch64__) -#include "arch-arm/xen.h" +#if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64) + #include "arch-x86/xen.h" +#elif defined (__arm__) || defined (__aarch64__) + #include "arch-arm/xen.h" #else -#error "Unsupported architecture" + #error "Unsupported architecture" #endif #ifndef __ASSEMBLY__ /* Guest handles for primitive C types. */ -DEFINE_XEN_GUEST_HANDLE(CHAR8); -__DEFINE_XEN_GUEST_HANDLE(uchar, UINT8); -DEFINE_XEN_GUEST_HANDLE(INT32); -__DEFINE_XEN_GUEST_HANDLE(uint, UINT32); -#if __XEN_INTERFACE_VERSION__ < 0x00040300 -DEFINE_XEN_GUEST_HANDLE(INTN); -__DEFINE_XEN_GUEST_HANDLE(ulong, UINTN); -#endif -DEFINE_XEN_GUEST_HANDLE(VOID); - -DEFINE_XEN_GUEST_HANDLE(UINT64); -DEFINE_XEN_GUEST_HANDLE(xen_pfn_t); -DEFINE_XEN_GUEST_HANDLE(xen_ulong_t); +DEFINE_XEN_GUEST_HANDLE (CHAR8); +__DEFINE_XEN_GUEST_HANDLE (uchar, UINT8); +DEFINE_XEN_GUEST_HANDLE (INT32); +__DEFINE_XEN_GUEST_HANDLE (uint, UINT32); + #if __XEN_INTERFACE_VERSION__ < 0x00040300 +DEFINE_XEN_GUEST_HANDLE (INTN); +__DEFINE_XEN_GUEST_HANDLE (ulong, UINTN); + #endif +DEFINE_XEN_GUEST_HANDLE (VOID); + +DEFINE_XEN_GUEST_HANDLE (UINT64); +DEFINE_XEN_GUEST_HANDLE (xen_pfn_t); +DEFINE_XEN_GUEST_HANDLE (xen_ulong_t); #endif /* @@ -51,55 +51,55 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t); * ` enum hypercall_num { // __HYPERVISOR_* => HYPERVISOR_*() */ -#define __HYPERVISOR_set_trap_table 0 -#define __HYPERVISOR_mmu_update 1 -#define __HYPERVISOR_set_gdt 2 -#define __HYPERVISOR_stack_switch 3 -#define __HYPERVISOR_set_callbacks 4 -#define __HYPERVISOR_fpu_taskswitch 5 -#define __HYPERVISOR_sched_op_compat 6 /* compat since 0x00030101 */ -#define __HYPERVISOR_platform_op 7 -#define __HYPERVISOR_set_debugreg 8 -#define __HYPERVISOR_get_debugreg 9 -#define __HYPERVISOR_update_descriptor 10 -#define __HYPERVISOR_memory_op 12 -#define __HYPERVISOR_multicall 13 -#define __HYPERVISOR_update_va_mapping 14 -#define __HYPERVISOR_set_timer_op 15 -#define __HYPERVISOR_event_channel_op_compat 16 /* compat since 0x00030202 */ -#define __HYPERVISOR_xen_version 17 -#define __HYPERVISOR_console_io 18 -#define __HYPERVISOR_physdev_op_compat 19 /* compat since 0x00030202 */ -#define __HYPERVISOR_grant_table_op 20 -#define __HYPERVISOR_vm_assist 21 -#define __HYPERVISOR_update_va_mapping_otherdomain 22 -#define __HYPERVISOR_iret 23 /* x86 only */ -#define __HYPERVISOR_vcpu_op 24 -#define __HYPERVISOR_set_segment_base 25 /* x86/64 only */ -#define __HYPERVISOR_mmuext_op 26 -#define __HYPERVISOR_xsm_op 27 -#define __HYPERVISOR_nmi_op 28 -#define __HYPERVISOR_sched_op 29 -#define __HYPERVISOR_callback_op 30 -#define __HYPERVISOR_xenoprof_op 31 -#define __HYPERVISOR_event_channel_op 32 -#define __HYPERVISOR_physdev_op 33 -#define __HYPERVISOR_hvm_op 34 -#define __HYPERVISOR_sysctl 35 -#define __HYPERVISOR_domctl 36 -#define __HYPERVISOR_kexec_op 37 -#define __HYPERVISOR_tmem_op 38 -#define __HYPERVISOR_xc_reserved_op 39 /* reserved for XenClient */ +#define __HYPERVISOR_set_trap_table 0 +#define __HYPERVISOR_mmu_update 1 +#define __HYPERVISOR_set_gdt 2 +#define __HYPERVISOR_stack_switch 3 +#define __HYPERVISOR_set_callbacks 4 +#define __HYPERVISOR_fpu_taskswitch 5 +#define __HYPERVISOR_sched_op_compat 6/* compat since 0x00030101 */ +#define __HYPERVISOR_platform_op 7 +#define __HYPERVISOR_set_debugreg 8 +#define __HYPERVISOR_get_debugreg 9 +#define __HYPERVISOR_update_descriptor 10 +#define __HYPERVISOR_memory_op 12 +#define __HYPERVISOR_multicall 13 +#define __HYPERVISOR_update_va_mapping 14 +#define __HYPERVISOR_set_timer_op 15 +#define __HYPERVISOR_event_channel_op_compat 16/* compat since 0x00030202 */ +#define __HYPERVISOR_xen_version 17 +#define __HYPERVISOR_console_io 18 +#define __HYPERVISOR_physdev_op_compat 19/* compat since 0x00030202 */ +#define __HYPERVISOR_grant_table_op 20 +#define __HYPERVISOR_vm_assist 21 +#define __HYPERVISOR_update_va_mapping_otherdomain 22 +#define __HYPERVISOR_iret 23/* x86 only */ +#define __HYPERVISOR_vcpu_op 24 +#define __HYPERVISOR_set_segment_base 25/* x86/64 only */ +#define __HYPERVISOR_mmuext_op 26 +#define __HYPERVISOR_xsm_op 27 +#define __HYPERVISOR_nmi_op 28 +#define __HYPERVISOR_sched_op 29 +#define __HYPERVISOR_callback_op 30 +#define __HYPERVISOR_xenoprof_op 31 +#define __HYPERVISOR_event_channel_op 32 +#define __HYPERVISOR_physdev_op 33 +#define __HYPERVISOR_hvm_op 34 +#define __HYPERVISOR_sysctl 35 +#define __HYPERVISOR_domctl 36 +#define __HYPERVISOR_kexec_op 37 +#define __HYPERVISOR_tmem_op 38 +#define __HYPERVISOR_xc_reserved_op 39/* reserved for XenClient */ /* Architecture-specific hypercall definitions. */ -#define __HYPERVISOR_arch_0 48 -#define __HYPERVISOR_arch_1 49 -#define __HYPERVISOR_arch_2 50 -#define __HYPERVISOR_arch_3 51 -#define __HYPERVISOR_arch_4 52 -#define __HYPERVISOR_arch_5 53 -#define __HYPERVISOR_arch_6 54 -#define __HYPERVISOR_arch_7 55 +#define __HYPERVISOR_arch_0 48 +#define __HYPERVISOR_arch_1 49 +#define __HYPERVISOR_arch_2 50 +#define __HYPERVISOR_arch_3 51 +#define __HYPERVISOR_arch_4 52 +#define __HYPERVISOR_arch_5 53 +#define __HYPERVISOR_arch_6 54 +#define __HYPERVISOR_arch_7 55 /* ` } */ @@ -109,21 +109,21 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t); /* New sched_op hypercall introduced in 0x00030101. */ #if __XEN_INTERFACE_VERSION__ < 0x00030101 -#undef __HYPERVISOR_sched_op -#define __HYPERVISOR_sched_op __HYPERVISOR_sched_op_compat + #undef __HYPERVISOR_sched_op +#define __HYPERVISOR_sched_op __HYPERVISOR_sched_op_compat #endif /* New event-channel and physdev hypercalls introduced in 0x00030202. */ #if __XEN_INTERFACE_VERSION__ < 0x00030202 -#undef __HYPERVISOR_event_channel_op -#define __HYPERVISOR_event_channel_op __HYPERVISOR_event_channel_op_compat -#undef __HYPERVISOR_physdev_op -#define __HYPERVISOR_physdev_op __HYPERVISOR_physdev_op_compat + #undef __HYPERVISOR_event_channel_op +#define __HYPERVISOR_event_channel_op __HYPERVISOR_event_channel_op_compat + #undef __HYPERVISOR_physdev_op +#define __HYPERVISOR_physdev_op __HYPERVISOR_physdev_op_compat #endif /* New platform_op hypercall introduced in 0x00030204. */ #if __XEN_INTERFACE_VERSION__ < 0x00030204 -#define __HYPERVISOR_dom0_op __HYPERVISOR_platform_op +#define __HYPERVISOR_dom0_op __HYPERVISOR_platform_op #endif #ifndef __ASSEMBLY__ @@ -131,10 +131,10 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t); typedef UINT16 domid_t; /* Domain ids >= DOMID_FIRST_RESERVED cannot be used for ordinary domains. */ -#define DOMID_FIRST_RESERVED (0x7FF0U) +#define DOMID_FIRST_RESERVED (0x7FF0U) /* DOMID_SELF is used in certain contexts to refer to oneself. */ -#define DOMID_SELF (0x7FF0U) +#define DOMID_SELF (0x7FF0U) /* * DOMID_IO is used to restrict page-table updates to mapping I/O memory. @@ -145,7 +145,7 @@ typedef UINT16 domid_t; * This only makes sense in MMUEXT_SET_FOREIGNDOM, but in that context can * be specified by any calling domain. */ -#define DOMID_IO (0x7FF1U) +#define DOMID_IO (0x7FF1U) /* * DOMID_XEN is used to allow privileged domains to map restricted parts of @@ -160,85 +160,89 @@ typedef UINT16 domid_t; #define DOMID_COW (0x7FF3U) /* DOMID_INVALID is used to identify pages with unknown owner. */ -#define DOMID_INVALID (0x7FF4U) +#define DOMID_INVALID (0x7FF4U) /* Idle domain. */ -#define DOMID_IDLE (0x7FFFU) +#define DOMID_IDLE (0x7FFFU) + + #if __XEN_INTERFACE_VERSION__ < 0x00040400 -#if __XEN_INTERFACE_VERSION__ < 0x00040400 /* * Event channel endpoints per domain (when using the 2-level ABI): * 1024 if a INTN is 32 bits; 4096 if a INTN is 64 bits. */ -#define NR_EVENT_CHANNELS EVTCHN_2L_NR_CHANNELS -#endif +#define NR_EVENT_CHANNELS EVTCHN_2L_NR_CHANNELS + #endif struct vcpu_time_info { - /* - * Updates to the following values are preceded and followed by an - * increment of 'version'. The guest can therefore detect updates by - * looking for changes to 'version'. If the least-significant bit of - * the version number is set then an update is in progress and the guest - * must wait to read a consistent set of values. - * The correct way to interact with the version number is similar to - * Linux's seqlock: see the implementations of read_seqbegin/read_seqretry. - */ - UINT32 Version; - UINT32 pad0; - UINT64 TscTimestamp; /* TSC at last update of time vals. */ - UINT64 SystemTime; /* Time, in nanosecs, since boot. */ - /* - * Current system time: - * system_time + - * ((((tsc - tsc_timestamp) << tsc_shift) * tsc_to_system_mul) >> 32) - * CPU frequency (Hz): - * ((10^9 << 32) / tsc_to_system_mul) >> tsc_shift - */ - UINT32 TscToSystemMultiplier; - INT8 TscShift; - INT8 pad1[3]; + /* + * Updates to the following values are preceded and followed by an + * increment of 'version'. The guest can therefore detect updates by + * looking for changes to 'version'. If the least-significant bit of + * the version number is set then an update is in progress and the guest + * must wait to read a consistent set of values. + * The correct way to interact with the version number is similar to + * Linux's seqlock: see the implementations of read_seqbegin/read_seqretry. + */ + UINT32 Version; + UINT32 pad0; + UINT64 TscTimestamp; /* TSC at last update of time vals. */ + UINT64 SystemTime; /* Time, in nanosecs, since boot. */ + + /* + * Current system time: + * system_time + + * ((((tsc - tsc_timestamp) << tsc_shift) * tsc_to_system_mul) >> 32) + * CPU frequency (Hz): + * ((10^9 << 32) / tsc_to_system_mul) >> tsc_shift + */ + UINT32 TscToSystemMultiplier; + INT8 TscShift; + INT8 pad1[3]; }; /* 32 bytes */ + typedef struct vcpu_time_info XEN_VCPU_TIME_INFO; struct vcpu_info { - /* - * 'evtchn_upcall_pending' is written non-zero by Xen to indicate - * a pending notification for a particular VCPU. It is then cleared - * by the guest OS /before/ checking for pending work, thus avoiding - * a set-and-check race. Note that the mask is only accessed by Xen - * on the CPU that is currently hosting the VCPU. This means that the - * pending and mask flags can be updated by the guest without special - * synchronisation (i.e., no need for the x86 LOCK prefix). - * This may seem suboptimal because if the pending flag is set by - * a different CPU then an IPI may be scheduled even when the mask - * is set. However, note: - * 1. The task of 'interrupt holdoff' is covered by the per-event- - * channel mask bits. A 'noisy' event that is continually being - * triggered can be masked at source at this very precise - * granularity. - * 2. The main purpose of the per-VCPU mask is therefore to restrict - * reentrant execution: whether for concurrency control, or to - * prevent unbounded stack usage. Whatever the purpose, we expect - * that the mask will be asserted only for short periods at a time, - * and so the likelihood of a 'spurious' IPI is suitably small. - * The mask is read before making an event upcall to the guest: a - * non-zero mask therefore guarantees that the VCPU will not receive - * an upcall activation. The mask is cleared when the VCPU requests - * to block: this avoids wakeup-waiting races. - */ - UINT8 evtchn_upcall_pending; -#ifdef XEN_HAVE_PV_UPCALL_MASK - UINT8 evtchn_upcall_mask; -#else /* XEN_HAVE_PV_UPCALL_MASK */ - UINT8 pad0; -#endif /* XEN_HAVE_PV_UPCALL_MASK */ - xen_ulong_t evtchn_pending_sel; - struct arch_vcpu_info arch; - struct vcpu_time_info Time; + /* + * 'evtchn_upcall_pending' is written non-zero by Xen to indicate + * a pending notification for a particular VCPU. It is then cleared + * by the guest OS /before/ checking for pending work, thus avoiding + * a set-and-check race. Note that the mask is only accessed by Xen + * on the CPU that is currently hosting the VCPU. This means that the + * pending and mask flags can be updated by the guest without special + * synchronisation (i.e., no need for the x86 LOCK prefix). + * This may seem suboptimal because if the pending flag is set by + * a different CPU then an IPI may be scheduled even when the mask + * is set. However, note: + * 1. The task of 'interrupt holdoff' is covered by the per-event- + * channel mask bits. A 'noisy' event that is continually being + * triggered can be masked at source at this very precise + * granularity. + * 2. The main purpose of the per-VCPU mask is therefore to restrict + * reentrant execution: whether for concurrency control, or to + * prevent unbounded stack usage. Whatever the purpose, we expect + * that the mask will be asserted only for short periods at a time, + * and so the likelihood of a 'spurious' IPI is suitably small. + * The mask is read before making an event upcall to the guest: a + * non-zero mask therefore guarantees that the VCPU will not receive + * an upcall activation. The mask is cleared when the VCPU requests + * to block: this avoids wakeup-waiting races. + */ + UINT8 evtchn_upcall_pending; + #ifdef XEN_HAVE_PV_UPCALL_MASK + UINT8 evtchn_upcall_mask; + #else /* XEN_HAVE_PV_UPCALL_MASK */ + UINT8 pad0; + #endif /* XEN_HAVE_PV_UPCALL_MASK */ + xen_ulong_t evtchn_pending_sel; + struct arch_vcpu_info arch; + struct vcpu_time_info Time; }; /* 64 bytes (x86) */ -#ifndef __XEN__ + + #ifndef __XEN__ typedef struct vcpu_info vcpu_info_t; -#endif + #endif /* * `incontents 200 startofday_shared Start-of-day shared data structure @@ -250,71 +254,71 @@ typedef struct vcpu_info vcpu_info_t; * of this structure remaining constant. */ struct shared_info { - struct vcpu_info VcpuInfo[XEN_LEGACY_MAX_VCPUS]; - - /* - * A domain can create "event channels" on which it can send and receive - * asynchronous event notifications. There are three classes of event that - * are delivered by this mechanism: - * 1. Bi-directional inter- and intra-domain connections. Domains must - * arrange out-of-band to set up a connection (usually by allocating - * an unbound 'listener' port and avertising that via a storage service - * such as xenstore). - * 2. Physical interrupts. A domain with suitable hardware-access - * privileges can bind an event-channel port to a physical interrupt - * source. - * 3. Virtual interrupts ('events'). A domain can bind an event-channel - * port to a virtual interrupt source, such as the virtual-timer - * device or the emergency console. - * - * Event channels are addressed by a "port index". Each channel is - * associated with two bits of information: - * 1. PENDING -- notifies the domain that there is a pending notification - * to be processed. This bit is cleared by the guest. - * 2. MASK -- if this bit is clear then a 0->1 transition of PENDING - * will cause an asynchronous upcall to be scheduled. This bit is only - * updated by the guest. It is read-only within Xen. If a channel - * becomes pending while the channel is masked then the 'edge' is lost - * (i.e., when the channel is unmasked, the guest must manually handle - * pending notifications as no upcall will be scheduled by Xen). - * - * To expedite scanning of pending notifications, any 0->1 pending - * transition on an unmasked channel causes a corresponding bit in a - * per-vcpu selector word to be set. Each bit in the selector covers a - * 'C INTN' in the PENDING bitfield array. - */ - xen_ulong_t evtchn_pending[sizeof(xen_ulong_t) * 8]; - xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8]; - - /* - * Wallclock time: updated only by control software. Guests should base - * their gettimeofday() syscall on this wallclock-base value. - */ - UINT32 wc_version; /* Version counter: see vcpu_time_info_t. */ - UINT32 wc_sec; /* Secs 00:00:00 UTC, Jan 1, 1970. */ - UINT32 wc_nsec; /* Nsecs 00:00:00 UTC, Jan 1, 1970. */ - - struct arch_shared_info arch; - + struct vcpu_info VcpuInfo[XEN_LEGACY_MAX_VCPUS]; + + /* + * A domain can create "event channels" on which it can send and receive + * asynchronous event notifications. There are three classes of event that + * are delivered by this mechanism: + * 1. Bi-directional inter- and intra-domain connections. Domains must + * arrange out-of-band to set up a connection (usually by allocating + * an unbound 'listener' port and avertising that via a storage service + * such as xenstore). + * 2. Physical interrupts. A domain with suitable hardware-access + * privileges can bind an event-channel port to a physical interrupt + * source. + * 3. Virtual interrupts ('events'). A domain can bind an event-channel + * port to a virtual interrupt source, such as the virtual-timer + * device or the emergency console. + * + * Event channels are addressed by a "port index". Each channel is + * associated with two bits of information: + * 1. PENDING -- notifies the domain that there is a pending notification + * to be processed. This bit is cleared by the guest. + * 2. MASK -- if this bit is clear then a 0->1 transition of PENDING + * will cause an asynchronous upcall to be scheduled. This bit is only + * updated by the guest. It is read-only within Xen. If a channel + * becomes pending while the channel is masked then the 'edge' is lost + * (i.e., when the channel is unmasked, the guest must manually handle + * pending notifications as no upcall will be scheduled by Xen). + * + * To expedite scanning of pending notifications, any 0->1 pending + * transition on an unmasked channel causes a corresponding bit in a + * per-vcpu selector word to be set. Each bit in the selector covers a + * 'C INTN' in the PENDING bitfield array. + */ + xen_ulong_t evtchn_pending[sizeof (xen_ulong_t) * 8]; + xen_ulong_t evtchn_mask[sizeof (xen_ulong_t) * 8]; + + /* + * Wallclock time: updated only by control software. Guests should base + * their gettimeofday() syscall on this wallclock-base value. + */ + UINT32 wc_version; /* Version counter: see vcpu_time_info_t. */ + UINT32 wc_sec; /* Secs 00:00:00 UTC, Jan 1, 1970. */ + UINT32 wc_nsec; /* Nsecs 00:00:00 UTC, Jan 1, 1970. */ + + struct arch_shared_info arch; }; -#ifndef __XEN__ + + #ifndef __XEN__ typedef struct shared_info shared_info_t; typedef struct shared_info XEN_SHARED_INFO; -#endif + #endif /* Turn a plain number into a C UINTN constant. */ -#define __mk_unsigned_long(x) x ## UL -#define mk_unsigned_long(x) __mk_unsigned_long(x) +#define __mk_unsigned_long(x) x ## UL +#define mk_unsigned_long(x) __mk_unsigned_long(x) -__DEFINE_XEN_GUEST_HANDLE(uint8, UINT8); -__DEFINE_XEN_GUEST_HANDLE(uint16, UINT16); -__DEFINE_XEN_GUEST_HANDLE(uint32, UINT32); -__DEFINE_XEN_GUEST_HANDLE(uint64, UINT64); +__DEFINE_XEN_GUEST_HANDLE (uint8, UINT8); +__DEFINE_XEN_GUEST_HANDLE (uint16, UINT16); +__DEFINE_XEN_GUEST_HANDLE (uint32, UINT32); +__DEFINE_XEN_GUEST_HANDLE (uint64, UINT64); #else /* __ASSEMBLY__ */ /* In assembly code we cannot use C numeric constant suffixes. */ -#define mk_unsigned_long(x) x +#define mk_unsigned_long(x) x #endif /* !__ASSEMBLY__ */ diff --git a/OvmfPkg/Include/Library/BlobVerifierLib.h b/OvmfPkg/Include/Library/BlobVerifierLib.h index 65c01af9bf..7e1af27574 100644 --- a/OvmfPkg/Include/Library/BlobVerifierLib.h +++ b/OvmfPkg/Include/Library/BlobVerifierLib.h @@ -30,9 +30,9 @@ EFI_STATUS EFIAPI VerifyBlob ( - IN CONST CHAR16 *BlobName, - IN CONST VOID *Buf, - IN UINT32 BufSize + IN CONST CHAR16 *BlobName, + IN CONST VOID *Buf, + IN UINT32 BufSize ); #endif diff --git a/OvmfPkg/Include/Library/LoadLinuxLib.h b/OvmfPkg/Include/Library/LoadLinuxLib.h index 483f8d4b9c..65f5895bfc 100644 --- a/OvmfPkg/Include/Library/LoadLinuxLib.h +++ b/OvmfPkg/Include/Library/LoadLinuxLib.h @@ -9,7 +9,6 @@ #ifndef __LOAD_LINUX_LIB__ #define __LOAD_LINUX_LIB__ - /** Verifies that the kernel setup image is valid and supported. The kernel setup image should be checked before using other library @@ -26,11 +25,10 @@ EFI_STATUS EFIAPI LoadLinuxCheckKernelSetup ( - IN VOID *KernelSetup, - IN UINTN KernelSetupSize + IN VOID *KernelSetup, + IN UINTN KernelSetupSize ); - /** Gets the initial runtime size of the Linux kernel image by examining the kernel setup image. @@ -46,11 +44,10 @@ LoadLinuxCheckKernelSetup ( UINTN EFIAPI LoadLinuxGetKernelSize ( - IN VOID *KernelSetup, - IN UINTN KernelSize + IN VOID *KernelSetup, + IN UINTN KernelSize ); - /** Loads and boots UEFI Linux. @@ -71,7 +68,6 @@ LoadLinux ( IN OUT VOID *KernelSetup ); - /** Allocates pages for the kernel setup image. @@ -81,13 +77,12 @@ LoadLinux ( @retval !NULL - The address of the pages allocated **/ -VOID* +VOID * EFIAPI LoadLinuxAllocateKernelSetupPages ( - IN UINTN Pages + IN UINTN Pages ); - /** Clears the uninitialised space before and after the struct setup_header in the kernel setup image. The kernel requires that these be zeroed @@ -105,7 +100,7 @@ LoadLinuxAllocateKernelSetupPages ( EFI_STATUS EFIAPI LoadLinuxInitializeKernelSetup ( - IN VOID *KernelSetup + IN VOID *KernelSetup ); /** @@ -119,14 +114,13 @@ LoadLinuxInitializeKernelSetup ( @retval !NULL - The address of the pages allocated **/ -VOID* +VOID * EFIAPI LoadLinuxAllocateKernelPages ( - IN VOID *KernelSetup, - IN UINTN Pages + IN VOID *KernelSetup, + IN UINTN Pages ); - /** Allocates pages for the kernel command line. @@ -136,13 +130,12 @@ LoadLinuxAllocateKernelPages ( @retval !NULL - The address of the pages allocated **/ -VOID* +VOID * EFIAPI LoadLinuxAllocateCommandLinePages ( - IN UINTN Pages + IN UINTN Pages ); - /** Allocates pages for the initrd image. @@ -153,14 +146,13 @@ LoadLinuxAllocateCommandLinePages ( @retval !NULL - The address of the pages allocated **/ -VOID* +VOID * EFIAPI LoadLinuxAllocateInitrdPages ( - IN VOID *KernelSetup, - IN UINTN Pages + IN VOID *KernelSetup, + IN UINTN Pages ); - /** Sets the kernel command line parameter within the setup image. @@ -175,11 +167,10 @@ LoadLinuxAllocateInitrdPages ( EFI_STATUS EFIAPI LoadLinuxSetCommandLine ( - IN OUT VOID *KernelSetup, - IN CHAR8 *CommandLine + IN OUT VOID *KernelSetup, + IN CHAR8 *CommandLine ); - /** Sets the kernel initial ram disk pointer within the setup image. @@ -195,11 +186,9 @@ LoadLinuxSetCommandLine ( EFI_STATUS EFIAPI LoadLinuxSetInitrd ( - IN OUT VOID *KernelSetup, - IN VOID *Initrd, - IN UINTN InitrdSize + IN OUT VOID *KernelSetup, + IN VOID *Initrd, + IN UINTN InitrdSize ); - #endif - diff --git a/OvmfPkg/Include/Library/MemEncryptSevLib.h b/OvmfPkg/Include/Library/MemEncryptSevLib.h index adc490e466..e1ec161d21 100644 --- a/OvmfPkg/Include/Library/MemEncryptSevLib.h +++ b/OvmfPkg/Include/Library/MemEncryptSevLib.h @@ -21,7 +21,7 @@ // gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbBackupSize // in any FDF file using this PCD. // -#define VMGEXIT_MAXIMUM_VC_COUNT 2 +#define VMGEXIT_MAXIMUM_VC_COUNT 2 // // Per-CPU data mapping structure @@ -30,11 +30,11 @@ // writing random data to that area. // typedef struct { - UINT32 Dr7Cached; - UINT64 Dr7; + UINT32 Dr7Cached; + UINT64 Dr7; - UINTN VcCount; - VOID *GhcbBackupPages; + UINTN VcCount; + VOID *GhcbBackupPages; } SEV_ES_PER_CPU_DATA; // @@ -91,9 +91,9 @@ MemEncryptSevIsEnabled ( RETURN_STATUS EFIAPI MemEncryptSevClearPageEncMask ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINTN NumPages + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINTN NumPages ); /** @@ -116,12 +116,11 @@ MemEncryptSevClearPageEncMask ( RETURN_STATUS EFIAPI MemEncryptSevSetPageEncMask ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINTN NumPages + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINTN NumPages ); - /** Locate the page range that covers the initial (pre-SMBASE-relocation) SMRAM Save State Map. @@ -140,8 +139,8 @@ MemEncryptSevSetPageEncMask ( RETURN_STATUS EFIAPI MemEncryptSevLocateInitialSmramSaveStateMapPages ( - OUT UINTN *BaseAddress, - OUT UINTN *NumberOfPages + OUT UINTN *BaseAddress, + OUT UINTN *NumberOfPages ); /** @@ -173,9 +172,9 @@ MemEncryptSevGetEncryptionMask ( MEM_ENCRYPT_SEV_ADDRESS_RANGE_STATE EFIAPI MemEncryptSevGetAddressRangeState ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINTN Length + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINTN Length ); /** @@ -198,9 +197,9 @@ MemEncryptSevGetAddressRangeState ( RETURN_STATUS EFIAPI MemEncryptSevClearMmioPageEncMask ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINTN NumPages + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINTN NumPages ); #endif // _MEM_ENCRYPT_SEV_LIB_H_ diff --git a/OvmfPkg/Include/Library/NvVarsFileLib.h b/OvmfPkg/Include/Library/NvVarsFileLib.h index 1b924be324..c2fb5c6846 100644 --- a/OvmfPkg/Include/Library/NvVarsFileLib.h +++ b/OvmfPkg/Include/Library/NvVarsFileLib.h @@ -22,10 +22,9 @@ EFI_STATUS EFIAPI ConnectNvVarsToFileSystem ( - IN EFI_HANDLE FsHandle + IN EFI_HANDLE FsHandle ); - /** Update non-volatile variables stored on the file system. @@ -40,6 +39,4 @@ EFIAPI UpdateNvVarsOnFileSystem ( ); - #endif - diff --git a/OvmfPkg/Include/Library/PciCapLib.h b/OvmfPkg/Include/Library/PciCapLib.h index 9f834ccb6e..4badb0a914 100644 --- a/OvmfPkg/Include/Library/PciCapLib.h +++ b/OvmfPkg/Include/Library/PciCapLib.h @@ -50,7 +50,7 @@ typedef struct PCI_CAP_DEV PCI_CAP_DEV; **/ typedef RETURN_STATUS -(EFIAPI *PCI_CAP_DEV_READ_CONFIG) ( +(EFIAPI *PCI_CAP_DEV_READ_CONFIG)( IN PCI_CAP_DEV *PciDevice, IN UINT16 SourceOffset, OUT VOID *DestinationBuffer, @@ -85,7 +85,7 @@ RETURN_STATUS **/ typedef RETURN_STATUS -(EFIAPI *PCI_CAP_DEV_WRITE_CONFIG) ( +(EFIAPI *PCI_CAP_DEV_WRITE_CONFIG)( IN PCI_CAP_DEV *PciDevice, IN UINT16 DestinationOffset, IN VOID *SourceBuffer, @@ -97,8 +97,8 @@ RETURN_STATUS // config space accessors. // struct PCI_CAP_DEV { - PCI_CAP_DEV_READ_CONFIG ReadConfig; - PCI_CAP_DEV_WRITE_CONFIG WriteConfig; + PCI_CAP_DEV_READ_CONFIG ReadConfig; + PCI_CAP_DEV_WRITE_CONFIG WriteConfig; }; // @@ -126,26 +126,26 @@ typedef enum { // Public data structure that PciCapGetInfo() fills in about a PCI_CAP object. // typedef struct { - PCI_CAP_DOMAIN Domain; - UINT16 CapId; + PCI_CAP_DOMAIN Domain; + UINT16 CapId; // // The capability identified by Domain and CapId may have multiple instances // in config space. NumInstances provides the total count of occurrences of // the capability. It is always positive. // - UINT16 NumInstances; + UINT16 NumInstances; // // Instance is the serial number, in capabilities list traversal order (not // necessarily config space offset order), of the one capability instance // that PciCapGetInfo() is reporting about. Instance is always smaller than // NumInstances. // - UINT16 Instance; + UINT16 Instance; // // The offset in config space at which the capability header of the // capability instance starts. // - UINT16 Offset; + UINT16 Offset; // // The deduced maximum size of the capability instance, including the // capability header. This hint is an upper bound, calculated -- without @@ -154,15 +154,14 @@ typedef struct { // capability, and (b) from the end of the config space identified by Domain, // whichever is lower. // - UINT16 MaxSizeHint; + UINT16 MaxSizeHint; // // The version number of the capability instance. Always zero when Domain is // PciCapNormal. // - UINT8 Version; + UINT8 Version; } PCI_CAP_INFO; - /** Parse the capabilities lists (both normal and extended, as applicable) of a PCI device. @@ -198,11 +197,10 @@ typedef struct { RETURN_STATUS EFIAPI PciCapListInit ( - IN PCI_CAP_DEV *PciDevice, - OUT PCI_CAP_LIST **CapList + IN PCI_CAP_DEV *PciDevice, + OUT PCI_CAP_LIST **CapList ); - /** Free the resources used by CapList. @@ -212,10 +210,9 @@ PciCapListInit ( VOID EFIAPI PciCapListUninit ( - IN PCI_CAP_LIST *CapList + IN PCI_CAP_LIST *CapList ); - /** Locate a capability instance in the parsed capabilities lists. @@ -252,14 +249,13 @@ PciCapListUninit ( RETURN_STATUS EFIAPI PciCapListFindCap ( - IN PCI_CAP_LIST *CapList, - IN PCI_CAP_DOMAIN Domain, - IN UINT16 CapId, - IN UINT16 Instance, - OUT PCI_CAP **Cap OPTIONAL + IN PCI_CAP_LIST *CapList, + IN PCI_CAP_DOMAIN Domain, + IN UINT16 CapId, + IN UINT16 Instance, + OUT PCI_CAP **Cap OPTIONAL ); - /** Locate the first instance of the capability given by (Domain, CapId) such that the instance's Version is greater than or equal to MinVersion. @@ -296,14 +292,13 @@ PciCapListFindCap ( RETURN_STATUS EFIAPI PciCapListFindCapVersion ( - IN PCI_CAP_LIST *CapList, - IN PCI_CAP_DOMAIN Domain, - IN UINT16 CapId, - IN UINT8 MinVersion, - OUT PCI_CAP **Cap OPTIONAL + IN PCI_CAP_LIST *CapList, + IN PCI_CAP_DOMAIN Domain, + IN UINT16 CapId, + IN UINT8 MinVersion, + OUT PCI_CAP **Cap OPTIONAL ); - /** Get information about a PCI Capability instance. @@ -321,11 +316,10 @@ PciCapListFindCapVersion ( RETURN_STATUS EFIAPI PciCapGetInfo ( - IN PCI_CAP *Cap, - OUT PCI_CAP_INFO *Info + IN PCI_CAP *Cap, + OUT PCI_CAP_INFO *Info ); - /** Read a slice of a capability instance. @@ -365,14 +359,13 @@ PciCapGetInfo ( RETURN_STATUS EFIAPI PciCapRead ( - IN PCI_CAP_DEV *PciDevice, - IN PCI_CAP *Cap, - IN UINT16 SourceOffsetInCap, - OUT VOID *DestinationBuffer, - IN UINT16 Size + IN PCI_CAP_DEV *PciDevice, + IN PCI_CAP *Cap, + IN UINT16 SourceOffsetInCap, + OUT VOID *DestinationBuffer, + IN UINT16 Size ); - /** Write a slice of a capability instance. @@ -413,11 +406,11 @@ PciCapRead ( RETURN_STATUS EFIAPI PciCapWrite ( - IN PCI_CAP_DEV *PciDevice, - IN PCI_CAP *Cap, - IN UINT16 DestinationOffsetInCap, - IN VOID *SourceBuffer, - IN UINT16 Size + IN PCI_CAP_DEV *PciDevice, + IN PCI_CAP *Cap, + IN UINT16 DestinationOffsetInCap, + IN VOID *SourceBuffer, + IN UINT16 Size ); #endif // __PCI_CAP_LIB_H__ diff --git a/OvmfPkg/Include/Library/PciCapPciIoLib.h b/OvmfPkg/Include/Library/PciCapPciIoLib.h index 9524ff3e97..1109096379 100644 --- a/OvmfPkg/Include/Library/PciCapPciIoLib.h +++ b/OvmfPkg/Include/Library/PciCapPciIoLib.h @@ -14,7 +14,6 @@ #include - /** Create a PCI_CAP_DEV object from an EFI_PCI_IO_PROTOCOL instance. The config space accessors are based upon EFI_PCI_IO_PROTOCOL.Pci.Read() and @@ -32,11 +31,10 @@ EFI_STATUS EFIAPI PciCapPciIoDeviceInit ( - IN EFI_PCI_IO_PROTOCOL *PciIo, - OUT PCI_CAP_DEV **PciDevice + IN EFI_PCI_IO_PROTOCOL *PciIo, + OUT PCI_CAP_DEV **PciDevice ); - /** Free the resources used by PciDevice. @@ -46,7 +44,7 @@ PciCapPciIoDeviceInit ( VOID EFIAPI PciCapPciIoDeviceUninit ( - IN PCI_CAP_DEV *PciDevice + IN PCI_CAP_DEV *PciDevice ); #endif // __PCI_CAP_PCI_IO_LIB_H__ diff --git a/OvmfPkg/Include/Library/PciCapPciSegmentLib.h b/OvmfPkg/Include/Library/PciCapPciSegmentLib.h index 1c9c28e2a7..7bcfb57652 100644 --- a/OvmfPkg/Include/Library/PciCapPciSegmentLib.h +++ b/OvmfPkg/Include/Library/PciCapPciSegmentLib.h @@ -12,7 +12,6 @@ #include - /** Create a PCI_CAP_DEV object from the PCI Segment:Bus:Device.Function quadruplet. The config space accessors are based upon PciSegmentLib. @@ -52,15 +51,14 @@ RETURN_STATUS EFIAPI PciCapPciSegmentDeviceInit ( - IN PCI_CAP_DOMAIN MaxDomain, - IN UINT16 Segment, - IN UINT8 Bus, - IN UINT8 Device, - IN UINT8 Function, - OUT PCI_CAP_DEV **PciDevice + IN PCI_CAP_DOMAIN MaxDomain, + IN UINT16 Segment, + IN UINT8 Bus, + IN UINT8 Device, + IN UINT8 Function, + OUT PCI_CAP_DEV **PciDevice ); - /** Free the resources used by PciDevice. @@ -70,7 +68,7 @@ PciCapPciSegmentDeviceInit ( VOID EFIAPI PciCapPciSegmentDeviceUninit ( - IN PCI_CAP_DEV *PciDevice + IN PCI_CAP_DEV *PciDevice ); #endif // __PCI_CAP_PCI_SEGMENT_LIB_H__ diff --git a/OvmfPkg/Include/Library/PciHostBridgeUtilityLib.h b/OvmfPkg/Include/Library/PciHostBridgeUtilityLib.h index d2dc18a1af..28516e4c1e 100644 --- a/OvmfPkg/Include/Library/PciHostBridgeUtilityLib.h +++ b/OvmfPkg/Include/Library/PciHostBridgeUtilityLib.h @@ -13,10 +13,8 @@ #ifndef __PCI_HOST_BRIDGE_UTILITY_LIB_H__ #define __PCI_HOST_BRIDGE_UTILITY_LIB_H__ - #include - /** Utility function to initialize a PCI_ROOT_BRIDGE structure. @@ -67,22 +65,21 @@ EFI_STATUS EFIAPI PciHostBridgeUtilityInitRootBridge ( - IN UINT64 Supports, - IN UINT64 Attributes, - IN UINT64 AllocAttributes, - IN BOOLEAN DmaAbove4G, - IN BOOLEAN NoExtendedConfigSpace, - IN UINT8 RootBusNumber, - IN UINT8 MaxSubBusNumber, - IN PCI_ROOT_BRIDGE_APERTURE *Io, - IN PCI_ROOT_BRIDGE_APERTURE *Mem, - IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G, - IN PCI_ROOT_BRIDGE_APERTURE *PMem, - IN PCI_ROOT_BRIDGE_APERTURE *PMemAbove4G, - OUT PCI_ROOT_BRIDGE *RootBus + IN UINT64 Supports, + IN UINT64 Attributes, + IN UINT64 AllocAttributes, + IN BOOLEAN DmaAbove4G, + IN BOOLEAN NoExtendedConfigSpace, + IN UINT8 RootBusNumber, + IN UINT8 MaxSubBusNumber, + IN PCI_ROOT_BRIDGE_APERTURE *Io, + IN PCI_ROOT_BRIDGE_APERTURE *Mem, + IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G, + IN PCI_ROOT_BRIDGE_APERTURE *PMem, + IN PCI_ROOT_BRIDGE_APERTURE *PMemAbove4G, + OUT PCI_ROOT_BRIDGE *RootBus ); - /** Utility function to uninitialize a PCI_ROOT_BRIDGE structure set up with PciHostBridgeUtilityInitRootBridge(). @@ -95,10 +92,9 @@ PciHostBridgeUtilityInitRootBridge ( VOID EFIAPI PciHostBridgeUtilityUninitRootBridge ( - IN PCI_ROOT_BRIDGE *RootBus + IN PCI_ROOT_BRIDGE *RootBus ); - /** Utility function to return all the root bridge instances in an array. @@ -131,21 +127,20 @@ PciHostBridgeUtilityUninitRootBridge ( PCI_ROOT_BRIDGE * EFIAPI PciHostBridgeUtilityGetRootBridges ( - OUT UINTN *Count, - IN UINT64 Attributes, - IN UINT64 AllocationAttributes, - IN BOOLEAN DmaAbove4G, - IN BOOLEAN NoExtendedConfigSpace, - IN UINTN BusMin, - IN UINTN BusMax, - IN PCI_ROOT_BRIDGE_APERTURE *Io, - IN PCI_ROOT_BRIDGE_APERTURE *Mem, - IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G, - IN PCI_ROOT_BRIDGE_APERTURE *PMem, - IN PCI_ROOT_BRIDGE_APERTURE *PMemAbove4G + OUT UINTN *Count, + IN UINT64 Attributes, + IN UINT64 AllocationAttributes, + IN BOOLEAN DmaAbove4G, + IN BOOLEAN NoExtendedConfigSpace, + IN UINTN BusMin, + IN UINTN BusMax, + IN PCI_ROOT_BRIDGE_APERTURE *Io, + IN PCI_ROOT_BRIDGE_APERTURE *Mem, + IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G, + IN PCI_ROOT_BRIDGE_APERTURE *PMem, + IN PCI_ROOT_BRIDGE_APERTURE *PMemAbove4G ); - /** Utility function to free root bridge instances array from PciHostBridgeUtilityGetRootBridges(). @@ -156,11 +151,10 @@ PciHostBridgeUtilityGetRootBridges ( VOID EFIAPI PciHostBridgeUtilityFreeRootBridges ( - IN PCI_ROOT_BRIDGE *Bridges, - IN UINTN Count + IN PCI_ROOT_BRIDGE *Bridges, + IN UINTN Count ); - /** Utility function to inform the platform that the resource conflict happens. @@ -181,5 +175,4 @@ PciHostBridgeUtilityResourceConflict ( IN VOID *Configuration ); - #endif // __PCI_HOST_BRIDGE_UTILITY_LIB_H__ diff --git a/OvmfPkg/Include/Library/PlatformFvbLib.h b/OvmfPkg/Include/Library/PlatformFvbLib.h index dc0569808c..9acbdc2aa7 100644 --- a/OvmfPkg/Include/Library/PlatformFvbLib.h +++ b/OvmfPkg/Include/Library/PlatformFvbLib.h @@ -28,14 +28,13 @@ VOID EFIAPI PlatformFvbDataRead ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, - IN EFI_LBA Lba, - IN UINTN Offset, - IN UINTN NumBytes, - IN UINT8 *Buffer + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Offset, + IN UINTN NumBytes, + IN UINT8 *Buffer ); - /** This function will be called following a call to the EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL Write function. @@ -57,7 +56,6 @@ PlatformFvbDataWritten ( IN UINT8 *Buffer ); - /** This function will be called following a call to the EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL Erase function. @@ -72,10 +70,8 @@ PlatformFvbDataWritten ( VOID EFIAPI PlatformFvbBlocksErased ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, - IN VA_LIST List + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + IN VA_LIST List ); - #endif - diff --git a/OvmfPkg/Include/Library/QemuBootOrderLib.h b/OvmfPkg/Include/Library/QemuBootOrderLib.h index 03dea786c9..9f06439aed 100644 --- a/OvmfPkg/Include/Library/QemuBootOrderLib.h +++ b/OvmfPkg/Include/Library/QemuBootOrderLib.h @@ -13,7 +13,6 @@ #include #include - /** Connect devices based on the boot order retrieved from QEMU. @@ -48,7 +47,6 @@ ConnectDevicesFromQemu ( VOID ); - /** Set the boot order based on configuration retrieved from QEMU. @@ -83,7 +81,6 @@ SetBootOrderFromQemu ( VOID ); - /** Calculate the number of seconds we should be showing the FrontPage progress bar for. diff --git a/OvmfPkg/Include/Library/QemuFwCfgLib.h b/OvmfPkg/Include/Library/QemuFwCfgLib.h index 68002bb654..2ad96c0297 100644 --- a/OvmfPkg/Include/Library/QemuFwCfgLib.h +++ b/OvmfPkg/Include/Library/QemuFwCfgLib.h @@ -29,7 +29,6 @@ QemuFwCfgIsAvailable ( VOID ); - /** Selects a firmware configuration item for reading. @@ -42,10 +41,9 @@ QemuFwCfgIsAvailable ( VOID EFIAPI QemuFwCfgSelectItem ( - IN FIRMWARE_CONFIG_ITEM QemuFwCfgItem + IN FIRMWARE_CONFIG_ITEM QemuFwCfgItem ); - /** Reads firmware configuration bytes into a buffer @@ -60,11 +58,10 @@ QemuFwCfgSelectItem ( VOID EFIAPI QemuFwCfgReadBytes ( - IN UINTN Size, - IN VOID *Buffer OPTIONAL + IN UINTN Size, + IN VOID *Buffer OPTIONAL ); - /** Writes firmware configuration bytes from a buffer @@ -79,11 +76,10 @@ QemuFwCfgReadBytes ( VOID EFIAPI QemuFwCfgWriteBytes ( - IN UINTN Size, - IN VOID *Buffer + IN UINTN Size, + IN VOID *Buffer ); - /** Skip bytes in the firmware configuration item. @@ -96,10 +92,9 @@ QemuFwCfgWriteBytes ( VOID EFIAPI QemuFwCfgSkipBytes ( - IN UINTN Size + IN UINTN Size ); - /** Reads a UINT8 firmware configuration value @@ -112,7 +107,6 @@ QemuFwCfgRead8 ( VOID ); - /** Reads a UINT16 firmware configuration value @@ -125,7 +119,6 @@ QemuFwCfgRead16 ( VOID ); - /** Reads a UINT32 firmware configuration value @@ -138,7 +131,6 @@ QemuFwCfgRead32 ( VOID ); - /** Reads a UINT64 firmware configuration value @@ -151,7 +143,6 @@ QemuFwCfgRead64 ( VOID ); - /** Find the configuration item corresponding to the firmware configuration file. @@ -174,4 +165,3 @@ QemuFwCfgFindFile ( ); #endif - diff --git a/OvmfPkg/Include/Library/QemuFwCfgS3Lib.h b/OvmfPkg/Include/Library/QemuFwCfgS3Lib.h index 4103659282..b6b1e30da3 100644 --- a/OvmfPkg/Include/Library/QemuFwCfgS3Lib.h +++ b/OvmfPkg/Include/Library/QemuFwCfgS3Lib.h @@ -32,7 +32,6 @@ QemuFwCfgS3Enabled ( VOID ); - /** Prototype for the callback function that the client module provides. @@ -86,12 +85,11 @@ QemuFwCfgS3Enabled ( ScratchBuffer is aligned at 8 bytes. **/ typedef -VOID (EFIAPI FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION) ( +VOID(EFIAPI FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION)( IN OUT VOID *Context OPTIONAL, IN OUT VOID *ScratchBuffer ); - /** Install the client module's FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION callback for when the production of ACPI S3 Boot Script opcodes becomes possible. @@ -152,12 +150,11 @@ VOID (EFIAPI FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION) ( RETURN_STATUS EFIAPI QemuFwCfgS3CallWhenBootScriptReady ( - IN FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION *Callback, - IN OUT VOID *Context OPTIONAL, - IN UINTN ScratchBufferSize + IN FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION *Callback, + IN OUT VOID *Context OPTIONAL, + IN UINTN ScratchBufferSize ); - /** Produce ACPI S3 Boot Script opcodes that (optionally) select an fw_cfg item, and transfer data to it. @@ -201,11 +198,10 @@ QemuFwCfgS3CallWhenBootScriptReady ( RETURN_STATUS EFIAPI QemuFwCfgS3ScriptWriteBytes ( - IN INT32 FirmwareConfigItem, - IN UINTN NumberOfBytes + IN INT32 FirmwareConfigItem, + IN UINTN NumberOfBytes ); - /** Produce ACPI S3 Boot Script opcodes that (optionally) select an fw_cfg item, and transfer data from it. @@ -248,11 +244,10 @@ QemuFwCfgS3ScriptWriteBytes ( RETURN_STATUS EFIAPI QemuFwCfgS3ScriptReadBytes ( - IN INT32 FirmwareConfigItem, - IN UINTN NumberOfBytes + IN INT32 FirmwareConfigItem, + IN UINTN NumberOfBytes ); - /** Produce ACPI S3 Boot Script opcodes that (optionally) select an fw_cfg item, and increase its offset. @@ -288,11 +283,10 @@ QemuFwCfgS3ScriptReadBytes ( RETURN_STATUS EFIAPI QemuFwCfgS3ScriptSkipBytes ( - IN INT32 FirmwareConfigItem, - IN UINTN NumberOfBytes + IN INT32 FirmwareConfigItem, + IN UINTN NumberOfBytes ); - /** Produce ACPI S3 Boot Script opcodes that check a value in ScratchBuffer. @@ -346,10 +340,10 @@ QemuFwCfgS3ScriptSkipBytes ( RETURN_STATUS EFIAPI QemuFwCfgS3ScriptCheckValue ( - IN VOID *ScratchData, - IN UINT8 ValueSize, - IN UINT64 ValueMask, - IN UINT64 Value + IN VOID *ScratchData, + IN UINT8 ValueSize, + IN UINT64 ValueMask, + IN UINT64 Value ); #endif diff --git a/OvmfPkg/Include/Library/QemuFwCfgSimpleParserLib.h b/OvmfPkg/Include/Library/QemuFwCfgSimpleParserLib.h index c6062bae87..bcbf3bc4fc 100644 --- a/OvmfPkg/Include/Library/QemuFwCfgSimpleParserLib.h +++ b/OvmfPkg/Include/Library/QemuFwCfgSimpleParserLib.h @@ -41,8 +41,8 @@ RETURN_STATUS EFIAPI QemuFwCfgParseBool ( - IN CONST CHAR8 *FileName, - OUT BOOLEAN *Value + IN CONST CHAR8 *FileName, + OUT BOOLEAN *Value ); /** @@ -82,9 +82,9 @@ QemuFwCfgParseBool ( RETURN_STATUS EFIAPI QemuFwCfgParseUint8 ( - IN CONST CHAR8 *FileName, - IN BOOLEAN ParseAsHex, - OUT UINT8 *Value + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT8 *Value ); // @@ -96,33 +96,33 @@ QemuFwCfgParseUint8 ( RETURN_STATUS EFIAPI QemuFwCfgParseUint16 ( - IN CONST CHAR8 *FileName, - IN BOOLEAN ParseAsHex, - OUT UINT16 *Value + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT16 *Value ); RETURN_STATUS EFIAPI QemuFwCfgParseUint32 ( - IN CONST CHAR8 *FileName, - IN BOOLEAN ParseAsHex, - OUT UINT32 *Value + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT32 *Value ); RETURN_STATUS EFIAPI QemuFwCfgParseUint64 ( - IN CONST CHAR8 *FileName, - IN BOOLEAN ParseAsHex, - OUT UINT64 *Value + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT64 *Value ); RETURN_STATUS EFIAPI QemuFwCfgParseUintn ( - IN CONST CHAR8 *FileName, - IN BOOLEAN ParseAsHex, - OUT UINTN *Value + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINTN *Value ); #endif // QEMU_FW_CFG_SIMPLE_PARSER_LIB_H_ diff --git a/OvmfPkg/Include/Library/QemuLoadImageLib.h b/OvmfPkg/Include/Library/QemuLoadImageLib.h index 746b74f73c..f344b763a4 100644 --- a/OvmfPkg/Include/Library/QemuLoadImageLib.h +++ b/OvmfPkg/Include/Library/QemuLoadImageLib.h @@ -37,7 +37,7 @@ EFI_STATUS EFIAPI QemuLoadKernelImage ( - OUT EFI_HANDLE *ImageHandle + OUT EFI_HANDLE *ImageHandle ); /** @@ -59,7 +59,7 @@ QemuLoadKernelImage ( EFI_STATUS EFIAPI QemuStartKernelImage ( - IN OUT EFI_HANDLE *ImageHandle + IN OUT EFI_HANDLE *ImageHandle ); /** @@ -78,7 +78,7 @@ QemuStartKernelImage ( EFI_STATUS EFIAPI QemuUnloadKernelImage ( - IN EFI_HANDLE ImageHandle + IN EFI_HANDLE ImageHandle ); #endif diff --git a/OvmfPkg/Include/Library/SerializeVariablesLib.h b/OvmfPkg/Include/Library/SerializeVariablesLib.h index 8e74b718f1..5ca395786c 100644 --- a/OvmfPkg/Include/Library/SerializeVariablesLib.h +++ b/OvmfPkg/Include/Library/SerializeVariablesLib.h @@ -9,7 +9,6 @@ #ifndef __SERIALIZE_VARIABLES_LIB__ #define __SERIALIZE_VARIABLES_LIB__ - /** Callback function for each variable @@ -35,7 +34,6 @@ RETURN_STATUS IN VOID *Data ); - /** Creates a new variable serialization instance @@ -50,10 +48,9 @@ RETURN_STATUS RETURN_STATUS EFIAPI SerializeVariablesNewInstance ( - OUT EFI_HANDLE *Handle + OUT EFI_HANDLE *Handle ); - /** Free memory associated with a variable serialization instance @@ -68,10 +65,9 @@ SerializeVariablesNewInstance ( RETURN_STATUS EFIAPI SerializeVariablesFreeInstance ( - IN EFI_HANDLE Handle + IN EFI_HANDLE Handle ); - /** Creates a new variable serialization instance using the given binary representation of the variables to fill the new instance @@ -92,12 +88,11 @@ SerializeVariablesFreeInstance ( RETURN_STATUS EFIAPI SerializeVariablesNewInstanceFromBuffer ( - OUT EFI_HANDLE *Handle, - IN VOID *Buffer, - IN UINTN Size + OUT EFI_HANDLE *Handle, + IN VOID *Buffer, + IN UINTN Size ); - /** Iterates all variables found with RuntimeServices GetNextVariableName @@ -115,11 +110,10 @@ SerializeVariablesNewInstanceFromBuffer ( RETURN_STATUS EFIAPI SerializeVariablesIterateSystemVariables ( - IN VARIABLE_SERIALIZATION_ITERATION_CALLBACK CallbackFunction, - IN VOID *Context + IN VARIABLE_SERIALIZATION_ITERATION_CALLBACK CallbackFunction, + IN VOID *Context ); - /** Iterates all variables found in the variable serialization instance @@ -138,12 +132,11 @@ SerializeVariablesIterateSystemVariables ( RETURN_STATUS EFIAPI SerializeVariablesIterateInstanceVariables ( - IN EFI_HANDLE Handle, - IN VARIABLE_SERIALIZATION_ITERATION_CALLBACK CallbackFunction, - IN VOID *Context + IN EFI_HANDLE Handle, + IN VARIABLE_SERIALIZATION_ITERATION_CALLBACK CallbackFunction, + IN VOID *Context ); - /** Sets all variables found in the variable serialization instance @@ -159,10 +152,9 @@ SerializeVariablesIterateInstanceVariables ( RETURN_STATUS EFIAPI SerializeVariablesSetSerializedVariables ( - IN EFI_HANDLE Handle + IN EFI_HANDLE Handle ); - /** Adds a variable to the variable serialization instance @@ -181,15 +173,14 @@ SerializeVariablesSetSerializedVariables ( RETURN_STATUS EFIAPI SerializeVariablesAddVariable ( - IN EFI_HANDLE Handle, - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN UINT32 Attributes, - IN UINTN DataSize, - IN VOID *Data + IN EFI_HANDLE Handle, + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + IN UINT32 Attributes, + IN UINTN DataSize, + IN VOID *Data ); - /** Serializes the variables known to this instance into the provided buffer. @@ -213,11 +204,9 @@ SerializeVariablesAddVariable ( RETURN_STATUS EFIAPI SerializeVariablesToBuffer ( - IN EFI_HANDLE Handle, - OUT VOID *Buffer, - IN OUT UINTN *Size + IN EFI_HANDLE Handle, + OUT VOID *Buffer, + IN OUT UINTN *Size ); - #endif - diff --git a/OvmfPkg/Include/Library/VirtioLib.h b/OvmfPkg/Include/Library/VirtioLib.h index e714ec7aee..085e719b08 100644 --- a/OvmfPkg/Include/Library/VirtioLib.h +++ b/OvmfPkg/Include/Library/VirtioLib.h @@ -16,7 +16,6 @@ #include - /** Configure a virtio ring. @@ -47,12 +46,11 @@ EFI_STATUS EFIAPI VirtioRingInit ( - IN VIRTIO_DEVICE_PROTOCOL *VirtIo, - IN UINT16 QueueSize, - OUT VRING *Ring + IN VIRTIO_DEVICE_PROTOCOL *VirtIo, + IN UINT16 QueueSize, + OUT VRING *Ring ); - /** Map the ring buffer so that it can be accessed equally by both guest @@ -73,10 +71,10 @@ VirtioRingInit ( EFI_STATUS EFIAPI VirtioRingMap ( - IN VIRTIO_DEVICE_PROTOCOL *VirtIo, - IN VRING *Ring, - OUT UINT64 *RingBaseShift, - OUT VOID **Mapping + IN VIRTIO_DEVICE_PROTOCOL *VirtIo, + IN VRING *Ring, + OUT UINT64 *RingBaseShift, + OUT VOID **Mapping ); /** @@ -95,21 +93,19 @@ VirtioRingMap ( VOID EFIAPI VirtioRingUninit ( - IN VIRTIO_DEVICE_PROTOCOL *VirtIo, - IN OUT VRING *Ring + IN VIRTIO_DEVICE_PROTOCOL *VirtIo, + IN OUT VRING *Ring ); - // // Internal use structure for tracking the submission of a multi-descriptor // request. // typedef struct { - UINT16 HeadDescIdx; - UINT16 NextDescIdx; + UINT16 HeadDescIdx; + UINT16 NextDescIdx; } DESC_INDICES; - /** Turn off interrupt notifications from the host, and prepare for appending @@ -125,11 +121,10 @@ typedef struct { VOID EFIAPI VirtioPrepare ( - IN OUT VRING *Ring, - OUT DESC_INDICES *Indices + IN OUT VRING *Ring, + OUT DESC_INDICES *Indices ); - /** Append a contiguous buffer for transmission / reception via the virtio ring. @@ -171,14 +166,13 @@ VirtioPrepare ( VOID EFIAPI VirtioAppendDesc ( - IN OUT VRING *Ring, - IN UINT64 BufferDeviceAddress, - IN UINT32 BufferSize, - IN UINT16 Flags, - IN OUT DESC_INDICES *Indices + IN OUT VRING *Ring, + IN UINT64 BufferDeviceAddress, + IN UINT32 BufferSize, + IN UINT16 Flags, + IN OUT DESC_INDICES *Indices ); - /** Notify the host about the descriptor chain just built, and wait until the @@ -209,14 +203,13 @@ VirtioAppendDesc ( EFI_STATUS EFIAPI VirtioFlush ( - IN VIRTIO_DEVICE_PROTOCOL *VirtIo, - IN UINT16 VirtQueueId, - IN OUT VRING *Ring, - IN DESC_INDICES *Indices, - OUT UINT32 *UsedLen OPTIONAL + IN VIRTIO_DEVICE_PROTOCOL *VirtIo, + IN UINT16 VirtQueueId, + IN OUT VRING *Ring, + IN DESC_INDICES *Indices, + OUT UINT32 *UsedLen OPTIONAL ); - /** Report the feature bits to the VirtIo 1.0 device that the VirtIo 1.0 driver @@ -257,9 +250,9 @@ VirtioFlush ( EFI_STATUS EFIAPI Virtio10WriteFeatures ( - IN VIRTIO_DEVICE_PROTOCOL *VirtIo, - IN UINT64 Features, - IN OUT UINT8 *DeviceStatus + IN VIRTIO_DEVICE_PROTOCOL *VirtIo, + IN UINT64 Features, + IN OUT UINT8 *DeviceStatus ); /** @@ -313,4 +306,5 @@ VirtioMapAllBytesInSharedBuffer ( OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, OUT VOID **Mapping ); + #endif // _VIRTIO_LIB_H_ diff --git a/OvmfPkg/Include/Library/VirtioMmioDeviceLib.h b/OvmfPkg/Include/Library/VirtioMmioDeviceLib.h index 2ea2830dda..41df774161 100644 --- a/OvmfPkg/Include/Library/VirtioMmioDeviceLib.h +++ b/OvmfPkg/Include/Library/VirtioMmioDeviceLib.h @@ -35,8 +35,8 @@ **/ EFI_STATUS VirtioMmioInstallDevice ( - IN PHYSICAL_ADDRESS BaseAddress, - IN EFI_HANDLE Handle + IN PHYSICAL_ADDRESS BaseAddress, + IN EFI_HANDLE Handle ); /** @@ -54,7 +54,7 @@ VirtioMmioInstallDevice ( **/ EFI_STATUS VirtioMmioUninstallDevice ( - IN EFI_HANDLE Handle + IN EFI_HANDLE Handle ); #endif // _VIRTIO_MMIO_DEVICE_LIB_H_ diff --git a/OvmfPkg/Include/Library/XenHypercallLib.h b/OvmfPkg/Include/Library/XenHypercallLib.h index c1491dd652..28eee8ccac 100644 --- a/OvmfPkg/Include/Library/XenHypercallLib.h +++ b/OvmfPkg/Include/Library/XenHypercallLib.h @@ -66,7 +66,7 @@ XenHypercall2 ( UINT64 EFIAPI XenHypercallHvmGetParam ( - UINT32 Index + UINT32 Index ); /** @@ -81,8 +81,8 @@ XenHypercallHvmGetParam ( INTN EFIAPI XenHypercallMemoryOp ( - IN UINTN Operation, - IN OUT VOID *Arguments + IN UINTN Operation, + IN OUT VOID *Arguments ); /** @@ -97,8 +97,8 @@ XenHypercallMemoryOp ( INTN EFIAPI XenHypercallEventChannelOp ( - IN INTN Operation, - IN OUT VOID *Arguments + IN INTN Operation, + IN OUT VOID *Arguments ); #endif diff --git a/OvmfPkg/Include/Library/XenIoMmioLib.h b/OvmfPkg/Include/Library/XenIoMmioLib.h index 3db54178bf..072fdbf821 100644 --- a/OvmfPkg/Include/Library/XenIoMmioLib.h +++ b/OvmfPkg/Include/Library/XenIoMmioLib.h @@ -32,11 +32,10 @@ **/ EFI_STATUS XenIoMmioInstall ( - IN OUT EFI_HANDLE *Handle, - IN EFI_PHYSICAL_ADDRESS GrantTableAddress + IN OUT EFI_HANDLE *Handle, + IN EFI_PHYSICAL_ADDRESS GrantTableAddress ); - /** Uninstall the XENBUS_ROOT_DEVICE_PATH and XENIO_PROTOCOL protocols @@ -52,7 +51,7 @@ XenIoMmioInstall ( **/ EFI_STATUS XenIoMmioUninstall ( - IN EFI_HANDLE Handle + IN EFI_HANDLE Handle ); #endif diff --git a/OvmfPkg/Include/OvmfPlatforms.h b/OvmfPkg/Include/OvmfPlatforms.h index 3b85593b70..de5d7663b4 100644 --- a/OvmfPkg/Include/OvmfPlatforms.h +++ b/OvmfPkg/Include/OvmfPlatforms.h @@ -26,17 +26,17 @@ // // Values we program into the PM base address registers // -#define PIIX4_PMBA_VALUE 0xB000 -#define ICH9_PMBASE_VALUE 0x0600 +#define PIIX4_PMBA_VALUE 0xB000 +#define ICH9_PMBASE_VALUE 0x0600 // // Common bits in same-purpose registers // -#define PMBA_RTE BIT0 +#define PMBA_RTE BIT0 // // Common IO ports relative to the Power Management Base Address // -#define ACPI_TIMER_OFFSET 0x8 +#define ACPI_TIMER_OFFSET 0x8 #endif diff --git a/OvmfPkg/Include/Pcd/CpuHotEjectData.h b/OvmfPkg/Include/Pcd/CpuHotEjectData.h index 0671437552..3f955269c4 100644 --- a/OvmfPkg/Include/Pcd/CpuHotEjectData.h +++ b/OvmfPkg/Include/Pcd/CpuHotEjectData.h @@ -29,7 +29,7 @@ **/ typedef VOID -(EFIAPI *CPU_HOT_EJECT_HANDLER) ( +(EFIAPI *CPU_HOT_EJECT_HANDLER)( IN UINTN ProcessorNum ); @@ -40,21 +40,21 @@ VOID // QEMU CPU Selector is UINT32, so we choose an invalid value larger // than that type. // -#define CPU_EJECT_QEMU_SELECTOR_INVALID (MAX_UINT64) +#define CPU_EJECT_QEMU_SELECTOR_INVALID (MAX_UINT64) typedef struct { // // Maps ProcessorNum -> QemuSelector for pending hot-ejects // - volatile UINT64 *QemuSelectorMap; + volatile UINT64 *QemuSelectorMap; // // Handler to do the CPU ejection // - volatile CPU_HOT_EJECT_HANDLER Handler; + volatile CPU_HOT_EJECT_HANDLER Handler; // // Entries in the QemuSelectorMap // - UINT32 ArrayLength; + UINT32 ArrayLength; } CPU_HOT_EJECT_DATA; #endif // CPU_HOT_EJECT_DATA_H_ diff --git a/OvmfPkg/Include/Protocol/Legacy8259.h b/OvmfPkg/Include/Protocol/Legacy8259.h index 6dc7226ece..233e817c06 100644 --- a/OvmfPkg/Include/Protocol/Legacy8259.h +++ b/OvmfPkg/Include/Protocol/Legacy8259.h @@ -14,7 +14,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #ifndef _EFI_LEGACY_8259_H_ #define _EFI_LEGACY_8259_H_ - #define EFI_LEGACY_8259_PROTOCOL_GUID \ { \ 0x38321dba, 0x4fe0, 0x4e17, {0x8a, 0xec, 0x41, 0x30, 0x55, 0xea, 0xed, 0xc1 } \ @@ -275,17 +274,17 @@ EFI_STATUS **/ struct _EFI_LEGACY_8259_PROTOCOL { - EFI_LEGACY_8259_SET_VECTOR_BASE SetVectorBase; - EFI_LEGACY_8259_GET_MASK GetMask; - EFI_LEGACY_8259_SET_MASK SetMask; - EFI_LEGACY_8259_SET_MODE SetMode; - EFI_LEGACY_8259_GET_VECTOR GetVector; - EFI_LEGACY_8259_ENABLE_IRQ EnableIrq; - EFI_LEGACY_8259_DISABLE_IRQ DisableIrq; - EFI_LEGACY_8259_GET_INTERRUPT_LINE GetInterruptLine; - EFI_LEGACY_8259_END_OF_INTERRUPT EndOfInterrupt; + EFI_LEGACY_8259_SET_VECTOR_BASE SetVectorBase; + EFI_LEGACY_8259_GET_MASK GetMask; + EFI_LEGACY_8259_SET_MASK SetMask; + EFI_LEGACY_8259_SET_MODE SetMode; + EFI_LEGACY_8259_GET_VECTOR GetVector; + EFI_LEGACY_8259_ENABLE_IRQ EnableIrq; + EFI_LEGACY_8259_DISABLE_IRQ DisableIrq; + EFI_LEGACY_8259_GET_INTERRUPT_LINE GetInterruptLine; + EFI_LEGACY_8259_END_OF_INTERRUPT EndOfInterrupt; }; -extern EFI_GUID gEfiLegacy8259ProtocolGuid; +extern EFI_GUID gEfiLegacy8259ProtocolGuid; #endif diff --git a/OvmfPkg/Include/Protocol/OvmfLoadedX86LinuxKernel.h b/OvmfPkg/Include/Protocol/OvmfLoadedX86LinuxKernel.h index 01cfd9d189..9adb75cc5a 100644 --- a/OvmfPkg/Include/Protocol/OvmfLoadedX86LinuxKernel.h +++ b/OvmfPkg/Include/Protocol/OvmfLoadedX86LinuxKernel.h @@ -17,16 +17,16 @@ {0xa3edc05d, 0xb618, 0x4ff6, {0x95, 0x52, 0x76, 0xd7, 0x88, 0x63, 0x43, 0xc8}} typedef struct { - VOID *SetupBuf; - VOID *KernelBuf; - CHAR8 *CommandLine; - VOID *InitrdData; - UINTN SetupSize; - UINTN KernelInitialSize; - UINTN InitrdSize; - UINTN CommandLineSize; + VOID *SetupBuf; + VOID *KernelBuf; + CHAR8 *CommandLine; + VOID *InitrdData; + UINTN SetupSize; + UINTN KernelInitialSize; + UINTN InitrdSize; + UINTN CommandLineSize; } OVMF_LOADED_X86_LINUX_KERNEL; -extern EFI_GUID gOvmfLoadedX86LinuxKernelProtocolGuid; +extern EFI_GUID gOvmfLoadedX86LinuxKernelProtocolGuid; #endif diff --git a/OvmfPkg/Include/Protocol/VirtioDevice.h b/OvmfPkg/Include/Protocol/VirtioDevice.h index ea560719ac..ad37f4e3f7 100644 --- a/OvmfPkg/Include/Protocol/VirtioDevice.h +++ b/OvmfPkg/Include/Protocol/VirtioDevice.h @@ -19,14 +19,14 @@ // // VirtIo Specification Revision: Major[31:24].Minor[23:16].Revision[15:0] // -#define VIRTIO_SPEC_REVISION(major,minor,revision) \ +#define VIRTIO_SPEC_REVISION(major, minor, revision) \ ((((major) & 0xFF) << 24) | (((minor) & 0xFF) << 16) | ((revision) & 0xFFFF)) -#define VIRTIO_DEVICE_PROTOCOL_GUID { \ +#define VIRTIO_DEVICE_PROTOCOL_GUID {\ 0xfa920010, 0x6785, 0x4941, {0xb6, 0xec, 0x49, 0x8c, 0x57, 0x9f, 0x16, 0x0a }\ } -typedef struct _VIRTIO_DEVICE_PROTOCOL VIRTIO_DEVICE_PROTOCOL; +typedef struct _VIRTIO_DEVICE_PROTOCOL VIRTIO_DEVICE_PROTOCOL; // // VIRTIO Operation for VIRTIO_MAP_SHARED @@ -72,7 +72,7 @@ typedef enum { **/ typedef EFI_STATUS -(EFIAPI *VIRTIO_DEVICE_READ) ( +(EFIAPI *VIRTIO_DEVICE_READ)( IN VIRTIO_DEVICE_PROTOCOL *This, IN UINTN FieldOffset, IN UINTN FieldSize, @@ -103,7 +103,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *VIRTIO_DEVICE_WRITE) ( +(EFIAPI *VIRTIO_DEVICE_WRITE)( IN VIRTIO_DEVICE_PROTOCOL *This, IN UINTN FieldOffset, IN UINTN FieldSize, @@ -124,7 +124,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *VIRTIO_GET_DEVICE_FEATURES) ( +(EFIAPI *VIRTIO_GET_DEVICE_FEATURES)( IN VIRTIO_DEVICE_PROTOCOL *This, OUT UINT64 *DeviceFeatures ); @@ -139,7 +139,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *VIRTIO_SET_GUEST_FEATURES) ( +(EFIAPI *VIRTIO_SET_GUEST_FEATURES)( IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT64 Features ); @@ -172,7 +172,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *VIRTIO_SET_QUEUE_ADDRESS) ( +(EFIAPI *VIRTIO_SET_QUEUE_ADDRESS)( IN VIRTIO_DEVICE_PROTOCOL *This, IN VRING *Ring, IN UINT64 RingBaseShift @@ -195,7 +195,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *VIRTIO_SET_QUEUE_SEL) ( +(EFIAPI *VIRTIO_SET_QUEUE_SEL)( IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT16 Index ); @@ -214,7 +214,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *VIRTIO_SET_QUEUE_NOTIFY) ( +(EFIAPI *VIRTIO_SET_QUEUE_NOTIFY)( IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT16 Index ); @@ -239,7 +239,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *VIRTIO_SET_QUEUE_ALIGN) ( +(EFIAPI *VIRTIO_SET_QUEUE_ALIGN)( IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT32 Alignment ); @@ -261,7 +261,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *VIRTIO_SET_PAGE_SIZE) ( +(EFIAPI *VIRTIO_SET_PAGE_SIZE)( IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT32 PageSize ); @@ -284,7 +284,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *VIRTIO_GET_QUEUE_NUM_MAX) ( +(EFIAPI *VIRTIO_GET_QUEUE_NUM_MAX)( IN VIRTIO_DEVICE_PROTOCOL *This, OUT UINT16 *QueueNumMax ); @@ -306,7 +306,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *VIRTIO_SET_QUEUE_NUM) ( +(EFIAPI *VIRTIO_SET_QUEUE_NUM)( IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT16 QueueSize ); @@ -326,7 +326,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *VIRTIO_GET_DEVICE_STATUS) ( +(EFIAPI *VIRTIO_GET_DEVICE_STATUS)( IN VIRTIO_DEVICE_PROTOCOL *This, OUT UINT8 *DeviceStatus ); @@ -345,7 +345,7 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *VIRTIO_SET_DEVICE_STATUS) ( +(EFIAPI *VIRTIO_SET_DEVICE_STATUS)( IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT8 DeviceStatus ); @@ -434,7 +434,7 @@ VOID typedef EFI_STATUS -(EFIAPI *VIRTIO_MAP_SHARED) ( +(EFIAPI *VIRTIO_MAP_SHARED)( IN VIRTIO_DEVICE_PROTOCOL *This, IN VIRTIO_MAP_OPERATION Operation, IN VOID *HostAddress, @@ -476,45 +476,45 @@ struct _VIRTIO_DEVICE_PROTOCOL { // // VirtIo Specification Revision encoded with VIRTIO_SPEC_REVISION() // - UINT32 Revision; + UINT32 Revision; // // From the Virtio Spec // - INT32 SubSystemDeviceId; + INT32 SubSystemDeviceId; - VIRTIO_GET_DEVICE_FEATURES GetDeviceFeatures; - VIRTIO_SET_GUEST_FEATURES SetGuestFeatures; + VIRTIO_GET_DEVICE_FEATURES GetDeviceFeatures; + VIRTIO_SET_GUEST_FEATURES SetGuestFeatures; - VIRTIO_SET_QUEUE_ADDRESS SetQueueAddress; + VIRTIO_SET_QUEUE_ADDRESS SetQueueAddress; - VIRTIO_SET_QUEUE_SEL SetQueueSel; + VIRTIO_SET_QUEUE_SEL SetQueueSel; - VIRTIO_SET_QUEUE_NOTIFY SetQueueNotify; + VIRTIO_SET_QUEUE_NOTIFY SetQueueNotify; - VIRTIO_SET_QUEUE_ALIGN SetQueueAlign; - VIRTIO_SET_PAGE_SIZE SetPageSize; + VIRTIO_SET_QUEUE_ALIGN SetQueueAlign; + VIRTIO_SET_PAGE_SIZE SetPageSize; - VIRTIO_GET_QUEUE_NUM_MAX GetQueueNumMax; - VIRTIO_SET_QUEUE_NUM SetQueueNum; + VIRTIO_GET_QUEUE_NUM_MAX GetQueueNumMax; + VIRTIO_SET_QUEUE_NUM SetQueueNum; - VIRTIO_GET_DEVICE_STATUS GetDeviceStatus; - VIRTIO_SET_DEVICE_STATUS SetDeviceStatus; + VIRTIO_GET_DEVICE_STATUS GetDeviceStatus; + VIRTIO_SET_DEVICE_STATUS SetDeviceStatus; // // Functions to read/write Device Specific headers // - VIRTIO_DEVICE_WRITE WriteDevice; - VIRTIO_DEVICE_READ ReadDevice; + VIRTIO_DEVICE_WRITE WriteDevice; + VIRTIO_DEVICE_READ ReadDevice; // // Functions to allocate, free, map and unmap shared buffer // - VIRTIO_ALLOCATE_SHARED AllocateSharedPages; - VIRTIO_FREE_SHARED FreeSharedPages; - VIRTIO_MAP_SHARED MapSharedBuffer; - VIRTIO_UNMAP_SHARED UnmapSharedBuffer; + VIRTIO_ALLOCATE_SHARED AllocateSharedPages; + VIRTIO_FREE_SHARED FreeSharedPages; + VIRTIO_MAP_SHARED MapSharedBuffer; + VIRTIO_UNMAP_SHARED UnmapSharedBuffer; }; -extern EFI_GUID gVirtioDeviceProtocolGuid; +extern EFI_GUID gVirtioDeviceProtocolGuid; #endif diff --git a/OvmfPkg/Include/Protocol/XenBus.h b/OvmfPkg/Include/Protocol/XenBus.h index 0dac926628..e34347fc3f 100644 --- a/OvmfPkg/Include/Protocol/XenBus.h +++ b/OvmfPkg/Include/Protocol/XenBus.h @@ -1,4 +1,3 @@ - /** @file XenBus protocol to be used between the XenBus bus driver and Xen PV devices. @@ -28,12 +27,11 @@ typedef struct _XENBUS_PROTOCOL XENBUS_PROTOCOL; typedef enum xenbus_state XenBusState; -typedef struct -{ - UINT32 Id; +typedef struct { + UINT32 Id; } XENSTORE_TRANSACTION; -#define XST_NIL ((XENSTORE_TRANSACTION *) NULL) +#define XST_NIL ((XENSTORE_TRANSACTION *) NULL) typedef enum { XENSTORE_STATUS_SUCCESS = 0, @@ -55,7 +53,6 @@ typedef enum { XENSTORE_STATUS_E2BIG } XENSTORE_STATUS; - #include #include @@ -126,7 +123,7 @@ XENSTORE_STATUS **/ typedef XENSTORE_STATUS -(EFIAPI *XENBUS_XS_PRINTF) ( +(EFIAPI *XENBUS_XS_PRINTF)( IN XENBUS_PROTOCOL *This, IN CONST XENSTORE_TRANSACTION *Transaction, IN CONST CHAR8 *Directory, @@ -148,7 +145,7 @@ XENSTORE_STATUS **/ typedef XENSTORE_STATUS -(EFIAPI *XENBUS_XS_REMOVE) ( +(EFIAPI *XENBUS_XS_REMOVE)( IN XENBUS_PROTOCOL *This, IN CONST XENSTORE_TRANSACTION *Transaction, IN CONST CHAR8 *Node @@ -187,7 +184,7 @@ XENSTORE_STATUS **/ typedef XENSTORE_STATUS -(EFIAPI *XENBUS_XS_TRANSACTION_END) ( +(EFIAPI *XENBUS_XS_TRANSACTION_END)( IN XENBUS_PROTOCOL *This, IN CONST XENSTORE_TRANSACTION *Transaction, IN BOOLEAN Abort @@ -256,7 +253,7 @@ EFI_STATUS **/ typedef UINT32 -(EFIAPI *XENBUS_EVENT_CHANNEL_ALLOCATE) ( +(EFIAPI *XENBUS_EVENT_CHANNEL_ALLOCATE)( IN XENBUS_PROTOCOL *This, IN domid_t DomainId, OUT evtchn_port_t *Port @@ -272,7 +269,7 @@ UINT32 **/ typedef UINT32 -(EFIAPI *XENBUS_EVENT_CHANNEL_NOTIFY) ( +(EFIAPI *XENBUS_EVENT_CHANNEL_NOTIFY)( IN XENBUS_PROTOCOL *This, IN evtchn_port_t Port ); @@ -287,7 +284,7 @@ UINT32 **/ typedef UINT32 -(EFIAPI *XENBUS_EVENT_CHANNEL_CLOSE) ( +(EFIAPI *XENBUS_EVENT_CHANNEL_CLOSE)( IN XENBUS_PROTOCOL *This, IN evtchn_port_t Port ); @@ -309,7 +306,7 @@ UINT32 **/ typedef XENSTORE_STATUS -(EFIAPI *XENBUS_REGISTER_WATCH) ( +(EFIAPI *XENBUS_REGISTER_WATCH)( IN XENBUS_PROTOCOL *This, IN CONST CHAR8 *Node, OUT VOID **Token @@ -332,7 +329,7 @@ XENSTORE_STATUS **/ typedef XENSTORE_STATUS -(EFIAPI *XENBUS_REGISTER_WATCH_BACKEND) ( +(EFIAPI *XENBUS_REGISTER_WATCH_BACKEND)( IN XENBUS_PROTOCOL *This, IN CONST CHAR8 *Node, OUT VOID **Token @@ -347,7 +344,7 @@ XENSTORE_STATUS **/ typedef VOID -(EFIAPI *XENBUS_UNREGISTER_WATCH) ( +(EFIAPI *XENBUS_UNREGISTER_WATCH)( IN XENBUS_PROTOCOL *This, IN VOID *Token ); @@ -364,12 +361,11 @@ VOID **/ typedef XENSTORE_STATUS -(EFIAPI *XENBUS_WAIT_FOR_WATCH) ( +(EFIAPI *XENBUS_WAIT_FOR_WATCH)( IN XENBUS_PROTOCOL *This, IN VOID *Token ); - /// /// Protocol structure /// @@ -377,34 +373,34 @@ XENSTORE_STATUS /// should not be used outside of the EDK II tree. /// struct _XENBUS_PROTOCOL { - XENBUS_XS_READ XsRead; - XENBUS_XS_BACKEND_READ XsBackendRead; - XENBUS_XS_PRINTF XsPrintf; - XENBUS_XS_REMOVE XsRemove; - XENBUS_XS_TRANSACTION_START XsTransactionStart; - XENBUS_XS_TRANSACTION_END XsTransactionEnd; - XENBUS_SET_STATE SetState; - - XENBUS_GRANT_ACCESS GrantAccess; - XENBUS_GRANT_END_ACCESS GrantEndAccess; - - XENBUS_EVENT_CHANNEL_ALLOCATE EventChannelAllocate; - XENBUS_EVENT_CHANNEL_NOTIFY EventChannelNotify; - XENBUS_EVENT_CHANNEL_CLOSE EventChannelClose; - - XENBUS_REGISTER_WATCH RegisterWatch; - XENBUS_REGISTER_WATCH_BACKEND RegisterWatchBackend; - XENBUS_UNREGISTER_WATCH UnregisterWatch; - XENBUS_WAIT_FOR_WATCH WaitForWatch; + XENBUS_XS_READ XsRead; + XENBUS_XS_BACKEND_READ XsBackendRead; + XENBUS_XS_PRINTF XsPrintf; + XENBUS_XS_REMOVE XsRemove; + XENBUS_XS_TRANSACTION_START XsTransactionStart; + XENBUS_XS_TRANSACTION_END XsTransactionEnd; + XENBUS_SET_STATE SetState; + + XENBUS_GRANT_ACCESS GrantAccess; + XENBUS_GRANT_END_ACCESS GrantEndAccess; + + XENBUS_EVENT_CHANNEL_ALLOCATE EventChannelAllocate; + XENBUS_EVENT_CHANNEL_NOTIFY EventChannelNotify; + XENBUS_EVENT_CHANNEL_CLOSE EventChannelClose; + + XENBUS_REGISTER_WATCH RegisterWatch; + XENBUS_REGISTER_WATCH_BACKEND RegisterWatchBackend; + XENBUS_UNREGISTER_WATCH UnregisterWatch; + XENBUS_WAIT_FOR_WATCH WaitForWatch; // // Protocol data fields // - CONST CHAR8 *Type; - UINT16 DeviceId; - CONST CHAR8 *Node; - CONST CHAR8 *Backend; + CONST CHAR8 *Type; + UINT16 DeviceId; + CONST CHAR8 *Node; + CONST CHAR8 *Backend; }; -extern EFI_GUID gXenBusProtocolGuid; +extern EFI_GUID gXenBusProtocolGuid; #endif diff --git a/OvmfPkg/Include/Protocol/XenIo.h b/OvmfPkg/Include/Protocol/XenIo.h index f4051ca507..ed1cc37ef1 100644 --- a/OvmfPkg/Include/Protocol/XenIo.h +++ b/OvmfPkg/Include/Protocol/XenIo.h @@ -34,9 +34,9 @@ struct _XENIO_PROTOCOL { // // Protocol data fields // - EFI_PHYSICAL_ADDRESS GrantTableAddress; + EFI_PHYSICAL_ADDRESS GrantTableAddress; }; -extern EFI_GUID gXenIoProtocolGuid; +extern EFI_GUID gXenIoProtocolGuid; #endif diff --git a/OvmfPkg/Include/Register/QemuSmramSaveStateMap.h b/OvmfPkg/Include/Register/QemuSmramSaveStateMap.h index 40cf63c3e6..8ffde0548c 100644 --- a/OvmfPkg/Include/Register/QemuSmramSaveStateMap.h +++ b/OvmfPkg/Include/Register/QemuSmramSaveStateMap.h @@ -25,152 +25,152 @@ SPDX-License-Identifier: BSD-2-Clause-Patent /// 32-bit SMRAM Save State Map /// typedef struct { - UINT8 Reserved0[0x200]; // 7c00h - UINT8 Reserved1[0xf8]; // 7e00h - UINT32 SMBASE; // 7ef8h - UINT32 SMMRevId; // 7efch - UINT16 IORestart; // 7f00h - UINT16 AutoHALTRestart; // 7f02h - UINT8 Reserved2[0x9C]; // 7f08h - UINT32 IOMemAddr; // 7fa0h - UINT32 IOMisc; // 7fa4h - UINT32 _ES; // 7fa8h - UINT32 _CS; // 7fach - UINT32 _SS; // 7fb0h - UINT32 _DS; // 7fb4h - UINT32 _FS; // 7fb8h - UINT32 _GS; // 7fbch - UINT32 Reserved3; // 7fc0h - UINT32 _TR; // 7fc4h - UINT32 _DR7; // 7fc8h - UINT32 _DR6; // 7fcch - UINT32 _EAX; // 7fd0h - UINT32 _ECX; // 7fd4h - UINT32 _EDX; // 7fd8h - UINT32 _EBX; // 7fdch - UINT32 _ESP; // 7fe0h - UINT32 _EBP; // 7fe4h - UINT32 _ESI; // 7fe8h - UINT32 _EDI; // 7fech - UINT32 _EIP; // 7ff0h - UINT32 _EFLAGS; // 7ff4h - UINT32 _CR3; // 7ff8h - UINT32 _CR0; // 7ffch + UINT8 Reserved0[0x200]; // 7c00h + UINT8 Reserved1[0xf8]; // 7e00h + UINT32 SMBASE; // 7ef8h + UINT32 SMMRevId; // 7efch + UINT16 IORestart; // 7f00h + UINT16 AutoHALTRestart; // 7f02h + UINT8 Reserved2[0x9C]; // 7f08h + UINT32 IOMemAddr; // 7fa0h + UINT32 IOMisc; // 7fa4h + UINT32 _ES; // 7fa8h + UINT32 _CS; // 7fach + UINT32 _SS; // 7fb0h + UINT32 _DS; // 7fb4h + UINT32 _FS; // 7fb8h + UINT32 _GS; // 7fbch + UINT32 Reserved3; // 7fc0h + UINT32 _TR; // 7fc4h + UINT32 _DR7; // 7fc8h + UINT32 _DR6; // 7fcch + UINT32 _EAX; // 7fd0h + UINT32 _ECX; // 7fd4h + UINT32 _EDX; // 7fd8h + UINT32 _EBX; // 7fdch + UINT32 _ESP; // 7fe0h + UINT32 _EBP; // 7fe4h + UINT32 _ESI; // 7fe8h + UINT32 _EDI; // 7fech + UINT32 _EIP; // 7ff0h + UINT32 _EFLAGS; // 7ff4h + UINT32 _CR3; // 7ff8h + UINT32 _CR0; // 7ffch } QEMU_SMRAM_SAVE_STATE_MAP32; /// /// 64-bit SMRAM Save State Map /// typedef struct { - UINT8 Reserved0[0x200]; // 7c00h - - UINT16 _ES; // 7e00h - UINT16 _ESAccessRights; // 7e02h - UINT32 _ESLimit; // 7e04h - UINT64 _ESBase; // 7e08h - - UINT16 _CS; // 7e10h - UINT16 _CSAccessRights; // 7e12h - UINT32 _CSLimit; // 7e14h - UINT64 _CSBase; // 7e18h - - UINT16 _SS; // 7e20h - UINT16 _SSAccessRights; // 7e22h - UINT32 _SSLimit; // 7e24h - UINT64 _SSBase; // 7e28h - - UINT16 _DS; // 7e30h - UINT16 _DSAccessRights; // 7e32h - UINT32 _DSLimit; // 7e34h - UINT64 _DSBase; // 7e38h - - UINT16 _FS; // 7e40h - UINT16 _FSAccessRights; // 7e42h - UINT32 _FSLimit; // 7e44h - UINT64 _FSBase; // 7e48h - - UINT16 _GS; // 7e50h - UINT16 _GSAccessRights; // 7e52h - UINT32 _GSLimit; // 7e54h - UINT64 _GSBase; // 7e58h - - UINT32 _GDTRReserved1; // 7e60h - UINT16 _GDTRLimit; // 7e64h - UINT16 _GDTRReserved2; // 7e66h - UINT64 _GDTRBase; // 7e68h - - UINT16 _LDTR; // 7e70h - UINT16 _LDTRAccessRights; // 7e72h - UINT32 _LDTRLimit; // 7e74h - UINT64 _LDTRBase; // 7e78h - - UINT32 _IDTRReserved1; // 7e80h - UINT16 _IDTRLimit; // 7e84h - UINT16 _IDTRReserved2; // 7e86h - UINT64 _IDTRBase; // 7e88h - - UINT16 _TR; // 7e90h - UINT16 _TRAccessRights; // 7e92h - UINT32 _TRLimit; // 7e94h - UINT64 _TRBase; // 7e98h - - UINT64 IO_RIP; // 7ea0h - UINT64 IO_RCX; // 7ea8h - UINT64 IO_RSI; // 7eb0h - UINT64 IO_RDI; // 7eb8h - UINT32 IO_DWord; // 7ec0h - UINT8 Reserved1[0x04]; // 7ec4h - UINT8 IORestart; // 7ec8h - UINT8 AutoHALTRestart; // 7ec9h - UINT8 Reserved2[0x06]; // 7ecah - - UINT64 IA32_EFER; // 7ed0h - UINT64 SVM_Guest; // 7ed8h - UINT64 SVM_GuestVMCB; // 7ee0h - UINT64 SVM_GuestVIntr; // 7ee8h - UINT8 Reserved3[0x0c]; // 7ef0h - - UINT32 SMMRevId; // 7efch - UINT32 SMBASE; // 7f00h - - UINT8 Reserved4[0x1c]; // 7f04h - UINT64 SVM_GuestPAT; // 7f20h - UINT64 SVM_HostIA32_EFER; // 7f28h - UINT64 SVM_HostCR4; // 7f30h - UINT64 SVM_HostCR3; // 7f38h - UINT64 SVM_HostCR0; // 7f40h - - UINT64 _CR4; // 7f48h - UINT64 _CR3; // 7f50h - UINT64 _CR0; // 7f58h - UINT64 _DR7; // 7f60h - UINT64 _DR6; // 7f68h - UINT64 _RFLAGS; // 7f70h - UINT64 _RIP; // 7f78h - UINT64 _R15; // 7f80h - UINT64 _R14; // 7f88h - UINT64 _R13; // 7f90h - UINT64 _R12; // 7f98h - UINT64 _R11; // 7fa0h - UINT64 _R10; // 7fa8h - UINT64 _R9; // 7fb0h - UINT64 _R8; // 7fb8h - UINT64 _RDI; // 7fc0h - UINT64 _RSI; // 7fc8h - UINT64 _RBP; // 7fd0h - UINT64 _RSP; // 7fd8h - UINT64 _RBX; // 7fe0h - UINT64 _RDX; // 7fe8h - UINT64 _RCX; // 7ff0h - UINT64 _RAX; // 7ff8h + UINT8 Reserved0[0x200]; // 7c00h + + UINT16 _ES; // 7e00h + UINT16 _ESAccessRights; // 7e02h + UINT32 _ESLimit; // 7e04h + UINT64 _ESBase; // 7e08h + + UINT16 _CS; // 7e10h + UINT16 _CSAccessRights; // 7e12h + UINT32 _CSLimit; // 7e14h + UINT64 _CSBase; // 7e18h + + UINT16 _SS; // 7e20h + UINT16 _SSAccessRights; // 7e22h + UINT32 _SSLimit; // 7e24h + UINT64 _SSBase; // 7e28h + + UINT16 _DS; // 7e30h + UINT16 _DSAccessRights; // 7e32h + UINT32 _DSLimit; // 7e34h + UINT64 _DSBase; // 7e38h + + UINT16 _FS; // 7e40h + UINT16 _FSAccessRights; // 7e42h + UINT32 _FSLimit; // 7e44h + UINT64 _FSBase; // 7e48h + + UINT16 _GS; // 7e50h + UINT16 _GSAccessRights; // 7e52h + UINT32 _GSLimit; // 7e54h + UINT64 _GSBase; // 7e58h + + UINT32 _GDTRReserved1; // 7e60h + UINT16 _GDTRLimit; // 7e64h + UINT16 _GDTRReserved2; // 7e66h + UINT64 _GDTRBase; // 7e68h + + UINT16 _LDTR; // 7e70h + UINT16 _LDTRAccessRights; // 7e72h + UINT32 _LDTRLimit; // 7e74h + UINT64 _LDTRBase; // 7e78h + + UINT32 _IDTRReserved1; // 7e80h + UINT16 _IDTRLimit; // 7e84h + UINT16 _IDTRReserved2; // 7e86h + UINT64 _IDTRBase; // 7e88h + + UINT16 _TR; // 7e90h + UINT16 _TRAccessRights; // 7e92h + UINT32 _TRLimit; // 7e94h + UINT64 _TRBase; // 7e98h + + UINT64 IO_RIP; // 7ea0h + UINT64 IO_RCX; // 7ea8h + UINT64 IO_RSI; // 7eb0h + UINT64 IO_RDI; // 7eb8h + UINT32 IO_DWord; // 7ec0h + UINT8 Reserved1[0x04]; // 7ec4h + UINT8 IORestart; // 7ec8h + UINT8 AutoHALTRestart; // 7ec9h + UINT8 Reserved2[0x06]; // 7ecah + + UINT64 IA32_EFER; // 7ed0h + UINT64 SVM_Guest; // 7ed8h + UINT64 SVM_GuestVMCB; // 7ee0h + UINT64 SVM_GuestVIntr; // 7ee8h + UINT8 Reserved3[0x0c]; // 7ef0h + + UINT32 SMMRevId; // 7efch + UINT32 SMBASE; // 7f00h + + UINT8 Reserved4[0x1c]; // 7f04h + UINT64 SVM_GuestPAT; // 7f20h + UINT64 SVM_HostIA32_EFER; // 7f28h + UINT64 SVM_HostCR4; // 7f30h + UINT64 SVM_HostCR3; // 7f38h + UINT64 SVM_HostCR0; // 7f40h + + UINT64 _CR4; // 7f48h + UINT64 _CR3; // 7f50h + UINT64 _CR0; // 7f58h + UINT64 _DR7; // 7f60h + UINT64 _DR6; // 7f68h + UINT64 _RFLAGS; // 7f70h + UINT64 _RIP; // 7f78h + UINT64 _R15; // 7f80h + UINT64 _R14; // 7f88h + UINT64 _R13; // 7f90h + UINT64 _R12; // 7f98h + UINT64 _R11; // 7fa0h + UINT64 _R10; // 7fa8h + UINT64 _R9; // 7fb0h + UINT64 _R8; // 7fb8h + UINT64 _RDI; // 7fc0h + UINT64 _RSI; // 7fc8h + UINT64 _RBP; // 7fd0h + UINT64 _RSP; // 7fd8h + UINT64 _RBX; // 7fe0h + UINT64 _RDX; // 7fe8h + UINT64 _RCX; // 7ff0h + UINT64 _RAX; // 7ff8h } QEMU_SMRAM_SAVE_STATE_MAP64; /// /// Union of 32-bit and 64-bit SMRAM Save State Maps /// typedef union { - QEMU_SMRAM_SAVE_STATE_MAP32 x86; - QEMU_SMRAM_SAVE_STATE_MAP64 x64; + QEMU_SMRAM_SAVE_STATE_MAP32 x86; + QEMU_SMRAM_SAVE_STATE_MAP64 x64; } QEMU_SMRAM_SAVE_STATE_MAP; #pragma pack () diff --git a/OvmfPkg/Include/WorkArea.h b/OvmfPkg/Include/WorkArea.h index 721d0f1a8d..ce60d97aa8 100644 --- a/OvmfPkg/Include/WorkArea.h +++ b/OvmfPkg/Include/WorkArea.h @@ -17,7 +17,6 @@ typedef enum { GUEST_TYPE_NON_ENCRYPTED, GUEST_TYPE_AMD_SEV, GUEST_TYPE_INTEL_TDX, - } GUEST_TYPE; // @@ -31,8 +30,8 @@ typedef enum { // OvmfPkg/OvmfPkg.dec // OvmfPkg/OvmfPkgDefines.fdf.inc typedef struct _CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER { - UINT8 GuestType; - UINT8 Reserved1[3]; + UINT8 GuestType; + UINT8 Reserved1[3]; } CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER; // @@ -47,26 +46,26 @@ typedef struct _CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER { // any changes must stay in sync with its usage. // typedef struct _SEC_SEV_ES_WORK_AREA { - UINT8 SevEsEnabled; - UINT8 Reserved1[7]; + UINT8 SevEsEnabled; + UINT8 Reserved1[7]; - UINT64 RandomData; + UINT64 RandomData; - UINT64 EncryptionMask; + UINT64 EncryptionMask; } SEC_SEV_ES_WORK_AREA; // // The SEV work area definition. // typedef struct _SEV_WORK_AREA { - CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER Header; + CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER Header; - SEC_SEV_ES_WORK_AREA SevEsWorkArea; + SEC_SEV_ES_WORK_AREA SevEsWorkArea; } SEV_WORK_AREA; typedef union { - CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER Header; - SEV_WORK_AREA SevWorkArea; + CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER Header; + SEV_WORK_AREA SevWorkArea; } OVMF_WORK_AREA; #endif diff --git a/OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.c b/OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.c index db1532f109..8730874613 100644 --- a/OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.c +++ b/OvmfPkg/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupport.c @@ -23,13 +23,13 @@ // // The Legacy BIOS protocol has been located. // -STATIC BOOLEAN mLegacyBiosInstalled; +STATIC BOOLEAN mLegacyBiosInstalled; // // The protocol interface this driver produces. // STATIC EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_PROTOCOL - mIncompatiblePciDeviceSupport; + mIncompatiblePciDeviceSupport; // // Configuration template for the CheckDevice() protocol member function. @@ -42,24 +42,24 @@ STATIC EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_PROTOCOL // #pragma pack (1) typedef struct { - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR AddressSpaceDesc; - EFI_ACPI_END_TAG_DESCRIPTOR EndDesc; + EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR AddressSpaceDesc; + EFI_ACPI_END_TAG_DESCRIPTOR EndDesc; } MMIO64_PREFERENCE; #pragma pack () -STATIC CONST MMIO64_PREFERENCE mConfiguration = { +STATIC CONST MMIO64_PREFERENCE mConfiguration = { // // AddressSpaceDesc // { ACPI_ADDRESS_SPACE_DESCRIPTOR, // Desc (UINT16)( // Len - sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - - OFFSET_OF ( - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR, - ResType - ) - ), + sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - + OFFSET_OF ( + EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR, + ResType + ) + ), ACPI_ADDRESS_SPACE_TYPE_MEM, // ResType 0, // GenFlag 0, // SpecificFlag @@ -88,8 +88,7 @@ STATIC CONST MMIO64_PREFERENCE mConfiguration = { // // The CheckDevice() member function has been called. // -STATIC BOOLEAN mCheckDeviceCalled; - +STATIC BOOLEAN mCheckDeviceCalled; /** Notification callback for Legacy BIOS protocol installation. @@ -103,17 +102,20 @@ STATIC VOID EFIAPI LegacyBiosInstalled ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - EFI_STATUS Status; - EFI_LEGACY_BIOS_PROTOCOL *LegacyBios; + EFI_STATUS Status; + EFI_LEGACY_BIOS_PROTOCOL *LegacyBios; ASSERT (!mCheckDeviceCalled); - Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, - NULL /* Registration */, (VOID **)&LegacyBios); + Status = gBS->LocateProtocol ( + &gEfiLegacyBiosProtocolGuid, + NULL /* Registration */, + (VOID **)&LegacyBios + ); if (EFI_ERROR (Status)) { return; } @@ -127,7 +129,6 @@ LegacyBiosInstalled ( ASSERT_EFI_ERROR (Status); } - /** Returns a list of ACPI resource descriptors that detail the special resource configuration requirements for an incompatible PCI device. @@ -233,15 +234,20 @@ CheckDevice ( // *Configuration = AllocateCopyPool (sizeof mConfiguration, &mConfiguration); if (*Configuration == NULL) { - DEBUG ((DEBUG_WARN, + DEBUG (( + DEBUG_WARN, "%a: 64-bit MMIO BARs may be degraded for PCI 0x%04x:0x%04x (rev %d)\n", - __FUNCTION__, (UINT32)VendorId, (UINT32)DeviceId, (UINT8)RevisionId)); + __FUNCTION__, + (UINT32)VendorId, + (UINT32)DeviceId, + (UINT8)RevisionId + )); return EFI_OUT_OF_RESOURCES; } + return EFI_SUCCESS; } - /** Entry point for this driver. @@ -257,13 +263,13 @@ CheckDevice ( EFI_STATUS EFIAPI DriverInitialize ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - EFI_EVENT Event; - VOID *Registration; + EFI_STATUS Status; + EFI_EVENT Event; + VOID *Registration; // // If there is no 64-bit PCI MMIO aperture, then 64-bit MMIO BARs have to be @@ -307,14 +313,22 @@ DriverInitialize ( // For breaking this order, the Legacy BIOS DXE_DRIVER would have to install // its protocol after the firmware enters BDS, which cannot happen. // - Status = gBS->CreateEvent (EVT_NOTIFY_SIGNAL, TPL_CALLBACK, - LegacyBiosInstalled, NULL /* Context */, &Event); + Status = gBS->CreateEvent ( + EVT_NOTIFY_SIGNAL, + TPL_CALLBACK, + LegacyBiosInstalled, + NULL /* Context */, + &Event + ); if (EFI_ERROR (Status)) { return Status; } - Status = gBS->RegisterProtocolNotify (&gEfiLegacyBiosProtocolGuid, Event, - &Registration); + Status = gBS->RegisterProtocolNotify ( + &gEfiLegacyBiosProtocolGuid, + Event, + &Registration + ); if (EFI_ERROR (Status)) { goto CloseEvent; } @@ -323,9 +337,12 @@ DriverInitialize ( ASSERT_EFI_ERROR (Status); mIncompatiblePciDeviceSupport.CheckDevice = CheckDevice; - Status = gBS->InstallMultipleProtocolInterfaces (&ImageHandle, - &gEfiIncompatiblePciDeviceSupportProtocolGuid, - &mIncompatiblePciDeviceSupport, NULL); + Status = gBS->InstallMultipleProtocolInterfaces ( + &ImageHandle, + &gEfiIncompatiblePciDeviceSupportProtocolGuid, + &mIncompatiblePciDeviceSupport, + NULL + ); if (EFI_ERROR (Status)) { goto CloseEvent; } @@ -334,7 +351,7 @@ DriverInitialize ( CloseEvent: if (!mLegacyBiosInstalled) { - EFI_STATUS CloseStatus; + EFI_STATUS CloseStatus; CloseStatus = gBS->CloseEvent (Event); ASSERT_EFI_ERROR (CloseStatus); diff --git a/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c b/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c index b30628078f..16b5b4eac8 100644 --- a/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c +++ b/OvmfPkg/IoMmuDxe/AmdSevIoMmu.c @@ -14,16 +14,16 @@ #include "AmdSevIoMmu.h" -#define MAP_INFO_SIG SIGNATURE_64 ('M', 'A', 'P', '_', 'I', 'N', 'F', 'O') +#define MAP_INFO_SIG SIGNATURE_64 ('M', 'A', 'P', '_', 'I', 'N', 'F', 'O') typedef struct { - UINT64 Signature; - LIST_ENTRY Link; - EDKII_IOMMU_OPERATION Operation; - UINTN NumberOfBytes; - UINTN NumberOfPages; - EFI_PHYSICAL_ADDRESS CryptedAddress; - EFI_PHYSICAL_ADDRESS PlainTextAddress; + UINT64 Signature; + LIST_ENTRY Link; + EDKII_IOMMU_OPERATION Operation; + UINTN NumberOfBytes; + UINTN NumberOfPages; + EFI_PHYSICAL_ADDRESS CryptedAddress; + EFI_PHYSICAL_ADDRESS PlainTextAddress; } MAP_INFO; // @@ -31,14 +31,14 @@ typedef struct { // yet torn down by IoMmuUnmap(). The list represents the full set of mappings // currently in effect. // -STATIC LIST_ENTRY mMapInfos = INITIALIZE_LIST_HEAD_VARIABLE (mMapInfos); +STATIC LIST_ENTRY mMapInfos = INITIALIZE_LIST_HEAD_VARIABLE (mMapInfos); -#define COMMON_BUFFER_SIG SIGNATURE_64 ('C', 'M', 'N', 'B', 'U', 'F', 'F', 'R') +#define COMMON_BUFFER_SIG SIGNATURE_64 ('C', 'M', 'N', 'B', 'U', 'F', 'F', 'R') // // ASCII names for EDKII_IOMMU_OPERATION constants, for debug logging. // -STATIC CONST CHAR8 * CONST +STATIC CONST CHAR8 *CONST mBusMasterOperationName[EdkiiIoMmuOperationMaximum] = { "Read", "Write", @@ -58,13 +58,13 @@ mBusMasterOperationName[EdkiiIoMmuOperationMaximum] = { // #pragma pack (1) typedef struct { - UINT64 Signature; + UINT64 Signature; // // Always allocated from EfiBootServicesData type memory, and always // encrypted. // - VOID *StashBuffer; + VOID *StashBuffer; // // Followed by the actual common buffer, starting at the next page. @@ -105,19 +105,19 @@ typedef struct { EFI_STATUS EFIAPI IoMmuMap ( - IN EDKII_IOMMU_PROTOCOL *This, - IN EDKII_IOMMU_OPERATION Operation, - IN VOID *HostAddress, - IN OUT UINTN *NumberOfBytes, - OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, - OUT VOID **Mapping + IN EDKII_IOMMU_PROTOCOL *This, + IN EDKII_IOMMU_OPERATION Operation, + IN VOID *HostAddress, + IN OUT UINTN *NumberOfBytes, + OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, + OUT VOID **Mapping ) { - EFI_STATUS Status; - MAP_INFO *MapInfo; - EFI_ALLOCATE_TYPE AllocateType; - COMMON_BUFFER_HEADER *CommonBufferHeader; - VOID *DecryptionSource; + EFI_STATUS Status; + MAP_INFO *MapInfo; + EFI_ALLOCATE_TYPE AllocateType; + COMMON_BUFFER_HEADER *CommonBufferHeader; + VOID *DecryptionSource; DEBUG (( DEBUG_VERBOSE, @@ -131,8 +131,9 @@ IoMmuMap ( (UINT64)((NumberOfBytes == NULL) ? 0 : *NumberOfBytes) )); - if (HostAddress == NULL || NumberOfBytes == NULL || DeviceAddress == NULL || - Mapping == NULL) { + if ((HostAddress == NULL) || (NumberOfBytes == NULL) || (DeviceAddress == NULL) || + (Mapping == NULL)) + { return EFI_INVALID_PARAMETER; } @@ -150,100 +151,103 @@ IoMmuMap ( // Initialize the MAP_INFO structure, except the PlainTextAddress field // ZeroMem (&MapInfo->Link, sizeof MapInfo->Link); - MapInfo->Signature = MAP_INFO_SIG; - MapInfo->Operation = Operation; - MapInfo->NumberOfBytes = *NumberOfBytes; - MapInfo->NumberOfPages = EFI_SIZE_TO_PAGES (MapInfo->NumberOfBytes); - MapInfo->CryptedAddress = (UINTN)HostAddress; + MapInfo->Signature = MAP_INFO_SIG; + MapInfo->Operation = Operation; + MapInfo->NumberOfBytes = *NumberOfBytes; + MapInfo->NumberOfPages = EFI_SIZE_TO_PAGES (MapInfo->NumberOfBytes); + MapInfo->CryptedAddress = (UINTN)HostAddress; // // In the switch statement below, we point "MapInfo->PlainTextAddress" to the // plaintext buffer, according to Operation. We also set "DecryptionSource". // MapInfo->PlainTextAddress = MAX_ADDRESS; - AllocateType = AllocateAnyPages; - DecryptionSource = (VOID *)(UINTN)MapInfo->CryptedAddress; + AllocateType = AllocateAnyPages; + DecryptionSource = (VOID *)(UINTN)MapInfo->CryptedAddress; switch (Operation) { - // - // For BusMasterRead[64] and BusMasterWrite[64] operations, a bounce buffer - // is necessary regardless of whether the original (crypted) buffer crosses - // the 4GB limit or not -- we have to allocate a separate plaintext buffer. - // The only variable is whether the plaintext buffer should be under 4GB. - // - case EdkiiIoMmuOperationBusMasterRead: - case EdkiiIoMmuOperationBusMasterWrite: - MapInfo->PlainTextAddress = BASE_4GB - 1; - AllocateType = AllocateMaxAddress; // - // fall through + // For BusMasterRead[64] and BusMasterWrite[64] operations, a bounce buffer + // is necessary regardless of whether the original (crypted) buffer crosses + // the 4GB limit or not -- we have to allocate a separate plaintext buffer. + // The only variable is whether the plaintext buffer should be under 4GB. // - case EdkiiIoMmuOperationBusMasterRead64: - case EdkiiIoMmuOperationBusMasterWrite64: + case EdkiiIoMmuOperationBusMasterRead: + case EdkiiIoMmuOperationBusMasterWrite: + MapInfo->PlainTextAddress = BASE_4GB - 1; + AllocateType = AllocateMaxAddress; // - // Allocate the implicit plaintext bounce buffer. + // fall through // - Status = gBS->AllocatePages ( - AllocateType, - EfiBootServicesData, - MapInfo->NumberOfPages, - &MapInfo->PlainTextAddress - ); - if (EFI_ERROR (Status)) { - goto FreeMapInfo; - } - break; - - // - // For BusMasterCommonBuffer[64] operations, a to-be-plaintext buffer and a - // stash buffer (for in-place decryption) have been allocated already, with - // AllocateBuffer(). We only check whether the address of the to-be-plaintext - // buffer is low enough for the requested operation. - // - case EdkiiIoMmuOperationBusMasterCommonBuffer: - if ((MapInfo->CryptedAddress > BASE_4GB) || - (EFI_PAGES_TO_SIZE (MapInfo->NumberOfPages) > - BASE_4GB - MapInfo->CryptedAddress)) { + case EdkiiIoMmuOperationBusMasterRead64: + case EdkiiIoMmuOperationBusMasterWrite64: // - // CommonBuffer operations cannot be remapped. If the common buffer is - // above 4GB, then it is not possible to generate a mapping, so return an - // error. + // Allocate the implicit plaintext bounce buffer. // - Status = EFI_UNSUPPORTED; - goto FreeMapInfo; - } - // - // fall through - // - case EdkiiIoMmuOperationBusMasterCommonBuffer64: - // - // The buffer at MapInfo->CryptedAddress comes from AllocateBuffer(). - // - MapInfo->PlainTextAddress = MapInfo->CryptedAddress; - // - // Stash the crypted data. - // - CommonBufferHeader = (COMMON_BUFFER_HEADER *)( - (UINTN)MapInfo->CryptedAddress - EFI_PAGE_SIZE - ); - ASSERT (CommonBufferHeader->Signature == COMMON_BUFFER_SIG); - CopyMem ( - CommonBufferHeader->StashBuffer, - (VOID *)(UINTN)MapInfo->CryptedAddress, - MapInfo->NumberOfBytes - ); + Status = gBS->AllocatePages ( + AllocateType, + EfiBootServicesData, + MapInfo->NumberOfPages, + &MapInfo->PlainTextAddress + ); + if (EFI_ERROR (Status)) { + goto FreeMapInfo; + } + + break; + // - // Point "DecryptionSource" to the stash buffer so that we decrypt - // it to the original location, after the switch statement. + // For BusMasterCommonBuffer[64] operations, a to-be-plaintext buffer and a + // stash buffer (for in-place decryption) have been allocated already, with + // AllocateBuffer(). We only check whether the address of the to-be-plaintext + // buffer is low enough for the requested operation. // - DecryptionSource = CommonBufferHeader->StashBuffer; - break; + case EdkiiIoMmuOperationBusMasterCommonBuffer: + if ((MapInfo->CryptedAddress > BASE_4GB) || + (EFI_PAGES_TO_SIZE (MapInfo->NumberOfPages) > + BASE_4GB - MapInfo->CryptedAddress)) + { + // + // CommonBuffer operations cannot be remapped. If the common buffer is + // above 4GB, then it is not possible to generate a mapping, so return an + // error. + // + Status = EFI_UNSUPPORTED; + goto FreeMapInfo; + } - default: // - // Operation is invalid + // fall through // - Status = EFI_INVALID_PARAMETER; - goto FreeMapInfo; + case EdkiiIoMmuOperationBusMasterCommonBuffer64: + // + // The buffer at MapInfo->CryptedAddress comes from AllocateBuffer(). + // + MapInfo->PlainTextAddress = MapInfo->CryptedAddress; + // + // Stash the crypted data. + // + CommonBufferHeader = (COMMON_BUFFER_HEADER *)( + (UINTN)MapInfo->CryptedAddress - EFI_PAGE_SIZE + ); + ASSERT (CommonBufferHeader->Signature == COMMON_BUFFER_SIG); + CopyMem ( + CommonBufferHeader->StashBuffer, + (VOID *)(UINTN)MapInfo->CryptedAddress, + MapInfo->NumberOfBytes + ); + // + // Point "DecryptionSource" to the stash buffer so that we decrypt + // it to the original location, after the switch statement. + // + DecryptionSource = CommonBufferHeader->StashBuffer; + break; + + default: + // + // Operation is invalid + // + Status = EFI_INVALID_PARAMETER; + goto FreeMapInfo; } // @@ -267,12 +271,13 @@ IoMmuMap ( // For BusMasterCommonBuffer[64] operations, the CopyMem() below will decrypt // the original data (from the stash buffer) back to the original location. // - if (Operation == EdkiiIoMmuOperationBusMasterRead || - Operation == EdkiiIoMmuOperationBusMasterRead64 || - Operation == EdkiiIoMmuOperationBusMasterCommonBuffer || - Operation == EdkiiIoMmuOperationBusMasterCommonBuffer64) { + if ((Operation == EdkiiIoMmuOperationBusMasterRead) || + (Operation == EdkiiIoMmuOperationBusMasterRead64) || + (Operation == EdkiiIoMmuOperationBusMasterCommonBuffer) || + (Operation == EdkiiIoMmuOperationBusMasterCommonBuffer64)) + { CopyMem ( - (VOID *) (UINTN) MapInfo->PlainTextAddress, + (VOID *)(UINTN)MapInfo->PlainTextAddress, DecryptionSource, MapInfo->NumberOfBytes ); @@ -330,15 +335,15 @@ STATIC EFI_STATUS EFIAPI IoMmuUnmapWorker ( - IN EDKII_IOMMU_PROTOCOL *This, - IN VOID *Mapping, - IN BOOLEAN MemoryMapLocked + IN EDKII_IOMMU_PROTOCOL *This, + IN VOID *Mapping, + IN BOOLEAN MemoryMapLocked ) { - MAP_INFO *MapInfo; - EFI_STATUS Status; - COMMON_BUFFER_HEADER *CommonBufferHeader; - VOID *EncryptionTarget; + MAP_INFO *MapInfo; + EFI_STATUS Status; + COMMON_BUFFER_HEADER *CommonBufferHeader; + VOID *EncryptionTarget; DEBUG (( DEBUG_VERBOSE, @@ -370,33 +375,33 @@ IoMmuUnmapWorker ( EncryptionTarget = (VOID *)(UINTN)MapInfo->CryptedAddress; switch (MapInfo->Operation) { - case EdkiiIoMmuOperationBusMasterCommonBuffer: - case EdkiiIoMmuOperationBusMasterCommonBuffer64: - ASSERT (MapInfo->PlainTextAddress == MapInfo->CryptedAddress); - - CommonBufferHeader = (COMMON_BUFFER_HEADER *)( - (UINTN)MapInfo->PlainTextAddress - EFI_PAGE_SIZE - ); - ASSERT (CommonBufferHeader->Signature == COMMON_BUFFER_SIG); - EncryptionTarget = CommonBufferHeader->StashBuffer; + case EdkiiIoMmuOperationBusMasterCommonBuffer: + case EdkiiIoMmuOperationBusMasterCommonBuffer64: + ASSERT (MapInfo->PlainTextAddress == MapInfo->CryptedAddress); + + CommonBufferHeader = (COMMON_BUFFER_HEADER *)( + (UINTN)MapInfo->PlainTextAddress - EFI_PAGE_SIZE + ); + ASSERT (CommonBufferHeader->Signature == COMMON_BUFFER_SIG); + EncryptionTarget = CommonBufferHeader->StashBuffer; // // fall through // - case EdkiiIoMmuOperationBusMasterWrite: - case EdkiiIoMmuOperationBusMasterWrite64: - CopyMem ( - EncryptionTarget, - (VOID *) (UINTN) MapInfo->PlainTextAddress, - MapInfo->NumberOfBytes - ); - break; + case EdkiiIoMmuOperationBusMasterWrite: + case EdkiiIoMmuOperationBusMasterWrite64: + CopyMem ( + EncryptionTarget, + (VOID *)(UINTN)MapInfo->PlainTextAddress, + MapInfo->NumberOfBytes + ); + break; - default: - // - // nothing to encrypt after BusMasterRead[64] operations - // - break; + default: + // + // nothing to encrypt after BusMasterRead[64] operations + // + break; } // @@ -421,8 +426,9 @@ IoMmuUnmapWorker ( // plaintext at some point) with zeros, and then release it (unless the UEFI // memory map is locked). // - if (MapInfo->Operation == EdkiiIoMmuOperationBusMasterCommonBuffer || - MapInfo->Operation == EdkiiIoMmuOperationBusMasterCommonBuffer64) { + if ((MapInfo->Operation == EdkiiIoMmuOperationBusMasterCommonBuffer) || + (MapInfo->Operation == EdkiiIoMmuOperationBusMasterCommonBuffer64)) + { CopyMem ( (VOID *)(UINTN)MapInfo->CryptedAddress, CommonBufferHeader->StashBuffer, @@ -465,8 +471,8 @@ IoMmuUnmapWorker ( EFI_STATUS EFIAPI IoMmuUnmap ( - IN EDKII_IOMMU_PROTOCOL *This, - IN VOID *Mapping + IN EDKII_IOMMU_PROTOCOL *This, + IN VOID *Mapping ) { return IoMmuUnmapWorker ( @@ -501,19 +507,19 @@ IoMmuUnmap ( EFI_STATUS EFIAPI IoMmuAllocateBuffer ( - IN EDKII_IOMMU_PROTOCOL *This, - IN EFI_ALLOCATE_TYPE Type, - IN EFI_MEMORY_TYPE MemoryType, - IN UINTN Pages, - IN OUT VOID **HostAddress, - IN UINT64 Attributes + IN EDKII_IOMMU_PROTOCOL *This, + IN EFI_ALLOCATE_TYPE Type, + IN EFI_MEMORY_TYPE MemoryType, + IN UINTN Pages, + IN OUT VOID **HostAddress, + IN UINT64 Attributes ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS PhysicalAddress; - VOID *StashBuffer; - UINTN CommonBufferPages; - COMMON_BUFFER_HEADER *CommonBufferHeader; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS PhysicalAddress; + VOID *StashBuffer; + UINTN CommonBufferPages; + COMMON_BUFFER_HEADER *CommonBufferHeader; DEBUG (( DEBUG_VERBOSE, @@ -542,8 +548,9 @@ IoMmuAllocateBuffer ( // The only valid memory types are EfiBootServicesData and // EfiRuntimeServicesData // - if (MemoryType != EfiBootServicesData && - MemoryType != EfiRuntimeServicesData) { + if ((MemoryType != EfiBootServicesData) && + (MemoryType != EfiRuntimeServicesData)) + { return EFI_INVALID_PARAMETER; } @@ -553,6 +560,7 @@ IoMmuAllocateBuffer ( if (Pages > MAX_UINTN - 1) { return EFI_OUT_OF_RESOURCES; } + CommonBufferPages = Pages + 1; // @@ -580,6 +588,7 @@ IoMmuAllocateBuffer ( // PhysicalAddress = SIZE_4GB - 1; } + Status = gBS->AllocatePages ( AllocateMaxAddress, MemoryType, @@ -591,9 +600,9 @@ IoMmuAllocateBuffer ( } CommonBufferHeader = (VOID *)(UINTN)PhysicalAddress; - PhysicalAddress += EFI_PAGE_SIZE; + PhysicalAddress += EFI_PAGE_SIZE; - CommonBufferHeader->Signature = COMMON_BUFFER_SIG; + CommonBufferHeader->Signature = COMMON_BUFFER_SIG; CommonBufferHeader->StashBuffer = StashBuffer; *HostAddress = (VOID *)(UINTN)PhysicalAddress; @@ -628,13 +637,13 @@ FreeStashBuffer: EFI_STATUS EFIAPI IoMmuFreeBuffer ( - IN EDKII_IOMMU_PROTOCOL *This, - IN UINTN Pages, - IN VOID *HostAddress + IN EDKII_IOMMU_PROTOCOL *This, + IN UINTN Pages, + IN VOID *HostAddress ) { - UINTN CommonBufferPages; - COMMON_BUFFER_HEADER *CommonBufferHeader; + UINTN CommonBufferPages; + COMMON_BUFFER_HEADER *CommonBufferHeader; DEBUG (( DEBUG_VERBOSE, @@ -644,10 +653,10 @@ IoMmuFreeBuffer ( (UINT64)Pages )); - CommonBufferPages = Pages + 1; + CommonBufferPages = Pages + 1; CommonBufferHeader = (COMMON_BUFFER_HEADER *)( - (UINTN)HostAddress - EFI_PAGE_SIZE - ); + (UINTN)HostAddress - EFI_PAGE_SIZE + ); // // Check the signature. @@ -670,7 +679,6 @@ IoMmuFreeBuffer ( return gBS->FreePages ((UINTN)CommonBufferHeader, CommonBufferPages); } - /** Set IOMMU attribute for a system memory. @@ -764,8 +772,8 @@ STATIC VOID EFIAPI AmdSevExitBoot ( - IN EFI_EVENT Event, - IN VOID *EventToSignal + IN EFI_EVENT Event, + IN VOID *EventToSignal ) { // @@ -816,13 +824,13 @@ STATIC VOID EFIAPI AmdSevUnmapAllMappings ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - LIST_ENTRY *Node; - LIST_ENTRY *NextNode; - MAP_INFO *MapInfo; + LIST_ENTRY *Node; + LIST_ENTRY *NextNode; + MAP_INFO *MapInfo; DEBUG ((DEBUG_VERBOSE, "%a\n", __FUNCTION__)); @@ -832,7 +840,7 @@ AmdSevUnmapAllMappings ( // for (Node = GetFirstNode (&mMapInfos); Node != &mMapInfos; Node = NextNode) { NextNode = GetNextNode (&mMapInfos, Node); - MapInfo = CR (Node, MAP_INFO, Link, MAP_INFO_SIG); + MapInfo = CR (Node, MAP_INFO, Link, MAP_INFO_SIG); IoMmuUnmapWorker ( &mAmdSev, // This MapInfo, // Mapping @@ -889,7 +897,8 @@ AmdSevInstallIoMmuProtocol ( Handle = NULL; Status = gBS->InstallMultipleProtocolInterfaces ( &Handle, - &gEdkiiIoMmuProtocolGuid, &mAmdSev, + &gEdkiiIoMmuProtocolGuid, + &mAmdSev, NULL ); if (EFI_ERROR (Status)) { diff --git a/OvmfPkg/IoMmuDxe/IoMmuDxe.c b/OvmfPkg/IoMmuDxe/IoMmuDxe.c index 13df8ba874..bca8c14c40 100644 --- a/OvmfPkg/IoMmuDxe/IoMmuDxe.c +++ b/OvmfPkg/IoMmuDxe/IoMmuDxe.c @@ -14,12 +14,12 @@ EFI_STATUS EFIAPI IoMmuDxeEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - EFI_HANDLE Handle; + EFI_STATUS Status; + EFI_HANDLE Handle; // // When SEV is enabled, install IoMmu protocol otherwise install the @@ -31,9 +31,11 @@ IoMmuDxeEntryPoint ( Handle = NULL; Status = gBS->InstallMultipleProtocolInterfaces ( - &Handle, - &gIoMmuAbsentProtocolGuid, - NULL, NULL); + &Handle, + &gIoMmuAbsentProtocolGuid, + NULL, + NULL + ); } return Status; diff --git a/OvmfPkg/Library/AcpiTimerLib/AcpiTimerLib.c b/OvmfPkg/Library/AcpiTimerLib/AcpiTimerLib.c index 3d73111ced..13c6dcac1f 100644 --- a/OvmfPkg/Library/AcpiTimerLib/AcpiTimerLib.c +++ b/OvmfPkg/Library/AcpiTimerLib/AcpiTimerLib.c @@ -30,20 +30,20 @@ **/ VOID InternalAcpiDelay ( - IN UINT32 Delay + IN UINT32 Delay ) { - UINT32 Ticks; - UINT32 Times; + UINT32 Ticks; + UINT32 Times; - Times = Delay >> 22; - Delay &= BIT22 - 1; + Times = Delay >> 22; + Delay &= BIT22 - 1; do { // // The target timer count is calculated here // - Ticks = InternalAcpiGetTimerTick () + Delay; - Delay = BIT22; + Ticks = InternalAcpiGetTimerTick () + Delay; + Delay = BIT22; // // Wait until time out // Delay >= 2^23 could not be handled by this function @@ -68,7 +68,7 @@ InternalAcpiDelay ( UINTN EFIAPI MicroSecondDelay ( - IN UINTN MicroSeconds + IN UINTN MicroSeconds ) { InternalAcpiDelay ( @@ -96,7 +96,7 @@ MicroSecondDelay ( UINTN EFIAPI NanoSecondDelay ( - IN UINTN NanoSeconds + IN UINTN NanoSeconds ) { InternalAcpiDelay ( @@ -158,8 +158,8 @@ GetPerformanceCounter ( UINT64 EFIAPI GetPerformanceCounterProperties ( - OUT UINT64 *StartValue OPTIONAL, - OUT UINT64 *EndValue OPTIONAL + OUT UINT64 *StartValue OPTIONAL, + OUT UINT64 *EndValue OPTIONAL ) { if (StartValue != NULL) { @@ -187,7 +187,7 @@ GetPerformanceCounterProperties ( UINT64 EFIAPI GetTimeInNanoSecond ( - IN UINT64 Ticks + IN UINT64 Ticks ) { UINT64 NanoSeconds; @@ -204,7 +204,7 @@ GetTimeInNanoSecond ( // Frequency < 0x100000000, so Remainder < 0x100000000, then (Remainder * 1,000,000,000) // will not overflow 64-bit. // - NanoSeconds += DivU64x32 (MultU64x32 ((UINT64) Remainder, 1000000000u), ACPI_TIMER_FREQUENCY); + NanoSeconds += DivU64x32 (MultU64x32 ((UINT64)Remainder, 1000000000u), ACPI_TIMER_FREQUENCY); return NanoSeconds; } diff --git a/OvmfPkg/Library/AcpiTimerLib/BaseAcpiTimerLib.c b/OvmfPkg/Library/AcpiTimerLib/BaseAcpiTimerLib.c index 7c593e8be1..1d33c86313 100644 --- a/OvmfPkg/Library/AcpiTimerLib/BaseAcpiTimerLib.c +++ b/OvmfPkg/Library/AcpiTimerLib/BaseAcpiTimerLib.c @@ -14,7 +14,7 @@ // // Cached ACPI Timer IO Address // -STATIC UINT32 mAcpiTimerIoAddr; +STATIC UINT32 mAcpiTimerIoAddr; /** The constructor function caches the ACPI tick counter address, and, @@ -29,12 +29,12 @@ AcpiTimerLibConstructor ( VOID ) { - UINT16 HostBridgeDevId; - UINTN Pmba; - UINT32 PmbaAndVal; - UINT32 PmbaOrVal; - UINTN AcpiCtlReg; - UINT8 AcpiEnBit; + UINT16 HostBridgeDevId; + UINTN Pmba; + UINT32 PmbaAndVal; + UINT32 PmbaOrVal; + UINTN AcpiCtlReg; + UINT8 AcpiEnBit; // // Query Host Bridge DID to determine platform type @@ -56,8 +56,12 @@ AcpiTimerLibConstructor ( AcpiEnBit = ICH9_ACPI_CNTL_ACPI_EN; break; default: - DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", - __FUNCTION__, HostBridgeDevId)); + DEBUG (( + DEBUG_ERROR, + "%a: Unknown Host Bridge Device ID: 0x%04x\n", + __FUNCTION__, + HostBridgeDevId + )); ASSERT (FALSE); return RETURN_UNSUPPORTED; } diff --git a/OvmfPkg/Library/AcpiTimerLib/BaseRomAcpiTimerLib.c b/OvmfPkg/Library/AcpiTimerLib/BaseRomAcpiTimerLib.c index 52f3ea2dbf..54a288d52f 100644 --- a/OvmfPkg/Library/AcpiTimerLib/BaseRomAcpiTimerLib.c +++ b/OvmfPkg/Library/AcpiTimerLib/BaseRomAcpiTimerLib.c @@ -27,12 +27,12 @@ AcpiTimerLibConstructor ( VOID ) { - UINT16 HostBridgeDevId; - UINTN Pmba; - UINT32 PmbaAndVal; - UINT32 PmbaOrVal; - UINTN AcpiCtlReg; - UINT8 AcpiEnBit; + UINT16 HostBridgeDevId; + UINTN Pmba; + UINT32 PmbaAndVal; + UINT32 PmbaOrVal; + UINTN AcpiCtlReg; + UINT8 AcpiEnBit; // // Query Host Bridge DID to determine platform type @@ -54,8 +54,12 @@ AcpiTimerLibConstructor ( AcpiEnBit = ICH9_ACPI_CNTL_ACPI_EN; break; default: - DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", - __FUNCTION__, HostBridgeDevId)); + DEBUG (( + DEBUG_ERROR, + "%a: Unknown Host Bridge Device ID: 0x%04x\n", + __FUNCTION__, + HostBridgeDevId + )); ASSERT (FALSE); return RETURN_UNSUPPORTED; } @@ -93,8 +97,8 @@ InternalAcpiGetTimerTick ( VOID ) { - UINT16 HostBridgeDevId; - UINTN Pmba; + UINT16 HostBridgeDevId; + UINTN Pmba; // // Query Host Bridge DID to determine platform type @@ -108,8 +112,12 @@ InternalAcpiGetTimerTick ( Pmba = POWER_MGMT_REGISTER_Q35 (ICH9_PMBASE); break; default: - DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", - __FUNCTION__, HostBridgeDevId)); + DEBUG (( + DEBUG_ERROR, + "%a: Unknown Host Bridge Device ID: 0x%04x\n", + __FUNCTION__, + HostBridgeDevId + )); ASSERT (FALSE); return 0; } diff --git a/OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c b/OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c index 09076c0ade..01f28b2916 100644 --- a/OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c +++ b/OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.c @@ -15,7 +15,7 @@ // // Cached ACPI Timer IO Address // -STATIC UINT32 mAcpiTimerIoAddr; +STATIC UINT32 mAcpiTimerIoAddr; /** The constructor function caches the ACPI tick counter address @@ -36,8 +36,8 @@ AcpiTimerLibConstructor ( VOID ) { - UINT16 HostBridgeDevId; - UINTN Pmba; + UINT16 HostBridgeDevId; + UINTN Pmba; // // Query Host Bridge DID to determine platform type @@ -51,8 +51,12 @@ AcpiTimerLibConstructor ( Pmba = POWER_MGMT_REGISTER_Q35 (ICH9_PMBASE); break; default: - DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", - __FUNCTION__, HostBridgeDevId)); + DEBUG (( + DEBUG_ERROR, + "%a: Unknown Host Bridge Device ID: 0x%04x\n", + __FUNCTION__, + HostBridgeDevId + )); ASSERT (FALSE); return RETURN_UNSUPPORTED; } diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/DxeMemEncryptSevLibInternal.c b/OvmfPkg/Library/BaseMemEncryptSevLib/DxeMemEncryptSevLibInternal.c index 2816f859a0..4fee7b2ab3 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/DxeMemEncryptSevLibInternal.c +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/DxeMemEncryptSevLibInternal.c @@ -17,12 +17,12 @@ #include #include -STATIC BOOLEAN mSevStatus = FALSE; -STATIC BOOLEAN mSevEsStatus = FALSE; -STATIC BOOLEAN mSevStatusChecked = FALSE; +STATIC BOOLEAN mSevStatus = FALSE; +STATIC BOOLEAN mSevEsStatus = FALSE; +STATIC BOOLEAN mSevStatusChecked = FALSE; -STATIC UINT64 mSevEncryptionMask = 0; -STATIC BOOLEAN mSevEncryptionMaskSaved = FALSE; +STATIC UINT64 mSevEncryptionMask = 0; +STATIC BOOLEAN mSevEncryptionMaskSaved = FALSE; /** Reads and sets the status of SEV features. @@ -137,7 +137,7 @@ MemEncryptSevGetEncryptionMask ( ) { if (!mSevEncryptionMaskSaved) { - mSevEncryptionMask = PcdGet64 (PcdPteMemoryEncryptionAddressOrMask); + mSevEncryptionMask = PcdGet64 (PcdPteMemoryEncryptionAddressOrMask); mSevEncryptionMaskSaved = TRUE; } diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/Ia32/MemEncryptSevLib.c b/OvmfPkg/Library/BaseMemEncryptSevLib/Ia32/MemEncryptSevLib.c index be260e0d10..9bd66301fc 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/Ia32/MemEncryptSevLib.c +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/Ia32/MemEncryptSevLib.c @@ -35,9 +35,9 @@ RETURN_STATUS EFIAPI MemEncryptSevClearPageEncMask ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINTN NumPages + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINTN NumPages ) { // @@ -66,9 +66,9 @@ MemEncryptSevClearPageEncMask ( RETURN_STATUS EFIAPI MemEncryptSevSetPageEncMask ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINTN NumPages + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINTN NumPages ) { // @@ -95,9 +95,9 @@ MemEncryptSevSetPageEncMask ( MEM_ENCRYPT_SEV_ADDRESS_RANGE_STATE EFIAPI MemEncryptSevGetAddressRangeState ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINTN Length + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINTN Length ) { // @@ -126,9 +126,9 @@ MemEncryptSevGetAddressRangeState ( RETURN_STATUS EFIAPI MemEncryptSevClearMmioPageEncMask ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINTN NumPages + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINTN NumPages ) { // diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/PeiDxeMemEncryptSevLibInternal.c b/OvmfPkg/Library/BaseMemEncryptSevLib/PeiDxeMemEncryptSevLibInternal.c index b4a9f464e2..78ea16ae06 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/PeiDxeMemEncryptSevLibInternal.c +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/PeiDxeMemEncryptSevLibInternal.c @@ -34,15 +34,15 @@ RETURN_STATUS EFIAPI MemEncryptSevLocateInitialSmramSaveStateMapPages ( - OUT UINTN *BaseAddress, - OUT UINTN *NumberOfPages + OUT UINTN *BaseAddress, + OUT UINTN *NumberOfPages ) { - UINTN MapStart; - UINTN MapEnd; - UINTN MapPagesStart; // MapStart rounded down to page boundary - UINTN MapPagesEnd; // MapEnd rounded up to page boundary - UINTN MapPagesSize; // difference between MapPagesStart and MapPagesEnd + UINTN MapStart; + UINTN MapEnd; + UINTN MapPagesStart; // MapStart rounded down to page boundary + UINTN MapPagesEnd; // MapEnd rounded up to page boundary + UINTN MapPagesSize; // difference between MapPagesStart and MapPagesEnd if (!FeaturePcdGet (PcdSmmSmramRequire)) { return RETURN_UNSUPPORTED; diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/PeiMemEncryptSevLibInternal.c b/OvmfPkg/Library/BaseMemEncryptSevLib/PeiMemEncryptSevLibInternal.c index e2fd109d12..c4aa74a0a2 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/PeiMemEncryptSevLibInternal.c +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/PeiMemEncryptSevLibInternal.c @@ -17,12 +17,12 @@ #include #include -STATIC BOOLEAN mSevStatus = FALSE; -STATIC BOOLEAN mSevEsStatus = FALSE; -STATIC BOOLEAN mSevStatusChecked = FALSE; +STATIC BOOLEAN mSevStatus = FALSE; +STATIC BOOLEAN mSevEsStatus = FALSE; +STATIC BOOLEAN mSevStatusChecked = FALSE; -STATIC UINT64 mSevEncryptionMask = 0; -STATIC BOOLEAN mSevEncryptionMaskSaved = FALSE; +STATIC UINT64 mSevEncryptionMask = 0; +STATIC BOOLEAN mSevEncryptionMaskSaved = FALSE; /** Reads and sets the status of SEV features. @@ -43,8 +43,8 @@ InternalMemEncryptSevStatus ( ReadSevMsr = FALSE; - SevEsWorkArea = (SEC_SEV_ES_WORK_AREA *) FixedPcdGet32 (PcdSevEsWorkAreaBase); - if (SevEsWorkArea != NULL && SevEsWorkArea->EncryptionMask != 0) { + SevEsWorkArea = (SEC_SEV_ES_WORK_AREA *)FixedPcdGet32 (PcdSevEsWorkAreaBase); + if ((SevEsWorkArea != NULL) && (SevEsWorkArea->EncryptionMask != 0)) { // // The MSR has been read before, so it is safe to read it again and avoid // having to validate the CPUID information. @@ -139,7 +139,7 @@ MemEncryptSevGetEncryptionMask ( if (!mSevEncryptionMaskSaved) { SEC_SEV_ES_WORK_AREA *SevEsWorkArea; - SevEsWorkArea = (SEC_SEV_ES_WORK_AREA *) FixedPcdGet32 (PcdSevEsWorkAreaBase); + SevEsWorkArea = (SEC_SEV_ES_WORK_AREA *)FixedPcdGet32 (PcdSevEsWorkAreaBase); if (SevEsWorkArea != NULL) { mSevEncryptionMask = SevEsWorkArea->EncryptionMask; } else { diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/SecMemEncryptSevLibInternal.c b/OvmfPkg/Library/BaseMemEncryptSevLib/SecMemEncryptSevLibInternal.c index 56d8f3f318..b5b3656414 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/SecMemEncryptSevLibInternal.c +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/SecMemEncryptSevLibInternal.c @@ -35,8 +35,8 @@ InternalMemEncryptSevStatus ( ReadSevMsr = FALSE; - SevEsWorkArea = (SEC_SEV_ES_WORK_AREA *) FixedPcdGet32 (PcdSevEsWorkAreaBase); - if (SevEsWorkArea != NULL && SevEsWorkArea->EncryptionMask != 0) { + SevEsWorkArea = (SEC_SEV_ES_WORK_AREA *)FixedPcdGet32 (PcdSevEsWorkAreaBase); + if ((SevEsWorkArea != NULL) && (SevEsWorkArea->EncryptionMask != 0)) { // // The MSR has been read before, so it is safe to read it again and avoid // having to validate the CPUID information. @@ -74,7 +74,7 @@ MemEncryptSevEsIsEnabled ( VOID ) { - MSR_SEV_STATUS_REGISTER Msr; + MSR_SEV_STATUS_REGISTER Msr; Msr.Uint32 = InternalMemEncryptSevStatus (); @@ -93,7 +93,7 @@ MemEncryptSevIsEnabled ( VOID ) { - MSR_SEV_STATUS_REGISTER Msr; + MSR_SEV_STATUS_REGISTER Msr; Msr.Uint32 = InternalMemEncryptSevStatus (); @@ -115,7 +115,7 @@ MemEncryptSevGetEncryptionMask ( SEC_SEV_ES_WORK_AREA *SevEsWorkArea; UINT64 EncryptionMask; - SevEsWorkArea = (SEC_SEV_ES_WORK_AREA *) FixedPcdGet32 (PcdSevEsWorkAreaBase); + SevEsWorkArea = (SEC_SEV_ES_WORK_AREA *)FixedPcdGet32 (PcdSevEsWorkAreaBase); if (SevEsWorkArea != NULL) { EncryptionMask = SevEsWorkArea->EncryptionMask; } else { @@ -147,8 +147,8 @@ MemEncryptSevGetEncryptionMask ( RETURN_STATUS EFIAPI MemEncryptSevLocateInitialSmramSaveStateMapPages ( - OUT UINTN *BaseAddress, - OUT UINTN *NumberOfPages + OUT UINTN *BaseAddress, + OUT UINTN *NumberOfPages ) { return RETURN_UNSUPPORTED; diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/X64/MemEncryptSevLib.c b/OvmfPkg/Library/BaseMemEncryptSevLib/X64/MemEncryptSevLib.c index a57e8fd37f..e7c703bb9a 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/X64/MemEncryptSevLib.c +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/X64/MemEncryptSevLib.c @@ -37,9 +37,9 @@ RETURN_STATUS EFIAPI MemEncryptSevClearPageEncMask ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINTN NumPages + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINTN NumPages ) { return InternalMemEncryptSevSetMemoryDecrypted ( @@ -69,9 +69,9 @@ MemEncryptSevClearPageEncMask ( RETURN_STATUS EFIAPI MemEncryptSevSetPageEncMask ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINTN NumPages + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINTN NumPages ) { return InternalMemEncryptSevSetMemoryEncrypted ( @@ -99,9 +99,9 @@ MemEncryptSevSetPageEncMask ( MEM_ENCRYPT_SEV_ADDRESS_RANGE_STATE EFIAPI MemEncryptSevGetAddressRangeState ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINTN Length + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINTN Length ) { return InternalMemEncryptSevGetAddressRangeState ( @@ -131,9 +131,9 @@ MemEncryptSevGetAddressRangeState ( RETURN_STATUS EFIAPI MemEncryptSevClearMmioPageEncMask ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINTN NumPages + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINTN NumPages ) { return InternalMemEncryptSevClearMmioPageEncMask ( @@ -141,5 +141,4 @@ MemEncryptSevClearMmioPageEncMask ( BaseAddress, EFI_PAGES_TO_SIZE (NumPages) ); - } diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/X64/PeiDxeVirtualMemory.c b/OvmfPkg/Library/BaseMemEncryptSevLib/X64/PeiDxeVirtualMemory.c index c696745f9d..bbc48ff6d8 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/X64/PeiDxeVirtualMemory.c +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/X64/PeiDxeVirtualMemory.c @@ -18,13 +18,13 @@ #include "VirtualMemory.h" -STATIC BOOLEAN mAddressEncMaskChecked = FALSE; -STATIC UINT64 mAddressEncMask; -STATIC PAGE_TABLE_POOL *mPageTablePool = NULL; +STATIC BOOLEAN mAddressEncMaskChecked = FALSE; +STATIC UINT64 mAddressEncMask; +STATIC PAGE_TABLE_POOL *mPageTablePool = NULL; typedef enum { - SetCBit, - ClearCBit + SetCBit, + ClearCBit } MAP_RANGE_MODE; /** @@ -39,7 +39,7 @@ InternalGetMemEncryptionAddressMask ( VOID ) { - UINT64 EncryptionMask; + UINT64 EncryptionMask; if (mAddressEncMaskChecked) { return mAddressEncMask; @@ -47,7 +47,7 @@ InternalGetMemEncryptionAddressMask ( EncryptionMask = MemEncryptSevGetEncryptionMask (); - mAddressEncMask = EncryptionMask & PAGING_1G_ADDRESS_MASK_64; + mAddressEncMask = EncryptionMask & PAGING_1G_ADDRESS_MASK_64; mAddressEncMaskChecked = TRUE; return mAddressEncMask; @@ -74,18 +74,18 @@ InternalGetMemEncryptionAddressMask ( STATIC BOOLEAN InitializePageTablePool ( - IN UINTN PoolPages + IN UINTN PoolPages ) { - VOID *Buffer; + VOID *Buffer; // // Always reserve at least PAGE_TABLE_POOL_UNIT_PAGES, including one page for // header. // PoolPages += 1; // Add one page for header. - PoolPages = ((PoolPages - 1) / PAGE_TABLE_POOL_UNIT_PAGES + 1) * - PAGE_TABLE_POOL_UNIT_PAGES; + PoolPages = ((PoolPages - 1) / PAGE_TABLE_POOL_UNIT_PAGES + 1) * + PAGE_TABLE_POOL_UNIT_PAGES; Buffer = AllocateAlignedPages (PoolPages, PAGE_TABLE_POOL_ALIGNMENT); if (Buffer == NULL) { DEBUG ((DEBUG_ERROR, "ERROR: Out of aligned pages\r\n")); @@ -96,19 +96,19 @@ InitializePageTablePool ( // Link all pools into a list for easier track later. // if (mPageTablePool == NULL) { - mPageTablePool = Buffer; + mPageTablePool = Buffer; mPageTablePool->NextPool = mPageTablePool; } else { ((PAGE_TABLE_POOL *)Buffer)->NextPool = mPageTablePool->NextPool; - mPageTablePool->NextPool = Buffer; - mPageTablePool = Buffer; + mPageTablePool->NextPool = Buffer; + mPageTablePool = Buffer; } // // Reserve one page for pool header. // - mPageTablePool->FreePages = PoolPages - 1; - mPageTablePool->Offset = EFI_PAGES_TO_SIZE (1); + mPageTablePool->FreePages = PoolPages - 1; + mPageTablePool->Offset = EFI_PAGES_TO_SIZE (1); return TRUE; } @@ -134,10 +134,10 @@ STATIC VOID * EFIAPI AllocatePageTableMemory ( - IN UINTN Pages + IN UINTN Pages ) { - VOID *Buffer; + VOID *Buffer; if (Pages == 0) { return NULL; @@ -146,8 +146,9 @@ AllocatePageTableMemory ( // // Renew the pool if necessary. // - if (mPageTablePool == NULL || - Pages > mPageTablePool->FreePages) { + if ((mPageTablePool == NULL) || + (Pages > mPageTablePool->FreePages)) + { if (!InitializePageTablePool (Pages)) { return NULL; } @@ -155,8 +156,8 @@ AllocatePageTableMemory ( Buffer = (UINT8 *)mPageTablePool + mPageTablePool->Offset; - mPageTablePool->Offset += EFI_PAGES_TO_SIZE (Pages); - mPageTablePool->FreePages -= Pages; + mPageTablePool->Offset += EFI_PAGES_TO_SIZE (Pages); + mPageTablePool->FreePages -= Pages; DEBUG (( DEBUG_VERBOSE, @@ -170,7 +171,6 @@ AllocatePageTableMemory ( return Buffer; } - /** Split 2M page to 4K. @@ -184,19 +184,19 @@ AllocatePageTableMemory ( STATIC VOID Split2MPageTo4K ( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN OUT UINT64 *PageEntry2M, - IN PHYSICAL_ADDRESS StackBase, - IN UINTN StackSize + IN PHYSICAL_ADDRESS PhysicalAddress, + IN OUT UINT64 *PageEntry2M, + IN PHYSICAL_ADDRESS StackBase, + IN UINTN StackSize ) { - PHYSICAL_ADDRESS PhysicalAddress4K; - UINTN IndexOfPageTableEntries; - PAGE_TABLE_4K_ENTRY *PageTableEntry; - PAGE_TABLE_4K_ENTRY *PageTableEntry1; - UINT64 AddressEncMask; + PHYSICAL_ADDRESS PhysicalAddress4K; + UINTN IndexOfPageTableEntries; + PAGE_TABLE_4K_ENTRY *PageTableEntry; + PAGE_TABLE_4K_ENTRY *PageTableEntry1; + UINT64 AddressEncMask; - PageTableEntry = AllocatePageTableMemory(1); + PageTableEntry = AllocatePageTableMemory (1); PageTableEntry1 = PageTableEntry; @@ -210,15 +210,17 @@ Split2MPageTo4K ( IndexOfPageTableEntries < 512; (IndexOfPageTableEntries++, PageTableEntry++, - PhysicalAddress4K += SIZE_4KB)) { + PhysicalAddress4K += SIZE_4KB)) + { // // Fill in the Page Table entries // - PageTableEntry->Uint64 = (UINT64) PhysicalAddress4K | AddressEncMask; + PageTableEntry->Uint64 = (UINT64)PhysicalAddress4K | AddressEncMask; PageTableEntry->Bits.ReadWrite = 1; - PageTableEntry->Bits.Present = 1; + PageTableEntry->Bits.Present = 1; if ((PhysicalAddress4K >= StackBase) && - (PhysicalAddress4K < StackBase + StackSize)) { + (PhysicalAddress4K < StackBase + StackSize)) + { // // Set Nx bit for stack. // @@ -244,9 +246,9 @@ Split2MPageTo4K ( STATIC VOID SetPageTablePoolReadOnly ( - IN UINTN PageTableBase, - IN EFI_PHYSICAL_ADDRESS Address, - IN BOOLEAN Level4Paging + IN UINTN PageTableBase, + IN EFI_PHYSICAL_ADDRESS Address, + IN BOOLEAN Level4Paging ) { UINTN Index; @@ -286,12 +288,12 @@ SetPageTablePoolReadOnly ( LevelSize[3] = SIZE_1GB; LevelSize[4] = SIZE_512GB; - AddressEncMask = InternalGetMemEncryptionAddressMask(); - PageTable = (UINT64 *)(UINTN)PageTableBase; - PoolUnitSize = PAGE_TABLE_POOL_UNIT_SIZE; + AddressEncMask = InternalGetMemEncryptionAddressMask (); + PageTable = (UINT64 *)(UINTN)PageTableBase; + PoolUnitSize = PAGE_TABLE_POOL_UNIT_SIZE; for (Level = (Level4Paging) ? 4 : 3; Level > 0; --Level) { - Index = ((UINTN)RShiftU64 (Address, LevelShift[Level])); + Index = ((UINTN)RShiftU64 (Address, LevelShift[Level])); Index &= PAGING_PAE_INDEX_MASK; PageAttr = PageTable[Index]; @@ -319,14 +321,13 @@ SetPageTablePoolReadOnly ( ASSERT (Index < EFI_PAGE_SIZE/sizeof (UINT64)); PageTable[Index] &= ~(UINT64)IA32_PG_RW; - PoolUnitSize -= LevelSize[Level]; + PoolUnitSize -= LevelSize[Level]; ++Index; } } break; - } else { // // The smaller granularity of page must be needed. @@ -338,18 +339,20 @@ SetPageTablePoolReadOnly ( PhysicalAddress = PageAttr & LevelMask[Level]; for (EntryIndex = 0; - EntryIndex < EFI_PAGE_SIZE/sizeof (UINT64); - ++EntryIndex) { + EntryIndex < EFI_PAGE_SIZE/sizeof (UINT64); + ++EntryIndex) + { NewPageTable[EntryIndex] = PhysicalAddress | AddressEncMask | IA32_PG_P | IA32_PG_RW; if (Level > 2) { NewPageTable[EntryIndex] |= IA32_PG_PS; } + PhysicalAddress += LevelSize[Level - 1]; } PageTable[Index] = (UINT64)(UINTN)NewPageTable | AddressEncMask | - IA32_PG_P | IA32_PG_RW; + IA32_PG_P | IA32_PG_RW; PageTable = NewPageTable; } } @@ -365,14 +368,14 @@ SetPageTablePoolReadOnly ( STATIC VOID EnablePageTableProtection ( - IN UINTN PageTableBase, - IN BOOLEAN Level4Paging + IN UINTN PageTableBase, + IN BOOLEAN Level4Paging ) { - PAGE_TABLE_POOL *HeadPool; - PAGE_TABLE_POOL *Pool; - UINT64 PoolSize; - EFI_PHYSICAL_ADDRESS Address; + PAGE_TABLE_POOL *HeadPool; + PAGE_TABLE_POOL *Pool; + UINT64 PoolSize; + EFI_PHYSICAL_ADDRESS Address; if (mPageTablePool == NULL) { return; @@ -383,7 +386,7 @@ EnablePageTableProtection ( // remember original one in advance. // HeadPool = mPageTablePool; - Pool = HeadPool; + Pool = HeadPool; do { Address = (EFI_PHYSICAL_ADDRESS)(UINTN)Pool; PoolSize = Pool->Offset + EFI_PAGES_TO_SIZE (Pool->FreePages); @@ -394,17 +397,15 @@ EnablePageTableProtection ( // the protection to them one by one. // while (PoolSize > 0) { - SetPageTablePoolReadOnly(PageTableBase, Address, Level4Paging); - Address += PAGE_TABLE_POOL_UNIT_SIZE; - PoolSize -= PAGE_TABLE_POOL_UNIT_SIZE; + SetPageTablePoolReadOnly (PageTableBase, Address, Level4Paging); + Address += PAGE_TABLE_POOL_UNIT_SIZE; + PoolSize -= PAGE_TABLE_POOL_UNIT_SIZE; } Pool = Pool->NextPool; } while (Pool != HeadPool); - } - /** Split 1G page to 2M. @@ -418,18 +419,18 @@ EnablePageTableProtection ( STATIC VOID Split1GPageTo2M ( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN OUT UINT64 *PageEntry1G, - IN PHYSICAL_ADDRESS StackBase, - IN UINTN StackSize + IN PHYSICAL_ADDRESS PhysicalAddress, + IN OUT UINT64 *PageEntry1G, + IN PHYSICAL_ADDRESS StackBase, + IN UINTN StackSize ) { - PHYSICAL_ADDRESS PhysicalAddress2M; - UINTN IndexOfPageDirectoryEntries; - PAGE_TABLE_ENTRY *PageDirectoryEntry; - UINT64 AddressEncMask; + PHYSICAL_ADDRESS PhysicalAddress2M; + UINTN IndexOfPageDirectoryEntries; + PAGE_TABLE_ENTRY *PageDirectoryEntry; + UINT64 AddressEncMask; - PageDirectoryEntry = AllocatePageTableMemory(1); + PageDirectoryEntry = AllocatePageTableMemory (1); AddressEncMask = InternalGetMemEncryptionAddressMask (); ASSERT (PageDirectoryEntry != NULL); @@ -445,9 +446,11 @@ Split1GPageTo2M ( IndexOfPageDirectoryEntries < 512; (IndexOfPageDirectoryEntries++, PageDirectoryEntry++, - PhysicalAddress2M += SIZE_2MB)) { + PhysicalAddress2M += SIZE_2MB)) + { if ((PhysicalAddress2M < StackBase + StackSize) && - ((PhysicalAddress2M + SIZE_2MB) > StackBase)) { + ((PhysicalAddress2M + SIZE_2MB) > StackBase)) + { // // Need to split this 2M page that covers stack range. // @@ -461,15 +464,14 @@ Split1GPageTo2M ( // // Fill in the Page Directory entries // - PageDirectoryEntry->Uint64 = (UINT64) PhysicalAddress2M | AddressEncMask; + PageDirectoryEntry->Uint64 = (UINT64)PhysicalAddress2M | AddressEncMask; PageDirectoryEntry->Bits.ReadWrite = 1; - PageDirectoryEntry->Bits.Present = 1; - PageDirectoryEntry->Bits.MustBe1 = 1; + PageDirectoryEntry->Bits.Present = 1; + PageDirectoryEntry->Bits.MustBe1 = 1; } } } - /** Set or Clear the memory encryption bit @@ -478,12 +480,12 @@ Split1GPageTo2M ( **/ STATIC VOID -SetOrClearCBit( - IN OUT UINT64* PageTablePointer, - IN MAP_RANGE_MODE Mode +SetOrClearCBit ( + IN OUT UINT64 *PageTablePointer, + IN MAP_RANGE_MODE Mode ) { - UINT64 AddressEncMask; + UINT64 AddressEncMask; AddressEncMask = InternalGetMemEncryptionAddressMask (); @@ -492,7 +494,6 @@ SetOrClearCBit( } else { *PageTablePointer &= ~AddressEncMask; } - } /** @@ -511,7 +512,6 @@ IsReadOnlyPageWriteProtected ( return ((AsmReadCr0 () & BIT16) != 0); } - /** Disable Write Protect on pages marked as read-only. **/ @@ -521,7 +521,7 @@ DisableReadOnlyPageWriteProtect ( VOID ) { - AsmWriteCr0 (AsmReadCr0() & ~BIT16); + AsmWriteCr0 (AsmReadCr0 () & ~BIT16); } /** @@ -533,10 +533,9 @@ EnableReadOnlyPageWriteProtect ( VOID ) { - AsmWriteCr0 (AsmReadCr0() | BIT16); + AsmWriteCr0 (AsmReadCr0 () | BIT16); } - /** This function either sets or clears memory encryption bit for the memory region specified by PhysicalAddress and Length from the current page table @@ -568,23 +567,23 @@ STATIC RETURN_STATUS EFIAPI SetMemoryEncDec ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS PhysicalAddress, - IN UINTN Length, - IN MAP_RANGE_MODE Mode, - IN BOOLEAN CacheFlush + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS PhysicalAddress, + IN UINTN Length, + IN MAP_RANGE_MODE Mode, + IN BOOLEAN CacheFlush ) { - PAGE_MAP_AND_DIRECTORY_POINTER *PageMapLevel4Entry; - PAGE_MAP_AND_DIRECTORY_POINTER *PageUpperDirectoryPointerEntry; - PAGE_MAP_AND_DIRECTORY_POINTER *PageDirectoryPointerEntry; - PAGE_TABLE_1G_ENTRY *PageDirectory1GEntry; - PAGE_TABLE_ENTRY *PageDirectory2MEntry; - PAGE_TABLE_4K_ENTRY *PageTableEntry; - UINT64 PgTableMask; - UINT64 AddressEncMask; - BOOLEAN IsWpEnabled; - RETURN_STATUS Status; + PAGE_MAP_AND_DIRECTORY_POINTER *PageMapLevel4Entry; + PAGE_MAP_AND_DIRECTORY_POINTER *PageUpperDirectoryPointerEntry; + PAGE_MAP_AND_DIRECTORY_POINTER *PageDirectoryPointerEntry; + PAGE_TABLE_1G_ENTRY *PageDirectory1GEntry; + PAGE_TABLE_ENTRY *PageDirectory2MEntry; + PAGE_TABLE_4K_ENTRY *PageTableEntry; + UINT64 PgTableMask; + UINT64 AddressEncMask; + BOOLEAN IsWpEnabled; + RETURN_STATUS Status; // // Set PageMapLevel4Entry to suppress incorrect compiler/analyzer warnings. @@ -623,7 +622,7 @@ SetMemoryEncDec ( // with correct C-bit // if (CacheFlush) { - WriteBackInvalidateDataCacheRange((VOID*) (UINTN)PhysicalAddress, Length); + WriteBackInvalidateDataCacheRange ((VOID *)(UINTN)PhysicalAddress, Length); } // @@ -636,17 +635,16 @@ SetMemoryEncDec ( Status = EFI_SUCCESS; - while (Length != 0) - { + while (Length != 0) { // // If Cr3BaseAddress is not specified then read the current CR3 // if (Cr3BaseAddress == 0) { - Cr3BaseAddress = AsmReadCr3(); + Cr3BaseAddress = AsmReadCr3 (); } - PageMapLevel4Entry = (VOID*) (Cr3BaseAddress & ~PgTableMask); - PageMapLevel4Entry += PML4_OFFSET(PhysicalAddress); + PageMapLevel4Entry = (VOID *)(Cr3BaseAddress & ~PgTableMask); + PageMapLevel4Entry += PML4_OFFSET (PhysicalAddress); if (!PageMapLevel4Entry->Bits.Present) { DEBUG (( DEBUG_ERROR, @@ -660,10 +658,10 @@ SetMemoryEncDec ( } PageDirectory1GEntry = (VOID *)( - (PageMapLevel4Entry->Bits.PageTableBaseAddress << - 12) & ~PgTableMask - ); - PageDirectory1GEntry += PDP_OFFSET(PhysicalAddress); + (PageMapLevel4Entry->Bits.PageTableBaseAddress << + 12) & ~PgTableMask + ); + PageDirectory1GEntry += PDP_OFFSET (PhysicalAddress); if (!PageDirectory1GEntry->Bits.Present) { DEBUG (( DEBUG_ERROR, @@ -684,8 +682,8 @@ SetMemoryEncDec ( // Valid 1GB page // If we have at least 1GB to go, we can just update this entry // - if ((PhysicalAddress & (BIT30 - 1)) == 0 && Length >= BIT30) { - SetOrClearCBit(&PageDirectory1GEntry->Uint64, Mode); + if (((PhysicalAddress & (BIT30 - 1)) == 0) && (Length >= BIT30)) { + SetOrClearCBit (&PageDirectory1GEntry->Uint64, Mode); DEBUG (( DEBUG_VERBOSE, "%a:%a: updated 1GB entry for Physical=0x%Lx\n", @@ -694,7 +692,7 @@ SetMemoryEncDec ( PhysicalAddress )); PhysicalAddress += BIT30; - Length -= BIT30; + Length -= BIT30; } else { // // We must split the page @@ -722,10 +720,10 @@ SetMemoryEncDec ( (PAGE_MAP_AND_DIRECTORY_POINTER *)PageDirectory1GEntry; PageDirectory2MEntry = (VOID *)( - (PageUpperDirectoryPointerEntry->Bits.PageTableBaseAddress << - 12) & ~PgTableMask - ); - PageDirectory2MEntry += PDE_OFFSET(PhysicalAddress); + (PageUpperDirectoryPointerEntry->Bits.PageTableBaseAddress << + 12) & ~PgTableMask + ); + PageDirectory2MEntry += PDE_OFFSET (PhysicalAddress); if (!PageDirectory2MEntry->Bits.Present) { DEBUG (( DEBUG_ERROR, @@ -737,6 +735,7 @@ SetMemoryEncDec ( Status = RETURN_NO_MAPPING; goto Done; } + // // If the MustBe1 bit is not a 1, it's not a 2MB entry // @@ -745,10 +744,10 @@ SetMemoryEncDec ( // Valid 2MB page // If we have at least 2MB left to go, we can just update this entry // - if ((PhysicalAddress & (BIT21-1)) == 0 && Length >= BIT21) { + if (((PhysicalAddress & (BIT21-1)) == 0) && (Length >= BIT21)) { SetOrClearCBit (&PageDirectory2MEntry->Uint64, Mode); PhysicalAddress += BIT21; - Length -= BIT21; + Length -= BIT21; } else { // // We must split up this page into 4K pages @@ -773,10 +772,10 @@ SetMemoryEncDec ( (PAGE_MAP_AND_DIRECTORY_POINTER *)PageDirectory2MEntry; PageTableEntry = (VOID *)( - (PageDirectoryPointerEntry->Bits.PageTableBaseAddress << - 12) & ~PgTableMask - ); - PageTableEntry += PTE_OFFSET(PhysicalAddress); + (PageDirectoryPointerEntry->Bits.PageTableBaseAddress << + 12) & ~PgTableMask + ); + PageTableEntry += PTE_OFFSET (PhysicalAddress); if (!PageTableEntry->Bits.Present) { DEBUG (( DEBUG_ERROR, @@ -788,9 +787,10 @@ SetMemoryEncDec ( Status = RETURN_NO_MAPPING; goto Done; } + SetOrClearCBit (&PageTableEntry->Uint64, Mode); PhysicalAddress += EFI_PAGE_SIZE; - Length -= EFI_PAGE_SIZE; + Length -= EFI_PAGE_SIZE; } } } @@ -806,7 +806,7 @@ SetMemoryEncDec ( // // Flush TLB // - CpuFlushTlb(); + CpuFlushTlb (); Done: // @@ -838,12 +838,11 @@ Done: RETURN_STATUS EFIAPI InternalMemEncryptSevSetMemoryDecrypted ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS PhysicalAddress, - IN UINTN Length + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS PhysicalAddress, + IN UINTN Length ) { - return SetMemoryEncDec ( Cr3BaseAddress, PhysicalAddress, @@ -872,9 +871,9 @@ InternalMemEncryptSevSetMemoryDecrypted ( RETURN_STATUS EFIAPI InternalMemEncryptSevSetMemoryEncrypted ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS PhysicalAddress, - IN UINTN Length + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS PhysicalAddress, + IN UINTN Length ) { return SetMemoryEncDec ( @@ -905,9 +904,9 @@ InternalMemEncryptSevSetMemoryEncrypted ( RETURN_STATUS EFIAPI InternalMemEncryptSevClearMmioPageEncMask ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS PhysicalAddress, - IN UINTN Length + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS PhysicalAddress, + IN UINTN Length ) { return SetMemoryEncDec ( diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/X64/SecVirtualMemory.c b/OvmfPkg/Library/BaseMemEncryptSevLib/X64/SecVirtualMemory.c index a155c8729b..b5dc70a924 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/X64/SecVirtualMemory.c +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/X64/SecVirtualMemory.c @@ -25,9 +25,9 @@ InternalGetMemEncryptionAddressMask ( VOID ) { - UINT64 EncryptionMask; + UINT64 EncryptionMask; - EncryptionMask = MemEncryptSevGetEncryptionMask (); + EncryptionMask = MemEncryptSevGetEncryptionMask (); EncryptionMask &= PAGING_1G_ADDRESS_MASK_64; return EncryptionMask; @@ -52,9 +52,9 @@ InternalGetMemEncryptionAddressMask ( RETURN_STATUS EFIAPI InternalMemEncryptSevSetMemoryDecrypted ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS PhysicalAddress, - IN UINTN Length + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS PhysicalAddress, + IN UINTN Length ) { // @@ -84,9 +84,9 @@ InternalMemEncryptSevSetMemoryDecrypted ( RETURN_STATUS EFIAPI InternalMemEncryptSevSetMemoryEncrypted ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS PhysicalAddress, - IN UINTN Length + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS PhysicalAddress, + IN UINTN Length ) { // @@ -114,9 +114,9 @@ InternalMemEncryptSevSetMemoryEncrypted ( RETURN_STATUS EFIAPI InternalMemEncryptSevClearMmioPageEncMask ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS PhysicalAddress, - IN UINTN Length + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS PhysicalAddress, + IN UINTN Length ) { // diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/X64/VirtualMemory.c b/OvmfPkg/Library/BaseMemEncryptSevLib/X64/VirtualMemory.c index 36aabcf556..2b759cafbf 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/X64/VirtualMemory.c +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/X64/VirtualMemory.c @@ -96,10 +96,10 @@ InternalMemEncryptSevGetAddressRangeState ( // If Cr3BaseAddress is not specified then read the current CR3 // if (Cr3BaseAddress == 0) { - Cr3BaseAddress = AsmReadCr3(); + Cr3BaseAddress = AsmReadCr3 (); } - AddressEncMask = MemEncryptSevGetEncryptionMask (); + AddressEncMask = MemEncryptSevGetEncryptionMask (); AddressEncMask &= PAGING_1G_ADDRESS_MASK_64; PgTableMask = AddressEncMask | EFI_PAGE_MASK; @@ -110,21 +110,21 @@ InternalMemEncryptSevGetAddressRangeState ( // Encryption is on a page basis, so start at the beginning of the // virtual address page boundary and walk page-by-page. // - Address = (PHYSICAL_ADDRESS) (UINTN) BaseAddress & ~EFI_PAGE_MASK; + Address = (PHYSICAL_ADDRESS)(UINTN)BaseAddress & ~EFI_PAGE_MASK; AddressEnd = (PHYSICAL_ADDRESS) - (UINTN) (BaseAddress + Length); + (UINTN)(BaseAddress + Length); while (Address < AddressEnd) { - PageMapLevel4Entry = (VOID*) (Cr3BaseAddress & ~PgTableMask); + PageMapLevel4Entry = (VOID *)(Cr3BaseAddress & ~PgTableMask); PageMapLevel4Entry += PML4_OFFSET (Address); if (!PageMapLevel4Entry->Bits.Present) { return MemEncryptSevAddressRangeError; } - PageDirectory1GEntry = (VOID *) ( - (PageMapLevel4Entry->Bits.PageTableBaseAddress << - 12) & ~PgTableMask - ); + PageDirectory1GEntry = (VOID *)( + (PageMapLevel4Entry->Bits.PageTableBaseAddress << + 12) & ~PgTableMask + ); PageDirectory1GEntry += PDP_OFFSET (Address); if (!PageDirectory1GEntry->Bits.Present) { return MemEncryptSevAddressRangeError; @@ -151,12 +151,12 @@ InternalMemEncryptSevGetAddressRangeState ( // Actually a PDP // PageUpperDirectoryPointerEntry = - (PAGE_MAP_AND_DIRECTORY_POINTER *) PageDirectory1GEntry; + (PAGE_MAP_AND_DIRECTORY_POINTER *)PageDirectory1GEntry; PageDirectory2MEntry = - (VOID *) ( - (PageUpperDirectoryPointerEntry->Bits.PageTableBaseAddress << - 12) & ~PgTableMask - ); + (VOID *)( + (PageUpperDirectoryPointerEntry->Bits.PageTableBaseAddress << + 12) & ~PgTableMask + ); PageDirectory2MEntry += PDE_OFFSET (Address); if (!PageDirectory2MEntry->Bits.Present) { return MemEncryptSevAddressRangeError; @@ -186,9 +186,9 @@ InternalMemEncryptSevGetAddressRangeState ( (PAGE_MAP_AND_DIRECTORY_POINTER *)PageDirectory2MEntry; PageTableEntry = (VOID *)( - (PageDirectoryPointerEntry->Bits.PageTableBaseAddress << - 12) & ~PgTableMask - ); + (PageDirectoryPointerEntry->Bits.PageTableBaseAddress << + 12) & ~PgTableMask + ); PageTableEntry += PTE_OFFSET (Address); if (!PageTableEntry->Bits.Present) { return MemEncryptSevAddressRangeError; diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/X64/VirtualMemory.h b/OvmfPkg/Library/BaseMemEncryptSevLib/X64/VirtualMemory.h index 21bbbd1c4f..93e3d08589 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/X64/VirtualMemory.h +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/X64/VirtualMemory.h @@ -22,19 +22,19 @@ #include #include -#define SYS_CODE64_SEL 0x38 +#define SYS_CODE64_SEL 0x38 -#define PAGE_TABLE_POOL_ALIGNMENT BASE_2MB -#define PAGE_TABLE_POOL_UNIT_SIZE SIZE_2MB +#define PAGE_TABLE_POOL_ALIGNMENT BASE_2MB +#define PAGE_TABLE_POOL_UNIT_SIZE SIZE_2MB #define PAGE_TABLE_POOL_UNIT_PAGES \ EFI_SIZE_TO_PAGES (PAGE_TABLE_POOL_UNIT_SIZE) #define PAGE_TABLE_POOL_ALIGN_MASK \ (~(EFI_PHYSICAL_ADDRESS)(PAGE_TABLE_POOL_ALIGNMENT - 1)) typedef struct { - VOID *NextPool; - UINTN Offset; - UINTN FreePages; + VOID *NextPool; + UINTN Offset; + UINTN FreePages; } PAGE_TABLE_POOL; /** @@ -68,9 +68,9 @@ InternalGetMemEncryptionAddressMask ( RETURN_STATUS EFIAPI InternalMemEncryptSevSetMemoryDecrypted ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS PhysicalAddress, - IN UINTN Length + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS PhysicalAddress, + IN UINTN Length ); /** @@ -92,9 +92,9 @@ InternalMemEncryptSevSetMemoryDecrypted ( RETURN_STATUS EFIAPI InternalMemEncryptSevSetMemoryEncrypted ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS PhysicalAddress, - IN UINTN Length + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS PhysicalAddress, + IN UINTN Length ); /** @@ -115,9 +115,9 @@ InternalMemEncryptSevSetMemoryEncrypted ( MEM_ENCRYPT_SEV_ADDRESS_RANGE_STATE EFIAPI InternalMemEncryptSevGetAddressRangeState ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS BaseAddress, - IN UINTN Length + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS BaseAddress, + IN UINTN Length ); /** @@ -139,8 +139,9 @@ InternalMemEncryptSevGetAddressRangeState ( RETURN_STATUS EFIAPI InternalMemEncryptSevClearMmioPageEncMask ( - IN PHYSICAL_ADDRESS Cr3BaseAddress, - IN PHYSICAL_ADDRESS PhysicalAddress, - IN UINTN Length + IN PHYSICAL_ADDRESS Cr3BaseAddress, + IN PHYSICAL_ADDRESS PhysicalAddress, + IN UINTN Length ); + #endif diff --git a/OvmfPkg/Library/BasePciCapLib/BasePciCapLib.c b/OvmfPkg/Library/BasePciCapLib/BasePciCapLib.c index c6f2c72650..4215e6cdaa 100644 --- a/OvmfPkg/Library/BasePciCapLib/BasePciCapLib.c +++ b/OvmfPkg/Library/BasePciCapLib/BasePciCapLib.c @@ -17,7 +17,6 @@ #include "BasePciCapLib.h" - /** Compare a standalone PCI_CAP_KEY against a PCI_CAP containing an embedded PCI_CAP_KEY. @@ -36,12 +35,12 @@ STATIC INTN EFIAPI ComparePciCapKey ( - IN CONST VOID *PciCapKey, - IN CONST VOID *PciCap + IN CONST VOID *PciCapKey, + IN CONST VOID *PciCap ) { - CONST PCI_CAP_KEY *Key1; - CONST PCI_CAP_KEY *Key2; + CONST PCI_CAP_KEY *Key1; + CONST PCI_CAP_KEY *Key2; Key1 = PciCapKey; Key2 = &((CONST PCI_CAP *)PciCap)->Key; @@ -49,25 +48,30 @@ ComparePciCapKey ( if (Key1->Domain < Key2->Domain) { return -1; } + if (Key1->Domain > Key2->Domain) { return 1; } + if (Key1->CapId < Key2->CapId) { return -1; } + if (Key1->CapId > Key2->CapId) { return 1; } + if (Key1->Instance < Key2->Instance) { return -1; } + if (Key1->Instance > Key2->Instance) { return 1; } + return 0; } - /** Compare two PCI_CAP objects based on PCI_CAP.Key. @@ -85,17 +89,16 @@ STATIC INTN EFIAPI ComparePciCap ( - IN CONST VOID *PciCap1, - IN CONST VOID *PciCap2 + IN CONST VOID *PciCap1, + IN CONST VOID *PciCap2 ) { - CONST PCI_CAP_KEY *PciCap1Key; + CONST PCI_CAP_KEY *PciCap1Key; PciCap1Key = &((CONST PCI_CAP *)PciCap1)->Key; return ComparePciCapKey (PciCap1Key, PciCap2); } - /** Compare the standalone UINT16 config space offset of a capability header against a PCI_CAP containing an embedded Offset. @@ -114,12 +117,12 @@ STATIC INTN EFIAPI ComparePciCapOffsetKey ( - IN CONST VOID *CapHdrOffset, - IN CONST VOID *PciCap + IN CONST VOID *CapHdrOffset, + IN CONST VOID *PciCap ) { - UINT16 Offset1; - UINT16 Offset2; + UINT16 Offset1; + UINT16 Offset2; Offset1 = *(CONST UINT16 *)CapHdrOffset; Offset2 = ((CONST PCI_CAP *)PciCap)->Offset; @@ -130,7 +133,6 @@ ComparePciCapOffsetKey ( return Offset1 - Offset2; } - /** Compare two PCI_CAP objects based on PCI_CAP.Offset. @@ -148,12 +150,12 @@ STATIC INTN EFIAPI ComparePciCapOffset ( - IN CONST VOID *PciCap1, - IN CONST VOID *PciCap2 + IN CONST VOID *PciCap1, + IN CONST VOID *PciCap2 ) { - UINT16 Offset1; - UINT16 Offset2; + UINT16 Offset1; + UINT16 Offset2; Offset1 = ((CONST PCI_CAP *)PciCap1)->Offset; Offset2 = ((CONST PCI_CAP *)PciCap2)->Offset; @@ -164,7 +166,6 @@ ComparePciCapOffset ( return Offset1 - Offset2; } - /** Insert a new instance of the PCI capability given by (Domain, CapId) in CapList. @@ -205,22 +206,24 @@ ComparePciCapOffset ( STATIC RETURN_STATUS InsertPciCap ( - IN OUT PCI_CAP_LIST *CapList, - IN OUT ORDERED_COLLECTION *CapHdrOffsets, - IN PCI_CAP_DOMAIN Domain, - IN UINT16 CapId, - IN UINT16 Offset, - IN UINT8 Version + IN OUT PCI_CAP_LIST *CapList, + IN OUT ORDERED_COLLECTION *CapHdrOffsets, + IN PCI_CAP_DOMAIN Domain, + IN UINT16 CapId, + IN UINT16 Offset, + IN UINT8 Version ) { - PCI_CAP *PciCap; - RETURN_STATUS Status; - ORDERED_COLLECTION_ENTRY *PciCapEntry; - PCI_CAP *InstanceZero; + PCI_CAP *PciCap; + RETURN_STATUS Status; + ORDERED_COLLECTION_ENTRY *PciCapEntry; + PCI_CAP *InstanceZero; ASSERT ((Offset & 0x3) == 0); - ASSERT (Offset < (Domain == PciCapNormal ? - PCI_MAX_CONFIG_OFFSET : PCI_EXP_MAX_CONFIG_OFFSET)); + ASSERT ( + Offset < (Domain == PciCapNormal ? + PCI_MAX_CONFIG_OFFSET : PCI_EXP_MAX_CONFIG_OFFSET) + ); ASSERT (Domain == PciCapExtended || Version == 0); // @@ -237,6 +240,7 @@ InsertPciCap ( if (PciCap == NULL) { return RETURN_OUT_OF_RESOURCES; } + PciCap->Key.Domain = Domain; PciCap->Key.CapId = CapId; PciCap->Key.Instance = 0; @@ -248,12 +252,16 @@ InsertPciCap ( // // Add PciCap to CapList. // - Status = OrderedCollectionInsert (CapList->Capabilities, &PciCapEntry, - PciCap); + Status = OrderedCollectionInsert ( + CapList->Capabilities, + &PciCapEntry, + PciCap + ); if (RETURN_ERROR (Status)) { if (Status == RETURN_OUT_OF_RESOURCES) { goto FreePciCap; } + ASSERT (Status == RETURN_ALREADY_STARTED); // // PciCap is not the first instance of (Domain, CapId). Add it as a new @@ -261,17 +269,21 @@ InsertPciCap ( // we don't bump the instance count maintained in Instance#0 just yet, to // keep rollback on errors simple. // - InstanceZero = OrderedCollectionUserStruct (PciCapEntry); - PciCap->Key.Instance = InstanceZero->NumInstancesUnion.NumInstances; + InstanceZero = OrderedCollectionUserStruct (PciCapEntry); + PciCap->Key.Instance = InstanceZero->NumInstancesUnion.NumInstances; PciCap->NumInstancesUnion.InstanceZero = InstanceZero; ASSERT (PciCap->Key.Instance > 0); - Status = OrderedCollectionInsert (CapList->Capabilities, &PciCapEntry, - PciCap); + Status = OrderedCollectionInsert ( + CapList->Capabilities, + &PciCapEntry, + PciCap + ); if (Status == RETURN_OUT_OF_RESOURCES) { goto FreePciCap; } } + // // At this point, PciCap has been inserted in CapList->Capabilities, either // with Instance==0 or with Instance>0. PciCapEntry is the iterator that @@ -295,6 +307,7 @@ InsertPciCap ( // Status = RETURN_DEVICE_ERROR; } + goto DeletePciCapFromCapList; } @@ -312,6 +325,7 @@ InsertPciCap ( InstanceZero->NumInstancesUnion.NumInstances++; } + return RETURN_SUCCESS; DeletePciCapFromCapList: @@ -323,7 +337,6 @@ FreePciCap: return Status; } - /** Calculate the MaxSizeHint member for a PCI_CAP object. @@ -347,11 +360,11 @@ FreePciCap: STATIC VOID CalculatePciCapMaxSizeHint ( - IN OUT PCI_CAP *PciCap, - IN PCI_CAP *NextPciCap OPTIONAL + IN OUT PCI_CAP *PciCap, + IN PCI_CAP *NextPciCap OPTIONAL ) { - UINT16 ConfigSpaceSize; + UINT16 ConfigSpaceSize; ConfigSpaceSize = (PciCap->Key.Domain == PciCapNormal ? PCI_MAX_CONFIG_OFFSET : PCI_EXP_MAX_CONFIG_OFFSET); @@ -372,14 +385,14 @@ CalculatePciCapMaxSizeHint ( // PciCap extends from PciCap->Offset to NextPciCap->Offset (if any), except // it cannot cross config space boundary. // - if (NextPciCap == NULL || NextPciCap->Offset >= ConfigSpaceSize) { + if ((NextPciCap == NULL) || (NextPciCap->Offset >= ConfigSpaceSize)) { PciCap->MaxSizeHint = ConfigSpaceSize - PciCap->Offset; return; } + PciCap->MaxSizeHint = NextPciCap->Offset - PciCap->Offset; } - /** Debug dump a PCI_CAP_LIST object at the DEBUG_VERBOSE level. @@ -389,18 +402,19 @@ STATIC VOID EFIAPI DebugDumpPciCapList ( - IN PCI_CAP_LIST *CapList + IN PCI_CAP_LIST *CapList ) { DEBUG_CODE_BEGIN (); - ORDERED_COLLECTION_ENTRY *PciCapEntry; + ORDERED_COLLECTION_ENTRY *PciCapEntry; for (PciCapEntry = OrderedCollectionMin (CapList->Capabilities); PciCapEntry != NULL; - PciCapEntry = OrderedCollectionNext (PciCapEntry)) { - PCI_CAP *PciCap; - RETURN_STATUS Status; - PCI_CAP_INFO Info; + PciCapEntry = OrderedCollectionNext (PciCapEntry)) + { + PCI_CAP *PciCap; + RETURN_STATUS Status; + PCI_CAP_INFO Info; PciCap = OrderedCollectionUserStruct (PciCapEntry); Status = PciCapGetInfo (PciCap, &Info); @@ -409,16 +423,24 @@ DebugDumpPciCapList ( // ASSERT_RETURN_ERROR (Status); - DEBUG ((DEBUG_VERBOSE, - "%a:%a: %a 0x%04x %03u/%03u v0x%x @0x%03x+0x%03x\n", gEfiCallerBaseName, - __FUNCTION__, (Info.Domain == PciCapNormal ? "Norm" : "Extd"), - Info.CapId, Info.Instance, Info.NumInstances, Info.Version, Info.Offset, - Info.MaxSizeHint)); + DEBUG (( + DEBUG_VERBOSE, + "%a:%a: %a 0x%04x %03u/%03u v0x%x @0x%03x+0x%03x\n", + gEfiCallerBaseName, + __FUNCTION__, + (Info.Domain == PciCapNormal ? "Norm" : "Extd"), + Info.CapId, + Info.Instance, + Info.NumInstances, + Info.Version, + Info.Offset, + Info.MaxSizeHint + )); } + DEBUG_CODE_END (); } - /** Empty a collection of PCI_CAP structures, optionally releasing the referenced PCI_CAP structures themselves. Release the collection at last. @@ -435,17 +457,18 @@ DebugDumpPciCapList ( STATIC VOID EmptyAndUninitPciCapCollection ( - IN OUT ORDERED_COLLECTION *PciCapCollection, - IN BOOLEAN FreePciCap + IN OUT ORDERED_COLLECTION *PciCapCollection, + IN BOOLEAN FreePciCap ) { - ORDERED_COLLECTION_ENTRY *PciCapEntry; - ORDERED_COLLECTION_ENTRY *NextEntry; + ORDERED_COLLECTION_ENTRY *PciCapEntry; + ORDERED_COLLECTION_ENTRY *NextEntry; for (PciCapEntry = OrderedCollectionMin (PciCapCollection); PciCapEntry != NULL; - PciCapEntry = NextEntry) { - PCI_CAP *PciCap; + PciCapEntry = NextEntry) + { + PCI_CAP *PciCap; NextEntry = OrderedCollectionNext (PciCapEntry); OrderedCollectionDelete (PciCapCollection, PciCapEntry, (VOID **)&PciCap); @@ -453,10 +476,10 @@ EmptyAndUninitPciCapCollection ( FreePool (PciCap); } } + OrderedCollectionUninit (PciCapCollection); } - /** Parse the capabilities lists (both normal and extended, as applicable) of a PCI device. @@ -492,16 +515,16 @@ EmptyAndUninitPciCapCollection ( RETURN_STATUS EFIAPI PciCapListInit ( - IN PCI_CAP_DEV *PciDevice, - OUT PCI_CAP_LIST **CapList + IN PCI_CAP_DEV *PciDevice, + OUT PCI_CAP_LIST **CapList ) { - PCI_CAP_LIST *OutCapList; - RETURN_STATUS Status; - ORDERED_COLLECTION *CapHdrOffsets; - UINT16 PciStatusReg; - BOOLEAN DeviceIsExpress; - ORDERED_COLLECTION_ENTRY *OffsetEntry; + PCI_CAP_LIST *OutCapList; + RETURN_STATUS Status; + ORDERED_COLLECTION *CapHdrOffsets; + UINT16 PciStatusReg; + BOOLEAN DeviceIsExpress; + ORDERED_COLLECTION_ENTRY *OffsetEntry; // // Allocate the output structure. @@ -510,12 +533,15 @@ PciCapListInit ( if (OutCapList == NULL) { return RETURN_OUT_OF_RESOURCES; } + // // The OutCapList->Capabilities collection owns the PCI_CAP structures and // orders them based on PCI_CAP.Key. // - OutCapList->Capabilities = OrderedCollectionInit (ComparePciCap, - ComparePciCapKey); + OutCapList->Capabilities = OrderedCollectionInit ( + ComparePciCap, + ComparePciCapKey + ); if (OutCapList->Capabilities == NULL) { Status = RETURN_OUT_OF_RESOURCES; goto FreeOutCapList; @@ -525,8 +551,10 @@ PciCapListInit ( // The (temporary) CapHdrOffsets collection only references PCI_CAP // structures, and orders them based on PCI_CAP.Offset. // - CapHdrOffsets = OrderedCollectionInit (ComparePciCapOffset, - ComparePciCapOffsetKey); + CapHdrOffsets = OrderedCollectionInit ( + ComparePciCapOffset, + ComparePciCapOffsetKey + ); if (CapHdrOffsets == NULL) { Status = RETURN_OUT_OF_RESOURCES; goto FreeCapabilities; @@ -542,19 +570,28 @@ PciCapListInit ( // Check whether a normal capabilities list is present. If there's none, // that's not an error; we'll just return OutCapList->Capabilities empty. // - Status = PciDevice->ReadConfig (PciDevice, PCI_PRIMARY_STATUS_OFFSET, - &PciStatusReg, sizeof PciStatusReg); + Status = PciDevice->ReadConfig ( + PciDevice, + PCI_PRIMARY_STATUS_OFFSET, + &PciStatusReg, + sizeof PciStatusReg + ); if (RETURN_ERROR (Status)) { goto FreeCapHdrOffsets; } + if ((PciStatusReg & EFI_PCI_STATUS_CAPABILITY) != 0) { - UINT8 NormalCapHdrOffset; + UINT8 NormalCapHdrOffset; // // Fetch the start offset of the normal capabilities list. // - Status = PciDevice->ReadConfig (PciDevice, PCI_CAPBILITY_POINTER_OFFSET, - &NormalCapHdrOffset, sizeof NormalCapHdrOffset); + Status = PciDevice->ReadConfig ( + PciDevice, + PCI_CAPBILITY_POINTER_OFFSET, + &NormalCapHdrOffset, + sizeof NormalCapHdrOffset + ); if (RETURN_ERROR (Status)) { goto FreeCapHdrOffsets; } @@ -564,16 +601,26 @@ PciCapListInit ( // NormalCapHdrOffset &= 0xFC; while (NormalCapHdrOffset > 0) { - EFI_PCI_CAPABILITY_HDR NormalCapHdr; - - Status = PciDevice->ReadConfig (PciDevice, NormalCapHdrOffset, - &NormalCapHdr, sizeof NormalCapHdr); + EFI_PCI_CAPABILITY_HDR NormalCapHdr; + + Status = PciDevice->ReadConfig ( + PciDevice, + NormalCapHdrOffset, + &NormalCapHdr, + sizeof NormalCapHdr + ); if (RETURN_ERROR (Status)) { goto FreeCapHdrOffsets; } - Status = InsertPciCap (OutCapList, CapHdrOffsets, PciCapNormal, - NormalCapHdr.CapabilityID, NormalCapHdrOffset, 0); + Status = InsertPciCap ( + OutCapList, + CapHdrOffsets, + PciCapNormal, + NormalCapHdr.CapabilityID, + NormalCapHdrOffset, + 0 + ); if (RETURN_ERROR (Status)) { goto FreeCapHdrOffsets; } @@ -581,6 +628,7 @@ PciCapListInit ( if (NormalCapHdr.CapabilityID == EFI_PCI_CAPABILITY_ID_PCIEXP) { DeviceIsExpress = TRUE; } + NormalCapHdrOffset = NormalCapHdr.NextItemPtr & 0xFC; } } @@ -590,39 +638,51 @@ PciCapListInit ( // capabilities list. It starts right after the normal config space. // if (DeviceIsExpress) { - UINT16 ExtendedCapHdrOffset; + UINT16 ExtendedCapHdrOffset; ExtendedCapHdrOffset = PCI_MAX_CONFIG_OFFSET; while (ExtendedCapHdrOffset > 0) { - PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER ExtendedCapHdr; - - Status = PciDevice->ReadConfig (PciDevice, ExtendedCapHdrOffset, - &ExtendedCapHdr, sizeof ExtendedCapHdr); + PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER ExtendedCapHdr; + + Status = PciDevice->ReadConfig ( + PciDevice, + ExtendedCapHdrOffset, + &ExtendedCapHdr, + sizeof ExtendedCapHdr + ); // // If the first extended config space access fails, assume the device has // no extended capabilities. If the first extended config space access // succeeds but we read an "all bits zero" extended capability header, // that means (by spec) the device has no extended capabilities. // - if (ExtendedCapHdrOffset == PCI_MAX_CONFIG_OFFSET && + if ((ExtendedCapHdrOffset == PCI_MAX_CONFIG_OFFSET) && (RETURN_ERROR (Status) || - IsZeroBuffer (&ExtendedCapHdr, sizeof ExtendedCapHdr))) { + IsZeroBuffer (&ExtendedCapHdr, sizeof ExtendedCapHdr))) + { break; } + if (RETURN_ERROR (Status)) { goto FreeCapHdrOffsets; } - Status = InsertPciCap (OutCapList, CapHdrOffsets, PciCapExtended, - (UINT16)ExtendedCapHdr.CapabilityId, ExtendedCapHdrOffset, - (UINT8)ExtendedCapHdr.CapabilityVersion); + Status = InsertPciCap ( + OutCapList, + CapHdrOffsets, + PciCapExtended, + (UINT16)ExtendedCapHdr.CapabilityId, + ExtendedCapHdrOffset, + (UINT8)ExtendedCapHdr.CapabilityVersion + ); if (RETURN_ERROR (Status)) { goto FreeCapHdrOffsets; } ExtendedCapHdrOffset = ExtendedCapHdr.NextCapabilityOffset & 0xFFC; - if (ExtendedCapHdrOffset > 0 && - ExtendedCapHdrOffset < PCI_MAX_CONFIG_OFFSET) { + if ((ExtendedCapHdrOffset > 0) && + (ExtendedCapHdrOffset < PCI_MAX_CONFIG_OFFSET)) + { // // Invalid capability pointer. // @@ -642,8 +702,8 @@ PciCapListInit ( // OffsetEntry = OrderedCollectionMin (CapHdrOffsets); if (OffsetEntry != NULL) { - ORDERED_COLLECTION_ENTRY *NextOffsetEntry; - PCI_CAP *PciCap; + ORDERED_COLLECTION_ENTRY *NextOffsetEntry; + PCI_CAP *PciCap; // // Initialize NextOffsetEntry to the iterator of the PCI_CAP object with @@ -655,21 +715,23 @@ PciCapListInit ( // highest Offset. // while (NextOffsetEntry != NULL) { - PCI_CAP *NextPciCap; + PCI_CAP *NextPciCap; OrderedCollectionDelete (CapHdrOffsets, OffsetEntry, (VOID **)&PciCap); NextPciCap = OrderedCollectionUserStruct (NextOffsetEntry); CalculatePciCapMaxSizeHint (PciCap, NextPciCap); - OffsetEntry = NextOffsetEntry; + OffsetEntry = NextOffsetEntry; NextOffsetEntry = OrderedCollectionNext (OffsetEntry); } + // // Calculate MaxSizeHint for the PCI_CAP object with the highest Offset. // OrderedCollectionDelete (CapHdrOffsets, OffsetEntry, (VOID **)&PciCap); CalculatePciCapMaxSizeHint (PciCap, NULL); } + ASSERT (OrderedCollectionIsEmpty (CapHdrOffsets)); OrderedCollectionUninit (CapHdrOffsets); @@ -687,12 +749,16 @@ FreeOutCapList: FreePool (OutCapList); ASSERT (RETURN_ERROR (Status)); - DEBUG ((DEBUG_ERROR, "%a:%a: %r\n", gEfiCallerBaseName, __FUNCTION__, - Status)); + DEBUG (( + DEBUG_ERROR, + "%a:%a: %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); return Status; } - /** Free the resources used by CapList. @@ -702,14 +768,13 @@ FreeOutCapList: VOID EFIAPI PciCapListUninit ( - IN PCI_CAP_LIST *CapList + IN PCI_CAP_LIST *CapList ) { EmptyAndUninitPciCapCollection (CapList->Capabilities, TRUE); FreePool (CapList); } - /** Locate a capability instance in the parsed capabilities lists. @@ -746,15 +811,15 @@ PciCapListUninit ( RETURN_STATUS EFIAPI PciCapListFindCap ( - IN PCI_CAP_LIST *CapList, - IN PCI_CAP_DOMAIN Domain, - IN UINT16 CapId, - IN UINT16 Instance, - OUT PCI_CAP **Cap OPTIONAL + IN PCI_CAP_LIST *CapList, + IN PCI_CAP_DOMAIN Domain, + IN UINT16 CapId, + IN UINT16 Instance, + OUT PCI_CAP **Cap OPTIONAL ) { - PCI_CAP_KEY Key; - ORDERED_COLLECTION_ENTRY *PciCapEntry; + PCI_CAP_KEY Key; + ORDERED_COLLECTION_ENTRY *PciCapEntry; Key.Domain = Domain; Key.CapId = CapId; @@ -764,13 +829,14 @@ PciCapListFindCap ( if (PciCapEntry == NULL) { return RETURN_NOT_FOUND; } + if (Cap != NULL) { *Cap = OrderedCollectionUserStruct (PciCapEntry); } + return RETURN_SUCCESS; } - /** Locate the first instance of the capability given by (Domain, CapId) such that the instance's Version is greater than or equal to MinVersion. @@ -807,15 +873,15 @@ PciCapListFindCap ( RETURN_STATUS EFIAPI PciCapListFindCapVersion ( - IN PCI_CAP_LIST *CapList, - IN PCI_CAP_DOMAIN Domain, - IN UINT16 CapId, - IN UINT8 MinVersion, - OUT PCI_CAP **Cap OPTIONAL + IN PCI_CAP_LIST *CapList, + IN PCI_CAP_DOMAIN Domain, + IN UINT16 CapId, + IN UINT8 MinVersion, + OUT PCI_CAP **Cap OPTIONAL ) { - PCI_CAP_KEY Key; - ORDERED_COLLECTION_ENTRY *PciCapEntry; + PCI_CAP_KEY Key; + ORDERED_COLLECTION_ENTRY *PciCapEntry; // // Start the version checks at Instance#0 of (Domain, CapId). @@ -826,8 +892,9 @@ PciCapListFindCapVersion ( for (PciCapEntry = OrderedCollectionFind (CapList->Capabilities, &Key); PciCapEntry != NULL; - PciCapEntry = OrderedCollectionNext (PciCapEntry)) { - PCI_CAP *PciCap; + PciCapEntry = OrderedCollectionNext (PciCapEntry)) + { + PCI_CAP *PciCap; PciCap = OrderedCollectionUserStruct (PciCapEntry); // @@ -835,9 +902,10 @@ PciCapListFindCapVersion ( // adjacent to each other, so stop searching if either Domain or CapId // changes. // - if (PciCap->Key.Domain != Domain || PciCap->Key.CapId != CapId) { + if ((PciCap->Key.Domain != Domain) || (PciCap->Key.CapId != CapId)) { break; } + if (PciCap->Version >= MinVersion) { // // Match found. @@ -845,13 +913,14 @@ PciCapListFindCapVersion ( if (Cap != NULL) { *Cap = PciCap; } + return RETURN_SUCCESS; } } + return RETURN_NOT_FOUND; } - /** Get information about a PCI Capability instance. @@ -869,11 +938,11 @@ PciCapListFindCapVersion ( RETURN_STATUS EFIAPI PciCapGetInfo ( - IN PCI_CAP *Cap, - OUT PCI_CAP_INFO *Info + IN PCI_CAP *Cap, + OUT PCI_CAP_INFO *Info ) { - PCI_CAP *InstanceZero; + PCI_CAP *InstanceZero; ASSERT (Info != NULL); @@ -891,7 +960,6 @@ PciCapGetInfo ( return RETURN_SUCCESS; } - /** Read a slice of a capability instance. @@ -931,11 +999,11 @@ PciCapGetInfo ( RETURN_STATUS EFIAPI PciCapRead ( - IN PCI_CAP_DEV *PciDevice, - IN PCI_CAP *Cap, - IN UINT16 SourceOffsetInCap, - OUT VOID *DestinationBuffer, - IN UINT16 Size + IN PCI_CAP_DEV *PciDevice, + IN PCI_CAP *Cap, + IN UINT16 SourceOffsetInCap, + OUT VOID *DestinationBuffer, + IN UINT16 Size ) { // @@ -945,10 +1013,14 @@ PciCapRead ( if (SourceOffsetInCap + Size > Cap->MaxSizeHint) { return RETURN_BAD_BUFFER_SIZE; } - return PciDevice->ReadConfig (PciDevice, Cap->Offset + SourceOffsetInCap, - DestinationBuffer, Size); -} + return PciDevice->ReadConfig ( + PciDevice, + Cap->Offset + SourceOffsetInCap, + DestinationBuffer, + Size + ); +} /** Write a slice of a capability instance. @@ -990,11 +1062,11 @@ PciCapRead ( RETURN_STATUS EFIAPI PciCapWrite ( - IN PCI_CAP_DEV *PciDevice, - IN PCI_CAP *Cap, - IN UINT16 DestinationOffsetInCap, - IN VOID *SourceBuffer, - IN UINT16 Size + IN PCI_CAP_DEV *PciDevice, + IN PCI_CAP *Cap, + IN UINT16 DestinationOffsetInCap, + IN VOID *SourceBuffer, + IN UINT16 Size ) { // @@ -1004,7 +1076,11 @@ PciCapWrite ( if (DestinationOffsetInCap + Size > Cap->MaxSizeHint) { return RETURN_BAD_BUFFER_SIZE; } - return PciDevice->WriteConfig (PciDevice, - Cap->Offset + DestinationOffsetInCap, SourceBuffer, - Size); + + return PciDevice->WriteConfig ( + PciDevice, + Cap->Offset + DestinationOffsetInCap, + SourceBuffer, + Size + ); } diff --git a/OvmfPkg/Library/BasePciCapLib/BasePciCapLib.h b/OvmfPkg/Library/BasePciCapLib/BasePciCapLib.h index e84dab62c5..b836fd593c 100644 --- a/OvmfPkg/Library/BasePciCapLib/BasePciCapLib.h +++ b/OvmfPkg/Library/BasePciCapLib/BasePciCapLib.h @@ -18,9 +18,9 @@ // for insertion and lookup. // typedef struct { - PCI_CAP_DOMAIN Domain; - UINT16 CapId; - UINT16 Instance; + PCI_CAP_DOMAIN Domain; + UINT16 CapId; + UINT16 Instance; } PCI_CAP_KEY; // @@ -29,26 +29,26 @@ typedef struct { // NumInstances needs maintenance in one object only, per (Domain, CapId) pair. // typedef union { - UINT16 NumInstances; - PCI_CAP *InstanceZero; + UINT16 NumInstances; + PCI_CAP *InstanceZero; } PCI_CAP_NUM_INSTANCES; // // Complete the incomplete PCI_CAP structure here. // struct PCI_CAP { - PCI_CAP_KEY Key; - PCI_CAP_NUM_INSTANCES NumInstancesUnion; - UINT16 Offset; - UINT16 MaxSizeHint; - UINT8 Version; + PCI_CAP_KEY Key; + PCI_CAP_NUM_INSTANCES NumInstancesUnion; + UINT16 Offset; + UINT16 MaxSizeHint; + UINT8 Version; }; // // Complete the incomplete PCI_CAP_LIST structure here. // struct PCI_CAP_LIST { - ORDERED_COLLECTION *Capabilities; + ORDERED_COLLECTION *Capabilities; }; #endif // __BASE_PCI_CAP_LIB_H__ diff --git a/OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.c b/OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.c index 81f2a3eb06..8e7ea583fa 100644 --- a/OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.c +++ b/OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.c @@ -14,7 +14,6 @@ #include "BasePciCapPciSegmentLib.h" - /** Read the config space of a given PCI device (both normal and extended). @@ -44,17 +43,17 @@ STATIC RETURN_STATUS EFIAPI SegmentDevReadConfig ( - IN PCI_CAP_DEV *PciDevice, - IN UINT16 SourceOffset, - OUT VOID *DestinationBuffer, - IN UINT16 Size + IN PCI_CAP_DEV *PciDevice, + IN UINT16 SourceOffset, + OUT VOID *DestinationBuffer, + IN UINT16 Size ) { - SEGMENT_DEV *SegmentDev; - UINT16 ConfigSpaceSize; - UINT64 SourceAddress; + SEGMENT_DEV *SegmentDev; + UINT16 ConfigSpaceSize; + UINT64 SourceAddress; - SegmentDev = SEGMENT_DEV_FROM_PCI_CAP_DEV (PciDevice); + SegmentDev = SEGMENT_DEV_FROM_PCI_CAP_DEV (PciDevice); ConfigSpaceSize = (SegmentDev->MaxDomain == PciCapNormal ? PCI_MAX_CONFIG_OFFSET : PCI_EXP_MAX_CONFIG_OFFSET); // @@ -64,14 +63,18 @@ SegmentDevReadConfig ( if (SourceOffset + Size > ConfigSpaceSize) { return RETURN_UNSUPPORTED; } - SourceAddress = PCI_SEGMENT_LIB_ADDRESS (SegmentDev->SegmentNr, - SegmentDev->BusNr, SegmentDev->DeviceNr, - SegmentDev->FunctionNr, SourceOffset); + + SourceAddress = PCI_SEGMENT_LIB_ADDRESS ( + SegmentDev->SegmentNr, + SegmentDev->BusNr, + SegmentDev->DeviceNr, + SegmentDev->FunctionNr, + SourceOffset + ); PciSegmentReadBuffer (SourceAddress, Size, DestinationBuffer); return RETURN_SUCCESS; } - /** Write the config space of a given PCI device (both normal and extended). @@ -101,17 +104,17 @@ STATIC RETURN_STATUS EFIAPI SegmentDevWriteConfig ( - IN PCI_CAP_DEV *PciDevice, - IN UINT16 DestinationOffset, - IN VOID *SourceBuffer, - IN UINT16 Size + IN PCI_CAP_DEV *PciDevice, + IN UINT16 DestinationOffset, + IN VOID *SourceBuffer, + IN UINT16 Size ) { - SEGMENT_DEV *SegmentDev; - UINT16 ConfigSpaceSize; - UINT64 DestinationAddress; + SEGMENT_DEV *SegmentDev; + UINT16 ConfigSpaceSize; + UINT64 DestinationAddress; - SegmentDev = SEGMENT_DEV_FROM_PCI_CAP_DEV (PciDevice); + SegmentDev = SEGMENT_DEV_FROM_PCI_CAP_DEV (PciDevice); ConfigSpaceSize = (SegmentDev->MaxDomain == PciCapNormal ? PCI_MAX_CONFIG_OFFSET : PCI_EXP_MAX_CONFIG_OFFSET); // @@ -121,14 +124,18 @@ SegmentDevWriteConfig ( if (DestinationOffset + Size > ConfigSpaceSize) { return RETURN_UNSUPPORTED; } - DestinationAddress = PCI_SEGMENT_LIB_ADDRESS (SegmentDev->SegmentNr, - SegmentDev->BusNr, SegmentDev->DeviceNr, - SegmentDev->FunctionNr, DestinationOffset); + + DestinationAddress = PCI_SEGMENT_LIB_ADDRESS ( + SegmentDev->SegmentNr, + SegmentDev->BusNr, + SegmentDev->DeviceNr, + SegmentDev->FunctionNr, + DestinationOffset + ); PciSegmentWriteBuffer (DestinationAddress, Size, SourceBuffer); return RETURN_SUCCESS; } - /** Create a PCI_CAP_DEV object from the PCI Segment:Bus:Device.Function quadruplet. The config space accessors are based upon PciSegmentLib. @@ -168,17 +175,17 @@ SegmentDevWriteConfig ( RETURN_STATUS EFIAPI PciCapPciSegmentDeviceInit ( - IN PCI_CAP_DOMAIN MaxDomain, - IN UINT16 Segment, - IN UINT8 Bus, - IN UINT8 Device, - IN UINT8 Function, - OUT PCI_CAP_DEV **PciDevice + IN PCI_CAP_DOMAIN MaxDomain, + IN UINT16 Segment, + IN UINT8 Bus, + IN UINT8 Device, + IN UINT8 Function, + OUT PCI_CAP_DEV **PciDevice ) { - SEGMENT_DEV *SegmentDev; + SEGMENT_DEV *SegmentDev; - if (Device > PCI_MAX_DEVICE || Function > PCI_MAX_FUNC) { + if ((Device > PCI_MAX_DEVICE) || (Function > PCI_MAX_FUNC)) { return RETURN_INVALID_PARAMETER; } @@ -200,7 +207,6 @@ PciCapPciSegmentDeviceInit ( return RETURN_SUCCESS; } - /** Free the resources used by PciDevice. @@ -210,10 +216,10 @@ PciCapPciSegmentDeviceInit ( VOID EFIAPI PciCapPciSegmentDeviceUninit ( - IN PCI_CAP_DEV *PciDevice + IN PCI_CAP_DEV *PciDevice ) { - SEGMENT_DEV *SegmentDev; + SEGMENT_DEV *SegmentDev; SegmentDev = SEGMENT_DEV_FROM_PCI_CAP_DEV (PciDevice); FreePool (SegmentDev); diff --git a/OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.h b/OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.h index a806bf320d..5d587ceca3 100644 --- a/OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.h +++ b/OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.h @@ -14,25 +14,25 @@ #include -#define SEGMENT_DEV_SIG SIGNATURE_64 ('P', 'C', 'P', 'S', 'G', 'M', 'N', 'T') +#define SEGMENT_DEV_SIG SIGNATURE_64 ('P', 'C', 'P', 'S', 'G', 'M', 'N', 'T') typedef struct { // // Signature identifying the derived class. // - UINT64 Signature; + UINT64 Signature; // // Members added by the derived class, specific to the use of PciSegmentLib. // - PCI_CAP_DOMAIN MaxDomain; - UINT16 SegmentNr; - UINT8 BusNr; - UINT8 DeviceNr; - UINT8 FunctionNr; + PCI_CAP_DOMAIN MaxDomain; + UINT16 SegmentNr; + UINT8 BusNr; + UINT8 DeviceNr; + UINT8 FunctionNr; // // Base class. // - PCI_CAP_DEV BaseDevice; + PCI_CAP_DEV BaseDevice; } SEGMENT_DEV; #define SEGMENT_DEV_FROM_PCI_CAP_DEV(PciDevice) \ diff --git a/OvmfPkg/Library/BhyveFwCtlLib/BhyveFwCtlLib.c b/OvmfPkg/Library/BhyveFwCtlLib/BhyveFwCtlLib.c index f1f7b2e0d2..cc3e64f0c4 100644 --- a/OvmfPkg/Library/BhyveFwCtlLib/BhyveFwCtlLib.c +++ b/OvmfPkg/Library/BhyveFwCtlLib/BhyveFwCtlLib.c @@ -18,15 +18,15 @@ #include #include -#define FW_PORT 0x510 -#define FW_IPORT 0x511 +#define FW_PORT 0x510 +#define FW_IPORT 0x511 /* Transport protocol basic operations */ -#define OP_NULL 1 -#define OP_ECHO 2 -#define OP_GET 3 -#define OP_GET_LEN 4 -#define OP_SET 5 +#define OP_NULL 1 +#define OP_ECHO 2 +#define OP_GET 3 +#define OP_GET_LEN 4 +#define OP_SET 5 /* Transport protocol error returns */ #define T_ESUCCESS 0 @@ -34,17 +34,17 @@ #define T_E2BIG 7 #define T_EMSGSIZE 40 -#define ROUNDUP(x, y) ((((x)+((y)-1))/(y))*(y)) +#define ROUNDUP(x, y) ((((x)+((y)-1))/(y))*(y)) -STATIC CONST CHAR8 mBhyveSig[4] = { 'B', 'H', 'Y', 'V' }; +STATIC CONST CHAR8 mBhyveSig[4] = { 'B', 'H', 'Y', 'V' }; -STATIC BOOLEAN mBhyveFwCtlSupported = FALSE; +STATIC BOOLEAN mBhyveFwCtlSupported = FALSE; -STATIC INT32 mBhyveFwCtlTxid = 0xa5; +STATIC INT32 mBhyveFwCtlTxid = 0xa5; /* XXX Maybe a better inbuilt version of this ? */ typedef struct { - VOID *Base; + VOID *Base; UINT32 Len; } BIO_VEC; @@ -59,27 +59,27 @@ STATIC RETURN_STATUS EFIAPI BhyveFwCtl_CvtErr ( - IN UINT32 errno + IN UINT32 errno ) { - RETURN_STATUS Status; + RETURN_STATUS Status; switch (errno) { - case T_ESUCCESS: - Status = RETURN_SUCCESS; - break; - case T_ENOENT: - Status = RETURN_NOT_FOUND; - break; - case T_E2BIG: - Status = RETURN_INVALID_PARAMETER; - break; - case T_EMSGSIZE: - Status = RETURN_BUFFER_TOO_SMALL; - break; - default: - Status = RETURN_PROTOCOL_ERROR; - break; + case T_ESUCCESS: + Status = RETURN_SUCCESS; + break; + case T_ENOENT: + Status = RETURN_NOT_FOUND; + break; + case T_E2BIG: + Status = RETURN_INVALID_PARAMETER; + break; + case T_EMSGSIZE: + Status = RETURN_BUFFER_TOO_SMALL; + break; + default: + Status = RETURN_PROTOCOL_ERROR; + break; } return Status; @@ -89,17 +89,18 @@ STATIC UINT32 EFIAPI BIov_WLen ( - IN BIO_VEC b[] + IN BIO_VEC b[] ) { - UINT32 i; - UINT32 tLen; + UINT32 i; + UINT32 tLen; tLen = 0; if (b != NULL) { - for (i = 0; b[i].Base != NULL; i++) - tLen += ROUNDUP (b[i].Len, sizeof(UINT32)); + for (i = 0; b[i].Base != NULL; i++) { + tLen += ROUNDUP (b[i].Len, sizeof (UINT32)); + } } return tLen; @@ -113,21 +114,22 @@ STATIC UINT32 BIov_Send_Rem ( IN UINT32 *Data, - IN UINT32 Len + IN UINT32 Len ) { union { - UINT8 c[4]; + UINT8 c[4]; UINT32 w; } u; - UINT8 *cdata; - UINT32 i; + UINT8 *cdata; + UINT32 i; cdata = (UINT8 *)Data; - u.w = 0; + u.w = 0; - for (i = 0; i < Len; i++) + for (i = 0; i < Len; i++) { u.c[i] = *cdata++; + } return u.w; } @@ -140,16 +142,16 @@ STATIC VOID BIov_Send ( IN char *Data, - IN UINT32 Len + IN UINT32 Len ) { - UINT32 *LData; + UINT32 *LData; LData = (UINT32 *)Data; - while (Len > sizeof(UINT32)) { + while (Len > sizeof (UINT32)) { IoWrite32 (FW_PORT, *LData++); - Len -= sizeof(UINT32); + Len -= sizeof (UINT32); } if (Len > 0) { @@ -163,10 +165,10 @@ BIov_Send ( STATIC VOID BIov_SendAll ( - IN BIO_VEC b[] - ) + IN BIO_VEC b[] + ) { - INT32 i; + INT32 i; if (b != NULL) { for (i = 0; b[i].Base; i++) { @@ -181,22 +183,23 @@ BIov_SendAll ( STATIC VOID EFIAPI -BhyveFwCtl_MsgSend( - IN UINT32 OpCode, +BhyveFwCtl_MsgSend ( + IN UINT32 OpCode, IN BIO_VEC Data[] ) { BIO_VEC hIov[4]; - UINT32 Hdr[3]; - UINT32 i; + UINT32 Hdr[3]; + UINT32 i; /* Set up header as an iovec */ for (i = 0; i < 3; i++) { hIov[i].Base = &Hdr[i]; - hIov[i].Len = sizeof(Hdr[0]); + hIov[i].Len = sizeof (Hdr[0]); } + hIov[i].Base = NULL; - hIov[i].Len = 0; + hIov[i].Len = 0; /* Initialize header */ Hdr[0] = BIov_WLen (hIov) + BIov_WLen (Data); @@ -214,13 +217,13 @@ BhyveFwCtl_MsgSend( STATIC RETURN_STATUS EFIAPI -BhyveFwCtl_MsgRecv( - OUT MSG_RX_HDR *Rhdr, - OUT BIO_VEC Data[] +BhyveFwCtl_MsgRecv ( + OUT MSG_RX_HDR *Rhdr, + OUT BIO_VEC Data[] ) { RETURN_STATUS Status; - UINT32 *Dp; + UINT32 *Dp; UINT32 Rd; UINT32 remLen; INT32 oLen; @@ -228,7 +231,6 @@ BhyveFwCtl_MsgRecv( Rd = IoRead32 (FW_PORT); if (Rd < sizeof (MSG_RX_HDR)) { - ; } /* Read in header and setup initial error */ @@ -241,7 +243,7 @@ BhyveFwCtl_MsgRecv( Status = BhyveFwCtl_CvtErr (Rhdr->Err); remLen = Rd - sizeof (MSG_RX_HDR); - xLen = 0; + xLen = 0; /* * A few cases to handle: @@ -250,47 +252,48 @@ BhyveFwCtl_MsgRecv( * - the response is zero-length */ if (Data != NULL) { - Dp = (UINT32 *)Data[0].Base; + Dp = (UINT32 *)Data[0].Base; oLen = remLen; if (remLen > Data[0].Len) { Status = RETURN_BUFFER_TOO_SMALL; - xLen = remLen - Data[0].Len; - oLen = remLen = Data[0].Len; + xLen = remLen - Data[0].Len; + oLen = remLen = Data[0].Len; } + while (remLen > 0) { - *Dp++ = IoRead32 (FW_PORT); + *Dp++ = IoRead32 (FW_PORT); remLen -= sizeof (UINT32); } + Data[0].Len = oLen; } else { /* No user data, but data returned - drop */ if (remLen > 0) { Status = RETURN_BUFFER_TOO_SMALL; - xLen = remLen; + xLen = remLen; } } /* Drop additional data */ while (xLen > 0) { - (void) IoRead32 (FW_PORT); + (void)IoRead32 (FW_PORT); xLen -= sizeof (UINT32); } return Status; } - STATIC RETURN_STATUS EFIAPI -BhyveFwCtl_Msg( - IN UINT32 OpCode, - IN BIO_VEC Sdata[], - OUT BIO_VEC Rdata[] - ) +BhyveFwCtl_Msg ( + IN UINT32 OpCode, + IN BIO_VEC Sdata[], + OUT BIO_VEC Rdata[] + ) { - MSG_RX_HDR Rh; - RETURN_STATUS Status; + MSG_RX_HDR Rh; + RETURN_STATUS Status; Status = RETURN_SUCCESS; @@ -306,11 +309,11 @@ STATIC RETURN_STATUS EFIAPI BhyveFwCtlGetLen ( - IN CONST CHAR8 *Name, - IN OUT UINT32 *Size + IN CONST CHAR8 *Name, + IN OUT UINT32 *Size ) { - BIO_VEC Req[2], Resp[2]; + BIO_VEC Req[2], Resp[2]; RETURN_STATUS Status; Req[0].Base = (VOID *)Name; @@ -326,7 +329,7 @@ BhyveFwCtlGetLen ( return Status; } -#define FMAXSZ 1024 +#define FMAXSZ 1024 STATIC struct { UINT64 fSize; UINT32 fData[FMAXSZ]; @@ -336,18 +339,19 @@ STATIC RETURN_STATUS EFIAPI BhyveFwCtlGetVal ( - IN CONST CHAR8 *Name, - OUT VOID *Item, - IN OUT UINT32 *Size + IN CONST CHAR8 *Name, + OUT VOID *Item, + IN OUT UINT32 *Size ) { - BIO_VEC Req[2]; - BIO_VEC Resp[2]; + BIO_VEC Req[2]; + BIO_VEC Resp[2]; RETURN_STATUS Status; /* Make sure temp buffer is larger than passed-in size */ - if (*Size > sizeof (FwGetvalBuf.fData)) - return RETURN_INVALID_PARAMETER; + if (*Size > sizeof (FwGetvalBuf.fData)) { + return RETURN_INVALID_PARAMETER; + } Req[0].Base = (VOID *)Name; Req[0].Len = (UINT32)AsciiStrLen (Name) + 1; @@ -378,26 +382,26 @@ BhyveFwCtlGetVal ( RETURN_STATUS EFIAPI BhyveFwCtlGet ( - IN CONST CHAR8 *Name, - OUT VOID *Item, - IN OUT UINTN *Size + IN CONST CHAR8 *Name, + OUT VOID *Item, + IN OUT UINTN *Size ) { - RETURN_STATUS Status; + RETURN_STATUS Status; - if (mBhyveFwCtlSupported == FALSE) + if (mBhyveFwCtlSupported == FALSE) { return RETURN_UNSUPPORTED; + } if (Item == NULL) { - Status = BhyveFwCtlGetLen (Name, (UINT32*)Size); + Status = BhyveFwCtlGetLen (Name, (UINT32 *)Size); } else { - Status = BhyveFwCtlGetVal (Name, Item, (UINT32*)Size); + Status = BhyveFwCtlGetVal (Name, Item, (UINT32 *)Size); } return Status; } - /** Library initialization. Probe the host to see if the f/w ctl interface is supported. diff --git a/OvmfPkg/Library/BlobVerifierLibNull/BlobVerifierNull.c b/OvmfPkg/Library/BlobVerifierLibNull/BlobVerifierNull.c index 975d4dd52f..e817c3cc95 100644 --- a/OvmfPkg/Library/BlobVerifierLibNull/BlobVerifierNull.c +++ b/OvmfPkg/Library/BlobVerifierLibNull/BlobVerifierNull.c @@ -24,9 +24,9 @@ EFI_STATUS EFIAPI VerifyBlob ( - IN CONST CHAR16 *BlobName, - IN CONST VOID *Buf, - IN UINT32 BufSize + IN CONST CHAR16 *BlobName, + IN CONST VOID *Buf, + IN UINT32 BufSize ) { return EFI_SUCCESS; diff --git a/OvmfPkg/Library/DxePciLibI440FxQ35/PciLib.c b/OvmfPkg/Library/DxePciLibI440FxQ35/PciLib.c index 1839f11f33..ab620688f1 100644 --- a/OvmfPkg/Library/DxePciLibI440FxQ35/PciLib.c +++ b/OvmfPkg/Library/DxePciLibI440FxQ35/PciLib.c @@ -15,7 +15,6 @@ **/ - #include #include @@ -25,7 +24,7 @@ #include #include -STATIC BOOLEAN mRunningOnQ35; +STATIC BOOLEAN mRunningOnQ35; RETURN_STATUS EFIAPI @@ -88,7 +87,7 @@ PciRegisterForRuntimeAccess ( UINT8 EFIAPI PciRead8 ( - IN UINTN Address + IN UINTN Address ) { return mRunningOnQ35 ? @@ -115,8 +114,8 @@ PciRead8 ( UINT8 EFIAPI PciWrite8 ( - IN UINTN Address, - IN UINT8 Value + IN UINTN Address, + IN UINT8 Value ) { return mRunningOnQ35 ? @@ -147,8 +146,8 @@ PciWrite8 ( UINT8 EFIAPI PciOr8 ( - IN UINTN Address, - IN UINT8 OrData + IN UINTN Address, + IN UINT8 OrData ) { return mRunningOnQ35 ? @@ -179,8 +178,8 @@ PciOr8 ( UINT8 EFIAPI PciAnd8 ( - IN UINTN Address, - IN UINT8 AndData + IN UINTN Address, + IN UINT8 AndData ) { return mRunningOnQ35 ? @@ -213,9 +212,9 @@ PciAnd8 ( UINT8 EFIAPI PciAndThenOr8 ( - IN UINTN Address, - IN UINT8 AndData, - IN UINT8 OrData + IN UINTN Address, + IN UINT8 AndData, + IN UINT8 OrData ) { return mRunningOnQ35 ? @@ -247,9 +246,9 @@ PciAndThenOr8 ( UINT8 EFIAPI PciBitFieldRead8 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit ) { return mRunningOnQ35 ? @@ -284,10 +283,10 @@ PciBitFieldRead8 ( UINT8 EFIAPI PciBitFieldWrite8 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit, - IN UINT8 Value + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit, + IN UINT8 Value ) { return mRunningOnQ35 ? @@ -325,10 +324,10 @@ PciBitFieldWrite8 ( UINT8 EFIAPI PciBitFieldOr8 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit, - IN UINT8 OrData + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit, + IN UINT8 OrData ) { return mRunningOnQ35 ? @@ -366,10 +365,10 @@ PciBitFieldOr8 ( UINT8 EFIAPI PciBitFieldAnd8 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit, - IN UINT8 AndData + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit, + IN UINT8 AndData ) { return mRunningOnQ35 ? @@ -411,11 +410,11 @@ PciBitFieldAnd8 ( UINT8 EFIAPI PciBitFieldAndThenOr8 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit, - IN UINT8 AndData, - IN UINT8 OrData + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit, + IN UINT8 AndData, + IN UINT8 OrData ) { return mRunningOnQ35 ? @@ -442,7 +441,7 @@ PciBitFieldAndThenOr8 ( UINT16 EFIAPI PciRead16 ( - IN UINTN Address + IN UINTN Address ) { return mRunningOnQ35 ? @@ -470,8 +469,8 @@ PciRead16 ( UINT16 EFIAPI PciWrite16 ( - IN UINTN Address, - IN UINT16 Value + IN UINTN Address, + IN UINT16 Value ) { return mRunningOnQ35 ? @@ -503,8 +502,8 @@ PciWrite16 ( UINT16 EFIAPI PciOr16 ( - IN UINTN Address, - IN UINT16 OrData + IN UINTN Address, + IN UINT16 OrData ) { return mRunningOnQ35 ? @@ -536,8 +535,8 @@ PciOr16 ( UINT16 EFIAPI PciAnd16 ( - IN UINTN Address, - IN UINT16 AndData + IN UINTN Address, + IN UINT16 AndData ) { return mRunningOnQ35 ? @@ -571,9 +570,9 @@ PciAnd16 ( UINT16 EFIAPI PciAndThenOr16 ( - IN UINTN Address, - IN UINT16 AndData, - IN UINT16 OrData + IN UINTN Address, + IN UINT16 AndData, + IN UINT16 OrData ) { return mRunningOnQ35 ? @@ -606,9 +605,9 @@ PciAndThenOr16 ( UINT16 EFIAPI PciBitFieldRead16 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit ) { return mRunningOnQ35 ? @@ -644,10 +643,10 @@ PciBitFieldRead16 ( UINT16 EFIAPI PciBitFieldWrite16 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit, - IN UINT16 Value + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit, + IN UINT16 Value ) { return mRunningOnQ35 ? @@ -686,10 +685,10 @@ PciBitFieldWrite16 ( UINT16 EFIAPI PciBitFieldOr16 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit, - IN UINT16 OrData + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit, + IN UINT16 OrData ) { return mRunningOnQ35 ? @@ -728,10 +727,10 @@ PciBitFieldOr16 ( UINT16 EFIAPI PciBitFieldAnd16 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit, - IN UINT16 AndData + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit, + IN UINT16 AndData ) { return mRunningOnQ35 ? @@ -774,11 +773,11 @@ PciBitFieldAnd16 ( UINT16 EFIAPI PciBitFieldAndThenOr16 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit, - IN UINT16 AndData, - IN UINT16 OrData + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit, + IN UINT16 AndData, + IN UINT16 OrData ) { return mRunningOnQ35 ? @@ -805,7 +804,7 @@ PciBitFieldAndThenOr16 ( UINT32 EFIAPI PciRead32 ( - IN UINTN Address + IN UINTN Address ) { return mRunningOnQ35 ? @@ -833,8 +832,8 @@ PciRead32 ( UINT32 EFIAPI PciWrite32 ( - IN UINTN Address, - IN UINT32 Value + IN UINTN Address, + IN UINT32 Value ) { return mRunningOnQ35 ? @@ -866,8 +865,8 @@ PciWrite32 ( UINT32 EFIAPI PciOr32 ( - IN UINTN Address, - IN UINT32 OrData + IN UINTN Address, + IN UINT32 OrData ) { return mRunningOnQ35 ? @@ -899,8 +898,8 @@ PciOr32 ( UINT32 EFIAPI PciAnd32 ( - IN UINTN Address, - IN UINT32 AndData + IN UINTN Address, + IN UINT32 AndData ) { return mRunningOnQ35 ? @@ -934,9 +933,9 @@ PciAnd32 ( UINT32 EFIAPI PciAndThenOr32 ( - IN UINTN Address, - IN UINT32 AndData, - IN UINT32 OrData + IN UINTN Address, + IN UINT32 AndData, + IN UINT32 OrData ) { return mRunningOnQ35 ? @@ -969,9 +968,9 @@ PciAndThenOr32 ( UINT32 EFIAPI PciBitFieldRead32 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit ) { return mRunningOnQ35 ? @@ -1007,10 +1006,10 @@ PciBitFieldRead32 ( UINT32 EFIAPI PciBitFieldWrite32 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit, - IN UINT32 Value + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit, + IN UINT32 Value ) { return mRunningOnQ35 ? @@ -1049,10 +1048,10 @@ PciBitFieldWrite32 ( UINT32 EFIAPI PciBitFieldOr32 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit, - IN UINT32 OrData + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit, + IN UINT32 OrData ) { return mRunningOnQ35 ? @@ -1091,10 +1090,10 @@ PciBitFieldOr32 ( UINT32 EFIAPI PciBitFieldAnd32 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit, - IN UINT32 AndData + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit, + IN UINT32 AndData ) { return mRunningOnQ35 ? @@ -1137,11 +1136,11 @@ PciBitFieldAnd32 ( UINT32 EFIAPI PciBitFieldAndThenOr32 ( - IN UINTN Address, - IN UINTN StartBit, - IN UINTN EndBit, - IN UINT32 AndData, - IN UINT32 OrData + IN UINTN Address, + IN UINTN StartBit, + IN UINTN EndBit, + IN UINT32 AndData, + IN UINT32 OrData ) { return mRunningOnQ35 ? @@ -1175,9 +1174,9 @@ PciBitFieldAndThenOr32 ( UINTN EFIAPI PciReadBuffer ( - IN UINTN StartAddress, - IN UINTN Size, - OUT VOID *Buffer + IN UINTN StartAddress, + IN UINTN Size, + OUT VOID *Buffer ) { return mRunningOnQ35 ? @@ -1212,9 +1211,9 @@ PciReadBuffer ( UINTN EFIAPI PciWriteBuffer ( - IN UINTN StartAddress, - IN UINTN Size, - IN VOID *Buffer + IN UINTN StartAddress, + IN UINTN Size, + IN VOID *Buffer ) { return mRunningOnQ35 ? diff --git a/OvmfPkg/Library/EmuVariableFvbLib/EmuVariableFvbLib.c b/OvmfPkg/Library/EmuVariableFvbLib/EmuVariableFvbLib.c index 9c890013e3..9840676ff8 100644 --- a/OvmfPkg/Library/EmuVariableFvbLib/EmuVariableFvbLib.c +++ b/OvmfPkg/Library/EmuVariableFvbLib/EmuVariableFvbLib.c @@ -13,7 +13,6 @@ #include #include - /** This function will be called following a call to the EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL Read function. @@ -30,16 +29,15 @@ VOID EFIAPI PlatformFvbDataRead ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, - IN EFI_LBA Lba, - IN UINTN Offset, - IN UINTN NumBytes, - IN UINT8 *Buffer + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Offset, + IN UINTN NumBytes, + IN UINT8 *Buffer ) { } - /** This function will be called following a call to the EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL Write function. @@ -54,26 +52,26 @@ PlatformFvbDataRead ( VOID EFIAPI PlatformFvbDataWritten ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, - IN EFI_LBA Lba, - IN UINTN Offset, - IN UINTN NumBytes, - IN UINT8 *Buffer + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Offset, + IN UINTN NumBytes, + IN UINT8 *Buffer ) { - STATIC EFI_EVENT EventToSignal = NULL; + STATIC EFI_EVENT EventToSignal = NULL; if (!EfiAtRuntime ()) { if (EventToSignal == NULL) { - EventToSignal = (EFI_EVENT)(UINTN) PcdGet64 (PcdEmuVariableEvent); + EventToSignal = (EFI_EVENT)(UINTN)PcdGet64 (PcdEmuVariableEvent); } + if (EventToSignal != NULL) { gBS->SignalEvent (EventToSignal); } } } - /** This function will be called following a call to the EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL Erase function. @@ -88,10 +86,8 @@ PlatformFvbDataWritten ( VOID EFIAPI PlatformFvbBlocksErased ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, - IN VA_LIST List + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + IN VA_LIST List ) { } - - diff --git a/OvmfPkg/Library/GenericQemuLoadImageLib/GenericQemuLoadImageLib.c b/OvmfPkg/Library/GenericQemuLoadImageLib/GenericQemuLoadImageLib.c index 66e029397b..c751b10679 100644 --- a/OvmfPkg/Library/GenericQemuLoadImageLib/GenericQemuLoadImageLib.c +++ b/OvmfPkg/Library/GenericQemuLoadImageLib/GenericQemuLoadImageLib.c @@ -22,49 +22,49 @@ #pragma pack (1) typedef struct { - EFI_DEVICE_PATH_PROTOCOL FilePathHeader; - CHAR16 FilePath[ARRAY_SIZE (L"kernel")]; + EFI_DEVICE_PATH_PROTOCOL FilePathHeader; + CHAR16 FilePath[ARRAY_SIZE (L"kernel")]; } KERNEL_FILE_DEVPATH; typedef struct { - VENDOR_DEVICE_PATH VenMediaNode; - KERNEL_FILE_DEVPATH FileNode; - EFI_DEVICE_PATH_PROTOCOL EndNode; + VENDOR_DEVICE_PATH VenMediaNode; + KERNEL_FILE_DEVPATH FileNode; + EFI_DEVICE_PATH_PROTOCOL EndNode; } KERNEL_VENMEDIA_FILE_DEVPATH; typedef struct { - VENDOR_DEVICE_PATH VenMediaNode; - EFI_DEVICE_PATH_PROTOCOL EndNode; + VENDOR_DEVICE_PATH VenMediaNode; + EFI_DEVICE_PATH_PROTOCOL EndNode; } SINGLE_VENMEDIA_NODE_DEVPATH; #pragma pack () -STATIC CONST KERNEL_VENMEDIA_FILE_DEVPATH mKernelDevicePath = { +STATIC CONST KERNEL_VENMEDIA_FILE_DEVPATH mKernelDevicePath = { { { MEDIA_DEVICE_PATH, MEDIA_VENDOR_DP, - { sizeof (VENDOR_DEVICE_PATH) } + { sizeof (VENDOR_DEVICE_PATH) } }, QEMU_KERNEL_LOADER_FS_MEDIA_GUID - }, { + }, { { MEDIA_DEVICE_PATH, MEDIA_FILEPATH_DP, - { sizeof (KERNEL_FILE_DEVPATH) } + { sizeof (KERNEL_FILE_DEVPATH) } }, L"kernel", - }, { + }, { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { sizeof (EFI_DEVICE_PATH_PROTOCOL) } } }; -STATIC CONST SINGLE_VENMEDIA_NODE_DEVPATH mQemuKernelLoaderFsDevicePath = { +STATIC CONST SINGLE_VENMEDIA_NODE_DEVPATH mQemuKernelLoaderFsDevicePath = { { { MEDIA_DEVICE_PATH, MEDIA_VENDOR_DP, - { sizeof (VENDOR_DEVICE_PATH) } + { sizeof (VENDOR_DEVICE_PATH) } }, QEMU_KERNEL_LOADER_FS_MEDIA_GUID - }, { + }, { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { sizeof (EFI_DEVICE_PATH_PROTOCOL) } } @@ -73,28 +73,31 @@ STATIC CONST SINGLE_VENMEDIA_NODE_DEVPATH mQemuKernelLoaderFsDevicePath = { STATIC EFI_STATUS GetQemuKernelLoaderBlobSize ( - IN EFI_FILE_HANDLE Root, - IN CHAR16 *FileName, - OUT UINTN *Size + IN EFI_FILE_HANDLE Root, + IN CHAR16 *FileName, + OUT UINTN *Size ) { - EFI_STATUS Status; - EFI_FILE_HANDLE FileHandle; - UINT64 FileSize; + EFI_STATUS Status; + EFI_FILE_HANDLE FileHandle; + UINT64 FileSize; Status = Root->Open (Root, &FileHandle, FileName, EFI_FILE_MODE_READ, 0); if (EFI_ERROR (Status)) { return Status; } + Status = FileHandleGetSize (FileHandle, &FileSize); if (EFI_ERROR (Status)) { goto CloseFile; } + if (FileSize > MAX_UINTN) { Status = EFI_UNSUPPORTED; goto CloseFile; } - *Size = (UINTN)FileSize; + + *Size = (UINTN)FileSize; Status = EFI_SUCCESS; CloseFile: FileHandle->Close (FileHandle); @@ -104,29 +107,32 @@ CloseFile: STATIC EFI_STATUS ReadWholeQemuKernelLoaderBlob ( - IN EFI_FILE_HANDLE Root, - IN CHAR16 *FileName, - IN UINTN Size, - OUT VOID *Buffer + IN EFI_FILE_HANDLE Root, + IN CHAR16 *FileName, + IN UINTN Size, + OUT VOID *Buffer ) { - EFI_STATUS Status; - EFI_FILE_HANDLE FileHandle; - UINTN ReadSize; + EFI_STATUS Status; + EFI_FILE_HANDLE FileHandle; + UINTN ReadSize; Status = Root->Open (Root, &FileHandle, FileName, EFI_FILE_MODE_READ, 0); if (EFI_ERROR (Status)) { return Status; } + ReadSize = Size; - Status = FileHandle->Read (FileHandle, &ReadSize, Buffer); + Status = FileHandle->Read (FileHandle, &ReadSize, Buffer); if (EFI_ERROR (Status)) { goto CloseFile; } + if (ReadSize != Size) { Status = EFI_PROTOCOL_ERROR; goto CloseFile; } + Status = EFI_SUCCESS; CloseFile: FileHandle->Close (FileHandle); @@ -155,19 +161,19 @@ CloseFile: EFI_STATUS EFIAPI QemuLoadKernelImage ( - OUT EFI_HANDLE *ImageHandle + OUT EFI_HANDLE *ImageHandle ) { - EFI_STATUS Status; - EFI_HANDLE KernelImageHandle; - EFI_LOADED_IMAGE_PROTOCOL *KernelLoadedImage; - EFI_DEVICE_PATH_PROTOCOL *DevicePathNode; - EFI_HANDLE FsVolumeHandle; - EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FsProtocol; - EFI_FILE_HANDLE Root; - UINTN CommandLineSize; - CHAR8 *CommandLine; - UINTN InitrdSize; + EFI_STATUS Status; + EFI_HANDLE KernelImageHandle; + EFI_LOADED_IMAGE_PROTOCOL *KernelLoadedImage; + EFI_DEVICE_PATH_PROTOCOL *DevicePathNode; + EFI_HANDLE FsVolumeHandle; + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FsProtocol; + EFI_FILE_HANDLE Root; + UINTN CommandLineSize; + CHAR8 *CommandLine; + UINTN InitrdSize; // // Load the image. This should call back into the QEMU EFI loader file system. @@ -181,20 +187,24 @@ QemuLoadKernelImage ( &KernelImageHandle ); switch (Status) { - case EFI_SUCCESS: - break; - - case EFI_SECURITY_VIOLATION: - // - // In this case, the image was loaded but failed to authenticate. - // - Status = EFI_ACCESS_DENIED; - goto UnloadImage; - - default: - DEBUG ((Status == EFI_NOT_FOUND ? DEBUG_INFO : DEBUG_ERROR, - "%a: LoadImage(): %r\n", __FUNCTION__, Status)); - return Status; + case EFI_SUCCESS: + break; + + case EFI_SECURITY_VIOLATION: + // + // In this case, the image was loaded but failed to authenticate. + // + Status = EFI_ACCESS_DENIED; + goto UnloadImage; + + default: + DEBUG (( + Status == EFI_NOT_FOUND ? DEBUG_INFO : DEBUG_ERROR, + "%a: LoadImage(): %r\n", + __FUNCTION__, + Status + )); + return Status; } // @@ -215,11 +225,11 @@ QemuLoadKernelImage ( // used to query the "initrd" and to read the "cmdline" synthetic files. // DevicePathNode = (EFI_DEVICE_PATH_PROTOCOL *)&mQemuKernelLoaderFsDevicePath; - Status = gBS->LocateDevicePath ( - &gEfiSimpleFileSystemProtocolGuid, - &DevicePathNode, - &FsVolumeHandle - ); + Status = gBS->LocateDevicePath ( + &gEfiSimpleFileSystemProtocolGuid, + &DevicePathNode, + &FsVolumeHandle + ); if (EFI_ERROR (Status)) { goto UnloadImage; } @@ -252,8 +262,12 @@ QemuLoadKernelImage ( goto CloseRoot; } - Status = ReadWholeQemuKernelLoaderBlob (Root, L"cmdline", CommandLineSize, - CommandLine); + Status = ReadWholeQemuKernelLoaderBlob ( + Root, + L"cmdline", + CommandLineSize, + CommandLine + ); if (EFI_ERROR (Status)) { goto FreeCommandLine; } @@ -262,8 +276,11 @@ QemuLoadKernelImage ( // Verify NUL-termination of the command line. // if (CommandLine[CommandLineSize - 1] != '\0') { - DEBUG ((DEBUG_ERROR, "%a: kernel command line is not NUL-terminated\n", - __FUNCTION__)); + DEBUG (( + DEBUG_ERROR, + "%a: kernel command line is not NUL-terminated\n", + __FUNCTION__ + )); Status = EFI_PROTOCOL_ERROR; goto FreeCommandLine; } @@ -295,10 +312,11 @@ QemuLoadKernelImage ( KernelLoadedImage->LoadOptionsSize += 2; KernelLoadedImage->LoadOptions = AllocatePool ( - KernelLoadedImage->LoadOptionsSize); + KernelLoadedImage->LoadOptionsSize + ); if (KernelLoadedImage->LoadOptions == NULL) { KernelLoadedImage->LoadOptionsSize = 0; - Status = EFI_OUT_OF_RESOURCES; + Status = EFI_OUT_OF_RESOURCES; goto FreeCommandLine; } @@ -309,17 +327,22 @@ QemuLoadKernelImage ( (CommandLineSize == 0) ? "" : CommandLine, (InitrdSize == 0) ? "" : " initrd=initrd" ); - DEBUG ((DEBUG_INFO, "%a: command line: \"%s\"\n", __FUNCTION__, - (CHAR16 *)KernelLoadedImage->LoadOptions)); + DEBUG (( + DEBUG_INFO, + "%a: command line: \"%s\"\n", + __FUNCTION__, + (CHAR16 *)KernelLoadedImage->LoadOptions + )); } *ImageHandle = KernelImageHandle; - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; FreeCommandLine: if (CommandLineSize > 0) { FreePool (CommandLine); } + CloseRoot: Root->Close (Root); UnloadImage: @@ -348,7 +371,7 @@ UnloadImage: EFI_STATUS EFIAPI QemuStartKernelImage ( - IN OUT EFI_HANDLE *ImageHandle + IN OUT EFI_HANDLE *ImageHandle ) { return gBS->StartImage ( @@ -374,11 +397,11 @@ QemuStartKernelImage ( EFI_STATUS EFIAPI QemuUnloadKernelImage ( - IN EFI_HANDLE ImageHandle + IN EFI_HANDLE ImageHandle ) { - EFI_LOADED_IMAGE_PROTOCOL *KernelLoadedImage; - EFI_STATUS Status; + EFI_LOADED_IMAGE_PROTOCOL *KernelLoadedImage; + EFI_STATUS Status; Status = gBS->OpenProtocol ( ImageHandle, @@ -396,6 +419,7 @@ QemuUnloadKernelImage ( FreePool (KernelLoadedImage->LoadOptions); KernelLoadedImage->LoadOptions = NULL; } + KernelLoadedImage->LoadOptionsSize = 0; return gBS->UnloadImage (ImageHandle); diff --git a/OvmfPkg/Library/LoadLinuxLib/Linux.c b/OvmfPkg/Library/LoadLinuxLib/Linux.c index c5022f6636..ce3d760380 100644 --- a/OvmfPkg/Library/LoadLinuxLib/Linux.c +++ b/OvmfPkg/Library/LoadLinuxLib/Linux.c @@ -8,7 +8,6 @@ #include "LoadLinuxLib.h" - /** A simple check of the kernel setup image @@ -26,21 +25,20 @@ STATIC EFI_STATUS EFIAPI BasicKernelSetupCheck ( - IN VOID *KernelSetup + IN VOID *KernelSetup ) { - return LoadLinuxCheckKernelSetup(KernelSetup, sizeof (struct boot_params)); + return LoadLinuxCheckKernelSetup (KernelSetup, sizeof (struct boot_params)); } - EFI_STATUS EFIAPI LoadLinuxCheckKernelSetup ( - IN VOID *KernelSetup, - IN UINTN KernelSetupSize + IN VOID *KernelSetup, + IN UINTN KernelSetupSize ) { - struct boot_params *Bp; + struct boot_params *Bp; if (KernelSetup == NULL) { return EFI_INVALID_PARAMETER; @@ -50,34 +48,34 @@ LoadLinuxCheckKernelSetup ( return EFI_UNSUPPORTED; } - Bp = (struct boot_params*) KernelSetup; + Bp = (struct boot_params *)KernelSetup; if ((Bp->hdr.signature != 0xAA55) || // Check boot sector signature (Bp->hdr.header != SETUP_HDR) || (Bp->hdr.version < 0x205) || // We only support relocatable kernels (!Bp->hdr.relocatable_kernel) - ) { + ) + { return EFI_UNSUPPORTED; } else { return EFI_SUCCESS; } } - UINTN EFIAPI LoadLinuxGetKernelSize ( - IN VOID *KernelSetup, - IN UINTN KernelSize + IN VOID *KernelSetup, + IN UINTN KernelSize ) { - struct boot_params *Bp; + struct boot_params *Bp; if (EFI_ERROR (BasicKernelSetupCheck (KernelSetup))) { return 0; } - Bp = (struct boot_params*) KernelSetup; + Bp = (struct boot_params *)KernelSetup; if (Bp->hdr.version > 0x20a) { return Bp->hdr.init_size; @@ -89,25 +87,24 @@ LoadLinuxGetKernelSize ( } } - -VOID* +VOID * EFIAPI LoadLinuxAllocateKernelSetupPages ( - IN UINTN Pages + IN UINTN Pages ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS Address; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS Address; Address = BASE_1GB; - Status = gBS->AllocatePages ( - AllocateMaxAddress, - EfiLoaderData, - Pages, - &Address - ); + Status = gBS->AllocatePages ( + AllocateMaxAddress, + EfiLoaderData, + Pages, + &Address + ); if (!EFI_ERROR (Status)) { - return (VOID*)(UINTN) Address; + return (VOID *)(UINTN)Address; } else { return NULL; } @@ -116,19 +113,19 @@ LoadLinuxAllocateKernelSetupPages ( EFI_STATUS EFIAPI LoadLinuxInitializeKernelSetup ( - IN VOID *KernelSetup + IN VOID *KernelSetup ) { - EFI_STATUS Status; - UINTN SetupEnd; - struct boot_params *Bp; + EFI_STATUS Status; + UINTN SetupEnd; + struct boot_params *Bp; Status = BasicKernelSetupCheck (KernelSetup); if (EFI_ERROR (Status)) { return Status; } - Bp = (struct boot_params*) KernelSetup; + Bp = (struct boot_params *)KernelSetup; SetupEnd = 0x202 + (Bp->hdr.jump & 0xff); @@ -137,29 +134,32 @@ LoadLinuxInitializeKernelSetup ( // ZeroMem (KernelSetup, 0x1f1); ZeroMem (((UINT8 *)KernelSetup) + SetupEnd, 4096 - SetupEnd); - DEBUG ((DEBUG_INFO, "Cleared kernel setup 0-0x1f1, 0x%Lx-0x1000\n", - (UINT64)SetupEnd)); + DEBUG (( + DEBUG_INFO, + "Cleared kernel setup 0-0x1f1, 0x%Lx-0x1000\n", + (UINT64)SetupEnd + )); return EFI_SUCCESS; } -VOID* +VOID * EFIAPI LoadLinuxAllocateKernelPages ( - IN VOID *KernelSetup, - IN UINTN Pages + IN VOID *KernelSetup, + IN UINTN Pages ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS KernelAddress; - UINT32 Loop; - struct boot_params *Bp; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS KernelAddress; + UINT32 Loop; + struct boot_params *Bp; if (EFI_ERROR (BasicKernelSetupCheck (KernelSetup))) { return NULL; } - Bp = (struct boot_params*) KernelSetup; + Bp = (struct boot_params *)KernelSetup; for (Loop = 1; Loop < 512; Loop++) { KernelAddress = MultU64x32 ( @@ -173,113 +173,110 @@ LoadLinuxAllocateKernelPages ( &KernelAddress ); if (!EFI_ERROR (Status)) { - return (VOID*)(UINTN) KernelAddress; + return (VOID *)(UINTN)KernelAddress; } } return NULL; } - -VOID* +VOID * EFIAPI LoadLinuxAllocateCommandLinePages ( - IN UINTN Pages + IN UINTN Pages ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS Address; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS Address; Address = 0xa0000; - Status = gBS->AllocatePages ( - AllocateMaxAddress, - EfiLoaderData, - Pages, - &Address - ); + Status = gBS->AllocatePages ( + AllocateMaxAddress, + EfiLoaderData, + Pages, + &Address + ); if (!EFI_ERROR (Status)) { - return (VOID*)(UINTN) Address; + return (VOID *)(UINTN)Address; } else { return NULL; } } - -VOID* +VOID * EFIAPI LoadLinuxAllocateInitrdPages ( - IN VOID *KernelSetup, - IN UINTN Pages + IN VOID *KernelSetup, + IN UINTN Pages ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS Address; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS Address; - struct boot_params *Bp; + struct boot_params *Bp; if (EFI_ERROR (BasicKernelSetupCheck (KernelSetup))) { return NULL; } - Bp = (struct boot_params*) KernelSetup; + Bp = (struct boot_params *)KernelSetup; - Address = (EFI_PHYSICAL_ADDRESS)(UINTN) Bp->hdr.ramdisk_max; - Status = gBS->AllocatePages ( - AllocateMaxAddress, - EfiLoaderData, - Pages, - &Address - ); + Address = (EFI_PHYSICAL_ADDRESS)(UINTN)Bp->hdr.ramdisk_max; + Status = gBS->AllocatePages ( + AllocateMaxAddress, + EfiLoaderData, + Pages, + &Address + ); if (!EFI_ERROR (Status)) { - return (VOID*)(UINTN) Address; + return (VOID *)(UINTN)Address; } else { return NULL; } } - STATIC VOID SetupLinuxMemmap ( - IN OUT struct boot_params *Bp + IN OUT struct boot_params *Bp ) { - EFI_STATUS Status; - UINT8 TmpMemoryMap[1]; - UINTN MapKey; - UINTN DescriptorSize; - UINT32 DescriptorVersion; - UINTN MemoryMapSize; - EFI_MEMORY_DESCRIPTOR *MemoryMap; - EFI_MEMORY_DESCRIPTOR *MemoryMapPtr; - UINTN Index; - struct efi_info *Efi; - struct e820_entry *LastE820; - struct e820_entry *E820; - UINTN E820EntryCount; - EFI_PHYSICAL_ADDRESS LastEndAddr; + EFI_STATUS Status; + UINT8 TmpMemoryMap[1]; + UINTN MapKey; + UINTN DescriptorSize; + UINT32 DescriptorVersion; + UINTN MemoryMapSize; + EFI_MEMORY_DESCRIPTOR *MemoryMap; + EFI_MEMORY_DESCRIPTOR *MemoryMapPtr; + UINTN Index; + struct efi_info *Efi; + struct e820_entry *LastE820; + struct e820_entry *E820; + UINTN E820EntryCount; + EFI_PHYSICAL_ADDRESS LastEndAddr; // // Get System MemoryMapSize // MemoryMapSize = sizeof (TmpMemoryMap); - Status = gBS->GetMemoryMap ( - &MemoryMapSize, - (EFI_MEMORY_DESCRIPTOR *)TmpMemoryMap, - &MapKey, - &DescriptorSize, - &DescriptorVersion - ); + Status = gBS->GetMemoryMap ( + &MemoryMapSize, + (EFI_MEMORY_DESCRIPTOR *)TmpMemoryMap, + &MapKey, + &DescriptorSize, + &DescriptorVersion + ); ASSERT (Status == EFI_BUFFER_TOO_SMALL); // // Enlarge space here, because we will allocate pool now. // MemoryMapSize += EFI_PAGE_SIZE; - Status = gBS->AllocatePool ( - EfiLoaderData, - MemoryMapSize, - (VOID **) &MemoryMap - ); + Status = gBS->AllocatePool ( + EfiLoaderData, + MemoryMapSize, + (VOID **)&MemoryMap + ); ASSERT_EFI_ERROR (Status); // @@ -294,70 +291,72 @@ SetupLinuxMemmap ( ); ASSERT_EFI_ERROR (Status); - LastE820 = NULL; - E820 = &Bp->e820_map[0]; + LastE820 = NULL; + E820 = &Bp->e820_map[0]; E820EntryCount = 0; - LastEndAddr = 0; - MemoryMapPtr = MemoryMap; + LastEndAddr = 0; + MemoryMapPtr = MemoryMap; for (Index = 0; Index < (MemoryMapSize / DescriptorSize); Index++) { - UINTN E820Type = 0; + UINTN E820Type = 0; if (MemoryMap->NumberOfPages == 0) { continue; } - switch(MemoryMap->Type) { - case EfiReservedMemoryType: - case EfiRuntimeServicesCode: - case EfiRuntimeServicesData: - case EfiMemoryMappedIO: - case EfiMemoryMappedIOPortSpace: - case EfiPalCode: - E820Type = E820_RESERVED; - break; - - case EfiUnusableMemory: - E820Type = E820_UNUSABLE; - break; - - case EfiACPIReclaimMemory: - E820Type = E820_ACPI; - break; - - case EfiLoaderCode: - case EfiLoaderData: - case EfiBootServicesCode: - case EfiBootServicesData: - case EfiConventionalMemory: - E820Type = E820_RAM; - break; - - case EfiACPIMemoryNVS: - E820Type = E820_NVS; - break; - - default: - DEBUG (( - DEBUG_ERROR, - "Invalid EFI memory descriptor type (0x%x)!\n", - MemoryMap->Type - )); - continue; + switch (MemoryMap->Type) { + case EfiReservedMemoryType: + case EfiRuntimeServicesCode: + case EfiRuntimeServicesData: + case EfiMemoryMappedIO: + case EfiMemoryMappedIOPortSpace: + case EfiPalCode: + E820Type = E820_RESERVED; + break; + + case EfiUnusableMemory: + E820Type = E820_UNUSABLE; + break; + + case EfiACPIReclaimMemory: + E820Type = E820_ACPI; + break; + + case EfiLoaderCode: + case EfiLoaderData: + case EfiBootServicesCode: + case EfiBootServicesData: + case EfiConventionalMemory: + E820Type = E820_RAM; + break; + + case EfiACPIMemoryNVS: + E820Type = E820_NVS; + break; + + default: + DEBUG (( + DEBUG_ERROR, + "Invalid EFI memory descriptor type (0x%x)!\n", + MemoryMap->Type + )); + continue; } if ((LastE820 != NULL) && - (LastE820->type == (UINT32) E820Type) && - (MemoryMap->PhysicalStart == LastEndAddr)) { - LastE820->size += EFI_PAGES_TO_SIZE ((UINTN) MemoryMap->NumberOfPages); - LastEndAddr += EFI_PAGES_TO_SIZE ((UINTN) MemoryMap->NumberOfPages); + (LastE820->type == (UINT32)E820Type) && + (MemoryMap->PhysicalStart == LastEndAddr)) + { + LastE820->size += EFI_PAGES_TO_SIZE ((UINTN)MemoryMap->NumberOfPages); + LastEndAddr += EFI_PAGES_TO_SIZE ((UINTN)MemoryMap->NumberOfPages); } else { if (E820EntryCount >= ARRAY_SIZE (Bp->e820_map)) { break; } - E820->type = (UINT32) E820Type; - E820->addr = MemoryMap->PhysicalStart; - E820->size = EFI_PAGES_TO_SIZE ((UINTN) MemoryMap->NumberOfPages); - LastE820 = E820; + + E820->type = (UINT32)E820Type; + E820->addr = MemoryMap->PhysicalStart; + E820->size = EFI_PAGES_TO_SIZE ((UINTN)MemoryMap->NumberOfPages); + LastE820 = E820; LastEndAddr = E820->addr + E820->size; E820++; E820EntryCount++; @@ -368,85 +367,83 @@ SetupLinuxMemmap ( // MemoryMap = (EFI_MEMORY_DESCRIPTOR *)((UINTN)MemoryMap + DescriptorSize); } - Bp->e820_entries = (UINT8) E820EntryCount; - Efi = &Bp->efi_info; - Efi->efi_systab = (UINT32)(UINTN) gST; - Efi->efi_memdesc_size = (UINT32) DescriptorSize; + Bp->e820_entries = (UINT8)E820EntryCount; + + Efi = &Bp->efi_info; + Efi->efi_systab = (UINT32)(UINTN)gST; + Efi->efi_memdesc_size = (UINT32)DescriptorSize; Efi->efi_memdesc_version = DescriptorVersion; - Efi->efi_memmap = (UINT32)(UINTN) MemoryMapPtr; - Efi->efi_memmap_size = (UINT32) MemoryMapSize; -#ifdef MDE_CPU_IA32 + Efi->efi_memmap = (UINT32)(UINTN)MemoryMapPtr; + Efi->efi_memmap_size = (UINT32)MemoryMapSize; + #ifdef MDE_CPU_IA32 Efi->efi_loader_signature = SIGNATURE_32 ('E', 'L', '3', '2'); -#else - Efi->efi_systab_hi = (UINT32) (((UINT64)(UINTN) gST) >> 32); - Efi->efi_memmap_hi = (UINT32) (((UINT64)(UINTN) MemoryMapPtr) >> 32); + #else + Efi->efi_systab_hi = (UINT32)(((UINT64)(UINTN)gST) >> 32); + Efi->efi_memmap_hi = (UINT32)(((UINT64)(UINTN)MemoryMapPtr) >> 32); Efi->efi_loader_signature = SIGNATURE_32 ('E', 'L', '6', '4'); -#endif + #endif gBS->ExitBootServices (gImageHandle, MapKey); } - EFI_STATUS EFIAPI LoadLinuxSetCommandLine ( - IN OUT VOID *KernelSetup, - IN CHAR8 *CommandLine + IN OUT VOID *KernelSetup, + IN CHAR8 *CommandLine ) { - EFI_STATUS Status; - struct boot_params *Bp; + EFI_STATUS Status; + struct boot_params *Bp; Status = BasicKernelSetupCheck (KernelSetup); if (EFI_ERROR (Status)) { return Status; } - Bp = (struct boot_params*) KernelSetup; + Bp = (struct boot_params *)KernelSetup; - Bp->hdr.cmd_line_ptr = (UINT32)(UINTN) CommandLine; + Bp->hdr.cmd_line_ptr = (UINT32)(UINTN)CommandLine; return EFI_SUCCESS; } - EFI_STATUS EFIAPI LoadLinuxSetInitrd ( - IN OUT VOID *KernelSetup, - IN VOID *Initrd, - IN UINTN InitrdSize + IN OUT VOID *KernelSetup, + IN VOID *Initrd, + IN UINTN InitrdSize ) { - EFI_STATUS Status; - struct boot_params *Bp; + EFI_STATUS Status; + struct boot_params *Bp; Status = BasicKernelSetupCheck (KernelSetup); if (EFI_ERROR (Status)) { return Status; } - Bp = (struct boot_params*) KernelSetup; + Bp = (struct boot_params *)KernelSetup; - Bp->hdr.ramdisk_start = (UINT32)(UINTN) Initrd; - Bp->hdr.ramdisk_len = (UINT32) InitrdSize; + Bp->hdr.ramdisk_start = (UINT32)(UINTN)Initrd; + Bp->hdr.ramdisk_len = (UINT32)InitrdSize; return EFI_SUCCESS; } - STATIC VOID FindBits ( - unsigned long Mask, - UINT8 *Pos, - UINT8 *Size + unsigned long Mask, + UINT8 *Pos, + UINT8 *Size ) { - UINT8 First, Len; + UINT8 First, Len; First = 0; - Len = 0; + Len = 0; if (Mask) { while (!(Mask & 0x1)) { @@ -459,23 +456,23 @@ FindBits ( Len++; } } - *Pos = First; + + *Pos = First; *Size = Len; } - STATIC EFI_STATUS SetupGraphicsFromGop ( - struct screen_info *Si, - EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop + struct screen_info *Si, + EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop ) { - EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info; - EFI_STATUS Status; - UINTN Size; + EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info; + EFI_STATUS Status; + UINTN Size; - Status = Gop->QueryMode(Gop, Gop->Mode->Mode, &Size, &Info); + Status = Gop->QueryMode (Gop, Gop->Mode->Mode, &Size, &Info); if (EFI_ERROR (Status)) { return Status; } @@ -485,88 +482,98 @@ SetupGraphicsFromGop ( /* EFI framebuffer */ Si->orig_video_isVGA = 0x70; - Si->orig_x = 0; - Si->orig_y = 0; - Si->orig_video_page = 0; - Si->orig_video_mode = 0; - Si->orig_video_cols = 0; - Si->orig_video_lines = 0; + Si->orig_x = 0; + Si->orig_y = 0; + Si->orig_video_page = 0; + Si->orig_video_mode = 0; + Si->orig_video_cols = 0; + Si->orig_video_lines = 0; Si->orig_video_ega_bx = 0; Si->orig_video_points = 0; - Si->lfb_base = (UINT32) Gop->Mode->FrameBufferBase; - Si->lfb_size = (UINT32) Gop->Mode->FrameBufferSize; - Si->lfb_width = (UINT16) Info->HorizontalResolution; - Si->lfb_height = (UINT16) Info->VerticalResolution; - Si->pages = 1; + Si->lfb_base = (UINT32)Gop->Mode->FrameBufferBase; + Si->lfb_size = (UINT32)Gop->Mode->FrameBufferSize; + Si->lfb_width = (UINT16)Info->HorizontalResolution; + Si->lfb_height = (UINT16)Info->VerticalResolution; + Si->pages = 1; Si->vesapm_seg = 0; Si->vesapm_off = 0; if (Info->PixelFormat == PixelRedGreenBlueReserved8BitPerColor) { - Si->lfb_depth = 32; - Si->red_size = 8; - Si->red_pos = 0; - Si->green_size = 8; - Si->green_pos = 8; - Si->blue_size = 8; - Si->blue_pos = 16; - Si->rsvd_size = 8; - Si->rsvd_pos = 24; - Si->lfb_linelength = (UINT16) (Info->PixelsPerScanLine * 4); - + Si->lfb_depth = 32; + Si->red_size = 8; + Si->red_pos = 0; + Si->green_size = 8; + Si->green_pos = 8; + Si->blue_size = 8; + Si->blue_pos = 16; + Si->rsvd_size = 8; + Si->rsvd_pos = 24; + Si->lfb_linelength = (UINT16)(Info->PixelsPerScanLine * 4); } else if (Info->PixelFormat == PixelBlueGreenRedReserved8BitPerColor) { - Si->lfb_depth = 32; - Si->red_size = 8; - Si->red_pos = 16; - Si->green_size = 8; - Si->green_pos = 8; - Si->blue_size = 8; - Si->blue_pos = 0; - Si->rsvd_size = 8; - Si->rsvd_pos = 24; - Si->lfb_linelength = (UINT16) (Info->PixelsPerScanLine * 4); + Si->lfb_depth = 32; + Si->red_size = 8; + Si->red_pos = 16; + Si->green_size = 8; + Si->green_pos = 8; + Si->blue_size = 8; + Si->blue_pos = 0; + Si->rsvd_size = 8; + Si->rsvd_pos = 24; + Si->lfb_linelength = (UINT16)(Info->PixelsPerScanLine * 4); } else if (Info->PixelFormat == PixelBitMask) { - FindBits(Info->PixelInformation.RedMask, - &Si->red_pos, &Si->red_size); - FindBits(Info->PixelInformation.GreenMask, - &Si->green_pos, &Si->green_size); - FindBits(Info->PixelInformation.BlueMask, - &Si->blue_pos, &Si->blue_size); - FindBits(Info->PixelInformation.ReservedMask, - &Si->rsvd_pos, &Si->rsvd_size); + FindBits ( + Info->PixelInformation.RedMask, + &Si->red_pos, + &Si->red_size + ); + FindBits ( + Info->PixelInformation.GreenMask, + &Si->green_pos, + &Si->green_size + ); + FindBits ( + Info->PixelInformation.BlueMask, + &Si->blue_pos, + &Si->blue_size + ); + FindBits ( + Info->PixelInformation.ReservedMask, + &Si->rsvd_pos, + &Si->rsvd_size + ); Si->lfb_depth = Si->red_size + Si->green_size + - Si->blue_size + Si->rsvd_size; - Si->lfb_linelength = (UINT16) ((Info->PixelsPerScanLine * Si->lfb_depth) / 8); + Si->blue_size + Si->rsvd_size; + Si->lfb_linelength = (UINT16)((Info->PixelsPerScanLine * Si->lfb_depth) / 8); } else { - Si->lfb_depth = 4; - Si->red_size = 0; - Si->red_pos = 0; - Si->green_size = 0; - Si->green_pos = 0; - Si->blue_size = 0; - Si->blue_pos = 0; - Si->rsvd_size = 0; - Si->rsvd_pos = 0; + Si->lfb_depth = 4; + Si->red_size = 0; + Si->red_pos = 0; + Si->green_size = 0; + Si->green_pos = 0; + Si->blue_size = 0; + Si->blue_pos = 0; + Si->rsvd_size = 0; + Si->rsvd_pos = 0; Si->lfb_linelength = Si->lfb_width / 2; } return Status; } - STATIC EFI_STATUS SetupGraphics ( - IN OUT struct boot_params *Bp + IN OUT struct boot_params *Bp ) { - EFI_STATUS Status; - EFI_HANDLE *HandleBuffer; - UINTN HandleCount; - UINTN Index; - EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop; + EFI_STATUS Status; + EFI_HANDLE *HandleBuffer; + UINTN HandleCount; + UINTN Index; + EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop; - ZeroMem ((VOID*)&Bp->screen_info, sizeof(Bp->screen_info)); + ZeroMem ((VOID *)&Bp->screen_info, sizeof (Bp->screen_info)); Status = gBS->LocateHandleBuffer ( ByProtocol, @@ -580,7 +587,7 @@ SetupGraphics ( Status = gBS->HandleProtocol ( HandleBuffer[Index], &gEfiGraphicsOutputProtocolGuid, - (VOID*) &Gop + (VOID *)&Gop ); if (EFI_ERROR (Status)) { continue; @@ -599,11 +606,10 @@ SetupGraphics ( return EFI_NOT_FOUND; } - STATIC EFI_STATUS SetupLinuxBootParams ( - IN OUT struct boot_params *Bp + IN OUT struct boot_params *Bp ) { SetupGraphics (Bp); @@ -613,7 +619,6 @@ SetupLinuxBootParams ( return EFI_SUCCESS; } - EFI_STATUS EFIAPI LoadLinux ( @@ -621,7 +626,7 @@ LoadLinux ( IN OUT VOID *KernelSetup ) { - EFI_STATUS Status; + EFI_STATUS Status; struct boot_params *Bp; Status = BasicKernelSetupCheck (KernelSetup); @@ -629,9 +634,9 @@ LoadLinux ( return Status; } - Bp = (struct boot_params *) KernelSetup; + Bp = (struct boot_params *)KernelSetup; - if (Bp->hdr.version < 0x205 || !Bp->hdr.relocatable_kernel) { + if ((Bp->hdr.version < 0x205) || !Bp->hdr.relocatable_kernel) { // // We only support relocatable kernels // @@ -640,13 +645,14 @@ LoadLinux ( InitLinuxDescriptorTables (); - Bp->hdr.code32_start = (UINT32)(UINTN) Kernel; - if (Bp->hdr.version >= 0x20c && Bp->hdr.handover_offset && - (Bp->hdr.xloadflags & (sizeof (UINTN) == 4 ? BIT2 : BIT3))) { + Bp->hdr.code32_start = (UINT32)(UINTN)Kernel; + if ((Bp->hdr.version >= 0x20c) && Bp->hdr.handover_offset && + (Bp->hdr.xloadflags & ((sizeof (UINTN) == 4) ? BIT2 : BIT3))) + { DEBUG ((DEBUG_INFO, "Jumping to kernel EFI handover point at ofs %x\n", Bp->hdr.handover_offset)); DisableInterrupts (); - JumpToUefiKernel ((VOID*) gImageHandle, (VOID*) gST, KernelSetup, Kernel); + JumpToUefiKernel ((VOID *)gImageHandle, (VOID *)gST, KernelSetup, Kernel); } // @@ -657,8 +663,7 @@ LoadLinux ( DEBUG ((DEBUG_INFO, "Jumping to kernel\n")); DisableInterrupts (); SetLinuxDescriptorTables (); - JumpToKernel (Kernel, (VOID*) KernelSetup); + JumpToKernel (Kernel, (VOID *)KernelSetup); return EFI_SUCCESS; } - diff --git a/OvmfPkg/Library/LoadLinuxLib/LinuxGdt.c b/OvmfPkg/Library/LoadLinuxLib/LinuxGdt.c index d90e999d82..8f1e2375b6 100644 --- a/OvmfPkg/Library/LoadLinuxLib/LinuxGdt.c +++ b/OvmfPkg/Library/LoadLinuxLib/LinuxGdt.c @@ -8,7 +8,6 @@ #include "LoadLinuxLib.h" - // // Local structure definitions // @@ -20,33 +19,33 @@ // typedef struct _GDT_ENTRY { - UINT16 Limit15_0; - UINT16 Base15_0; - UINT8 Base23_16; - UINT8 Type; - UINT8 Limit19_16_and_flags; - UINT8 Base31_24; + UINT16 Limit15_0; + UINT16 Base15_0; + UINT8 Base23_16; + UINT8 Type; + UINT8 Limit19_16_and_flags; + UINT8 Base31_24; } GDT_ENTRY; typedef -struct _GDT_ENTRIES { - GDT_ENTRY Null; - GDT_ENTRY Null2; - GDT_ENTRY Linear; - GDT_ENTRY LinearCode; - GDT_ENTRY TaskSegment; - GDT_ENTRY Spare4; - GDT_ENTRY Spare5; + struct _GDT_ENTRIES { + GDT_ENTRY Null; + GDT_ENTRY Null2; + GDT_ENTRY Linear; + GDT_ENTRY LinearCode; + GDT_ENTRY TaskSegment; + GDT_ENTRY Spare4; + GDT_ENTRY Spare5; } GDT_ENTRIES; #pragma pack () -STATIC GDT_ENTRIES *mGdt = NULL; +STATIC GDT_ENTRIES *mGdt = NULL; // // Global descriptor table (GDT) Template // -STATIC GDT_ENTRIES GdtTemplate = { +STATIC GDT_ENTRIES GdtTemplate = { // // Null // @@ -146,7 +145,6 @@ InitLinuxDescriptorTables ( // Initialize all GDT entries // CopyMem (mGdt, &GdtTemplate, sizeof (GdtTemplate)); - } /** @@ -158,18 +156,17 @@ SetLinuxDescriptorTables ( VOID ) { - IA32_DESCRIPTOR GdtPtr; - IA32_DESCRIPTOR IdtPtr; + IA32_DESCRIPTOR GdtPtr; + IA32_DESCRIPTOR IdtPtr; // // Write GDT register // - GdtPtr.Base = (UINT32)(UINTN)(VOID*) mGdt; - GdtPtr.Limit = (UINT16) (sizeof (GdtTemplate) - 1); + GdtPtr.Base = (UINT32)(UINTN)(VOID *)mGdt; + GdtPtr.Limit = (UINT16)(sizeof (GdtTemplate) - 1); AsmWriteGdtr (&GdtPtr); - IdtPtr.Base = (UINT32) 0; - IdtPtr.Limit = (UINT16) 0; + IdtPtr.Base = (UINT32)0; + IdtPtr.Limit = (UINT16)0; AsmWriteIdtr (&IdtPtr); } - diff --git a/OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.h b/OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.h index daaecb6154..deb9b6e861 100644 --- a/OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.h +++ b/OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.h @@ -26,17 +26,17 @@ VOID EFIAPI JumpToKernel ( - VOID *KernelStart, - VOID *KernelBootParams + VOID *KernelStart, + VOID *KernelBootParams ); VOID EFIAPI JumpToUefiKernel ( - EFI_HANDLE ImageHandle, - EFI_SYSTEM_TABLE *SystemTable, - VOID *KernelBootParams, - VOID *KernelStart + EFI_HANDLE ImageHandle, + EFI_SYSTEM_TABLE *SystemTable, + VOID *KernelBootParams, + VOID *KernelStart ); VOID @@ -50,4 +50,3 @@ SetLinuxDescriptorTables ( ); #endif - diff --git a/OvmfPkg/Library/LockBoxLib/LockBoxDxe.c b/OvmfPkg/Library/LockBoxLib/LockBoxDxe.c index 7dc2eea239..c9d679cb84 100644 --- a/OvmfPkg/Library/LockBoxLib/LockBoxDxe.c +++ b/OvmfPkg/Library/LockBoxLib/LockBoxDxe.c @@ -29,17 +29,17 @@ STATIC VOID * AllocateMemoryBelow4G ( - IN EFI_MEMORY_TYPE MemoryType, - IN UINTN Size + IN EFI_MEMORY_TYPE MemoryType, + IN UINTN Size ) { UINTN Pages; EFI_PHYSICAL_ADDRESS Address; EFI_STATUS Status; - VOID* Buffer; + VOID *Buffer; UINTN AllocRemaining; - Pages = EFI_SIZE_TO_PAGES (Size); + Pages = EFI_SIZE_TO_PAGES (Size); Address = 0xffffffff; // @@ -49,36 +49,35 @@ AllocateMemoryBelow4G ( // allocations, and use these to allocate memory for small buffers. // ASSERT (mLockBoxGlobal->Signature == LOCK_BOX_GLOBAL_SIGNATURE); - if ((UINTN) mLockBoxGlobal->SubPageRemaining >= Size) { - Buffer = (VOID*)(UINTN) mLockBoxGlobal->SubPageBuffer; - mLockBoxGlobal->SubPageBuffer += (UINT32) Size; - mLockBoxGlobal->SubPageRemaining -= (UINT32) Size; + if ((UINTN)mLockBoxGlobal->SubPageRemaining >= Size) { + Buffer = (VOID *)(UINTN)mLockBoxGlobal->SubPageBuffer; + mLockBoxGlobal->SubPageBuffer += (UINT32)Size; + mLockBoxGlobal->SubPageRemaining -= (UINT32)Size; return Buffer; } - Status = gBS->AllocatePages ( - AllocateMaxAddress, - MemoryType, - Pages, - &Address - ); + Status = gBS->AllocatePages ( + AllocateMaxAddress, + MemoryType, + Pages, + &Address + ); if (EFI_ERROR (Status)) { return NULL; } - Buffer = (VOID *) (UINTN) Address; + Buffer = (VOID *)(UINTN)Address; ZeroMem (Buffer, EFI_PAGES_TO_SIZE (Pages)); AllocRemaining = EFI_PAGES_TO_SIZE (Pages) - Size; - if (AllocRemaining > (UINTN) mLockBoxGlobal->SubPageRemaining) { - mLockBoxGlobal->SubPageBuffer = (UINT32) (Address + Size); - mLockBoxGlobal->SubPageRemaining = (UINT32) AllocRemaining; + if (AllocRemaining > (UINTN)mLockBoxGlobal->SubPageRemaining) { + mLockBoxGlobal->SubPageBuffer = (UINT32)(Address + Size); + mLockBoxGlobal->SubPageRemaining = (UINT32)AllocRemaining; } return Buffer; } - /** Allocates a buffer of type EfiACPIMemoryNVS. @@ -102,7 +101,6 @@ AllocateAcpiNvsPool ( return AllocateMemoryBelow4G (EfiACPIMemoryNVS, AllocationSize); } - EFI_STATUS EFIAPI LockBoxDxeLibInitialize ( @@ -110,8 +108,8 @@ LockBoxDxeLibInitialize ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - VOID *Interface; + EFI_STATUS Status; + VOID *Interface; Status = LockBoxLibInitialize (); if (!EFI_ERROR (Status)) { diff --git a/OvmfPkg/Library/LockBoxLib/LockBoxLib.c b/OvmfPkg/Library/LockBoxLib/LockBoxLib.c index 95ab4332e7..2000afeeb8 100644 --- a/OvmfPkg/Library/LockBoxLib/LockBoxLib.c +++ b/OvmfPkg/Library/LockBoxLib/LockBoxLib.c @@ -18,17 +18,17 @@ #pragma pack(1) typedef struct { - EFI_GUID Guid; - EFI_PHYSICAL_ADDRESS OrigAddress; - EFI_PHYSICAL_ADDRESS CopyAddress; - UINT32 Size; - UINT64 Attributes; + EFI_GUID Guid; + EFI_PHYSICAL_ADDRESS OrigAddress; + EFI_PHYSICAL_ADDRESS CopyAddress; + UINT32 Size; + UINT64 Attributes; } LOCK_BOX_ENTRY; #pragma pack() -LOCK_BOX_GLOBAL *mLockBoxGlobal = NULL; -STATIC LOCK_BOX_ENTRY *StartOfEntries = NULL; -STATIC LOCK_BOX_ENTRY *EndOfEntries = NULL; +LOCK_BOX_GLOBAL *mLockBoxGlobal = NULL; +STATIC LOCK_BOX_ENTRY *StartOfEntries = NULL; +STATIC LOCK_BOX_ENTRY *EndOfEntries = NULL; RETURN_STATUS EFIAPI @@ -36,7 +36,7 @@ LockBoxLibInitialize ( VOID ) { - UINTN NumEntries; + UINTN NumEntries; ASSERT (!FeaturePcdGet (PcdSmmSmramRequire)); @@ -44,10 +44,10 @@ LockBoxLibInitialize ( return RETURN_UNSUPPORTED; } - mLockBoxGlobal = (LOCK_BOX_GLOBAL *)(UINTN) PcdGet32 (PcdOvmfLockBoxStorageBase); - StartOfEntries = ((LOCK_BOX_ENTRY *) (mLockBoxGlobal + 1)); - NumEntries = ((PcdGet32 (PcdOvmfLockBoxStorageSize) - sizeof (LOCK_BOX_GLOBAL)) / - sizeof (LOCK_BOX_ENTRY)); + mLockBoxGlobal = (LOCK_BOX_GLOBAL *)(UINTN)PcdGet32 (PcdOvmfLockBoxStorageBase); + StartOfEntries = ((LOCK_BOX_ENTRY *)(mLockBoxGlobal + 1)); + NumEntries = ((PcdGet32 (PcdOvmfLockBoxStorageSize) - sizeof (LOCK_BOX_GLOBAL)) / + sizeof (LOCK_BOX_ENTRY)); EndOfEntries = StartOfEntries + NumEntries; if (mLockBoxGlobal->Signature != LOCK_BOX_GLOBAL_SIGNATURE) { // @@ -57,10 +57,10 @@ LockBoxLibInitialize ( // mLockBoxGlobal->Signature = LOCK_BOX_GLOBAL_SIGNATURE; } + return RETURN_SUCCESS; } - /** Find LockBox entry based on GUID. @@ -80,13 +80,13 @@ STATIC LOCK_BOX_ENTRY * EFIAPI FindHeaderByGuid ( - IN CONST EFI_GUID *Guid + IN CONST EFI_GUID *Guid ) { - LOCK_BOX_ENTRY *Header; + LOCK_BOX_ENTRY *Header; for (Header = StartOfEntries; Header < EndOfEntries; Header++) { - if (Header->Size == 0 || CompareGuid (Guid, &Header->Guid)) { + if ((Header->Size == 0) || CompareGuid (Guid, &Header->Guid)) { return Header; } } @@ -94,7 +94,6 @@ FindHeaderByGuid ( return NULL; } - /** This function will save confidential information to lockbox. @@ -115,18 +114,24 @@ FindHeaderByGuid ( RETURN_STATUS EFIAPI SaveLockBox ( - IN GUID *Guid, - IN VOID *Buffer, - IN UINTN Length + IN GUID *Guid, + IN VOID *Buffer, + IN UINTN Length ) { - LOCK_BOX_ENTRY *Header; + LOCK_BOX_ENTRY *Header; VOID *CopyBuffer; - DEBUG ((DEBUG_VERBOSE, "%a: Guid=%g Buffer=%p Length=0x%x\n", __FUNCTION__, - Guid, Buffer, (UINT32) Length)); + DEBUG (( + DEBUG_VERBOSE, + "%a: Guid=%g Buffer=%p Length=0x%x\n", + __FUNCTION__, + Guid, + Buffer, + (UINT32)Length + )); - if (Guid == NULL || Buffer == NULL || Length == 0) { + if ((Guid == NULL) || (Buffer == NULL) || (Length == 0)) { return RETURN_INVALID_PARAMETER; } @@ -152,9 +157,9 @@ SaveLockBox ( // overwrite the current terminator header with new metadata // CopyGuid (&Header->Guid, Guid); - Header->OrigAddress = (UINTN) Buffer; - Header->CopyAddress = (UINTN) CopyBuffer; - Header->Size = (UINT32) Length; + Header->OrigAddress = (UINTN)Buffer; + Header->CopyAddress = (UINTN)CopyBuffer; + Header->Size = (UINT32)Length; Header->Attributes = 0; // @@ -165,7 +170,6 @@ SaveLockBox ( return RETURN_SUCCESS; } - /** This function will set lockbox attributes. @@ -183,29 +187,34 @@ SaveLockBox ( RETURN_STATUS EFIAPI SetLockBoxAttributes ( - IN GUID *Guid, - IN UINT64 Attributes + IN GUID *Guid, + IN UINT64 Attributes ) { - LOCK_BOX_ENTRY *Header; + LOCK_BOX_ENTRY *Header; - DEBUG ((DEBUG_VERBOSE, "%a: Guid=%g Attributes=0x%Lx\n", __FUNCTION__, Guid, - Attributes)); + DEBUG (( + DEBUG_VERBOSE, + "%a: Guid=%g Attributes=0x%Lx\n", + __FUNCTION__, + Guid, + Attributes + )); if (Guid == NULL) { return RETURN_INVALID_PARAMETER; } Header = FindHeaderByGuid (Guid); - if (!Header || Header->Size == 0) { + if (!Header || (Header->Size == 0)) { return RETURN_NOT_FOUND; } + Header->Attributes = Attributes; return RETURN_SUCCESS; } - /** This function will update confidential information to lockbox. @@ -233,37 +242,43 @@ SetLockBoxAttributes ( RETURN_STATUS EFIAPI UpdateLockBox ( - IN GUID *Guid, - IN UINTN Offset, - IN VOID *Buffer, - IN UINTN Length + IN GUID *Guid, + IN UINTN Offset, + IN VOID *Buffer, + IN UINTN Length ) { - LOCK_BOX_ENTRY *Header; - - DEBUG ((DEBUG_VERBOSE, "%a: Guid=%g Offset=0x%x Length=0x%x\n", __FUNCTION__, - Guid, (UINT32) Offset, (UINT32) Length)); - - if (Guid == NULL || Buffer == NULL || Length == 0) { + LOCK_BOX_ENTRY *Header; + + DEBUG (( + DEBUG_VERBOSE, + "%a: Guid=%g Offset=0x%x Length=0x%x\n", + __FUNCTION__, + Guid, + (UINT32)Offset, + (UINT32)Length + )); + + if ((Guid == NULL) || (Buffer == NULL) || (Length == 0)) { return RETURN_INVALID_PARAMETER; } Header = FindHeaderByGuid (Guid); - if (!Header || Header->Size == 0) { + if (!Header || (Header->Size == 0)) { return RETURN_NOT_FOUND; } - if (Header->Size < Offset || - Length > Header->Size - Offset) { + if ((Header->Size < Offset) || + (Length > Header->Size - Offset)) + { return RETURN_BUFFER_TOO_SMALL; } - CopyMem ((UINT8 *)(UINTN) (Header->CopyAddress) + Offset, Buffer, Length); + CopyMem ((UINT8 *)(UINTN)(Header->CopyAddress) + Offset, Buffer, Length); return RETURN_SUCCESS; } - /** This function will restore confidential information from lockbox. @@ -290,24 +305,30 @@ UpdateLockBox ( RETURN_STATUS EFIAPI RestoreLockBox ( - IN GUID *Guid, - IN VOID *Buffer OPTIONAL, - IN OUT UINTN *Length OPTIONAL + IN GUID *Guid, + IN VOID *Buffer OPTIONAL, + IN OUT UINTN *Length OPTIONAL ) { - LOCK_BOX_ENTRY *Header; + LOCK_BOX_ENTRY *Header; - DEBUG ((DEBUG_VERBOSE, "%a: Guid=%g Buffer=%p\n", __FUNCTION__, Guid, - Buffer)); + DEBUG (( + DEBUG_VERBOSE, + "%a: Guid=%g Buffer=%p\n", + __FUNCTION__, + Guid, + Buffer + )); if ((Guid == NULL) || ((Buffer == NULL) && (Length != NULL)) || - ((Buffer != NULL) && (Length == NULL))) { + ((Buffer != NULL) && (Length == NULL))) + { return EFI_INVALID_PARAMETER; } Header = FindHeaderByGuid (Guid); - if (!Header || Header->Size == 0) { + if (!Header || (Header->Size == 0)) { return RETURN_NOT_FOUND; } @@ -315,10 +336,12 @@ RestoreLockBox ( if (!(Header->Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE)) { return RETURN_WRITE_PROTECTED; } + if (Header->OrigAddress + (Header->Size - 1) > MAX_ADDRESS) { return RETURN_UNSUPPORTED; } - Buffer = (VOID *)(UINTN) Header->OrigAddress; + + Buffer = (VOID *)(UINTN)Header->OrigAddress; } // @@ -332,15 +355,15 @@ RestoreLockBox ( *Length = Header->Size; return EFI_BUFFER_TOO_SMALL; } + *Length = Header->Size; } - CopyMem (Buffer, (VOID*)(UINTN) Header->CopyAddress, Header->Size); + CopyMem (Buffer, (VOID *)(UINTN)Header->CopyAddress, Header->Size); return RETURN_SUCCESS; } - /** This function will restore confidential information from all lockbox which have RestoreInPlace attribute. @@ -356,22 +379,30 @@ RestoreAllLockBoxInPlace ( VOID ) { - LOCK_BOX_ENTRY *Header; + LOCK_BOX_ENTRY *Header; for (Header = StartOfEntries; Header < EndOfEntries && Header->Size > 0; - Header++) { + Header++) + { if (Header->Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE) { - VOID *Buffer; + VOID *Buffer; if (Header->OrigAddress + (Header->Size - 1) > MAX_ADDRESS) { return RETURN_UNSUPPORTED; } - Buffer = (VOID *)(UINTN) Header->OrigAddress; - CopyMem (Buffer, (VOID*)(UINTN)Header->CopyAddress, Header->Size); - DEBUG ((DEBUG_VERBOSE, "%a: Guid=%g Buffer=%p\n", __FUNCTION__, - &Header->Guid, Buffer)); + + Buffer = (VOID *)(UINTN)Header->OrigAddress; + CopyMem (Buffer, (VOID *)(UINTN)Header->CopyAddress, Header->Size); + DEBUG (( + DEBUG_VERBOSE, + "%a: Guid=%g Buffer=%p\n", + __FUNCTION__, + &Header->Guid, + Buffer + )); } } + return RETURN_SUCCESS; } diff --git a/OvmfPkg/Library/LockBoxLib/LockBoxLib.h b/OvmfPkg/Library/LockBoxLib/LockBoxLib.h index d654ea6398..a5392c9124 100644 --- a/OvmfPkg/Library/LockBoxLib/LockBoxLib.h +++ b/OvmfPkg/Library/LockBoxLib/LockBoxLib.h @@ -12,14 +12,14 @@ #pragma pack(1) typedef struct { - UINT32 Signature; - UINT32 SubPageBuffer; - UINT32 SubPageRemaining; + UINT32 Signature; + UINT32 SubPageBuffer; + UINT32 SubPageRemaining; } LOCK_BOX_GLOBAL; -#define LOCK_BOX_GLOBAL_SIGNATURE SIGNATURE_32('L', 'B', 'G', 'S') +#define LOCK_BOX_GLOBAL_SIGNATURE SIGNATURE_32('L', 'B', 'G', 'S') -extern LOCK_BOX_GLOBAL *mLockBoxGlobal; +extern LOCK_BOX_GLOBAL *mLockBoxGlobal; #pragma pack() @@ -43,12 +43,10 @@ AllocateAcpiNvsPool ( IN UINTN AllocationSize ); - RETURN_STATUS EFIAPI LockBoxLibInitialize ( VOID ); - #endif diff --git a/OvmfPkg/Library/NvVarsFileLib/FsAccess.c b/OvmfPkg/Library/NvVarsFileLib/FsAccess.c index 2ba03522fb..3f515bd034 100644 --- a/OvmfPkg/Library/NvVarsFileLib/FsAccess.c +++ b/OvmfPkg/Library/NvVarsFileLib/FsAccess.c @@ -12,7 +12,6 @@ #include #include - /** Open the NvVars file for reading or writing @@ -26,14 +25,14 @@ **/ EFI_STATUS GetNvVarsFile ( - IN EFI_HANDLE FsHandle, - IN BOOLEAN ReadingFile, - OUT EFI_FILE_HANDLE *NvVarsFile + IN EFI_HANDLE FsHandle, + IN BOOLEAN ReadingFile, + OUT EFI_FILE_HANDLE *NvVarsFile ) { - EFI_STATUS Status; - EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Fs; - EFI_FILE_HANDLE Root; + EFI_STATUS Status; + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Fs; + EFI_FILE_HANDLE Root; // // Get the FileSystem protocol on that handle @@ -63,19 +62,18 @@ GetNvVarsFile ( NvVarsFile, L"NvVars", ReadingFile ? - EFI_FILE_MODE_READ : - ( - EFI_FILE_MODE_CREATE | - EFI_FILE_MODE_READ | - EFI_FILE_MODE_WRITE - ), + EFI_FILE_MODE_READ : + ( + EFI_FILE_MODE_CREATE | + EFI_FILE_MODE_READ | + EFI_FILE_MODE_WRITE + ), 0 ); return Status; } - /** Open the NvVars file for reading or writing @@ -87,15 +85,15 @@ GetNvVarsFile ( **/ VOID NvVarsFileReadCheckup ( - IN EFI_FILE_HANDLE File, - OUT BOOLEAN *Exists, - OUT UINTN *Size + IN EFI_FILE_HANDLE File, + OUT BOOLEAN *Exists, + OUT UINTN *Size ) { - EFI_FILE_INFO *FileInfo; + EFI_FILE_INFO *FileInfo; *Exists = FALSE; - *Size = 0; + *Size = 0; FileInfo = FileHandleGetInfo (File); if (FileInfo == NULL) { @@ -108,12 +106,11 @@ NvVarsFileReadCheckup ( } *Exists = TRUE; - *Size = (UINTN) FileInfo->FileSize; + *Size = (UINTN)FileInfo->FileSize; FreePool (FileInfo); } - /** Open the NvVars file for reading or writing @@ -125,11 +122,11 @@ NvVarsFileReadCheckup ( **/ EFI_STATUS FileHandleEmpty ( - IN EFI_FILE_HANDLE File + IN EFI_FILE_HANDLE File ) { - EFI_STATUS Status; - EFI_FILE_INFO *FileInfo; + EFI_STATUS Status; + EFI_FILE_INFO *FileInfo; // // Retrieve the FileInfo structure @@ -160,14 +157,13 @@ FileHandleEmpty ( // Set the file size to 0. // FileInfo->FileSize = 0; - Status = FileHandleSetInfo (File, FileInfo); + Status = FileHandleSetInfo (File, FileInfo); FreePool (FileInfo); return Status; } - /** Reads a file to a newly allocated buffer @@ -178,18 +174,18 @@ FileHandleEmpty ( contents. NULL if an error occurred. **/ -VOID* +VOID * FileHandleReadToNewBuffer ( - IN EFI_FILE_HANDLE FileHandle, - IN UINTN ReadSize + IN EFI_FILE_HANDLE FileHandle, + IN UINTN ReadSize ) { - EFI_STATUS Status; - UINTN ActualReadSize; - VOID *FileContents; + EFI_STATUS Status; + UINTN ActualReadSize; + VOID *FileContents; ActualReadSize = ReadSize; - FileContents = AllocatePool (ReadSize); + FileContents = AllocatePool (ReadSize); if (FileContents != NULL) { Status = FileHandleRead ( FileHandle, @@ -205,7 +201,6 @@ FileHandleReadToNewBuffer ( return FileContents; } - /** Reads the contents of the NvVars file on the file system @@ -216,15 +211,15 @@ FileHandleReadToNewBuffer ( **/ EFI_STATUS ReadNvVarsFile ( - IN EFI_HANDLE FsHandle + IN EFI_HANDLE FsHandle ) { - EFI_STATUS Status; - EFI_FILE_HANDLE File; - UINTN FileSize; - BOOLEAN FileExists; - VOID *FileContents; - EFI_HANDLE SerializedVariables; + EFI_STATUS Status; + EFI_FILE_HANDLE File; + UINTN FileSize; + BOOLEAN FileExists; + VOID *FileContents; + EFI_HANDLE SerializedVariables; Status = GetNvVarsFile (FsHandle, TRUE, &File); if (EFI_ERROR (Status)) { @@ -265,7 +260,6 @@ ReadNvVarsFile ( return Status; } - /** Writes a variable to indicate that the NV variables have been loaded from the file system. @@ -277,28 +271,27 @@ SetNvVarsVariable ( VOID ) { - BOOLEAN VarData; - UINTN Size; + BOOLEAN VarData; + UINTN Size; // // Write a variable to indicate we've already loaded the // variable data. If it is found, we skip the loading on // subsequent attempts. // - Size = sizeof (VarData); + Size = sizeof (VarData); VarData = TRUE; gRT->SetVariable ( L"NvVars", &gEfiSimpleFileSystemProtocolGuid, EFI_VARIABLE_NON_VOLATILE | - EFI_VARIABLE_BOOTSERVICE_ACCESS | - EFI_VARIABLE_RUNTIME_ACCESS, + EFI_VARIABLE_BOOTSERVICE_ACCESS | + EFI_VARIABLE_RUNTIME_ACCESS, Size, - (VOID*) &VarData + (VOID *)&VarData ); } - /** Loads the non-volatile variables from the NvVars file on the given file system. @@ -310,12 +303,12 @@ SetNvVarsVariable ( **/ EFI_STATUS LoadNvVarsFromFs ( - EFI_HANDLE FsHandle + EFI_HANDLE FsHandle ) { - EFI_STATUS Status; - BOOLEAN VarData; - UINTN Size; + EFI_STATUS Status; + BOOLEAN VarData; + UINTN Size; DEBUG ((DEBUG_INFO, "FsAccess.c: LoadNvVarsFromFs\n")); @@ -328,15 +321,15 @@ LoadNvVarsFromFs ( // want to re-load the file as it would overwrite newer changes // made to the variables. // - Size = sizeof (VarData); + Size = sizeof (VarData); VarData = TRUE; - Status = gRT->GetVariable ( - L"NvVars", - &gEfiSimpleFileSystemProtocolGuid, - NULL, - &Size, - (VOID*) &VarData - ); + Status = gRT->GetVariable ( + L"NvVars", + &gEfiSimpleFileSystemProtocolGuid, + NULL, + &Size, + (VOID *)&VarData + ); if (Status == EFI_SUCCESS) { DEBUG ((DEBUG_INFO, "NV Variables were already loaded\n")); return EFI_ALREADY_STARTED; @@ -356,7 +349,7 @@ LoadNvVarsFromFs ( // variable data. If it is found, we skip the loading on // subsequent attempts. // - SetNvVarsVariable(); + SetNvVarsVariable (); DEBUG (( DEBUG_INFO, @@ -367,22 +360,21 @@ LoadNvVarsFromFs ( return Status; } - STATIC RETURN_STATUS EFIAPI IterateVariablesCallbackAddAllNvVariables ( - IN VOID *Context, - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN UINT32 Attributes, - IN UINTN DataSize, - IN VOID *Data + IN VOID *Context, + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + IN UINT32 Attributes, + IN UINTN DataSize, + IN VOID *Data ) { EFI_HANDLE Instance; - Instance = (EFI_HANDLE) Context; + Instance = (EFI_HANDLE)Context; // // Only save non-volatile variables @@ -401,7 +393,6 @@ IterateVariablesCallbackAddAllNvVariables ( ); } - /** Saves the non-volatile variables into the NvVars file on the given file system. @@ -413,15 +404,15 @@ IterateVariablesCallbackAddAllNvVariables ( **/ EFI_STATUS SaveNvVarsToFs ( - EFI_HANDLE FsHandle + EFI_HANDLE FsHandle ) { - EFI_STATUS Status; - EFI_FILE_HANDLE File; - UINTN WriteSize; - UINTN VariableDataSize; - VOID *VariableData; - EFI_HANDLE SerializedVariables; + EFI_STATUS Status; + EFI_FILE_HANDLE File; + UINTN WriteSize; + UINTN VariableDataSize; + VOID *VariableData; + EFI_HANDLE SerializedVariables; SerializedVariables = NULL; @@ -432,19 +423,19 @@ SaveNvVarsToFs ( Status = SerializeVariablesIterateSystemVariables ( IterateVariablesCallbackAddAllNvVariables, - (VOID*) SerializedVariables + (VOID *)SerializedVariables ); if (EFI_ERROR (Status)) { return Status; } - VariableData = NULL; + VariableData = NULL; VariableDataSize = 0; - Status = SerializeVariablesToBuffer ( - SerializedVariables, - NULL, - &VariableDataSize - ); + Status = SerializeVariablesToBuffer ( + SerializedVariables, + NULL, + &VariableDataSize + ); if (Status == RETURN_BUFFER_TOO_SMALL) { VariableData = AllocatePool (VariableDataSize); if (VariableData == NULL) { @@ -483,7 +474,7 @@ SaveNvVarsToFs ( } WriteSize = VariableDataSize; - Status = FileHandleWrite (File, &WriteSize, VariableData); + Status = FileHandleWrite (File, &WriteSize, VariableData); if (EFI_ERROR (Status)) { return Status; } @@ -496,13 +487,10 @@ SaveNvVarsToFs ( // variable data. If it is found, we skip the loading on // subsequent attempts. // - SetNvVarsVariable(); + SetNvVarsVariable (); DEBUG ((DEBUG_INFO, "Saved NV Variables to NvVars file\n")); } return Status; - } - - diff --git a/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.c b/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.c index 65ab6a06e1..21b71524ea 100644 --- a/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.c +++ b/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.c @@ -10,8 +10,7 @@ #include #include -EFI_HANDLE mNvVarsFileLibFsHandle = NULL; - +EFI_HANDLE mNvVarsFileLibFsHandle = NULL; /** Attempts to connect the NvVarsFileLib to the specified file system. @@ -26,10 +25,10 @@ EFI_HANDLE mNvVarsFileLibFsHandle = NULL; EFI_STATUS EFIAPI ConnectNvVarsToFileSystem ( - IN EFI_HANDLE FsHandle + IN EFI_HANDLE FsHandle ) { - EFI_STATUS Status; + EFI_STATUS Status; // // We might fail to load the variable, since the file system initially @@ -49,7 +48,6 @@ ConnectNvVarsToFileSystem ( return Status; } - /** Update non-volatile variables stored on the file system. @@ -73,5 +71,3 @@ UpdateNvVarsOnFileSystem ( return SaveNvVarsToFs (mNvVarsFileLibFsHandle); } } - - diff --git a/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.h b/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.h index d602ae1fa8..15161cbddc 100644 --- a/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.h +++ b/OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.h @@ -33,10 +33,9 @@ **/ EFI_STATUS LoadNvVarsFromFs ( - EFI_HANDLE FsHandle + EFI_HANDLE FsHandle ); - /** Saves the non-volatile variables into the NvVars file on the given file system. @@ -48,8 +47,7 @@ LoadNvVarsFromFs ( **/ EFI_STATUS SaveNvVarsToFs ( - EFI_HANDLE FsHandle + EFI_HANDLE FsHandle ); #endif - diff --git a/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c b/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c index 835efffcca..c36b6f34c4 100644 --- a/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c +++ b/OvmfPkg/Library/PciHostBridgeLib/PciHostBridgeLib.c @@ -16,8 +16,7 @@ #include // EFI_PCI_HOST_BRIDGE... #include // EFI_PCI_ATTRIBUTE_I... -STATIC PCI_ROOT_BRIDGE_APERTURE mNonExistAperture = { MAX_UINT64, 0 }; - +STATIC PCI_ROOT_BRIDGE_APERTURE mNonExistAperture = { MAX_UINT64, 0 }; /** Return all the root bridge instances in an array. @@ -31,59 +30,58 @@ STATIC PCI_ROOT_BRIDGE_APERTURE mNonExistAperture = { MAX_UINT64, 0 }; PCI_ROOT_BRIDGE * EFIAPI PciHostBridgeGetRootBridges ( - UINTN *Count + UINTN *Count ) { - UINT64 Attributes; - UINT64 AllocationAttributes; - PCI_ROOT_BRIDGE_APERTURE Io; - PCI_ROOT_BRIDGE_APERTURE Mem; - PCI_ROOT_BRIDGE_APERTURE MemAbove4G; + UINT64 Attributes; + UINT64 AllocationAttributes; + PCI_ROOT_BRIDGE_APERTURE Io; + PCI_ROOT_BRIDGE_APERTURE Mem; + PCI_ROOT_BRIDGE_APERTURE MemAbove4G; ZeroMem (&Io, sizeof (Io)); ZeroMem (&Mem, sizeof (Mem)); ZeroMem (&MemAbove4G, sizeof (MemAbove4G)); Attributes = EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO | - EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO | - EFI_PCI_ATTRIBUTE_ISA_IO_16 | - EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO | - EFI_PCI_ATTRIBUTE_VGA_MEMORY | - EFI_PCI_ATTRIBUTE_VGA_IO_16 | - EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16; + EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO | + EFI_PCI_ATTRIBUTE_ISA_IO_16 | + EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO | + EFI_PCI_ATTRIBUTE_VGA_MEMORY | + EFI_PCI_ATTRIBUTE_VGA_IO_16 | + EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16; AllocationAttributes = EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM; if (PcdGet64 (PcdPciMmio64Size) > 0) { AllocationAttributes |= EFI_PCI_HOST_BRIDGE_MEM64_DECODE; - MemAbove4G.Base = PcdGet64 (PcdPciMmio64Base); - MemAbove4G.Limit = PcdGet64 (PcdPciMmio64Base) + - PcdGet64 (PcdPciMmio64Size) - 1; + MemAbove4G.Base = PcdGet64 (PcdPciMmio64Base); + MemAbove4G.Limit = PcdGet64 (PcdPciMmio64Base) + + PcdGet64 (PcdPciMmio64Size) - 1; } else { CopyMem (&MemAbove4G, &mNonExistAperture, sizeof (mNonExistAperture)); } - Io.Base = PcdGet64 (PcdPciIoBase); - Io.Limit = PcdGet64 (PcdPciIoBase) + (PcdGet64 (PcdPciIoSize) - 1); - Mem.Base = PcdGet64 (PcdPciMmio32Base); + Io.Base = PcdGet64 (PcdPciIoBase); + Io.Limit = PcdGet64 (PcdPciIoBase) + (PcdGet64 (PcdPciIoSize) - 1); + Mem.Base = PcdGet64 (PcdPciMmio32Base); Mem.Limit = PcdGet64 (PcdPciMmio32Base) + (PcdGet64 (PcdPciMmio32Size) - 1); return PciHostBridgeUtilityGetRootBridges ( - Count, - Attributes, - AllocationAttributes, - FALSE, - PcdGet16 (PcdOvmfHostBridgePciDevId) != INTEL_Q35_MCH_DEVICE_ID, - 0, - PCI_MAX_BUS, - &Io, - &Mem, - &MemAbove4G, - &mNonExistAperture, - &mNonExistAperture - ); + Count, + Attributes, + AllocationAttributes, + FALSE, + PcdGet16 (PcdOvmfHostBridgePciDevId) != INTEL_Q35_MCH_DEVICE_ID, + 0, + PCI_MAX_BUS, + &Io, + &Mem, + &MemAbove4G, + &mNonExistAperture, + &mNonExistAperture + ); } - /** Free the root bridge instances array returned from PciHostBridgeGetRootBridges(). @@ -94,14 +92,13 @@ PciHostBridgeGetRootBridges ( VOID EFIAPI PciHostBridgeFreeRootBridges ( - PCI_ROOT_BRIDGE *Bridges, - UINTN Count + PCI_ROOT_BRIDGE *Bridges, + UINTN Count ) { PciHostBridgeUtilityFreeRootBridges (Bridges, Count); } - /** Inform the platform that the resource conflict happens. @@ -119,8 +116,8 @@ PciHostBridgeFreeRootBridges ( VOID EFIAPI PciHostBridgeResourceConflict ( - EFI_HANDLE HostBridgeHandle, - VOID *Configuration + EFI_HANDLE HostBridgeHandle, + VOID *Configuration ) { PciHostBridgeUtilityResourceConflict (Configuration); diff --git a/OvmfPkg/Library/PciHostBridgeLibScan/PciHostBridge.h b/OvmfPkg/Library/PciHostBridgeLibScan/PciHostBridge.h index cb05220161..43ab2b2f97 100644 --- a/OvmfPkg/Library/PciHostBridgeLibScan/PciHostBridge.h +++ b/OvmfPkg/Library/PciHostBridgeLibScan/PciHostBridge.h @@ -11,5 +11,5 @@ PCI_ROOT_BRIDGE * ScanForRootBridges ( - UINTN *NumberOfRootBridges -); + UINTN *NumberOfRootBridges + ); diff --git a/OvmfPkg/Library/PciHostBridgeLibScan/PciHostBridgeLib.c b/OvmfPkg/Library/PciHostBridgeLibScan/PciHostBridgeLib.c index ac8d1033df..ddcdd8886d 100644 --- a/OvmfPkg/Library/PciHostBridgeLibScan/PciHostBridgeLib.c +++ b/OvmfPkg/Library/PciHostBridgeLibScan/PciHostBridgeLib.c @@ -24,13 +24,12 @@ PCI_ROOT_BRIDGE * EFIAPI PciHostBridgeGetRootBridges ( - UINTN *Count + UINTN *Count ) { return ScanForRootBridges (Count); } - /** Free the root bridge instances array returned from PciHostBridgeGetRootBridges(). @@ -41,14 +40,13 @@ PciHostBridgeGetRootBridges ( VOID EFIAPI PciHostBridgeFreeRootBridges ( - PCI_ROOT_BRIDGE *Bridges, - UINTN Count + PCI_ROOT_BRIDGE *Bridges, + UINTN Count ) { PciHostBridgeUtilityFreeRootBridges (Bridges, Count); } - /** Inform the platform that the resource conflict happens. @@ -66,8 +64,8 @@ PciHostBridgeFreeRootBridges ( VOID EFIAPI PciHostBridgeResourceConflict ( - EFI_HANDLE HostBridgeHandle, - VOID *Configuration + EFI_HANDLE HostBridgeHandle, + VOID *Configuration ) { PciHostBridgeUtilityResourceConflict (Configuration); diff --git a/OvmfPkg/Library/PciHostBridgeLibScan/ScanForRootBridges.c b/OvmfPkg/Library/PciHostBridgeLibScan/ScanForRootBridges.c index a6126a1aea..5fb02a89b9 100644 --- a/OvmfPkg/Library/PciHostBridgeLibScan/ScanForRootBridges.c +++ b/OvmfPkg/Library/PciHostBridgeLibScan/ScanForRootBridges.c @@ -23,9 +23,9 @@ STATIC VOID PcatPciRootBridgeBarExisted ( - IN UINTN Address, - OUT UINT32 *OriginalValue, - OUT UINT32 *Value + IN UINTN Address, + OUT UINT32 *OriginalValue, + OUT UINT32 *Value ) { // @@ -48,15 +48,15 @@ PcatPciRootBridgeBarExisted ( EnableInterrupts (); } -#define PCI_COMMAND_DECODE ((UINT16)(EFI_PCI_COMMAND_IO_SPACE | \ +#define PCI_COMMAND_DECODE ((UINT16)(EFI_PCI_COMMAND_IO_SPACE |\ EFI_PCI_COMMAND_MEMORY_SPACE)) STATIC VOID PcatPciRootBridgeDecodingDisable ( - IN UINTN Address + IN UINTN Address ) { - UINT16 Value; + UINT16 Value; Value = PciRead16 (Address); if (Value & PCI_COMMAND_DECODE) { @@ -67,59 +67,63 @@ PcatPciRootBridgeDecodingDisable ( STATIC VOID PcatPciRootBridgeParseBars ( - IN UINT16 Command, - IN UINTN Bus, - IN UINTN Device, - IN UINTN Function, - IN UINTN BarOffsetBase, - IN UINTN BarOffsetEnd, - IN PCI_ROOT_BRIDGE_APERTURE *Io, - IN PCI_ROOT_BRIDGE_APERTURE *Mem, - IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G - -) + IN UINT16 Command, + IN UINTN Bus, + IN UINTN Device, + IN UINTN Function, + IN UINTN BarOffsetBase, + IN UINTN BarOffsetEnd, + IN PCI_ROOT_BRIDGE_APERTURE *Io, + IN PCI_ROOT_BRIDGE_APERTURE *Mem, + IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G + + ) { - UINT32 OriginalValue; - UINT32 Value; - UINT32 OriginalUpperValue; - UINT32 UpperValue; - UINT64 Mask; - UINTN Offset; - UINT64 Base; - UINT64 Length; - UINT64 Limit; - PCI_ROOT_BRIDGE_APERTURE *MemAperture; + UINT32 OriginalValue; + UINT32 Value; + UINT32 OriginalUpperValue; + UINT32 UpperValue; + UINT64 Mask; + UINTN Offset; + UINT64 Base; + UINT64 Length; + UINT64 Limit; + PCI_ROOT_BRIDGE_APERTURE *MemAperture; // Disable address decoding for every device before OVMF starts sizing it PcatPciRootBridgeDecodingDisable ( PCI_LIB_ADDRESS (Bus, Device, Function, PCI_COMMAND_OFFSET) - ); + ); for (Offset = BarOffsetBase; Offset < BarOffsetEnd; Offset += sizeof (UINT32)) { PcatPciRootBridgeBarExisted ( PCI_LIB_ADDRESS (Bus, Device, Function, Offset), - &OriginalValue, &Value - ); + &OriginalValue, + &Value + ); if (Value == 0) { continue; } + if ((Value & BIT0) == BIT0) { // // IO Bar // if (Command & EFI_PCI_COMMAND_IO_SPACE) { - Mask = 0xfffffffc; - Base = OriginalValue & Mask; + Mask = 0xfffffffc; + Base = OriginalValue & Mask; Length = ((~(Value & Mask)) & Mask) + 0x04; if (!(Value & 0xFFFF0000)) { Length &= 0x0000FFFF; } + Limit = Base + Length - 1; if (Base < Limit) { if (Io->Base > Base) { Io->Base = Base; } + if (Io->Limit < Limit) { Io->Limit = Limit; } @@ -130,9 +134,8 @@ PcatPciRootBridgeParseBars ( // Mem Bar // if (Command & EFI_PCI_COMMAND_MEMORY_SPACE) { - - Mask = 0xfffffff0; - Base = OriginalValue & Mask; + Mask = 0xfffffff0; + Base = OriginalValue & Mask; Length = Value & Mask; if ((Value & (BIT1 | BIT2)) == 0) { @@ -151,10 +154,10 @@ PcatPciRootBridgeParseBars ( PCI_LIB_ADDRESS (Bus, Device, Function, Offset), &OriginalUpperValue, &UpperValue - ); + ); - Base = Base | LShiftU64 ((UINT64) OriginalUpperValue, 32); - Length = Length | LShiftU64 ((UINT64) UpperValue, 32); + Base = Base | LShiftU64 ((UINT64)OriginalUpperValue, 32); + Length = Length | LShiftU64 ((UINT64)UpperValue, 32); Length = (~Length) + 1; if (Base < BASE_4GB) { @@ -169,6 +172,7 @@ PcatPciRootBridgeParseBars ( if (MemAperture->Base > Base) { MemAperture->Base = Base; } + if (MemAperture->Limit < Limit) { MemAperture->Limit = Limit; } @@ -178,31 +182,30 @@ PcatPciRootBridgeParseBars ( } } -STATIC PCI_ROOT_BRIDGE_APERTURE mNonExistAperture = { MAX_UINT64, 0 }; +STATIC PCI_ROOT_BRIDGE_APERTURE mNonExistAperture = { MAX_UINT64, 0 }; PCI_ROOT_BRIDGE * ScanForRootBridges ( - UINTN *NumberOfRootBridges + UINTN *NumberOfRootBridges ) { - UINTN PrimaryBus; - UINTN SubBus; - UINT8 Device; - UINT8 Function; - UINTN NumberOfDevices; - UINTN Address; - PCI_TYPE01 Pci; - UINT64 Attributes; - UINT64 Base; - UINT64 Limit; - UINT64 Value; - PCI_ROOT_BRIDGE_APERTURE Io, Mem, MemAbove4G, *MemAperture; - PCI_ROOT_BRIDGE *RootBridges; - UINTN BarOffsetEnd; - + UINTN PrimaryBus; + UINTN SubBus; + UINT8 Device; + UINT8 Function; + UINTN NumberOfDevices; + UINTN Address; + PCI_TYPE01 Pci; + UINT64 Attributes; + UINT64 Base; + UINT64 Limit; + UINT64 Value; + PCI_ROOT_BRIDGE_APERTURE Io, Mem, MemAbove4G, *MemAperture; + PCI_ROOT_BRIDGE *RootBridges; + UINTN BarOffsetEnd; *NumberOfRootBridges = 0; - RootBridges = NULL; + RootBridges = NULL; // // After scanning all the PCI devices on the PCI root bridge's primary bus, @@ -210,7 +213,7 @@ ScanForRootBridges ( // root bridge's subordinate bus number + 1. // for (PrimaryBus = 0; PrimaryBus <= PCI_MAX_BUS; PrimaryBus = SubBus + 1) { - SubBus = PrimaryBus; + SubBus = PrimaryBus; Attributes = 0; ZeroMem (&Io, sizeof (Io)); @@ -221,9 +224,7 @@ ScanForRootBridges ( // Scan all the PCI devices on the primary bus of the PCI root bridge // for (Device = 0, NumberOfDevices = 0; Device <= PCI_MAX_DEVICE; Device++) { - for (Function = 0; Function <= PCI_MAX_FUNC; Function++) { - // // Compute the PCI configuration address of the PCI device to probe // @@ -290,16 +291,18 @@ ScanForRootBridges ( // Get the I/O range that the PPB is decoding // Value = Pci.Bridge.IoBase & 0x0f; - Base = ((UINT32) Pci.Bridge.IoBase & 0xf0) << 8; - Limit = (((UINT32) Pci.Bridge.IoLimit & 0xf0) << 8) | 0x0fff; + Base = ((UINT32)Pci.Bridge.IoBase & 0xf0) << 8; + Limit = (((UINT32)Pci.Bridge.IoLimit & 0xf0) << 8) | 0x0fff; if (Value == BIT0) { - Base |= ((UINT32) Pci.Bridge.IoBaseUpper16 << 16); - Limit |= ((UINT32) Pci.Bridge.IoLimitUpper16 << 16); + Base |= ((UINT32)Pci.Bridge.IoBaseUpper16 << 16); + Limit |= ((UINT32)Pci.Bridge.IoLimitUpper16 << 16); } + if (Base < Limit) { if (Io.Base > Base) { Io.Base = Base; } + if (Io.Limit < Limit) { Io.Limit = Limit; } @@ -308,12 +311,13 @@ ScanForRootBridges ( // // Get the Memory range that the PPB is decoding // - Base = ((UINT32) Pci.Bridge.MemoryBase & 0xfff0) << 16; - Limit = (((UINT32) Pci.Bridge.MemoryLimit & 0xfff0) << 16) | 0xfffff; + Base = ((UINT32)Pci.Bridge.MemoryBase & 0xfff0) << 16; + Limit = (((UINT32)Pci.Bridge.MemoryLimit & 0xfff0) << 16) | 0xfffff; if (Base < Limit) { if (Mem.Base > Base) { Mem.Base = Base; } + if (Mem.Limit < Limit) { Mem.Limit = Limit; } @@ -324,19 +328,21 @@ ScanForRootBridges ( // and merge it into Memory range // Value = Pci.Bridge.PrefetchableMemoryBase & 0x0f; - Base = ((UINT32) Pci.Bridge.PrefetchableMemoryBase & 0xfff0) << 16; - Limit = (((UINT32) Pci.Bridge.PrefetchableMemoryLimit & 0xfff0) + Base = ((UINT32)Pci.Bridge.PrefetchableMemoryBase & 0xfff0) << 16; + Limit = (((UINT32)Pci.Bridge.PrefetchableMemoryLimit & 0xfff0) << 16) | 0xfffff; MemAperture = &Mem; if (Value == BIT0) { - Base |= LShiftU64 (Pci.Bridge.PrefetchableBaseUpper32, 32); - Limit |= LShiftU64 (Pci.Bridge.PrefetchableLimitUpper32, 32); + Base |= LShiftU64 (Pci.Bridge.PrefetchableBaseUpper32, 32); + Limit |= LShiftU64 (Pci.Bridge.PrefetchableLimitUpper32, 32); MemAperture = &MemAbove4G; } + if (Base < Limit) { if (MemAperture->Base > Base) { MemAperture->Base = Base; } + if (MemAperture->Limit < Limit) { MemAperture->Limit = Limit; } @@ -346,18 +352,22 @@ ScanForRootBridges ( // Look at the PPB Configuration for legacy decoding attributes // if ((Pci.Bridge.BridgeControl & EFI_PCI_BRIDGE_CONTROL_ISA) - == EFI_PCI_BRIDGE_CONTROL_ISA) { + == EFI_PCI_BRIDGE_CONTROL_ISA) + { Attributes |= EFI_PCI_ATTRIBUTE_ISA_IO; Attributes |= EFI_PCI_ATTRIBUTE_ISA_IO_16; Attributes |= EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO; } + if ((Pci.Bridge.BridgeControl & EFI_PCI_BRIDGE_CONTROL_VGA) - == EFI_PCI_BRIDGE_CONTROL_VGA) { + == EFI_PCI_BRIDGE_CONTROL_VGA) + { Attributes |= EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO; Attributes |= EFI_PCI_ATTRIBUTE_VGA_MEMORY; Attributes |= EFI_PCI_ATTRIBUTE_VGA_IO; if ((Pci.Bridge.BridgeControl & EFI_PCI_BRIDGE_CONTROL_VGA_16) - != 0) { + != 0) + { Attributes |= EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16; Attributes |= EFI_PCI_ATTRIBUTE_VGA_IO_16; } @@ -382,21 +392,28 @@ ScanForRootBridges ( OFFSET_OF (PCI_TYPE00, Device.Bar), BarOffsetEnd, &Io, - &Mem, &MemAbove4G - ); + &Mem, + &MemAbove4G + ); // // See if the PCI device is an IDE controller // - if (IS_CLASS2 (&Pci, PCI_CLASS_MASS_STORAGE, - PCI_CLASS_MASS_STORAGE_IDE)) { + if (IS_CLASS2 ( + &Pci, + PCI_CLASS_MASS_STORAGE, + PCI_CLASS_MASS_STORAGE_IDE + )) + { if (Pci.Hdr.ClassCode[0] & 0x80) { Attributes |= EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO; Attributes |= EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO; } + if (Pci.Hdr.ClassCode[0] & 0x01) { Attributes |= EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO; } + if (Pci.Hdr.ClassCode[0] & 0x04) { Attributes |= EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO; } @@ -408,7 +425,8 @@ ScanForRootBridges ( // if (IS_CLASS2 (&Pci, PCI_CLASS_OLD, PCI_CLASS_OLD_VGA) || IS_CLASS2 (&Pci, PCI_CLASS_DISPLAY, PCI_CLASS_DISPLAY_VGA) - ) { + ) + { Attributes |= EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO; Attributes |= EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16; Attributes |= EFI_PCI_ATTRIBUTE_VGA_MEMORY; @@ -421,9 +439,10 @@ ScanForRootBridges ( // or ISA_POSITIVE_DECODE Bridge device // if (Pci.Hdr.ClassCode[2] == PCI_CLASS_BRIDGE) { - if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA || - Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_EISA || - Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA_PDECODE) { + if ((Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA) || + (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_EISA) || + (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA_PDECODE)) + { Attributes |= EFI_PCI_ATTRIBUTE_ISA_IO; Attributes |= EFI_PCI_ATTRIBUTE_ISA_IO_16; Attributes |= EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO; @@ -434,7 +453,7 @@ ScanForRootBridges ( // If this device is not a multi function device, then skip the rest // of this PCI device // - if (Function == 0 && !IS_PCI_MULTI_FUNC (&Pci)) { + if ((Function == 0) && !IS_PCI_MULTI_FUNC (&Pci)) { break; } } @@ -446,18 +465,26 @@ ScanForRootBridges ( // if (NumberOfDevices > 0) { RootBridges = ReallocatePool ( - (*NumberOfRootBridges) * sizeof (PCI_ROOT_BRIDGE), - (*NumberOfRootBridges + 1) * sizeof (PCI_ROOT_BRIDGE), - RootBridges - ); + (*NumberOfRootBridges) * sizeof (PCI_ROOT_BRIDGE), + (*NumberOfRootBridges + 1) * sizeof (PCI_ROOT_BRIDGE), + RootBridges + ); ASSERT (RootBridges != NULL); PciHostBridgeUtilityInitRootBridge ( - Attributes, Attributes, 0, - FALSE, TRUE /* NoExtendedConfigSpace */, - (UINT8) PrimaryBus, (UINT8) SubBus, - &Io, &Mem, &MemAbove4G, &mNonExistAperture, &mNonExistAperture, + Attributes, + Attributes, + 0, + FALSE, + TRUE /* NoExtendedConfigSpace */, + (UINT8)PrimaryBus, + (UINT8)SubBus, + &Io, + &Mem, + &MemAbove4G, + &mNonExistAperture, + &mNonExistAperture, &RootBridges[*NumberOfRootBridges] - ); + ); RootBridges[*NumberOfRootBridges].ResourceAssigned = TRUE; // // Increment the index for the next PCI Root Bridge diff --git a/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c b/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c index d2296f3308..92e1ea812f 100644 --- a/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c +++ b/OvmfPkg/Library/PciHostBridgeUtilityLib/PciHostBridgeUtilityLib.c @@ -20,35 +20,32 @@ #include #include - #pragma pack(1) typedef struct { - ACPI_HID_DEVICE_PATH AcpiDevicePath; - EFI_DEVICE_PATH_PROTOCOL EndDevicePath; + ACPI_HID_DEVICE_PATH AcpiDevicePath; + EFI_DEVICE_PATH_PROTOCOL EndDevicePath; } OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH; #pragma pack () - GLOBAL_REMOVE_IF_UNREFERENCED -CHAR16 *mPciHostBridgeUtilityLibAcpiAddressSpaceTypeStr[] = { +CHAR16 *mPciHostBridgeUtilityLibAcpiAddressSpaceTypeStr[] = { L"Mem", L"I/O", L"Bus" }; - STATIC CONST -OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH mRootBridgeDevicePathTemplate = { +OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH mRootBridgeDevicePathTemplate = { { { ACPI_DEVICE_PATH, ACPI_DP, { - (UINT8) (sizeof(ACPI_HID_DEVICE_PATH)), - (UINT8) ((sizeof(ACPI_HID_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (ACPI_HID_DEVICE_PATH)), + (UINT8)((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) } }, - EISA_PNP_ID(0x0A03), // HID - 0 // UID + EISA_PNP_ID (0x0A03), // HID + 0 // UID }, { @@ -61,7 +58,6 @@ OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH mRootBridgeDevicePathTemplate = { } }; - /** Utility function to initialize a PCI_ROOT_BRIDGE structure. @@ -112,22 +108,22 @@ OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH mRootBridgeDevicePathTemplate = { EFI_STATUS EFIAPI PciHostBridgeUtilityInitRootBridge ( - IN UINT64 Supports, - IN UINT64 Attributes, - IN UINT64 AllocAttributes, - IN BOOLEAN DmaAbove4G, - IN BOOLEAN NoExtendedConfigSpace, - IN UINT8 RootBusNumber, - IN UINT8 MaxSubBusNumber, - IN PCI_ROOT_BRIDGE_APERTURE *Io, - IN PCI_ROOT_BRIDGE_APERTURE *Mem, - IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G, - IN PCI_ROOT_BRIDGE_APERTURE *PMem, - IN PCI_ROOT_BRIDGE_APERTURE *PMemAbove4G, - OUT PCI_ROOT_BRIDGE *RootBus + IN UINT64 Supports, + IN UINT64 Attributes, + IN UINT64 AllocAttributes, + IN BOOLEAN DmaAbove4G, + IN BOOLEAN NoExtendedConfigSpace, + IN UINT8 RootBusNumber, + IN UINT8 MaxSubBusNumber, + IN PCI_ROOT_BRIDGE_APERTURE *Io, + IN PCI_ROOT_BRIDGE_APERTURE *Mem, + IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G, + IN PCI_ROOT_BRIDGE_APERTURE *PMem, + IN PCI_ROOT_BRIDGE_APERTURE *PMemAbove4G, + OUT PCI_ROOT_BRIDGE *RootBus ) { - OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH *DevicePath; + OVMF_PCI_ROOT_BRIDGE_DEVICE_PATH *DevicePath; // // Be safe if other fields are added to PCI_ROOT_BRIDGE later. @@ -142,8 +138,8 @@ PciHostBridgeUtilityInitRootBridge ( RootBus->DmaAbove4G = DmaAbove4G; RootBus->AllocationAttributes = AllocAttributes; - RootBus->Bus.Base = RootBusNumber; - RootBus->Bus.Limit = MaxSubBusNumber; + RootBus->Bus.Base = RootBusNumber; + RootBus->Bus.Limit = MaxSubBusNumber; CopyMem (&RootBus->Io, Io, sizeof (*Io)); CopyMem (&RootBus->Mem, Mem, sizeof (*Mem)); CopyMem (&RootBus->MemAbove4G, MemAbove4G, sizeof (*MemAbove4G)); @@ -152,22 +148,28 @@ PciHostBridgeUtilityInitRootBridge ( RootBus->NoExtendedConfigSpace = NoExtendedConfigSpace; - DevicePath = AllocateCopyPool (sizeof mRootBridgeDevicePathTemplate, - &mRootBridgeDevicePathTemplate); + DevicePath = AllocateCopyPool ( + sizeof mRootBridgeDevicePathTemplate, + &mRootBridgeDevicePathTemplate + ); if (DevicePath == NULL) { DEBUG ((DEBUG_ERROR, "%a: %r\n", __FUNCTION__, EFI_OUT_OF_RESOURCES)); return EFI_OUT_OF_RESOURCES; } + DevicePath->AcpiDevicePath.UID = RootBusNumber; - RootBus->DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)DevicePath; + RootBus->DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)DevicePath; - DEBUG ((DEBUG_INFO, + DEBUG (( + DEBUG_INFO, "%a: populated root bus %d, with room for %d subordinate bus(es)\n", - __FUNCTION__, RootBusNumber, MaxSubBusNumber - RootBusNumber)); + __FUNCTION__, + RootBusNumber, + MaxSubBusNumber - RootBusNumber + )); return EFI_SUCCESS; } - /** Utility function to uninitialize a PCI_ROOT_BRIDGE structure set up with PciHostBridgeUtilityInitRootBridge(). @@ -180,13 +182,12 @@ PciHostBridgeUtilityInitRootBridge ( VOID EFIAPI PciHostBridgeUtilityUninitRootBridge ( - IN PCI_ROOT_BRIDGE *RootBus + IN PCI_ROOT_BRIDGE *RootBus ) { FreePool (RootBus->DevicePath); } - /** Utility function to return all the root bridge instances in an array. @@ -219,34 +220,40 @@ PciHostBridgeUtilityUninitRootBridge ( PCI_ROOT_BRIDGE * EFIAPI PciHostBridgeUtilityGetRootBridges ( - OUT UINTN *Count, - IN UINT64 Attributes, - IN UINT64 AllocationAttributes, - IN BOOLEAN DmaAbove4G, - IN BOOLEAN NoExtendedConfigSpace, - IN UINTN BusMin, - IN UINTN BusMax, - IN PCI_ROOT_BRIDGE_APERTURE *Io, - IN PCI_ROOT_BRIDGE_APERTURE *Mem, - IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G, - IN PCI_ROOT_BRIDGE_APERTURE *PMem, - IN PCI_ROOT_BRIDGE_APERTURE *PMemAbove4G + OUT UINTN *Count, + IN UINT64 Attributes, + IN UINT64 AllocationAttributes, + IN BOOLEAN DmaAbove4G, + IN BOOLEAN NoExtendedConfigSpace, + IN UINTN BusMin, + IN UINTN BusMax, + IN PCI_ROOT_BRIDGE_APERTURE *Io, + IN PCI_ROOT_BRIDGE_APERTURE *Mem, + IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G, + IN PCI_ROOT_BRIDGE_APERTURE *PMem, + IN PCI_ROOT_BRIDGE_APERTURE *PMemAbove4G ) { - EFI_STATUS Status; - FIRMWARE_CONFIG_ITEM FwCfgItem; - UINTN FwCfgSize; - UINT64 ExtraRootBridges; - PCI_ROOT_BRIDGE *Bridges; - UINTN Initialized; - UINTN LastRootBridgeNumber; - UINTN RootBridgeNumber; + EFI_STATUS Status; + FIRMWARE_CONFIG_ITEM FwCfgItem; + UINTN FwCfgSize; + UINT64 ExtraRootBridges; + PCI_ROOT_BRIDGE *Bridges; + UINTN Initialized; + UINTN LastRootBridgeNumber; + UINTN RootBridgeNumber; *Count = 0; - if (BusMin > BusMax || BusMax > PCI_MAX_BUS) { - DEBUG ((DEBUG_ERROR, "%a: invalid bus range with BusMin %Lu and BusMax " - "%Lu\n", __FUNCTION__, (UINT64)BusMin, (UINT64)BusMax)); + if ((BusMin > BusMax) || (BusMax > PCI_MAX_BUS)) { + DEBUG (( + DEBUG_ERROR, + "%a: invalid bus range with BusMin %Lu and BusMax " + "%Lu\n", + __FUNCTION__, + (UINT64)BusMin, + (UINT64)BusMax + )); return NULL; } @@ -255,7 +262,7 @@ PciHostBridgeUtilityGetRootBridges ( // search below. If there is no hint, the feature is missing. // Status = QemuFwCfgFindFile ("etc/extra-pci-roots", &FwCfgItem, &FwCfgSize); - if (EFI_ERROR (Status) || FwCfgSize != sizeof ExtraRootBridges) { + if (EFI_ERROR (Status) || (FwCfgSize != sizeof ExtraRootBridges)) { ExtraRootBridges = 0; } else { QemuFwCfgSelectItem (FwCfgItem); @@ -269,12 +276,22 @@ PciHostBridgeUtilityGetRootBridges ( // invalid behavior. // if (ExtraRootBridges > BusMax - BusMin) { - DEBUG ((DEBUG_ERROR, "%a: invalid count of extra root buses (%Lu) " - "reported by QEMU\n", __FUNCTION__, ExtraRootBridges)); + DEBUG (( + DEBUG_ERROR, + "%a: invalid count of extra root buses (%Lu) " + "reported by QEMU\n", + __FUNCTION__, + ExtraRootBridges + )); return NULL; } - DEBUG ((DEBUG_INFO, "%a: %Lu extra root buses reported by QEMU\n", - __FUNCTION__, ExtraRootBridges)); + + DEBUG (( + DEBUG_INFO, + "%a: %Lu extra root buses reported by QEMU\n", + __FUNCTION__, + ExtraRootBridges + )); } // @@ -285,6 +302,7 @@ PciHostBridgeUtilityGetRootBridges ( DEBUG ((DEBUG_ERROR, "%a: %r\n", __FUNCTION__, EFI_OUT_OF_RESOURCES)); return NULL; } + Initialized = 0; // @@ -299,15 +317,24 @@ PciHostBridgeUtilityGetRootBridges ( // for (RootBridgeNumber = BusMin + 1; RootBridgeNumber <= BusMax && Initialized < ExtraRootBridges; - ++RootBridgeNumber) { - UINTN Device; + ++RootBridgeNumber) + { + UINTN Device; for (Device = 0; Device <= PCI_MAX_DEVICE; ++Device) { - if (PciRead16 (PCI_LIB_ADDRESS (RootBridgeNumber, Device, 0, - PCI_VENDOR_ID_OFFSET)) != MAX_UINT16) { + if (PciRead16 ( + PCI_LIB_ADDRESS ( + RootBridgeNumber, + Device, + 0, + PCI_VENDOR_ID_OFFSET + ) + ) != MAX_UINT16) + { break; } } + if (Device <= PCI_MAX_DEVICE) { // // Found the next root bus. We can now install the *previous* one, @@ -315,23 +342,24 @@ PciHostBridgeUtilityGetRootBridges ( // subordinate buses that might exist behind PCI bridges hanging off it. // Status = PciHostBridgeUtilityInitRootBridge ( - Attributes, - Attributes, - AllocationAttributes, - DmaAbove4G, - NoExtendedConfigSpace, - (UINT8) LastRootBridgeNumber, - (UINT8) (RootBridgeNumber - 1), - Io, - Mem, - MemAbove4G, - PMem, - PMemAbove4G, - &Bridges[Initialized] - ); + Attributes, + Attributes, + AllocationAttributes, + DmaAbove4G, + NoExtendedConfigSpace, + (UINT8)LastRootBridgeNumber, + (UINT8)(RootBridgeNumber - 1), + Io, + Mem, + MemAbove4G, + PMem, + PMemAbove4G, + &Bridges[Initialized] + ); if (EFI_ERROR (Status)) { goto FreeBridges; } + ++Initialized; LastRootBridgeNumber = RootBridgeNumber; } @@ -342,23 +370,24 @@ PciHostBridgeUtilityGetRootBridges ( // we've found no extra root buses). // Status = PciHostBridgeUtilityInitRootBridge ( - Attributes, - Attributes, - AllocationAttributes, - DmaAbove4G, - NoExtendedConfigSpace, - (UINT8) LastRootBridgeNumber, - (UINT8) BusMax, - Io, - Mem, - MemAbove4G, - PMem, - PMemAbove4G, - &Bridges[Initialized] - ); + Attributes, + Attributes, + AllocationAttributes, + DmaAbove4G, + NoExtendedConfigSpace, + (UINT8)LastRootBridgeNumber, + (UINT8)BusMax, + Io, + Mem, + MemAbove4G, + PMem, + PMemAbove4G, + &Bridges[Initialized] + ); if (EFI_ERROR (Status)) { goto FreeBridges; } + ++Initialized; *Count = Initialized; @@ -374,7 +403,6 @@ FreeBridges: return NULL; } - /** Utility function to free root bridge instances array from PciHostBridgeUtilityGetRootBridges(). @@ -385,13 +413,14 @@ FreeBridges: VOID EFIAPI PciHostBridgeUtilityFreeRootBridges ( - IN PCI_ROOT_BRIDGE *Bridges, - IN UINTN Count + IN PCI_ROOT_BRIDGE *Bridges, + IN UINTN Count ) { - if (Bridges == NULL && Count == 0) { + if ((Bridges == NULL) && (Count == 0)) { return; } + ASSERT (Bridges != NULL && Count > 0); do { @@ -402,7 +431,6 @@ PciHostBridgeUtilityFreeRootBridges ( FreePool (Bridges); } - /** Utility function to inform the platform that the resource conflict happens. @@ -423,38 +451,46 @@ PciHostBridgeUtilityResourceConflict ( IN VOID *Configuration ) { - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor; - UINTN RootBridgeIndex; + EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor; + UINTN RootBridgeIndex; + DEBUG ((DEBUG_ERROR, "PciHostBridge: Resource conflict happens!\n")); RootBridgeIndex = 0; - Descriptor = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Configuration; + Descriptor = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Configuration; while (Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR) { DEBUG ((DEBUG_ERROR, "RootBridge[%d]:\n", RootBridgeIndex++)); - for (; Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR; Descriptor++) { - ASSERT (Descriptor->ResType < - ARRAY_SIZE (mPciHostBridgeUtilityLibAcpiAddressSpaceTypeStr) - ); - DEBUG ((DEBUG_ERROR, " %s: Length/Alignment = 0x%lx / 0x%lx\n", - mPciHostBridgeUtilityLibAcpiAddressSpaceTypeStr[Descriptor->ResType], - Descriptor->AddrLen, Descriptor->AddrRangeMax - )); + for ( ; Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR; Descriptor++) { + ASSERT ( + Descriptor->ResType < + ARRAY_SIZE (mPciHostBridgeUtilityLibAcpiAddressSpaceTypeStr) + ); + DEBUG (( + DEBUG_ERROR, + " %s: Length/Alignment = 0x%lx / 0x%lx\n", + mPciHostBridgeUtilityLibAcpiAddressSpaceTypeStr[Descriptor->ResType], + Descriptor->AddrLen, + Descriptor->AddrRangeMax + )); if (Descriptor->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM) { - DEBUG ((DEBUG_ERROR, " Granularity/SpecificFlag = %ld / %02x%s\n", - Descriptor->AddrSpaceGranularity, Descriptor->SpecificFlag, - ((Descriptor->SpecificFlag & - EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE - ) != 0) ? L" (Prefetchable)" : L"" - )); + DEBUG (( + DEBUG_ERROR, + " Granularity/SpecificFlag = %ld / %02x%s\n", + Descriptor->AddrSpaceGranularity, + Descriptor->SpecificFlag, + ((Descriptor->SpecificFlag & + EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE + ) != 0) ? L" (Prefetchable)" : L"" + )); } } + // // Skip the END descriptor for root bridge // ASSERT (Descriptor->Desc == ACPI_END_TAG_DESCRIPTOR); Descriptor = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)( - (EFI_ACPI_END_TAG_DESCRIPTOR *)Descriptor + 1 - ); + (EFI_ACPI_END_TAG_DESCRIPTOR *)Descriptor + 1 + ); } } - diff --git a/OvmfPkg/Library/PlatformBmPrintScLib/StatusCodeHandler.c b/OvmfPkg/Library/PlatformBmPrintScLib/StatusCodeHandler.c index 594ab105e2..065673d904 100644 --- a/OvmfPkg/Library/PlatformBmPrintScLib/StatusCodeHandler.c +++ b/OvmfPkg/Library/PlatformBmPrintScLib/StatusCodeHandler.c @@ -36,16 +36,14 @@ #include - // // Convenience variables for the status codes that are relevant for LoadImage() // and StartImage() preparations and return codes. // -STATIC EFI_STATUS_CODE_VALUE mLoadPrep; -STATIC EFI_STATUS_CODE_VALUE mLoadFail; -STATIC EFI_STATUS_CODE_VALUE mStartPrep; -STATIC EFI_STATUS_CODE_VALUE mStartFail; - +STATIC EFI_STATUS_CODE_VALUE mLoadPrep; +STATIC EFI_STATUS_CODE_VALUE mLoadFail; +STATIC EFI_STATUS_CODE_VALUE mStartPrep; +STATIC EFI_STATUS_CODE_VALUE mStartFail; /** Handle status codes reported through ReportStatusCodeLib / @@ -79,29 +77,31 @@ STATIC EFI_STATUS EFIAPI HandleStatusCode ( - IN EFI_STATUS_CODE_TYPE CodeType, - IN EFI_STATUS_CODE_VALUE Value, - IN UINT32 Instance, - IN EFI_GUID *CallerId, - IN EFI_STATUS_CODE_DATA *Data + IN EFI_STATUS_CODE_TYPE CodeType, + IN EFI_STATUS_CODE_VALUE Value, + IN UINT32 Instance, + IN EFI_GUID *CallerId, + IN EFI_STATUS_CODE_DATA *Data ) { - UINTN VariableSize; - UINT16 BootCurrent; - EFI_STATUS Status; - CHAR16 BootOptionName[ARRAY_SIZE (L"Boot####")]; - EFI_BOOT_MANAGER_LOAD_OPTION BmBootOption; - BOOLEAN DevPathStringIsDynamic; - CHAR16 *DevPathString; + UINTN VariableSize; + UINT16 BootCurrent; + EFI_STATUS Status; + CHAR16 BootOptionName[ARRAY_SIZE (L"Boot####")]; + EFI_BOOT_MANAGER_LOAD_OPTION BmBootOption; + BOOLEAN DevPathStringIsDynamic; + CHAR16 *DevPathString; // // Ignore all status codes that are irrelevant for LoadImage() and // StartImage() preparations and return codes. // - if (Value != mLoadPrep && Value != mLoadFail && - Value != mStartPrep && Value != mStartFail) { + if ((Value != mLoadPrep) && (Value != mLoadFail) && + (Value != mStartPrep) && (Value != mStartFail)) + { return EFI_SUCCESS; } + // // Ignore status codes that are not reported by the same containing module. // @@ -112,13 +112,18 @@ HandleStatusCode ( // // Sanity-check Data in case of failure reports. // - if ((Value == mLoadFail || Value == mStartFail) && - (Data == NULL || - Data->HeaderSize != sizeof *Data || - Data->Size != sizeof (EFI_RETURN_STATUS_EXTENDED_DATA) - sizeof *Data || - !CompareGuid (&Data->Type, &gEfiStatusCodeSpecificDataGuid))) { - DEBUG ((DEBUG_ERROR, "%a:%a: malformed Data\n", gEfiCallerBaseName, - __FUNCTION__)); + if (((Value == mLoadFail) || (Value == mStartFail)) && + ((Data == NULL) || + (Data->HeaderSize != sizeof *Data) || + (Data->Size != sizeof (EFI_RETURN_STATUS_EXTENDED_DATA) - sizeof *Data) || + !CompareGuid (&Data->Type, &gEfiStatusCodeSpecificDataGuid))) + { + DEBUG (( + DEBUG_ERROR, + "%a:%a: malformed Data\n", + gEfiCallerBaseName, + __FUNCTION__ + )); return EFI_INVALID_PARAMETER; } @@ -126,33 +131,59 @@ HandleStatusCode ( // Get the number of the Boot#### option that the status code applies to. // VariableSize = sizeof BootCurrent; - Status = gRT->GetVariable (EFI_BOOT_CURRENT_VARIABLE_NAME, - &gEfiGlobalVariableGuid, NULL /* Attributes */, - &VariableSize, &BootCurrent); + Status = gRT->GetVariable ( + EFI_BOOT_CURRENT_VARIABLE_NAME, + &gEfiGlobalVariableGuid, + NULL /* Attributes */, + &VariableSize, + &BootCurrent + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a:%a: failed to get %g:\"%s\": %r\n", - gEfiCallerBaseName, __FUNCTION__, &gEfiGlobalVariableGuid, - EFI_BOOT_CURRENT_VARIABLE_NAME, Status)); + DEBUG (( + DEBUG_ERROR, + "%a:%a: failed to get %g:\"%s\": %r\n", + gEfiCallerBaseName, + __FUNCTION__, + &gEfiGlobalVariableGuid, + EFI_BOOT_CURRENT_VARIABLE_NAME, + Status + )); return Status; } + if (VariableSize != sizeof BootCurrent) { - DEBUG ((DEBUG_ERROR, "%a:%a: got %Lu bytes for %g:\"%s\", expected %Lu\n", - gEfiCallerBaseName, __FUNCTION__, (UINT64)VariableSize, - &gEfiGlobalVariableGuid, EFI_BOOT_CURRENT_VARIABLE_NAME, - (UINT64)sizeof BootCurrent)); + DEBUG (( + DEBUG_ERROR, + "%a:%a: got %Lu bytes for %g:\"%s\", expected %Lu\n", + gEfiCallerBaseName, + __FUNCTION__, + (UINT64)VariableSize, + &gEfiGlobalVariableGuid, + EFI_BOOT_CURRENT_VARIABLE_NAME, + (UINT64)sizeof BootCurrent + )); return EFI_INCOMPATIBLE_VERSION; } // // Get the Boot#### option that the status code applies to. // - UnicodeSPrint (BootOptionName, sizeof BootOptionName, L"Boot%04x", - BootCurrent); + UnicodeSPrint ( + BootOptionName, + sizeof BootOptionName, + L"Boot%04x", + BootCurrent + ); Status = EfiBootManagerVariableToLoadOption (BootOptionName, &BmBootOption); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, + DEBUG (( + DEBUG_ERROR, "%a:%a: EfiBootManagerVariableToLoadOption(\"%s\"): %r\n", - gEfiCallerBaseName, __FUNCTION__, BootOptionName, Status)); + gEfiCallerBaseName, + __FUNCTION__, + BootOptionName, + Status + )); return Status; } @@ -160,20 +191,20 @@ HandleStatusCode ( // Format the device path. // DevPathStringIsDynamic = TRUE; - DevPathString = ConvertDevicePathToText ( - BmBootOption.FilePath, - FALSE, // DisplayOnly - FALSE // AllowShortcuts - ); + DevPathString = ConvertDevicePathToText ( + BmBootOption.FilePath, + FALSE, // DisplayOnly + FALSE // AllowShortcuts + ); if (DevPathString == NULL) { DevPathStringIsDynamic = FALSE; - DevPathString = L""; + DevPathString = L""; } // // Print the message to the console. // - if (Value == mLoadPrep || Value == mStartPrep) { + if ((Value == mLoadPrep) || (Value == mStartPrep)) { Print ( L"%a: %a %s \"%s\" from %s\n", gEfiCallerBaseName, @@ -200,11 +231,11 @@ HandleStatusCode ( if (DevPathStringIsDynamic) { FreePool (DevPathString); } + EfiBootManagerFreeLoadOption (&BmBootOption); return EFI_SUCCESS; } - /** Unregister HandleStatusCode() at ExitBootServices(). @@ -219,17 +250,16 @@ STATIC VOID EFIAPI UnregisterAtExitBootServices ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - EFI_RSC_HANDLER_PROTOCOL *StatusCodeRouter; + EFI_RSC_HANDLER_PROTOCOL *StatusCodeRouter; StatusCodeRouter = Context; StatusCodeRouter->Unregister (HandleStatusCode); } - /** Register a status code handler for printing the Boot Manager's LoadImage() and StartImage() preparations, and return codes, to the UEFI console. @@ -246,12 +276,15 @@ PlatformBmPrintScRegisterHandler ( VOID ) { - EFI_STATUS Status; - EFI_RSC_HANDLER_PROTOCOL *StatusCodeRouter; - EFI_EVENT ExitBootEvent; - - Status = gBS->LocateProtocol (&gEfiRscHandlerProtocolGuid, - NULL /* Registration */, (VOID **)&StatusCodeRouter); + EFI_STATUS Status; + EFI_RSC_HANDLER_PROTOCOL *StatusCodeRouter; + EFI_EVENT ExitBootEvent; + + Status = gBS->LocateProtocol ( + &gEfiRscHandlerProtocolGuid, + NULL /* Registration */, + (VOID **)&StatusCodeRouter + ); ASSERT_EFI_ERROR (Status); if (EFI_ERROR (Status)) { return Status; @@ -260,9 +293,9 @@ PlatformBmPrintScRegisterHandler ( // // Set the EFI_STATUS_CODE_VALUE convenience variables. // - mLoadPrep = PcdGet32 (PcdProgressCodeOsLoaderLoad); - mLoadFail = (EFI_SOFTWARE_DXE_BS_DRIVER | - EFI_SW_DXE_BS_EC_BOOT_OPTION_LOAD_ERROR); + mLoadPrep = PcdGet32 (PcdProgressCodeOsLoaderLoad); + mLoadFail = (EFI_SOFTWARE_DXE_BS_DRIVER | + EFI_SW_DXE_BS_EC_BOOT_OPTION_LOAD_ERROR); mStartPrep = PcdGet32 (PcdProgressCodeOsLoaderStart); mStartFail = (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_EC_BOOT_OPTION_FAILED); @@ -272,8 +305,13 @@ PlatformBmPrintScRegisterHandler ( // Status = StatusCodeRouter->Register (HandleStatusCode, TPL_CALLBACK); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a:%a: failed to register status code handler: %r\n", - gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a:%a: failed to register status code handler: %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); return Status; } @@ -294,8 +332,14 @@ PlatformBmPrintScRegisterHandler ( // // We have to unregister the callback right now, and fail the function. // - DEBUG ((DEBUG_ERROR, "%a:%a: failed to create ExitBootServices() event: " - "%r\n", gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a:%a: failed to create ExitBootServices() event: " + "%r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); StatusCodeRouter->Unregister (HandleStatusCode); return Status; } diff --git a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c index 1408d94f7d..f73c59dfff 100644 --- a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c +++ b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c @@ -14,22 +14,21 @@ #include #include - // // Global data // -VOID *mEfiDevPathNotifyReg; -EFI_EVENT mEfiDevPathEvent; -VOID *mEmuVariableEventReg; -EFI_EVENT mEmuVariableEvent; -UINT16 mHostBridgeDevId; +VOID *mEfiDevPathNotifyReg; +EFI_EVENT mEfiDevPathEvent; +VOID *mEmuVariableEventReg; +EFI_EVENT mEmuVariableEvent; +UINT16 mHostBridgeDevId; // // Table of host IRQs matching PCI IRQs A-D // (for configuring PCI Interrupt Line register) // -CONST UINT8 PciHostIrqs[] = { +CONST UINT8 PciHostIrqs[] = { 0x0a, // LNKA, LNKE 0x0a, // LNKB, LNKF 0x0b, // LNKC, LNKG @@ -61,7 +60,6 @@ EFI_STATUS IN PCI_TYPE00 *Pci ); - // // Function prototypes // @@ -75,7 +73,7 @@ VisitAllInstancesOfProtocol ( EFI_STATUS VisitAllPciInstancesOfProtocol ( - IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction + IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction ); VOID @@ -85,24 +83,24 @@ InstallDevicePathCallback ( VOID PlatformRegisterFvBootOption ( - EFI_GUID *FileGuid, - CHAR16 *Description, - UINT32 Attributes + EFI_GUID *FileGuid, + CHAR16 *Description, + UINT32 Attributes ) { - EFI_STATUS Status; - INTN OptionIndex; - EFI_BOOT_MANAGER_LOAD_OPTION NewOption; - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; - UINTN BootOptionCount; - MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode; - EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; + EFI_STATUS Status; + INTN OptionIndex; + EFI_BOOT_MANAGER_LOAD_OPTION NewOption; + EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; + UINTN BootOptionCount; + MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode; + EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; Status = gBS->HandleProtocol ( gImageHandle, &gEfiLoadedImageProtocolGuid, - (VOID **) &LoadedImage + (VOID **)&LoadedImage ); ASSERT_EFI_ERROR (Status); @@ -111,7 +109,7 @@ PlatformRegisterFvBootOption ( ASSERT (DevicePath != NULL); DevicePath = AppendDevicePathNode ( DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *) &FileNode + (EFI_DEVICE_PATH_PROTOCOL *)&FileNode ); ASSERT (DevicePath != NULL); @@ -129,17 +127,21 @@ PlatformRegisterFvBootOption ( FreePool (DevicePath); BootOptions = EfiBootManagerGetLoadOptions ( - &BootOptionCount, LoadOptionTypeBoot + &BootOptionCount, + LoadOptionTypeBoot ); OptionIndex = EfiBootManagerFindLoadOption ( - &NewOption, BootOptions, BootOptionCount + &NewOption, + BootOptions, + BootOptionCount ); if (OptionIndex == -1) { Status = EfiBootManagerAddLoadOptionVariable (&NewOption, MAX_UINTN); ASSERT_EFI_ERROR (Status); } + EfiBootManagerFreeLoadOption (&NewOption); EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount); } @@ -163,27 +165,30 @@ RemoveStaleFvFileOptions ( VOID ) { - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; - UINTN BootOptionCount; - UINTN Index; + EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; + UINTN BootOptionCount; + UINTN Index; - BootOptions = EfiBootManagerGetLoadOptions (&BootOptionCount, - LoadOptionTypeBoot); + BootOptions = EfiBootManagerGetLoadOptions ( + &BootOptionCount, + LoadOptionTypeBoot + ); for (Index = 0; Index < BootOptionCount; ++Index) { - EFI_DEVICE_PATH_PROTOCOL *Node1, *Node2, *SearchNode; - EFI_STATUS Status; - EFI_HANDLE FvHandle; + EFI_DEVICE_PATH_PROTOCOL *Node1, *Node2, *SearchNode; + EFI_STATUS Status; + EFI_HANDLE FvHandle; // // If the device path starts with neither MemoryMapped(...) nor Fv(...), // then keep the boot option. // Node1 = BootOptions[Index].FilePath; - if (!(DevicePathType (Node1) == HARDWARE_DEVICE_PATH && - DevicePathSubType (Node1) == HW_MEMMAP_DP) && - !(DevicePathType (Node1) == MEDIA_DEVICE_PATH && - DevicePathSubType (Node1) == MEDIA_PIWG_FW_VOL_DP)) { + if (!((DevicePathType (Node1) == HARDWARE_DEVICE_PATH) && + (DevicePathSubType (Node1) == HW_MEMMAP_DP)) && + !((DevicePathType (Node1) == MEDIA_DEVICE_PATH) && + (DevicePathSubType (Node1) == MEDIA_PIWG_FW_VOL_DP))) + { continue; } @@ -192,8 +197,9 @@ RemoveStaleFvFileOptions ( // option. // Node2 = NextDevicePathNode (Node1); - if (DevicePathType (Node2) != MEDIA_DEVICE_PATH || - DevicePathSubType (Node2) != MEDIA_PIWG_FW_FILE_DP) { + if ((DevicePathType (Node2) != MEDIA_DEVICE_PATH) || + (DevicePathSubType (Node2) != MEDIA_PIWG_FW_FILE_DP)) + { continue; } @@ -204,23 +210,29 @@ RemoveStaleFvFileOptions ( // boot option. // SearchNode = Node1; - Status = gBS->LocateDevicePath (&gEfiFirmwareVolume2ProtocolGuid, - &SearchNode, &FvHandle); + Status = gBS->LocateDevicePath ( + &gEfiFirmwareVolume2ProtocolGuid, + &SearchNode, + &FvHandle + ); if (!EFI_ERROR (Status)) { // // The firmware volume was found; now let's see if it contains the FvFile // identified by GUID. // - EFI_FIRMWARE_VOLUME2_PROTOCOL *FvProtocol; - MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFileNode; - UINTN BufferSize; - EFI_FV_FILETYPE FoundType; - EFI_FV_FILE_ATTRIBUTES FileAttributes; - UINT32 AuthenticationStatus; - - Status = gBS->HandleProtocol (FvHandle, &gEfiFirmwareVolume2ProtocolGuid, - (VOID **)&FvProtocol); + EFI_FIRMWARE_VOLUME2_PROTOCOL *FvProtocol; + MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFileNode; + UINTN BufferSize; + EFI_FV_FILETYPE FoundType; + EFI_FV_FILE_ATTRIBUTES FileAttributes; + UINT32 AuthenticationStatus; + + Status = gBS->HandleProtocol ( + FvHandle, + &gEfiFirmwareVolume2ProtocolGuid, + (VOID **)&FvProtocol + ); ASSERT_EFI_ERROR (Status); FvFileNode = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)Node2; @@ -249,23 +261,29 @@ RemoveStaleFvFileOptions ( // Delete the boot option. // Status = EfiBootManagerDeleteLoadOptionVariable ( - BootOptions[Index].OptionNumber, LoadOptionTypeBoot); + BootOptions[Index].OptionNumber, + LoadOptionTypeBoot + ); DEBUG_CODE_BEGIN (); - CHAR16 *DevicePathString; + CHAR16 *DevicePathString; + + DevicePathString = ConvertDevicePathToText ( + BootOptions[Index].FilePath, + FALSE, + FALSE + ); + DEBUG (( + EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_VERBOSE, + "%a: removing stale Boot#%04x %s: %r\n", + __FUNCTION__, + (UINT32)BootOptions[Index].OptionNumber, + DevicePathString == NULL ? L"" : DevicePathString, + Status + )); + if (DevicePathString != NULL) { + FreePool (DevicePathString); + } - DevicePathString = ConvertDevicePathToText(BootOptions[Index].FilePath, - FALSE, FALSE); - DEBUG (( - EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_VERBOSE, - "%a: removing stale Boot#%04x %s: %r\n", - __FUNCTION__, - (UINT32)BootOptions[Index].OptionNumber, - DevicePathString == NULL ? L"" : DevicePathString, - Status - )); - if (DevicePathString != NULL) { - FreePool (DevicePathString); - } DEBUG_CODE_END (); } @@ -277,18 +295,18 @@ PlatformRegisterOptionsAndKeys ( VOID ) { - EFI_STATUS Status; - EFI_INPUT_KEY Enter; - EFI_INPUT_KEY F2; - EFI_INPUT_KEY Esc; - EFI_BOOT_MANAGER_LOAD_OPTION BootOption; + EFI_STATUS Status; + EFI_INPUT_KEY Enter; + EFI_INPUT_KEY F2; + EFI_INPUT_KEY Esc; + EFI_BOOT_MANAGER_LOAD_OPTION BootOption; // // Register ENTER as CONTINUE key // Enter.ScanCode = SCAN_NULL; Enter.UnicodeChar = CHAR_CARRIAGE_RETURN; - Status = EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL); + Status = EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL); ASSERT_EFI_ERROR (Status); // @@ -298,14 +316,22 @@ PlatformRegisterOptionsAndKeys ( F2.UnicodeChar = CHAR_NULL; Esc.ScanCode = SCAN_ESC; Esc.UnicodeChar = CHAR_NULL; - Status = EfiBootManagerGetBootManagerMenu (&BootOption); + Status = EfiBootManagerGetBootManagerMenu (&BootOption); ASSERT_EFI_ERROR (Status); Status = EfiBootManagerAddKeyOptionVariable ( - NULL, (UINT16) BootOption.OptionNumber, 0, &F2, NULL + NULL, + (UINT16)BootOption.OptionNumber, + 0, + &F2, + NULL ); ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED); Status = EfiBootManagerAddKeyOptionVariable ( - NULL, (UINT16) BootOption.OptionNumber, 0, &Esc, NULL + NULL, + (UINT16)BootOption.OptionNumber, + 0, + &Esc, + NULL ); ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED); } @@ -322,9 +348,9 @@ STATIC EFI_STATUS EFIAPI ConnectVirtioPciRng ( - IN EFI_HANDLE Handle, - IN VOID *Instance, - IN VOID *Context + IN EFI_HANDLE Handle, + IN VOID *Instance, + IN VOID *Context ); STATIC @@ -336,6 +362,7 @@ SaveS3BootScript ( // // BDS Platform Functions // + /** Do the platform init, can be customized by OEM/IBV @@ -355,16 +382,19 @@ PlatformBootManagerBeforeConsole ( VOID ) { - EFI_HANDLE Handle; - EFI_STATUS Status; - UINT16 FrontPageTimeout; - RETURN_STATUS PcdStatus; + EFI_HANDLE Handle; + EFI_STATUS Status; + UINT16 FrontPageTimeout; + RETURN_STATUS PcdStatus; DEBUG ((DEBUG_INFO, "PlatformBootManagerBeforeConsole\n")); InstallDevicePathCallback (); - VisitAllInstancesOfProtocol (&gEfiPciRootBridgeIoProtocolGuid, - ConnectRootBridge, NULL); + VisitAllInstancesOfProtocol ( + &gEfiPciRootBridgeIoProtocolGuid, + ConnectRootBridge, + NULL + ); // // Signal the ACPI platform driver that it can download QEMU ACPI tables. @@ -391,7 +421,8 @@ PlatformBootManagerBeforeConsole ( // We need to connect all trusted consoles for TCG PP. Here we treat all // consoles in OVMF to be trusted consoles. PlatformInitializeConsole ( - XenDetected() ? gXenPlatformConsole : gPlatformConsole); + XenDetected () ? gXenPlatformConsole : gPlatformConsole + ); // // Process TPM PPI request; this may require keyboard input @@ -403,9 +434,12 @@ PlatformBootManagerBeforeConsole ( // Any TPM 2 Physical Presence Interface opcode must be handled before. // Handle = NULL; - Status = gBS->InstallProtocolInterface (&Handle, - &gEfiDxeSmmReadyToLockProtocolGuid, EFI_NATIVE_INTERFACE, - NULL); + Status = gBS->InstallProtocolInterface ( + &Handle, + &gEfiDxeSmmReadyToLockProtocolGuid, + EFI_NATIVE_INTERFACE, + NULL + ); ASSERT_EFI_ERROR (Status); // @@ -415,7 +449,7 @@ PlatformBootManagerBeforeConsole ( EfiBootManagerDispatchDeferredImages (); FrontPageTimeout = GetFrontPageTimeoutFromQemu (); - PcdStatus = PcdSet16S (PcdPlatformBootTimeOut, FrontPageTimeout); + PcdStatus = PcdSet16S (PcdPlatformBootTimeOut, FrontPageTimeout); ASSERT_RETURN_ERROR (PcdStatus); // // Reflect the PCD in the standard Timeout variable. @@ -444,11 +478,13 @@ PlatformBootManagerBeforeConsole ( // Install both VIRTIO_DEVICE_PROTOCOL and (dependent) EFI_RNG_PROTOCOL // instances on Virtio PCI RNG devices. // - VisitAllInstancesOfProtocol (&gEfiPciIoProtocolGuid, ConnectVirtioPciRng, - NULL); + VisitAllInstancesOfProtocol ( + &gEfiPciIoProtocolGuid, + ConnectVirtioPciRng, + NULL + ); } - EFI_STATUS EFIAPI ConnectRootBridge ( @@ -457,7 +493,7 @@ ConnectRootBridge ( IN VOID *Context ) { - EFI_STATUS Status; + EFI_STATUS Status; // // Make the PCI bus driver connect the root bridge, non-recursively. This @@ -473,34 +509,39 @@ ConnectRootBridge ( return Status; } - STATIC EFI_STATUS EFIAPI ConnectVirtioPciRng ( - IN EFI_HANDLE Handle, - IN VOID *Instance, - IN VOID *Context + IN EFI_HANDLE Handle, + IN VOID *Instance, + IN VOID *Context ) { - EFI_PCI_IO_PROTOCOL *PciIo; - EFI_STATUS Status; - UINT16 VendorId; - UINT16 DeviceId; - UINT8 RevisionId; - BOOLEAN Virtio10; - UINT16 SubsystemId; + EFI_PCI_IO_PROTOCOL *PciIo; + EFI_STATUS Status; + UINT16 VendorId; + UINT16 DeviceId; + UINT8 RevisionId; + BOOLEAN Virtio10; + UINT16 SubsystemId; PciIo = Instance; // // Read and check VendorId. // - Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, PCI_VENDOR_ID_OFFSET, - 1, &VendorId); + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint16, + PCI_VENDOR_ID_OFFSET, + 1, + &VendorId + ); if (EFI_ERROR (Status)) { goto Error; } + if (VendorId != VIRTIO_VENDOR_ID) { return EFI_SUCCESS; } @@ -508,13 +549,24 @@ ConnectVirtioPciRng ( // // Read DeviceId and RevisionId. // - Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, PCI_DEVICE_ID_OFFSET, - 1, &DeviceId); + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint16, + PCI_DEVICE_ID_OFFSET, + 1, + &DeviceId + ); if (EFI_ERROR (Status)) { goto Error; } - Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8, PCI_REVISION_ID_OFFSET, - 1, &RevisionId); + + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint8, + PCI_REVISION_ID_OFFSET, + 1, + &RevisionId + ); if (EFI_ERROR (Status)) { goto Error; } @@ -526,10 +578,11 @@ ConnectVirtioPciRng ( // SubsystemId will only play a sanity-check role. Otherwise, DeviceId can // only be sanity-checked, and SubsystemId will decide. // - if (DeviceId == 0x1040 + VIRTIO_SUBSYSTEM_ENTROPY_SOURCE && - RevisionId >= 0x01) { + if ((DeviceId == 0x1040 + VIRTIO_SUBSYSTEM_ENTROPY_SOURCE) && + (RevisionId >= 0x01)) + { Virtio10 = TRUE; - } else if (DeviceId >= 0x1000 && DeviceId <= 0x103F && RevisionId == 0x00) { + } else if ((DeviceId >= 0x1000) && (DeviceId <= 0x103F) && (RevisionId == 0x00)) { Virtio10 = FALSE; } else { return EFI_SUCCESS; @@ -538,13 +591,20 @@ ConnectVirtioPciRng ( // // Read and check SubsystemId as dictated by Virtio10. // - Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, - PCI_SUBSYSTEM_ID_OFFSET, 1, &SubsystemId); + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint16, + PCI_SUBSYSTEM_ID_OFFSET, + 1, + &SubsystemId + ); if (EFI_ERROR (Status)) { goto Error; } - if ((Virtio10 && SubsystemId >= 0x40) || - (!Virtio10 && SubsystemId == VIRTIO_SUBSYSTEM_ENTROPY_SOURCE)) { + + if ((Virtio10 && (SubsystemId >= 0x40)) || + (!Virtio10 && (SubsystemId == VIRTIO_SUBSYSTEM_ENTROPY_SOURCE))) + { Status = gBS->ConnectController ( Handle, // ControllerHandle NULL, // DriverImageHandle -- connect all drivers @@ -555,6 +615,7 @@ ConnectVirtioPciRng ( goto Error; } } + return EFI_SUCCESS; Error: @@ -562,7 +623,6 @@ Error: return Status; } - /** Add IsaKeyboard to ConIn; add IsaSerial to ConOut, ConIn, ErrOut. @@ -576,7 +636,7 @@ Error: **/ EFI_STATUS PrepareLpcBridgeDevicePath ( - IN EFI_HANDLE DeviceHandle + IN EFI_HANDLE DeviceHandle ) { EFI_STATUS Status; @@ -585,50 +645,59 @@ PrepareLpcBridgeDevicePath ( CHAR16 *DevPathStr; DevicePath = NULL; - Status = gBS->HandleProtocol ( - DeviceHandle, - &gEfiDevicePathProtocolGuid, - (VOID*)&DevicePath - ); + Status = gBS->HandleProtocol ( + DeviceHandle, + &gEfiDevicePathProtocolGuid, + (VOID *)&DevicePath + ); if (EFI_ERROR (Status)) { return Status; } + TempDevicePath = DevicePath; // // Register Keyboard // - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gPnpPs2KeyboardDeviceNode); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gPnpPs2KeyboardDeviceNode + ); EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); // // Register COM1 // - DevicePath = TempDevicePath; + DevicePath = TempDevicePath; gPnp16550ComPortDeviceNode.UID = 0; - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode); - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode + ); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode + ); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode + ); // // Print Device Path // DevPathStr = ConvertDevicePathToText (DevicePath, FALSE, FALSE); if (DevPathStr != NULL) { - DEBUG(( + DEBUG (( DEBUG_INFO, "BdsPlatform.c+%d: COM%d DevPath: %s\n", DEBUG_LINE_NUMBER, gPnp16550ComPortDeviceNode.UID + 1, DevPathStr )); - FreePool(DevPathStr); + FreePool (DevPathStr); } EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); @@ -638,29 +707,35 @@ PrepareLpcBridgeDevicePath ( // // Register COM2 // - DevicePath = TempDevicePath; + DevicePath = TempDevicePath; gPnp16550ComPortDeviceNode.UID = 1; - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode); - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode + ); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode + ); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode + ); // // Print Device Path // DevPathStr = ConvertDevicePathToText (DevicePath, FALSE, FALSE); if (DevPathStr != NULL) { - DEBUG(( + DEBUG (( DEBUG_INFO, "BdsPlatform.c+%d: COM%d DevPath: %s\n", DEBUG_LINE_NUMBER, gPnp16550ComPortDeviceNode.UID + 1, DevPathStr )); - FreePool(DevPathStr); + FreePool (DevPathStr); } EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); @@ -671,16 +746,18 @@ PrepareLpcBridgeDevicePath ( } typedef struct { - VENDOR_DEVICE_PATH Guid; - EFI_DEVICE_PATH_PROTOCOL End; + VENDOR_DEVICE_PATH Guid; + EFI_DEVICE_PATH_PROTOCOL End; } SERIAL_DEVICE_PATH; -SERIAL_DEVICE_PATH serialDevicePath = { +SERIAL_DEVICE_PATH serialDevicePath = { { - { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, { sizeof (VENDOR_DEVICE_PATH), 0} }, + { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, { sizeof (VENDOR_DEVICE_PATH), 0 } + }, EDKII_SERIAL_PORT_LIB_VENDOR_GUID }, - { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { sizeof (EFI_DEVICE_PATH_PROTOCOL), 0 } } + { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { sizeof (EFI_DEVICE_PATH_PROTOCOL), 0 } + } }; VOID @@ -696,11 +773,15 @@ PrepareMicrovmDevicePath ( return; } - DevicePath = (EFI_DEVICE_PATH_PROTOCOL*)&serialDevicePath; - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); + DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)&serialDevicePath; + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode + ); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode + ); EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); @@ -709,19 +790,19 @@ PrepareMicrovmDevicePath ( EFI_STATUS GetGopDevicePath ( - IN EFI_DEVICE_PATH_PROTOCOL *PciDevicePath, - OUT EFI_DEVICE_PATH_PROTOCOL **GopDevicePath - ) + IN EFI_DEVICE_PATH_PROTOCOL *PciDevicePath, + OUT EFI_DEVICE_PATH_PROTOCOL **GopDevicePath + ) { - UINTN Index; - EFI_STATUS Status; - EFI_HANDLE PciDeviceHandle; - EFI_DEVICE_PATH_PROTOCOL *TempDevicePath; - EFI_DEVICE_PATH_PROTOCOL *TempPciDevicePath; - UINTN GopHandleCount; - EFI_HANDLE *GopHandleBuffer; - - if (PciDevicePath == NULL || GopDevicePath == NULL) { + UINTN Index; + EFI_STATUS Status; + EFI_HANDLE PciDeviceHandle; + EFI_DEVICE_PATH_PROTOCOL *TempDevicePath; + EFI_DEVICE_PATH_PROTOCOL *TempPciDevicePath; + UINTN GopHandleCount; + EFI_HANDLE *GopHandleBuffer; + + if ((PciDevicePath == NULL) || (GopDevicePath == NULL)) { return EFI_INVALID_PARAMETER; } @@ -760,16 +841,21 @@ GetGopDevicePath ( // Add all the child handles as possible Console Device // for (Index = 0; Index < GopHandleCount; Index++) { - Status = gBS->HandleProtocol (GopHandleBuffer[Index], - &gEfiDevicePathProtocolGuid, (VOID*)&TempDevicePath); + Status = gBS->HandleProtocol ( + GopHandleBuffer[Index], + &gEfiDevicePathProtocolGuid, + (VOID *)&TempDevicePath + ); if (EFI_ERROR (Status)) { continue; } + if (CompareMem ( PciDevicePath, TempDevicePath, GetDevicePathSize (PciDevicePath) - END_DEVICE_PATH_LENGTH - ) == 0) { + ) == 0) + { // // In current implementation, we only enable one of the child handles // as console device, i.e. sotre one of the child handle's device @@ -787,6 +873,7 @@ GetGopDevicePath ( EfiBootManagerUpdateConsoleVariable (ConOutDev, TempDevicePath, NULL); } } + gBS->FreePool (GopHandleBuffer); } @@ -805,7 +892,7 @@ GetGopDevicePath ( **/ EFI_STATUS PreparePciDisplayDevicePath ( - IN EFI_HANDLE DeviceHandle + IN EFI_HANDLE DeviceHandle ) { EFI_STATUS Status; @@ -814,11 +901,11 @@ PreparePciDisplayDevicePath ( DevicePath = NULL; GopDevicePath = NULL; - Status = gBS->HandleProtocol ( - DeviceHandle, - &gEfiDevicePathProtocolGuid, - (VOID*)&DevicePath - ); + Status = gBS->HandleProtocol ( + DeviceHandle, + &gEfiDevicePathProtocolGuid, + (VOID *)&DevicePath + ); if (EFI_ERROR (Status)) { return Status; } @@ -844,26 +931,30 @@ PreparePciDisplayDevicePath ( **/ EFI_STATUS PreparePciSerialDevicePath ( - IN EFI_HANDLE DeviceHandle + IN EFI_HANDLE DeviceHandle ) { EFI_STATUS Status; EFI_DEVICE_PATH_PROTOCOL *DevicePath; DevicePath = NULL; - Status = gBS->HandleProtocol ( - DeviceHandle, - &gEfiDevicePathProtocolGuid, - (VOID*)&DevicePath - ); + Status = gBS->HandleProtocol ( + DeviceHandle, + &gEfiDevicePathProtocolGuid, + (VOID *)&DevicePath + ); if (EFI_ERROR (Status)) { return Status; } - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode + ); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode + ); EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); @@ -879,24 +970,24 @@ VisitAllInstancesOfProtocol ( IN VOID *Context ) { - EFI_STATUS Status; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN Index; - VOID *Instance; + EFI_STATUS Status; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + UINTN Index; + VOID *Instance; // // Start to check all the PciIo to find all possible device // - HandleCount = 0; + HandleCount = 0; HandleBuffer = NULL; - Status = gBS->LocateHandleBuffer ( - ByProtocol, - Id, - NULL, - &HandleCount, - &HandleBuffer - ); + Status = gBS->LocateHandleBuffer ( + ByProtocol, + Id, + NULL, + &HandleCount, + &HandleBuffer + ); if (EFI_ERROR (Status)) { return Status; } @@ -907,11 +998,11 @@ VisitAllInstancesOfProtocol ( continue; } - Status = (*CallBackFunction) ( - HandleBuffer[Index], - Instance, - Context - ); + Status = (*CallBackFunction)( + HandleBuffer[Index], + Instance, + Context + ); } gBS->FreePool (HandleBuffer); @@ -919,7 +1010,6 @@ VisitAllInstancesOfProtocol ( return EFI_SUCCESS; } - EFI_STATUS EFIAPI VisitingAPciInstance ( @@ -928,49 +1018,45 @@ VisitingAPciInstance ( IN VOID *Context ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; - PciIo = (EFI_PCI_IO_PROTOCOL*) Instance; + PciIo = (EFI_PCI_IO_PROTOCOL *)Instance; // // Check for all PCI device // Status = PciIo->Pci.Read ( - PciIo, - EfiPciIoWidthUint32, - 0, - sizeof (Pci) / sizeof (UINT32), - &Pci - ); + PciIo, + EfiPciIoWidthUint32, + 0, + sizeof (Pci) / sizeof (UINT32), + &Pci + ); if (EFI_ERROR (Status)) { return Status; } - return (*(VISIT_PCI_INSTANCE_CALLBACK)(UINTN) Context) ( - Handle, - PciIo, - &Pci - ); - + return (*(VISIT_PCI_INSTANCE_CALLBACK)(UINTN)Context)( + Handle, + PciIo, + &Pci + ); } - - EFI_STATUS VisitAllPciInstances ( - IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction + IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction ) { return VisitAllInstancesOfProtocol ( &gEfiPciIoProtocolGuid, VisitingAPciInstance, - (VOID*)(UINTN) CallBackFunction + (VOID *)(UINTN)CallBackFunction ); } - /** Do platform specific PCI Device check and add them to ConOut, ConIn, ErrOut. @@ -992,14 +1078,14 @@ DetectAndPreparePlatformPciDevicePath ( IN PCI_TYPE00 *Pci ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationEnable, - EFI_PCI_DEVICE_ENABLE, - NULL - ); + PciIo, + EfiPciIoAttributeOperationEnable, + EFI_PCI_DEVICE_ENABLE, + NULL + ); ASSERT_EFI_ERROR (Status); // @@ -1010,7 +1096,8 @@ DetectAndPreparePlatformPciDevicePath ( (Pci->Hdr.VendorId == 0x8086) && (Pci->Hdr.DeviceId == 0x7000) ) - ) { + ) + { // // Add IsaKeyboard to ConIn, // add IsaSerial to ConOut, ConIn, ErrOut @@ -1019,6 +1106,7 @@ DetectAndPreparePlatformPciDevicePath ( PrepareLpcBridgeDevicePath (Handle); return EFI_SUCCESS; } + // // Here we decide which Serial device to enable in PCI bus // @@ -1046,7 +1134,6 @@ DetectAndPreparePlatformPciDevicePath ( return Status; } - /** Connect the predefined platform default console device. @@ -1056,10 +1143,10 @@ DetectAndPreparePlatformPciDevicePath ( **/ VOID PlatformInitializeConsole ( - IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole + IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole ) { - UINTN Index; + UINTN Index; // // Do platform specific PCI Device check and add them to ConOut, ConIn, @@ -1079,21 +1166,31 @@ PlatformInitializeConsole ( // Update the console variable with the connect type // if ((PlatformConsole[Index].ConnectType & CONSOLE_IN) == CONSOLE_IN) { - EfiBootManagerUpdateConsoleVariable (ConIn, - PlatformConsole[Index].DevicePath, NULL); + EfiBootManagerUpdateConsoleVariable ( + ConIn, + PlatformConsole[Index].DevicePath, + NULL + ); } + if ((PlatformConsole[Index].ConnectType & CONSOLE_OUT) == CONSOLE_OUT) { - EfiBootManagerUpdateConsoleVariable (ConOut, - PlatformConsole[Index].DevicePath, NULL); + EfiBootManagerUpdateConsoleVariable ( + ConOut, + PlatformConsole[Index].DevicePath, + NULL + ); } + if ((PlatformConsole[Index].ConnectType & STD_ERROR) == STD_ERROR) { - EfiBootManagerUpdateConsoleVariable (ErrOut, - PlatformConsole[Index].DevicePath, NULL); + EfiBootManagerUpdateConsoleVariable ( + ErrOut, + PlatformConsole[Index].DevicePath, + NULL + ); } } } - /** Configure PCI Interrupt Line register for applicable devices Ported from SeaBIOS, src/fw/pciinit.c, *_pci_slot_get_irq() @@ -1124,15 +1221,15 @@ SetPciIntLine ( Status = EFI_SUCCESS; if (PciHdr->Device.InterruptPin != 0) { - DevPathNode = DevicePathFromHandle (Handle); ASSERT (DevPathNode != NULL); DevPath = DevPathNode; RootBusNumber = 0; - if (DevicePathType (DevPathNode) == ACPI_DEVICE_PATH && - DevicePathSubType (DevPathNode) == ACPI_DP && - ((ACPI_HID_DEVICE_PATH *)DevPathNode)->HID == EISA_PNP_ID(0x0A03)) { + if ((DevicePathType (DevPathNode) == ACPI_DEVICE_PATH) && + (DevicePathSubType (DevPathNode) == ACPI_DP) && + (((ACPI_HID_DEVICE_PATH *)DevPathNode)->HID == EISA_PNP_ID (0x0A03))) + { RootBusNumber = ((ACPI_HID_DEVICE_PATH *)DevPathNode)->UID; } @@ -1140,13 +1237,13 @@ SetPciIntLine ( // Compute index into PciHostIrqs[] table by walking // the device path and adding up all device numbers // - Status = EFI_NOT_FOUND; + Status = EFI_NOT_FOUND; RootSlot = 0; - Idx = PciHdr->Device.InterruptPin - 1; + Idx = PciHdr->Device.InterruptPin - 1; while (!IsDevicePathEnd (DevPathNode)) { - if (DevicePathType (DevPathNode) == HARDWARE_DEVICE_PATH && - DevicePathSubType (DevPathNode) == HW_PCI_DP) { - + if ((DevicePathType (DevPathNode) == HARDWARE_DEVICE_PATH) && + (DevicePathSubType (DevPathNode) == HW_PCI_DP)) + { Idx += ((PCI_DEVICE_PATH *)DevPathNode)->Device; // @@ -1157,18 +1254,20 @@ SetPciIntLine ( // Q35 cases with more than 24 slots on the root bus. // if (Status != EFI_SUCCESS) { - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; RootSlot = ((PCI_DEVICE_PATH *)DevPathNode)->Device; } } DevPathNode = NextDevicePathNode (DevPathNode); } + if (EFI_ERROR (Status)) { return Status; } - if (RootBusNumber == 0 && RootSlot == 0) { - DEBUG(( + + if ((RootBusNumber == 0) && (RootSlot == 0)) { + DEBUG (( DEBUG_ERROR, "%a: PCI host bridge (00:00.0) should have no interrupts!\n", __FUNCTION__ @@ -1200,29 +1299,39 @@ SetPciIntLine ( // Idx -= RootSlot; } + break; default: ASSERT (FALSE); // should never get here } - Idx %= ARRAY_SIZE (PciHostIrqs); + + Idx %= ARRAY_SIZE (PciHostIrqs); IrqLine = PciHostIrqs[Idx]; DEBUG_CODE_BEGIN (); { - CHAR16 *DevPathString; - STATIC CHAR16 Fallback[] = L""; - UINTN Segment, Bus, Device, Function; + CHAR16 *DevPathString; + STATIC CHAR16 Fallback[] = L""; + UINTN Segment, Bus, Device, Function; DevPathString = ConvertDevicePathToText (DevPath, FALSE, FALSE); if (DevPathString == NULL) { DevPathString = Fallback; } + Status = PciIo->GetLocation (PciIo, &Segment, &Bus, &Device, &Function); ASSERT_EFI_ERROR (Status); - DEBUG ((DEBUG_VERBOSE, "%a: [%02x:%02x.%x] %s -> 0x%02x\n", __FUNCTION__, - (UINT32)Bus, (UINT32)Device, (UINT32)Function, DevPathString, - IrqLine)); + DEBUG (( + DEBUG_VERBOSE, + "%a: [%02x:%02x.%x] %s -> 0x%02x\n", + __FUNCTION__, + (UINT32)Bus, + (UINT32)Device, + (UINT32)Function, + DevPathString, + IrqLine + )); if (DevPathString != Fallback) { FreePool (DevPathString); @@ -1234,18 +1343,17 @@ SetPciIntLine ( // Set PCI Interrupt Line register for this device to PciHostIrqs[Idx] // Status = PciIo->Pci.Write ( - PciIo, - EfiPciIoWidthUint8, - PCI_INT_LINE_OFFSET, - 1, - &IrqLine - ); + PciIo, + EfiPciIoWidthUint8, + PCI_INT_LINE_OFFSET, + 1, + &IrqLine + ); } return Status; } - VOID PciAcpiInitialization ( ) @@ -1290,8 +1398,13 @@ PciAcpiInitialization ( // return; } - DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", - __FUNCTION__, mHostBridgeDevId)); + + DEBUG (( + DEBUG_ERROR, + "%a: Unknown Host Bridge Device ID: 0x%04x\n", + __FUNCTION__, + mHostBridgeDevId + )); ASSERT (FALSE); return; } @@ -1323,13 +1436,14 @@ ConnectRecursivelyIfPciMassStorage ( // Recognize PCI Mass Storage, and Xen PCI devices // if (IS_CLASS1 (PciHeader, PCI_CLASS_MASS_STORAGE) || - (XenDetected() && IS_CLASS2 (PciHeader, 0xFF, 0x80))) { + (XenDetected () && IS_CLASS2 (PciHeader, 0xFF, 0x80))) + { DevicePath = NULL; - Status = gBS->HandleProtocol ( - Handle, - &gEfiDevicePathProtocolGuid, - (VOID*)&DevicePath - ); + Status = gBS->HandleProtocol ( + Handle, + &gEfiDevicePathProtocolGuid, + (VOID *)&DevicePath + ); if (EFI_ERROR (Status)) { return Status; } @@ -1339,29 +1453,27 @@ ConnectRecursivelyIfPciMassStorage ( // DevPathStr = ConvertDevicePathToText (DevicePath, FALSE, FALSE); if (DevPathStr != NULL) { - DEBUG(( + DEBUG (( DEBUG_INFO, "Found %s device: %s\n", (IS_CLASS1 (PciHeader, PCI_CLASS_MASS_STORAGE) ? L"Mass Storage" : L"Xen" - ), + ), DevPathStr )); - FreePool(DevPathStr); + FreePool (DevPathStr); } Status = gBS->ConnectController (Handle, NULL, NULL, TRUE); if (EFI_ERROR (Status)) { return Status; } - } return EFI_SUCCESS; } - /** This notification function is invoked when the EMU Variable FVB has been changed. @@ -1373,15 +1485,14 @@ ConnectRecursivelyIfPciMassStorage ( VOID EFIAPI EmuVariablesUpdatedCallback ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { DEBUG ((DEBUG_INFO, "EmuVariablesUpdatedCallback\n")); UpdateNvVarsOnFileSystem (); } - EFI_STATUS EFIAPI VisitingFileSystemInstance ( @@ -1404,7 +1515,7 @@ VisitingFileSystemInstance ( } ConnectedToFileSystem = TRUE; - mEmuVariableEvent = + mEmuVariableEvent = EfiCreateProtocolNotifyEvent ( &gEfiDevicePathProtocolGuid, TPL_CALLBACK, @@ -1412,14 +1523,15 @@ VisitingFileSystemInstance ( NULL, &mEmuVariableEventReg ); - PcdStatus = PcdSet64S (PcdEmuVariableEvent, - (UINT64)(UINTN) mEmuVariableEvent); + PcdStatus = PcdSet64S ( + PcdEmuVariableEvent, + (UINT64)(UINTN)mEmuVariableEvent + ); ASSERT_RETURN_ERROR (PcdStatus); return EFI_SUCCESS; } - VOID PlatformBdsRestoreNvVarsFromHardDisk ( ) @@ -1430,7 +1542,6 @@ PlatformBdsRestoreNvVarsFromHardDisk ( VisitingFileSystemInstance, NULL ); - } /** @@ -1443,8 +1554,8 @@ PlatformBdsConnectSequence ( VOID ) { - UINTN Index; - RETURN_STATUS Status; + UINTN Index; + RETURN_STATUS Status; DEBUG ((DEBUG_INFO, "PlatformBdsConnectSequence\n")); @@ -1485,12 +1596,15 @@ SaveS3BootScript ( VOID ) { - EFI_STATUS Status; - EFI_S3_SAVE_STATE_PROTOCOL *BootScript; - STATIC CONST UINT8 Info[] = { 0xDE, 0xAD, 0xBE, 0xEF }; + EFI_STATUS Status; + EFI_S3_SAVE_STATE_PROTOCOL *BootScript; + STATIC CONST UINT8 Info[] = { 0xDE, 0xAD, 0xBE, 0xEF }; - Status = gBS->LocateProtocol (&gEfiS3SaveStateProtocolGuid, NULL, - (VOID **) &BootScript); + Status = gBS->LocateProtocol ( + &gEfiS3SaveStateProtocolGuid, + NULL, + (VOID **)&BootScript + ); ASSERT_EFI_ERROR (Status); // @@ -1498,13 +1612,15 @@ SaveS3BootScript ( // implementation embeds a deep copy of the info in the boot script, rather // than storing just a pointer to runtime or NVS storage. // - Status = BootScript->Write(BootScript, EFI_BOOT_SCRIPT_INFORMATION_OPCODE, - (UINT32) sizeof Info, - (EFI_PHYSICAL_ADDRESS)(UINTN) &Info); + Status = BootScript->Write ( + BootScript, + EFI_BOOT_SCRIPT_INFORMATION_OPCODE, + (UINT32)sizeof Info, + (EFI_PHYSICAL_ADDRESS)(UINTN)&Info + ); ASSERT_EFI_ERROR (Status); } - /** Do the platform specific action after the console is ready @@ -1524,13 +1640,16 @@ PlatformBootManagerAfterConsole ( VOID ) { - EFI_BOOT_MODE BootMode; + EFI_BOOT_MODE BootMode; DEBUG ((DEBUG_INFO, "PlatformBootManagerAfterConsole\n")); if (PcdGetBool (PcdOvmfFlashVariablesEnable)) { - DEBUG ((DEBUG_INFO, "PlatformBdsPolicyBehavior: not restoring NvVars " - "from disk since flash variables appear to be supported.\n")); + DEBUG (( + DEBUG_INFO, + "PlatformBdsPolicyBehavior: not restoring NvVars " + "from disk since flash variables appear to be supported.\n" + )); } else { // // Try to restore variables from the hard disk early so @@ -1577,7 +1696,9 @@ PlatformBootManagerAfterConsole ( // Register UEFI Shell // PlatformRegisterFvBootOption ( - &gUefiShellFileGuid, L"EFI Internal Shell", LOAD_OPTION_ACTIVE + &gUefiShellFileGuid, + L"EFI Internal Shell", + LOAD_OPTION_ACTIVE ); RemoveStaleFvFileOptions (); @@ -1597,31 +1718,31 @@ PlatformBootManagerAfterConsole ( VOID EFIAPI NotifyDevPath ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - EFI_HANDLE Handle; - EFI_STATUS Status; - UINTN BufferSize; - EFI_DEVICE_PATH_PROTOCOL *DevPathNode; - ATAPI_DEVICE_PATH *Atapi; + EFI_HANDLE Handle; + EFI_STATUS Status; + UINTN BufferSize; + EFI_DEVICE_PATH_PROTOCOL *DevPathNode; + ATAPI_DEVICE_PATH *Atapi; // // Examine all new handles // - for (;;) { + for ( ; ;) { // // Get the next handle // BufferSize = sizeof (Handle); - Status = gBS->LocateHandle ( - ByRegisterNotify, - NULL, - mEfiDevPathNotifyReg, - &BufferSize, - &Handle - ); + Status = gBS->LocateHandle ( + ByRegisterNotify, + NULL, + mEfiDevPathNotifyReg, + &BufferSize, + &Handle + ); // // If not found, we're done @@ -1637,8 +1758,11 @@ NotifyDevPath ( // // Get the DevicePath protocol on that handle // - Status = gBS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, - (VOID **)&DevPathNode); + Status = gBS->HandleProtocol ( + Handle, + &gEfiDevicePathProtocolGuid, + (VOID **)&DevPathNode + ); ASSERT_EFI_ERROR (Status); while (!IsDevicePathEnd (DevPathNode)) { @@ -1646,16 +1770,17 @@ NotifyDevPath ( // Find the handler to dump this device path node // if ( - (DevicePathType(DevPathNode) == MESSAGING_DEVICE_PATH) && - (DevicePathSubType(DevPathNode) == MSG_ATAPI_DP) - ) { - Atapi = (ATAPI_DEVICE_PATH*) DevPathNode; + (DevicePathType (DevPathNode) == MESSAGING_DEVICE_PATH) && + (DevicePathSubType (DevPathNode) == MSG_ATAPI_DP) + ) + { + Atapi = (ATAPI_DEVICE_PATH *)DevPathNode; PciOr16 ( PCI_LIB_ADDRESS ( 0, 1, 1, - (Atapi->PrimarySecondary == 1) ? 0x42: 0x40 + (Atapi->PrimarySecondary == 1) ? 0x42 : 0x40 ), BIT15 ); @@ -1671,7 +1796,6 @@ NotifyDevPath ( return; } - VOID InstallDevicePathCallback ( VOID @@ -1679,12 +1803,12 @@ InstallDevicePathCallback ( { DEBUG ((DEBUG_INFO, "Registered NotifyDevPath Event\n")); mEfiDevPathEvent = EfiCreateProtocolNotifyEvent ( - &gEfiDevicePathProtocolGuid, - TPL_CALLBACK, - NotifyDevPath, - NULL, - &mEfiDevPathNotifyReg - ); + &gEfiDevicePathProtocolGuid, + TPL_CALLBACK, + NotifyDevPath, + NULL, + &mEfiDevPathNotifyReg + ); } /** @@ -1696,12 +1820,12 @@ InstallDevicePathCallback ( VOID EFIAPI PlatformBootManagerWaitCallback ( - UINT16 TimeoutRemain + UINT16 TimeoutRemain ) { - EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION Black; - EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION White; - UINT16 TimeoutInitial; + EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION Black; + EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION White; + UINT16 TimeoutInitial; TimeoutInitial = PcdGet16 (PcdPlatformBootTimeOut); @@ -1740,10 +1864,10 @@ PlatformBootManagerUnableToBoot ( VOID ) { - EFI_STATUS Status; - EFI_INPUT_KEY Key; - EFI_BOOT_MANAGER_LOAD_OPTION BootManagerMenu; - UINTN Index; + EFI_STATUS Status; + EFI_INPUT_KEY Key; + EFI_BOOT_MANAGER_LOAD_OPTION BootManagerMenu; + UINTN Index; // // BootManagerMenu doesn't contain the correct information when return status @@ -1753,6 +1877,7 @@ PlatformBootManagerUnableToBoot ( if (EFI_ERROR (Status)) { return; } + // // Normally BdsDxe does not print anything to the system console, but this is // a last resort -- the end-user will likely not see any DEBUG messages @@ -1782,7 +1907,7 @@ PlatformBootManagerUnableToBoot ( } } - for (;;) { + for ( ; ;) { EfiBootManagerBoot (&BootManagerMenu); } } diff --git a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.h b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.h index 153e215101..1676d61616 100644 --- a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.h +++ b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.h @@ -17,7 +17,6 @@ Abstract: #ifndef _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ #define _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ - #include #include @@ -64,11 +63,11 @@ Abstract: #include -extern EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[]; -extern ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode; -extern ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode; -extern UART_DEVICE_PATH gUartDeviceNode; -extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; +extern EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[]; +extern ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode; +extern ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode; +extern UART_DEVICE_PATH gUartDeviceNode; +extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; #define PCI_DEVICE_PATH_NODE(Func, Dev) \ { \ @@ -150,20 +149,20 @@ extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; } \ } -#define PCI_CLASS_SCC 0x07 -#define PCI_SUBCLASS_SERIAL 0x00 -#define PCI_IF_16550 0x02 -#define IS_PCI_16550SERIAL(_p) IS_CLASS3 (_p, PCI_CLASS_SCC, PCI_SUBCLASS_SERIAL, PCI_IF_16550) -#define IS_PCI_ISA_PDECODE(_p) IS_CLASS3 (_p, PCI_CLASS_BRIDGE, PCI_CLASS_BRIDGE_ISA_PDECODE, 0) +#define PCI_CLASS_SCC 0x07 +#define PCI_SUBCLASS_SERIAL 0x00 +#define PCI_IF_16550 0x02 +#define IS_PCI_16550SERIAL(_p) IS_CLASS3 (_p, PCI_CLASS_SCC, PCI_SUBCLASS_SERIAL, PCI_IF_16550) +#define IS_PCI_ISA_PDECODE(_p) IS_CLASS3 (_p, PCI_CLASS_BRIDGE, PCI_CLASS_BRIDGE_ISA_PDECODE, 0) typedef struct { - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - UINTN ConnectType; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + UINTN ConnectType; } PLATFORM_CONSOLE_CONNECT_ENTRY; -#define CONSOLE_OUT BIT0 -#define CONSOLE_IN BIT1 -#define STD_ERROR BIT2 +#define CONSOLE_OUT BIT0 +#define CONSOLE_IN BIT1 +#define STD_ERROR BIT2 extern PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[]; extern PLATFORM_CONSOLE_CONNECT_ENTRY gXenPlatformConsole[]; @@ -173,7 +172,7 @@ extern PLATFORM_CONSOLE_CONNECT_ENTRY gXenPlatformConsole[]; VOID PlatformInitializeConsole ( - IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole + IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole ); /** diff --git a/OvmfPkg/Library/PlatformBootManagerLib/PlatformData.c b/OvmfPkg/Library/PlatformBootManagerLib/PlatformData.c index 2858c3dfd5..6536d9fe36 100644 --- a/OvmfPkg/Library/PlatformBootManagerLib/PlatformData.c +++ b/OvmfPkg/Library/PlatformBootManagerLib/PlatformData.c @@ -16,10 +16,10 @@ // #pragma pack (1) typedef struct { - VENDOR_DEVICE_PATH VendorHardware; - UART_DEVICE_PATH Uart; - VENDOR_DEVICE_PATH TerminalType; - EFI_DEVICE_PATH_PROTOCOL End; + VENDOR_DEVICE_PATH VendorHardware; + UART_DEVICE_PATH Uart; + VENDOR_DEVICE_PATH TerminalType; + EFI_DEVICE_PATH_PROTOCOL End; } VENDOR_UART_DEVICE_PATH; #pragma pack () @@ -28,8 +28,8 @@ typedef struct { // #pragma pack (1) typedef struct { - USB_CLASS_DEVICE_PATH Keyboard; - EFI_DEVICE_PATH_PROTOCOL End; + USB_CLASS_DEVICE_PATH Keyboard; + EFI_DEVICE_PATH_PROTOCOL End; } USB_KEYBOARD_DEVICE_PATH; #pragma pack () @@ -38,33 +38,32 @@ typedef struct { // #pragma pack (1) typedef struct { - VENDOR_DEVICE_PATH Vendor; - ACPI_ADR_DEVICE_PATH AcpiAdr; - EFI_DEVICE_PATH_PROTOCOL End; + VENDOR_DEVICE_PATH Vendor; + ACPI_ADR_DEVICE_PATH AcpiAdr; + EFI_DEVICE_PATH_PROTOCOL End; } VENDOR_RAMFB_DEVICE_PATH; #pragma pack () -ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode = gPnpPs2Keyboard; -ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode = gPnp16550ComPort; -UART_DEVICE_PATH gUartDeviceNode = gUart; -VENDOR_DEVICE_PATH gTerminalTypeDeviceNode = gPcAnsiTerminal; +ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode = gPnpPs2Keyboard; +ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode = gPnp16550ComPort; +UART_DEVICE_PATH gUartDeviceNode = gUart; +VENDOR_DEVICE_PATH gTerminalTypeDeviceNode = gPcAnsiTerminal; // // Platform specific keyboard device path // - // // Debug Agent UART Device Path // -VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = { +VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = { { { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, { - (UINT8) (sizeof (VENDOR_DEVICE_PATH)), - (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (VENDOR_DEVICE_PATH)), + (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) } }, EFI_DEBUG_AGENT_GUID, @@ -74,8 +73,8 @@ VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = { MESSAGING_DEVICE_PATH, MSG_UART_DP, { - (UINT8) (sizeof (UART_DEVICE_PATH)), - (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (UART_DEVICE_PATH)), + (UINT8)((sizeof (UART_DEVICE_PATH)) >> 8) } }, 0, // Reserved @@ -88,7 +87,7 @@ VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = { gEndEntire }; -STATIC USB_KEYBOARD_DEVICE_PATH gUsbKeyboardDevicePath = { +STATIC USB_KEYBOARD_DEVICE_PATH gUsbKeyboardDevicePath = { { { MESSAGING_DEVICE_PATH, @@ -107,14 +106,14 @@ STATIC USB_KEYBOARD_DEVICE_PATH gUsbKeyboardDevicePath = { gEndEntire }; -STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath = { +STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath = { { { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, { - (UINT8) (sizeof (VENDOR_DEVICE_PATH)), - (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (VENDOR_DEVICE_PATH)), + (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) } }, QEMU_RAMFB_GUID, @@ -124,8 +123,8 @@ STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath = { ACPI_DEVICE_PATH, ACPI_ADR_DP, { - (UINT8) (sizeof (ACPI_ADR_DEVICE_PATH)), - (UINT8) ((sizeof (ACPI_ADR_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (ACPI_ADR_DEVICE_PATH)), + (UINT8)((sizeof (ACPI_ADR_DEVICE_PATH)) >> 8) } }, ACPI_DISPLAY_ADR ( @@ -142,14 +141,14 @@ STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath = { gEndEntire }; -STATIC VENDOR_UART_DEVICE_PATH gXenConsoleDevicePath = { +STATIC VENDOR_UART_DEVICE_PATH gXenConsoleDevicePath = { { { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, { - (UINT8) (sizeof (VENDOR_DEVICE_PATH)), - (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (VENDOR_DEVICE_PATH)), + (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) } }, EDKII_SERIAL_PORT_LIB_VENDOR_GUID @@ -159,8 +158,8 @@ STATIC VENDOR_UART_DEVICE_PATH gXenConsoleDevicePath = { MESSAGING_DEVICE_PATH, MSG_UART_DP, { - (UINT8) (sizeof (UART_DEVICE_PATH)), - (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (UART_DEVICE_PATH)), + (UINT8)((sizeof (UART_DEVICE_PATH)) >> 8) } }, 0, @@ -176,9 +175,9 @@ STATIC VENDOR_UART_DEVICE_PATH gXenConsoleDevicePath = { // // Predefined platform default console device path // -PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = { +PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = { { - (EFI_DEVICE_PATH_PROTOCOL *) &gDebugAgentUartDevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gDebugAgentUartDevicePath, (CONSOLE_OUT | CONSOLE_IN | STD_ERROR) }, { @@ -195,7 +194,7 @@ PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = { } }; -PLATFORM_CONSOLE_CONNECT_ENTRY gXenPlatformConsole[] = { +PLATFORM_CONSOLE_CONNECT_ENTRY gXenPlatformConsole[] = { { (EFI_DEVICE_PATH_PROTOCOL *)&gXenConsoleDevicePath, (CONSOLE_OUT | CONSOLE_IN | STD_ERROR) @@ -209,5 +208,4 @@ PLATFORM_CONSOLE_CONNECT_ENTRY gXenPlatformConsole[] = { // // Predefined platform connect sequence // -EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[] = { NULL }; - +EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[] = { NULL }; diff --git a/OvmfPkg/Library/PlatformBootManagerLib/QemuKernel.c b/OvmfPkg/Library/PlatformBootManagerLib/QemuKernel.c index c625592177..1e66e3c452 100644 --- a/OvmfPkg/Library/PlatformBootManagerLib/QemuKernel.c +++ b/OvmfPkg/Library/PlatformBootManagerLib/QemuKernel.c @@ -13,14 +13,13 @@ #include #include - EFI_STATUS TryRunningQemuKernel ( VOID ) { - EFI_STATUS Status; - EFI_HANDLE KernelImageHandle; + EFI_STATUS Status; + EFI_HANDLE KernelImageHandle; Status = QemuLoadKernelImage (&KernelImageHandle); if (EFI_ERROR (Status)) { @@ -30,18 +29,24 @@ TryRunningQemuKernel ( // // Signal the EVT_SIGNAL_READY_TO_BOOT event // - EfiSignalEventReadyToBoot(); + EfiSignalEventReadyToBoot (); - REPORT_STATUS_CODE (EFI_PROGRESS_CODE, - (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT)); + REPORT_STATUS_CODE ( + EFI_PROGRESS_CODE, + (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT) + ); // // Start the image. // Status = QemuStartKernelImage (&KernelImageHandle); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: QemuStartKernelImage(): %r\n", __FUNCTION__, - Status)); + DEBUG (( + DEBUG_ERROR, + "%a: QemuStartKernelImage(): %r\n", + __FUNCTION__, + Status + )); } QemuUnloadKernelImage (KernelImageHandle); diff --git a/OvmfPkg/Library/PlatformBootManagerLibBhyve/BdsPlatform.c b/OvmfPkg/Library/PlatformBootManagerLibBhyve/BdsPlatform.c index 32b70a46d0..119f24b330 100644 --- a/OvmfPkg/Library/PlatformBootManagerLibBhyve/BdsPlatform.c +++ b/OvmfPkg/Library/PlatformBootManagerLibBhyve/BdsPlatform.c @@ -19,17 +19,17 @@ // Global data // -VOID *mEfiDevPathNotifyReg; -EFI_EVENT mEfiDevPathEvent; -VOID *mEmuVariableEventReg; -EFI_EVENT mEmuVariableEvent; -UINT16 mHostBridgeDevId; +VOID *mEfiDevPathNotifyReg; +EFI_EVENT mEfiDevPathEvent; +VOID *mEmuVariableEventReg; +EFI_EVENT mEmuVariableEvent; +UINT16 mHostBridgeDevId; // // Table of host IRQs matching PCI IRQs A-D // (for configuring PCI Interrupt Line register) // -CONST UINT8 PciHostIrqs[] = { +CONST UINT8 PciHostIrqs[] = { 0x0a, 0x0a, 0x0b, 0x0b }; @@ -58,7 +58,6 @@ EFI_STATUS IN PCI_TYPE00 *Pci ); - // // Function prototypes // @@ -72,7 +71,7 @@ VisitAllInstancesOfProtocol ( EFI_STATUS VisitAllPciInstancesOfProtocol ( - IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction + IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction ); VOID @@ -82,24 +81,24 @@ InstallDevicePathCallback ( VOID PlatformRegisterFvBootOption ( - EFI_GUID *FileGuid, - CHAR16 *Description, - UINT32 Attributes + EFI_GUID *FileGuid, + CHAR16 *Description, + UINT32 Attributes ) { - EFI_STATUS Status; - INTN OptionIndex; - EFI_BOOT_MANAGER_LOAD_OPTION NewOption; - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; - UINTN BootOptionCount; - MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode; - EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; + EFI_STATUS Status; + INTN OptionIndex; + EFI_BOOT_MANAGER_LOAD_OPTION NewOption; + EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; + UINTN BootOptionCount; + MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode; + EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; Status = gBS->HandleProtocol ( gImageHandle, &gEfiLoadedImageProtocolGuid, - (VOID **) &LoadedImage + (VOID **)&LoadedImage ); ASSERT_EFI_ERROR (Status); @@ -108,7 +107,7 @@ PlatformRegisterFvBootOption ( ASSERT (DevicePath != NULL); DevicePath = AppendDevicePathNode ( DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *) &FileNode + (EFI_DEVICE_PATH_PROTOCOL *)&FileNode ); ASSERT (DevicePath != NULL); @@ -126,17 +125,21 @@ PlatformRegisterFvBootOption ( FreePool (DevicePath); BootOptions = EfiBootManagerGetLoadOptions ( - &BootOptionCount, LoadOptionTypeBoot + &BootOptionCount, + LoadOptionTypeBoot ); OptionIndex = EfiBootManagerFindLoadOption ( - &NewOption, BootOptions, BootOptionCount + &NewOption, + BootOptions, + BootOptionCount ); if (OptionIndex == -1) { Status = EfiBootManagerAddLoadOptionVariable (&NewOption, MAX_UINTN); ASSERT_EFI_ERROR (Status); } + EfiBootManagerFreeLoadOption (&NewOption); EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount); } @@ -160,27 +163,30 @@ RemoveStaleFvFileOptions ( VOID ) { - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; - UINTN BootOptionCount; - UINTN Index; + EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; + UINTN BootOptionCount; + UINTN Index; - BootOptions = EfiBootManagerGetLoadOptions (&BootOptionCount, - LoadOptionTypeBoot); + BootOptions = EfiBootManagerGetLoadOptions ( + &BootOptionCount, + LoadOptionTypeBoot + ); for (Index = 0; Index < BootOptionCount; ++Index) { - EFI_DEVICE_PATH_PROTOCOL *Node1, *Node2, *SearchNode; - EFI_STATUS Status; - EFI_HANDLE FvHandle; + EFI_DEVICE_PATH_PROTOCOL *Node1, *Node2, *SearchNode; + EFI_STATUS Status; + EFI_HANDLE FvHandle; // // If the device path starts with neither MemoryMapped(...) nor Fv(...), // then keep the boot option. // Node1 = BootOptions[Index].FilePath; - if (!(DevicePathType (Node1) == HARDWARE_DEVICE_PATH && - DevicePathSubType (Node1) == HW_MEMMAP_DP) && - !(DevicePathType (Node1) == MEDIA_DEVICE_PATH && - DevicePathSubType (Node1) == MEDIA_PIWG_FW_VOL_DP)) { + if (!((DevicePathType (Node1) == HARDWARE_DEVICE_PATH) && + (DevicePathSubType (Node1) == HW_MEMMAP_DP)) && + !((DevicePathType (Node1) == MEDIA_DEVICE_PATH) && + (DevicePathSubType (Node1) == MEDIA_PIWG_FW_VOL_DP))) + { continue; } @@ -189,8 +195,9 @@ RemoveStaleFvFileOptions ( // option. // Node2 = NextDevicePathNode (Node1); - if (DevicePathType (Node2) != MEDIA_DEVICE_PATH || - DevicePathSubType (Node2) != MEDIA_PIWG_FW_FILE_DP) { + if ((DevicePathType (Node2) != MEDIA_DEVICE_PATH) || + (DevicePathSubType (Node2) != MEDIA_PIWG_FW_FILE_DP)) + { continue; } @@ -201,23 +208,29 @@ RemoveStaleFvFileOptions ( // boot option. // SearchNode = Node1; - Status = gBS->LocateDevicePath (&gEfiFirmwareVolume2ProtocolGuid, - &SearchNode, &FvHandle); + Status = gBS->LocateDevicePath ( + &gEfiFirmwareVolume2ProtocolGuid, + &SearchNode, + &FvHandle + ); if (!EFI_ERROR (Status)) { // // The firmware volume was found; now let's see if it contains the FvFile // identified by GUID. // - EFI_FIRMWARE_VOLUME2_PROTOCOL *FvProtocol; - MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFileNode; - UINTN BufferSize; - EFI_FV_FILETYPE FoundType; - EFI_FV_FILE_ATTRIBUTES FileAttributes; - UINT32 AuthenticationStatus; - - Status = gBS->HandleProtocol (FvHandle, &gEfiFirmwareVolume2ProtocolGuid, - (VOID **)&FvProtocol); + EFI_FIRMWARE_VOLUME2_PROTOCOL *FvProtocol; + MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFileNode; + UINTN BufferSize; + EFI_FV_FILETYPE FoundType; + EFI_FV_FILE_ATTRIBUTES FileAttributes; + UINT32 AuthenticationStatus; + + Status = gBS->HandleProtocol ( + FvHandle, + &gEfiFirmwareVolume2ProtocolGuid, + (VOID **)&FvProtocol + ); ASSERT_EFI_ERROR (Status); FvFileNode = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)Node2; @@ -246,23 +259,29 @@ RemoveStaleFvFileOptions ( // Delete the boot option. // Status = EfiBootManagerDeleteLoadOptionVariable ( - BootOptions[Index].OptionNumber, LoadOptionTypeBoot); + BootOptions[Index].OptionNumber, + LoadOptionTypeBoot + ); DEBUG_CODE_BEGIN (); - CHAR16 *DevicePathString; + CHAR16 *DevicePathString; + + DevicePathString = ConvertDevicePathToText ( + BootOptions[Index].FilePath, + FALSE, + FALSE + ); + DEBUG (( + EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_VERBOSE, + "%a: removing stale Boot#%04x %s: %r\n", + __FUNCTION__, + (UINT32)BootOptions[Index].OptionNumber, + DevicePathString == NULL ? L"" : DevicePathString, + Status + )); + if (DevicePathString != NULL) { + FreePool (DevicePathString); + } - DevicePathString = ConvertDevicePathToText(BootOptions[Index].FilePath, - FALSE, FALSE); - DEBUG (( - EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_VERBOSE, - "%a: removing stale Boot#%04x %s: %r\n", - __FUNCTION__, - (UINT32)BootOptions[Index].OptionNumber, - DevicePathString == NULL ? L"" : DevicePathString, - Status - )); - if (DevicePathString != NULL) { - FreePool (DevicePathString); - } DEBUG_CODE_END (); } @@ -274,18 +293,18 @@ PlatformRegisterOptionsAndKeys ( VOID ) { - EFI_STATUS Status; - EFI_INPUT_KEY Enter; - EFI_INPUT_KEY F2; - EFI_INPUT_KEY Esc; - EFI_BOOT_MANAGER_LOAD_OPTION BootOption; + EFI_STATUS Status; + EFI_INPUT_KEY Enter; + EFI_INPUT_KEY F2; + EFI_INPUT_KEY Esc; + EFI_BOOT_MANAGER_LOAD_OPTION BootOption; // // Register ENTER as CONTINUE key // Enter.ScanCode = SCAN_NULL; Enter.UnicodeChar = CHAR_CARRIAGE_RETURN; - Status = EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL); + Status = EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL); ASSERT_EFI_ERROR (Status); // @@ -295,14 +314,22 @@ PlatformRegisterOptionsAndKeys ( F2.UnicodeChar = CHAR_NULL; Esc.ScanCode = SCAN_ESC; Esc.UnicodeChar = CHAR_NULL; - Status = EfiBootManagerGetBootManagerMenu (&BootOption); + Status = EfiBootManagerGetBootManagerMenu (&BootOption); ASSERT_EFI_ERROR (Status); Status = EfiBootManagerAddKeyOptionVariable ( - NULL, (UINT16) BootOption.OptionNumber, 0, &F2, NULL + NULL, + (UINT16)BootOption.OptionNumber, + 0, + &F2, + NULL ); ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED); Status = EfiBootManagerAddKeyOptionVariable ( - NULL, (UINT16) BootOption.OptionNumber, 0, &Esc, NULL + NULL, + (UINT16)BootOption.OptionNumber, + 0, + &Esc, + NULL ); ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED); } @@ -319,9 +346,9 @@ STATIC EFI_STATUS EFIAPI ConnectVirtioPciRng ( - IN EFI_HANDLE Handle, - IN VOID *Instance, - IN VOID *Context + IN EFI_HANDLE Handle, + IN VOID *Instance, + IN VOID *Context ); STATIC @@ -333,6 +360,7 @@ SaveS3BootScript ( // // BDS Platform Functions // + /** Do the platform init, can be customized by OEM/IBV @@ -352,14 +380,17 @@ PlatformBootManagerBeforeConsole ( VOID ) { - EFI_HANDLE Handle; - EFI_STATUS Status; + EFI_HANDLE Handle; + EFI_STATUS Status; DEBUG ((DEBUG_INFO, "PlatformBootManagerBeforeConsole\n")); InstallDevicePathCallback (); - VisitAllInstancesOfProtocol (&gEfiPciRootBridgeIoProtocolGuid, - ConnectRootBridge, NULL); + VisitAllInstancesOfProtocol ( + &gEfiPciRootBridgeIoProtocolGuid, + ConnectRootBridge, + NULL + ); // // Signal the ACPI platform driver that it can download QEMU ACPI tables. @@ -389,9 +420,12 @@ PlatformBootManagerBeforeConsole ( // Any TPM 2 Physical Presence Interface opcode must be handled before. // Handle = NULL; - Status = gBS->InstallProtocolInterface (&Handle, - &gEfiDxeSmmReadyToLockProtocolGuid, EFI_NATIVE_INTERFACE, - NULL); + Status = gBS->InstallProtocolInterface ( + &Handle, + &gEfiDxeSmmReadyToLockProtocolGuid, + EFI_NATIVE_INTERFACE, + NULL + ); ASSERT_EFI_ERROR (Status); // @@ -406,11 +440,13 @@ PlatformBootManagerBeforeConsole ( // Install both VIRTIO_DEVICE_PROTOCOL and (dependent) EFI_RNG_PROTOCOL // instances on Virtio PCI RNG devices. // - VisitAllInstancesOfProtocol (&gEfiPciIoProtocolGuid, ConnectVirtioPciRng, - NULL); + VisitAllInstancesOfProtocol ( + &gEfiPciIoProtocolGuid, + ConnectVirtioPciRng, + NULL + ); } - EFI_STATUS EFIAPI ConnectRootBridge ( @@ -419,7 +455,7 @@ ConnectRootBridge ( IN VOID *Context ) { - EFI_STATUS Status; + EFI_STATUS Status; // // Make the PCI bus driver connect the root bridge, non-recursively. This @@ -435,34 +471,39 @@ ConnectRootBridge ( return Status; } - STATIC EFI_STATUS EFIAPI ConnectVirtioPciRng ( - IN EFI_HANDLE Handle, - IN VOID *Instance, - IN VOID *Context + IN EFI_HANDLE Handle, + IN VOID *Instance, + IN VOID *Context ) { - EFI_PCI_IO_PROTOCOL *PciIo; - EFI_STATUS Status; - UINT16 VendorId; - UINT16 DeviceId; - UINT8 RevisionId; - BOOLEAN Virtio10; - UINT16 SubsystemId; + EFI_PCI_IO_PROTOCOL *PciIo; + EFI_STATUS Status; + UINT16 VendorId; + UINT16 DeviceId; + UINT8 RevisionId; + BOOLEAN Virtio10; + UINT16 SubsystemId; PciIo = Instance; // // Read and check VendorId. // - Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, PCI_VENDOR_ID_OFFSET, - 1, &VendorId); + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint16, + PCI_VENDOR_ID_OFFSET, + 1, + &VendorId + ); if (EFI_ERROR (Status)) { goto Error; } + if (VendorId != VIRTIO_VENDOR_ID) { return EFI_SUCCESS; } @@ -470,13 +511,24 @@ ConnectVirtioPciRng ( // // Read DeviceId and RevisionId. // - Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, PCI_DEVICE_ID_OFFSET, - 1, &DeviceId); + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint16, + PCI_DEVICE_ID_OFFSET, + 1, + &DeviceId + ); if (EFI_ERROR (Status)) { goto Error; } - Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8, PCI_REVISION_ID_OFFSET, - 1, &RevisionId); + + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint8, + PCI_REVISION_ID_OFFSET, + 1, + &RevisionId + ); if (EFI_ERROR (Status)) { goto Error; } @@ -488,10 +540,11 @@ ConnectVirtioPciRng ( // SubsystemId will only play a sanity-check role. Otherwise, DeviceId can // only be sanity-checked, and SubsystemId will decide. // - if (DeviceId == 0x1040 + VIRTIO_SUBSYSTEM_ENTROPY_SOURCE && - RevisionId >= 0x01) { + if ((DeviceId == 0x1040 + VIRTIO_SUBSYSTEM_ENTROPY_SOURCE) && + (RevisionId >= 0x01)) + { Virtio10 = TRUE; - } else if (DeviceId >= 0x1000 && DeviceId <= 0x103F && RevisionId == 0x00) { + } else if ((DeviceId >= 0x1000) && (DeviceId <= 0x103F) && (RevisionId == 0x00)) { Virtio10 = FALSE; } else { return EFI_SUCCESS; @@ -500,13 +553,20 @@ ConnectVirtioPciRng ( // // Read and check SubsystemId as dictated by Virtio10. // - Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, - PCI_SUBSYSTEM_ID_OFFSET, 1, &SubsystemId); + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint16, + PCI_SUBSYSTEM_ID_OFFSET, + 1, + &SubsystemId + ); if (EFI_ERROR (Status)) { goto Error; } - if ((Virtio10 && SubsystemId >= 0x40) || - (!Virtio10 && SubsystemId == VIRTIO_SUBSYSTEM_ENTROPY_SOURCE)) { + + if ((Virtio10 && (SubsystemId >= 0x40)) || + (!Virtio10 && (SubsystemId == VIRTIO_SUBSYSTEM_ENTROPY_SOURCE))) + { Status = gBS->ConnectController ( Handle, // ControllerHandle NULL, // DriverImageHandle -- connect all drivers @@ -517,6 +577,7 @@ ConnectVirtioPciRng ( goto Error; } } + return EFI_SUCCESS; Error: @@ -524,7 +585,6 @@ Error: return Status; } - /** Add IsaKeyboard to ConIn; add IsaSerial to ConOut, ConIn, ErrOut. @@ -538,7 +598,7 @@ Error: **/ EFI_STATUS PrepareLpcBridgeDevicePath ( - IN EFI_HANDLE DeviceHandle + IN EFI_HANDLE DeviceHandle ) { EFI_STATUS Status; @@ -547,50 +607,59 @@ PrepareLpcBridgeDevicePath ( CHAR16 *DevPathStr; DevicePath = NULL; - Status = gBS->HandleProtocol ( - DeviceHandle, - &gEfiDevicePathProtocolGuid, - (VOID*)&DevicePath - ); + Status = gBS->HandleProtocol ( + DeviceHandle, + &gEfiDevicePathProtocolGuid, + (VOID *)&DevicePath + ); if (EFI_ERROR (Status)) { return Status; } + TempDevicePath = DevicePath; // // Register Keyboard // - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gPnpPs2KeyboardDeviceNode); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gPnpPs2KeyboardDeviceNode + ); EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); // // Register COM1 // - DevicePath = TempDevicePath; + DevicePath = TempDevicePath; gPnp16550ComPortDeviceNode.UID = 0; - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode); - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode + ); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode + ); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode + ); // // Print Device Path // DevPathStr = ConvertDevicePathToText (DevicePath, FALSE, FALSE); if (DevPathStr != NULL) { - DEBUG(( + DEBUG (( DEBUG_INFO, "BdsPlatform.c+%d: COM%d DevPath: %s\n", DEBUG_LINE_NUMBER, gPnp16550ComPortDeviceNode.UID + 1, DevPathStr )); - FreePool(DevPathStr); + FreePool (DevPathStr); } EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); @@ -604,19 +673,19 @@ PrepareLpcBridgeDevicePath ( EFI_STATUS GetGopDevicePath ( - IN EFI_DEVICE_PATH_PROTOCOL *PciDevicePath, - OUT EFI_DEVICE_PATH_PROTOCOL **GopDevicePath - ) + IN EFI_DEVICE_PATH_PROTOCOL *PciDevicePath, + OUT EFI_DEVICE_PATH_PROTOCOL **GopDevicePath + ) { - UINTN Index; - EFI_STATUS Status; - EFI_HANDLE PciDeviceHandle; - EFI_DEVICE_PATH_PROTOCOL *TempDevicePath; - EFI_DEVICE_PATH_PROTOCOL *TempPciDevicePath; - UINTN GopHandleCount; - EFI_HANDLE *GopHandleBuffer; - - if (PciDevicePath == NULL || GopDevicePath == NULL) { + UINTN Index; + EFI_STATUS Status; + EFI_HANDLE PciDeviceHandle; + EFI_DEVICE_PATH_PROTOCOL *TempDevicePath; + EFI_DEVICE_PATH_PROTOCOL *TempPciDevicePath; + UINTN GopHandleCount; + EFI_HANDLE *GopHandleBuffer; + + if ((PciDevicePath == NULL) || (GopDevicePath == NULL)) { return EFI_INVALID_PARAMETER; } @@ -655,16 +724,21 @@ GetGopDevicePath ( // Add all the child handles as possible Console Device // for (Index = 0; Index < GopHandleCount; Index++) { - Status = gBS->HandleProtocol (GopHandleBuffer[Index], - &gEfiDevicePathProtocolGuid, (VOID*)&TempDevicePath); + Status = gBS->HandleProtocol ( + GopHandleBuffer[Index], + &gEfiDevicePathProtocolGuid, + (VOID *)&TempDevicePath + ); if (EFI_ERROR (Status)) { continue; } + if (CompareMem ( PciDevicePath, TempDevicePath, GetDevicePathSize (PciDevicePath) - END_DEVICE_PATH_LENGTH - ) == 0) { + ) == 0) + { // // In current implementation, we only enable one of the child handles // as console device, i.e. sotre one of the child handle's device @@ -682,6 +756,7 @@ GetGopDevicePath ( EfiBootManagerUpdateConsoleVariable (ConOutDev, TempDevicePath, NULL); } } + gBS->FreePool (GopHandleBuffer); } @@ -700,7 +775,7 @@ GetGopDevicePath ( **/ EFI_STATUS PreparePciDisplayDevicePath ( - IN EFI_HANDLE DeviceHandle + IN EFI_HANDLE DeviceHandle ) { EFI_STATUS Status; @@ -709,11 +784,11 @@ PreparePciDisplayDevicePath ( DevicePath = NULL; GopDevicePath = NULL; - Status = gBS->HandleProtocol ( - DeviceHandle, - &gEfiDevicePathProtocolGuid, - (VOID*)&DevicePath - ); + Status = gBS->HandleProtocol ( + DeviceHandle, + &gEfiDevicePathProtocolGuid, + (VOID *)&DevicePath + ); if (EFI_ERROR (Status)) { return Status; } @@ -739,26 +814,30 @@ PreparePciDisplayDevicePath ( **/ EFI_STATUS PreparePciSerialDevicePath ( - IN EFI_HANDLE DeviceHandle + IN EFI_HANDLE DeviceHandle ) { EFI_STATUS Status; EFI_DEVICE_PATH_PROTOCOL *DevicePath; DevicePath = NULL; - Status = gBS->HandleProtocol ( - DeviceHandle, - &gEfiDevicePathProtocolGuid, - (VOID*)&DevicePath - ); + Status = gBS->HandleProtocol ( + DeviceHandle, + &gEfiDevicePathProtocolGuid, + (VOID *)&DevicePath + ); if (EFI_ERROR (Status)) { return Status; } - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode + ); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode + ); EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); @@ -774,24 +853,24 @@ VisitAllInstancesOfProtocol ( IN VOID *Context ) { - EFI_STATUS Status; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN Index; - VOID *Instance; + EFI_STATUS Status; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + UINTN Index; + VOID *Instance; // // Start to check all the PciIo to find all possible device // - HandleCount = 0; + HandleCount = 0; HandleBuffer = NULL; - Status = gBS->LocateHandleBuffer ( - ByProtocol, - Id, - NULL, - &HandleCount, - &HandleBuffer - ); + Status = gBS->LocateHandleBuffer ( + ByProtocol, + Id, + NULL, + &HandleCount, + &HandleBuffer + ); if (EFI_ERROR (Status)) { return Status; } @@ -802,11 +881,11 @@ VisitAllInstancesOfProtocol ( continue; } - Status = (*CallBackFunction) ( - HandleBuffer[Index], - Instance, - Context - ); + Status = (*CallBackFunction)( + HandleBuffer[Index], + Instance, + Context + ); } gBS->FreePool (HandleBuffer); @@ -814,7 +893,6 @@ VisitAllInstancesOfProtocol ( return EFI_SUCCESS; } - EFI_STATUS EFIAPI VisitingAPciInstance ( @@ -823,49 +901,45 @@ VisitingAPciInstance ( IN VOID *Context ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; - PciIo = (EFI_PCI_IO_PROTOCOL*) Instance; + PciIo = (EFI_PCI_IO_PROTOCOL *)Instance; // // Check for all PCI device // Status = PciIo->Pci.Read ( - PciIo, - EfiPciIoWidthUint32, - 0, - sizeof (Pci) / sizeof (UINT32), - &Pci - ); + PciIo, + EfiPciIoWidthUint32, + 0, + sizeof (Pci) / sizeof (UINT32), + &Pci + ); if (EFI_ERROR (Status)) { return Status; } - return (*(VISIT_PCI_INSTANCE_CALLBACK)(UINTN) Context) ( - Handle, - PciIo, - &Pci - ); - + return (*(VISIT_PCI_INSTANCE_CALLBACK)(UINTN)Context)( + Handle, + PciIo, + &Pci + ); } - - EFI_STATUS VisitAllPciInstances ( - IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction + IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction ) { return VisitAllInstancesOfProtocol ( &gEfiPciIoProtocolGuid, VisitingAPciInstance, - (VOID*)(UINTN) CallBackFunction + (VOID *)(UINTN)CallBackFunction ); } - /** Do platform specific PCI Device check and add them to ConOut, ConIn, ErrOut. @@ -887,14 +961,14 @@ DetectAndPreparePlatformPciDevicePath ( IN PCI_TYPE00 *Pci ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationEnable, - EFI_PCI_DEVICE_ENABLE, - NULL - ); + PciIo, + EfiPciIoAttributeOperationEnable, + EFI_PCI_DEVICE_ENABLE, + NULL + ); ASSERT_EFI_ERROR (Status); // @@ -905,7 +979,8 @@ DetectAndPreparePlatformPciDevicePath ( (Pci->Hdr.VendorId == 0x8086) && (Pci->Hdr.DeviceId == 0x7000) ) - ) { + ) + { // // Add IsaKeyboard to ConIn, // add IsaSerial to ConOut, ConIn, ErrOut @@ -914,6 +989,7 @@ DetectAndPreparePlatformPciDevicePath ( PrepareLpcBridgeDevicePath (Handle); return EFI_SUCCESS; } + // // Here we decide which Serial device to enable in PCI bus // @@ -941,7 +1017,6 @@ DetectAndPreparePlatformPciDevicePath ( return Status; } - /** Connect the predefined platform default console device. @@ -951,10 +1026,10 @@ DetectAndPreparePlatformPciDevicePath ( **/ VOID PlatformInitializeConsole ( - IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole + IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole ) { - UINTN Index; + UINTN Index; // // Do platform specific PCI Device check and add them to ConOut, ConIn, @@ -972,21 +1047,31 @@ PlatformInitializeConsole ( // Update the console variable with the connect type // if ((PlatformConsole[Index].ConnectType & CONSOLE_IN) == CONSOLE_IN) { - EfiBootManagerUpdateConsoleVariable (ConIn, - PlatformConsole[Index].DevicePath, NULL); + EfiBootManagerUpdateConsoleVariable ( + ConIn, + PlatformConsole[Index].DevicePath, + NULL + ); } + if ((PlatformConsole[Index].ConnectType & CONSOLE_OUT) == CONSOLE_OUT) { - EfiBootManagerUpdateConsoleVariable (ConOut, - PlatformConsole[Index].DevicePath, NULL); + EfiBootManagerUpdateConsoleVariable ( + ConOut, + PlatformConsole[Index].DevicePath, + NULL + ); } + if ((PlatformConsole[Index].ConnectType & STD_ERROR) == STD_ERROR) { - EfiBootManagerUpdateConsoleVariable (ErrOut, - PlatformConsole[Index].DevicePath, NULL); + EfiBootManagerUpdateConsoleVariable ( + ErrOut, + PlatformConsole[Index].DevicePath, + NULL + ); } } } - /** Configure PCI Interrupt Line register for applicable devices Ported from SeaBIOS, src/fw/pciinit.c, *_pci_slot_get_irq() @@ -1017,15 +1102,15 @@ SetPciIntLine ( Status = EFI_SUCCESS; if (PciHdr->Device.InterruptPin != 0) { - DevPathNode = DevicePathFromHandle (Handle); ASSERT (DevPathNode != NULL); DevPath = DevPathNode; RootBusNumber = 0; - if (DevicePathType (DevPathNode) == ACPI_DEVICE_PATH && - DevicePathSubType (DevPathNode) == ACPI_DP && - ((ACPI_HID_DEVICE_PATH *)DevPathNode)->HID == EISA_PNP_ID(0x0A03)) { + if ((DevicePathType (DevPathNode) == ACPI_DEVICE_PATH) && + (DevicePathSubType (DevPathNode) == ACPI_DP) && + (((ACPI_HID_DEVICE_PATH *)DevPathNode)->HID == EISA_PNP_ID (0x0A03))) + { RootBusNumber = ((ACPI_HID_DEVICE_PATH *)DevPathNode)->UID; } @@ -1033,13 +1118,13 @@ SetPciIntLine ( // Compute index into PciHostIrqs[] table by walking // the device path and adding up all device numbers // - Status = EFI_NOT_FOUND; + Status = EFI_NOT_FOUND; RootSlot = 0; - Idx = PciHdr->Device.InterruptPin - 1; + Idx = PciHdr->Device.InterruptPin - 1; while (!IsDevicePathEnd (DevPathNode)) { - if (DevicePathType (DevPathNode) == HARDWARE_DEVICE_PATH && - DevicePathSubType (DevPathNode) == HW_PCI_DP) { - + if ((DevicePathType (DevPathNode) == HARDWARE_DEVICE_PATH) && + (DevicePathSubType (DevPathNode) == HW_PCI_DP)) + { Idx += ((PCI_DEVICE_PATH *)DevPathNode)->Device; // @@ -1050,18 +1135,20 @@ SetPciIntLine ( // Q35 cases with more than 24 slots on the root bus. // if (Status != EFI_SUCCESS) { - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; RootSlot = ((PCI_DEVICE_PATH *)DevPathNode)->Device; } } DevPathNode = NextDevicePathNode (DevPathNode); } + if (EFI_ERROR (Status)) { return Status; } - if (RootBusNumber == 0 && RootSlot == 0) { - DEBUG(( + + if ((RootBusNumber == 0) && (RootSlot == 0)) { + DEBUG (( DEBUG_ERROR, "%a: PCI host bridge (00:00.0) should have no interrupts!\n", __FUNCTION__ @@ -1095,29 +1182,39 @@ SetPciIntLine ( // Idx -= RootSlot; } + break; default: ASSERT (FALSE); // should never get here } - Idx %= ARRAY_SIZE (PciHostIrqs); + + Idx %= ARRAY_SIZE (PciHostIrqs); IrqLine = PciHostIrqs[Idx]; DEBUG_CODE_BEGIN (); { - CHAR16 *DevPathString; - STATIC CHAR16 Fallback[] = L""; - UINTN Segment, Bus, Device, Function; + CHAR16 *DevPathString; + STATIC CHAR16 Fallback[] = L""; + UINTN Segment, Bus, Device, Function; DevPathString = ConvertDevicePathToText (DevPath, FALSE, FALSE); if (DevPathString == NULL) { DevPathString = Fallback; } + Status = PciIo->GetLocation (PciIo, &Segment, &Bus, &Device, &Function); ASSERT_EFI_ERROR (Status); - DEBUG ((DEBUG_VERBOSE, "%a: [%02x:%02x.%x] %s -> 0x%02x\n", __FUNCTION__, - (UINT32)Bus, (UINT32)Device, (UINT32)Function, DevPathString, - IrqLine)); + DEBUG (( + DEBUG_VERBOSE, + "%a: [%02x:%02x.%x] %s -> 0x%02x\n", + __FUNCTION__, + (UINT32)Bus, + (UINT32)Device, + (UINT32)Function, + DevPathString, + IrqLine + )); if (DevPathString != Fallback) { FreePool (DevPathString); @@ -1129,18 +1226,17 @@ SetPciIntLine ( // Set PCI Interrupt Line register for this device to PciHostIrqs[Idx] // Status = PciIo->Pci.Write ( - PciIo, - EfiPciIoWidthUint8, - PCI_INT_LINE_OFFSET, - 1, - &IrqLine - ); + PciIo, + EfiPciIoWidthUint8, + PCI_INT_LINE_OFFSET, + 1, + &IrqLine + ); } return Status; } - VOID PciAcpiInitialization ( ) @@ -1179,8 +1275,12 @@ PciAcpiInitialization ( PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x6b), 0x0b); // H break; default: - DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", - __FUNCTION__, mHostBridgeDevId)); + DEBUG (( + DEBUG_ERROR, + "%a: Unknown Host Bridge Device ID: 0x%04x\n", + __FUNCTION__, + mHostBridgeDevId + )); ASSERT (FALSE); return; } @@ -1213,11 +1313,11 @@ ConnectRecursivelyIfPciMassStorage ( // if (IS_CLASS1 (PciHeader, PCI_CLASS_MASS_STORAGE)) { DevicePath = NULL; - Status = gBS->HandleProtocol ( - Handle, - &gEfiDevicePathProtocolGuid, - (VOID*)&DevicePath - ); + Status = gBS->HandleProtocol ( + Handle, + &gEfiDevicePathProtocolGuid, + (VOID *)&DevicePath + ); if (EFI_ERROR (Status)) { return Status; } @@ -1227,29 +1327,27 @@ ConnectRecursivelyIfPciMassStorage ( // DevPathStr = ConvertDevicePathToText (DevicePath, FALSE, FALSE); if (DevPathStr != NULL) { - DEBUG(( + DEBUG (( DEBUG_INFO, "Found %s device: %s\n", (IS_CLASS1 (PciHeader, PCI_CLASS_MASS_STORAGE) ? L"Mass Storage" : L"Xen" - ), + ), DevPathStr )); - FreePool(DevPathStr); + FreePool (DevPathStr); } Status = gBS->ConnectController (Handle, NULL, NULL, TRUE); if (EFI_ERROR (Status)) { return Status; } - } return EFI_SUCCESS; } - /** This notification function is invoked when the EMU Variable FVB has been changed. @@ -1261,15 +1359,14 @@ ConnectRecursivelyIfPciMassStorage ( VOID EFIAPI EmuVariablesUpdatedCallback ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { DEBUG ((DEBUG_INFO, "EmuVariablesUpdatedCallback\n")); UpdateNvVarsOnFileSystem (); } - EFI_STATUS EFIAPI VisitingFileSystemInstance ( @@ -1292,7 +1389,7 @@ VisitingFileSystemInstance ( } ConnectedToFileSystem = TRUE; - mEmuVariableEvent = + mEmuVariableEvent = EfiCreateProtocolNotifyEvent ( &gEfiDevicePathProtocolGuid, TPL_CALLBACK, @@ -1300,14 +1397,15 @@ VisitingFileSystemInstance ( NULL, &mEmuVariableEventReg ); - PcdStatus = PcdSet64S (PcdEmuVariableEvent, - (UINT64)(UINTN) mEmuVariableEvent); + PcdStatus = PcdSet64S ( + PcdEmuVariableEvent, + (UINT64)(UINTN)mEmuVariableEvent + ); ASSERT_RETURN_ERROR (PcdStatus); return EFI_SUCCESS; } - VOID PlatformBdsRestoreNvVarsFromHardDisk ( ) @@ -1318,7 +1416,6 @@ PlatformBdsRestoreNvVarsFromHardDisk ( VisitingFileSystemInstance, NULL ); - } /** @@ -1331,7 +1428,7 @@ PlatformBdsConnectSequence ( VOID ) { - UINTN Index; + UINTN Index; DEBUG ((DEBUG_INFO, "PlatformBdsConnectSequence\n")); @@ -1363,8 +1460,8 @@ PlatformBdsConnectSequence ( Note that DxeSmmReadyToLock must be signaled after this function returns; otherwise the script wouldn't be saved actually. **/ -#if defined(__GNUC__) -__attribute__((unused)) +#if defined (__GNUC__) +__attribute__ ((unused)) #endif STATIC VOID @@ -1372,12 +1469,15 @@ SaveS3BootScript ( VOID ) { - EFI_STATUS Status; - EFI_S3_SAVE_STATE_PROTOCOL *BootScript; - STATIC CONST UINT8 Info[] = { 0xDE, 0xAD, 0xBE, 0xEF }; + EFI_STATUS Status; + EFI_S3_SAVE_STATE_PROTOCOL *BootScript; + STATIC CONST UINT8 Info[] = { 0xDE, 0xAD, 0xBE, 0xEF }; - Status = gBS->LocateProtocol (&gEfiS3SaveStateProtocolGuid, NULL, - (VOID **) &BootScript); + Status = gBS->LocateProtocol ( + &gEfiS3SaveStateProtocolGuid, + NULL, + (VOID **)&BootScript + ); ASSERT_EFI_ERROR (Status); // @@ -1385,13 +1485,15 @@ SaveS3BootScript ( // implementation embeds a deep copy of the info in the boot script, rather // than storing just a pointer to runtime or NVS storage. // - Status = BootScript->Write(BootScript, EFI_BOOT_SCRIPT_INFORMATION_OPCODE, - (UINT32) sizeof Info, - (EFI_PHYSICAL_ADDRESS)(UINTN) &Info); + Status = BootScript->Write ( + BootScript, + EFI_BOOT_SCRIPT_INFORMATION_OPCODE, + (UINT32)sizeof Info, + (EFI_PHYSICAL_ADDRESS)(UINTN)&Info + ); ASSERT_EFI_ERROR (Status); } - /** Do the platform specific action after the console is ready @@ -1411,18 +1513,22 @@ PlatformBootManagerAfterConsole ( VOID ) { - EFI_BOOT_MODE BootMode; + EFI_BOOT_MODE BootMode; DEBUG ((DEBUG_INFO, "PlatformBootManagerAfterConsole\n")); if (PcdGetBool (PcdOvmfFlashVariablesEnable)) { - DEBUG ((DEBUG_INFO, "PlatformBdsPolicyBehavior: not restoring NvVars " - "from disk since flash variables appear to be supported.\n")); + DEBUG (( + DEBUG_INFO, + "PlatformBdsPolicyBehavior: not restoring NvVars " + "from disk since flash variables appear to be supported.\n" + )); } else { // // Try to restore variables from the hard disk early so // they can be used for the other BDS connect operations. // + /* XXX Calling this causes Keyboard to be removed from ConIn which results in unresponsive guest boot loaders in the GUI. Restore it when we figure out what is needed to get NvVars storage done @@ -1464,7 +1570,9 @@ PlatformBootManagerAfterConsole ( // Register UEFI Shell // PlatformRegisterFvBootOption ( - &gUefiShellFileGuid, L"EFI Internal Shell", LOAD_OPTION_ACTIVE + &gUefiShellFileGuid, + L"EFI Internal Shell", + LOAD_OPTION_ACTIVE ); RemoveStaleFvFileOptions (); @@ -1483,31 +1591,31 @@ PlatformBootManagerAfterConsole ( VOID EFIAPI NotifyDevPath ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - EFI_HANDLE Handle; - EFI_STATUS Status; - UINTN BufferSize; - EFI_DEVICE_PATH_PROTOCOL *DevPathNode; - ATAPI_DEVICE_PATH *Atapi; + EFI_HANDLE Handle; + EFI_STATUS Status; + UINTN BufferSize; + EFI_DEVICE_PATH_PROTOCOL *DevPathNode; + ATAPI_DEVICE_PATH *Atapi; // // Examine all new handles // - for (;;) { + for ( ; ;) { // // Get the next handle // BufferSize = sizeof (Handle); - Status = gBS->LocateHandle ( - ByRegisterNotify, - NULL, - mEfiDevPathNotifyReg, - &BufferSize, - &Handle - ); + Status = gBS->LocateHandle ( + ByRegisterNotify, + NULL, + mEfiDevPathNotifyReg, + &BufferSize, + &Handle + ); // // If not found, we're done @@ -1523,8 +1631,11 @@ NotifyDevPath ( // // Get the DevicePath protocol on that handle // - Status = gBS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, - (VOID **)&DevPathNode); + Status = gBS->HandleProtocol ( + Handle, + &gEfiDevicePathProtocolGuid, + (VOID **)&DevPathNode + ); ASSERT_EFI_ERROR (Status); while (!IsDevicePathEnd (DevPathNode)) { @@ -1532,16 +1643,17 @@ NotifyDevPath ( // Find the handler to dump this device path node // if ( - (DevicePathType(DevPathNode) == MESSAGING_DEVICE_PATH) && - (DevicePathSubType(DevPathNode) == MSG_ATAPI_DP) - ) { - Atapi = (ATAPI_DEVICE_PATH*) DevPathNode; + (DevicePathType (DevPathNode) == MESSAGING_DEVICE_PATH) && + (DevicePathSubType (DevPathNode) == MSG_ATAPI_DP) + ) + { + Atapi = (ATAPI_DEVICE_PATH *)DevPathNode; PciOr16 ( PCI_LIB_ADDRESS ( 0, 1, 1, - (Atapi->PrimarySecondary == 1) ? 0x42: 0x40 + (Atapi->PrimarySecondary == 1) ? 0x42 : 0x40 ), BIT15 ); @@ -1557,7 +1669,6 @@ NotifyDevPath ( return; } - VOID InstallDevicePathCallback ( VOID @@ -1565,12 +1676,12 @@ InstallDevicePathCallback ( { DEBUG ((DEBUG_INFO, "Registered NotifyDevPath Event\n")); mEfiDevPathEvent = EfiCreateProtocolNotifyEvent ( - &gEfiDevicePathProtocolGuid, - TPL_CALLBACK, - NotifyDevPath, - NULL, - &mEfiDevPathNotifyReg - ); + &gEfiDevicePathProtocolGuid, + TPL_CALLBACK, + NotifyDevPath, + NULL, + &mEfiDevPathNotifyReg + ); } /** @@ -1582,12 +1693,12 @@ InstallDevicePathCallback ( VOID EFIAPI PlatformBootManagerWaitCallback ( - UINT16 TimeoutRemain + UINT16 TimeoutRemain ) { - EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION Black; - EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION White; - UINT16 Timeout; + EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION Black; + EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION White; + UINT16 Timeout; Timeout = PcdGet16 (PcdPlatformBootTimeOut); @@ -1617,10 +1728,10 @@ PlatformBootManagerUnableToBoot ( VOID ) { - EFI_STATUS Status; - EFI_INPUT_KEY Key; - EFI_BOOT_MANAGER_LOAD_OPTION BootManagerMenu; - UINTN Index; + EFI_STATUS Status; + EFI_INPUT_KEY Key; + EFI_BOOT_MANAGER_LOAD_OPTION BootManagerMenu; + UINTN Index; // // BootManagerMenu doesn't contain the correct information when return status @@ -1630,6 +1741,7 @@ PlatformBootManagerUnableToBoot ( if (EFI_ERROR (Status)) { return; } + // // Normally BdsDxe does not print anything to the system console, but this is // a last resort -- the end-user will likely not see any DEBUG messages @@ -1659,7 +1771,7 @@ PlatformBootManagerUnableToBoot ( } } - for (;;) { + for ( ; ;) { EfiBootManagerBoot (&BootManagerMenu); } } diff --git a/OvmfPkg/Library/PlatformBootManagerLibBhyve/BdsPlatform.h b/OvmfPkg/Library/PlatformBootManagerLibBhyve/BdsPlatform.h index 382fe191a9..9be184cb64 100644 --- a/OvmfPkg/Library/PlatformBootManagerLibBhyve/BdsPlatform.h +++ b/OvmfPkg/Library/PlatformBootManagerLibBhyve/BdsPlatform.h @@ -18,7 +18,6 @@ Abstract: #ifndef _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ #define _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ - #include #include @@ -65,11 +64,11 @@ Abstract: #include -extern EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[]; -extern ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode; -extern ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode; -extern UART_DEVICE_PATH gUartDeviceNode; -extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; +extern EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[]; +extern ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode; +extern ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode; +extern UART_DEVICE_PATH gUartDeviceNode; +extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; #define PCI_DEVICE_PATH_NODE(Func, Dev) \ { \ @@ -151,20 +150,20 @@ extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; } \ } -#define PCI_CLASS_SCC 0x07 -#define PCI_SUBCLASS_SERIAL 0x00 -#define PCI_IF_16550 0x02 -#define IS_PCI_16550SERIAL(_p) IS_CLASS3 (_p, PCI_CLASS_SCC, PCI_SUBCLASS_SERIAL, PCI_IF_16550) -#define IS_PCI_ISA_PDECODE(_p) IS_CLASS3 (_p, PCI_CLASS_BRIDGE, PCI_CLASS_BRIDGE_ISA_PDECODE, 0) +#define PCI_CLASS_SCC 0x07 +#define PCI_SUBCLASS_SERIAL 0x00 +#define PCI_IF_16550 0x02 +#define IS_PCI_16550SERIAL(_p) IS_CLASS3 (_p, PCI_CLASS_SCC, PCI_SUBCLASS_SERIAL, PCI_IF_16550) +#define IS_PCI_ISA_PDECODE(_p) IS_CLASS3 (_p, PCI_CLASS_BRIDGE, PCI_CLASS_BRIDGE_ISA_PDECODE, 0) typedef struct { - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - UINTN ConnectType; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + UINTN ConnectType; } PLATFORM_CONSOLE_CONNECT_ENTRY; -#define CONSOLE_OUT BIT0 -#define CONSOLE_IN BIT1 -#define STD_ERROR BIT2 +#define CONSOLE_OUT BIT0 +#define CONSOLE_IN BIT1 +#define STD_ERROR BIT2 extern PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[]; // @@ -173,7 +172,7 @@ extern PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[]; VOID PlatformInitializeConsole ( - IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole + IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole ); /** diff --git a/OvmfPkg/Library/PlatformBootManagerLibBhyve/PlatformData.c b/OvmfPkg/Library/PlatformBootManagerLibBhyve/PlatformData.c index 73674d536d..b57789b73d 100644 --- a/OvmfPkg/Library/PlatformBootManagerLibBhyve/PlatformData.c +++ b/OvmfPkg/Library/PlatformBootManagerLibBhyve/PlatformData.c @@ -16,10 +16,10 @@ // #pragma pack(1) typedef struct { - VENDOR_DEVICE_PATH VendorHardware; - UART_DEVICE_PATH Uart; - VENDOR_DEVICE_PATH TerminalType; - EFI_DEVICE_PATH_PROTOCOL End; + VENDOR_DEVICE_PATH VendorHardware; + UART_DEVICE_PATH Uart; + VENDOR_DEVICE_PATH TerminalType; + EFI_DEVICE_PATH_PROTOCOL End; } VENDOR_UART_DEVICE_PATH; #pragma pack() @@ -28,8 +28,8 @@ typedef struct { // #pragma pack (1) typedef struct { - USB_CLASS_DEVICE_PATH Keyboard; - EFI_DEVICE_PATH_PROTOCOL End; + USB_CLASS_DEVICE_PATH Keyboard; + EFI_DEVICE_PATH_PROTOCOL End; } USB_KEYBOARD_DEVICE_PATH; #pragma pack () @@ -38,33 +38,32 @@ typedef struct { // #pragma pack (1) typedef struct { - VENDOR_DEVICE_PATH Vendor; - ACPI_ADR_DEVICE_PATH AcpiAdr; - EFI_DEVICE_PATH_PROTOCOL End; + VENDOR_DEVICE_PATH Vendor; + ACPI_ADR_DEVICE_PATH AcpiAdr; + EFI_DEVICE_PATH_PROTOCOL End; } VENDOR_RAMFB_DEVICE_PATH; #pragma pack () -ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode = gPnpPs2Keyboard; -ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode = gPnp16550ComPort; -UART_DEVICE_PATH gUartDeviceNode = gUart; -VENDOR_DEVICE_PATH gTerminalTypeDeviceNode = gPcAnsiTerminal; +ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode = gPnpPs2Keyboard; +ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode = gPnp16550ComPort; +UART_DEVICE_PATH gUartDeviceNode = gUart; +VENDOR_DEVICE_PATH gTerminalTypeDeviceNode = gPcAnsiTerminal; // // Platform specific keyboard device path // - // // Debug Agent UART Device Path // -VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = { +VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = { { { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, { - (UINT8) (sizeof (VENDOR_DEVICE_PATH)), - (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (VENDOR_DEVICE_PATH)), + (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) } }, EFI_DEBUG_AGENT_GUID, @@ -74,8 +73,8 @@ VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = { MESSAGING_DEVICE_PATH, MSG_UART_DP, { - (UINT8) (sizeof (UART_DEVICE_PATH)), - (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (UART_DEVICE_PATH)), + (UINT8)((sizeof (UART_DEVICE_PATH)) >> 8) } }, 0, // Reserved @@ -88,7 +87,7 @@ VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = { gEndEntire }; -STATIC USB_KEYBOARD_DEVICE_PATH gUsbKeyboardDevicePath = { +STATIC USB_KEYBOARD_DEVICE_PATH gUsbKeyboardDevicePath = { { { MESSAGING_DEVICE_PATH, @@ -107,14 +106,14 @@ STATIC USB_KEYBOARD_DEVICE_PATH gUsbKeyboardDevicePath = { gEndEntire }; -STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath = { +STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath = { { { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, { - (UINT8) (sizeof (VENDOR_DEVICE_PATH)), - (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (VENDOR_DEVICE_PATH)), + (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) } }, QEMU_RAMFB_GUID, @@ -124,8 +123,8 @@ STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath = { ACPI_DEVICE_PATH, ACPI_ADR_DP, { - (UINT8) (sizeof (ACPI_ADR_DEVICE_PATH)), - (UINT8) ((sizeof (ACPI_ADR_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (ACPI_ADR_DEVICE_PATH)), + (UINT8)((sizeof (ACPI_ADR_DEVICE_PATH)) >> 8) } }, ACPI_DISPLAY_ADR ( @@ -145,9 +144,9 @@ STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath = { // // Predefined platform default console device path // -PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = { +PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = { { - (EFI_DEVICE_PATH_PROTOCOL *) &gDebugAgentUartDevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gDebugAgentUartDevicePath, (CONSOLE_OUT | CONSOLE_IN | STD_ERROR) }, { @@ -167,5 +166,4 @@ PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = { // // Predefined platform connect sequence // -EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[] = { NULL }; - +EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[] = { NULL }; diff --git a/OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.c b/OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.c index e238af21f1..9c6848bbff 100644 --- a/OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.c +++ b/OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.c @@ -13,20 +13,19 @@ #include #include - // // Global data // -VOID *mEfiDevPathNotifyReg; -EFI_EVENT mEfiDevPathEvent; -UINT16 mHostBridgeDevId; +VOID *mEfiDevPathNotifyReg; +EFI_EVENT mEfiDevPathEvent; +UINT16 mHostBridgeDevId; // // Table of host IRQs matching PCI IRQs A-D // (for configuring PCI Interrupt Line register) // -CONST UINT8 PciHostIrqs[] = { +CONST UINT8 PciHostIrqs[] = { 0x0a, 0x0a, 0x0b, 0x0b }; @@ -55,7 +54,6 @@ EFI_STATUS IN PCI_TYPE00 *Pci ); - // // Function prototypes // @@ -69,7 +67,7 @@ VisitAllInstancesOfProtocol ( EFI_STATUS VisitAllPciInstancesOfProtocol ( - IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction + IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction ); VOID @@ -79,24 +77,24 @@ InstallDevicePathCallback ( VOID PlatformRegisterFvBootOption ( - EFI_GUID *FileGuid, - CHAR16 *Description, - UINT32 Attributes + EFI_GUID *FileGuid, + CHAR16 *Description, + UINT32 Attributes ) { - EFI_STATUS Status; - INTN OptionIndex; - EFI_BOOT_MANAGER_LOAD_OPTION NewOption; - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; - UINTN BootOptionCount; - MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode; - EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; + EFI_STATUS Status; + INTN OptionIndex; + EFI_BOOT_MANAGER_LOAD_OPTION NewOption; + EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; + UINTN BootOptionCount; + MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode; + EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; Status = gBS->HandleProtocol ( gImageHandle, &gEfiLoadedImageProtocolGuid, - (VOID **) &LoadedImage + (VOID **)&LoadedImage ); ASSERT_EFI_ERROR (Status); @@ -105,7 +103,7 @@ PlatformRegisterFvBootOption ( ASSERT (DevicePath != NULL); DevicePath = AppendDevicePathNode ( DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *) &FileNode + (EFI_DEVICE_PATH_PROTOCOL *)&FileNode ); ASSERT (DevicePath != NULL); @@ -123,17 +121,21 @@ PlatformRegisterFvBootOption ( FreePool (DevicePath); BootOptions = EfiBootManagerGetLoadOptions ( - &BootOptionCount, LoadOptionTypeBoot + &BootOptionCount, + LoadOptionTypeBoot ); OptionIndex = EfiBootManagerFindLoadOption ( - &NewOption, BootOptions, BootOptionCount + &NewOption, + BootOptions, + BootOptionCount ); if (OptionIndex == -1) { Status = EfiBootManagerAddLoadOptionVariable (&NewOption, MAX_UINTN); ASSERT_EFI_ERROR (Status); } + EfiBootManagerFreeLoadOption (&NewOption); EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount); } @@ -160,29 +162,34 @@ RemoveStaleFvFileOptions ( VOID ) { - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; - UINTN BootOptionCount; - UINTN Index; + EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; + UINTN BootOptionCount; + UINTN Index; - BootOptions = EfiBootManagerGetLoadOptions (&BootOptionCount, - LoadOptionTypeBoot); + BootOptions = EfiBootManagerGetLoadOptions ( + &BootOptionCount, + LoadOptionTypeBoot + ); for (Index = 0; Index < BootOptionCount; ++Index) { - EFI_DEVICE_PATH_PROTOCOL *Node1, *Node2, *SearchNode; - EFI_STATUS Status; - EFI_HANDLE FvHandle; + EFI_DEVICE_PATH_PROTOCOL *Node1, *Node2, *SearchNode; + EFI_STATUS Status; + EFI_HANDLE FvHandle; // // If the device path starts with neither MemoryMapped(...) nor Fv(...), // then delete the boot option. // Node1 = BootOptions[Index].FilePath; - if (!(DevicePathType (Node1) == HARDWARE_DEVICE_PATH && - DevicePathSubType (Node1) == HW_MEMMAP_DP) && - !(DevicePathType (Node1) == MEDIA_DEVICE_PATH && - DevicePathSubType (Node1) == MEDIA_PIWG_FW_VOL_DP)) { + if (!((DevicePathType (Node1) == HARDWARE_DEVICE_PATH) && + (DevicePathSubType (Node1) == HW_MEMMAP_DP)) && + !((DevicePathType (Node1) == MEDIA_DEVICE_PATH) && + (DevicePathSubType (Node1) == MEDIA_PIWG_FW_VOL_DP))) + { EfiBootManagerDeleteLoadOptionVariable ( - BootOptions[Index].OptionNumber, LoadOptionTypeBoot); + BootOptions[Index].OptionNumber, + LoadOptionTypeBoot + ); continue; } @@ -191,10 +198,13 @@ RemoveStaleFvFileOptions ( // option. // Node2 = NextDevicePathNode (Node1); - if (DevicePathType (Node2) != MEDIA_DEVICE_PATH || - DevicePathSubType (Node2) != MEDIA_PIWG_FW_FILE_DP) { + if ((DevicePathType (Node2) != MEDIA_DEVICE_PATH) || + (DevicePathSubType (Node2) != MEDIA_PIWG_FW_FILE_DP)) + { EfiBootManagerDeleteLoadOptionVariable ( - BootOptions[Index].OptionNumber, LoadOptionTypeBoot); + BootOptions[Index].OptionNumber, + LoadOptionTypeBoot + ); continue; } @@ -205,23 +215,29 @@ RemoveStaleFvFileOptions ( // boot option. // SearchNode = Node1; - Status = gBS->LocateDevicePath (&gEfiFirmwareVolume2ProtocolGuid, - &SearchNode, &FvHandle); + Status = gBS->LocateDevicePath ( + &gEfiFirmwareVolume2ProtocolGuid, + &SearchNode, + &FvHandle + ); if (!EFI_ERROR (Status)) { // // The firmware volume was found; now let's see if it contains the FvFile // identified by GUID. // - EFI_FIRMWARE_VOLUME2_PROTOCOL *FvProtocol; - MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFileNode; - UINTN BufferSize; - EFI_FV_FILETYPE FoundType; - EFI_FV_FILE_ATTRIBUTES FileAttributes; - UINT32 AuthenticationStatus; - - Status = gBS->HandleProtocol (FvHandle, &gEfiFirmwareVolume2ProtocolGuid, - (VOID **)&FvProtocol); + EFI_FIRMWARE_VOLUME2_PROTOCOL *FvProtocol; + MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFileNode; + UINTN BufferSize; + EFI_FV_FILETYPE FoundType; + EFI_FV_FILE_ATTRIBUTES FileAttributes; + UINT32 AuthenticationStatus; + + Status = gBS->HandleProtocol ( + FvHandle, + &gEfiFirmwareVolume2ProtocolGuid, + (VOID **)&FvProtocol + ); ASSERT_EFI_ERROR (Status); FvFileNode = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)Node2; @@ -250,23 +266,29 @@ RemoveStaleFvFileOptions ( // Delete the boot option. // Status = EfiBootManagerDeleteLoadOptionVariable ( - BootOptions[Index].OptionNumber, LoadOptionTypeBoot); + BootOptions[Index].OptionNumber, + LoadOptionTypeBoot + ); DEBUG_CODE_BEGIN (); - CHAR16 *DevicePathString; + CHAR16 *DevicePathString; + + DevicePathString = ConvertDevicePathToText ( + BootOptions[Index].FilePath, + FALSE, + FALSE + ); + DEBUG (( + EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_VERBOSE, + "%a: removing stale Boot#%04x %s: %r\n", + __FUNCTION__, + (UINT32)BootOptions[Index].OptionNumber, + DevicePathString == NULL ? L"" : DevicePathString, + Status + )); + if (DevicePathString != NULL) { + FreePool (DevicePathString); + } - DevicePathString = ConvertDevicePathToText(BootOptions[Index].FilePath, - FALSE, FALSE); - DEBUG (( - EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_VERBOSE, - "%a: removing stale Boot#%04x %s: %r\n", - __FUNCTION__, - (UINT32)BootOptions[Index].OptionNumber, - DevicePathString == NULL ? L"" : DevicePathString, - Status - )); - if (DevicePathString != NULL) { - FreePool (DevicePathString); - } DEBUG_CODE_END (); } @@ -285,14 +307,15 @@ STATIC EFI_STATUS EFIAPI ConnectVirtioPciRng ( - IN EFI_HANDLE Handle, - IN VOID *Instance, - IN VOID *Context + IN EFI_HANDLE Handle, + IN VOID *Instance, + IN VOID *Context ); // // BDS Platform Functions // + /** Do the platform init, can be customized by OEM/IBV @@ -312,17 +335,20 @@ PlatformBootManagerBeforeConsole ( VOID ) { - EFI_HANDLE Handle; - EFI_STATUS Status; - UINT16 FrontPageTimeout; + EFI_HANDLE Handle; + EFI_STATUS Status; + UINT16 FrontPageTimeout; FrontPageTimeout = 0; DEBUG ((DEBUG_INFO, "PlatformBootManagerBeforeConsole\n")); InstallDevicePathCallback (); - VisitAllInstancesOfProtocol (&gEfiPciRootBridgeIoProtocolGuid, - ConnectRootBridge, NULL); + VisitAllInstancesOfProtocol ( + &gEfiPciRootBridgeIoProtocolGuid, + ConnectRootBridge, + NULL + ); // // Signal the ACPI platform driver that it can download QEMU ACPI tables. @@ -352,9 +378,12 @@ PlatformBootManagerBeforeConsole ( // Any TPM 2 Physical Presence Interface opcode must be handled before. // Handle = NULL; - Status = gBS->InstallProtocolInterface (&Handle, - &gEfiDxeSmmReadyToLockProtocolGuid, EFI_NATIVE_INTERFACE, - NULL); + Status = gBS->InstallProtocolInterface ( + &Handle, + &gEfiDxeSmmReadyToLockProtocolGuid, + EFI_NATIVE_INTERFACE, + NULL + ); ASSERT_EFI_ERROR (Status); // @@ -376,11 +405,13 @@ PlatformBootManagerBeforeConsole ( // Install both VIRTIO_DEVICE_PROTOCOL and (dependent) EFI_RNG_PROTOCOL // instances on Virtio PCI RNG devices. // - VisitAllInstancesOfProtocol (&gEfiPciIoProtocolGuid, ConnectVirtioPciRng, - NULL); + VisitAllInstancesOfProtocol ( + &gEfiPciIoProtocolGuid, + ConnectVirtioPciRng, + NULL + ); } - EFI_STATUS EFIAPI ConnectRootBridge ( @@ -389,7 +420,7 @@ ConnectRootBridge ( IN VOID *Context ) { - EFI_STATUS Status; + EFI_STATUS Status; // // Make the PCI bus driver connect the root bridge, non-recursively. This @@ -405,34 +436,39 @@ ConnectRootBridge ( return Status; } - STATIC EFI_STATUS EFIAPI ConnectVirtioPciRng ( - IN EFI_HANDLE Handle, - IN VOID *Instance, - IN VOID *Context + IN EFI_HANDLE Handle, + IN VOID *Instance, + IN VOID *Context ) { - EFI_PCI_IO_PROTOCOL *PciIo; - EFI_STATUS Status; - UINT16 VendorId; - UINT16 DeviceId; - UINT8 RevisionId; - BOOLEAN Virtio10; - UINT16 SubsystemId; + EFI_PCI_IO_PROTOCOL *PciIo; + EFI_STATUS Status; + UINT16 VendorId; + UINT16 DeviceId; + UINT8 RevisionId; + BOOLEAN Virtio10; + UINT16 SubsystemId; PciIo = Instance; // // Read and check VendorId. // - Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, PCI_VENDOR_ID_OFFSET, - 1, &VendorId); + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint16, + PCI_VENDOR_ID_OFFSET, + 1, + &VendorId + ); if (EFI_ERROR (Status)) { goto Error; } + if (VendorId != VIRTIO_VENDOR_ID) { return EFI_SUCCESS; } @@ -440,13 +476,24 @@ ConnectVirtioPciRng ( // // Read DeviceId and RevisionId. // - Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, PCI_DEVICE_ID_OFFSET, - 1, &DeviceId); + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint16, + PCI_DEVICE_ID_OFFSET, + 1, + &DeviceId + ); if (EFI_ERROR (Status)) { goto Error; } - Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint8, PCI_REVISION_ID_OFFSET, - 1, &RevisionId); + + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint8, + PCI_REVISION_ID_OFFSET, + 1, + &RevisionId + ); if (EFI_ERROR (Status)) { goto Error; } @@ -458,10 +505,11 @@ ConnectVirtioPciRng ( // SubsystemId will only play a sanity-check role. Otherwise, DeviceId can // only be sanity-checked, and SubsystemId will decide. // - if (DeviceId == 0x1040 + VIRTIO_SUBSYSTEM_ENTROPY_SOURCE && - RevisionId >= 0x01) { + if ((DeviceId == 0x1040 + VIRTIO_SUBSYSTEM_ENTROPY_SOURCE) && + (RevisionId >= 0x01)) + { Virtio10 = TRUE; - } else if (DeviceId >= 0x1000 && DeviceId <= 0x103F && RevisionId == 0x00) { + } else if ((DeviceId >= 0x1000) && (DeviceId <= 0x103F) && (RevisionId == 0x00)) { Virtio10 = FALSE; } else { return EFI_SUCCESS; @@ -470,13 +518,20 @@ ConnectVirtioPciRng ( // // Read and check SubsystemId as dictated by Virtio10. // - Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint16, - PCI_SUBSYSTEM_ID_OFFSET, 1, &SubsystemId); + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint16, + PCI_SUBSYSTEM_ID_OFFSET, + 1, + &SubsystemId + ); if (EFI_ERROR (Status)) { goto Error; } - if ((Virtio10 && SubsystemId >= 0x40) || - (!Virtio10 && SubsystemId == VIRTIO_SUBSYSTEM_ENTROPY_SOURCE)) { + + if ((Virtio10 && (SubsystemId >= 0x40)) || + (!Virtio10 && (SubsystemId == VIRTIO_SUBSYSTEM_ENTROPY_SOURCE))) + { Status = gBS->ConnectController ( Handle, // ControllerHandle NULL, // DriverImageHandle -- connect all drivers @@ -487,6 +542,7 @@ ConnectVirtioPciRng ( goto Error; } } + return EFI_SUCCESS; Error: @@ -494,7 +550,6 @@ Error: return Status; } - /** Add IsaKeyboard to ConIn; add IsaSerial to ConOut, ConIn, ErrOut. @@ -508,7 +563,7 @@ Error: **/ EFI_STATUS PrepareLpcBridgeDevicePath ( - IN EFI_HANDLE DeviceHandle + IN EFI_HANDLE DeviceHandle ) { EFI_STATUS Status; @@ -517,50 +572,59 @@ PrepareLpcBridgeDevicePath ( CHAR16 *DevPathStr; DevicePath = NULL; - Status = gBS->HandleProtocol ( - DeviceHandle, - &gEfiDevicePathProtocolGuid, - (VOID*)&DevicePath - ); + Status = gBS->HandleProtocol ( + DeviceHandle, + &gEfiDevicePathProtocolGuid, + (VOID *)&DevicePath + ); if (EFI_ERROR (Status)) { return Status; } + TempDevicePath = DevicePath; // // Register Keyboard // - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gPnpPs2KeyboardDeviceNode); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gPnpPs2KeyboardDeviceNode + ); EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); // // Register COM1 // - DevicePath = TempDevicePath; + DevicePath = TempDevicePath; gPnp16550ComPortDeviceNode.UID = 0; - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode); - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode + ); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode + ); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode + ); // // Print Device Path // DevPathStr = ConvertDevicePathToText (DevicePath, FALSE, FALSE); if (DevPathStr != NULL) { - DEBUG(( + DEBUG (( DEBUG_INFO, "BdsPlatform.c+%d: COM%d DevPath: %s\n", DEBUG_LINE_NUMBER, gPnp16550ComPortDeviceNode.UID + 1, DevPathStr )); - FreePool(DevPathStr); + FreePool (DevPathStr); } EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); @@ -570,29 +634,35 @@ PrepareLpcBridgeDevicePath ( // // Register COM2 // - DevicePath = TempDevicePath; + DevicePath = TempDevicePath; gPnp16550ComPortDeviceNode.UID = 1; - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode); - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gPnp16550ComPortDeviceNode + ); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode + ); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode + ); // // Print Device Path // DevPathStr = ConvertDevicePathToText (DevicePath, FALSE, FALSE); if (DevPathStr != NULL) { - DEBUG(( + DEBUG (( DEBUG_INFO, "BdsPlatform.c+%d: COM%d DevPath: %s\n", DEBUG_LINE_NUMBER, gPnp16550ComPortDeviceNode.UID + 1, DevPathStr )); - FreePool(DevPathStr); + FreePool (DevPathStr); } EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); @@ -604,19 +674,19 @@ PrepareLpcBridgeDevicePath ( EFI_STATUS GetGopDevicePath ( - IN EFI_DEVICE_PATH_PROTOCOL *PciDevicePath, - OUT EFI_DEVICE_PATH_PROTOCOL **GopDevicePath - ) + IN EFI_DEVICE_PATH_PROTOCOL *PciDevicePath, + OUT EFI_DEVICE_PATH_PROTOCOL **GopDevicePath + ) { - UINTN Index; - EFI_STATUS Status; - EFI_HANDLE PciDeviceHandle; - EFI_DEVICE_PATH_PROTOCOL *TempDevicePath; - EFI_DEVICE_PATH_PROTOCOL *TempPciDevicePath; - UINTN GopHandleCount; - EFI_HANDLE *GopHandleBuffer; - - if (PciDevicePath == NULL || GopDevicePath == NULL) { + UINTN Index; + EFI_STATUS Status; + EFI_HANDLE PciDeviceHandle; + EFI_DEVICE_PATH_PROTOCOL *TempDevicePath; + EFI_DEVICE_PATH_PROTOCOL *TempPciDevicePath; + UINTN GopHandleCount; + EFI_HANDLE *GopHandleBuffer; + + if ((PciDevicePath == NULL) || (GopDevicePath == NULL)) { return EFI_INVALID_PARAMETER; } @@ -655,16 +725,21 @@ GetGopDevicePath ( // Add all the child handles as possible Console Device // for (Index = 0; Index < GopHandleCount; Index++) { - Status = gBS->HandleProtocol (GopHandleBuffer[Index], - &gEfiDevicePathProtocolGuid, (VOID*)&TempDevicePath); + Status = gBS->HandleProtocol ( + GopHandleBuffer[Index], + &gEfiDevicePathProtocolGuid, + (VOID *)&TempDevicePath + ); if (EFI_ERROR (Status)) { continue; } + if (CompareMem ( PciDevicePath, TempDevicePath, GetDevicePathSize (PciDevicePath) - END_DEVICE_PATH_LENGTH - ) == 0) { + ) == 0) + { // // In current implementation, we only enable one of the child handles // as console device, i.e. sotre one of the child handle's device @@ -682,6 +757,7 @@ GetGopDevicePath ( EfiBootManagerUpdateConsoleVariable (ConOutDev, TempDevicePath, NULL); } } + gBS->FreePool (GopHandleBuffer); } @@ -700,7 +776,7 @@ GetGopDevicePath ( **/ EFI_STATUS PreparePciDisplayDevicePath ( - IN EFI_HANDLE DeviceHandle + IN EFI_HANDLE DeviceHandle ) { EFI_STATUS Status; @@ -709,11 +785,11 @@ PreparePciDisplayDevicePath ( DevicePath = NULL; GopDevicePath = NULL; - Status = gBS->HandleProtocol ( - DeviceHandle, - &gEfiDevicePathProtocolGuid, - (VOID*)&DevicePath - ); + Status = gBS->HandleProtocol ( + DeviceHandle, + &gEfiDevicePathProtocolGuid, + (VOID *)&DevicePath + ); if (EFI_ERROR (Status)) { return Status; } @@ -739,26 +815,30 @@ PreparePciDisplayDevicePath ( **/ EFI_STATUS PreparePciSerialDevicePath ( - IN EFI_HANDLE DeviceHandle + IN EFI_HANDLE DeviceHandle ) { EFI_STATUS Status; EFI_DEVICE_PATH_PROTOCOL *DevicePath; DevicePath = NULL; - Status = gBS->HandleProtocol ( - DeviceHandle, - &gEfiDevicePathProtocolGuid, - (VOID*)&DevicePath - ); + Status = gBS->HandleProtocol ( + DeviceHandle, + &gEfiDevicePathProtocolGuid, + (VOID *)&DevicePath + ); if (EFI_ERROR (Status)) { return Status; } - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode); - DevicePath = AppendDevicePathNode (DevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gUartDeviceNode + ); + DevicePath = AppendDevicePathNode ( + DevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gTerminalTypeDeviceNode + ); EfiBootManagerUpdateConsoleVariable (ConOut, DevicePath, NULL); EfiBootManagerUpdateConsoleVariable (ConIn, DevicePath, NULL); @@ -774,24 +854,24 @@ VisitAllInstancesOfProtocol ( IN VOID *Context ) { - EFI_STATUS Status; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN Index; - VOID *Instance; + EFI_STATUS Status; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + UINTN Index; + VOID *Instance; // // Start to check all the PciIo to find all possible device // - HandleCount = 0; + HandleCount = 0; HandleBuffer = NULL; - Status = gBS->LocateHandleBuffer ( - ByProtocol, - Id, - NULL, - &HandleCount, - &HandleBuffer - ); + Status = gBS->LocateHandleBuffer ( + ByProtocol, + Id, + NULL, + &HandleCount, + &HandleBuffer + ); if (EFI_ERROR (Status)) { return Status; } @@ -802,11 +882,11 @@ VisitAllInstancesOfProtocol ( continue; } - Status = (*CallBackFunction) ( - HandleBuffer[Index], - Instance, - Context - ); + Status = (*CallBackFunction)( + HandleBuffer[Index], + Instance, + Context + ); } gBS->FreePool (HandleBuffer); @@ -814,7 +894,6 @@ VisitAllInstancesOfProtocol ( return EFI_SUCCESS; } - EFI_STATUS EFIAPI VisitingAPciInstance ( @@ -823,49 +902,45 @@ VisitingAPciInstance ( IN VOID *Context ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; - PciIo = (EFI_PCI_IO_PROTOCOL*) Instance; + PciIo = (EFI_PCI_IO_PROTOCOL *)Instance; // // Check for all PCI device // Status = PciIo->Pci.Read ( - PciIo, - EfiPciIoWidthUint32, - 0, - sizeof (Pci) / sizeof (UINT32), - &Pci - ); + PciIo, + EfiPciIoWidthUint32, + 0, + sizeof (Pci) / sizeof (UINT32), + &Pci + ); if (EFI_ERROR (Status)) { return Status; } - return (*(VISIT_PCI_INSTANCE_CALLBACK)(UINTN) Context) ( - Handle, - PciIo, - &Pci - ); - + return (*(VISIT_PCI_INSTANCE_CALLBACK)(UINTN)Context)( + Handle, + PciIo, + &Pci + ); } - - EFI_STATUS VisitAllPciInstances ( - IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction + IN VISIT_PCI_INSTANCE_CALLBACK CallBackFunction ) { return VisitAllInstancesOfProtocol ( &gEfiPciIoProtocolGuid, VisitingAPciInstance, - (VOID*)(UINTN) CallBackFunction + (VOID *)(UINTN)CallBackFunction ); } - /** Do platform specific PCI Device check and add them to ConOut, ConIn, ErrOut. @@ -887,14 +962,14 @@ DetectAndPreparePlatformPciDevicePath ( IN PCI_TYPE00 *Pci ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = PciIo->Attributes ( - PciIo, - EfiPciIoAttributeOperationEnable, - EFI_PCI_DEVICE_ENABLE, - NULL - ); + PciIo, + EfiPciIoAttributeOperationEnable, + EFI_PCI_DEVICE_ENABLE, + NULL + ); ASSERT_EFI_ERROR (Status); // @@ -905,7 +980,8 @@ DetectAndPreparePlatformPciDevicePath ( (Pci->Hdr.VendorId == 0x8086) && (Pci->Hdr.DeviceId == 0x7000) ) - ) { + ) + { // // Add IsaKeyboard to ConIn, // add IsaSerial to ConOut, ConIn, ErrOut @@ -914,6 +990,7 @@ DetectAndPreparePlatformPciDevicePath ( PrepareLpcBridgeDevicePath (Handle); return EFI_SUCCESS; } + // // Here we decide which Serial device to enable in PCI bus // @@ -941,7 +1018,6 @@ DetectAndPreparePlatformPciDevicePath ( return Status; } - /** Connect the predefined platform default console device. @@ -951,10 +1027,10 @@ DetectAndPreparePlatformPciDevicePath ( **/ VOID PlatformInitializeConsole ( - IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole + IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole ) { - UINTN Index; + UINTN Index; // // Do platform specific PCI Device check and add them to ConOut, ConIn, @@ -972,21 +1048,31 @@ PlatformInitializeConsole ( // Update the console variable with the connect type // if ((PlatformConsole[Index].ConnectType & CONSOLE_IN) == CONSOLE_IN) { - EfiBootManagerUpdateConsoleVariable (ConIn, - PlatformConsole[Index].DevicePath, NULL); + EfiBootManagerUpdateConsoleVariable ( + ConIn, + PlatformConsole[Index].DevicePath, + NULL + ); } + if ((PlatformConsole[Index].ConnectType & CONSOLE_OUT) == CONSOLE_OUT) { - EfiBootManagerUpdateConsoleVariable (ConOut, - PlatformConsole[Index].DevicePath, NULL); + EfiBootManagerUpdateConsoleVariable ( + ConOut, + PlatformConsole[Index].DevicePath, + NULL + ); } + if ((PlatformConsole[Index].ConnectType & STD_ERROR) == STD_ERROR) { - EfiBootManagerUpdateConsoleVariable (ErrOut, - PlatformConsole[Index].DevicePath, NULL); + EfiBootManagerUpdateConsoleVariable ( + ErrOut, + PlatformConsole[Index].DevicePath, + NULL + ); } } } - /** Configure PCI Interrupt Line register for applicable devices Ported from SeaBIOS, src/fw/pciinit.c, *_pci_slot_get_irq() @@ -1017,15 +1103,15 @@ SetPciIntLine ( Status = EFI_SUCCESS; if (PciHdr->Device.InterruptPin != 0) { - DevPathNode = DevicePathFromHandle (Handle); ASSERT (DevPathNode != NULL); DevPath = DevPathNode; RootBusNumber = 0; - if (DevicePathType (DevPathNode) == ACPI_DEVICE_PATH && - DevicePathSubType (DevPathNode) == ACPI_DP && - ((ACPI_HID_DEVICE_PATH *)DevPathNode)->HID == EISA_PNP_ID(0x0A03)) { + if ((DevicePathType (DevPathNode) == ACPI_DEVICE_PATH) && + (DevicePathSubType (DevPathNode) == ACPI_DP) && + (((ACPI_HID_DEVICE_PATH *)DevPathNode)->HID == EISA_PNP_ID (0x0A03))) + { RootBusNumber = ((ACPI_HID_DEVICE_PATH *)DevPathNode)->UID; } @@ -1033,13 +1119,13 @@ SetPciIntLine ( // Compute index into PciHostIrqs[] table by walking // the device path and adding up all device numbers // - Status = EFI_NOT_FOUND; + Status = EFI_NOT_FOUND; RootSlot = 0; - Idx = PciHdr->Device.InterruptPin - 1; + Idx = PciHdr->Device.InterruptPin - 1; while (!IsDevicePathEnd (DevPathNode)) { - if (DevicePathType (DevPathNode) == HARDWARE_DEVICE_PATH && - DevicePathSubType (DevPathNode) == HW_PCI_DP) { - + if ((DevicePathType (DevPathNode) == HARDWARE_DEVICE_PATH) && + (DevicePathSubType (DevPathNode) == HW_PCI_DP)) + { Idx += ((PCI_DEVICE_PATH *)DevPathNode)->Device; // @@ -1050,18 +1136,20 @@ SetPciIntLine ( // Q35 cases with more than 24 slots on the root bus. // if (Status != EFI_SUCCESS) { - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; RootSlot = ((PCI_DEVICE_PATH *)DevPathNode)->Device; } } DevPathNode = NextDevicePathNode (DevPathNode); } + if (EFI_ERROR (Status)) { return Status; } - if (RootBusNumber == 0 && RootSlot == 0) { - DEBUG(( + + if ((RootBusNumber == 0) && (RootSlot == 0)) { + DEBUG (( DEBUG_ERROR, "%a: PCI host bridge (00:00.0) should have no interrupts!\n", __FUNCTION__ @@ -1093,29 +1181,39 @@ SetPciIntLine ( // Idx -= RootSlot; } + break; default: ASSERT (FALSE); // should never get here } - Idx %= ARRAY_SIZE (PciHostIrqs); + + Idx %= ARRAY_SIZE (PciHostIrqs); IrqLine = PciHostIrqs[Idx]; DEBUG_CODE_BEGIN (); { - CHAR16 *DevPathString; - STATIC CHAR16 Fallback[] = L""; - UINTN Segment, Bus, Device, Function; + CHAR16 *DevPathString; + STATIC CHAR16 Fallback[] = L""; + UINTN Segment, Bus, Device, Function; DevPathString = ConvertDevicePathToText (DevPath, FALSE, FALSE); if (DevPathString == NULL) { DevPathString = Fallback; } + Status = PciIo->GetLocation (PciIo, &Segment, &Bus, &Device, &Function); ASSERT_EFI_ERROR (Status); - DEBUG ((DEBUG_VERBOSE, "%a: [%02x:%02x.%x] %s -> 0x%02x\n", __FUNCTION__, - (UINT32)Bus, (UINT32)Device, (UINT32)Function, DevPathString, - IrqLine)); + DEBUG (( + DEBUG_VERBOSE, + "%a: [%02x:%02x.%x] %s -> 0x%02x\n", + __FUNCTION__, + (UINT32)Bus, + (UINT32)Device, + (UINT32)Function, + DevPathString, + IrqLine + )); if (DevPathString != Fallback) { FreePool (DevPathString); @@ -1127,18 +1225,17 @@ SetPciIntLine ( // Set PCI Interrupt Line register for this device to PciHostIrqs[Idx] // Status = PciIo->Pci.Write ( - PciIo, - EfiPciIoWidthUint8, - PCI_INT_LINE_OFFSET, - 1, - &IrqLine - ); + PciIo, + EfiPciIoWidthUint8, + PCI_INT_LINE_OFFSET, + 1, + &IrqLine + ); } return Status; } - VOID PciAcpiInitialization ( ) @@ -1175,8 +1272,12 @@ PciAcpiInitialization ( PciWrite8 (PCI_LIB_ADDRESS (0, 0x1f, 0, 0x6b), 0x0b); // H break; default: - DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", - __FUNCTION__, mHostBridgeDevId)); + DEBUG (( + DEBUG_ERROR, + "%a: Unknown Host Bridge Device ID: 0x%04x\n", + __FUNCTION__, + mHostBridgeDevId + )); ASSERT (FALSE); return; } @@ -1209,11 +1310,11 @@ ConnectRecursivelyIfPciMassStorage ( // if (IS_CLASS1 (PciHeader, PCI_CLASS_MASS_STORAGE)) { DevicePath = NULL; - Status = gBS->HandleProtocol ( - Handle, - &gEfiDevicePathProtocolGuid, - (VOID*)&DevicePath - ); + Status = gBS->HandleProtocol ( + Handle, + &gEfiDevicePathProtocolGuid, + (VOID *)&DevicePath + ); if (EFI_ERROR (Status)) { return Status; } @@ -1223,25 +1324,23 @@ ConnectRecursivelyIfPciMassStorage ( // DevPathStr = ConvertDevicePathToText (DevicePath, FALSE, FALSE); if (DevPathStr != NULL) { - DEBUG(( + DEBUG (( DEBUG_INFO, "Found Mass Storage device: %s\n", DevPathStr )); - FreePool(DevPathStr); + FreePool (DevPathStr); } Status = gBS->ConnectController (Handle, NULL, NULL, TRUE); if (EFI_ERROR (Status)) { return Status; } - } return EFI_SUCCESS; } - /** Connect with predefined platform connect sequence. @@ -1252,7 +1351,7 @@ PlatformBdsConnectSequence ( VOID ) { - UINTN Index; + UINTN Index; DEBUG ((DEBUG_INFO, "PlatformBdsConnectSequence\n")); @@ -1270,6 +1369,7 @@ PlatformBdsConnectSequence ( EfiBootManagerConnectDevicePath (gPlatformConnectSequence[Index], NULL); Index++; } + EfiBootManagerConnectAll (); } @@ -1292,7 +1392,7 @@ PlatformBootManagerAfterConsole ( VOID ) { - EFI_BOOT_MODE BootMode; + EFI_BOOT_MODE BootMode; DEBUG ((DEBUG_INFO, "PlatformBootManagerAfterConsole\n")); @@ -1335,14 +1435,18 @@ PlatformBootManagerAfterConsole ( // which is the default) // PlatformRegisterFvBootOption ( - &gUefiShellFileGuid, L"EFI Internal Shell", LOAD_OPTION_ACTIVE + &gUefiShellFileGuid, + L"EFI Internal Shell", + LOAD_OPTION_ACTIVE ); // // Register Grub // PlatformRegisterFvBootOption ( - &gGrubFileGuid, L"Grub Bootloader", LOAD_OPTION_ACTIVE + &gGrubFileGuid, + L"Grub Bootloader", + LOAD_OPTION_ACTIVE ); RemoveStaleFvFileOptions (); @@ -1361,31 +1465,31 @@ PlatformBootManagerAfterConsole ( VOID EFIAPI NotifyDevPath ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - EFI_HANDLE Handle; - EFI_STATUS Status; - UINTN BufferSize; - EFI_DEVICE_PATH_PROTOCOL *DevPathNode; - ATAPI_DEVICE_PATH *Atapi; + EFI_HANDLE Handle; + EFI_STATUS Status; + UINTN BufferSize; + EFI_DEVICE_PATH_PROTOCOL *DevPathNode; + ATAPI_DEVICE_PATH *Atapi; // // Examine all new handles // - for (;;) { + for ( ; ;) { // // Get the next handle // BufferSize = sizeof (Handle); - Status = gBS->LocateHandle ( - ByRegisterNotify, - NULL, - mEfiDevPathNotifyReg, - &BufferSize, - &Handle - ); + Status = gBS->LocateHandle ( + ByRegisterNotify, + NULL, + mEfiDevPathNotifyReg, + &BufferSize, + &Handle + ); // // If not found, we're done @@ -1401,8 +1505,11 @@ NotifyDevPath ( // // Get the DevicePath protocol on that handle // - Status = gBS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, - (VOID **)&DevPathNode); + Status = gBS->HandleProtocol ( + Handle, + &gEfiDevicePathProtocolGuid, + (VOID **)&DevPathNode + ); ASSERT_EFI_ERROR (Status); while (!IsDevicePathEnd (DevPathNode)) { @@ -1410,16 +1517,17 @@ NotifyDevPath ( // Find the handler to dump this device path node // if ( - (DevicePathType(DevPathNode) == MESSAGING_DEVICE_PATH) && - (DevicePathSubType(DevPathNode) == MSG_ATAPI_DP) - ) { - Atapi = (ATAPI_DEVICE_PATH*) DevPathNode; + (DevicePathType (DevPathNode) == MESSAGING_DEVICE_PATH) && + (DevicePathSubType (DevPathNode) == MSG_ATAPI_DP) + ) + { + Atapi = (ATAPI_DEVICE_PATH *)DevPathNode; PciOr16 ( PCI_LIB_ADDRESS ( 0, 1, 1, - (Atapi->PrimarySecondary == 1) ? 0x42: 0x40 + (Atapi->PrimarySecondary == 1) ? 0x42 : 0x40 ), BIT15 ); @@ -1435,7 +1543,6 @@ NotifyDevPath ( return; } - VOID InstallDevicePathCallback ( VOID @@ -1443,12 +1550,12 @@ InstallDevicePathCallback ( { DEBUG ((DEBUG_INFO, "Registered NotifyDevPath Event\n")); mEfiDevPathEvent = EfiCreateProtocolNotifyEvent ( - &gEfiDevicePathProtocolGuid, - TPL_CALLBACK, - NotifyDevPath, - NULL, - &mEfiDevPathNotifyReg - ); + &gEfiDevicePathProtocolGuid, + TPL_CALLBACK, + NotifyDevPath, + NULL, + &mEfiDevPathNotifyReg + ); } /** @@ -1460,7 +1567,7 @@ InstallDevicePathCallback ( VOID EFIAPI PlatformBootManagerWaitCallback ( - UINT16 TimeoutRemain + UINT16 TimeoutRemain ) { // diff --git a/OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.h b/OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.h index f1d3a2906c..0593a51046 100644 --- a/OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.h +++ b/OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.h @@ -18,7 +18,6 @@ Abstract: #ifndef _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ #define _PLATFORM_SPECIFIC_BDS_PLATFORM_H_ - #include #include @@ -60,11 +59,11 @@ Abstract: #include -extern EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[]; -extern ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode; -extern ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode; -extern UART_DEVICE_PATH gUartDeviceNode; -extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; +extern EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[]; +extern ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode; +extern ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode; +extern UART_DEVICE_PATH gUartDeviceNode; +extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; #define PCI_DEVICE_PATH_NODE(Func, Dev) \ { \ @@ -146,20 +145,20 @@ extern VENDOR_DEVICE_PATH gTerminalTypeDeviceNode; } \ } -#define PCI_CLASS_SCC 0x07 -#define PCI_SUBCLASS_SERIAL 0x00 -#define PCI_IF_16550 0x02 -#define IS_PCI_16550SERIAL(_p) IS_CLASS3 (_p, PCI_CLASS_SCC, PCI_SUBCLASS_SERIAL, PCI_IF_16550) -#define IS_PCI_ISA_PDECODE(_p) IS_CLASS3 (_p, PCI_CLASS_BRIDGE, PCI_CLASS_BRIDGE_ISA_PDECODE, 0) +#define PCI_CLASS_SCC 0x07 +#define PCI_SUBCLASS_SERIAL 0x00 +#define PCI_IF_16550 0x02 +#define IS_PCI_16550SERIAL(_p) IS_CLASS3 (_p, PCI_CLASS_SCC, PCI_SUBCLASS_SERIAL, PCI_IF_16550) +#define IS_PCI_ISA_PDECODE(_p) IS_CLASS3 (_p, PCI_CLASS_BRIDGE, PCI_CLASS_BRIDGE_ISA_PDECODE, 0) typedef struct { - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - UINTN ConnectType; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + UINTN ConnectType; } PLATFORM_CONSOLE_CONNECT_ENTRY; -#define CONSOLE_OUT BIT0 -#define CONSOLE_IN BIT1 -#define STD_ERROR BIT2 +#define CONSOLE_OUT BIT0 +#define CONSOLE_IN BIT1 +#define STD_ERROR BIT2 extern PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[]; extern PLATFORM_CONSOLE_CONNECT_ENTRY gXenPlatformConsole[]; @@ -169,7 +168,7 @@ extern PLATFORM_CONSOLE_CONNECT_ENTRY gXenPlatformConsole[]; VOID PlatformInitializeConsole ( - IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole + IN PLATFORM_CONSOLE_CONNECT_ENTRY *PlatformConsole ); /** diff --git a/OvmfPkg/Library/PlatformBootManagerLibGrub/PlatformData.c b/OvmfPkg/Library/PlatformBootManagerLibGrub/PlatformData.c index e5945727f2..5e2b7510c5 100644 --- a/OvmfPkg/Library/PlatformBootManagerLibGrub/PlatformData.c +++ b/OvmfPkg/Library/PlatformBootManagerLibGrub/PlatformData.c @@ -17,10 +17,10 @@ // #pragma pack (1) typedef struct { - VENDOR_DEVICE_PATH VendorHardware; - UART_DEVICE_PATH Uart; - VENDOR_DEVICE_PATH TerminalType; - EFI_DEVICE_PATH_PROTOCOL End; + VENDOR_DEVICE_PATH VendorHardware; + UART_DEVICE_PATH Uart; + VENDOR_DEVICE_PATH TerminalType; + EFI_DEVICE_PATH_PROTOCOL End; } VENDOR_UART_DEVICE_PATH; #pragma pack () @@ -29,8 +29,8 @@ typedef struct { // #pragma pack (1) typedef struct { - USB_CLASS_DEVICE_PATH Keyboard; - EFI_DEVICE_PATH_PROTOCOL End; + USB_CLASS_DEVICE_PATH Keyboard; + EFI_DEVICE_PATH_PROTOCOL End; } USB_KEYBOARD_DEVICE_PATH; #pragma pack () @@ -39,33 +39,32 @@ typedef struct { // #pragma pack (1) typedef struct { - VENDOR_DEVICE_PATH Vendor; - ACPI_ADR_DEVICE_PATH AcpiAdr; - EFI_DEVICE_PATH_PROTOCOL End; + VENDOR_DEVICE_PATH Vendor; + ACPI_ADR_DEVICE_PATH AcpiAdr; + EFI_DEVICE_PATH_PROTOCOL End; } VENDOR_RAMFB_DEVICE_PATH; #pragma pack () -ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode = gPnpPs2Keyboard; -ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode = gPnp16550ComPort; -UART_DEVICE_PATH gUartDeviceNode = gUart; -VENDOR_DEVICE_PATH gTerminalTypeDeviceNode = gPcAnsiTerminal; +ACPI_HID_DEVICE_PATH gPnpPs2KeyboardDeviceNode = gPnpPs2Keyboard; +ACPI_HID_DEVICE_PATH gPnp16550ComPortDeviceNode = gPnp16550ComPort; +UART_DEVICE_PATH gUartDeviceNode = gUart; +VENDOR_DEVICE_PATH gTerminalTypeDeviceNode = gPcAnsiTerminal; // // Platform specific keyboard device path // - // // Debug Agent UART Device Path // -VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = { +VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = { { { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, { - (UINT8) (sizeof (VENDOR_DEVICE_PATH)), - (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (VENDOR_DEVICE_PATH)), + (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) } }, EFI_DEBUG_AGENT_GUID, @@ -75,8 +74,8 @@ VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = { MESSAGING_DEVICE_PATH, MSG_UART_DP, { - (UINT8) (sizeof (UART_DEVICE_PATH)), - (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (UART_DEVICE_PATH)), + (UINT8)((sizeof (UART_DEVICE_PATH)) >> 8) } }, 0, // Reserved @@ -89,7 +88,7 @@ VENDOR_UART_DEVICE_PATH gDebugAgentUartDevicePath = { gEndEntire }; -STATIC USB_KEYBOARD_DEVICE_PATH gUsbKeyboardDevicePath = { +STATIC USB_KEYBOARD_DEVICE_PATH gUsbKeyboardDevicePath = { { { MESSAGING_DEVICE_PATH, @@ -108,14 +107,14 @@ STATIC USB_KEYBOARD_DEVICE_PATH gUsbKeyboardDevicePath = { gEndEntire }; -STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath = { +STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath = { { { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, { - (UINT8) (sizeof (VENDOR_DEVICE_PATH)), - (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (VENDOR_DEVICE_PATH)), + (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) } }, QEMU_RAMFB_GUID, @@ -125,8 +124,8 @@ STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath = { ACPI_DEVICE_PATH, ACPI_ADR_DP, { - (UINT8) (sizeof (ACPI_ADR_DEVICE_PATH)), - (UINT8) ((sizeof (ACPI_ADR_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (ACPI_ADR_DEVICE_PATH)), + (UINT8)((sizeof (ACPI_ADR_DEVICE_PATH)) >> 8) } }, ACPI_DISPLAY_ADR ( @@ -143,14 +142,14 @@ STATIC VENDOR_RAMFB_DEVICE_PATH gQemuRamfbDevicePath = { gEndEntire }; -STATIC VENDOR_UART_DEVICE_PATH gXenConsoleDevicePath = { +STATIC VENDOR_UART_DEVICE_PATH gXenConsoleDevicePath = { { { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, { - (UINT8) (sizeof (VENDOR_DEVICE_PATH)), - (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (VENDOR_DEVICE_PATH)), + (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8) } }, EDKII_SERIAL_PORT_LIB_VENDOR_GUID @@ -160,8 +159,8 @@ STATIC VENDOR_UART_DEVICE_PATH gXenConsoleDevicePath = { MESSAGING_DEVICE_PATH, MSG_UART_DP, { - (UINT8) (sizeof (UART_DEVICE_PATH)), - (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (UART_DEVICE_PATH)), + (UINT8)((sizeof (UART_DEVICE_PATH)) >> 8) } }, 0, @@ -177,9 +176,9 @@ STATIC VENDOR_UART_DEVICE_PATH gXenConsoleDevicePath = { // // Predefined platform default console device path // -PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = { +PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = { { - (EFI_DEVICE_PATH_PROTOCOL *) &gDebugAgentUartDevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&gDebugAgentUartDevicePath, (CONSOLE_OUT | CONSOLE_IN | STD_ERROR) }, { @@ -196,7 +195,7 @@ PLATFORM_CONSOLE_CONNECT_ENTRY gPlatformConsole[] = { } }; -PLATFORM_CONSOLE_CONNECT_ENTRY gXenPlatformConsole[] = { +PLATFORM_CONSOLE_CONNECT_ENTRY gXenPlatformConsole[] = { { (EFI_DEVICE_PATH_PROTOCOL *)&gXenConsoleDevicePath, (CONSOLE_OUT | CONSOLE_IN | STD_ERROR) @@ -210,5 +209,4 @@ PLATFORM_CONSOLE_CONNECT_ENTRY gXenPlatformConsole[] = { // // Predefined platform connect sequence // -EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[] = { NULL }; - +EFI_DEVICE_PATH_PROTOCOL *gPlatformConnectSequence[] = { NULL }; diff --git a/OvmfPkg/Library/PlatformBootManagerLibGrub/QemuKernel.c b/OvmfPkg/Library/PlatformBootManagerLibGrub/QemuKernel.c index c625592177..1e66e3c452 100644 --- a/OvmfPkg/Library/PlatformBootManagerLibGrub/QemuKernel.c +++ b/OvmfPkg/Library/PlatformBootManagerLibGrub/QemuKernel.c @@ -13,14 +13,13 @@ #include #include - EFI_STATUS TryRunningQemuKernel ( VOID ) { - EFI_STATUS Status; - EFI_HANDLE KernelImageHandle; + EFI_STATUS Status; + EFI_HANDLE KernelImageHandle; Status = QemuLoadKernelImage (&KernelImageHandle); if (EFI_ERROR (Status)) { @@ -30,18 +29,24 @@ TryRunningQemuKernel ( // // Signal the EVT_SIGNAL_READY_TO_BOOT event // - EfiSignalEventReadyToBoot(); + EfiSignalEventReadyToBoot (); - REPORT_STATUS_CODE (EFI_PROGRESS_CODE, - (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT)); + REPORT_STATUS_CODE ( + EFI_PROGRESS_CODE, + (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT) + ); // // Start the image. // Status = QemuStartKernelImage (&KernelImageHandle); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: QemuStartKernelImage(): %r\n", __FUNCTION__, - Status)); + DEBUG (( + DEBUG_ERROR, + "%a: QemuStartKernelImage(): %r\n", + __FUNCTION__, + Status + )); } QemuUnloadKernelImage (KernelImageHandle); diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugIoPortQemu.c b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugIoPortQemu.c index bf9119807a..94013646b1 100644 --- a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugIoPortQemu.c +++ b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugIoPortQemu.c @@ -15,7 +15,7 @@ // // The constant value that is read from the debug I/O port // -#define BOCHS_DEBUG_PORT_MAGIC 0xE9 +#define BOCHS_DEBUG_PORT_MAGIC 0xE9 /** Return the result of detecting the debug I/O port device. diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c index dffb20822d..4e25f198aa 100644 --- a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c +++ b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c @@ -27,7 +27,7 @@ // VA_LIST can not initialize to NULL for all compiler, so we use this to // indicate a null VA_LIST // -VA_LIST mVaListNull; +VA_LIST mVaListNull; /** Prints a debug message to the debug output device if the specified error level is enabled. @@ -52,14 +52,13 @@ DebugPrint ( ... ) { - VA_LIST Marker; + VA_LIST Marker; VA_START (Marker, Format); DebugVPrint (ErrorLevel, Format, Marker); VA_END (Marker); } - /** Prints a debug message to the debug output device if the specified error level is enabled base on Null-terminated format string and a @@ -79,14 +78,14 @@ DebugPrint ( **/ VOID DebugPrintMarker ( - IN UINTN ErrorLevel, - IN CONST CHAR8 *Format, - IN VA_LIST VaListMarker, - IN BASE_LIST BaseListMarker + IN UINTN ErrorLevel, + IN CONST CHAR8 *Format, + IN VA_LIST VaListMarker, + IN BASE_LIST BaseListMarker ) { - CHAR8 Buffer[MAX_DEBUG_MESSAGE_LENGTH]; - UINTN Length; + CHAR8 Buffer[MAX_DEBUG_MESSAGE_LENGTH]; + UINTN Length; // // If Format is NULL, then ASSERT(). @@ -96,8 +95,9 @@ DebugPrintMarker ( // // Check if the global mask disables this message or the device is inactive // - if ((ErrorLevel & GetDebugPrintErrorLevel ()) == 0 || - !PlatformDebugLibIoPortFound ()) { + if (((ErrorLevel & GetDebugPrintErrorLevel ()) == 0) || + !PlatformDebugLibIoPortFound ()) + { return; } @@ -116,7 +116,6 @@ DebugPrintMarker ( IoWriteFifo8 (PcdGet16 (PcdDebugIoPort), Length, Buffer); } - /** Prints a debug message to the debug output device if the specified error level is enabled. @@ -135,15 +134,14 @@ DebugPrintMarker ( VOID EFIAPI DebugVPrint ( - IN UINTN ErrorLevel, - IN CONST CHAR8 *Format, - IN VA_LIST VaListMarker + IN UINTN ErrorLevel, + IN CONST CHAR8 *Format, + IN VA_LIST VaListMarker ) { DebugPrintMarker (ErrorLevel, Format, VaListMarker, NULL); } - /** Prints a debug message to the debug output device if the specified error level is enabled. @@ -164,15 +162,14 @@ DebugVPrint ( VOID EFIAPI DebugBPrint ( - IN UINTN ErrorLevel, - IN CONST CHAR8 *Format, - IN BASE_LIST BaseListMarker + IN UINTN ErrorLevel, + IN CONST CHAR8 *Format, + IN BASE_LIST BaseListMarker ) { DebugPrintMarker (ErrorLevel, Format, mVaListNull, BaseListMarker); } - /** Prints an assert message containing a filename, line number, and description. This may be followed by a breakpoint or a dead loop. @@ -208,8 +205,14 @@ DebugAssert ( // // Generate the ASSERT() message in Ascii format // - Length = AsciiSPrint (Buffer, sizeof Buffer, "ASSERT %a(%Lu): %a\n", - FileName, (UINT64)LineNumber, Description); + Length = AsciiSPrint ( + Buffer, + sizeof Buffer, + "ASSERT %a(%Lu): %a\n", + FileName, + (UINT64)LineNumber, + Description + ); // // Send the print string to the debug I/O port, if present @@ -221,14 +224,13 @@ DebugAssert ( // // Generate a Breakpoint, DeadLoop, or NOP based on PCD settings // - if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED) != 0) { + if ((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED) != 0) { CpuBreakpoint (); - } else if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED) != 0) { + } else if ((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED) != 0) { CpuDeadLoop (); } } - /** Fills a target buffer with PcdDebugClearMemoryValue, and returns the target buffer. @@ -259,10 +261,9 @@ DebugClearMemory ( // // SetMem() checks for the the ASSERT() condition on Length and returns Buffer // - return SetMem (Buffer, Length, PcdGet8(PcdDebugClearMemoryValue)); + return SetMem (Buffer, Length, PcdGet8 (PcdDebugClearMemoryValue)); } - /** Returns TRUE if ASSERT() macros are enabled. @@ -279,10 +280,9 @@ DebugAssertEnabled ( VOID ) { - return (BOOLEAN) ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED) != 0); + return (BOOLEAN)((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED) != 0); } - /** Returns TRUE if DEBUG() macros are enabled. @@ -299,10 +299,9 @@ DebugPrintEnabled ( VOID ) { - return (BOOLEAN) ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_PRINT_ENABLED) != 0); + return (BOOLEAN)((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_PRINT_ENABLED) != 0); } - /** Returns TRUE if DEBUG_CODE() macros are enabled. @@ -319,10 +318,9 @@ DebugCodeEnabled ( VOID ) { - return (BOOLEAN) ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_CODE_ENABLED) != 0); + return (BOOLEAN)((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_CODE_ENABLED) != 0); } - /** Returns TRUE if DEBUG_CLEAR_MEMORY() macro is enabled. @@ -339,7 +337,7 @@ DebugClearMemoryEnabled ( VOID ) { - return (BOOLEAN) ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_CLEAR_MEMORY_ENABLED) != 0); + return (BOOLEAN)((PcdGet8 (PcdDebugPropertyMask) & DEBUG_PROPERTY_CLEAR_MEMORY_ENABLED) != 0); } /** @@ -354,8 +352,8 @@ DebugClearMemoryEnabled ( BOOLEAN EFIAPI DebugPrintLevelEnabled ( - IN CONST UINTN ErrorLevel + IN CONST UINTN ErrorLevel ) { - return (BOOLEAN) ((ErrorLevel & PcdGet32(PcdFixedDebugPrintErrorLevel)) != 0); + return (BOOLEAN)((ErrorLevel & PcdGet32 (PcdFixedDebugPrintErrorLevel)) != 0); } diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.c b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.c index 8c466e64e0..45207faf5c 100644 --- a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.c +++ b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLibDetect.c @@ -13,12 +13,12 @@ // // Set to TRUE if the debug I/O port has been checked // -STATIC BOOLEAN mDebugIoPortChecked = FALSE; +STATIC BOOLEAN mDebugIoPortChecked = FALSE; // // Set to TRUE if the debug I/O port is enabled // -STATIC BOOLEAN mDebugIoPortFound = FALSE; +STATIC BOOLEAN mDebugIoPortFound = FALSE; /** This constructor function must not do anything. @@ -58,8 +58,9 @@ PlatformDebugLibIoPortFound ( ) { if (!mDebugIoPortChecked) { - mDebugIoPortFound = PlatformDebugLibIoPortDetect (); + mDebugIoPortFound = PlatformDebugLibIoPortDetect (); mDebugIoPortChecked = TRUE; } + return mDebugIoPortFound; } diff --git a/OvmfPkg/Library/PlatformFvbLibNull/PlatformFvbLibNull.c b/OvmfPkg/Library/PlatformFvbLibNull/PlatformFvbLibNull.c index 8ef7416d3e..89a50d79c3 100644 --- a/OvmfPkg/Library/PlatformFvbLibNull/PlatformFvbLibNull.c +++ b/OvmfPkg/Library/PlatformFvbLibNull/PlatformFvbLibNull.c @@ -9,7 +9,6 @@ #include "PiDxe.h" #include - /** This function will be called following a call to the EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL Read function. @@ -26,16 +25,15 @@ VOID EFIAPI PlatformFvbDataRead ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, - IN EFI_LBA Lba, - IN UINTN Offset, - IN UINTN NumBytes, - IN UINT8 *Buffer + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Offset, + IN UINTN NumBytes, + IN UINT8 *Buffer ) { } - /** This function will be called following a call to the EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL Write function. @@ -50,16 +48,15 @@ PlatformFvbDataRead ( VOID EFIAPI PlatformFvbDataWritten ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, - IN EFI_LBA Lba, - IN UINTN Offset, - IN UINTN NumBytes, - IN UINT8 *Buffer + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Offset, + IN UINTN NumBytes, + IN UINT8 *Buffer ) { } - /** This function will be called following a call to the EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL Erase function. @@ -74,10 +71,8 @@ PlatformFvbDataWritten ( VOID EFIAPI PlatformFvbBlocksErased ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, - IN VA_LIST List + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL *This, + IN VA_LIST List ) { } - - diff --git a/OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcd.c b/OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcd.c index 7ce236326f..33cad38979 100644 --- a/OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcd.c +++ b/OvmfPkg/Library/PxeBcPcdProducerLib/PxeBcPcd.c @@ -16,19 +16,29 @@ SetPxeBcPcds ( VOID ) { - BOOLEAN FwCfgBool; - RETURN_STATUS PcdStatus; + BOOLEAN FwCfgBool; + RETURN_STATUS PcdStatus; - if (!RETURN_ERROR (QemuFwCfgParseBool ("opt/org.tianocore/IPv4PXESupport", - &FwCfgBool))) { + if (!RETURN_ERROR ( + QemuFwCfgParseBool ( + "opt/org.tianocore/IPv4PXESupport", + &FwCfgBool + ) + )) + { PcdStatus = PcdSet8S (PcdIPv4PXESupport, FwCfgBool); if (RETURN_ERROR (PcdStatus)) { return PcdStatus; } } - if (!RETURN_ERROR (QemuFwCfgParseBool ("opt/org.tianocore/IPv6PXESupport", - &FwCfgBool))) { + if (!RETURN_ERROR ( + QemuFwCfgParseBool ( + "opt/org.tianocore/IPv6PXESupport", + &FwCfgBool + ) + )) + { PcdStatus = PcdSet8S (PcdIPv6PXESupport, FwCfgBool); if (RETURN_ERROR (PcdStatus)) { return PcdStatus; diff --git a/OvmfPkg/Library/QemuBootOrderLib/ExtraRootBusMap.c b/OvmfPkg/Library/QemuBootOrderLib/ExtraRootBusMap.c index 25d5494047..37d488e01c 100644 --- a/OvmfPkg/Library/QemuBootOrderLib/ExtraRootBusMap.c +++ b/OvmfPkg/Library/QemuBootOrderLib/ExtraRootBusMap.c @@ -28,11 +28,10 @@ // BusNumbers is NULL. // struct EXTRA_ROOT_BUS_MAP_STRUCT { - UINT32 *BusNumbers; - UINTN Count; + UINT32 *BusNumbers; + UINTN Count; }; - /** An ORDERED_COLLECTION_USER_COMPARE function that compares root bridge protocol device paths based on UID. @@ -51,12 +50,12 @@ STATIC INTN EFIAPI RootBridgePathCompare ( - IN CONST VOID *UserStruct1, - IN CONST VOID *UserStruct2 + IN CONST VOID *UserStruct1, + IN CONST VOID *UserStruct2 ) { - CONST ACPI_HID_DEVICE_PATH *Acpi1; - CONST ACPI_HID_DEVICE_PATH *Acpi2; + CONST ACPI_HID_DEVICE_PATH *Acpi1; + CONST ACPI_HID_DEVICE_PATH *Acpi2; Acpi1 = UserStruct1; Acpi2 = UserStruct2; @@ -66,7 +65,6 @@ RootBridgePathCompare ( 0; } - /** An ORDERED_COLLECTION_KEY_COMPARE function that compares a root bridge protocol device path against a UID. @@ -86,12 +84,12 @@ STATIC INTN EFIAPI RootBridgePathKeyCompare ( - IN CONST VOID *StandaloneKey, - IN CONST VOID *UserStruct + IN CONST VOID *StandaloneKey, + IN CONST VOID *UserStruct ) { - CONST UINT32 *Uid; - CONST ACPI_HID_DEVICE_PATH *Acpi; + CONST UINT32 *Uid; + CONST ACPI_HID_DEVICE_PATH *Acpi; Uid = StandaloneKey; Acpi = UserStruct; @@ -101,7 +99,6 @@ RootBridgePathKeyCompare ( 0; } - /** Create a structure that maps the relative positions of PCI root buses to bus numbers. @@ -129,31 +126,37 @@ RootBridgePathKeyCompare ( **/ EFI_STATUS CreateExtraRootBusMap ( - OUT EXTRA_ROOT_BUS_MAP **ExtraRootBusMap + OUT EXTRA_ROOT_BUS_MAP **ExtraRootBusMap ) { - EFI_STATUS Status; - UINTN NumHandles; - EFI_HANDLE *Handles; - ORDERED_COLLECTION *Collection; - EXTRA_ROOT_BUS_MAP *Map; - UINTN Idx; - ORDERED_COLLECTION_ENTRY *Entry, *Entry2; + EFI_STATUS Status; + UINTN NumHandles; + EFI_HANDLE *Handles; + ORDERED_COLLECTION *Collection; + EXTRA_ROOT_BUS_MAP *Map; + UINTN Idx; + ORDERED_COLLECTION_ENTRY *Entry, *Entry2; // // Handles and Collection are temporary / helper variables, while in Map we // build the return value. // - Status = gBS->LocateHandleBuffer (ByProtocol, - &gEfiPciRootBridgeIoProtocolGuid, NULL /* SearchKey */, - &NumHandles, &Handles); - if (EFI_ERROR (Status)) { + Status = gBS->LocateHandleBuffer ( + ByProtocol, + &gEfiPciRootBridgeIoProtocolGuid, + NULL /* SearchKey */, + &NumHandles, + &Handles + ); + if (EFI_ERROR (Status)) { return Status; } - Collection = OrderedCollectionInit (RootBridgePathCompare, - RootBridgePathKeyCompare); + Collection = OrderedCollectionInit ( + RootBridgePathCompare, + RootBridgePathKeyCompare + ); if (Collection == NULL) { Status = EFI_OUT_OF_RESOURCES; goto FreeHandles; @@ -169,10 +172,13 @@ CreateExtraRootBusMap ( // Collect the ACPI device path protocols of the root bridges. // for (Idx = 0; Idx < NumHandles; ++Idx) { - EFI_DEVICE_PATH_PROTOCOL *DevicePath; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; - Status = gBS->HandleProtocol (Handles[Idx], &gEfiDevicePathProtocolGuid, - (VOID**)&DevicePath); + Status = gBS->HandleProtocol ( + Handles[Idx], + &gEfiDevicePathProtocolGuid, + (VOID **)&DevicePath + ); if (EFI_ERROR (Status)) { goto FreeMap; } @@ -182,14 +188,16 @@ CreateExtraRootBusMap ( // nonzero (ie. the root bridge that the bus number belongs to is "extra", // not the main one). In that case, link the device path into Collection. // - if (DevicePathType (DevicePath) == ACPI_DEVICE_PATH && - DevicePathSubType (DevicePath) == ACPI_DP && - ((ACPI_HID_DEVICE_PATH *)DevicePath)->HID == EISA_PNP_ID(0x0A03) && - ((ACPI_HID_DEVICE_PATH *)DevicePath)->UID > 0) { + if ((DevicePathType (DevicePath) == ACPI_DEVICE_PATH) && + (DevicePathSubType (DevicePath) == ACPI_DP) && + (((ACPI_HID_DEVICE_PATH *)DevicePath)->HID == EISA_PNP_ID (0x0A03)) && + (((ACPI_HID_DEVICE_PATH *)DevicePath)->UID > 0)) + { Status = OrderedCollectionInsert (Collection, NULL, DevicePath); if (EFI_ERROR (Status)) { goto FreeMap; } + ++Map->Count; } } @@ -208,24 +216,29 @@ CreateExtraRootBusMap ( // // Now collect the bus numbers of the extra PCI root buses into Map. // - Idx = 0; + Idx = 0; Entry = OrderedCollectionMin (Collection); while (Idx < Map->Count) { - ACPI_HID_DEVICE_PATH *Acpi; + ACPI_HID_DEVICE_PATH *Acpi; ASSERT (Entry != NULL); - Acpi = OrderedCollectionUserStruct (Entry); + Acpi = OrderedCollectionUserStruct (Entry); Map->BusNumbers[Idx] = Acpi->UID; - DEBUG ((DEBUG_VERBOSE, + DEBUG (( + DEBUG_VERBOSE, "%a: extra bus position 0x%Lx maps to bus number (UID) 0x%x\n", - __FUNCTION__, (UINT64)(Idx + 1), Acpi->UID)); + __FUNCTION__, + (UINT64)(Idx + 1), + Acpi->UID + )); ++Idx; Entry = OrderedCollectionNext (Entry); } + ASSERT (Entry == NULL); *ExtraRootBusMap = Map; - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; // // Fall through in order to release temporaries. @@ -236,15 +249,18 @@ FreeMap: if (Map->BusNumbers != NULL) { FreePool (Map->BusNumbers); } + FreePool (Map); } FreeCollection: for (Entry = OrderedCollectionMin (Collection); Entry != NULL; - Entry = Entry2) { + Entry = Entry2) + { Entry2 = OrderedCollectionNext (Entry); OrderedCollectionDelete (Collection, Entry, NULL); } + OrderedCollectionUninit (Collection); FreeHandles: @@ -253,7 +269,6 @@ FreeHandles: return Status; } - /** Release a map created with CreateExtraRootBusMap(). @@ -261,12 +276,13 @@ FreeHandles: */ VOID DestroyExtraRootBusMap ( - IN EXTRA_ROOT_BUS_MAP *ExtraRootBusMap + IN EXTRA_ROOT_BUS_MAP *ExtraRootBusMap ) { if (ExtraRootBusMap->BusNumbers != NULL) { FreePool (ExtraRootBusMap->BusNumbers); } + FreePool (ExtraRootBusMap); } @@ -291,17 +307,19 @@ DestroyExtraRootBusMap ( **/ EFI_STATUS MapRootBusPosToBusNr ( - IN CONST EXTRA_ROOT_BUS_MAP *ExtraRootBusMap, - IN UINT64 RootBusPos, - OUT UINT32 *RootBusNr + IN CONST EXTRA_ROOT_BUS_MAP *ExtraRootBusMap, + IN UINT64 RootBusPos, + OUT UINT32 *RootBusNr ) { if (RootBusPos == 0) { return EFI_INVALID_PARAMETER; } + if (RootBusPos > ExtraRootBusMap->Count) { return EFI_NOT_FOUND; } + *RootBusNr = ExtraRootBusMap->BusNumbers[(UINTN)RootBusPos - 1]; return EFI_SUCCESS; } diff --git a/OvmfPkg/Library/QemuBootOrderLib/ExtraRootBusMap.h b/OvmfPkg/Library/QemuBootOrderLib/ExtraRootBusMap.h index 3b79fbdc7f..7c4a338693 100644 --- a/OvmfPkg/Library/QemuBootOrderLib/ExtraRootBusMap.h +++ b/OvmfPkg/Library/QemuBootOrderLib/ExtraRootBusMap.h @@ -16,19 +16,19 @@ typedef struct EXTRA_ROOT_BUS_MAP_STRUCT EXTRA_ROOT_BUS_MAP; EFI_STATUS CreateExtraRootBusMap ( - OUT EXTRA_ROOT_BUS_MAP **ExtraRootBusMap + OUT EXTRA_ROOT_BUS_MAP **ExtraRootBusMap ); VOID DestroyExtraRootBusMap ( - IN EXTRA_ROOT_BUS_MAP *ExtraRootBusMap + IN EXTRA_ROOT_BUS_MAP *ExtraRootBusMap ); EFI_STATUS MapRootBusPosToBusNr ( - IN CONST EXTRA_ROOT_BUS_MAP *ExtraRootBusMap, - IN UINT64 RootBusPos, - OUT UINT32 *RootBusNr + IN CONST EXTRA_ROOT_BUS_MAP *ExtraRootBusMap, + IN UINT64 RootBusPos, + OUT UINT32 *RootBusNr ); #endif diff --git a/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c b/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c index ceffb17fa6..b5768285d8 100644 --- a/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c +++ b/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c @@ -26,21 +26,20 @@ /** OpenFirmware to UEFI device path translation output buffer size in CHAR16's. **/ -#define TRANSLATION_OUTPUT_SIZE 0x100 +#define TRANSLATION_OUTPUT_SIZE 0x100 /** Output buffer size for OpenFirmware to UEFI device path fragment translation, in CHAR16's, for a sequence of PCI bridges. **/ -#define BRIDGE_TRANSLATION_OUTPUT_SIZE 0x40 +#define BRIDGE_TRANSLATION_OUTPUT_SIZE 0x40 /** Numbers of nodes in OpenFirmware device paths that are required and examined. **/ -#define REQUIRED_PCI_OFW_NODES 2 -#define REQUIRED_MMIO_OFW_NODES 1 -#define EXAMINED_OFW_NODES 6 - +#define REQUIRED_PCI_OFW_NODES 2 +#define REQUIRED_MMIO_OFW_NODES 1 +#define EXAMINED_OFW_NODES 6 /** Simple character classification routines, corresponding to POSIX class names @@ -49,7 +48,7 @@ STATIC BOOLEAN IsAlnum ( - IN CHAR8 Chr + IN CHAR8 Chr ) { return (('0' <= Chr && Chr <= '9') || @@ -58,11 +57,10 @@ IsAlnum ( ); } - STATIC BOOLEAN IsDriverNamePunct ( - IN CHAR8 Chr + IN CHAR8 Chr ) { return (Chr == ',' || Chr == '.' || Chr == '_' || @@ -70,27 +68,24 @@ IsDriverNamePunct ( ); } - STATIC BOOLEAN IsPrintNotDelim ( - IN CHAR8 Chr + IN CHAR8 Chr ) { return (32 <= Chr && Chr <= 126 && Chr != '/' && Chr != '@' && Chr != ':'); } - /** Utility types and functions. **/ typedef struct { - CONST CHAR8 *Ptr; // not necessarily NUL-terminated - UINTN Len; // number of non-NUL characters + CONST CHAR8 *Ptr; // not necessarily NUL-terminated + UINTN Len; // number of non-NUL characters } SUBSTRING; - /** Check if Substring and String have identical contents. @@ -109,12 +104,12 @@ typedef struct { STATIC BOOLEAN SubstringEq ( - IN SUBSTRING Substring, - IN CONST CHAR8 *String + IN SUBSTRING Substring, + IN CONST CHAR8 *String ) { - UINTN Pos; - CONST CHAR8 *Chr; + UINTN Pos; + CONST CHAR8 *Chr; Pos = 0; Chr = String; @@ -127,7 +122,6 @@ SubstringEq ( return (BOOLEAN)(Pos == Substring.Len && *Chr == '\0'); } - /** Parse a comma-separated list of hexadecimal integers into the elements of an @@ -175,38 +169,41 @@ ParseUnitAddressHexList ( IN OUT UINTN *NumResults ) { - UINTN Entry; // number of entry currently being parsed - UINT64 EntryVal; // value being constructed for current entry - CHAR8 PrevChr; // UnitAddress character previously checked - UINTN Pos; // current position within UnitAddress - RETURN_STATUS Status; + UINTN Entry; // number of entry currently being parsed + UINT64 EntryVal; // value being constructed for current entry + CHAR8 PrevChr; // UnitAddress character previously checked + UINTN Pos; // current position within UnitAddress + RETURN_STATUS Status; Entry = 0; EntryVal = 0; PrevChr = ','; for (Pos = 0; Pos < UnitAddress.Len; ++Pos) { - CHAR8 Chr; - INT8 Val; + CHAR8 Chr; + INT8 Val; Chr = UnitAddress.Ptr[Pos]; Val = ('a' <= Chr && Chr <= 'f') ? (Chr - 'a' + 10) : ('A' <= Chr && Chr <= 'F') ? (Chr - 'A' + 10) : - ('0' <= Chr && Chr <= '9') ? (Chr - '0' ) : + ('0' <= Chr && Chr <= '9') ? (Chr - '0') : -1; if (Val >= 0) { if (EntryVal > 0xFFFFFFFFFFFFFFFull) { return RETURN_INVALID_PARAMETER; } + EntryVal = LShiftU64 (EntryVal, 4) | Val; } else if (Chr == ',') { if (PrevChr == ',') { return RETURN_INVALID_PARAMETER; } + if (Entry < *NumResults) { Result[Entry] = EntryVal; } + ++Entry; EntryVal = 0; } else { @@ -219,41 +216,40 @@ ParseUnitAddressHexList ( if (PrevChr == ',') { return RETURN_INVALID_PARAMETER; } + if (Entry < *NumResults) { Result[Entry] = EntryVal; - Status = RETURN_SUCCESS; + Status = RETURN_SUCCESS; } else { Status = RETURN_BUFFER_TOO_SMALL; } + ++Entry; *NumResults = Entry; return Status; } - /** A simple array of Boot Option ID's. **/ typedef struct { - UINT16 *Data; - UINTN Allocated; - UINTN Produced; + UINT16 *Data; + UINTN Allocated; + UINTN Produced; } BOOT_ORDER; - /** Array element tracking an enumerated boot option that has the LOAD_OPTION_ACTIVE attribute. **/ typedef struct { - CONST EFI_BOOT_MANAGER_LOAD_OPTION *BootOption; // reference only, no - // ownership - BOOLEAN Appended; // has been added to a - // BOOT_ORDER? + CONST EFI_BOOT_MANAGER_LOAD_OPTION *BootOption; // reference only, no + // ownership + BOOLEAN Appended; // has been added to a + // BOOT_ORDER? } ACTIVE_OPTION; - /** Append an active boot option to BootOrder, reallocating the latter if needed. @@ -273,35 +269,35 @@ typedef struct { STATIC RETURN_STATUS BootOrderAppend ( - IN OUT BOOT_ORDER *BootOrder, - IN OUT ACTIVE_OPTION *ActiveOption + IN OUT BOOT_ORDER *BootOrder, + IN OUT ACTIVE_OPTION *ActiveOption ) { if (BootOrder->Produced == BootOrder->Allocated) { - UINTN AllocatedNew; - UINT16 *DataNew; + UINTN AllocatedNew; + UINT16 *DataNew; ASSERT (BootOrder->Allocated > 0); AllocatedNew = BootOrder->Allocated * 2; - DataNew = ReallocatePool ( - BootOrder->Allocated * sizeof (*BootOrder->Data), - AllocatedNew * sizeof (*DataNew), - BootOrder->Data - ); + DataNew = ReallocatePool ( + BootOrder->Allocated * sizeof (*BootOrder->Data), + AllocatedNew * sizeof (*DataNew), + BootOrder->Data + ); if (DataNew == NULL) { return RETURN_OUT_OF_RESOURCES; } + BootOrder->Allocated = AllocatedNew; BootOrder->Data = DataNew; } BootOrder->Data[BootOrder->Produced++] = - (UINT16) ActiveOption->BootOption->OptionNumber; + (UINT16)ActiveOption->BootOption->OptionNumber; ActiveOption->Appended = TRUE; return RETURN_SUCCESS; } - /** Create an array of ACTIVE_OPTION elements for a boot option array. @@ -330,14 +326,14 @@ BootOrderAppend ( STATIC RETURN_STATUS CollectActiveOptions ( - IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions, - IN UINTN BootOptionCount, - OUT ACTIVE_OPTION **ActiveOption, - OUT UINTN *Count + IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions, + IN UINTN BootOptionCount, + OUT ACTIVE_OPTION **ActiveOption, + OUT UINTN *Count ) { - UINTN Index; - UINTN ScanMode; + UINTN Index; + UINTN ScanMode; *ActiveOption = NULL; @@ -354,6 +350,7 @@ CollectActiveOptions ( (*ActiveOption)[*Count].BootOption = &BootOptions[Index]; (*ActiveOption)[*Count].Appended = FALSE; } + ++*Count; } } @@ -362,26 +359,26 @@ CollectActiveOptions ( if (*Count == 0) { return RETURN_NOT_FOUND; } + *ActiveOption = AllocatePool (*Count * sizeof **ActiveOption); if (*ActiveOption == NULL) { return RETURN_OUT_OF_RESOURCES; } } } + return RETURN_SUCCESS; } - /** OpenFirmware device path node **/ typedef struct { - SUBSTRING DriverName; - SUBSTRING UnitAddress; - SUBSTRING DeviceArguments; + SUBSTRING DriverName; + SUBSTRING UnitAddress; + SUBSTRING DeviceArguments; } OFW_NODE; - /** Parse an OpenFirmware device path node into the caller-allocated OFW_NODE @@ -430,24 +427,24 @@ typedef struct { STATIC RETURN_STATUS ParseOfwNode ( - IN OUT CONST CHAR8 **Ptr, - OUT OFW_NODE *OfwNode, - OUT BOOLEAN *IsFinal + IN OUT CONST CHAR8 **Ptr, + OUT OFW_NODE *OfwNode, + OUT BOOLEAN *IsFinal ) { // // A leading slash is expected. End of string is tolerated. // switch (**Ptr) { - case '\0': - return RETURN_NOT_FOUND; + case '\0': + return RETURN_NOT_FOUND; - case '/': - ++*Ptr; - break; + case '/': + ++*Ptr; + break; - default: - return RETURN_INVALID_PARAMETER; + default: + return RETURN_INVALID_PARAMETER; } // @@ -457,22 +454,23 @@ ParseOfwNode ( OfwNode->DriverName.Len = 0; while (OfwNode->DriverName.Len < 32 && (IsAlnum (**Ptr) || IsDriverNamePunct (**Ptr)) - ) { + ) + { ++*Ptr; ++OfwNode->DriverName.Len; } - if (OfwNode->DriverName.Len == 0 || OfwNode->DriverName.Len == 32) { + if ((OfwNode->DriverName.Len == 0) || (OfwNode->DriverName.Len == 32)) { return RETURN_INVALID_PARAMETER; } - // // unit-address // if (**Ptr != '@') { return RETURN_INVALID_PARAMETER; } + ++*Ptr; OfwNode->UnitAddress.Ptr = *Ptr; @@ -486,7 +484,6 @@ ParseOfwNode ( return RETURN_INVALID_PARAMETER; } - // // device-arguments, may be omitted // @@ -503,43 +500,43 @@ ParseOfwNode ( if (OfwNode->DeviceArguments.Len == 0) { return RETURN_INVALID_PARAMETER; } - } - else { + } else { OfwNode->DeviceArguments.Ptr = NULL; } switch (**Ptr) { - case '\n': - ++*Ptr; + case '\n': + ++*Ptr; // // fall through // - case '\0': - *IsFinal = TRUE; - break; + case '\0': + *IsFinal = TRUE; + break; - case '/': - *IsFinal = FALSE; - break; + case '/': + *IsFinal = FALSE; + break; - default: - return RETURN_INVALID_PARAMETER; + default: + return RETURN_INVALID_PARAMETER; } DEBUG (( DEBUG_VERBOSE, "%a: DriverName=\"%.*a\" UnitAddress=\"%.*a\" DeviceArguments=\"%.*a\"\n", __FUNCTION__, - OfwNode->DriverName.Len, OfwNode->DriverName.Ptr, - OfwNode->UnitAddress.Len, OfwNode->UnitAddress.Ptr, + OfwNode->DriverName.Len, + OfwNode->DriverName.Ptr, + OfwNode->UnitAddress.Len, + OfwNode->UnitAddress.Ptr, OfwNode->DeviceArguments.Len, OfwNode->DeviceArguments.Ptr == NULL ? "" : OfwNode->DeviceArguments.Ptr )); return RETURN_SUCCESS; } - /** Translate a PCI-like array of OpenFirmware device nodes to a UEFI device path @@ -584,21 +581,21 @@ ParseOfwNode ( STATIC RETURN_STATUS TranslatePciOfwNodes ( - IN CONST OFW_NODE *OfwNode, - IN UINTN NumNodes, - IN CONST EXTRA_ROOT_BUS_MAP *ExtraPciRoots, - OUT CHAR16 *Translated, - IN OUT UINTN *TranslatedSize + IN CONST OFW_NODE *OfwNode, + IN UINTN NumNodes, + IN CONST EXTRA_ROOT_BUS_MAP *ExtraPciRoots, + OUT CHAR16 *Translated, + IN OUT UINTN *TranslatedSize ) { - UINT32 PciRoot; - CHAR8 *Comma; - UINTN FirstNonBridge; - CHAR16 Bridges[BRIDGE_TRANSLATION_OUTPUT_SIZE]; - UINTN BridgesLen; - UINT64 PciDevFun[2]; - UINTN NumEntries; - UINTN Written; + UINT32 PciRoot; + CHAR8 *Comma; + UINTN FirstNonBridge; + CHAR16 Bridges[BRIDGE_TRANSLATION_OUTPUT_SIZE]; + UINTN BridgesLen; + UINT64 PciDevFun[2]; + UINTN NumEntries; + UINTN Written; // // Resolve the PCI root bus number. @@ -613,18 +610,22 @@ TranslatePciOfwNodes ( // ^ // root bus serial number (not PCI bus number) // - if (NumNodes < REQUIRED_PCI_OFW_NODES || + if ((NumNodes < REQUIRED_PCI_OFW_NODES) || !SubstringEq (OfwNode[0].DriverName, "pci") - ) { + ) + { return RETURN_UNSUPPORTED; } PciRoot = 0; - Comma = ScanMem8 (OfwNode[0].UnitAddress.Ptr, OfwNode[0].UnitAddress.Len, - ','); + Comma = ScanMem8 ( + OfwNode[0].UnitAddress.Ptr, + OfwNode[0].UnitAddress.Len, + ',' + ); if (Comma != NULL) { - SUBSTRING PciRootSerialSubString; - UINT64 PciRootSerial; + SUBSTRING PciRootSerialSubString; + UINT64 PciRootSerial; // // Parse the root bus serial number from the unit address after the comma. @@ -634,16 +635,28 @@ TranslatePciOfwNodes ( (PciRootSerialSubString.Ptr - OfwNode[0].UnitAddress.Ptr); NumEntries = 1; - if (RETURN_ERROR (ParseUnitAddressHexList (PciRootSerialSubString, - &PciRootSerial, &NumEntries))) { + if (RETURN_ERROR ( + ParseUnitAddressHexList ( + PciRootSerialSubString, + &PciRootSerial, + &NumEntries + ) + )) + { return RETURN_UNSUPPORTED; } // // Map the extra root bus's serial number to its actual bus number. // - if (EFI_ERROR (MapRootBusPosToBusNr (ExtraPciRoots, PciRootSerial, - &PciRoot))) { + if (EFI_ERROR ( + MapRootBusPosToBusNr ( + ExtraPciRoots, + PciRootSerial, + &PciRoot + ) + )) + { return RETURN_PROTOCOL_ERROR; } } @@ -660,26 +673,35 @@ TranslatePciOfwNodes ( // Pci(0x1E,0x0) // FirstNonBridge = 1; - Bridges[0] = L'\0'; - BridgesLen = 0; + Bridges[0] = L'\0'; + BridgesLen = 0; do { - UINT64 BridgeDevFun[2]; - UINTN BridgesFreeBytes; + UINT64 BridgeDevFun[2]; + UINTN BridgesFreeBytes; if (!SubstringEq (OfwNode[FirstNonBridge].DriverName, "pci-bridge")) { break; } BridgeDevFun[1] = 0; - NumEntries = sizeof BridgeDevFun / sizeof BridgeDevFun[0]; - if (ParseUnitAddressHexList (OfwNode[FirstNonBridge].UnitAddress, - BridgeDevFun, &NumEntries) != RETURN_SUCCESS) { + NumEntries = sizeof BridgeDevFun / sizeof BridgeDevFun[0]; + if (ParseUnitAddressHexList ( + OfwNode[FirstNonBridge].UnitAddress, + BridgeDevFun, + &NumEntries + ) != RETURN_SUCCESS) + { return RETURN_UNSUPPORTED; } BridgesFreeBytes = sizeof Bridges - BridgesLen * sizeof Bridges[0]; - Written = UnicodeSPrintAsciiFormat (Bridges + BridgesLen, BridgesFreeBytes, - "/Pci(0x%Lx,0x%Lx)", BridgeDevFun[0], BridgeDevFun[1]); + Written = UnicodeSPrintAsciiFormat ( + Bridges + BridgesLen, + BridgesFreeBytes, + "/Pci(0x%Lx,0x%Lx)", + BridgeDevFun[0], + BridgeDevFun[1] + ); BridgesLen += Written; // @@ -701,21 +723,23 @@ TranslatePciOfwNodes ( // Parse the OFW nodes starting with the first non-bridge node. // PciDevFun[1] = 0; - NumEntries = ARRAY_SIZE (PciDevFun); + NumEntries = ARRAY_SIZE (PciDevFun); if (ParseUnitAddressHexList ( OfwNode[FirstNonBridge].UnitAddress, PciDevFun, &NumEntries ) != RETURN_SUCCESS - ) { + ) + { return RETURN_UNSUPPORTED; } - if (NumNodes >= FirstNonBridge + 3 && + if ((NumNodes >= FirstNonBridge + 3) && SubstringEq (OfwNode[FirstNonBridge + 0].DriverName, "ide") && SubstringEq (OfwNode[FirstNonBridge + 1].DriverName, "drive") && SubstringEq (OfwNode[FirstNonBridge + 2].DriverName, "disk") - ) { + ) + { // // OpenFirmware device path (IDE disk, IDE CD-ROM): // @@ -732,42 +756,44 @@ TranslatePciOfwNodes ( // ^ // fixed LUN // - UINT64 Secondary; - UINT64 Slave; + UINT64 Secondary; + UINT64 Slave; NumEntries = 1; - if (ParseUnitAddressHexList ( - OfwNode[FirstNonBridge + 1].UnitAddress, - &Secondary, - &NumEntries - ) != RETURN_SUCCESS || - Secondary > 1 || - ParseUnitAddressHexList ( - OfwNode[FirstNonBridge + 2].UnitAddress, - &Slave, - &NumEntries // reuse after previous single-element call - ) != RETURN_SUCCESS || - Slave > 1 - ) { + if ((ParseUnitAddressHexList ( + OfwNode[FirstNonBridge + 1].UnitAddress, + &Secondary, + &NumEntries + ) != RETURN_SUCCESS) || + (Secondary > 1) || + (ParseUnitAddressHexList ( + OfwNode[FirstNonBridge + 2].UnitAddress, + &Slave, + &NumEntries // reuse after previous single-element call + ) != RETURN_SUCCESS) || + (Slave > 1) + ) + { return RETURN_UNSUPPORTED; } Written = UnicodeSPrintAsciiFormat ( - Translated, - *TranslatedSize * sizeof (*Translated), // BufferSize in bytes - "PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)/Ata(%a,%a,0x0)", - PciRoot, - Bridges, - PciDevFun[0], - PciDevFun[1], - Secondary ? "Secondary" : "Primary", - Slave ? "Slave" : "Master" - ); - } else if (NumNodes >= FirstNonBridge + 3 && - SubstringEq (OfwNode[FirstNonBridge + 0].DriverName, "pci8086,2922") && - SubstringEq (OfwNode[FirstNonBridge + 1].DriverName, "drive") && - SubstringEq (OfwNode[FirstNonBridge + 2].DriverName, "disk") - ) { + Translated, + *TranslatedSize * sizeof (*Translated), // BufferSize in bytes + "PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)/Ata(%a,%a,0x0)", + PciRoot, + Bridges, + PciDevFun[0], + PciDevFun[1], + Secondary ? "Secondary" : "Primary", + Slave ? "Slave" : "Master" + ); + } else if ((NumNodes >= FirstNonBridge + 3) && + SubstringEq (OfwNode[FirstNonBridge + 0].DriverName, "pci8086,2922") && + SubstringEq (OfwNode[FirstNonBridge + 1].DriverName, "drive") && + SubstringEq (OfwNode[FirstNonBridge + 2].DriverName, "disk") + ) + { // // OpenFirmware device path (Q35 SATA disk and CD-ROM): // @@ -787,30 +813,36 @@ TranslatePciOfwNodes ( // | always 0xFFFF on Q35 // channel (port) number // - UINT64 Channel; + UINT64 Channel; NumEntries = 1; - if (RETURN_ERROR (ParseUnitAddressHexList ( - OfwNode[FirstNonBridge + 1].UnitAddress, &Channel, - &NumEntries))) { + if (RETURN_ERROR ( + ParseUnitAddressHexList ( + OfwNode[FirstNonBridge + 1].UnitAddress, + &Channel, + &NumEntries + ) + )) + { return RETURN_UNSUPPORTED; } Written = UnicodeSPrintAsciiFormat ( - Translated, - *TranslatedSize * sizeof (*Translated), // BufferSize in bytes - "PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)/Sata(0x%Lx,0xFFFF,0x0)", - PciRoot, - Bridges, - PciDevFun[0], - PciDevFun[1], - Channel - ); - } else if (NumNodes >= FirstNonBridge + 3 && + Translated, + *TranslatedSize * sizeof (*Translated), // BufferSize in bytes + "PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)/Sata(0x%Lx,0xFFFF,0x0)", + PciRoot, + Bridges, + PciDevFun[0], + PciDevFun[1], + Channel + ); + } else if ((NumNodes >= FirstNonBridge + 3) && SubstringEq (OfwNode[FirstNonBridge + 0].DriverName, "isa") && SubstringEq (OfwNode[FirstNonBridge + 1].DriverName, "fdc") && SubstringEq (OfwNode[FirstNonBridge + 2].DriverName, "floppy") - ) { + ) + { // // OpenFirmware device path (floppy disk): // @@ -827,33 +859,35 @@ TranslatePciOfwNodes ( // ^ // ACPI UID // - UINT64 AcpiUid; + UINT64 AcpiUid; NumEntries = 1; - if (ParseUnitAddressHexList ( - OfwNode[FirstNonBridge + 2].UnitAddress, - &AcpiUid, - &NumEntries - ) != RETURN_SUCCESS || - AcpiUid > 1 - ) { + if ((ParseUnitAddressHexList ( + OfwNode[FirstNonBridge + 2].UnitAddress, + &AcpiUid, + &NumEntries + ) != RETURN_SUCCESS) || + (AcpiUid > 1) + ) + { return RETURN_UNSUPPORTED; } Written = UnicodeSPrintAsciiFormat ( - Translated, - *TranslatedSize * sizeof (*Translated), // BufferSize in bytes - "PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)/Floppy(0x%Lx)", - PciRoot, - Bridges, - PciDevFun[0], - PciDevFun[1], - AcpiUid - ); - } else if (NumNodes >= FirstNonBridge + 2 && + Translated, + *TranslatedSize * sizeof (*Translated), // BufferSize in bytes + "PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)/Floppy(0x%Lx)", + PciRoot, + Bridges, + PciDevFun[0], + PciDevFun[1], + AcpiUid + ); + } else if ((NumNodes >= FirstNonBridge + 2) && SubstringEq (OfwNode[FirstNonBridge + 0].DriverName, "scsi") && SubstringEq (OfwNode[FirstNonBridge + 1].DriverName, "disk") - ) { + ) + { // // OpenFirmware device path (virtio-blk disk): // @@ -870,19 +904,20 @@ TranslatePciOfwNodes ( // PciRoot(0x0)/Pci(0x6,0x3) -- if PCI function is present and nonzero // Written = UnicodeSPrintAsciiFormat ( - Translated, - *TranslatedSize * sizeof (*Translated), // BufferSize in bytes - "PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)", - PciRoot, - Bridges, - PciDevFun[0], - PciDevFun[1] - ); - } else if (NumNodes >= FirstNonBridge + 3 && + Translated, + *TranslatedSize * sizeof (*Translated), // BufferSize in bytes + "PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)", + PciRoot, + Bridges, + PciDevFun[0], + PciDevFun[1] + ); + } else if ((NumNodes >= FirstNonBridge + 3) && SubstringEq (OfwNode[FirstNonBridge + 0].DriverName, "scsi") && SubstringEq (OfwNode[FirstNonBridge + 1].DriverName, "channel") && SubstringEq (OfwNode[FirstNonBridge + 2].DriverName, "disk") - ) { + ) + { // // OpenFirmware device path (virtio-scsi disk): // @@ -901,34 +936,36 @@ TranslatePciOfwNodes ( // PciRoot(0x0)/Pci(0x7,0x3)/Scsi(0x2,0x3) // -- if PCI function is present and nonzero // - UINT64 TargetLun[2]; + UINT64 TargetLun[2]; TargetLun[1] = 0; - NumEntries = ARRAY_SIZE (TargetLun); + NumEntries = ARRAY_SIZE (TargetLun); if (ParseUnitAddressHexList ( OfwNode[FirstNonBridge + 2].UnitAddress, TargetLun, &NumEntries ) != RETURN_SUCCESS - ) { + ) + { return RETURN_UNSUPPORTED; } Written = UnicodeSPrintAsciiFormat ( - Translated, - *TranslatedSize * sizeof (*Translated), // BufferSize in bytes - "PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)/Scsi(0x%Lx,0x%Lx)", - PciRoot, - Bridges, - PciDevFun[0], - PciDevFun[1], - TargetLun[0], - TargetLun[1] - ); - } else if (NumNodes >= FirstNonBridge + 2 && - SubstringEq (OfwNode[FirstNonBridge + 0].DriverName, "pci8086,5845") && - SubstringEq (OfwNode[FirstNonBridge + 1].DriverName, "namespace") - ) { + Translated, + *TranslatedSize * sizeof (*Translated), // BufferSize in bytes + "PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)/Scsi(0x%Lx,0x%Lx)", + PciRoot, + Bridges, + PciDevFun[0], + PciDevFun[1], + TargetLun[0], + TargetLun[1] + ); + } else if ((NumNodes >= FirstNonBridge + 2) && + SubstringEq (OfwNode[FirstNonBridge + 0].DriverName, "pci8086,5845") && + SubstringEq (OfwNode[FirstNonBridge + 1].DriverName, "namespace") + ) + { // // OpenFirmware device path (NVMe device): // @@ -948,41 +985,49 @@ TranslatePciOfwNodes ( // | in address order // namespace ID // - UINT64 Namespace[2]; - UINTN RequiredEntries; - UINT8 *Eui64; + UINT64 Namespace[2]; + UINTN RequiredEntries; + UINT8 *Eui64; RequiredEntries = ARRAY_SIZE (Namespace); - NumEntries = RequiredEntries; - if (ParseUnitAddressHexList ( - OfwNode[FirstNonBridge + 1].UnitAddress, - Namespace, - &NumEntries - ) != RETURN_SUCCESS || - NumEntries != RequiredEntries || - Namespace[0] == 0 || - Namespace[0] >= MAX_UINT32 - ) { + NumEntries = RequiredEntries; + if ((ParseUnitAddressHexList ( + OfwNode[FirstNonBridge + 1].UnitAddress, + Namespace, + &NumEntries + ) != RETURN_SUCCESS) || + (NumEntries != RequiredEntries) || + (Namespace[0] == 0) || + (Namespace[0] >= MAX_UINT32) + ) + { return RETURN_UNSUPPORTED; } - Eui64 = (UINT8 *)&Namespace[1]; + Eui64 = (UINT8 *)&Namespace[1]; Written = UnicodeSPrintAsciiFormat ( - Translated, - *TranslatedSize * sizeof (*Translated), // BufferSize in bytes - "PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)/" - "NVMe(0x%Lx,%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)", - PciRoot, - Bridges, - PciDevFun[0], - PciDevFun[1], - Namespace[0], - Eui64[7], Eui64[6], Eui64[5], Eui64[4], - Eui64[3], Eui64[2], Eui64[1], Eui64[0] - ); - } else if (NumNodes >= FirstNonBridge + 2 && + Translated, + *TranslatedSize * sizeof (*Translated), // BufferSize in bytes + "PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)/" + "NVMe(0x%Lx,%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x)", + PciRoot, + Bridges, + PciDevFun[0], + PciDevFun[1], + Namespace[0], + Eui64[7], + Eui64[6], + Eui64[5], + Eui64[4], + Eui64[3], + Eui64[2], + Eui64[1], + Eui64[0] + ); + } else if ((NumNodes >= FirstNonBridge + 2) && SubstringEq (OfwNode[FirstNonBridge + 0].DriverName, "usb") && - SubstringEq (OfwNode[FirstNonBridge + 1].DriverName, "storage")) { + SubstringEq (OfwNode[FirstNonBridge + 1].DriverName, "storage")) + { // // OpenFirmware device path (usb-storage device in XHCI port): // @@ -1001,16 +1046,16 @@ TranslatePciOfwNodes ( // | XHCI port number in 0-based notation // 0x0 if PCI function is 0, or absent from OFW // - RETURN_STATUS ParseStatus; - UINT64 OneBasedXhciPort; + RETURN_STATUS ParseStatus; + UINT64 OneBasedXhciPort; - NumEntries = 1; + NumEntries = 1; ParseStatus = ParseUnitAddressHexList ( OfwNode[FirstNonBridge + 1].UnitAddress, &OneBasedXhciPort, &NumEntries ); - if (RETURN_ERROR (ParseStatus) || OneBasedXhciPort == 0) { + if (RETURN_ERROR (ParseStatus) || (OneBasedXhciPort == 0)) { return RETURN_UNSUPPORTED; } @@ -1039,14 +1084,14 @@ TranslatePciOfwNodes ( // PciRoot(0x0)/Pci(0x3,0x2) // Written = UnicodeSPrintAsciiFormat ( - Translated, - *TranslatedSize * sizeof (*Translated), // BufferSize in bytes - "PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)", - PciRoot, - Bridges, - PciDevFun[0], - PciDevFun[1] - ); + Translated, + *TranslatedSize * sizeof (*Translated), // BufferSize in bytes + "PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)", + PciRoot, + Bridges, + PciDevFun[0], + PciDevFun[1] + ); } // @@ -1062,17 +1107,15 @@ TranslatePciOfwNodes ( return RETURN_BUFFER_TOO_SMALL; } - // // A type providing easy raw access to the base address of a virtio-mmio // transport. // typedef union { - UINT64 Uint64; - UINT8 Raw[8]; + UINT64 Uint64; + UINT8 Raw[8]; } VIRTIO_MMIO_BASE_ADDRESS; - /** Translate an MMIO-like array of OpenFirmware device nodes to a UEFI device @@ -1108,43 +1151,56 @@ typedef union { STATIC RETURN_STATUS TranslateMmioOfwNodes ( - IN CONST OFW_NODE *OfwNode, - IN UINTN NumNodes, - OUT CHAR16 *Translated, - IN OUT UINTN *TranslatedSize + IN CONST OFW_NODE *OfwNode, + IN UINTN NumNodes, + OUT CHAR16 *Translated, + IN OUT UINTN *TranslatedSize ) { - VIRTIO_MMIO_BASE_ADDRESS VirtioMmioBase; - CHAR16 VenHwString[60 + 1]; - UINTN NumEntries; - UINTN Written; + VIRTIO_MMIO_BASE_ADDRESS VirtioMmioBase; + CHAR16 VenHwString[60 + 1]; + UINTN NumEntries; + UINTN Written; // // Get the base address of the virtio-mmio transport. // - if (NumNodes < REQUIRED_MMIO_OFW_NODES || + if ((NumNodes < REQUIRED_MMIO_OFW_NODES) || !SubstringEq (OfwNode[0].DriverName, "virtio-mmio") - ) { + ) + { return RETURN_UNSUPPORTED; } + NumEntries = 1; if (ParseUnitAddressHexList ( OfwNode[0].UnitAddress, &VirtioMmioBase.Uint64, &NumEntries ) != RETURN_SUCCESS - ) { + ) + { return RETURN_UNSUPPORTED; } - UnicodeSPrintAsciiFormat (VenHwString, sizeof VenHwString, - "VenHw(%g,%02X%02X%02X%02X%02X%02X%02X%02X)", &gVirtioMmioTransportGuid, - VirtioMmioBase.Raw[0], VirtioMmioBase.Raw[1], VirtioMmioBase.Raw[2], - VirtioMmioBase.Raw[3], VirtioMmioBase.Raw[4], VirtioMmioBase.Raw[5], - VirtioMmioBase.Raw[6], VirtioMmioBase.Raw[7]); - - if (NumNodes >= 2 && - SubstringEq (OfwNode[1].DriverName, "disk")) { + UnicodeSPrintAsciiFormat ( + VenHwString, + sizeof VenHwString, + "VenHw(%g,%02X%02X%02X%02X%02X%02X%02X%02X)", + &gVirtioMmioTransportGuid, + VirtioMmioBase.Raw[0], + VirtioMmioBase.Raw[1], + VirtioMmioBase.Raw[2], + VirtioMmioBase.Raw[3], + VirtioMmioBase.Raw[4], + VirtioMmioBase.Raw[5], + VirtioMmioBase.Raw[6], + VirtioMmioBase.Raw[7] + ); + + if ((NumNodes >= 2) && + SubstringEq (OfwNode[1].DriverName, "disk")) + { // // OpenFirmware device path (virtio-blk disk): // @@ -1163,9 +1219,10 @@ TranslateMmioOfwNodes ( "%s", VenHwString ); - } else if (NumNodes >= 3 && + } else if ((NumNodes >= 3) && SubstringEq (OfwNode[1].DriverName, "channel") && - SubstringEq (OfwNode[2].DriverName, "disk")) { + SubstringEq (OfwNode[2].DriverName, "disk")) + { // // OpenFirmware device path (virtio-scsi disk): // @@ -1180,16 +1237,17 @@ TranslateMmioOfwNodes ( // // /Scsi(0x2,0x3) // - UINT64 TargetLun[2]; + UINT64 TargetLun[2]; TargetLun[1] = 0; - NumEntries = ARRAY_SIZE (TargetLun); + NumEntries = ARRAY_SIZE (TargetLun); if (ParseUnitAddressHexList ( OfwNode[2].UnitAddress, TargetLun, &NumEntries ) != RETURN_SUCCESS - ) { + ) + { return RETURN_UNSUPPORTED; } @@ -1201,8 +1259,9 @@ TranslateMmioOfwNodes ( TargetLun[0], TargetLun[1] ); - } else if (NumNodes >= 2 && - SubstringEq (OfwNode[1].DriverName, "ethernet-phy")) { + } else if ((NumNodes >= 2) && + SubstringEq (OfwNode[1].DriverName, "ethernet-phy")) + { // // OpenFirmware device path (virtio-net NIC): // @@ -1238,7 +1297,6 @@ TranslateMmioOfwNodes ( return RETURN_BUFFER_TOO_SMALL; } - /** Translate an array of OpenFirmware device nodes to a UEFI device path @@ -1283,26 +1341,38 @@ TranslateMmioOfwNodes ( STATIC RETURN_STATUS TranslateOfwNodes ( - IN CONST OFW_NODE *OfwNode, - IN UINTN NumNodes, - IN CONST EXTRA_ROOT_BUS_MAP *ExtraPciRoots, - OUT CHAR16 *Translated, - IN OUT UINTN *TranslatedSize + IN CONST OFW_NODE *OfwNode, + IN UINTN NumNodes, + IN CONST EXTRA_ROOT_BUS_MAP *ExtraPciRoots, + OUT CHAR16 *Translated, + IN OUT UINTN *TranslatedSize ) { - RETURN_STATUS Status; + RETURN_STATUS Status; Status = RETURN_UNSUPPORTED; if (FeaturePcdGet (PcdQemuBootOrderPciTranslation)) { - Status = TranslatePciOfwNodes (OfwNode, NumNodes, ExtraPciRoots, - Translated, TranslatedSize); + Status = TranslatePciOfwNodes ( + OfwNode, + NumNodes, + ExtraPciRoots, + Translated, + TranslatedSize + ); } - if (Status == RETURN_UNSUPPORTED && - FeaturePcdGet (PcdQemuBootOrderMmioTranslation)) { - Status = TranslateMmioOfwNodes (OfwNode, NumNodes, Translated, - TranslatedSize); + + if ((Status == RETURN_UNSUPPORTED) && + FeaturePcdGet (PcdQemuBootOrderMmioTranslation)) + { + Status = TranslateMmioOfwNodes ( + OfwNode, + NumNodes, + Translated, + TranslatedSize + ); } + return Status; } @@ -1368,22 +1438,22 @@ TranslateOfwNodes ( STATIC RETURN_STATUS TranslateOfwPath ( - IN OUT CONST CHAR8 **Ptr, - IN CONST EXTRA_ROOT_BUS_MAP *ExtraPciRoots, - OUT CHAR16 *Translated, - IN OUT UINTN *TranslatedSize + IN OUT CONST CHAR8 **Ptr, + IN CONST EXTRA_ROOT_BUS_MAP *ExtraPciRoots, + OUT CHAR16 *Translated, + IN OUT UINTN *TranslatedSize ) { - UINTN NumNodes; - RETURN_STATUS Status; - OFW_NODE Node[EXAMINED_OFW_NODES]; - BOOLEAN IsFinal; - OFW_NODE Skip; + UINTN NumNodes; + RETURN_STATUS Status; + OFW_NODE Node[EXAMINED_OFW_NODES]; + BOOLEAN IsFinal; + OFW_NODE Skip; - IsFinal = FALSE; + IsFinal = FALSE; NumNodes = 0; if (AsciiStrCmp (*Ptr, "HALT") == 0) { - *Ptr += 4; + *Ptr += 4; Status = RETURN_NOT_FOUND; } else { Status = ParseOfwNode (Ptr, &Node[NumNodes], &IsFinal); @@ -1404,16 +1474,16 @@ TranslateOfwPath ( } switch (Status) { - case RETURN_SUCCESS: - ++NumNodes; - break; + case RETURN_SUCCESS: + ++NumNodes; + break; - case RETURN_INVALID_PARAMETER: - DEBUG ((DEBUG_VERBOSE, "%a: parse error\n", __FUNCTION__)); - return RETURN_INVALID_PARAMETER; + case RETURN_INVALID_PARAMETER: + DEBUG ((DEBUG_VERBOSE, "%a: parse error\n", __FUNCTION__)); + return RETURN_INVALID_PARAMETER; - default: - ASSERT (0); + default: + ASSERT (0); } Status = TranslateOfwNodes ( @@ -1421,32 +1491,36 @@ TranslateOfwPath ( NumNodes < EXAMINED_OFW_NODES ? NumNodes : EXAMINED_OFW_NODES, ExtraPciRoots, Translated, - TranslatedSize); + TranslatedSize + ); switch (Status) { - case RETURN_SUCCESS: - DEBUG ((DEBUG_VERBOSE, "%a: success: \"%s\"\n", __FUNCTION__, Translated)); - break; + case RETURN_SUCCESS: + DEBUG ((DEBUG_VERBOSE, "%a: success: \"%s\"\n", __FUNCTION__, Translated)); + break; - case RETURN_BUFFER_TOO_SMALL: - DEBUG ((DEBUG_VERBOSE, "%a: buffer too small\n", __FUNCTION__)); - break; + case RETURN_BUFFER_TOO_SMALL: + DEBUG ((DEBUG_VERBOSE, "%a: buffer too small\n", __FUNCTION__)); + break; - case RETURN_UNSUPPORTED: - DEBUG ((DEBUG_VERBOSE, "%a: unsupported\n", __FUNCTION__)); - break; + case RETURN_UNSUPPORTED: + DEBUG ((DEBUG_VERBOSE, "%a: unsupported\n", __FUNCTION__)); + break; - case RETURN_PROTOCOL_ERROR: - DEBUG ((DEBUG_VERBOSE, "%a: logic error / system state mismatch\n", - __FUNCTION__)); - break; + case RETURN_PROTOCOL_ERROR: + DEBUG (( + DEBUG_VERBOSE, + "%a: logic error / system state mismatch\n", + __FUNCTION__ + )); + break; - default: - ASSERT (0); + default: + ASSERT (0); } + return Status; } - /** Connect devices based on the boot order retrieved from QEMU. @@ -1481,16 +1555,16 @@ ConnectDevicesFromQemu ( VOID ) { - RETURN_STATUS Status; - FIRMWARE_CONFIG_ITEM FwCfgItem; - UINTN FwCfgSize; - CHAR8 *FwCfg; - EFI_STATUS EfiStatus; - EXTRA_ROOT_BUS_MAP *ExtraPciRoots; - CONST CHAR8 *FwCfgPtr; - UINTN NumConnected; - UINTN TranslatedSize; - CHAR16 Translated[TRANSLATION_OUTPUT_SIZE]; + RETURN_STATUS Status; + FIRMWARE_CONFIG_ITEM FwCfgItem; + UINTN FwCfgSize; + CHAR8 *FwCfg; + EFI_STATUS EfiStatus; + EXTRA_ROOT_BUS_MAP *ExtraPciRoots; + CONST CHAR8 *FwCfgPtr; + UINTN NumConnected; + UINTN TranslatedSize; + CHAR16 Translated[TRANSLATION_OUTPUT_SIZE]; Status = QemuFwCfgFindFile ("bootorder", &FwCfgItem, &FwCfgSize); if (RETURN_ERROR (Status)) { @@ -1512,6 +1586,7 @@ ConnectDevicesFromQemu ( Status = RETURN_INVALID_PARAMETER; goto FreeFwCfg; } + DEBUG ((DEBUG_VERBOSE, "%a: FwCfg:\n", __FUNCTION__)); DEBUG ((DEBUG_VERBOSE, "%a\n", FwCfg)); DEBUG ((DEBUG_VERBOSE, "%a: FwCfg: \n", __FUNCTION__)); @@ -1529,14 +1604,18 @@ ConnectDevicesFromQemu ( // // Translate each OpenFirmware path to a UEFI devpath prefix. // - FwCfgPtr = FwCfg; - NumConnected = 0; + FwCfgPtr = FwCfg; + NumConnected = 0; TranslatedSize = ARRAY_SIZE (Translated); - Status = TranslateOfwPath (&FwCfgPtr, ExtraPciRoots, Translated, - &TranslatedSize); + Status = TranslateOfwPath ( + &FwCfgPtr, + ExtraPciRoots, + Translated, + &TranslatedSize + ); while (!RETURN_ERROR (Status)) { - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - EFI_HANDLE Controller; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + EFI_HANDLE Controller; // // Convert the UEFI devpath prefix to binary representation. @@ -1547,6 +1626,7 @@ ConnectDevicesFromQemu ( Status = RETURN_OUT_OF_RESOURCES; goto FreeExtraPciRoots; } + // // Advance along DevicePath, connecting the nodes individually, and asking // drivers not to produce sibling nodes. Retrieve the controller handle @@ -1559,6 +1639,7 @@ ConnectDevicesFromQemu ( Status = (RETURN_STATUS)EfiStatus; goto FreeExtraPciRoots; } + // // Because QEMU's OFW devpaths have lesser expressive power than UEFI // devpaths (i.e., DevicePath is considered a prefix), connect the tree @@ -1566,22 +1647,31 @@ ConnectDevicesFromQemu ( // (EFI_NOT_FOUND), that's OK. // EfiStatus = gBS->ConnectController (Controller, NULL, NULL, TRUE); - if (EFI_ERROR (EfiStatus) && EfiStatus != EFI_NOT_FOUND) { + if (EFI_ERROR (EfiStatus) && (EfiStatus != EFI_NOT_FOUND)) { Status = (RETURN_STATUS)EfiStatus; goto FreeExtraPciRoots; } + ++NumConnected; // // Move to the next OFW devpath. // TranslatedSize = ARRAY_SIZE (Translated); - Status = TranslateOfwPath (&FwCfgPtr, ExtraPciRoots, Translated, - &TranslatedSize); + Status = TranslateOfwPath ( + &FwCfgPtr, + ExtraPciRoots, + Translated, + &TranslatedSize + ); } - if (Status == RETURN_NOT_FOUND && NumConnected > 0) { - DEBUG ((DEBUG_INFO, "%a: %Lu OpenFirmware device path(s) connected\n", - __FUNCTION__, (UINT64)NumConnected)); + if ((Status == RETURN_NOT_FOUND) && (NumConnected > 0)) { + DEBUG (( + DEBUG_INFO, + "%a: %Lu OpenFirmware device path(s) connected\n", + __FUNCTION__, + (UINT64)NumConnected + )); Status = RETURN_SUCCESS; } @@ -1596,7 +1686,6 @@ FreeFwCfg: return Status; } - /** Convert the UEFI DevicePath to full text representation with DevPathToText, @@ -1623,19 +1712,19 @@ FreeFwCfg: STATIC BOOLEAN Match ( - IN CONST CHAR16 *Translated, - IN UINTN TranslatedLength, - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath + IN CONST CHAR16 *Translated, + IN UINTN TranslatedLength, + IN EFI_DEVICE_PATH_PROTOCOL *DevicePath ) { - CHAR16 *Converted; - BOOLEAN Result; - VOID *FileBuffer; - UINTN FileSize; - EFI_DEVICE_PATH_PROTOCOL *AbsDevicePath; - CHAR16 *AbsConverted; - BOOLEAN Shortform; - EFI_DEVICE_PATH_PROTOCOL *Node; + CHAR16 *Converted; + BOOLEAN Result; + VOID *FileBuffer; + UINTN FileSize; + EFI_DEVICE_PATH_PROTOCOL *AbsDevicePath; + CHAR16 *AbsConverted; + BOOLEAN Shortform; + EFI_DEVICE_PATH_PROTOCOL *Node; Converted = ConvertDevicePathToText ( DevicePath, @@ -1646,37 +1735,42 @@ Match ( return FALSE; } - Result = FALSE; + Result = FALSE; Shortform = FALSE; // // Expand the short-form device path to full device path // if ((DevicePathType (DevicePath) == MEDIA_DEVICE_PATH) && - (DevicePathSubType (DevicePath) == MEDIA_HARDDRIVE_DP)) { + (DevicePathSubType (DevicePath) == MEDIA_HARDDRIVE_DP)) + { // // Harddrive shortform device path // Shortform = TRUE; } else if ((DevicePathType (DevicePath) == MEDIA_DEVICE_PATH) && - (DevicePathSubType (DevicePath) == MEDIA_FILEPATH_DP)) { + (DevicePathSubType (DevicePath) == MEDIA_FILEPATH_DP)) + { // // File-path shortform device path // Shortform = TRUE; } else if ((DevicePathType (DevicePath) == MESSAGING_DEVICE_PATH) && - (DevicePathSubType (DevicePath) == MSG_URI_DP)) { + (DevicePathSubType (DevicePath) == MSG_URI_DP)) + { // // URI shortform device path // Shortform = TRUE; } else { for ( Node = DevicePath - ; !IsDevicePathEnd (Node) - ; Node = NextDevicePathNode (Node) - ) { + ; !IsDevicePathEnd (Node) + ; Node = NextDevicePathNode (Node) + ) + { if ((DevicePathType (Node) == MESSAGING_DEVICE_PATH) && ((DevicePathSubType (Node) == MSG_USB_CLASS_DP) || - (DevicePathSubType (Node) == MSG_USB_WWID_DP))) { + (DevicePathSubType (Node) == MSG_USB_WWID_DP))) + { Shortform = TRUE; break; } @@ -1689,20 +1783,27 @@ Match ( // if (Shortform) { FileBuffer = EfiBootManagerGetLoadOptionBuffer ( - DevicePath, &AbsDevicePath, &FileSize + DevicePath, + &AbsDevicePath, + &FileSize ); if (FileBuffer == NULL) { goto Exit; } + FreePool (FileBuffer); AbsConverted = ConvertDevicePathToText (AbsDevicePath, FALSE, FALSE); FreePool (AbsDevicePath); if (AbsConverted == NULL) { goto Exit; } - DEBUG ((DEBUG_VERBOSE, + + DEBUG (( + DEBUG_VERBOSE, "%a: expanded relative device path \"%s\" for prefix matching\n", - __FUNCTION__, Converted)); + __FUNCTION__, + Converted + )); FreePool (Converted); Converted = AbsConverted; } @@ -1723,7 +1824,6 @@ Exit: return Result; } - /** Append some of the unselected active boot options to the boot order. @@ -1753,27 +1853,27 @@ Exit: STATIC RETURN_STATUS BootOrderComplete ( - IN OUT BOOT_ORDER *BootOrder, - IN OUT ACTIVE_OPTION *ActiveOption, - IN UINTN ActiveCount + IN OUT BOOT_ORDER *BootOrder, + IN OUT ACTIVE_OPTION *ActiveOption, + IN UINTN ActiveCount ) { - RETURN_STATUS Status; - UINTN Idx; + RETURN_STATUS Status; + UINTN Idx; Status = RETURN_SUCCESS; - Idx = 0; + Idx = 0; while (!RETURN_ERROR (Status) && Idx < ActiveCount) { if (!ActiveOption[Idx].Appended) { - CONST EFI_BOOT_MANAGER_LOAD_OPTION *Current; - CONST EFI_DEVICE_PATH_PROTOCOL *FirstNode; + CONST EFI_BOOT_MANAGER_LOAD_OPTION *Current; + CONST EFI_DEVICE_PATH_PROTOCOL *FirstNode; - Current = ActiveOption[Idx].BootOption; + Current = ActiveOption[Idx].BootOption; FirstNode = Current->FilePath; if (FirstNode != NULL) { - CHAR16 *Converted; - STATIC CHAR16 ConvFallBack[] = L""; - BOOLEAN Keep; + CHAR16 *Converted; + STATIC CHAR16 ConvFallBack[] = L""; + BOOLEAN Keep; Converted = ConvertDevicePathToText (FirstNode, FALSE, FALSE); if (Converted == NULL) { @@ -1781,19 +1881,22 @@ BootOrderComplete ( } Keep = TRUE; - if (DevicePathType(FirstNode) == MEDIA_DEVICE_PATH && - DevicePathSubType(FirstNode) == MEDIA_HARDDRIVE_DP) { + if ((DevicePathType (FirstNode) == MEDIA_DEVICE_PATH) && + (DevicePathSubType (FirstNode) == MEDIA_HARDDRIVE_DP)) + { // // drop HD() // Keep = FALSE; - } else if (DevicePathType(FirstNode) == ACPI_DEVICE_PATH && - DevicePathSubType(FirstNode) == ACPI_DP) { - ACPI_HID_DEVICE_PATH *Acpi; - - Acpi = (ACPI_HID_DEVICE_PATH *) FirstNode; - if ((Acpi->HID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST && - EISA_ID_TO_NUM (Acpi->HID) == 0x0a03) { + } else if ((DevicePathType (FirstNode) == ACPI_DEVICE_PATH) && + (DevicePathSubType (FirstNode) == ACPI_DP)) + { + ACPI_HID_DEVICE_PATH *Acpi; + + Acpi = (ACPI_HID_DEVICE_PATH *)FirstNode; + if (((Acpi->HID & PNP_EISA_ID_MASK) == PNP_EISA_ID_CONST) && + (EISA_ID_TO_NUM (Acpi->HID) == 0x0a03)) + { // // drop PciRoot() if we enabled the user to select PCI-like boot // options, by providing translation for such OFW device path @@ -1801,9 +1904,10 @@ BootOrderComplete ( // Keep = !FeaturePcdGet (PcdQemuBootOrderPciTranslation); } - } else if (DevicePathType(FirstNode) == HARDWARE_DEVICE_PATH && - DevicePathSubType(FirstNode) == HW_VENDOR_DP) { - VENDOR_DEVICE_PATH *VenHw; + } else if ((DevicePathType (FirstNode) == HARDWARE_DEVICE_PATH) && + (DevicePathSubType (FirstNode) == HW_VENDOR_DP)) + { + VENDOR_DEVICE_PATH *VenHw; VenHw = (VENDOR_DEVICE_PATH *)FirstNode; if (CompareGuid (&VenHw->Guid, &gVirtioMmioTransportGuid)) { @@ -1818,12 +1922,20 @@ BootOrderComplete ( if (Keep) { Status = BootOrderAppend (BootOrder, &ActiveOption[Idx]); if (!RETURN_ERROR (Status)) { - DEBUG ((DEBUG_VERBOSE, "%a: keeping \"%s\"\n", __FUNCTION__, - Converted)); + DEBUG (( + DEBUG_VERBOSE, + "%a: keeping \"%s\"\n", + __FUNCTION__, + Converted + )); } } else { - DEBUG ((DEBUG_VERBOSE, "%a: dropping \"%s\"\n", __FUNCTION__, - Converted)); + DEBUG (( + DEBUG_VERBOSE, + "%a: dropping \"%s\"\n", + __FUNCTION__, + Converted + )); } if (Converted != ConvFallBack) { @@ -1831,12 +1943,13 @@ BootOrderComplete ( } } } + ++Idx; } + return Status; } - /** Delete Boot#### variables that stand for such active boot options that have been dropped (ie. have not been selected by either matching or "survival @@ -1851,24 +1964,30 @@ BootOrderComplete ( STATIC VOID PruneBootVariables ( - IN CONST ACTIVE_OPTION *ActiveOption, - IN UINTN ActiveCount + IN CONST ACTIVE_OPTION *ActiveOption, + IN UINTN ActiveCount ) { - UINTN Idx; + UINTN Idx; for (Idx = 0; Idx < ActiveCount; ++Idx) { if (!ActiveOption[Idx].Appended) { - CHAR16 VariableName[9]; + CHAR16 VariableName[9]; - UnicodeSPrintAsciiFormat (VariableName, sizeof VariableName, "Boot%04x", - ActiveOption[Idx].BootOption->OptionNumber); + UnicodeSPrintAsciiFormat ( + VariableName, + sizeof VariableName, + "Boot%04x", + ActiveOption[Idx].BootOption->OptionNumber + ); // // "The space consumed by the deleted variable may not be available until // the next power cycle", but that's good enough. // - gRT->SetVariable (VariableName, &gEfiGlobalVariableGuid, + gRT->SetVariable ( + VariableName, + &gEfiGlobalVariableGuid, 0, // Attributes, 0 means deletion 0, // DataSize, 0 means deletion NULL // Data @@ -1877,7 +1996,6 @@ PruneBootVariables ( } } - /** Set the boot order based on configuration retrieved from QEMU. @@ -1912,22 +2030,22 @@ SetBootOrderFromQemu ( VOID ) { - RETURN_STATUS Status; - FIRMWARE_CONFIG_ITEM FwCfgItem; - UINTN FwCfgSize; - CHAR8 *FwCfg; - CONST CHAR8 *FwCfgPtr; + RETURN_STATUS Status; + FIRMWARE_CONFIG_ITEM FwCfgItem; + UINTN FwCfgSize; + CHAR8 *FwCfg; + CONST CHAR8 *FwCfgPtr; - BOOT_ORDER BootOrder; - ACTIVE_OPTION *ActiveOption; - UINTN ActiveCount; + BOOT_ORDER BootOrder; + ACTIVE_OPTION *ActiveOption; + UINTN ActiveCount; - EXTRA_ROOT_BUS_MAP *ExtraPciRoots; + EXTRA_ROOT_BUS_MAP *ExtraPciRoots; - UINTN TranslatedSize; - CHAR16 Translated[TRANSLATION_OUTPUT_SIZE]; - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; - UINTN BootOptionCount; + UINTN TranslatedSize; + CHAR16 Translated[TRANSLATION_OUTPUT_SIZE]; + EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; + UINTN BootOptionCount; Status = QemuFwCfgFindFile ("bootorder", &FwCfgItem, &FwCfgSize); if (Status != RETURN_SUCCESS) { @@ -1957,16 +2075,17 @@ SetBootOrderFromQemu ( BootOrder.Produced = 0; BootOrder.Allocated = 1; - BootOrder.Data = AllocatePool ( - BootOrder.Allocated * sizeof (*BootOrder.Data) - ); + BootOrder.Data = AllocatePool ( + BootOrder.Allocated * sizeof (*BootOrder.Data) + ); if (BootOrder.Data == NULL) { Status = RETURN_OUT_OF_RESOURCES; goto ErrorFreeFwCfg; } BootOptions = EfiBootManagerGetLoadOptions ( - &BootOptionCount, LoadOptionTypeBoot + &BootOptionCount, + LoadOptionTypeBoot ); if (BootOptions == NULL) { Status = RETURN_NOT_FOUND; @@ -1974,7 +2093,10 @@ SetBootOrderFromQemu ( } Status = CollectActiveOptions ( - BootOptions, BootOptionCount, &ActiveOption, &ActiveCount + BootOptions, + BootOptionCount, + &ActiveOption, + &ActiveCount ); if (RETURN_ERROR (Status)) { goto ErrorFreeBootOptions; @@ -1993,14 +2115,19 @@ SetBootOrderFromQemu ( // translate each OpenFirmware path // TranslatedSize = ARRAY_SIZE (Translated); - Status = TranslateOfwPath (&FwCfgPtr, ExtraPciRoots, Translated, - &TranslatedSize); + Status = TranslateOfwPath ( + &FwCfgPtr, + ExtraPciRoots, + Translated, + &TranslatedSize + ); while (Status == RETURN_SUCCESS || Status == RETURN_UNSUPPORTED || Status == RETURN_PROTOCOL_ERROR || - Status == RETURN_BUFFER_TOO_SMALL) { + Status == RETURN_BUFFER_TOO_SMALL) + { if (Status == RETURN_SUCCESS) { - UINTN Idx; + UINTN Idx; // // match translated OpenFirmware path against all active boot options @@ -2012,7 +2139,8 @@ SetBootOrderFromQemu ( TranslatedSize, // contains length, not size, in CHAR16's here ActiveOption[Idx].BootOption->FilePath ) - ) { + ) + { // // match found, store ID and continue with next OpenFirmware path // @@ -2025,11 +2153,15 @@ SetBootOrderFromQemu ( } // translation successful TranslatedSize = ARRAY_SIZE (Translated); - Status = TranslateOfwPath (&FwCfgPtr, ExtraPciRoots, Translated, - &TranslatedSize); + Status = TranslateOfwPath ( + &FwCfgPtr, + ExtraPciRoots, + Translated, + &TranslatedSize + ); } // scanning of OpenFirmware paths done - if (Status == RETURN_NOT_FOUND && BootOrder.Produced > 0) { + if ((Status == RETURN_NOT_FOUND) && (BootOrder.Produced > 0)) { // // No more OpenFirmware paths, some matches found: rewrite BootOrder NvVar. // Some of the active boot options that have not been selected over fw_cfg @@ -2048,14 +2180,18 @@ SetBootOrderFromQemu ( L"BootOrder", &gEfiGlobalVariableGuid, EFI_VARIABLE_NON_VOLATILE | - EFI_VARIABLE_BOOTSERVICE_ACCESS | - EFI_VARIABLE_RUNTIME_ACCESS, + EFI_VARIABLE_BOOTSERVICE_ACCESS | + EFI_VARIABLE_RUNTIME_ACCESS, BootOrder.Produced * sizeof (*BootOrder.Data), BootOrder.Data ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: setting BootOrder: %r\n", __FUNCTION__, - Status)); + DEBUG (( + DEBUG_ERROR, + "%a: setting BootOrder: %r\n", + __FUNCTION__, + Status + )); goto ErrorFreeExtraPciRoots; } @@ -2083,7 +2219,6 @@ ErrorFreeFwCfg: return Status; } - /** Calculate the number of seconds we should be showing the FrontPage progress bar for. @@ -2096,8 +2231,8 @@ GetFrontPageTimeoutFromQemu ( VOID ) { - FIRMWARE_CONFIG_ITEM BootMenuWaitItem; - UINTN BootMenuWaitSize; + FIRMWARE_CONFIG_ITEM BootMenuWaitItem; + UINTN BootMenuWaitSize; QemuFwCfgSelectItem (QemuFwCfgItemBootMenu); if (QemuFwCfgRead16 () == 0) { @@ -2108,20 +2243,27 @@ GetFrontPageTimeoutFromQemu ( return PcdGet16 (PcdPlatformBootTimeOut); } - if (RETURN_ERROR (QemuFwCfgFindFile ("etc/boot-menu-wait", &BootMenuWaitItem, - &BootMenuWaitSize)) || - BootMenuWaitSize != sizeof (UINT16)) { + if (RETURN_ERROR ( + QemuFwCfgFindFile ( + "etc/boot-menu-wait", + &BootMenuWaitItem, + &BootMenuWaitSize + ) + ) || + (BootMenuWaitSize != sizeof (UINT16))) + { // // "-boot menu=on" was specified without "splash-time=N". In this case, // return three seconds if the platform default would cause us to skip the // front page, and return the platform default otherwise. // - UINT16 Timeout; + UINT16 Timeout; Timeout = PcdGet16 (PcdPlatformBootTimeOut); if (Timeout == 0) { Timeout = 3; } + return Timeout; } diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxe.c b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxe.c index 0182c9235c..f5787cd24d 100644 --- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxe.c +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgDxe.c @@ -23,10 +23,10 @@ #include "QemuFwCfgLibInternal.h" -STATIC BOOLEAN mQemuFwCfgSupported = FALSE; -STATIC BOOLEAN mQemuFwCfgDmaSupported; +STATIC BOOLEAN mQemuFwCfgSupported = FALSE; +STATIC BOOLEAN mQemuFwCfgDmaSupported; -STATIC EDKII_IOMMU_PROTOCOL *mIoMmuProtocol; +STATIC EDKII_IOMMU_PROTOCOL *mIoMmuProtocol; /** Returns a boolean indicating if the firmware configuration interface @@ -47,21 +47,20 @@ QemuFwCfgIsAvailable ( return InternalQemuFwCfgIsAvailable (); } - RETURN_STATUS EFIAPI QemuFwCfgInitialize ( VOID ) { - UINT32 Signature; - UINT32 Revision; + UINT32 Signature; + UINT32 Revision; // // Enable the access routines while probing to see if it is supported. // For probing we always use the IO Port (IoReadFifo8()) access method. // - mQemuFwCfgSupported = TRUE; + mQemuFwCfgSupported = TRUE; mQemuFwCfgDmaSupported = FALSE; QemuFwCfgSelectItem (QemuFwCfgItemSignature); @@ -72,7 +71,8 @@ QemuFwCfgInitialize ( DEBUG ((DEBUG_INFO, "FW CFG Revision: 0x%x\n", Revision)); if ((Signature != SIGNATURE_32 ('Q', 'E', 'M', 'U')) || (Revision < 1) - ) { + ) + { DEBUG ((DEBUG_INFO, "QemuFwCfg interface not supported.\n")); mQemuFwCfgSupported = FALSE; return RETURN_SUCCESS; @@ -86,18 +86,24 @@ QemuFwCfgInitialize ( } if (mQemuFwCfgDmaSupported && MemEncryptSevIsEnabled ()) { - EFI_STATUS Status; + EFI_STATUS Status; // // IoMmuDxe driver must have installed the IOMMU protocol. If we are not // able to locate the protocol then something must have gone wrong. // - Status = gBS->LocateProtocol (&gEdkiiIoMmuProtocolGuid, NULL, - (VOID **)&mIoMmuProtocol); + Status = gBS->LocateProtocol ( + &gEdkiiIoMmuProtocolGuid, + NULL, + (VOID **)&mIoMmuProtocol + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, + DEBUG (( + DEBUG_ERROR, "QemuFwCfgSevDma %a:%a Failed to locate IOMMU protocol.\n", - gEfiCallerBaseName, __FUNCTION__)); + gEfiCallerBaseName, + __FUNCTION__ + )); ASSERT (FALSE); CpuDeadLoop (); } @@ -106,7 +112,6 @@ QemuFwCfgInitialize ( return RETURN_SUCCESS; } - /** Returns a boolean indicating if the firmware configuration interface is available for library-internal purposes. @@ -148,8 +153,8 @@ InternalQemuFwCfgDmaIsAvailable ( STATIC VOID AllocFwCfgDmaAccessBuffer ( - OUT VOID **Access, - OUT VOID **MapInfo + OUT VOID **Access, + OUT VOID **MapInfo ) { UINTN Size; @@ -159,7 +164,7 @@ AllocFwCfgDmaAccessBuffer ( EFI_PHYSICAL_ADDRESS DmaAddress; VOID *Mapping; - Size = sizeof (FW_CFG_DMA_ACCESS); + Size = sizeof (FW_CFG_DMA_ACCESS); NumPages = EFI_SIZE_TO_PAGES (Size); // @@ -176,9 +181,12 @@ AllocFwCfgDmaAccessBuffer ( EDKII_IOMMU_ATTRIBUTE_DUAL_ADDRESS_CYCLE ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, - "%a:%a failed to allocate FW_CFG_DMA_ACCESS\n", gEfiCallerBaseName, - __FUNCTION__)); + DEBUG (( + DEBUG_ERROR, + "%a:%a failed to allocate FW_CFG_DMA_ACCESS\n", + gEfiCallerBaseName, + __FUNCTION__ + )); ASSERT (FALSE); CpuDeadLoop (); } @@ -202,9 +210,12 @@ AllocFwCfgDmaAccessBuffer ( ); if (EFI_ERROR (Status)) { mIoMmuProtocol->FreeBuffer (mIoMmuProtocol, NumPages, HostAddress); - DEBUG ((DEBUG_ERROR, - "%a:%a failed to Map() FW_CFG_DMA_ACCESS\n", gEfiCallerBaseName, - __FUNCTION__)); + DEBUG (( + DEBUG_ERROR, + "%a:%a failed to Map() FW_CFG_DMA_ACCESS\n", + gEfiCallerBaseName, + __FUNCTION__ + )); ASSERT (FALSE); CpuDeadLoop (); } @@ -212,14 +223,19 @@ AllocFwCfgDmaAccessBuffer ( if (Size < sizeof (FW_CFG_DMA_ACCESS)) { mIoMmuProtocol->Unmap (mIoMmuProtocol, Mapping); mIoMmuProtocol->FreeBuffer (mIoMmuProtocol, NumPages, HostAddress); - DEBUG ((DEBUG_ERROR, - "%a:%a failed to Map() - requested 0x%Lx got 0x%Lx\n", gEfiCallerBaseName, - __FUNCTION__, (UINT64)sizeof (FW_CFG_DMA_ACCESS), (UINT64)Size)); + DEBUG (( + DEBUG_ERROR, + "%a:%a failed to Map() - requested 0x%Lx got 0x%Lx\n", + gEfiCallerBaseName, + __FUNCTION__, + (UINT64)sizeof (FW_CFG_DMA_ACCESS), + (UINT64)Size + )); ASSERT (FALSE); CpuDeadLoop (); } - *Access = HostAddress; + *Access = HostAddress; *MapInfo = Mapping; } @@ -231,8 +247,8 @@ AllocFwCfgDmaAccessBuffer ( STATIC VOID FreeFwCfgDmaAccessBuffer ( - IN VOID *Access, - IN VOID *Mapping + IN VOID *Access, + IN VOID *Mapping ) { UINTN NumPages; @@ -242,18 +258,26 @@ FreeFwCfgDmaAccessBuffer ( Status = mIoMmuProtocol->Unmap (mIoMmuProtocol, Mapping); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, - "%a:%a failed to UnMap() Mapping 0x%Lx\n", gEfiCallerBaseName, - __FUNCTION__, (UINT64)(UINTN)Mapping)); + DEBUG (( + DEBUG_ERROR, + "%a:%a failed to UnMap() Mapping 0x%Lx\n", + gEfiCallerBaseName, + __FUNCTION__, + (UINT64)(UINTN)Mapping + )); ASSERT (FALSE); CpuDeadLoop (); } Status = mIoMmuProtocol->FreeBuffer (mIoMmuProtocol, NumPages, Access); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, - "%a:%a failed to Free() 0x%Lx\n", gEfiCallerBaseName, __FUNCTION__, - (UINT64)(UINTN)Access)); + DEBUG (( + DEBUG_ERROR, + "%a:%a failed to Free() 0x%Lx\n", + gEfiCallerBaseName, + __FUNCTION__, + (UINT64)(UINTN)Access + )); ASSERT (FALSE); CpuDeadLoop (); } @@ -274,41 +298,51 @@ MapFwCfgDmaDataBuffer ( OUT VOID **MapInfo ) { - EFI_STATUS Status; - UINTN NumberOfBytes; - VOID *Mapping; - EFI_PHYSICAL_ADDRESS PhysicalAddress; + EFI_STATUS Status; + UINTN NumberOfBytes; + VOID *Mapping; + EFI_PHYSICAL_ADDRESS PhysicalAddress; NumberOfBytes = Size; - Status = mIoMmuProtocol->Map ( - mIoMmuProtocol, - (IsWrite ? - EdkiiIoMmuOperationBusMasterRead64 : - EdkiiIoMmuOperationBusMasterWrite64), - HostAddress, - &NumberOfBytes, - &PhysicalAddress, - &Mapping - ); + Status = mIoMmuProtocol->Map ( + mIoMmuProtocol, + (IsWrite ? + EdkiiIoMmuOperationBusMasterRead64 : + EdkiiIoMmuOperationBusMasterWrite64), + HostAddress, + &NumberOfBytes, + &PhysicalAddress, + &Mapping + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, - "%a:%a failed to Map() Address 0x%Lx Size 0x%Lx\n", gEfiCallerBaseName, - __FUNCTION__, (UINT64)(UINTN)HostAddress, (UINT64)Size)); + DEBUG (( + DEBUG_ERROR, + "%a:%a failed to Map() Address 0x%Lx Size 0x%Lx\n", + gEfiCallerBaseName, + __FUNCTION__, + (UINT64)(UINTN)HostAddress, + (UINT64)Size + )); ASSERT (FALSE); CpuDeadLoop (); } if (NumberOfBytes < Size) { mIoMmuProtocol->Unmap (mIoMmuProtocol, Mapping); - DEBUG ((DEBUG_ERROR, - "%a:%a failed to Map() - requested 0x%x got 0x%Lx\n", gEfiCallerBaseName, - __FUNCTION__, Size, (UINT64)NumberOfBytes)); + DEBUG (( + DEBUG_ERROR, + "%a:%a failed to Map() - requested 0x%x got 0x%Lx\n", + gEfiCallerBaseName, + __FUNCTION__, + Size, + (UINT64)NumberOfBytes + )); ASSERT (FALSE); CpuDeadLoop (); } *DeviceAddress = PhysicalAddress; - *MapInfo = Mapping; + *MapInfo = Mapping; } STATIC @@ -321,9 +355,13 @@ UnmapFwCfgDmaDataBuffer ( Status = mIoMmuProtocol->Unmap (mIoMmuProtocol, Mapping); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, - "%a:%a failed to UnMap() Mapping 0x%Lx\n", gEfiCallerBaseName, - __FUNCTION__, (UINT64)(UINTN)Mapping)); + DEBUG (( + DEBUG_ERROR, + "%a:%a failed to UnMap() Mapping 0x%Lx\n", + gEfiCallerBaseName, + __FUNCTION__, + (UINT64)(UINTN)Mapping + )); ASSERT (FALSE); CpuDeadLoop (); } @@ -346,29 +384,31 @@ UnmapFwCfgDmaDataBuffer ( **/ VOID InternalQemuFwCfgDmaBytes ( - IN UINT32 Size, - IN OUT VOID *Buffer OPTIONAL, - IN UINT32 Control + IN UINT32 Size, + IN OUT VOID *Buffer OPTIONAL, + IN UINT32 Control ) { - volatile FW_CFG_DMA_ACCESS LocalAccess; - volatile FW_CFG_DMA_ACCESS *Access; - UINT32 AccessHigh, AccessLow; - UINT32 Status; - VOID *AccessMapping, *DataMapping; - VOID *DataBuffer; - - ASSERT (Control == FW_CFG_DMA_CTL_WRITE || Control == FW_CFG_DMA_CTL_READ || - Control == FW_CFG_DMA_CTL_SKIP); + volatile FW_CFG_DMA_ACCESS LocalAccess; + volatile FW_CFG_DMA_ACCESS *Access; + UINT32 AccessHigh, AccessLow; + UINT32 Status; + VOID *AccessMapping, *DataMapping; + VOID *DataBuffer; + + ASSERT ( + Control == FW_CFG_DMA_CTL_WRITE || Control == FW_CFG_DMA_CTL_READ || + Control == FW_CFG_DMA_CTL_SKIP + ); if (Size == 0) { return; } - Access = &LocalAccess; + Access = &LocalAccess; AccessMapping = NULL; - DataMapping = NULL; - DataBuffer = Buffer; + DataMapping = NULL; + DataBuffer = Buffer; // // When SEV is enabled, map Buffer to DMA address before issuing the DMA @@ -397,7 +437,7 @@ InternalQemuFwCfgDmaBytes ( &DataMapping ); - DataBuffer = (VOID *) (UINTN) DataBufferAddress; + DataBuffer = (VOID *)(UINTN)DataBufferAddress; } } @@ -416,7 +456,7 @@ InternalQemuFwCfgDmaBytes ( // AccessHigh = (UINT32)RShiftU64 ((UINTN)Access, 32); AccessLow = (UINT32)(UINTN)Access; - IoWrite32 (FW_CFG_IO_DMA_ADDRESS, SwapBytes32 (AccessHigh)); + IoWrite32 (FW_CFG_IO_DMA_ADDRESS, SwapBytes32 (AccessHigh)); IoWrite32 (FW_CFG_IO_DMA_ADDRESS + 4, SwapBytes32 (AccessLow)); // diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c index 4ef78b7a8b..8e8f54ba3f 100644 --- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c @@ -19,7 +19,6 @@ #include "QemuFwCfgLibInternal.h" - /** Selects a firmware configuration item for reading. @@ -32,11 +31,11 @@ VOID EFIAPI QemuFwCfgSelectItem ( - IN FIRMWARE_CONFIG_ITEM QemuFwCfgItem + IN FIRMWARE_CONFIG_ITEM QemuFwCfgItem ) { - DEBUG ((DEBUG_INFO, "Select Item: 0x%x\n", (UINT16)(UINTN) QemuFwCfgItem)); - IoWrite16 (FW_CFG_IO_SELECTOR, (UINT16)(UINTN) QemuFwCfgItem); + DEBUG ((DEBUG_INFO, "Select Item: 0x%x\n", (UINT16)(UINTN)QemuFwCfgItem)); + IoWrite16 (FW_CFG_IO_SELECTOR, (UINT16)(UINTN)QemuFwCfgItem); } /** @@ -49,18 +48,18 @@ QemuFwCfgSelectItem ( VOID EFIAPI InternalQemuFwCfgReadBytes ( - IN UINTN Size, - IN VOID *Buffer OPTIONAL + IN UINTN Size, + IN VOID *Buffer OPTIONAL ) { - if (InternalQemuFwCfgDmaIsAvailable () && Size <= MAX_UINT32) { + if (InternalQemuFwCfgDmaIsAvailable () && (Size <= MAX_UINT32)) { InternalQemuFwCfgDmaBytes ((UINT32)Size, Buffer, FW_CFG_DMA_CTL_READ); return; } + IoReadFifo8 (FW_CFG_IO_DATA, Size, Buffer); } - /** Reads firmware configuration bytes into a buffer @@ -75,8 +74,8 @@ InternalQemuFwCfgReadBytes ( VOID EFIAPI QemuFwCfgReadBytes ( - IN UINTN Size, - IN VOID *Buffer + IN UINTN Size, + IN VOID *Buffer ) { if (InternalQemuFwCfgIsAvailable ()) { @@ -100,20 +99,20 @@ QemuFwCfgReadBytes ( VOID EFIAPI QemuFwCfgWriteBytes ( - IN UINTN Size, - IN VOID *Buffer + IN UINTN Size, + IN VOID *Buffer ) { if (InternalQemuFwCfgIsAvailable ()) { - if (InternalQemuFwCfgDmaIsAvailable () && Size <= MAX_UINT32) { + if (InternalQemuFwCfgDmaIsAvailable () && (Size <= MAX_UINT32)) { InternalQemuFwCfgDmaBytes ((UINT32)Size, Buffer, FW_CFG_DMA_CTL_WRITE); return; } + IoWriteFifo8 (FW_CFG_IO_DATA, Size, Buffer); } } - /** Skip bytes in the firmware configuration item. @@ -126,17 +125,17 @@ QemuFwCfgWriteBytes ( VOID EFIAPI QemuFwCfgSkipBytes ( - IN UINTN Size + IN UINTN Size ) { - UINTN ChunkSize; - UINT8 SkipBuffer[256]; + UINTN ChunkSize; + UINT8 SkipBuffer[256]; if (!InternalQemuFwCfgIsAvailable ()) { return; } - if (InternalQemuFwCfgDmaIsAvailable () && Size <= MAX_UINT32) { + if (InternalQemuFwCfgDmaIsAvailable () && (Size <= MAX_UINT32)) { InternalQemuFwCfgDmaBytes ((UINT32)Size, NULL, FW_CFG_DMA_CTL_SKIP); return; } @@ -157,7 +156,6 @@ QemuFwCfgSkipBytes ( } } - /** Reads a UINT8 firmware configuration value @@ -170,14 +168,13 @@ QemuFwCfgRead8 ( VOID ) { - UINT8 Result; + UINT8 Result; QemuFwCfgReadBytes (sizeof (Result), &Result); return Result; } - /** Reads a UINT16 firmware configuration value @@ -190,14 +187,13 @@ QemuFwCfgRead16 ( VOID ) { - UINT16 Result; + UINT16 Result; QemuFwCfgReadBytes (sizeof (Result), &Result); return Result; } - /** Reads a UINT32 firmware configuration value @@ -210,14 +206,13 @@ QemuFwCfgRead32 ( VOID ) { - UINT32 Result; + UINT32 Result; QemuFwCfgReadBytes (sizeof (Result), &Result); return Result; } - /** Reads a UINT64 firmware configuration value @@ -230,14 +225,13 @@ QemuFwCfgRead64 ( VOID ) { - UINT64 Result; + UINT64 Result; QemuFwCfgReadBytes (sizeof (Result), &Result); return Result; } - /** Find the configuration item corresponding to the firmware configuration file. @@ -259,8 +253,8 @@ QemuFwCfgFindFile ( OUT UINTN *Size ) { - UINT32 Count; - UINT32 Idx; + UINT32 Count; + UINT32 Idx; if (!InternalQemuFwCfgIsAvailable ()) { return RETURN_UNSUPPORTED; @@ -270,15 +264,15 @@ QemuFwCfgFindFile ( Count = SwapBytes32 (QemuFwCfgRead32 ()); for (Idx = 0; Idx < Count; ++Idx) { - UINT32 FileSize; - UINT16 FileSelect; - UINT16 FileReserved; - CHAR8 FName[QEMU_FW_CFG_FNAME_SIZE]; + UINT32 FileSize; + UINT16 FileSelect; + UINT16 FileReserved; + CHAR8 FName[QEMU_FW_CFG_FNAME_SIZE]; FileSize = QemuFwCfgRead32 (); FileSelect = QemuFwCfgRead16 (); FileReserved = QemuFwCfgRead16 (); - (VOID) FileReserved; /* Force a do-nothing reference. */ + (VOID)FileReserved; /* Force a do-nothing reference. */ InternalQemuFwCfgReadBytes (sizeof (FName), FName); if (AsciiStrCmp (Name, FName) == 0) { diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibInternal.h b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibInternal.h index 1fa80686e0..0b77cad1c0 100644 --- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibInternal.h +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibInternal.h @@ -25,7 +25,6 @@ InternalQemuFwCfgIsAvailable ( VOID ); - /** Returns a boolean indicating whether QEMU provides the DMA-like access method for fw_cfg. @@ -55,9 +54,9 @@ InternalQemuFwCfgDmaIsAvailable ( **/ VOID InternalQemuFwCfgDmaBytes ( - IN UINT32 Size, - IN OUT VOID *Buffer OPTIONAL, - IN UINT32 Control + IN UINT32 Size, + IN OUT VOID *Buffer OPTIONAL, + IN UINT32 Control ); #endif diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibMmio.c b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibMmio.c index 457eba82fa..583d8a8e9f 100644 --- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibMmio.c +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLibMmio.c @@ -20,9 +20,9 @@ #include -STATIC UINTN mFwCfgSelectorAddress; -STATIC UINTN mFwCfgDataAddress; -STATIC UINTN mFwCfgDmaAddress; +STATIC UINTN mFwCfgSelectorAddress; +STATIC UINTN mFwCfgDataAddress; +STATIC UINTN mFwCfgDmaAddress; /** Reads firmware configuration bytes into a buffer @@ -32,7 +32,7 @@ STATIC UINTN mFwCfgDmaAddress; **/ typedef -VOID (EFIAPI READ_BYTES_FUNCTION) ( +VOID(EFIAPI READ_BYTES_FUNCTION)( IN UINTN Size, IN VOID *Buffer OPTIONAL ); @@ -45,7 +45,7 @@ VOID (EFIAPI READ_BYTES_FUNCTION) ( **/ typedef -VOID (EFIAPI WRITE_BYTES_FUNCTION) ( +VOID(EFIAPI WRITE_BYTES_FUNCTION)( IN UINTN Size, IN VOID *Buffer OPTIONAL ); @@ -57,27 +57,26 @@ VOID (EFIAPI WRITE_BYTES_FUNCTION) ( **/ typedef -VOID (EFIAPI SKIP_BYTES_FUNCTION) ( +VOID(EFIAPI SKIP_BYTES_FUNCTION)( IN UINTN Size ); // // Forward declaration of the two implementations we have. // -STATIC READ_BYTES_FUNCTION MmioReadBytes; -STATIC WRITE_BYTES_FUNCTION MmioWriteBytes; -STATIC SKIP_BYTES_FUNCTION MmioSkipBytes; -STATIC READ_BYTES_FUNCTION DmaReadBytes; -STATIC WRITE_BYTES_FUNCTION DmaWriteBytes; -STATIC SKIP_BYTES_FUNCTION DmaSkipBytes; +STATIC READ_BYTES_FUNCTION MmioReadBytes; +STATIC WRITE_BYTES_FUNCTION MmioWriteBytes; +STATIC SKIP_BYTES_FUNCTION MmioSkipBytes; +STATIC READ_BYTES_FUNCTION DmaReadBytes; +STATIC WRITE_BYTES_FUNCTION DmaWriteBytes; +STATIC SKIP_BYTES_FUNCTION DmaSkipBytes; // // These correspond to the implementation we detect at runtime. // -STATIC READ_BYTES_FUNCTION *InternalQemuFwCfgReadBytes = MmioReadBytes; -STATIC WRITE_BYTES_FUNCTION *InternalQemuFwCfgWriteBytes = MmioWriteBytes; -STATIC SKIP_BYTES_FUNCTION *InternalQemuFwCfgSkipBytes = MmioSkipBytes; - +STATIC READ_BYTES_FUNCTION *InternalQemuFwCfgReadBytes = MmioReadBytes; +STATIC WRITE_BYTES_FUNCTION *InternalQemuFwCfgWriteBytes = MmioWriteBytes; +STATIC SKIP_BYTES_FUNCTION *InternalQemuFwCfgSkipBytes = MmioSkipBytes; /** Returns a boolean indicating if the firmware configuration interface @@ -98,36 +97,46 @@ QemuFwCfgIsAvailable ( return (BOOLEAN)(mFwCfgSelectorAddress != 0 && mFwCfgDataAddress != 0); } - RETURN_STATUS EFIAPI QemuFwCfgInitialize ( VOID ) { - EFI_STATUS Status; - FDT_CLIENT_PROTOCOL *FdtClient; - CONST UINT64 *Reg; - UINT32 RegSize; - UINTN AddressCells, SizeCells; - UINT64 FwCfgSelectorAddress; - UINT64 FwCfgSelectorSize; - UINT64 FwCfgDataAddress; - UINT64 FwCfgDataSize; - UINT64 FwCfgDmaAddress; - UINT64 FwCfgDmaSize; - - Status = gBS->LocateProtocol (&gFdtClientProtocolGuid, NULL, - (VOID **)&FdtClient); + EFI_STATUS Status; + FDT_CLIENT_PROTOCOL *FdtClient; + CONST UINT64 *Reg; + UINT32 RegSize; + UINTN AddressCells, SizeCells; + UINT64 FwCfgSelectorAddress; + UINT64 FwCfgSelectorSize; + UINT64 FwCfgDataAddress; + UINT64 FwCfgDataSize; + UINT64 FwCfgDmaAddress; + UINT64 FwCfgDmaSize; + + Status = gBS->LocateProtocol ( + &gFdtClientProtocolGuid, + NULL, + (VOID **)&FdtClient + ); ASSERT_EFI_ERROR (Status); - Status = FdtClient->FindCompatibleNodeReg (FdtClient, "qemu,fw-cfg-mmio", - (CONST VOID **)&Reg, &AddressCells, &SizeCells, - &RegSize); + Status = FdtClient->FindCompatibleNodeReg ( + FdtClient, + "qemu,fw-cfg-mmio", + (CONST VOID **)&Reg, + &AddressCells, + &SizeCells, + &RegSize + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, + DEBUG (( + DEBUG_WARN, "%a: No 'qemu,fw-cfg-mmio' compatible DT node found (Status == %r)\n", - __FUNCTION__, Status)); + __FUNCTION__, + Status + )); return EFI_SUCCESS; } @@ -156,8 +165,12 @@ QemuFwCfgInitialize ( mFwCfgSelectorAddress = FwCfgSelectorAddress; mFwCfgDataAddress = FwCfgDataAddress; - DEBUG ((DEBUG_INFO, "Found FwCfg @ 0x%Lx/0x%Lx\n", FwCfgSelectorAddress, - FwCfgDataAddress)); + DEBUG (( + DEBUG_INFO, + "Found FwCfg @ 0x%Lx/0x%Lx\n", + FwCfgSelectorAddress, + FwCfgDataAddress + )); if (SwapBytes64 (Reg[1]) >= 0x18) { FwCfgDmaAddress = FwCfgDataAddress + 0x10; @@ -174,7 +187,7 @@ QemuFwCfgInitialize ( } if (QemuFwCfgIsAvailable ()) { - UINT32 Signature; + UINT32 Signature; QemuFwCfgSelectItem (QemuFwCfgItemSignature); Signature = QemuFwCfgRead32 (); @@ -184,15 +197,15 @@ QemuFwCfgInitialize ( // feature bitmap (which we read without DMA) to confirm the feature. // if (FwCfgDmaAddress != 0) { - UINT32 Features; + UINT32 Features; QemuFwCfgSelectItem (QemuFwCfgItemInterfaceVersion); Features = QemuFwCfgRead32 (); if ((Features & FW_CFG_F_DMA) != 0) { - mFwCfgDmaAddress = FwCfgDmaAddress; - InternalQemuFwCfgReadBytes = DmaReadBytes; + mFwCfgDmaAddress = FwCfgDmaAddress; + InternalQemuFwCfgReadBytes = DmaReadBytes; InternalQemuFwCfgWriteBytes = DmaWriteBytes; - InternalQemuFwCfgSkipBytes = DmaSkipBytes; + InternalQemuFwCfgSkipBytes = DmaSkipBytes; } } } else { @@ -200,10 +213,10 @@ QemuFwCfgInitialize ( mFwCfgDataAddress = 0; } } + return RETURN_SUCCESS; } - /** Selects a firmware configuration item for reading. @@ -216,7 +229,7 @@ QemuFwCfgInitialize ( VOID EFIAPI QemuFwCfgSelectItem ( - IN FIRMWARE_CONFIG_ITEM QemuFwCfgItem + IN FIRMWARE_CONFIG_ITEM QemuFwCfgItem ) { if (QemuFwCfgIsAvailable ()) { @@ -224,7 +237,6 @@ QemuFwCfgSelectItem ( } } - /** Slow READ_BYTES_FUNCTION. **/ @@ -232,50 +244,53 @@ STATIC VOID EFIAPI MmioReadBytes ( - IN UINTN Size, - IN VOID *Buffer OPTIONAL + IN UINTN Size, + IN VOID *Buffer OPTIONAL ) { - UINTN Left; - UINT8 *Ptr; - UINT8 *End; + UINTN Left; + UINT8 *Ptr; + UINT8 *End; -#if defined(MDE_CPU_AARCH64) || defined(MDE_CPU_RISCV64) + #if defined (MDE_CPU_AARCH64) || defined (MDE_CPU_RISCV64) Left = Size & 7; -#else + #else Left = Size & 3; -#endif + #endif Size -= Left; - Ptr = Buffer; - End = Ptr + Size; + Ptr = Buffer; + End = Ptr + Size; -#if defined(MDE_CPU_AARCH64) || defined(MDE_CPU_RISCV64) + #if defined (MDE_CPU_AARCH64) || defined (MDE_CPU_RISCV64) while (Ptr < End) { *(UINT64 *)Ptr = MmioRead64 (mFwCfgDataAddress); - Ptr += 8; + Ptr += 8; } + if (Left & 4) { *(UINT32 *)Ptr = MmioRead32 (mFwCfgDataAddress); - Ptr += 4; + Ptr += 4; } -#else + + #else while (Ptr < End) { *(UINT32 *)Ptr = MmioRead32 (mFwCfgDataAddress); - Ptr += 4; + Ptr += 4; } -#endif + + #endif if (Left & 2) { *(UINT16 *)Ptr = MmioRead16 (mFwCfgDataAddress); - Ptr += 2; + Ptr += 2; } + if (Left & 1) { *Ptr = MmioRead8 (mFwCfgDataAddress); } } - /** Transfer an array of bytes, or skip a number of bytes, using the DMA interface. @@ -294,16 +309,18 @@ MmioReadBytes ( STATIC VOID DmaTransferBytes ( - IN UINTN Size, - IN OUT VOID *Buffer OPTIONAL, - IN UINT32 Control + IN UINTN Size, + IN OUT VOID *Buffer OPTIONAL, + IN UINT32 Control ) { - volatile FW_CFG_DMA_ACCESS Access; - UINT32 Status; + volatile FW_CFG_DMA_ACCESS Access; + UINT32 Status; - ASSERT (Control == FW_CFG_DMA_CTL_WRITE || Control == FW_CFG_DMA_CTL_READ || - Control == FW_CFG_DMA_CTL_SKIP); + ASSERT ( + Control == FW_CFG_DMA_CTL_WRITE || Control == FW_CFG_DMA_CTL_READ || + Control == FW_CFG_DMA_CTL_SKIP + ); if (Size == 0) { return; @@ -323,11 +340,11 @@ DmaTransferBytes ( // // This will fire off the transfer. // -#if defined(MDE_CPU_AARCH64) || defined(MDE_CPU_RISCV64) + #if defined (MDE_CPU_AARCH64) || defined (MDE_CPU_RISCV64) MmioWrite64 (mFwCfgDmaAddress, SwapBytes64 ((UINT64)&Access)); -#else + #else MmioWrite32 ((UINT32)(mFwCfgDmaAddress + 4), SwapBytes32 ((UINT32)&Access)); -#endif + #endif // // We shouldn't look at Access.Control before starting the transfer. @@ -345,7 +362,6 @@ DmaTransferBytes ( MemoryFence (); } - /** Fast READ_BYTES_FUNCTION. **/ @@ -353,14 +369,13 @@ STATIC VOID EFIAPI DmaReadBytes ( - IN UINTN Size, - IN VOID *Buffer OPTIONAL + IN UINTN Size, + IN VOID *Buffer OPTIONAL ) { DmaTransferBytes (Size, Buffer, FW_CFG_DMA_CTL_READ); } - /** Reads firmware configuration bytes into a buffer @@ -374,8 +389,8 @@ DmaReadBytes ( VOID EFIAPI QemuFwCfgReadBytes ( - IN UINTN Size, - IN VOID *Buffer + IN UINTN Size, + IN VOID *Buffer ) { if (QemuFwCfgIsAvailable ()) { @@ -385,7 +400,6 @@ QemuFwCfgReadBytes ( } } - /** Slow WRITE_BYTES_FUNCTION. **/ @@ -393,18 +407,17 @@ STATIC VOID EFIAPI MmioWriteBytes ( - IN UINTN Size, - IN VOID *Buffer OPTIONAL + IN UINTN Size, + IN VOID *Buffer OPTIONAL ) { - UINTN Idx; + UINTN Idx; for (Idx = 0; Idx < Size; ++Idx) { MmioWrite8 (mFwCfgDataAddress, ((UINT8 *)Buffer)[Idx]); } } - /** Fast WRITE_BYTES_FUNCTION. **/ @@ -412,14 +425,13 @@ STATIC VOID EFIAPI DmaWriteBytes ( - IN UINTN Size, - IN VOID *Buffer OPTIONAL + IN UINTN Size, + IN VOID *Buffer OPTIONAL ) { DmaTransferBytes (Size, Buffer, FW_CFG_DMA_CTL_WRITE); } - /** Write firmware configuration bytes from a buffer @@ -433,8 +445,8 @@ DmaWriteBytes ( VOID EFIAPI QemuFwCfgWriteBytes ( - IN UINTN Size, - IN VOID *Buffer + IN UINTN Size, + IN VOID *Buffer ) { if (QemuFwCfgIsAvailable ()) { @@ -442,7 +454,6 @@ QemuFwCfgWriteBytes ( } } - /** Slow SKIP_BYTES_FUNCTION. **/ @@ -450,11 +461,11 @@ STATIC VOID EFIAPI MmioSkipBytes ( - IN UINTN Size + IN UINTN Size ) { - UINTN ChunkSize; - UINT8 SkipBuffer[256]; + UINTN ChunkSize; + UINT8 SkipBuffer[256]; // // Emulate the skip by reading data in chunks, and throwing it away. The @@ -470,7 +481,6 @@ MmioSkipBytes ( } } - /** Fast SKIP_BYTES_FUNCTION. **/ @@ -478,13 +488,12 @@ STATIC VOID EFIAPI DmaSkipBytes ( - IN UINTN Size + IN UINTN Size ) { DmaTransferBytes (Size, NULL, FW_CFG_DMA_CTL_SKIP); } - /** Skip bytes in the firmware configuration item. @@ -497,7 +506,7 @@ DmaSkipBytes ( VOID EFIAPI QemuFwCfgSkipBytes ( - IN UINTN Size + IN UINTN Size ) { if (QemuFwCfgIsAvailable ()) { @@ -505,7 +514,6 @@ QemuFwCfgSkipBytes ( } } - /** Reads a UINT8 firmware configuration value @@ -518,13 +526,12 @@ QemuFwCfgRead8 ( VOID ) { - UINT8 Result; + UINT8 Result; QemuFwCfgReadBytes (sizeof Result, &Result); return Result; } - /** Reads a UINT16 firmware configuration value @@ -537,13 +544,12 @@ QemuFwCfgRead16 ( VOID ) { - UINT16 Result; + UINT16 Result; QemuFwCfgReadBytes (sizeof Result, &Result); return Result; } - /** Reads a UINT32 firmware configuration value @@ -556,13 +562,12 @@ QemuFwCfgRead32 ( VOID ) { - UINT32 Result; + UINT32 Result; QemuFwCfgReadBytes (sizeof Result, &Result); return Result; } - /** Reads a UINT64 firmware configuration value @@ -575,13 +580,12 @@ QemuFwCfgRead64 ( VOID ) { - UINT64 Result; + UINT64 Result; QemuFwCfgReadBytes (sizeof Result, &Result); return Result; } - /** Find the configuration item corresponding to the firmware configuration file. @@ -603,8 +607,8 @@ QemuFwCfgFindFile ( OUT UINTN *Size ) { - UINT32 Count; - UINT32 Idx; + UINT32 Count; + UINT32 Idx; if (!QemuFwCfgIsAvailable ()) { return RETURN_UNSUPPORTED; @@ -614,9 +618,9 @@ QemuFwCfgFindFile ( Count = SwapBytes32 (QemuFwCfgRead32 ()); for (Idx = 0; Idx < Count; ++Idx) { - UINT32 FileSize; - UINT16 FileSelect; - CHAR8 FName[QEMU_FW_CFG_FNAME_SIZE]; + UINT32 FileSize; + UINT16 FileSelect; + CHAR8 FName[QEMU_FW_CFG_FNAME_SIZE]; FileSize = QemuFwCfgRead32 (); FileSelect = QemuFwCfgRead16 (); @@ -624,7 +628,7 @@ QemuFwCfgFindFile ( InternalQemuFwCfgReadBytes (sizeof (FName), FName); if (AsciiStrCmp (Name, FName) == 0) { - *Item = (FIRMWARE_CONFIG_ITEM) SwapBytes16 (FileSelect); + *Item = (FIRMWARE_CONFIG_ITEM)SwapBytes16 (FileSelect); *Size = SwapBytes32 (FileSize); return RETURN_SUCCESS; } diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgNull.c b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgNull.c index edd97db49d..6a85ed65a0 100644 --- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgNull.c +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgNull.c @@ -32,7 +32,6 @@ QemuFwCfgIsAvailable ( return FALSE; } - /** Selects a firmware configuration item for reading. @@ -45,13 +44,12 @@ QemuFwCfgIsAvailable ( VOID EFIAPI QemuFwCfgSelectItem ( - IN FIRMWARE_CONFIG_ITEM QemuFwCfgItem + IN FIRMWARE_CONFIG_ITEM QemuFwCfgItem ) { ASSERT (FALSE); } - /** Reads firmware configuration bytes into a buffer @@ -66,14 +64,13 @@ QemuFwCfgSelectItem ( VOID EFIAPI QemuFwCfgReadBytes ( - IN UINTN Size, - IN VOID *Buffer OPTIONAL + IN UINTN Size, + IN VOID *Buffer OPTIONAL ) { ASSERT (FALSE); } - /** Writes firmware configuration bytes from a buffer @@ -88,14 +85,13 @@ QemuFwCfgReadBytes ( VOID EFIAPI QemuFwCfgWriteBytes ( - IN UINTN Size, - IN VOID *Buffer + IN UINTN Size, + IN VOID *Buffer ) { ASSERT (FALSE); } - /** Skip bytes in the firmware configuration item. @@ -108,13 +104,12 @@ QemuFwCfgWriteBytes ( VOID EFIAPI QemuFwCfgSkipBytes ( - IN UINTN Size + IN UINTN Size ) { ASSERT (FALSE); } - /** Reads a UINT8 firmware configuration value @@ -131,7 +126,6 @@ QemuFwCfgRead8 ( return 0; } - /** Reads a UINT16 firmware configuration value @@ -148,7 +142,6 @@ QemuFwCfgRead16 ( return 0; } - /** Reads a UINT32 firmware configuration value @@ -165,7 +158,6 @@ QemuFwCfgRead32 ( return 0; } - /** Reads a UINT64 firmware configuration value @@ -182,7 +174,6 @@ QemuFwCfgRead64 ( return 0; } - /** Find the configuration item corresponding to the firmware configuration file. @@ -206,4 +197,3 @@ QemuFwCfgFindFile ( { return RETURN_UNSUPPORTED; } - diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c index ecabd88fab..f696fb7cac 100644 --- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c @@ -17,9 +17,8 @@ #include "QemuFwCfgLibInternal.h" -STATIC BOOLEAN mQemuFwCfgSupported = FALSE; -STATIC BOOLEAN mQemuFwCfgDmaSupported; - +STATIC BOOLEAN mQemuFwCfgSupported = FALSE; +STATIC BOOLEAN mQemuFwCfgDmaSupported; /** Returns a boolean indicating if the firmware configuration interface @@ -40,21 +39,20 @@ QemuFwCfgIsAvailable ( return InternalQemuFwCfgIsAvailable (); } - RETURN_STATUS EFIAPI QemuFwCfgInitialize ( VOID ) { - UINT32 Signature; - UINT32 Revision; + UINT32 Signature; + UINT32 Revision; // // Enable the access routines while probing to see if it is supported. // For probing we always use the IO Port (IoReadFifo8()) access method. // - mQemuFwCfgSupported = TRUE; + mQemuFwCfgSupported = TRUE; mQemuFwCfgDmaSupported = FALSE; QemuFwCfgSelectItem (QemuFwCfgItemSignature); @@ -65,7 +63,8 @@ QemuFwCfgInitialize ( DEBUG ((DEBUG_INFO, "FW CFG Revision: 0x%x\n", Revision)); if ((Signature != SIGNATURE_32 ('Q', 'E', 'M', 'U')) || (Revision < 1) - ) { + ) + { DEBUG ((DEBUG_INFO, "QemuFwCfg interface not supported.\n")); mQemuFwCfgSupported = FALSE; return RETURN_SUCCESS; @@ -87,10 +86,10 @@ QemuFwCfgInitialize ( DEBUG ((DEBUG_INFO, "QemuFwCfg interface (DMA) is supported.\n")); } } + return RETURN_SUCCESS; } - /** Returns a boolean indicating if the firmware configuration interface is available for library-internal purposes. @@ -140,17 +139,19 @@ InternalQemuFwCfgDmaIsAvailable ( **/ VOID InternalQemuFwCfgDmaBytes ( - IN UINT32 Size, - IN OUT VOID *Buffer OPTIONAL, - IN UINT32 Control + IN UINT32 Size, + IN OUT VOID *Buffer OPTIONAL, + IN UINT32 Control ) { - volatile FW_CFG_DMA_ACCESS Access; - UINT32 AccessHigh, AccessLow; - UINT32 Status; + volatile FW_CFG_DMA_ACCESS Access; + UINT32 AccessHigh, AccessLow; + UINT32 Status; - ASSERT (Control == FW_CFG_DMA_CTL_WRITE || Control == FW_CFG_DMA_CTL_READ || - Control == FW_CFG_DMA_CTL_SKIP); + ASSERT ( + Control == FW_CFG_DMA_CTL_WRITE || Control == FW_CFG_DMA_CTL_READ || + Control == FW_CFG_DMA_CTL_SKIP + ); if (Size == 0) { return; @@ -177,7 +178,7 @@ InternalQemuFwCfgDmaBytes ( // AccessHigh = (UINT32)RShiftU64 ((UINTN)&Access, 32); AccessLow = (UINT32)(UINTN)&Access; - IoWrite32 (FW_CFG_IO_DMA_ADDRESS, SwapBytes32 (AccessHigh)); + IoWrite32 (FW_CFG_IO_DMA_ADDRESS, SwapBytes32 (AccessHigh)); IoWrite32 (FW_CFG_IO_DMA_ADDRESS + 4, SwapBytes32 (AccessLow)); // @@ -198,4 +199,3 @@ InternalQemuFwCfgDmaBytes ( // MemoryFence (); } - diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgSec.c b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgSec.c index 94e8e92180..63cfee9347 100644 --- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgSec.c +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgSec.c @@ -33,8 +33,8 @@ QemuFwCfgIsAvailable ( VOID ) { - UINT32 Signature; - UINT32 Revision; + UINT32 Signature; + UINT32 Revision; QemuFwCfgSelectItem (QemuFwCfgItemSignature); Signature = QemuFwCfgRead32 (); @@ -44,7 +44,8 @@ QemuFwCfgIsAvailable ( DEBUG ((DEBUG_INFO, "FW CFG Revision: 0x%x\n", Revision)); if ((Signature != SIGNATURE_32 ('Q', 'E', 'M', 'U')) || (Revision < 1) - ) { + ) + { DEBUG ((DEBUG_INFO, "QemuFwCfg interface not supported.\n")); return FALSE; } @@ -53,7 +54,6 @@ QemuFwCfgIsAvailable ( return TRUE; } - /** Returns a boolean indicating if the firmware configuration interface is available for library-internal purposes. @@ -108,9 +108,9 @@ InternalQemuFwCfgDmaIsAvailable ( **/ VOID InternalQemuFwCfgDmaBytes ( - IN UINT32 Size, - IN OUT VOID *Buffer OPTIONAL, - IN UINT32 Control + IN UINT32 Size, + IN OUT VOID *Buffer OPTIONAL, + IN UINT32 Control ) { // diff --git a/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3Base.c b/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3Base.c index aad359d83d..b0356a2e25 100644 --- a/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3Base.c +++ b/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3Base.c @@ -33,7 +33,6 @@ QemuFwCfgS3Enabled ( return FALSE; } - /** Install the client module's FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION callback for when the production of ACPI S3 Boot Script opcodes becomes possible. @@ -91,13 +90,12 @@ QemuFwCfgS3Enabled ( @return Error codes from underlying functions. **/ - RETURN_STATUS EFIAPI QemuFwCfgS3CallWhenBootScriptReady ( - IN FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION *Callback, - IN OUT VOID *Context OPTIONAL, - IN UINTN ScratchBufferSize + IN FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION *Callback, + IN OUT VOID *Context OPTIONAL, + IN UINTN ScratchBufferSize ) { ASSERT (FALSE); diff --git a/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3BasePei.c b/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3BasePei.c index 3ec6209ba4..3c1b28ba2b 100644 --- a/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3BasePei.c +++ b/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3BasePei.c @@ -53,15 +53,14 @@ RETURN_STATUS EFIAPI QemuFwCfgS3ScriptWriteBytes ( - IN INT32 FirmwareConfigItem, - IN UINTN NumberOfBytes + IN INT32 FirmwareConfigItem, + IN UINTN NumberOfBytes ) { ASSERT (FALSE); return RETURN_UNSUPPORTED; } - /** Produce ACPI S3 Boot Script opcodes that (optionally) select an fw_cfg item, and transfer data from it. @@ -104,15 +103,14 @@ QemuFwCfgS3ScriptWriteBytes ( RETURN_STATUS EFIAPI QemuFwCfgS3ScriptReadBytes ( - IN INT32 FirmwareConfigItem, - IN UINTN NumberOfBytes + IN INT32 FirmwareConfigItem, + IN UINTN NumberOfBytes ) { ASSERT (FALSE); return RETURN_UNSUPPORTED; } - /** Produce ACPI S3 Boot Script opcodes that (optionally) select an fw_cfg item, and increase its offset. @@ -148,15 +146,14 @@ QemuFwCfgS3ScriptReadBytes ( RETURN_STATUS EFIAPI QemuFwCfgS3ScriptSkipBytes ( - IN INT32 FirmwareConfigItem, - IN UINTN NumberOfBytes + IN INT32 FirmwareConfigItem, + IN UINTN NumberOfBytes ) { ASSERT (FALSE); return RETURN_UNSUPPORTED; } - /** Produce ACPI S3 Boot Script opcodes that check a value in ScratchBuffer. @@ -210,10 +207,10 @@ QemuFwCfgS3ScriptSkipBytes ( RETURN_STATUS EFIAPI QemuFwCfgS3ScriptCheckValue ( - IN VOID *ScratchData, - IN UINT8 ValueSize, - IN UINT64 ValueMask, - IN UINT64 Value + IN VOID *ScratchData, + IN UINT8 ValueSize, + IN UINT64 ValueMask, + IN UINT64 Value ) { ASSERT (FALSE); diff --git a/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3Dxe.c b/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3Dxe.c index 4dcf4b1298..5706fa9be4 100644 --- a/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3Dxe.c +++ b/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3Dxe.c @@ -14,34 +14,32 @@ #include #include - // // Event to signal when the S3SaveState protocol interface is installed. // -STATIC EFI_EVENT mS3SaveStateInstalledEvent; +STATIC EFI_EVENT mS3SaveStateInstalledEvent; // // Reference to the S3SaveState protocol interface, after it is installed. // -STATIC EFI_S3_SAVE_STATE_PROTOCOL *mS3SaveState; +STATIC EFI_S3_SAVE_STATE_PROTOCOL *mS3SaveState; // // The control structure is allocated in reserved memory, aligned at 8 bytes. // The client-requested ScratchBuffer will be allocated adjacently, also // aligned at 8 bytes. // -#define RESERVED_MEM_ALIGNMENT 8 +#define RESERVED_MEM_ALIGNMENT 8 -STATIC FW_CFG_DMA_ACCESS *mDmaAccess; -STATIC VOID *mScratchBuffer; -STATIC UINTN mScratchBufferSize; +STATIC FW_CFG_DMA_ACCESS *mDmaAccess; +STATIC VOID *mScratchBuffer; +STATIC UINTN mScratchBufferSize; // // Callback provided by the client, for appending ACPI S3 Boot Script opcodes. // To be called from S3SaveStateInstalledNotify(). // -STATIC FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION *mCallback; - +STATIC FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION *mCallback; /** Event notification function for mS3SaveStateInstalledEvent. @@ -50,32 +48,40 @@ STATIC VOID EFIAPI S3SaveStateInstalledNotify ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - EFI_STATUS Status; + EFI_STATUS Status; ASSERT (Event == mS3SaveStateInstalledEvent); - Status = gBS->LocateProtocol (&gEfiS3SaveStateProtocolGuid, - NULL /* Registration */, (VOID **)&mS3SaveState); + Status = gBS->LocateProtocol ( + &gEfiS3SaveStateProtocolGuid, + NULL /* Registration */, + (VOID **)&mS3SaveState + ); if (EFI_ERROR (Status)) { return; } ASSERT (mCallback != NULL); - DEBUG ((DEBUG_INFO, "%a: %a: DmaAccess@0x%Lx ScratchBuffer@[0x%Lx+0x%Lx]\n", - gEfiCallerBaseName, __FUNCTION__, (UINT64)(UINTN)mDmaAccess, - (UINT64)(UINTN)mScratchBuffer, (UINT64)mScratchBufferSize)); + DEBUG (( + DEBUG_INFO, + "%a: %a: DmaAccess@0x%Lx ScratchBuffer@[0x%Lx+0x%Lx]\n", + gEfiCallerBaseName, + __FUNCTION__, + (UINT64)(UINTN)mDmaAccess, + (UINT64)(UINTN)mScratchBuffer, + (UINT64)mScratchBufferSize + )); mCallback (Context, mScratchBuffer); gBS->CloseEvent (mS3SaveStateInstalledEvent); mS3SaveStateInstalledEvent = NULL; } - /** Install the client module's FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION callback for when the production of ACPI S3 Boot Script opcodes becomes possible. @@ -136,13 +142,13 @@ S3SaveStateInstalledNotify ( RETURN_STATUS EFIAPI QemuFwCfgS3CallWhenBootScriptReady ( - IN FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION *Callback, - IN OUT VOID *Context OPTIONAL, - IN UINTN ScratchBufferSize + IN FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION *Callback, + IN OUT VOID *Context OPTIONAL, + IN UINTN ScratchBufferSize ) { - EFI_STATUS Status; - VOID *Registration; + EFI_STATUS Status; + VOID *Registration; // // Basic fw_cfg is certainly available, as we can only be here after a @@ -151,8 +157,12 @@ QemuFwCfgS3CallWhenBootScriptReady ( ASSERT (QemuFwCfgIsAvailable ()); QemuFwCfgSelectItem (QemuFwCfgItemInterfaceVersion); if ((QemuFwCfgRead32 () & FW_CFG_F_DMA) == 0) { - DEBUG ((DEBUG_ERROR, "%a: %a: fw_cfg DMA unavailable\n", - gEfiCallerBaseName, __FUNCTION__)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: fw_cfg DMA unavailable\n", + gEfiCallerBaseName, + __FUNCTION__ + )); return RETURN_NOT_FOUND; } @@ -161,37 +171,69 @@ QemuFwCfgS3CallWhenBootScriptReady ( // client data together. // if (ScratchBufferSize > - MAX_UINT32 - (RESERVED_MEM_ALIGNMENT - 1) - sizeof *mDmaAccess) { - DEBUG ((DEBUG_ERROR, "%a: %a: ScratchBufferSize too big: %Lu\n", - gEfiCallerBaseName, __FUNCTION__, (UINT64)ScratchBufferSize)); + MAX_UINT32 - (RESERVED_MEM_ALIGNMENT - 1) - sizeof *mDmaAccess) + { + DEBUG (( + DEBUG_ERROR, + "%a: %a: ScratchBufferSize too big: %Lu\n", + gEfiCallerBaseName, + __FUNCTION__, + (UINT64)ScratchBufferSize + )); return RETURN_BAD_BUFFER_SIZE; } - mDmaAccess = AllocateReservedPool ((RESERVED_MEM_ALIGNMENT - 1) + - sizeof *mDmaAccess + ScratchBufferSize); + + mDmaAccess = AllocateReservedPool ( + (RESERVED_MEM_ALIGNMENT - 1) + + sizeof *mDmaAccess + ScratchBufferSize + ); if (mDmaAccess == NULL) { - DEBUG ((DEBUG_ERROR, "%a: %a: AllocateReservedPool(): out of resources\n", - gEfiCallerBaseName, __FUNCTION__)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: AllocateReservedPool(): out of resources\n", + gEfiCallerBaseName, + __FUNCTION__ + )); return RETURN_OUT_OF_RESOURCES; } + mDmaAccess = ALIGN_POINTER (mDmaAccess, RESERVED_MEM_ALIGNMENT); // // Set up a protocol notify for EFI_S3_SAVE_STATE_PROTOCOL. Forward the // client's Context to the callback. // - Status = gBS->CreateEvent (EVT_NOTIFY_SIGNAL, TPL_CALLBACK, - S3SaveStateInstalledNotify, Context, - &mS3SaveStateInstalledEvent); + Status = gBS->CreateEvent ( + EVT_NOTIFY_SIGNAL, + TPL_CALLBACK, + S3SaveStateInstalledNotify, + Context, + &mS3SaveStateInstalledEvent + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: %a: CreateEvent(): %r\n", gEfiCallerBaseName, - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: CreateEvent(): %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); goto FreeDmaAccess; } - Status = gBS->RegisterProtocolNotify (&gEfiS3SaveStateProtocolGuid, - mS3SaveStateInstalledEvent, &Registration); + + Status = gBS->RegisterProtocolNotify ( + &gEfiS3SaveStateProtocolGuid, + mS3SaveStateInstalledEvent, + &Registration + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: %a: RegisterProtocolNotify(): %r\n", - gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: RegisterProtocolNotify(): %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); goto CloseEvent; } @@ -201,26 +243,31 @@ QemuFwCfgS3CallWhenBootScriptReady ( // integral multiple of RESERVED_MEM_ALIGNMENT. // ASSERT (sizeof *mDmaAccess % RESERVED_MEM_ALIGNMENT == 0); - mScratchBuffer = mDmaAccess + 1; + mScratchBuffer = mDmaAccess + 1; mScratchBufferSize = ScratchBufferSize; - mCallback = Callback; + mCallback = Callback; // // Kick the event; EFI_S3_SAVE_STATE_PROTOCOL could be available already. // Status = gBS->SignalEvent (mS3SaveStateInstalledEvent); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: %a: SignalEvent(): %r\n", gEfiCallerBaseName, - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: SignalEvent(): %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); goto NullGlobals; } return RETURN_SUCCESS; NullGlobals: - mScratchBuffer = NULL; + mScratchBuffer = NULL; mScratchBufferSize = 0; - mCallback = NULL; + mCallback = NULL; CloseEvent: gBS->CloseEvent (mS3SaveStateInstalledEvent); @@ -233,7 +280,6 @@ FreeDmaAccess: return (RETURN_STATUS)Status; } - /** Produce ACPI S3 Boot Script opcodes that (optionally) select an fw_cfg item, and transfer data to it. @@ -277,22 +323,23 @@ FreeDmaAccess: RETURN_STATUS EFIAPI QemuFwCfgS3ScriptWriteBytes ( - IN INT32 FirmwareConfigItem, - IN UINTN NumberOfBytes + IN INT32 FirmwareConfigItem, + IN UINTN NumberOfBytes ) { - UINTN Count; - EFI_STATUS Status; - UINT64 AccessAddress; - UINT32 ControlPollData; - UINT32 ControlPollMask; + UINTN Count; + EFI_STATUS Status; + UINT64 AccessAddress; + UINT32 ControlPollData; + UINT32 ControlPollMask; ASSERT (mDmaAccess != NULL); ASSERT (mS3SaveState != NULL); - if (FirmwareConfigItem < -1 || FirmwareConfigItem > MAX_UINT16) { + if ((FirmwareConfigItem < -1) || (FirmwareConfigItem > MAX_UINT16)) { return RETURN_INVALID_PARAMETER; } + if (NumberOfBytes > mScratchBufferSize) { return RETURN_BAD_BUFFER_SIZE; } @@ -305,6 +352,7 @@ QemuFwCfgS3ScriptWriteBytes ( mDmaAccess->Control |= FW_CFG_DMA_CTL_SELECT; mDmaAccess->Control |= (UINT32)FirmwareConfigItem << 16; } + mDmaAccess->Control = SwapBytes32 (mDmaAccess->Control); // @@ -321,7 +369,7 @@ QemuFwCfgS3ScriptWriteBytes ( // script. When executed at S3 resume, this opcode will restore all of them // in-place. // - Count = (UINTN)mScratchBuffer + NumberOfBytes - (UINTN)mDmaAccess; + Count = (UINTN)mScratchBuffer + NumberOfBytes - (UINTN)mDmaAccess; Status = mS3SaveState->Write ( mS3SaveState, // This EFI_BOOT_SCRIPT_MEM_WRITE_OPCODE, // OpCode @@ -331,8 +379,13 @@ QemuFwCfgS3ScriptWriteBytes ( (VOID *)mDmaAccess // Buffer ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: %a: EFI_BOOT_SCRIPT_MEM_WRITE_OPCODE: %r\n", - gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: EFI_BOOT_SCRIPT_MEM_WRITE_OPCODE: %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); return (RETURN_STATUS)Status; } @@ -343,17 +396,22 @@ QemuFwCfgS3ScriptWriteBytes ( // transfer. // AccessAddress = SwapBytes64 ((UINTN)mDmaAccess); - Status = mS3SaveState->Write ( - mS3SaveState, // This - EFI_BOOT_SCRIPT_IO_WRITE_OPCODE, // OpCode - EfiBootScriptWidthUint32, // Width - (UINT64)FW_CFG_IO_DMA_ADDRESS, // Address - (UINTN)2, // Count - (VOID *)&AccessAddress // Buffer - ); + Status = mS3SaveState->Write ( + mS3SaveState, // This + EFI_BOOT_SCRIPT_IO_WRITE_OPCODE, // OpCode + EfiBootScriptWidthUint32, // Width + (UINT64)FW_CFG_IO_DMA_ADDRESS, // Address + (UINTN)2, // Count + (VOID *)&AccessAddress // Buffer + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: %a: EFI_BOOT_SCRIPT_IO_WRITE_OPCODE: %r\n", - gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: EFI_BOOT_SCRIPT_IO_WRITE_OPCODE: %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); return (RETURN_STATUS)Status; } @@ -364,25 +422,29 @@ QemuFwCfgS3ScriptWriteBytes ( // ControlPollData = 0; ControlPollMask = MAX_UINT32; - Status = mS3SaveState->Write ( - mS3SaveState, // This - EFI_BOOT_SCRIPT_MEM_POLL_OPCODE, // OpCode - EfiBootScriptWidthUint32, // Width - (UINT64)(UINTN)&mDmaAccess->Control, // Address - (VOID *)&ControlPollData, // Data - (VOID *)&ControlPollMask, // DataMask - MAX_UINT64 // Delay - ); + Status = mS3SaveState->Write ( + mS3SaveState, // This + EFI_BOOT_SCRIPT_MEM_POLL_OPCODE, // OpCode + EfiBootScriptWidthUint32, // Width + (UINT64)(UINTN)&mDmaAccess->Control, // Address + (VOID *)&ControlPollData, // Data + (VOID *)&ControlPollMask, // DataMask + MAX_UINT64 // Delay + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: %a: EFI_BOOT_SCRIPT_MEM_POLL_OPCODE: %r\n", - gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: EFI_BOOT_SCRIPT_MEM_POLL_OPCODE: %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); return (RETURN_STATUS)Status; } return RETURN_SUCCESS; } - /** Produce ACPI S3 Boot Script opcodes that (optionally) select an fw_cfg item, and transfer data from it. @@ -425,21 +487,22 @@ QemuFwCfgS3ScriptWriteBytes ( RETURN_STATUS EFIAPI QemuFwCfgS3ScriptReadBytes ( - IN INT32 FirmwareConfigItem, - IN UINTN NumberOfBytes + IN INT32 FirmwareConfigItem, + IN UINTN NumberOfBytes ) { - EFI_STATUS Status; - UINT64 AccessAddress; - UINT32 ControlPollData; - UINT32 ControlPollMask; + EFI_STATUS Status; + UINT64 AccessAddress; + UINT32 ControlPollData; + UINT32 ControlPollMask; ASSERT (mDmaAccess != NULL); ASSERT (mS3SaveState != NULL); - if (FirmwareConfigItem < -1 || FirmwareConfigItem > MAX_UINT16) { + if ((FirmwareConfigItem < -1) || (FirmwareConfigItem > MAX_UINT16)) { return RETURN_INVALID_PARAMETER; } + if (NumberOfBytes > mScratchBufferSize) { return RETURN_BAD_BUFFER_SIZE; } @@ -452,6 +515,7 @@ QemuFwCfgS3ScriptReadBytes ( mDmaAccess->Control |= FW_CFG_DMA_CTL_SELECT; mDmaAccess->Control |= (UINT32)FirmwareConfigItem << 16; } + mDmaAccess->Control = SwapBytes32 (mDmaAccess->Control); // @@ -476,8 +540,13 @@ QemuFwCfgS3ScriptReadBytes ( (VOID *)mDmaAccess // Buffer ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: %a: EFI_BOOT_SCRIPT_MEM_WRITE_OPCODE: %r\n", - gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: EFI_BOOT_SCRIPT_MEM_WRITE_OPCODE: %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); return (RETURN_STATUS)Status; } @@ -488,17 +557,22 @@ QemuFwCfgS3ScriptReadBytes ( // transfer. // AccessAddress = SwapBytes64 ((UINTN)mDmaAccess); - Status = mS3SaveState->Write ( - mS3SaveState, // This - EFI_BOOT_SCRIPT_IO_WRITE_OPCODE, // OpCode - EfiBootScriptWidthUint32, // Width - (UINT64)FW_CFG_IO_DMA_ADDRESS, // Address - (UINTN)2, // Count - (VOID *)&AccessAddress // Buffer - ); + Status = mS3SaveState->Write ( + mS3SaveState, // This + EFI_BOOT_SCRIPT_IO_WRITE_OPCODE, // OpCode + EfiBootScriptWidthUint32, // Width + (UINT64)FW_CFG_IO_DMA_ADDRESS, // Address + (UINTN)2, // Count + (VOID *)&AccessAddress // Buffer + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: %a: EFI_BOOT_SCRIPT_IO_WRITE_OPCODE: %r\n", - gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: EFI_BOOT_SCRIPT_IO_WRITE_OPCODE: %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); return (RETURN_STATUS)Status; } @@ -509,25 +583,29 @@ QemuFwCfgS3ScriptReadBytes ( // ControlPollData = 0; ControlPollMask = MAX_UINT32; - Status = mS3SaveState->Write ( - mS3SaveState, // This - EFI_BOOT_SCRIPT_MEM_POLL_OPCODE, // OpCode - EfiBootScriptWidthUint32, // Width - (UINT64)(UINTN)&mDmaAccess->Control, // Address - (VOID *)&ControlPollData, // Data - (VOID *)&ControlPollMask, // DataMask - MAX_UINT64 // Delay - ); + Status = mS3SaveState->Write ( + mS3SaveState, // This + EFI_BOOT_SCRIPT_MEM_POLL_OPCODE, // OpCode + EfiBootScriptWidthUint32, // Width + (UINT64)(UINTN)&mDmaAccess->Control, // Address + (VOID *)&ControlPollData, // Data + (VOID *)&ControlPollMask, // DataMask + MAX_UINT64 // Delay + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: %a: EFI_BOOT_SCRIPT_MEM_POLL_OPCODE: %r\n", - gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: EFI_BOOT_SCRIPT_MEM_POLL_OPCODE: %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); return (RETURN_STATUS)Status; } return RETURN_SUCCESS; } - /** Produce ACPI S3 Boot Script opcodes that (optionally) select an fw_cfg item, and increase its offset. @@ -563,21 +641,22 @@ QemuFwCfgS3ScriptReadBytes ( RETURN_STATUS EFIAPI QemuFwCfgS3ScriptSkipBytes ( - IN INT32 FirmwareConfigItem, - IN UINTN NumberOfBytes + IN INT32 FirmwareConfigItem, + IN UINTN NumberOfBytes ) { - EFI_STATUS Status; - UINT64 AccessAddress; - UINT32 ControlPollData; - UINT32 ControlPollMask; + EFI_STATUS Status; + UINT64 AccessAddress; + UINT32 ControlPollData; + UINT32 ControlPollMask; ASSERT (mDmaAccess != NULL); ASSERT (mS3SaveState != NULL); - if (FirmwareConfigItem < -1 || FirmwareConfigItem > MAX_UINT16) { + if ((FirmwareConfigItem < -1) || (FirmwareConfigItem > MAX_UINT16)) { return RETURN_INVALID_PARAMETER; } + if (NumberOfBytes > MAX_UINT32) { return RETURN_BAD_BUFFER_SIZE; } @@ -590,9 +669,10 @@ QemuFwCfgS3ScriptSkipBytes ( mDmaAccess->Control |= FW_CFG_DMA_CTL_SELECT; mDmaAccess->Control |= (UINT32)FirmwareConfigItem << 16; } + mDmaAccess->Control = SwapBytes32 (mDmaAccess->Control); - mDmaAccess->Length = SwapBytes32 ((UINT32)NumberOfBytes); + mDmaAccess->Length = SwapBytes32 ((UINT32)NumberOfBytes); mDmaAccess->Address = 0; // @@ -608,8 +688,13 @@ QemuFwCfgS3ScriptSkipBytes ( (VOID *)mDmaAccess // Buffer ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: %a: EFI_BOOT_SCRIPT_MEM_WRITE_OPCODE: %r\n", - gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: EFI_BOOT_SCRIPT_MEM_WRITE_OPCODE: %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); return (RETURN_STATUS)Status; } @@ -620,17 +705,22 @@ QemuFwCfgS3ScriptSkipBytes ( // transfer. // AccessAddress = SwapBytes64 ((UINTN)mDmaAccess); - Status = mS3SaveState->Write ( - mS3SaveState, // This - EFI_BOOT_SCRIPT_IO_WRITE_OPCODE, // OpCode - EfiBootScriptWidthUint32, // Width - (UINT64)FW_CFG_IO_DMA_ADDRESS, // Address - (UINTN)2, // Count - (VOID *)&AccessAddress // Buffer - ); + Status = mS3SaveState->Write ( + mS3SaveState, // This + EFI_BOOT_SCRIPT_IO_WRITE_OPCODE, // OpCode + EfiBootScriptWidthUint32, // Width + (UINT64)FW_CFG_IO_DMA_ADDRESS, // Address + (UINTN)2, // Count + (VOID *)&AccessAddress // Buffer + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: %a: EFI_BOOT_SCRIPT_IO_WRITE_OPCODE: %r\n", - gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: EFI_BOOT_SCRIPT_IO_WRITE_OPCODE: %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); return (RETURN_STATUS)Status; } @@ -641,25 +731,29 @@ QemuFwCfgS3ScriptSkipBytes ( // ControlPollData = 0; ControlPollMask = MAX_UINT32; - Status = mS3SaveState->Write ( - mS3SaveState, // This - EFI_BOOT_SCRIPT_MEM_POLL_OPCODE, // OpCode - EfiBootScriptWidthUint32, // Width - (UINT64)(UINTN)&mDmaAccess->Control, // Address - (VOID *)&ControlPollData, // Data - (VOID *)&ControlPollMask, // DataMask - MAX_UINT64 // Delay - ); + Status = mS3SaveState->Write ( + mS3SaveState, // This + EFI_BOOT_SCRIPT_MEM_POLL_OPCODE, // OpCode + EfiBootScriptWidthUint32, // Width + (UINT64)(UINTN)&mDmaAccess->Control, // Address + (VOID *)&ControlPollData, // Data + (VOID *)&ControlPollMask, // DataMask + MAX_UINT64 // Delay + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: %a: EFI_BOOT_SCRIPT_MEM_POLL_OPCODE: %r\n", - gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: EFI_BOOT_SCRIPT_MEM_POLL_OPCODE: %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); return (RETURN_STATUS)Status; } return RETURN_SUCCESS; } - /** Produce ACPI S3 Boot Script opcodes that check a value in ScratchBuffer. @@ -713,41 +807,42 @@ QemuFwCfgS3ScriptSkipBytes ( RETURN_STATUS EFIAPI QemuFwCfgS3ScriptCheckValue ( - IN VOID *ScratchData, - IN UINT8 ValueSize, - IN UINT64 ValueMask, - IN UINT64 Value + IN VOID *ScratchData, + IN UINT8 ValueSize, + IN UINT64 ValueMask, + IN UINT64 Value ) { - EFI_BOOT_SCRIPT_WIDTH Width; - EFI_STATUS Status; + EFI_BOOT_SCRIPT_WIDTH Width; + EFI_STATUS Status; ASSERT (mS3SaveState != NULL); switch (ValueSize) { - case 1: - Width = EfiBootScriptWidthUint8; - break; + case 1: + Width = EfiBootScriptWidthUint8; + break; - case 2: - Width = EfiBootScriptWidthUint16; - break; + case 2: + Width = EfiBootScriptWidthUint16; + break; - case 4: - Width = EfiBootScriptWidthUint32; - break; + case 4: + Width = EfiBootScriptWidthUint32; + break; - case 8: - Width = EfiBootScriptWidthUint64; - break; + case 8: + Width = EfiBootScriptWidthUint64; + break; - default: - return RETURN_INVALID_PARAMETER; + default: + return RETURN_INVALID_PARAMETER; } - if (ValueSize < 8 && - (RShiftU64 (ValueMask, ValueSize * 8) > 0 || - RShiftU64 (Value, ValueSize * 8) > 0)) { + if ((ValueSize < 8) && + ((RShiftU64 (ValueMask, ValueSize * 8) > 0) || + (RShiftU64 (Value, ValueSize * 8) > 0))) + { return RETURN_INVALID_PARAMETER; } @@ -758,7 +853,8 @@ QemuFwCfgS3ScriptCheckValue ( if (((UINTN)ScratchData < (UINTN)mScratchBuffer) || ((UINTN)ScratchData > MAX_UINTN - ValueSize) || ((UINTN)ScratchData + ValueSize > - (UINTN)mScratchBuffer + mScratchBufferSize)) { + (UINTN)mScratchBuffer + mScratchBufferSize)) + { return RETURN_BAD_BUFFER_SIZE; } @@ -777,8 +873,13 @@ QemuFwCfgS3ScriptCheckValue ( MAX_UINT64 // Delay ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: %a: EFI_BOOT_SCRIPT_MEM_POLL_OPCODE: %r\n", - gEfiCallerBaseName, __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: %a: EFI_BOOT_SCRIPT_MEM_POLL_OPCODE: %r\n", + gEfiCallerBaseName, + __FUNCTION__, + Status + )); return (RETURN_STATUS)Status; } diff --git a/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3Pei.c b/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3Pei.c index bf1accd946..78a8f15442 100644 --- a/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3Pei.c +++ b/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3Pei.c @@ -71,9 +71,9 @@ RETURN_STATUS EFIAPI QemuFwCfgS3CallWhenBootScriptReady ( - IN FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION *Callback, - IN OUT VOID *Context OPTIONAL, - IN UINTN ScratchBufferSize + IN FW_CFG_BOOT_SCRIPT_CALLBACK_FUNCTION *Callback, + IN OUT VOID *Context OPTIONAL, + IN UINTN ScratchBufferSize ) { return RETURN_UNSUPPORTED; diff --git a/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3PeiDxe.c b/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3PeiDxe.c index 5557c70aa3..270f050336 100644 --- a/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3PeiDxe.c +++ b/OvmfPkg/Library/QemuFwCfgS3Lib/QemuFwCfgS3PeiDxe.c @@ -27,16 +27,17 @@ QemuFwCfgS3Enabled ( VOID ) { - RETURN_STATUS Status; - FIRMWARE_CONFIG_ITEM FwCfgItem; - UINTN FwCfgSize; - UINT8 SystemStates[6]; + RETURN_STATUS Status; + FIRMWARE_CONFIG_ITEM FwCfgItem; + UINTN FwCfgSize; + UINT8 SystemStates[6]; Status = QemuFwCfgFindFile ("etc/system-states", &FwCfgItem, &FwCfgSize); - if (Status != RETURN_SUCCESS || FwCfgSize != sizeof SystemStates) { + if ((Status != RETURN_SUCCESS) || (FwCfgSize != sizeof SystemStates)) { return FALSE; } + QemuFwCfgSelectItem (FwCfgItem); QemuFwCfgReadBytes (sizeof SystemStates, SystemStates); - return (BOOLEAN) (SystemStates[3] & BIT7); + return (BOOLEAN)(SystemStates[3] & BIT7); } diff --git a/OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFwCfgSimpleParser.c b/OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFwCfgSimpleParser.c index 5ca22fcf0d..c9e0091b82 100644 --- a/OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFwCfgSimpleParser.c +++ b/OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFwCfgSimpleParser.c @@ -20,20 +20,20 @@ // Size of the longest valid BOOL string (see the "mTrueString" and // "mFalseString" arrays below), including the terminating NUL. // -#define BOOL_STRING_MAX_SIZE (sizeof "disabled") +#define BOOL_STRING_MAX_SIZE (sizeof "disabled") // // Length of "\r\n", not including the terminating NUL. // -#define CRLF_LENGTH (sizeof "\r\n" - 1) +#define CRLF_LENGTH (sizeof "\r\n" - 1) // // Words recognized as representing TRUE or FALSE. // -STATIC CONST CHAR8 * CONST mTrueString[] = { +STATIC CONST CHAR8 *CONST mTrueString[] = { "true", "yes", "y", "enable", "enabled", "1" }; -STATIC CONST CHAR8 * CONST mFalseString[] = { +STATIC CONST CHAR8 *CONST mFalseString[] = { "false", "no", "n", "disable", "disabled", "0" }; @@ -85,14 +85,14 @@ STATIC CONST CHAR8 * CONST mFalseString[] = { STATIC RETURN_STATUS QemuFwCfgGetAsString ( - IN CONST CHAR8 *FileName, - IN OUT UINTN *BufferSize, - OUT CHAR8 *Buffer + IN CONST CHAR8 *FileName, + IN OUT UINTN *BufferSize, + OUT CHAR8 *Buffer ) { - RETURN_STATUS Status; - FIRMWARE_CONFIG_ITEM FwCfgItem; - UINTN FwCfgSize; + RETURN_STATUS Status; + FIRMWARE_CONFIG_ITEM FwCfgItem; + UINTN FwCfgSize; if (!QemuFwCfgIsAvailable ()) { return RETURN_UNSUPPORTED; @@ -102,6 +102,7 @@ QemuFwCfgGetAsString ( if (RETURN_ERROR (Status)) { return Status; } + if (FwCfgSize > *BufferSize) { return RETURN_PROTOCOL_ERROR; } @@ -112,18 +113,20 @@ QemuFwCfgGetAsString ( // // If Buffer is already NUL-terminated due to fw_cfg contents, we're done. // - if (FwCfgSize > 0 && Buffer[FwCfgSize - 1] == '\0') { + if ((FwCfgSize > 0) && (Buffer[FwCfgSize - 1] == '\0')) { *BufferSize = FwCfgSize; return RETURN_SUCCESS; } + // // Otherwise, append a NUL byte to Buffer (if we have room for it). // if (FwCfgSize == *BufferSize) { return RETURN_PROTOCOL_ERROR; } + Buffer[FwCfgSize] = '\0'; - *BufferSize = FwCfgSize + 1; + *BufferSize = FwCfgSize + 1; return RETURN_SUCCESS; } @@ -142,25 +145,26 @@ QemuFwCfgGetAsString ( STATIC VOID StripNewline ( - IN OUT UINTN *BufferSize, - IN OUT CHAR8 *Buffer + IN OUT UINTN *BufferSize, + IN OUT CHAR8 *Buffer ) { - UINTN InSize, OutSize; + UINTN InSize, OutSize; - InSize = *BufferSize; + InSize = *BufferSize; OutSize = InSize; - if (InSize >= 3 && - Buffer[InSize - 3] == '\r' && Buffer[InSize - 2] == '\n') { + if ((InSize >= 3) && + (Buffer[InSize - 3] == '\r') && (Buffer[InSize - 2] == '\n')) + { OutSize = InSize - 2; - } else if (InSize >= 2 && Buffer[InSize - 2] == '\n') { + } else if ((InSize >= 2) && (Buffer[InSize - 2] == '\n')) { OutSize = InSize - 1; } if (OutSize < InSize) { Buffer[OutSize - 1] = '\0'; - *BufferSize = OutSize; + *BufferSize = OutSize; } } @@ -203,20 +207,20 @@ StripNewline ( STATIC RETURN_STATUS QemuFwCfgParseUint64WithLimit ( - IN CONST CHAR8 *FileName, - IN BOOLEAN ParseAsHex, - IN UINT64 Limit, - OUT UINT64 *Value + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + IN UINT64 Limit, + OUT UINT64 *Value ) { - UINTN Uint64StringSize; - CHAR8 Uint64String[UINT64_STRING_MAX_SIZE + CRLF_LENGTH]; - RETURN_STATUS Status; - CHAR8 *EndPointer; - UINT64 Uint64; + UINTN Uint64StringSize; + CHAR8 Uint64String[UINT64_STRING_MAX_SIZE + CRLF_LENGTH]; + RETURN_STATUS Status; + CHAR8 *EndPointer; + UINT64 Uint64; Uint64StringSize = sizeof Uint64String; - Status = QemuFwCfgGetAsString (FileName, &Uint64StringSize, Uint64String); + Status = QemuFwCfgGetAsString (FileName, &Uint64StringSize, Uint64String); if (RETURN_ERROR (Status)) { return Status; } @@ -228,6 +232,7 @@ QemuFwCfgParseUint64WithLimit ( } else { Status = AsciiStrDecimalToUint64S (Uint64String, &EndPointer, &Uint64); } + if (RETURN_ERROR (Status)) { return Status; } @@ -236,7 +241,7 @@ QemuFwCfgParseUint64WithLimit ( // Report a wire protocol error if the subject sequence is empty, or trailing // garbage is present, or Limit is not honored. // - if (EndPointer == Uint64String || *EndPointer != '\0' || Uint64 > Limit) { + if ((EndPointer == Uint64String) || (*EndPointer != '\0') || (Uint64 > Limit)) { return RETURN_PROTOCOL_ERROR; } @@ -263,17 +268,17 @@ QemuFwCfgSimpleParserInit ( RETURN_STATUS EFIAPI QemuFwCfgParseBool ( - IN CONST CHAR8 *FileName, - OUT BOOLEAN *Value + IN CONST CHAR8 *FileName, + OUT BOOLEAN *Value ) { - UINTN BoolStringSize; - CHAR8 BoolString[BOOL_STRING_MAX_SIZE + CRLF_LENGTH]; - RETURN_STATUS Status; - UINTN Idx; + UINTN BoolStringSize; + CHAR8 BoolString[BOOL_STRING_MAX_SIZE + CRLF_LENGTH]; + RETURN_STATUS Status; + UINTN Idx; BoolStringSize = sizeof BoolString; - Status = QemuFwCfgGetAsString (FileName, &BoolStringSize, BoolString); + Status = QemuFwCfgGetAsString (FileName, &BoolStringSize, BoolString); if (RETURN_ERROR (Status)) { return Status; } @@ -300,19 +305,24 @@ QemuFwCfgParseBool ( RETURN_STATUS EFIAPI QemuFwCfgParseUint8 ( - IN CONST CHAR8 *FileName, - IN BOOLEAN ParseAsHex, - OUT UINT8 *Value + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT8 *Value ) { - RETURN_STATUS Status; - UINT64 Uint64; - - Status = QemuFwCfgParseUint64WithLimit (FileName, ParseAsHex, MAX_UINT8, - &Uint64); + RETURN_STATUS Status; + UINT64 Uint64; + + Status = QemuFwCfgParseUint64WithLimit ( + FileName, + ParseAsHex, + MAX_UINT8, + &Uint64 + ); if (RETURN_ERROR (Status)) { return Status; } + *Value = (UINT8)Uint64; return RETURN_SUCCESS; } @@ -320,19 +330,24 @@ QemuFwCfgParseUint8 ( RETURN_STATUS EFIAPI QemuFwCfgParseUint16 ( - IN CONST CHAR8 *FileName, - IN BOOLEAN ParseAsHex, - OUT UINT16 *Value + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT16 *Value ) { - RETURN_STATUS Status; - UINT64 Uint64; - - Status = QemuFwCfgParseUint64WithLimit (FileName, ParseAsHex, MAX_UINT16, - &Uint64); + RETURN_STATUS Status; + UINT64 Uint64; + + Status = QemuFwCfgParseUint64WithLimit ( + FileName, + ParseAsHex, + MAX_UINT16, + &Uint64 + ); if (RETURN_ERROR (Status)) { return Status; } + *Value = (UINT16)Uint64; return RETURN_SUCCESS; } @@ -340,19 +355,24 @@ QemuFwCfgParseUint16 ( RETURN_STATUS EFIAPI QemuFwCfgParseUint32 ( - IN CONST CHAR8 *FileName, - IN BOOLEAN ParseAsHex, - OUT UINT32 *Value + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT32 *Value ) { - RETURN_STATUS Status; - UINT64 Uint64; - - Status = QemuFwCfgParseUint64WithLimit (FileName, ParseAsHex, MAX_UINT32, - &Uint64); + RETURN_STATUS Status; + UINT64 Uint64; + + Status = QemuFwCfgParseUint64WithLimit ( + FileName, + ParseAsHex, + MAX_UINT32, + &Uint64 + ); if (RETURN_ERROR (Status)) { return Status; } + *Value = (UINT32)Uint64; return RETURN_SUCCESS; } @@ -360,19 +380,24 @@ QemuFwCfgParseUint32 ( RETURN_STATUS EFIAPI QemuFwCfgParseUint64 ( - IN CONST CHAR8 *FileName, - IN BOOLEAN ParseAsHex, - OUT UINT64 *Value + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINT64 *Value ) { - RETURN_STATUS Status; - UINT64 Uint64; - - Status = QemuFwCfgParseUint64WithLimit (FileName, ParseAsHex, MAX_UINT64, - &Uint64); + RETURN_STATUS Status; + UINT64 Uint64; + + Status = QemuFwCfgParseUint64WithLimit ( + FileName, + ParseAsHex, + MAX_UINT64, + &Uint64 + ); if (RETURN_ERROR (Status)) { return Status; } + *Value = Uint64; return RETURN_SUCCESS; } @@ -380,19 +405,24 @@ QemuFwCfgParseUint64 ( RETURN_STATUS EFIAPI QemuFwCfgParseUintn ( - IN CONST CHAR8 *FileName, - IN BOOLEAN ParseAsHex, - OUT UINTN *Value + IN CONST CHAR8 *FileName, + IN BOOLEAN ParseAsHex, + OUT UINTN *Value ) { - RETURN_STATUS Status; - UINT64 Uint64; - - Status = QemuFwCfgParseUint64WithLimit (FileName, ParseAsHex, MAX_UINTN, - &Uint64); + RETURN_STATUS Status; + UINT64 Uint64; + + Status = QemuFwCfgParseUint64WithLimit ( + FileName, + ParseAsHex, + MAX_UINTN, + &Uint64 + ); if (RETURN_ERROR (Status)) { return Status; } + *Value = (UINTN)Uint64; return RETURN_SUCCESS; } diff --git a/OvmfPkg/Library/ResetSystemLib/BaseResetShutdown.c b/OvmfPkg/Library/ResetSystemLib/BaseResetShutdown.c index 21c80e4323..29abd57fa7 100644 --- a/OvmfPkg/Library/ResetSystemLib/BaseResetShutdown.c +++ b/OvmfPkg/Library/ResetSystemLib/BaseResetShutdown.c @@ -28,21 +28,21 @@ ResetShutdown ( VOID ) { - UINT16 AcpiPmBaseAddress; - UINT16 HostBridgeDevId; + UINT16 AcpiPmBaseAddress; + UINT16 HostBridgeDevId; AcpiPmBaseAddress = 0; - HostBridgeDevId = PciRead16 (OVMF_HOSTBRIDGE_DID); + HostBridgeDevId = PciRead16 (OVMF_HOSTBRIDGE_DID); switch (HostBridgeDevId) { - case INTEL_82441_DEVICE_ID: - AcpiPmBaseAddress = PIIX4_PMBA_VALUE; - break; - case INTEL_Q35_MCH_DEVICE_ID: - AcpiPmBaseAddress = ICH9_PMBASE_VALUE; - break; - default: - ASSERT (FALSE); - CpuDeadLoop (); + case INTEL_82441_DEVICE_ID: + AcpiPmBaseAddress = PIIX4_PMBA_VALUE; + break; + case INTEL_Q35_MCH_DEVICE_ID: + AcpiPmBaseAddress = ICH9_PMBASE_VALUE; + break; + default: + ASSERT (FALSE); + CpuDeadLoop (); } IoBitFieldWrite16 (AcpiPmBaseAddress + 4, 10, 13, 0); diff --git a/OvmfPkg/Library/ResetSystemLib/DxeResetShutdown.c b/OvmfPkg/Library/ResetSystemLib/DxeResetShutdown.c index 5a75c32df3..a0db8b50bf 100644 --- a/OvmfPkg/Library/ResetSystemLib/DxeResetShutdown.c +++ b/OvmfPkg/Library/ResetSystemLib/DxeResetShutdown.c @@ -15,29 +15,29 @@ #include // ResetShutdown() #include // PIIX4_PMBA_VALUE -STATIC UINT16 mAcpiPmBaseAddress; +STATIC UINT16 mAcpiPmBaseAddress; EFI_STATUS EFIAPI DxeResetInit ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - UINT16 HostBridgeDevId; + UINT16 HostBridgeDevId; HostBridgeDevId = PcdGet16 (PcdOvmfHostBridgePciDevId); switch (HostBridgeDevId) { - case INTEL_82441_DEVICE_ID: - mAcpiPmBaseAddress = PIIX4_PMBA_VALUE; - break; - case INTEL_Q35_MCH_DEVICE_ID: - mAcpiPmBaseAddress = ICH9_PMBASE_VALUE; - break; - default: - ASSERT (FALSE); - CpuDeadLoop (); - return EFI_UNSUPPORTED; + case INTEL_82441_DEVICE_ID: + mAcpiPmBaseAddress = PIIX4_PMBA_VALUE; + break; + case INTEL_Q35_MCH_DEVICE_ID: + mAcpiPmBaseAddress = ICH9_PMBASE_VALUE; + break; + default: + ASSERT (FALSE); + CpuDeadLoop (); + return EFI_UNSUPPORTED; } return EFI_SUCCESS; diff --git a/OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.c b/OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.c index 0de8b39f54..a31fd0e7bb 100644 --- a/OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.c +++ b/OvmfPkg/Library/ResetSystemLib/DxeResetSystemLibMicrovm.c @@ -37,8 +37,11 @@ DxeResetSystemLibMicrovmConstructor ( return RETURN_UNSUPPORTED; } - Status = gDS->SetMemorySpaceAttributes (Address, SIZE_4KB, - Descriptor.Attributes | EFI_MEMORY_RUNTIME); + Status = gDS->SetMemorySpaceAttributes ( + Address, + SIZE_4KB, + Descriptor.Attributes | EFI_MEMORY_RUNTIME + ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_INFO, "%a: SetMemorySpaceAttributes failed\n", __FUNCTION__)); return RETURN_UNSUPPORTED; diff --git a/OvmfPkg/Library/ResetSystemLib/ResetSystemLib.c b/OvmfPkg/Library/ResetSystemLib/ResetSystemLib.c index fe51f53d1d..9d1314d553 100644 --- a/OvmfPkg/Library/ResetSystemLib/ResetSystemLib.c +++ b/OvmfPkg/Library/ResetSystemLib/ResetSystemLib.c @@ -52,7 +52,6 @@ ResetWarm ( CpuDeadLoop (); } - /** This function causes a systemwide reset. The exact type of the reset is defined by the EFI_GUID that follows the Null-terminated Unicode string @@ -68,8 +67,8 @@ ResetWarm ( VOID EFIAPI ResetPlatformSpecific ( - IN UINTN DataSize, - IN VOID *ResetData + IN UINTN DataSize, + IN VOID *ResetData ) { ResetCold (); @@ -91,30 +90,30 @@ ResetPlatformSpecific ( VOID EFIAPI ResetSystem ( - IN EFI_RESET_TYPE ResetType, - IN EFI_STATUS ResetStatus, - IN UINTN DataSize, - IN VOID *ResetData OPTIONAL + IN EFI_RESET_TYPE ResetType, + IN EFI_STATUS ResetStatus, + IN UINTN DataSize, + IN VOID *ResetData OPTIONAL ) { switch (ResetType) { - case EfiResetWarm: - ResetWarm (); - break; + case EfiResetWarm: + ResetWarm (); + break; - case EfiResetCold: - ResetCold (); - break; + case EfiResetCold: + ResetCold (); + break; - case EfiResetShutdown: - ResetShutdown (); - break; + case EfiResetShutdown: + ResetShutdown (); + break; - case EfiResetPlatformSpecific: - ResetPlatformSpecific (DataSize, ResetData); - break; + case EfiResetPlatformSpecific: + ResetPlatformSpecific (DataSize, ResetData); + break; - default: - break; + default: + break; } } diff --git a/OvmfPkg/Library/ResetSystemLib/ResetSystemLibMicrovm.c b/OvmfPkg/Library/ResetSystemLib/ResetSystemLibMicrovm.c index 94dc894ded..44fe929e93 100644 --- a/OvmfPkg/Library/ResetSystemLib/ResetSystemLibMicrovm.c +++ b/OvmfPkg/Library/ResetSystemLib/ResetSystemLibMicrovm.c @@ -16,9 +16,12 @@ #include // EfiGoneVirtual() #include // PIIX4_PMBA_VALUE -static UINTN MicrovmGedBase (VOID) +static UINTN +MicrovmGedBase ( + VOID + ) { - VOID *Address = (VOID*)(UINTN) MICROVM_GED_MMIO_BASE_REGS; + VOID *Address = (VOID *)(UINTN)MICROVM_GED_MMIO_BASE_REGS; if (EfiGoneVirtual ()) { EfiConvertPointer (0, &Address); @@ -27,63 +30,82 @@ static UINTN MicrovmGedBase (VOID) DEBUG ((DEBUG_INFO, "%a: physical -> 0x%x\n", __FUNCTION__, Address)); } - return (UINTN) Address; + return (UINTN)Address; } -static VOID MicrovmReset (VOID) +static VOID +MicrovmReset ( + VOID + ) { - UINTN Address = MicrovmGedBase(); + UINTN Address = MicrovmGedBase (); DEBUG ((DEBUG_INFO, "%a: microvm reset via ged\n", __FUNCTION__)); - MmioWrite8 (Address + MICROVM_ACPI_GED_REG_RESET, - MICROVM_ACPI_GED_RESET_VALUE); + MmioWrite8 ( + Address + MICROVM_ACPI_GED_REG_RESET, + MICROVM_ACPI_GED_RESET_VALUE + ); CpuDeadLoop (); } -static VOID MicrovmShutdown (VOID) +static VOID +MicrovmShutdown ( + VOID + ) { - UINTN Address = MicrovmGedBase(); + UINTN Address = MicrovmGedBase (); DEBUG ((DEBUG_INFO, "%a: microvm poweroff via ged\n", __FUNCTION__)); - MmioWrite8 (Address + MICROVM_ACPI_GED_REG_SLEEP_CTL, - (1 << 5) /* enable bit */ | - (5 << 2) /* typ == S5 */); + MmioWrite8 ( + Address + MICROVM_ACPI_GED_REG_SLEEP_CTL, + (1 << 5) /* enable bit */ | + (5 << 2) /* typ == S5 */ + ); CpuDeadLoop (); } -VOID EFIAPI ResetCold (VOID) +VOID EFIAPI +ResetCold ( + VOID + ) { - MicrovmReset(); + MicrovmReset (); } -VOID EFIAPI ResetWarm (VOID) +VOID EFIAPI +ResetWarm ( + VOID + ) { - MicrovmReset(); + MicrovmReset (); } VOID EFIAPI ResetPlatformSpecific ( - IN UINTN DataSize, - IN VOID *ResetData + IN UINTN DataSize, + IN VOID *ResetData ) { - MicrovmReset(); + MicrovmReset (); } VOID EFIAPI ResetSystem ( - IN EFI_RESET_TYPE ResetType, - IN EFI_STATUS ResetStatus, - IN UINTN DataSize, - IN VOID *ResetData OPTIONAL + IN EFI_RESET_TYPE ResetType, + IN EFI_STATUS ResetStatus, + IN UINTN DataSize, + IN VOID *ResetData OPTIONAL ) { - MicrovmReset(); + MicrovmReset (); } -VOID EFIAPI ResetShutdown (VOID) +VOID EFIAPI +ResetShutdown ( + VOID + ) { - MicrovmShutdown(); + MicrovmShutdown (); } diff --git a/OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.c b/OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.c index 777b93f1a0..c70b4556b7 100644 --- a/OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.c +++ b/OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.c @@ -25,7 +25,6 @@ **/ - /** Unpacks the next variable from the buffer @@ -49,55 +48,55 @@ STATIC EFI_STATUS UnpackVariableFromBuffer ( - IN VOID *Buffer, - IN UINTN MaxSize, - OUT CHAR16 **Name, - OUT UINT32 *NameSize, - OUT EFI_GUID **Guid, - OUT UINT32 *Attributes, - OUT UINT32 *DataSize, - OUT VOID **Data, - OUT UINTN *SizeUsed + IN VOID *Buffer, + IN UINTN MaxSize, + OUT CHAR16 **Name, + OUT UINT32 *NameSize, + OUT EFI_GUID **Guid, + OUT UINT32 *Attributes, + OUT UINT32 *DataSize, + OUT VOID **Data, + OUT UINTN *SizeUsed ) { UINT8 *BytePtr; UINTN Offset; - BytePtr = (UINT8*)Buffer; - Offset = 0; + BytePtr = (UINT8 *)Buffer; + Offset = 0; - *NameSize = *(UINT32*) (BytePtr + Offset); - Offset = Offset + sizeof (UINT32); + *NameSize = *(UINT32 *)(BytePtr + Offset); + Offset = Offset + sizeof (UINT32); if (Offset > MaxSize) { return EFI_INVALID_PARAMETER; } - *Name = (CHAR16*) (BytePtr + Offset); - Offset = Offset + *(UINT32*)BytePtr; + *Name = (CHAR16 *)(BytePtr + Offset); + Offset = Offset + *(UINT32 *)BytePtr; if (Offset > MaxSize) { return EFI_INVALID_PARAMETER; } - *Guid = (EFI_GUID*) (BytePtr + Offset); + *Guid = (EFI_GUID *)(BytePtr + Offset); Offset = Offset + sizeof (EFI_GUID); if (Offset > MaxSize) { return EFI_INVALID_PARAMETER; } - *Attributes = *(UINT32*) (BytePtr + Offset); - Offset = Offset + sizeof (UINT32); + *Attributes = *(UINT32 *)(BytePtr + Offset); + Offset = Offset + sizeof (UINT32); if (Offset > MaxSize) { return EFI_INVALID_PARAMETER; } - *DataSize = *(UINT32*) (BytePtr + Offset); - Offset = Offset + sizeof (UINT32); + *DataSize = *(UINT32 *)(BytePtr + Offset); + Offset = Offset + sizeof (UINT32); if (Offset > MaxSize) { return EFI_INVALID_PARAMETER; } - *Data = (VOID*) (BytePtr + Offset); + *Data = (VOID *)(BytePtr + Offset); Offset = Offset + *DataSize; if (Offset > MaxSize) { return EFI_INVALID_PARAMETER; @@ -108,7 +107,6 @@ UnpackVariableFromBuffer ( return EFI_SUCCESS; } - /** Iterates through the variables in the buffer, and calls a callback function for each variable found. @@ -130,34 +128,35 @@ IterateVariablesInBuffer ( IN UINTN MaxSize ) { - RETURN_STATUS Status; - UINTN TotalSizeUsed; - UINTN SizeUsed; - - CHAR16 *Name; - UINT32 NameSize; - CHAR16 *AlignedName; - UINT32 AlignedNameMaxSize; - EFI_GUID *Guid; - UINT32 Attributes; - UINT32 DataSize; - VOID *Data; - - SizeUsed = 0; - AlignedName = NULL; + RETURN_STATUS Status; + UINTN TotalSizeUsed; + UINTN SizeUsed; + + CHAR16 *Name; + UINT32 NameSize; + CHAR16 *AlignedName; + UINT32 AlignedNameMaxSize; + EFI_GUID *Guid; + UINT32 Attributes; + UINT32 DataSize; + VOID *Data; + + SizeUsed = 0; + AlignedName = NULL; AlignedNameMaxSize = 0; - Name = NULL; - Guid = NULL; - Attributes = 0; - DataSize = 0; - Data = NULL; + Name = NULL; + Guid = NULL; + Attributes = 0; + DataSize = 0; + Data = NULL; for ( - Status = EFI_SUCCESS, TotalSizeUsed = 0; - !EFI_ERROR (Status) && (TotalSizeUsed < MaxSize); - ) { + Status = EFI_SUCCESS, TotalSizeUsed = 0; + !EFI_ERROR (Status) && (TotalSizeUsed < MaxSize); + ) + { Status = UnpackVariableFromBuffer ( - (VOID*) ((UINT8*) Buffer + TotalSizeUsed), + (VOID *)((UINT8 *)Buffer + TotalSizeUsed), (MaxSize - TotalSizeUsed), &Name, &NameSize, @@ -179,11 +178,14 @@ IterateVariablesInBuffer ( if (AlignedName != NULL) { FreePool (AlignedName); } + AlignedName = AllocatePool (NameSize); } + if (AlignedName == NULL) { return EFI_OUT_OF_RESOURCES; } + CopyMem (AlignedName, Name, NameSize); TotalSizeUsed = TotalSizeUsed + SizeUsed; @@ -191,15 +193,14 @@ IterateVariablesInBuffer ( // // Run the callback function // - Status = (*CallbackFunction) ( - CallbackContext, - AlignedName, - Guid, - Attributes, - DataSize, - Data - ); - + Status = (*CallbackFunction)( + CallbackContext, + AlignedName, + Guid, + Attributes, + DataSize, + Data + ); } if (AlignedName != NULL) { @@ -222,38 +223,36 @@ IterateVariablesInBuffer ( return EFI_SUCCESS; } - STATIC RETURN_STATUS EFIAPI IterateVariablesCallbackNop ( - IN VOID *Context, - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN UINT32 Attributes, - IN UINTN DataSize, - IN VOID *Data + IN VOID *Context, + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + IN UINT32 Attributes, + IN UINTN DataSize, + IN VOID *Data ) { return RETURN_SUCCESS; } - STATIC RETURN_STATUS EFIAPI IterateVariablesCallbackSetInInstance ( - IN VOID *Context, - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN UINT32 Attributes, - IN UINTN DataSize, - IN VOID *Data + IN VOID *Context, + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + IN UINT32 Attributes, + IN UINTN DataSize, + IN VOID *Data ) { EFI_HANDLE Instance; - Instance = (EFI_HANDLE) Context; + Instance = (EFI_HANDLE)Context; return SerializeVariablesAddVariable ( Instance, @@ -265,47 +264,54 @@ IterateVariablesCallbackSetInInstance ( ); } - STATIC RETURN_STATUS EFIAPI IterateVariablesCallbackSetSystemVariable ( - IN VOID *Context, - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN UINT32 Attributes, - IN UINTN DataSize, - IN VOID *Data + IN VOID *Context, + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + IN UINT32 Attributes, + IN UINTN DataSize, + IN VOID *Data ) { - EFI_STATUS Status; - STATIC CONST UINT32 AuthMask = - EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS | - EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS; + EFI_STATUS Status; + STATIC CONST UINT32 AuthMask = + EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS | + EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS; Status = gRT->SetVariable ( - VariableName, - VendorGuid, - Attributes, - DataSize, - Data - ); - - if (Status == EFI_SECURITY_VIOLATION && (Attributes & AuthMask) != 0) { - DEBUG ((DEBUG_WARN, "%a: setting authenticated variable \"%s\" " - "failed with EFI_SECURITY_VIOLATION, ignoring\n", __FUNCTION__, - VariableName)); + VariableName, + VendorGuid, + Attributes, + DataSize, + Data + ); + + if ((Status == EFI_SECURITY_VIOLATION) && ((Attributes & AuthMask) != 0)) { + DEBUG (( + DEBUG_WARN, + "%a: setting authenticated variable \"%s\" " + "failed with EFI_SECURITY_VIOLATION, ignoring\n", + __FUNCTION__, + VariableName + )); Status = EFI_SUCCESS; } else if (Status == EFI_WRITE_PROTECTED) { - DEBUG ((DEBUG_WARN, "%a: setting ReadOnly variable \"%s\" " - "failed with EFI_WRITE_PROTECTED, ignoring\n", __FUNCTION__, - VariableName)); + DEBUG (( + DEBUG_WARN, + "%a: setting ReadOnly variable \"%s\" " + "failed with EFI_WRITE_PROTECTED, ignoring\n", + __FUNCTION__, + VariableName + )); Status = EFI_SUCCESS; } + return Status; } - STATIC RETURN_STATUS EnsureExtraBufferSpace ( @@ -313,8 +319,8 @@ EnsureExtraBufferSpace ( IN UINTN Size ) { - VOID *NewBuffer; - UINTN NewSize; + VOID *NewBuffer; + UINTN NewSize; NewSize = Instance->DataSize + Size; if (NewSize <= Instance->BufferSize) { @@ -336,13 +342,12 @@ EnsureExtraBufferSpace ( FreePool (Instance->BufferPtr); } - Instance->BufferPtr = NewBuffer; + Instance->BufferPtr = NewBuffer; Instance->BufferSize = NewSize; return RETURN_SUCCESS; } - STATIC VOID AppendToBuffer ( @@ -351,7 +356,7 @@ AppendToBuffer ( IN UINTN Size ) { - UINTN NewSize; + UINTN NewSize; ASSERT (Instance != NULL); ASSERT (Data != NULL); @@ -360,7 +365,7 @@ AppendToBuffer ( ASSERT ((Instance->DataSize + Size) <= Instance->BufferSize); CopyMem ( - (VOID*) (((UINT8*) (Instance->BufferPtr)) + Instance->DataSize), + (VOID *)(((UINT8 *)(Instance->BufferPtr)) + Instance->DataSize), Data, Size ); @@ -368,7 +373,6 @@ AppendToBuffer ( Instance->DataSize = NewSize; } - /** Creates a new variable serialization instance @@ -383,7 +387,7 @@ AppendToBuffer ( RETURN_STATUS EFIAPI SerializeVariablesNewInstance ( - OUT EFI_HANDLE *Handle + OUT EFI_HANDLE *Handle ) { SV_INSTANCE *New; @@ -395,11 +399,10 @@ SerializeVariablesNewInstance ( New->Signature = SV_SIGNATURE; - *Handle = (EFI_HANDLE) New; + *Handle = (EFI_HANDLE)New; return RETURN_SUCCESS; } - /** Free memory associated with a variable serialization instance @@ -414,10 +417,10 @@ SerializeVariablesNewInstance ( RETURN_STATUS EFIAPI SerializeVariablesFreeInstance ( - IN EFI_HANDLE Handle + IN EFI_HANDLE Handle ) { - SV_INSTANCE *Instance; + SV_INSTANCE *Instance; Instance = SV_FROM_HANDLE (Handle); @@ -436,7 +439,6 @@ SerializeVariablesFreeInstance ( return RETURN_SUCCESS; } - /** Creates a new variable serialization instance using the given binary representation of the variables to fill the new instance @@ -457,12 +459,12 @@ SerializeVariablesFreeInstance ( RETURN_STATUS EFIAPI SerializeVariablesNewInstanceFromBuffer ( - OUT EFI_HANDLE *Handle, - IN VOID *Buffer, - IN UINTN Size + OUT EFI_HANDLE *Handle, + IN VOID *Buffer, + IN UINTN Size ) { - RETURN_STATUS Status; + RETURN_STATUS Status; Status = SerializeVariablesNewInstance (Handle); if (RETURN_ERROR (Status)) { @@ -482,7 +484,7 @@ SerializeVariablesNewInstanceFromBuffer ( Status = IterateVariablesInBuffer ( IterateVariablesCallbackSetInInstance, - (VOID*) *Handle, + (VOID *)*Handle, Buffer, Size ); @@ -494,7 +496,6 @@ SerializeVariablesNewInstanceFromBuffer ( return Status; } - /** Iterates all variables found with RuntimeServices GetNextVariableName @@ -512,40 +513,40 @@ SerializeVariablesNewInstanceFromBuffer ( RETURN_STATUS EFIAPI SerializeVariablesIterateSystemVariables ( - IN VARIABLE_SERIALIZATION_ITERATION_CALLBACK CallbackFunction, - IN VOID *Context + IN VARIABLE_SERIALIZATION_ITERATION_CALLBACK CallbackFunction, + IN VOID *Context ) { - RETURN_STATUS Status; - UINTN VariableNameBufferSize; - UINTN VariableNameSize; - CHAR16 *VariableName; - EFI_GUID VendorGuid; - UINTN VariableDataBufferSize; - UINTN VariableDataSize; - VOID *VariableData; - UINT32 VariableAttributes; - VOID *NewBuffer; + RETURN_STATUS Status; + UINTN VariableNameBufferSize; + UINTN VariableNameSize; + CHAR16 *VariableName; + EFI_GUID VendorGuid; + UINTN VariableDataBufferSize; + UINTN VariableDataSize; + VOID *VariableData; + UINT32 VariableAttributes; + VOID *NewBuffer; // // Initialize the variable name and data buffer variables. // VariableNameBufferSize = sizeof (CHAR16); - VariableName = AllocateZeroPool (VariableNameBufferSize); + VariableName = AllocateZeroPool (VariableNameBufferSize); VariableDataBufferSize = 0; - VariableData = NULL; + VariableData = NULL; - for (;;) { + for ( ; ;) { // // Get the next variable name and guid // VariableNameSize = VariableNameBufferSize; - Status = gRT->GetNextVariableName ( - &VariableNameSize, - VariableName, - &VendorGuid - ); + Status = gRT->GetNextVariableName ( + &VariableNameSize, + VariableName, + &VendorGuid + ); if (Status == EFI_BUFFER_TOO_SMALL) { // // The currently allocated VariableName buffer is too small, @@ -557,11 +558,13 @@ SerializeVariablesIterateSystemVariables ( Status = EFI_OUT_OF_RESOURCES; break; } + CopyMem (NewBuffer, VariableName, VariableNameBufferSize); if (VariableName != NULL) { FreePool (VariableName); } - VariableName = NewBuffer; + + VariableName = NewBuffer; VariableNameBufferSize = VariableNameSize; // @@ -578,6 +581,7 @@ SerializeVariablesIterateSystemVariables ( if (Status == EFI_NOT_FOUND) { Status = EFI_SUCCESS; } + break; } @@ -585,13 +589,13 @@ SerializeVariablesIterateSystemVariables ( // Get the variable data and attributes // VariableDataSize = VariableDataBufferSize; - Status = gRT->GetVariable ( - VariableName, - &VendorGuid, - &VariableAttributes, - &VariableDataSize, - VariableData - ); + Status = gRT->GetVariable ( + VariableName, + &VendorGuid, + &VariableAttributes, + &VariableDataSize, + VariableData + ); if (Status == EFI_BUFFER_TOO_SMALL) { // // The currently allocated VariableData buffer is too small, @@ -599,14 +603,16 @@ SerializeVariablesIterateSystemVariables ( // if (VariableDataBufferSize != 0) { FreePool (VariableData); - VariableData = NULL; + VariableData = NULL; VariableDataBufferSize = 0; } + VariableData = AllocatePool (VariableDataSize); if (VariableData == NULL) { Status = EFI_OUT_OF_RESOURCES; break; } + VariableDataBufferSize = VariableDataSize; // @@ -620,6 +626,7 @@ SerializeVariablesIterateSystemVariables ( VariableData ); } + if (EFI_ERROR (Status)) { break; } @@ -627,18 +634,17 @@ SerializeVariablesIterateSystemVariables ( // // Run the callback function // - Status = (*CallbackFunction) ( - Context, - VariableName, - &VendorGuid, - VariableAttributes, - VariableDataSize, - VariableData - ); + Status = (*CallbackFunction)( + Context, + VariableName, + &VendorGuid, + VariableAttributes, + VariableDataSize, + VariableData + ); if (EFI_ERROR (Status)) { break; } - } if (VariableName != NULL) { @@ -652,7 +658,6 @@ SerializeVariablesIterateSystemVariables ( return Status; } - /** Iterates all variables found in the variable serialization instance @@ -671,12 +676,12 @@ SerializeVariablesIterateSystemVariables ( RETURN_STATUS EFIAPI SerializeVariablesIterateInstanceVariables ( - IN EFI_HANDLE Handle, - IN VARIABLE_SERIALIZATION_ITERATION_CALLBACK CallbackFunction, - IN VOID *Context + IN EFI_HANDLE Handle, + IN VARIABLE_SERIALIZATION_ITERATION_CALLBACK CallbackFunction, + IN VOID *Context ) { - SV_INSTANCE *Instance; + SV_INSTANCE *Instance; Instance = SV_FROM_HANDLE (Handle); @@ -692,7 +697,6 @@ SerializeVariablesIterateInstanceVariables ( } } - /** Sets all variables found in the variable serialization instance @@ -708,7 +712,7 @@ SerializeVariablesIterateInstanceVariables ( RETURN_STATUS EFIAPI SerializeVariablesSetSerializedVariables ( - IN EFI_HANDLE Handle + IN EFI_HANDLE Handle ) { return SerializeVariablesIterateInstanceVariables ( @@ -718,7 +722,6 @@ SerializeVariablesSetSerializedVariables ( ); } - /** Adds a variable to the variable serialization instance @@ -740,12 +743,12 @@ SerializeVariablesSetSerializedVariables ( RETURN_STATUS EFIAPI SerializeVariablesAddVariable ( - IN EFI_HANDLE Handle, - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN UINT32 Attributes, - IN UINTN DataSize, - IN VOID *Data + IN EFI_HANDLE Handle, + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + IN UINT32 Attributes, + IN UINTN DataSize, + IN VOID *Data ) { RETURN_STATUS Status; @@ -757,10 +760,11 @@ SerializeVariablesAddVariable ( Instance = SV_FROM_HANDLE (Handle); if ((Instance->Signature != SV_SIGNATURE) || - (VariableName == NULL) || (VendorGuid == NULL) || (Data == NULL)) { + (VariableName == NULL) || (VendorGuid == NULL) || (Data == NULL)) + { } - SerializedNameSize = (UINT32) StrSize (VariableName); + SerializedNameSize = (UINT32)StrSize (VariableName); SerializedSize = sizeof (SerializedNameSize) + @@ -781,28 +785,28 @@ SerializeVariablesAddVariable ( // // Add name size (UINT32) // - AppendToBuffer (Instance, (VOID*) &SerializedNameSize, sizeof (SerializedNameSize)); + AppendToBuffer (Instance, (VOID *)&SerializedNameSize, sizeof (SerializedNameSize)); // // Add variable unicode name string // - AppendToBuffer (Instance, (VOID*) VariableName, SerializedNameSize); + AppendToBuffer (Instance, (VOID *)VariableName, SerializedNameSize); // // Add variable GUID // - AppendToBuffer (Instance, (VOID*) VendorGuid, sizeof (*VendorGuid)); + AppendToBuffer (Instance, (VOID *)VendorGuid, sizeof (*VendorGuid)); // // Add variable attributes // - AppendToBuffer (Instance, (VOID*) &Attributes, sizeof (Attributes)); + AppendToBuffer (Instance, (VOID *)&Attributes, sizeof (Attributes)); // // Add variable data size (UINT32) // - SerializedDataSize = (UINT32) DataSize; - AppendToBuffer (Instance, (VOID*) &SerializedDataSize, sizeof (SerializedDataSize)); + SerializedDataSize = (UINT32)DataSize; + AppendToBuffer (Instance, (VOID *)&SerializedDataSize, sizeof (SerializedDataSize)); // // Add variable data @@ -812,7 +816,6 @@ SerializeVariablesAddVariable ( return RETURN_SUCCESS; } - /** Serializes the variables known to this instance into the provided buffer. @@ -839,12 +842,12 @@ SerializeVariablesAddVariable ( RETURN_STATUS EFIAPI SerializeVariablesToBuffer ( - IN EFI_HANDLE Handle, - OUT VOID *Buffer, - IN OUT UINTN *Size + IN EFI_HANDLE Handle, + OUT VOID *Buffer, + IN OUT UINTN *Size ) { - SV_INSTANCE *Instance; + SV_INSTANCE *Instance; Instance = SV_FROM_HANDLE (Handle); @@ -866,4 +869,3 @@ SerializeVariablesToBuffer ( return RETURN_SUCCESS; } - diff --git a/OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.h b/OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.h index 966fab77b2..7afa74ff6f 100644 --- a/OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.h +++ b/OvmfPkg/Library/SerializeVariablesLib/SerializeVariablesLib.h @@ -19,15 +19,14 @@ #include #include -#define SV_FROM_HANDLE(a) CR (a, SV_INSTANCE, Signature, SV_SIGNATURE) -#define SV_SIGNATURE SIGNATURE_32 ('S', 'V', 'A', 'R') +#define SV_FROM_HANDLE(a) CR (a, SV_INSTANCE, Signature, SV_SIGNATURE) +#define SV_SIGNATURE SIGNATURE_32 ('S', 'V', 'A', 'R') typedef struct { - UINT32 Signature; - VOID *BufferPtr; - UINTN BufferSize; - UINTN DataSize; + UINT32 Signature; + VOID *BufferPtr; + UINTN BufferSize; + UINTN DataSize; } SV_INSTANCE; #endif - diff --git a/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c b/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c index 4d2c23cfb3..69c2d36400 100644 --- a/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c +++ b/OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.c @@ -20,8 +20,8 @@ #include typedef union { - SMBIOS_TABLE_ENTRY_POINT V2; - SMBIOS_TABLE_3_0_ENTRY_POINT V3; + SMBIOS_TABLE_ENTRY_POINT V2; + SMBIOS_TABLE_3_0_ENTRY_POINT V3; } QEMU_SMBIOS_ANCHOR; RETURN_STATUS @@ -30,11 +30,11 @@ DetectSmbiosVersion ( VOID ) { - FIRMWARE_CONFIG_ITEM Anchor, Tables; - UINTN AnchorSize, TablesSize; - QEMU_SMBIOS_ANCHOR QemuAnchor; - UINT16 SmbiosVersion; - RETURN_STATUS PcdStatus; + FIRMWARE_CONFIG_ITEM Anchor, Tables; + UINTN AnchorSize, TablesSize; + QEMU_SMBIOS_ANCHOR QemuAnchor; + UINT16 SmbiosVersion; + RETURN_STATUS PcdStatus; if (PcdGetBool (PcdQemuSmbiosValidated)) { // @@ -45,53 +45,76 @@ DetectSmbiosVersion ( return RETURN_SUCCESS; } - if (RETURN_ERROR (QemuFwCfgFindFile ( - "etc/smbios/smbios-anchor", &Anchor, &AnchorSize)) || - RETURN_ERROR (QemuFwCfgFindFile ( - "etc/smbios/smbios-tables", &Tables, &TablesSize)) || - TablesSize == 0) { + if (RETURN_ERROR ( + QemuFwCfgFindFile ( + "etc/smbios/smbios-anchor", + &Anchor, + &AnchorSize + ) + ) || + RETURN_ERROR ( + QemuFwCfgFindFile ( + "etc/smbios/smbios-tables", + &Tables, + &TablesSize + ) + ) || + (TablesSize == 0)) + { return RETURN_SUCCESS; } QemuFwCfgSelectItem (Anchor); switch (AnchorSize) { - case sizeof QemuAnchor.V2: - QemuFwCfgReadBytes (AnchorSize, &QemuAnchor); - - if (QemuAnchor.V2.MajorVersion != 2 || - QemuAnchor.V2.TableLength != TablesSize || - CompareMem (QemuAnchor.V2.AnchorString, "_SM_", 4) != 0 || - CompareMem (QemuAnchor.V2.IntermediateAnchorString, "_DMI_", 5) != 0) { - return RETURN_SUCCESS; - } - SmbiosVersion = (UINT16)(QemuAnchor.V2.MajorVersion << 8 | - QemuAnchor.V2.MinorVersion); - break; - - case sizeof QemuAnchor.V3: - QemuFwCfgReadBytes (AnchorSize, &QemuAnchor); - - if (QemuAnchor.V3.MajorVersion != 3 || - QemuAnchor.V3.TableMaximumSize != TablesSize || - CompareMem (QemuAnchor.V3.AnchorString, "_SM3_", 5) != 0) { + case sizeof QemuAnchor.V2: + QemuFwCfgReadBytes (AnchorSize, &QemuAnchor); + + if ((QemuAnchor.V2.MajorVersion != 2) || + (QemuAnchor.V2.TableLength != TablesSize) || + (CompareMem (QemuAnchor.V2.AnchorString, "_SM_", 4) != 0) || + (CompareMem (QemuAnchor.V2.IntermediateAnchorString, "_DMI_", 5) != 0)) + { + return RETURN_SUCCESS; + } + + SmbiosVersion = (UINT16)(QemuAnchor.V2.MajorVersion << 8 | + QemuAnchor.V2.MinorVersion); + break; + + case sizeof QemuAnchor.V3: + QemuFwCfgReadBytes (AnchorSize, &QemuAnchor); + + if ((QemuAnchor.V3.MajorVersion != 3) || + (QemuAnchor.V3.TableMaximumSize != TablesSize) || + (CompareMem (QemuAnchor.V3.AnchorString, "_SM3_", 5) != 0)) + { + return RETURN_SUCCESS; + } + + SmbiosVersion = (UINT16)(QemuAnchor.V3.MajorVersion << 8 | + QemuAnchor.V3.MinorVersion); + + DEBUG (( + DEBUG_INFO, + "%a: SMBIOS 3.x DocRev from QEMU: 0x%02x\n", + __FUNCTION__, + QemuAnchor.V3.DocRev + )); + PcdStatus = PcdSet8S (PcdSmbiosDocRev, QemuAnchor.V3.DocRev); + ASSERT_RETURN_ERROR (PcdStatus); + break; + + default: return RETURN_SUCCESS; - } - SmbiosVersion = (UINT16)(QemuAnchor.V3.MajorVersion << 8 | - QemuAnchor.V3.MinorVersion); - - DEBUG ((DEBUG_INFO, "%a: SMBIOS 3.x DocRev from QEMU: 0x%02x\n", - __FUNCTION__, QemuAnchor.V3.DocRev)); - PcdStatus = PcdSet8S (PcdSmbiosDocRev, QemuAnchor.V3.DocRev); - ASSERT_RETURN_ERROR (PcdStatus); - break; - - default: - return RETURN_SUCCESS; } - DEBUG ((DEBUG_INFO, "%a: SMBIOS version from QEMU: 0x%04x\n", __FUNCTION__, - SmbiosVersion)); + DEBUG (( + DEBUG_INFO, + "%a: SMBIOS version from QEMU: 0x%04x\n", + __FUNCTION__, + SmbiosVersion + )); PcdStatus = PcdSet16S (PcdSmbiosVersion, SmbiosVersion); ASSERT_RETURN_ERROR (PcdStatus); diff --git a/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c b/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c index c7cc5b0389..9297cc5fa9 100644 --- a/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c +++ b/OvmfPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.c @@ -25,7 +25,7 @@ // // EFER register LMA bit // -#define LMA BIT10 +#define LMA BIT10 /** The constructor function @@ -88,9 +88,9 @@ SmmCpuFeaturesInitializeProcessor ( // Configure SMBASE. // CpuState = (QEMU_SMRAM_SAVE_STATE_MAP *)(UINTN)( - SMM_DEFAULT_SMBASE + - SMRAM_SAVE_STATE_MAP_OFFSET - ); + SMM_DEFAULT_SMBASE + + SMRAM_SAVE_STATE_MAP_OFFSET + ); if ((CpuState->x86.SMMRevId & 0xFFFF) == 0) { CpuState->x86.SMBASE = (UINT32)CpuHotPlugData->SmBase[CpuIndex]; } else { @@ -142,13 +142,13 @@ SmmCpuFeaturesHookReturnFromSmm ( IN UINT64 NewInstructionPointer ) { - UINT64 OriginalInstructionPointer; - QEMU_SMRAM_SAVE_STATE_MAP *CpuSaveState; + UINT64 OriginalInstructionPointer; + QEMU_SMRAM_SAVE_STATE_MAP *CpuSaveState; CpuSaveState = (QEMU_SMRAM_SAVE_STATE_MAP *)CpuState; if ((CpuSaveState->x86.SMMRevId & 0xFFFF) == 0) { OriginalInstructionPointer = (UINT64)CpuSaveState->x86._EIP; - CpuSaveState->x86._EIP = (UINT32)NewInstructionPointer; + CpuSaveState->x86._EIP = (UINT32)NewInstructionPointer; // // Clear the auto HALT restart flag so the RSM instruction returns // program control to the instruction following the HLT instruction. @@ -163,6 +163,7 @@ SmmCpuFeaturesHookReturnFromSmm ( } else { CpuSaveState->x64._RIP = (UINT32)NewInstructionPointer; } + // // Clear the auto HALT restart flag so the RSM instruction returns // program control to the instruction following the HLT instruction. @@ -171,10 +172,11 @@ SmmCpuFeaturesHookReturnFromSmm ( CpuSaveState->x64.AutoHALTRestart &= ~BIT0; } } + return OriginalInstructionPointer; } -STATIC CPU_HOT_EJECT_DATA *mCpuHotEjectData = NULL; +STATIC CPU_HOT_EJECT_DATA *mCpuHotEjectData = NULL; /** Initialize mCpuHotEjectData if PcdCpuMaxLogicalProcessorNumber > 1. @@ -208,7 +210,8 @@ InitCpuHotEjectData ( if (RETURN_ERROR (SafeUintnMult (MaxNumberOfCpus, sizeof (UINT64), &Size)) || RETURN_ERROR (SafeUintnAdd (Size, sizeof (*mCpuHotEjectData), &Size)) || - RETURN_ERROR (SafeUintnAdd (Size, sizeof (UINT64) - 1, &Size))) { + RETURN_ERROR (SafeUintnAdd (Size, sizeof (UINT64) - 1, &Size))) + { DEBUG ((DEBUG_ERROR, "%a: invalid CPU_HOT_EJECT_DATA\n", __FUNCTION__)); goto Fatal; } @@ -219,11 +222,13 @@ InitCpuHotEjectData ( goto Fatal; } - mCpuHotEjectData->Handler = NULL; + mCpuHotEjectData->Handler = NULL; mCpuHotEjectData->ArrayLength = MaxNumberOfCpus; - mCpuHotEjectData->QemuSelectorMap = ALIGN_POINTER (mCpuHotEjectData + 1, - sizeof (UINT64)); + mCpuHotEjectData->QemuSelectorMap = ALIGN_POINTER ( + mCpuHotEjectData + 1, + sizeof (UINT64) + ); // // We use mCpuHotEjectData->QemuSelectorMap to map // ProcessorNum -> QemuSelector. Initialize to invalid values. @@ -235,8 +240,10 @@ InitCpuHotEjectData ( // // Expose address of CPU Hot eject Data structure // - PcdStatus = PcdSet64S (PcdCpuHotEjectDataAddress, - (UINTN)(VOID *)mCpuHotEjectData); + PcdStatus = PcdSet64S ( + PcdCpuHotEjectDataAddress, + (UINTN)(VOID *)mCpuHotEjectData + ); ASSERT_RETURN_ERROR (PcdStatus); return; @@ -258,10 +265,9 @@ SmmCpuFeaturesSmmRelocationComplete ( VOID ) { - EFI_STATUS Status; - UINTN MapPagesBase; - UINTN MapPagesCount; - + EFI_STATUS Status; + UINTN MapPagesBase; + UINTN MapPagesCount; InitCpuHotEjectData (); @@ -286,8 +292,12 @@ SmmCpuFeaturesSmmRelocationComplete ( MapPagesCount // NumPages ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: MemEncryptSevSetPageEncMask(): %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: MemEncryptSevSetPageEncMask(): %r\n", + __FUNCTION__, + Status + )); ASSERT (FALSE); CpuDeadLoop (); } @@ -458,7 +468,7 @@ SmmCpuFeaturesRendezvousExit ( // if (mCpuHotEjectData != NULL) { - CPU_HOT_EJECT_HANDLER Handler; + CPU_HOT_EJECT_HANDLER Handler; // // As the comment above mentions, mCpuHotEjectData->Handler might be @@ -477,7 +487,7 @@ SmmCpuFeaturesRendezvousExit ( // ordered-after the AllCpusInSync loop by using a MemoryFence() with // acquire semantics. // - MemoryFence(); + MemoryFence (); Handler = mCpuHotEjectData->Handler; @@ -564,21 +574,21 @@ SmmCpuFeaturesSetSmmRegister ( /// Macro used to simplify the lookup table entries of type /// CPU_SMM_SAVE_STATE_LOOKUP_ENTRY /// -#define SMM_CPU_OFFSET(Field) OFFSET_OF (QEMU_SMRAM_SAVE_STATE_MAP, Field) +#define SMM_CPU_OFFSET(Field) OFFSET_OF (QEMU_SMRAM_SAVE_STATE_MAP, Field) /// /// Macro used to simplify the lookup table entries of type /// CPU_SMM_SAVE_STATE_REGISTER_RANGE /// -#define SMM_REGISTER_RANGE(Start, End) { Start, End, End - Start + 1 } +#define SMM_REGISTER_RANGE(Start, End) { Start, End, End - Start + 1 } /// /// Structure used to describe a range of registers /// typedef struct { - EFI_SMM_SAVE_STATE_REGISTER Start; - EFI_SMM_SAVE_STATE_REGISTER End; - UINTN Length; + EFI_SMM_SAVE_STATE_REGISTER Start; + EFI_SMM_SAVE_STATE_REGISTER End; + UINTN Length; } CPU_SMM_SAVE_STATE_REGISTER_RANGE; /// @@ -586,22 +596,22 @@ typedef struct { /// associated with each supported EFI_SMM_SAVE_STATE_REGISTER value /// -#define SMM_SAVE_STATE_REGISTER_FIRST_INDEX 1 +#define SMM_SAVE_STATE_REGISTER_FIRST_INDEX 1 typedef struct { - UINT8 Width32; - UINT8 Width64; - UINT16 Offset32; - UINT16 Offset64Lo; - UINT16 Offset64Hi; - BOOLEAN Writeable; + UINT8 Width32; + UINT8 Width64; + UINT16 Offset32; + UINT16 Offset64Lo; + UINT16 Offset64Hi; + BOOLEAN Writeable; } CPU_SMM_SAVE_STATE_LOOKUP_ENTRY; /// /// Table used by GetRegisterIndex() to convert an EFI_SMM_SAVE_STATE_REGISTER /// value to an index into a table of type CPU_SMM_SAVE_STATE_LOOKUP_ENTRY /// -STATIC CONST CPU_SMM_SAVE_STATE_REGISTER_RANGE mSmmCpuRegisterRanges[] = { +STATIC CONST CPU_SMM_SAVE_STATE_REGISTER_RANGE mSmmCpuRegisterRanges[] = { SMM_REGISTER_RANGE ( EFI_SMM_SAVE_STATE_REGISTER_GDTBASE, EFI_SMM_SAVE_STATE_REGISTER_LDTINFO @@ -614,14 +624,14 @@ STATIC CONST CPU_SMM_SAVE_STATE_REGISTER_RANGE mSmmCpuRegisterRanges[] = { EFI_SMM_SAVE_STATE_REGISTER_RFLAGS, EFI_SMM_SAVE_STATE_REGISTER_CR4 ), - { (EFI_SMM_SAVE_STATE_REGISTER)0, (EFI_SMM_SAVE_STATE_REGISTER)0, 0 } + { (EFI_SMM_SAVE_STATE_REGISTER)0, (EFI_SMM_SAVE_STATE_REGISTER)0,0 } }; /// /// Lookup table used to retrieve the widths and offsets associated with each /// supported EFI_SMM_SAVE_STATE_REGISTER value /// -STATIC CONST CPU_SMM_SAVE_STATE_LOOKUP_ENTRY mSmmCpuWidthOffset[] = { +STATIC CONST CPU_SMM_SAVE_STATE_LOOKUP_ENTRY mSmmCpuWidthOffset[] = { { 0, // Width32 0, // Width64 @@ -1001,13 +1011,17 @@ GetRegisterIndex ( for (Index = 0, Offset = SMM_SAVE_STATE_REGISTER_FIRST_INDEX; mSmmCpuRegisterRanges[Index].Length != 0; - Index++) { - if (Register >= mSmmCpuRegisterRanges[Index].Start && - Register <= mSmmCpuRegisterRanges[Index].End) { + Index++) + { + if ((Register >= mSmmCpuRegisterRanges[Index].Start) && + (Register <= mSmmCpuRegisterRanges[Index].End)) + { return Register - mSmmCpuRegisterRanges[Index].Start + Offset; } + Offset += mSmmCpuRegisterRanges[Index].Length; } + return 0; } @@ -1037,10 +1051,10 @@ GetRegisterIndex ( STATIC EFI_STATUS ReadSaveStateRegisterByIndex ( - IN UINTN CpuIndex, - IN UINTN RegisterIndex, - IN UINTN Width, - OUT VOID *Buffer + IN UINTN CpuIndex, + IN UINTN RegisterIndex, + IN UINTN Width, + OUT VOID *Buffer ) { QEMU_SMRAM_SAVE_STATE_MAP *CpuSaveState; @@ -1067,7 +1081,7 @@ ReadSaveStateRegisterByIndex ( // // Write return buffer // - ASSERT(CpuSaveState != NULL); + ASSERT (CpuSaveState != NULL); CopyMem ( Buffer, (UINT8 *)CpuSaveState + mSmmCpuWidthOffset[RegisterIndex].Offset32, @@ -1109,6 +1123,7 @@ ReadSaveStateRegisterByIndex ( ); } } + return EFI_SUCCESS; } @@ -1139,7 +1154,7 @@ SmmCpuFeaturesReadSaveStateRegister ( OUT VOID *Buffer ) { - UINTN RegisterIndex; + UINTN RegisterIndex; QEMU_SMRAM_SAVE_STATE_MAP *CpuSaveState; // @@ -1215,7 +1230,7 @@ SmmCpuFeaturesWriteSaveStateRegister ( IN CONST VOID *Buffer ) { - UINTN RegisterIndex; + UINTN RegisterIndex; QEMU_SMRAM_SAVE_STATE_MAP *CpuSaveState; // @@ -1272,6 +1287,7 @@ SmmCpuFeaturesWriteSaveStateRegister ( if (Width > mSmmCpuWidthOffset[RegisterIndex].Width32) { return EFI_INVALID_PARAMETER; } + // // Write SMM State register // @@ -1317,6 +1333,7 @@ SmmCpuFeaturesWriteSaveStateRegister ( ); } } + return EFI_SUCCESS; } @@ -1357,9 +1374,8 @@ SmmCpuFeaturesCompleteSmmReadyToLock ( VOID * EFIAPI SmmCpuFeaturesAllocatePageTableMemory ( - IN UINTN Pages + IN UINTN Pages ) { return NULL; } - diff --git a/OvmfPkg/Library/SmmCpuPlatformHookLibQemu/SmmCpuPlatformHookLibQemu.c b/OvmfPkg/Library/SmmCpuPlatformHookLibQemu/SmmCpuPlatformHookLibQemu.c index c88a95c6de..4df057101e 100644 --- a/OvmfPkg/Library/SmmCpuPlatformHookLibQemu/SmmCpuPlatformHookLibQemu.c +++ b/OvmfPkg/Library/SmmCpuPlatformHookLibQemu/SmmCpuPlatformHookLibQemu.c @@ -75,13 +75,13 @@ ClearTopLevelSmiStatus ( EFI_STATUS EFIAPI PlatformSmmBspElection ( - OUT BOOLEAN *IsBsp + OUT BOOLEAN *IsBsp ) { - MSR_IA32_APIC_BASE_REGISTER ApicBaseMsr; + MSR_IA32_APIC_BASE_REGISTER ApicBaseMsr; ApicBaseMsr.Uint64 = AsmReadMsr64 (MSR_IA32_APIC_BASE); - *IsBsp = (BOOLEAN)(ApicBaseMsr.Bits.BSP == 1); + *IsBsp = (BOOLEAN)(ApicBaseMsr.Bits.BSP == 1); return EFI_SUCCESS; } @@ -105,10 +105,10 @@ PlatformSmmBspElection ( EFI_STATUS EFIAPI GetPlatformPageTableAttribute ( - IN UINT64 Address, - IN OUT SMM_PAGE_SIZE_TYPE *PageSize, - IN OUT UINTN *NumOfPages, - IN OUT UINTN *PageAttribute + IN UINT64 Address, + IN OUT SMM_PAGE_SIZE_TYPE *PageSize, + IN OUT UINTN *NumOfPages, + IN OUT UINTN *PageAttribute ) { return EFI_UNSUPPORTED; diff --git a/OvmfPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c b/OvmfPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c index 52455dd350..f664256c21 100644 --- a/OvmfPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c +++ b/OvmfPkg/Library/Tcg2PhysicalPresenceLibNull/DxeTcg2PhysicalPresenceLib.c @@ -12,7 +12,7 @@ VOID EFIAPI Tcg2PhysicalPresenceLibProcessRequest ( - IN TPM2B_AUTH *PlatformAuth OPTIONAL + IN TPM2B_AUTH *PlatformAuth OPTIONAL ) { // diff --git a/OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu/DxeTcg2PhysicalPresenceLib.c b/OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu/DxeTcg2PhysicalPresenceLib.c index 80aad5a373..4038020251 100644 --- a/OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu/DxeTcg2PhysicalPresenceLib.c +++ b/OvmfPkg/Library/Tcg2PhysicalPresenceLibQemu/DxeTcg2PhysicalPresenceLib.c @@ -36,14 +36,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include -#define CONFIRM_BUFFER_SIZE 4096 +#define CONFIRM_BUFFER_SIZE 4096 -EFI_HII_HANDLE mTcg2PpStringPackHandle; +EFI_HII_HANDLE mTcg2PpStringPackHandle; -#define TPM_PPI_FLAGS (QEMU_TPM_PPI_FUNC_ALLOWED_USR_REQ) - -STATIC volatile QEMU_TPM_PPI *mPpi; +#define TPM_PPI_FLAGS (QEMU_TPM_PPI_FUNC_ALLOWED_USR_REQ) +STATIC volatile QEMU_TPM_PPI *mPpi; /** Reads QEMU PPI config from fw_cfg. @@ -56,12 +55,12 @@ STATIC volatile QEMU_TPM_PPI *mPpi; STATIC EFI_STATUS QemuTpmReadConfig ( - OUT QEMU_FWCFG_TPM_CONFIG *Config + OUT QEMU_FWCFG_TPM_CONFIG *Config ) { - EFI_STATUS Status; - FIRMWARE_CONFIG_ITEM FwCfgItem; - UINTN FwCfgSize; + EFI_STATUS Status; + FIRMWARE_CONFIG_ITEM FwCfgItem; + UINTN FwCfgSize; Status = QemuFwCfgFindFile ("etc/tpm/config", &FwCfgItem, &FwCfgSize); if (EFI_ERROR (Status)) { @@ -77,7 +76,6 @@ QemuTpmReadConfig ( return EFI_SUCCESS; } - /** Initializes QEMU PPI memory region. @@ -90,11 +88,11 @@ QemuTpmInitPPI ( VOID ) { - EFI_STATUS Status; - QEMU_FWCFG_TPM_CONFIG Config; - EFI_PHYSICAL_ADDRESS PpiAddress64; - EFI_GCD_MEMORY_SPACE_DESCRIPTOR Descriptor; - UINTN Idx; + EFI_STATUS Status; + QEMU_FWCFG_TPM_CONFIG Config; + EFI_PHYSICAL_ADDRESS PpiAddress64; + EFI_GCD_MEMORY_SPACE_DESCRIPTOR Descriptor; + UINTN Idx; if (mPpi != NULL) { return EFI_SUCCESS; @@ -114,19 +112,22 @@ QemuTpmInitPPI ( PpiAddress64 = (UINTN)mPpi; if ((PpiAddress64 & ~(UINT64)EFI_PAGE_MASK) != - ((PpiAddress64 + sizeof *mPpi - 1) & ~(UINT64)EFI_PAGE_MASK)) { + ((PpiAddress64 + sizeof *mPpi - 1) & ~(UINT64)EFI_PAGE_MASK)) + { DEBUG ((DEBUG_ERROR, "[TPM2PP] mPpi crosses a page boundary\n")); goto InvalidPpiAddress; } Status = gDS->GetMemorySpaceDescriptor (PpiAddress64, &Descriptor); - if (EFI_ERROR (Status) && Status != EFI_NOT_FOUND) { + if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) { ASSERT_EFI_ERROR (Status); goto InvalidPpiAddress; } + if (!EFI_ERROR (Status) && - (Descriptor.GcdMemoryType != EfiGcdMemoryTypeMemoryMappedIo && - Descriptor.GcdMemoryType != EfiGcdMemoryTypeNonExistent)) { + ((Descriptor.GcdMemoryType != EfiGcdMemoryTypeMemoryMappedIo) && + (Descriptor.GcdMemoryType != EfiGcdMemoryTypeNonExistent))) + { DEBUG ((DEBUG_ERROR, "[TPM2PP] mPpi has an invalid memory type\n")); goto InvalidPpiAddress; } @@ -134,24 +135,25 @@ QemuTpmInitPPI ( for (Idx = 0; Idx < ARRAY_SIZE (mPpi->Func); Idx++) { mPpi->Func[Idx] = 0; } + if (Config.TpmVersion == QEMU_TPM_VERSION_2) { - mPpi->Func[TCG2_PHYSICAL_PRESENCE_NO_ACTION] = TPM_PPI_FLAGS; - mPpi->Func[TCG2_PHYSICAL_PRESENCE_CLEAR] = TPM_PPI_FLAGS; - mPpi->Func[TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR] = TPM_PPI_FLAGS; - mPpi->Func[TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR_2] = TPM_PPI_FLAGS; - mPpi->Func[TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR_3] = TPM_PPI_FLAGS; - mPpi->Func[TCG2_PHYSICAL_PRESENCE_SET_PCR_BANKS] = TPM_PPI_FLAGS; - mPpi->Func[TCG2_PHYSICAL_PRESENCE_CHANGE_EPS] = TPM_PPI_FLAGS; - mPpi->Func[TCG2_PHYSICAL_PRESENCE_LOG_ALL_DIGESTS] = TPM_PPI_FLAGS; - mPpi->Func[TCG2_PHYSICAL_PRESENCE_ENABLE_BLOCK_SID] = TPM_PPI_FLAGS; + mPpi->Func[TCG2_PHYSICAL_PRESENCE_NO_ACTION] = TPM_PPI_FLAGS; + mPpi->Func[TCG2_PHYSICAL_PRESENCE_CLEAR] = TPM_PPI_FLAGS; + mPpi->Func[TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR] = TPM_PPI_FLAGS; + mPpi->Func[TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR_2] = TPM_PPI_FLAGS; + mPpi->Func[TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR_3] = TPM_PPI_FLAGS; + mPpi->Func[TCG2_PHYSICAL_PRESENCE_SET_PCR_BANKS] = TPM_PPI_FLAGS; + mPpi->Func[TCG2_PHYSICAL_PRESENCE_CHANGE_EPS] = TPM_PPI_FLAGS; + mPpi->Func[TCG2_PHYSICAL_PRESENCE_LOG_ALL_DIGESTS] = TPM_PPI_FLAGS; + mPpi->Func[TCG2_PHYSICAL_PRESENCE_ENABLE_BLOCK_SID] = TPM_PPI_FLAGS; mPpi->Func[TCG2_PHYSICAL_PRESENCE_DISABLE_BLOCK_SID] = TPM_PPI_FLAGS; } if (mPpi->In == 0) { - mPpi->In = 1; - mPpi->Request = TCG2_PHYSICAL_PRESENCE_NO_ACTION; + mPpi->In = 1; + mPpi->Request = TCG2_PHYSICAL_PRESENCE_NO_ACTION; mPpi->LastRequest = TCG2_PHYSICAL_PRESENCE_NO_ACTION; - mPpi->NextStep = TCG2_PHYSICAL_PRESENCE_NO_ACTION; + mPpi->NextStep = TCG2_PHYSICAL_PRESENCE_NO_ACTION; } return EFI_SUCCESS; @@ -161,7 +163,6 @@ InvalidPpiAddress: return EFI_PROTOCOL_ERROR; } - /** Get string by string id from HII Interface. @@ -174,13 +175,12 @@ InvalidPpiAddress: STATIC CHAR16 * Tcg2PhysicalPresenceGetStringById ( - IN EFI_STRING_ID Id + IN EFI_STRING_ID Id ) { return HiiGetString (mTcg2PpStringPackHandle, Id, NULL); } - /** Send ClearControl and Clear command to TPM. @@ -195,12 +195,12 @@ Tcg2PhysicalPresenceGetStringById ( EFI_STATUS EFIAPI Tpm2CommandClear ( - IN TPM2B_AUTH *PlatformAuth OPTIONAL + IN TPM2B_AUTH *PlatformAuth OPTIONAL ) { - EFI_STATUS Status; - TPMS_AUTH_COMMAND *AuthSession; - TPMS_AUTH_COMMAND LocalAuthSession; + EFI_STATUS Status; + TPMS_AUTH_COMMAND *AuthSession; + TPMS_AUTH_COMMAND LocalAuthSession; if (PlatformAuth == NULL) { AuthSession = NULL; @@ -208,7 +208,7 @@ Tpm2CommandClear ( AuthSession = &LocalAuthSession; ZeroMem (&LocalAuthSession, sizeof (LocalAuthSession)); LocalAuthSession.sessionHandle = TPM_RS_PW; - LocalAuthSession.hmac.size = PlatformAuth->size; + LocalAuthSession.hmac.size = PlatformAuth->size; CopyMem (LocalAuthSession.hmac.buffer, PlatformAuth->buffer, PlatformAuth->size); } @@ -218,6 +218,7 @@ Tpm2CommandClear ( if (EFI_ERROR (Status)) { goto Done; } + DEBUG ((DEBUG_INFO, "Tpm2Clear ... \n")); Status = Tpm2Clear (TPM_RH_PLATFORM, AuthSession); DEBUG ((DEBUG_INFO, "Tpm2Clear - %r\n", Status)); @@ -227,7 +228,6 @@ Done: return Status; } - /** Change EPS. @@ -238,12 +238,12 @@ Done: STATIC EFI_STATUS Tpm2CommandChangeEps ( - IN TPM2B_AUTH *PlatformAuth OPTIONAL + IN TPM2B_AUTH *PlatformAuth OPTIONAL ) { - EFI_STATUS Status; - TPMS_AUTH_COMMAND *AuthSession; - TPMS_AUTH_COMMAND LocalAuthSession; + EFI_STATUS Status; + TPMS_AUTH_COMMAND *AuthSession; + TPMS_AUTH_COMMAND LocalAuthSession; if (PlatformAuth == NULL) { AuthSession = NULL; @@ -251,18 +251,17 @@ Tpm2CommandChangeEps ( AuthSession = &LocalAuthSession; ZeroMem (&LocalAuthSession, sizeof (LocalAuthSession)); LocalAuthSession.sessionHandle = TPM_RS_PW; - LocalAuthSession.hmac.size = PlatformAuth->size; + LocalAuthSession.hmac.size = PlatformAuth->size; CopyMem (LocalAuthSession.hmac.buffer, PlatformAuth->buffer, PlatformAuth->size); } Status = Tpm2ChangeEPS (TPM_RH_PLATFORM, AuthSession); DEBUG ((DEBUG_INFO, "Tpm2ChangeEPS - %r\n", Status)); - ZeroMem (&LocalAuthSession.hmac, sizeof(LocalAuthSession.hmac)); + ZeroMem (&LocalAuthSession.hmac, sizeof (LocalAuthSession.hmac)); return Status; } - /** Execute physical presence operation requested by the OS. @@ -278,14 +277,14 @@ Tpm2CommandChangeEps ( STATIC UINT32 Tcg2ExecutePhysicalPresence ( - IN TPM2B_AUTH *PlatformAuth OPTIONAL, - IN UINT32 CommandCode, - IN UINT32 CommandParameter + IN TPM2B_AUTH *PlatformAuth OPTIONAL, + IN UINT32 CommandCode, + IN UINT32 CommandParameter ) { - EFI_STATUS Status; - EFI_TCG2_EVENT_ALGORITHM_BITMAP TpmHashAlgorithmBitmap; - UINT32 ActivePcrBanks; + EFI_STATUS Status; + EFI_TCG2_EVENT_ALGORITHM_BITMAP TpmHashAlgorithmBitmap; + UINT32 ActivePcrBanks; switch (CommandCode) { case TCG2_PHYSICAL_PRESENCE_CLEAR: @@ -309,8 +308,8 @@ Tcg2ExecutePhysicalPresence ( // Firmware has to ensure that at least one PCR banks is active. // If not, an error is returned and no action is taken. // - if (CommandParameter == 0 || (CommandParameter & (~TpmHashAlgorithmBitmap)) != 0) { - DEBUG((DEBUG_ERROR, "PCR banks %x to allocate are not supported by TPM. Skip operation\n", CommandParameter)); + if ((CommandParameter == 0) || ((CommandParameter & (~TpmHashAlgorithmBitmap)) != 0)) { + DEBUG ((DEBUG_ERROR, "PCR banks %x to allocate are not supported by TPM. Skip operation\n", CommandParameter)); return TCG_PP_OPERATION_RESPONSE_BIOS_FAILURE; } @@ -348,7 +347,6 @@ Tcg2ExecutePhysicalPresence ( } } - /** Read the specified key for user confirmation. @@ -361,12 +359,12 @@ Tcg2ExecutePhysicalPresence ( STATIC BOOLEAN Tcg2ReadUserKey ( - IN BOOLEAN CautionKey + IN BOOLEAN CautionKey ) { - EFI_STATUS Status; - EFI_INPUT_KEY Key; - UINT16 InputKey; + EFI_STATUS Status; + EFI_INPUT_KEY Key; + UINT16 InputKey; InputKey = 0; do { @@ -376,9 +374,11 @@ Tcg2ReadUserKey ( if (Key.ScanCode == SCAN_ESC) { InputKey = Key.ScanCode; } + if ((Key.ScanCode == SCAN_F10) && !CautionKey) { InputKey = Key.ScanCode; } + if ((Key.ScanCode == SCAN_F12) && CautionKey) { InputKey = Key.ScanCode; } @@ -392,7 +392,6 @@ Tcg2ReadUserKey ( return FALSE; } - /** Fill Buffer With BootHashAlg. @@ -414,35 +413,43 @@ Tcg2FillBufferWithBootHashAlg ( if (Buffer[0] != 0) { StrnCatS (Buffer, BufferSize / sizeof (CHAR16), L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1); } + StrnCatS (Buffer, BufferSize / sizeof (CHAR16), L"SHA1", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1); } + if ((BootHashAlg & EFI_TCG2_BOOT_HASH_ALG_SHA256) != 0) { if (Buffer[0] != 0) { StrnCatS (Buffer, BufferSize / sizeof (CHAR16), L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1); } + StrnCatS (Buffer, BufferSize / sizeof (CHAR16), L"SHA256", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1); } + if ((BootHashAlg & EFI_TCG2_BOOT_HASH_ALG_SHA384) != 0) { if (Buffer[0] != 0) { StrnCatS (Buffer, BufferSize / sizeof (CHAR16), L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1); } + StrnCatS (Buffer, BufferSize / sizeof (CHAR16), L"SHA384", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1); } + if ((BootHashAlg & EFI_TCG2_BOOT_HASH_ALG_SHA512) != 0) { if (Buffer[0] != 0) { StrnCatS (Buffer, BufferSize / sizeof (CHAR16), L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1); } + StrnCatS (Buffer, BufferSize / sizeof (CHAR16), L"SHA512", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1); } + if ((BootHashAlg & EFI_TCG2_BOOT_HASH_ALG_SM3_256) != 0) { if (Buffer[0] != 0) { StrnCatS (Buffer, BufferSize / sizeof (CHAR16), L", ", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1); } + StrnCatS (Buffer, BufferSize / sizeof (CHAR16), L"SM3_256", (BufferSize / sizeof (CHAR16)) - StrLen (Buffer) - 1); } } - /** Display the confirm text and get user confirmation. @@ -455,8 +462,8 @@ Tcg2FillBufferWithBootHashAlg ( STATIC BOOLEAN Tcg2UserConfirm ( - IN UINT32 TpmPpCommand, - IN UINT32 TpmPpCommandParameter + IN UINT32 TpmPpCommand, + IN UINT32 TpmPpCommandParameter ) { CHAR16 *ConfirmText; @@ -485,13 +492,12 @@ Tcg2UserConfirm ( ASSERT (mTcg2PpStringPackHandle != NULL); switch (TpmPpCommand) { - case TCG2_PHYSICAL_PRESENCE_CLEAR: case TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR: case TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR_2: case TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR_3: CautionKey = TRUE; - TmpStr2 = Tcg2PhysicalPresenceGetStringById (STRING_TOKEN (TPM_CLEAR)); + TmpStr2 = Tcg2PhysicalPresenceGetStringById (STRING_TOKEN (TPM_CLEAR)); TmpStr1 = Tcg2PhysicalPresenceGetStringById (STRING_TOKEN (TPM_HEAD_STR)); UnicodeSPrint (ConfirmText, BufSize, TmpStr1, TmpStr2); @@ -505,14 +511,14 @@ Tcg2UserConfirm ( break; case TCG2_PHYSICAL_PRESENCE_SET_PCR_BANKS: - Status = gBS->LocateProtocol (&gEfiTcg2ProtocolGuid, NULL, (VOID **) &Tcg2Protocol); + Status = gBS->LocateProtocol (&gEfiTcg2ProtocolGuid, NULL, (VOID **)&Tcg2Protocol); ASSERT_EFI_ERROR (Status); - ProtocolCapability.Size = sizeof(ProtocolCapability); - Status = Tcg2Protocol->GetCapability ( - Tcg2Protocol, - &ProtocolCapability - ); + ProtocolCapability.Size = sizeof (ProtocolCapability); + Status = Tcg2Protocol->GetCapability ( + Tcg2Protocol, + &ProtocolCapability + ); ASSERT_EFI_ERROR (Status); Status = Tcg2Protocol->GetActivePcrBanks ( @@ -522,7 +528,7 @@ Tcg2UserConfirm ( ASSERT_EFI_ERROR (Status); CautionKey = TRUE; - TmpStr2 = Tcg2PhysicalPresenceGetStringById (STRING_TOKEN (TPM_SET_PCR_BANKS)); + TmpStr2 = Tcg2PhysicalPresenceGetStringById (STRING_TOKEN (TPM_SET_PCR_BANKS)); TmpStr1 = Tcg2PhysicalPresenceGetStringById (STRING_TOKEN (TPM_HEAD_STR)); UnicodeSPrint (ConfirmText, BufSize, TmpStr1, TmpStr2); @@ -536,8 +542,8 @@ Tcg2UserConfirm ( StrnCatS (ConfirmText, BufSize / sizeof (CHAR16), TmpStr1, (BufSize / sizeof (CHAR16)) - StrLen (ConfirmText) - 1); FreePool (TmpStr1); - Tcg2FillBufferWithBootHashAlg (TempBuffer, sizeof(TempBuffer), TpmPpCommandParameter); - Tcg2FillBufferWithBootHashAlg (TempBuffer2, sizeof(TempBuffer2), CurrentPCRBanks); + Tcg2FillBufferWithBootHashAlg (TempBuffer, sizeof (TempBuffer), TpmPpCommandParameter); + Tcg2FillBufferWithBootHashAlg (TempBuffer2, sizeof (TempBuffer2), CurrentPCRBanks); TmpStr1 = AllocateZeroPool (BufSize); ASSERT (TmpStr1 != NULL); @@ -551,7 +557,7 @@ Tcg2UserConfirm ( case TCG2_PHYSICAL_PRESENCE_CHANGE_EPS: CautionKey = TRUE; - TmpStr2 = Tcg2PhysicalPresenceGetStringById (STRING_TOKEN (TPM_CHANGE_EPS)); + TmpStr2 = Tcg2PhysicalPresenceGetStringById (STRING_TOKEN (TPM_CHANGE_EPS)); TmpStr1 = Tcg2PhysicalPresenceGetStringById (STRING_TOKEN (TPM_HEAD_STR)); UnicodeSPrint (ConfirmText, BufSize, TmpStr1, TmpStr2); @@ -602,6 +608,7 @@ Tcg2UserConfirm ( } else { TmpStr1 = Tcg2PhysicalPresenceGetStringById (STRING_TOKEN (TPM_ACCEPT_KEY)); } + StrnCatS (ConfirmText, BufSize / sizeof (CHAR16), TmpStr1, (BufSize / sizeof (CHAR16)) - StrLen (ConfirmText) - 1); FreePool (TmpStr1); @@ -618,6 +625,7 @@ Tcg2UserConfirm ( } else { TmpStr1 = Tcg2PhysicalPresenceGetStringById (STRING_TOKEN (TCG_STORAGE_ACCEPT_KEY)); } + StrnCatS (ConfirmText, BufSize / sizeof (CHAR16), TmpStr1, (BufSize / sizeof (CHAR16)) - StrLen (ConfirmText) - 1); FreePool (TmpStr1); @@ -629,6 +637,7 @@ Tcg2UserConfirm ( TmpStr1 = Tcg2PhysicalPresenceGetStringById (STRING_TOKEN (TCG_STORAGE_REJECT_KEY)); } + BufSize -= StrSize (ConfirmText); UnicodeSPrint (ConfirmText + StrLen (ConfirmText), BufSize, TmpStr1, TmpStr2); @@ -650,7 +659,6 @@ Tcg2UserConfirm ( return FALSE; } - /** Check if there is a valid physical presence command request. Also updates parameter value to whether the requested physical presence command already confirmed by user @@ -667,11 +675,11 @@ Tcg2UserConfirm ( STATIC BOOLEAN Tcg2HaveValidTpmRequest ( - OUT BOOLEAN *RequestConfirmed + OUT BOOLEAN *RequestConfirmed ) { - EFI_TCG2_PROTOCOL *Tcg2Protocol; - EFI_STATUS Status; + EFI_TCG2_PROTOCOL *Tcg2Protocol; + EFI_STATUS Status; *RequestConfirmed = FALSE; @@ -679,7 +687,7 @@ Tcg2HaveValidTpmRequest ( // // Need TCG2 protocol. // - Status = gBS->LocateProtocol (&gEfiTcg2ProtocolGuid, NULL, (VOID **) &Tcg2Protocol); + Status = gBS->LocateProtocol (&gEfiTcg2ProtocolGuid, NULL, (VOID **)&Tcg2Protocol); if (EFI_ERROR (Status)) { return FALSE; } @@ -714,7 +722,6 @@ Tcg2HaveValidTpmRequest ( return TRUE; } - /** Check and execute the requested physical presence command. @@ -723,10 +730,10 @@ Tcg2HaveValidTpmRequest ( STATIC VOID Tcg2ExecutePendingTpmRequest ( - IN TPM2B_AUTH *PlatformAuth OPTIONAL + IN TPM2B_AUTH *PlatformAuth OPTIONAL ) { - BOOLEAN RequestConfirmed; + BOOLEAN RequestConfirmed; if (mPpi->Request == TCG2_PHYSICAL_PRESENCE_NO_ACTION) { // @@ -744,8 +751,9 @@ Tcg2ExecutePendingTpmRequest ( } else { mPpi->Response = TCG_PP_OPERATION_RESPONSE_BIOS_FAILURE; } - mPpi->LastRequest = mPpi->Request; - mPpi->Request = TCG2_PHYSICAL_PRESENCE_NO_ACTION; + + mPpi->LastRequest = mPpi->Request; + mPpi->Request = TCG2_PHYSICAL_PRESENCE_NO_ACTION; mPpi->RequestParameter = 0; return; } @@ -763,17 +771,17 @@ Tcg2ExecutePendingTpmRequest ( mPpi->Response = TCG_PP_OPERATION_RESPONSE_USER_ABORT; if (RequestConfirmed) { mPpi->Response = Tcg2ExecutePhysicalPresence ( - PlatformAuth, - mPpi->Request, - mPpi->RequestParameter - ); + PlatformAuth, + mPpi->Request, + mPpi->RequestParameter + ); } // // Clear request // - mPpi->LastRequest = mPpi->Request; - mPpi->Request = TCG2_PHYSICAL_PRESENCE_NO_ACTION; + mPpi->LastRequest = mPpi->Request; + mPpi->Request = TCG2_PHYSICAL_PRESENCE_NO_ACTION; mPpi->RequestParameter = 0; if (mPpi->Response == TCG_PP_OPERATION_RESPONSE_USER_ABORT) { @@ -784,24 +792,25 @@ Tcg2ExecutePendingTpmRequest ( // Reset system to make new TPM settings in effect // switch (mPpi->LastRequest) { - case TCG2_PHYSICAL_PRESENCE_CLEAR: - case TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR: - case TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR_2: - case TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR_3: - case TCG2_PHYSICAL_PRESENCE_SET_PCR_BANKS: - case TCG2_PHYSICAL_PRESENCE_CHANGE_EPS: - case TCG2_PHYSICAL_PRESENCE_LOG_ALL_DIGESTS: - break; - - case TCG2_PHYSICAL_PRESENCE_ENABLE_BLOCK_SID: - case TCG2_PHYSICAL_PRESENCE_DISABLE_BLOCK_SID: - break; - - default: - if (mPpi->Request != TCG2_PHYSICAL_PRESENCE_NO_ACTION) { + case TCG2_PHYSICAL_PRESENCE_CLEAR: + case TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR: + case TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR_2: + case TCG2_PHYSICAL_PRESENCE_ENABLE_CLEAR_3: + case TCG2_PHYSICAL_PRESENCE_SET_PCR_BANKS: + case TCG2_PHYSICAL_PRESENCE_CHANGE_EPS: + case TCG2_PHYSICAL_PRESENCE_LOG_ALL_DIGESTS: break; - } - return; + + case TCG2_PHYSICAL_PRESENCE_ENABLE_BLOCK_SID: + case TCG2_PHYSICAL_PRESENCE_DISABLE_BLOCK_SID: + break; + + default: + if (mPpi->Request != TCG2_PHYSICAL_PRESENCE_NO_ACTION) { + break; + } + + return; } Print (L"Rebooting system to make TPM2 settings in effect\n"); @@ -809,7 +818,6 @@ Tcg2ExecutePendingTpmRequest ( ASSERT (FALSE); } - /** Check and execute the pending TPM request. @@ -826,15 +834,15 @@ Tcg2ExecutePendingTpmRequest ( VOID EFIAPI Tcg2PhysicalPresenceLibProcessRequest ( - IN TPM2B_AUTH *PlatformAuth OPTIONAL + IN TPM2B_AUTH *PlatformAuth OPTIONAL ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = QemuTpmInitPPI (); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_INFO, "[TPM2PP] no PPI\n")); - return ; + return; } // @@ -842,14 +850,13 @@ Tcg2PhysicalPresenceLibProcessRequest ( // if (GetBootModeHob () == BOOT_ON_S4_RESUME) { DEBUG ((DEBUG_INFO, "S4 Resume, Skip TPM PP process!\n")); - return ; + return; } DEBUG ((DEBUG_INFO, "[TPM2PP] PPRequest=%x (PPRequestParameter=%x)\n", mPpi->Request, mPpi->RequestParameter)); Tcg2ExecutePendingTpmRequest (PlatformAuth); } - /** The handler for TPM physical presence function: Return TPM Operation Response to OS Environment. @@ -862,11 +869,11 @@ Tcg2PhysicalPresenceLibProcessRequest ( UINT32 EFIAPI Tcg2PhysicalPresenceLibReturnOperationResponseToOsFunction ( - OUT UINT32 *MostRecentRequest, - OUT UINT32 *Response + OUT UINT32 *MostRecentRequest, + OUT UINT32 *Response ) { - EFI_STATUS Status; + EFI_STATUS Status; DEBUG ((DEBUG_INFO, "[TPM2PP] ReturnOperationResponseToOsFunction\n")); @@ -884,7 +891,6 @@ Tcg2PhysicalPresenceLibReturnOperationResponseToOsFunction ( return TCG_PP_RETURN_TPM_OPERATION_RESPONSE_SUCCESS; } - /** The handler for TPM physical presence function: Submit TPM Operation Request to Pre-OS Environment and @@ -901,11 +907,11 @@ Tcg2PhysicalPresenceLibReturnOperationResponseToOsFunction ( UINT32 EFIAPI Tcg2PhysicalPresenceLibSubmitRequestToPreOSFunction ( - IN UINT32 OperationRequest, - IN UINT32 RequestParameter + IN UINT32 OperationRequest, + IN UINT32 RequestParameter ) { - EFI_STATUS Status; + EFI_STATUS Status; DEBUG ((DEBUG_INFO, "[TPM2PP] SubmitRequestToPreOSFunction, Request = %x, %x\n", OperationRequest, RequestParameter)); @@ -915,7 +921,7 @@ Tcg2PhysicalPresenceLibSubmitRequestToPreOSFunction ( return TCG_PP_SUBMIT_REQUEST_TO_PREOS_GENERAL_FAILURE; } - mPpi->Request = OperationRequest; + mPpi->Request = OperationRequest; mPpi->RequestParameter = RequestParameter; return TCG_PP_SUBMIT_REQUEST_TO_PREOS_SUCCESS; diff --git a/OvmfPkg/Library/TlsAuthConfigLib/TlsAuthConfigLib.c b/OvmfPkg/Library/TlsAuthConfigLib/TlsAuthConfigLib.c index 14b6a2a540..e22de4f5d4 100644 --- a/OvmfPkg/Library/TlsAuthConfigLib/TlsAuthConfigLib.c +++ b/OvmfPkg/Library/TlsAuthConfigLib/TlsAuthConfigLib.c @@ -36,16 +36,23 @@ SetCaCerts ( VOID ) { - EFI_STATUS Status; - FIRMWARE_CONFIG_ITEM HttpsCaCertsItem; - UINTN HttpsCaCertsSize; - VOID *HttpsCaCerts; + EFI_STATUS Status; + FIRMWARE_CONFIG_ITEM HttpsCaCertsItem; + UINTN HttpsCaCertsSize; + VOID *HttpsCaCerts; - Status = QemuFwCfgFindFile ("etc/edk2/https/cacerts", &HttpsCaCertsItem, - &HttpsCaCertsSize); + Status = QemuFwCfgFindFile ( + "etc/edk2/https/cacerts", + &HttpsCaCertsItem, + &HttpsCaCertsSize + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_VERBOSE, "%a:%a: not touching CA cert list\n", - gEfiCallerBaseName, __FUNCTION__)); + DEBUG (( + DEBUG_VERBOSE, + "%a:%a: not touching CA cert list\n", + gEfiCallerBaseName, + __FUNCTION__ + )); return; } @@ -72,23 +79,36 @@ SetCaCerts ( // // This is fatal. // - DEBUG ((DEBUG_ERROR, "%a:%a: failed to delete %g:\"%s\"\n", - gEfiCallerBaseName, __FUNCTION__, &gEfiTlsCaCertificateGuid, - EFI_TLS_CA_CERTIFICATE_VARIABLE)); + DEBUG (( + DEBUG_ERROR, + "%a:%a: failed to delete %g:\"%s\"\n", + gEfiCallerBaseName, + __FUNCTION__, + &gEfiTlsCaCertificateGuid, + EFI_TLS_CA_CERTIFICATE_VARIABLE + )); ASSERT_EFI_ERROR (Status); CpuDeadLoop (); } if (HttpsCaCertsSize == 0) { - DEBUG ((DEBUG_VERBOSE, "%a:%a: applied empty CA cert list\n", - gEfiCallerBaseName, __FUNCTION__)); + DEBUG (( + DEBUG_VERBOSE, + "%a:%a: applied empty CA cert list\n", + gEfiCallerBaseName, + __FUNCTION__ + )); return; } HttpsCaCerts = AllocatePool (HttpsCaCertsSize); if (HttpsCaCerts == NULL) { - DEBUG ((DEBUG_ERROR, "%a:%a: failed to allocate HttpsCaCerts\n", - gEfiCallerBaseName, __FUNCTION__)); + DEBUG (( + DEBUG_ERROR, + "%a:%a: failed to allocate HttpsCaCerts\n", + gEfiCallerBaseName, + __FUNCTION__ + )); return; } @@ -103,14 +123,25 @@ SetCaCerts ( HttpsCaCerts // Data ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a:%a: failed to set %g:\"%s\": %r\n", - gEfiCallerBaseName, __FUNCTION__, &gEfiTlsCaCertificateGuid, - EFI_TLS_CA_CERTIFICATE_VARIABLE, Status)); + DEBUG (( + DEBUG_ERROR, + "%a:%a: failed to set %g:\"%s\": %r\n", + gEfiCallerBaseName, + __FUNCTION__, + &gEfiTlsCaCertificateGuid, + EFI_TLS_CA_CERTIFICATE_VARIABLE, + Status + )); goto FreeHttpsCaCerts; } - DEBUG ((DEBUG_VERBOSE, "%a:%a: stored CA cert list (%Lu byte(s))\n", - gEfiCallerBaseName, __FUNCTION__, (UINT64)HttpsCaCertsSize)); + DEBUG (( + DEBUG_VERBOSE, + "%a:%a: stored CA cert list (%Lu byte(s))\n", + gEfiCallerBaseName, + __FUNCTION__, + (UINT64)HttpsCaCertsSize + )); FreeHttpsCaCerts: FreePool (HttpsCaCerts); @@ -130,18 +161,26 @@ SetCipherSuites ( VOID ) { - EFI_STATUS Status; - FIRMWARE_CONFIG_ITEM HttpsCiphersItem; - UINTN HttpsCiphersSize; - VOID *HttpsCiphers; + EFI_STATUS Status; + FIRMWARE_CONFIG_ITEM HttpsCiphersItem; + UINTN HttpsCiphersSize; + VOID *HttpsCiphers; - Status = QemuFwCfgFindFile ("etc/edk2/https/ciphers", &HttpsCiphersItem, - &HttpsCiphersSize); + Status = QemuFwCfgFindFile ( + "etc/edk2/https/ciphers", + &HttpsCiphersItem, + &HttpsCiphersSize + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_VERBOSE, "%a:%a: not touching cipher suites\n", - gEfiCallerBaseName, __FUNCTION__)); + DEBUG (( + DEBUG_VERBOSE, + "%a:%a: not touching cipher suites\n", + gEfiCallerBaseName, + __FUNCTION__ + )); return; } + // // From this point on, any failure is fatal. An ordered cipher preference // list is available from QEMU, thus we cannot let the firmware attempt HTTPS @@ -161,23 +200,36 @@ SetCipherSuites ( NULL // Data ); if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) { - DEBUG ((DEBUG_ERROR, "%a:%a: failed to delete %g:\"%s\"\n", - gEfiCallerBaseName, __FUNCTION__, &gEdkiiHttpTlsCipherListGuid, - EDKII_HTTP_TLS_CIPHER_LIST_VARIABLE)); + DEBUG (( + DEBUG_ERROR, + "%a:%a: failed to delete %g:\"%s\"\n", + gEfiCallerBaseName, + __FUNCTION__, + &gEdkiiHttpTlsCipherListGuid, + EDKII_HTTP_TLS_CIPHER_LIST_VARIABLE + )); goto Done; } if (HttpsCiphersSize == 0) { - DEBUG ((DEBUG_ERROR, "%a:%a: list of cipher suites must not be empty\n", - gEfiCallerBaseName, __FUNCTION__)); + DEBUG (( + DEBUG_ERROR, + "%a:%a: list of cipher suites must not be empty\n", + gEfiCallerBaseName, + __FUNCTION__ + )); Status = EFI_INVALID_PARAMETER; goto Done; } HttpsCiphers = AllocatePool (HttpsCiphersSize); if (HttpsCiphers == NULL) { - DEBUG ((DEBUG_ERROR, "%a:%a: failed to allocate HttpsCiphers\n", - gEfiCallerBaseName, __FUNCTION__)); + DEBUG (( + DEBUG_ERROR, + "%a:%a: failed to allocate HttpsCiphers\n", + gEfiCallerBaseName, + __FUNCTION__ + )); Status = EFI_OUT_OF_RESOURCES; goto Done; } @@ -193,14 +245,24 @@ SetCipherSuites ( HttpsCiphers // Data ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a:%a: failed to set %g:\"%s\"\n", - gEfiCallerBaseName, __FUNCTION__, &gEdkiiHttpTlsCipherListGuid, - EDKII_HTTP_TLS_CIPHER_LIST_VARIABLE)); + DEBUG (( + DEBUG_ERROR, + "%a:%a: failed to set %g:\"%s\"\n", + gEfiCallerBaseName, + __FUNCTION__, + &gEdkiiHttpTlsCipherListGuid, + EDKII_HTTP_TLS_CIPHER_LIST_VARIABLE + )); goto FreeHttpsCiphers; } - DEBUG ((DEBUG_VERBOSE, "%a:%a: stored list of cipher suites (%Lu byte(s))\n", - gEfiCallerBaseName, __FUNCTION__, (UINT64)HttpsCiphersSize)); + DEBUG (( + DEBUG_VERBOSE, + "%a:%a: stored list of cipher suites (%Lu byte(s))\n", + gEfiCallerBaseName, + __FUNCTION__, + (UINT64)HttpsCiphersSize + )); FreeHttpsCiphers: FreePool (HttpsCiphers); diff --git a/OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.c b/OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.c index 2b6835626f..18bca6046c 100644 --- a/OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.c +++ b/OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.c @@ -10,7 +10,6 @@ #include "UefiPciCapPciIoLib.h" - /** Transfer bytes between the config space of a given PCI device and a memory buffer. @@ -46,18 +45,18 @@ STATIC EFI_STATUS ProtoDevTransferConfig ( - IN EFI_PCI_IO_PROTOCOL *PciIo, - IN EFI_PCI_IO_PROTOCOL_CONFIG TransferFunction, - IN UINT16 ConfigOffset, - IN OUT UINT8 *Buffer, - IN UINT16 Size + IN EFI_PCI_IO_PROTOCOL *PciIo, + IN EFI_PCI_IO_PROTOCOL_CONFIG TransferFunction, + IN UINT16 ConfigOffset, + IN OUT UINT8 *Buffer, + IN UINT16 Size ) { while (Size > 0) { - EFI_PCI_IO_PROTOCOL_WIDTH Width; - UINT16 Count; - EFI_STATUS Status; - UINT16 Progress; + EFI_PCI_IO_PROTOCOL_WIDTH Width; + UINT16 Count; + EFI_STATUS Status; + UINT16 Progress; // // Pick the largest access size that is allowed by the remaining transfer @@ -67,29 +66,31 @@ ProtoDevTransferConfig ( // possible in one iteration of the loop. Otherwise, transfer only one // unit, to improve the alignment. // - if (Size >= 4 && (ConfigOffset & 3) == 0) { + if ((Size >= 4) && ((ConfigOffset & 3) == 0)) { Width = EfiPciIoWidthUint32; Count = Size >> Width; - } else if (Size >= 2 && (ConfigOffset & 1) == 0) { + } else if ((Size >= 2) && ((ConfigOffset & 1) == 0)) { Width = EfiPciIoWidthUint16; Count = 1; } else { Width = EfiPciIoWidthUint8; Count = 1; } + Status = TransferFunction (PciIo, Width, ConfigOffset, Count, Buffer); if (EFI_ERROR (Status)) { return Status; } + Progress = Count << Width; ConfigOffset += Progress; Buffer += Progress; Size -= Progress; } + return EFI_SUCCESS; } - /** Read the config space of a given PCI device (both normal and extended). @@ -121,20 +122,24 @@ STATIC RETURN_STATUS EFIAPI ProtoDevReadConfig ( - IN PCI_CAP_DEV *PciDevice, - IN UINT16 SourceOffset, - OUT VOID *DestinationBuffer, - IN UINT16 Size + IN PCI_CAP_DEV *PciDevice, + IN UINT16 SourceOffset, + OUT VOID *DestinationBuffer, + IN UINT16 Size ) { - PROTO_DEV *ProtoDev; + PROTO_DEV *ProtoDev; ProtoDev = PROTO_DEV_FROM_PCI_CAP_DEV (PciDevice); - return ProtoDevTransferConfig (ProtoDev->PciIo, ProtoDev->PciIo->Pci.Read, - SourceOffset, DestinationBuffer, Size); + return ProtoDevTransferConfig ( + ProtoDev->PciIo, + ProtoDev->PciIo->Pci.Read, + SourceOffset, + DestinationBuffer, + Size + ); } - /** Write the config space of a given PCI device (both normal and extended). @@ -166,20 +171,24 @@ STATIC RETURN_STATUS EFIAPI ProtoDevWriteConfig ( - IN PCI_CAP_DEV *PciDevice, - IN UINT16 DestinationOffset, - IN VOID *SourceBuffer, - IN UINT16 Size + IN PCI_CAP_DEV *PciDevice, + IN UINT16 DestinationOffset, + IN VOID *SourceBuffer, + IN UINT16 Size ) { - PROTO_DEV *ProtoDev; + PROTO_DEV *ProtoDev; ProtoDev = PROTO_DEV_FROM_PCI_CAP_DEV (PciDevice); - return ProtoDevTransferConfig (ProtoDev->PciIo, ProtoDev->PciIo->Pci.Write, - DestinationOffset, SourceBuffer, Size); + return ProtoDevTransferConfig ( + ProtoDev->PciIo, + ProtoDev->PciIo->Pci.Write, + DestinationOffset, + SourceBuffer, + Size + ); } - /** Create a PCI_CAP_DEV object from an EFI_PCI_IO_PROTOCOL instance. The config space accessors are based upon EFI_PCI_IO_PROTOCOL.Pci.Read() and @@ -197,11 +206,11 @@ ProtoDevWriteConfig ( EFI_STATUS EFIAPI PciCapPciIoDeviceInit ( - IN EFI_PCI_IO_PROTOCOL *PciIo, - OUT PCI_CAP_DEV **PciDevice + IN EFI_PCI_IO_PROTOCOL *PciIo, + OUT PCI_CAP_DEV **PciDevice ) { - PROTO_DEV *ProtoDev; + PROTO_DEV *ProtoDev; ProtoDev = AllocatePool (sizeof *ProtoDev); if (ProtoDev == NULL) { @@ -217,7 +226,6 @@ PciCapPciIoDeviceInit ( return EFI_SUCCESS; } - /** Free the resources used by PciDevice. @@ -227,10 +235,10 @@ PciCapPciIoDeviceInit ( VOID EFIAPI PciCapPciIoDeviceUninit ( - IN PCI_CAP_DEV *PciDevice + IN PCI_CAP_DEV *PciDevice ) { - PROTO_DEV *ProtoDev; + PROTO_DEV *ProtoDev; ProtoDev = PROTO_DEV_FROM_PCI_CAP_DEV (PciDevice); FreePool (ProtoDev); diff --git a/OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.h b/OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.h index cfe29d1a29..3ff65966b2 100644 --- a/OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.h +++ b/OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.h @@ -14,22 +14,22 @@ #include -#define PROTO_DEV_SIG SIGNATURE_64 ('P', 'C', 'P', 'I', 'O', 'P', 'R', 'T') +#define PROTO_DEV_SIG SIGNATURE_64 ('P', 'C', 'P', 'I', 'O', 'P', 'R', 'T') typedef struct { // // Signature identifying the derived class. // - UINT64 Signature; + UINT64 Signature; // // Members added by the derived class, specific to the use of // EFI_PCI_IO_PROTOCOL. // - EFI_PCI_IO_PROTOCOL *PciIo; + EFI_PCI_IO_PROTOCOL *PciIo; // // Base class. // - PCI_CAP_DEV BaseDevice; + PCI_CAP_DEV BaseDevice; } PROTO_DEV; #define PROTO_DEV_FROM_PCI_CAP_DEV(PciDevice) \ diff --git a/OvmfPkg/Library/VirtioLib/VirtioLib.c b/OvmfPkg/Library/VirtioLib/VirtioLib.c index e09324813c..28041dbec5 100644 --- a/OvmfPkg/Library/VirtioLib/VirtioLib.c +++ b/OvmfPkg/Library/VirtioLib/VirtioLib.c @@ -17,7 +17,6 @@ #include - /** Configure a virtio ring. @@ -48,14 +47,14 @@ EFI_STATUS EFIAPI VirtioRingInit ( - IN VIRTIO_DEVICE_PROTOCOL *VirtIo, - IN UINT16 QueueSize, - OUT VRING *Ring + IN VIRTIO_DEVICE_PROTOCOL *VirtIo, + IN UINT16 QueueSize, + OUT VRING *Ring ) { - EFI_STATUS Status; - UINTN RingSize; - volatile UINT8 *RingPagesPtr; + EFI_STATUS Status; + UINTN RingSize; + volatile UINT8 *RingPagesPtr; RingSize = ALIGN_VALUE ( sizeof *Ring->Desc * QueueSize + @@ -63,66 +62,70 @@ VirtioRingInit ( sizeof *Ring->Avail.Idx + sizeof *Ring->Avail.Ring * QueueSize + sizeof *Ring->Avail.UsedEvent, - EFI_PAGE_SIZE); + EFI_PAGE_SIZE + ); RingSize += ALIGN_VALUE ( sizeof *Ring->Used.Flags + sizeof *Ring->Used.Idx + sizeof *Ring->Used.UsedElem * QueueSize + sizeof *Ring->Used.AvailEvent, - EFI_PAGE_SIZE); + EFI_PAGE_SIZE + ); // // Allocate a shared ring buffer // Ring->NumPages = EFI_SIZE_TO_PAGES (RingSize); - Status = VirtIo->AllocateSharedPages ( - VirtIo, - Ring->NumPages, - &Ring->Base - ); + Status = VirtIo->AllocateSharedPages ( + VirtIo, + Ring->NumPages, + &Ring->Base + ); if (EFI_ERROR (Status)) { return Status; } + SetMem (Ring->Base, RingSize, 0x00); RingPagesPtr = Ring->Base; - Ring->Desc = (volatile VOID *) RingPagesPtr; + Ring->Desc = (volatile VOID *)RingPagesPtr; RingPagesPtr += sizeof *Ring->Desc * QueueSize; - Ring->Avail.Flags = (volatile VOID *) RingPagesPtr; - RingPagesPtr += sizeof *Ring->Avail.Flags; + Ring->Avail.Flags = (volatile VOID *)RingPagesPtr; + RingPagesPtr += sizeof *Ring->Avail.Flags; - Ring->Avail.Idx = (volatile VOID *) RingPagesPtr; - RingPagesPtr += sizeof *Ring->Avail.Idx; + Ring->Avail.Idx = (volatile VOID *)RingPagesPtr; + RingPagesPtr += sizeof *Ring->Avail.Idx; - Ring->Avail.Ring = (volatile VOID *) RingPagesPtr; - RingPagesPtr += sizeof *Ring->Avail.Ring * QueueSize; + Ring->Avail.Ring = (volatile VOID *)RingPagesPtr; + RingPagesPtr += sizeof *Ring->Avail.Ring * QueueSize; - Ring->Avail.UsedEvent = (volatile VOID *) RingPagesPtr; - RingPagesPtr += sizeof *Ring->Avail.UsedEvent; + Ring->Avail.UsedEvent = (volatile VOID *)RingPagesPtr; + RingPagesPtr += sizeof *Ring->Avail.UsedEvent; - RingPagesPtr = (volatile UINT8 *) Ring->Base + - ALIGN_VALUE (RingPagesPtr - (volatile UINT8 *) Ring->Base, - EFI_PAGE_SIZE); + RingPagesPtr = (volatile UINT8 *)Ring->Base + + ALIGN_VALUE ( + RingPagesPtr - (volatile UINT8 *)Ring->Base, + EFI_PAGE_SIZE + ); - Ring->Used.Flags = (volatile VOID *) RingPagesPtr; - RingPagesPtr += sizeof *Ring->Used.Flags; + Ring->Used.Flags = (volatile VOID *)RingPagesPtr; + RingPagesPtr += sizeof *Ring->Used.Flags; - Ring->Used.Idx = (volatile VOID *) RingPagesPtr; - RingPagesPtr += sizeof *Ring->Used.Idx; + Ring->Used.Idx = (volatile VOID *)RingPagesPtr; + RingPagesPtr += sizeof *Ring->Used.Idx; - Ring->Used.UsedElem = (volatile VOID *) RingPagesPtr; - RingPagesPtr += sizeof *Ring->Used.UsedElem * QueueSize; + Ring->Used.UsedElem = (volatile VOID *)RingPagesPtr; + RingPagesPtr += sizeof *Ring->Used.UsedElem * QueueSize; - Ring->Used.AvailEvent = (volatile VOID *) RingPagesPtr; - RingPagesPtr += sizeof *Ring->Used.AvailEvent; + Ring->Used.AvailEvent = (volatile VOID *)RingPagesPtr; + RingPagesPtr += sizeof *Ring->Used.AvailEvent; Ring->QueueSize = QueueSize; return EFI_SUCCESS; } - /** Tear down the internal resources of a configured virtio ring. @@ -139,15 +142,14 @@ VirtioRingInit ( VOID EFIAPI VirtioRingUninit ( - IN VIRTIO_DEVICE_PROTOCOL *VirtIo, - IN OUT VRING *Ring + IN VIRTIO_DEVICE_PROTOCOL *VirtIo, + IN OUT VRING *Ring ) { VirtIo->FreeSharedPages (VirtIo, Ring->NumPages, Ring->Base); SetMem (Ring, sizeof *Ring, 0x00); } - /** Turn off interrupt notifications from the host, and prepare for appending @@ -163,15 +165,15 @@ VirtioRingUninit ( VOID EFIAPI VirtioPrepare ( - IN OUT VRING *Ring, - OUT DESC_INDICES *Indices + IN OUT VRING *Ring, + OUT DESC_INDICES *Indices ) { // // Prepare for virtio-0.9.5, 2.4.2 Receiving Used Buffers From the Device. // We're going to poll the answer, the host should not send an interrupt. // - *Ring->Avail.Flags = (UINT16) VRING_AVAIL_F_NO_INTERRUPT; + *Ring->Avail.Flags = (UINT16)VRING_AVAIL_F_NO_INTERRUPT; // // Prepare for virtio-0.9.5, 2.4.1 Supplying Buffers to the Device. @@ -224,14 +226,14 @@ VirtioPrepare ( VOID EFIAPI VirtioAppendDesc ( - IN OUT VRING *Ring, - IN UINT64 BufferDeviceAddress, - IN UINT32 BufferSize, - IN UINT16 Flags, - IN OUT DESC_INDICES *Indices + IN OUT VRING *Ring, + IN UINT64 BufferDeviceAddress, + IN UINT32 BufferSize, + IN UINT16 Flags, + IN OUT DESC_INDICES *Indices ) { - volatile VRING_DESC *Desc; + volatile VRING_DESC *Desc; Desc = &Ring->Desc[Indices->NextDescIdx++ % Ring->QueueSize]; Desc->Addr = BufferDeviceAddress; @@ -240,7 +242,6 @@ VirtioAppendDesc ( Desc->Next = Indices->NextDescIdx % Ring->QueueSize; } - /** Notify the host about the descriptor chain just built, and wait until the @@ -271,17 +272,17 @@ VirtioAppendDesc ( EFI_STATUS EFIAPI VirtioFlush ( - IN VIRTIO_DEVICE_PROTOCOL *VirtIo, - IN UINT16 VirtQueueId, - IN OUT VRING *Ring, - IN DESC_INDICES *Indices, - OUT UINT32 *UsedLen OPTIONAL + IN VIRTIO_DEVICE_PROTOCOL *VirtIo, + IN UINT16 VirtQueueId, + IN OUT VRING *Ring, + IN DESC_INDICES *Indices, + OUT UINT32 *UsedLen OPTIONAL ) { - UINT16 NextAvailIdx; - UINT16 LastUsedIdx; - EFI_STATUS Status; - UINTN PollPeriodUsecs; + UINT16 NextAvailIdx; + UINT16 LastUsedIdx; + EFI_STATUS Status; + UINTN PollPeriodUsecs; // // virtio-0.9.5, 2.4.1.2 Updating the Available Ring @@ -295,21 +296,21 @@ VirtioFlush ( // (Due to our lock-step progress, this is where the host will produce the // used element with the head descriptor's index in it.) // - LastUsedIdx = NextAvailIdx; + LastUsedIdx = NextAvailIdx; Ring->Avail.Ring[NextAvailIdx++ % Ring->QueueSize] = Indices->HeadDescIdx % Ring->QueueSize; // // virtio-0.9.5, 2.4.1.3 Updating the Index Field // - MemoryFence(); + MemoryFence (); *Ring->Avail.Idx = NextAvailIdx; // // virtio-0.9.5, 2.4.1.4 Notifying the Device -- gratuitous notifications are // OK. // - MemoryFence(); + MemoryFence (); Status = VirtIo->SetQueueNotify (VirtIo, VirtQueueId); if (EFI_ERROR (Status)) { return Status; @@ -324,20 +325,21 @@ VirtioFlush ( // Keep slowing down until we reach a poll period of slightly above 1 ms. // PollPeriodUsecs = 1; - MemoryFence(); + MemoryFence (); while (*Ring->Used.Idx != NextAvailIdx) { gBS->Stall (PollPeriodUsecs); // calls AcpiTimerLib::MicroSecondDelay if (PollPeriodUsecs < 1024) { PollPeriodUsecs *= 2; } - MemoryFence(); + + MemoryFence (); } - MemoryFence(); + MemoryFence (); if (UsedLen != NULL) { - volatile CONST VRING_USED_ELEM *UsedElem; + volatile CONST VRING_USED_ELEM *UsedElem; UsedElem = &Ring->Used.UsedElem[LastUsedIdx % Ring->QueueSize]; ASSERT (UsedElem->Id == Indices->HeadDescIdx); @@ -347,7 +349,6 @@ VirtioFlush ( return EFI_SUCCESS; } - /** Report the feature bits to the VirtIo 1.0 device that the VirtIo 1.0 driver @@ -388,12 +389,12 @@ VirtioFlush ( EFI_STATUS EFIAPI Virtio10WriteFeatures ( - IN VIRTIO_DEVICE_PROTOCOL *VirtIo, - IN UINT64 Features, - IN OUT UINT8 *DeviceStatus + IN VIRTIO_DEVICE_PROTOCOL *VirtIo, + IN UINT64 Features, + IN OUT UINT8 *DeviceStatus ) { - EFI_STATUS Status; + EFI_STATUS Status; if (VirtIo->Revision < VIRTIO_SPEC_REVISION (1, 0, 0)) { return EFI_UNSUPPORTED; @@ -405,7 +406,7 @@ Virtio10WriteFeatures ( } *DeviceStatus |= VSTAT_FEATURES_OK; - Status = VirtIo->SetDeviceStatus (VirtIo, *DeviceStatus); + Status = VirtIo->SetDeviceStatus (VirtIo, *DeviceStatus); if (EFI_ERROR (Status)) { return Status; } @@ -479,7 +480,7 @@ VirtioMapAllBytesInSharedBuffer ( UINTN Size; EFI_PHYSICAL_ADDRESS PhysicalAddress; - Size = NumberOfBytes; + Size = NumberOfBytes; Status = VirtIo->MapSharedBuffer ( VirtIo, Operation, @@ -496,7 +497,7 @@ VirtioMapAllBytesInSharedBuffer ( goto Failed; } - *Mapping = MapInfo; + *Mapping = MapInfo; *DeviceAddress = PhysicalAddress; return EFI_SUCCESS; @@ -526,10 +527,10 @@ Failed: EFI_STATUS EFIAPI VirtioRingMap ( - IN VIRTIO_DEVICE_PROTOCOL *VirtIo, - IN VRING *Ring, - OUT UINT64 *RingBaseShift, - OUT VOID **Mapping + IN VIRTIO_DEVICE_PROTOCOL *VirtIo, + IN VRING *Ring, + OUT UINT64 *RingBaseShift, + OUT VOID **Mapping ) { EFI_STATUS Status; diff --git a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.c b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.c index a97ef9352d..831dc1736d 100644 --- a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.c +++ b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.c @@ -14,26 +14,26 @@ #include "VirtioMmioDevice.h" -STATIC CONST VIRTIO_DEVICE_PROTOCOL mMmioDeviceProtocolTemplate = { - 0, // Revision - 0, // SubSystemDeviceId - VirtioMmioGetDeviceFeatures, // GetDeviceFeatures - VirtioMmioSetGuestFeatures, // SetGuestFeatures - VirtioMmioSetQueueAddress, // SetQueueAddress - VirtioMmioSetQueueSel, // SetQueueSel - VirtioMmioSetQueueNotify, // SetQueueNotify - VirtioMmioSetQueueAlignment, // SetQueueAlign - VirtioMmioSetPageSize, // SetPageSize - VirtioMmioGetQueueSize, // GetQueueNumMax - VirtioMmioSetQueueSize, // SetQueueNum - VirtioMmioGetDeviceStatus, // GetDeviceStatus - VirtioMmioSetDeviceStatus, // SetDeviceStatus - VirtioMmioDeviceWrite, // WriteDevice - VirtioMmioDeviceRead, // ReadDevice - VirtioMmioAllocateSharedPages, // AllocateSharedPages - VirtioMmioFreeSharedPages, // FreeSharedPages - VirtioMmioMapSharedBuffer, // MapSharedBuffer - VirtioMmioUnmapSharedBuffer // UnmapSharedBuffer +STATIC CONST VIRTIO_DEVICE_PROTOCOL mMmioDeviceProtocolTemplate = { + 0, // Revision + 0, // SubSystemDeviceId + VirtioMmioGetDeviceFeatures, // GetDeviceFeatures + VirtioMmioSetGuestFeatures, // SetGuestFeatures + VirtioMmioSetQueueAddress, // SetQueueAddress + VirtioMmioSetQueueSel, // SetQueueSel + VirtioMmioSetQueueNotify, // SetQueueNotify + VirtioMmioSetQueueAlignment, // SetQueueAlign + VirtioMmioSetPageSize, // SetPageSize + VirtioMmioGetQueueSize, // GetQueueNumMax + VirtioMmioSetQueueSize, // SetQueueNum + VirtioMmioGetDeviceStatus, // GetDeviceStatus + VirtioMmioSetDeviceStatus, // SetDeviceStatus + VirtioMmioDeviceWrite, // WriteDevice + VirtioMmioDeviceRead, // ReadDevice + VirtioMmioAllocateSharedPages, // AllocateSharedPages + VirtioMmioFreeSharedPages, // FreeSharedPages + VirtioMmioMapSharedBuffer, // MapSharedBuffer + VirtioMmioUnmapSharedBuffer // UnmapSharedBuffer }; /** @@ -54,19 +54,22 @@ EFI_STATUS EFIAPI VirtioMmioInit ( IN PHYSICAL_ADDRESS BaseAddress, - IN OUT VIRTIO_MMIO_DEVICE *Device + IN OUT VIRTIO_MMIO_DEVICE *Device ) { - UINT32 MagicValue; + UINT32 MagicValue; // // Initialize VirtIo Mmio Device // - CopyMem (&Device->VirtioDevice, &mMmioDeviceProtocolTemplate, - sizeof (VIRTIO_DEVICE_PROTOCOL)); - Device->BaseAddress = BaseAddress; + CopyMem ( + &Device->VirtioDevice, + &mMmioDeviceProtocolTemplate, + sizeof (VIRTIO_DEVICE_PROTOCOL) + ); + Device->BaseAddress = BaseAddress; Device->VirtioDevice.SubSystemDeviceId = - MmioRead32 (BaseAddress + VIRTIO_MMIO_OFFSET_DEVICE_ID); + MmioRead32 (BaseAddress + VIRTIO_MMIO_OFFSET_DEVICE_ID); // // Double-check MMIO-specific values @@ -78,24 +81,31 @@ VirtioMmioInit ( Device->Version = VIRTIO_CFG_READ (Device, VIRTIO_MMIO_OFFSET_VERSION); switch (Device->Version) { - case VIRTIO_MMIO_DEVICE_VERSION_0_95: - DEBUG ((DEBUG_INFO, "%a virtio 0.9.5, id %d\n", __FUNCTION__, - Device->VirtioDevice.SubSystemDeviceId)); - Device->VirtioDevice.Revision = VIRTIO_SPEC_REVISION (0, 9, 5); - break; - case VIRTIO_MMIO_DEVICE_VERSION_1_00: - DEBUG ((DEBUG_INFO, "%a virtio 1.0, id %d\n", __FUNCTION__, - Device->VirtioDevice.SubSystemDeviceId)); - Device->VirtioDevice.Revision = VIRTIO_SPEC_REVISION (1, 0, 0); - break; - default: - return EFI_UNSUPPORTED; + case VIRTIO_MMIO_DEVICE_VERSION_0_95: + DEBUG (( + DEBUG_INFO, + "%a virtio 0.9.5, id %d\n", + __FUNCTION__, + Device->VirtioDevice.SubSystemDeviceId + )); + Device->VirtioDevice.Revision = VIRTIO_SPEC_REVISION (0, 9, 5); + break; + case VIRTIO_MMIO_DEVICE_VERSION_1_00: + DEBUG (( + DEBUG_INFO, + "%a virtio 1.0, id %d\n", + __FUNCTION__, + Device->VirtioDevice.SubSystemDeviceId + )); + Device->VirtioDevice.Revision = VIRTIO_SPEC_REVISION (1, 0, 0); + break; + default: + return EFI_UNSUPPORTED; } return EFI_SUCCESS; } - /** Uninitialize the internals of a virtio-mmio device that has been successfully @@ -104,12 +114,11 @@ VirtioMmioInit ( @param[in, out] Device The device to clean up. **/ - STATIC VOID EFIAPI VirtioMmioUninit ( - IN VIRTIO_MMIO_DEVICE *Device + IN VIRTIO_MMIO_DEVICE *Device ) { // @@ -120,16 +129,17 @@ VirtioMmioUninit ( EFI_STATUS VirtioMmioInstallDevice ( - IN PHYSICAL_ADDRESS BaseAddress, - IN EFI_HANDLE Handle + IN PHYSICAL_ADDRESS BaseAddress, + IN EFI_HANDLE Handle ) { EFI_STATUS Status; - VIRTIO_MMIO_DEVICE *VirtIo; + VIRTIO_MMIO_DEVICE *VirtIo; if (!BaseAddress) { return EFI_INVALID_PARAMETER; } + if (Handle == NULL) { return EFI_INVALID_PARAMETER; } @@ -152,9 +162,12 @@ VirtioMmioInstallDevice ( // // Install VIRTIO_DEVICE_PROTOCOL to Handle // - Status = gBS->InstallProtocolInterface (&Handle, - &gVirtioDeviceProtocolGuid, EFI_NATIVE_INTERFACE, - &VirtIo->VirtioDevice); + Status = gBS->InstallProtocolInterface ( + &Handle, + &gVirtioDeviceProtocolGuid, + EFI_NATIVE_INTERFACE, + &VirtIo->VirtioDevice + ); if (EFI_ERROR (Status)) { goto UninitVirtio; } @@ -171,7 +184,7 @@ FreeVirtioMem: EFI_STATUS VirtioMmioUninstallDevice ( - IN EFI_HANDLE DeviceHandle + IN EFI_HANDLE DeviceHandle ) { VIRTIO_DEVICE_PROTOCOL *VirtioDevice; @@ -198,9 +211,11 @@ VirtioMmioUninstallDevice ( // // Uninstall the protocol interface // - Status = gBS->UninstallProtocolInterface (DeviceHandle, - &gVirtioDeviceProtocolGuid, &MmioDevice->VirtioDevice - ); + Status = gBS->UninstallProtocolInterface ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + &MmioDevice->VirtioDevice + ); if (EFI_ERROR (Status)) { return Status; } diff --git a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h index 5ad951f415..7298cf5821 100644 --- a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h +++ b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h @@ -22,17 +22,16 @@ #include #include -#define VIRTIO_MMIO_DEVICE_SIGNATURE SIGNATURE_32 ('V', 'M', 'I', 'O') +#define VIRTIO_MMIO_DEVICE_SIGNATURE SIGNATURE_32 ('V', 'M', 'I', 'O') #define VIRTIO_MMIO_DEVICE_VERSION_0_95 1 #define VIRTIO_MMIO_DEVICE_VERSION_1_00 2 - typedef struct { - UINT32 Signature; - UINT32 Version; - UINT16 QueueNum; - VIRTIO_DEVICE_PROTOCOL VirtioDevice; - PHYSICAL_ADDRESS BaseAddress; + UINT32 Signature; + UINT32 Version; + UINT16 QueueNum; + VIRTIO_DEVICE_PROTOCOL VirtioDevice; + PHYSICAL_ADDRESS BaseAddress; } VIRTIO_MMIO_DEVICE; #define VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE(Device) \ @@ -46,27 +45,27 @@ typedef struct { EFI_STATUS EFIAPI VirtioMmioDeviceRead ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINTN FieldOFfset, - IN UINTN FieldSize, - IN UINTN BufferSize, - OUT VOID* Buffer + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN FieldOFfset, + IN UINTN FieldSize, + IN UINTN BufferSize, + OUT VOID *Buffer ); EFI_STATUS EFIAPI VirtioMmioDeviceWrite ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINTN FieldOffset, - IN UINTN FieldSize, - IN UINT64 Value + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN FieldOffset, + IN UINTN FieldSize, + IN UINT64 Value ); EFI_STATUS EFIAPI VirtioMmioGetDeviceFeatures ( - IN VIRTIO_DEVICE_PROTOCOL *This, - OUT UINT64 *DeviceFeatures + IN VIRTIO_DEVICE_PROTOCOL *This, + OUT UINT64 *DeviceFeatures ); EFI_STATUS @@ -86,28 +85,28 @@ VirtioMmioGetDeviceStatus ( EFI_STATUS EFIAPI VirtioMmioSetQueueSize ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT16 QueueSize ); EFI_STATUS EFIAPI VirtioMmioSetDeviceStatus ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT8 DeviceStatus ); EFI_STATUS EFIAPI VirtioMmioSetQueueNotify ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT16 QueueNotify ); EFI_STATUS EFIAPI VirtioMmioSetQueueSel ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT16 Sel ); @@ -122,56 +121,56 @@ VirtioMmioSetQueueAddress ( EFI_STATUS EFIAPI VirtioMmioSetQueueAlignment ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT32 Alignment ); EFI_STATUS EFIAPI VirtioMmioSetPageSize ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT32 PageSize ); EFI_STATUS EFIAPI VirtioMmioSetGuestFeatures ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT64 Features ); EFI_STATUS EFIAPI VirtioMmioAllocateSharedPages ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINTN NumPages, - OUT VOID **HostAddress + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN NumPages, + OUT VOID **HostAddress ); VOID EFIAPI VirtioMmioFreeSharedPages ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINTN NumPages, - IN VOID *HostAddress + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN NumPages, + IN VOID *HostAddress ); EFI_STATUS EFIAPI VirtioMmioMapSharedBuffer ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN VIRTIO_MAP_OPERATION Operation, - IN VOID *HostAddress, - IN OUT UINTN *NumberOfBytes, - OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, - OUT VOID **Mapping + IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_MAP_OPERATION Operation, + IN VOID *HostAddress, + IN OUT UINTN *NumberOfBytes, + OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, + OUT VOID **Mapping ); EFI_STATUS EFIAPI VirtioMmioUnmapSharedBuffer ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN VOID *Mapping + IN VIRTIO_DEVICE_PROTOCOL *This, + IN VOID *Mapping ); #endif // _VIRTIO_MMIO_DEVICE_INTERNAL_H_ diff --git a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c index b43850e69d..8bdf1e1fc3 100644 --- a/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c +++ b/OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceFunctions.c @@ -15,12 +15,12 @@ EFI_STATUS EFIAPI VirtioMmioGetDeviceFeatures ( - IN VIRTIO_DEVICE_PROTOCOL *This, - OUT UINT64 *DeviceFeatures + IN VIRTIO_DEVICE_PROTOCOL *This, + OUT UINT64 *DeviceFeatures ) { - VIRTIO_MMIO_DEVICE *Device; - UINT32 LowBits, HighBits; + VIRTIO_MMIO_DEVICE *Device; + UINT32 LowBits, HighBits; if (DeviceFeatures == NULL) { return EFI_INVALID_PARAMETER; @@ -34,8 +34,8 @@ VirtioMmioGetDeviceFeatures ( VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_HOST_FEATURES_SEL, 0); LowBits = VIRTIO_CFG_READ (Device, VIRTIO_MMIO_OFFSET_HOST_FEATURES); VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_HOST_FEATURES_SEL, 1); - HighBits = VIRTIO_CFG_READ (Device, VIRTIO_MMIO_OFFSET_HOST_FEATURES); - *DeviceFeatures = LShiftU64(HighBits, 32) | LowBits; + HighBits = VIRTIO_CFG_READ (Device, VIRTIO_MMIO_OFFSET_HOST_FEATURES); + *DeviceFeatures = LShiftU64 (HighBits, 32) | LowBits; } return EFI_SUCCESS; @@ -48,7 +48,7 @@ VirtioMmioGetQueueSize ( OUT UINT16 *QueueNumMax ) { - VIRTIO_MMIO_DEVICE *Device; + VIRTIO_MMIO_DEVICE *Device; if (QueueNumMax == NULL) { return EFI_INVALID_PARAMETER; @@ -68,7 +68,7 @@ VirtioMmioGetDeviceStatus ( OUT UINT8 *DeviceStatus ) { - VIRTIO_MMIO_DEVICE *Device; + VIRTIO_MMIO_DEVICE *Device; if (DeviceStatus == NULL) { return EFI_INVALID_PARAMETER; @@ -84,11 +84,11 @@ VirtioMmioGetDeviceStatus ( EFI_STATUS EFIAPI VirtioMmioSetQueueSize ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT16 QueueSize ) { - VIRTIO_MMIO_DEVICE *Device; + VIRTIO_MMIO_DEVICE *Device; Device = VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE (This); @@ -104,11 +104,11 @@ VirtioMmioSetQueueSize ( EFI_STATUS EFIAPI VirtioMmioSetDeviceStatus ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT8 DeviceStatus ) { - VIRTIO_MMIO_DEVICE *Device; + VIRTIO_MMIO_DEVICE *Device; Device = VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE (This); @@ -120,11 +120,11 @@ VirtioMmioSetDeviceStatus ( EFI_STATUS EFIAPI VirtioMmioSetQueueNotify ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT16 QueueNotify ) { - VIRTIO_MMIO_DEVICE *Device; + VIRTIO_MMIO_DEVICE *Device; Device = VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE (This); @@ -136,11 +136,11 @@ VirtioMmioSetQueueNotify ( EFI_STATUS EFIAPI VirtioMmioSetQueueAlignment ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT32 Alignment ) { - VIRTIO_MMIO_DEVICE *Device; + VIRTIO_MMIO_DEVICE *Device; Device = VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE (This); @@ -152,11 +152,11 @@ VirtioMmioSetQueueAlignment ( EFI_STATUS EFIAPI VirtioMmioSetPageSize ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT32 PageSize ) { - VIRTIO_MMIO_DEVICE *Device; + VIRTIO_MMIO_DEVICE *Device; if (PageSize != EFI_PAGE_SIZE) { return EFI_UNSUPPORTED; @@ -174,11 +174,11 @@ VirtioMmioSetPageSize ( EFI_STATUS EFIAPI VirtioMmioSetQueueSel ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT16 Sel ) { - VIRTIO_MMIO_DEVICE *Device; + VIRTIO_MMIO_DEVICE *Device; Device = VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE (This); @@ -199,36 +199,57 @@ VirtioMmioSetQueueAddress ( IN UINT64 RingBaseShift ) { - VIRTIO_MMIO_DEVICE *Device; - UINT64 Address; + VIRTIO_MMIO_DEVICE *Device; + UINT64 Address; ASSERT (RingBaseShift == 0); Device = VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE (This); if (Device->Version == VIRTIO_MMIO_DEVICE_VERSION_0_95) { - VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_PFN, - (UINT32)((UINTN)Ring->Base >> EFI_PAGE_SHIFT)); + VIRTIO_CFG_WRITE ( + Device, + VIRTIO_MMIO_OFFSET_QUEUE_PFN, + (UINT32)((UINTN)Ring->Base >> EFI_PAGE_SHIFT) + ); } else { VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_NUM, Device->QueueNum); Address = (UINTN)Ring->Base; - VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_DESC_LO, - (UINT32)Address); - VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_DESC_HI, - (UINT32)RShiftU64(Address, 32)); + VIRTIO_CFG_WRITE ( + Device, + VIRTIO_MMIO_OFFSET_QUEUE_DESC_LO, + (UINT32)Address + ); + VIRTIO_CFG_WRITE ( + Device, + VIRTIO_MMIO_OFFSET_QUEUE_DESC_HI, + (UINT32)RShiftU64 (Address, 32) + ); Address = (UINTN)Ring->Avail.Flags; - VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_AVAIL_LO, - (UINT32)Address); - VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_AVAIL_HI, - (UINT32)RShiftU64(Address, 32)); + VIRTIO_CFG_WRITE ( + Device, + VIRTIO_MMIO_OFFSET_QUEUE_AVAIL_LO, + (UINT32)Address + ); + VIRTIO_CFG_WRITE ( + Device, + VIRTIO_MMIO_OFFSET_QUEUE_AVAIL_HI, + (UINT32)RShiftU64 (Address, 32) + ); Address = (UINTN)Ring->Used.Flags; - VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_USED_LO, - (UINT32)Address); - VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_USED_HI, - (UINT32)RShiftU64(Address, 32)); + VIRTIO_CFG_WRITE ( + Device, + VIRTIO_MMIO_OFFSET_QUEUE_USED_LO, + (UINT32)Address + ); + VIRTIO_CFG_WRITE ( + Device, + VIRTIO_MMIO_OFFSET_QUEUE_USED_HI, + (UINT32)RShiftU64 (Address, 32) + ); VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_QUEUE_READY, 1); } @@ -239,11 +260,11 @@ VirtioMmioSetQueueAddress ( EFI_STATUS EFIAPI VirtioMmioSetGuestFeatures ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT64 Features ) { - VIRTIO_MMIO_DEVICE *Device; + VIRTIO_MMIO_DEVICE *Device; Device = VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE (This); @@ -251,15 +272,25 @@ VirtioMmioSetGuestFeatures ( if (Features > MAX_UINT32) { return EFI_UNSUPPORTED; } - VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_GUEST_FEATURES, - (UINT32)Features); + + VIRTIO_CFG_WRITE ( + Device, + VIRTIO_MMIO_OFFSET_GUEST_FEATURES, + (UINT32)Features + ); } else { VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_GUEST_FEATURES_SEL, 0); - VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_GUEST_FEATURES, - (UINT32)Features); + VIRTIO_CFG_WRITE ( + Device, + VIRTIO_MMIO_OFFSET_GUEST_FEATURES, + (UINT32)Features + ); VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_GUEST_FEATURES_SEL, 1); - VIRTIO_CFG_WRITE (Device, VIRTIO_MMIO_OFFSET_GUEST_FEATURES, - (UINT32)RShiftU64(Features, 32)); + VIRTIO_CFG_WRITE ( + Device, + VIRTIO_MMIO_OFFSET_GUEST_FEATURES, + (UINT32)RShiftU64 (Features, 32) + ); } return EFI_SUCCESS; @@ -268,14 +299,14 @@ VirtioMmioSetGuestFeatures ( EFI_STATUS EFIAPI VirtioMmioDeviceWrite ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINTN FieldOffset, - IN UINTN FieldSize, - IN UINT64 Value + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN FieldOffset, + IN UINTN FieldSize, + IN UINT64 Value ) { - UINTN DstBaseAddress; - VIRTIO_MMIO_DEVICE *Device; + UINTN DstBaseAddress; + VIRTIO_MMIO_DEVICE *Device; Device = VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE (This); @@ -283,7 +314,8 @@ VirtioMmioDeviceWrite ( // Double-check fieldsize // if ((FieldSize != 1) && (FieldSize != 2) && - (FieldSize != 4) && (FieldSize != 8)) { + (FieldSize != 4) && (FieldSize != 8)) + { return EFI_INVALID_PARAMETER; } @@ -291,13 +323,13 @@ VirtioMmioDeviceWrite ( // Compute base address // DstBaseAddress = Device->BaseAddress + - VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_MMIO + FieldOffset; + VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_MMIO + FieldOffset; // // The device-specific memory area of Virtio-MMIO can only be written in // byte accesses. This is not currently in the Virtio spec. // - MmioWriteBuffer8 (DstBaseAddress, FieldSize, (UINT8*)&Value); + MmioWriteBuffer8 (DstBaseAddress, FieldSize, (UINT8 *)&Value); return EFI_SUCCESS; } @@ -305,15 +337,15 @@ VirtioMmioDeviceWrite ( EFI_STATUS EFIAPI VirtioMmioDeviceRead ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINTN FieldOffset, - IN UINTN FieldSize, - IN UINTN BufferSize, - OUT VOID *Buffer + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN FieldOffset, + IN UINTN FieldSize, + IN UINTN BufferSize, + OUT VOID *Buffer ) { - UINTN SrcBaseAddress; - VIRTIO_MMIO_DEVICE *Device; + UINTN SrcBaseAddress; + VIRTIO_MMIO_DEVICE *Device; Device = VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE (This); @@ -326,7 +358,8 @@ VirtioMmioDeviceRead ( // Double-check fieldsize // if ((FieldSize != 1) && (FieldSize != 2) && - (FieldSize != 4) && (FieldSize != 8)) { + (FieldSize != 4) && (FieldSize != 8)) + { return EFI_INVALID_PARAMETER; } @@ -334,7 +367,7 @@ VirtioMmioDeviceRead ( // Compute base address // SrcBaseAddress = Device->BaseAddress + - VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_MMIO + FieldOffset; + VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_MMIO + FieldOffset; // // The device-specific memory area of Virtio-MMIO can only be read in @@ -353,7 +386,7 @@ VirtioMmioAllocateSharedPages ( OUT VOID **HostAddress ) { - VOID *Buffer; + VOID *Buffer; Buffer = AllocatePages (NumPages); if (Buffer == NULL) { @@ -386,8 +419,8 @@ VirtioMmioMapSharedBuffer ( OUT VOID **Mapping ) { - *DeviceAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) HostAddress; - *Mapping = NULL; + *DeviceAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress; + *Mapping = NULL; return EFI_SUCCESS; } @@ -395,8 +428,8 @@ VirtioMmioMapSharedBuffer ( EFI_STATUS EFIAPI VirtioMmioUnmapSharedBuffer ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN VOID *Mapping + IN VIRTIO_DEVICE_PROTOCOL *This, + IN VOID *Mapping ) { return EFI_SUCCESS; diff --git a/OvmfPkg/Library/VmgExitLib/PeiDxeVmgExitVcHandler.c b/OvmfPkg/Library/VmgExitLib/PeiDxeVmgExitVcHandler.c index fb4942df37..e3d0715837 100644 --- a/OvmfPkg/Library/VmgExitLib/PeiDxeVmgExitVcHandler.c +++ b/OvmfPkg/Library/VmgExitLib/PeiDxeVmgExitVcHandler.c @@ -54,10 +54,10 @@ VmgExitHandleVc ( ASSERT (Msr.GhcbInfo.Function == 0); ASSERT (Msr.Ghcb != 0); - Ghcb = Msr.Ghcb; + Ghcb = Msr.Ghcb; GhcbBackup = NULL; - SevEsData = (SEV_ES_PER_CPU_DATA *) (Ghcb + 1); + SevEsData = (SEV_ES_PER_CPU_DATA *)(Ghcb + 1); SevEsData->VcCount++; // @@ -78,7 +78,7 @@ VmgExitHandleVc ( // To access the correct backup page, increment the backup page pointer // based on the current VcCount. // - GhcbBackup = (GHCB *) SevEsData->GhcbBackupPages; + GhcbBackup = (GHCB *)SevEsData->GhcbBackupPages; GhcbBackup += (SevEsData->VcCount - 2); CopyMem (GhcbBackup, Ghcb, sizeof (*Ghcb)); diff --git a/OvmfPkg/Library/VmgExitLib/SecVmgExitVcHandler.c b/OvmfPkg/Library/VmgExitLib/SecVmgExitVcHandler.c index 85853d334b..fe8680f831 100644 --- a/OvmfPkg/Library/VmgExitLib/SecVmgExitVcHandler.c +++ b/OvmfPkg/Library/VmgExitLib/SecVmgExitVcHandler.c @@ -54,10 +54,10 @@ VmgExitHandleVc ( ASSERT (Msr.GhcbInfo.Function == 0); ASSERT (Msr.Ghcb != 0); - Ghcb = Msr.Ghcb; + Ghcb = Msr.Ghcb; GhcbBackup = NULL; - SevEsData = (SEV_ES_PER_CPU_DATA *) (Ghcb + 1); + SevEsData = (SEV_ES_PER_CPU_DATA *)(Ghcb + 1); SevEsData->VcCount++; // @@ -84,7 +84,7 @@ VmgExitHandleVc ( // To access the correct backup page, increment the backup page pointer // based on the current VcCount. // - GhcbBackup = (GHCB *) FixedPcdGet32 (PcdOvmfSecGhcbBackupBase); + GhcbBackup = (GHCB *)FixedPcdGet32 (PcdOvmfSecGhcbBackupBase); GhcbBackup += (SevEsData->VcCount - 2); CopyMem (GhcbBackup, Ghcb, sizeof (*Ghcb)); diff --git a/OvmfPkg/Library/VmgExitLib/VmgExitLib.c b/OvmfPkg/Library/VmgExitLib/VmgExitLib.c index bc5cd61d75..c205521870 100644 --- a/OvmfPkg/Library/VmgExitLib/VmgExitLib.c +++ b/OvmfPkg/Library/VmgExitLib/VmgExitLib.c @@ -28,7 +28,7 @@ STATIC UINT64 VmgExitErrorCheck ( - IN GHCB *Ghcb + IN GHCB *Ghcb ) { GHCB_EVENT_INJECTION Event; @@ -36,8 +36,10 @@ VmgExitErrorCheck ( UINT64 Status; ExitInfo.Uint64 = Ghcb->SaveArea.SwExitInfo1; - ASSERT ((ExitInfo.Elements.Lower32Bits == 0) || - (ExitInfo.Elements.Lower32Bits == 1)); + ASSERT ( + (ExitInfo.Elements.Lower32Bits == 0) || + (ExitInfo.Elements.Lower32Bits == 1) + ); Status = 0; if (ExitInfo.Elements.Lower32Bits == 0) { @@ -52,14 +54,15 @@ VmgExitErrorCheck ( // Event.Uint64 = Ghcb->SaveArea.SwExitInfo2; if (Event.Elements.Valid && - Event.Elements.Type == GHCB_EVENT_INJECTION_TYPE_EXCEPTION) { + (Event.Elements.Type == GHCB_EVENT_INJECTION_TYPE_EXCEPTION)) + { switch (Event.Elements.Vector) { - case GP_EXCEPTION: - case UD_EXCEPTION: - // - // Use returned event as return code - // - Status = Event.Uint64; + case GP_EXCEPTION: + case UD_EXCEPTION: + // + // Use returned event as return code + // + Status = Event.Uint64; } } } @@ -67,7 +70,7 @@ VmgExitErrorCheck ( if (Status == 0) { GHCB_EVENT_INJECTION GpEvent; - GpEvent.Uint64 = 0; + GpEvent.Uint64 = 0; GpEvent.Elements.Vector = GP_EXCEPTION; GpEvent.Elements.Type = GHCB_EVENT_INJECTION_TYPE_EXCEPTION; GpEvent.Elements.Valid = 1; @@ -100,13 +103,13 @@ VmgExitErrorCheck ( UINT64 EFIAPI VmgExit ( - IN OUT GHCB *Ghcb, - IN UINT64 ExitCode, - IN UINT64 ExitInfo1, - IN UINT64 ExitInfo2 + IN OUT GHCB *Ghcb, + IN UINT64 ExitCode, + IN UINT64 ExitInfo1, + IN UINT64 ExitInfo2 ) { - Ghcb->SaveArea.SwExitCode = ExitCode; + Ghcb->SaveArea.SwExitCode = ExitCode; Ghcb->SaveArea.SwExitInfo1 = ExitInfo1; Ghcb->SaveArea.SwExitInfo2 = ExitInfo2; @@ -140,8 +143,8 @@ VmgExit ( VOID EFIAPI VmgInit ( - IN OUT GHCB *Ghcb, - IN OUT BOOLEAN *InterruptState + IN OUT GHCB *Ghcb, + IN OUT BOOLEAN *InterruptState ) { // @@ -170,8 +173,8 @@ VmgInit ( VOID EFIAPI VmgDone ( - IN OUT GHCB *Ghcb, - IN BOOLEAN InterruptState + IN OUT GHCB *Ghcb, + IN BOOLEAN InterruptState ) { if (InterruptState) { @@ -192,8 +195,8 @@ VmgDone ( VOID EFIAPI VmgSetOffsetValid ( - IN OUT GHCB *Ghcb, - IN GHCB_REGISTER Offset + IN OUT GHCB *Ghcb, + IN GHCB_REGISTER Offset ) { UINT32 OffsetIndex; @@ -221,8 +224,8 @@ VmgSetOffsetValid ( BOOLEAN EFIAPI VmgIsOffsetValid ( - IN GHCB *Ghcb, - IN GHCB_REGISTER Offset + IN GHCB *Ghcb, + IN GHCB_REGISTER Offset ) { UINT32 OffsetIndex; diff --git a/OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c b/OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c index 41b0c8cc53..81a93968c8 100644 --- a/OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c +++ b/OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c @@ -22,7 +22,7 @@ // Instruction execution mode definition // typedef enum { - LongMode64Bit = 0, + LongMode64Bit = 0, LongModeCompat32Bit, LongModeCompat16Bit, } SEV_ES_INSTRUCTION_MODE; @@ -31,7 +31,7 @@ typedef enum { // Instruction size definition (for operand and address) // typedef enum { - Size8Bits = 0, + Size8Bits = 0, Size16Bits, Size32Bits, Size64Bits, @@ -41,7 +41,7 @@ typedef enum { // Intruction segment definition // typedef enum { - SegmentEs = 0, + SegmentEs = 0, SegmentCs, SegmentSs, SegmentDs, @@ -53,70 +53,70 @@ typedef enum { // Instruction rep function definition // typedef enum { - RepNone = 0, + RepNone = 0, RepZ, RepNZ, } SEV_ES_INSTRUCTION_REP; typedef struct { - UINT8 Rm; - UINT8 Reg; - UINT8 Mod; + UINT8 Rm; + UINT8 Reg; + UINT8 Mod; } SEV_ES_INSTRUCTION_MODRM_EXT; typedef struct { - UINT8 Base; - UINT8 Index; - UINT8 Scale; + UINT8 Base; + UINT8 Index; + UINT8 Scale; } SEV_ES_INSTRUCTION_SIB_EXT; // // Instruction opcode definition // typedef struct { - SEV_ES_INSTRUCTION_MODRM_EXT ModRm; + SEV_ES_INSTRUCTION_MODRM_EXT ModRm; - SEV_ES_INSTRUCTION_SIB_EXT Sib; + SEV_ES_INSTRUCTION_SIB_EXT Sib; - UINTN RegData; - UINTN RmData; + UINTN RegData; + UINTN RmData; } SEV_ES_INSTRUCTION_OPCODE_EXT; // // Instruction parsing context definition // typedef struct { - GHCB *Ghcb; + GHCB *Ghcb; - SEV_ES_INSTRUCTION_MODE Mode; - SEV_ES_INSTRUCTION_SIZE DataSize; - SEV_ES_INSTRUCTION_SIZE AddrSize; - BOOLEAN SegmentSpecified; - SEV_ES_INSTRUCTION_SEGMENT Segment; - SEV_ES_INSTRUCTION_REP RepMode; + SEV_ES_INSTRUCTION_MODE Mode; + SEV_ES_INSTRUCTION_SIZE DataSize; + SEV_ES_INSTRUCTION_SIZE AddrSize; + BOOLEAN SegmentSpecified; + SEV_ES_INSTRUCTION_SEGMENT Segment; + SEV_ES_INSTRUCTION_REP RepMode; - UINT8 *Begin; - UINT8 *End; + UINT8 *Begin; + UINT8 *End; - UINT8 *Prefixes; - UINT8 *OpCodes; - UINT8 *Displacement; - UINT8 *Immediate; + UINT8 *Prefixes; + UINT8 *OpCodes; + UINT8 *Displacement; + UINT8 *Immediate; - INSTRUCTION_REX_PREFIX RexPrefix; + INSTRUCTION_REX_PREFIX RexPrefix; - BOOLEAN ModRmPresent; - INSTRUCTION_MODRM ModRm; + BOOLEAN ModRmPresent; + INSTRUCTION_MODRM ModRm; - BOOLEAN SibPresent; - INSTRUCTION_SIB Sib; + BOOLEAN SibPresent; + INSTRUCTION_SIB Sib; - UINTN PrefixSize; - UINTN OpCodeSize; - UINTN DisplacementSize; - UINTN ImmediateSize; + UINTN PrefixSize; + UINTN OpCodeSize; + UINTN DisplacementSize; + UINTN ImmediateSize; - SEV_ES_INSTRUCTION_OPCODE_EXT Ext; + SEV_ES_INSTRUCTION_OPCODE_EXT Ext; } SEV_ES_INSTRUCTION_DATA; // @@ -145,64 +145,65 @@ UINT64 STATIC UINT64 * GetRegisterPointer ( - IN EFI_SYSTEM_CONTEXT_X64 *Regs, - IN UINT8 Register + IN EFI_SYSTEM_CONTEXT_X64 *Regs, + IN UINT8 Register ) { - UINT64 *Reg; + UINT64 *Reg; switch (Register) { - case 0: - Reg = &Regs->Rax; - break; - case 1: - Reg = &Regs->Rcx; - break; - case 2: - Reg = &Regs->Rdx; - break; - case 3: - Reg = &Regs->Rbx; - break; - case 4: - Reg = &Regs->Rsp; - break; - case 5: - Reg = &Regs->Rbp; - break; - case 6: - Reg = &Regs->Rsi; - break; - case 7: - Reg = &Regs->Rdi; - break; - case 8: - Reg = &Regs->R8; - break; - case 9: - Reg = &Regs->R9; - break; - case 10: - Reg = &Regs->R10; - break; - case 11: - Reg = &Regs->R11; - break; - case 12: - Reg = &Regs->R12; - break; - case 13: - Reg = &Regs->R13; - break; - case 14: - Reg = &Regs->R14; - break; - case 15: - Reg = &Regs->R15; - break; - default: - Reg = NULL; + case 0: + Reg = &Regs->Rax; + break; + case 1: + Reg = &Regs->Rcx; + break; + case 2: + Reg = &Regs->Rdx; + break; + case 3: + Reg = &Regs->Rbx; + break; + case 4: + Reg = &Regs->Rsp; + break; + case 5: + Reg = &Regs->Rbp; + break; + case 6: + Reg = &Regs->Rsi; + break; + case 7: + Reg = &Regs->Rdi; + break; + case 8: + Reg = &Regs->R8; + break; + case 9: + Reg = &Regs->R9; + break; + case 10: + Reg = &Regs->R10; + break; + case 11: + Reg = &Regs->R11; + break; + case 12: + Reg = &Regs->R12; + break; + case 13: + Reg = &Regs->R13; + break; + case 14: + Reg = &Regs->R14; + break; + case 15: + Reg = &Regs->R15; + break; + default: + Reg = NULL; } + ASSERT (Reg != NULL); return Reg; @@ -223,8 +224,8 @@ UpdateForDisplacement ( ) { InstructionData->DisplacementSize = Size; - InstructionData->Immediate += Size; - InstructionData->End += Size; + InstructionData->Immediate += Size; + InstructionData->End += Size; } /** @@ -277,42 +278,43 @@ GetEffectiveMemoryAddress ( SEV_ES_INSTRUCTION_OPCODE_EXT *Ext; UINT64 EffectiveAddress; - Ext = &InstructionData->Ext; + Ext = &InstructionData->Ext; EffectiveAddress = 0; if (IsRipRelative (InstructionData)) { // // RIP-relative displacement is a 32-bit signed value // - INT32 RipRelative; + INT32 RipRelative; - RipRelative = *(INT32 *) InstructionData->Displacement; + RipRelative = *(INT32 *)InstructionData->Displacement; UpdateForDisplacement (InstructionData, 4); // // Negative displacement is handled by standard UINT64 wrap-around. // - return Regs->Rip + (UINT64) RipRelative; + return Regs->Rip + (UINT64)RipRelative; } switch (Ext->ModRm.Mod) { - case 1: - UpdateForDisplacement (InstructionData, 1); - EffectiveAddress += (UINT64) (*(INT8 *) (InstructionData->Displacement)); - break; - case 2: - switch (InstructionData->AddrSize) { - case Size16Bits: - UpdateForDisplacement (InstructionData, 2); - EffectiveAddress += (UINT64) (*(INT16 *) (InstructionData->Displacement)); + case 1: + UpdateForDisplacement (InstructionData, 1); + EffectiveAddress += (UINT64)(*(INT8 *)(InstructionData->Displacement)); break; - default: - UpdateForDisplacement (InstructionData, 4); - EffectiveAddress += (UINT64) (*(INT32 *) (InstructionData->Displacement)); + case 2: + switch (InstructionData->AddrSize) { + case Size16Bits: + UpdateForDisplacement (InstructionData, 2); + EffectiveAddress += (UINT64)(*(INT16 *)(InstructionData->Displacement)); + break; + default: + UpdateForDisplacement (InstructionData, 4); + EffectiveAddress += (UINT64)(*(INT32 *)(InstructionData->Displacement)); + break; + } + break; - } - break; } if (InstructionData->SibPresent) { @@ -329,14 +331,14 @@ GetEffectiveMemoryAddress ( // // Negative displacement is handled by standard UINT64 wrap-around. // - EffectiveAddress += (UINT64) Displacement; + EffectiveAddress += (UINT64)Displacement; } if ((Ext->Sib.Base != 5) || Ext->ModRm.Mod) { EffectiveAddress += *GetRegisterPointer (Regs, Ext->Sib.Base); } else { UpdateForDisplacement (InstructionData, 4); - EffectiveAddress += (UINT64) (*(INT32 *) (InstructionData->Displacement)); + EffectiveAddress += (UINT64)(*(INT32 *)(InstructionData->Displacement)); } } else { EffectiveAddress += *GetRegisterPointer (Regs, Ext->ModRm.Rm); @@ -368,12 +370,12 @@ DecodeModRm ( INSTRUCTION_SIB *Sib; RexPrefix = &InstructionData->RexPrefix; - Ext = &InstructionData->Ext; - ModRm = &InstructionData->ModRm; - Sib = &InstructionData->Sib; + Ext = &InstructionData->Ext; + ModRm = &InstructionData->ModRm; + Sib = &InstructionData->Sib; InstructionData->ModRmPresent = TRUE; - ModRm->Uint8 = *(InstructionData->End); + ModRm->Uint8 = *(InstructionData->End); InstructionData->Displacement++; InstructionData->Immediate++; @@ -390,7 +392,7 @@ DecodeModRm ( } else { if (ModRm->Bits.Rm == 4) { InstructionData->SibPresent = TRUE; - Sib->Uint8 = *(InstructionData->End); + Sib->Uint8 = *(InstructionData->End); InstructionData->Displacement++; InstructionData->Immediate++; @@ -430,11 +432,11 @@ DecodePrefixes ( // // Always in 64-bit mode // - Mode = LongMode64Bit; + Mode = LongMode64Bit; ModeDataSize = Size32Bits; ModeAddrSize = Size64Bits; - InstructionData->Mode = Mode; + InstructionData->Mode = Mode; InstructionData->DataSize = ModeDataSize; InstructionData->AddrSize = ModeAddrSize; @@ -452,61 +454,64 @@ DecodePrefixes ( if ((*Byte & REX_64BIT_OPERAND_SIZE_MASK) != 0) { InstructionData->DataSize = Size64Bits; } + continue; } switch (*Byte) { - case OVERRIDE_SEGMENT_CS: - case OVERRIDE_SEGMENT_DS: - case OVERRIDE_SEGMENT_ES: - case OVERRIDE_SEGMENT_SS: - if (Mode != LongMode64Bit) { + case OVERRIDE_SEGMENT_CS: + case OVERRIDE_SEGMENT_DS: + case OVERRIDE_SEGMENT_ES: + case OVERRIDE_SEGMENT_SS: + if (Mode != LongMode64Bit) { + InstructionData->SegmentSpecified = TRUE; + InstructionData->Segment = (*Byte >> 3) & 3; + } + + break; + + case OVERRIDE_SEGMENT_FS: + case OVERRIDE_SEGMENT_GS: InstructionData->SegmentSpecified = TRUE; - InstructionData->Segment = (*Byte >> 3) & 3; - } - break; - - case OVERRIDE_SEGMENT_FS: - case OVERRIDE_SEGMENT_GS: - InstructionData->SegmentSpecified = TRUE; - InstructionData->Segment = *Byte & 7; - break; - - case OVERRIDE_OPERAND_SIZE: - if (InstructionData->RexPrefix.Uint8 == 0) { - InstructionData->DataSize = - (Mode == LongMode64Bit) ? Size16Bits : + InstructionData->Segment = *Byte & 7; + break; + + case OVERRIDE_OPERAND_SIZE: + if (InstructionData->RexPrefix.Uint8 == 0) { + InstructionData->DataSize = + (Mode == LongMode64Bit) ? Size16Bits : + (Mode == LongModeCompat32Bit) ? Size16Bits : + (Mode == LongModeCompat16Bit) ? Size32Bits : 0; + } + + break; + + case OVERRIDE_ADDRESS_SIZE: + InstructionData->AddrSize = + (Mode == LongMode64Bit) ? Size32Bits : (Mode == LongModeCompat32Bit) ? Size16Bits : (Mode == LongModeCompat16Bit) ? Size32Bits : 0; - } - break; - - case OVERRIDE_ADDRESS_SIZE: - InstructionData->AddrSize = - (Mode == LongMode64Bit) ? Size32Bits : - (Mode == LongModeCompat32Bit) ? Size16Bits : - (Mode == LongModeCompat16Bit) ? Size32Bits : 0; - break; + break; - case LOCK_PREFIX: - break; + case LOCK_PREFIX: + break; - case REPZ_PREFIX: - InstructionData->RepMode = RepZ; - break; + case REPZ_PREFIX: + InstructionData->RepMode = RepZ; + break; - case REPNZ_PREFIX: - InstructionData->RepMode = RepNZ; - break; + case REPNZ_PREFIX: + InstructionData->RepMode = RepNZ; + break; - default: - InstructionData->OpCodes = Byte; - InstructionData->OpCodeSize = (*Byte == TWO_BYTE_OPCODE_ESCAPE) ? 2 : 1; + default: + InstructionData->OpCodes = Byte; + InstructionData->OpCodeSize = (*Byte == TWO_BYTE_OPCODE_ESCAPE) ? 2 : 1; - InstructionData->End = Byte + InstructionData->OpCodeSize; - InstructionData->Displacement = InstructionData->End; - InstructionData->Immediate = InstructionData->End; - return; + InstructionData->End = Byte + InstructionData->OpCodeSize; + InstructionData->Displacement = InstructionData->End; + InstructionData->Immediate = InstructionData->End; + return; } } } @@ -527,7 +532,7 @@ InstructionLength ( IN SEV_ES_INSTRUCTION_DATA *InstructionData ) { - return (UINT64) (InstructionData->End - InstructionData->Begin); + return (UINT64)(InstructionData->End - InstructionData->Begin); } /** @@ -551,9 +556,9 @@ InitInstructionData ( ) { SetMem (InstructionData, sizeof (*InstructionData), 0); - InstructionData->Ghcb = Ghcb; - InstructionData->Begin = (UINT8 *) Regs->Rip; - InstructionData->End = (UINT8 *) Regs->Rip; + InstructionData->Ghcb = Ghcb; + InstructionData->Begin = (UINT8 *)Regs->Rip; + InstructionData->End = (UINT8 *)Regs->Rip; DecodePrefixes (Regs, InstructionData); } @@ -585,7 +590,7 @@ UnsupportedExit ( if (Status == 0) { GHCB_EVENT_INJECTION Event; - Event.Uint64 = 0; + Event.Uint64 = 0; Event.Elements.Vector = GP_EXCEPTION; Event.Elements.Type = GHCB_EVENT_INJECTION_TYPE_EXCEPTION; Event.Elements.Valid = 1; @@ -643,10 +648,12 @@ ValidateMmioMemory ( // // Any state other than unencrypted is an error, issue a #GP. // - DEBUG ((DEBUG_ERROR, + DEBUG (( + DEBUG_ERROR, "MMIO using encrypted memory: %lx\n", - (UINT64) MemoryAddress)); - GpEvent.Uint64 = 0; + (UINT64)MemoryAddress + )); + GpEvent.Uint64 = 0; GpEvent.Elements.Vector = GP_EXCEPTION; GpEvent.Elements.Type = GHCB_EVENT_INJECTION_TYPE_EXCEPTION; GpEvent.Elements.Valid = 1; @@ -690,317 +697,322 @@ MmioExit ( } switch (OpCode) { - // - // MMIO write (MOV reg/memX, regX) - // - case 0x88: - Bytes = 1; + // + // MMIO write (MOV reg/memX, regX) + // + case 0x88: + Bytes = 1; // // fall through // - case 0x89: - DecodeModRm (Regs, InstructionData); - Bytes = ((Bytes != 0) ? Bytes : - (InstructionData->DataSize == Size16Bits) ? 2 : - (InstructionData->DataSize == Size32Bits) ? 4 : - (InstructionData->DataSize == Size64Bits) ? 8 : - 0); - - if (InstructionData->Ext.ModRm.Mod == 3) { - // - // NPF on two register operands??? - // - return UnsupportedExit (Ghcb, Regs, InstructionData); - } + case 0x89: + DecodeModRm (Regs, InstructionData); + Bytes = ((Bytes != 0) ? Bytes : + (InstructionData->DataSize == Size16Bits) ? 2 : + (InstructionData->DataSize == Size32Bits) ? 4 : + (InstructionData->DataSize == Size64Bits) ? 8 : + 0); + + if (InstructionData->Ext.ModRm.Mod == 3) { + // + // NPF on two register operands??? + // + return UnsupportedExit (Ghcb, Regs, InstructionData); + } - Status = ValidateMmioMemory (Ghcb, InstructionData->Ext.RmData, Bytes); - if (Status != 0) { - return Status; - } + Status = ValidateMmioMemory (Ghcb, InstructionData->Ext.RmData, Bytes); + if (Status != 0) { + return Status; + } - ExitInfo1 = InstructionData->Ext.RmData; - ExitInfo2 = Bytes; - CopyMem (Ghcb->SharedBuffer, &InstructionData->Ext.RegData, Bytes); + ExitInfo1 = InstructionData->Ext.RmData; + ExitInfo2 = Bytes; + CopyMem (Ghcb->SharedBuffer, &InstructionData->Ext.RegData, Bytes); - Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer; - VmgSetOffsetValid (Ghcb, GhcbSwScratch); - Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2); - if (Status != 0) { - return Status; - } - break; + Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer; + VmgSetOffsetValid (Ghcb, GhcbSwScratch); + Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2); + if (Status != 0) { + return Status; + } - // - // MMIO write (MOV moffsetX, aX) - // - case 0xA2: - Bytes = 1; + break; + + // + // MMIO write (MOV moffsetX, aX) + // + case 0xA2: + Bytes = 1; // // fall through // - case 0xA3: - Bytes = ((Bytes != 0) ? Bytes : - (InstructionData->DataSize == Size16Bits) ? 2 : - (InstructionData->DataSize == Size32Bits) ? 4 : - (InstructionData->DataSize == Size64Bits) ? 8 : - 0); + case 0xA3: + Bytes = ((Bytes != 0) ? Bytes : + (InstructionData->DataSize == Size16Bits) ? 2 : + (InstructionData->DataSize == Size32Bits) ? 4 : + (InstructionData->DataSize == Size64Bits) ? 8 : + 0); - InstructionData->ImmediateSize = (UINTN) (1 << InstructionData->AddrSize); - InstructionData->End += InstructionData->ImmediateSize; + InstructionData->ImmediateSize = (UINTN)(1 << InstructionData->AddrSize); + InstructionData->End += InstructionData->ImmediateSize; - // - // This code is X64 only, so a possible 8-byte copy to a UINTN is ok. - // Use a STATIC_ASSERT to be certain the code is being built as X64. - // - STATIC_ASSERT ( - sizeof (UINTN) == sizeof (UINT64), - "sizeof (UINTN) != sizeof (UINT64), this file must be built as X64" - ); - - Address = 0; - CopyMem ( - &Address, - InstructionData->Immediate, - InstructionData->ImmediateSize - ); - - Status = ValidateMmioMemory (Ghcb, Address, Bytes); - if (Status != 0) { - return Status; - } + // + // This code is X64 only, so a possible 8-byte copy to a UINTN is ok. + // Use a STATIC_ASSERT to be certain the code is being built as X64. + // + STATIC_ASSERT ( + sizeof (UINTN) == sizeof (UINT64), + "sizeof (UINTN) != sizeof (UINT64), this file must be built as X64" + ); - ExitInfo1 = Address; - ExitInfo2 = Bytes; - CopyMem (Ghcb->SharedBuffer, &Regs->Rax, Bytes); + Address = 0; + CopyMem ( + &Address, + InstructionData->Immediate, + InstructionData->ImmediateSize + ); - Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer; - VmgSetOffsetValid (Ghcb, GhcbSwScratch); - Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2); - if (Status != 0) { - return Status; - } - break; + Status = ValidateMmioMemory (Ghcb, Address, Bytes); + if (Status != 0) { + return Status; + } - // - // MMIO write (MOV reg/memX, immX) - // - case 0xC6: - Bytes = 1; + ExitInfo1 = Address; + ExitInfo2 = Bytes; + CopyMem (Ghcb->SharedBuffer, &Regs->Rax, Bytes); + + Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer; + VmgSetOffsetValid (Ghcb, GhcbSwScratch); + Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2); + if (Status != 0) { + return Status; + } + + break; + + // + // MMIO write (MOV reg/memX, immX) + // + case 0xC6: + Bytes = 1; // // fall through // - case 0xC7: - DecodeModRm (Regs, InstructionData); - Bytes = ((Bytes != 0) ? Bytes : - (InstructionData->DataSize == Size16Bits) ? 2 : - (InstructionData->DataSize == Size32Bits) ? 4 : - 0); + case 0xC7: + DecodeModRm (Regs, InstructionData); + Bytes = ((Bytes != 0) ? Bytes : + (InstructionData->DataSize == Size16Bits) ? 2 : + (InstructionData->DataSize == Size32Bits) ? 4 : + 0); - InstructionData->ImmediateSize = Bytes; - InstructionData->End += Bytes; + InstructionData->ImmediateSize = Bytes; + InstructionData->End += Bytes; - Status = ValidateMmioMemory (Ghcb, InstructionData->Ext.RmData, Bytes); - if (Status != 0) { - return Status; - } + Status = ValidateMmioMemory (Ghcb, InstructionData->Ext.RmData, Bytes); + if (Status != 0) { + return Status; + } - ExitInfo1 = InstructionData->Ext.RmData; - ExitInfo2 = Bytes; - CopyMem (Ghcb->SharedBuffer, InstructionData->Immediate, Bytes); + ExitInfo1 = InstructionData->Ext.RmData; + ExitInfo2 = Bytes; + CopyMem (Ghcb->SharedBuffer, InstructionData->Immediate, Bytes); - Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer; - VmgSetOffsetValid (Ghcb, GhcbSwScratch); - Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2); - if (Status != 0) { - return Status; - } - break; + Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer; + VmgSetOffsetValid (Ghcb, GhcbSwScratch); + Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2); + if (Status != 0) { + return Status; + } - // - // MMIO read (MOV regX, reg/memX) - // - case 0x8A: - Bytes = 1; + break; + + // + // MMIO read (MOV regX, reg/memX) + // + case 0x8A: + Bytes = 1; // // fall through // - case 0x8B: - DecodeModRm (Regs, InstructionData); - Bytes = ((Bytes != 0) ? Bytes : - (InstructionData->DataSize == Size16Bits) ? 2 : - (InstructionData->DataSize == Size32Bits) ? 4 : - (InstructionData->DataSize == Size64Bits) ? 8 : - 0); - if (InstructionData->Ext.ModRm.Mod == 3) { - // - // NPF on two register operands??? - // - return UnsupportedExit (Ghcb, Regs, InstructionData); - } + case 0x8B: + DecodeModRm (Regs, InstructionData); + Bytes = ((Bytes != 0) ? Bytes : + (InstructionData->DataSize == Size16Bits) ? 2 : + (InstructionData->DataSize == Size32Bits) ? 4 : + (InstructionData->DataSize == Size64Bits) ? 8 : + 0); + if (InstructionData->Ext.ModRm.Mod == 3) { + // + // NPF on two register operands??? + // + return UnsupportedExit (Ghcb, Regs, InstructionData); + } - Status = ValidateMmioMemory (Ghcb, InstructionData->Ext.RmData, Bytes); - if (Status != 0) { - return Status; - } + Status = ValidateMmioMemory (Ghcb, InstructionData->Ext.RmData, Bytes); + if (Status != 0) { + return Status; + } - ExitInfo1 = InstructionData->Ext.RmData; - ExitInfo2 = Bytes; + ExitInfo1 = InstructionData->Ext.RmData; + ExitInfo2 = Bytes; - Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer; - VmgSetOffsetValid (Ghcb, GhcbSwScratch); - Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2); - if (Status != 0) { - return Status; - } + Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer; + VmgSetOffsetValid (Ghcb, GhcbSwScratch); + Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2); + if (Status != 0) { + return Status; + } - Register = GetRegisterPointer (Regs, InstructionData->Ext.ModRm.Reg); - if (Bytes == 4) { - // - // Zero-extend for 32-bit operation - // - *Register = 0; - } - CopyMem (Register, Ghcb->SharedBuffer, Bytes); - break; + Register = GetRegisterPointer (Regs, InstructionData->Ext.ModRm.Reg); + if (Bytes == 4) { + // + // Zero-extend for 32-bit operation + // + *Register = 0; + } + + CopyMem (Register, Ghcb->SharedBuffer, Bytes); + break; - // - // MMIO read (MOV aX, moffsetX) - // - case 0xA0: - Bytes = 1; // - // fall through + // MMIO read (MOV aX, moffsetX) // - case 0xA1: - Bytes = ((Bytes != 0) ? Bytes : - (InstructionData->DataSize == Size16Bits) ? 2 : - (InstructionData->DataSize == Size32Bits) ? 4 : - (InstructionData->DataSize == Size64Bits) ? 8 : - 0); - - InstructionData->ImmediateSize = (UINTN) (1 << InstructionData->AddrSize); - InstructionData->End += InstructionData->ImmediateSize; - + case 0xA0: + Bytes = 1; // - // This code is X64 only, so a possible 8-byte copy to a UINTN is ok. - // Use a STATIC_ASSERT to be certain the code is being built as X64. + // fall through // - STATIC_ASSERT ( - sizeof (UINTN) == sizeof (UINT64), - "sizeof (UINTN) != sizeof (UINT64), this file must be built as X64" - ); - - Address = 0; - CopyMem ( - &Address, - InstructionData->Immediate, - InstructionData->ImmediateSize - ); - - Status = ValidateMmioMemory (Ghcb, Address, Bytes); - if (Status != 0) { - return Status; - } - - ExitInfo1 = Address; - ExitInfo2 = Bytes; + case 0xA1: + Bytes = ((Bytes != 0) ? Bytes : + (InstructionData->DataSize == Size16Bits) ? 2 : + (InstructionData->DataSize == Size32Bits) ? 4 : + (InstructionData->DataSize == Size64Bits) ? 8 : + 0); - Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer; - VmgSetOffsetValid (Ghcb, GhcbSwScratch); - Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2); - if (Status != 0) { - return Status; - } + InstructionData->ImmediateSize = (UINTN)(1 << InstructionData->AddrSize); + InstructionData->End += InstructionData->ImmediateSize; - if (Bytes == 4) { // - // Zero-extend for 32-bit operation + // This code is X64 only, so a possible 8-byte copy to a UINTN is ok. + // Use a STATIC_ASSERT to be certain the code is being built as X64. // - Regs->Rax = 0; - } - CopyMem (&Regs->Rax, Ghcb->SharedBuffer, Bytes); - break; + STATIC_ASSERT ( + sizeof (UINTN) == sizeof (UINT64), + "sizeof (UINTN) != sizeof (UINT64), this file must be built as X64" + ); - // - // MMIO read w/ zero-extension ((MOVZX regX, reg/memX) - // - case 0xB6: - Bytes = 1; + Address = 0; + CopyMem ( + &Address, + InstructionData->Immediate, + InstructionData->ImmediateSize + ); + + Status = ValidateMmioMemory (Ghcb, Address, Bytes); + if (Status != 0) { + return Status; + } + + ExitInfo1 = Address; + ExitInfo2 = Bytes; + + Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer; + VmgSetOffsetValid (Ghcb, GhcbSwScratch); + Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2); + if (Status != 0) { + return Status; + } + + if (Bytes == 4) { + // + // Zero-extend for 32-bit operation + // + Regs->Rax = 0; + } + + CopyMem (&Regs->Rax, Ghcb->SharedBuffer, Bytes); + break; + + // + // MMIO read w/ zero-extension ((MOVZX regX, reg/memX) + // + case 0xB6: + Bytes = 1; // // fall through // - case 0xB7: - DecodeModRm (Regs, InstructionData); - Bytes = (Bytes != 0) ? Bytes : 2; + case 0xB7: + DecodeModRm (Regs, InstructionData); + Bytes = (Bytes != 0) ? Bytes : 2; - Status = ValidateMmioMemory (Ghcb, InstructionData->Ext.RmData, Bytes); - if (Status != 0) { - return Status; - } + Status = ValidateMmioMemory (Ghcb, InstructionData->Ext.RmData, Bytes); + if (Status != 0) { + return Status; + } - ExitInfo1 = InstructionData->Ext.RmData; - ExitInfo2 = Bytes; + ExitInfo1 = InstructionData->Ext.RmData; + ExitInfo2 = Bytes; - Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer; - VmgSetOffsetValid (Ghcb, GhcbSwScratch); - Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2); - if (Status != 0) { - return Status; - } + Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer; + VmgSetOffsetValid (Ghcb, GhcbSwScratch); + Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2); + if (Status != 0) { + return Status; + } - Register = GetRegisterPointer (Regs, InstructionData->Ext.ModRm.Reg); - SetMem (Register, (UINTN) (1 << InstructionData->DataSize), 0); - CopyMem (Register, Ghcb->SharedBuffer, Bytes); - break; + Register = GetRegisterPointer (Regs, InstructionData->Ext.ModRm.Reg); + SetMem (Register, (UINTN)(1 << InstructionData->DataSize), 0); + CopyMem (Register, Ghcb->SharedBuffer, Bytes); + break; - // - // MMIO read w/ sign-extension (MOVSX regX, reg/memX) - // - case 0xBE: - Bytes = 1; + // + // MMIO read w/ sign-extension (MOVSX regX, reg/memX) + // + case 0xBE: + Bytes = 1; // // fall through // - case 0xBF: - DecodeModRm (Regs, InstructionData); - Bytes = (Bytes != 0) ? Bytes : 2; + case 0xBF: + DecodeModRm (Regs, InstructionData); + Bytes = (Bytes != 0) ? Bytes : 2; - Status = ValidateMmioMemory (Ghcb, InstructionData->Ext.RmData, Bytes); - if (Status != 0) { - return Status; - } + Status = ValidateMmioMemory (Ghcb, InstructionData->Ext.RmData, Bytes); + if (Status != 0) { + return Status; + } - ExitInfo1 = InstructionData->Ext.RmData; - ExitInfo2 = Bytes; + ExitInfo1 = InstructionData->Ext.RmData; + ExitInfo2 = Bytes; - Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer; - VmgSetOffsetValid (Ghcb, GhcbSwScratch); - Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2); - if (Status != 0) { - return Status; - } + Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer; + VmgSetOffsetValid (Ghcb, GhcbSwScratch); + Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2); + if (Status != 0) { + return Status; + } - if (Bytes == 1) { - UINT8 *Data; + if (Bytes == 1) { + UINT8 *Data; - Data = (UINT8 *) Ghcb->SharedBuffer; - SignByte = ((*Data & BIT7) != 0) ? 0xFF : 0x00; - } else { - UINT16 *Data; + Data = (UINT8 *)Ghcb->SharedBuffer; + SignByte = ((*Data & BIT7) != 0) ? 0xFF : 0x00; + } else { + UINT16 *Data; - Data = (UINT16 *) Ghcb->SharedBuffer; - SignByte = ((*Data & BIT15) != 0) ? 0xFF : 0x00; - } + Data = (UINT16 *)Ghcb->SharedBuffer; + SignByte = ((*Data & BIT15) != 0) ? 0xFF : 0x00; + } - Register = GetRegisterPointer (Regs, InstructionData->Ext.ModRm.Reg); - SetMem (Register, (UINTN) (1 << InstructionData->DataSize), SignByte); - CopyMem (Register, Ghcb->SharedBuffer, Bytes); - break; + Register = GetRegisterPointer (Regs, InstructionData->Ext.ModRm.Reg); + SetMem (Register, (UINTN)(1 << InstructionData->DataSize), SignByte); + CopyMem (Register, Ghcb->SharedBuffer, Bytes); + break; - default: - DEBUG ((DEBUG_ERROR, "Invalid MMIO opcode (%x)\n", OpCode)); - Status = GP_EXCEPTION; - ASSERT (FALSE); + default: + DEBUG ((DEBUG_ERROR, "Invalid MMIO opcode (%x)\n", OpCode)); + Status = GP_EXCEPTION; + ASSERT (FALSE); } return Status; @@ -1130,9 +1142,11 @@ RdtscpExit ( if (!VmgIsOffsetValid (Ghcb, GhcbRax) || !VmgIsOffsetValid (Ghcb, GhcbRcx) || - !VmgIsOffsetValid (Ghcb, GhcbRdx)) { + !VmgIsOffsetValid (Ghcb, GhcbRdx)) + { return UnsupportedExit (Ghcb, Regs, InstructionData); } + Regs->Rax = Ghcb->SaveArea.Rax; Regs->Rcx = Ghcb->SaveArea.Rcx; Regs->Rdx = Ghcb->SaveArea.Rdx; @@ -1168,7 +1182,7 @@ VmmCallExit ( Ghcb->SaveArea.Rax = Regs->Rax; VmgSetOffsetValid (Ghcb, GhcbRax); - Ghcb->SaveArea.Cpl = (UINT8) (Regs->Cs & 0x3); + Ghcb->SaveArea.Cpl = (UINT8)(Regs->Cs & 0x3); VmgSetOffsetValid (Ghcb, GhcbCpl); Status = VmgExit (Ghcb, SVM_EXIT_VMMCALL, 0, 0); @@ -1179,6 +1193,7 @@ VmmCallExit ( if (!VmgIsOffsetValid (Ghcb, GhcbRax)) { return UnsupportedExit (Ghcb, Regs, InstructionData); } + Regs->Rax = Ghcb->SaveArea.Rax; return 0; @@ -1211,21 +1226,21 @@ MsrExit ( ExitInfo1 = 0; switch (*(InstructionData->OpCodes + 1)) { - case 0x30: // WRMSR - ExitInfo1 = 1; - Ghcb->SaveArea.Rax = Regs->Rax; - VmgSetOffsetValid (Ghcb, GhcbRax); - Ghcb->SaveArea.Rdx = Regs->Rdx; - VmgSetOffsetValid (Ghcb, GhcbRdx); + case 0x30: // WRMSR + ExitInfo1 = 1; + Ghcb->SaveArea.Rax = Regs->Rax; + VmgSetOffsetValid (Ghcb, GhcbRax); + Ghcb->SaveArea.Rdx = Regs->Rdx; + VmgSetOffsetValid (Ghcb, GhcbRdx); // // fall through // - case 0x32: // RDMSR - Ghcb->SaveArea.Rcx = Regs->Rcx; - VmgSetOffsetValid (Ghcb, GhcbRcx); - break; - default: - return UnsupportedExit (Ghcb, Regs, InstructionData); + case 0x32: // RDMSR + Ghcb->SaveArea.Rcx = Regs->Rcx; + VmgSetOffsetValid (Ghcb, GhcbRcx); + break; + default: + return UnsupportedExit (Ghcb, Regs, InstructionData); } Status = VmgExit (Ghcb, SVM_EXIT_MSR, ExitInfo1, 0); @@ -1235,9 +1250,11 @@ MsrExit ( if (ExitInfo1 == 0) { if (!VmgIsOffsetValid (Ghcb, GhcbRax) || - !VmgIsOffsetValid (Ghcb, GhcbRdx)) { + !VmgIsOffsetValid (Ghcb, GhcbRdx)) + { return UnsupportedExit (Ghcb, Regs, InstructionData); } + Regs->Rax = Ghcb->SaveArea.Rax; Regs->Rdx = Ghcb->SaveArea.Rdx; } @@ -1269,106 +1286,106 @@ IoioExitInfo ( ExitInfo = 0; switch (*(InstructionData->OpCodes)) { - // - // INS opcodes - // - case 0x6C: - case 0x6D: - ExitInfo |= IOIO_TYPE_INS; - ExitInfo |= IOIO_SEG_ES; - ExitInfo |= ((Regs->Rdx & 0xffff) << 16); - break; + // + // INS opcodes + // + case 0x6C: + case 0x6D: + ExitInfo |= IOIO_TYPE_INS; + ExitInfo |= IOIO_SEG_ES; + ExitInfo |= ((Regs->Rdx & 0xffff) << 16); + break; - // - // OUTS opcodes - // - case 0x6E: - case 0x6F: - ExitInfo |= IOIO_TYPE_OUTS; - ExitInfo |= IOIO_SEG_DS; - ExitInfo |= ((Regs->Rdx & 0xffff) << 16); - break; + // + // OUTS opcodes + // + case 0x6E: + case 0x6F: + ExitInfo |= IOIO_TYPE_OUTS; + ExitInfo |= IOIO_SEG_DS; + ExitInfo |= ((Regs->Rdx & 0xffff) << 16); + break; - // - // IN immediate opcodes - // - case 0xE4: - case 0xE5: - InstructionData->ImmediateSize = 1; - InstructionData->End++; - ExitInfo |= IOIO_TYPE_IN; - ExitInfo |= ((*(InstructionData->OpCodes + 1)) << 16); - break; + // + // IN immediate opcodes + // + case 0xE4: + case 0xE5: + InstructionData->ImmediateSize = 1; + InstructionData->End++; + ExitInfo |= IOIO_TYPE_IN; + ExitInfo |= ((*(InstructionData->OpCodes + 1)) << 16); + break; - // - // OUT immediate opcodes - // - case 0xE6: - case 0xE7: - InstructionData->ImmediateSize = 1; - InstructionData->End++; - ExitInfo |= IOIO_TYPE_OUT; - ExitInfo |= ((*(InstructionData->OpCodes + 1)) << 16) | IOIO_TYPE_OUT; - break; + // + // OUT immediate opcodes + // + case 0xE6: + case 0xE7: + InstructionData->ImmediateSize = 1; + InstructionData->End++; + ExitInfo |= IOIO_TYPE_OUT; + ExitInfo |= ((*(InstructionData->OpCodes + 1)) << 16) | IOIO_TYPE_OUT; + break; - // - // IN register opcodes - // - case 0xEC: - case 0xED: - ExitInfo |= IOIO_TYPE_IN; - ExitInfo |= ((Regs->Rdx & 0xffff) << 16); - break; + // + // IN register opcodes + // + case 0xEC: + case 0xED: + ExitInfo |= IOIO_TYPE_IN; + ExitInfo |= ((Regs->Rdx & 0xffff) << 16); + break; - // - // OUT register opcodes - // - case 0xEE: - case 0xEF: - ExitInfo |= IOIO_TYPE_OUT; - ExitInfo |= ((Regs->Rdx & 0xffff) << 16); - break; + // + // OUT register opcodes + // + case 0xEE: + case 0xEF: + ExitInfo |= IOIO_TYPE_OUT; + ExitInfo |= ((Regs->Rdx & 0xffff) << 16); + break; - default: - return 0; + default: + return 0; } switch (*(InstructionData->OpCodes)) { - // - // Single-byte opcodes - // - case 0x6C: - case 0x6E: - case 0xE4: - case 0xE6: - case 0xEC: - case 0xEE: - ExitInfo |= IOIO_DATA_8; - break; + // + // Single-byte opcodes + // + case 0x6C: + case 0x6E: + case 0xE4: + case 0xE6: + case 0xEC: + case 0xEE: + ExitInfo |= IOIO_DATA_8; + break; - // - // Length determined by instruction parsing - // - default: - ExitInfo |= (InstructionData->DataSize == Size16Bits) ? IOIO_DATA_16 + // + // Length determined by instruction parsing + // + default: + ExitInfo |= (InstructionData->DataSize == Size16Bits) ? IOIO_DATA_16 : IOIO_DATA_32; } switch (InstructionData->AddrSize) { - case Size16Bits: - ExitInfo |= IOIO_ADDR_16; - break; + case Size16Bits: + ExitInfo |= IOIO_ADDR_16; + break; - case Size32Bits: - ExitInfo |= IOIO_ADDR_32; - break; + case Size32Bits: + ExitInfo |= IOIO_ADDR_32; + break; - case Size64Bits: - ExitInfo |= IOIO_ADDR_64; - break; + case Size64Bits: + ExitInfo |= IOIO_ADDR_64; + break; - default: - break; + default: + break; } if (InstructionData->RepMode != 0) { @@ -1415,20 +1432,20 @@ IoioExit ( Status = 0; - IoBytes = IOIO_DATA_BYTES (ExitInfo1); + IoBytes = IOIO_DATA_BYTES (ExitInfo1); GhcbCount = sizeof (Ghcb->SharedBuffer) / IoBytes; OpCount = ((ExitInfo1 & IOIO_REP) != 0) ? Regs->Rcx : 1; while (OpCount != 0) { - ExitInfo2 = MIN (OpCount, GhcbCount); + ExitInfo2 = MIN (OpCount, GhcbCount); VmgExitBytes = ExitInfo2 * IoBytes; if ((ExitInfo1 & IOIO_TYPE_IN) == 0) { - CopyMem (Ghcb->SharedBuffer, (VOID *) Regs->Rsi, VmgExitBytes); + CopyMem (Ghcb->SharedBuffer, (VOID *)Regs->Rsi, VmgExitBytes); Regs->Rsi += VmgExitBytes; } - Ghcb->SaveArea.SwScratch = (UINT64) Ghcb->SharedBuffer; + Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer; VmgSetOffsetValid (Ghcb, GhcbSwScratch); Status = VmgExit (Ghcb, SVM_EXIT_IOIO_PROT, ExitInfo1, ExitInfo2); if (Status != 0) { @@ -1436,7 +1453,7 @@ IoioExit ( } if ((ExitInfo1 & IOIO_TYPE_IN) != 0) { - CopyMem ((VOID *) Regs->Rdi, Ghcb->SharedBuffer, VmgExitBytes); + CopyMem ((VOID *)Regs->Rdi, Ghcb->SharedBuffer, VmgExitBytes); Regs->Rdi += VmgExitBytes; } @@ -1452,6 +1469,7 @@ IoioExit ( } else { CopyMem (&Ghcb->SaveArea.Rax, &Regs->Rax, IOIO_DATA_BYTES (ExitInfo1)); } + VmgSetOffsetValid (Ghcb, GhcbRax); Status = VmgExit (Ghcb, SVM_EXIT_IOIO_PROT, ExitInfo1, 0); @@ -1463,6 +1481,7 @@ IoioExit ( if (!VmgIsOffsetValid (Ghcb, GhcbRax)) { return UnsupportedExit (Ghcb, Regs, InstructionData); } + CopyMem (&Regs->Rax, &Ghcb->SaveArea.Rax, IOIO_DATA_BYTES (ExitInfo1)); } } @@ -1526,7 +1545,7 @@ CpuidExit ( if (Regs->Rax == CPUID_EXTENDED_STATE) { IA32_CR4 Cr4; - Cr4.UintN = AsmReadCr4 (); + Cr4.UintN = AsmReadCr4 (); Ghcb->SaveArea.XCr0 = (Cr4.Bits.OSXSAVE == 1) ? AsmXGetBv (0) : 1; VmgSetOffsetValid (Ghcb, GhcbXCr0); } @@ -1539,9 +1558,11 @@ CpuidExit ( if (!VmgIsOffsetValid (Ghcb, GhcbRax) || !VmgIsOffsetValid (Ghcb, GhcbRbx) || !VmgIsOffsetValid (Ghcb, GhcbRcx) || - !VmgIsOffsetValid (Ghcb, GhcbRdx)) { + !VmgIsOffsetValid (Ghcb, GhcbRdx)) + { return UnsupportedExit (Ghcb, Regs, InstructionData); } + Regs->Rax = Ghcb->SaveArea.Rax; Regs->Rbx = Ghcb->SaveArea.Rbx; Regs->Rcx = Ghcb->SaveArea.Rcx; @@ -1583,9 +1604,11 @@ RdpmcExit ( } if (!VmgIsOffsetValid (Ghcb, GhcbRax) || - !VmgIsOffsetValid (Ghcb, GhcbRdx)) { + !VmgIsOffsetValid (Ghcb, GhcbRdx)) + { return UnsupportedExit (Ghcb, Regs, InstructionData); } + Regs->Rax = Ghcb->SaveArea.Rax; Regs->Rdx = Ghcb->SaveArea.Rdx; @@ -1622,9 +1645,11 @@ RdtscExit ( } if (!VmgIsOffsetValid (Ghcb, GhcbRax) || - !VmgIsOffsetValid (Ghcb, GhcbRdx)) { + !VmgIsOffsetValid (Ghcb, GhcbRdx)) + { return UnsupportedExit (Ghcb, Regs, InstructionData); } + Regs->Rax = Ghcb->SaveArea.Rax; Regs->Rdx = Ghcb->SaveArea.Rdx; @@ -1658,8 +1683,8 @@ Dr7WriteExit ( UINT64 *Register; UINT64 Status; - Ext = &InstructionData->Ext; - SevEsData = (SEV_ES_PER_CPU_DATA *) (Ghcb + 1); + Ext = &InstructionData->Ext; + SevEsData = (SEV_ES_PER_CPU_DATA *)(Ghcb + 1); DecodeModRm (Regs, InstructionData); @@ -1679,7 +1704,7 @@ Dr7WriteExit ( return Status; } - SevEsData->Dr7 = *Register; + SevEsData->Dr7 = *Register; SevEsData->Dr7Cached = 1; return 0; @@ -1710,8 +1735,8 @@ Dr7ReadExit ( SEV_ES_PER_CPU_DATA *SevEsData; UINT64 *Register; - Ext = &InstructionData->Ext; - SevEsData = (SEV_ES_PER_CPU_DATA *) (Ghcb + 1); + Ext = &InstructionData->Ext; + SevEsData = (SEV_ES_PER_CPU_DATA *)(Ghcb + 1); DecodeModRm (Regs, InstructionData); @@ -1754,12 +1779,12 @@ InternalVmgExitHandleVc ( IN OUT EFI_SYSTEM_CONTEXT SystemContext ) { - EFI_SYSTEM_CONTEXT_X64 *Regs; - NAE_EXIT NaeExit; - SEV_ES_INSTRUCTION_DATA InstructionData; - UINT64 ExitCode, Status; - EFI_STATUS VcRet; - BOOLEAN InterruptState; + EFI_SYSTEM_CONTEXT_X64 *Regs; + NAE_EXIT NaeExit; + SEV_ES_INSTRUCTION_DATA InstructionData; + UINT64 ExitCode, Status; + EFI_STATUS VcRet; + BOOLEAN InterruptState; VcRet = EFI_SUCCESS; @@ -1769,64 +1794,64 @@ InternalVmgExitHandleVc ( ExitCode = Regs->ExceptionData; switch (ExitCode) { - case SVM_EXIT_DR7_READ: - NaeExit = Dr7ReadExit; - break; + case SVM_EXIT_DR7_READ: + NaeExit = Dr7ReadExit; + break; - case SVM_EXIT_DR7_WRITE: - NaeExit = Dr7WriteExit; - break; + case SVM_EXIT_DR7_WRITE: + NaeExit = Dr7WriteExit; + break; - case SVM_EXIT_RDTSC: - NaeExit = RdtscExit; - break; + case SVM_EXIT_RDTSC: + NaeExit = RdtscExit; + break; - case SVM_EXIT_RDPMC: - NaeExit = RdpmcExit; - break; + case SVM_EXIT_RDPMC: + NaeExit = RdpmcExit; + break; - case SVM_EXIT_CPUID: - NaeExit = CpuidExit; - break; + case SVM_EXIT_CPUID: + NaeExit = CpuidExit; + break; - case SVM_EXIT_INVD: - NaeExit = InvdExit; - break; + case SVM_EXIT_INVD: + NaeExit = InvdExit; + break; - case SVM_EXIT_IOIO_PROT: - NaeExit = IoioExit; - break; + case SVM_EXIT_IOIO_PROT: + NaeExit = IoioExit; + break; - case SVM_EXIT_MSR: - NaeExit = MsrExit; - break; + case SVM_EXIT_MSR: + NaeExit = MsrExit; + break; - case SVM_EXIT_VMMCALL: - NaeExit = VmmCallExit; - break; + case SVM_EXIT_VMMCALL: + NaeExit = VmmCallExit; + break; - case SVM_EXIT_RDTSCP: - NaeExit = RdtscpExit; - break; + case SVM_EXIT_RDTSCP: + NaeExit = RdtscpExit; + break; - case SVM_EXIT_WBINVD: - NaeExit = WbinvdExit; - break; + case SVM_EXIT_WBINVD: + NaeExit = WbinvdExit; + break; - case SVM_EXIT_MONITOR: - NaeExit = MonitorExit; - break; + case SVM_EXIT_MONITOR: + NaeExit = MonitorExit; + break; - case SVM_EXIT_MWAIT: - NaeExit = MwaitExit; - break; + case SVM_EXIT_MWAIT: + NaeExit = MwaitExit; + break; - case SVM_EXIT_NPF: - NaeExit = MmioExit; - break; + case SVM_EXIT_NPF: + NaeExit = MmioExit; + break; - default: - NaeExit = UnsupportedExit; + default: + NaeExit = UnsupportedExit; } InitInstructionData (&InstructionData, Ghcb, Regs); diff --git a/OvmfPkg/Library/X86QemuLoadImageLib/X86QemuLoadImageLib.c b/OvmfPkg/Library/X86QemuLoadImageLib/X86QemuLoadImageLib.c index 9f30df2973..248a03e8db 100644 --- a/OvmfPkg/Library/X86QemuLoadImageLib/X86QemuLoadImageLib.c +++ b/OvmfPkg/Library/X86QemuLoadImageLib/X86QemuLoadImageLib.c @@ -27,31 +27,31 @@ #pragma pack (1) typedef struct { - EFI_DEVICE_PATH_PROTOCOL FilePathHeader; - CHAR16 FilePath[ARRAY_SIZE (L"kernel")]; + EFI_DEVICE_PATH_PROTOCOL FilePathHeader; + CHAR16 FilePath[ARRAY_SIZE (L"kernel")]; } KERNEL_FILE_DEVPATH; typedef struct { - VENDOR_DEVICE_PATH VenMediaNode; - KERNEL_FILE_DEVPATH FileNode; - EFI_DEVICE_PATH_PROTOCOL EndNode; + VENDOR_DEVICE_PATH VenMediaNode; + KERNEL_FILE_DEVPATH FileNode; + EFI_DEVICE_PATH_PROTOCOL EndNode; } KERNEL_VENMEDIA_FILE_DEVPATH; #pragma pack () -STATIC CONST KERNEL_VENMEDIA_FILE_DEVPATH mKernelDevicePath = { +STATIC CONST KERNEL_VENMEDIA_FILE_DEVPATH mKernelDevicePath = { { { MEDIA_DEVICE_PATH, MEDIA_VENDOR_DP, - { sizeof (VENDOR_DEVICE_PATH) } + { sizeof (VENDOR_DEVICE_PATH) } }, QEMU_KERNEL_LOADER_FS_MEDIA_GUID - }, { + }, { { MEDIA_DEVICE_PATH, MEDIA_FILEPATH_DP, - { sizeof (KERNEL_FILE_DEVPATH) } + { sizeof (KERNEL_FILE_DEVPATH) } }, L"kernel", - }, { + }, { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { sizeof (EFI_DEVICE_PATH_PROTOCOL) } } @@ -60,37 +60,48 @@ STATIC CONST KERNEL_VENMEDIA_FILE_DEVPATH mKernelDevicePath = { STATIC VOID FreeLegacyImage ( - IN OVMF_LOADED_X86_LINUX_KERNEL *LoadedImage + IN OVMF_LOADED_X86_LINUX_KERNEL *LoadedImage ) { if (LoadedImage->SetupBuf != NULL) { - FreePages (LoadedImage->SetupBuf, - EFI_SIZE_TO_PAGES (LoadedImage->SetupSize)); + FreePages ( + LoadedImage->SetupBuf, + EFI_SIZE_TO_PAGES (LoadedImage->SetupSize) + ); } + if (LoadedImage->KernelBuf != NULL) { - FreePages (LoadedImage->KernelBuf, - EFI_SIZE_TO_PAGES (LoadedImage->KernelInitialSize)); + FreePages ( + LoadedImage->KernelBuf, + EFI_SIZE_TO_PAGES (LoadedImage->KernelInitialSize) + ); } + if (LoadedImage->CommandLine != NULL) { - FreePages (LoadedImage->CommandLine, - EFI_SIZE_TO_PAGES (LoadedImage->CommandLineSize)); + FreePages ( + LoadedImage->CommandLine, + EFI_SIZE_TO_PAGES (LoadedImage->CommandLineSize) + ); } + if (LoadedImage->InitrdData != NULL) { - FreePages (LoadedImage->InitrdData, - EFI_SIZE_TO_PAGES (LoadedImage->InitrdSize)); + FreePages ( + LoadedImage->InitrdData, + EFI_SIZE_TO_PAGES (LoadedImage->InitrdSize) + ); } } STATIC EFI_STATUS QemuLoadLegacyImage ( - OUT EFI_HANDLE *ImageHandle + OUT EFI_HANDLE *ImageHandle ) { - EFI_STATUS Status; - UINTN KernelSize; - UINTN SetupSize; - OVMF_LOADED_X86_LINUX_KERNEL *LoadedImage; + EFI_STATUS Status; + UINTN KernelSize; + UINTN SetupSize; + OVMF_LOADED_X86_LINUX_KERNEL *LoadedImage; QemuFwCfgSelectItem (QemuFwCfgItemKernelSize); KernelSize = (UINTN)QemuFwCfgRead32 (); @@ -98,7 +109,7 @@ QemuLoadLegacyImage ( QemuFwCfgSelectItem (QemuFwCfgItemKernelSetupSize); SetupSize = (UINTN)QemuFwCfgRead32 (); - if (KernelSize == 0 || SetupSize == 0) { + if ((KernelSize == 0) || (SetupSize == 0)) { DEBUG ((DEBUG_INFO, "qemu -kernel was not used.\n")); return EFI_NOT_FOUND; } @@ -109,8 +120,9 @@ QemuLoadLegacyImage ( } LoadedImage->SetupSize = SetupSize; - LoadedImage->SetupBuf = LoadLinuxAllocateKernelSetupPages ( - EFI_SIZE_TO_PAGES (LoadedImage->SetupSize)); + LoadedImage->SetupBuf = LoadLinuxAllocateKernelSetupPages ( + EFI_SIZE_TO_PAGES (LoadedImage->SetupSize) + ); if (LoadedImage->SetupBuf == NULL) { DEBUG ((DEBUG_ERROR, "Unable to allocate memory for kernel setup!\n")); Status = EFI_OUT_OF_RESOURCES; @@ -123,8 +135,10 @@ QemuLoadLegacyImage ( QemuFwCfgReadBytes (LoadedImage->SetupSize, LoadedImage->SetupBuf); DEBUG ((DEBUG_INFO, " [done]\n")); - Status = LoadLinuxCheckKernelSetup (LoadedImage->SetupBuf, - LoadedImage->SetupSize); + Status = LoadLinuxCheckKernelSetup ( + LoadedImage->SetupBuf, + LoadedImage->SetupSize + ); if (EFI_ERROR (Status)) { goto FreeImage; } @@ -135,7 +149,9 @@ QemuLoadLegacyImage ( } LoadedImage->KernelInitialSize = LoadLinuxGetKernelSize ( - LoadedImage->SetupBuf, KernelSize); + LoadedImage->SetupBuf, + KernelSize + ); if (LoadedImage->KernelInitialSize == 0) { Status = EFI_UNSUPPORTED; goto FreeImage; @@ -163,18 +179,23 @@ QemuLoadLegacyImage ( if (LoadedImage->CommandLineSize > 0) { LoadedImage->CommandLine = LoadLinuxAllocateCommandLinePages ( EFI_SIZE_TO_PAGES ( - LoadedImage->CommandLineSize)); + LoadedImage->CommandLineSize + ) + ); if (LoadedImage->CommandLine == NULL) { DEBUG ((DEBUG_ERROR, "Unable to allocate memory for kernel command line!\n")); Status = EFI_OUT_OF_RESOURCES; goto FreeImage; } + QemuFwCfgSelectItem (QemuFwCfgItemCommandLineData); QemuFwCfgReadBytes (LoadedImage->CommandLineSize, LoadedImage->CommandLine); } - Status = LoadLinuxSetCommandLine (LoadedImage->SetupBuf, - LoadedImage->CommandLine); + Status = LoadLinuxSetCommandLine ( + LoadedImage->SetupBuf, + LoadedImage->CommandLine + ); if (EFI_ERROR (Status)) { goto FreeImage; } @@ -185,33 +206,45 @@ QemuLoadLegacyImage ( if (LoadedImage->InitrdSize > 0) { LoadedImage->InitrdData = LoadLinuxAllocateInitrdPages ( LoadedImage->SetupBuf, - EFI_SIZE_TO_PAGES (LoadedImage->InitrdSize)); + EFI_SIZE_TO_PAGES (LoadedImage->InitrdSize) + ); if (LoadedImage->InitrdData == NULL) { DEBUG ((DEBUG_ERROR, "Unable to allocate memory for initrd!\n")); Status = EFI_OUT_OF_RESOURCES; goto FreeImage; } - DEBUG ((DEBUG_INFO, "Initrd size: 0x%x\n", - (UINT32)LoadedImage->InitrdSize)); + + DEBUG (( + DEBUG_INFO, + "Initrd size: 0x%x\n", + (UINT32)LoadedImage->InitrdSize + )); DEBUG ((DEBUG_INFO, "Reading initrd image ...")); QemuFwCfgSelectItem (QemuFwCfgItemInitrdData); QemuFwCfgReadBytes (LoadedImage->InitrdSize, LoadedImage->InitrdData); DEBUG ((DEBUG_INFO, " [done]\n")); } - Status = LoadLinuxSetInitrd (LoadedImage->SetupBuf, LoadedImage->InitrdData, - LoadedImage->InitrdSize); + Status = LoadLinuxSetInitrd ( + LoadedImage->SetupBuf, + LoadedImage->InitrdData, + LoadedImage->InitrdSize + ); if (EFI_ERROR (Status)) { goto FreeImage; } *ImageHandle = NULL; - Status = gBS->InstallProtocolInterface (ImageHandle, - &gOvmfLoadedX86LinuxKernelProtocolGuid, EFI_NATIVE_INTERFACE, - LoadedImage); + Status = gBS->InstallProtocolInterface ( + ImageHandle, + &gOvmfLoadedX86LinuxKernelProtocolGuid, + EFI_NATIVE_INTERFACE, + LoadedImage + ); if (EFI_ERROR (Status)) { goto FreeImage; } + return EFI_SUCCESS; FreeImage: @@ -224,7 +257,7 @@ FreeImageDesc: STATIC EFI_STATUS QemuStartLegacyImage ( - IN EFI_HANDLE ImageHandle + IN EFI_HANDLE ImageHandle ) { EFI_STATUS Status; @@ -248,7 +281,7 @@ QemuStartLegacyImage ( STATIC EFI_STATUS QemuUnloadLegacyImage ( - IN EFI_HANDLE ImageHandle + IN EFI_HANDLE ImageHandle ) { EFI_STATUS Status; @@ -266,8 +299,11 @@ QemuUnloadLegacyImage ( return EFI_INVALID_PARAMETER; } - Status = gBS->UninstallProtocolInterface (ImageHandle, - &gOvmfLoadedX86LinuxKernelProtocolGuid, LoadedImage); + Status = gBS->UninstallProtocolInterface ( + ImageHandle, + &gOvmfLoadedX86LinuxKernelProtocolGuid, + LoadedImage + ); ASSERT_EFI_ERROR (Status); FreeLegacyImage (LoadedImage); @@ -294,15 +330,15 @@ QemuUnloadLegacyImage ( EFI_STATUS EFIAPI QemuLoadKernelImage ( - OUT EFI_HANDLE *ImageHandle + OUT EFI_HANDLE *ImageHandle ) { - EFI_STATUS Status; - EFI_HANDLE KernelImageHandle; - EFI_LOADED_IMAGE_PROTOCOL *KernelLoadedImage; - UINTN CommandLineSize; - CHAR8 *CommandLine; - UINTN InitrdSize; + EFI_STATUS Status; + EFI_HANDLE KernelImageHandle; + EFI_LOADED_IMAGE_PROTOCOL *KernelLoadedImage; + UINTN CommandLineSize; + CHAR8 *CommandLine; + UINTN InitrdSize; // // Redundant assignment to work around GCC48/GCC49 limitations. @@ -321,26 +357,26 @@ QemuLoadKernelImage ( &KernelImageHandle ); switch (Status) { - case EFI_SUCCESS: - break; + case EFI_SUCCESS: + break; - case EFI_NOT_FOUND: - // - // The image does not exist - no -kernel image was supplied via the - // command line so no point in invoking the legacy fallback - // - return EFI_NOT_FOUND; + case EFI_NOT_FOUND: + // + // The image does not exist - no -kernel image was supplied via the + // command line so no point in invoking the legacy fallback + // + return EFI_NOT_FOUND; - case EFI_SECURITY_VIOLATION: - // - // Since the image has been loaded, we need to unload it before proceeding - // to the EFI_ACCESS_DENIED case below. - // - gBS->UnloadImage (KernelImageHandle); + case EFI_SECURITY_VIOLATION: + // + // Since the image has been loaded, we need to unload it before proceeding + // to the EFI_ACCESS_DENIED case below. + // + gBS->UnloadImage (KernelImageHandle); // // Fall through // - case EFI_ACCESS_DENIED: + case EFI_ACCESS_DENIED: // // We are running with UEFI secure boot enabled, and the image failed to // authenticate. For compatibility reasons, we fall back to the legacy @@ -348,23 +384,28 @@ QemuLoadKernelImage ( // // Fall through // - case EFI_UNSUPPORTED: - // - // The image is not natively supported or cross-type supported. Let's try - // loading it using the loader that parses the bzImage metadata directly. - // - Status = QemuLoadLegacyImage (&KernelImageHandle); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: QemuLoadLegacyImage(): %r\n", __FUNCTION__, - Status)); + case EFI_UNSUPPORTED: + // + // The image is not natively supported or cross-type supported. Let's try + // loading it using the loader that parses the bzImage metadata directly. + // + Status = QemuLoadLegacyImage (&KernelImageHandle); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "%a: QemuLoadLegacyImage(): %r\n", + __FUNCTION__, + Status + )); + return Status; + } + + *ImageHandle = KernelImageHandle; + return EFI_SUCCESS; + + default: + DEBUG ((DEBUG_ERROR, "%a: LoadImage(): %r\n", __FUNCTION__, Status)); return Status; - } - *ImageHandle = KernelImageHandle; - return EFI_SUCCESS; - - default: - DEBUG ((DEBUG_ERROR, "%a: LoadImage(): %r\n", __FUNCTION__, Status)); - return Status; } // @@ -399,8 +440,11 @@ QemuLoadKernelImage ( // Verify NUL-termination of the command line. // if (CommandLine[CommandLineSize - 1] != '\0') { - DEBUG ((DEBUG_ERROR, "%a: kernel command line is not NUL-terminated\n", - __FUNCTION__)); + DEBUG (( + DEBUG_ERROR, + "%a: kernel command line is not NUL-terminated\n", + __FUNCTION__ + )); Status = EFI_PROTOCOL_ERROR; goto FreeCommandLine; } @@ -408,7 +452,7 @@ QemuLoadKernelImage ( // // Drop the terminating NUL, convert to UTF-16. // - KernelLoadedImage->LoadOptionsSize = (UINT32) ((CommandLineSize - 1) * 2); + KernelLoadedImage->LoadOptionsSize = (UINT32)((CommandLineSize - 1) * 2); } QemuFwCfgSelectItem (QemuFwCfgItemInitrdSize); @@ -430,10 +474,11 @@ QemuLoadKernelImage ( KernelLoadedImage->LoadOptionsSize += 2; KernelLoadedImage->LoadOptions = AllocatePool ( - KernelLoadedImage->LoadOptionsSize); + KernelLoadedImage->LoadOptionsSize + ); if (KernelLoadedImage->LoadOptions == NULL) { KernelLoadedImage->LoadOptionsSize = 0; - Status = EFI_OUT_OF_RESOURCES; + Status = EFI_OUT_OF_RESOURCES; goto FreeCommandLine; } @@ -444,17 +489,22 @@ QemuLoadKernelImage ( (CommandLineSize == 0) ? "" : CommandLine, (InitrdSize == 0) ? "" : " initrd=initrd" ); - DEBUG ((DEBUG_INFO, "%a: command line: \"%s\"\n", __FUNCTION__, - (CHAR16 *)KernelLoadedImage->LoadOptions)); + DEBUG (( + DEBUG_INFO, + "%a: command line: \"%s\"\n", + __FUNCTION__, + (CHAR16 *)KernelLoadedImage->LoadOptions + )); } *ImageHandle = KernelImageHandle; - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; FreeCommandLine: if (CommandLineSize > 0) { FreePool (CommandLine); } + UnloadImage: if (EFI_ERROR (Status)) { gBS->UnloadImage (KernelImageHandle); @@ -481,7 +531,7 @@ UnloadImage: EFI_STATUS EFIAPI QemuStartKernelImage ( - IN OUT EFI_HANDLE *ImageHandle + IN OUT EFI_HANDLE *ImageHandle ) { EFI_STATUS Status; @@ -504,9 +554,9 @@ QemuStartKernelImage ( NULL, // ExitDataSize NULL // ExitData ); -#ifdef MDE_CPU_IA32 + #ifdef MDE_CPU_IA32 if (Status == EFI_UNSUPPORTED) { - EFI_HANDLE KernelImageHandle; + EFI_HANDLE KernelImageHandle; // // On IA32, EFI_UNSUPPORTED means that the image's machine type is X64 while @@ -524,6 +574,7 @@ QemuStartKernelImage ( // return Status; } + // // Swap in the legacy-loaded image. // @@ -531,7 +582,8 @@ QemuStartKernelImage ( *ImageHandle = KernelImageHandle; return QemuStartLegacyImage (KernelImageHandle); } -#endif + + #endif return Status; } @@ -551,11 +603,11 @@ QemuStartKernelImage ( EFI_STATUS EFIAPI QemuUnloadKernelImage ( - IN EFI_HANDLE ImageHandle + IN EFI_HANDLE ImageHandle ) { - EFI_LOADED_IMAGE_PROTOCOL *KernelLoadedImage; - EFI_STATUS Status; + EFI_LOADED_IMAGE_PROTOCOL *KernelLoadedImage; + EFI_STATUS Status; Status = gBS->OpenProtocol ( ImageHandle, @@ -588,6 +640,7 @@ QemuUnloadKernelImage ( FreePool (KernelLoadedImage->LoadOptions); KernelLoadedImage->LoadOptions = NULL; } + KernelLoadedImage->LoadOptionsSize = 0; return gBS->UnloadImage (ImageHandle); diff --git a/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c b/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c index 895dfc02f9..b29ed3e58e 100644 --- a/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c +++ b/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c @@ -36,8 +36,8 @@ // in general, it is actually fine for the Xen domU (guest) environment that // this module is intended for, as UEFI always executes from DRAM in that case. // -STATIC evtchn_send_t mXenConsoleEventChain; -STATIC struct xencons_interface *mXenConsoleInterface; +STATIC evtchn_send_t mXenConsoleEventChain; +STATIC struct xencons_interface *mXenConsoleInterface; /** Initialize the serial device hardware. @@ -56,19 +56,20 @@ SerialPortInitialize ( VOID ) { - if (! XenHypercallIsAvailable ()) { + if (!XenHypercallIsAvailable ()) { return RETURN_DEVICE_ERROR; } if (!mXenConsoleInterface) { mXenConsoleEventChain.port = (UINT32)XenHypercallHvmGetParam (HVM_PARAM_CONSOLE_EVTCHN); - mXenConsoleInterface = (struct xencons_interface *)(UINTN) - (XenHypercallHvmGetParam (HVM_PARAM_CONSOLE_PFN) << EFI_PAGE_SHIFT); + mXenConsoleInterface = (struct xencons_interface *)(UINTN) + (XenHypercallHvmGetParam (HVM_PARAM_CONSOLE_PFN) << EFI_PAGE_SHIFT); // // No point in ASSERT'ing here as we won't be seeing the output // } + return RETURN_SUCCESS; } @@ -92,8 +93,8 @@ SerialPortInitialize ( UINTN EFIAPI SerialPortWrite ( - IN UINT8 *Buffer, - IN UINTN NumberOfBytes + IN UINT8 *Buffer, + IN UINTN NumberOfBytes ) { XENCONS_RING_IDX Consumer, Producer; @@ -116,15 +117,15 @@ SerialPortWrite ( MemoryFence (); - while (Sent < NumberOfBytes && ((Producer - Consumer) < sizeof (mXenConsoleInterface->out))) - mXenConsoleInterface->out[MASK_XENCONS_IDX(Producer++, mXenConsoleInterface->out)] = Buffer[Sent++]; + while (Sent < NumberOfBytes && ((Producer - Consumer) < sizeof (mXenConsoleInterface->out))) { + mXenConsoleInterface->out[MASK_XENCONS_IDX (Producer++, mXenConsoleInterface->out)] = Buffer[Sent++]; + } MemoryFence (); mXenConsoleInterface->out_prod = Producer; XenHypercallEventChannelOp (EVTCHNOP_send, &mXenConsoleEventChain); - } while (Sent < NumberOfBytes); return Sent; @@ -148,9 +149,9 @@ SerialPortWrite ( UINTN EFIAPI SerialPortRead ( - OUT UINT8 *Buffer, - IN UINTN NumberOfBytes -) + OUT UINT8 *Buffer, + IN UINTN NumberOfBytes + ) { XENCONS_RING_IDX Consumer, Producer; UINTN Received; @@ -171,8 +172,9 @@ SerialPortRead ( MemoryFence (); Received = 0; - while (Received < NumberOfBytes && Consumer < Producer) - Buffer[Received++] = mXenConsoleInterface->in[MASK_XENCONS_IDX(Consumer++, mXenConsoleInterface->in)]; + while (Received < NumberOfBytes && Consumer < Producer) { + Buffer[Received++] = mXenConsoleInterface->in[MASK_XENCONS_IDX (Consumer++, mXenConsoleInterface->in)]; + } MemoryFence (); @@ -197,7 +199,7 @@ SerialPortPoll ( ) { return mXenConsoleInterface && - mXenConsoleInterface->in_cons != mXenConsoleInterface->in_prod; + mXenConsoleInterface->in_cons != mXenConsoleInterface->in_prod; } /** @@ -213,7 +215,7 @@ SerialPortPoll ( RETURN_STATUS EFIAPI SerialPortSetControl ( - IN UINT32 Control + IN UINT32 Control ) { return RETURN_UNSUPPORTED; @@ -232,7 +234,7 @@ SerialPortSetControl ( RETURN_STATUS EFIAPI SerialPortGetControl ( - OUT UINT32 *Control + OUT UINT32 *Control ) { if (!mXenConsoleInterface) { @@ -243,6 +245,7 @@ SerialPortGetControl ( if (!SerialPortPoll ()) { *Control = EFI_SERIAL_INPUT_BUFFER_EMPTY; } + return RETURN_SUCCESS; } @@ -282,14 +285,13 @@ SerialPortGetControl ( RETURN_STATUS EFIAPI SerialPortSetAttributes ( - IN OUT UINT64 *BaudRate, - IN OUT UINT32 *ReceiveFifoDepth, - IN OUT UINT32 *Timeout, - IN OUT EFI_PARITY_TYPE *Parity, - IN OUT UINT8 *DataBits, - IN OUT EFI_STOP_BITS_TYPE *StopBits + IN OUT UINT64 *BaudRate, + IN OUT UINT32 *ReceiveFifoDepth, + IN OUT UINT32 *Timeout, + IN OUT EFI_PARITY_TYPE *Parity, + IN OUT UINT8 *DataBits, + IN OUT EFI_STOP_BITS_TYPE *StopBits ) { return RETURN_UNSUPPORTED; } - diff --git a/OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c b/OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c index f779e46470..dcc6575250 100644 --- a/OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c +++ b/OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c @@ -11,7 +11,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include -STATIC VOID *HyperPage; +STATIC VOID *HyperPage; /** Check if the Xen Hypercall library is able to make calls to the Xen @@ -38,30 +38,30 @@ XenHypercallIsAvailable ( INTN EFIAPI __XenHypercall2 ( - IN VOID *HypercallAddr, - IN OUT INTN Arg1, - IN OUT INTN Arg2 + IN VOID *HypercallAddr, + IN OUT INTN Arg1, + IN OUT INTN Arg2 ); /** Library constructor: retrieves the Hyperpage address from the gEfiXenInfoGuid HOB **/ - RETURN_STATUS EFIAPI XenHypercallLibInit ( VOID ) { - EFI_HOB_GUID_TYPE *GuidHob; - EFI_XEN_INFO *XenInfo; + EFI_HOB_GUID_TYPE *GuidHob; + EFI_XEN_INFO *XenInfo; GuidHob = GetFirstGuidHob (&gEfiXenInfoGuid); if (GuidHob == NULL) { return RETURN_NOT_FOUND; } - XenInfo = (EFI_XEN_INFO *) GET_GUID_HOB_DATA (GuidHob); + + XenInfo = (EFI_XEN_INFO *)GET_GUID_HOB_DATA (GuidHob); HyperPage = XenInfo->HyperPages; return RETURN_SUCCESS; } @@ -86,5 +86,5 @@ XenHypercall2 ( { ASSERT (HyperPage != NULL); - return __XenHypercall2 ((UINT8*)HyperPage + HypercallID * 32, Arg1, Arg2); + return __XenHypercall2 ((UINT8 *)HyperPage + HypercallID * 32, Arg1, Arg2); } diff --git a/OvmfPkg/Library/XenHypercallLib/XenHypercall.c b/OvmfPkg/Library/XenHypercallLib/XenHypercall.c index 265aa766d0..65b14a11f4 100644 --- a/OvmfPkg/Library/XenHypercallLib/XenHypercall.c +++ b/OvmfPkg/Library/XenHypercallLib/XenHypercall.c @@ -34,43 +34,56 @@ XenHypercallLibConstruct ( UINT64 EFIAPI XenHypercallHvmGetParam ( - IN UINT32 Index + IN UINT32 Index ) { - xen_hvm_param_t Parameter; - INTN Error; + xen_hvm_param_t Parameter; + INTN Error; Parameter.domid = DOMID_SELF; Parameter.index = Index; - Error = XenHypercall2 (__HYPERVISOR_hvm_op, - HVMOP_get_param, (INTN) &Parameter); + Error = XenHypercall2 ( + __HYPERVISOR_hvm_op, + HVMOP_get_param, + (INTN)&Parameter + ); if (Error != 0) { - DEBUG ((DEBUG_ERROR, - "XenHypercall: Error %Ld trying to get HVM parameter %d\n", - (INT64)Error, Index)); + DEBUG (( + DEBUG_ERROR, + "XenHypercall: Error %Ld trying to get HVM parameter %d\n", + (INT64)Error, + Index + )); return 0; } + return Parameter.value; } INTN EFIAPI XenHypercallMemoryOp ( - IN UINTN Operation, - IN OUT VOID *Arguments + IN UINTN Operation, + IN OUT VOID *Arguments ) { - return XenHypercall2 (__HYPERVISOR_memory_op, - Operation, (INTN) Arguments); + return XenHypercall2 ( + __HYPERVISOR_memory_op, + Operation, + (INTN)Arguments + ); } INTN EFIAPI XenHypercallEventChannelOp ( - IN INTN Operation, - IN OUT VOID *Arguments + IN INTN Operation, + IN OUT VOID *Arguments ) { - return XenHypercall2 (__HYPERVISOR_event_channel_op, - Operation, (INTN) Arguments); + return XenHypercall2 ( + __HYPERVISOR_event_channel_op, + Operation, + (INTN)Arguments + ); } diff --git a/OvmfPkg/Library/XenIoMmioLib/XenIoMmioLib.c b/OvmfPkg/Library/XenIoMmioLib/XenIoMmioLib.c index ae4ea0309a..caf4a28e1f 100644 --- a/OvmfPkg/Library/XenIoMmioLib/XenIoMmioLib.c +++ b/OvmfPkg/Library/XenIoMmioLib/XenIoMmioLib.c @@ -21,13 +21,13 @@ #pragma pack (1) typedef struct { - VENDOR_DEVICE_PATH Vendor; - EFI_PHYSICAL_ADDRESS GrantTableAddress; - EFI_DEVICE_PATH_PROTOCOL End; + VENDOR_DEVICE_PATH Vendor; + EFI_PHYSICAL_ADDRESS GrantTableAddress; + EFI_DEVICE_PATH_PROTOCOL End; } XENBUS_ROOT_DEVICE_PATH; #pragma pack () -STATIC CONST XENBUS_ROOT_DEVICE_PATH mXenBusRootDevicePathTemplate = { +STATIC CONST XENBUS_ROOT_DEVICE_PATH mXenBusRootDevicePathTemplate = { { { HARDWARE_DEVICE_PATH, @@ -40,7 +40,7 @@ STATIC CONST XENBUS_ROOT_DEVICE_PATH mXenBusRootDevicePathTemplate = { { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, - { sizeof (EFI_DEVICE_PATH_PROTOCOL), 0 } + { sizeof (EFI_DEVICE_PATH_PROTOCOL), 0 } } }; @@ -66,14 +66,14 @@ STATIC CONST XENBUS_ROOT_DEVICE_PATH mXenBusRootDevicePathTemplate = { **/ EFI_STATUS XenIoMmioInstall ( - IN OUT EFI_HANDLE *Handle, - IN EFI_PHYSICAL_ADDRESS GrantTableAddress + IN OUT EFI_HANDLE *Handle, + IN EFI_PHYSICAL_ADDRESS GrantTableAddress ) { - EFI_STATUS Status; - XENIO_PROTOCOL *XenIo; - XENBUS_ROOT_DEVICE_PATH *XenBusDevicePath; - EFI_HANDLE OutHandle; + EFI_STATUS Status; + XENIO_PROTOCOL *XenIo; + XENBUS_ROOT_DEVICE_PATH *XenBusDevicePath; + EFI_HANDLE OutHandle; ASSERT (Handle != NULL); @@ -83,29 +83,42 @@ XenIoMmioInstall ( if (!XenIo) { return EFI_OUT_OF_RESOURCES; } + XenIo->GrantTableAddress = GrantTableAddress; - XenBusDevicePath = AllocateCopyPool (sizeof *XenBusDevicePath, - &mXenBusRootDevicePathTemplate); + XenBusDevicePath = AllocateCopyPool ( + sizeof *XenBusDevicePath, + &mXenBusRootDevicePathTemplate + ); if (!XenBusDevicePath) { DEBUG ((DEBUG_ERROR, "%a: Out of memory\n", __FUNCTION__)); Status = EFI_OUT_OF_RESOURCES; goto FreeXenIo; } + XenBusDevicePath->GrantTableAddress = GrantTableAddress; - Status = gBS->InstallMultipleProtocolInterfaces (&OutHandle, - &gEfiDevicePathProtocolGuid, XenBusDevicePath, - &gXenIoProtocolGuid, XenIo, - NULL); + Status = gBS->InstallMultipleProtocolInterfaces ( + &OutHandle, + &gEfiDevicePathProtocolGuid, + XenBusDevicePath, + &gXenIoProtocolGuid, + XenIo, + NULL + ); if (!EFI_ERROR (Status)) { *Handle = OutHandle; return EFI_SUCCESS; } - DEBUG ((DEBUG_ERROR, "%a: Failed to install the EFI_DEVICE_PATH and " + DEBUG (( + DEBUG_ERROR, + "%a: Failed to install the EFI_DEVICE_PATH and " "XENIO_PROTOCOL protocols on handle %p (Status == %r)\n", - __FUNCTION__, OutHandle, Status)); + __FUNCTION__, + OutHandle, + Status + )); FreePool (XenBusDevicePath); @@ -129,25 +142,41 @@ FreeXenIo: **/ EFI_STATUS XenIoMmioUninstall ( - IN EFI_HANDLE Handle + IN EFI_HANDLE Handle ) { - EFI_STATUS Status; - VOID *XenIo; - VOID *XenBusDevicePath; + EFI_STATUS Status; + VOID *XenIo; + VOID *XenBusDevicePath; XenBusDevicePath = NULL; - gBS->OpenProtocol (Handle, &gEfiDevicePathProtocolGuid, &XenBusDevicePath, - NULL, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); + gBS->OpenProtocol ( + Handle, + &gEfiDevicePathProtocolGuid, + &XenBusDevicePath, + NULL, + NULL, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); XenIo = NULL; - gBS->OpenProtocol (Handle, &gXenIoProtocolGuid, &XenIo, - NULL, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); - - Status = gBS->UninstallMultipleProtocolInterfaces (Handle, - &gEfiDevicePathProtocolGuid, XenBusDevicePath, - &gXenIoProtocolGuid, XenIo, - NULL); + gBS->OpenProtocol ( + Handle, + &gXenIoProtocolGuid, + &XenIo, + NULL, + NULL, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); + + Status = gBS->UninstallMultipleProtocolInterfaces ( + Handle, + &gEfiDevicePathProtocolGuid, + XenBusDevicePath, + &gXenIoProtocolGuid, + XenIo, + NULL + ); if (EFI_ERROR (Status)) { return Status; diff --git a/OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c b/OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c index 8f20ae2d45..f6b3e5ca70 100644 --- a/OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c +++ b/OvmfPkg/Library/XenPlatformLib/XenPlatformLib.c @@ -25,9 +25,9 @@ XenGetInfoHOB ( VOID ) { - EFI_HOB_GUID_TYPE *GuidHob; - STATIC BOOLEAN Cached = FALSE; - STATIC EFI_XEN_INFO *XenInfo; + EFI_HOB_GUID_TYPE *GuidHob; + STATIC BOOLEAN Cached = FALSE; + STATIC EFI_XEN_INFO *XenInfo; // // Return the cached result for the benefit of XenDetected that can be @@ -41,8 +41,9 @@ XenGetInfoHOB ( if (GuidHob == NULL) { XenInfo = NULL; } else { - XenInfo = (EFI_XEN_INFO *) GET_GUID_HOB_DATA (GuidHob); + XenInfo = (EFI_XEN_INFO *)GET_GUID_HOB_DATA (GuidHob); } + Cached = TRUE; return XenInfo; } @@ -74,7 +75,7 @@ XenPvhDetected ( VOID ) { - EFI_XEN_INFO *XenInfo; + EFI_XEN_INFO *XenInfo; XenInfo = XenGetInfoHOB (); return (XenInfo != NULL && XenInfo->RsdpPvh != NULL); diff --git a/OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c b/OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c index 72e0aaa879..7f37710b96 100644 --- a/OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c +++ b/OvmfPkg/Library/XenRealTimeClockLib/XenRealTimeClockLib.c @@ -22,22 +22,22 @@ EpochToEfiTime ( OUT EFI_TIME *Time ) { - UINTN a; - UINTN b; - UINTN c; - UINTN d; - UINTN g; - UINTN j; - UINTN m; - UINTN y; - UINTN da; - UINTN db; - UINTN dc; - UINTN dg; - UINTN hh; - UINTN mm; - UINTN ss; - UINTN J; + UINTN a; + UINTN b; + UINTN c; + UINTN d; + UINTN g; + UINTN j; + UINTN m; + UINTN y; + UINTN da; + UINTN db; + UINTN dc; + UINTN dg; + UINTN hh; + UINTN mm; + UINTN ss; + UINTN J; J = (EpochSeconds / 86400) + 2440588; j = J + 32044; @@ -60,14 +60,13 @@ EpochToEfiTime ( ss = EpochSeconds % 60; a = (EpochSeconds - ss) / 60; mm = a % 60; - b = (a - mm) / 60; + b = (a - mm) / 60; hh = b % 24; - Time->Hour = (UINT8)hh; - Time->Minute = (UINT8)mm; - Time->Second = (UINT8)ss; - Time->Nanosecond = 0; - + Time->Hour = (UINT8)hh; + Time->Minute = (UINT8)mm; + Time->Second = (UINT8)ss; + Time->Nanosecond = 0; } /** @@ -97,7 +96,7 @@ LibGetTime ( // as Xen's timekeeping uses a shared info page which cannot be shared // between UEFI and the OS // - EpochToEfiTime(1421770011, Time); + EpochToEfiTime (1421770011, Time); return EFI_SUCCESS; } @@ -115,13 +114,12 @@ LibGetTime ( EFI_STATUS EFIAPI LibSetTime ( - IN EFI_TIME *Time + IN EFI_TIME *Time ) { return EFI_DEVICE_ERROR; } - /** Returns the current wakeup alarm clock setting. @@ -138,9 +136,9 @@ LibSetTime ( EFI_STATUS EFIAPI LibGetWakeupTime ( - OUT BOOLEAN *Enabled, - OUT BOOLEAN *Pending, - OUT EFI_TIME *Time + OUT BOOLEAN *Enabled, + OUT BOOLEAN *Pending, + OUT EFI_TIME *Time ) { return EFI_UNSUPPORTED; @@ -162,8 +160,8 @@ LibGetWakeupTime ( EFI_STATUS EFIAPI LibSetWakeupTime ( - IN BOOLEAN Enabled, - OUT EFI_TIME *Time + IN BOOLEAN Enabled, + OUT EFI_TIME *Time ) { return EFI_UNSUPPORTED; @@ -182,8 +180,8 @@ LibSetWakeupTime ( EFI_STATUS EFIAPI LibRtcInitialize ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { return EFI_SUCCESS; diff --git a/OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.c b/OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.c index 07baa0e8d1..40c464ce16 100644 --- a/OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.c +++ b/OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.c @@ -31,25 +31,25 @@ typedef struct { } SINGLE_NODE_VENDOR_MEDIA_DEVPATH; #pragma pack () -STATIC EFI_HII_HANDLE mLinuxInitrdShellCommandHiiHandle; -STATIC EFI_PHYSICAL_ADDRESS mInitrdFileAddress; -STATIC UINTN mInitrdFileSize; -STATIC EFI_HANDLE mInitrdLoadFile2Handle; - -STATIC CONST SHELL_PARAM_ITEM ParamList[] = { - {L"-u", TypeFlag}, - {NULL, TypeMax} - }; +STATIC EFI_HII_HANDLE mLinuxInitrdShellCommandHiiHandle; +STATIC EFI_PHYSICAL_ADDRESS mInitrdFileAddress; +STATIC UINTN mInitrdFileSize; +STATIC EFI_HANDLE mInitrdLoadFile2Handle; + +STATIC CONST SHELL_PARAM_ITEM ParamList[] = { + { L"-u", TypeFlag }, + { NULL, TypeMax } +}; -STATIC CONST SINGLE_NODE_VENDOR_MEDIA_DEVPATH mInitrdDevicePath = { +STATIC CONST SINGLE_NODE_VENDOR_MEDIA_DEVPATH mInitrdDevicePath = { { { - MEDIA_DEVICE_PATH, MEDIA_VENDOR_DP, { sizeof (VENDOR_DEVICE_PATH) } + MEDIA_DEVICE_PATH, MEDIA_VENDOR_DP,{ sizeof (VENDOR_DEVICE_PATH) } }, LINUX_EFI_INITRD_MEDIA_GUID - }, { + },{ END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, - { sizeof (EFI_DEVICE_PATH_PROTOCOL) } + { sizeof (EFI_DEVICE_PATH_PROTOCOL) } } }; @@ -59,13 +59,16 @@ IsOtherInitrdDevicePathAlreadyInstalled ( VOID ) { - EFI_STATUS Status; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - EFI_HANDLE Handle; + EFI_STATUS Status; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + EFI_HANDLE Handle; DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)&mInitrdDevicePath; - Status = gBS->LocateDevicePath (&gEfiLoadFile2ProtocolGuid, &DevicePath, - &Handle); + Status = gBS->LocateDevicePath ( + &gEfiLoadFile2ProtocolGuid, + &DevicePath, + &Handle + ); if (EFI_ERROR (Status)) { return FALSE; } @@ -77,6 +80,7 @@ IsOtherInitrdDevicePathAlreadyInstalled ( if (Handle == mInitrdLoadFile2Handle) { return FALSE; } + return TRUE; } @@ -84,28 +88,29 @@ STATIC EFI_STATUS EFIAPI InitrdLoadFile2 ( - IN EFI_LOAD_FILE2_PROTOCOL *This, - IN EFI_DEVICE_PATH_PROTOCOL *FilePath, - IN BOOLEAN BootPolicy, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer OPTIONAL + IN EFI_LOAD_FILE2_PROTOCOL *This, + IN EFI_DEVICE_PATH_PROTOCOL *FilePath, + IN BOOLEAN BootPolicy, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer OPTIONAL ) { if (BootPolicy) { return EFI_UNSUPPORTED; } - if (BufferSize == NULL || !IsDevicePathValid (FilePath, 0)) { + if ((BufferSize == NULL) || !IsDevicePathValid (FilePath, 0)) { return EFI_INVALID_PARAMETER; } - if (FilePath->Type != END_DEVICE_PATH_TYPE || - FilePath->SubType != END_ENTIRE_DEVICE_PATH_SUBTYPE || - mInitrdFileSize == 0) { + if ((FilePath->Type != END_DEVICE_PATH_TYPE) || + (FilePath->SubType != END_ENTIRE_DEVICE_PATH_SUBTYPE) || + (mInitrdFileSize == 0)) + { return EFI_NOT_FOUND; } - if (Buffer == NULL || *BufferSize < mInitrdFileSize) { + if ((Buffer == NULL) || (*BufferSize < mInitrdFileSize)) { *BufferSize = mInitrdFileSize; return EFI_BUFFER_TOO_SMALL; } @@ -117,7 +122,7 @@ InitrdLoadFile2 ( return EFI_SUCCESS; } -STATIC CONST EFI_LOAD_FILE2_PROTOCOL mInitrdLoadFile2 = { +STATIC CONST EFI_LOAD_FILE2_PROTOCOL mInitrdLoadFile2 = { InitrdLoadFile2, }; @@ -127,18 +132,24 @@ UninstallLoadFile2Protocol ( VOID ) { - EFI_STATUS Status; + EFI_STATUS Status; if (mInitrdLoadFile2Handle != NULL) { - Status = gBS->UninstallMultipleProtocolInterfaces (mInitrdLoadFile2Handle, - &gEfiDevicePathProtocolGuid, &mInitrdDevicePath, - &gEfiLoadFile2ProtocolGuid, &mInitrdLoadFile2, - NULL); + Status = gBS->UninstallMultipleProtocolInterfaces ( + mInitrdLoadFile2Handle, + &gEfiDevicePathProtocolGuid, + &mInitrdDevicePath, + &gEfiLoadFile2ProtocolGuid, + &mInitrdLoadFile2, + NULL + ); if (!EFI_ERROR (Status)) { mInitrdLoadFile2Handle = NULL; } + return Status; } + return EFI_SUCCESS; } @@ -157,42 +168,59 @@ FreeInitrdFile ( STATIC EFI_STATUS CacheInitrdFile ( - IN SHELL_FILE_HANDLE FileHandle + IN SHELL_FILE_HANDLE FileHandle ) { - EFI_STATUS Status; - UINT64 FileSize; - UINTN ReadSize; + EFI_STATUS Status; + UINT64 FileSize; + UINTN ReadSize; Status = gEfiShellProtocol->GetFileSize (FileHandle, &FileSize); if (EFI_ERROR (Status)) { return Status; } - if (FileSize == 0 || FileSize > MAX_UINTN) { + if ((FileSize == 0) || (FileSize > MAX_UINTN)) { return EFI_UNSUPPORTED; } - Status = gBS->AllocatePages (AllocateAnyPages, EfiLoaderData, - EFI_SIZE_TO_PAGES ((UINTN)FileSize), &mInitrdFileAddress); + Status = gBS->AllocatePages ( + AllocateAnyPages, + EfiLoaderData, + EFI_SIZE_TO_PAGES ((UINTN)FileSize), + &mInitrdFileAddress + ); if (EFI_ERROR (Status)) { return Status; } ReadSize = (UINTN)FileSize; - Status = gEfiShellProtocol->ReadFile (FileHandle, &ReadSize, - (VOID *)(UINTN)mInitrdFileAddress); - if (EFI_ERROR (Status) || ReadSize < FileSize) { - DEBUG ((DEBUG_WARN, "%a: failed to read initrd file - %r 0x%lx 0x%lx\n", - __FUNCTION__, Status, (UINT64)ReadSize, FileSize)); + Status = gEfiShellProtocol->ReadFile ( + FileHandle, + &ReadSize, + (VOID *)(UINTN)mInitrdFileAddress + ); + if (EFI_ERROR (Status) || (ReadSize < FileSize)) { + DEBUG (( + DEBUG_WARN, + "%a: failed to read initrd file - %r 0x%lx 0x%lx\n", + __FUNCTION__, + Status, + (UINT64)ReadSize, + FileSize + )); goto FreeMemory; } if (mInitrdLoadFile2Handle == NULL) { - Status = gBS->InstallMultipleProtocolInterfaces (&mInitrdLoadFile2Handle, - &gEfiDevicePathProtocolGuid, &mInitrdDevicePath, - &gEfiLoadFile2ProtocolGuid, &mInitrdLoadFile2, - NULL); + Status = gBS->InstallMultipleProtocolInterfaces ( + &mInitrdLoadFile2Handle, + &gEfiDevicePathProtocolGuid, + &mInitrdDevicePath, + &gEfiLoadFile2ProtocolGuid, + &mInitrdLoadFile2, + NULL + ); ASSERT_EFI_ERROR (Status); } @@ -218,16 +246,16 @@ RunInitrd ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - LIST_ENTRY *Package; - CHAR16 *ProblemParam; - CONST CHAR16 *Param; - CHAR16 *Filename; - SHELL_STATUS ShellStatus; - SHELL_FILE_HANDLE FileHandle; + EFI_STATUS Status; + LIST_ENTRY *Package; + CHAR16 *ProblemParam; + CONST CHAR16 *Param; + CHAR16 *Filename; + SHELL_STATUS ShellStatus; + SHELL_FILE_HANDLE FileHandle; - ProblemParam = NULL; - ShellStatus = SHELL_SUCCESS; + ProblemParam = NULL; + ShellStatus = SHELL_SUCCESS; Status = ShellInitialize (); ASSERT_EFI_ERROR (Status); @@ -237,30 +265,55 @@ RunInitrd ( // Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE); if (EFI_ERROR (Status)) { - if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) { - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), - mLinuxInitrdShellCommandHiiHandle, L"initrd", ProblemParam); + if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) { + ShellPrintHiiEx ( + -1, + -1, + NULL, + STRING_TOKEN (STR_GEN_PROBLEM), + mLinuxInitrdShellCommandHiiHandle, + L"initrd", + ProblemParam + ); FreePool (ProblemParam); ShellStatus = SHELL_INVALID_PARAMETER; } else { - ASSERT(FALSE); + ASSERT (FALSE); } } else if (IsOtherInitrdDevicePathAlreadyInstalled ()) { - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ALREADY_INSTALLED), - mLinuxInitrdShellCommandHiiHandle, L"initrd"); + ShellPrintHiiEx ( + -1, + -1, + NULL, + STRING_TOKEN (STR_GEN_ALREADY_INSTALLED), + mLinuxInitrdShellCommandHiiHandle, + L"initrd" + ); ShellStatus = SHELL_UNSUPPORTED; } else { if (ShellCommandLineGetCount (Package) > 2) { - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), - mLinuxInitrdShellCommandHiiHandle, L"initrd"); + ShellPrintHiiEx ( + -1, + -1, + NULL, + STRING_TOKEN (STR_GEN_TOO_MANY), + mLinuxInitrdShellCommandHiiHandle, + L"initrd" + ); ShellStatus = SHELL_INVALID_PARAMETER; } else if (ShellCommandLineGetCount (Package) < 2) { if (ShellCommandLineGetFlag (Package, L"-u")) { FreeInitrdFile (); UninstallLoadFile2Protocol (); } else { - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), - mLinuxInitrdShellCommandHiiHandle, L"initrd"); + ShellPrintHiiEx ( + -1, + -1, + NULL, + STRING_TOKEN (STR_GEN_TOO_FEW), + mLinuxInitrdShellCommandHiiHandle, + L"initrd" + ); ShellStatus = SHELL_INVALID_PARAMETER; } } else { @@ -269,30 +322,50 @@ RunInitrd ( Filename = ShellFindFilePath (Param); if (Filename == NULL) { - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FIND_FAIL), - mLinuxInitrdShellCommandHiiHandle, L"initrd", Param); + ShellPrintHiiEx ( + -1, + -1, + NULL, + STRING_TOKEN (STR_GEN_FIND_FAIL), + mLinuxInitrdShellCommandHiiHandle, + L"initrd", + Param + ); ShellStatus = SHELL_NOT_FOUND; } else { - Status = ShellOpenFileByName (Filename, &FileHandle, - EFI_FILE_MODE_READ, 0); + Status = ShellOpenFileByName ( + Filename, + &FileHandle, + EFI_FILE_MODE_READ, + 0 + ); if (!EFI_ERROR (Status)) { FreeInitrdFile (); Status = CacheInitrdFile (FileHandle); ShellCloseFile (&FileHandle); } + if (EFI_ERROR (Status)) { - ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), - mLinuxInitrdShellCommandHiiHandle, L"initrd", Param); + ShellPrintHiiEx ( + -1, + -1, + NULL, + STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), + mLinuxInitrdShellCommandHiiHandle, + L"initrd", + Param + ); ShellStatus = SHELL_NOT_FOUND; } + FreePool (Filename); } } } + return ShellStatus; } - /** This is the shell command handler function pointer callback type. This function handles the command when it is invoked in the shell. @@ -310,10 +383,10 @@ RunInitrd ( SHELL_STATUS EFIAPI LinuxInitrdCommandHandler ( - IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This, - IN EFI_SYSTEM_TABLE *SystemTable, - IN EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters, - IN EFI_SHELL_PROTOCOL *Shell + IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This, + IN EFI_SYSTEM_TABLE *SystemTable, + IN EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters, + IN EFI_SHELL_PROTOCOL *Shell ) { gEfiShellParametersProtocol = ShellParameters; @@ -338,15 +411,18 @@ STATIC CHAR16 * EFIAPI LinuxInitrdGetHelp ( - IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This, - IN CONST CHAR8 *Language + IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This, + IN CONST CHAR8 *Language ) { - return HiiGetString (mLinuxInitrdShellCommandHiiHandle, - STRING_TOKEN (STR_GET_HELP_INITRD), Language); + return HiiGetString ( + mLinuxInitrdShellCommandHiiHandle, + STRING_TOKEN (STR_GET_HELP_INITRD), + Language + ); } -STATIC EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mLinuxInitrdDynamicCommand = { +STATIC EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mLinuxInitrdDynamicCommand = { L"initrd", LinuxInitrdCommandHandler, LinuxInitrdGetHelp @@ -362,19 +438,24 @@ STATIC EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mLinuxInitrdDynamicCommand = { STATIC EFI_HII_HANDLE InitializeHiiPackage ( - EFI_HANDLE ImageHandle + EFI_HANDLE ImageHandle ) { - EFI_STATUS Status; - EFI_HII_PACKAGE_LIST_HEADER *PackageList; - EFI_HII_HANDLE HiiHandle; + EFI_STATUS Status; + EFI_HII_PACKAGE_LIST_HEADER *PackageList; + EFI_HII_HANDLE HiiHandle; // // Retrieve HII package list from ImageHandle // - Status = gBS->OpenProtocol (ImageHandle, &gEfiHiiPackageListProtocolGuid, - (VOID **)&PackageList, ImageHandle, NULL, - EFI_OPEN_PROTOCOL_GET_PROTOCOL); + Status = gBS->OpenProtocol ( + ImageHandle, + &gEfiHiiPackageListProtocolGuid, + (VOID **)&PackageList, + ImageHandle, + NULL, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); ASSERT_EFI_ERROR (Status); if (EFI_ERROR (Status)) { return NULL; @@ -383,12 +464,17 @@ InitializeHiiPackage ( // // Publish HII package list to HII Database. // - Status = gHiiDatabase->NewPackageList (gHiiDatabase, PackageList, NULL, - &HiiHandle); + Status = gHiiDatabase->NewPackageList ( + gHiiDatabase, + PackageList, + NULL, + &HiiHandle + ); ASSERT_EFI_ERROR (Status); if (EFI_ERROR (Status)) { return NULL; } + return HiiHandle; } @@ -407,21 +493,23 @@ InitializeHiiPackage ( EFI_STATUS EFIAPI LinuxInitrdDynamicShellCommandEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; + EFI_STATUS Status; mLinuxInitrdShellCommandHiiHandle = InitializeHiiPackage (ImageHandle); if (mLinuxInitrdShellCommandHiiHandle == NULL) { return EFI_ABORTED; } - Status = gBS->InstallProtocolInterface (&ImageHandle, + Status = gBS->InstallProtocolInterface ( + &ImageHandle, &gEfiShellDynamicCommandProtocolGuid, EFI_NATIVE_INTERFACE, - &mLinuxInitrdDynamicCommand); + &mLinuxInitrdDynamicCommand + ); ASSERT_EFI_ERROR (Status); return Status; } @@ -437,10 +525,10 @@ LinuxInitrdDynamicShellCommandEntryPoint ( EFI_STATUS EFIAPI LinuxInitrdDynamicShellCommandUnload ( - IN EFI_HANDLE ImageHandle -) + IN EFI_HANDLE ImageHandle + ) { - EFI_STATUS Status; + EFI_STATUS Status; FreeInitrdFile (); @@ -449,9 +537,11 @@ LinuxInitrdDynamicShellCommandUnload ( return Status; } - Status = gBS->UninstallProtocolInterface (ImageHandle, + Status = gBS->UninstallProtocolInterface ( + ImageHandle, &gEfiShellDynamicCommandProtocolGuid, - &mLinuxInitrdDynamicCommand); + &mLinuxInitrdDynamicCommand + ); if (EFI_ERROR (Status)) { return Status; } diff --git a/OvmfPkg/LsiScsiDxe/LsiScsi.c b/OvmfPkg/LsiScsiDxe/LsiScsi.c index ed5fc3bfdd..1f52b85ed2 100644 --- a/OvmfPkg/LsiScsiDxe/LsiScsi.c +++ b/OvmfPkg/LsiScsiDxe/LsiScsi.c @@ -28,9 +28,9 @@ STATIC EFI_STATUS Out8 ( - IN LSI_SCSI_DEV *Dev, - IN UINT32 Addr, - IN UINT8 Data + IN LSI_SCSI_DEV *Dev, + IN UINT32 Addr, + IN UINT8 Data ) { return Dev->PciIo->Io.Write ( @@ -46,9 +46,9 @@ Out8 ( STATIC EFI_STATUS Out32 ( - IN LSI_SCSI_DEV *Dev, - IN UINT32 Addr, - IN UINT32 Data + IN LSI_SCSI_DEV *Dev, + IN UINT32 Addr, + IN UINT32 Data ) { return Dev->PciIo->Io.Write ( @@ -64,9 +64,9 @@ Out32 ( STATIC EFI_STATUS In8 ( - IN LSI_SCSI_DEV *Dev, - IN UINT32 Addr, - OUT UINT8 *Data + IN LSI_SCSI_DEV *Dev, + IN UINT32 Addr, + OUT UINT8 *Data ) { return Dev->PciIo->Io.Read ( @@ -82,9 +82,9 @@ In8 ( STATIC EFI_STATUS In32 ( - IN LSI_SCSI_DEV *Dev, - IN UINT32 Addr, - OUT UINT32 *Data + IN LSI_SCSI_DEV *Dev, + IN UINT32 Addr, + OUT UINT32 *Data ) { return Dev->PciIo->Io.Read ( @@ -100,7 +100,7 @@ In32 ( STATIC EFI_STATUS LsiScsiReset ( - IN LSI_SCSI_DEV *Dev + IN LSI_SCSI_DEV *Dev ) { return Out8 (Dev, LSI_REG_ISTAT0, LSI_ISTAT0_SRST); @@ -109,12 +109,12 @@ LsiScsiReset ( STATIC EFI_STATUS ReportHostAdapterOverrunError ( - OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet + OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet ) { - Packet->SenseDataLength = 0; + Packet->SenseDataLength = 0; Packet->HostAdapterStatus = - EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_GOOD; return EFI_BAD_BUFFER_SIZE; } @@ -146,40 +146,42 @@ ReportHostAdapterOverrunError ( STATIC EFI_STATUS LsiScsiCheckRequest ( - IN LSI_SCSI_DEV *Dev, - IN UINT8 Target, - IN UINT64 Lun, - IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet + IN LSI_SCSI_DEV *Dev, + IN UINT8 Target, + IN UINT64 Lun, + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet ) { - if (Target > Dev->MaxTarget || Lun > Dev->MaxLun || - Packet->DataDirection > EFI_EXT_SCSI_DATA_DIRECTION_BIDIRECTIONAL || + if ((Target > Dev->MaxTarget) || (Lun > Dev->MaxLun) || + (Packet->DataDirection > EFI_EXT_SCSI_DATA_DIRECTION_BIDIRECTIONAL) || // // Trying to receive, but destination pointer is NULL, or contradicting // transfer direction // - (Packet->InTransferLength > 0 && - (Packet->InDataBuffer == NULL || - Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_WRITE - ) - ) || + ((Packet->InTransferLength > 0) && + ((Packet->InDataBuffer == NULL) || + (Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_WRITE) + ) + ) || // // Trying to send, but source pointer is NULL, or contradicting transfer // direction // - (Packet->OutTransferLength > 0 && - (Packet->OutDataBuffer == NULL || - Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_READ - ) - ) - ) { + ((Packet->OutTransferLength > 0) && + ((Packet->OutDataBuffer == NULL) || + (Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_READ) + ) + ) + ) + { return EFI_INVALID_PARAMETER; } - if (Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_BIDIRECTIONAL || - (Packet->InTransferLength > 0 && Packet->OutTransferLength > 0) || - Packet->CdbLength > sizeof Dev->Dma->Cdb) { + if ((Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_BIDIRECTIONAL) || + ((Packet->InTransferLength > 0) && (Packet->OutTransferLength > 0)) || + (Packet->CdbLength > sizeof Dev->Dma->Cdb)) + { return EFI_UNSUPPORTED; } @@ -187,6 +189,7 @@ LsiScsiCheckRequest ( Packet->InTransferLength = sizeof Dev->Dma->Data; return ReportHostAdapterOverrunError (Packet); } + if (Packet->OutTransferLength > sizeof Dev->Dma->Data) { Packet->OutTransferLength = sizeof Dev->Dma->Data; return ReportHostAdapterOverrunError (Packet); @@ -221,32 +224,32 @@ LsiScsiCheckRequest ( STATIC EFI_STATUS LsiScsiProcessRequest ( - IN LSI_SCSI_DEV *Dev, - IN UINT8 Target, - IN UINT64 Lun, - IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet + IN LSI_SCSI_DEV *Dev, + IN UINT8 Target, + IN UINT64 Lun, + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet ) { - EFI_STATUS Status; - UINT32 *Script; - UINT8 *Cdb; - UINT8 *MsgOut; - UINT8 *MsgIn; - UINT8 *ScsiStatus; - UINT8 *Data; - UINT8 DStat; - UINT8 SIst0; - UINT8 SIst1; - UINT32 Csbc; - UINT32 CsbcBase; - UINT32 Transferred; - - Script = Dev->Dma->Script; - Cdb = Dev->Dma->Cdb; - Data = Dev->Dma->Data; - MsgIn = Dev->Dma->MsgIn; - MsgOut = &Dev->Dma->MsgOut; - ScsiStatus = &Dev->Dma->Status; + EFI_STATUS Status; + UINT32 *Script; + UINT8 *Cdb; + UINT8 *MsgOut; + UINT8 *MsgIn; + UINT8 *ScsiStatus; + UINT8 *Data; + UINT8 DStat; + UINT8 SIst0; + UINT8 SIst1; + UINT32 Csbc; + UINT32 CsbcBase; + UINT32 Transferred; + + Script = Dev->Dma->Script; + Cdb = Dev->Dma->Cdb; + Data = Dev->Dma->Data; + MsgIn = Dev->Dma->MsgIn; + MsgOut = &Dev->Dma->MsgOut; + ScsiStatus = &Dev->Dma->Status; *ScsiStatus = 0xFF; @@ -308,7 +311,7 @@ LsiScsiProcessRequest ( // // 2. Select LUN. // - *MsgOut = 0x80 | (UINT8) Lun; // 0x80: Identify bit + *MsgOut = 0x80 | (UINT8)Lun; // 0x80: Identify bit *Script++ = LSI_INS_TYPE_BLK | LSI_INS_BLK_SCSIP_MSG_OUT | (UINT32)sizeof Dev->Dma->MsgOut; *Script++ = LSI_SCSI_DMA_ADDR (Dev, MsgOut); @@ -416,21 +419,23 @@ LsiScsiProcessRequest ( // Poll the device registers (DSTAT, SIST0, and SIST1) until the SIR // bit sets. // - for(;;) { + for ( ; ;) { Status = In8 (Dev, LSI_REG_DSTAT, &DStat); if (EFI_ERROR (Status)) { goto Error; } + Status = In8 (Dev, LSI_REG_SIST0, &SIst0); if (EFI_ERROR (Status)) { goto Error; } + Status = In8 (Dev, LSI_REG_SIST1, &SIst1); if (EFI_ERROR (Status)) { goto Error; } - if (SIst0 != 0 || SIst1 != 0) { + if ((SIst0 != 0) || (SIst1 != 0)) { goto Error; } @@ -449,7 +454,7 @@ LsiScsiProcessRequest ( // SCSI Message Code 0x00: COMMAND COMPLETE // SCSI Status Code 0x00: Good // - if (MsgIn[0] != 0 || *ScsiStatus != 0) { + if ((MsgIn[0] != 0) || (*ScsiStatus != 0)) { goto Error; } @@ -504,15 +509,21 @@ LsiScsiProcessRequest ( return EFI_SUCCESS; Error: - DEBUG ((DEBUG_VERBOSE, "%a: dstat: %02X, sist0: %02X, sist1: %02X\n", - __FUNCTION__, DStat, SIst0, SIst1)); + DEBUG (( + DEBUG_VERBOSE, + "%a: dstat: %02X, sist0: %02X, sist1: %02X\n", + __FUNCTION__, + DStat, + SIst0, + SIst1 + )); // // Update the request packet to reflect the status. // if (*ScsiStatus != 0xFF) { - Packet->TargetStatus = *ScsiStatus; + Packet->TargetStatus = *ScsiStatus; } else { - Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_TASK_ABORTED; + Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_TASK_ABORTED; } if (SIst0 & LSI_SIST0_PAR) { @@ -557,17 +568,17 @@ Error: EFI_STATUS EFIAPI LsiScsiPassThru ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun, - IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, - IN EFI_EVENT Event OPTIONAL + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, + IN EFI_EVENT Event OPTIONAL ) { - EFI_STATUS Status; - LSI_SCSI_DEV *Dev; + EFI_STATUS Status; + LSI_SCSI_DEV *Dev; - Dev = LSI_SCSI_FROM_PASS_THRU (This); + Dev = LSI_SCSI_FROM_PASS_THRU (This); Status = LsiScsiCheckRequest (Dev, *Target, Lun, Packet); if (EFI_ERROR (Status)) { return Status; @@ -579,15 +590,15 @@ LsiScsiPassThru ( EFI_STATUS EFIAPI LsiScsiGetNextTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN OUT UINT8 **TargetPointer, - IN OUT UINT64 *Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN OUT UINT8 **TargetPointer, + IN OUT UINT64 *Lun ) { - LSI_SCSI_DEV *Dev; - UINTN Idx; - UINT8 *Target; - UINT16 LastTarget; + LSI_SCSI_DEV *Dev; + UINTN Idx; + UINT8 *Target; + UINT16 LastTarget; // // the TargetPointer input parameter is unnecessarily a pointer-to-pointer @@ -597,8 +608,9 @@ LsiScsiGetNextTargetLun ( // // Search for first non-0xFF byte. If not found, return first target & LUN. // - for (Idx = 0; Idx < TARGET_MAX_BYTES && Target[Idx] == 0xFF; ++Idx) - ; + for (Idx = 0; Idx < TARGET_MAX_BYTES && Target[Idx] == 0xFF; ++Idx) { + } + if (Idx == TARGET_MAX_BYTES) { SetMem (Target, TARGET_MAX_BYTES, 0x00); *Lun = 0; @@ -611,7 +623,7 @@ LsiScsiGetNextTargetLun ( // increment (target, LUN) pair if valid on input // Dev = LSI_SCSI_FROM_PASS_THRU (This); - if (LastTarget > Dev->MaxTarget || *Lun > Dev->MaxLun) { + if ((LastTarget > Dev->MaxTarget) || (*Lun > Dev->MaxLun)) { return EFI_INVALID_PARAMETER; } @@ -633,15 +645,15 @@ LsiScsiGetNextTargetLun ( EFI_STATUS EFIAPI LsiScsiBuildDevicePath ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun, - IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath ) { - UINT16 TargetValue; - LSI_SCSI_DEV *Dev; - SCSI_DEVICE_PATH *ScsiDevicePath; + UINT16 TargetValue; + LSI_SCSI_DEV *Dev; + SCSI_DEVICE_PATH *ScsiDevicePath; if (DevicePath == NULL) { return EFI_INVALID_PARAMETER; @@ -649,7 +661,7 @@ LsiScsiBuildDevicePath ( CopyMem (&TargetValue, Target, sizeof TargetValue); Dev = LSI_SCSI_FROM_PASS_THRU (This); - if (TargetValue > Dev->MaxTarget || Lun > Dev->MaxLun || Lun > 0xFFFF) { + if ((TargetValue > Dev->MaxTarget) || (Lun > Dev->MaxLun) || (Lun > 0xFFFF)) { return EFI_NOT_FOUND; } @@ -660,10 +672,10 @@ LsiScsiBuildDevicePath ( ScsiDevicePath->Header.Type = MESSAGING_DEVICE_PATH; ScsiDevicePath->Header.SubType = MSG_SCSI_DP; - ScsiDevicePath->Header.Length[0] = (UINT8) sizeof *ScsiDevicePath; - ScsiDevicePath->Header.Length[1] = (UINT8) (sizeof *ScsiDevicePath >> 8); + ScsiDevicePath->Header.Length[0] = (UINT8)sizeof *ScsiDevicePath; + ScsiDevicePath->Header.Length[1] = (UINT8)(sizeof *ScsiDevicePath >> 8); ScsiDevicePath->Pun = TargetValue; - ScsiDevicePath->Lun = (UINT16) Lun; + ScsiDevicePath->Lun = (UINT16)Lun; *DevicePath = &ScsiDevicePath->Header; return EFI_SUCCESS; @@ -672,30 +684,33 @@ LsiScsiBuildDevicePath ( EFI_STATUS EFIAPI LsiScsiGetTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, - OUT UINT8 **TargetPointer, - OUT UINT64 *Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, + OUT UINT8 **TargetPointer, + OUT UINT64 *Lun ) { - SCSI_DEVICE_PATH *ScsiDevicePath; - LSI_SCSI_DEV *Dev; - UINT8 *Target; + SCSI_DEVICE_PATH *ScsiDevicePath; + LSI_SCSI_DEV *Dev; + UINT8 *Target; - if (DevicePath == NULL || TargetPointer == NULL || *TargetPointer == NULL || - Lun == NULL) { + if ((DevicePath == NULL) || (TargetPointer == NULL) || (*TargetPointer == NULL) || + (Lun == NULL)) + { return EFI_INVALID_PARAMETER; } - if (DevicePath->Type != MESSAGING_DEVICE_PATH || - DevicePath->SubType != MSG_SCSI_DP) { + if ((DevicePath->Type != MESSAGING_DEVICE_PATH) || + (DevicePath->SubType != MSG_SCSI_DP)) + { return EFI_UNSUPPORTED; } - ScsiDevicePath = (SCSI_DEVICE_PATH *) DevicePath; - Dev = LSI_SCSI_FROM_PASS_THRU (This); - if (ScsiDevicePath->Pun > Dev->MaxTarget || - ScsiDevicePath->Lun > Dev->MaxLun) { + ScsiDevicePath = (SCSI_DEVICE_PATH *)DevicePath; + Dev = LSI_SCSI_FROM_PASS_THRU (This); + if ((ScsiDevicePath->Pun > Dev->MaxTarget) || + (ScsiDevicePath->Lun > Dev->MaxLun)) + { return EFI_NOT_FOUND; } @@ -710,7 +725,7 @@ LsiScsiGetTargetLun ( EFI_STATUS EFIAPI LsiScsiResetChannel ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This ) { return EFI_UNSUPPORTED; @@ -719,9 +734,9 @@ LsiScsiResetChannel ( EFI_STATUS EFIAPI LsiScsiResetTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun ) { return EFI_UNSUPPORTED; @@ -730,14 +745,14 @@ LsiScsiResetTargetLun ( EFI_STATUS EFIAPI LsiScsiGetNextTarget ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN OUT UINT8 **TargetPointer + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN OUT UINT8 **TargetPointer ) { - LSI_SCSI_DEV *Dev; - UINTN Idx; - UINT8 *Target; - UINT16 LastTarget; + LSI_SCSI_DEV *Dev; + UINTN Idx; + UINT8 *Target; + UINT16 LastTarget; // // the TargetPointer input parameter is unnecessarily a pointer-to-pointer @@ -747,8 +762,9 @@ LsiScsiGetNextTarget ( // // Search for first non-0xFF byte. If not found, return first target. // - for (Idx = 0; Idx < TARGET_MAX_BYTES && Target[Idx] == 0xFF; ++Idx) - ; + for (Idx = 0; Idx < TARGET_MAX_BYTES && Target[Idx] == 0xFF; ++Idx) { + } + if (Idx == TARGET_MAX_BYTES) { SetMem (Target, TARGET_MAX_BYTES, 0x00); return EFI_SUCCESS; @@ -777,11 +793,11 @@ STATIC VOID EFIAPI LsiScsiExitBoot ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - LSI_SCSI_DEV *Dev; + LSI_SCSI_DEV *Dev; Dev = Context; DEBUG ((DEBUG_VERBOSE, "%a: Context=0x%p\n", __FUNCTION__, Context)); @@ -800,14 +816,14 @@ LsiScsiExitBoot ( EFI_STATUS EFIAPI LsiScsiControllerSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; Status = gBS->OpenProtocol ( ControllerHandle, @@ -832,8 +848,9 @@ LsiScsiControllerSupported ( goto Done; } - if (Pci.Hdr.VendorId == LSI_LOGIC_PCI_VENDOR_ID && - Pci.Hdr.DeviceId == LSI_53C895A_PCI_DEVICE_ID) { + if ((Pci.Hdr.VendorId == LSI_LOGIC_PCI_VENDOR_ID) && + (Pci.Hdr.DeviceId == LSI_53C895A_PCI_DEVICE_ID)) + { Status = EFI_SUCCESS; } else { Status = EFI_UNSUPPORTED; @@ -852,15 +869,15 @@ Done: EFI_STATUS EFIAPI LsiScsiControllerStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - EFI_STATUS Status; - LSI_SCSI_DEV *Dev; - UINTN Pages; - UINTN BytesMapped; + EFI_STATUS Status; + LSI_SCSI_DEV *Dev; + UINTN Pages; + UINTN BytesMapped; Dev = AllocateZeroPool (sizeof (*Dev)); if (Dev == NULL) { @@ -877,8 +894,8 @@ LsiScsiControllerStart ( FixedPcdGet8 (PcdLsiScsiMaxLunLimit) < 128, "LSI 53C895A supports LUNs [0..127]" ); - Dev->MaxTarget = PcdGet8 (PcdLsiScsiMaxTargetLimit); - Dev->MaxLun = PcdGet8 (PcdLsiScsiMaxLunLimit); + Dev->MaxTarget = PcdGet8 (PcdLsiScsiMaxTargetLimit); + Dev->MaxLun = PcdGet8 (PcdLsiScsiMaxLunLimit); Dev->StallPerPollUsec = PcdGet32 (PcdLsiScsiStallPerPollUsec); Status = gBS->OpenProtocol ( @@ -920,7 +937,7 @@ LsiScsiControllerStart ( // // Create buffers for data transfer // - Pages = EFI_SIZE_TO_PAGES (sizeof (*Dev->Dma)); + Pages = EFI_SIZE_TO_PAGES (sizeof (*Dev->Dma)); Status = Dev->PciIo->AllocateBuffer ( Dev->PciIo, AllocateAnyPages, @@ -934,14 +951,14 @@ LsiScsiControllerStart ( } BytesMapped = EFI_PAGES_TO_SIZE (Pages); - Status = Dev->PciIo->Map ( - Dev->PciIo, - EfiPciIoOperationBusMasterCommonBuffer, - Dev->Dma, - &BytesMapped, - &Dev->DmaPhysical, - &Dev->DmaMapping - ); + Status = Dev->PciIo->Map ( + Dev->PciIo, + EfiPciIoOperationBusMasterCommonBuffer, + Dev->Dma, + &BytesMapped, + &Dev->DmaPhysical, + &Dev->DmaMapping + ); if (EFI_ERROR (Status)) { goto FreeBuffer; } @@ -970,19 +987,19 @@ LsiScsiControllerStart ( // // Host adapter channel, doesn't exist // - Dev->PassThruMode.AdapterId = MAX_UINT32; + Dev->PassThruMode.AdapterId = MAX_UINT32; Dev->PassThruMode.Attributes = EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL | EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_LOGICAL; - Dev->PassThru.Mode = &Dev->PassThruMode; - Dev->PassThru.PassThru = &LsiScsiPassThru; + Dev->PassThru.Mode = &Dev->PassThruMode; + Dev->PassThru.PassThru = &LsiScsiPassThru; Dev->PassThru.GetNextTargetLun = &LsiScsiGetNextTargetLun; - Dev->PassThru.BuildDevicePath = &LsiScsiBuildDevicePath; - Dev->PassThru.GetTargetLun = &LsiScsiGetTargetLun; - Dev->PassThru.ResetChannel = &LsiScsiResetChannel; - Dev->PassThru.ResetTargetLun = &LsiScsiResetTargetLun; - Dev->PassThru.GetNextTarget = &LsiScsiGetNextTarget; + Dev->PassThru.BuildDevicePath = &LsiScsiBuildDevicePath; + Dev->PassThru.GetTargetLun = &LsiScsiGetTargetLun; + Dev->PassThru.ResetChannel = &LsiScsiResetChannel; + Dev->PassThru.ResetTargetLun = &LsiScsiResetTargetLun; + Dev->PassThru.GetNextTarget = &LsiScsiGetNextTarget; Status = gBS->InstallProtocolInterface ( &ControllerHandle, @@ -1040,15 +1057,15 @@ FreePool: EFI_STATUS EFIAPI LsiScsiControllerStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) { - EFI_STATUS Status; - EFI_EXT_SCSI_PASS_THRU_PROTOCOL *PassThru; - LSI_SCSI_DEV *Dev; + EFI_STATUS Status; + EFI_EXT_SCSI_PASS_THRU_PROTOCOL *PassThru; + LSI_SCSI_DEV *Dev; Status = gBS->OpenProtocol ( ControllerHandle, @@ -1113,7 +1130,7 @@ LsiScsiControllerStop ( // C, 10.1 EFI Driver Binding Protocol. // STATIC -EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { +EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { &LsiScsiControllerSupported, &LsiScsiControllerStart, &LsiScsiControllerStop, @@ -1123,7 +1140,6 @@ EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { NULL // DriverBindingHandle, ditto }; - // // The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and // EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name @@ -1137,20 +1153,20 @@ EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { // STATIC -EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { +EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { { "eng;en", L"LSI 53C895A SCSI Controller Driver" }, { NULL, NULL } }; STATIC -EFI_COMPONENT_NAME_PROTOCOL gComponentName; +EFI_COMPONENT_NAME_PROTOCOL gComponentName; EFI_STATUS EFIAPI LsiScsiGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) { return LookupUnicodeString2 ( @@ -1165,27 +1181,27 @@ LsiScsiGetDriverName ( EFI_STATUS EFIAPI LsiScsiGetDeviceName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_HANDLE ChildHandle, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_HANDLE ChildHandle, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { return EFI_UNSUPPORTED; } STATIC -EFI_COMPONENT_NAME_PROTOCOL gComponentName = { +EFI_COMPONENT_NAME_PROTOCOL gComponentName = { &LsiScsiGetDriverName, &LsiScsiGetDeviceName, "eng" // SupportedLanguages, ISO 639-2 language codes }; STATIC -EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &LsiScsiGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &LsiScsiGetDeviceName, +EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&LsiScsiGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&LsiScsiGetDeviceName, "en" // SupportedLanguages, RFC 4646 language codes }; @@ -1195,8 +1211,8 @@ EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = { EFI_STATUS EFIAPI LsiScsiEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { return EfiLibInstallDriverBindingComponentName2 ( diff --git a/OvmfPkg/LsiScsiDxe/LsiScsi.h b/OvmfPkg/LsiScsiDxe/LsiScsi.h index 6ecf523f5a..bdee9bb70e 100644 --- a/OvmfPkg/LsiScsiDxe/LsiScsi.h +++ b/OvmfPkg/LsiScsiDxe/LsiScsi.h @@ -17,11 +17,11 @@ typedef struct { // Allocate 32 UINT32 entries for the script and it's sufficient for // 16 instructions. // - UINT32 Script[32]; + UINT32 Script[32]; // // The max size of CDB is 32. // - UINT8 Cdb[32]; + UINT8 Cdb[32]; // // Allocate 64KB for read/write buffer. It seems sufficient for the common // boot scenarios. @@ -29,37 +29,37 @@ typedef struct { // NOTE: The number of bytes for data transmission is bounded by DMA Byte // Count (DBC), a 24-bit register, so the maximum is 0xFFFFFF (16MB-1). // - UINT8 Data[SIZE_64KB]; + UINT8 Data[SIZE_64KB]; // // For SCSI Message In phase // - UINT8 MsgIn[2]; + UINT8 MsgIn[2]; // // For SCSI Message Out phase // - UINT8 MsgOut; + UINT8 MsgOut; // // For SCSI Status phase // - UINT8 Status; + UINT8 Status; } LSI_SCSI_DMA_BUFFER; typedef struct { - UINT32 Signature; - UINT64 OrigPciAttrs; - EFI_EVENT ExitBoot; - EFI_PCI_IO_PROTOCOL *PciIo; - UINT8 MaxTarget; - UINT8 MaxLun; - UINT32 StallPerPollUsec; - LSI_SCSI_DMA_BUFFER *Dma; - EFI_PHYSICAL_ADDRESS DmaPhysical; - VOID *DmaMapping; - EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; - EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; + UINT32 Signature; + UINT64 OrigPciAttrs; + EFI_EVENT ExitBoot; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT8 MaxTarget; + UINT8 MaxLun; + UINT32 StallPerPollUsec; + LSI_SCSI_DMA_BUFFER *Dma; + EFI_PHYSICAL_ADDRESS DmaPhysical; + VOID *DmaMapping; + EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; + EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; } LSI_SCSI_DEV; -#define LSI_SCSI_DEV_SIGNATURE SIGNATURE_32 ('L','S','I','S') +#define LSI_SCSI_DEV_SIGNATURE SIGNATURE_32 ('L','S','I','S') #define LSI_SCSI_FROM_PASS_THRU(PassThruPtr) \ CR (PassThruPtr, LSI_SCSI_DEV, PassThru, LSI_SCSI_DEV_SIGNATURE) @@ -67,7 +67,6 @@ typedef struct { #define LSI_SCSI_DMA_ADDR(Dev, MemberName) \ ((UINT32)(Dev->DmaPhysical + OFFSET_OF (LSI_SCSI_DMA_BUFFER, MemberName))) - // // Probe, start and stop functions of this driver, called by the DXE core for // specific devices. @@ -80,29 +79,28 @@ typedef struct { EFI_STATUS EFIAPI LsiScsiControllerSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ); EFI_STATUS EFIAPI LsiScsiControllerStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ); EFI_STATUS EFIAPI LsiScsiControllerStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ); - // // The next seven functions implement EFI_EXT_SCSI_PASS_THRU_PROTOCOL // for the LSI 53C895A SCSI Controller. Refer to UEFI Spec 2.3.1 + Errata C, @@ -114,61 +112,60 @@ LsiScsiControllerStop ( EFI_STATUS EFIAPI LsiScsiPassThru ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun, - IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, - IN EFI_EVENT Event OPTIONAL + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, + IN EFI_EVENT Event OPTIONAL ); EFI_STATUS EFIAPI LsiScsiGetNextTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN OUT UINT8 **TargetPointer, - IN OUT UINT64 *Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN OUT UINT8 **TargetPointer, + IN OUT UINT64 *Lun ); EFI_STATUS EFIAPI LsiScsiBuildDevicePath ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun, - IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath ); EFI_STATUS EFIAPI LsiScsiGetTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, - OUT UINT8 **TargetPointer, - OUT UINT64 *Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, + OUT UINT8 **TargetPointer, + OUT UINT64 *Lun ); EFI_STATUS EFIAPI LsiScsiResetChannel ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This ); EFI_STATUS EFIAPI LsiScsiResetTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun ); EFI_STATUS EFIAPI LsiScsiGetNextTarget ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN OUT UINT8 **TargetPointer + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN OUT UINT8 **TargetPointer ); - // // The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and // EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name @@ -184,19 +181,19 @@ LsiScsiGetNextTarget ( EFI_STATUS EFIAPI LsiScsiGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ); EFI_STATUS EFIAPI LsiScsiGetDeviceName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_HANDLE ChildHandle, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_HANDLE ChildHandle, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ); #endif // _LSI_SCSI_DXE_H_ diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index 9ed1831bac..f64ccec24d 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -27,43 +27,43 @@ // Higher versions will be used before lower, 0x10-0xffffffef is the version // range for IVH (Indie Hardware Vendors) // -#define MPT_SCSI_BINDING_VERSION 0x10 +#define MPT_SCSI_BINDING_VERSION 0x10 // // Runtime Structures // typedef struct { - MPT_SCSI_REQUEST_ALIGNED IoRequest; - MPT_SCSI_IO_REPLY_ALIGNED IoReply; + MPT_SCSI_REQUEST_ALIGNED IoRequest; + MPT_SCSI_IO_REPLY_ALIGNED IoReply; // // As EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET.SenseDataLength is defined // as UINT8, defining here SenseData size to MAX_UINT8 will guarantee it // cannot overflow when passed to device. // - UINT8 Sense[MAX_UINT8]; + UINT8 Sense[MAX_UINT8]; // // This size of the data is arbitrarily chosen. // It seems to be sufficient for all I/O requests sent through // EFI_SCSI_PASS_THRU_PROTOCOL.PassThru() for common boot scenarios. // - UINT8 Data[0x2000]; + UINT8 Data[0x2000]; } MPT_SCSI_DMA_BUFFER; -#define MPT_SCSI_DEV_SIGNATURE SIGNATURE_32 ('M','P','T','S') +#define MPT_SCSI_DEV_SIGNATURE SIGNATURE_32 ('M','P','T','S') typedef struct { - UINT32 Signature; - EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; - EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; - UINT8 MaxTarget; - UINT32 StallPerPollUsec; - EFI_PCI_IO_PROTOCOL *PciIo; - UINT64 OriginalPciAttributes; - EFI_EVENT ExitBoot; - MPT_SCSI_DMA_BUFFER *Dma; - EFI_PHYSICAL_ADDRESS DmaPhysical; - VOID *DmaMapping; - BOOLEAN IoReplyEnqueued; + UINT32 Signature; + EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; + EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; + UINT8 MaxTarget; + UINT32 StallPerPollUsec; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT64 OriginalPciAttributes; + EFI_EVENT ExitBoot; + MPT_SCSI_DMA_BUFFER *Dma; + EFI_PHYSICAL_ADDRESS DmaPhysical; + VOID *DmaMapping; + BOOLEAN IoReplyEnqueued; } MPT_SCSI_DEV; #define MPT_SCSI_FROM_PASS_THRU(PassThruPtr) \ @@ -85,9 +85,9 @@ typedef struct { STATIC EFI_STATUS Out32 ( - IN MPT_SCSI_DEV *Dev, - IN UINT32 Addr, - IN UINT32 Data + IN MPT_SCSI_DEV *Dev, + IN UINT32 Addr, + IN UINT32 Data ) { return Dev->PciIo->Io.Write ( @@ -103,9 +103,9 @@ Out32 ( STATIC EFI_STATUS In32 ( - IN MPT_SCSI_DEV *Dev, - IN UINT32 Addr, - OUT UINT32 *Data + IN MPT_SCSI_DEV *Dev, + IN UINT32 Addr, + OUT UINT32 *Data ) { return Dev->PciIo->Io.Read ( @@ -121,9 +121,9 @@ In32 ( STATIC EFI_STATUS MptDoorbell ( - IN MPT_SCSI_DEV *Dev, - IN UINT8 DoorbellFunc, - IN UINT8 DoorbellArg + IN MPT_SCSI_DEV *Dev, + IN UINT8 DoorbellFunc, + IN UINT8 DoorbellArg ) { return Out32 ( @@ -136,10 +136,10 @@ MptDoorbell ( STATIC EFI_STATUS MptScsiReset ( - IN MPT_SCSI_DEV *Dev + IN MPT_SCSI_DEV *Dev ) { - EFI_STATUS Status; + EFI_STATUS Status; // // Reset hardware @@ -148,6 +148,7 @@ MptScsiReset ( if (EFI_ERROR (Status)) { return Status; } + // // Mask interrupts // @@ -155,6 +156,7 @@ MptScsiReset ( if (EFI_ERROR (Status)) { return Status; } + // // Clear interrupt status // @@ -169,18 +171,19 @@ MptScsiReset ( STATIC EFI_STATUS MptScsiInit ( - IN MPT_SCSI_DEV *Dev + IN MPT_SCSI_DEV *Dev ) { - EFI_STATUS Status; + EFI_STATUS Status; + union { - MPT_IO_CONTROLLER_INIT_REQUEST Data; - UINT32 Uint32; + MPT_IO_CONTROLLER_INIT_REQUEST Data; + UINT32 Uint32; } AlignedReq; - MPT_IO_CONTROLLER_INIT_REQUEST *Req; - MPT_IO_CONTROLLER_INIT_REPLY Reply; - UINT8 *ReplyBytes; - UINT32 ReplyWord; + MPT_IO_CONTROLLER_INIT_REQUEST *Req; + MPT_IO_CONTROLLER_INIT_REPLY Reply; + UINT8 *ReplyBytes; + UINT32 ReplyWord; Req = &AlignedReq.Data; @@ -191,16 +194,16 @@ MptScsiInit ( ZeroMem (Req, sizeof (*Req)); ZeroMem (&Reply, sizeof (Reply)); - Req->WhoInit = MPT_IOC_WHOINIT_ROM_BIOS; + Req->WhoInit = MPT_IOC_WHOINIT_ROM_BIOS; Req->Function = MPT_MESSAGE_HDR_FUNCTION_IOC_INIT; STATIC_ASSERT ( FixedPcdGet8 (PcdMptScsiMaxTargetLimit) < 255, "Req supports 255 targets only (max target is 254)" ); - Req->MaxDevices = Dev->MaxTarget + 1; - Req->MaxBuses = 1; - Req->ReplyFrameSize = sizeof Dev->Dma->IoReply.Data; - Req->HostMfaHighAddr = MPT_SCSI_DMA_ADDR_HIGH (Dev, IoRequest); + Req->MaxDevices = Dev->MaxTarget + 1; + Req->MaxBuses = 1; + Req->ReplyFrameSize = sizeof Dev->Dma->IoReply.Data; + Req->HostMfaHighAddr = MPT_SCSI_DMA_ADDR_HIGH (Dev, IoRequest); Req->SenseBufferHighAddr = MPT_SCSI_DMA_ADDR_HIGH (Dev, Sense); // @@ -222,6 +225,7 @@ MptScsiInit ( if (EFI_ERROR (Status)) { return Status; } + Status = Dev->PciIo->Io.Write ( Dev->PciIo, EfiPciIoWidthFifoUint32, @@ -252,6 +256,7 @@ MptScsiInit ( if (EFI_ERROR (Status)) { return Status; } + CopyMem (ReplyBytes, &ReplyWord, sizeof (UINT16)); ReplyBytes += sizeof (UINT16); } @@ -270,7 +275,7 @@ MptScsiInit ( STATIC EFI_STATUS ReportHostAdapterError ( - OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet + OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet ) { DEBUG ((DEBUG_ERROR, "%a: fatal error in scsi request\n", __FUNCTION__)); @@ -285,12 +290,12 @@ ReportHostAdapterError ( STATIC EFI_STATUS ReportHostAdapterOverrunError ( - OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet + OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet ) { - Packet->SenseDataLength = 0; + Packet->SenseDataLength = 0; Packet->HostAdapterStatus = - EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_GOOD; return EFI_BAD_BUFFER_SIZE; } @@ -298,44 +303,46 @@ ReportHostAdapterOverrunError ( STATIC EFI_STATUS MptScsiPopulateRequest ( - IN MPT_SCSI_DEV *Dev, - IN UINT8 Target, - IN UINT64 Lun, - IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet + IN MPT_SCSI_DEV *Dev, + IN UINT8 Target, + IN UINT64 Lun, + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet ) { - MPT_SCSI_REQUEST_WITH_SG *Request; + MPT_SCSI_REQUEST_WITH_SG *Request; Request = &Dev->Dma->IoRequest.Data; - if (Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_BIDIRECTIONAL || - (Packet->InTransferLength > 0 && Packet->OutTransferLength > 0) || - Packet->CdbLength > sizeof (Request->Header.Cdb)) { + if ((Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_BIDIRECTIONAL) || + ((Packet->InTransferLength > 0) && (Packet->OutTransferLength > 0)) || + (Packet->CdbLength > sizeof (Request->Header.Cdb))) + { return EFI_UNSUPPORTED; } - if (Target > Dev->MaxTarget || Lun > 0 || - Packet->DataDirection > EFI_EXT_SCSI_DATA_DIRECTION_BIDIRECTIONAL || + if ((Target > Dev->MaxTarget) || (Lun > 0) || + (Packet->DataDirection > EFI_EXT_SCSI_DATA_DIRECTION_BIDIRECTIONAL) || // // Trying to receive, but destination pointer is NULL, or contradicting // transfer direction // - (Packet->InTransferLength > 0 && - (Packet->InDataBuffer == NULL || - Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_WRITE - ) - ) || + ((Packet->InTransferLength > 0) && + ((Packet->InDataBuffer == NULL) || + (Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_WRITE) + ) + ) || // // Trying to send, but source pointer is NULL, or contradicting transfer // direction // - (Packet->OutTransferLength > 0 && - (Packet->OutDataBuffer == NULL || - Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_READ - ) - ) - ) { + ((Packet->OutTransferLength > 0) && + ((Packet->OutDataBuffer == NULL) || + (Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_READ) + ) + ) + ) + { return EFI_INVALID_PARAMETER; } @@ -343,6 +350,7 @@ MptScsiPopulateRequest ( Packet->InTransferLength = sizeof (Dev->Dma->Data); return ReportHostAdapterOverrunError (Packet); } + if (Packet->OutTransferLength > sizeof (Dev->Dma->Data)) { Packet->OutTransferLength = sizeof (Dev->Dma->Data); return ReportHostAdapterOverrunError (Packet); @@ -353,8 +361,8 @@ MptScsiPopulateRequest ( // // Only LUN 0 is currently supported, hence the cast is safe // - Request->Header.Lun[1] = (UINT8)Lun; - Request->Header.Function = MPT_MESSAGE_HDR_FUNCTION_SCSI_IO_REQUEST; + Request->Header.Lun[1] = (UINT8)Lun; + Request->Header.Function = MPT_MESSAGE_HDR_FUNCTION_SCSI_IO_REQUEST; Request->Header.MessageContext = 1; // We handle one request at a time Request->Header.CdbLength = Packet->CdbLength; @@ -364,14 +372,14 @@ MptScsiPopulateRequest ( // SenseDataLength is UINT8, Sense[] is MAX_UINT8, so we can't overflow // ZeroMem (Dev->Dma->Sense, Packet->SenseDataLength); - Request->Header.SenseBufferLength = Packet->SenseDataLength; + Request->Header.SenseBufferLength = Packet->SenseDataLength; Request->Header.SenseBufferLowAddress = MPT_SCSI_DMA_ADDR_LOW (Dev, Sense); - Request->Sg.EndOfList = 1; - Request->Sg.EndOfBuffer = 1; - Request->Sg.LastElement = 1; - Request->Sg.ElementType = MPT_SG_ENTRY_TYPE_SIMPLE; - Request->Sg.Is64BitAddress = 1; + Request->Sg.EndOfList = 1; + Request->Sg.EndOfBuffer = 1; + Request->Sg.LastElement = 1; + Request->Sg.ElementType = MPT_SG_ENTRY_TYPE_SIMPLE; + Request->Sg.Is64BitAddress = 1; Request->Sg.DataBufferAddress = MPT_SCSI_DMA_ADDR (Dev, Data); // @@ -384,12 +392,12 @@ MptScsiPopulateRequest ( if (Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_READ) { Request->Header.DataLength = Packet->InTransferLength; - Request->Sg.Length = Packet->InTransferLength; - Request->Header.Control = MPT_SCSIIO_REQUEST_CONTROL_TXDIR_READ; + Request->Sg.Length = Packet->InTransferLength; + Request->Header.Control = MPT_SCSIIO_REQUEST_CONTROL_TXDIR_READ; } else { Request->Header.DataLength = Packet->OutTransferLength; - Request->Sg.Length = Packet->OutTransferLength; - Request->Header.Control = MPT_SCSIIO_REQUEST_CONTROL_TXDIR_WRITE; + Request->Sg.Length = Packet->OutTransferLength; + Request->Header.Control = MPT_SCSIIO_REQUEST_CONTROL_TXDIR_WRITE; CopyMem (Dev->Dma->Data, Packet->OutDataBuffer, Packet->OutTransferLength); Request->Sg.BufferContainsData = 1; @@ -405,11 +413,11 @@ MptScsiPopulateRequest ( STATIC EFI_STATUS MptScsiSendRequest ( - IN MPT_SCSI_DEV *Dev, - IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet + IN MPT_SCSI_DEV *Dev, + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet ) { - EFI_STATUS Status; + EFI_STATUS Status; if (!Dev->IoReplyEnqueued) { // @@ -420,6 +428,7 @@ MptScsiSendRequest ( if (EFI_ERROR (Status)) { return EFI_DEVICE_ERROR; } + Dev->IoReplyEnqueued = TRUE; } @@ -434,19 +443,19 @@ MptScsiSendRequest ( STATIC EFI_STATUS MptScsiGetReply ( - IN MPT_SCSI_DEV *Dev, - OUT UINT32 *Reply + IN MPT_SCSI_DEV *Dev, + OUT UINT32 *Reply ) { - EFI_STATUS Status; - UINT32 Istatus; - UINT32 EmptyReply; + EFI_STATUS Status; + UINT32 Istatus; + UINT32 EmptyReply; // // Timeouts are not supported for // EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru() in this implementation. // - for (;;) { + for ( ; ;) { Status = In32 (Dev, MPT_REG_ISTATUS, &Istatus); if (EFI_ERROR (Status)) { return Status; @@ -473,7 +482,7 @@ MptScsiGetReply ( // next read reply to be the last. // Status = In32 (Dev, MPT_REG_REP_Q, &EmptyReply); - if (EFI_ERROR (Status) || EmptyReply != MAX_UINT32) { + if (EFI_ERROR (Status) || (EmptyReply != MAX_UINT32)) { return EFI_DEVICE_ERROR; } @@ -483,9 +492,9 @@ MptScsiGetReply ( STATIC EFI_STATUS MptScsiHandleReply ( - IN MPT_SCSI_DEV *Dev, - IN UINT32 Reply, - OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet + IN MPT_SCSI_DEV *Dev, + IN UINT32 Reply, + OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet ) { if (Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_READ) { @@ -496,10 +505,9 @@ MptScsiHandleReply ( // // This is a turbo reply, everything is good // - Packet->SenseDataLength = 0; + Packet->SenseDataLength = 0; Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OK; - Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_GOOD; - + Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_GOOD; } else if ((Reply & BIT31) != 0) { DEBUG ((DEBUG_INFO, "%a: Full reply returned\n", __FUNCTION__)); // @@ -524,23 +532,22 @@ MptScsiHandleReply ( } switch (Dev->Dma->IoReply.Data.IocStatus) { - case MPT_SCSI_IOCSTATUS_SUCCESS: - Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OK; - break; - case MPT_SCSI_IOCSTATUS_DEVICE_NOT_THERE: - Packet->HostAdapterStatus = - EFI_EXT_SCSI_STATUS_HOST_ADAPTER_SELECTION_TIMEOUT; - return EFI_TIMEOUT; - case MPT_SCSI_IOCSTATUS_DATA_UNDERRUN: - case MPT_SCSI_IOCSTATUS_DATA_OVERRUN: - Packet->HostAdapterStatus = - EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; - break; - default: - Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OTHER; - return EFI_DEVICE_ERROR; + case MPT_SCSI_IOCSTATUS_SUCCESS: + Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OK; + break; + case MPT_SCSI_IOCSTATUS_DEVICE_NOT_THERE: + Packet->HostAdapterStatus = + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_SELECTION_TIMEOUT; + return EFI_TIMEOUT; + case MPT_SCSI_IOCSTATUS_DATA_UNDERRUN: + case MPT_SCSI_IOCSTATUS_DATA_OVERRUN: + Packet->HostAdapterStatus = + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; + break; + default: + Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OTHER; + return EFI_DEVICE_ERROR; } - } else { DEBUG ((DEBUG_ERROR, "%a: unexpected reply (%x)\n", __FUNCTION__, Reply)); return ReportHostAdapterError (Packet); @@ -557,16 +564,16 @@ STATIC EFI_STATUS EFIAPI MptScsiPassThru ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun, - IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, - IN EFI_EVENT Event OPTIONAL + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, + IN EFI_EVENT Event OPTIONAL ) { - EFI_STATUS Status; - MPT_SCSI_DEV *Dev; - UINT32 Reply; + EFI_STATUS Status; + MPT_SCSI_DEV *Dev; + UINT32 Reply; Dev = MPT_SCSI_FROM_PASS_THRU (This); // @@ -596,16 +603,17 @@ MptScsiPassThru ( STATIC BOOLEAN IsTargetInitialized ( - IN UINT8 *Target + IN UINT8 *Target ) { - UINTN Idx; + UINTN Idx; for (Idx = 0; Idx < TARGET_MAX_BYTES; ++Idx) { if (Target[Idx] != 0xFF) { return TRUE; } } + return FALSE; } @@ -613,12 +621,12 @@ STATIC EFI_STATUS EFIAPI MptScsiGetNextTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN OUT UINT8 **Target, - IN OUT UINT64 *Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN OUT UINT8 **Target, + IN OUT UINT64 *Lun ) { - MPT_SCSI_DEV *Dev; + MPT_SCSI_DEV *Dev; Dev = MPT_SCSI_FROM_PASS_THRU (This); // @@ -627,7 +635,7 @@ MptScsiGetNextTargetLun ( if (!IsTargetInitialized (*Target)) { ZeroMem (*Target, TARGET_MAX_BYTES); *Lun = 0; - } else if (**Target > Dev->MaxTarget || *Lun > 0) { + } else if ((**Target > Dev->MaxTarget) || (*Lun > 0)) { return EFI_INVALID_PARAMETER; } else if (**Target < Dev->MaxTarget) { // @@ -646,11 +654,11 @@ STATIC EFI_STATUS EFIAPI MptScsiGetNextTarget ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN OUT UINT8 **Target + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN OUT UINT8 **Target ) { - MPT_SCSI_DEV *Dev; + MPT_SCSI_DEV *Dev; Dev = MPT_SCSI_FROM_PASS_THRU (This); if (!IsTargetInitialized (*Target)) { @@ -674,14 +682,14 @@ STATIC EFI_STATUS EFIAPI MptScsiBuildDevicePath ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun, - IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath ) { - MPT_SCSI_DEV *Dev; - SCSI_DEVICE_PATH *ScsiDevicePath; + MPT_SCSI_DEV *Dev; + SCSI_DEVICE_PATH *ScsiDevicePath; if (DevicePath == NULL) { return EFI_INVALID_PARAMETER; @@ -692,7 +700,7 @@ MptScsiBuildDevicePath ( // the LSB of Target. // Dev = MPT_SCSI_FROM_PASS_THRU (This); - if (*Target > Dev->MaxTarget || Lun > 0) { + if ((*Target > Dev->MaxTarget) || (Lun > 0)) { return EFI_NOT_FOUND; } @@ -716,29 +724,32 @@ STATIC EFI_STATUS EFIAPI MptScsiGetTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, - OUT UINT8 **Target, - OUT UINT64 *Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, + OUT UINT8 **Target, + OUT UINT64 *Lun ) { - MPT_SCSI_DEV *Dev; - SCSI_DEVICE_PATH *ScsiDevicePath; + MPT_SCSI_DEV *Dev; + SCSI_DEVICE_PATH *ScsiDevicePath; - if (DevicePath == NULL || - Target == NULL || *Target == NULL || Lun == NULL) { + if ((DevicePath == NULL) || + (Target == NULL) || (*Target == NULL) || (Lun == NULL)) + { return EFI_INVALID_PARAMETER; } - if (DevicePath->Type != MESSAGING_DEVICE_PATH || - DevicePath->SubType != MSG_SCSI_DP) { + if ((DevicePath->Type != MESSAGING_DEVICE_PATH) || + (DevicePath->SubType != MSG_SCSI_DP)) + { return EFI_UNSUPPORTED; } - Dev = MPT_SCSI_FROM_PASS_THRU (This); + Dev = MPT_SCSI_FROM_PASS_THRU (This); ScsiDevicePath = (SCSI_DEVICE_PATH *)DevicePath; - if (ScsiDevicePath->Pun > Dev->MaxTarget || - ScsiDevicePath->Lun > 0) { + if ((ScsiDevicePath->Pun > Dev->MaxTarget) || + (ScsiDevicePath->Lun > 0)) + { return EFI_NOT_FOUND; } @@ -748,7 +759,7 @@ MptScsiGetTargetLun ( // of Target. // **Target = (UINT8)ScsiDevicePath->Pun; - *Lun = ScsiDevicePath->Lun; + *Lun = ScsiDevicePath->Lun; return EFI_SUCCESS; } @@ -757,7 +768,7 @@ STATIC EFI_STATUS EFIAPI MptScsiResetChannel ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This ) { return EFI_UNSUPPORTED; @@ -767,23 +778,24 @@ STATIC VOID EFIAPI MptScsiExitBoot ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - MPT_SCSI_DEV *Dev; + MPT_SCSI_DEV *Dev; Dev = Context; DEBUG ((DEBUG_VERBOSE, "%a: Context=0x%p\n", __FUNCTION__, Context)); MptScsiReset (Dev); } + STATIC EFI_STATUS EFIAPI MptScsiResetTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun ) { return EFI_UNSUPPORTED; @@ -797,14 +809,14 @@ STATIC EFI_STATUS EFIAPI MptScsiControllerSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; Status = gBS->OpenProtocol ( ControllerHandle, @@ -829,10 +841,11 @@ MptScsiControllerSupported ( goto Done; } - if (Pci.Hdr.VendorId == LSI_LOGIC_PCI_VENDOR_ID && - (Pci.Hdr.DeviceId == LSI_53C1030_PCI_DEVICE_ID || - Pci.Hdr.DeviceId == LSI_SAS1068_PCI_DEVICE_ID || - Pci.Hdr.DeviceId == LSI_SAS1068E_PCI_DEVICE_ID)) { + if ((Pci.Hdr.VendorId == LSI_LOGIC_PCI_VENDOR_ID) && + ((Pci.Hdr.DeviceId == LSI_53C1030_PCI_DEVICE_ID) || + (Pci.Hdr.DeviceId == LSI_SAS1068_PCI_DEVICE_ID) || + (Pci.Hdr.DeviceId == LSI_SAS1068E_PCI_DEVICE_ID))) + { Status = EFI_SUCCESS; } else { Status = EFI_UNSUPPORTED; @@ -852,15 +865,15 @@ STATIC EFI_STATUS EFIAPI MptScsiControllerStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - EFI_STATUS Status; - MPT_SCSI_DEV *Dev; - UINTN Pages; - UINTN BytesMapped; + EFI_STATUS Status; + MPT_SCSI_DEV *Dev; + UINTN Pages; + UINTN BytesMapped; Dev = AllocateZeroPool (sizeof (*Dev)); if (Dev == NULL) { @@ -869,7 +882,7 @@ MptScsiControllerStart ( Dev->Signature = MPT_SCSI_DEV_SIGNATURE; - Dev->MaxTarget = PcdGet8 (PcdMptScsiMaxTargetLimit); + Dev->MaxTarget = PcdGet8 (PcdMptScsiMaxTargetLimit); Dev->StallPerPollUsec = PcdGet32 (PcdMptScsiStallPerPollUsec); Status = gBS->OpenProtocol ( @@ -934,7 +947,7 @@ MptScsiControllerStart ( // // Create buffers for data transfer // - Pages = EFI_SIZE_TO_PAGES (sizeof (*Dev->Dma)); + Pages = EFI_SIZE_TO_PAGES (sizeof (*Dev->Dma)); Status = Dev->PciIo->AllocateBuffer ( Dev->PciIo, AllocateAnyPages, @@ -948,14 +961,14 @@ MptScsiControllerStart ( } BytesMapped = EFI_PAGES_TO_SIZE (Pages); - Status = Dev->PciIo->Map ( - Dev->PciIo, - EfiPciIoOperationBusMasterCommonBuffer, - Dev->Dma, - &BytesMapped, - &Dev->DmaPhysical, - &Dev->DmaMapping - ); + Status = Dev->PciIo->Map ( + Dev->PciIo, + EfiPciIoOperationBusMasterCommonBuffer, + Dev->Dma, + &BytesMapped, + &Dev->DmaPhysical, + &Dev->DmaMapping + ); if (EFI_ERROR (Status)) { goto FreeBuffer; } @@ -984,19 +997,19 @@ MptScsiControllerStart ( // // Host adapter channel, doesn't exist // - Dev->PassThruMode.AdapterId = MAX_UINT32; + Dev->PassThruMode.AdapterId = MAX_UINT32; Dev->PassThruMode.Attributes = EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL | EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_LOGICAL; - Dev->PassThru.Mode = &Dev->PassThruMode; - Dev->PassThru.PassThru = &MptScsiPassThru; + Dev->PassThru.Mode = &Dev->PassThruMode; + Dev->PassThru.PassThru = &MptScsiPassThru; Dev->PassThru.GetNextTargetLun = &MptScsiGetNextTargetLun; - Dev->PassThru.BuildDevicePath = &MptScsiBuildDevicePath; - Dev->PassThru.GetTargetLun = &MptScsiGetTargetLun; - Dev->PassThru.ResetChannel = &MptScsiResetChannel; - Dev->PassThru.ResetTargetLun = &MptScsiResetTargetLun; - Dev->PassThru.GetNextTarget = &MptScsiGetNextTarget; + Dev->PassThru.BuildDevicePath = &MptScsiBuildDevicePath; + Dev->PassThru.GetTargetLun = &MptScsiGetTargetLun; + Dev->PassThru.ResetChannel = &MptScsiResetChannel; + Dev->PassThru.ResetTargetLun = &MptScsiResetTargetLun; + Dev->PassThru.GetNextTarget = &MptScsiGetNextTarget; Status = gBS->InstallProtocolInterface ( &ControllerHandle, @@ -1055,15 +1068,15 @@ STATIC EFI_STATUS EFIAPI MptScsiControllerStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) { - EFI_STATUS Status; - EFI_EXT_SCSI_PASS_THRU_PROTOCOL *PassThru; - MPT_SCSI_DEV *Dev; + EFI_STATUS Status; + EFI_EXT_SCSI_PASS_THRU_PROTOCOL *PassThru; + MPT_SCSI_DEV *Dev; Status = gBS->OpenProtocol ( ControllerHandle, @@ -1123,7 +1136,7 @@ MptScsiControllerStop ( } STATIC -EFI_DRIVER_BINDING_PROTOCOL mMptScsiDriverBinding = { +EFI_DRIVER_BINDING_PROTOCOL mMptScsiDriverBinding = { &MptScsiControllerSupported, &MptScsiControllerStart, &MptScsiControllerStop, @@ -1137,20 +1150,20 @@ EFI_DRIVER_BINDING_PROTOCOL mMptScsiDriverBinding = { // STATIC -EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { +EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { { "eng;en", L"LSI Fusion MPT SCSI Driver" }, - { NULL, NULL } + { NULL, NULL } }; STATIC -EFI_COMPONENT_NAME_PROTOCOL mComponentName; +EFI_COMPONENT_NAME_PROTOCOL mComponentName; EFI_STATUS EFIAPI MptScsiGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) { return LookupUnicodeString2 ( @@ -1165,27 +1178,27 @@ MptScsiGetDriverName ( EFI_STATUS EFIAPI MptScsiGetDeviceName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_HANDLE ChildHandle, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_HANDLE ChildHandle, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { return EFI_UNSUPPORTED; } STATIC -EFI_COMPONENT_NAME_PROTOCOL mComponentName = { +EFI_COMPONENT_NAME_PROTOCOL mComponentName = { &MptScsiGetDriverName, &MptScsiGetDeviceName, "eng" // SupportedLanguages, ISO 639-2 language codes }; STATIC -EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &MptScsiGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &MptScsiGetDeviceName, +EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&MptScsiGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&MptScsiGetDeviceName, "en" // SupportedLanguages, RFC 4646 language codes }; @@ -1196,8 +1209,8 @@ EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = { EFI_STATUS EFIAPI MptScsiEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { return EfiLibInstallDriverBindingComponentName2 ( diff --git a/OvmfPkg/OvmfXenElfHeaderGenerator.c b/OvmfPkg/OvmfXenElfHeaderGenerator.c index 90f0574fc6..489060cdad 100644 --- a/OvmfPkg/OvmfXenElfHeaderGenerator.c +++ b/OvmfPkg/OvmfXenElfHeaderGenerator.c @@ -13,75 +13,84 @@ #include "stdio.h" #include "stddef.h" -void print_hdr(void *s, size_t size) +void +print_hdr ( + void *s, + size_t size + ) { - char *c = s; + char *c = s; while (size--) { - printf("0x%02hhx, ", *(c++)); + printf ("0x%02hhx, ", *(c++)); } } /* Format for the XEN_ELFNOTE_PHYS32_ENTRY program segment */ -#define XEN_ELFNOTE_PHYS32_ENTRY 18 +#define XEN_ELFNOTE_PHYS32_ENTRY 18 typedef struct { - uint32_t name_size; - uint32_t desc_size; - uint32_t type; - char name[4]; - uint32_t desc; + uint32_t name_size; + uint32_t desc_size; + uint32_t type; + char name[4]; + uint32_t desc; } xen_elfnote_phys32_entry; -int main(void) +int +main ( + void + ) { /* FW_SIZE */ - size_t ovmf_blob_size = 0x00200000; + size_t ovmf_blob_size = 0x00200000; /* Load OVMF at 1MB when running as PVH guest */ - uint32_t ovmf_base_address = 0x00100000; + uint32_t ovmf_base_address = 0x00100000; /* Xen PVH entry point */ - uint32_t ovmfxen_pvh_entry_point = ovmf_base_address + ovmf_blob_size - 0x30; - size_t offset_into_file = 0; + uint32_t ovmfxen_pvh_entry_point = ovmf_base_address + ovmf_blob_size - 0x30; + size_t offset_into_file = 0; /* ELF file header */ - Elf32_Ehdr hdr = { - .e_ident = ELFMAG, - .e_type = ET_EXEC, - .e_machine = EM_386, - .e_version = EV_CURRENT, - .e_entry = ovmfxen_pvh_entry_point, - .e_flags = R_386_NONE, - .e_ehsize = sizeof (hdr), + Elf32_Ehdr hdr = { + .e_ident = ELFMAG, + .e_type = ET_EXEC, + .e_machine = EM_386, + .e_version = EV_CURRENT, + .e_entry = ovmfxen_pvh_entry_point, + .e_flags = R_386_NONE, + .e_ehsize = sizeof (hdr), .e_phentsize = sizeof (Elf32_Phdr), }; + offset_into_file += sizeof (hdr); - hdr.e_ident[EI_CLASS] = ELFCLASS32; - hdr.e_ident[EI_DATA] = ELFDATA2LSB; + hdr.e_ident[EI_CLASS] = ELFCLASS32; + hdr.e_ident[EI_DATA] = ELFDATA2LSB; hdr.e_ident[EI_VERSION] = EV_CURRENT; - hdr.e_ident[EI_OSABI] = ELFOSABI_LINUX; + hdr.e_ident[EI_OSABI] = ELFOSABI_LINUX; /* Placing program headers just after hdr */ hdr.e_phoff = sizeof (hdr); /* program header */ - Elf32_Phdr phdr_load = { - .p_type = PT_LOAD, + Elf32_Phdr phdr_load = { + .p_type = PT_LOAD, .p_offset = 0, /* load everything */ - .p_paddr = ovmf_base_address, + .p_paddr = ovmf_base_address, .p_filesz = ovmf_blob_size, - .p_memsz = ovmf_blob_size, - .p_flags = PF_X | PF_W | PF_R, - .p_align = 0, + .p_memsz = ovmf_blob_size, + .p_flags = PF_X | PF_W | PF_R, + .p_align = 0, }; + phdr_load.p_vaddr = phdr_load.p_paddr; - hdr.e_phnum += 1; + hdr.e_phnum += 1; offset_into_file += sizeof (phdr_load); /* Xen ELF Note. */ - xen_elfnote_phys32_entry xen_elf_note = { - .type = XEN_ELFNOTE_PHYS32_ENTRY, - .name = "Xen", - .desc = ovmfxen_pvh_entry_point, + xen_elfnote_phys32_entry xen_elf_note = { + .type = XEN_ELFNOTE_PHYS32_ENTRY, + .name = "Xen", + .desc = ovmfxen_pvh_entry_point, .name_size = offsetof (xen_elfnote_phys32_entry, desc) - offsetof (xen_elfnote_phys32_entry, name), @@ -89,51 +98,52 @@ int main(void) sizeof (xen_elfnote_phys32_entry) - offsetof (xen_elfnote_phys32_entry, desc), }; - Elf32_Phdr phdr_note = { - .p_type = PT_NOTE, + Elf32_Phdr phdr_note = { + .p_type = PT_NOTE, .p_filesz = sizeof (xen_elf_note), - .p_memsz = sizeof (xen_elf_note), - .p_flags = PF_R, - .p_align = 0, + .p_memsz = sizeof (xen_elf_note), + .p_flags = PF_R, + .p_align = 0, }; - hdr.e_phnum += 1; - offset_into_file += sizeof (phdr_note); - phdr_note.p_offset = offset_into_file; - phdr_note.p_paddr = ovmf_base_address + phdr_note.p_offset; - phdr_note.p_vaddr = phdr_note.p_paddr; + hdr.e_phnum += 1; + offset_into_file += sizeof (phdr_note); + phdr_note.p_offset = offset_into_file; + phdr_note.p_paddr = ovmf_base_address + phdr_note.p_offset; + phdr_note.p_vaddr = phdr_note.p_paddr; /* * print elf header */ - size_t i; - size_t hdr_size = sizeof (hdr); - size_t entry_off = offsetof(typeof(hdr), e_entry); + size_t i; + size_t hdr_size = sizeof (hdr); + size_t entry_off = offsetof (typeof(hdr), e_entry); - printf("# ELF file header\n"); - print_hdr(&hdr, entry_off); - printf("\n"); - print_hdr(&hdr.e_entry, sizeof (hdr.e_entry)); - printf(" # hdr.e_entry\n"); - print_hdr(&hdr.e_entry + 1, hdr_size - entry_off - sizeof (hdr.e_entry)); + printf ("# ELF file header\n"); + print_hdr (&hdr, entry_off); + printf ("\n"); + print_hdr (&hdr.e_entry, sizeof (hdr.e_entry)); + printf (" # hdr.e_entry\n"); + print_hdr (&hdr.e_entry + 1, hdr_size - entry_off - sizeof (hdr.e_entry)); - printf("\n\n# ELF Program segment headers\n"); - printf("# - Load segment\n"); + printf ("\n\n# ELF Program segment headers\n"); + printf ("# - Load segment\n"); for (i = 0; i < sizeof (phdr_load); i += 4) { - print_hdr(((char*)&phdr_load) + i, 4); - printf("\n"); + print_hdr (((char *)&phdr_load) + i, 4); + printf ("\n"); } - printf("# - ELFNOTE segment\n"); + + printf ("# - ELFNOTE segment\n"); for (i = 0; i < sizeof (phdr_note); i += 4) { - print_hdr(((char*)&phdr_note) + i, 4); - printf("\n"); + print_hdr (((char *)&phdr_note) + i, 4); + printf ("\n"); } - printf("\n# XEN_ELFNOTE_PHYS32_ENTRY\n"); + printf ("\n# XEN_ELFNOTE_PHYS32_ENTRY\n"); for (i = 0; i < sizeof (xen_elf_note); i += 4) { - print_hdr(((char*)&xen_elf_note) + i, 4); - printf("\n"); + print_hdr (((char *)&xen_elf_note) + i, 4); + printf ("\n"); } return 0; diff --git a/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c b/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c index 387b1e80eb..c122855b73 100644 --- a/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c +++ b/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c @@ -27,8 +27,7 @@ // // TRUE if the PCI platform supports extended config space, FALSE otherwise. // -STATIC BOOLEAN mPciExtConfSpaceSupported; - +STATIC BOOLEAN mPciExtConfSpaceSupported; // // The protocol interface this driver produces. @@ -36,8 +35,7 @@ STATIC BOOLEAN mPciExtConfSpaceSupported; // Refer to 12.6 "PCI Hot Plug PCI Initialization Protocol" in the Platform // Init 1.4a Spec, Volume 5. // -STATIC EFI_PCI_HOT_PLUG_INIT_PROTOCOL mPciHotPlugInit; - +STATIC EFI_PCI_HOT_PLUG_INIT_PROTOCOL mPciHotPlugInit; // // Resource padding template for the GetResourcePadding() protocol member @@ -58,12 +56,11 @@ STATIC EFI_PCI_HOT_PLUG_INIT_PROTOCOL mPciHotPlugInit; // #pragma pack (1) typedef struct { - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR Padding[4]; - EFI_ACPI_END_TAG_DESCRIPTOR EndDesc; + EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR Padding[4]; + EFI_ACPI_END_TAG_DESCRIPTOR EndDesc; } RESOURCE_PADDING; #pragma pack () - /** Initialize a RESOURCE_PADDING object. @@ -73,10 +70,10 @@ typedef struct { STATIC VOID InitializeResourcePadding ( - OUT RESOURCE_PADDING *ResourcePadding + OUT RESOURCE_PADDING *ResourcePadding ) { - UINTN Index; + UINTN Index; ZeroMem (ResourcePadding, sizeof *ResourcePadding); @@ -84,17 +81,17 @@ InitializeResourcePadding ( // Fill in the Padding fields that don't vary across resource types. // for (Index = 0; Index < ARRAY_SIZE (ResourcePadding->Padding); ++Index) { - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor; + EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor; Descriptor = ResourcePadding->Padding + Index; Descriptor->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR; Descriptor->Len = (UINT16)( - sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - - OFFSET_OF ( - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR, - ResType - ) - ); + sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) - + OFFSET_OF ( + EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR, + ResType + ) + ); } // @@ -103,7 +100,6 @@ InitializeResourcePadding ( ResourcePadding->EndDesc.Desc = ACPI_END_TAG_DESCRIPTOR; } - /** Set up a descriptor entry for reserving IO space. @@ -117,16 +113,15 @@ InitializeResourcePadding ( STATIC VOID SetIoPadding ( - IN OUT EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor, - IN UINTN SizeExponent + IN OUT EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor, + IN UINTN SizeExponent ) { - Descriptor->ResType = ACPI_ADDRESS_SPACE_TYPE_IO; - Descriptor->AddrLen = LShiftU64 (1, SizeExponent); + Descriptor->ResType = ACPI_ADDRESS_SPACE_TYPE_IO; + Descriptor->AddrLen = LShiftU64 (1, SizeExponent); Descriptor->AddrRangeMax = Descriptor->AddrLen - 1; } - /** Set up a descriptor entry for reserving MMIO space. @@ -152,10 +147,10 @@ SetIoPadding ( STATIC VOID SetMmioPadding ( - IN OUT EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor, - IN BOOLEAN Prefetchable, - IN BOOLEAN ThirtyTwoBitOnly, - IN UINTN SizeExponent + IN OUT EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor, + IN BOOLEAN Prefetchable, + IN BOOLEAN ThirtyTwoBitOnly, + IN UINTN SizeExponent ) { Descriptor->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM; @@ -168,11 +163,11 @@ SetMmioPadding ( EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_NON_CACHEABLE; Descriptor->AddrSpaceGranularity = 32; } - Descriptor->AddrLen = LShiftU64 (1, SizeExponent); + + Descriptor->AddrLen = LShiftU64 (1, SizeExponent); Descriptor->AddrRangeMax = Descriptor->AddrLen - 1; } - /** Round up a positive 32-bit value to the next whole power of two, and return the bit position of the highest bit set in the result. Equivalent to @@ -190,10 +185,10 @@ SetMmioPadding ( STATIC INTN HighBitSetRoundUp32 ( - IN UINT32 Operand + IN UINT32 Operand ) { - INTN HighBit; + INTN HighBit; HighBit = HighBitSet32 (Operand); if (HighBit == -1) { @@ -202,16 +197,17 @@ HighBitSetRoundUp32 ( // return HighBit; } + if ((Operand & (Operand - 1)) != 0) { // // Operand is not a whole power of two. // ++HighBit; } + return (HighBit < 32) ? HighBit : -1; } - /** Round up a positive 64-bit value to the next whole power of two, and return the bit position of the highest bit set in the result. Equivalent to @@ -229,10 +225,10 @@ HighBitSetRoundUp32 ( STATIC INTN HighBitSetRoundUp64 ( - IN UINT64 Operand + IN UINT64 Operand ) { - INTN HighBit; + INTN HighBit; HighBit = HighBitSet64 (Operand); if (HighBit == -1) { @@ -241,16 +237,17 @@ HighBitSetRoundUp64 ( // return HighBit; } + if ((Operand & (Operand - 1)) != 0) { // // Operand is not a whole power of two. // ++HighBit; } + return (HighBit < 64) ? HighBit : -1; } - /** Look up the QEMU-specific Resource Reservation capability in the conventional config space of a Hotplug Controller (that is, PCI Bridge). @@ -273,16 +270,16 @@ HighBitSetRoundUp64 ( STATIC EFI_STATUS QueryReservationHint ( - IN CONST EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *HpcPciAddress, - OUT QEMU_PCI_BRIDGE_CAPABILITY_RESOURCE_RESERVATION *ReservationHint -) + IN CONST EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *HpcPciAddress, + OUT QEMU_PCI_BRIDGE_CAPABILITY_RESOURCE_RESERVATION *ReservationHint + ) { - UINT16 PciVendorId; - EFI_STATUS Status; - PCI_CAP_DEV *PciDevice; - PCI_CAP_LIST *CapList; - UINT16 VendorInstance; - PCI_CAP *VendorCap; + UINT16 PciVendorId; + EFI_STATUS Status; + PCI_CAP_DEV *PciDevice; + PCI_CAP_LIST *CapList; + UINT16 VendorInstance; + PCI_CAP *VendorCap; // // Check the vendor identifier. @@ -313,6 +310,7 @@ QueryReservationHint ( if (EFI_ERROR (Status)) { return Status; } + Status = PciCapListInit (PciDevice, &CapList); if (EFI_ERROR (Status)) { goto UninitPciDevice; @@ -323,9 +321,9 @@ QueryReservationHint ( // capability. // VendorInstance = 0; - for (;;) { - UINT8 VendorLength; - UINT8 BridgeCapType; + for ( ; ;) { + UINT8 VendorLength; + UINT8 BridgeCapType; Status = PciCapListFindCap ( CapList, @@ -351,6 +349,7 @@ QueryReservationHint ( if (EFI_ERROR (Status)) { goto UninitCapList; } + if (VendorLength != sizeof *ReservationHint) { continue; } @@ -368,8 +367,10 @@ QueryReservationHint ( if (EFI_ERROR (Status)) { goto UninitCapList; } + if (BridgeCapType == - QEMU_PCI_BRIDGE_CAPABILITY_TYPE_RESOURCE_RESERVATION) { + QEMU_PCI_BRIDGE_CAPABILITY_TYPE_RESOURCE_RESERVATION) + { // // We have a match. // @@ -397,7 +398,6 @@ UninitPciDevice: return Status; } - /** Returns a list of root Hot Plug Controllers (HPCs) that require initialization during the boot process. @@ -428,12 +428,12 @@ STATIC EFI_STATUS EFIAPI GetRootHpcList ( - IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This, - OUT UINTN *HpcCount, - OUT EFI_HPC_LOCATION **HpcList + IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This, + OUT UINTN *HpcCount, + OUT EFI_HPC_LOCATION **HpcList ) { - if (HpcCount == NULL || HpcList == NULL) { + if ((HpcCount == NULL) || (HpcList == NULL)) { return EFI_INVALID_PARAMETER; } @@ -442,11 +442,10 @@ GetRootHpcList ( // that would require special initialization. // *HpcCount = 0; - *HpcList = NULL; + *HpcList = NULL; return EFI_SUCCESS; } - /** Initializes one root Hot Plug Controller (HPC). This process may causes initialization of its subordinate buses. @@ -486,11 +485,11 @@ STATIC EFI_STATUS EFIAPI InitializeRootHpc ( - IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This, - IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath, - IN UINT64 HpcPciAddress, - IN EFI_EVENT Event OPTIONAL, - OUT EFI_HPC_STATE *HpcState + IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This, + IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath, + IN UINT64 HpcPciAddress, + IN EFI_EVENT Event OPTIONAL, + OUT EFI_HPC_STATE *HpcState ) { // @@ -502,10 +501,10 @@ InitializeRootHpc ( if (HpcState == NULL) { return EFI_INVALID_PARAMETER; } + return EFI_UNSUPPORTED; } - /** Returns the resource padding that is required by the PCI bus that is controlled by the specified Hot Plug Controller (HPC). @@ -546,43 +545,50 @@ STATIC EFI_STATUS EFIAPI GetResourcePadding ( - IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This, - IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath, - IN UINT64 HpcPciAddress, - OUT EFI_HPC_STATE *HpcState, - OUT VOID **Padding, - OUT EFI_HPC_PADDING_ATTRIBUTES *Attributes + IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This, + IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath, + IN UINT64 HpcPciAddress, + OUT EFI_HPC_STATE *HpcState, + OUT VOID **Padding, + OUT EFI_HPC_PADDING_ATTRIBUTES *Attributes ) { - EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *Address; - BOOLEAN DefaultIo; - BOOLEAN DefaultMmio; - RESOURCE_PADDING ReservationRequest; - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *FirstResource; - EFI_STATUS ReservationHintStatus; - QEMU_PCI_BRIDGE_CAPABILITY_RESOURCE_RESERVATION ReservationHint; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *Address; + BOOLEAN DefaultIo; + BOOLEAN DefaultMmio; + RESOURCE_PADDING ReservationRequest; + EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *FirstResource; + EFI_STATUS ReservationHintStatus; + QEMU_PCI_BRIDGE_CAPABILITY_RESOURCE_RESERVATION ReservationHint; Address = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *)&HpcPciAddress; DEBUG_CODE_BEGIN (); - CHAR16 *DevicePathString; - - DevicePathString = ConvertDevicePathToText (HpcDevicePath, FALSE, FALSE); - - DEBUG ((DEBUG_VERBOSE, "%a: Address=%02x:%02x.%x DevicePath=%s\n", - __FUNCTION__, Address->Bus, Address->Device, Address->Function, - (DevicePathString == NULL) ? L"" : DevicePathString)); + CHAR16 *DevicePathString; + + DevicePathString = ConvertDevicePathToText (HpcDevicePath, FALSE, FALSE); + + DEBUG (( + DEBUG_VERBOSE, + "%a: Address=%02x:%02x.%x DevicePath=%s\n", + __FUNCTION__, + Address->Bus, + Address->Device, + Address->Function, + (DevicePathString == NULL) ? L"" : DevicePathString + )); + + if (DevicePathString != NULL) { + FreePool (DevicePathString); + } - if (DevicePathString != NULL) { - FreePool (DevicePathString); - } DEBUG_CODE_END (); - if (HpcState == NULL || Padding == NULL || Attributes == NULL) { + if ((HpcState == NULL) || (Padding == NULL) || (Attributes == NULL)) { return EFI_INVALID_PARAMETER; } - DefaultIo = TRUE; + DefaultIo = TRUE; DefaultMmio = TRUE; // @@ -599,7 +605,7 @@ GetResourcePadding ( // ReservationHintStatus = QueryReservationHint (Address, &ReservationHint); if (!EFI_ERROR (ReservationHintStatus)) { - INTN HighBit; + INTN HighBit; DEBUG (( DEBUG_VERBOSE, @@ -618,82 +624,84 @@ GetResourcePadding ( // (a) Reserve bus numbers. // switch (ReservationHint.BusNumbers) { - case 0: - // - // No reservation needed. - // - break; - case MAX_UINT32: - // - // Firmware default (unspecified). Treat it as "no reservation needed". - // - break; - default: - // - // Request the specified amount. - // - --FirstResource; - FirstResource->ResType = ACPI_ADDRESS_SPACE_TYPE_BUS; - FirstResource->AddrLen = ReservationHint.BusNumbers; - break; + case 0: + // + // No reservation needed. + // + break; + case MAX_UINT32: + // + // Firmware default (unspecified). Treat it as "no reservation needed". + // + break; + default: + // + // Request the specified amount. + // + --FirstResource; + FirstResource->ResType = ACPI_ADDRESS_SPACE_TYPE_BUS; + FirstResource->AddrLen = ReservationHint.BusNumbers; + break; } // // (b) Reserve IO space. // switch (ReservationHint.Io) { - case 0: - // - // No reservation needed, disable our built-in. - // - DefaultIo = FALSE; - break; - case MAX_UINT64: - // - // Firmware default (unspecified). Stick with our built-in. - // - break; - default: - // - // Round the specified amount up to the next power of two. If rounding is - // successful, reserve the rounded value. Fall back to the default - // otherwise. - // - HighBit = HighBitSetRoundUp64 (ReservationHint.Io); - if (HighBit != -1) { - SetIoPadding (--FirstResource, (UINTN)HighBit); + case 0: + // + // No reservation needed, disable our built-in. + // DefaultIo = FALSE; - } - break; + break; + case MAX_UINT64: + // + // Firmware default (unspecified). Stick with our built-in. + // + break; + default: + // + // Round the specified amount up to the next power of two. If rounding is + // successful, reserve the rounded value. Fall back to the default + // otherwise. + // + HighBit = HighBitSetRoundUp64 (ReservationHint.Io); + if (HighBit != -1) { + SetIoPadding (--FirstResource, (UINTN)HighBit); + DefaultIo = FALSE; + } + + break; } // // (c) Reserve non-prefetchable MMIO space (32-bit only). // switch (ReservationHint.NonPrefetchable32BitMmio) { - case 0: - // - // No reservation needed, disable our built-in. - // - DefaultMmio = FALSE; - break; - case MAX_UINT32: - // - // Firmware default (unspecified). Stick with our built-in. - // - break; - default: - // - // Round the specified amount up to the next power of two. If rounding is - // successful, reserve the rounded value. Fall back to the default - // otherwise. - // - HighBit = HighBitSetRoundUp32 (ReservationHint.NonPrefetchable32BitMmio); - if (HighBit != -1) { - SetMmioPadding (--FirstResource, FALSE, TRUE, (UINTN)HighBit); + case 0: + // + // No reservation needed, disable our built-in. + // DefaultMmio = FALSE; - } - break; + break; + case MAX_UINT32: + // + // Firmware default (unspecified). Stick with our built-in. + // + break; + default: + // + // Round the specified amount up to the next power of two. If rounding is + // successful, reserve the rounded value. Fall back to the default + // otherwise. + // + HighBit = HighBitSetRoundUp32 (ReservationHint.NonPrefetchable32BitMmio); + if (HighBit != -1) { + SetMmioPadding (--FirstResource, FALSE, TRUE, (UINTN)HighBit); + DefaultMmio = FALSE; + } + + break; } // @@ -708,14 +716,16 @@ GetResourcePadding ( // rounding is successful, reserve the rounded value. Do not reserve // prefetchable MMIO space otherwise. // - if (ReservationHint.Prefetchable32BitMmio > 0 && - ReservationHint.Prefetchable32BitMmio < MAX_UINT32) { + if ((ReservationHint.Prefetchable32BitMmio > 0) && + (ReservationHint.Prefetchable32BitMmio < MAX_UINT32)) + { HighBit = HighBitSetRoundUp32 (ReservationHint.Prefetchable32BitMmio); if (HighBit != -1) { SetMmioPadding (--FirstResource, TRUE, TRUE, (UINTN)HighBit); } - } else if (ReservationHint.Prefetchable64BitMmio > 0 && - ReservationHint.Prefetchable64BitMmio < MAX_UINT64) { + } else if ((ReservationHint.Prefetchable64BitMmio > 0) && + (ReservationHint.Prefetchable64BitMmio < MAX_UINT64)) + { HighBit = HighBitSetRoundUp64 (ReservationHint.Prefetchable64BitMmio); if (HighBit != -1) { SetMmioPadding (--FirstResource, TRUE, FALSE, (UINTN)HighBit); @@ -769,7 +779,6 @@ GetResourcePadding ( return EFI_SUCCESS; } - /** Entry point for this driver. @@ -783,18 +792,22 @@ GetResourcePadding ( EFI_STATUS EFIAPI DriverInitialize ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; + EFI_STATUS Status; mPciExtConfSpaceSupported = (PcdGet16 (PcdOvmfHostBridgePciDevId) == INTEL_Q35_MCH_DEVICE_ID); - mPciHotPlugInit.GetRootHpcList = GetRootHpcList; - mPciHotPlugInit.InitializeRootHpc = InitializeRootHpc; + mPciHotPlugInit.GetRootHpcList = GetRootHpcList; + mPciHotPlugInit.InitializeRootHpc = InitializeRootHpc; mPciHotPlugInit.GetResourcePadding = GetResourcePadding; - Status = gBS->InstallMultipleProtocolInterfaces (&ImageHandle, - &gEfiPciHotPlugInitProtocolGuid, &mPciHotPlugInit, NULL); + Status = gBS->InstallMultipleProtocolInterfaces ( + &ImageHandle, + &gEfiPciHotPlugInitProtocolGuid, + &mPciHotPlugInit, + NULL + ); return Status; } diff --git a/OvmfPkg/PlatformDxe/Platform.c b/OvmfPkg/PlatformDxe/Platform.c index f2e51960ce..69a7ecb83d 100644 --- a/OvmfPkg/PlatformDxe/Platform.c +++ b/OvmfPkg/PlatformDxe/Platform.c @@ -44,19 +44,19 @@ // #pragma pack(1) typedef struct { - VENDOR_DEVICE_PATH VendorDevicePath; - EFI_DEVICE_PATH_PROTOCOL End; + VENDOR_DEVICE_PATH VendorDevicePath; + EFI_DEVICE_PATH_PROTOCOL End; } PKG_DEVICE_PATH; #pragma pack() -STATIC PKG_DEVICE_PATH mPkgDevicePath = { +STATIC PKG_DEVICE_PATH mPkgDevicePath = { { { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, { - (UINT8) (sizeof (VENDOR_DEVICE_PATH) ), - (UINT8) (sizeof (VENDOR_DEVICE_PATH) >> 8) + (UINT8)(sizeof (VENDOR_DEVICE_PATH)), + (UINT8)(sizeof (VENDOR_DEVICE_PATH) >> 8) } }, EFI_CALLER_ID_GUID @@ -65,8 +65,8 @@ STATIC PKG_DEVICE_PATH mPkgDevicePath = { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { - (UINT8) (END_DEVICE_PATH_LENGTH ), - (UINT8) (END_DEVICE_PATH_LENGTH >> 8) + (UINT8)(END_DEVICE_PATH_LENGTH), + (UINT8)(END_DEVICE_PATH_LENGTH >> 8) } } }; @@ -75,12 +75,12 @@ STATIC PKG_DEVICE_PATH mPkgDevicePath = { // The configuration interface between the HII engine (form display etc) and // this driver. // -STATIC EFI_HII_CONFIG_ACCESS_PROTOCOL mConfigAccess; +STATIC EFI_HII_CONFIG_ACCESS_PROTOCOL mConfigAccess; // // The handle representing our list of packages after installation. // -STATIC EFI_HII_HANDLE mInstalledPackages; +STATIC EFI_HII_HANDLE mInstalledPackages; // // The arrays below constitute our HII package list. They are auto-generated by @@ -93,32 +93,31 @@ STATIC EFI_HII_HANDLE mInstalledPackages; // plus "Bin". // // -extern UINT8 PlatformDxeStrings[]; -extern UINT8 PlatformFormsBin[]; +extern UINT8 PlatformDxeStrings[]; +extern UINT8 PlatformFormsBin[]; // // We want to be notified about GOP installations until we find one GOP // interface that lets us populate the form. // -STATIC EFI_EVENT mGopEvent; +STATIC EFI_EVENT mGopEvent; // // The registration record underneath this pointer allows us to iterate through // the GOP instances one by one. // -STATIC VOID *mGopTracker; +STATIC VOID *mGopTracker; // // Cache the resolutions we get from the GOP. // typedef struct { - UINT32 X; - UINT32 Y; + UINT32 X; + UINT32 Y; } GOP_MODE; -STATIC UINTN mNumGopModes; -STATIC GOP_MODE *mGopModes; - +STATIC UINTN mNumGopModes; +STATIC GOP_MODE *mGopModes; /** Load the persistent platform configuration and translate it to binary form @@ -136,63 +135,66 @@ STATIC EFI_STATUS EFIAPI PlatformConfigToFormState ( - OUT MAIN_FORM_STATE *MainFormState + OUT MAIN_FORM_STATE *MainFormState ) { - EFI_STATUS Status; - PLATFORM_CONFIG PlatformConfig; - UINT64 OptionalElements; - UINTN ModeNumber; + EFI_STATUS Status; + PLATFORM_CONFIG PlatformConfig; + UINT64 OptionalElements; + UINTN ModeNumber; ZeroMem (MainFormState, sizeof *MainFormState); Status = PlatformConfigLoad (&PlatformConfig, &OptionalElements); switch (Status) { - case EFI_SUCCESS: - if (OptionalElements & PLATFORM_CONFIG_F_GRAPHICS_RESOLUTION) { - // - // Format the preferred resolution as text. - // - UnicodeSPrintAsciiFormat ( - (CHAR16 *) MainFormState->CurrentPreferredResolution, - sizeof MainFormState->CurrentPreferredResolution, - "%Ldx%Ld", - (INT64) PlatformConfig.HorizontalResolution, - (INT64) PlatformConfig.VerticalResolution); - - // - // Try to locate it in the drop-down list too. This may not succeed, but - // that's fine. - // - for (ModeNumber = 0; ModeNumber < mNumGopModes; ++ModeNumber) { - if (mGopModes[ModeNumber].X == PlatformConfig.HorizontalResolution && - mGopModes[ModeNumber].Y == PlatformConfig.VerticalResolution) { - MainFormState->NextPreferredResolution = (UINT32) ModeNumber; - break; + case EFI_SUCCESS: + if (OptionalElements & PLATFORM_CONFIG_F_GRAPHICS_RESOLUTION) { + // + // Format the preferred resolution as text. + // + UnicodeSPrintAsciiFormat ( + (CHAR16 *)MainFormState->CurrentPreferredResolution, + sizeof MainFormState->CurrentPreferredResolution, + "%Ldx%Ld", + (INT64)PlatformConfig.HorizontalResolution, + (INT64)PlatformConfig.VerticalResolution + ); + + // + // Try to locate it in the drop-down list too. This may not succeed, but + // that's fine. + // + for (ModeNumber = 0; ModeNumber < mNumGopModes; ++ModeNumber) { + if ((mGopModes[ModeNumber].X == PlatformConfig.HorizontalResolution) && + (mGopModes[ModeNumber].Y == PlatformConfig.VerticalResolution)) + { + MainFormState->NextPreferredResolution = (UINT32)ModeNumber; + break; + } } + + break; } - break; - } // // fall through otherwise // - case EFI_NOT_FOUND: - UnicodeSPrintAsciiFormat ( - (CHAR16 *) MainFormState->CurrentPreferredResolution, - sizeof MainFormState->CurrentPreferredResolution, - "Unset"); - break; + case EFI_NOT_FOUND: + UnicodeSPrintAsciiFormat ( + (CHAR16 *)MainFormState->CurrentPreferredResolution, + sizeof MainFormState->CurrentPreferredResolution, + "Unset" + ); + break; - default: - return Status; + default: + return Status; } return EFI_SUCCESS; } - /** This function is called by the HII machinery when it fetches the form state. @@ -223,10 +225,10 @@ ExtractConfig ( IN CONST EFI_STRING Request, OUT EFI_STRING *Progress, OUT EFI_STRING *Results -) + ) { - MAIN_FORM_STATE MainFormState; - EFI_STATUS Status; + MAIN_FORM_STATE MainFormState; + EFI_STATUS Status; DEBUG ((DEBUG_VERBOSE, "%a: Request=\"%s\"\n", __FUNCTION__, Request)); @@ -239,19 +241,29 @@ ExtractConfig ( // // Answer the textual request keying off the binary form state. // - Status = gHiiConfigRouting->BlockToConfig (gHiiConfigRouting, Request, - (VOID *) &MainFormState, sizeof MainFormState, - Results, Progress); + Status = gHiiConfigRouting->BlockToConfig ( + gHiiConfigRouting, + Request, + (VOID *)&MainFormState, + sizeof MainFormState, + Results, + Progress + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: BlockToConfig(): %r, Progress=\"%s\"\n", - __FUNCTION__, Status, (Status == EFI_DEVICE_ERROR) ? NULL : *Progress)); + DEBUG (( + DEBUG_ERROR, + "%a: BlockToConfig(): %r, Progress=\"%s\"\n", + __FUNCTION__, + Status, + (Status == EFI_DEVICE_ERROR) ? NULL : *Progress + )); } else { DEBUG ((DEBUG_VERBOSE, "%a: Results=\"%s\"\n", __FUNCTION__, *Results)); } + return Status; } - /** Interpret the binary form state and save it as persistent platform configuration. @@ -265,12 +277,12 @@ STATIC EFI_STATUS EFIAPI FormStateToPlatformConfig ( - IN CONST MAIN_FORM_STATE *MainFormState + IN CONST MAIN_FORM_STATE *MainFormState ) { - EFI_STATUS Status; - PLATFORM_CONFIG PlatformConfig; - CONST GOP_MODE *GopMode; + EFI_STATUS Status; + PLATFORM_CONFIG PlatformConfig; + CONST GOP_MODE *GopMode; // // There's nothing to do with the textual CurrentPreferredResolution field. @@ -279,6 +291,7 @@ FormStateToPlatformConfig ( if (MainFormState->NextPreferredResolution >= mNumGopModes) { return EFI_INVALID_PARAMETER; } + GopMode = mGopModes + MainFormState->NextPreferredResolution; ZeroMem (&PlatformConfig, sizeof PlatformConfig); @@ -289,7 +302,6 @@ FormStateToPlatformConfig ( return Status; } - /** This function is called by the HII machinery when it wants the driver to interpret and persist the form state. @@ -315,14 +327,18 @@ RouteConfig ( IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, IN CONST EFI_STRING Configuration, OUT EFI_STRING *Progress -) + ) { - MAIN_FORM_STATE MainFormState; - UINTN BlockSize; - EFI_STATUS Status; + MAIN_FORM_STATE MainFormState; + UINTN BlockSize; + EFI_STATUS Status; - DEBUG ((DEBUG_VERBOSE, "%a: Configuration=\"%s\"\n", __FUNCTION__, - Configuration)); + DEBUG (( + DEBUG_VERBOSE, + "%a: Configuration=\"%s\"\n", + __FUNCTION__, + Configuration + )); // // the "read" step in RMW @@ -340,12 +356,21 @@ RouteConfig ( // general we must pre-load the form state from the platform config.) // BlockSize = sizeof MainFormState; - Status = gHiiConfigRouting->ConfigToBlock (gHiiConfigRouting, Configuration, - (VOID *) &MainFormState, &BlockSize, Progress); + Status = gHiiConfigRouting->ConfigToBlock ( + gHiiConfigRouting, + Configuration, + (VOID *)&MainFormState, + &BlockSize, + Progress + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: ConfigToBlock(): %r, Progress=\"%s\"\n", - __FUNCTION__, Status, - (Status == EFI_BUFFER_TOO_SMALL) ? NULL : *Progress)); + DEBUG (( + DEBUG_ERROR, + "%a: ConfigToBlock(): %r, Progress=\"%s\"\n", + __FUNCTION__, + Status, + (Status == EFI_BUFFER_TOO_SMALL) ? NULL : *Progress + )); return Status; } @@ -356,46 +381,51 @@ RouteConfig ( if (EFI_ERROR (Status)) { *Progress = Configuration; } + return Status; } - STATIC EFI_STATUS EFIAPI Callback ( - IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, - IN EFI_BROWSER_ACTION Action, - IN EFI_QUESTION_ID QuestionId, - IN UINT8 Type, - IN OUT EFI_IFR_TYPE_VALUE *Value, - OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest + IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, + IN EFI_BROWSER_ACTION Action, + IN EFI_QUESTION_ID QuestionId, + IN UINT8 Type, + IN OUT EFI_IFR_TYPE_VALUE *Value, + OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest ) { - DEBUG ((DEBUG_VERBOSE, "%a: Action=0x%Lx QuestionId=%d Type=%d\n", - __FUNCTION__, (UINT64) Action, QuestionId, Type)); + DEBUG (( + DEBUG_VERBOSE, + "%a: Action=0x%Lx QuestionId=%d Type=%d\n", + __FUNCTION__, + (UINT64)Action, + QuestionId, + Type + )); if (Action != EFI_BROWSER_ACTION_CHANGED) { return EFI_UNSUPPORTED; } switch (QuestionId) { - case QUESTION_SAVE_EXIT: - *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT; - break; + case QUESTION_SAVE_EXIT: + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT; + break; - case QUESTION_DISCARD_EXIT: - *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT; - break; + case QUESTION_DISCARD_EXIT: + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT; + break; - default: - break; + default: + break; } return EFI_SUCCESS; } - /** Query and save all resolutions supported by the GOP. @@ -417,17 +447,18 @@ STATIC EFI_STATUS EFIAPI QueryGopModes ( - IN EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop, - OUT UINTN *NumGopModes, - OUT GOP_MODE **GopModes + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop, + OUT UINTN *NumGopModes, + OUT GOP_MODE **GopModes ) { - EFI_STATUS Status; - UINT32 ModeNumber; + EFI_STATUS Status; + UINT32 ModeNumber; if (Gop->Mode->MaxMode == 0) { return EFI_UNSUPPORTED; } + *NumGopModes = Gop->Mode->MaxMode; *GopModes = AllocatePool (Gop->Mode->MaxMode * sizeof **GopModes); @@ -436,8 +467,8 @@ QueryGopModes ( } for (ModeNumber = 0; ModeNumber < Gop->Mode->MaxMode; ++ModeNumber) { - EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info; - UINTN SizeOfInfo; + EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info; + UINTN SizeOfInfo; Status = Gop->QueryMode (Gop, ModeNumber, &SizeOfInfo, &Info); if (EFI_ERROR (Status)) { @@ -457,7 +488,6 @@ FreeGopModes: return Status; } - /** Create a set of "one-of-many" (ie. "drop down list") option IFR opcodes, based on available GOP resolutions, to be placed under a "one-of-many" (ie. @@ -492,9 +522,9 @@ CreateResolutionOptions ( IN GOP_MODE *GopModes ) { - EFI_STATUS Status; - VOID *OutputBuffer; - UINTN ModeNumber; + EFI_STATUS Status; + VOID *OutputBuffer; + UINTN ModeNumber; OutputBuffer = HiiAllocateOpCodeHandle (); if (OutputBuffer == NULL) { @@ -502,20 +532,35 @@ CreateResolutionOptions ( } for (ModeNumber = 0; ModeNumber < NumGopModes; ++ModeNumber) { - CHAR16 Desc[MAXSIZE_RES_CUR]; - EFI_STRING_ID NewString; - VOID *OpCode; - - UnicodeSPrintAsciiFormat (Desc, sizeof Desc, "%Ldx%Ld", - (INT64) GopModes[ModeNumber].X, (INT64) GopModes[ModeNumber].Y); - NewString = HiiSetString (PackageList, 0 /* new string */, Desc, - NULL /* for all languages */); + CHAR16 Desc[MAXSIZE_RES_CUR]; + EFI_STRING_ID NewString; + VOID *OpCode; + + UnicodeSPrintAsciiFormat ( + Desc, + sizeof Desc, + "%Ldx%Ld", + (INT64)GopModes[ModeNumber].X, + (INT64)GopModes[ModeNumber].Y + ); + NewString = HiiSetString ( + PackageList, + 0 /* new string */, + Desc, + NULL /* for all languages */ + ); if (NewString == 0) { Status = EFI_OUT_OF_RESOURCES; goto FreeOutputBuffer; } - OpCode = HiiCreateOneOfOptionOpCode (OutputBuffer, NewString, - 0 /* Flags */, EFI_IFR_NUMERIC_SIZE_4, ModeNumber); + + OpCode = HiiCreateOneOfOptionOpCode ( + OutputBuffer, + NewString, + 0 /* Flags */, + EFI_IFR_NUMERIC_SIZE_4, + ModeNumber + ); if (OpCode == NULL) { Status = EFI_OUT_OF_RESOURCES; goto FreeOutputBuffer; @@ -531,7 +576,6 @@ FreeOutputBuffer: return Status; } - /** Populate the form identified by the (PackageList, FormSetGuid, FormId) triplet. @@ -554,11 +598,11 @@ PopulateForm ( IN GOP_MODE *GopModes ) { - EFI_STATUS Status; - VOID *OpCodeBuffer; - VOID *OpCode; - EFI_IFR_GUID_LABEL *Anchor; - VOID *OpCodeBuffer2; + EFI_STATUS Status; + VOID *OpCodeBuffer; + VOID *OpCode; + EFI_IFR_GUID_LABEL *Anchor; + VOID *OpCodeBuffer2; OpCodeBuffer2 = NULL; @@ -574,12 +618,17 @@ PopulateForm ( // 2. Create a label opcode (which is a Tiano extension) inside the buffer. // The label's number must match the "anchor" label in the form. // - OpCode = HiiCreateGuidOpCode (OpCodeBuffer, &gEfiIfrTianoGuid, - NULL /* optional copy origin */, sizeof *Anchor); + OpCode = HiiCreateGuidOpCode ( + OpCodeBuffer, + &gEfiIfrTianoGuid, + NULL /* optional copy origin */, + sizeof *Anchor + ); if (OpCode == NULL) { Status = EFI_OUT_OF_RESOURCES; goto FreeOpCodeBuffer; } + Anchor = OpCode; Anchor->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL; Anchor->Number = LABEL_RES_NEXT; @@ -590,8 +639,12 @@ PopulateForm ( // // 3.1. Get a list of resolutions. // - Status = CreateResolutionOptions (PackageList, &OpCodeBuffer2, - NumGopModes, GopModes); + Status = CreateResolutionOptions ( + PackageList, + &OpCodeBuffer2, + NumGopModes, + GopModes + ); if (EFI_ERROR (Status)) { goto FreeOpCodeBuffer; } @@ -605,8 +658,10 @@ PopulateForm ( QUESTION_RES_NEXT, // ID of question, FORMSTATEID_MAIN_FORM, // identifies form state // storage, - (UINT16) OFFSET_OF (MAIN_FORM_STATE, // value of question stored - NextPreferredResolution), // at this offset, + (UINT16)OFFSET_OF ( + MAIN_FORM_STATE, // value of question stored + NextPreferredResolution + ), // at this offset, STRING_TOKEN (STR_RES_NEXT), // Prompt, STRING_TOKEN (STR_RES_NEXT_HELP), // Help, 0, // QuestionFlags, @@ -624,7 +679,10 @@ PopulateForm ( // // 4. Update the form with the opcode buffer. // - Status = HiiUpdateForm (PackageList, FormSetGuid, FormId, + Status = HiiUpdateForm ( + PackageList, + FormSetGuid, + FormId, OpCodeBuffer, // buffer with head anchor, and new contents to be // inserted at it NULL // buffer with tail anchor, for deleting old @@ -640,7 +698,6 @@ FreeOpCodeBuffer: return Status; } - /** Load and execute the platform configuration. @@ -654,15 +711,19 @@ ExecutePlatformConfig ( VOID ) { - EFI_STATUS Status; - PLATFORM_CONFIG PlatformConfig; - UINT64 OptionalElements; - RETURN_STATUS PcdStatus; + EFI_STATUS Status; + PLATFORM_CONFIG PlatformConfig; + UINT64 OptionalElements; + RETURN_STATUS PcdStatus; Status = PlatformConfigLoad (&PlatformConfig, &OptionalElements); if (EFI_ERROR (Status)) { - DEBUG (((Status == EFI_NOT_FOUND) ? DEBUG_VERBOSE : DEBUG_ERROR, - "%a: failed to load platform config: %r\n", __FUNCTION__, Status)); + DEBUG (( + (Status == EFI_NOT_FOUND) ? DEBUG_VERBOSE : DEBUG_ERROR, + "%a: failed to load platform config: %r\n", + __FUNCTION__, + Status + )); return Status; } @@ -670,19 +731,22 @@ ExecutePlatformConfig ( // // Pass the preferred resolution to GraphicsConsoleDxe via dynamic PCDs. // - PcdStatus = PcdSet32S (PcdVideoHorizontalResolution, - PlatformConfig.HorizontalResolution); + PcdStatus = PcdSet32S ( + PcdVideoHorizontalResolution, + PlatformConfig.HorizontalResolution + ); ASSERT_RETURN_ERROR (PcdStatus); - PcdStatus = PcdSet32S (PcdVideoVerticalResolution, - PlatformConfig.VerticalResolution); + PcdStatus = PcdSet32S ( + PcdVideoVerticalResolution, + PlatformConfig.VerticalResolution + ); ASSERT_RETURN_ERROR (PcdStatus); } return EFI_SUCCESS; } - /** Notification callback for GOP interface installation. @@ -695,24 +759,27 @@ STATIC VOID EFIAPI GopInstalled ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - EFI_STATUS Status; - EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop; + EFI_STATUS Status; + EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop; ASSERT (Event == mGopEvent); // // Check further GOPs. // - for (;;) { + for ( ; ;) { mNumGopModes = 0; - mGopModes = NULL; + mGopModes = NULL; - Status = gBS->LocateProtocol (&gEfiGraphicsOutputProtocolGuid, mGopTracker, - (VOID **) &Gop); + Status = gBS->LocateProtocol ( + &gEfiGraphicsOutputProtocolGuid, + mGopTracker, + (VOID **)&Gop + ); if (EFI_ERROR (Status)) { return; } @@ -722,8 +789,13 @@ GopInstalled ( continue; } - Status = PopulateForm (mInstalledPackages, &gOvmfPlatformConfigGuid, - FORMID_MAIN_FORM, mNumGopModes, mGopModes); + Status = PopulateForm ( + mInstalledPackages, + &gOvmfPlatformConfigGuid, + FORMID_MAIN_FORM, + mNumGopModes, + mGopModes + ); if (EFI_ERROR (Status)) { FreePool (mGopModes); continue; @@ -738,11 +810,10 @@ GopInstalled ( // Status = gBS->CloseEvent (mGopEvent); ASSERT_EFI_ERROR (Status); - mGopEvent = NULL; + mGopEvent = NULL; mGopTracker = NULL; } - /** Entry point for this driver. @@ -761,7 +832,7 @@ PlatformInit ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; + EFI_STATUS Status; ExecutePlatformConfig (); @@ -772,10 +843,14 @@ PlatformInit ( // // Declare ourselves suitable for HII communication. // - Status = gBS->InstallMultipleProtocolInterfaces (&ImageHandle, - &gEfiDevicePathProtocolGuid, &mPkgDevicePath, - &gEfiHiiConfigAccessProtocolGuid, &mConfigAccess, - NULL); + Status = gBS->InstallMultipleProtocolInterfaces ( + &ImageHandle, + &gEfiDevicePathProtocolGuid, + &mPkgDevicePath, + &gEfiHiiConfigAccessProtocolGuid, + &mConfigAccess, + NULL + ); if (EFI_ERROR (Status)) { return Status; } @@ -795,14 +870,22 @@ PlatformInit ( goto UninstallProtocols; } - Status = gBS->CreateEvent (EVT_NOTIFY_SIGNAL, TPL_CALLBACK, &GopInstalled, - NULL /* Context */, &mGopEvent); + Status = gBS->CreateEvent ( + EVT_NOTIFY_SIGNAL, + TPL_CALLBACK, + &GopInstalled, + NULL /* Context */, + &mGopEvent + ); if (EFI_ERROR (Status)) { goto RemovePackages; } - Status = gBS->RegisterProtocolNotify (&gEfiGraphicsOutputProtocolGuid, - mGopEvent, &mGopTracker); + Status = gBS->RegisterProtocolNotify ( + &gEfiGraphicsOutputProtocolGuid, + mGopEvent, + &mGopTracker + ); if (EFI_ERROR (Status)) { goto CloseGopEvent; } @@ -822,10 +905,14 @@ RemovePackages: HiiRemovePackages (mInstalledPackages); UninstallProtocols: - gBS->UninstallMultipleProtocolInterfaces (ImageHandle, - &gEfiDevicePathProtocolGuid, &mPkgDevicePath, - &gEfiHiiConfigAccessProtocolGuid, &mConfigAccess, - NULL); + gBS->UninstallMultipleProtocolInterfaces ( + ImageHandle, + &gEfiDevicePathProtocolGuid, + &mPkgDevicePath, + &gEfiHiiConfigAccessProtocolGuid, + &mConfigAccess, + NULL + ); return Status; } @@ -861,9 +948,13 @@ PlatformUnload ( // Release resources allocated by the entry point. // HiiRemovePackages (mInstalledPackages); - gBS->UninstallMultipleProtocolInterfaces (ImageHandle, - &gEfiDevicePathProtocolGuid, &mPkgDevicePath, - &gEfiHiiConfigAccessProtocolGuid, &mConfigAccess, - NULL); + gBS->UninstallMultipleProtocolInterfaces ( + ImageHandle, + &gEfiDevicePathProtocolGuid, + &mPkgDevicePath, + &gEfiHiiConfigAccessProtocolGuid, + &mConfigAccess, + NULL + ); return EFI_SUCCESS; } diff --git a/OvmfPkg/PlatformDxe/Platform.h b/OvmfPkg/PlatformDxe/Platform.h index 63b5e52575..7cdbd867ca 100644 --- a/OvmfPkg/PlatformDxe/Platform.h +++ b/OvmfPkg/PlatformDxe/Platform.h @@ -16,11 +16,11 @@ #define FORMSTATEID_MAIN_FORM 1 #define FORMID_MAIN_FORM 1 -#define QUESTION_RES_CUR 1 -#define MAXSIZE_RES_CUR 16 +#define QUESTION_RES_CUR 1 +#define MAXSIZE_RES_CUR 16 -#define LABEL_RES_NEXT 1 -#define QUESTION_RES_NEXT 2 +#define LABEL_RES_NEXT 1 +#define QUESTION_RES_NEXT 2 #define QUESTION_SAVE_EXIT 3 #define QUESTION_DISCARD_EXIT 4 @@ -30,8 +30,8 @@ // visual widgets on the form. // typedef struct { - UINT16 CurrentPreferredResolution[MAXSIZE_RES_CUR]; - UINT32 NextPreferredResolution; + UINT16 CurrentPreferredResolution[MAXSIZE_RES_CUR]; + UINT32 NextPreferredResolution; } MAIN_FORM_STATE; #endif // _PLATFORM_H_ diff --git a/OvmfPkg/PlatformDxe/PlatformConfig.c b/OvmfPkg/PlatformDxe/PlatformConfig.c index f3f0b54d6c..e202ac5b47 100644 --- a/OvmfPkg/PlatformDxe/PlatformConfig.c +++ b/OvmfPkg/PlatformDxe/PlatformConfig.c @@ -21,8 +21,7 @@ // // Name of the UEFI variable that we use for persistent storage. // -STATIC CHAR16 mVariableName[] = L"PlatformConfig"; - +STATIC CHAR16 mVariableName[] = L"PlatformConfig"; /** Serialize and persistently save platform configuration. @@ -34,10 +33,10 @@ STATIC CHAR16 mVariableName[] = L"PlatformConfig"; EFI_STATUS EFIAPI PlatformConfigSave ( - IN PLATFORM_CONFIG *PlatformConfig + IN PLATFORM_CONFIG *PlatformConfig ) { - EFI_STATUS Status; + EFI_STATUS Status; // // We could implement any kind of translation here, as part of serialization. @@ -45,14 +44,17 @@ PlatformConfigSave ( // variables with human-readable contents, allowing other tools to access // them more easily. For now, just save a binary dump. // - Status = gRT->SetVariable (mVariableName, &gOvmfPlatformConfigGuid, + Status = gRT->SetVariable ( + mVariableName, + &gOvmfPlatformConfigGuid, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | - EFI_VARIABLE_RUNTIME_ACCESS, - sizeof *PlatformConfig, PlatformConfig); + EFI_VARIABLE_RUNTIME_ACCESS, + sizeof *PlatformConfig, + PlatformConfig + ); return Status; } - /** Load and deserialize platform configuration. @@ -73,13 +75,13 @@ PlatformConfigSave ( EFI_STATUS EFIAPI PlatformConfigLoad ( - OUT PLATFORM_CONFIG *PlatformConfig, - OUT UINT64 *OptionalElements + OUT PLATFORM_CONFIG *PlatformConfig, + OUT UINT64 *OptionalElements ) { - VOID *Data; - UINTN DataSize; - EFI_STATUS Status; + VOID *Data; + UINTN DataSize; + EFI_STATUS Status; // // Any translation done in PlatformConfigSave() would have to be mirrored @@ -89,8 +91,12 @@ PlatformConfigLoad ( // (only incremental changes, ie. new fields), and on GUID. // (Incompatible changes require a GUID change.) // - Status = GetVariable2 (mVariableName, &gOvmfPlatformConfigGuid, &Data, - &DataSize); + Status = GetVariable2 ( + mVariableName, + &gOvmfPlatformConfigGuid, + &Data, + &DataSize + ); if (EFI_ERROR (Status)) { return Status; } @@ -108,15 +114,18 @@ PlatformConfigLoad ( // // Handle firmware upgrade -- zero out missing fields. // - ZeroMem ((UINT8 *)PlatformConfig + DataSize, - sizeof *PlatformConfig - DataSize); + ZeroMem ( + (UINT8 *)PlatformConfig + DataSize, + sizeof *PlatformConfig - DataSize + ); } // // Based on DataSize, report the optional features that we recognize. // if (DataSize >= (OFFSET_OF (PLATFORM_CONFIG, VerticalResolution) + - sizeof PlatformConfig->VerticalResolution)) { + sizeof PlatformConfig->VerticalResolution)) + { *OptionalElements |= PLATFORM_CONFIG_F_GRAPHICS_RESOLUTION; } diff --git a/OvmfPkg/PlatformDxe/PlatformConfig.h b/OvmfPkg/PlatformDxe/PlatformConfig.h index 716514da21..902c9b2ce0 100644 --- a/OvmfPkg/PlatformDxe/PlatformConfig.h +++ b/OvmfPkg/PlatformDxe/PlatformConfig.h @@ -23,8 +23,8 @@ typedef struct { // // preferred graphics console resolution when booting // - UINT32 HorizontalResolution; - UINT32 VerticalResolution; + UINT32 HorizontalResolution; + UINT32 VerticalResolution; } PLATFORM_CONFIG; #pragma pack() @@ -34,20 +34,20 @@ typedef struct { EFI_STATUS EFIAPI PlatformConfigSave ( - IN PLATFORM_CONFIG *PlatformConfig + IN PLATFORM_CONFIG *PlatformConfig ); EFI_STATUS EFIAPI PlatformConfigLoad ( - OUT PLATFORM_CONFIG *PlatformConfig, - OUT UINT64 *OptionalElements + OUT PLATFORM_CONFIG *PlatformConfig, + OUT UINT64 *OptionalElements ); // // Feature flags for OptionalElements. // -#define PLATFORM_CONFIG_F_GRAPHICS_RESOLUTION BIT0 -#define PLATFORM_CONFIG_F_DOWNGRADE BIT63 +#define PLATFORM_CONFIG_F_GRAPHICS_RESOLUTION BIT0 +#define PLATFORM_CONFIG_F_DOWNGRADE BIT63 #endif // _PLATFORM_CONFIG_H_ diff --git a/OvmfPkg/PlatformPei/AmdSev.c b/OvmfPkg/PlatformPei/AmdSev.c index a8bf610022..3991edfd1e 100644 --- a/OvmfPkg/PlatformPei/AmdSev.c +++ b/OvmfPkg/PlatformPei/AmdSev.c @@ -58,10 +58,10 @@ AmdSevEsInitialize ( // make them reserved. // GhcbPageCount = mMaxCpuCount * 2; - GhcbBase = AllocateReservedPages (GhcbPageCount); + GhcbBase = AllocateReservedPages (GhcbPageCount); ASSERT (GhcbBase != NULL); - GhcbBasePa = (PHYSICAL_ADDRESS)(UINTN) GhcbBase; + GhcbBasePa = (PHYSICAL_ADDRESS)(UINTN)GhcbBase; // // Each vCPU gets two consecutive pages, the first is the GHCB and the @@ -70,10 +70,10 @@ AmdSevEsInitialize ( // for (PageCount = 0; PageCount < GhcbPageCount; PageCount += 2) { DecryptStatus = MemEncryptSevClearPageEncMask ( - 0, - GhcbBasePa + EFI_PAGES_TO_SIZE (PageCount), - 1 - ); + 0, + GhcbBasePa + EFI_PAGES_TO_SIZE (PageCount), + 1 + ); ASSERT_RETURN_ERROR (DecryptStatus); } @@ -84,16 +84,19 @@ AmdSevEsInitialize ( PcdStatus = PcdSet64S (PcdGhcbSize, EFI_PAGES_TO_SIZE (GhcbPageCount)); ASSERT_RETURN_ERROR (PcdStatus); - DEBUG ((DEBUG_INFO, + DEBUG (( + DEBUG_INFO, "SEV-ES is enabled, %lu GHCB pages allocated starting at 0x%p\n", - (UINT64)GhcbPageCount, GhcbBase)); + (UINT64)GhcbPageCount, + GhcbBase + )); // // Allocate #VC recursion backup pages. The number of backup pages needed is // one less than the maximum VC count. // GhcbBackupPageCount = mMaxCpuCount * (VMGEXIT_MAXIMUM_VC_COUNT - 1); - GhcbBackupBase = AllocatePages (GhcbBackupPageCount); + GhcbBackupBase = AllocatePages (GhcbBackupPageCount); ASSERT (GhcbBackupBase != NULL); GhcbBackupPages = GhcbBackupBase; @@ -105,9 +108,12 @@ AmdSevEsInitialize ( GhcbBackupPages += EFI_PAGE_SIZE * (VMGEXIT_MAXIMUM_VC_COUNT - 1); } - DEBUG ((DEBUG_INFO, + DEBUG (( + DEBUG_INFO, "SEV-ES is enabled, %lu GHCB backup pages allocated starting at 0x%p\n", - (UINT64)GhcbBackupPageCount, GhcbBackupBase)); + (UINT64)GhcbBackupPageCount, + GhcbBackupBase + )); AsmWriteMsr64 (MSR_SEV_ES_GHCB, GhcbBasePa); @@ -120,11 +126,11 @@ AmdSevEsInitialize ( // AsmReadGdtr (&Gdtr); - Gdt = AllocatePages (EFI_SIZE_TO_PAGES ((UINTN) Gdtr.Limit + 1)); + Gdt = AllocatePages (EFI_SIZE_TO_PAGES ((UINTN)Gdtr.Limit + 1)); ASSERT (Gdt != NULL); - CopyMem (Gdt, (VOID *) Gdtr.Base, Gdtr.Limit + 1); - Gdtr.Base = (UINTN) Gdt; + CopyMem (Gdt, (VOID *)Gdtr.Base, Gdtr.Limit + 1); + Gdtr.Base = (UINTN)Gdt; AsmWriteGdtr (&Gdtr); } @@ -139,8 +145,8 @@ AmdSevInitialize ( VOID ) { - UINT64 EncryptionMask; - RETURN_STATUS PcdStatus; + UINT64 EncryptionMask; + RETURN_STATUS PcdStatus; // // Check if SEV is enabled @@ -153,7 +159,7 @@ AmdSevInitialize ( // Set Memory Encryption Mask PCD // EncryptionMask = MemEncryptSevGetEncryptionMask (); - PcdStatus = PcdSet64S (PcdPteMemoryEncryptionAddressOrMask, EncryptionMask); + PcdStatus = PcdSet64S (PcdPteMemoryEncryptionAddressOrMask, EncryptionMask); ASSERT_RETURN_ERROR (PcdStatus); DEBUG ((DEBUG_INFO, "SEV is enabled (mask 0x%lx)\n", EncryptionMask)); @@ -176,9 +182,9 @@ AmdSevInitialize ( // hypervisor. // if (FeaturePcdGet (PcdSmmSmramRequire) && (mBootMode != BOOT_ON_S3_RESUME)) { - RETURN_STATUS LocateMapStatus; - UINTN MapPagesBase; - UINTN MapPagesCount; + RETURN_STATUS LocateMapStatus; + UINTN MapPagesBase; + UINTN MapPagesCount; LocateMapStatus = MemEncryptSevLocateInitialSmramSaveStateMapPages ( &MapPagesBase, diff --git a/OvmfPkg/PlatformPei/ClearCache.c b/OvmfPkg/PlatformPei/ClearCache.c index 5c538c59e0..9f23f9a428 100644 --- a/OvmfPkg/PlatformPei/ClearCache.c +++ b/OvmfPkg/PlatformPei/ClearCache.c @@ -29,7 +29,7 @@ STATIC VOID EFIAPI ClearCache ( - IN OUT VOID *WorkSpace + IN OUT VOID *WorkSpace ) { WriteBackInvalidateDataCache (); @@ -56,8 +56,8 @@ ClearCacheOnMpServicesAvailable ( IN VOID *Ppi ) { - EFI_PEI_MP_SERVICES_PPI *MpServices; - EFI_STATUS Status; + EFI_PEI_MP_SERVICES_PPI *MpServices; + EFI_STATUS Status; DEBUG ((DEBUG_INFO, "%a: %a\n", gEfiCallerBaseName, __FUNCTION__)); @@ -65,15 +65,15 @@ ClearCacheOnMpServicesAvailable ( // Clear cache on all the APs in parallel. // MpServices = Ppi; - Status = MpServices->StartupAllAPs ( - (CONST EFI_PEI_SERVICES **)PeiServices, - MpServices, - ClearCache, // Procedure - FALSE, // SingleThread - 0, // TimeoutInMicroSeconds: inf. - NULL // ProcedureArgument - ); - if (EFI_ERROR (Status) && Status != EFI_NOT_STARTED) { + Status = MpServices->StartupAllAPs ( + (CONST EFI_PEI_SERVICES **)PeiServices, + MpServices, + ClearCache, // Procedure + FALSE, // SingleThread + 0, // TimeoutInMicroSeconds: inf. + NULL // ProcedureArgument + ); + if (EFI_ERROR (Status) && (Status != EFI_NOT_STARTED)) { DEBUG ((DEBUG_ERROR, "%a: StartupAllAps(): %r\n", __FUNCTION__, Status)); return Status; } @@ -89,7 +89,7 @@ ClearCacheOnMpServicesAvailable ( // Notification object for registering the callback, for when // EFI_PEI_MP_SERVICES_PPI becomes available. // -STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mMpServicesNotify = { +STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mMpServicesNotify = { EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | // Flags EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, &gEfiPeiMpServicesPpiGuid, // Guid @@ -101,11 +101,15 @@ InstallClearCacheCallback ( VOID ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = PeiServicesNotifyPpi (&mMpServicesNotify); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: failed to set up MP Services callback: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: failed to set up MP Services callback: %r\n", + __FUNCTION__, + Status + )); } } diff --git a/OvmfPkg/PlatformPei/Cmos.c b/OvmfPkg/PlatformPei/Cmos.c index 9b34e10b17..a01b3866be 100644 --- a/OvmfPkg/PlatformPei/Cmos.c +++ b/OvmfPkg/PlatformPei/Cmos.c @@ -6,7 +6,6 @@ **/ - #include "Cmos.h" #include "Library/IoLib.h" @@ -24,14 +23,13 @@ UINT8 EFIAPI CmosRead8 ( - IN UINTN Index + IN UINTN Index ) { - IoWrite8 (0x70, (UINT8) Index); + IoWrite8 (0x70, (UINT8)Index); return IoRead8 (0x71); } - /** Writes 8-bits of CMOS data. @@ -47,12 +45,11 @@ CmosRead8 ( UINT8 EFIAPI CmosWrite8 ( - IN UINTN Index, - IN UINT8 Value + IN UINTN Index, + IN UINT8 Value ) { - IoWrite8 (0x70, (UINT8) Index); + IoWrite8 (0x70, (UINT8)Index); IoWrite8 (0x71, Value); return Value; } - diff --git a/OvmfPkg/PlatformPei/Cmos.h b/OvmfPkg/PlatformPei/Cmos.h index 3cd98799a3..2b3124d7ba 100644 --- a/OvmfPkg/PlatformPei/Cmos.h +++ b/OvmfPkg/PlatformPei/Cmos.h @@ -23,7 +23,7 @@ UINT8 EFIAPI CmosRead8 ( - IN UINTN Index + IN UINTN Index ); /** @@ -41,10 +41,8 @@ CmosRead8 ( UINT8 EFIAPI CmosWrite8 ( - IN UINTN Index, - IN UINT8 Value + IN UINTN Index, + IN UINT8 Value ); - #endif - diff --git a/OvmfPkg/PlatformPei/FeatureControl.c b/OvmfPkg/PlatformPei/FeatureControl.c index dccf9505dd..9af58c2655 100644 --- a/OvmfPkg/PlatformPei/FeatureControl.c +++ b/OvmfPkg/PlatformPei/FeatureControl.c @@ -18,7 +18,7 @@ // // The value to be written to the Feature Control MSR, retrieved from fw_cfg. // -STATIC UINT64 mFeatureControlValue; +STATIC UINT64 mFeatureControlValue; /** Write the Feature Control MSR on an Application Processor or the Boot @@ -34,7 +34,7 @@ STATIC VOID EFIAPI WriteFeatureControl ( - IN OUT VOID *WorkSpace + IN OUT VOID *WorkSpace ) { AsmWriteMsr64 (MSR_IA32_FEATURE_CONTROL, mFeatureControlValue); @@ -60,8 +60,8 @@ OnMpServicesAvailable ( IN VOID *Ppi ) { - EFI_PEI_MP_SERVICES_PPI *MpServices; - EFI_STATUS Status; + EFI_PEI_MP_SERVICES_PPI *MpServices; + EFI_STATUS Status; DEBUG ((DEBUG_VERBOSE, "%a: %a\n", gEfiCallerBaseName, __FUNCTION__)); @@ -69,15 +69,15 @@ OnMpServicesAvailable ( // Write the MSR on all the APs in parallel. // MpServices = Ppi; - Status = MpServices->StartupAllAPs ( - (CONST EFI_PEI_SERVICES **)PeiServices, - MpServices, - WriteFeatureControl, // Procedure - FALSE, // SingleThread - 0, // TimeoutInMicroSeconds: inf. - NULL // ProcedureArgument - ); - if (EFI_ERROR (Status) && Status != EFI_NOT_STARTED) { + Status = MpServices->StartupAllAPs ( + (CONST EFI_PEI_SERVICES **)PeiServices, + MpServices, + WriteFeatureControl, // Procedure + FALSE, // SingleThread + 0, // TimeoutInMicroSeconds: inf. + NULL // ProcedureArgument + ); + if (EFI_ERROR (Status) && (Status != EFI_NOT_STARTED)) { DEBUG ((DEBUG_ERROR, "%a: StartupAllAps(): %r\n", __FUNCTION__, Status)); return Status; } @@ -93,7 +93,7 @@ OnMpServicesAvailable ( // Notification object for registering the callback, for when // EFI_PEI_MP_SERVICES_PPI becomes available. // -STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mMpServicesNotify = { +STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mMpServicesNotify = { EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | // Flags EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, &gEfiPeiMpServicesPpiGuid, // Guid @@ -105,24 +105,32 @@ InstallFeatureControlCallback ( VOID ) { - EFI_STATUS Status; - FIRMWARE_CONFIG_ITEM FwCfgItem; - UINTN FwCfgSize; - - Status = QemuFwCfgFindFile ("etc/msr_feature_control", &FwCfgItem, - &FwCfgSize); - if (EFI_ERROR (Status) || FwCfgSize != sizeof mFeatureControlValue) { + EFI_STATUS Status; + FIRMWARE_CONFIG_ITEM FwCfgItem; + UINTN FwCfgSize; + + Status = QemuFwCfgFindFile ( + "etc/msr_feature_control", + &FwCfgItem, + &FwCfgSize + ); + if (EFI_ERROR (Status) || (FwCfgSize != sizeof mFeatureControlValue)) { // // Nothing to do. // return; } + QemuFwCfgSelectItem (FwCfgItem); QemuFwCfgReadBytes (sizeof mFeatureControlValue, &mFeatureControlValue); Status = PeiServicesNotifyPpi (&mMpServicesNotify); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: failed to set up MP Services callback: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: failed to set up MP Services callback: %r\n", + __FUNCTION__, + Status + )); } } diff --git a/OvmfPkg/PlatformPei/Fv.c b/OvmfPkg/PlatformPei/Fv.c index ee4ecab615..8cd8cacc59 100644 --- a/OvmfPkg/PlatformPei/Fv.c +++ b/OvmfPkg/PlatformPei/Fv.c @@ -13,7 +13,6 @@ #include #include - /** Publish PEI & DXE (Decompressed) Memory based FVs to let PEI and DXE know about them. @@ -26,7 +25,7 @@ PeiFvInitialization ( VOID ) { - BOOLEAN SecureS3Needed; + BOOLEAN SecureS3Needed; DEBUG ((DEBUG_INFO, "Platform PEI Firmware Volume Initialization\n")); @@ -67,7 +66,7 @@ PeiFvInitialization ( // of DXEFV, so let's keep away the OS from there too. // if (SecureS3Needed) { - UINT32 DxeMemFvEnd; + UINT32 DxeMemFvEnd; DxeMemFvEnd = PcdGet32 (PcdOvmfDxeMemFvBase) + PcdGet32 (PcdOvmfDxeMemFvSize); @@ -83,7 +82,7 @@ PeiFvInitialization ( // PeiServicesInstallFvInfoPpi ( NULL, - (VOID *)(UINTN) PcdGet32 (PcdOvmfDxeMemFvBase), + (VOID *)(UINTN)PcdGet32 (PcdOvmfDxeMemFvBase), PcdGet32 (PcdOvmfDxeMemFvSize), NULL, NULL @@ -91,4 +90,3 @@ PeiFvInitialization ( return EFI_SUCCESS; } - diff --git a/OvmfPkg/PlatformPei/MemDetect.c b/OvmfPkg/PlatformPei/MemDetect.c index d736b85e0d..3f59a1ac79 100644 --- a/OvmfPkg/PlatformPei/MemDetect.c +++ b/OvmfPkg/PlatformPei/MemDetect.c @@ -39,24 +39,24 @@ Module Name: #include "Platform.h" #include "Cmos.h" -UINT8 mPhysMemAddressWidth; +UINT8 mPhysMemAddressWidth; -STATIC UINT32 mS3AcpiReservedMemoryBase; -STATIC UINT32 mS3AcpiReservedMemorySize; +STATIC UINT32 mS3AcpiReservedMemoryBase; +STATIC UINT32 mS3AcpiReservedMemorySize; -STATIC UINT16 mQ35TsegMbytes; +STATIC UINT16 mQ35TsegMbytes; -BOOLEAN mQ35SmramAtDefaultSmbase; +BOOLEAN mQ35SmramAtDefaultSmbase; -UINT32 mQemuUc32Base; +UINT32 mQemuUc32Base; VOID Q35TsegMbytesInitialization ( VOID ) { - UINT16 ExtendedTsegMbytes; - RETURN_STATUS PcdStatus; + UINT16 ExtendedTsegMbytes; + RETURN_STATUS PcdStatus; ASSERT (mHostBridgeDevId == INTEL_Q35_MCH_DEVICE_ID); @@ -94,46 +94,53 @@ Q35TsegMbytesInitialization ( mQ35TsegMbytes = ExtendedTsegMbytes; } - VOID Q35SmramAtDefaultSmbaseInitialization ( VOID ) { - RETURN_STATUS PcdStatus; + RETURN_STATUS PcdStatus; ASSERT (mHostBridgeDevId == INTEL_Q35_MCH_DEVICE_ID); mQ35SmramAtDefaultSmbase = FALSE; if (FeaturePcdGet (PcdCsmEnable)) { - DEBUG ((DEBUG_INFO, "%a: SMRAM at default SMBASE not checked due to CSM\n", - __FUNCTION__)); + DEBUG (( + DEBUG_INFO, + "%a: SMRAM at default SMBASE not checked due to CSM\n", + __FUNCTION__ + )); } else { - UINTN CtlReg; - UINT8 CtlRegVal; + UINTN CtlReg; + UINT8 CtlRegVal; CtlReg = DRAMC_REGISTER_Q35 (MCH_DEFAULT_SMBASE_CTL); PciWrite8 (CtlReg, MCH_DEFAULT_SMBASE_QUERY); - CtlRegVal = PciRead8 (CtlReg); + CtlRegVal = PciRead8 (CtlReg); mQ35SmramAtDefaultSmbase = (BOOLEAN)(CtlRegVal == MCH_DEFAULT_SMBASE_IN_RAM); - DEBUG ((DEBUG_INFO, "%a: SMRAM at default SMBASE %a\n", __FUNCTION__, - mQ35SmramAtDefaultSmbase ? "found" : "not found")); + DEBUG (( + DEBUG_INFO, + "%a: SMRAM at default SMBASE %a\n", + __FUNCTION__, + mQ35SmramAtDefaultSmbase ? "found" : "not found" + )); } - PcdStatus = PcdSetBoolS (PcdQ35SmramAtDefaultSmbase, - mQ35SmramAtDefaultSmbase); + PcdStatus = PcdSetBoolS ( + PcdQ35SmramAtDefaultSmbase, + mQ35SmramAtDefaultSmbase + ); ASSERT_RETURN_ERROR (PcdStatus); } - VOID QemuUc32BaseInitialization ( VOID ) { - UINT32 LowerMemorySize; - UINT32 Uc32Size; + UINT32 LowerMemorySize; + UINT32 Uc32Size; if (mHostBridgeDevId == 0xffff /* microvm */) { return; @@ -159,8 +166,8 @@ QemuUc32BaseInitialization ( // while keeping the end affixed to 4GB. This will round the base up. // LowerMemorySize = GetSystemMemorySizeBelow4gb (); - Uc32Size = GetPowerOfTwo32 ((UINT32)(SIZE_4GB - LowerMemorySize)); - mQemuUc32Base = (UINT32)(SIZE_4GB - Uc32Size); + Uc32Size = GetPowerOfTwo32 ((UINT32)(SIZE_4GB - LowerMemorySize)); + mQemuUc32Base = (UINT32)(SIZE_4GB - Uc32Size); // // Assuming that LowerMemorySize is at least 1 byte, Uc32Size is at most 2GB. // Therefore mQemuUc32Base is at least 2GB. @@ -168,13 +175,18 @@ QemuUc32BaseInitialization ( ASSERT (mQemuUc32Base >= BASE_2GB); if (mQemuUc32Base != LowerMemorySize) { - DEBUG ((DEBUG_VERBOSE, "%a: rounded UC32 base from 0x%x up to 0x%x, for " - "an UC32 size of 0x%x\n", __FUNCTION__, LowerMemorySize, mQemuUc32Base, - Uc32Size)); + DEBUG (( + DEBUG_VERBOSE, + "%a: rounded UC32 base from 0x%x up to 0x%x, for " + "an UC32 size of 0x%x\n", + __FUNCTION__, + LowerMemorySize, + mQemuUc32Base, + Uc32Size + )); } } - /** Iterate over the RAM entries in QEMU's fw_cfg E820 RAM map that start outside of the 32-bit address range. @@ -204,19 +216,20 @@ QemuUc32BaseInitialization ( STATIC EFI_STATUS ScanOrAdd64BitE820Ram ( - OUT UINT64 *MaxAddress OPTIONAL + OUT UINT64 *MaxAddress OPTIONAL ) { - EFI_STATUS Status; - FIRMWARE_CONFIG_ITEM FwCfgItem; - UINTN FwCfgSize; - EFI_E820_ENTRY64 E820Entry; - UINTN Processed; + EFI_STATUS Status; + FIRMWARE_CONFIG_ITEM FwCfgItem; + UINTN FwCfgSize; + EFI_E820_ENTRY64 E820Entry; + UINTN Processed; Status = QemuFwCfgFindFile ("etc/e820", &FwCfgItem, &FwCfgSize); if (EFI_ERROR (Status)) { return Status; } + if (FwCfgSize % sizeof E820Entry != 0) { return EFI_PROTOCOL_ERROR; } @@ -236,18 +249,19 @@ ScanOrAdd64BitE820Ram ( E820Entry.Length, E820Entry.Type )); - if (E820Entry.Type == EfiAcpiAddressRangeMemory && - E820Entry.BaseAddr >= BASE_4GB) { + if ((E820Entry.Type == EfiAcpiAddressRangeMemory) && + (E820Entry.BaseAddr >= BASE_4GB)) + { if (MaxAddress == NULL) { - UINT64 Base; - UINT64 End; + UINT64 Base; + UINT64 End; // // Round up the start address, and round down the end address. // Base = ALIGN_VALUE (E820Entry.BaseAddr, (UINT64)EFI_PAGE_SIZE); - End = (E820Entry.BaseAddr + E820Entry.Length) & - ~(UINT64)EFI_PAGE_MASK; + End = (E820Entry.BaseAddr + E820Entry.Length) & + ~(UINT64)EFI_PAGE_MASK; if (Base < End) { AddMemoryRangeHob (Base, End); DEBUG (( @@ -259,7 +273,7 @@ ScanOrAdd64BitE820Ram ( )); } } else { - UINT64 Candidate; + UINT64 Candidate; Candidate = E820Entry.BaseAddr + E820Entry.Length; if (Candidate > *MaxAddress) { @@ -274,17 +288,17 @@ ScanOrAdd64BitE820Ram ( } } } + return EFI_SUCCESS; } - UINT32 GetSystemMemorySizeBelow4gb ( VOID ) { - UINT8 Cmos0x34; - UINT8 Cmos0x35; + UINT8 Cmos0x34; + UINT8 Cmos0x35; // // CMOS 0x34/0x35 specifies the system memory above 16 MB. @@ -295,20 +309,19 @@ GetSystemMemorySizeBelow4gb ( // into the calculation to get the total memory size. // - Cmos0x34 = (UINT8) CmosRead8 (0x34); - Cmos0x35 = (UINT8) CmosRead8 (0x35); + Cmos0x34 = (UINT8)CmosRead8 (0x34); + Cmos0x35 = (UINT8)CmosRead8 (0x35); - return (UINT32) (((UINTN)((Cmos0x35 << 8) + Cmos0x34) << 16) + SIZE_16MB); + return (UINT32)(((UINTN)((Cmos0x35 << 8) + Cmos0x34) << 16) + SIZE_16MB); } - STATIC UINT64 GetSystemMemorySizeAbove4gb ( ) { - UINT32 Size; - UINTN CmosIndex; + UINT32 Size; + UINTN CmosIndex; // // CMOS 0x5b-0x5d specifies the system memory above 4GB MB. @@ -320,13 +333,12 @@ GetSystemMemorySizeAbove4gb ( Size = 0; for (CmosIndex = 0x5d; CmosIndex >= 0x5b; CmosIndex--) { - Size = (UINT32) (Size << 8) + (UINT32) CmosRead8 (CmosIndex); + Size = (UINT32)(Size << 8) + (UINT32)CmosRead8 (CmosIndex); } return LShiftU64 (Size, 16); } - /** Return the highest address that DXE could possibly use, plus one. **/ @@ -336,14 +348,14 @@ GetFirstNonAddress ( VOID ) { - UINT64 FirstNonAddress; - UINT64 Pci64Base, Pci64Size; - UINT32 FwCfgPciMmio64Mb; - EFI_STATUS Status; - FIRMWARE_CONFIG_ITEM FwCfgItem; - UINTN FwCfgSize; - UINT64 HotPlugMemoryEnd; - RETURN_STATUS PcdStatus; + UINT64 FirstNonAddress; + UINT64 Pci64Base, Pci64Size; + UINT32 FwCfgPciMmio64Mb; + EFI_STATUS Status; + FIRMWARE_CONFIG_ITEM FwCfgItem; + UINTN FwCfgSize; + UINT64 HotPlugMemoryEnd; + RETURN_STATUS PcdStatus; // // set FirstNonAddress to suppress incorrect compiler/analyzer warnings @@ -367,11 +379,12 @@ GetFirstNonAddress ( // resources to 32-bit anyway. See DegradeResource() in // "PciResourceSupport.c". // -#ifdef MDE_CPU_IA32 + #ifdef MDE_CPU_IA32 if (!FeaturePcdGet (PcdDxeIplSwitchToLongMode)) { return FirstNonAddress; } -#endif + + #endif // // Otherwise, in order to calculate the highest address plus one, we must @@ -386,31 +399,40 @@ GetFirstNonAddress ( // As signaled by the "X-" prefix, this knob is experimental, and might go // away at any time. // - Status = QemuFwCfgParseUint32 ("opt/ovmf/X-PciMmio64Mb", FALSE, - &FwCfgPciMmio64Mb); + Status = QemuFwCfgParseUint32 ( + "opt/ovmf/X-PciMmio64Mb", + FALSE, + &FwCfgPciMmio64Mb + ); switch (Status) { - case EFI_UNSUPPORTED: - case EFI_NOT_FOUND: - break; - case EFI_SUCCESS: - if (FwCfgPciMmio64Mb <= 0x1000000) { - Pci64Size = LShiftU64 (FwCfgPciMmio64Mb, 20); + case EFI_UNSUPPORTED: + case EFI_NOT_FOUND: break; - } + case EFI_SUCCESS: + if (FwCfgPciMmio64Mb <= 0x1000000) { + Pci64Size = LShiftU64 (FwCfgPciMmio64Mb, 20); + break; + } + // // fall through // - default: - DEBUG ((DEBUG_WARN, - "%a: ignoring malformed 64-bit PCI host aperture size from fw_cfg\n", - __FUNCTION__)); - break; + default: + DEBUG (( + DEBUG_WARN, + "%a: ignoring malformed 64-bit PCI host aperture size from fw_cfg\n", + __FUNCTION__ + )); + break; } if (Pci64Size == 0) { if (mBootMode != BOOT_ON_S3_RESUME) { - DEBUG ((DEBUG_INFO, "%a: disabling 64-bit PCI host aperture\n", - __FUNCTION__)); + DEBUG (( + DEBUG_INFO, + "%a: disabling 64-bit PCI host aperture\n", + __FUNCTION__ + )); PcdStatus = PcdSet64S (PcdPciMmio64Size, 0); ASSERT_RETURN_ERROR (PcdStatus); } @@ -429,13 +451,20 @@ GetFirstNonAddress ( // starts right at the end of the memory above 4GB. The 64-bit PCI host // aperture must be placed above it. // - Status = QemuFwCfgFindFile ("etc/reserved-memory-end", &FwCfgItem, - &FwCfgSize); - if (!EFI_ERROR (Status) && FwCfgSize == sizeof HotPlugMemoryEnd) { + Status = QemuFwCfgFindFile ( + "etc/reserved-memory-end", + &FwCfgItem, + &FwCfgSize + ); + if (!EFI_ERROR (Status) && (FwCfgSize == sizeof HotPlugMemoryEnd)) { QemuFwCfgSelectItem (FwCfgItem); QemuFwCfgReadBytes (FwCfgSize, &HotPlugMemoryEnd); - DEBUG ((DEBUG_VERBOSE, "%a: HotPlugMemoryEnd=0x%Lx\n", __FUNCTION__, - HotPlugMemoryEnd)); + DEBUG (( + DEBUG_VERBOSE, + "%a: HotPlugMemoryEnd=0x%Lx\n", + __FUNCTION__, + HotPlugMemoryEnd + )); ASSERT (HotPlugMemoryEnd >= FirstNonAddress); FirstNonAddress = HotPlugMemoryEnd; @@ -467,8 +496,13 @@ GetFirstNonAddress ( PcdStatus = PcdSet64S (PcdPciMmio64Size, Pci64Size); ASSERT_RETURN_ERROR (PcdStatus); - DEBUG ((DEBUG_INFO, "%a: Pci64Base=0x%Lx Pci64Size=0x%Lx\n", - __FUNCTION__, Pci64Base, Pci64Size)); + DEBUG (( + DEBUG_INFO, + "%a: Pci64Base=0x%Lx Pci64Size=0x%Lx\n", + __FUNCTION__, + Pci64Base, + Pci64Size + )); } // @@ -478,7 +512,6 @@ GetFirstNonAddress ( return FirstNonAddress; } - /** Initialize the mPhysMemAddressWidth variable, based on guest RAM size. **/ @@ -487,7 +520,7 @@ AddressWidthInitialization ( VOID ) { - UINT64 FirstNonAddress; + UINT64 FirstNonAddress; // // As guest-physical memory size grows, the permanent PEI RAM requirements @@ -515,10 +548,10 @@ AddressWidthInitialization ( if (mPhysMemAddressWidth <= 36) { mPhysMemAddressWidth = 36; } + ASSERT (mPhysMemAddressWidth <= 48); } - /** Calculate the cap for the permanent PEI memory. **/ @@ -528,21 +561,22 @@ GetPeiMemoryCap ( VOID ) { - BOOLEAN Page1GSupport; - UINT32 RegEax; - UINT32 RegEdx; - UINT32 Pml4Entries; - UINT32 PdpEntries; - UINTN TotalPages; + BOOLEAN Page1GSupport; + UINT32 RegEax; + UINT32 RegEdx; + UINT32 Pml4Entries; + UINT32 PdpEntries; + UINTN TotalPages; // // If DXE is 32-bit, then just return the traditional 64 MB cap. // -#ifdef MDE_CPU_IA32 + #ifdef MDE_CPU_IA32 if (!FeaturePcdGet (PcdDxeIplSwitchToLongMode)) { return SIZE_64MB; } -#endif + + #endif // // Dependent on physical address width, PEI memory allocations can be @@ -563,7 +597,7 @@ GetPeiMemoryCap ( if (mPhysMemAddressWidth <= 39) { Pml4Entries = 1; - PdpEntries = 1 << (mPhysMemAddressWidth - 30); + PdpEntries = 1 << (mPhysMemAddressWidth - 30); ASSERT (PdpEntries <= 0x200); } else { Pml4Entries = 1 << (mPhysMemAddressWidth - 39); @@ -572,7 +606,7 @@ GetPeiMemoryCap ( } TotalPages = Page1GSupport ? Pml4Entries + 1 : - (PdpEntries + 1) * Pml4Entries + 1; + (PdpEntries + 1) * Pml4Entries + 1; ASSERT (TotalPages <= 0x40201); // @@ -583,7 +617,6 @@ GetPeiMemoryCap ( return (UINT32)(EFI_PAGES_TO_SIZE (TotalPages) + SIZE_64MB); } - /** Publish PEI core memory @@ -595,11 +628,11 @@ PublishPeiMemory ( VOID ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS MemoryBase; - UINT64 MemorySize; - UINT32 LowerMemorySize; - UINT32 PeiMemoryCap; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS MemoryBase; + UINT64 MemorySize; + UINT32 LowerMemorySize; + UINT32 PeiMemoryCap; LowerMemorySize = GetSystemMemorySizeBelow4gb (); if (FeaturePcdGet (PcdSmmSmramRequire)) { @@ -616,10 +649,10 @@ PublishPeiMemory ( // if (mS3Supported) { mS3AcpiReservedMemorySize = SIZE_512KB + - mMaxCpuCount * - PcdGet32 (PcdCpuApStackSize); + mMaxCpuCount * + PcdGet32 (PcdCpuApStackSize); mS3AcpiReservedMemoryBase = LowerMemorySize - mS3AcpiReservedMemorySize; - LowerMemorySize = mS3AcpiReservedMemoryBase; + LowerMemorySize = mS3AcpiReservedMemoryBase; } if (mBootMode == BOOT_ON_S3_RESUME) { @@ -627,8 +660,13 @@ PublishPeiMemory ( MemorySize = mS3AcpiReservedMemorySize; } else { PeiMemoryCap = GetPeiMemoryCap (); - DEBUG ((DEBUG_INFO, "%a: mPhysMemAddressWidth=%d PeiMemoryCap=%u KB\n", - __FUNCTION__, mPhysMemAddressWidth, PeiMemoryCap >> 10)); + DEBUG (( + DEBUG_INFO, + "%a: mPhysMemAddressWidth=%d PeiMemoryCap=%u KB\n", + __FUNCTION__, + mPhysMemAddressWidth, + PeiMemoryCap >> 10 + )); // // Determine the range of memory to use during PEI @@ -641,8 +679,8 @@ PublishPeiMemory ( // shouldn't overlap with that HOB. // MemoryBase = mS3Supported && FeaturePcdGet (PcdSmmSmramRequire) ? - PcdGet32 (PcdOvmfDecompressionScratchEnd) : - PcdGet32 (PcdOvmfDxeMemFvBase) + PcdGet32 (PcdOvmfDxeMemFvSize); + PcdGet32 (PcdOvmfDecompressionScratchEnd) : + PcdGet32 (PcdOvmfDxeMemFvBase) + PcdGet32 (PcdOvmfDxeMemFvSize); MemorySize = LowerMemorySize - MemoryBase; if (MemorySize > PeiMemoryCap) { MemoryBase = LowerMemorySize - PeiMemoryCap; @@ -662,13 +700,12 @@ PublishPeiMemory ( // // Publish this memory to the PEI Core // - Status = PublishSystemMemory(MemoryBase, MemorySize); + Status = PublishSystemMemory (MemoryBase, MemorySize); ASSERT_EFI_ERROR (Status); return Status; } - STATIC VOID QemuInitializeRamBelow1gb ( @@ -677,20 +714,24 @@ QemuInitializeRamBelow1gb ( { if (FeaturePcdGet (PcdSmmSmramRequire) && mQ35SmramAtDefaultSmbase) { AddMemoryRangeHob (0, SMM_DEFAULT_SMBASE); - AddReservedMemoryBaseSizeHob (SMM_DEFAULT_SMBASE, MCH_DEFAULT_SMBASE_SIZE, - TRUE /* Cacheable */); + AddReservedMemoryBaseSizeHob ( + SMM_DEFAULT_SMBASE, + MCH_DEFAULT_SMBASE_SIZE, + TRUE /* Cacheable */ + ); STATIC_ASSERT ( SMM_DEFAULT_SMBASE + MCH_DEFAULT_SMBASE_SIZE < BASE_512KB + BASE_128KB, "end of SMRAM at default SMBASE ends at, or exceeds, 640KB" ); - AddMemoryRangeHob (SMM_DEFAULT_SMBASE + MCH_DEFAULT_SMBASE_SIZE, - BASE_512KB + BASE_128KB); + AddMemoryRangeHob ( + SMM_DEFAULT_SMBASE + MCH_DEFAULT_SMBASE_SIZE, + BASE_512KB + BASE_128KB + ); } else { AddMemoryRangeHob (0, BASE_512KB + BASE_128KB); } } - /** Peform Memory Detection for QEMU / KVM @@ -701,10 +742,10 @@ QemuInitializeRam ( VOID ) { - UINT64 LowerMemorySize; - UINT64 UpperMemorySize; - MTRR_SETTINGS MtrrSettings; - EFI_STATUS Status; + UINT64 LowerMemorySize; + UINT64 UpperMemorySize; + MTRR_SETTINGS MtrrSettings; + EFI_STATUS Status; DEBUG ((DEBUG_INFO, "%a called\n", __FUNCTION__)); @@ -743,12 +784,15 @@ QemuInitializeRam ( QemuInitializeRamBelow1gb (); if (FeaturePcdGet (PcdSmmSmramRequire)) { - UINT32 TsegSize; + UINT32 TsegSize; TsegSize = mQ35TsegMbytes * SIZE_1MB; AddMemoryRangeHob (BASE_1MB, LowerMemorySize - TsegSize); - AddReservedMemoryBaseSizeHob (LowerMemorySize - TsegSize, TsegSize, - TRUE); + AddReservedMemoryBaseSizeHob ( + LowerMemorySize - TsegSize, + TsegSize, + TRUE + ); } else { AddMemoryRangeHob (BASE_1MB, LowerMemorySize); } @@ -759,7 +803,7 @@ QemuInitializeRam ( // memory size read from the CMOS. // Status = ScanOrAdd64BitE820Ram (NULL); - if (EFI_ERROR (Status) && UpperMemorySize != 0) { + if (EFI_ERROR (Status) && (UpperMemorySize != 0)) { AddMemoryBaseSizeHob (BASE_4GB, UpperMemorySize); } } @@ -796,16 +840,22 @@ QemuInitializeRam ( // // Set memory range from 640KB to 1MB to uncacheable // - Status = MtrrSetMemoryAttribute (BASE_512KB + BASE_128KB, - BASE_1MB - (BASE_512KB + BASE_128KB), CacheUncacheable); + Status = MtrrSetMemoryAttribute ( + BASE_512KB + BASE_128KB, + BASE_1MB - (BASE_512KB + BASE_128KB), + CacheUncacheable + ); ASSERT_EFI_ERROR (Status); // // Set the memory range from the start of the 32-bit MMIO area (32-bit PCI // MMIO aperture on i440fx, PCIEXBAR on q35) to 4GB as uncacheable. // - Status = MtrrSetMemoryAttribute (mQemuUc32Base, SIZE_4GB - mQemuUc32Base, - CacheUncacheable); + Status = MtrrSetMemoryAttribute ( + mQemuUc32Base, + SIZE_4GB - mQemuUc32Base, + CacheUncacheable + ); ASSERT_EFI_ERROR (Status); } } @@ -821,7 +871,7 @@ InitializeRamRegions ( { QemuInitializeRam (); - if (mS3Supported && mBootMode != BOOT_ON_S3_RESUME) { + if (mS3Supported && (mBootMode != BOOT_ON_S3_RESUME)) { // // This is the memory range that will be used for PEI on S3 resume // @@ -851,7 +901,7 @@ InitializeRamRegions ( EfiACPIMemoryNVS ); -#ifdef MDE_CPU_X64 + #ifdef MDE_CPU_X64 // // Reserve the initial page tables built by the reset vector code. // @@ -859,8 +909,8 @@ InitializeRamRegions ( // resume, it must be reserved as ACPI NVS. // BuildMemoryAllocationHob ( - (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdOvmfSecPageTablesBase), - (UINT64)(UINTN) PcdGet32 (PcdOvmfSecPageTablesSize), + (EFI_PHYSICAL_ADDRESS)(UINTN)PcdGet32 (PcdOvmfSecPageTablesBase), + (UINT64)(UINTN)PcdGet32 (PcdOvmfSecPageTablesSize), EfiACPIMemoryNVS ); @@ -875,22 +925,23 @@ InitializeRamRegions ( // resume, it must be reserved as ACPI NVS. // BuildMemoryAllocationHob ( - (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdOvmfSecGhcbPageTableBase), - (UINT64)(UINTN) PcdGet32 (PcdOvmfSecGhcbPageTableSize), + (EFI_PHYSICAL_ADDRESS)(UINTN)PcdGet32 (PcdOvmfSecGhcbPageTableBase), + (UINT64)(UINTN)PcdGet32 (PcdOvmfSecGhcbPageTableSize), EfiACPIMemoryNVS ); BuildMemoryAllocationHob ( - (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdOvmfSecGhcbBase), - (UINT64)(UINTN) PcdGet32 (PcdOvmfSecGhcbSize), + (EFI_PHYSICAL_ADDRESS)(UINTN)PcdGet32 (PcdOvmfSecGhcbBase), + (UINT64)(UINTN)PcdGet32 (PcdOvmfSecGhcbSize), EfiACPIMemoryNVS ); BuildMemoryAllocationHob ( - (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdOvmfSecGhcbBackupBase), - (UINT64)(UINTN) PcdGet32 (PcdOvmfSecGhcbBackupSize), + (EFI_PHYSICAL_ADDRESS)(UINTN)PcdGet32 (PcdOvmfSecGhcbBackupBase), + (UINT64)(UINTN)PcdGet32 (PcdOvmfSecGhcbBackupSize), EfiACPIMemoryNVS ); } -#endif + + #endif } if (mBootMode != BOOT_ON_S3_RESUME) { @@ -906,18 +957,18 @@ InitializeRamRegions ( // such that they would overlap the LockBox storage. // ZeroMem ( - (VOID*)(UINTN) PcdGet32 (PcdOvmfLockBoxStorageBase), - (UINTN) PcdGet32 (PcdOvmfLockBoxStorageSize) + (VOID *)(UINTN)PcdGet32 (PcdOvmfLockBoxStorageBase), + (UINTN)PcdGet32 (PcdOvmfLockBoxStorageSize) ); BuildMemoryAllocationHob ( - (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdOvmfLockBoxStorageBase), - (UINT64)(UINTN) PcdGet32 (PcdOvmfLockBoxStorageSize), + (EFI_PHYSICAL_ADDRESS)(UINTN)PcdGet32 (PcdOvmfLockBoxStorageBase), + (UINT64)(UINTN)PcdGet32 (PcdOvmfLockBoxStorageSize), mS3Supported ? EfiACPIMemoryNVS : EfiBootServicesData ); } if (FeaturePcdGet (PcdSmmSmramRequire)) { - UINT32 TsegSize; + UINT32 TsegSize; // // Make sure the TSEG area that we reported as a reserved memory resource @@ -925,7 +976,7 @@ InitializeRamRegions ( // TsegSize = mQ35TsegMbytes * SIZE_1MB; BuildMemoryAllocationHob ( - GetSystemMemorySizeBelow4gb() - TsegSize, + GetSystemMemorySizeBelow4gb () - TsegSize, TsegSize, EfiReservedMemoryType ); @@ -942,7 +993,7 @@ InitializeRamRegions ( } } -#ifdef MDE_CPU_X64 + #ifdef MDE_CPU_X64 if (FixedPcdGet32 (PcdOvmfWorkAreaSize) != 0) { // // Reserve the work area. @@ -955,11 +1006,12 @@ InitializeRamRegions ( // such that they would overlap the work area. // BuildMemoryAllocationHob ( - (EFI_PHYSICAL_ADDRESS)(UINTN) FixedPcdGet32 (PcdOvmfWorkAreaBase), - (UINT64)(UINTN) FixedPcdGet32 (PcdOvmfWorkAreaSize), + (EFI_PHYSICAL_ADDRESS)(UINTN)FixedPcdGet32 (PcdOvmfWorkAreaBase), + (UINT64)(UINTN)FixedPcdGet32 (PcdOvmfWorkAreaSize), mS3Supported ? EfiACPIMemoryNVS : EfiBootServicesData ); } -#endif + + #endif } } diff --git a/OvmfPkg/PlatformPei/MemTypeInfo.c b/OvmfPkg/PlatformPei/MemTypeInfo.c index f3ce2b6865..fc5ccfaf11 100644 --- a/OvmfPkg/PlatformPei/MemTypeInfo.c +++ b/OvmfPkg/PlatformPei/MemTypeInfo.c @@ -20,13 +20,13 @@ #define MEMORY_TYPE_INFO_DEFAULT(Type) \ { Type, FixedPcdGet32 (PcdMemoryType ## Type) } -STATIC EFI_MEMORY_TYPE_INFORMATION mMemoryTypeInformation[] = { +STATIC EFI_MEMORY_TYPE_INFORMATION mMemoryTypeInformation[] = { MEMORY_TYPE_INFO_DEFAULT (EfiACPIMemoryNVS), MEMORY_TYPE_INFO_DEFAULT (EfiACPIReclaimMemory), MEMORY_TYPE_INFO_DEFAULT (EfiReservedMemoryType), MEMORY_TYPE_INFO_DEFAULT (EfiRuntimeServicesCode), MEMORY_TYPE_INFO_DEFAULT (EfiRuntimeServicesData), - { EfiMaxMemoryType, 0 } + { EfiMaxMemoryType, 0} }; STATIC @@ -64,28 +64,28 @@ BuildMemTypeInfoHob ( STATIC VOID RefreshMemTypeInfo ( - IN EFI_PEI_READ_ONLY_VARIABLE2_PPI *ReadOnlyVariable2 + IN EFI_PEI_READ_ONLY_VARIABLE2_PPI *ReadOnlyVariable2 ) { - UINTN DataSize; - EFI_MEMORY_TYPE_INFORMATION Entries[EfiMaxMemoryType + 1]; - EFI_STATUS Status; - UINTN NumEntries; - UINTN HobRecordIdx; + UINTN DataSize; + EFI_MEMORY_TYPE_INFORMATION Entries[EfiMaxMemoryType + 1]; + EFI_STATUS Status; + UINTN NumEntries; + UINTN HobRecordIdx; // // Read the MemoryTypeInformation UEFI variable from the // gEfiMemoryTypeInformationGuid namespace. // DataSize = sizeof Entries; - Status = ReadOnlyVariable2->GetVariable ( - ReadOnlyVariable2, - EFI_MEMORY_TYPE_INFORMATION_VARIABLE_NAME, - &gEfiMemoryTypeInformationGuid, - NULL, - &DataSize, - Entries - ); + Status = ReadOnlyVariable2->GetVariable ( + ReadOnlyVariable2, + EFI_MEMORY_TYPE_INFORMATION_VARIABLE_NAME, + &gEfiMemoryTypeInformationGuid, + NULL, + &DataSize, + Entries + ); if (EFI_ERROR (Status)) { // // If the UEFI variable does not exist (EFI_NOT_FOUND), we can't use it for @@ -108,10 +108,15 @@ RefreshMemTypeInfo ( // Sanity-check the UEFI variable size against the record size. // if (DataSize % sizeof Entries[0] != 0) { - DEBUG ((DEBUG_ERROR, "%a: invalid UEFI variable size %Lu\n", __FUNCTION__, - (UINT64)DataSize)); + DEBUG (( + DEBUG_ERROR, + "%a: invalid UEFI variable size %Lu\n", + __FUNCTION__, + (UINT64)DataSize + )); return; } + NumEntries = DataSize / sizeof Entries[0]; // @@ -121,10 +126,11 @@ RefreshMemTypeInfo ( // for (HobRecordIdx = 0; HobRecordIdx < ARRAY_SIZE (mMemoryTypeInformation) - 1; - HobRecordIdx++) { - EFI_MEMORY_TYPE_INFORMATION *HobRecord; - UINTN Idx; - EFI_MEMORY_TYPE_INFORMATION *VariableRecord; + HobRecordIdx++) + { + EFI_MEMORY_TYPE_INFORMATION *HobRecord; + UINTN Idx; + EFI_MEMORY_TYPE_INFORMATION *VariableRecord; HobRecord = &mMemoryTypeInformation[HobRecordIdx]; @@ -139,11 +145,17 @@ RefreshMemTypeInfo ( // // If there is a match, allow the UEFI variable to increase NumberOfPages. // - if (Idx < NumEntries && - HobRecord->NumberOfPages < VariableRecord->NumberOfPages) { - DEBUG ((DEBUG_VERBOSE, "%a: Type 0x%x: NumberOfPages 0x%x -> 0x%x\n", - __FUNCTION__, HobRecord->Type, HobRecord->NumberOfPages, - VariableRecord->NumberOfPages)); + if ((Idx < NumEntries) && + (HobRecord->NumberOfPages < VariableRecord->NumberOfPages)) + { + DEBUG (( + DEBUG_VERBOSE, + "%a: Type 0x%x: NumberOfPages 0x%x -> 0x%x\n", + __FUNCTION__, + HobRecord->Type, + HobRecord->NumberOfPages, + VariableRecord->NumberOfPages + )); HobRecord->NumberOfPages = VariableRecord->NumberOfPages; } @@ -182,7 +194,7 @@ OnReadOnlyVariable2Available ( // Notification object for registering the callback, for when // EFI_PEI_READ_ONLY_VARIABLE2_PPI becomes available. // -STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mReadOnlyVariable2Notify = { +STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mReadOnlyVariable2Notify = { (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_DISPATCH | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), // Flags &gEfiPeiReadOnlyVariable2PpiGuid, // Guid @@ -194,7 +206,7 @@ MemTypeInfoInitialization ( VOID ) { - EFI_STATUS Status; + EFI_STATUS Status; if (!FeaturePcdGet (PcdSmmSmramRequire)) { // @@ -207,8 +219,12 @@ MemTypeInfoInitialization ( Status = PeiServicesNotifyPpi (&mReadOnlyVariable2Notify); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: failed to set up R/O Variable 2 callback: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: failed to set up R/O Variable 2 callback: %r\n", + __FUNCTION__, + Status + )); ASSERT (FALSE); CpuDeadLoop (); } diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c index df2d9ad015..3000176efd 100644 --- a/OvmfPkg/PlatformPei/Platform.c +++ b/OvmfPkg/PlatformPei/Platform.c @@ -40,7 +40,7 @@ #include "Platform.h" #include "Cmos.h" -EFI_PEI_PPI_DESCRIPTOR mPpiBootMode[] = { +EFI_PEI_PPI_DESCRIPTOR mPpiBootMode[] = { { EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, &gEfiPeiMasterBootModePpiGuid, @@ -48,27 +48,26 @@ EFI_PEI_PPI_DESCRIPTOR mPpiBootMode[] = { } }; +UINT16 mHostBridgeDevId; -UINT16 mHostBridgeDevId; +EFI_BOOT_MODE mBootMode = BOOT_WITH_FULL_CONFIGURATION; -EFI_BOOT_MODE mBootMode = BOOT_WITH_FULL_CONFIGURATION; +BOOLEAN mS3Supported = FALSE; -BOOLEAN mS3Supported = FALSE; - -UINT32 mMaxCpuCount; +UINT32 mMaxCpuCount; VOID AddIoMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize ) { BuildResourceDescriptorHob ( EFI_RESOURCE_MEMORY_MAPPED_IO, - EFI_RESOURCE_ATTRIBUTE_PRESENT | - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | - EFI_RESOURCE_ATTRIBUTE_TESTED, + EFI_RESOURCE_ATTRIBUTE_PRESENT | + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | + EFI_RESOURCE_ATTRIBUTE_TESTED, MemoryBase, MemorySize ); @@ -76,23 +75,23 @@ AddIoMemoryBaseSizeHob ( VOID AddReservedMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize, - BOOLEAN Cacheable + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize, + BOOLEAN Cacheable ) { BuildResourceDescriptorHob ( EFI_RESOURCE_MEMORY_RESERVED, - EFI_RESOURCE_ATTRIBUTE_PRESENT | - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | - (Cacheable ? - EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE : - 0 - ) | - EFI_RESOURCE_ATTRIBUTE_TESTED, + EFI_RESOURCE_ATTRIBUTE_PRESENT | + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | + (Cacheable ? + EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE : + 0 + ) | + EFI_RESOURCE_ATTRIBUTE_TESTED, MemoryBase, MemorySize ); @@ -100,57 +99,54 @@ AddReservedMemoryBaseSizeHob ( VOID AddIoMemoryRangeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - EFI_PHYSICAL_ADDRESS MemoryLimit + EFI_PHYSICAL_ADDRESS MemoryBase, + EFI_PHYSICAL_ADDRESS MemoryLimit ) { AddIoMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase)); } - VOID AddMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize ) { BuildResourceDescriptorHob ( EFI_RESOURCE_SYSTEM_MEMORY, - EFI_RESOURCE_ATTRIBUTE_PRESENT | - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | - EFI_RESOURCE_ATTRIBUTE_TESTED, + EFI_RESOURCE_ATTRIBUTE_PRESENT | + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | + EFI_RESOURCE_ATTRIBUTE_TESTED, MemoryBase, MemorySize ); } - VOID AddMemoryRangeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - EFI_PHYSICAL_ADDRESS MemoryLimit + EFI_PHYSICAL_ADDRESS MemoryBase, + EFI_PHYSICAL_ADDRESS MemoryLimit ) { AddMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase)); } - VOID MemMapInitialization ( VOID ) { - UINT64 PciIoBase; - UINT64 PciIoSize; - RETURN_STATUS PcdStatus; - UINT32 TopOfLowRam; - UINT64 PciExBarBase; - UINT32 PciBase; - UINT32 PciSize; + UINT64 PciIoBase; + UINT64 PciIoSize; + RETURN_STATUS PcdStatus; + UINT32 TopOfLowRam; + UINT64 PciExBarBase; + UINT32 PciBase; + UINT32 PciSize; PciIoBase = 0xC000; PciIoSize = 0x4000; @@ -167,7 +163,7 @@ MemMapInitialization ( return; } - TopOfLowRam = GetSystemMemorySizeBelow4gb (); + TopOfLowRam = GetSystemMemorySizeBelow4gb (); PciExBarBase = 0; if (mHostBridgeDevId == INTEL_Q35_MCH_DEVICE_ID) { // @@ -229,10 +225,14 @@ MemMapInitialization ( // uncacheable reserved memory right here. // AddReservedMemoryBaseSizeHob (PciExBarBase, SIZE_256MB, FALSE); - BuildMemoryAllocationHob (PciExBarBase, SIZE_256MB, - EfiReservedMemoryType); + BuildMemoryAllocationHob ( + PciExBarBase, + SIZE_256MB, + EfiReservedMemoryType + ); } - AddIoMemoryBaseSizeHob (PcdGet32(PcdCpuLocalApicBaseAddress), SIZE_1MB); + + AddIoMemoryBaseSizeHob (PcdGet32 (PcdCpuLocalApicBaseAddress), SIZE_1MB); // // On Q35, the IO Port space is available for PCI resource allocations from @@ -286,8 +286,8 @@ PciExBarInitialization ( ) { union { - UINT64 Uint64; - UINT32 Uint32[2]; + UINT64 Uint64; + UINT32 Uint32[2]; } PciExBarBase; // @@ -326,13 +326,13 @@ MiscInitialization ( VOID ) { - UINTN PmCmd; - UINTN Pmba; - UINT32 PmbaAndVal; - UINT32 PmbaOrVal; - UINTN AcpiCtlReg; - UINT8 AcpiEnBit; - RETURN_STATUS PcdStatus; + UINTN PmCmd; + UINTN Pmba; + UINT32 PmbaAndVal; + UINT32 PmbaOrVal; + UINTN AcpiCtlReg; + UINT8 AcpiEnBit; + RETURN_STATUS PcdStatus; // // Disable A20 Mask @@ -368,16 +368,23 @@ MiscInitialization ( break; case 0xffff: /* microvm */ DEBUG ((DEBUG_INFO, "%a: microvm\n", __FUNCTION__)); - PcdStatus = PcdSet16S (PcdOvmfHostBridgePciDevId, - MICROVM_PSEUDO_DEVICE_ID); + PcdStatus = PcdSet16S ( + PcdOvmfHostBridgePciDevId, + MICROVM_PSEUDO_DEVICE_ID + ); ASSERT_RETURN_ERROR (PcdStatus); return; default: - DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", - __FUNCTION__, mHostBridgeDevId)); + DEBUG (( + DEBUG_ERROR, + "%a: Unknown Host Bridge Device ID: 0x%04x\n", + __FUNCTION__, + mHostBridgeDevId + )); ASSERT (FALSE); return; } + PcdStatus = PcdSet16S (PcdOvmfHostBridgePciDevId, mHostBridgeDevId); ASSERT_RETURN_ERROR (PcdStatus); @@ -420,17 +427,17 @@ MiscInitialization ( } } - VOID BootModeInitialization ( VOID ) { - EFI_STATUS Status; + EFI_STATUS Status; if (CmosRead8 (0xF) == 0xFE) { mBootMode = BOOT_ON_S3_RESUME; } + CmosWrite8 (0xF, 0x00); Status = PeiServicesSetBootMode (mBootMode); @@ -440,13 +447,12 @@ BootModeInitialization ( ASSERT_EFI_ERROR (Status); } - VOID ReserveEmuVariableNvStore ( ) { - EFI_PHYSICAL_ADDRESS VariableStore; - RETURN_STATUS PcdStatus; + EFI_PHYSICAL_ADDRESS VariableStore; + RETURN_STATUS PcdStatus; // // Allocate storage for NV variables early on so it will be @@ -456,25 +462,25 @@ ReserveEmuVariableNvStore ( // VariableStore = (EFI_PHYSICAL_ADDRESS)(UINTN) - AllocateRuntimePages ( - EFI_SIZE_TO_PAGES (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) - ); - DEBUG ((DEBUG_INFO, - "Reserved variable store memory: 0x%lX; size: %dkb\n", - VariableStore, - (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) / 1024 - )); + AllocateRuntimePages ( + EFI_SIZE_TO_PAGES (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) + ); + DEBUG (( + DEBUG_INFO, + "Reserved variable store memory: 0x%lX; size: %dkb\n", + VariableStore, + (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) / 1024 + )); PcdStatus = PcdSet64S (PcdEmuVariableNvStoreReserved, VariableStore); ASSERT_RETURN_ERROR (PcdStatus); } - VOID DebugDumpCmos ( VOID ) { - UINT32 Loop; + UINT32 Loop; DEBUG ((DEBUG_INFO, "CMOS:\n")); @@ -482,6 +488,7 @@ DebugDumpCmos ( if ((Loop % 0x10) == 0) { DEBUG ((DEBUG_INFO, "%02x:", Loop)); } + DEBUG ((DEBUG_INFO, " %02x", CmosRead8 (Loop))); if ((Loop % 0x10) == 0xf) { DEBUG ((DEBUG_INFO, "\n")); @@ -489,27 +496,34 @@ DebugDumpCmos ( } } - VOID S3Verification ( VOID ) { -#if defined (MDE_CPU_X64) + #if defined (MDE_CPU_X64) if (FeaturePcdGet (PcdSmmSmramRequire) && mS3Supported) { - DEBUG ((DEBUG_ERROR, - "%a: S3Resume2Pei doesn't support X64 PEI + SMM yet.\n", __FUNCTION__)); - DEBUG ((DEBUG_ERROR, + DEBUG (( + DEBUG_ERROR, + "%a: S3Resume2Pei doesn't support X64 PEI + SMM yet.\n", + __FUNCTION__ + )); + DEBUG (( + DEBUG_ERROR, "%a: Please disable S3 on the QEMU command line (see the README),\n", - __FUNCTION__)); - DEBUG ((DEBUG_ERROR, - "%a: or build OVMF with \"OvmfPkgIa32X64.dsc\".\n", __FUNCTION__)); + __FUNCTION__ + )); + DEBUG (( + DEBUG_ERROR, + "%a: or build OVMF with \"OvmfPkgIa32X64.dsc\".\n", + __FUNCTION__ + )); ASSERT (FALSE); CpuDeadLoop (); } -#endif -} + #endif +} VOID Q35BoardVerification ( @@ -532,7 +546,6 @@ Q35BoardVerification ( CpuDeadLoop (); } - /** Fetch the boot CPU count and the possible CPU count from QEMU, and expose them to UefiCpuPkg modules. Set the mMaxCpuCount variable. @@ -542,8 +555,8 @@ MaxCpuCountInitialization ( VOID ) { - UINT16 BootCpuCount; - RETURN_STATUS PcdStatus; + UINT16 BootCpuCount; + RETURN_STATUS PcdStatus; // // Try to fetch the boot CPU count. @@ -566,8 +579,8 @@ MaxCpuCountInitialization ( // // Now try to fetch the possible CPU count. // - UINTN CpuHpBase; - UINT32 CmdData2; + UINTN CpuHpBase; + UINT32 CmdData2; CpuHpBase = ((mHostBridgeDevId == INTEL_Q35_MCH_DEVICE_ID) ? ICH9_CPU_HOTPLUG_BASE : PIIX4_CPU_HOTPLUG_BASE); @@ -616,16 +629,19 @@ MaxCpuCountInitialization ( // QEMU doesn't support the modern CPU hotplug interface. Assume that the // possible CPU count equals the boot CPU count (precluding hotplug). // - DEBUG ((DEBUG_WARN, "%a: modern CPU hotplug interface unavailable\n", - __FUNCTION__)); + DEBUG (( + DEBUG_WARN, + "%a: modern CPU hotplug interface unavailable\n", + __FUNCTION__ + )); mMaxCpuCount = BootCpuCount; } else { // // Grab the possible CPU count from the modern CPU hotplug interface. // - UINT32 Present, Possible, Selected; + UINT32 Present, Possible, Selected; - Present = 0; + Present = 0; Possible = 0; // @@ -637,7 +653,7 @@ MaxCpuCountInitialization ( IoWrite32 (CpuHpBase + QEMU_CPUHP_W_CPU_SEL, Possible); do { - UINT8 CpuStatus; + UINT8 CpuStatus; // // Read the status of the currently selected CPU. This will help with a @@ -647,6 +663,7 @@ MaxCpuCountInitialization ( if ((CpuStatus & QEMU_CPUHP_STAT_ENABLED) != 0) { ++Present; } + // // Attempt to select the next CPU. // @@ -666,8 +683,14 @@ MaxCpuCountInitialization ( // return the same boot CPU count. // if (BootCpuCount != Present) { - DEBUG ((DEBUG_WARN, "%a: QEMU v2.7 reset bug: BootCpuCount=%d " - "Present=%u\n", __FUNCTION__, BootCpuCount, Present)); + DEBUG (( + DEBUG_WARN, + "%a: QEMU v2.7 reset bug: BootCpuCount=%d " + "Present=%u\n", + __FUNCTION__, + BootCpuCount, + Present + )); // // The handling of QemuFwCfgItemSmpCpuCount, across CPU hotplug plus // platform reset (including S3), was corrected in QEMU commit @@ -681,8 +704,13 @@ MaxCpuCountInitialization ( } } - DEBUG ((DEBUG_INFO, "%a: BootCpuCount=%d mMaxCpuCount=%u\n", __FUNCTION__, - BootCpuCount, mMaxCpuCount)); + DEBUG (( + DEBUG_INFO, + "%a: BootCpuCount=%d mMaxCpuCount=%u\n", + __FUNCTION__, + BootCpuCount, + mMaxCpuCount + )); ASSERT (BootCpuCount <= mMaxCpuCount); PcdStatus = PcdSet32S (PcdCpuBootLogicalProcessorNumber, BootCpuCount); @@ -691,7 +719,6 @@ MaxCpuCountInitialization ( ASSERT_RETURN_ERROR (PcdStatus); } - /** Perform Platform PEI initialization. @@ -708,7 +735,7 @@ InitializePlatform ( IN CONST EFI_PEI_SERVICES **PeiServices ) { - EFI_STATUS Status; + EFI_STATUS Status; DEBUG ((DEBUG_INFO, "Platform PEIM Loaded\n")); @@ -717,7 +744,7 @@ InitializePlatform ( if (QemuFwCfgS3Enabled ()) { DEBUG ((DEBUG_INFO, "S3 support was detected on QEMU\n")); mS3Supported = TRUE; - Status = PcdSetBoolS (PcdAcpiS3Enable, TRUE); + Status = PcdSetBoolS (PcdAcpiS3Enable, TRUE); ASSERT_EFI_ERROR (Status); } @@ -748,6 +775,7 @@ InitializePlatform ( if (!FeaturePcdGet (PcdSmmSmramRequire)) { ReserveEmuVariableNvStore (); } + PeiFvInitialization (); MemTypeInfoInitialization (); MemMapInitialization (); diff --git a/OvmfPkg/PlatformPei/Platform.h b/OvmfPkg/PlatformPei/Platform.h index 8b1d270c2b..357b3d4095 100644 --- a/OvmfPkg/PlatformPei/Platform.h +++ b/OvmfPkg/PlatformPei/Platform.h @@ -13,33 +13,33 @@ VOID AddIoMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize ); VOID AddIoMemoryRangeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - EFI_PHYSICAL_ADDRESS MemoryLimit + EFI_PHYSICAL_ADDRESS MemoryBase, + EFI_PHYSICAL_ADDRESS MemoryLimit ); VOID AddMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize ); VOID AddMemoryRangeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - EFI_PHYSICAL_ADDRESS MemoryLimit + EFI_PHYSICAL_ADDRESS MemoryBase, + EFI_PHYSICAL_ADDRESS MemoryLimit ); VOID AddReservedMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize, - BOOLEAN Cacheable + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize, + BOOLEAN Cacheable ); VOID @@ -102,18 +102,18 @@ AmdSevInitialize ( VOID ); -extern EFI_BOOT_MODE mBootMode; +extern EFI_BOOT_MODE mBootMode; -extern BOOLEAN mS3Supported; +extern BOOLEAN mS3Supported; -extern UINT8 mPhysMemAddressWidth; +extern UINT8 mPhysMemAddressWidth; -extern UINT32 mMaxCpuCount; +extern UINT32 mMaxCpuCount; -extern UINT16 mHostBridgeDevId; +extern UINT16 mHostBridgeDevId; -extern BOOLEAN mQ35SmramAtDefaultSmbase; +extern BOOLEAN mQ35SmramAtDefaultSmbase; -extern UINT32 mQemuUc32Base; +extern UINT32 mQemuUc32Base; #endif // _PLATFORM_PEI_H_INCLUDED_ diff --git a/OvmfPkg/PvScsiDxe/PvScsi.c b/OvmfPkg/PvScsiDxe/PvScsi.c index 843534ebf7..47cc0ae59b 100644 --- a/OvmfPkg/PvScsiDxe/PvScsi.c +++ b/OvmfPkg/PvScsiDxe/PvScsi.c @@ -26,7 +26,7 @@ // Higher versions will be used before lower, 0x10-0xffffffef is the version // range for IHV (Indie Hardware Vendors) // -#define PVSCSI_BINDING_VERSION 0x10 +#define PVSCSI_BINDING_VERSION 0x10 // // Ext SCSI Pass Thru utilities @@ -38,9 +38,9 @@ STATIC EFI_STATUS PvScsiMmioRead32 ( - IN CONST PVSCSI_DEV *Dev, - IN UINT64 Offset, - OUT UINT32 *Value + IN CONST PVSCSI_DEV *Dev, + IN UINT64 Offset, + OUT UINT32 *Value ) { return Dev->PciIo->Mem.Read ( @@ -59,9 +59,9 @@ PvScsiMmioRead32 ( STATIC EFI_STATUS PvScsiMmioWrite32 ( - IN CONST PVSCSI_DEV *Dev, - IN UINT64 Offset, - IN UINT32 Value + IN CONST PVSCSI_DEV *Dev, + IN UINT64 Offset, + IN UINT32 Value ) { return Dev->PciIo->Mem.Write ( @@ -80,10 +80,10 @@ PvScsiMmioWrite32 ( STATIC EFI_STATUS PvScsiMmioWrite32Multiple ( - IN CONST PVSCSI_DEV *Dev, - IN UINT64 Offset, - IN UINTN Count, - IN UINT32 *Words + IN CONST PVSCSI_DEV *Dev, + IN UINT64 Offset, + IN UINTN Count, + IN UINT32 *Words ) { return Dev->PciIo->Mem.Write ( @@ -116,13 +116,13 @@ PvScsiMmioWrite32Multiple ( STATIC EFI_STATUS PvScsiWriteCmdDesc ( - IN CONST PVSCSI_DEV *Dev, - IN UINT32 Cmd, - IN UINT32 *DescWords OPTIONAL, - IN UINTN DescWordsCount + IN CONST PVSCSI_DEV *Dev, + IN UINT32 Cmd, + IN UINT32 *DescWords OPTIONAL, + IN UINTN DescWordsCount ) { - EFI_STATUS Status; + EFI_STATUS Status; if (DescWordsCount > PVSCSI_MAX_CMD_DATA_WORDS) { return EFI_INVALID_PARAMETER; @@ -148,7 +148,7 @@ PvScsiWriteCmdDesc ( STATIC EFI_STATUS PvScsiResetAdapter ( - IN CONST PVSCSI_DEV *Dev + IN CONST PVSCSI_DEV *Dev ) { return PvScsiWriteCmdDesc (Dev, PvScsiCmdAdapterReset, NULL, 0); @@ -160,13 +160,13 @@ PvScsiResetAdapter ( STATIC BOOLEAN PvScsiIsReqRingFull ( - IN CONST PVSCSI_DEV *Dev + IN CONST PVSCSI_DEV *Dev ) { - PVSCSI_RINGS_STATE *RingsState; - UINT32 ReqNumEntries; + PVSCSI_RINGS_STATE *RingsState; + UINT32 ReqNumEntries; - RingsState = Dev->RingDesc.RingState; + RingsState = Dev->RingDesc.RingState; ReqNumEntries = 1U << RingsState->ReqNumEntriesLog2; return (RingsState->ReqProdIdx - RingsState->CmpConsIdx) >= ReqNumEntries; } @@ -177,13 +177,13 @@ PvScsiIsReqRingFull ( STATIC PVSCSI_RING_REQ_DESC * PvScsiGetCurrentRequest ( - IN CONST PVSCSI_DEV *Dev + IN CONST PVSCSI_DEV *Dev ) { - PVSCSI_RINGS_STATE *RingState; - UINT32 ReqNumEntries; + PVSCSI_RINGS_STATE *RingState; + UINT32 ReqNumEntries; - RingState = Dev->RingDesc.RingState; + RingState = Dev->RingDesc.RingState; ReqNumEntries = 1U << RingState->ReqNumEntriesLog2; return Dev->RingDesc.RingReqs + (RingState->ReqProdIdx & (ReqNumEntries - 1)); @@ -195,13 +195,13 @@ PvScsiGetCurrentRequest ( STATIC PVSCSI_RING_CMP_DESC * PvScsiGetCurrentResponse ( - IN CONST PVSCSI_DEV *Dev + IN CONST PVSCSI_DEV *Dev ) { - PVSCSI_RINGS_STATE *RingState; - UINT32 CmpNumEntries; + PVSCSI_RINGS_STATE *RingState; + UINT32 CmpNumEntries; - RingState = Dev->RingDesc.RingState; + RingState = Dev->RingDesc.RingState; CmpNumEntries = 1U << RingState->CmpNumEntriesLog2; return Dev->RingDesc.RingCmps + (RingState->CmpConsIdx & (CmpNumEntries - 1)); @@ -213,11 +213,11 @@ PvScsiGetCurrentResponse ( STATIC EFI_STATUS PvScsiWaitForRequestCompletion ( - IN CONST PVSCSI_DEV *Dev + IN CONST PVSCSI_DEV *Dev ) { - EFI_STATUS Status; - UINT32 IntrStatus; + EFI_STATUS Status; + UINT32 IntrStatus; // // Note: We don't yet support Timeout according to @@ -226,7 +226,7 @@ PvScsiWaitForRequestCompletion ( // This is consistent with some other Scsi PassThru drivers // such as VirtioScsi. // - for (;;) { + for ( ; ;) { Status = PvScsiMmioRead32 (Dev, PvScsiRegOffsetIntrStatus, &IntrStatus); if (EFI_ERROR (Status)) { return Status; @@ -258,14 +258,14 @@ PvScsiWaitForRequestCompletion ( STATIC EFI_STATUS ReportHostAdapterError ( - OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet + OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet ) { - Packet->InTransferLength = 0; + Packet->InTransferLength = 0; Packet->OutTransferLength = 0; - Packet->SenseDataLength = 0; + Packet->SenseDataLength = 0; Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OTHER; - Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_GOOD; + Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_GOOD; return EFI_DEVICE_ERROR; } @@ -275,12 +275,12 @@ ReportHostAdapterError ( STATIC EFI_STATUS ReportHostAdapterOverrunError ( - OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet + OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet ) { - Packet->SenseDataLength = 0; + Packet->SenseDataLength = 0; Packet->HostAdapterStatus = - EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_GOOD; return EFI_BAD_BUFFER_SIZE; } @@ -292,14 +292,14 @@ ReportHostAdapterOverrunError ( STATIC EFI_STATUS PopulateRequest ( - IN CONST PVSCSI_DEV *Dev, - IN UINT8 *Target, - IN UINT64 Lun, - IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, - OUT PVSCSI_RING_REQ_DESC *Request + IN CONST PVSCSI_DEV *Dev, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, + OUT PVSCSI_RING_REQ_DESC *Request ) { - UINT8 TargetValue; + UINT8 TargetValue; // // We only use first byte of target identifer @@ -313,15 +313,15 @@ PopulateRequest ( // // Bidirectional transfer was requested // - (Packet->InTransferLength > 0 && Packet->OutTransferLength > 0) || + ((Packet->InTransferLength > 0) && (Packet->OutTransferLength > 0)) || (Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_BIDIRECTIONAL) || // // Command Descriptor Block bigger than this constant should be considered // out-of-band. We currently don't support these CDBs. // (Packet->CdbLength > PVSCSI_CDB_MAX_SIZE) - ) { - + ) + { // // This error code doesn't require updates to the Packet output fields // @@ -348,8 +348,8 @@ PopulateRequest ( ((Packet->InTransferLength > 0) && ((Packet->InDataBuffer == NULL) || (Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_WRITE) - ) - ) || + ) + ) || // // Trying to send, but source pointer is NULL, or contradicting // transfer direction @@ -357,10 +357,10 @@ PopulateRequest ( ((Packet->OutTransferLength > 0) && ((Packet->OutDataBuffer == NULL) || (Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_READ) - ) ) - ) { - + ) + ) + { // // This error code doesn't require updates to the Packet output fields // @@ -374,6 +374,7 @@ PopulateRequest ( Packet->InTransferLength = sizeof (Dev->DmaBuf->Data); return ReportHostAdapterOverrunError (Packet); } + if (Packet->OutTransferLength > sizeof (Dev->DmaBuf->Data)) { Packet->OutTransferLength = sizeof (Dev->DmaBuf->Data); return ReportHostAdapterOverrunError (Packet); @@ -384,27 +385,27 @@ PopulateRequest ( // ZeroMem (Request, sizeof (*Request)); - Request->Bus = 0; + Request->Bus = 0; Request->Target = TargetValue; // // This cast is safe as PVSCSI_DEV.MaxLun is defined as UINT8 // - Request->Lun[1] = (UINT8)Lun; + Request->Lun[1] = (UINT8)Lun; Request->SenseLen = Packet->SenseDataLength; // // DMA communication buffer SenseData overflow is not possible // due to Packet->SenseDataLength defined as UINT8 // Request->SenseAddr = PVSCSI_DMA_BUF_DEV_ADDR (Dev, SenseData); - Request->CdbLen = Packet->CdbLength; + Request->CdbLen = Packet->CdbLength; CopyMem (Request->Cdb, Packet->Cdb, Packet->CdbLength); Request->VcpuHint = 0; - Request->Tag = PVSCSI_SIMPLE_QUEUE_TAG; + Request->Tag = PVSCSI_SIMPLE_QUEUE_TAG; if (Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_READ) { - Request->Flags = PVSCSI_FLAG_CMD_DIR_TOHOST; + Request->Flags = PVSCSI_FLAG_CMD_DIR_TOHOST; Request->DataLen = Packet->InTransferLength; } else { - Request->Flags = PVSCSI_FLAG_CMD_DIR_TODEVICE; + Request->Flags = PVSCSI_FLAG_CMD_DIR_TODEVICE; Request->DataLen = Packet->OutTransferLength; CopyMem ( Dev->DmaBuf->Data, @@ -412,6 +413,7 @@ PopulateRequest ( Packet->OutTransferLength ); } + Request->DataAddr = PVSCSI_DMA_BUF_DEV_ADDR (Dev, Data); return EFI_SUCCESS; @@ -426,9 +428,9 @@ PopulateRequest ( STATIC EFI_STATUS HandleResponse ( - IN PVSCSI_DEV *Dev, - IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, - IN CONST PVSCSI_RING_CMP_DESC *Response + IN PVSCSI_DEV *Dev, + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, + IN CONST PVSCSI_RING_CMP_DESC *Response ) { // @@ -437,6 +439,7 @@ HandleResponse ( if (Packet->SenseDataLength > Response->SenseLen) { Packet->SenseDataLength = (UINT8)Response->SenseLen; } + // // Copy sense data from DMA communication buffer // @@ -482,18 +485,19 @@ HandleResponse ( } else { Packet->OutTransferLength = (UINT32)Response->DataLen; } + Packet->HostAdapterStatus = - EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; return EFI_SUCCESS; case PvScsiBtStatDatarun: Packet->HostAdapterStatus = - EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; return EFI_SUCCESS; case PvScsiBtStatSelTimeout: Packet->HostAdapterStatus = - EFI_EXT_SCSI_STATUS_HOST_ADAPTER_SELECTION_TIMEOUT; + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_SELECTION_TIMEOUT; return EFI_TIMEOUT; case PvScsiBtStatBusFree: @@ -506,13 +510,13 @@ HandleResponse ( case PvScsiBtStatSensFailed: Packet->HostAdapterStatus = - EFI_EXT_SCSI_STATUS_HOST_ADAPTER_REQUEST_SENSE_FAILED; + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_REQUEST_SENSE_FAILED; break; case PvScsiBtStatTagReject: case PvScsiBtStatBadMsg: Packet->HostAdapterStatus = - EFI_EXT_SCSI_STATUS_HOST_ADAPTER_MESSAGE_REJECT; + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_MESSAGE_REJECT; break; case PvScsiBtStatBusReset: @@ -542,16 +546,17 @@ HandleResponse ( STATIC BOOLEAN IsTargetInitialized ( - IN UINT8 *Target + IN UINT8 *Target ) { - UINTN Idx; + UINTN Idx; for (Idx = 0; Idx < TARGET_MAX_BYTES; ++Idx) { if (Target[Idx] != 0xFF) { return TRUE; } } + return FALSE; } @@ -563,17 +568,17 @@ STATIC EFI_STATUS EFIAPI PvScsiPassThru ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun, - IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, - IN EFI_EVENT Event OPTIONAL + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, + IN EFI_EVENT Event OPTIONAL ) { PVSCSI_DEV *Dev; EFI_STATUS Status; - PVSCSI_RING_REQ_DESC *Request; - PVSCSI_RING_CMP_DESC *Response; + PVSCSI_RING_REQ_DESC *Request; + PVSCSI_RING_CMP_DESC *Response; Dev = PVSCSI_FROM_PASS_THRU (This); @@ -616,7 +621,7 @@ PvScsiPassThru ( } Response = PvScsiGetCurrentResponse (Dev); - Status = HandleResponse (Dev, Packet, Response); + Status = HandleResponse (Dev, Packet, Response); // // Reads from response must complete before releasing completion entry @@ -632,14 +637,14 @@ STATIC EFI_STATUS EFIAPI PvScsiGetNextTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN OUT UINT8 **Target, - IN OUT UINT64 *Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN OUT UINT8 **Target, + IN OUT UINT64 *Lun ) { - UINT8 *TargetPtr; - UINT8 LastTarget; - PVSCSI_DEV *Dev; + UINT8 *TargetPtr; + UINT8 LastTarget; + PVSCSI_DEV *Dev; if (Target == NULL) { return EFI_INVALID_PARAMETER; @@ -668,7 +673,7 @@ PvScsiGetNextTargetLun ( // Increment (target, LUN) pair if valid on input // Dev = PVSCSI_FROM_PASS_THRU (This); - if (LastTarget > Dev->MaxTarget || *Lun > Dev->MaxLun) { + if ((LastTarget > Dev->MaxTarget) || (*Lun > Dev->MaxLun)) { return EFI_INVALID_PARAMETER; } @@ -691,10 +696,10 @@ STATIC EFI_STATUS EFIAPI PvScsiBuildDevicePath ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun, - IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath ) { UINT8 TargetValue; @@ -711,7 +716,7 @@ PvScsiBuildDevicePath ( TargetValue = *Target; Dev = PVSCSI_FROM_PASS_THRU (This); - if (TargetValue > Dev->MaxTarget || Lun > Dev->MaxLun) { + if ((TargetValue > Dev->MaxTarget) || (Lun > Dev->MaxLun)) { return EFI_NOT_FOUND; } @@ -735,28 +740,30 @@ STATIC EFI_STATUS EFIAPI PvScsiGetTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, - OUT UINT8 **Target, - OUT UINT64 *Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, + OUT UINT8 **Target, + OUT UINT64 *Lun ) { - SCSI_DEVICE_PATH *ScsiDevicePath; - PVSCSI_DEV *Dev; + SCSI_DEVICE_PATH *ScsiDevicePath; + PVSCSI_DEV *Dev; - if (DevicePath == NULL || Target == NULL || *Target == NULL || Lun == NULL) { + if ((DevicePath == NULL) || (Target == NULL) || (*Target == NULL) || (Lun == NULL)) { return EFI_INVALID_PARAMETER; } - if (DevicePath->Type != MESSAGING_DEVICE_PATH || - DevicePath->SubType != MSG_SCSI_DP) { + if ((DevicePath->Type != MESSAGING_DEVICE_PATH) || + (DevicePath->SubType != MSG_SCSI_DP)) + { return EFI_UNSUPPORTED; } ScsiDevicePath = (SCSI_DEVICE_PATH *)DevicePath; - Dev = PVSCSI_FROM_PASS_THRU (This); - if (ScsiDevicePath->Pun > Dev->MaxTarget || - ScsiDevicePath->Lun > Dev->MaxLun) { + Dev = PVSCSI_FROM_PASS_THRU (This); + if ((ScsiDevicePath->Pun > Dev->MaxTarget) || + (ScsiDevicePath->Lun > Dev->MaxLun)) + { return EFI_NOT_FOUND; } @@ -774,7 +781,7 @@ STATIC EFI_STATUS EFIAPI PvScsiResetChannel ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This ) { return EFI_UNSUPPORTED; @@ -784,9 +791,9 @@ STATIC EFI_STATUS EFIAPI PvScsiResetTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun ) { return EFI_UNSUPPORTED; @@ -796,13 +803,13 @@ STATIC EFI_STATUS EFIAPI PvScsiGetNextTarget ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN OUT UINT8 **Target + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN OUT UINT8 **Target ) { - UINT8 *TargetPtr; - UINT8 LastTarget; - PVSCSI_DEV *Dev; + UINT8 *TargetPtr; + UINT8 LastTarget; + PVSCSI_DEV *Dev; if (Target == NULL) { return EFI_INVALID_PARAMETER; @@ -846,10 +853,10 @@ PvScsiGetNextTarget ( STATIC EFI_STATUS PvScsiSetPciAttributes ( - IN OUT PVSCSI_DEV *Dev + IN OUT PVSCSI_DEV *Dev ) { - EFI_STATUS Status; + EFI_STATUS Status; // // Backup original PCI Attributes @@ -907,7 +914,7 @@ PvScsiSetPciAttributes ( STATIC VOID PvScsiRestorePciAttributes ( - IN PVSCSI_DEV *Dev + IN PVSCSI_DEV *Dev ) { Dev->PciIo->Attributes ( @@ -921,14 +928,14 @@ PvScsiRestorePciAttributes ( STATIC EFI_STATUS PvScsiAllocateSharedPages ( - IN PVSCSI_DEV *Dev, - IN UINTN Pages, - OUT VOID **HostAddress, - OUT PVSCSI_DMA_DESC *DmaDesc + IN PVSCSI_DEV *Dev, + IN UINTN Pages, + OUT VOID **HostAddress, + OUT PVSCSI_DMA_DESC *DmaDesc ) { - EFI_STATUS Status; - UINTN NumberOfBytes; + EFI_STATUS Status; + UINTN NumberOfBytes; Status = Dev->PciIo->AllocateBuffer ( Dev->PciIo, @@ -943,14 +950,14 @@ PvScsiAllocateSharedPages ( } NumberOfBytes = EFI_PAGES_TO_SIZE (Pages); - Status = Dev->PciIo->Map ( - Dev->PciIo, - EfiPciIoOperationBusMasterCommonBuffer, - *HostAddress, - &NumberOfBytes, - &DmaDesc->DeviceAddress, - &DmaDesc->Mapping - ); + Status = Dev->PciIo->Map ( + Dev->PciIo, + EfiPciIoOperationBusMasterCommonBuffer, + *HostAddress, + &NumberOfBytes, + &DmaDesc->DeviceAddress, + &DmaDesc->Mapping + ); if (EFI_ERROR (Status)) { goto FreeBuffer; } @@ -974,10 +981,10 @@ FreeBuffer: STATIC VOID PvScsiFreeSharedPages ( - IN PVSCSI_DEV *Dev, - IN UINTN Pages, - IN VOID *HostAddress, - IN PVSCSI_DMA_DESC *DmaDesc + IN PVSCSI_DEV *Dev, + IN UINTN Pages, + IN VOID *HostAddress, + IN PVSCSI_DMA_DESC *DmaDesc ) { Dev->PciIo->Unmap (Dev->PciIo, DmaDesc->Mapping); @@ -987,10 +994,10 @@ PvScsiFreeSharedPages ( STATIC EFI_STATUS PvScsiInitRings ( - IN OUT PVSCSI_DEV *Dev + IN OUT PVSCSI_DEV *Dev ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = PvScsiAllocateSharedPages ( Dev, @@ -1001,6 +1008,7 @@ PvScsiInitRings ( if (EFI_ERROR (Status)) { return Status; } + ZeroMem (Dev->RingDesc.RingState, EFI_PAGE_SIZE); Status = PvScsiAllocateSharedPages ( @@ -1012,6 +1020,7 @@ PvScsiInitRings ( if (EFI_ERROR (Status)) { goto FreeRingState; } + ZeroMem (Dev->RingDesc.RingReqs, EFI_PAGE_SIZE); Status = PvScsiAllocateSharedPages ( @@ -1023,6 +1032,7 @@ PvScsiInitRings ( if (EFI_ERROR (Status)) { goto FreeRingReqs; } + ZeroMem (Dev->RingDesc.RingCmps, EFI_PAGE_SIZE); return EFI_SUCCESS; @@ -1049,7 +1059,7 @@ FreeRingState: STATIC VOID PvScsiFreeRings ( - IN OUT PVSCSI_DEV *Dev + IN OUT PVSCSI_DEV *Dev ) { PvScsiFreeSharedPages ( @@ -1077,24 +1087,24 @@ PvScsiFreeRings ( STATIC EFI_STATUS PvScsiSetupRings ( - IN OUT PVSCSI_DEV *Dev + IN OUT PVSCSI_DEV *Dev ) { union { - PVSCSI_CMD_DESC_SETUP_RINGS Cmd; - UINT32 Uint32; + PVSCSI_CMD_DESC_SETUP_RINGS Cmd; + UINT32 Uint32; } AlignedCmd; - PVSCSI_CMD_DESC_SETUP_RINGS *Cmd; + PVSCSI_CMD_DESC_SETUP_RINGS *Cmd; Cmd = &AlignedCmd.Cmd; ZeroMem (Cmd, sizeof (*Cmd)); Cmd->ReqRingNumPages = 1; Cmd->CmpRingNumPages = 1; - Cmd->RingsStatePPN = RShiftU64 ( - Dev->RingDesc.RingStateDmaDesc.DeviceAddress, - EFI_PAGE_SHIFT - ); + Cmd->RingsStatePPN = RShiftU64 ( + Dev->RingDesc.RingStateDmaDesc.DeviceAddress, + EFI_PAGE_SHIFT + ); Cmd->ReqRingPPNs[0] = RShiftU64 ( Dev->RingDesc.RingReqsDmaDesc.DeviceAddress, EFI_PAGE_SHIFT @@ -1119,16 +1129,16 @@ PvScsiSetupRings ( STATIC EFI_STATUS PvScsiInit ( - IN OUT PVSCSI_DEV *Dev + IN OUT PVSCSI_DEV *Dev ) { - EFI_STATUS Status; + EFI_STATUS Status; // // Init configuration // - Dev->MaxTarget = PcdGet8 (PcdPvScsiMaxTargetLimit); - Dev->MaxLun = PcdGet8 (PcdPvScsiMaxLunLimit); + Dev->MaxTarget = PcdGet8 (PcdPvScsiMaxTargetLimit); + Dev->MaxLun = PcdGet8 (PcdPvScsiMaxLunLimit); Dev->WaitForCmpStallInUsecs = PcdGet32 (PcdPvScsiWaitForCmpStallInUsecs); // @@ -1227,7 +1237,7 @@ RestorePciAttributes: STATIC VOID PvScsiUninit ( - IN OUT PVSCSI_DEV *Dev + IN OUT PVSCSI_DEV *Dev ) { // @@ -1262,11 +1272,11 @@ STATIC VOID EFIAPI PvScsiExitBoot ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - PVSCSI_DEV *Dev; + PVSCSI_DEV *Dev; Dev = Context; DEBUG ((DEBUG_VERBOSE, "%a: Context=0x%p\n", __FUNCTION__, Context)); @@ -1288,14 +1298,14 @@ STATIC EFI_STATUS EFIAPI PvScsiDriverBindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; Status = gBS->OpenProtocol ( ControllerHandle, @@ -1321,7 +1331,8 @@ PvScsiDriverBindingSupported ( } if ((Pci.Hdr.VendorId != PCI_VENDOR_ID_VMWARE) || - (Pci.Hdr.DeviceId != PCI_DEVICE_ID_VMWARE_PVSCSI)) { + (Pci.Hdr.DeviceId != PCI_DEVICE_ID_VMWARE_PVSCSI)) + { Status = EFI_UNSUPPORTED; goto Done; } @@ -1343,15 +1354,15 @@ STATIC EFI_STATUS EFIAPI PvScsiDriverBindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - PVSCSI_DEV *Dev; - EFI_STATUS Status; + PVSCSI_DEV *Dev; + EFI_STATUS Status; - Dev = (PVSCSI_DEV *) AllocateZeroPool (sizeof (*Dev)); + Dev = (PVSCSI_DEV *)AllocateZeroPool (sizeof (*Dev)); if (Dev == NULL) { return EFI_OUT_OF_RESOURCES; } @@ -1388,12 +1399,12 @@ PvScsiDriverBindingStart ( // Setup complete, attempt to export the driver instance's PassThru interface // Dev->Signature = PVSCSI_SIG; - Status = gBS->InstallProtocolInterface ( - &ControllerHandle, - &gEfiExtScsiPassThruProtocolGuid, - EFI_NATIVE_INTERFACE, - &Dev->PassThru - ); + Status = gBS->InstallProtocolInterface ( + &ControllerHandle, + &gEfiExtScsiPassThruProtocolGuid, + EFI_NATIVE_INTERFACE, + &Dev->PassThru + ); if (EFI_ERROR (Status)) { goto CloseExitBoot; } @@ -1424,15 +1435,15 @@ STATIC EFI_STATUS EFIAPI PvScsiDriverBindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) { - EFI_STATUS Status; - EFI_EXT_SCSI_PASS_THRU_PROTOCOL *PassThru; - PVSCSI_DEV *Dev; + EFI_STATUS Status; + EFI_EXT_SCSI_PASS_THRU_PROTOCOL *PassThru; + PVSCSI_DEV *Dev; Status = gBS->OpenProtocol ( ControllerHandle, @@ -1473,7 +1484,7 @@ PvScsiDriverBindingStop ( return EFI_SUCCESS; } -STATIC EFI_DRIVER_BINDING_PROTOCOL mPvScsiDriverBinding = { +STATIC EFI_DRIVER_BINDING_PROTOCOL mPvScsiDriverBinding = { &PvScsiDriverBindingSupported, &PvScsiDriverBindingStart, &PvScsiDriverBindingStop, @@ -1486,20 +1497,20 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL mPvScsiDriverBinding = { // Component Name // -STATIC EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { +STATIC EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { { "eng;en", L"PVSCSI Host Driver" }, { NULL, NULL } }; -STATIC EFI_COMPONENT_NAME_PROTOCOL mComponentName; +STATIC EFI_COMPONENT_NAME_PROTOCOL mComponentName; STATIC EFI_STATUS EFIAPI PvScsiGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) { return LookupUnicodeString2 ( @@ -1515,25 +1526,25 @@ STATIC EFI_STATUS EFIAPI PvScsiGetDeviceName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_HANDLE ChildHandle, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_HANDLE ChildHandle, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { return EFI_UNSUPPORTED; } -STATIC EFI_COMPONENT_NAME_PROTOCOL mComponentName = { +STATIC EFI_COMPONENT_NAME_PROTOCOL mComponentName = { &PvScsiGetDriverName, &PvScsiGetDeviceName, "eng" // SupportedLanguages, ISO 639-2 language codes }; -STATIC EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &PvScsiGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &PvScsiGetDeviceName, +STATIC EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&PvScsiGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&PvScsiGetDeviceName, "en" // SupportedLanguages, RFC 4646 language codes }; @@ -1544,8 +1555,8 @@ STATIC EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = { EFI_STATUS EFIAPI PvScsiEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { return EfiLibInstallDriverBindingComponentName2 ( diff --git a/OvmfPkg/PvScsiDxe/PvScsi.h b/OvmfPkg/PvScsiDxe/PvScsi.h index 544359ebc0..245705ed07 100644 --- a/OvmfPkg/PvScsiDxe/PvScsi.h +++ b/OvmfPkg/PvScsiDxe/PvScsi.h @@ -16,19 +16,19 @@ #include typedef struct { - EFI_PHYSICAL_ADDRESS DeviceAddress; - VOID *Mapping; + EFI_PHYSICAL_ADDRESS DeviceAddress; + VOID *Mapping; } PVSCSI_DMA_DESC; typedef struct { - PVSCSI_RINGS_STATE *RingState; - PVSCSI_DMA_DESC RingStateDmaDesc; + PVSCSI_RINGS_STATE *RingState; + PVSCSI_DMA_DESC RingStateDmaDesc; - PVSCSI_RING_REQ_DESC *RingReqs; - PVSCSI_DMA_DESC RingReqsDmaDesc; + PVSCSI_RING_REQ_DESC *RingReqs; + PVSCSI_DMA_DESC RingReqsDmaDesc; - PVSCSI_RING_CMP_DESC *RingCmps; - PVSCSI_DMA_DESC RingCmpsDmaDesc; + PVSCSI_RING_CMP_DESC *RingCmps; + PVSCSI_DMA_DESC RingCmpsDmaDesc; } PVSCSI_RING_DESC; typedef struct { @@ -37,30 +37,30 @@ typedef struct { // as UINT8, defining here SenseData size to MAX_UINT8 will guarantee it // cannot overflow when passed to device. // - UINT8 SenseData[MAX_UINT8]; + UINT8 SenseData[MAX_UINT8]; // // This size of the data is arbitrarily chosen. // It seems to be sufficient for all I/O requests sent through // EFI_SCSI_PASS_THRU_PROTOCOL.PassThru() for common boot scenarios. // - UINT8 Data[0x2000]; + UINT8 Data[0x2000]; } PVSCSI_DMA_BUFFER; -#define PVSCSI_SIG SIGNATURE_32 ('P', 'S', 'C', 'S') +#define PVSCSI_SIG SIGNATURE_32 ('P', 'S', 'C', 'S') typedef struct { - UINT32 Signature; - EFI_PCI_IO_PROTOCOL *PciIo; - EFI_EVENT ExitBoot; - UINT64 OriginalPciAttributes; - PVSCSI_RING_DESC RingDesc; - PVSCSI_DMA_BUFFER *DmaBuf; - PVSCSI_DMA_DESC DmaBufDmaDesc; - UINT8 MaxTarget; - UINT8 MaxLun; - UINTN WaitForCmpStallInUsecs; - EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; - EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; + UINT32 Signature; + EFI_PCI_IO_PROTOCOL *PciIo; + EFI_EVENT ExitBoot; + UINT64 OriginalPciAttributes; + PVSCSI_RING_DESC RingDesc; + PVSCSI_DMA_BUFFER *DmaBuf; + PVSCSI_DMA_DESC DmaBufDmaDesc; + UINT8 MaxTarget; + UINT8 MaxLun; + UINTN WaitForCmpStallInUsecs; + EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; + EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; } PVSCSI_DEV; #define PVSCSI_FROM_PASS_THRU(PassThruPointer) \ diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbInfo.c b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbInfo.c index 7a6dfb9c21..ea5ce83711 100644 --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbInfo.c +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbInfo.c @@ -31,12 +31,12 @@ #include typedef struct { - UINT64 FvLength; - EFI_FIRMWARE_VOLUME_HEADER FvbInfo; + UINT64 FvLength; + EFI_FIRMWARE_VOLUME_HEADER FvbInfo; // // EFI_FV_BLOCK_MAP_ENTRY ExtraBlockMap[n];//n=0 // - EFI_FV_BLOCK_MAP_ENTRY End[1]; + EFI_FV_BLOCK_MAP_ENTRY End[1]; } EFI_FVB_MEDIA_INFO; EFI_FVB_MEDIA_INFO mPlatformFvbMediaInfo[] = { @@ -59,12 +59,12 @@ EFI_FVB_MEDIA_INFO mPlatformFvbMediaInfo[] = { FixedPcdGet32 (PcdOvmfFlashNvStorageEventLogSize), EFI_FVH_SIGNATURE, EFI_FVB2_MEMORY_MAPPED | - EFI_FVB2_READ_ENABLED_CAP | - EFI_FVB2_READ_STATUS | - EFI_FVB2_WRITE_ENABLED_CAP | - EFI_FVB2_WRITE_STATUS | - EFI_FVB2_ERASE_POLARITY | - EFI_FVB2_ALIGNMENT_16, + EFI_FVB2_READ_ENABLED_CAP | + EFI_FVB2_READ_STATUS | + EFI_FVB2_WRITE_ENABLED_CAP | + EFI_FVB2_WRITE_STATUS | + EFI_FVB2_ERASE_POLARITY | + EFI_FVB2_ALIGNMENT_16, sizeof (EFI_FIRMWARE_VOLUME_HEADER) + sizeof (EFI_FV_BLOCK_MAP_ENTRY), 0, // CheckSum 0, // ExtHeaderOffset @@ -94,31 +94,34 @@ EFI_FVB_MEDIA_INFO mPlatformFvbMediaInfo[] = { EFI_STATUS GetFvbInfo ( - IN UINT64 FvLength, - OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo + IN UINT64 FvLength, + OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo ) { - STATIC BOOLEAN Checksummed = FALSE; - UINTN Index; + STATIC BOOLEAN Checksummed = FALSE; + UINTN Index; if (!Checksummed) { for (Index = 0; Index < sizeof (mPlatformFvbMediaInfo) / sizeof (EFI_FVB_MEDIA_INFO); - Index += 1) { - UINT16 Checksum; + Index += 1) + { + UINT16 Checksum; mPlatformFvbMediaInfo[Index].FvbInfo.Checksum = 0; - Checksum = CalculateCheckSum16 ( - (UINT16*) &mPlatformFvbMediaInfo[Index].FvbInfo, - mPlatformFvbMediaInfo[Index].FvbInfo.HeaderLength - ); + Checksum = CalculateCheckSum16 ( + (UINT16 *)&mPlatformFvbMediaInfo[Index].FvbInfo, + mPlatformFvbMediaInfo[Index].FvbInfo.HeaderLength + ); mPlatformFvbMediaInfo[Index].FvbInfo.Checksum = Checksum; } + Checksummed = TRUE; } for (Index = 0; Index < sizeof (mPlatformFvbMediaInfo) / sizeof (EFI_FVB_MEDIA_INFO); - Index += 1) { + Index += 1) + { if (mPlatformFvbMediaInfo[Index].FvLength == FvLength) { *FvbInfo = &mPlatformFvbMediaInfo[Index].FvbInfo; return EFI_SUCCESS; diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c index bc3f1bb5fd..b34298faf8 100644 --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c @@ -37,9 +37,9 @@ #define EFI_FVB2_STATUS \ (EFI_FVB2_READ_STATUS | EFI_FVB2_WRITE_STATUS | EFI_FVB2_LOCK_STATUS) -ESAL_FWB_GLOBAL *mFvbModuleGlobal; +ESAL_FWB_GLOBAL *mFvbModuleGlobal; -FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate = { +FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate = { { { HARDWARE_DEVICE_PATH, @@ -50,8 +50,8 @@ FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate = { } }, EfiMemoryMappedIO, - (EFI_PHYSICAL_ADDRESS) 0, - (EFI_PHYSICAL_ADDRESS) 0, + (EFI_PHYSICAL_ADDRESS)0, + (EFI_PHYSICAL_ADDRESS)0, }, { END_DEVICE_PATH_TYPE, @@ -63,7 +63,7 @@ FV_MEMMAP_DEVICE_PATH mFvMemmapDevicePathTemplate = { } }; -FV_PIWG_DEVICE_PATH mFvPIWGDevicePathTemplate = { +FV_PIWG_DEVICE_PATH mFvPIWGDevicePathTemplate = { { { MEDIA_DEVICE_PATH, @@ -85,7 +85,7 @@ FV_PIWG_DEVICE_PATH mFvPIWGDevicePathTemplate = { } }; -EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate = { +EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate = { FVB_DEVICE_SIGNATURE, NULL, 0, @@ -101,13 +101,13 @@ EFI_FW_VOL_BLOCK_DEVICE mFvbDeviceTemplate = { } }; - EFI_STATUS GetFvbInstance ( - IN UINTN Instance, - IN ESAL_FWB_GLOBAL *Global, - OUT EFI_FW_VOL_INSTANCE **FwhInstance + IN UINTN Instance, + IN ESAL_FWB_GLOBAL *Global, + OUT EFI_FW_VOL_INSTANCE **FwhInstance ) + /*++ Routine Description: @@ -126,22 +126,23 @@ GetFvbInstance ( --*/ { - EFI_FW_VOL_INSTANCE *FwhRecord; + EFI_FW_VOL_INSTANCE *FwhRecord; *FwhInstance = NULL; if (Instance >= Global->NumFv) { return EFI_INVALID_PARAMETER; } + // // Find the right instance of the FVB private data // FwhRecord = Global->FvInstance; while (Instance > 0) { FwhRecord = (EFI_FW_VOL_INSTANCE *) - ( - (UINTN) ((UINT8 *) FwhRecord) + FwhRecord->VolumeHeader.HeaderLength + - (sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER)) - ); + ( + (UINTN)((UINT8 *)FwhRecord) + FwhRecord->VolumeHeader.HeaderLength + + (sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER)) + ); Instance--; } @@ -152,10 +153,11 @@ GetFvbInstance ( EFI_STATUS FvbGetPhysicalAddress ( - IN UINTN Instance, - OUT EFI_PHYSICAL_ADDRESS *Address, - IN ESAL_FWB_GLOBAL *Global + IN UINTN Instance, + OUT EFI_PHYSICAL_ADDRESS *Address, + IN ESAL_FWB_GLOBAL *Global ) + /*++ Routine Description: @@ -176,8 +178,8 @@ FvbGetPhysicalAddress ( --*/ { - EFI_FW_VOL_INSTANCE *FwhInstance; - EFI_STATUS Status; + EFI_FW_VOL_INSTANCE *FwhInstance; + EFI_STATUS Status; // // Find the right instance of the FVB private data @@ -191,10 +193,11 @@ FvbGetPhysicalAddress ( EFI_STATUS FvbGetVolumeAttributes ( - IN UINTN Instance, - OUT EFI_FVB_ATTRIBUTES_2 *Attributes, - IN ESAL_FWB_GLOBAL *Global + IN UINTN Instance, + OUT EFI_FVB_ATTRIBUTES_2 *Attributes, + IN ESAL_FWB_GLOBAL *Global ) + /*++ Routine Description: @@ -214,8 +217,8 @@ FvbGetVolumeAttributes ( --*/ { - EFI_FW_VOL_INSTANCE *FwhInstance; - EFI_STATUS Status; + EFI_FW_VOL_INSTANCE *FwhInstance; + EFI_STATUS Status; // // Find the right instance of the FVB private data @@ -229,13 +232,14 @@ FvbGetVolumeAttributes ( EFI_STATUS FvbGetLbaAddress ( - IN UINTN Instance, - IN EFI_LBA Lba, - OUT UINTN *LbaAddress, - OUT UINTN *LbaLength, - OUT UINTN *NumOfBlocks, - IN ESAL_FWB_GLOBAL *Global + IN UINTN Instance, + IN EFI_LBA Lba, + OUT UINTN *LbaAddress, + OUT UINTN *LbaLength, + OUT UINTN *NumOfBlocks, + IN ESAL_FWB_GLOBAL *Global ) + /*++ Routine Description: @@ -275,9 +279,9 @@ FvbGetLbaAddress ( Status = GetFvbInstance (Instance, Global, &FwhInstance); ASSERT_EFI_ERROR (Status); - StartLba = 0; - Offset = 0; - BlockMap = &(FwhInstance->VolumeHeader.BlockMap[0]); + StartLba = 0; + Offset = 0; + BlockMap = &(FwhInstance->VolumeHeader.BlockMap[0]); // // Parse the blockmap of the FV to find which map entry the Lba belongs to @@ -286,7 +290,7 @@ FvbGetLbaAddress ( NumBlocks = BlockMap->NumBlocks; BlockLength = BlockMap->Length; - if (NumBlocks == 0 || BlockLength == 0) { + if ((NumBlocks == 0) || (BlockLength == 0)) { return EFI_INVALID_PARAMETER; } @@ -295,8 +299,8 @@ FvbGetLbaAddress ( // // The map entry found // - if (Lba >= StartLba && Lba < NextLba) { - Offset = Offset + (UINTN) MultU64x32 ((Lba - StartLba), BlockLength); + if ((Lba >= StartLba) && (Lba < NextLba)) { + Offset = Offset + (UINTN)MultU64x32 ((Lba - StartLba), BlockLength); if (LbaAddress != NULL) { *LbaAddress = FwhInstance->FvBase + Offset; } @@ -306,24 +310,25 @@ FvbGetLbaAddress ( } if (NumOfBlocks != NULL) { - *NumOfBlocks = (UINTN) (NextLba - Lba); + *NumOfBlocks = (UINTN)(NextLba - Lba); } return EFI_SUCCESS; } - StartLba = NextLba; - Offset = Offset + NumBlocks * BlockLength; + StartLba = NextLba; + Offset = Offset + NumBlocks * BlockLength; BlockMap++; } } EFI_STATUS FvbSetVolumeAttributes ( - IN UINTN Instance, - IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes, - IN ESAL_FWB_GLOBAL *Global + IN UINTN Instance, + IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes, + IN ESAL_FWB_GLOBAL *Global ) + /*++ Routine Description: @@ -364,8 +369,8 @@ FvbSetVolumeAttributes ( Status = GetFvbInstance (Instance, Global, &FwhInstance); ASSERT_EFI_ERROR (Status); - AttribPtr = - (EFI_FVB_ATTRIBUTES_2 *) &(FwhInstance->VolumeHeader.Attributes); + AttribPtr = + (EFI_FVB_ATTRIBUTES_2 *)&(FwhInstance->VolumeHeader.Attributes); OldAttributes = *AttribPtr; Capabilities = OldAttributes & (EFI_FVB2_READ_DISABLED_CAP | \ EFI_FVB2_READ_ENABLED_CAP | \ @@ -373,8 +378,8 @@ FvbSetVolumeAttributes ( EFI_FVB2_WRITE_ENABLED_CAP | \ EFI_FVB2_LOCK_CAP \ ); - OldStatus = OldAttributes & EFI_FVB2_STATUS; - NewStatus = *Attributes & EFI_FVB2_STATUS; + OldStatus = OldAttributes & EFI_FVB2_STATUS; + NewStatus = *Attributes & EFI_FVB2_STATUS; UnchangedAttributes = EFI_FVB2_READ_DISABLED_CAP | \ EFI_FVB2_READ_ENABLED_CAP | \ @@ -392,9 +397,11 @@ FvbSetVolumeAttributes ( // Some attributes of FV is read only can *not* be set // if ((OldAttributes & UnchangedAttributes) ^ - (*Attributes & UnchangedAttributes)) { + (*Attributes & UnchangedAttributes)) + { return EFI_INVALID_PARAMETER; } + // // If firmware volume is locked, no status bit can be updated // @@ -403,6 +410,7 @@ FvbSetVolumeAttributes ( return EFI_ACCESS_DENIED; } } + // // Test read disable // @@ -411,6 +419,7 @@ FvbSetVolumeAttributes ( return EFI_INVALID_PARAMETER; } } + // // Test read enable // @@ -419,6 +428,7 @@ FvbSetVolumeAttributes ( return EFI_INVALID_PARAMETER; } } + // // Test write disable // @@ -427,6 +437,7 @@ FvbSetVolumeAttributes ( return EFI_INVALID_PARAMETER; } } + // // Test write enable // @@ -435,6 +446,7 @@ FvbSetVolumeAttributes ( return EFI_INVALID_PARAMETER; } } + // // Test lock // @@ -457,9 +469,10 @@ FvbSetVolumeAttributes ( EFI_STATUS EFIAPI FvbProtocolGetPhysicalAddress ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, - OUT EFI_PHYSICAL_ADDRESS *Address + IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, + OUT EFI_PHYSICAL_ADDRESS *Address ) + /*++ Routine Description: @@ -476,22 +489,26 @@ FvbProtocolGetPhysicalAddress ( --*/ { - EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; + EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; FvbDevice = FVB_DEVICE_FROM_THIS (This); - return FvbGetPhysicalAddress (FvbDevice->Instance, Address, - mFvbModuleGlobal); + return FvbGetPhysicalAddress ( + FvbDevice->Instance, + Address, + mFvbModuleGlobal + ); } EFI_STATUS EFIAPI FvbProtocolGetBlockSize ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, - IN CONST EFI_LBA Lba, - OUT UINTN *BlockSize, - OUT UINTN *NumOfBlocks + IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, + IN CONST EFI_LBA Lba, + OUT UINTN *BlockSize, + OUT UINTN *NumOfBlocks ) + /*++ Routine Description: @@ -513,26 +530,27 @@ FvbProtocolGetBlockSize ( --*/ { - EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; + EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; FvbDevice = FVB_DEVICE_FROM_THIS (This); return FvbGetLbaAddress ( - FvbDevice->Instance, - Lba, - NULL, - BlockSize, - NumOfBlocks, - mFvbModuleGlobal - ); + FvbDevice->Instance, + Lba, + NULL, + BlockSize, + NumOfBlocks, + mFvbModuleGlobal + ); } EFI_STATUS EFIAPI FvbProtocolGetAttributes ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, - OUT EFI_FVB_ATTRIBUTES_2 *Attributes + IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, + OUT EFI_FVB_ATTRIBUTES_2 *Attributes ) + /*++ Routine Description: @@ -547,20 +565,24 @@ FvbProtocolGetAttributes ( --*/ { - EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; + EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; FvbDevice = FVB_DEVICE_FROM_THIS (This); - return FvbGetVolumeAttributes (FvbDevice->Instance, Attributes, - mFvbModuleGlobal); + return FvbGetVolumeAttributes ( + FvbDevice->Instance, + Attributes, + mFvbModuleGlobal + ); } EFI_STATUS EFIAPI FvbProtocolSetAttributes ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, - IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes + IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, + IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes ) + /*++ Routine Description: @@ -575,20 +597,24 @@ FvbProtocolSetAttributes ( --*/ { - EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; + EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; FvbDevice = FVB_DEVICE_FROM_THIS (This); - return FvbSetVolumeAttributes (FvbDevice->Instance, Attributes, - mFvbModuleGlobal); + return FvbSetVolumeAttributes ( + FvbDevice->Instance, + Attributes, + mFvbModuleGlobal + ); } EFI_STATUS EFIAPI FvbProtocolEraseBlocks ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, + IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, ... ) + /*++ Routine Description: @@ -615,18 +641,21 @@ FvbProtocolEraseBlocks ( --*/ { - EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; - EFI_FW_VOL_INSTANCE *FwhInstance; - UINTN NumOfBlocks; - VA_LIST args; - EFI_LBA StartingLba; - UINTN NumOfLba; - EFI_STATUS Status; + EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; + EFI_FW_VOL_INSTANCE *FwhInstance; + UINTN NumOfBlocks; + VA_LIST args; + EFI_LBA StartingLba; + UINTN NumOfLba; + EFI_STATUS Status; FvbDevice = FVB_DEVICE_FROM_THIS (This); - Status = GetFvbInstance (FvbDevice->Instance, mFvbModuleGlobal, - &FwhInstance); + Status = GetFvbInstance ( + FvbDevice->Instance, + mFvbModuleGlobal, + &FwhInstance + ); ASSERT_EFI_ERROR (Status); NumOfBlocks = FwhInstance->NumOfBlocks; @@ -671,7 +700,6 @@ FvbProtocolEraseBlocks ( StartingLba++; NumOfLba--; } - } while (1); VA_END (args); @@ -682,12 +710,13 @@ FvbProtocolEraseBlocks ( EFI_STATUS EFIAPI FvbProtocolWrite ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, - IN EFI_LBA Lba, - IN UINTN Offset, - IN OUT UINTN *NumBytes, - IN UINT8 *Buffer + IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Offset, + IN OUT UINTN *NumBytes, + IN UINT8 *Buffer ) + /*++ Routine Description: @@ -720,19 +749,24 @@ FvbProtocolWrite ( --*/ { - return QemuFlashWrite ((EFI_LBA)Lba, (UINTN)Offset, NumBytes, - (UINT8 *)Buffer); + return QemuFlashWrite ( + (EFI_LBA)Lba, + (UINTN)Offset, + NumBytes, + (UINT8 *)Buffer + ); } EFI_STATUS EFIAPI FvbProtocolRead ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, - IN CONST EFI_LBA Lba, - IN CONST UINTN Offset, - IN OUT UINTN *NumBytes, - IN UINT8 *Buffer + IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, + IN CONST EFI_LBA Lba, + IN CONST UINTN Offset, + IN OUT UINTN *NumBytes, + IN UINT8 *Buffer ) + /*++ Routine Description: @@ -765,14 +799,19 @@ FvbProtocolRead ( --*/ { - return QemuFlashRead ((EFI_LBA)Lba, (UINTN)Offset, NumBytes, - (UINT8 *)Buffer); + return QemuFlashRead ( + (EFI_LBA)Lba, + (UINTN)Offset, + NumBytes, + (UINT8 *)Buffer + ); } EFI_STATUS ValidateFvHeader ( - EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader + EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader ) + /*++ Routine Description: @@ -788,7 +827,7 @@ ValidateFvHeader ( --*/ { - UINT16 Checksum; + UINT16 Checksum; // // Verify the header revision, header signature, length @@ -797,9 +836,10 @@ ValidateFvHeader ( // if ((FwVolHeader->Revision != EFI_FVH_REVISION) || (FwVolHeader->Signature != EFI_FVH_SIGNATURE) || - (FwVolHeader->FvLength == ((UINTN) -1)) || + (FwVolHeader->FvLength == ((UINTN)-1)) || ((FwVolHeader->HeaderLength & 0x01) != 0) - ) { + ) + { return EFI_NOT_FOUND; } @@ -807,16 +847,23 @@ ValidateFvHeader ( // Verify the header checksum // - Checksum = CalculateSum16 ((UINT16 *) FwVolHeader, - FwVolHeader->HeaderLength); + Checksum = CalculateSum16 ( + (UINT16 *)FwVolHeader, + FwVolHeader->HeaderLength + ); if (Checksum != 0) { - UINT16 Expected; + UINT16 Expected; Expected = - (UINT16) (((UINTN) FwVolHeader->Checksum + 0x10000 - Checksum) & 0xffff); - - DEBUG ((DEBUG_INFO, "FV@%p Checksum is 0x%x, expected 0x%x\n", - FwVolHeader, FwVolHeader->Checksum, Expected)); + (UINT16)(((UINTN)FwVolHeader->Checksum + 0x10000 - Checksum) & 0xffff); + + DEBUG (( + DEBUG_INFO, + "FV@%p Checksum is 0x%x, expected 0x%x\n", + FwVolHeader, + FwVolHeader->Checksum, + Expected + )); return EFI_NOT_FOUND; } @@ -829,16 +876,16 @@ InitializeVariableFvHeader ( VOID ) { - EFI_STATUS Status; - EFI_FIRMWARE_VOLUME_HEADER *GoodFwVolHeader; - EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader; - UINTN Length; - UINTN WriteLength; - UINTN BlockSize; + EFI_STATUS Status; + EFI_FIRMWARE_VOLUME_HEADER *GoodFwVolHeader; + EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader; + UINTN Length; + UINTN WriteLength; + UINTN BlockSize; FwVolHeader = - (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) - PcdGet32 (PcdOvmfFlashNvStorageVariableBase); + (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN) + PcdGet32 (PcdOvmfFlashNvStorageVariableBase); Length = (FixedPcdGet32 (PcdFlashNvStorageVariableSize) + @@ -848,19 +895,23 @@ InitializeVariableFvHeader ( BlockSize = PcdGet32 (PcdOvmfFirmwareBlockSize); - Status = ValidateFvHeader (FwVolHeader); + Status = ValidateFvHeader (FwVolHeader); if (!EFI_ERROR (Status)) { - if (FwVolHeader->FvLength != Length || - FwVolHeader->BlockMap[0].Length != BlockSize) { + if ((FwVolHeader->FvLength != Length) || + (FwVolHeader->BlockMap[0].Length != BlockSize)) + { Status = EFI_VOLUME_CORRUPTED; } } + if (EFI_ERROR (Status)) { - UINTN Offset; - UINTN Start; + UINTN Offset; + UINTN Start; - DEBUG ((DEBUG_INFO, - "Variable FV header is not valid. It will be reinitialized.\n")); + DEBUG (( + DEBUG_INFO, + "Variable FV header is not valid. It will be reinitialized.\n" + )); // // Get FvbInfo to provide in FwhInstance. @@ -868,7 +919,7 @@ InitializeVariableFvHeader ( Status = GetFvbInfo (Length, &GoodFwVolHeader); ASSERT (!EFI_ERROR (Status)); - Start = (UINTN)(UINT8*) FwVolHeader - PcdGet32 (PcdOvmfFdBaseAddress); + Start = (UINTN)(UINT8 *)FwVolHeader - PcdGet32 (PcdOvmfFdBaseAddress); ASSERT (Start % BlockSize == 0 && Length % BlockSize == 0); ASSERT (GoodFwVolHeader->HeaderLength <= BlockSize); @@ -884,11 +935,12 @@ InitializeVariableFvHeader ( // Write good FV header // WriteLength = GoodFwVolHeader->HeaderLength; - Status = QemuFlashWrite ( - Start / BlockSize, - 0, - &WriteLength, - (UINT8 *) GoodFwVolHeader); + Status = QemuFlashWrite ( + Start / BlockSize, + 0, + &WriteLength, + (UINT8 *)GoodFwVolHeader + ); ASSERT_EFI_ERROR (Status); ASSERT (WriteLength == GoodFwVolHeader->HeaderLength); } @@ -899,9 +951,10 @@ InitializeVariableFvHeader ( EFI_STATUS EFIAPI FvbInitialize ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) + /*++ Routine Description: @@ -913,24 +966,26 @@ FvbInitialize ( --*/ { - EFI_STATUS Status; - EFI_FW_VOL_INSTANCE *FwhInstance; - EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader; - UINT32 BufferSize; - EFI_FV_BLOCK_MAP_ENTRY *PtrBlockMapEntry; - EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; - UINT32 MaxLbaSize; - EFI_PHYSICAL_ADDRESS BaseAddress; - UINTN Length; - UINTN NumOfBlocks; - RETURN_STATUS PcdStatus; + EFI_STATUS Status; + EFI_FW_VOL_INSTANCE *FwhInstance; + EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader; + UINT32 BufferSize; + EFI_FV_BLOCK_MAP_ENTRY *PtrBlockMapEntry; + EFI_FW_VOL_BLOCK_DEVICE *FvbDevice; + UINT32 MaxLbaSize; + EFI_PHYSICAL_ADDRESS BaseAddress; + UINTN Length; + UINTN NumOfBlocks; + RETURN_STATUS PcdStatus; if (EFI_ERROR (QemuFlashInitialize ())) { // // Return an error so image will be unloaded // - DEBUG ((DEBUG_INFO, - "QEMU flash was not detected. Writable FVB is not being installed.\n")); + DEBUG (( + DEBUG_INFO, + "QEMU flash was not detected. Writable FVB is not being installed.\n" + )); return EFI_WRITE_PROTECTED; } @@ -941,17 +996,19 @@ FvbInitialize ( mFvbModuleGlobal = AllocateRuntimePool (sizeof (ESAL_FWB_GLOBAL)); ASSERT (mFvbModuleGlobal != NULL); - BaseAddress = (UINTN) PcdGet32 (PcdOvmfFdBaseAddress); - Length = PcdGet32 (PcdOvmfFirmwareFdSize); + BaseAddress = (UINTN)PcdGet32 (PcdOvmfFdBaseAddress); + Length = PcdGet32 (PcdOvmfFirmwareFdSize); Status = InitializeVariableFvHeader (); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_INFO, - "QEMU Flash: Unable to initialize variable FV header\n")); + DEBUG (( + DEBUG_INFO, + "QEMU Flash: Unable to initialize variable FV header\n" + )); return EFI_WRITE_PROTECTED; } - FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) BaseAddress; + FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)BaseAddress; Status = ValidateFvHeader (FwVolHeader); if (EFI_ERROR (Status)) { // @@ -973,24 +1030,28 @@ FvbInitialize ( FwhInstance = mFvbModuleGlobal->FvInstance; - mFvbModuleGlobal->NumFv = 0; - MaxLbaSize = 0; + mFvbModuleGlobal->NumFv = 0; + MaxLbaSize = 0; FwVolHeader = - (EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) - PcdGet32 (PcdOvmfFlashNvStorageVariableBase); + (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN) + PcdGet32 (PcdOvmfFlashNvStorageVariableBase); - FwhInstance->FvBase = (UINTN) BaseAddress; + FwhInstance->FvBase = (UINTN)BaseAddress; - CopyMem ((UINTN *) &(FwhInstance->VolumeHeader), (UINTN *) FwVolHeader, - FwVolHeader->HeaderLength); + CopyMem ( + (UINTN *)&(FwhInstance->VolumeHeader), + (UINTN *)FwVolHeader, + FwVolHeader->HeaderLength + ); FwVolHeader = &(FwhInstance->VolumeHeader); NumOfBlocks = 0; for (PtrBlockMapEntry = FwVolHeader->BlockMap; PtrBlockMapEntry->NumBlocks != 0; - PtrBlockMapEntry++) { + PtrBlockMapEntry++) + { // // Get the maximum size of a block. // @@ -1021,22 +1082,26 @@ FvbInitialize ( // Set up the devicepath // if (FwVolHeader->ExtHeaderOffset == 0) { - FV_MEMMAP_DEVICE_PATH *FvMemmapDevicePath; + FV_MEMMAP_DEVICE_PATH *FvMemmapDevicePath; // // FV does not contains extension header, then produce MEMMAP_DEVICE_PATH // - FvMemmapDevicePath = AllocateCopyPool (sizeof (FV_MEMMAP_DEVICE_PATH), - &mFvMemmapDevicePathTemplate); + FvMemmapDevicePath = AllocateCopyPool ( + sizeof (FV_MEMMAP_DEVICE_PATH), + &mFvMemmapDevicePathTemplate + ); FvMemmapDevicePath->MemMapDevPath.StartingAddress = BaseAddress; FvMemmapDevicePath->MemMapDevPath.EndingAddress = BaseAddress + FwVolHeader->FvLength - 1; FvbDevice->DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)FvMemmapDevicePath; } else { - FV_PIWG_DEVICE_PATH *FvPiwgDevicePath; + FV_PIWG_DEVICE_PATH *FvPiwgDevicePath; - FvPiwgDevicePath = AllocateCopyPool (sizeof (FV_PIWG_DEVICE_PATH), - &mFvPIWGDevicePathTemplate); + FvPiwgDevicePath = AllocateCopyPool ( + sizeof (FV_PIWG_DEVICE_PATH), + &mFvPIWGDevicePathTemplate + ); CopyGuid ( &FvPiwgDevicePath->FvDevPath.FvName, (GUID *)(UINTN)(BaseAddress + FwVolHeader->ExtHeaderOffset) @@ -1054,10 +1119,10 @@ FvbInitialize ( SetPcdFlashNvStorageBaseAddresses (); FwhInstance = (EFI_FW_VOL_INSTANCE *) - ( - (UINTN) ((UINT8 *) FwhInstance) + FwVolHeader->HeaderLength + - (sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER)) - ); + ( + (UINTN)((UINT8 *)FwhInstance) + FwVolHeader->HeaderLength + + (sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER)) + ); // // Module type specific hook. diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.h b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.h index d064aee6ef..639ad0471c 100644 --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.h +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.h @@ -18,32 +18,32 @@ #define _FW_BLOCK_SERVICE_H typedef struct { - UINTN FvBase; - UINTN NumOfBlocks; - EFI_FIRMWARE_VOLUME_HEADER VolumeHeader; + UINTN FvBase; + UINTN NumOfBlocks; + EFI_FIRMWARE_VOLUME_HEADER VolumeHeader; } EFI_FW_VOL_INSTANCE; typedef struct { - UINT32 NumFv; - EFI_FW_VOL_INSTANCE *FvInstance; + UINT32 NumFv; + EFI_FW_VOL_INSTANCE *FvInstance; } ESAL_FWB_GLOBAL; -extern ESAL_FWB_GLOBAL *mFvbModuleGlobal; +extern ESAL_FWB_GLOBAL *mFvbModuleGlobal; // // Fvb Protocol instance data // -#define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, \ +#define FVB_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE,\ FwVolBlockInstance, FVB_DEVICE_SIGNATURE) -#define FVB_EXTEND_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE, \ +#define FVB_EXTEND_DEVICE_FROM_THIS(a) CR (a, EFI_FW_VOL_BLOCK_DEVICE,\ FvbExtension, FVB_DEVICE_SIGNATURE) -#define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N') +#define FVB_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'V', 'B', 'N') typedef struct { - MEDIA_FW_VOL_DEVICE_PATH FvDevPath; - EFI_DEVICE_PATH_PROTOCOL EndDevPath; + MEDIA_FW_VOL_DEVICE_PATH FvDevPath; + EFI_DEVICE_PATH_PROTOCOL EndDevPath; } FV_PIWG_DEVICE_PATH; typedef struct { @@ -52,62 +52,61 @@ typedef struct { } FV_MEMMAP_DEVICE_PATH; typedef struct { - UINTN Signature; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - UINTN Instance; - EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance; + UINTN Signature; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + UINTN Instance; + EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL FwVolBlockInstance; } EFI_FW_VOL_BLOCK_DEVICE; EFI_STATUS GetFvbInfo ( - IN UINT64 FvLength, - OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo + IN UINT64 FvLength, + OUT EFI_FIRMWARE_VOLUME_HEADER **FvbInfo ); EFI_STATUS FvbSetVolumeAttributes ( - IN UINTN Instance, - IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes, - IN ESAL_FWB_GLOBAL *Global + IN UINTN Instance, + IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes, + IN ESAL_FWB_GLOBAL *Global ); EFI_STATUS FvbGetVolumeAttributes ( - IN UINTN Instance, - OUT EFI_FVB_ATTRIBUTES_2 *Attributes, - IN ESAL_FWB_GLOBAL *Global + IN UINTN Instance, + OUT EFI_FVB_ATTRIBUTES_2 *Attributes, + IN ESAL_FWB_GLOBAL *Global ); EFI_STATUS FvbGetPhysicalAddress ( - IN UINTN Instance, - OUT EFI_PHYSICAL_ADDRESS *Address, - IN ESAL_FWB_GLOBAL *Global + IN UINTN Instance, + OUT EFI_PHYSICAL_ADDRESS *Address, + IN ESAL_FWB_GLOBAL *Global ); EFI_STATUS EFIAPI FvbInitialize ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ); - VOID EFIAPI FvbClassAddressChangeEvent ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ); EFI_STATUS FvbGetLbaAddress ( - IN UINTN Instance, - IN EFI_LBA Lba, - OUT UINTN *LbaAddress, - OUT UINTN *LbaLength, - OUT UINTN *NumOfBlocks, - IN ESAL_FWB_GLOBAL *Global + IN UINTN Instance, + IN EFI_LBA Lba, + OUT UINTN *LbaAddress, + OUT UINTN *LbaLength, + OUT UINTN *NumOfBlocks, + IN ESAL_FWB_GLOBAL *Global ); // @@ -116,57 +115,57 @@ FvbGetLbaAddress ( EFI_STATUS EFIAPI FvbProtocolGetAttributes ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, - OUT EFI_FVB_ATTRIBUTES_2 *Attributes + IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, + OUT EFI_FVB_ATTRIBUTES_2 *Attributes ); EFI_STATUS EFIAPI FvbProtocolSetAttributes ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, - IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes + IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, + IN OUT EFI_FVB_ATTRIBUTES_2 *Attributes ); EFI_STATUS EFIAPI FvbProtocolGetPhysicalAddress ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, - OUT EFI_PHYSICAL_ADDRESS *Address + IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, + OUT EFI_PHYSICAL_ADDRESS *Address ); EFI_STATUS EFIAPI FvbProtocolGetBlockSize ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, - IN CONST EFI_LBA Lba, - OUT UINTN *BlockSize, - OUT UINTN *NumOfBlocks + IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, + IN CONST EFI_LBA Lba, + OUT UINTN *BlockSize, + OUT UINTN *NumOfBlocks ); EFI_STATUS EFIAPI FvbProtocolRead ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, - IN CONST EFI_LBA Lba, - IN CONST UINTN Offset, - IN OUT UINTN *NumBytes, - IN UINT8 *Buffer + IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, + IN CONST EFI_LBA Lba, + IN CONST UINTN Offset, + IN OUT UINTN *NumBytes, + IN UINT8 *Buffer ); EFI_STATUS EFIAPI FvbProtocolWrite ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, - IN EFI_LBA Lba, - IN UINTN Offset, - IN OUT UINTN *NumBytes, - IN UINT8 *Buffer + IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, + IN EFI_LBA Lba, + IN UINTN Offset, + IN OUT UINTN *NumBytes, + IN UINT8 *Buffer ); EFI_STATUS EFIAPI FvbProtocolEraseBlocks ( - IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, + IN CONST EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *This, ... ); @@ -176,7 +175,7 @@ FvbProtocolEraseBlocks ( // VOID InstallProtocolInterfaces ( - IN EFI_FW_VOL_BLOCK_DEVICE *FvbDevice + IN EFI_FW_VOL_BLOCK_DEVICE *FvbDevice ); VOID @@ -186,8 +185,8 @@ InstallVirtualAddressChangeHandler ( EFI_STATUS MarkIoMemoryRangeForRuntimeAccess ( - IN EFI_PHYSICAL_ADDRESS BaseAddress, - IN UINTN Length + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINTN Length ); VOID diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceDxe.c b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceDxe.c index ab40087a84..61e1f2e196 100644 --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceDxe.c +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceDxe.c @@ -24,12 +24,12 @@ VOID InstallProtocolInterfaces ( - IN EFI_FW_VOL_BLOCK_DEVICE *FvbDevice + IN EFI_FW_VOL_BLOCK_DEVICE *FvbDevice ) { - EFI_STATUS Status; - EFI_HANDLE FwbHandle; - EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *OldFwbInterface; + EFI_STATUS Status; + EFI_HANDLE FwbHandle; + EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *OldFwbInterface; ASSERT (!FeaturePcdGet (PcdSmmSmramRequire)); @@ -37,8 +37,11 @@ InstallProtocolInterfaces ( // Find a handle with a matching device path that has supports FW Block // protocol // - Status = gBS->LocateDevicePath (&gEfiFirmwareVolumeBlockProtocolGuid, - &FvbDevice->DevicePath, &FwbHandle); + Status = gBS->LocateDevicePath ( + &gEfiFirmwareVolumeBlockProtocolGuid, + &FvbDevice->DevicePath, + &FwbHandle + ); if (EFI_ERROR (Status)) { // // LocateDevicePath fails so install a new interface and device path @@ -61,7 +64,7 @@ InstallProtocolInterfaces ( Status = gBS->HandleProtocol ( FwbHandle, &gEfiFirmwareVolumeBlockProtocolGuid, - (VOID**)&OldFwbInterface + (VOID **)&OldFwbInterface ); ASSERT_EFI_ERROR (Status); @@ -81,14 +84,14 @@ InstallProtocolInterfaces ( } } - STATIC VOID EFIAPI FvbVirtualAddressChangeEvent ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) + /*++ Routine Description: @@ -107,39 +110,38 @@ FvbVirtualAddressChangeEvent ( --*/ { - EFI_FW_VOL_INSTANCE *FwhInstance; - UINTN Index; + EFI_FW_VOL_INSTANCE *FwhInstance; + UINTN Index; FwhInstance = mFvbModuleGlobal->FvInstance; - EfiConvertPointer (0x0, (VOID **) &mFvbModuleGlobal->FvInstance); + EfiConvertPointer (0x0, (VOID **)&mFvbModuleGlobal->FvInstance); // // Convert the base address of all the instances // - Index = 0; + Index = 0; while (Index < mFvbModuleGlobal->NumFv) { - EfiConvertPointer (0x0, (VOID **) &FwhInstance->FvBase); + EfiConvertPointer (0x0, (VOID **)&FwhInstance->FvBase); FwhInstance = (EFI_FW_VOL_INSTANCE *) - ( - (UINTN) ((UINT8 *) FwhInstance) + - FwhInstance->VolumeHeader.HeaderLength + - (sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER)) - ); + ( + (UINTN)((UINT8 *)FwhInstance) + + FwhInstance->VolumeHeader.HeaderLength + + (sizeof (EFI_FW_VOL_INSTANCE) - sizeof (EFI_FIRMWARE_VOLUME_HEADER)) + ); Index++; } - EfiConvertPointer (0x0, (VOID **) &mFvbModuleGlobal); + EfiConvertPointer (0x0, (VOID **)&mFvbModuleGlobal); QemuFlashConvertPointers (); } - VOID InstallVirtualAddressChangeHandler ( VOID ) { - EFI_STATUS Status; - EFI_EVENT VirtualAddressChangeEvent; + EFI_STATUS Status; + EFI_EVENT VirtualAddressChangeEvent; Status = gBS->CreateEventEx ( EVT_NOTIFY_SIGNAL, @@ -154,12 +156,12 @@ InstallVirtualAddressChangeHandler ( EFI_STATUS MarkIoMemoryRangeForRuntimeAccess ( - IN EFI_PHYSICAL_ADDRESS BaseAddress, - IN UINTN Length + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINTN Length ) { - EFI_STATUS Status; - EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor; + EFI_STATUS Status; + EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor; // // Mark flash region as runtime memory @@ -221,24 +223,24 @@ SetPcdFlashNvStorageBaseAddresses ( VOID ) { - RETURN_STATUS PcdStatus; + RETURN_STATUS PcdStatus; // // Set several PCD values to point to flash // PcdStatus = PcdSet64S ( - PcdFlashNvStorageVariableBase64, - (UINTN) PcdGet32 (PcdOvmfFlashNvStorageVariableBase) - ); + PcdFlashNvStorageVariableBase64, + (UINTN)PcdGet32 (PcdOvmfFlashNvStorageVariableBase) + ); ASSERT_RETURN_ERROR (PcdStatus); PcdStatus = PcdSet32S ( - PcdFlashNvStorageFtwWorkingBase, - PcdGet32 (PcdOvmfFlashNvStorageFtwWorkingBase) - ); + PcdFlashNvStorageFtwWorkingBase, + PcdGet32 (PcdOvmfFlashNvStorageFtwWorkingBase) + ); ASSERT_RETURN_ERROR (PcdStatus); PcdStatus = PcdSet32S ( - PcdFlashNvStorageFtwSpareBase, - PcdGet32 (PcdOvmfFlashNvStorageFtwSpareBase) - ); + PcdFlashNvStorageFtwSpareBase, + PcdGet32 (PcdOvmfFlashNvStorageFtwSpareBase) + ); ASSERT_RETURN_ERROR (PcdStatus); } diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceSmm.c b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceSmm.c index 544f88e661..19bd5aab7c 100644 --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceSmm.c +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceSmm.c @@ -18,11 +18,11 @@ VOID InstallProtocolInterfaces ( - IN EFI_FW_VOL_BLOCK_DEVICE *FvbDevice + IN EFI_FW_VOL_BLOCK_DEVICE *FvbDevice ) { - EFI_HANDLE FvbHandle; - EFI_STATUS Status; + EFI_HANDLE FvbHandle; + EFI_STATUS Status; ASSERT (FeaturePcdGet (PcdSmmSmramRequire)); @@ -64,8 +64,8 @@ InstallVirtualAddressChangeHandler ( EFI_STATUS MarkIoMemoryRangeForRuntimeAccess ( - IN EFI_PHYSICAL_ADDRESS BaseAddress, - IN UINTN Length + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINTN Length ) { // diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c index d19997032e..54f859de9f 100644 --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c @@ -24,23 +24,21 @@ #define CLEARED_ARRAY_STATUS 0x00 +UINT8 *mFlashBase; -UINT8 *mFlashBase; - -STATIC UINTN mFdBlockSize = 0; -STATIC UINTN mFdBlockCount = 0; +STATIC UINTN mFdBlockSize = 0; +STATIC UINTN mFdBlockCount = 0; STATIC -volatile UINT8* +volatile UINT8 * QemuFlashPtr ( - IN EFI_LBA Lba, - IN UINTN Offset + IN EFI_LBA Lba, + IN UINTN Offset ) { return mFlashBase + ((UINTN)Lba * mFdBlockSize) + Offset; } - /** Determines if the QEMU flash memory device is present. @@ -54,22 +52,23 @@ QemuFlashDetected ( VOID ) { - BOOLEAN FlashDetected; + BOOLEAN FlashDetected; volatile UINT8 *Ptr; - UINTN Offset; - UINT8 OriginalUint8; - UINT8 ProbeUint8; + UINTN Offset; + UINT8 OriginalUint8; + UINT8 ProbeUint8; FlashDetected = FALSE; - Ptr = QemuFlashPtr (0, 0); + Ptr = QemuFlashPtr (0, 0); for (Offset = 0; Offset < mFdBlockSize; Offset++) { - Ptr = QemuFlashPtr (0, Offset); + Ptr = QemuFlashPtr (0, Offset); ProbeUint8 = *Ptr; - if (ProbeUint8 != CLEAR_STATUS_CMD && - ProbeUint8 != READ_STATUS_CMD && - ProbeUint8 != CLEARED_ARRAY_STATUS) { + if ((ProbeUint8 != CLEAR_STATUS_CMD) && + (ProbeUint8 != READ_STATUS_CMD) && + (ProbeUint8 != CLEARED_ARRAY_STATUS)) + { break; } } @@ -91,20 +90,23 @@ QemuFlashDetected ( // the FD appears as ROM and not as FLASH, but report FLASH anyway because // FLASH behavior can be simulated using VMGEXIT. // - DEBUG ((DEBUG_INFO, - "QEMU Flash: SEV-ES enabled, assuming FD behaves as FLASH\n")); + DEBUG (( + DEBUG_INFO, + "QEMU Flash: SEV-ES enabled, assuming FD behaves as FLASH\n" + )); return TRUE; } OriginalUint8 = *Ptr; - *Ptr = CLEAR_STATUS_CMD; - ProbeUint8 = *Ptr; - if (OriginalUint8 != CLEAR_STATUS_CMD && - ProbeUint8 == CLEAR_STATUS_CMD) { + *Ptr = CLEAR_STATUS_CMD; + ProbeUint8 = *Ptr; + if ((OriginalUint8 != CLEAR_STATUS_CMD) && + (ProbeUint8 == CLEAR_STATUS_CMD)) + { DEBUG ((DEBUG_INFO, "QemuFlashDetected => FD behaves as RAM\n")); *Ptr = OriginalUint8; } else { - *Ptr = READ_STATUS_CMD; + *Ptr = READ_STATUS_CMD; ProbeUint8 = *Ptr; if (ProbeUint8 == OriginalUint8) { DEBUG ((DEBUG_INFO, "QemuFlashDetected => FD behaves as ROM\n")); @@ -114,16 +116,18 @@ QemuFlashDetected ( } else if (ProbeUint8 == CLEARED_ARRAY_STATUS) { DEBUG ((DEBUG_INFO, "QemuFlashDetected => FD behaves as FLASH\n")); FlashDetected = TRUE; - *Ptr = READ_ARRAY_CMD; + *Ptr = READ_ARRAY_CMD; } } - DEBUG ((DEBUG_INFO, "QemuFlashDetected => %a\n", - FlashDetected ? "Yes" : "No")); + DEBUG (( + DEBUG_INFO, + "QemuFlashDetected => %a\n", + FlashDetected ? "Yes" : "No" + )); return FlashDetected; } - /** Read from QEMU Flash @@ -136,10 +140,10 @@ QemuFlashDetected ( **/ EFI_STATUS QemuFlashRead ( - IN EFI_LBA Lba, - IN UINTN Offset, - IN UINTN *NumBytes, - IN UINT8 *Buffer + IN EFI_LBA Lba, + IN UINTN Offset, + IN UINTN *NumBytes, + IN UINT8 *Buffer ) { UINT8 *Ptr; @@ -155,14 +159,13 @@ QemuFlashRead ( // // Get flash address // - Ptr = (UINT8*) QemuFlashPtr (Lba, Offset); + Ptr = (UINT8 *)QemuFlashPtr (Lba, Offset); CopyMem (Buffer, Ptr, *NumBytes); return EFI_SUCCESS; } - /** Write to QEMU Flash @@ -175,10 +178,10 @@ QemuFlashRead ( **/ EFI_STATUS QemuFlashWrite ( - IN EFI_LBA Lba, - IN UINTN Offset, - IN UINTN *NumBytes, - IN UINT8 *Buffer + IN EFI_LBA Lba, + IN UINTN Offset, + IN UINTN *NumBytes, + IN UINT8 *Buffer ) { volatile UINT8 *Ptr; @@ -213,7 +216,6 @@ QemuFlashWrite ( return EFI_SUCCESS; } - /** Erase a QEMU Flash block @@ -222,7 +224,7 @@ QemuFlashWrite ( **/ EFI_STATUS QemuFlashEraseBlock ( - IN EFI_LBA Lba + IN EFI_LBA Lba ) { volatile UINT8 *Ptr; @@ -237,7 +239,6 @@ QemuFlashEraseBlock ( return EFI_SUCCESS; } - /** Initializes QEMU flash memory support @@ -250,16 +251,16 @@ QemuFlashInitialize ( VOID ) { - mFlashBase = (UINT8*)(UINTN) PcdGet32 (PcdOvmfFdBaseAddress); + mFlashBase = (UINT8 *)(UINTN)PcdGet32 (PcdOvmfFdBaseAddress); mFdBlockSize = PcdGet32 (PcdOvmfFirmwareBlockSize); - ASSERT(PcdGet32 (PcdOvmfFirmwareFdSize) % mFdBlockSize == 0); + ASSERT (PcdGet32 (PcdOvmfFirmwareFdSize) % mFdBlockSize == 0); mFdBlockCount = PcdGet32 (PcdOvmfFirmwareFdSize) / mFdBlockSize; // // execute module specific hooks before probing the flash // QemuFlashBeforeProbe ( - (EFI_PHYSICAL_ADDRESS)(UINTN) mFlashBase, + (EFI_PHYSICAL_ADDRESS)(UINTN)mFlashBase, mFdBlockSize, mFdBlockCount ); @@ -271,4 +272,3 @@ QemuFlashInitialize ( return EFI_SUCCESS; } - diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.h b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.h index 219d0d6e83..ea895157da 100644 --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.h +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.h @@ -12,7 +12,7 @@ #include -extern UINT8 *mFlashBase; +extern UINT8 *mFlashBase; /** Read from QEMU Flash @@ -26,13 +26,12 @@ extern UINT8 *mFlashBase; **/ EFI_STATUS QemuFlashRead ( - IN EFI_LBA Lba, - IN UINTN Offset, - IN UINTN *NumBytes, - IN UINT8 *Buffer + IN EFI_LBA Lba, + IN UINTN Offset, + IN UINTN *NumBytes, + IN UINT8 *Buffer ); - /** Write to QEMU Flash @@ -45,13 +44,12 @@ QemuFlashRead ( **/ EFI_STATUS QemuFlashWrite ( - IN EFI_LBA Lba, - IN UINTN Offset, - IN UINTN *NumBytes, - IN UINT8 *Buffer + IN EFI_LBA Lba, + IN UINTN Offset, + IN UINTN *NumBytes, + IN UINT8 *Buffer ); - /** Erase a QEMU Flash block @@ -60,10 +58,9 @@ QemuFlashWrite ( **/ EFI_STATUS QemuFlashEraseBlock ( - IN EFI_LBA Lba + IN EFI_LBA Lba ); - /** Initializes QEMU flash memory support @@ -76,7 +73,6 @@ QemuFlashInitialize ( VOID ); - VOID QemuFlashConvertPointers ( VOID @@ -84,9 +80,9 @@ QemuFlashConvertPointers ( VOID QemuFlashBeforeProbe ( - IN EFI_PHYSICAL_ADDRESS BaseAddress, - IN UINTN FdBlockSize, - IN UINTN FdBlockCount + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINTN FdBlockSize, + IN UINTN FdBlockCount ); /** @@ -98,9 +94,8 @@ QemuFlashBeforeProbe ( **/ VOID QemuFlashPtrWrite ( - IN volatile UINT8 *Ptr, - IN UINT8 Value + IN volatile UINT8 *Ptr, + IN UINT8 Value ); #endif - diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashDxe.c b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashDxe.c index 63daa0b55b..9e074c29bb 100644 --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashDxe.c +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashDxe.c @@ -16,7 +16,7 @@ #include "QemuFlash.h" -STATIC EFI_PHYSICAL_ADDRESS mSevEsFlashPhysBase; +STATIC EFI_PHYSICAL_ADDRESS mSevEsFlashPhysBase; VOID QemuFlashConvertPointers ( @@ -24,17 +24,17 @@ QemuFlashConvertPointers ( ) { if (MemEncryptSevEsIsEnabled ()) { - mSevEsFlashPhysBase = (UINTN) mFlashBase; + mSevEsFlashPhysBase = (UINTN)mFlashBase; } - EfiConvertPointer (0x0, (VOID **) &mFlashBase); + EfiConvertPointer (0x0, (VOID **)&mFlashBase); } VOID QemuFlashBeforeProbe ( - IN EFI_PHYSICAL_ADDRESS BaseAddress, - IN UINTN FdBlockSize, - IN UINTN FdBlockCount + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINTN FdBlockSize, + IN UINTN FdBlockCount ) { // @@ -51,8 +51,8 @@ QemuFlashBeforeProbe ( **/ VOID QemuFlashPtrWrite ( - IN volatile UINT8 *Ptr, - IN UINT8 Value + IN volatile UINT8 *Ptr, + IN UINT8 Value ) { if (MemEncryptSevEsIsEnabled ()) { @@ -62,7 +62,7 @@ QemuFlashPtrWrite ( BOOLEAN InterruptState; Msr.GhcbPhysicalAddress = AsmReadMsr64 (MSR_SEV_ES_GHCB); - Ghcb = Msr.Ghcb; + Ghcb = Msr.Ghcb; // // The MMIO write needs to be to the physical address of the flash pointer. @@ -70,7 +70,7 @@ QemuFlashPtrWrite ( // account for a non-identity mapped VA after SetVirtualAddressMap(). // if (mSevEsFlashPhysBase == 0) { - PhysAddr = (UINTN) Ptr; + PhysAddr = (UINTN)Ptr; } else { PhysAddr = mSevEsFlashPhysBase + (Ptr - mFlashBase); } @@ -83,8 +83,8 @@ QemuFlashPtrWrite ( // to perform the update. // VmgInit (Ghcb, &InterruptState); - Ghcb->SharedBuffer[0] = Value; - Ghcb->SaveArea.SwScratch = (UINT64) (UINTN) Ghcb->SharedBuffer; + Ghcb->SharedBuffer[0] = Value; + Ghcb->SaveArea.SwScratch = (UINT64)(UINTN)Ghcb->SharedBuffer; VmgSetOffsetValid (Ghcb, GhcbSwScratch); VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, PhysAddr, 1); VmgDone (Ghcb, InterruptState); diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashSmm.c b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashSmm.c index ea75b489c7..bfaabdb5de 100644 --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashSmm.c +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashSmm.c @@ -16,12 +16,12 @@ VOID QemuFlashBeforeProbe ( - IN EFI_PHYSICAL_ADDRESS BaseAddress, - IN UINTN FdBlockSize, - IN UINTN FdBlockCount + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINTN FdBlockSize, + IN UINTN FdBlockCount ) { - EFI_STATUS Status; + EFI_STATUS Status; ASSERT (FeaturePcdGet (PcdSmmSmramRequire)); @@ -55,8 +55,8 @@ QemuFlashBeforeProbe ( **/ VOID QemuFlashPtrWrite ( - IN volatile UINT8 *Ptr, - IN UINT8 Value + IN volatile UINT8 *Ptr, + IN UINT8 Value ) { *Ptr = Value; diff --git a/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.c b/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.c index 6832d563bc..d4f3cd9225 100644 --- a/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.c +++ b/OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.c @@ -39,29 +39,29 @@ typedef enum { } KERNEL_BLOB_TYPE; typedef struct { - CONST CHAR16 Name[8]; + CONST CHAR16 Name[8]; struct { - FIRMWARE_CONFIG_ITEM CONST SizeKey; - FIRMWARE_CONFIG_ITEM CONST DataKey; - UINT32 Size; + FIRMWARE_CONFIG_ITEM CONST SizeKey; + FIRMWARE_CONFIG_ITEM CONST DataKey; + UINT32 Size; } FwCfgItem[2]; - UINT32 Size; - UINT8 *Data; + UINT32 Size; + UINT8 *Data; } KERNEL_BLOB; -STATIC KERNEL_BLOB mKernelBlob[KernelBlobTypeMax] = { +STATIC KERNEL_BLOB mKernelBlob[KernelBlobTypeMax] = { { L"kernel", { { QemuFwCfgItemKernelSetupSize, QemuFwCfgItemKernelSetupData, }, { QemuFwCfgItemKernelSize, QemuFwCfgItemKernelData, }, } - }, { + }, { L"initrd", { { QemuFwCfgItemInitrdSize, QemuFwCfgItemInitrdData, }, } - }, { + }, { L"cmdline", { { QemuFwCfgItemCommandLineSize, QemuFwCfgItemCommandLineData, }, @@ -69,39 +69,39 @@ STATIC KERNEL_BLOB mKernelBlob[KernelBlobTypeMax] = { } }; -STATIC UINT64 mTotalBlobBytes; +STATIC UINT64 mTotalBlobBytes; // // Device path for the handle that incorporates our "EFI stub filesystem". // #pragma pack (1) typedef struct { - VENDOR_DEVICE_PATH VenMediaNode; - EFI_DEVICE_PATH_PROTOCOL EndNode; + VENDOR_DEVICE_PATH VenMediaNode; + EFI_DEVICE_PATH_PROTOCOL EndNode; } SINGLE_VENMEDIA_NODE_DEVPATH; #pragma pack () -STATIC CONST SINGLE_VENMEDIA_NODE_DEVPATH mFileSystemDevicePath = { +STATIC CONST SINGLE_VENMEDIA_NODE_DEVPATH mFileSystemDevicePath = { { { MEDIA_DEVICE_PATH, MEDIA_VENDOR_DP, - { sizeof (VENDOR_DEVICE_PATH) } + { sizeof (VENDOR_DEVICE_PATH) } }, QEMU_KERNEL_LOADER_FS_MEDIA_GUID - }, { + }, { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { sizeof (EFI_DEVICE_PATH_PROTOCOL) } } }; -STATIC CONST SINGLE_VENMEDIA_NODE_DEVPATH mInitrdDevicePath = { +STATIC CONST SINGLE_VENMEDIA_NODE_DEVPATH mInitrdDevicePath = { { { MEDIA_DEVICE_PATH, MEDIA_VENDOR_DP, - { sizeof (VENDOR_DEVICE_PATH) } + { sizeof (VENDOR_DEVICE_PATH) } }, LINUX_EFI_INITRD_MEDIA_GUID - }, { + }, { END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { sizeof (EFI_DEVICE_PATH_PROTOCOL) } } @@ -110,21 +110,21 @@ STATIC CONST SINGLE_VENMEDIA_NODE_DEVPATH mInitrdDevicePath = { // // The "file in the EFI stub filesystem" abstraction. // -STATIC EFI_TIME mInitTime; +STATIC EFI_TIME mInitTime; -#define STUB_FILE_SIG SIGNATURE_64 ('S', 'T', 'U', 'B', 'F', 'I', 'L', 'E') +#define STUB_FILE_SIG SIGNATURE_64 ('S', 'T', 'U', 'B', 'F', 'I', 'L', 'E') typedef struct { - UINT64 Signature; // Carries STUB_FILE_SIG. + UINT64 Signature; // Carries STUB_FILE_SIG. - KERNEL_BLOB_TYPE BlobType; // Index into mKernelBlob. KernelBlobTypeMax - // denotes the root directory of the filesystem. + KERNEL_BLOB_TYPE BlobType; // Index into mKernelBlob. KernelBlobTypeMax + // denotes the root directory of the filesystem. - UINT64 Position; // Byte position for regular files; - // next directory entry to return for the root - // directory. + UINT64 Position; // Byte position for regular files; + // next directory entry to return for the root + // directory. - EFI_FILE_PROTOCOL File; // Standard protocol interface. + EFI_FILE_PROTOCOL File; // Standard protocol interface. } STUB_FILE; #define STUB_FILE_FROM_FILE(FilePointer) \ @@ -178,11 +178,11 @@ STATIC EFI_STATUS EFIAPI StubFileOpen ( - IN EFI_FILE_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **NewHandle, - IN CHAR16 *FileName, - IN UINT64 OpenMode, - IN UINT64 Attributes + IN EFI_FILE_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **NewHandle, + IN CHAR16 *FileName, + IN UINT64 OpenMode, + IN UINT64 Attributes ); /** @@ -197,14 +197,13 @@ STATIC EFI_STATUS EFIAPI StubFileClose ( - IN EFI_FILE_PROTOCOL *This + IN EFI_FILE_PROTOCOL *This ) { FreePool (STUB_FILE_FROM_FILE (This)); return EFI_SUCCESS; } - /** Close and delete the file handle. @@ -221,14 +220,13 @@ STATIC EFI_STATUS EFIAPI StubFileDelete ( - IN EFI_FILE_PROTOCOL *This + IN EFI_FILE_PROTOCOL *This ) { FreePool (STUB_FILE_FROM_FILE (This)); return EFI_WARN_DELETE_FAILURE; } - /** Helper function that formats an EFI_FILE_INFO structure into the user-allocated buffer, for any valid KERNEL_BLOB_TYPE value (including @@ -260,19 +258,19 @@ StubFileDelete ( STATIC EFI_STATUS ConvertKernelBlobTypeToFileInfo ( - IN KERNEL_BLOB_TYPE BlobType, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN KERNEL_BLOB_TYPE BlobType, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { CONST CHAR16 *Name; UINT64 FileSize; UINT64 Attribute; - UINTN NameSize; - UINTN FileInfoSize; - EFI_FILE_INFO *FileInfo; - UINTN OriginalBufferSize; + UINTN NameSize; + UINTN FileInfoSize; + EFI_FILE_INFO *FileInfo; + UINTN OriginalBufferSize; if (BlobType == KernelBlobTypeMax) { // @@ -282,7 +280,7 @@ ConvertKernelBlobTypeToFileInfo ( FileSize = KernelBlobTypeMax; Attribute = EFI_FILE_READ_ONLY | EFI_FILE_DIRECTORY; } else { - CONST KERNEL_BLOB *Blob; + CONST KERNEL_BLOB *Blob; Blob = &mKernelBlob[BlobType]; Name = Blob->Name; @@ -290,7 +288,7 @@ ConvertKernelBlobTypeToFileInfo ( Attribute = EFI_FILE_READ_ONLY; } - NameSize = (StrLen(Name) + 1) * 2; + NameSize = (StrLen (Name) + 1) * 2; FileInfoSize = OFFSET_OF (EFI_FILE_INFO, FileName) + NameSize; ASSERT (FileInfoSize >= sizeof *FileInfo); @@ -306,15 +304,14 @@ ConvertKernelBlobTypeToFileInfo ( FileInfo->PhysicalSize = FileSize; FileInfo->Attribute = Attribute; - CopyMem (&FileInfo->CreateTime, &mInitTime, sizeof mInitTime); - CopyMem (&FileInfo->LastAccessTime, &mInitTime, sizeof mInitTime); + CopyMem (&FileInfo->CreateTime, &mInitTime, sizeof mInitTime); + CopyMem (&FileInfo->LastAccessTime, &mInitTime, sizeof mInitTime); CopyMem (&FileInfo->ModificationTime, &mInitTime, sizeof mInitTime); - CopyMem (FileInfo->FileName, Name, NameSize); + CopyMem (FileInfo->FileName, Name, NameSize); return EFI_SUCCESS; } - /** Reads data from a file, or continues scanning a directory. @@ -353,14 +350,14 @@ STATIC EFI_STATUS EFIAPI StubFileRead ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { - STUB_FILE *StubFile; - CONST KERNEL_BLOB *Blob; - UINT64 Left; + STUB_FILE *StubFile; + CONST KERNEL_BLOB *Blob; + UINT64 Left; StubFile = STUB_FILE_FROM_FILE (This); @@ -368,7 +365,7 @@ StubFileRead ( // Scanning the root directory? // if (StubFile->BlobType == KernelBlobTypeMax) { - EFI_STATUS Status; + EFI_STATUS Status; if (StubFile->Position == KernelBlobTypeMax) { // @@ -381,7 +378,8 @@ StubFileRead ( Status = ConvertKernelBlobTypeToFileInfo ( (KERNEL_BLOB_TYPE)StubFile->Position, BufferSize, - Buffer); + Buffer + ); if (EFI_ERROR (Status)) { return Status; } @@ -402,14 +400,15 @@ StubFileRead ( if (*BufferSize > Left) { *BufferSize = (UINTN)Left; } + if (Blob->Data != NULL) { CopyMem (Buffer, Blob->Data + StubFile->Position, *BufferSize); } + StubFile->Position += *BufferSize; return EFI_SUCCESS; } - /** Writes data to a file. @@ -437,12 +436,12 @@ STATIC EFI_STATUS EFIAPI StubFileWrite ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + IN VOID *Buffer ) { - STUB_FILE *StubFile; + STUB_FILE *StubFile; StubFile = STUB_FILE_FROM_FILE (This); return (StubFile->BlobType == KernelBlobTypeMax) ? @@ -450,7 +449,6 @@ StubFileWrite ( EFI_WRITE_PROTECTED; } - /** Returns a file's current position. @@ -469,11 +467,11 @@ STATIC EFI_STATUS EFIAPI StubFileGetPosition ( - IN EFI_FILE_PROTOCOL *This, - OUT UINT64 *Position + IN EFI_FILE_PROTOCOL *This, + OUT UINT64 *Position ) { - STUB_FILE *StubFile; + STUB_FILE *StubFile; StubFile = STUB_FILE_FROM_FILE (This); if (StubFile->BlobType == KernelBlobTypeMax) { @@ -484,7 +482,6 @@ StubFileGetPosition ( return EFI_SUCCESS; } - /** Sets a file's current position. @@ -505,12 +502,12 @@ STATIC EFI_STATUS EFIAPI StubFileSetPosition ( - IN EFI_FILE_PROTOCOL *This, - IN UINT64 Position + IN EFI_FILE_PROTOCOL *This, + IN UINT64 Position ) { - STUB_FILE *StubFile; - KERNEL_BLOB *Blob; + STUB_FILE *StubFile; + KERNEL_BLOB *Blob; StubFile = STUB_FILE_FROM_FILE (This); @@ -522,6 +519,7 @@ StubFileSetPosition ( StubFile->Position = 0; return EFI_SUCCESS; } + return EFI_UNSUPPORTED; } @@ -540,10 +538,10 @@ StubFileSetPosition ( // StubFile->Position = Position; } + return EFI_SUCCESS; } - /** Returns information about a file. @@ -586,26 +584,29 @@ STATIC EFI_STATUS EFIAPI StubFileGetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { - CONST STUB_FILE *StubFile; - UINTN OriginalBufferSize; + CONST STUB_FILE *StubFile; + UINTN OriginalBufferSize; StubFile = STUB_FILE_FROM_FILE (This); if (CompareGuid (InformationType, &gEfiFileInfoGuid)) { - return ConvertKernelBlobTypeToFileInfo (StubFile->BlobType, BufferSize, - Buffer); + return ConvertKernelBlobTypeToFileInfo ( + StubFile->BlobType, + BufferSize, + Buffer + ); } OriginalBufferSize = *BufferSize; if (CompareGuid (InformationType, &gEfiFileSystemInfoGuid)) { - EFI_FILE_SYSTEM_INFO *FileSystemInfo; + EFI_FILE_SYSTEM_INFO *FileSystemInfo; *BufferSize = sizeof *FileSystemInfo; if (OriginalBufferSize < *BufferSize) { @@ -624,14 +625,14 @@ StubFileGetInfo ( } if (CompareGuid (InformationType, &gEfiFileSystemVolumeLabelInfoIdGuid)) { - EFI_FILE_SYSTEM_VOLUME_LABEL *FileSystemVolumeLabel; + EFI_FILE_SYSTEM_VOLUME_LABEL *FileSystemVolumeLabel; *BufferSize = sizeof *FileSystemVolumeLabel; if (OriginalBufferSize < *BufferSize) { return EFI_BUFFER_TOO_SMALL; } - FileSystemVolumeLabel = (EFI_FILE_SYSTEM_VOLUME_LABEL *)Buffer; + FileSystemVolumeLabel = (EFI_FILE_SYSTEM_VOLUME_LABEL *)Buffer; FileSystemVolumeLabel->VolumeLabel[0] = L'\0'; return EFI_SUCCESS; @@ -640,7 +641,6 @@ StubFileGetInfo ( return EFI_UNSUPPORTED; } - /** Sets information about a file. @@ -686,16 +686,15 @@ STATIC EFI_STATUS EFIAPI StubFileSetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN UINTN BufferSize, + IN VOID *Buffer ) { return EFI_WRITE_PROTECTED; } - /** Flushes all modified data associated with a file to a device. @@ -714,7 +713,7 @@ STATIC EFI_STATUS EFIAPI StubFileFlush ( - IN EFI_FILE_PROTOCOL *This + IN EFI_FILE_PROTOCOL *This ) { return EFI_WRITE_PROTECTED; @@ -723,7 +722,7 @@ StubFileFlush ( // // External definition of the file protocol template. // -STATIC CONST EFI_FILE_PROTOCOL mEfiFileProtocolTemplate = { +STATIC CONST EFI_FILE_PROTOCOL mEfiFileProtocolTemplate = { EFI_FILE_PROTOCOL_REVISION, // revision 1 StubFileOpen, StubFileClose, @@ -745,16 +744,16 @@ STATIC EFI_STATUS EFIAPI StubFileOpen ( - IN EFI_FILE_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **NewHandle, - IN CHAR16 *FileName, - IN UINT64 OpenMode, - IN UINT64 Attributes + IN EFI_FILE_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **NewHandle, + IN CHAR16 *FileName, + IN UINT64 OpenMode, + IN UINT64 Attributes ) { - CONST STUB_FILE *StubFile; - UINTN BlobType; - STUB_FILE *NewStubFile; + CONST STUB_FILE *StubFile; + UINTN BlobType; + STUB_FILE *NewStubFile; // // We're read-only. @@ -787,6 +786,7 @@ StubFileOpen ( break; } } + if (BlobType == KernelBlobTypeMax) { return EFI_NOT_FOUND; } @@ -802,14 +802,16 @@ StubFileOpen ( NewStubFile->Signature = STUB_FILE_SIG; NewStubFile->BlobType = (KERNEL_BLOB_TYPE)BlobType; NewStubFile->Position = 0; - CopyMem (&NewStubFile->File, &mEfiFileProtocolTemplate, - sizeof mEfiFileProtocolTemplate); + CopyMem ( + &NewStubFile->File, + &mEfiFileProtocolTemplate, + sizeof mEfiFileProtocolTemplate + ); *NewHandle = &NewStubFile->File; return EFI_SUCCESS; } - // // Protocol member functions for SimpleFileSystem. // @@ -841,11 +843,11 @@ STATIC EFI_STATUS EFIAPI StubFileSystemOpenVolume ( - IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **Root + IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **Root ) { - STUB_FILE *StubFile; + STUB_FILE *StubFile; StubFile = AllocatePool (sizeof *StubFile); if (StubFile == NULL) { @@ -855,14 +857,17 @@ StubFileSystemOpenVolume ( StubFile->Signature = STUB_FILE_SIG; StubFile->BlobType = KernelBlobTypeMax; StubFile->Position = 0; - CopyMem (&StubFile->File, &mEfiFileProtocolTemplate, - sizeof mEfiFileProtocolTemplate); + CopyMem ( + &StubFile->File, + &mEfiFileProtocolTemplate, + sizeof mEfiFileProtocolTemplate + ); *Root = &StubFile->File; return EFI_SUCCESS; } -STATIC CONST EFI_SIMPLE_FILE_SYSTEM_PROTOCOL mFileSystem = { +STATIC CONST EFI_SIMPLE_FILE_SYSTEM_PROTOCOL mFileSystem = { EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION, StubFileSystemOpenVolume }; @@ -871,14 +876,14 @@ STATIC EFI_STATUS EFIAPI InitrdLoadFile2 ( - IN EFI_LOAD_FILE2_PROTOCOL *This, - IN EFI_DEVICE_PATH_PROTOCOL *FilePath, - IN BOOLEAN BootPolicy, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer OPTIONAL + IN EFI_LOAD_FILE2_PROTOCOL *This, + IN EFI_DEVICE_PATH_PROTOCOL *FilePath, + IN BOOLEAN BootPolicy, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer OPTIONAL ) { - CONST KERNEL_BLOB *InitrdBlob = &mKernelBlob[KernelBlobTypeInitrd]; + CONST KERNEL_BLOB *InitrdBlob = &mKernelBlob[KernelBlobTypeInitrd]; ASSERT (InitrdBlob->Size > 0); @@ -886,16 +891,17 @@ InitrdLoadFile2 ( return EFI_UNSUPPORTED; } - if (BufferSize == NULL || !IsDevicePathValid (FilePath, 0)) { + if ((BufferSize == NULL) || !IsDevicePathValid (FilePath, 0)) { return EFI_INVALID_PARAMETER; } - if (FilePath->Type != END_DEVICE_PATH_TYPE || - FilePath->SubType != END_ENTIRE_DEVICE_PATH_SUBTYPE) { + if ((FilePath->Type != END_DEVICE_PATH_TYPE) || + (FilePath->SubType != END_ENTIRE_DEVICE_PATH_SUBTYPE)) + { return EFI_NOT_FOUND; } - if (Buffer == NULL || *BufferSize < InitrdBlob->Size) { + if ((Buffer == NULL) || (*BufferSize < InitrdBlob->Size)) { *BufferSize = InitrdBlob->Size; return EFI_BUFFER_TOO_SMALL; } @@ -906,7 +912,7 @@ InitrdLoadFile2 ( return EFI_SUCCESS; } -STATIC CONST EFI_LOAD_FILE2_PROTOCOL mInitrdLoadFile2 = { +STATIC CONST EFI_LOAD_FILE2_PROTOCOL mInitrdLoadFile2 = { InitrdLoadFile2, }; @@ -929,12 +935,12 @@ STATIC CONST EFI_LOAD_FILE2_PROTOCOL mInitrdLoadFile2 = { STATIC EFI_STATUS FetchBlob ( - IN OUT KERNEL_BLOB *Blob + IN OUT KERNEL_BLOB *Blob ) { - UINT32 Left; - UINTN Idx; - UINT8 *ChunkData; + UINT32 Left; + UINTN Idx; + UINT8 *ChunkData; // // Read blob size. @@ -944,10 +950,12 @@ FetchBlob ( if (Blob->FwCfgItem[Idx].SizeKey == 0) { break; } + QemuFwCfgSelectItem (Blob->FwCfgItem[Idx].SizeKey); Blob->FwCfgItem[Idx].Size = QemuFwCfgRead32 (); - Blob->Size += Blob->FwCfgItem[Idx].Size; + Blob->Size += Blob->FwCfgItem[Idx].Size; } + if (Blob->Size == 0) { return EFI_SUCCESS; } @@ -957,30 +965,47 @@ FetchBlob ( // Blob->Data = AllocatePool (Blob->Size); if (Blob->Data == NULL) { - DEBUG ((DEBUG_ERROR, "%a: failed to allocate %Ld bytes for \"%s\"\n", - __FUNCTION__, (INT64)Blob->Size, Blob->Name)); + DEBUG (( + DEBUG_ERROR, + "%a: failed to allocate %Ld bytes for \"%s\"\n", + __FUNCTION__, + (INT64)Blob->Size, + Blob->Name + )); return EFI_OUT_OF_RESOURCES; } - DEBUG ((DEBUG_INFO, "%a: loading %Ld bytes for \"%s\"\n", __FUNCTION__, - (INT64)Blob->Size, Blob->Name)); + DEBUG (( + DEBUG_INFO, + "%a: loading %Ld bytes for \"%s\"\n", + __FUNCTION__, + (INT64)Blob->Size, + Blob->Name + )); ChunkData = Blob->Data; for (Idx = 0; Idx < ARRAY_SIZE (Blob->FwCfgItem); Idx++) { if (Blob->FwCfgItem[Idx].DataKey == 0) { break; } + QemuFwCfgSelectItem (Blob->FwCfgItem[Idx].DataKey); Left = Blob->FwCfgItem[Idx].Size; while (Left > 0) { - UINT32 Chunk; + UINT32 Chunk; Chunk = (Left < SIZE_1MB) ? Left : SIZE_1MB; QemuFwCfgReadBytes (Chunk, ChunkData + Blob->FwCfgItem[Idx].Size - Left); Left -= Chunk; - DEBUG ((DEBUG_VERBOSE, "%a: %Ld bytes remaining for \"%s\" (%d)\n", - __FUNCTION__, (INT64)Left, Blob->Name, (INT32)Idx)); + DEBUG (( + DEBUG_VERBOSE, + "%a: %Ld bytes remaining for \"%s\" (%d)\n", + __FUNCTION__, + (INT64)Left, + Blob->Name, + (INT32)Idx + )); } ChunkData += Blob->FwCfgItem[Idx].Size; @@ -989,7 +1014,6 @@ FetchBlob ( return EFI_SUCCESS; } - // // The entry point of the feature. // @@ -1010,16 +1034,16 @@ FetchBlob ( EFI_STATUS EFIAPI QemuKernelLoaderFsDxeEntrypoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - UINTN BlobType; - KERNEL_BLOB *CurrentBlob; - KERNEL_BLOB *KernelBlob; - EFI_STATUS Status; - EFI_HANDLE FileSystemHandle; - EFI_HANDLE InitrdLoadFile2Handle; + UINTN BlobType; + KERNEL_BLOB *CurrentBlob; + KERNEL_BLOB *KernelBlob; + EFI_STATUS Status; + EFI_HANDLE FileSystemHandle; + EFI_HANDLE InitrdLoadFile2Handle; if (!QemuFwCfgIsAvailable ()) { return EFI_NOT_FOUND; @@ -1036,10 +1060,11 @@ QemuKernelLoaderFsDxeEntrypoint ( // for (BlobType = 0; BlobType < KernelBlobTypeMax; ++BlobType) { CurrentBlob = &mKernelBlob[BlobType]; - Status = FetchBlob (CurrentBlob); + Status = FetchBlob (CurrentBlob); if (EFI_ERROR (Status)) { goto FreeBlobs; } + Status = VerifyBlob ( CurrentBlob->Name, CurrentBlob->Data, @@ -1048,9 +1073,11 @@ QemuKernelLoaderFsDxeEntrypoint ( if (EFI_ERROR (Status)) { goto FreeBlobs; } + mTotalBlobBytes += CurrentBlob->Size; } - KernelBlob = &mKernelBlob[KernelBlobTypeKernel]; + + KernelBlob = &mKernelBlob[KernelBlobTypeKernel]; if (KernelBlob->Data == NULL) { Status = EFI_NOT_FOUND; @@ -1062,25 +1089,41 @@ QemuKernelLoaderFsDxeEntrypoint ( // it, plus a custom SimpleFileSystem protocol on it. // FileSystemHandle = NULL; - Status = gBS->InstallMultipleProtocolInterfaces (&FileSystemHandle, - &gEfiDevicePathProtocolGuid, &mFileSystemDevicePath, - &gEfiSimpleFileSystemProtocolGuid, &mFileSystem, - NULL); + Status = gBS->InstallMultipleProtocolInterfaces ( + &FileSystemHandle, + &gEfiDevicePathProtocolGuid, + &mFileSystemDevicePath, + &gEfiSimpleFileSystemProtocolGuid, + &mFileSystem, + NULL + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: InstallMultipleProtocolInterfaces(): %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: InstallMultipleProtocolInterfaces(): %r\n", + __FUNCTION__, + Status + )); goto FreeBlobs; } if (KernelBlob[KernelBlobTypeInitrd].Size > 0) { InitrdLoadFile2Handle = NULL; - Status = gBS->InstallMultipleProtocolInterfaces (&InitrdLoadFile2Handle, - &gEfiDevicePathProtocolGuid, &mInitrdDevicePath, - &gEfiLoadFile2ProtocolGuid, &mInitrdLoadFile2, - NULL); + Status = gBS->InstallMultipleProtocolInterfaces ( + &InitrdLoadFile2Handle, + &gEfiDevicePathProtocolGuid, + &mInitrdDevicePath, + &gEfiLoadFile2ProtocolGuid, + &mInitrdLoadFile2, + NULL + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: InstallMultipleProtocolInterfaces(): %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: InstallMultipleProtocolInterfaces(): %r\n", + __FUNCTION__, + Status + )); goto UninstallFileSystemHandle; } } @@ -1088,10 +1131,14 @@ QemuKernelLoaderFsDxeEntrypoint ( return EFI_SUCCESS; UninstallFileSystemHandle: - Status = gBS->UninstallMultipleProtocolInterfaces (FileSystemHandle, - &gEfiDevicePathProtocolGuid, &mFileSystemDevicePath, - &gEfiSimpleFileSystemProtocolGuid, &mFileSystem, - NULL); + Status = gBS->UninstallMultipleProtocolInterfaces ( + FileSystemHandle, + &gEfiDevicePathProtocolGuid, + &mFileSystemDevicePath, + &gEfiSimpleFileSystemProtocolGuid, + &mFileSystem, + NULL + ); ASSERT_EFI_ERROR (Status); FreeBlobs: diff --git a/OvmfPkg/QemuRamfbDxe/QemuRamfb.c b/OvmfPkg/QemuRamfbDxe/QemuRamfb.c index 881315f42d..f5113fbc78 100644 --- a/OvmfPkg/QemuRamfbDxe/QemuRamfb.c +++ b/OvmfPkg/QemuRamfbDxe/QemuRamfb.c @@ -26,22 +26,22 @@ #pragma pack (1) typedef struct RAMFB_CONFIG { - UINT64 Address; - UINT32 FourCC; - UINT32 Flags; - UINT32 Width; - UINT32 Height; - UINT32 Stride; + UINT64 Address; + UINT32 FourCC; + UINT32 Flags; + UINT32 Width; + UINT32 Height; + UINT32 Stride; } RAMFB_CONFIG; #pragma pack () -STATIC EFI_HANDLE mRamfbHandle; -STATIC EFI_HANDLE mGopHandle; -STATIC FRAME_BUFFER_CONFIGURE *mQemuRamfbFrameBufferBltConfigure; -STATIC UINTN mQemuRamfbFrameBufferBltConfigureSize; -STATIC FIRMWARE_CONFIG_ITEM mRamfbFwCfgItem; +STATIC EFI_HANDLE mRamfbHandle; +STATIC EFI_HANDLE mGopHandle; +STATIC FRAME_BUFFER_CONFIGURE *mQemuRamfbFrameBufferBltConfigure; +STATIC UINTN mQemuRamfbFrameBufferBltConfigureSize; +STATIC FIRMWARE_CONFIG_ITEM mRamfbFwCfgItem; -STATIC EFI_GRAPHICS_OUTPUT_MODE_INFORMATION mQemuRamfbModeInfo[] = { +STATIC EFI_GRAPHICS_OUTPUT_MODE_INFORMATION mQemuRamfbModeInfo[] = { { 0, // Version 640, // HorizontalResolution @@ -57,7 +57,7 @@ STATIC EFI_GRAPHICS_OUTPUT_MODE_INFORMATION mQemuRamfbModeInfo[] = { } }; -STATIC EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE mQemuRamfbMode = { +STATIC EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE mQemuRamfbMode = { ARRAY_SIZE (mQemuRamfbModeInfo), // MaxMode 0, // Mode mQemuRamfbModeInfo, // Info @@ -76,17 +76,22 @@ QemuRamfbGraphicsOutputQueryMode ( { EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *ModeInfo; - if (Info == NULL || SizeOfInfo == NULL || - ModeNumber >= mQemuRamfbMode.MaxMode) { + if ((Info == NULL) || (SizeOfInfo == NULL) || + (ModeNumber >= mQemuRamfbMode.MaxMode)) + { return EFI_INVALID_PARAMETER; } + ModeInfo = &mQemuRamfbModeInfo[ModeNumber]; - *Info = AllocateCopyPool (sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION), - ModeInfo); + *Info = AllocateCopyPool ( + sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION), + ModeInfo + ); if (*Info == NULL) { return EFI_OUT_OF_RESOURCES; } + *SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION); return EFI_SUCCESS; @@ -96,8 +101,8 @@ STATIC EFI_STATUS EFIAPI QemuRamfbGraphicsOutputSetMode ( - IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, - IN UINT32 ModeNumber + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, + IN UINT32 ModeNumber ) { EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *ModeInfo; @@ -108,10 +113,16 @@ QemuRamfbGraphicsOutputSetMode ( if (ModeNumber >= mQemuRamfbMode.MaxMode) { return EFI_UNSUPPORTED; } + ModeInfo = &mQemuRamfbModeInfo[ModeNumber]; - DEBUG ((DEBUG_INFO, "Ramfb: SetMode %u (%ux%u)\n", ModeNumber, - ModeInfo->HorizontalResolution, ModeInfo->VerticalResolution)); + DEBUG (( + DEBUG_INFO, + "Ramfb: SetMode %u (%ux%u)\n", + ModeNumber, + ModeInfo->HorizontalResolution, + ModeInfo->VerticalResolution + )); Config.Address = SwapBytes64 (mQemuRamfbMode.FrameBufferBase); Config.FourCC = SwapBytes32 (RAMFB_FORMAT); @@ -121,7 +132,7 @@ QemuRamfbGraphicsOutputSetMode ( Config.Stride = SwapBytes32 (ModeInfo->HorizontalResolution * RAMFB_BPP); Status = FrameBufferBltConfigure ( - (VOID*)(UINTN)mQemuRamfbMode.FrameBufferBase, + (VOID *)(UINTN)mQemuRamfbMode.FrameBufferBase, ModeInfo, mQemuRamfbFrameBufferBltConfigure, &mQemuRamfbFrameBufferBltConfigureSize @@ -131,6 +142,7 @@ QemuRamfbGraphicsOutputSetMode ( if (mQemuRamfbFrameBufferBltConfigure != NULL) { FreePool (mQemuRamfbFrameBufferBltConfigure); } + mQemuRamfbFrameBufferBltConfigure = AllocatePool (mQemuRamfbFrameBufferBltConfigureSize); if (mQemuRamfbFrameBufferBltConfigure == NULL) { @@ -139,12 +151,13 @@ QemuRamfbGraphicsOutputSetMode ( } Status = FrameBufferBltConfigure ( - (VOID*)(UINTN)mQemuRamfbMode.FrameBufferBase, + (VOID *)(UINTN)mQemuRamfbMode.FrameBufferBase, ModeInfo, mQemuRamfbFrameBufferBltConfigure, &mQemuRamfbFrameBufferBltConfigureSize ); } + if (RETURN_ERROR (Status)) { ASSERT (Status == RETURN_UNSUPPORTED); return Status; @@ -173,8 +186,12 @@ QemuRamfbGraphicsOutputSetMode ( 0 // Delta -- ignored ); if (RETURN_ERROR (Status)) { - DEBUG ((DEBUG_WARN, "%a: clearing the screen failed: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_WARN, + "%a: clearing the screen failed: %r\n", + __FUNCTION__, + Status + )); } return EFI_SUCCESS; @@ -184,16 +201,16 @@ STATIC EFI_STATUS EFIAPI QemuRamfbGraphicsOutputBlt ( - IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, - IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL, - IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, - IN UINTN SourceX, - IN UINTN SourceY, - IN UINTN DestinationX, - IN UINTN DestinationY, - IN UINTN Width, - IN UINTN Height, - IN UINTN Delta + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL, + IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, + IN UINTN SourceX, + IN UINTN SourceY, + IN UINTN DestinationX, + IN UINTN DestinationY, + IN UINTN Width, + IN UINTN Height, + IN UINTN Delta ) { return FrameBufferBlt ( @@ -210,7 +227,7 @@ QemuRamfbGraphicsOutputBlt ( ); } -STATIC EFI_GRAPHICS_OUTPUT_PROTOCOL mQemuRamfbGraphicsOutput = { +STATIC EFI_GRAPHICS_OUTPUT_PROTOCOL mQemuRamfbGraphicsOutput = { QemuRamfbGraphicsOutputQueryMode, QemuRamfbGraphicsOutputSetMode, QemuRamfbGraphicsOutputBlt, @@ -220,8 +237,8 @@ STATIC EFI_GRAPHICS_OUTPUT_PROTOCOL mQemuRamfbGraphicsOutput = { EFI_STATUS EFIAPI InitializeQemuRamfb ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_DEVICE_PATH_PROTOCOL *RamfbDevicePath; @@ -244,9 +261,14 @@ InitializeQemuRamfb ( if (EFI_ERROR (Status)) { return EFI_NOT_FOUND; } + if (FwCfgSize != sizeof (RAMFB_CONFIG)) { - DEBUG ((DEBUG_ERROR, "Ramfb: FwCfg size mismatch (expected %lu, got %lu)\n", - (UINT64)sizeof (RAMFB_CONFIG), (UINT64)FwCfgSize)); + DEBUG (( + DEBUG_ERROR, + "Ramfb: FwCfg size mismatch (expected %lu, got %lu)\n", + (UINT64)sizeof (RAMFB_CONFIG), + (UINT64)FwCfgSize + )); return EFI_PROTOCOL_ERROR; } @@ -257,26 +279,37 @@ InitializeQemuRamfb ( mQemuRamfbModeInfo[Index].PixelFormat = PixelBlueGreenRedReserved8BitPerColor; FbSize = RAMFB_BPP * - mQemuRamfbModeInfo[Index].HorizontalResolution * - mQemuRamfbModeInfo[Index].VerticalResolution; + mQemuRamfbModeInfo[Index].HorizontalResolution * + mQemuRamfbModeInfo[Index].VerticalResolution; if (MaxFbSize < FbSize) { MaxFbSize = FbSize; } - DEBUG ((DEBUG_INFO, "Ramfb: Mode %lu: %ux%u, %lu kB\n", (UINT64)Index, + + DEBUG (( + DEBUG_INFO, + "Ramfb: Mode %lu: %ux%u, %lu kB\n", + (UINT64)Index, mQemuRamfbModeInfo[Index].HorizontalResolution, mQemuRamfbModeInfo[Index].VerticalResolution, - (UINT64)(FbSize / 1024))); + (UINT64)(FbSize / 1024) + )); } - Pages = EFI_SIZE_TO_PAGES (MaxFbSize); + Pages = EFI_SIZE_TO_PAGES (MaxFbSize); MaxFbSize = EFI_PAGES_TO_SIZE (Pages); - FbBase = (EFI_PHYSICAL_ADDRESS)(UINTN)AllocateReservedPages (Pages); + FbBase = (EFI_PHYSICAL_ADDRESS)(UINTN)AllocateReservedPages (Pages); if (FbBase == 0) { DEBUG ((DEBUG_ERROR, "Ramfb: memory allocation failed\n")); return EFI_OUT_OF_RESOURCES; } - DEBUG ((DEBUG_INFO, "Ramfb: Framebuffer at 0x%lx, %lu kB, %lu pages\n", - (UINT64)FbBase, (UINT64)(MaxFbSize / 1024), (UINT64)Pages)); + + DEBUG (( + DEBUG_INFO, + "Ramfb: Framebuffer at 0x%lx, %lu kB, %lu pages\n", + (UINT64)FbBase, + (UINT64)(MaxFbSize / 1024), + (UINT64)Pages + )); mQemuRamfbMode.FrameBufferSize = MaxFbSize; mQemuRamfbMode.FrameBufferBase = FbBase; @@ -288,14 +321,18 @@ InitializeQemuRamfb ( // // ramfb vendor devpath // - VendorDeviceNode.Header.Type = HARDWARE_DEVICE_PATH; + VendorDeviceNode.Header.Type = HARDWARE_DEVICE_PATH; VendorDeviceNode.Header.SubType = HW_VENDOR_DP; CopyGuid (&VendorDeviceNode.Guid, &gQemuRamfbGuid); - SetDevicePathNodeLength (&VendorDeviceNode.Header, - sizeof (VENDOR_DEVICE_PATH)); + SetDevicePathNodeLength ( + &VendorDeviceNode.Header, + sizeof (VENDOR_DEVICE_PATH) + ); - RamfbDevicePath = AppendDevicePathNode (NULL, - (EFI_DEVICE_PATH_PROTOCOL *) &VendorDeviceNode); + RamfbDevicePath = AppendDevicePathNode ( + NULL, + (EFI_DEVICE_PATH_PROTOCOL *)&VendorDeviceNode + ); if (RamfbDevicePath == NULL) { Status = EFI_OUT_OF_RESOURCES; goto FreeFramebuffer; @@ -308,31 +345,38 @@ InitializeQemuRamfb ( NULL ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "Ramfb: install Ramfb Vendor DevicePath failed: %r\n", - Status)); + DEBUG (( + DEBUG_ERROR, + "Ramfb: install Ramfb Vendor DevicePath failed: %r\n", + Status + )); goto FreeRamfbDevicePath; } // // gop devpath + protocol // - AcpiDeviceNode.Header.Type = ACPI_DEVICE_PATH; + AcpiDeviceNode.Header.Type = ACPI_DEVICE_PATH; AcpiDeviceNode.Header.SubType = ACPI_ADR_DP; - AcpiDeviceNode.ADR = ACPI_DISPLAY_ADR ( - 1, // DeviceIdScheme - 0, // HeadId - 0, // NonVgaOutput - 1, // BiosCanDetect - 0, // VendorInfo - ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL, // Type - 0, // Port - 0 // Index + AcpiDeviceNode.ADR = ACPI_DISPLAY_ADR ( + 1, // DeviceIdScheme + 0, // HeadId + 0, // NonVgaOutput + 1, // BiosCanDetect + 0, // VendorInfo + ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL, // Type + 0, // Port + 0 // Index + ); + SetDevicePathNodeLength ( + &AcpiDeviceNode.Header, + sizeof (ACPI_ADR_DEVICE_PATH) ); - SetDevicePathNodeLength (&AcpiDeviceNode.Header, - sizeof (ACPI_ADR_DEVICE_PATH)); - GopDevicePath = AppendDevicePathNode (RamfbDevicePath, - (EFI_DEVICE_PATH_PROTOCOL *) &AcpiDeviceNode); + GopDevicePath = AppendDevicePathNode ( + RamfbDevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&AcpiDeviceNode + ); if (GopDevicePath == NULL) { Status = EFI_OUT_OF_RESOURCES; goto FreeRamfbHandle; @@ -347,8 +391,11 @@ InitializeQemuRamfb ( NULL ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "Ramfb: install GOP DevicePath failed: %r\n", - Status)); + DEBUG (( + DEBUG_ERROR, + "Ramfb: install GOP DevicePath failed: %r\n", + Status + )); goto FreeGopDevicePath; } @@ -388,6 +435,6 @@ FreeRamfbHandle: FreeRamfbDevicePath: FreePool (RamfbDevicePath); FreeFramebuffer: - FreePages ((VOID*)(UINTN)mQemuRamfbMode.FrameBufferBase, Pages); + FreePages ((VOID *)(UINTN)mQemuRamfbMode.FrameBufferBase, Pages); return Status; } diff --git a/OvmfPkg/QemuVideoDxe/ComponentName.c b/OvmfPkg/QemuVideoDxe/ComponentName.c index 82922f92c0..7972b9309c 100644 --- a/OvmfPkg/QemuVideoDxe/ComponentName.c +++ b/OvmfPkg/QemuVideoDxe/ComponentName.c @@ -21,21 +21,20 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gQemuVideoComponentNa // // EFI Component Name 2 Protocol // -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gQemuVideoComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) QemuVideoComponentNameGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) QemuVideoComponentNameGetControllerName, +GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gQemuVideoComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)QemuVideoComponentNameGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)QemuVideoComponentNameGetControllerName, "en" }; - -GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mQemuVideoDriverNameTable[] = { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mQemuVideoDriverNameTable[] = { { "eng;en", L"QEMU Video Driver" }, - { NULL , NULL } + { NULL, NULL } }; -GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mQemuVideoControllerNameTable[] = { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mQemuVideoControllerNameTable[] = { { "eng;en", L"QEMU Video PCI Adapter" }, - { NULL , NULL } + { NULL, NULL } }; /** @@ -165,14 +164,14 @@ QemuVideoComponentNameGetDriverName ( EFI_STATUS EFIAPI QemuVideoComponentNameGetControllerName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { - EFI_STATUS Status; + EFI_STATUS Status; // // This is a device driver, so ChildHandle must be NULL. diff --git a/OvmfPkg/QemuVideoDxe/Driver.c b/OvmfPkg/QemuVideoDxe/Driver.c index 85edfcb1d6..d9f0a2464a 100644 --- a/OvmfPkg/QemuVideoDxe/Driver.c +++ b/OvmfPkg/QemuVideoDxe/Driver.c @@ -11,7 +11,7 @@ #include "Qemu.h" #include -EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding = { +EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding = { QemuVideoControllerDriverSupported, QemuVideoControllerDriverStart, QemuVideoControllerDriverStop, @@ -20,77 +20,80 @@ EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding = { NULL }; -QEMU_VIDEO_CARD gQemuVideoCardList[] = { - { - PCI_CLASS_DISPLAY_VGA, - CIRRUS_LOGIC_VENDOR_ID, - CIRRUS_LOGIC_5430_DEVICE_ID, - QEMU_VIDEO_CIRRUS_5430, - L"Cirrus 5430" - },{ - PCI_CLASS_DISPLAY_VGA, - CIRRUS_LOGIC_VENDOR_ID, - CIRRUS_LOGIC_5430_ALTERNATE_DEVICE_ID, - QEMU_VIDEO_CIRRUS_5430, - L"Cirrus 5430" - },{ - PCI_CLASS_DISPLAY_VGA, - CIRRUS_LOGIC_VENDOR_ID, - CIRRUS_LOGIC_5446_DEVICE_ID, - QEMU_VIDEO_CIRRUS_5446, - L"Cirrus 5446" - },{ - PCI_CLASS_DISPLAY_VGA, - 0x1234, - 0x1111, - QEMU_VIDEO_BOCHS_MMIO, - L"QEMU Standard VGA" - },{ - PCI_CLASS_DISPLAY_OTHER, - 0x1234, - 0x1111, - QEMU_VIDEO_BOCHS_MMIO, - L"QEMU Standard VGA (secondary)" - },{ - PCI_CLASS_DISPLAY_VGA, - 0x1b36, - 0x0100, - QEMU_VIDEO_BOCHS, - L"QEMU QXL VGA" - },{ - PCI_CLASS_DISPLAY_VGA, - 0x1af4, - 0x1050, - QEMU_VIDEO_BOCHS_MMIO, - L"QEMU VirtIO VGA" - },{ - PCI_CLASS_DISPLAY_VGA, - 0x15ad, - 0x0405, - QEMU_VIDEO_VMWARE_SVGA, - L"QEMU VMWare SVGA" - },{ - 0 /* end of list */ - } +QEMU_VIDEO_CARD gQemuVideoCardList[] = { + { + PCI_CLASS_DISPLAY_VGA, + CIRRUS_LOGIC_VENDOR_ID, + CIRRUS_LOGIC_5430_DEVICE_ID, + QEMU_VIDEO_CIRRUS_5430, + L"Cirrus 5430" + },{ + PCI_CLASS_DISPLAY_VGA, + CIRRUS_LOGIC_VENDOR_ID, + CIRRUS_LOGIC_5430_ALTERNATE_DEVICE_ID, + QEMU_VIDEO_CIRRUS_5430, + L"Cirrus 5430" + },{ + PCI_CLASS_DISPLAY_VGA, + CIRRUS_LOGIC_VENDOR_ID, + CIRRUS_LOGIC_5446_DEVICE_ID, + QEMU_VIDEO_CIRRUS_5446, + L"Cirrus 5446" + },{ + PCI_CLASS_DISPLAY_VGA, + 0x1234, + 0x1111, + QEMU_VIDEO_BOCHS_MMIO, + L"QEMU Standard VGA" + },{ + PCI_CLASS_DISPLAY_OTHER, + 0x1234, + 0x1111, + QEMU_VIDEO_BOCHS_MMIO, + L"QEMU Standard VGA (secondary)" + },{ + PCI_CLASS_DISPLAY_VGA, + 0x1b36, + 0x0100, + QEMU_VIDEO_BOCHS, + L"QEMU QXL VGA" + },{ + PCI_CLASS_DISPLAY_VGA, + 0x1af4, + 0x1050, + QEMU_VIDEO_BOCHS_MMIO, + L"QEMU VirtIO VGA" + },{ + PCI_CLASS_DISPLAY_VGA, + 0x15ad, + 0x0405, + QEMU_VIDEO_VMWARE_SVGA, + L"QEMU VMWare SVGA" + },{ + 0 /* end of list */ + } }; -static QEMU_VIDEO_CARD* -QemuVideoDetect( - IN UINT8 SubClass, - IN UINT16 VendorId, - IN UINT16 DeviceId +static QEMU_VIDEO_CARD * +QemuVideoDetect ( + IN UINT8 SubClass, + IN UINT16 VendorId, + IN UINT16 DeviceId ) { - UINTN Index = 0; + UINTN Index = 0; while (gQemuVideoCardList[Index].VendorId != 0) { - if (gQemuVideoCardList[Index].SubClass == SubClass && - gQemuVideoCardList[Index].VendorId == VendorId && - gQemuVideoCardList[Index].DeviceId == DeviceId) { + if ((gQemuVideoCardList[Index].SubClass == SubClass) && + (gQemuVideoCardList[Index].VendorId == VendorId) && + (gQemuVideoCardList[Index].DeviceId == DeviceId)) + { return gQemuVideoCardList + Index; } + Index++; } + return NULL; } @@ -108,15 +111,15 @@ QemuVideoDetect( EFI_STATUS EFIAPI QemuVideoControllerDriverSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; - QEMU_VIDEO_CARD *Card; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; + QEMU_VIDEO_CARD *Card; // // Open the PCI I/O Protocol @@ -124,7 +127,7 @@ QemuVideoControllerDriverSupported ( Status = gBS->OpenProtocol ( Controller, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo, + (VOID **)&PciIo, This->DriverBindingHandle, Controller, EFI_OPEN_PROTOCOL_BY_DRIVER @@ -151,7 +154,8 @@ QemuVideoControllerDriverSupported ( if (!IS_PCI_DISPLAY (&Pci)) { goto Done; } - Card = QemuVideoDetect(Pci.Hdr.ClassCode[1], Pci.Hdr.VendorId, Pci.Hdr.DeviceId); + + Card = QemuVideoDetect (Pci.Hdr.ClassCode[1], Pci.Hdr.VendorId, Pci.Hdr.DeviceId); if (Card != NULL) { DEBUG ((DEBUG_INFO, "QemuVideo: %s detected\n", Card->Name)); Status = EFI_SUCCESS; @@ -162,11 +166,11 @@ Done: // Close the PCI I/O Protocol // gBS->CloseProtocol ( - Controller, - &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, - Controller - ); + Controller, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + Controller + ); return Status; } @@ -187,21 +191,21 @@ Done: EFI_STATUS EFIAPI QemuVideoControllerDriverStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_TPL OldTpl; - EFI_STATUS Status; - QEMU_VIDEO_PRIVATE_DATA *Private; - BOOLEAN IsQxl; - EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath; - ACPI_ADR_DEVICE_PATH AcpiDeviceNode; - PCI_TYPE00 Pci; - QEMU_VIDEO_CARD *Card; - EFI_PCI_IO_PROTOCOL *ChildPciIo; - UINT64 SupportedVgaIo; + EFI_TPL OldTpl; + EFI_STATUS Status; + QEMU_VIDEO_PRIVATE_DATA *Private; + BOOLEAN IsQxl; + EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath; + ACPI_ADR_DEVICE_PATH AcpiDeviceNode; + PCI_TYPE00 Pci; + QEMU_VIDEO_CARD *Card; + EFI_PCI_IO_PROTOCOL *ChildPciIo; + UINT64 SupportedVgaIo; OldTpl = gBS->RaiseTPL (TPL_CALLBACK); @@ -217,7 +221,7 @@ QemuVideoControllerDriverStart ( // // Set up context record // - Private->Signature = QEMU_VIDEO_PRIVATE_DATA_SIGNATURE; + Private->Signature = QEMU_VIDEO_PRIVATE_DATA_SIGNATURE; // // Open PCI I/O Protocol @@ -225,7 +229,7 @@ QemuVideoControllerDriverStart ( Status = gBS->OpenProtocol ( Controller, &gEfiPciIoProtocolGuid, - (VOID **) &Private->PciIo, + (VOID **)&Private->PciIo, This->DriverBindingHandle, Controller, EFI_OPEN_PROTOCOL_BY_DRIVER @@ -238,12 +242,12 @@ QemuVideoControllerDriverStart ( // Read the PCI Configuration Header from the PCI Device // Status = Private->PciIo->Pci.Read ( - Private->PciIo, - EfiPciIoWidthUint32, - 0, - sizeof (Pci) / sizeof (UINT32), - &Pci - ); + Private->PciIo, + EfiPciIoWidthUint32, + 0, + sizeof (Pci) / sizeof (UINT32), + &Pci + ); if (EFI_ERROR (Status)) { goto ClosePciIo; } @@ -251,11 +255,12 @@ QemuVideoControllerDriverStart ( // // Determine card variant. // - Card = QemuVideoDetect(Pci.Hdr.ClassCode[1], Pci.Hdr.VendorId, Pci.Hdr.DeviceId); + Card = QemuVideoDetect (Pci.Hdr.ClassCode[1], Pci.Hdr.VendorId, Pci.Hdr.DeviceId); if (Card == NULL) { Status = EFI_DEVICE_ERROR; goto ClosePciIo; } + Private->Variant = Card->Variant; // @@ -268,11 +273,11 @@ QemuVideoControllerDriverStart ( // Save original PCI attributes // Status = Private->PciIo->Attributes ( - Private->PciIo, - EfiPciIoAttributeOperationGet, - 0, - &Private->OriginalPciAttributes - ); + Private->PciIo, + EfiPciIoAttributeOperationGet, + 0, + &Private->OriginalPciAttributes + ); if (EFI_ERROR (Status)) { goto ClosePciIo; @@ -292,7 +297,7 @@ QemuVideoControllerDriverStart ( } SupportedVgaIo &= (UINT64)(EFI_PCI_IO_ATTRIBUTE_VGA_IO | EFI_PCI_IO_ATTRIBUTE_VGA_IO_16); - if (SupportedVgaIo == 0 && IS_PCI_VGA (&Pci)) { + if ((SupportedVgaIo == 0) && IS_PCI_VGA (&Pci)) { Status = EFI_UNSUPPORTED; goto ClosePciIo; } @@ -301,11 +306,11 @@ QemuVideoControllerDriverStart ( // Set new PCI attributes // Status = Private->PciIo->Attributes ( - Private->PciIo, - EfiPciIoAttributeOperationEnable, - EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY | SupportedVgaIo, - NULL - ); + Private->PciIo, + EfiPciIoAttributeOperationEnable, + EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY | SupportedVgaIo, + NULL + ); if (EFI_ERROR (Status)) { goto ClosePciIo; } @@ -314,21 +319,25 @@ QemuVideoControllerDriverStart ( // Check whenever the qemu stdvga mmio bar is present (qemu 1.3+). // if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO) { - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *MmioDesc; + EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *MmioDesc; Status = Private->PciIo->GetBarAttributes ( - Private->PciIo, - PCI_BAR_IDX2, - NULL, - (VOID**) &MmioDesc - ); + Private->PciIo, + PCI_BAR_IDX2, + NULL, + (VOID **)&MmioDesc + ); if (EFI_ERROR (Status) || - MmioDesc->ResType != ACPI_ADDRESS_SPACE_TYPE_MEM) { + (MmioDesc->ResType != ACPI_ADDRESS_SPACE_TYPE_MEM)) + { DEBUG ((DEBUG_INFO, "QemuVideo: No mmio bar, fallback to port io\n")); Private->Variant = QEMU_VIDEO_BOCHS; } else { - DEBUG ((DEBUG_INFO, "QemuVideo: Using mmio bar @ 0x%lx\n", - MmioDesc->AddrRangeMin)); + DEBUG (( + DEBUG_INFO, + "QemuVideo: Using mmio bar @ 0x%lx\n", + MmioDesc->AddrRangeMin + )); } if (!EFI_ERROR (Status)) { @@ -340,17 +349,18 @@ QemuVideoControllerDriverStart ( // VMWare SVGA is handled like Bochs (with port IO only). // if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) { - Private->Variant = QEMU_VIDEO_BOCHS; + Private->Variant = QEMU_VIDEO_BOCHS; Private->FrameBufferVramBarIndex = PCI_BAR_IDX1; } // // Check if accessing the bochs interface works. // - if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO || - Private->Variant == QEMU_VIDEO_BOCHS) { - UINT16 BochsId; - BochsId = BochsRead(Private, VBE_DISPI_INDEX_ID); + if ((Private->Variant == QEMU_VIDEO_BOCHS_MMIO) || + (Private->Variant == QEMU_VIDEO_BOCHS)) + { + UINT16 BochsId; + BochsId = BochsRead (Private, VBE_DISPI_INDEX_ID); if ((BochsId & 0xFFF0) != VBE_DISPI_ID0) { DEBUG ((DEBUG_INFO, "QemuVideo: BochsID mismatch (got 0x%x)\n", BochsId)); Status = EFI_DEVICE_ERROR; @@ -364,7 +374,7 @@ QemuVideoControllerDriverStart ( Status = gBS->HandleProtocol ( Controller, &gEfiDevicePathProtocolGuid, - (VOID **) &ParentDevicePath + (VOID **)&ParentDevicePath ); if (EFI_ERROR (Status)) { goto RestoreAttributes; @@ -374,15 +384,15 @@ QemuVideoControllerDriverStart ( // Set Gop Device Path // ZeroMem (&AcpiDeviceNode, sizeof (ACPI_ADR_DEVICE_PATH)); - AcpiDeviceNode.Header.Type = ACPI_DEVICE_PATH; + AcpiDeviceNode.Header.Type = ACPI_DEVICE_PATH; AcpiDeviceNode.Header.SubType = ACPI_ADR_DP; - AcpiDeviceNode.ADR = ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_VGA, 0, 0); + AcpiDeviceNode.ADR = ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_VGA, 0, 0); SetDevicePathNodeLength (&AcpiDeviceNode.Header, sizeof (ACPI_ADR_DEVICE_PATH)); Private->GopDevicePath = AppendDevicePathNode ( - ParentDevicePath, - (EFI_DEVICE_PATH_PROTOCOL *) &AcpiDeviceNode - ); + ParentDevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&AcpiDeviceNode + ); if (Private->GopDevicePath == NULL) { Status = EFI_OUT_OF_RESOURCES; goto RestoreAttributes; @@ -405,19 +415,20 @@ QemuVideoControllerDriverStart ( // Construct video mode buffer // switch (Private->Variant) { - case QEMU_VIDEO_CIRRUS_5430: - case QEMU_VIDEO_CIRRUS_5446: - Status = QemuVideoCirrusModeSetup (Private); - break; - case QEMU_VIDEO_BOCHS_MMIO: - case QEMU_VIDEO_BOCHS: - Status = QemuVideoBochsModeSetup (Private, IsQxl); - break; - default: - ASSERT (FALSE); - Status = EFI_DEVICE_ERROR; - break; + case QEMU_VIDEO_CIRRUS_5430: + case QEMU_VIDEO_CIRRUS_5446: + Status = QemuVideoCirrusModeSetup (Private); + break; + case QEMU_VIDEO_BOCHS_MMIO: + case QEMU_VIDEO_BOCHS: + Status = QemuVideoBochsModeSetup (Private, IsQxl); + break; + default: + ASSERT (FALSE); + Status = EFI_DEVICE_ERROR; + break; } + if (EFI_ERROR (Status)) { goto UninstallGopDevicePath; } @@ -444,30 +455,35 @@ QemuVideoControllerDriverStart ( // Reference parent handle from child handle. // Status = gBS->OpenProtocol ( - Controller, - &gEfiPciIoProtocolGuid, - (VOID **) &ChildPciIo, - This->DriverBindingHandle, - Private->Handle, - EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER - ); + Controller, + &gEfiPciIoProtocolGuid, + (VOID **)&ChildPciIo, + This->DriverBindingHandle, + Private->Handle, + EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER + ); if (EFI_ERROR (Status)) { goto UninstallGop; } -#if defined MDE_CPU_IA32 || defined MDE_CPU_X64 - if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO || - Private->Variant == QEMU_VIDEO_BOCHS) { + #if defined MDE_CPU_IA32 || defined MDE_CPU_X64 + if ((Private->Variant == QEMU_VIDEO_BOCHS_MMIO) || + (Private->Variant == QEMU_VIDEO_BOCHS)) + { InstallVbeShim (Card->Name, Private->GraphicsOutput.Mode->FrameBufferBase); } -#endif + + #endif gBS->RestoreTPL (OldTpl); return EFI_SUCCESS; UninstallGop: - gBS->UninstallProtocolInterface (Private->Handle, - &gEfiGraphicsOutputProtocolGuid, &Private->GraphicsOutput); + gBS->UninstallProtocolInterface ( + Private->Handle, + &gEfiGraphicsOutputProtocolGuid, + &Private->GraphicsOutput + ); DestructQemuVideoGraphics: QemuVideoGraphicsOutputDestructor (Private); @@ -476,19 +492,30 @@ FreeModeData: FreePool (Private->ModeData); UninstallGopDevicePath: - gBS->UninstallProtocolInterface (Private->Handle, - &gEfiDevicePathProtocolGuid, Private->GopDevicePath); + gBS->UninstallProtocolInterface ( + Private->Handle, + &gEfiDevicePathProtocolGuid, + Private->GopDevicePath + ); FreeGopDevicePath: FreePool (Private->GopDevicePath); RestoreAttributes: - Private->PciIo->Attributes (Private->PciIo, EfiPciIoAttributeOperationSet, - Private->OriginalPciAttributes, NULL); + Private->PciIo->Attributes ( + Private->PciIo, + EfiPciIoAttributeOperationSet, + Private->OriginalPciAttributes, + NULL + ); ClosePciIo: - gBS->CloseProtocol (Controller, &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, Controller); + gBS->CloseProtocol ( + Controller, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + Controller + ); FreePrivate: FreePool (Private); @@ -515,15 +542,15 @@ RestoreTpl: EFI_STATUS EFIAPI QemuVideoControllerDriverStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) { - EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; + EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; - EFI_STATUS Status; + EFI_STATUS Status; QEMU_VIDEO_PRIVATE_DATA *Private; if (NumberOfChildren == 0) { @@ -531,11 +558,11 @@ QemuVideoControllerDriverStop ( // Close the PCI I/O Protocol // gBS->CloseProtocol ( - Controller, - &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, - Controller - ); + Controller, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + Controller + ); return EFI_SUCCESS; } @@ -547,7 +574,7 @@ QemuVideoControllerDriverStop ( Status = gBS->OpenProtocol ( ChildHandleBuffer[0], &gEfiGraphicsOutputProtocolGuid, - (VOID **) &GraphicsOutput, + (VOID **)&GraphicsOutput, This->DriverBindingHandle, Controller, EFI_OPEN_PROTOCOL_GET_PROTOCOL @@ -581,22 +608,25 @@ QemuVideoControllerDriverStop ( // Restore original PCI attributes // Private->PciIo->Attributes ( - Private->PciIo, - EfiPciIoAttributeOperationSet, - Private->OriginalPciAttributes, - NULL - ); + Private->PciIo, + EfiPciIoAttributeOperationSet, + Private->OriginalPciAttributes, + NULL + ); gBS->CloseProtocol ( - Controller, - &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, - Private->Handle - ); + Controller, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + Private->Handle + ); FreePool (Private->ModeData); - gBS->UninstallProtocolInterface (Private->Handle, - &gEfiDevicePathProtocolGuid, Private->GopDevicePath); + gBS->UninstallProtocolInterface ( + Private->Handle, + &gEfiDevicePathProtocolGuid, + Private->GopDevicePath + ); FreePool (Private->GopDevicePath); // @@ -620,18 +650,18 @@ QemuVideoControllerDriverStop ( VOID outb ( QEMU_VIDEO_PRIVATE_DATA *Private, - UINTN Address, - UINT8 Data + UINTN Address, + UINT8 Data ) { Private->PciIo->Io.Write ( - Private->PciIo, - EfiPciIoWidthUint8, - EFI_PCI_IO_PASS_THROUGH_BAR, - Address, - 1, - &Data - ); + Private->PciIo, + EfiPciIoWidthUint8, + EFI_PCI_IO_PASS_THROUGH_BAR, + Address, + 1, + &Data + ); } /** @@ -647,18 +677,18 @@ outb ( VOID outw ( QEMU_VIDEO_PRIVATE_DATA *Private, - UINTN Address, - UINT16 Data + UINTN Address, + UINT16 Data ) { Private->PciIo->Io.Write ( - Private->PciIo, - EfiPciIoWidthUint16, - EFI_PCI_IO_PASS_THROUGH_BAR, - Address, - 1, - &Data - ); + Private->PciIo, + EfiPciIoWidthUint16, + EFI_PCI_IO_PASS_THROUGH_BAR, + Address, + 1, + &Data + ); } /** @@ -673,19 +703,19 @@ outw ( UINT8 inb ( QEMU_VIDEO_PRIVATE_DATA *Private, - UINTN Address + UINTN Address ) { - UINT8 Data; + UINT8 Data; Private->PciIo->Io.Read ( - Private->PciIo, - EfiPciIoWidthUint8, - EFI_PCI_IO_PASS_THROUGH_BAR, - Address, - 1, - &Data - ); + Private->PciIo, + EfiPciIoWidthUint8, + EFI_PCI_IO_PASS_THROUGH_BAR, + Address, + 1, + &Data + ); return Data; } @@ -701,19 +731,19 @@ inb ( UINT16 inw ( QEMU_VIDEO_PRIVATE_DATA *Private, - UINTN Address + UINTN Address ) { UINT16 Data; Private->PciIo->Io.Read ( - Private->PciIo, - EfiPciIoWidthUint16, - EFI_PCI_IO_PASS_THROUGH_BAR, - Address, - 1, - &Data - ); + Private->PciIo, + EfiPciIoWidthUint16, + EFI_PCI_IO_PASS_THROUGH_BAR, + Address, + 1, + &Data + ); return Data; } @@ -732,16 +762,16 @@ inw ( VOID SetPaletteColor ( QEMU_VIDEO_PRIVATE_DATA *Private, - UINTN Index, - UINT8 Red, - UINT8 Green, - UINT8 Blue + UINTN Index, + UINT8 Red, + UINT8 Green, + UINT8 Blue ) { - VgaOutb (Private, PALETTE_INDEX_REGISTER, (UINT8) Index); - VgaOutb (Private, PALETTE_DATA_REGISTER, (UINT8) (Red >> 2)); - VgaOutb (Private, PALETTE_DATA_REGISTER, (UINT8) (Green >> 2)); - VgaOutb (Private, PALETTE_DATA_REGISTER, (UINT8) (Blue >> 2)); + VgaOutb (Private, PALETTE_INDEX_REGISTER, (UINT8)Index); + VgaOutb (Private, PALETTE_DATA_REGISTER, (UINT8)(Red >> 2)); + VgaOutb (Private, PALETTE_DATA_REGISTER, (UINT8)(Green >> 2)); + VgaOutb (Private, PALETTE_DATA_REGISTER, (UINT8)(Blue >> 2)); } /** @@ -757,16 +787,16 @@ SetDefaultPalette ( QEMU_VIDEO_PRIVATE_DATA *Private ) { - UINTN Index; - UINTN RedIndex; - UINTN GreenIndex; - UINTN BlueIndex; + UINTN Index; + UINTN RedIndex; + UINTN GreenIndex; + UINTN BlueIndex; Index = 0; for (RedIndex = 0; RedIndex < 8; RedIndex++) { for (GreenIndex = 0; GreenIndex < 8; GreenIndex++) { for (BlueIndex = 0; BlueIndex < 4; BlueIndex++) { - SetPaletteColor (Private, Index, (UINT8) (RedIndex << 5), (UINT8) (GreenIndex << 5), (UINT8) (BlueIndex << 6)); + SetPaletteColor (Private, Index, (UINT8)(RedIndex << 5), (UINT8)(GreenIndex << 5), (UINT8)(BlueIndex << 6)); Index++; } } @@ -810,8 +840,8 @@ ClearScreen ( VOID DrawLogo ( QEMU_VIDEO_PRIVATE_DATA *Private, - UINTN ScreenWidth, - UINTN ScreenHeight + UINTN ScreenWidth, + UINTN ScreenHeight ) { } @@ -831,8 +861,8 @@ InitializeCirrusGraphicsMode ( QEMU_VIDEO_CIRRUS_MODES *ModeData ) { - UINT8 Byte; - UINTN Index; + UINT8 Byte; + UINTN Index; outw (Private, SEQ_ADDRESS_REGISTER, 0x1206); outw (Private, SEQ_ADDRESS_REGISTER, 0x0012); @@ -843,7 +873,7 @@ InitializeCirrusGraphicsMode ( if (Private->Variant == QEMU_VIDEO_CIRRUS_5430) { outb (Private, SEQ_ADDRESS_REGISTER, 0x0f); - Byte = (UINT8) ((inb (Private, SEQ_DATA_REGISTER) & 0xc7) ^ 0x30); + Byte = (UINT8)((inb (Private, SEQ_DATA_REGISTER) & 0xc7) ^ 0x30); outb (Private, SEQ_DATA_REGISTER, Byte); } @@ -853,17 +883,17 @@ InitializeCirrusGraphicsMode ( outw (Private, CRTC_ADDRESS_REGISTER, 0x2011); for (Index = 0; Index < 28; Index++) { - outw (Private, CRTC_ADDRESS_REGISTER, (UINT16) ((ModeData->CrtcSettings[Index] << 8) | Index)); + outw (Private, CRTC_ADDRESS_REGISTER, (UINT16)((ModeData->CrtcSettings[Index] << 8) | Index)); } for (Index = 0; Index < 9; Index++) { - outw (Private, GRAPH_ADDRESS_REGISTER, (UINT16) ((GraphicsController[Index] << 8) | Index)); + outw (Private, GRAPH_ADDRESS_REGISTER, (UINT16)((GraphicsController[Index] << 8) | Index)); } inb (Private, INPUT_STATUS_1_REGISTER); for (Index = 0; Index < 21; Index++) { - outb (Private, ATT_ADDRESS_REGISTER, (UINT8) Index); + outb (Private, ATT_ADDRESS_REGISTER, (UINT8)Index); outb (Private, ATT_ADDRESS_REGISTER, AttributeController[Index]); } @@ -885,21 +915,21 @@ BochsWrite ( UINT16 Data ) { - EFI_STATUS Status; + EFI_STATUS Status; if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO) { Status = Private->PciIo->Mem.Write ( - Private->PciIo, - EfiPciIoWidthUint16, - PCI_BAR_IDX2, - 0x500 + (Reg << 1), - 1, - &Data - ); + Private->PciIo, + EfiPciIoWidthUint16, + PCI_BAR_IDX2, + 0x500 + (Reg << 1), + 1, + &Data + ); ASSERT_EFI_ERROR (Status); } else { outw (Private, VBE_DISPI_IOPORT_INDEX, Reg); - outw (Private, VBE_DISPI_IOPORT_DATA, Data); + outw (Private, VBE_DISPI_IOPORT_DATA, Data); } } @@ -909,23 +939,24 @@ BochsRead ( UINT16 Reg ) { - EFI_STATUS Status; - UINT16 Data; + EFI_STATUS Status; + UINT16 Data; if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO) { Status = Private->PciIo->Mem.Read ( - Private->PciIo, - EfiPciIoWidthUint16, - PCI_BAR_IDX2, - 0x500 + (Reg << 1), - 1, - &Data - ); + Private->PciIo, + EfiPciIoWidthUint16, + PCI_BAR_IDX2, + 0x500 + (Reg << 1), + 1, + &Data + ); ASSERT_EFI_ERROR (Status); } else { outw (Private, VBE_DISPI_IOPORT_INDEX, Reg); Data = inw (Private, VBE_DISPI_IOPORT_DATA); } + return Data; } @@ -936,17 +967,17 @@ VgaOutb ( UINT8 Data ) { - EFI_STATUS Status; + EFI_STATUS Status; if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO) { Status = Private->PciIo->Mem.Write ( - Private->PciIo, - EfiPciIoWidthUint8, - PCI_BAR_IDX2, - 0x400 - 0x3c0 + Reg, - 1, - &Data - ); + Private->PciIo, + EfiPciIoWidthUint8, + PCI_BAR_IDX2, + 0x400 - 0x3c0 + Reg, + 1, + &Data + ); ASSERT_EFI_ERROR (Status); } else { outb (Private, Reg, Data); @@ -956,28 +987,36 @@ VgaOutb ( VOID InitializeBochsGraphicsMode ( QEMU_VIDEO_PRIVATE_DATA *Private, - QEMU_VIDEO_BOCHS_MODES *ModeData + QEMU_VIDEO_BOCHS_MODES *ModeData ) { - DEBUG ((DEBUG_INFO, "InitializeBochsGraphicsMode: %dx%d @ %d\n", - ModeData->Width, ModeData->Height, ModeData->ColorDepth)); + DEBUG (( + DEBUG_INFO, + "InitializeBochsGraphicsMode: %dx%d @ %d\n", + ModeData->Width, + ModeData->Height, + ModeData->ColorDepth + )); /* unblank */ VgaOutb (Private, ATT_ADDRESS_REGISTER, 0x20); - BochsWrite (Private, VBE_DISPI_INDEX_ENABLE, 0); - BochsWrite (Private, VBE_DISPI_INDEX_BANK, 0); - BochsWrite (Private, VBE_DISPI_INDEX_X_OFFSET, 0); - BochsWrite (Private, VBE_DISPI_INDEX_Y_OFFSET, 0); + BochsWrite (Private, VBE_DISPI_INDEX_ENABLE, 0); + BochsWrite (Private, VBE_DISPI_INDEX_BANK, 0); + BochsWrite (Private, VBE_DISPI_INDEX_X_OFFSET, 0); + BochsWrite (Private, VBE_DISPI_INDEX_Y_OFFSET, 0); - BochsWrite (Private, VBE_DISPI_INDEX_BPP, (UINT16) ModeData->ColorDepth); - BochsWrite (Private, VBE_DISPI_INDEX_XRES, (UINT16) ModeData->Width); - BochsWrite (Private, VBE_DISPI_INDEX_VIRT_WIDTH, (UINT16) ModeData->Width); - BochsWrite (Private, VBE_DISPI_INDEX_YRES, (UINT16) ModeData->Height); - BochsWrite (Private, VBE_DISPI_INDEX_VIRT_HEIGHT, (UINT16) ModeData->Height); + BochsWrite (Private, VBE_DISPI_INDEX_BPP, (UINT16)ModeData->ColorDepth); + BochsWrite (Private, VBE_DISPI_INDEX_XRES, (UINT16)ModeData->Width); + BochsWrite (Private, VBE_DISPI_INDEX_VIRT_WIDTH, (UINT16)ModeData->Width); + BochsWrite (Private, VBE_DISPI_INDEX_YRES, (UINT16)ModeData->Height); + BochsWrite (Private, VBE_DISPI_INDEX_VIRT_HEIGHT, (UINT16)ModeData->Height); - BochsWrite (Private, VBE_DISPI_INDEX_ENABLE, - VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED); + BochsWrite ( + Private, + VBE_DISPI_INDEX_ENABLE, + VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED + ); SetDefaultPalette (Private); ClearScreen (Private); @@ -986,11 +1025,11 @@ InitializeBochsGraphicsMode ( EFI_STATUS EFIAPI InitializeQemuVideo ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = EfiLibInstallDriverBindingComponentName2 ( ImageHandle, diff --git a/OvmfPkg/QemuVideoDxe/Gop.c b/OvmfPkg/QemuVideoDxe/Gop.c index 6b0a11ec12..5ad0afe883 100644 --- a/OvmfPkg/QemuVideoDxe/Gop.c +++ b/OvmfPkg/QemuVideoDxe/Gop.c @@ -12,52 +12,52 @@ STATIC VOID QemuVideoCompleteModeInfo ( - IN QEMU_VIDEO_MODE_DATA *ModeData, + IN QEMU_VIDEO_MODE_DATA *ModeData, OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info ) { Info->Version = 0; if (ModeData->ColorDepth == 8) { - Info->PixelFormat = PixelBitMask; - Info->PixelInformation.RedMask = PIXEL_RED_MASK; - Info->PixelInformation.GreenMask = PIXEL_GREEN_MASK; - Info->PixelInformation.BlueMask = PIXEL_BLUE_MASK; + Info->PixelFormat = PixelBitMask; + Info->PixelInformation.RedMask = PIXEL_RED_MASK; + Info->PixelInformation.GreenMask = PIXEL_GREEN_MASK; + Info->PixelInformation.BlueMask = PIXEL_BLUE_MASK; Info->PixelInformation.ReservedMask = 0; } else if (ModeData->ColorDepth == 24) { - Info->PixelFormat = PixelBitMask; - Info->PixelInformation.RedMask = PIXEL24_RED_MASK; - Info->PixelInformation.GreenMask = PIXEL24_GREEN_MASK; - Info->PixelInformation.BlueMask = PIXEL24_BLUE_MASK; + Info->PixelFormat = PixelBitMask; + Info->PixelInformation.RedMask = PIXEL24_RED_MASK; + Info->PixelInformation.GreenMask = PIXEL24_GREEN_MASK; + Info->PixelInformation.BlueMask = PIXEL24_BLUE_MASK; Info->PixelInformation.ReservedMask = 0; } else if (ModeData->ColorDepth == 32) { DEBUG ((DEBUG_INFO, "PixelBlueGreenRedReserved8BitPerColor\n")); Info->PixelFormat = PixelBlueGreenRedReserved8BitPerColor; } + Info->PixelsPerScanLine = Info->HorizontalResolution; } - STATIC EFI_STATUS QemuVideoCompleteModeData ( - IN QEMU_VIDEO_PRIVATE_DATA *Private, - OUT EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode + IN QEMU_VIDEO_PRIVATE_DATA *Private, + OUT EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode ) { EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info; EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *FrameBufDesc; - QEMU_VIDEO_MODE_DATA *ModeData; + QEMU_VIDEO_MODE_DATA *ModeData; ModeData = &Private->ModeData[Mode->Mode]; - Info = Mode->Info; + Info = Mode->Info; QemuVideoCompleteModeInfo (ModeData, Info); Private->PciIo->GetBarAttributes ( - Private->PciIo, - Private->FrameBufferVramBarIndex, - NULL, - (VOID**) &FrameBufDesc - ); + Private->PciIo, + Private->FrameBufferVramBarIndex, + NULL, + (VOID **)&FrameBufDesc + ); Mode->FrameBufferBase = FrameBufDesc->AddrRangeMin; Mode->FrameBufferSize = Info->HorizontalResolution * Info->VerticalResolution; @@ -65,8 +65,12 @@ QemuVideoCompleteModeData ( Mode->FrameBufferSize = EFI_PAGES_TO_SIZE ( EFI_SIZE_TO_PAGES (Mode->FrameBufferSize) ); - DEBUG ((DEBUG_INFO, "FrameBufferBase: 0x%Lx, FrameBufferSize: 0x%Lx\n", - Mode->FrameBufferBase, (UINT64)Mode->FrameBufferSize)); + DEBUG (( + DEBUG_INFO, + "FrameBufferBase: 0x%Lx, FrameBufferSize: 0x%Lx\n", + Mode->FrameBufferBase, + (UINT64)Mode->FrameBufferSize + )); FreePool (FrameBufDesc); return EFI_SUCCESS; @@ -83,6 +87,7 @@ QemuVideoGraphicsOutputQueryMode ( OUT UINTN *SizeOfInfo, OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info ) + /*++ Routine Description: @@ -109,7 +114,7 @@ Routine Description: Private = QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (This); - if (Info == NULL || SizeOfInfo == NULL || ModeNumber >= This->Mode->MaxMode) { + if ((Info == NULL) || (SizeOfInfo == NULL) || (ModeNumber >= This->Mode->MaxMode)) { return EFI_INVALID_PARAMETER; } @@ -120,7 +125,7 @@ Routine Description: *SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION); - ModeData = &Private->ModeData[ModeNumber]; + ModeData = &Private->ModeData[ModeNumber]; (*Info)->HorizontalResolution = ModeData->HorizontalResolution; (*Info)->VerticalResolution = ModeData->VerticalResolution; QemuVideoCompleteModeInfo (ModeData, *Info); @@ -131,9 +136,10 @@ Routine Description: EFI_STATUS EFIAPI QemuVideoGraphicsOutputSetMode ( - IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, - IN UINT32 ModeNumber + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, + IN UINT32 ModeNumber ) + /*++ Routine Description: @@ -151,10 +157,10 @@ Routine Description: --*/ { - QEMU_VIDEO_PRIVATE_DATA *Private; - QEMU_VIDEO_MODE_DATA *ModeData; - RETURN_STATUS Status; - EFI_GRAPHICS_OUTPUT_BLT_PIXEL Black; + QEMU_VIDEO_PRIVATE_DATA *Private; + QEMU_VIDEO_MODE_DATA *ModeData; + RETURN_STATUS Status; + EFI_GRAPHICS_OUTPUT_BLT_PIXEL Black; Private = QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (This); @@ -165,23 +171,23 @@ Routine Description: ModeData = &Private->ModeData[ModeNumber]; switch (Private->Variant) { - case QEMU_VIDEO_CIRRUS_5430: - case QEMU_VIDEO_CIRRUS_5446: - InitializeCirrusGraphicsMode (Private, &QemuVideoCirrusModes[ModeData->InternalModeIndex]); - break; - case QEMU_VIDEO_BOCHS_MMIO: - case QEMU_VIDEO_BOCHS: - InitializeBochsGraphicsMode (Private, &QemuVideoBochsModes[ModeData->InternalModeIndex]); - break; - default: - ASSERT (FALSE); - return EFI_DEVICE_ERROR; + case QEMU_VIDEO_CIRRUS_5430: + case QEMU_VIDEO_CIRRUS_5446: + InitializeCirrusGraphicsMode (Private, &QemuVideoCirrusModes[ModeData->InternalModeIndex]); + break; + case QEMU_VIDEO_BOCHS_MMIO: + case QEMU_VIDEO_BOCHS: + InitializeBochsGraphicsMode (Private, &QemuVideoBochsModes[ModeData->InternalModeIndex]); + break; + default: + ASSERT (FALSE); + return EFI_DEVICE_ERROR; } - This->Mode->Mode = ModeNumber; + This->Mode->Mode = ModeNumber; This->Mode->Info->HorizontalResolution = ModeData->HorizontalResolution; - This->Mode->Info->VerticalResolution = ModeData->VerticalResolution; - This->Mode->SizeOfInfo = sizeof(EFI_GRAPHICS_OUTPUT_MODE_INFORMATION); + This->Mode->Info->VerticalResolution = ModeData->VerticalResolution; + This->Mode->SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION); QemuVideoCompleteModeData (Private, This->Mode); @@ -189,7 +195,7 @@ Routine Description: // Re-initialize the frame buffer configure when mode changes. // Status = FrameBufferBltConfigure ( - (VOID*) (UINTN) This->Mode->FrameBufferBase, + (VOID *)(UINTN)This->Mode->FrameBufferBase, This->Mode->Info, Private->FrameBufferBltConfigure, &Private->FrameBufferBltConfigureSize @@ -201,6 +207,7 @@ Routine Description: if (Private->FrameBufferBltConfigure != NULL) { FreePool (Private->FrameBufferBltConfigure); } + Private->FrameBufferBltConfigure = AllocatePool (Private->FrameBufferBltConfigureSize); ASSERT (Private->FrameBufferBltConfigure != NULL); @@ -209,12 +216,13 @@ Routine Description: // Create the configuration for FrameBufferBltLib // Status = FrameBufferBltConfigure ( - (VOID*) (UINTN) This->Mode->FrameBufferBase, - This->Mode->Info, - Private->FrameBufferBltConfigure, - &Private->FrameBufferBltConfigureSize - ); + (VOID *)(UINTN)This->Mode->FrameBufferBase, + This->Mode->Info, + Private->FrameBufferBltConfigure, + &Private->FrameBufferBltConfigureSize + ); } + ASSERT (Status == RETURN_SUCCESS); // @@ -225,9 +233,12 @@ Routine Description: Private->FrameBufferBltConfigure, &Black, EfiBltVideoFill, - 0, 0, - 0, 0, - This->Mode->Info->HorizontalResolution, This->Mode->Info->VerticalResolution, + 0, + 0, + 0, + 0, + This->Mode->Info->HorizontalResolution, + This->Mode->Info->VerticalResolution, 0 ); ASSERT_RETURN_ERROR (Status); @@ -238,17 +249,18 @@ Routine Description: EFI_STATUS EFIAPI QemuVideoGraphicsOutputBlt ( - IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, - IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL, - IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, - IN UINTN SourceX, - IN UINTN SourceY, - IN UINTN DestinationX, - IN UINTN DestinationY, - IN UINTN Width, - IN UINTN Height, - IN UINTN Delta + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL, + IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, + IN UINTN SourceX, + IN UINTN SourceY, + IN UINTN DestinationX, + IN UINTN DestinationY, + IN UINTN Width, + IN UINTN Height, + IN UINTN Delta ) + /*++ Routine Description: @@ -278,9 +290,9 @@ Returns: --*/ { - EFI_STATUS Status; - EFI_TPL OriginalTPL; - QEMU_VIDEO_PRIVATE_DATA *Private; + EFI_STATUS Status; + EFI_TPL OriginalTPL; + QEMU_VIDEO_PRIVATE_DATA *Private; Private = QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (This); // @@ -291,27 +303,27 @@ Returns: OriginalTPL = gBS->RaiseTPL (TPL_NOTIFY); switch (BltOperation) { - case EfiBltVideoToBltBuffer: - case EfiBltBufferToVideo: - case EfiBltVideoFill: - case EfiBltVideoToVideo: - Status = FrameBufferBlt ( - Private->FrameBufferBltConfigure, - BltBuffer, - BltOperation, - SourceX, - SourceY, - DestinationX, - DestinationY, - Width, - Height, - Delta - ); - break; - - default: - Status = EFI_INVALID_PARAMETER; - break; + case EfiBltVideoToBltBuffer: + case EfiBltBufferToVideo: + case EfiBltVideoFill: + case EfiBltVideoToVideo: + Status = FrameBufferBlt ( + Private->FrameBufferBltConfigure, + BltBuffer, + BltOperation, + SourceX, + SourceY, + DestinationX, + DestinationY, + Width, + Height, + Delta + ); + break; + + default: + Status = EFI_INVALID_PARAMETER; + break; } gBS->RestoreTPL (OriginalTPL); @@ -324,9 +336,8 @@ QemuVideoGraphicsOutputConstructor ( QEMU_VIDEO_PRIVATE_DATA *Private ) { - EFI_STATUS Status; - EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; - + EFI_STATUS Status; + EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; GraphicsOutput = &Private->GraphicsOutput; GraphicsOutput->QueryMode = QemuVideoGraphicsOutputQueryMode; @@ -339,7 +350,7 @@ QemuVideoGraphicsOutputConstructor ( Status = gBS->AllocatePool ( EfiBootServicesData, sizeof (EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE), - (VOID **) &Private->GraphicsOutput.Mode + (VOID **)&Private->GraphicsOutput.Mode ); if (EFI_ERROR (Status)) { return Status; @@ -348,12 +359,13 @@ QemuVideoGraphicsOutputConstructor ( Status = gBS->AllocatePool ( EfiBootServicesData, sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION), - (VOID **) &Private->GraphicsOutput.Mode->Info + (VOID **)&Private->GraphicsOutput.Mode->Info ); if (EFI_ERROR (Status)) { goto FreeMode; } - Private->GraphicsOutput.Mode->MaxMode = (UINT32) Private->MaxMode; + + Private->GraphicsOutput.Mode->MaxMode = (UINT32)Private->MaxMode; Private->GraphicsOutput.Mode->Mode = GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER; Private->FrameBufferBltConfigure = NULL; Private->FrameBufferBltConfigureSize = 0; @@ -388,6 +400,7 @@ EFI_STATUS QemuVideoGraphicsOutputDestructor ( QEMU_VIDEO_PRIVATE_DATA *Private ) + /*++ Routine Description: @@ -408,6 +421,7 @@ Returns: if (Private->GraphicsOutput.Mode->Info != NULL) { gBS->FreePool (Private->GraphicsOutput.Mode->Info); } + gBS->FreePool (Private->GraphicsOutput.Mode); } diff --git a/OvmfPkg/QemuVideoDxe/Initialize.c b/OvmfPkg/QemuVideoDxe/Initialize.c index b5a5660ed2..533ec661d6 100644 --- a/OvmfPkg/QemuVideoDxe/Initialize.c +++ b/OvmfPkg/QemuVideoDxe/Initialize.c @@ -9,7 +9,6 @@ #include "Qemu.h" - /// /// Generic Attribute Controller Register Settings /// @@ -22,33 +21,33 @@ UINT8 AttributeController[21] = { /// /// Generic Graphics Controller Register Settings /// -UINT8 GraphicsController[9] = { +UINT8 GraphicsController[9] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF }; // // 640 x 480 x 256 color @ 60 Hertz // -UINT8 Crtc_640_480_256_60[28] = { +UINT8 Crtc_640_480_256_60[28] = { 0x5d, 0x4f, 0x50, 0x82, 0x53, 0x9f, 0x00, 0x3e, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x83, 0xdf, 0x50, 0x00, 0xe7, 0x04, 0xe3, 0xff, 0x00, 0x00, 0x22 }; -UINT8 Crtc_640_480_32bpp_60[28] = { +UINT8 Crtc_640_480_32bpp_60[28] = { 0x5d, 0x4f, 0x50, 0x82, 0x53, 0x9f, 0x00, 0x3e, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x83, 0xdf, 0x40, 0x00, 0xe7, 0x04, 0xe3, 0xff, 0x00, 0x00, 0x32 }; -UINT16 Seq_640_480_256_60[15] = { +UINT16 Seq_640_480_256_60[15] = { 0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1107, 0x0008, 0x4a0b, 0x5b0c, 0x450d, 0x7e0e, 0x2b1b, 0x2f1c, 0x301d, 0x331e }; -UINT16 Seq_640_480_32bpp_60[15] = { +UINT16 Seq_640_480_32bpp_60[15] = { 0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1907, 0x0008, 0x4a0b, 0x5b0c, 0x450d, 0x7e0e, 0x2b1b, 0x2f1c, 0x301d, 0x331e }; @@ -56,38 +55,38 @@ UINT16 Seq_640_480_32bpp_60[15] = { // // 800 x 600 x 256 color @ 60 Hertz // -UINT8 Crtc_800_600_256_60[28] = { +UINT8 Crtc_800_600_256_60[28] = { 0x7F, 0x63, 0x64, 0x80, 0x6B, 0x1B, 0x72, 0xF0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x8C, 0x57, 0x64, 0x00, 0x5F, 0x91, 0xE3, 0xFF, 0x00, 0x00, 0x22 }; -UINT8 Crtc_800_600_32bpp_60[28] = { +UINT8 Crtc_800_600_32bpp_60[28] = { 0x7F, 0x63, 0x64, 0x80, 0x6B, 0x1B, 0x72, 0xF0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x8C, 0x57, 0x90, 0x00, 0x5F, 0x91, 0xE3, 0xFF, 0x00, 0x00, 0x32 }; -UINT16 Seq_800_600_256_60[15] = { +UINT16 Seq_800_600_256_60[15] = { 0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1107, 0x0008, 0x4a0b, 0x5b0c, 0x450d, 0x510e, 0x2b1b, 0x2f1c, 0x301d, 0x3a1e }; -UINT16 Seq_800_600_32bpp_60[15] = { +UINT16 Seq_800_600_32bpp_60[15] = { 0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1907, 0x0008, 0x4a0b, 0x5b0c, 0x450d, 0x510e, 0x2b1b, 0x2f1c, 0x301d, 0x3a1e }; -UINT8 Crtc_960_720_32bpp_60[28] = { +UINT8 Crtc_960_720_32bpp_60[28] = { 0xA3, 0x77, 0x80, 0x86, 0x85, 0x96, 0x24, 0xFD, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x88, 0xCF, 0xe0, 0x00, 0x00, 0x64, 0xE3, 0xFF, 0x4A, 0x00, 0x32 }; -UINT16 Seq_960_720_32bpp_60[15] = { +UINT16 Seq_960_720_32bpp_60[15] = { 0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1907, 0x0008, 0x4a0b, 0x5b0c, 0x450d, 0x760e, 0x2b1b, 0x2f1c, 0x301d, 0x341e }; @@ -95,14 +94,14 @@ UINT16 Seq_960_720_32bpp_60[15] = { // // 1024 x 768 x 256 color @ 60 Hertz // -UINT8 Crtc_1024_768_256_60[28] = { +UINT8 Crtc_1024_768_256_60[28] = { 0xA3, 0x7F, 0x80, 0x86, 0x85, 0x96, 0x24, 0xFD, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x88, 0xFF, 0x80, 0x00, 0x00, 0x24, 0xE3, 0xFF, 0x4A, 0x00, 0x22 }; -UINT16 Seq_1024_768_256_60[15] = { +UINT16 Seq_1024_768_256_60[15] = { 0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1107, 0x0008, 0x4a0b, 0x5b0c, 0x450d, 0x760e, 0x2b1b, 0x2f1c, 0x301d, 0x341e }; @@ -110,26 +109,26 @@ UINT16 Seq_1024_768_256_60[15] = { // // 1024 x 768 x 24-bit color @ 60 Hertz // -UINT8 Crtc_1024_768_24bpp_60[28] = { +UINT8 Crtc_1024_768_24bpp_60[28] = { 0xA3, 0x7F, 0x80, 0x86, 0x85, 0x96, 0x24, 0xFD, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x88, 0xFF, 0x80, 0x00, 0x00, 0x24, 0xE3, 0xFF, 0x4A, 0x00, 0x32 }; -UINT16 Seq_1024_768_24bpp_60[15] = { +UINT16 Seq_1024_768_24bpp_60[15] = { 0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1507, 0x0008, 0x4a0b, 0x5b0c, 0x450d, 0x760e, 0x2b1b, 0x2f1c, 0x301d, 0x341e }; -UINT8 Crtc_1024_768_32bpp_60[28] = { +UINT8 Crtc_1024_768_32bpp_60[28] = { 0xA3, 0x7F, 0x80, 0x86, 0x85, 0x96, 0x24, 0xFD, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x88, 0xFF, 0xe0, 0x00, 0x00, 0x64, 0xE3, 0xFF, 0x4A, 0x00, 0x32 }; -UINT16 Seq_1024_768_32bpp_60[15] = { +UINT16 Seq_1024_768_32bpp_60[15] = { 0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1907, 0x0008, 0x4a0b, 0x5b0c, 0x450d, 0x760e, 0x2b1b, 0x2f1c, 0x301d, 0x341e }; @@ -138,14 +137,14 @@ UINT16 Seq_1024_768_32bpp_60[15] = { /// Table of supported video modes /// QEMU_VIDEO_CIRRUS_MODES QemuVideoCirrusModes[] = { -// { 640, 480, 8, Crtc_640_480_256_60, Seq_640_480_256_60, 0xe3 }, -// { 800, 600, 8, Crtc_800_600_256_60, Seq_800_600_256_60, 0xef }, - { 640, 480, 32, Crtc_640_480_32bpp_60, Seq_640_480_32bpp_60, 0xef }, - { 800, 600, 32, Crtc_800_600_32bpp_60, Seq_800_600_32bpp_60, 0xef }, -// { 1024, 768, 8, Crtc_1024_768_256_60, Seq_1024_768_256_60, 0xef } + // { 640, 480, 8, Crtc_640_480_256_60, Seq_640_480_256_60, 0xe3 }, + // { 800, 600, 8, Crtc_800_600_256_60, Seq_800_600_256_60, 0xef }, + { 640, 480, 32, Crtc_640_480_32bpp_60, Seq_640_480_32bpp_60, 0xef }, + { 800, 600, 32, Crtc_800_600_32bpp_60, Seq_800_600_32bpp_60, 0xef }, + // { 1024, 768, 8, Crtc_1024_768_256_60, Seq_1024_768_256_60, 0xef } { 1024, 768, 24, Crtc_1024_768_24bpp_60, Seq_1024_768_24bpp_60, 0xef } -// { 1024, 768, 32, Crtc_1024_768_32bpp_60, Seq_1024_768_32bpp_60, 0xef } -// { 960, 720, 32, Crtc_960_720_32bpp_60, Seq_1024_768_32bpp_60, 0xef } + // { 1024, 768, 32, Crtc_1024_768_32bpp_60, Seq_1024_768_32bpp_60, 0xef } + // { 960, 720, 32, Crtc_960_720_32bpp_60, Seq_1024_768_32bpp_60, 0xef } }; #define QEMU_VIDEO_CIRRUS_MODE_COUNT \ @@ -160,9 +159,9 @@ QemuVideoCirrusModeSetup ( QEMU_VIDEO_PRIVATE_DATA *Private ) { - UINT32 Index; - QEMU_VIDEO_MODE_DATA *ModeData; - QEMU_VIDEO_CIRRUS_MODES *VideoMode; + UINT32 Index; + QEMU_VIDEO_MODE_DATA *ModeData; + QEMU_VIDEO_CIRRUS_MODES *VideoMode; // // Setup Video Modes @@ -173,25 +172,28 @@ QemuVideoCirrusModeSetup ( if (Private->ModeData == NULL) { return EFI_OUT_OF_RESOURCES; } - ModeData = Private->ModeData; + + ModeData = Private->ModeData; VideoMode = &QemuVideoCirrusModes[0]; - for (Index = 0; Index < QEMU_VIDEO_CIRRUS_MODE_COUNT; Index ++) { - ModeData->InternalModeIndex = Index; - ModeData->HorizontalResolution = VideoMode->Width; - ModeData->VerticalResolution = VideoMode->Height; - ModeData->ColorDepth = VideoMode->ColorDepth; - DEBUG ((DEBUG_INFO, + for (Index = 0; Index < QEMU_VIDEO_CIRRUS_MODE_COUNT; Index++) { + ModeData->InternalModeIndex = Index; + ModeData->HorizontalResolution = VideoMode->Width; + ModeData->VerticalResolution = VideoMode->Height; + ModeData->ColorDepth = VideoMode->ColorDepth; + DEBUG (( + DEBUG_INFO, "Adding Mode %d as Cirrus Internal Mode %d: %dx%d, %d-bit\n", - (INT32) (ModeData - Private->ModeData), + (INT32)(ModeData - Private->ModeData), ModeData->InternalModeIndex, ModeData->HorizontalResolution, ModeData->VerticalResolution, ModeData->ColorDepth )); - ModeData ++ ; - VideoMode ++; + ModeData++; + VideoMode++; } + Private->MaxMode = ModeData - Private->ModeData; return EFI_SUCCESS; @@ -201,26 +203,26 @@ QemuVideoCirrusModeSetup ( /// Table of supported video modes /// QEMU_VIDEO_BOCHS_MODES QemuVideoBochsModes[] = { - { 640, 480, 32 }, - { 800, 480, 32 }, - { 800, 600, 32 }, - { 832, 624, 32 }, - { 960, 640, 32 }, - { 1024, 600, 32 }, - { 1024, 768, 32 }, - { 1152, 864, 32 }, - { 1152, 870, 32 }, - { 1280, 720, 32 }, - { 1280, 760, 32 }, - { 1280, 768, 32 }, - { 1280, 800, 32 }, - { 1280, 960, 32 }, + { 640, 480, 32 }, + { 800, 480, 32 }, + { 800, 600, 32 }, + { 832, 624, 32 }, + { 960, 640, 32 }, + { 1024, 600, 32 }, + { 1024, 768, 32 }, + { 1152, 864, 32 }, + { 1152, 870, 32 }, + { 1280, 720, 32 }, + { 1280, 760, 32 }, + { 1280, 768, 32 }, + { 1280, 800, 32 }, + { 1280, 960, 32 }, { 1280, 1024, 32 }, - { 1360, 768, 32 }, - { 1366, 768, 32 }, + { 1360, 768, 32 }, + { 1366, 768, 32 }, { 1400, 1050, 32 }, - { 1440, 900, 32 }, - { 1600, 900, 32 }, + { 1440, 900, 32 }, + { 1600, 900, 32 }, { 1600, 1200, 32 }, { 1680, 1050, 32 }, { 1920, 1080, 32 }, @@ -249,10 +251,10 @@ QemuVideoBochsModeSetup ( BOOLEAN IsQxl ) { - UINT32 AvailableFbSize; - UINT32 Index; - QEMU_VIDEO_MODE_DATA *ModeData; - QEMU_VIDEO_BOCHS_MODES *VideoMode; + UINT32 AvailableFbSize; + UINT32 Index; + QEMU_VIDEO_MODE_DATA *ModeData; + QEMU_VIDEO_BOCHS_MODES *VideoMode; // // Fetch the available framebuffer size. @@ -272,33 +274,64 @@ QemuVideoBochsModeSetup ( // where it is also available. // if (IsQxl) { - UINT32 Signature; - UINT32 DrawStart; + UINT32 Signature; + UINT32 DrawStart; - Signature = 0; - DrawStart = 0xFFFFFFFF; + Signature = 0; + DrawStart = 0xFFFFFFFF; AvailableFbSize = 0; if (EFI_ERROR ( - Private->PciIo->Mem.Read (Private->PciIo, EfiPciIoWidthUint32, - PCI_BAR_IDX2, 0, 1, &Signature)) || - Signature != SIGNATURE_32 ('Q', 'X', 'R', 'O') || + Private->PciIo->Mem.Read ( + Private->PciIo, + EfiPciIoWidthUint32, + PCI_BAR_IDX2, + 0, + 1, + &Signature + ) + ) || + (Signature != SIGNATURE_32 ('Q', 'X', 'R', 'O')) || EFI_ERROR ( - Private->PciIo->Mem.Read (Private->PciIo, EfiPciIoWidthUint32, - PCI_BAR_IDX2, 36, 1, &DrawStart)) || - DrawStart != 0 || + Private->PciIo->Mem.Read ( + Private->PciIo, + EfiPciIoWidthUint32, + PCI_BAR_IDX2, + 36, + 1, + &DrawStart + ) + ) || + (DrawStart != 0) || EFI_ERROR ( - Private->PciIo->Mem.Read (Private->PciIo, EfiPciIoWidthUint32, - PCI_BAR_IDX2, 40, 1, &AvailableFbSize))) { - DEBUG ((DEBUG_ERROR, "%a: can't read size of drawable buffer from QXL " - "ROM\n", __FUNCTION__)); + Private->PciIo->Mem.Read ( + Private->PciIo, + EfiPciIoWidthUint32, + PCI_BAR_IDX2, + 40, + 1, + &AvailableFbSize + ) + )) + { + DEBUG (( + DEBUG_ERROR, + "%a: can't read size of drawable buffer from QXL " + "ROM\n", + __FUNCTION__ + )); return EFI_NOT_FOUND; } } else { AvailableFbSize = BochsRead (Private, VBE_DISPI_INDEX_VIDEO_MEMORY_64K); AvailableFbSize *= SIZE_64KB; } - DEBUG ((DEBUG_INFO, "%a: AvailableFbSize=0x%x\n", __FUNCTION__, - AvailableFbSize)); + + DEBUG (( + DEBUG_INFO, + "%a: AvailableFbSize=0x%x\n", + __FUNCTION__, + AvailableFbSize + )); // // Setup Video Modes @@ -309,34 +342,37 @@ QemuVideoBochsModeSetup ( if (Private->ModeData == NULL) { return EFI_OUT_OF_RESOURCES; } - ModeData = Private->ModeData; + + ModeData = Private->ModeData; VideoMode = &QemuVideoBochsModes[0]; - for (Index = 0; Index < QEMU_VIDEO_BOCHS_MODE_COUNT; Index ++) { - UINTN RequiredFbSize; + for (Index = 0; Index < QEMU_VIDEO_BOCHS_MODE_COUNT; Index++) { + UINTN RequiredFbSize; ASSERT (VideoMode->ColorDepth % 8 == 0); - RequiredFbSize = (UINTN) VideoMode->Width * VideoMode->Height * + RequiredFbSize = (UINTN)VideoMode->Width * VideoMode->Height * (VideoMode->ColorDepth / 8); if (RequiredFbSize <= AvailableFbSize) { ModeData->InternalModeIndex = Index; ModeData->HorizontalResolution = VideoMode->Width; ModeData->VerticalResolution = VideoMode->Height; ModeData->ColorDepth = VideoMode->ColorDepth; - DEBUG ((DEBUG_INFO, + DEBUG (( + DEBUG_INFO, "Adding Mode %d as Bochs Internal Mode %d: %dx%d, %d-bit\n", - (INT32) (ModeData - Private->ModeData), + (INT32)(ModeData - Private->ModeData), ModeData->InternalModeIndex, ModeData->HorizontalResolution, ModeData->VerticalResolution, ModeData->ColorDepth )); - ModeData ++ ; + ModeData++; } - VideoMode ++; + + VideoMode++; } + Private->MaxMode = ModeData - Private->ModeData; return EFI_SUCCESS; } - diff --git a/OvmfPkg/QemuVideoDxe/Qemu.h b/OvmfPkg/QemuVideoDxe/Qemu.h index 87c933935f..8f05898f86 100644 --- a/OvmfPkg/QemuVideoDxe/Qemu.h +++ b/OvmfPkg/QemuVideoDxe/Qemu.h @@ -13,7 +13,6 @@ #ifndef _QEMU_H_ #define _QEMU_H_ - #include #include #include @@ -37,33 +36,33 @@ // // QEMU Video PCI Configuration Header values // -#define CIRRUS_LOGIC_VENDOR_ID 0x1013 -#define CIRRUS_LOGIC_5430_DEVICE_ID 0x00a8 -#define CIRRUS_LOGIC_5430_ALTERNATE_DEVICE_ID 0x00a0 -#define CIRRUS_LOGIC_5446_DEVICE_ID 0x00b8 +#define CIRRUS_LOGIC_VENDOR_ID 0x1013 +#define CIRRUS_LOGIC_5430_DEVICE_ID 0x00a8 +#define CIRRUS_LOGIC_5430_ALTERNATE_DEVICE_ID 0x00a0 +#define CIRRUS_LOGIC_5446_DEVICE_ID 0x00b8 // // QEMU Vide Graphical Mode Data // typedef struct { - UINT32 InternalModeIndex; // points into card-specific mode table - UINT32 HorizontalResolution; - UINT32 VerticalResolution; - UINT32 ColorDepth; + UINT32 InternalModeIndex; // points into card-specific mode table + UINT32 HorizontalResolution; + UINT32 VerticalResolution; + UINT32 ColorDepth; } QEMU_VIDEO_MODE_DATA; -#define PIXEL_RED_SHIFT 0 -#define PIXEL_GREEN_SHIFT 3 -#define PIXEL_BLUE_SHIFT 6 +#define PIXEL_RED_SHIFT 0 +#define PIXEL_GREEN_SHIFT 3 +#define PIXEL_BLUE_SHIFT 6 #define PIXEL_RED_MASK (BIT7 | BIT6 | BIT5) #define PIXEL_GREEN_MASK (BIT4 | BIT3 | BIT2) #define PIXEL_BLUE_MASK (BIT1 | BIT0) -#define PIXEL_TO_COLOR_BYTE(pixel, mask, shift) ((UINT8) ((pixel & mask) << shift)) -#define PIXEL_TO_RED_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_RED_MASK, PIXEL_RED_SHIFT) -#define PIXEL_TO_GREEN_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_GREEN_MASK, PIXEL_GREEN_SHIFT) -#define PIXEL_TO_BLUE_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_BLUE_MASK, PIXEL_BLUE_SHIFT) +#define PIXEL_TO_COLOR_BYTE(pixel, mask, shift) ((UINT8) ((pixel & mask) << shift)) +#define PIXEL_TO_RED_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_RED_MASK, PIXEL_RED_SHIFT) +#define PIXEL_TO_GREEN_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_GREEN_MASK, PIXEL_GREEN_SHIFT) +#define PIXEL_TO_BLUE_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_BLUE_MASK, PIXEL_BLUE_SHIFT) #define RGB_BYTES_TO_PIXEL(Red, Green, Blue) \ (UINT8) ( (((Red) >> PIXEL_RED_SHIFT) & PIXEL_RED_MASK) | \ @@ -90,117 +89,116 @@ typedef enum { } QEMU_VIDEO_VARIANT; typedef struct { - UINT8 SubClass; - UINT16 VendorId; - UINT16 DeviceId; - QEMU_VIDEO_VARIANT Variant; - CHAR16 *Name; + UINT8 SubClass; + UINT16 VendorId; + UINT16 DeviceId; + QEMU_VIDEO_VARIANT Variant; + CHAR16 *Name; } QEMU_VIDEO_CARD; typedef struct { - UINT64 Signature; - EFI_HANDLE Handle; - EFI_PCI_IO_PROTOCOL *PciIo; - UINT64 OriginalPciAttributes; - EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput; - EFI_DEVICE_PATH_PROTOCOL *GopDevicePath; + UINT64 Signature; + EFI_HANDLE Handle; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT64 OriginalPciAttributes; + EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput; + EFI_DEVICE_PATH_PROTOCOL *GopDevicePath; // // The next two fields match the client-visible // EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.MaxMode field. // - UINTN MaxMode; - QEMU_VIDEO_MODE_DATA *ModeData; + UINTN MaxMode; + QEMU_VIDEO_MODE_DATA *ModeData; - QEMU_VIDEO_VARIANT Variant; - FRAME_BUFFER_CONFIGURE *FrameBufferBltConfigure; - UINTN FrameBufferBltConfigureSize; - UINT8 FrameBufferVramBarIndex; + QEMU_VIDEO_VARIANT Variant; + FRAME_BUFFER_CONFIGURE *FrameBufferBltConfigure; + UINTN FrameBufferBltConfigureSize; + UINT8 FrameBufferVramBarIndex; } QEMU_VIDEO_PRIVATE_DATA; /// /// Card-specific Video Mode structures /// typedef struct { - UINT32 Width; - UINT32 Height; - UINT32 ColorDepth; - UINT8 *CrtcSettings; - UINT16 *SeqSettings; - UINT8 MiscSetting; + UINT32 Width; + UINT32 Height; + UINT32 ColorDepth; + UINT8 *CrtcSettings; + UINT16 *SeqSettings; + UINT8 MiscSetting; } QEMU_VIDEO_CIRRUS_MODES; typedef struct { - UINT32 Width; - UINT32 Height; - UINT32 ColorDepth; + UINT32 Width; + UINT32 Height; + UINT32 ColorDepth; } QEMU_VIDEO_BOCHS_MODES; #define QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS(a) \ CR(a, QEMU_VIDEO_PRIVATE_DATA, GraphicsOutput, QEMU_VIDEO_PRIVATE_DATA_SIGNATURE) - // // Global Variables // -extern UINT8 AttributeController[]; -extern UINT8 GraphicsController[]; -extern UINT8 Crtc_640_480_256_60[]; -extern UINT16 Seq_640_480_256_60[]; -extern UINT8 Crtc_800_600_256_60[]; -extern UINT16 Seq_800_600_256_60[]; -extern UINT8 Crtc_1024_768_256_60[]; -extern UINT16 Seq_1024_768_256_60[]; -extern QEMU_VIDEO_CIRRUS_MODES QemuVideoCirrusModes[]; -extern QEMU_VIDEO_BOCHS_MODES QemuVideoBochsModes[]; -extern EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding; -extern EFI_COMPONENT_NAME_PROTOCOL gQemuVideoComponentName; -extern EFI_COMPONENT_NAME2_PROTOCOL gQemuVideoComponentName2; +extern UINT8 AttributeController[]; +extern UINT8 GraphicsController[]; +extern UINT8 Crtc_640_480_256_60[]; +extern UINT16 Seq_640_480_256_60[]; +extern UINT8 Crtc_800_600_256_60[]; +extern UINT16 Seq_800_600_256_60[]; +extern UINT8 Crtc_1024_768_256_60[]; +extern UINT16 Seq_1024_768_256_60[]; +extern QEMU_VIDEO_CIRRUS_MODES QemuVideoCirrusModes[]; +extern QEMU_VIDEO_BOCHS_MODES QemuVideoBochsModes[]; +extern EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding; +extern EFI_COMPONENT_NAME_PROTOCOL gQemuVideoComponentName; +extern EFI_COMPONENT_NAME2_PROTOCOL gQemuVideoComponentName2; // // Io Registers defined by VGA // -#define CRTC_ADDRESS_REGISTER 0x3d4 -#define CRTC_DATA_REGISTER 0x3d5 -#define SEQ_ADDRESS_REGISTER 0x3c4 -#define SEQ_DATA_REGISTER 0x3c5 -#define GRAPH_ADDRESS_REGISTER 0x3ce -#define GRAPH_DATA_REGISTER 0x3cf -#define ATT_ADDRESS_REGISTER 0x3c0 -#define MISC_OUTPUT_REGISTER 0x3c2 -#define INPUT_STATUS_1_REGISTER 0x3da -#define DAC_PIXEL_MASK_REGISTER 0x3c6 -#define PALETTE_INDEX_REGISTER 0x3c8 -#define PALETTE_DATA_REGISTER 0x3c9 - -#define VBE_DISPI_IOPORT_INDEX 0x01CE -#define VBE_DISPI_IOPORT_DATA 0x01D0 - -#define VBE_DISPI_INDEX_ID 0x0 -#define VBE_DISPI_INDEX_XRES 0x1 -#define VBE_DISPI_INDEX_YRES 0x2 -#define VBE_DISPI_INDEX_BPP 0x3 -#define VBE_DISPI_INDEX_ENABLE 0x4 -#define VBE_DISPI_INDEX_BANK 0x5 -#define VBE_DISPI_INDEX_VIRT_WIDTH 0x6 -#define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7 -#define VBE_DISPI_INDEX_X_OFFSET 0x8 -#define VBE_DISPI_INDEX_Y_OFFSET 0x9 -#define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa - -#define VBE_DISPI_ID0 0xB0C0 -#define VBE_DISPI_ID1 0xB0C1 -#define VBE_DISPI_ID2 0xB0C2 -#define VBE_DISPI_ID3 0xB0C3 -#define VBE_DISPI_ID4 0xB0C4 -#define VBE_DISPI_ID5 0xB0C5 - -#define VBE_DISPI_DISABLED 0x00 -#define VBE_DISPI_ENABLED 0x01 -#define VBE_DISPI_GETCAPS 0x02 -#define VBE_DISPI_8BIT_DAC 0x20 -#define VBE_DISPI_LFB_ENABLED 0x40 -#define VBE_DISPI_NOCLEARMEM 0x80 +#define CRTC_ADDRESS_REGISTER 0x3d4 +#define CRTC_DATA_REGISTER 0x3d5 +#define SEQ_ADDRESS_REGISTER 0x3c4 +#define SEQ_DATA_REGISTER 0x3c5 +#define GRAPH_ADDRESS_REGISTER 0x3ce +#define GRAPH_DATA_REGISTER 0x3cf +#define ATT_ADDRESS_REGISTER 0x3c0 +#define MISC_OUTPUT_REGISTER 0x3c2 +#define INPUT_STATUS_1_REGISTER 0x3da +#define DAC_PIXEL_MASK_REGISTER 0x3c6 +#define PALETTE_INDEX_REGISTER 0x3c8 +#define PALETTE_DATA_REGISTER 0x3c9 + +#define VBE_DISPI_IOPORT_INDEX 0x01CE +#define VBE_DISPI_IOPORT_DATA 0x01D0 + +#define VBE_DISPI_INDEX_ID 0x0 +#define VBE_DISPI_INDEX_XRES 0x1 +#define VBE_DISPI_INDEX_YRES 0x2 +#define VBE_DISPI_INDEX_BPP 0x3 +#define VBE_DISPI_INDEX_ENABLE 0x4 +#define VBE_DISPI_INDEX_BANK 0x5 +#define VBE_DISPI_INDEX_VIRT_WIDTH 0x6 +#define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7 +#define VBE_DISPI_INDEX_X_OFFSET 0x8 +#define VBE_DISPI_INDEX_Y_OFFSET 0x9 +#define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa + +#define VBE_DISPI_ID0 0xB0C0 +#define VBE_DISPI_ID1 0xB0C1 +#define VBE_DISPI_ID2 0xB0C2 +#define VBE_DISPI_ID3 0xB0C3 +#define VBE_DISPI_ID4 0xB0C4 +#define VBE_DISPI_ID5 0xB0C5 + +#define VBE_DISPI_DISABLED 0x00 +#define VBE_DISPI_ENABLED 0x01 +#define VBE_DISPI_GETCAPS 0x02 +#define VBE_DISPI_8BIT_DAC 0x20 +#define VBE_DISPI_LFB_ENABLED 0x40 +#define VBE_DISPI_NOCLEARMEM 0x80 // // Graphics Output Hardware abstraction internal worker functions @@ -215,10 +213,10 @@ QemuVideoGraphicsOutputDestructor ( QEMU_VIDEO_PRIVATE_DATA *Private ); - // // EFI_DRIVER_BINDING_PROTOCOL Protocol Interface // + /** TODO: Add function description @@ -278,6 +276,7 @@ QemuVideoControllerDriverStop ( // // EFI Component Name Functions // + /** Retrieves a Unicode string that is the user readable name of the driver. @@ -325,7 +324,6 @@ QemuVideoComponentNameGetDriverName ( OUT CHAR16 **DriverName ); - /** Retrieves a Unicode string that is the user readable name of the controller that is being managed by a driver. @@ -397,14 +395,13 @@ QemuVideoComponentNameGetDriverName ( EFI_STATUS EFIAPI QemuVideoComponentNameGetControllerName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ); - // // Local Function Prototypes // @@ -423,10 +420,10 @@ InitializeBochsGraphicsMode ( VOID SetPaletteColor ( QEMU_VIDEO_PRIVATE_DATA *Private, - UINTN Index, - UINT8 Red, - UINT8 Green, - UINT8 Blue + UINTN Index, + UINT8 Red, + UINT8 Green, + UINT8 Blue ); VOID @@ -437,34 +434,34 @@ SetDefaultPalette ( VOID DrawLogo ( QEMU_VIDEO_PRIVATE_DATA *Private, - UINTN ScreenWidth, - UINTN ScreenHeight + UINTN ScreenWidth, + UINTN ScreenHeight ); VOID outb ( QEMU_VIDEO_PRIVATE_DATA *Private, - UINTN Address, - UINT8 Data + UINTN Address, + UINT8 Data ); VOID outw ( QEMU_VIDEO_PRIVATE_DATA *Private, - UINTN Address, - UINT16 Data + UINTN Address, + UINT16 Data ); UINT8 inb ( QEMU_VIDEO_PRIVATE_DATA *Private, - UINTN Address + UINTN Address ); UINT16 inw ( QEMU_VIDEO_PRIVATE_DATA *Private, - UINTN Address + UINTN Address ); VOID @@ -500,7 +497,8 @@ QemuVideoBochsModeSetup ( VOID InstallVbeShim ( - IN CONST CHAR16 *CardName, - IN EFI_PHYSICAL_ADDRESS FrameBufferBase + IN CONST CHAR16 *CardName, + IN EFI_PHYSICAL_ADDRESS FrameBufferBase ); + #endif diff --git a/OvmfPkg/QemuVideoDxe/VbeShim.c b/OvmfPkg/QemuVideoDxe/VbeShim.c index 048ffa7058..8faa146b6c 100644 --- a/OvmfPkg/QemuVideoDxe/VbeShim.c +++ b/OvmfPkg/QemuVideoDxe/VbeShim.c @@ -26,8 +26,8 @@ #pragma pack (1) typedef struct { - UINT16 Offset; - UINT16 Segment; + UINT16 Offset; + UINT16 Segment; } IVT_ENTRY; #pragma pack () @@ -35,7 +35,7 @@ typedef struct { // This string is displayed by Windows 2008 R2 SP1 in the Screen Resolution, // Advanced Settings dialog. It should be short. // -STATIC CONST CHAR8 mProductRevision[] = "OVMF Int10h (fake)"; +STATIC CONST CHAR8 mProductRevision[] = "OVMF Int10h (fake)"; /** Install the VBE Info and VBE Mode Info structures, and the VBE service @@ -51,23 +51,23 @@ STATIC CONST CHAR8 mProductRevision[] = "OVMF Int10h (fake)"; **/ VOID InstallVbeShim ( - IN CONST CHAR16 *CardName, - IN EFI_PHYSICAL_ADDRESS FrameBufferBase + IN CONST CHAR16 *CardName, + IN EFI_PHYSICAL_ADDRESS FrameBufferBase ) { - EFI_PHYSICAL_ADDRESS Segment0, SegmentC, SegmentF; - UINTN Segment0Pages; - IVT_ENTRY *Int0x10; - EFI_STATUS Segment0AllocationStatus; - UINT16 HostBridgeDevId; - UINTN Pam1Address; - UINT8 Pam1; - UINTN SegmentCPages; - VBE_INFO *VbeInfoFull; - VBE_INFO_BASE *VbeInfo; - UINT8 *Ptr; - UINTN Printed; - VBE_MODE_INFO *VbeModeInfo; + EFI_PHYSICAL_ADDRESS Segment0, SegmentC, SegmentF; + UINTN Segment0Pages; + IVT_ENTRY *Int0x10; + EFI_STATUS Segment0AllocationStatus; + UINT16 HostBridgeDevId; + UINTN Pam1Address; + UINT8 Pam1; + UINTN SegmentCPages; + VBE_INFO *VbeInfoFull; + VBE_INFO_BASE *VbeInfo; + UINT8 *Ptr; + UINTN Printed; + VBE_MODE_INFO *VbeModeInfo; if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & (BIT0|BIT7)) == BIT0) { DEBUG (( @@ -95,8 +95,8 @@ InstallVbeShim ( // // The allocation request may fail, eg. if LegacyBiosDxe has already run. // - Segment0Pages = 1; - Int0x10 = (IVT_ENTRY *)(UINTN)(Segment0 + 0x10 * sizeof (IVT_ENTRY)); + Segment0Pages = 1; + Int0x10 = (IVT_ENTRY *)(UINTN)(Segment0 + 0x10 * sizeof (IVT_ENTRY)); Segment0AllocationStatus = gBS->AllocatePages ( AllocateAddress, EfiBootServicesCode, @@ -105,7 +105,7 @@ InstallVbeShim ( ); if (EFI_ERROR (Segment0AllocationStatus)) { - EFI_PHYSICAL_ADDRESS Handler; + EFI_PHYSICAL_ADDRESS Handler; // // Check if a video BIOS handler has been installed previously -- we @@ -113,9 +113,14 @@ InstallVbeShim ( // it's already present. // Handler = (Int0x10->Segment << 4) + Int0x10->Offset; - if (Handler >= SegmentC && Handler < SegmentF) { - DEBUG ((DEBUG_INFO, "%a: Video BIOS handler found at %04x:%04x\n", - __FUNCTION__, Int0x10->Segment, Int0x10->Offset)); + if ((Handler >= SegmentC) && (Handler < SegmentF)) { + DEBUG (( + DEBUG_INFO, + "%a: Video BIOS handler found at %04x:%04x\n", + __FUNCTION__, + Int0x10->Segment, + Int0x10->Offset + )); return; } @@ -145,26 +150,28 @@ InstallVbeShim ( // HostBridgeDevId = PcdGet16 (PcdOvmfHostBridgePciDevId); switch (HostBridgeDevId) { - case INTEL_82441_DEVICE_ID: - Pam1Address = PMC_REGISTER_PIIX4 (PIIX4_PAM1); - break; - case INTEL_Q35_MCH_DEVICE_ID: - Pam1Address = DRAMC_REGISTER_Q35 (MCH_PAM1); - break; - default: - DEBUG (( - DEBUG_ERROR, - "%a: unknown host bridge device ID: 0x%04x\n", - __FUNCTION__, - HostBridgeDevId - )); - ASSERT (FALSE); + case INTEL_82441_DEVICE_ID: + Pam1Address = PMC_REGISTER_PIIX4 (PIIX4_PAM1); + break; + case INTEL_Q35_MCH_DEVICE_ID: + Pam1Address = DRAMC_REGISTER_Q35 (MCH_PAM1); + break; + default: + DEBUG (( + DEBUG_ERROR, + "%a: unknown host bridge device ID: 0x%04x\n", + __FUNCTION__, + HostBridgeDevId + )); + ASSERT (FALSE); + + if (!EFI_ERROR (Segment0AllocationStatus)) { + gBS->FreePages (Segment0, Segment0Pages); + } - if (!EFI_ERROR (Segment0AllocationStatus)) { - gBS->FreePages (Segment0, Segment0Pages); - } - return; + return; } + // // low nibble covers 0xC0000 to 0xC3FFF // high nibble covers 0xC4000 to 0xC7FFF @@ -201,12 +208,12 @@ InstallVbeShim ( VbeInfo->Capabilities = BIT0; // DAC can be switched into 8-bit mode VbeInfo->ModeListAddress = (UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr; - *(UINT16*)Ptr = 0x00f1; // mode number - Ptr += 2; - *(UINT16*)Ptr = 0xFFFF; // mode list terminator - Ptr += 2; + *(UINT16 *)Ptr = 0x00f1; // mode number + Ptr += 2; + *(UINT16 *)Ptr = 0xFFFF; // mode list terminator + Ptr += 2; - VbeInfo->VideoMem64K = (UINT16)((1024 * 768 * 4 + 65535) / 65536); + VbeInfo->VideoMem64K = (UINT16)((1024 * 768 * 4 + 65535) / 65536); VbeInfo->OemSoftwareVersion = 0x0000; VbeInfo->VendorNameAddress = (UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr; @@ -214,9 +221,12 @@ InstallVbeShim ( Ptr += 5; VbeInfo->ProductNameAddress = (UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr; - Printed = AsciiSPrint ((CHAR8 *)Ptr, - sizeof VbeInfoFull->Buffer - (Ptr - VbeInfoFull->Buffer), "%s", - CardName); + Printed = AsciiSPrint ( + (CHAR8 *)Ptr, + sizeof VbeInfoFull->Buffer - (Ptr - VbeInfoFull->Buffer), + "%s", + CardName + ); Ptr += Printed + 1; VbeInfo->ProductRevAddress = (UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr; @@ -246,7 +256,7 @@ InstallVbeShim ( // bit1: bit1: readable // bit2: writeable // - VbeModeInfo->WindowAAttr = BIT2 | BIT1 | BIT0; + VbeModeInfo->WindowAAttr = BIT2 | BIT1 | BIT0; VbeModeInfo->WindowBAttr = 0x00; VbeModeInfo->WindowGranularityKB = 0x0040; @@ -309,8 +319,8 @@ InstallVbeShim ( // // Second, point the Int10h vector at the shim. // - Int0x10->Segment = (UINT16) ((UINT32)SegmentC >> 4); - Int0x10->Offset = (UINT16) ((UINTN) (VbeModeInfo + 1) - SegmentC); + Int0x10->Segment = (UINT16)((UINT32)SegmentC >> 4); + Int0x10->Offset = (UINT16)((UINTN)(VbeModeInfo + 1) - SegmentC); DEBUG ((DEBUG_INFO, "%a: VBE shim installed\n", __FUNCTION__)); } diff --git a/OvmfPkg/QemuVideoDxe/VbeShim.h b/OvmfPkg/QemuVideoDxe/VbeShim.h index cc9b6e14cd..f72e18843f 100644 --- a/OvmfPkg/QemuVideoDxe/VbeShim.h +++ b/OvmfPkg/QemuVideoDxe/VbeShim.h @@ -1,701 +1,702 @@ // // THIS FILE WAS GENERATED BY "VbeShim.sh". DO NOT EDIT. // + #ifndef _VBE_SHIM_H_ #define _VBE_SHIM_H_ -STATIC CONST UINT8 mVbeShim[] = { - /* 00000000 nop */ 0x90, - /* 00000001 nop */ 0x90, - /* 00000002 nop */ 0x90, - /* 00000003 nop */ 0x90, - /* 00000004 nop */ 0x90, - /* 00000005 nop */ 0x90, - /* 00000006 nop */ 0x90, - /* 00000007 nop */ 0x90, - /* 00000008 nop */ 0x90, - /* 00000009 nop */ 0x90, - /* 0000000A nop */ 0x90, - /* 0000000B nop */ 0x90, - /* 0000000C nop */ 0x90, - /* 0000000D nop */ 0x90, - /* 0000000E nop */ 0x90, - /* 0000000F nop */ 0x90, - /* 00000010 nop */ 0x90, - /* 00000011 nop */ 0x90, - /* 00000012 nop */ 0x90, - /* 00000013 nop */ 0x90, - /* 00000014 nop */ 0x90, - /* 00000015 nop */ 0x90, - /* 00000016 nop */ 0x90, - /* 00000017 nop */ 0x90, - /* 00000018 nop */ 0x90, - /* 00000019 nop */ 0x90, - /* 0000001A nop */ 0x90, - /* 0000001B nop */ 0x90, - /* 0000001C nop */ 0x90, - /* 0000001D nop */ 0x90, - /* 0000001E nop */ 0x90, - /* 0000001F nop */ 0x90, - /* 00000020 nop */ 0x90, - /* 00000021 nop */ 0x90, - /* 00000022 nop */ 0x90, - /* 00000023 nop */ 0x90, - /* 00000024 nop */ 0x90, - /* 00000025 nop */ 0x90, - /* 00000026 nop */ 0x90, - /* 00000027 nop */ 0x90, - /* 00000028 nop */ 0x90, - /* 00000029 nop */ 0x90, - /* 0000002A nop */ 0x90, - /* 0000002B nop */ 0x90, - /* 0000002C nop */ 0x90, - /* 0000002D nop */ 0x90, - /* 0000002E nop */ 0x90, - /* 0000002F nop */ 0x90, - /* 00000030 nop */ 0x90, - /* 00000031 nop */ 0x90, - /* 00000032 nop */ 0x90, - /* 00000033 nop */ 0x90, - /* 00000034 nop */ 0x90, - /* 00000035 nop */ 0x90, - /* 00000036 nop */ 0x90, - /* 00000037 nop */ 0x90, - /* 00000038 nop */ 0x90, - /* 00000039 nop */ 0x90, - /* 0000003A nop */ 0x90, - /* 0000003B nop */ 0x90, - /* 0000003C nop */ 0x90, - /* 0000003D nop */ 0x90, - /* 0000003E nop */ 0x90, - /* 0000003F nop */ 0x90, - /* 00000040 nop */ 0x90, - /* 00000041 nop */ 0x90, - /* 00000042 nop */ 0x90, - /* 00000043 nop */ 0x90, - /* 00000044 nop */ 0x90, - /* 00000045 nop */ 0x90, - /* 00000046 nop */ 0x90, - /* 00000047 nop */ 0x90, - /* 00000048 nop */ 0x90, - /* 00000049 nop */ 0x90, - /* 0000004A nop */ 0x90, - /* 0000004B nop */ 0x90, - /* 0000004C nop */ 0x90, - /* 0000004D nop */ 0x90, - /* 0000004E nop */ 0x90, - /* 0000004F nop */ 0x90, - /* 00000050 nop */ 0x90, - /* 00000051 nop */ 0x90, - /* 00000052 nop */ 0x90, - /* 00000053 nop */ 0x90, - /* 00000054 nop */ 0x90, - /* 00000055 nop */ 0x90, - /* 00000056 nop */ 0x90, - /* 00000057 nop */ 0x90, - /* 00000058 nop */ 0x90, - /* 00000059 nop */ 0x90, - /* 0000005A nop */ 0x90, - /* 0000005B nop */ 0x90, - /* 0000005C nop */ 0x90, - /* 0000005D nop */ 0x90, - /* 0000005E nop */ 0x90, - /* 0000005F nop */ 0x90, - /* 00000060 nop */ 0x90, - /* 00000061 nop */ 0x90, - /* 00000062 nop */ 0x90, - /* 00000063 nop */ 0x90, - /* 00000064 nop */ 0x90, - /* 00000065 nop */ 0x90, - /* 00000066 nop */ 0x90, - /* 00000067 nop */ 0x90, - /* 00000068 nop */ 0x90, - /* 00000069 nop */ 0x90, - /* 0000006A nop */ 0x90, - /* 0000006B nop */ 0x90, - /* 0000006C nop */ 0x90, - /* 0000006D nop */ 0x90, - /* 0000006E nop */ 0x90, - /* 0000006F nop */ 0x90, - /* 00000070 nop */ 0x90, - /* 00000071 nop */ 0x90, - /* 00000072 nop */ 0x90, - /* 00000073 nop */ 0x90, - /* 00000074 nop */ 0x90, - /* 00000075 nop */ 0x90, - /* 00000076 nop */ 0x90, - /* 00000077 nop */ 0x90, - /* 00000078 nop */ 0x90, - /* 00000079 nop */ 0x90, - /* 0000007A nop */ 0x90, - /* 0000007B nop */ 0x90, - /* 0000007C nop */ 0x90, - /* 0000007D nop */ 0x90, - /* 0000007E nop */ 0x90, - /* 0000007F nop */ 0x90, - /* 00000080 nop */ 0x90, - /* 00000081 nop */ 0x90, - /* 00000082 nop */ 0x90, - /* 00000083 nop */ 0x90, - /* 00000084 nop */ 0x90, - /* 00000085 nop */ 0x90, - /* 00000086 nop */ 0x90, - /* 00000087 nop */ 0x90, - /* 00000088 nop */ 0x90, - /* 00000089 nop */ 0x90, - /* 0000008A nop */ 0x90, - /* 0000008B nop */ 0x90, - /* 0000008C nop */ 0x90, - /* 0000008D nop */ 0x90, - /* 0000008E nop */ 0x90, - /* 0000008F nop */ 0x90, - /* 00000090 nop */ 0x90, - /* 00000091 nop */ 0x90, - /* 00000092 nop */ 0x90, - /* 00000093 nop */ 0x90, - /* 00000094 nop */ 0x90, - /* 00000095 nop */ 0x90, - /* 00000096 nop */ 0x90, - /* 00000097 nop */ 0x90, - /* 00000098 nop */ 0x90, - /* 00000099 nop */ 0x90, - /* 0000009A nop */ 0x90, - /* 0000009B nop */ 0x90, - /* 0000009C nop */ 0x90, - /* 0000009D nop */ 0x90, - /* 0000009E nop */ 0x90, - /* 0000009F nop */ 0x90, - /* 000000A0 nop */ 0x90, - /* 000000A1 nop */ 0x90, - /* 000000A2 nop */ 0x90, - /* 000000A3 nop */ 0x90, - /* 000000A4 nop */ 0x90, - /* 000000A5 nop */ 0x90, - /* 000000A6 nop */ 0x90, - /* 000000A7 nop */ 0x90, - /* 000000A8 nop */ 0x90, - /* 000000A9 nop */ 0x90, - /* 000000AA nop */ 0x90, - /* 000000AB nop */ 0x90, - /* 000000AC nop */ 0x90, - /* 000000AD nop */ 0x90, - /* 000000AE nop */ 0x90, - /* 000000AF nop */ 0x90, - /* 000000B0 nop */ 0x90, - /* 000000B1 nop */ 0x90, - /* 000000B2 nop */ 0x90, - /* 000000B3 nop */ 0x90, - /* 000000B4 nop */ 0x90, - /* 000000B5 nop */ 0x90, - /* 000000B6 nop */ 0x90, - /* 000000B7 nop */ 0x90, - /* 000000B8 nop */ 0x90, - /* 000000B9 nop */ 0x90, - /* 000000BA nop */ 0x90, - /* 000000BB nop */ 0x90, - /* 000000BC nop */ 0x90, - /* 000000BD nop */ 0x90, - /* 000000BE nop */ 0x90, - /* 000000BF nop */ 0x90, - /* 000000C0 nop */ 0x90, - /* 000000C1 nop */ 0x90, - /* 000000C2 nop */ 0x90, - /* 000000C3 nop */ 0x90, - /* 000000C4 nop */ 0x90, - /* 000000C5 nop */ 0x90, - /* 000000C6 nop */ 0x90, - /* 000000C7 nop */ 0x90, - /* 000000C8 nop */ 0x90, - /* 000000C9 nop */ 0x90, - /* 000000CA nop */ 0x90, - /* 000000CB nop */ 0x90, - /* 000000CC nop */ 0x90, - /* 000000CD nop */ 0x90, - /* 000000CE nop */ 0x90, - /* 000000CF nop */ 0x90, - /* 000000D0 nop */ 0x90, - /* 000000D1 nop */ 0x90, - /* 000000D2 nop */ 0x90, - /* 000000D3 nop */ 0x90, - /* 000000D4 nop */ 0x90, - /* 000000D5 nop */ 0x90, - /* 000000D6 nop */ 0x90, - /* 000000D7 nop */ 0x90, - /* 000000D8 nop */ 0x90, - /* 000000D9 nop */ 0x90, - /* 000000DA nop */ 0x90, - /* 000000DB nop */ 0x90, - /* 000000DC nop */ 0x90, - /* 000000DD nop */ 0x90, - /* 000000DE nop */ 0x90, - /* 000000DF nop */ 0x90, - /* 000000E0 nop */ 0x90, - /* 000000E1 nop */ 0x90, - /* 000000E2 nop */ 0x90, - /* 000000E3 nop */ 0x90, - /* 000000E4 nop */ 0x90, - /* 000000E5 nop */ 0x90, - /* 000000E6 nop */ 0x90, - /* 000000E7 nop */ 0x90, - /* 000000E8 nop */ 0x90, - /* 000000E9 nop */ 0x90, - /* 000000EA nop */ 0x90, - /* 000000EB nop */ 0x90, - /* 000000EC nop */ 0x90, - /* 000000ED nop */ 0x90, - /* 000000EE nop */ 0x90, - /* 000000EF nop */ 0x90, - /* 000000F0 nop */ 0x90, - /* 000000F1 nop */ 0x90, - /* 000000F2 nop */ 0x90, - /* 000000F3 nop */ 0x90, - /* 000000F4 nop */ 0x90, - /* 000000F5 nop */ 0x90, - /* 000000F6 nop */ 0x90, - /* 000000F7 nop */ 0x90, - /* 000000F8 nop */ 0x90, - /* 000000F9 nop */ 0x90, - /* 000000FA nop */ 0x90, - /* 000000FB nop */ 0x90, - /* 000000FC nop */ 0x90, - /* 000000FD nop */ 0x90, - /* 000000FE nop */ 0x90, - /* 000000FF nop */ 0x90, - /* 00000100 nop */ 0x90, - /* 00000101 nop */ 0x90, - /* 00000102 nop */ 0x90, - /* 00000103 nop */ 0x90, - /* 00000104 nop */ 0x90, - /* 00000105 nop */ 0x90, - /* 00000106 nop */ 0x90, - /* 00000107 nop */ 0x90, - /* 00000108 nop */ 0x90, - /* 00000109 nop */ 0x90, - /* 0000010A nop */ 0x90, - /* 0000010B nop */ 0x90, - /* 0000010C nop */ 0x90, - /* 0000010D nop */ 0x90, - /* 0000010E nop */ 0x90, - /* 0000010F nop */ 0x90, - /* 00000110 nop */ 0x90, - /* 00000111 nop */ 0x90, - /* 00000112 nop */ 0x90, - /* 00000113 nop */ 0x90, - /* 00000114 nop */ 0x90, - /* 00000115 nop */ 0x90, - /* 00000116 nop */ 0x90, - /* 00000117 nop */ 0x90, - /* 00000118 nop */ 0x90, - /* 00000119 nop */ 0x90, - /* 0000011A nop */ 0x90, - /* 0000011B nop */ 0x90, - /* 0000011C nop */ 0x90, - /* 0000011D nop */ 0x90, - /* 0000011E nop */ 0x90, - /* 0000011F nop */ 0x90, - /* 00000120 nop */ 0x90, - /* 00000121 nop */ 0x90, - /* 00000122 nop */ 0x90, - /* 00000123 nop */ 0x90, - /* 00000124 nop */ 0x90, - /* 00000125 nop */ 0x90, - /* 00000126 nop */ 0x90, - /* 00000127 nop */ 0x90, - /* 00000128 nop */ 0x90, - /* 00000129 nop */ 0x90, - /* 0000012A nop */ 0x90, - /* 0000012B nop */ 0x90, - /* 0000012C nop */ 0x90, - /* 0000012D nop */ 0x90, - /* 0000012E nop */ 0x90, - /* 0000012F nop */ 0x90, - /* 00000130 nop */ 0x90, - /* 00000131 nop */ 0x90, - /* 00000132 nop */ 0x90, - /* 00000133 nop */ 0x90, - /* 00000134 nop */ 0x90, - /* 00000135 nop */ 0x90, - /* 00000136 nop */ 0x90, - /* 00000137 nop */ 0x90, - /* 00000138 nop */ 0x90, - /* 00000139 nop */ 0x90, - /* 0000013A nop */ 0x90, - /* 0000013B nop */ 0x90, - /* 0000013C nop */ 0x90, - /* 0000013D nop */ 0x90, - /* 0000013E nop */ 0x90, - /* 0000013F nop */ 0x90, - /* 00000140 nop */ 0x90, - /* 00000141 nop */ 0x90, - /* 00000142 nop */ 0x90, - /* 00000143 nop */ 0x90, - /* 00000144 nop */ 0x90, - /* 00000145 nop */ 0x90, - /* 00000146 nop */ 0x90, - /* 00000147 nop */ 0x90, - /* 00000148 nop */ 0x90, - /* 00000149 nop */ 0x90, - /* 0000014A nop */ 0x90, - /* 0000014B nop */ 0x90, - /* 0000014C nop */ 0x90, - /* 0000014D nop */ 0x90, - /* 0000014E nop */ 0x90, - /* 0000014F nop */ 0x90, - /* 00000150 nop */ 0x90, - /* 00000151 nop */ 0x90, - /* 00000152 nop */ 0x90, - /* 00000153 nop */ 0x90, - /* 00000154 nop */ 0x90, - /* 00000155 nop */ 0x90, - /* 00000156 nop */ 0x90, - /* 00000157 nop */ 0x90, - /* 00000158 nop */ 0x90, - /* 00000159 nop */ 0x90, - /* 0000015A nop */ 0x90, - /* 0000015B nop */ 0x90, - /* 0000015C nop */ 0x90, - /* 0000015D nop */ 0x90, - /* 0000015E nop */ 0x90, - /* 0000015F nop */ 0x90, - /* 00000160 nop */ 0x90, - /* 00000161 nop */ 0x90, - /* 00000162 nop */ 0x90, - /* 00000163 nop */ 0x90, - /* 00000164 nop */ 0x90, - /* 00000165 nop */ 0x90, - /* 00000166 nop */ 0x90, - /* 00000167 nop */ 0x90, - /* 00000168 nop */ 0x90, - /* 00000169 nop */ 0x90, - /* 0000016A nop */ 0x90, - /* 0000016B nop */ 0x90, - /* 0000016C nop */ 0x90, - /* 0000016D nop */ 0x90, - /* 0000016E nop */ 0x90, - /* 0000016F nop */ 0x90, - /* 00000170 nop */ 0x90, - /* 00000171 nop */ 0x90, - /* 00000172 nop */ 0x90, - /* 00000173 nop */ 0x90, - /* 00000174 nop */ 0x90, - /* 00000175 nop */ 0x90, - /* 00000176 nop */ 0x90, - /* 00000177 nop */ 0x90, - /* 00000178 nop */ 0x90, - /* 00000179 nop */ 0x90, - /* 0000017A nop */ 0x90, - /* 0000017B nop */ 0x90, - /* 0000017C nop */ 0x90, - /* 0000017D nop */ 0x90, - /* 0000017E nop */ 0x90, - /* 0000017F nop */ 0x90, - /* 00000180 nop */ 0x90, - /* 00000181 nop */ 0x90, - /* 00000182 nop */ 0x90, - /* 00000183 nop */ 0x90, - /* 00000184 nop */ 0x90, - /* 00000185 nop */ 0x90, - /* 00000186 nop */ 0x90, - /* 00000187 nop */ 0x90, - /* 00000188 nop */ 0x90, - /* 00000189 nop */ 0x90, - /* 0000018A nop */ 0x90, - /* 0000018B nop */ 0x90, - /* 0000018C nop */ 0x90, - /* 0000018D nop */ 0x90, - /* 0000018E nop */ 0x90, - /* 0000018F nop */ 0x90, - /* 00000190 nop */ 0x90, - /* 00000191 nop */ 0x90, - /* 00000192 nop */ 0x90, - /* 00000193 nop */ 0x90, - /* 00000194 nop */ 0x90, - /* 00000195 nop */ 0x90, - /* 00000196 nop */ 0x90, - /* 00000197 nop */ 0x90, - /* 00000198 nop */ 0x90, - /* 00000199 nop */ 0x90, - /* 0000019A nop */ 0x90, - /* 0000019B nop */ 0x90, - /* 0000019C nop */ 0x90, - /* 0000019D nop */ 0x90, - /* 0000019E nop */ 0x90, - /* 0000019F nop */ 0x90, - /* 000001A0 nop */ 0x90, - /* 000001A1 nop */ 0x90, - /* 000001A2 nop */ 0x90, - /* 000001A3 nop */ 0x90, - /* 000001A4 nop */ 0x90, - /* 000001A5 nop */ 0x90, - /* 000001A6 nop */ 0x90, - /* 000001A7 nop */ 0x90, - /* 000001A8 nop */ 0x90, - /* 000001A9 nop */ 0x90, - /* 000001AA nop */ 0x90, - /* 000001AB nop */ 0x90, - /* 000001AC nop */ 0x90, - /* 000001AD nop */ 0x90, - /* 000001AE nop */ 0x90, - /* 000001AF nop */ 0x90, - /* 000001B0 nop */ 0x90, - /* 000001B1 nop */ 0x90, - /* 000001B2 nop */ 0x90, - /* 000001B3 nop */ 0x90, - /* 000001B4 nop */ 0x90, - /* 000001B5 nop */ 0x90, - /* 000001B6 nop */ 0x90, - /* 000001B7 nop */ 0x90, - /* 000001B8 nop */ 0x90, - /* 000001B9 nop */ 0x90, - /* 000001BA nop */ 0x90, - /* 000001BB nop */ 0x90, - /* 000001BC nop */ 0x90, - /* 000001BD nop */ 0x90, - /* 000001BE nop */ 0x90, - /* 000001BF nop */ 0x90, - /* 000001C0 nop */ 0x90, - /* 000001C1 nop */ 0x90, - /* 000001C2 nop */ 0x90, - /* 000001C3 nop */ 0x90, - /* 000001C4 nop */ 0x90, - /* 000001C5 nop */ 0x90, - /* 000001C6 nop */ 0x90, - /* 000001C7 nop */ 0x90, - /* 000001C8 nop */ 0x90, - /* 000001C9 nop */ 0x90, - /* 000001CA nop */ 0x90, - /* 000001CB nop */ 0x90, - /* 000001CC nop */ 0x90, - /* 000001CD nop */ 0x90, - /* 000001CE nop */ 0x90, - /* 000001CF nop */ 0x90, - /* 000001D0 nop */ 0x90, - /* 000001D1 nop */ 0x90, - /* 000001D2 nop */ 0x90, - /* 000001D3 nop */ 0x90, - /* 000001D4 nop */ 0x90, - /* 000001D5 nop */ 0x90, - /* 000001D6 nop */ 0x90, - /* 000001D7 nop */ 0x90, - /* 000001D8 nop */ 0x90, - /* 000001D9 nop */ 0x90, - /* 000001DA nop */ 0x90, - /* 000001DB nop */ 0x90, - /* 000001DC nop */ 0x90, - /* 000001DD nop */ 0x90, - /* 000001DE nop */ 0x90, - /* 000001DF nop */ 0x90, - /* 000001E0 nop */ 0x90, - /* 000001E1 nop */ 0x90, - /* 000001E2 nop */ 0x90, - /* 000001E3 nop */ 0x90, - /* 000001E4 nop */ 0x90, - /* 000001E5 nop */ 0x90, - /* 000001E6 nop */ 0x90, - /* 000001E7 nop */ 0x90, - /* 000001E8 nop */ 0x90, - /* 000001E9 nop */ 0x90, - /* 000001EA nop */ 0x90, - /* 000001EB nop */ 0x90, - /* 000001EC nop */ 0x90, - /* 000001ED nop */ 0x90, - /* 000001EE nop */ 0x90, - /* 000001EF nop */ 0x90, - /* 000001F0 nop */ 0x90, - /* 000001F1 nop */ 0x90, - /* 000001F2 nop */ 0x90, - /* 000001F3 nop */ 0x90, - /* 000001F4 nop */ 0x90, - /* 000001F5 nop */ 0x90, - /* 000001F6 nop */ 0x90, - /* 000001F7 nop */ 0x90, - /* 000001F8 nop */ 0x90, - /* 000001F9 nop */ 0x90, - /* 000001FA nop */ 0x90, - /* 000001FB nop */ 0x90, - /* 000001FC nop */ 0x90, - /* 000001FD nop */ 0x90, - /* 000001FE nop */ 0x90, - /* 000001FF nop */ 0x90, - /* 00000200 cmp ax,0x4f00 */ 0x3D, 0x00, 0x4F, - /* 00000203 jz 0x22d */ 0x74, 0x28, - /* 00000205 cmp ax,0x4f01 */ 0x3D, 0x01, 0x4F, - /* 00000208 jz 0x245 */ 0x74, 0x3B, - /* 0000020A cmp ax,0x4f02 */ 0x3D, 0x02, 0x4F, - /* 0000020D jz 0x269 */ 0x74, 0x5A, - /* 0000020F cmp ax,0x4f03 */ 0x3D, 0x03, 0x4F, - /* 00000212 jz word 0x331 */ 0x0F, 0x84, 0x1B, 0x01, - /* 00000216 cmp ax,0x4f10 */ 0x3D, 0x10, 0x4F, - /* 00000219 jz word 0x336 */ 0x0F, 0x84, 0x19, 0x01, - /* 0000021D cmp ax,0x4f15 */ 0x3D, 0x15, 0x4F, - /* 00000220 jz word 0x338 */ 0x0F, 0x84, 0x14, 0x01, - /* 00000224 cmp ah,0x0 */ 0x80, 0xFC, 0x00, - /* 00000227 jz word 0x33a */ 0x0F, 0x84, 0x0F, 0x01, - /* 0000022B jmp short 0x22b */ 0xEB, 0xFE, - /* 0000022D push es */ 0x06, - /* 0000022E push di */ 0x57, - /* 0000022F push ds */ 0x1E, - /* 00000230 push si */ 0x56, - /* 00000231 push cx */ 0x51, - /* 00000232 push cs */ 0x0E, - /* 00000233 pop ds */ 0x1F, - /* 00000234 mov si,0x0 */ 0xBE, 0x00, 0x00, - /* 00000237 mov cx,0x100 */ 0xB9, 0x00, 0x01, - /* 0000023A cld */ 0xFC, - /* 0000023B rep movsb */ 0xF3, 0xA4, - /* 0000023D pop cx */ 0x59, - /* 0000023E pop si */ 0x5E, - /* 0000023F pop ds */ 0x1F, - /* 00000240 pop di */ 0x5F, - /* 00000241 pop es */ 0x07, - /* 00000242 jmp word 0x34c */ 0xE9, 0x07, 0x01, - /* 00000245 push es */ 0x06, - /* 00000246 push di */ 0x57, - /* 00000247 push ds */ 0x1E, - /* 00000248 push si */ 0x56, - /* 00000249 push cx */ 0x51, - /* 0000024A and cx,0xbfff */ 0x81, 0xE1, 0xFF, 0xBF, - /* 0000024E cmp cx,0xf1 */ 0x81, 0xF9, 0xF1, 0x00, - /* 00000252 jz 0x256 */ 0x74, 0x02, - /* 00000254 jmp short 0x22b */ 0xEB, 0xD5, - /* 00000256 push cs */ 0x0E, - /* 00000257 pop ds */ 0x1F, - /* 00000258 mov si,0x100 */ 0xBE, 0x00, 0x01, - /* 0000025B mov cx,0x100 */ 0xB9, 0x00, 0x01, - /* 0000025E cld */ 0xFC, - /* 0000025F rep movsb */ 0xF3, 0xA4, - /* 00000261 pop cx */ 0x59, - /* 00000262 pop si */ 0x5E, - /* 00000263 pop ds */ 0x1F, - /* 00000264 pop di */ 0x5F, - /* 00000265 pop es */ 0x07, - /* 00000266 jmp word 0x34c */ 0xE9, 0xE3, 0x00, - /* 00000269 push dx */ 0x52, - /* 0000026A push ax */ 0x50, - /* 0000026B cmp bx,0x40f1 */ 0x81, 0xFB, 0xF1, 0x40, - /* 0000026F jz 0x273 */ 0x74, 0x02, - /* 00000271 jmp short 0x22b */ 0xEB, 0xB8, - /* 00000273 mov dx,0x3c0 */ 0xBA, 0xC0, 0x03, - /* 00000276 mov al,0x20 */ 0xB0, 0x20, - /* 00000278 out dx,al */ 0xEE, - /* 00000279 push dx */ 0x52, - /* 0000027A push ax */ 0x50, - /* 0000027B mov dx,0x1ce */ 0xBA, 0xCE, 0x01, - /* 0000027E mov ax,0x4 */ 0xB8, 0x04, 0x00, - /* 00000281 out dx,ax */ 0xEF, - /* 00000282 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, - /* 00000285 mov ax,0x0 */ 0xB8, 0x00, 0x00, - /* 00000288 out dx,ax */ 0xEF, - /* 00000289 pop ax */ 0x58, - /* 0000028A pop dx */ 0x5A, - /* 0000028B push dx */ 0x52, - /* 0000028C push ax */ 0x50, - /* 0000028D mov dx,0x1ce */ 0xBA, 0xCE, 0x01, - /* 00000290 mov ax,0x5 */ 0xB8, 0x05, 0x00, - /* 00000293 out dx,ax */ 0xEF, - /* 00000294 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, - /* 00000297 mov ax,0x0 */ 0xB8, 0x00, 0x00, - /* 0000029A out dx,ax */ 0xEF, - /* 0000029B pop ax */ 0x58, - /* 0000029C pop dx */ 0x5A, - /* 0000029D push dx */ 0x52, - /* 0000029E push ax */ 0x50, - /* 0000029F mov dx,0x1ce */ 0xBA, 0xCE, 0x01, - /* 000002A2 mov ax,0x8 */ 0xB8, 0x08, 0x00, - /* 000002A5 out dx,ax */ 0xEF, - /* 000002A6 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, - /* 000002A9 mov ax,0x0 */ 0xB8, 0x00, 0x00, - /* 000002AC out dx,ax */ 0xEF, - /* 000002AD pop ax */ 0x58, - /* 000002AE pop dx */ 0x5A, - /* 000002AF push dx */ 0x52, - /* 000002B0 push ax */ 0x50, - /* 000002B1 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, - /* 000002B4 mov ax,0x9 */ 0xB8, 0x09, 0x00, - /* 000002B7 out dx,ax */ 0xEF, - /* 000002B8 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, - /* 000002BB mov ax,0x0 */ 0xB8, 0x00, 0x00, - /* 000002BE out dx,ax */ 0xEF, - /* 000002BF pop ax */ 0x58, - /* 000002C0 pop dx */ 0x5A, - /* 000002C1 push dx */ 0x52, - /* 000002C2 push ax */ 0x50, - /* 000002C3 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, - /* 000002C6 mov ax,0x3 */ 0xB8, 0x03, 0x00, - /* 000002C9 out dx,ax */ 0xEF, - /* 000002CA mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, - /* 000002CD mov ax,0x20 */ 0xB8, 0x20, 0x00, - /* 000002D0 out dx,ax */ 0xEF, - /* 000002D1 pop ax */ 0x58, - /* 000002D2 pop dx */ 0x5A, - /* 000002D3 push dx */ 0x52, - /* 000002D4 push ax */ 0x50, - /* 000002D5 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, - /* 000002D8 mov ax,0x1 */ 0xB8, 0x01, 0x00, - /* 000002DB out dx,ax */ 0xEF, - /* 000002DC mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, - /* 000002DF mov ax,0x400 */ 0xB8, 0x00, 0x04, - /* 000002E2 out dx,ax */ 0xEF, - /* 000002E3 pop ax */ 0x58, - /* 000002E4 pop dx */ 0x5A, - /* 000002E5 push dx */ 0x52, - /* 000002E6 push ax */ 0x50, - /* 000002E7 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, - /* 000002EA mov ax,0x6 */ 0xB8, 0x06, 0x00, - /* 000002ED out dx,ax */ 0xEF, - /* 000002EE mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, - /* 000002F1 mov ax,0x400 */ 0xB8, 0x00, 0x04, - /* 000002F4 out dx,ax */ 0xEF, - /* 000002F5 pop ax */ 0x58, - /* 000002F6 pop dx */ 0x5A, - /* 000002F7 push dx */ 0x52, - /* 000002F8 push ax */ 0x50, - /* 000002F9 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, - /* 000002FC mov ax,0x2 */ 0xB8, 0x02, 0x00, - /* 000002FF out dx,ax */ 0xEF, - /* 00000300 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, - /* 00000303 mov ax,0x300 */ 0xB8, 0x00, 0x03, - /* 00000306 out dx,ax */ 0xEF, - /* 00000307 pop ax */ 0x58, - /* 00000308 pop dx */ 0x5A, - /* 00000309 push dx */ 0x52, - /* 0000030A push ax */ 0x50, - /* 0000030B mov dx,0x1ce */ 0xBA, 0xCE, 0x01, - /* 0000030E mov ax,0x7 */ 0xB8, 0x07, 0x00, - /* 00000311 out dx,ax */ 0xEF, - /* 00000312 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, - /* 00000315 mov ax,0x300 */ 0xB8, 0x00, 0x03, - /* 00000318 out dx,ax */ 0xEF, - /* 00000319 pop ax */ 0x58, - /* 0000031A pop dx */ 0x5A, - /* 0000031B push dx */ 0x52, - /* 0000031C push ax */ 0x50, - /* 0000031D mov dx,0x1ce */ 0xBA, 0xCE, 0x01, - /* 00000320 mov ax,0x4 */ 0xB8, 0x04, 0x00, - /* 00000323 out dx,ax */ 0xEF, - /* 00000324 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, - /* 00000327 mov ax,0x41 */ 0xB8, 0x41, 0x00, - /* 0000032A out dx,ax */ 0xEF, - /* 0000032B pop ax */ 0x58, - /* 0000032C pop dx */ 0x5A, - /* 0000032D pop ax */ 0x58, - /* 0000032E pop dx */ 0x5A, - /* 0000032F jmp short 0x34c */ 0xEB, 0x1B, - /* 00000331 mov bx,0x40f1 */ 0xBB, 0xF1, 0x40, - /* 00000334 jmp short 0x34c */ 0xEB, 0x16, - /* 00000336 jmp short 0x350 */ 0xEB, 0x18, - /* 00000338 jmp short 0x350 */ 0xEB, 0x16, - /* 0000033A cmp al,0x3 */ 0x3C, 0x03, - /* 0000033C jz 0x345 */ 0x74, 0x07, - /* 0000033E cmp al,0x12 */ 0x3C, 0x12, - /* 00000340 jz 0x349 */ 0x74, 0x07, - /* 00000342 jmp word 0x22b */ 0xE9, 0xE6, 0xFE, - /* 00000345 mov al,0x30 */ 0xB0, 0x30, - /* 00000347 jmp short 0x34b */ 0xEB, 0x02, - /* 00000349 mov al,0x20 */ 0xB0, 0x20, - /* 0000034B iretw */ 0xCF, - /* 0000034C mov ax,0x4f */ 0xB8, 0x4F, 0x00, - /* 0000034F iretw */ 0xCF, - /* 00000350 mov ax,0x14f */ 0xB8, 0x4F, 0x01, - /* 00000353 iretw */ 0xCF, +STATIC CONST UINT8 mVbeShim[] = { + /* 00000000 nop */ 0x90, + /* 00000001 nop */ 0x90, + /* 00000002 nop */ 0x90, + /* 00000003 nop */ 0x90, + /* 00000004 nop */ 0x90, + /* 00000005 nop */ 0x90, + /* 00000006 nop */ 0x90, + /* 00000007 nop */ 0x90, + /* 00000008 nop */ 0x90, + /* 00000009 nop */ 0x90, + /* 0000000A nop */ 0x90, + /* 0000000B nop */ 0x90, + /* 0000000C nop */ 0x90, + /* 0000000D nop */ 0x90, + /* 0000000E nop */ 0x90, + /* 0000000F nop */ 0x90, + /* 00000010 nop */ 0x90, + /* 00000011 nop */ 0x90, + /* 00000012 nop */ 0x90, + /* 00000013 nop */ 0x90, + /* 00000014 nop */ 0x90, + /* 00000015 nop */ 0x90, + /* 00000016 nop */ 0x90, + /* 00000017 nop */ 0x90, + /* 00000018 nop */ 0x90, + /* 00000019 nop */ 0x90, + /* 0000001A nop */ 0x90, + /* 0000001B nop */ 0x90, + /* 0000001C nop */ 0x90, + /* 0000001D nop */ 0x90, + /* 0000001E nop */ 0x90, + /* 0000001F nop */ 0x90, + /* 00000020 nop */ 0x90, + /* 00000021 nop */ 0x90, + /* 00000022 nop */ 0x90, + /* 00000023 nop */ 0x90, + /* 00000024 nop */ 0x90, + /* 00000025 nop */ 0x90, + /* 00000026 nop */ 0x90, + /* 00000027 nop */ 0x90, + /* 00000028 nop */ 0x90, + /* 00000029 nop */ 0x90, + /* 0000002A nop */ 0x90, + /* 0000002B nop */ 0x90, + /* 0000002C nop */ 0x90, + /* 0000002D nop */ 0x90, + /* 0000002E nop */ 0x90, + /* 0000002F nop */ 0x90, + /* 00000030 nop */ 0x90, + /* 00000031 nop */ 0x90, + /* 00000032 nop */ 0x90, + /* 00000033 nop */ 0x90, + /* 00000034 nop */ 0x90, + /* 00000035 nop */ 0x90, + /* 00000036 nop */ 0x90, + /* 00000037 nop */ 0x90, + /* 00000038 nop */ 0x90, + /* 00000039 nop */ 0x90, + /* 0000003A nop */ 0x90, + /* 0000003B nop */ 0x90, + /* 0000003C nop */ 0x90, + /* 0000003D nop */ 0x90, + /* 0000003E nop */ 0x90, + /* 0000003F nop */ 0x90, + /* 00000040 nop */ 0x90, + /* 00000041 nop */ 0x90, + /* 00000042 nop */ 0x90, + /* 00000043 nop */ 0x90, + /* 00000044 nop */ 0x90, + /* 00000045 nop */ 0x90, + /* 00000046 nop */ 0x90, + /* 00000047 nop */ 0x90, + /* 00000048 nop */ 0x90, + /* 00000049 nop */ 0x90, + /* 0000004A nop */ 0x90, + /* 0000004B nop */ 0x90, + /* 0000004C nop */ 0x90, + /* 0000004D nop */ 0x90, + /* 0000004E nop */ 0x90, + /* 0000004F nop */ 0x90, + /* 00000050 nop */ 0x90, + /* 00000051 nop */ 0x90, + /* 00000052 nop */ 0x90, + /* 00000053 nop */ 0x90, + /* 00000054 nop */ 0x90, + /* 00000055 nop */ 0x90, + /* 00000056 nop */ 0x90, + /* 00000057 nop */ 0x90, + /* 00000058 nop */ 0x90, + /* 00000059 nop */ 0x90, + /* 0000005A nop */ 0x90, + /* 0000005B nop */ 0x90, + /* 0000005C nop */ 0x90, + /* 0000005D nop */ 0x90, + /* 0000005E nop */ 0x90, + /* 0000005F nop */ 0x90, + /* 00000060 nop */ 0x90, + /* 00000061 nop */ 0x90, + /* 00000062 nop */ 0x90, + /* 00000063 nop */ 0x90, + /* 00000064 nop */ 0x90, + /* 00000065 nop */ 0x90, + /* 00000066 nop */ 0x90, + /* 00000067 nop */ 0x90, + /* 00000068 nop */ 0x90, + /* 00000069 nop */ 0x90, + /* 0000006A nop */ 0x90, + /* 0000006B nop */ 0x90, + /* 0000006C nop */ 0x90, + /* 0000006D nop */ 0x90, + /* 0000006E nop */ 0x90, + /* 0000006F nop */ 0x90, + /* 00000070 nop */ 0x90, + /* 00000071 nop */ 0x90, + /* 00000072 nop */ 0x90, + /* 00000073 nop */ 0x90, + /* 00000074 nop */ 0x90, + /* 00000075 nop */ 0x90, + /* 00000076 nop */ 0x90, + /* 00000077 nop */ 0x90, + /* 00000078 nop */ 0x90, + /* 00000079 nop */ 0x90, + /* 0000007A nop */ 0x90, + /* 0000007B nop */ 0x90, + /* 0000007C nop */ 0x90, + /* 0000007D nop */ 0x90, + /* 0000007E nop */ 0x90, + /* 0000007F nop */ 0x90, + /* 00000080 nop */ 0x90, + /* 00000081 nop */ 0x90, + /* 00000082 nop */ 0x90, + /* 00000083 nop */ 0x90, + /* 00000084 nop */ 0x90, + /* 00000085 nop */ 0x90, + /* 00000086 nop */ 0x90, + /* 00000087 nop */ 0x90, + /* 00000088 nop */ 0x90, + /* 00000089 nop */ 0x90, + /* 0000008A nop */ 0x90, + /* 0000008B nop */ 0x90, + /* 0000008C nop */ 0x90, + /* 0000008D nop */ 0x90, + /* 0000008E nop */ 0x90, + /* 0000008F nop */ 0x90, + /* 00000090 nop */ 0x90, + /* 00000091 nop */ 0x90, + /* 00000092 nop */ 0x90, + /* 00000093 nop */ 0x90, + /* 00000094 nop */ 0x90, + /* 00000095 nop */ 0x90, + /* 00000096 nop */ 0x90, + /* 00000097 nop */ 0x90, + /* 00000098 nop */ 0x90, + /* 00000099 nop */ 0x90, + /* 0000009A nop */ 0x90, + /* 0000009B nop */ 0x90, + /* 0000009C nop */ 0x90, + /* 0000009D nop */ 0x90, + /* 0000009E nop */ 0x90, + /* 0000009F nop */ 0x90, + /* 000000A0 nop */ 0x90, + /* 000000A1 nop */ 0x90, + /* 000000A2 nop */ 0x90, + /* 000000A3 nop */ 0x90, + /* 000000A4 nop */ 0x90, + /* 000000A5 nop */ 0x90, + /* 000000A6 nop */ 0x90, + /* 000000A7 nop */ 0x90, + /* 000000A8 nop */ 0x90, + /* 000000A9 nop */ 0x90, + /* 000000AA nop */ 0x90, + /* 000000AB nop */ 0x90, + /* 000000AC nop */ 0x90, + /* 000000AD nop */ 0x90, + /* 000000AE nop */ 0x90, + /* 000000AF nop */ 0x90, + /* 000000B0 nop */ 0x90, + /* 000000B1 nop */ 0x90, + /* 000000B2 nop */ 0x90, + /* 000000B3 nop */ 0x90, + /* 000000B4 nop */ 0x90, + /* 000000B5 nop */ 0x90, + /* 000000B6 nop */ 0x90, + /* 000000B7 nop */ 0x90, + /* 000000B8 nop */ 0x90, + /* 000000B9 nop */ 0x90, + /* 000000BA nop */ 0x90, + /* 000000BB nop */ 0x90, + /* 000000BC nop */ 0x90, + /* 000000BD nop */ 0x90, + /* 000000BE nop */ 0x90, + /* 000000BF nop */ 0x90, + /* 000000C0 nop */ 0x90, + /* 000000C1 nop */ 0x90, + /* 000000C2 nop */ 0x90, + /* 000000C3 nop */ 0x90, + /* 000000C4 nop */ 0x90, + /* 000000C5 nop */ 0x90, + /* 000000C6 nop */ 0x90, + /* 000000C7 nop */ 0x90, + /* 000000C8 nop */ 0x90, + /* 000000C9 nop */ 0x90, + /* 000000CA nop */ 0x90, + /* 000000CB nop */ 0x90, + /* 000000CC nop */ 0x90, + /* 000000CD nop */ 0x90, + /* 000000CE nop */ 0x90, + /* 000000CF nop */ 0x90, + /* 000000D0 nop */ 0x90, + /* 000000D1 nop */ 0x90, + /* 000000D2 nop */ 0x90, + /* 000000D3 nop */ 0x90, + /* 000000D4 nop */ 0x90, + /* 000000D5 nop */ 0x90, + /* 000000D6 nop */ 0x90, + /* 000000D7 nop */ 0x90, + /* 000000D8 nop */ 0x90, + /* 000000D9 nop */ 0x90, + /* 000000DA nop */ 0x90, + /* 000000DB nop */ 0x90, + /* 000000DC nop */ 0x90, + /* 000000DD nop */ 0x90, + /* 000000DE nop */ 0x90, + /* 000000DF nop */ 0x90, + /* 000000E0 nop */ 0x90, + /* 000000E1 nop */ 0x90, + /* 000000E2 nop */ 0x90, + /* 000000E3 nop */ 0x90, + /* 000000E4 nop */ 0x90, + /* 000000E5 nop */ 0x90, + /* 000000E6 nop */ 0x90, + /* 000000E7 nop */ 0x90, + /* 000000E8 nop */ 0x90, + /* 000000E9 nop */ 0x90, + /* 000000EA nop */ 0x90, + /* 000000EB nop */ 0x90, + /* 000000EC nop */ 0x90, + /* 000000ED nop */ 0x90, + /* 000000EE nop */ 0x90, + /* 000000EF nop */ 0x90, + /* 000000F0 nop */ 0x90, + /* 000000F1 nop */ 0x90, + /* 000000F2 nop */ 0x90, + /* 000000F3 nop */ 0x90, + /* 000000F4 nop */ 0x90, + /* 000000F5 nop */ 0x90, + /* 000000F6 nop */ 0x90, + /* 000000F7 nop */ 0x90, + /* 000000F8 nop */ 0x90, + /* 000000F9 nop */ 0x90, + /* 000000FA nop */ 0x90, + /* 000000FB nop */ 0x90, + /* 000000FC nop */ 0x90, + /* 000000FD nop */ 0x90, + /* 000000FE nop */ 0x90, + /* 000000FF nop */ 0x90, + /* 00000100 nop */ 0x90, + /* 00000101 nop */ 0x90, + /* 00000102 nop */ 0x90, + /* 00000103 nop */ 0x90, + /* 00000104 nop */ 0x90, + /* 00000105 nop */ 0x90, + /* 00000106 nop */ 0x90, + /* 00000107 nop */ 0x90, + /* 00000108 nop */ 0x90, + /* 00000109 nop */ 0x90, + /* 0000010A nop */ 0x90, + /* 0000010B nop */ 0x90, + /* 0000010C nop */ 0x90, + /* 0000010D nop */ 0x90, + /* 0000010E nop */ 0x90, + /* 0000010F nop */ 0x90, + /* 00000110 nop */ 0x90, + /* 00000111 nop */ 0x90, + /* 00000112 nop */ 0x90, + /* 00000113 nop */ 0x90, + /* 00000114 nop */ 0x90, + /* 00000115 nop */ 0x90, + /* 00000116 nop */ 0x90, + /* 00000117 nop */ 0x90, + /* 00000118 nop */ 0x90, + /* 00000119 nop */ 0x90, + /* 0000011A nop */ 0x90, + /* 0000011B nop */ 0x90, + /* 0000011C nop */ 0x90, + /* 0000011D nop */ 0x90, + /* 0000011E nop */ 0x90, + /* 0000011F nop */ 0x90, + /* 00000120 nop */ 0x90, + /* 00000121 nop */ 0x90, + /* 00000122 nop */ 0x90, + /* 00000123 nop */ 0x90, + /* 00000124 nop */ 0x90, + /* 00000125 nop */ 0x90, + /* 00000126 nop */ 0x90, + /* 00000127 nop */ 0x90, + /* 00000128 nop */ 0x90, + /* 00000129 nop */ 0x90, + /* 0000012A nop */ 0x90, + /* 0000012B nop */ 0x90, + /* 0000012C nop */ 0x90, + /* 0000012D nop */ 0x90, + /* 0000012E nop */ 0x90, + /* 0000012F nop */ 0x90, + /* 00000130 nop */ 0x90, + /* 00000131 nop */ 0x90, + /* 00000132 nop */ 0x90, + /* 00000133 nop */ 0x90, + /* 00000134 nop */ 0x90, + /* 00000135 nop */ 0x90, + /* 00000136 nop */ 0x90, + /* 00000137 nop */ 0x90, + /* 00000138 nop */ 0x90, + /* 00000139 nop */ 0x90, + /* 0000013A nop */ 0x90, + /* 0000013B nop */ 0x90, + /* 0000013C nop */ 0x90, + /* 0000013D nop */ 0x90, + /* 0000013E nop */ 0x90, + /* 0000013F nop */ 0x90, + /* 00000140 nop */ 0x90, + /* 00000141 nop */ 0x90, + /* 00000142 nop */ 0x90, + /* 00000143 nop */ 0x90, + /* 00000144 nop */ 0x90, + /* 00000145 nop */ 0x90, + /* 00000146 nop */ 0x90, + /* 00000147 nop */ 0x90, + /* 00000148 nop */ 0x90, + /* 00000149 nop */ 0x90, + /* 0000014A nop */ 0x90, + /* 0000014B nop */ 0x90, + /* 0000014C nop */ 0x90, + /* 0000014D nop */ 0x90, + /* 0000014E nop */ 0x90, + /* 0000014F nop */ 0x90, + /* 00000150 nop */ 0x90, + /* 00000151 nop */ 0x90, + /* 00000152 nop */ 0x90, + /* 00000153 nop */ 0x90, + /* 00000154 nop */ 0x90, + /* 00000155 nop */ 0x90, + /* 00000156 nop */ 0x90, + /* 00000157 nop */ 0x90, + /* 00000158 nop */ 0x90, + /* 00000159 nop */ 0x90, + /* 0000015A nop */ 0x90, + /* 0000015B nop */ 0x90, + /* 0000015C nop */ 0x90, + /* 0000015D nop */ 0x90, + /* 0000015E nop */ 0x90, + /* 0000015F nop */ 0x90, + /* 00000160 nop */ 0x90, + /* 00000161 nop */ 0x90, + /* 00000162 nop */ 0x90, + /* 00000163 nop */ 0x90, + /* 00000164 nop */ 0x90, + /* 00000165 nop */ 0x90, + /* 00000166 nop */ 0x90, + /* 00000167 nop */ 0x90, + /* 00000168 nop */ 0x90, + /* 00000169 nop */ 0x90, + /* 0000016A nop */ 0x90, + /* 0000016B nop */ 0x90, + /* 0000016C nop */ 0x90, + /* 0000016D nop */ 0x90, + /* 0000016E nop */ 0x90, + /* 0000016F nop */ 0x90, + /* 00000170 nop */ 0x90, + /* 00000171 nop */ 0x90, + /* 00000172 nop */ 0x90, + /* 00000173 nop */ 0x90, + /* 00000174 nop */ 0x90, + /* 00000175 nop */ 0x90, + /* 00000176 nop */ 0x90, + /* 00000177 nop */ 0x90, + /* 00000178 nop */ 0x90, + /* 00000179 nop */ 0x90, + /* 0000017A nop */ 0x90, + /* 0000017B nop */ 0x90, + /* 0000017C nop */ 0x90, + /* 0000017D nop */ 0x90, + /* 0000017E nop */ 0x90, + /* 0000017F nop */ 0x90, + /* 00000180 nop */ 0x90, + /* 00000181 nop */ 0x90, + /* 00000182 nop */ 0x90, + /* 00000183 nop */ 0x90, + /* 00000184 nop */ 0x90, + /* 00000185 nop */ 0x90, + /* 00000186 nop */ 0x90, + /* 00000187 nop */ 0x90, + /* 00000188 nop */ 0x90, + /* 00000189 nop */ 0x90, + /* 0000018A nop */ 0x90, + /* 0000018B nop */ 0x90, + /* 0000018C nop */ 0x90, + /* 0000018D nop */ 0x90, + /* 0000018E nop */ 0x90, + /* 0000018F nop */ 0x90, + /* 00000190 nop */ 0x90, + /* 00000191 nop */ 0x90, + /* 00000192 nop */ 0x90, + /* 00000193 nop */ 0x90, + /* 00000194 nop */ 0x90, + /* 00000195 nop */ 0x90, + /* 00000196 nop */ 0x90, + /* 00000197 nop */ 0x90, + /* 00000198 nop */ 0x90, + /* 00000199 nop */ 0x90, + /* 0000019A nop */ 0x90, + /* 0000019B nop */ 0x90, + /* 0000019C nop */ 0x90, + /* 0000019D nop */ 0x90, + /* 0000019E nop */ 0x90, + /* 0000019F nop */ 0x90, + /* 000001A0 nop */ 0x90, + /* 000001A1 nop */ 0x90, + /* 000001A2 nop */ 0x90, + /* 000001A3 nop */ 0x90, + /* 000001A4 nop */ 0x90, + /* 000001A5 nop */ 0x90, + /* 000001A6 nop */ 0x90, + /* 000001A7 nop */ 0x90, + /* 000001A8 nop */ 0x90, + /* 000001A9 nop */ 0x90, + /* 000001AA nop */ 0x90, + /* 000001AB nop */ 0x90, + /* 000001AC nop */ 0x90, + /* 000001AD nop */ 0x90, + /* 000001AE nop */ 0x90, + /* 000001AF nop */ 0x90, + /* 000001B0 nop */ 0x90, + /* 000001B1 nop */ 0x90, + /* 000001B2 nop */ 0x90, + /* 000001B3 nop */ 0x90, + /* 000001B4 nop */ 0x90, + /* 000001B5 nop */ 0x90, + /* 000001B6 nop */ 0x90, + /* 000001B7 nop */ 0x90, + /* 000001B8 nop */ 0x90, + /* 000001B9 nop */ 0x90, + /* 000001BA nop */ 0x90, + /* 000001BB nop */ 0x90, + /* 000001BC nop */ 0x90, + /* 000001BD nop */ 0x90, + /* 000001BE nop */ 0x90, + /* 000001BF nop */ 0x90, + /* 000001C0 nop */ 0x90, + /* 000001C1 nop */ 0x90, + /* 000001C2 nop */ 0x90, + /* 000001C3 nop */ 0x90, + /* 000001C4 nop */ 0x90, + /* 000001C5 nop */ 0x90, + /* 000001C6 nop */ 0x90, + /* 000001C7 nop */ 0x90, + /* 000001C8 nop */ 0x90, + /* 000001C9 nop */ 0x90, + /* 000001CA nop */ 0x90, + /* 000001CB nop */ 0x90, + /* 000001CC nop */ 0x90, + /* 000001CD nop */ 0x90, + /* 000001CE nop */ 0x90, + /* 000001CF nop */ 0x90, + /* 000001D0 nop */ 0x90, + /* 000001D1 nop */ 0x90, + /* 000001D2 nop */ 0x90, + /* 000001D3 nop */ 0x90, + /* 000001D4 nop */ 0x90, + /* 000001D5 nop */ 0x90, + /* 000001D6 nop */ 0x90, + /* 000001D7 nop */ 0x90, + /* 000001D8 nop */ 0x90, + /* 000001D9 nop */ 0x90, + /* 000001DA nop */ 0x90, + /* 000001DB nop */ 0x90, + /* 000001DC nop */ 0x90, + /* 000001DD nop */ 0x90, + /* 000001DE nop */ 0x90, + /* 000001DF nop */ 0x90, + /* 000001E0 nop */ 0x90, + /* 000001E1 nop */ 0x90, + /* 000001E2 nop */ 0x90, + /* 000001E3 nop */ 0x90, + /* 000001E4 nop */ 0x90, + /* 000001E5 nop */ 0x90, + /* 000001E6 nop */ 0x90, + /* 000001E7 nop */ 0x90, + /* 000001E8 nop */ 0x90, + /* 000001E9 nop */ 0x90, + /* 000001EA nop */ 0x90, + /* 000001EB nop */ 0x90, + /* 000001EC nop */ 0x90, + /* 000001ED nop */ 0x90, + /* 000001EE nop */ 0x90, + /* 000001EF nop */ 0x90, + /* 000001F0 nop */ 0x90, + /* 000001F1 nop */ 0x90, + /* 000001F2 nop */ 0x90, + /* 000001F3 nop */ 0x90, + /* 000001F4 nop */ 0x90, + /* 000001F5 nop */ 0x90, + /* 000001F6 nop */ 0x90, + /* 000001F7 nop */ 0x90, + /* 000001F8 nop */ 0x90, + /* 000001F9 nop */ 0x90, + /* 000001FA nop */ 0x90, + /* 000001FB nop */ 0x90, + /* 000001FC nop */ 0x90, + /* 000001FD nop */ 0x90, + /* 000001FE nop */ 0x90, + /* 000001FF nop */ 0x90, + /* 00000200 cmp ax,0x4f00 */ 0x3D,0x00, 0x4F, + /* 00000203 jz 0x22d */ 0x74,0x28, + /* 00000205 cmp ax,0x4f01 */ 0x3D,0x01, 0x4F, + /* 00000208 jz 0x245 */ 0x74,0x3B, + /* 0000020A cmp ax,0x4f02 */ 0x3D,0x02, 0x4F, + /* 0000020D jz 0x269 */ 0x74,0x5A, + /* 0000020F cmp ax,0x4f03 */ 0x3D,0x03, 0x4F, + /* 00000212 jz word 0x331 */ 0x0F,0x84, 0x1B,0x01, + /* 00000216 cmp ax,0x4f10 */ 0x3D,0x10, 0x4F, + /* 00000219 jz word 0x336 */ 0x0F,0x84, 0x19,0x01, + /* 0000021D cmp ax,0x4f15 */ 0x3D,0x15, 0x4F, + /* 00000220 jz word 0x338 */ 0x0F,0x84, 0x14,0x01, + /* 00000224 cmp ah,0x0 */ 0x80,0xFC, 0x00, + /* 00000227 jz word 0x33a */ 0x0F,0x84, 0x0F,0x01, + /* 0000022B jmp short 0x22b */ 0xEB,0xFE, + /* 0000022D push es */ 0x06, + /* 0000022E push di */ 0x57, + /* 0000022F push ds */ 0x1E, + /* 00000230 push si */ 0x56, + /* 00000231 push cx */ 0x51, + /* 00000232 push cs */ 0x0E, + /* 00000233 pop ds */ 0x1F, + /* 00000234 mov si,0x0 */ 0xBE,0x00, 0x00, + /* 00000237 mov cx,0x100 */ 0xB9,0x00, 0x01, + /* 0000023A cld */ 0xFC, + /* 0000023B rep movsb */ 0xF3,0xA4, + /* 0000023D pop cx */ 0x59, + /* 0000023E pop si */ 0x5E, + /* 0000023F pop ds */ 0x1F, + /* 00000240 pop di */ 0x5F, + /* 00000241 pop es */ 0x07, + /* 00000242 jmp word 0x34c */ 0xE9,0x07, 0x01, + /* 00000245 push es */ 0x06, + /* 00000246 push di */ 0x57, + /* 00000247 push ds */ 0x1E, + /* 00000248 push si */ 0x56, + /* 00000249 push cx */ 0x51, + /* 0000024A and cx,0xbfff */ 0x81,0xE1, 0xFF,0xBF, + /* 0000024E cmp cx,0xf1 */ 0x81,0xF9, 0xF1,0x00, + /* 00000252 jz 0x256 */ 0x74,0x02, + /* 00000254 jmp short 0x22b */ 0xEB,0xD5, + /* 00000256 push cs */ 0x0E, + /* 00000257 pop ds */ 0x1F, + /* 00000258 mov si,0x100 */ 0xBE,0x00, 0x01, + /* 0000025B mov cx,0x100 */ 0xB9,0x00, 0x01, + /* 0000025E cld */ 0xFC, + /* 0000025F rep movsb */ 0xF3,0xA4, + /* 00000261 pop cx */ 0x59, + /* 00000262 pop si */ 0x5E, + /* 00000263 pop ds */ 0x1F, + /* 00000264 pop di */ 0x5F, + /* 00000265 pop es */ 0x07, + /* 00000266 jmp word 0x34c */ 0xE9,0xE3, 0x00, + /* 00000269 push dx */ 0x52, + /* 0000026A push ax */ 0x50, + /* 0000026B cmp bx,0x40f1 */ 0x81,0xFB, 0xF1,0x40, + /* 0000026F jz 0x273 */ 0x74,0x02, + /* 00000271 jmp short 0x22b */ 0xEB,0xB8, + /* 00000273 mov dx,0x3c0 */ 0xBA,0xC0, 0x03, + /* 00000276 mov al,0x20 */ 0xB0,0x20, + /* 00000278 out dx,al */ 0xEE, + /* 00000279 push dx */ 0x52, + /* 0000027A push ax */ 0x50, + /* 0000027B mov dx,0x1ce */ 0xBA,0xCE, 0x01, + /* 0000027E mov ax,0x4 */ 0xB8,0x04, 0x00, + /* 00000281 out dx,ax */ 0xEF, + /* 00000282 mov dx,0x1d0 */ 0xBA,0xD0, 0x01, + /* 00000285 mov ax,0x0 */ 0xB8,0x00, 0x00, + /* 00000288 out dx,ax */ 0xEF, + /* 00000289 pop ax */ 0x58, + /* 0000028A pop dx */ 0x5A, + /* 0000028B push dx */ 0x52, + /* 0000028C push ax */ 0x50, + /* 0000028D mov dx,0x1ce */ 0xBA,0xCE, 0x01, + /* 00000290 mov ax,0x5 */ 0xB8,0x05, 0x00, + /* 00000293 out dx,ax */ 0xEF, + /* 00000294 mov dx,0x1d0 */ 0xBA,0xD0, 0x01, + /* 00000297 mov ax,0x0 */ 0xB8,0x00, 0x00, + /* 0000029A out dx,ax */ 0xEF, + /* 0000029B pop ax */ 0x58, + /* 0000029C pop dx */ 0x5A, + /* 0000029D push dx */ 0x52, + /* 0000029E push ax */ 0x50, + /* 0000029F mov dx,0x1ce */ 0xBA,0xCE, 0x01, + /* 000002A2 mov ax,0x8 */ 0xB8,0x08, 0x00, + /* 000002A5 out dx,ax */ 0xEF, + /* 000002A6 mov dx,0x1d0 */ 0xBA,0xD0, 0x01, + /* 000002A9 mov ax,0x0 */ 0xB8,0x00, 0x00, + /* 000002AC out dx,ax */ 0xEF, + /* 000002AD pop ax */ 0x58, + /* 000002AE pop dx */ 0x5A, + /* 000002AF push dx */ 0x52, + /* 000002B0 push ax */ 0x50, + /* 000002B1 mov dx,0x1ce */ 0xBA,0xCE, 0x01, + /* 000002B4 mov ax,0x9 */ 0xB8,0x09, 0x00, + /* 000002B7 out dx,ax */ 0xEF, + /* 000002B8 mov dx,0x1d0 */ 0xBA,0xD0, 0x01, + /* 000002BB mov ax,0x0 */ 0xB8,0x00, 0x00, + /* 000002BE out dx,ax */ 0xEF, + /* 000002BF pop ax */ 0x58, + /* 000002C0 pop dx */ 0x5A, + /* 000002C1 push dx */ 0x52, + /* 000002C2 push ax */ 0x50, + /* 000002C3 mov dx,0x1ce */ 0xBA,0xCE, 0x01, + /* 000002C6 mov ax,0x3 */ 0xB8,0x03, 0x00, + /* 000002C9 out dx,ax */ 0xEF, + /* 000002CA mov dx,0x1d0 */ 0xBA,0xD0, 0x01, + /* 000002CD mov ax,0x20 */ 0xB8,0x20, 0x00, + /* 000002D0 out dx,ax */ 0xEF, + /* 000002D1 pop ax */ 0x58, + /* 000002D2 pop dx */ 0x5A, + /* 000002D3 push dx */ 0x52, + /* 000002D4 push ax */ 0x50, + /* 000002D5 mov dx,0x1ce */ 0xBA,0xCE, 0x01, + /* 000002D8 mov ax,0x1 */ 0xB8,0x01, 0x00, + /* 000002DB out dx,ax */ 0xEF, + /* 000002DC mov dx,0x1d0 */ 0xBA,0xD0, 0x01, + /* 000002DF mov ax,0x400 */ 0xB8,0x00, 0x04, + /* 000002E2 out dx,ax */ 0xEF, + /* 000002E3 pop ax */ 0x58, + /* 000002E4 pop dx */ 0x5A, + /* 000002E5 push dx */ 0x52, + /* 000002E6 push ax */ 0x50, + /* 000002E7 mov dx,0x1ce */ 0xBA,0xCE, 0x01, + /* 000002EA mov ax,0x6 */ 0xB8,0x06, 0x00, + /* 000002ED out dx,ax */ 0xEF, + /* 000002EE mov dx,0x1d0 */ 0xBA,0xD0, 0x01, + /* 000002F1 mov ax,0x400 */ 0xB8,0x00, 0x04, + /* 000002F4 out dx,ax */ 0xEF, + /* 000002F5 pop ax */ 0x58, + /* 000002F6 pop dx */ 0x5A, + /* 000002F7 push dx */ 0x52, + /* 000002F8 push ax */ 0x50, + /* 000002F9 mov dx,0x1ce */ 0xBA,0xCE, 0x01, + /* 000002FC mov ax,0x2 */ 0xB8,0x02, 0x00, + /* 000002FF out dx,ax */ 0xEF, + /* 00000300 mov dx,0x1d0 */ 0xBA,0xD0, 0x01, + /* 00000303 mov ax,0x300 */ 0xB8,0x00, 0x03, + /* 00000306 out dx,ax */ 0xEF, + /* 00000307 pop ax */ 0x58, + /* 00000308 pop dx */ 0x5A, + /* 00000309 push dx */ 0x52, + /* 0000030A push ax */ 0x50, + /* 0000030B mov dx,0x1ce */ 0xBA,0xCE, 0x01, + /* 0000030E mov ax,0x7 */ 0xB8,0x07, 0x00, + /* 00000311 out dx,ax */ 0xEF, + /* 00000312 mov dx,0x1d0 */ 0xBA,0xD0, 0x01, + /* 00000315 mov ax,0x300 */ 0xB8,0x00, 0x03, + /* 00000318 out dx,ax */ 0xEF, + /* 00000319 pop ax */ 0x58, + /* 0000031A pop dx */ 0x5A, + /* 0000031B push dx */ 0x52, + /* 0000031C push ax */ 0x50, + /* 0000031D mov dx,0x1ce */ 0xBA,0xCE, 0x01, + /* 00000320 mov ax,0x4 */ 0xB8,0x04, 0x00, + /* 00000323 out dx,ax */ 0xEF, + /* 00000324 mov dx,0x1d0 */ 0xBA,0xD0, 0x01, + /* 00000327 mov ax,0x41 */ 0xB8,0x41, 0x00, + /* 0000032A out dx,ax */ 0xEF, + /* 0000032B pop ax */ 0x58, + /* 0000032C pop dx */ 0x5A, + /* 0000032D pop ax */ 0x58, + /* 0000032E pop dx */ 0x5A, + /* 0000032F jmp short 0x34c */ 0xEB,0x1B, + /* 00000331 mov bx,0x40f1 */ 0xBB,0xF1, 0x40, + /* 00000334 jmp short 0x34c */ 0xEB,0x16, + /* 00000336 jmp short 0x350 */ 0xEB,0x18, + /* 00000338 jmp short 0x350 */ 0xEB,0x16, + /* 0000033A cmp al,0x3 */ 0x3C,0x03, + /* 0000033C jz 0x345 */ 0x74,0x07, + /* 0000033E cmp al,0x12 */ 0x3C,0x12, + /* 00000340 jz 0x349 */ 0x74,0x07, + /* 00000342 jmp word 0x22b */ 0xE9,0xE6, 0xFE, + /* 00000345 mov al,0x30 */ 0xB0,0x30, + /* 00000347 jmp short 0x34b */ 0xEB,0x02, + /* 00000349 mov al,0x20 */ 0xB0,0x20, + /* 0000034B iretw */ 0xCF, + /* 0000034C mov ax,0x4f */ 0xB8,0x4F, 0x00, + /* 0000034F iretw */ 0xCF, + /* 00000350 mov ax,0x14f */ 0xB8,0x4F, 0x01, + /* 00000353 iretw */ 0xCF, }; #endif diff --git a/OvmfPkg/SataControllerDxe/ComponentName.c b/OvmfPkg/SataControllerDxe/ComponentName.c index 320dca382a..d45803f95f 100644 --- a/OvmfPkg/SataControllerDxe/ComponentName.c +++ b/OvmfPkg/SataControllerDxe/ComponentName.c @@ -20,16 +20,16 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gSataControllerCompon // /// EFI Component Name 2 Protocol /// -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSataControllerComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) SataControllerComponentNameGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) SataControllerComponentNameGetControllerName, +GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSataControllerComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)SataControllerComponentNameGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)SataControllerComponentNameGetControllerName, "en" }; // /// Driver Name Strings /// -GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSataControllerDriverNameTable[] = { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSataControllerDriverNameTable[] = { { "eng;en", (CHAR16 *)L"Sata Controller Init Driver" @@ -43,7 +43,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSataControllerDriverName /// /// Controller Name Strings /// -GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSataControllerControllerNameTable[] = { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSataControllerControllerNameTable[] = { { "eng;en", (CHAR16 *)L"Sata Controller" @@ -78,9 +78,9 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSataControllerController EFI_STATUS EFIAPI SataControllerComponentNameGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) { return LookupUnicodeString2 ( @@ -135,14 +135,14 @@ SataControllerComponentNameGetDriverName ( EFI_STATUS EFIAPI SataControllerComponentNameGetControllerName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { - EFI_STATUS Status; + EFI_STATUS Status; // // Make sure this driver is currently managing ControllHandle @@ -161,10 +161,10 @@ SataControllerComponentNameGetControllerName ( } return LookupUnicodeString2 ( - Language, - This->SupportedLanguages, - mSataControllerControllerNameTable, - ControllerName, - (BOOLEAN)(This == &gSataControllerComponentName) - ); + Language, + This->SupportedLanguages, + mSataControllerControllerNameTable, + ControllerName, + (BOOLEAN)(This == &gSataControllerComponentName) + ); } diff --git a/OvmfPkg/SataControllerDxe/SataController.c b/OvmfPkg/SataControllerDxe/SataController.c index a5b5f04d27..2b550b0a3e 100644 --- a/OvmfPkg/SataControllerDxe/SataController.c +++ b/OvmfPkg/SataControllerDxe/SataController.c @@ -11,7 +11,7 @@ /// /// EFI_DRIVER_BINDING_PROTOCOL instance /// -EFI_DRIVER_BINDING_PROTOCOL gSataControllerDriverBinding = { +EFI_DRIVER_BINDING_PROTOCOL gSataControllerDriverBinding = { SataControllerSupported, SataControllerStart, SataControllerStop, @@ -32,11 +32,11 @@ EFI_DRIVER_BINDING_PROTOCOL gSataControllerDriverBinding = { UINT32 EFIAPI AhciReadReg ( - IN EFI_PCI_IO_PROTOCOL *PciIo, - IN UINT32 Offset + IN EFI_PCI_IO_PROTOCOL *PciIo, + IN UINT32 Offset ) { - UINT32 Data; + UINT32 Data; ASSERT (PciIo != NULL); @@ -46,7 +46,7 @@ AhciReadReg ( PciIo, EfiPciIoWidthUint32, AHCI_BAR_INDEX, - (UINT64) Offset, + (UINT64)Offset, 1, &Data ); @@ -65,9 +65,9 @@ AhciReadReg ( VOID EFIAPI AhciWriteReg ( - IN EFI_PCI_IO_PROTOCOL *PciIo, - IN UINT32 Offset, - IN UINT32 Data + IN EFI_PCI_IO_PROTOCOL *PciIo, + IN UINT32 Offset, + IN UINT32 Data ) { ASSERT (PciIo != NULL); @@ -76,7 +76,7 @@ AhciWriteReg ( PciIo, EfiPciIoWidthUint32, AHCI_BAR_INDEX, - (UINT64) Offset, + (UINT64)Offset, 1, &Data ); @@ -102,21 +102,20 @@ CalculateBestPioMode ( OUT UINT16 *SelectedMode ) { - UINT16 PioMode; - UINT16 AdvancedPioMode; - UINT16 Temp; - UINT16 Index; - UINT16 MinimumPioCycleTime; + UINT16 PioMode; + UINT16 AdvancedPioMode; + UINT16 Temp; + UINT16 Index; + UINT16 MinimumPioCycleTime; Temp = 0xff; - PioMode = (UINT8) (((ATA5_IDENTIFY_DATA *) (&(IdentifyData->AtaData)))->pio_cycle_timing >> 8); + PioMode = (UINT8)(((ATA5_IDENTIFY_DATA *)(&(IdentifyData->AtaData)))->pio_cycle_timing >> 8); // // See whether Identify Data word 64 - 70 are valid // if ((IdentifyData->AtaData.field_validity & 0x02) == 0x02) { - AdvancedPioMode = IdentifyData->AtaData.advanced_pio_modes; DEBUG ((DEBUG_INFO, "CalculateBestPioMode: AdvancedPioMode = %x\n", AdvancedPioMode)); @@ -134,7 +133,7 @@ CalculateBestPioMode ( // the best PIO Mode is the value in pio_cycle_timing. // if (Temp != 0xff) { - AdvancedPioMode = (UINT16) (Temp + 3); + AdvancedPioMode = (UINT16)(Temp + 3); } else { AdvancedPioMode = PioMode; } @@ -142,16 +141,16 @@ CalculateBestPioMode ( // // Limit the PIO mode to at most PIO4. // - PioMode = (UINT16) MIN (AdvancedPioMode, 4); + PioMode = (UINT16)MIN (AdvancedPioMode, 4); MinimumPioCycleTime = IdentifyData->AtaData.min_pio_cycle_time_with_flow_control; if (MinimumPioCycleTime <= 120) { - PioMode = (UINT16) MIN (4, PioMode); + PioMode = (UINT16)MIN (4, PioMode); } else if (MinimumPioCycleTime <= 180) { - PioMode = (UINT16) MIN (3, PioMode); + PioMode = (UINT16)MIN (3, PioMode); } else if (MinimumPioCycleTime <= 240) { - PioMode = (UINT16) MIN (2, PioMode); + PioMode = (UINT16)MIN (2, PioMode); } else { PioMode = 0; } @@ -165,7 +164,7 @@ CalculateBestPioMode ( } if (PioMode >= *DisPioMode) { - PioMode = (UINT16) (*DisPioMode - 1); + PioMode = (UINT16)(*DisPioMode - 1); } } @@ -174,7 +173,6 @@ CalculateBestPioMode ( } else { *SelectedMode = PioMode; // ATA_PIO_MODE_2 to ATA_PIO_MODE_4; } - } else { // // Identify Data word 64 - 70 are not valid @@ -195,7 +193,6 @@ CalculateBestPioMode ( } else { *SelectedMode = 2; // ATA_PIO_MODE_2; } - } return EFI_SUCCESS; @@ -219,8 +216,8 @@ CalculateBestUdmaMode ( OUT UINT16 *SelectedMode ) { - UINT16 TempMode; - UINT16 DeviceUDmaMode; + UINT16 TempMode; + UINT16 DeviceUDmaMode; DeviceUDmaMode = 0; @@ -234,7 +231,7 @@ CalculateBestUdmaMode ( DeviceUDmaMode = IdentifyData->AtaData.ultra_dma_mode; DEBUG ((DEBUG_INFO, "CalculateBestUdmaMode: DeviceUDmaMode = %x\n", DeviceUDmaMode)); DeviceUDmaMode &= 0x3f; - TempMode = 0; // initialize it to UDMA-0 + TempMode = 0; // initialize it to UDMA-0 while ((DeviceUDmaMode >>= 1) != 0) { TempMode++; @@ -250,7 +247,7 @@ CalculateBestUdmaMode ( } if (TempMode >= *DisUDmaMode) { - TempMode = (UINT16) (*DisUDmaMode - 1); + TempMode = (UINT16)(*DisUDmaMode - 1); } } @@ -275,11 +272,11 @@ CalculateBestUdmaMode ( EFI_STATUS EFIAPI InitializeSataControllerDriver ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; + EFI_STATUS Status; // // Install driver model protocol(s). @@ -314,14 +311,14 @@ InitializeSataControllerDriver ( EFI_STATUS EFIAPI SataControllerSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 PciData; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 PciData; // // Attempt to open PCI I/O Protocol @@ -329,7 +326,7 @@ SataControllerSupported ( Status = gBS->OpenProtocol ( Controller, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo, + (VOID **)&PciIo, This->DriverBindingHandle, Controller, EFI_OPEN_PROTOCOL_GET_PROTOCOL @@ -377,9 +374,9 @@ SataControllerSupported ( EFI_STATUS EFIAPI SataControllerStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { UINTN BailLogMask; @@ -393,7 +390,7 @@ SataControllerStart ( DEBUG ((DEBUG_INFO, "SataControllerStart START\n")); - BailLogMask = DEBUG_ERROR; + BailLogMask = DEBUG_ERROR; SataPrivateData = NULL; // @@ -402,7 +399,7 @@ SataControllerStart ( Status = gBS->OpenProtocol ( Controller, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo, + (VOID **)&PciIo, This->DriverBindingHandle, Controller, EFI_OPEN_PROTOCOL_BY_DRIVER @@ -416,6 +413,7 @@ SataControllerStart ( // BailLogMask = DEBUG_INFO; } + goto Bail; } @@ -423,13 +421,22 @@ SataControllerStart ( // Save original PCI attributes, and enable IO space access, memory space // access, and Bus Master (DMA). // - Status = PciIo->Attributes (PciIo, EfiPciIoAttributeOperationGet, 0, - &OriginalPciAttributes); + Status = PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationGet, + 0, + &OriginalPciAttributes + ); if (EFI_ERROR (Status)) { goto ClosePciIo; } - Status = PciIo->Attributes (PciIo, EfiPciIoAttributeOperationEnable, - EFI_PCI_DEVICE_ENABLE, NULL); + + Status = PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationEnable, + EFI_PCI_DEVICE_ENABLE, + NULL + ); if (EFI_ERROR (Status)) { goto ClosePciIo; } @@ -446,16 +453,16 @@ SataControllerStart ( // // Initialize Sata Private Data // - SataPrivateData->Signature = SATA_CONTROLLER_SIGNATURE; - SataPrivateData->PciIo = PciIo; - SataPrivateData->OriginalPciAttributes = OriginalPciAttributes; + SataPrivateData->Signature = SATA_CONTROLLER_SIGNATURE; + SataPrivateData->PciIo = PciIo; + SataPrivateData->OriginalPciAttributes = OriginalPciAttributes; SataPrivateData->IdeInit.GetChannelInfo = IdeInitGetChannelInfo; - SataPrivateData->IdeInit.NotifyPhase = IdeInitNotifyPhase; - SataPrivateData->IdeInit.SubmitData = IdeInitSubmitData; + SataPrivateData->IdeInit.NotifyPhase = IdeInitNotifyPhase; + SataPrivateData->IdeInit.SubmitData = IdeInitSubmitData; SataPrivateData->IdeInit.DisqualifyMode = IdeInitDisqualifyMode; - SataPrivateData->IdeInit.CalculateMode = IdeInitCalculateMode; - SataPrivateData->IdeInit.SetTiming = IdeInitSetTiming; - SataPrivateData->IdeInit.EnumAll = SATA_ENUMER_ALL; + SataPrivateData->IdeInit.CalculateMode = IdeInitCalculateMode; + SataPrivateData->IdeInit.SetTiming = IdeInitSetTiming; + SataPrivateData->IdeInit.EnumAll = SATA_ENUMER_ALL; Status = PciIo->Pci.Read ( PciIo, @@ -470,22 +477,22 @@ SataControllerStart ( if (IS_PCI_IDE (&PciData)) { SataPrivateData->IdeInit.ChannelCount = IDE_MAX_CHANNEL; - SataPrivateData->DeviceCount = IDE_MAX_DEVICES; + SataPrivateData->DeviceCount = IDE_MAX_DEVICES; } else if (IS_PCI_SATADPA (&PciData)) { // // Read Host Capability Register(CAP) to get Number of Ports(NPS) and Supports Port Multiplier(SPM) // NPS is 0's based value indicating the maximum number of ports supported by the HBA silicon. // A maximum of 32 ports can be supported. A value of '0h', indicating one port, is the minimum requirement. // - Data32 = AhciReadReg (PciIo, R_AHCI_CAP); - SataPrivateData->IdeInit.ChannelCount = (UINT8) ((Data32 & B_AHCI_CAP_NPS) + 1); - SataPrivateData->DeviceCount = AHCI_MAX_DEVICES; + Data32 = AhciReadReg (PciIo, R_AHCI_CAP); + SataPrivateData->IdeInit.ChannelCount = (UINT8)((Data32 & B_AHCI_CAP_NPS) + 1); + SataPrivateData->DeviceCount = AHCI_MAX_DEVICES; if ((Data32 & B_AHCI_CAP_SPM) == B_AHCI_CAP_SPM) { SataPrivateData->DeviceCount = AHCI_MULTI_MAX_DEVICES; } } - ChannelDeviceCount = (UINTN) (SataPrivateData->IdeInit.ChannelCount) * (UINTN) (SataPrivateData->DeviceCount); + ChannelDeviceCount = (UINTN)(SataPrivateData->IdeInit.ChannelCount) * (UINTN)(SataPrivateData->DeviceCount); SataPrivateData->DisqualifiedModes = AllocateZeroPool ((sizeof (EFI_ATA_COLLECTIVE_MODE)) * ChannelDeviceCount); if (SataPrivateData->DisqualifiedModes == NULL) { Status = EFI_OUT_OF_RESOURCES; @@ -534,8 +541,12 @@ FreeSataPrivateData: FreePool (SataPrivateData); RestorePciAttributes: - PciIo->Attributes (PciIo, EfiPciIoAttributeOperationSet, - OriginalPciAttributes, NULL); + PciIo->Attributes ( + PciIo, + EfiPciIoAttributeOperationSet, + OriginalPciAttributes, + NULL + ); ClosePciIo: gBS->CloseProtocol ( @@ -546,8 +557,11 @@ ClosePciIo: ); Bail: - DEBUG ((BailLogMask, "SataControllerStart error return status = %r\n", - Status)); + DEBUG (( + BailLogMask, + "SataControllerStart error return status = %r\n", + Status + )); return Status; } @@ -566,10 +580,10 @@ Bail: EFI_STATUS EFIAPI SataControllerStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) { EFI_STATUS Status; @@ -584,7 +598,7 @@ SataControllerStop ( Status = gBS->OpenProtocol ( Controller, &gEfiIdeControllerInitProtocolGuid, - (VOID **) &IdeInit, + (VOID **)&IdeInit, This->DriverBindingHandle, Controller, EFI_OPEN_PROTOCOL_GET_PROTOCOL @@ -615,12 +629,15 @@ SataControllerStop ( if (SataPrivateData->DisqualifiedModes != NULL) { FreePool (SataPrivateData->DisqualifiedModes); } + if (SataPrivateData->IdentifyData != NULL) { FreePool (SataPrivateData->IdentifyData); } + if (SataPrivateData->IdentifyValid != NULL) { FreePool (SataPrivateData->IdentifyValid); } + FreePool (SataPrivateData); // @@ -678,6 +695,7 @@ FlatDeviceIndex ( // // Interface functions of IDE_CONTROLLER_INIT protocol // + /** Returns the information about the specified IDE channel. @@ -717,18 +735,19 @@ FlatDeviceIndex ( EFI_STATUS EFIAPI IdeInitGetChannelInfo ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - OUT BOOLEAN *Enabled, - OUT UINT8 *MaxDevices + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + OUT BOOLEAN *Enabled, + OUT UINT8 *MaxDevices ) { EFI_SATA_CONTROLLER_PRIVATE_DATA *SataPrivateData; + SataPrivateData = SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS (This); ASSERT (SataPrivateData != NULL); if (Channel < This->ChannelCount) { - *Enabled = TRUE; + *Enabled = TRUE; *MaxDevices = SataPrivateData->DeviceCount; return EFI_SUCCESS; } @@ -764,9 +783,9 @@ IdeInitGetChannelInfo ( EFI_STATUS EFIAPI IdeInitNotifyPhase ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN EFI_IDE_CONTROLLER_ENUM_PHASE Phase, - IN UINT8 Channel + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN EFI_IDE_CONTROLLER_ENUM_PHASE Phase, + IN UINT8 Channel ) { return EFI_SUCCESS; @@ -814,10 +833,10 @@ IdeInitNotifyPhase ( EFI_STATUS EFIAPI IdeInitSubmitData ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - IN EFI_IDENTIFY_DATA *IdentifyData + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + IN EFI_IDENTIFY_DATA *IdentifyData ) { EFI_SATA_CONTROLLER_PRIVATE_DATA *SataPrivateData; @@ -893,10 +912,10 @@ IdeInitSubmitData ( EFI_STATUS EFIAPI IdeInitDisqualifyMode ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - IN EFI_ATA_COLLECTIVE_MODE *BadModes + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + IN EFI_ATA_COLLECTIVE_MODE *BadModes ) { EFI_SATA_CONTROLLER_PRIVATE_DATA *SataPrivateData; @@ -981,10 +1000,10 @@ IdeInitDisqualifyMode ( EFI_STATUS EFIAPI IdeInitCalculateMode ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - OUT EFI_ATA_COLLECTIVE_MODE **SupportedModes + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + OUT EFI_ATA_COLLECTIVE_MODE **SupportedModes ) { EFI_SATA_CONTROLLER_PRIVATE_DATA *SataPrivateData; @@ -1010,8 +1029,8 @@ IdeInitCalculateMode ( DeviceIndex = FlatDeviceIndex (SataPrivateData, Channel, Device); - IdentifyData = &(SataPrivateData->IdentifyData[DeviceIndex]); - IdentifyValid = SataPrivateData->IdentifyValid[DeviceIndex]; + IdentifyData = &(SataPrivateData->IdentifyData[DeviceIndex]); + IdentifyValid = SataPrivateData->IdentifyValid[DeviceIndex]; DisqualifiedModes = &(SataPrivateData->DisqualifiedModes[DeviceIndex]); // @@ -1023,32 +1042,32 @@ IdeInitCalculateMode ( } Status = CalculateBestPioMode ( - IdentifyData, - (DisqualifiedModes->PioMode.Valid ? ((UINT16 *) &(DisqualifiedModes->PioMode.Mode)) : NULL), - &SelectedMode - ); + IdentifyData, + (DisqualifiedModes->PioMode.Valid ? ((UINT16 *)&(DisqualifiedModes->PioMode.Mode)) : NULL), + &SelectedMode + ); if (!EFI_ERROR (Status)) { (*SupportedModes)->PioMode.Valid = TRUE; - (*SupportedModes)->PioMode.Mode = SelectedMode; - + (*SupportedModes)->PioMode.Mode = SelectedMode; } else { (*SupportedModes)->PioMode.Valid = FALSE; } + DEBUG ((DEBUG_INFO, "IdeInitCalculateMode: PioMode = %x\n", (*SupportedModes)->PioMode.Mode)); Status = CalculateBestUdmaMode ( - IdentifyData, - (DisqualifiedModes->UdmaMode.Valid ? ((UINT16 *) &(DisqualifiedModes->UdmaMode.Mode)) : NULL), - &SelectedMode - ); + IdentifyData, + (DisqualifiedModes->UdmaMode.Valid ? ((UINT16 *)&(DisqualifiedModes->UdmaMode.Mode)) : NULL), + &SelectedMode + ); if (!EFI_ERROR (Status)) { (*SupportedModes)->UdmaMode.Valid = TRUE; (*SupportedModes)->UdmaMode.Mode = SelectedMode; - } else { (*SupportedModes)->UdmaMode.Valid = FALSE; } + DEBUG ((DEBUG_INFO, "IdeInitCalculateMode: UdmaMode = %x\n", (*SupportedModes)->UdmaMode.Mode)); // @@ -1083,10 +1102,10 @@ IdeInitCalculateMode ( EFI_STATUS EFIAPI IdeInitSetTiming ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - IN EFI_ATA_COLLECTIVE_MODE *Modes + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + IN EFI_ATA_COLLECTIVE_MODE *Modes ) { return EFI_SUCCESS; diff --git a/OvmfPkg/SataControllerDxe/SataController.h b/OvmfPkg/SataControllerDxe/SataController.h index 4ef7f56e22..ad93ab1d98 100644 --- a/OvmfPkg/SataControllerDxe/SataController.h +++ b/OvmfPkg/SataControllerDxe/SataController.h @@ -26,88 +26,89 @@ // // Global Variables definitions // -extern EFI_DRIVER_BINDING_PROTOCOL gSataControllerDriverBinding; -extern EFI_COMPONENT_NAME_PROTOCOL gSataControllerComponentName; -extern EFI_COMPONENT_NAME2_PROTOCOL gSataControllerComponentName2; +extern EFI_DRIVER_BINDING_PROTOCOL gSataControllerDriverBinding; +extern EFI_COMPONENT_NAME_PROTOCOL gSataControllerComponentName; +extern EFI_COMPONENT_NAME2_PROTOCOL gSataControllerComponentName2; -#define AHCI_BAR_INDEX 0x05 -#define R_AHCI_CAP 0x0 -#define B_AHCI_CAP_NPS (BIT4 | BIT3 | BIT2 | BIT1 | BIT0) // Number of Ports -#define B_AHCI_CAP_SPM BIT17 // Supports Port Multiplier +#define AHCI_BAR_INDEX 0x05 +#define R_AHCI_CAP 0x0 +#define B_AHCI_CAP_NPS (BIT4 | BIT3 | BIT2 | BIT1 | BIT0) // Number of Ports +#define B_AHCI_CAP_SPM BIT17 // Supports Port Multiplier /// /// AHCI each channel can have up to 1 device /// -#define AHCI_MAX_DEVICES 0x01 +#define AHCI_MAX_DEVICES 0x01 /// /// AHCI each channel can have 15 devices in the presence of a multiplier /// -#define AHCI_MULTI_MAX_DEVICES 0x0F +#define AHCI_MULTI_MAX_DEVICES 0x0F /// /// IDE supports 2 channel max /// -#define IDE_MAX_CHANNEL 0x02 +#define IDE_MAX_CHANNEL 0x02 /// /// IDE supports 2 devices max /// -#define IDE_MAX_DEVICES 0x02 +#define IDE_MAX_DEVICES 0x02 -#define SATA_ENUMER_ALL FALSE +#define SATA_ENUMER_ALL FALSE // // Sata Controller driver private data structure // -#define SATA_CONTROLLER_SIGNATURE SIGNATURE_32('S','A','T','A') +#define SATA_CONTROLLER_SIGNATURE SIGNATURE_32('S','A','T','A') typedef struct _EFI_SATA_CONTROLLER_PRIVATE_DATA { // // Standard signature used to identify Sata Controller private data // - UINT32 Signature; + UINT32 Signature; // // Protocol instance of IDE_CONTROLLER_INIT produced by this driver // - EFI_IDE_CONTROLLER_INIT_PROTOCOL IdeInit; + EFI_IDE_CONTROLLER_INIT_PROTOCOL IdeInit; // // Copy of protocol pointers used by this driver // - EFI_PCI_IO_PROTOCOL *PciIo; + EFI_PCI_IO_PROTOCOL *PciIo; // // Original PCI attributes // - UINT64 OriginalPciAttributes; + UINT64 OriginalPciAttributes; // // The number of devices that are supported by this channel // - UINT8 DeviceCount; + UINT8 DeviceCount; // // The highest disqulified mode for each attached device, // From ATA/ATAPI spec, if a mode is not supported, // the modes higher than it is also not supported // - EFI_ATA_COLLECTIVE_MODE *DisqualifiedModes; + EFI_ATA_COLLECTIVE_MODE *DisqualifiedModes; // // A copy of EFI_IDENTIFY_DATA data for each attached SATA device and its flag // - EFI_IDENTIFY_DATA *IdentifyData; - BOOLEAN *IdentifyValid; + EFI_IDENTIFY_DATA *IdentifyData; + BOOLEAN *IdentifyValid; } EFI_SATA_CONTROLLER_PRIVATE_DATA; -#define SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS(a) CR(a, EFI_SATA_CONTROLLER_PRIVATE_DATA, IdeInit, SATA_CONTROLLER_SIGNATURE) +#define SATA_CONTROLLER_PRIVATE_DATA_FROM_THIS(a) CR(a, EFI_SATA_CONTROLLER_PRIVATE_DATA, IdeInit, SATA_CONTROLLER_SIGNATURE) // // Driver binding functions declaration // + /** Supported function of Driver Binding protocol for this driver. Test to see if this driver supports ControllerHandle. @@ -125,9 +126,9 @@ typedef struct _EFI_SATA_CONTROLLER_PRIVATE_DATA { EFI_STATUS EFIAPI SataControllerSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) ; @@ -148,9 +149,9 @@ SataControllerSupported ( EFI_STATUS EFIAPI SataControllerStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) ; @@ -169,16 +170,17 @@ SataControllerStart ( EFI_STATUS EFIAPI SataControllerStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) ; // // IDE controller init functions declaration // + /** Returns the information about the specified IDE channel. @@ -218,10 +220,10 @@ SataControllerStop ( EFI_STATUS EFIAPI IdeInitGetChannelInfo ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - OUT BOOLEAN *Enabled, - OUT UINT8 *MaxDevices + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + OUT BOOLEAN *Enabled, + OUT UINT8 *MaxDevices ) ; @@ -252,9 +254,9 @@ IdeInitGetChannelInfo ( EFI_STATUS EFIAPI IdeInitNotifyPhase ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN EFI_IDE_CONTROLLER_ENUM_PHASE Phase, - IN UINT8 Channel + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN EFI_IDE_CONTROLLER_ENUM_PHASE Phase, + IN UINT8 Channel ) ; @@ -300,10 +302,10 @@ IdeInitNotifyPhase ( EFI_STATUS EFIAPI IdeInitSubmitData ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - IN EFI_IDENTIFY_DATA *IdentifyData + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + IN EFI_IDENTIFY_DATA *IdentifyData ) ; @@ -350,10 +352,10 @@ IdeInitSubmitData ( EFI_STATUS EFIAPI IdeInitDisqualifyMode ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - IN EFI_ATA_COLLECTIVE_MODE *BadModes + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + IN EFI_ATA_COLLECTIVE_MODE *BadModes ) ; @@ -414,10 +416,10 @@ IdeInitDisqualifyMode ( EFI_STATUS EFIAPI IdeInitCalculateMode ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - OUT EFI_ATA_COLLECTIVE_MODE **SupportedModes + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + OUT EFI_ATA_COLLECTIVE_MODE **SupportedModes ) ; @@ -447,16 +449,17 @@ IdeInitCalculateMode ( EFI_STATUS EFIAPI IdeInitSetTiming ( - IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, - IN UINT8 Channel, - IN UINT8 Device, - IN EFI_ATA_COLLECTIVE_MODE *Modes + IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This, + IN UINT8 Channel, + IN UINT8 Device, + IN EFI_ATA_COLLECTIVE_MODE *Modes ) ; // // Forward reference declaration // + /** Retrieves a Unicode string that is the user readable name of the UEFI Driver. @@ -481,9 +484,9 @@ IdeInitSetTiming ( EFI_STATUS EFIAPI SataControllerComponentNameGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) ; @@ -530,11 +533,11 @@ SataControllerComponentNameGetDriverName ( EFI_STATUS EFIAPI SataControllerComponentNameGetControllerName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) ; diff --git a/OvmfPkg/Sec/SecMain.c b/OvmfPkg/Sec/SecMain.c index 707b0d4bbf..6d81d5b629 100644 --- a/OvmfPkg/Sec/SecMain.c +++ b/OvmfPkg/Sec/SecMain.c @@ -35,33 +35,33 @@ #define SEC_IDT_ENTRY_COUNT 34 typedef struct _SEC_IDT_TABLE { - EFI_PEI_SERVICES *PeiService; - IA32_IDT_GATE_DESCRIPTOR IdtTable[SEC_IDT_ENTRY_COUNT]; + EFI_PEI_SERVICES *PeiService; + IA32_IDT_GATE_DESCRIPTOR IdtTable[SEC_IDT_ENTRY_COUNT]; } SEC_IDT_TABLE; VOID EFIAPI SecStartupPhase2 ( - IN VOID *Context + IN VOID *Context ); EFI_STATUS EFIAPI TemporaryRamMigration ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, - IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, - IN UINTN CopySize + IN CONST EFI_PEI_SERVICES **PeiServices, + IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, + IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, + IN UINTN CopySize ); // // // -EFI_PEI_TEMPORARY_RAM_SUPPORT_PPI mTemporaryRamSupportPpi = { +EFI_PEI_TEMPORARY_RAM_SUPPORT_PPI mTemporaryRamSupportPpi = { TemporaryRamMigration }; -EFI_PEI_PPI_DESCRIPTOR mPrivateDispatchTable[] = { +EFI_PEI_PPI_DESCRIPTOR mPrivateDispatchTable[] = { { (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), &gEfiTemporaryRamSupportPpiGuid, @@ -94,18 +94,18 @@ IA32_IDT_GATE_DESCRIPTOR mIdtEntryTemplate = { **/ EFI_STATUS FindMainFv ( - IN OUT EFI_FIRMWARE_VOLUME_HEADER **BootFv + IN OUT EFI_FIRMWARE_VOLUME_HEADER **BootFv ) { EFI_FIRMWARE_VOLUME_HEADER *Fv; UINTN Distance; - ASSERT (((UINTN) *BootFv & EFI_PAGE_MASK) == 0); + ASSERT (((UINTN)*BootFv & EFI_PAGE_MASK) == 0); - Fv = *BootFv; - Distance = (UINTN) (*BootFv)->FvLength; + Fv = *BootFv; + Distance = (UINTN)(*BootFv)->FvLength; do { - Fv = (EFI_FIRMWARE_VOLUME_HEADER*) ((UINT8*) Fv - EFI_PAGE_SIZE); + Fv = (EFI_FIRMWARE_VOLUME_HEADER *)((UINT8 *)Fv - EFI_PAGE_SIZE); Distance += EFI_PAGE_SIZE; if (Distance > SIZE_32MB) { return EFI_NOT_FOUND; @@ -115,13 +115,12 @@ FindMainFv ( continue; } - if ((UINTN) Fv->FvLength > Distance) { + if ((UINTN)Fv->FvLength > Distance) { continue; } *BootFv = Fv; return EFI_SUCCESS; - } while (TRUE); } @@ -145,34 +144,35 @@ FindMainFv ( **/ EFI_STATUS FindFfsSectionInstance ( - IN VOID *Sections, - IN UINTN SizeOfSections, - IN EFI_SECTION_TYPE SectionType, - IN UINTN Instance, - OUT EFI_COMMON_SECTION_HEADER **FoundSection + IN VOID *Sections, + IN UINTN SizeOfSections, + IN EFI_SECTION_TYPE SectionType, + IN UINTN Instance, + OUT EFI_COMMON_SECTION_HEADER **FoundSection ) { - EFI_PHYSICAL_ADDRESS CurrentAddress; - UINT32 Size; - EFI_PHYSICAL_ADDRESS EndOfSections; - EFI_COMMON_SECTION_HEADER *Section; - EFI_PHYSICAL_ADDRESS EndOfSection; + EFI_PHYSICAL_ADDRESS CurrentAddress; + UINT32 Size; + EFI_PHYSICAL_ADDRESS EndOfSections; + EFI_COMMON_SECTION_HEADER *Section; + EFI_PHYSICAL_ADDRESS EndOfSection; // // Loop through the FFS file sections within the PEI Core FFS file // - EndOfSection = (EFI_PHYSICAL_ADDRESS)(UINTN) Sections; + EndOfSection = (EFI_PHYSICAL_ADDRESS)(UINTN)Sections; EndOfSections = EndOfSection + SizeOfSections; - for (;;) { + for ( ; ;) { if (EndOfSection == EndOfSections) { break; } + CurrentAddress = (EndOfSection + 3) & ~(3ULL); if (CurrentAddress >= EndOfSections) { return EFI_VOLUME_CORRUPTED; } - Section = (EFI_COMMON_SECTION_HEADER*)(UINTN) CurrentAddress; + Section = (EFI_COMMON_SECTION_HEADER *)(UINTN)CurrentAddress; Size = SECTION_SIZE (Section); if (Size < sizeof (*Section)) { @@ -216,10 +216,10 @@ FindFfsSectionInstance ( **/ EFI_STATUS FindFfsSectionInSections ( - IN VOID *Sections, - IN UINTN SizeOfSections, - IN EFI_SECTION_TYPE SectionType, - OUT EFI_COMMON_SECTION_HEADER **FoundSection + IN VOID *Sections, + IN UINTN SizeOfSections, + IN EFI_SECTION_TYPE SectionType, + OUT EFI_COMMON_SECTION_HEADER **FoundSection ) { return FindFfsSectionInstance ( @@ -247,38 +247,37 @@ FindFfsSectionInSections ( **/ EFI_STATUS FindFfsFileAndSection ( - IN EFI_FIRMWARE_VOLUME_HEADER *Fv, - IN EFI_FV_FILETYPE FileType, - IN EFI_SECTION_TYPE SectionType, - OUT EFI_COMMON_SECTION_HEADER **FoundSection + IN EFI_FIRMWARE_VOLUME_HEADER *Fv, + IN EFI_FV_FILETYPE FileType, + IN EFI_SECTION_TYPE SectionType, + OUT EFI_COMMON_SECTION_HEADER **FoundSection ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS CurrentAddress; - EFI_PHYSICAL_ADDRESS EndOfFirmwareVolume; - EFI_FFS_FILE_HEADER *File; - UINT32 Size; - EFI_PHYSICAL_ADDRESS EndOfFile; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS CurrentAddress; + EFI_PHYSICAL_ADDRESS EndOfFirmwareVolume; + EFI_FFS_FILE_HEADER *File; + UINT32 Size; + EFI_PHYSICAL_ADDRESS EndOfFile; if (Fv->Signature != EFI_FVH_SIGNATURE) { DEBUG ((DEBUG_ERROR, "FV at %p does not have FV header signature\n", Fv)); return EFI_VOLUME_CORRUPTED; } - CurrentAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) Fv; + CurrentAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)Fv; EndOfFirmwareVolume = CurrentAddress + Fv->FvLength; // // Loop through the FFS files in the Boot Firmware Volume // for (EndOfFile = CurrentAddress + Fv->HeaderLength; ; ) { - CurrentAddress = (EndOfFile + 7) & ~(7ULL); if (CurrentAddress > EndOfFirmwareVolume) { return EFI_VOLUME_CORRUPTED; } - File = (EFI_FFS_FILE_HEADER*)(UINTN) CurrentAddress; + File = (EFI_FFS_FILE_HEADER *)(UINTN)CurrentAddress; Size = FFS_FILE_SIZE (File); if (Size < (sizeof (*File) + sizeof (EFI_COMMON_SECTION_HEADER))) { return EFI_VOLUME_CORRUPTED; @@ -297,8 +296,8 @@ FindFfsFileAndSection ( } Status = FindFfsSectionInSections ( - (VOID*) (File + 1), - (UINTN) EndOfFile - (UINTN) (File + 1), + (VOID *)(File + 1), + (UINTN)EndOfFile - (UINTN)(File + 1), SectionType, FoundSection ); @@ -321,30 +320,30 @@ FindFfsFileAndSection ( **/ EFI_STATUS DecompressMemFvs ( - IN OUT EFI_FIRMWARE_VOLUME_HEADER **Fv + IN OUT EFI_FIRMWARE_VOLUME_HEADER **Fv ) { - EFI_STATUS Status; - EFI_GUID_DEFINED_SECTION *Section; - UINT32 OutputBufferSize; - UINT32 ScratchBufferSize; - UINT16 SectionAttribute; - UINT32 AuthenticationStatus; - VOID *OutputBuffer; - VOID *ScratchBuffer; - EFI_COMMON_SECTION_HEADER *FvSection; - EFI_FIRMWARE_VOLUME_HEADER *PeiMemFv; - EFI_FIRMWARE_VOLUME_HEADER *DxeMemFv; - UINT32 FvHeaderSize; - UINT32 FvSectionSize; - - FvSection = (EFI_COMMON_SECTION_HEADER*) NULL; + EFI_STATUS Status; + EFI_GUID_DEFINED_SECTION *Section; + UINT32 OutputBufferSize; + UINT32 ScratchBufferSize; + UINT16 SectionAttribute; + UINT32 AuthenticationStatus; + VOID *OutputBuffer; + VOID *ScratchBuffer; + EFI_COMMON_SECTION_HEADER *FvSection; + EFI_FIRMWARE_VOLUME_HEADER *PeiMemFv; + EFI_FIRMWARE_VOLUME_HEADER *DxeMemFv; + UINT32 FvHeaderSize; + UINT32 FvSectionSize; + + FvSection = (EFI_COMMON_SECTION_HEADER *)NULL; Status = FindFfsFileAndSection ( *Fv, EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE, EFI_SECTION_GUID_DEFINED, - (EFI_COMMON_SECTION_HEADER**) &Section + (EFI_COMMON_SECTION_HEADER **)&Section ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "Unable to find GUID defined section\n")); @@ -362,15 +361,24 @@ DecompressMemFvs ( return Status; } - OutputBuffer = (VOID*) ((UINT8*)(UINTN) PcdGet32 (PcdOvmfDxeMemFvBase) + SIZE_1MB); - ScratchBuffer = ALIGN_POINTER ((UINT8*) OutputBuffer + OutputBufferSize, SIZE_1MB); - - DEBUG ((DEBUG_VERBOSE, "%a: OutputBuffer@%p+0x%x ScratchBuffer@%p+0x%x " - "PcdOvmfDecompressionScratchEnd=0x%x\n", __FUNCTION__, OutputBuffer, - OutputBufferSize, ScratchBuffer, ScratchBufferSize, - PcdGet32 (PcdOvmfDecompressionScratchEnd))); - ASSERT ((UINTN)ScratchBuffer + ScratchBufferSize == - PcdGet32 (PcdOvmfDecompressionScratchEnd)); + OutputBuffer = (VOID *)((UINT8 *)(UINTN)PcdGet32 (PcdOvmfDxeMemFvBase) + SIZE_1MB); + ScratchBuffer = ALIGN_POINTER ((UINT8 *)OutputBuffer + OutputBufferSize, SIZE_1MB); + + DEBUG (( + DEBUG_VERBOSE, + "%a: OutputBuffer@%p+0x%x ScratchBuffer@%p+0x%x " + "PcdOvmfDecompressionScratchEnd=0x%x\n", + __FUNCTION__, + OutputBuffer, + OutputBufferSize, + ScratchBuffer, + ScratchBufferSize, + PcdGet32 (PcdOvmfDecompressionScratchEnd) + )); + ASSERT ( + (UINTN)ScratchBuffer + ScratchBufferSize == + PcdGet32 (PcdOvmfDecompressionScratchEnd) + ); Status = ExtractGuidedSectionDecode ( Section, @@ -395,12 +403,14 @@ DecompressMemFvs ( return Status; } - ASSERT (SECTION_SIZE (FvSection) == - (PcdGet32 (PcdOvmfPeiMemFvSize) + sizeof (*FvSection))); + ASSERT ( + SECTION_SIZE (FvSection) == + (PcdGet32 (PcdOvmfPeiMemFvSize) + sizeof (*FvSection)) + ); ASSERT (FvSection->Type == EFI_SECTION_FIRMWARE_VOLUME_IMAGE); - PeiMemFv = (EFI_FIRMWARE_VOLUME_HEADER*)(UINTN) PcdGet32 (PcdOvmfPeiMemFvBase); - CopyMem (PeiMemFv, (VOID*) (FvSection + 1), PcdGet32 (PcdOvmfPeiMemFvSize)); + PeiMemFv = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)PcdGet32 (PcdOvmfPeiMemFvBase); + CopyMem (PeiMemFv, (VOID *)(FvSection + 1), PcdGet32 (PcdOvmfPeiMemFvSize)); if (PeiMemFv->Signature != EFI_FVH_SIGNATURE) { DEBUG ((DEBUG_ERROR, "Extracted FV at %p does not have FV header signature\n", PeiMemFv)); @@ -424,16 +434,16 @@ DecompressMemFvs ( if (IS_SECTION2 (FvSection)) { FvSectionSize = SECTION2_SIZE (FvSection); - FvHeaderSize = sizeof (EFI_COMMON_SECTION_HEADER2); + FvHeaderSize = sizeof (EFI_COMMON_SECTION_HEADER2); } else { FvSectionSize = SECTION_SIZE (FvSection); - FvHeaderSize = sizeof (EFI_COMMON_SECTION_HEADER); + FvHeaderSize = sizeof (EFI_COMMON_SECTION_HEADER); } ASSERT (FvSectionSize == (PcdGet32 (PcdOvmfDxeMemFvSize) + FvHeaderSize)); - DxeMemFv = (EFI_FIRMWARE_VOLUME_HEADER*)(UINTN) PcdGet32 (PcdOvmfDxeMemFvBase); - CopyMem (DxeMemFv, (VOID*) ((UINTN)FvSection + FvHeaderSize), PcdGet32 (PcdOvmfDxeMemFvSize)); + DxeMemFv = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)PcdGet32 (PcdOvmfDxeMemFvBase); + CopyMem (DxeMemFv, (VOID *)((UINTN)FvSection + FvHeaderSize), PcdGet32 (PcdOvmfDxeMemFvSize)); if (DxeMemFv->Signature != EFI_FVH_SIGNATURE) { DEBUG ((DEBUG_ERROR, "Extracted FV at %p does not have FV header signature\n", DxeMemFv)); @@ -458,12 +468,12 @@ DecompressMemFvs ( **/ EFI_STATUS FindPeiCoreImageBaseInFv ( - IN EFI_FIRMWARE_VOLUME_HEADER *Fv, - OUT EFI_PHYSICAL_ADDRESS *PeiCoreImageBase + IN EFI_FIRMWARE_VOLUME_HEADER *Fv, + OUT EFI_PHYSICAL_ADDRESS *PeiCoreImageBase ) { - EFI_STATUS Status; - EFI_COMMON_SECTION_HEADER *Section; + EFI_STATUS Status; + EFI_COMMON_SECTION_HEADER *Section; Status = FindFfsFileAndSection ( Fv, @@ -488,7 +498,6 @@ FindPeiCoreImageBaseInFv ( return EFI_SUCCESS; } - /** Reads 8-bits of CMOS data. @@ -503,14 +512,13 @@ FindPeiCoreImageBaseInFv ( STATIC UINT8 CmosRead8 ( - IN UINTN Index + IN UINTN Index ) { - IoWrite8 (0x70, (UINT8) Index); + IoWrite8 (0x70, (UINT8)Index); return IoRead8 (0x71); } - STATIC BOOLEAN IsS3Resume ( @@ -520,18 +528,16 @@ IsS3Resume ( return (CmosRead8 (0xF) == 0xFE); } - STATIC EFI_STATUS GetS3ResumePeiFv ( - IN OUT EFI_FIRMWARE_VOLUME_HEADER **PeiFv + IN OUT EFI_FIRMWARE_VOLUME_HEADER **PeiFv ) { - *PeiFv = (EFI_FIRMWARE_VOLUME_HEADER*)(UINTN) PcdGet32 (PcdOvmfPeiMemFvBase); + *PeiFv = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)PcdGet32 (PcdOvmfPeiMemFvBase); return EFI_SUCCESS; } - /** Locates the PEI Core entry point address @@ -545,11 +551,11 @@ GetS3ResumePeiFv ( **/ VOID FindPeiCoreImageBase ( - IN OUT EFI_FIRMWARE_VOLUME_HEADER **BootFv, - OUT EFI_PHYSICAL_ADDRESS *PeiCoreImageBase + IN OUT EFI_FIRMWARE_VOLUME_HEADER **BootFv, + OUT EFI_PHYSICAL_ADDRESS *PeiCoreImageBase ) { - BOOLEAN S3Resume; + BOOLEAN S3Resume; *PeiCoreImageBase = 0; @@ -566,8 +572,11 @@ FindPeiCoreImageBase ( // We're either not resuming, or resuming "securely" -- we'll decompress // both PEI FV and DXE FV from pristine flash. // - DEBUG ((DEBUG_VERBOSE, "SEC: %a\n", - S3Resume ? "S3 resume (with PEI decompression)" : "Normal boot")); + DEBUG (( + DEBUG_VERBOSE, + "SEC: %a\n", + S3Resume ? "S3 resume (with PEI decompression)" : "Normal boot" + )); FindMainFv (BootFv); DecompressMemFvs (BootFv); @@ -582,34 +591,33 @@ FindPeiCoreImageBase ( **/ EFI_STATUS FindImageBase ( - IN EFI_FIRMWARE_VOLUME_HEADER *BootFirmwareVolumePtr, - OUT EFI_PHYSICAL_ADDRESS *SecCoreImageBase + IN EFI_FIRMWARE_VOLUME_HEADER *BootFirmwareVolumePtr, + OUT EFI_PHYSICAL_ADDRESS *SecCoreImageBase ) { - EFI_PHYSICAL_ADDRESS CurrentAddress; - EFI_PHYSICAL_ADDRESS EndOfFirmwareVolume; - EFI_FFS_FILE_HEADER *File; - UINT32 Size; - EFI_PHYSICAL_ADDRESS EndOfFile; - EFI_COMMON_SECTION_HEADER *Section; - EFI_PHYSICAL_ADDRESS EndOfSection; + EFI_PHYSICAL_ADDRESS CurrentAddress; + EFI_PHYSICAL_ADDRESS EndOfFirmwareVolume; + EFI_FFS_FILE_HEADER *File; + UINT32 Size; + EFI_PHYSICAL_ADDRESS EndOfFile; + EFI_COMMON_SECTION_HEADER *Section; + EFI_PHYSICAL_ADDRESS EndOfSection; *SecCoreImageBase = 0; - CurrentAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) BootFirmwareVolumePtr; + CurrentAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)BootFirmwareVolumePtr; EndOfFirmwareVolume = CurrentAddress + BootFirmwareVolumePtr->FvLength; // // Loop through the FFS files in the Boot Firmware Volume // for (EndOfFile = CurrentAddress + BootFirmwareVolumePtr->HeaderLength; ; ) { - CurrentAddress = (EndOfFile + 7) & 0xfffffffffffffff8ULL; if (CurrentAddress > EndOfFirmwareVolume) { return EFI_NOT_FOUND; } - File = (EFI_FFS_FILE_HEADER*)(UINTN) CurrentAddress; + File = (EFI_FFS_FILE_HEADER *)(UINTN)CurrentAddress; Size = FFS_FILE_SIZE (File); if (Size < sizeof (*File)) { return EFI_NOT_FOUND; @@ -630,10 +638,10 @@ FindImageBase ( // // Loop through the FFS file sections within the FFS file // - EndOfSection = (EFI_PHYSICAL_ADDRESS)(UINTN) (File + 1); - for (;;) { + EndOfSection = (EFI_PHYSICAL_ADDRESS)(UINTN)(File + 1); + for ( ; ;) { CurrentAddress = (EndOfSection + 3) & 0xfffffffffffffffcULL; - Section = (EFI_COMMON_SECTION_HEADER*)(UINTN) CurrentAddress; + Section = (EFI_COMMON_SECTION_HEADER *)(UINTN)CurrentAddress; Size = SECTION_SIZE (Section); if (Size < sizeof (*Section)) { @@ -648,10 +656,11 @@ FindImageBase ( // // Look for executable sections // - if (Section->Type == EFI_SECTION_PE32 || Section->Type == EFI_SECTION_TE) { + if ((Section->Type == EFI_SECTION_PE32) || (Section->Type == EFI_SECTION_TE)) { if (File->Type == EFI_FV_FILETYPE_SECURITY_CORE) { - *SecCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) (Section + 1); + *SecCoreImageBase = (PHYSICAL_ADDRESS)(UINTN)(Section + 1); } + break; } } @@ -674,42 +683,42 @@ FindImageBase ( **/ VOID FindAndReportEntryPoints ( - IN EFI_FIRMWARE_VOLUME_HEADER **BootFirmwareVolumePtr, - OUT EFI_PEI_CORE_ENTRY_POINT *PeiCoreEntryPoint + IN EFI_FIRMWARE_VOLUME_HEADER **BootFirmwareVolumePtr, + OUT EFI_PEI_CORE_ENTRY_POINT *PeiCoreEntryPoint ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS SecCoreImageBase; - EFI_PHYSICAL_ADDRESS PeiCoreImageBase; - PE_COFF_LOADER_IMAGE_CONTEXT ImageContext; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS SecCoreImageBase; + EFI_PHYSICAL_ADDRESS PeiCoreImageBase; + PE_COFF_LOADER_IMAGE_CONTEXT ImageContext; // // Find SEC Core and PEI Core image base - // + // Status = FindImageBase (*BootFirmwareVolumePtr, &SecCoreImageBase); ASSERT_EFI_ERROR (Status); FindPeiCoreImageBase (BootFirmwareVolumePtr, &PeiCoreImageBase); - ZeroMem ((VOID *) &ImageContext, sizeof (PE_COFF_LOADER_IMAGE_CONTEXT)); + ZeroMem ((VOID *)&ImageContext, sizeof (PE_COFF_LOADER_IMAGE_CONTEXT)); // // Report SEC Core debug information when remote debug is enabled // ImageContext.ImageAddress = SecCoreImageBase; - ImageContext.PdbPointer = PeCoffLoaderGetPdbPointer ((VOID*) (UINTN) ImageContext.ImageAddress); + ImageContext.PdbPointer = PeCoffLoaderGetPdbPointer ((VOID *)(UINTN)ImageContext.ImageAddress); PeCoffLoaderRelocateImageExtraAction (&ImageContext); // // Report PEI Core debug information when remote debug is enabled // ImageContext.ImageAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)PeiCoreImageBase; - ImageContext.PdbPointer = PeCoffLoaderGetPdbPointer ((VOID*) (UINTN) ImageContext.ImageAddress); + ImageContext.PdbPointer = PeCoffLoaderGetPdbPointer ((VOID *)(UINTN)ImageContext.ImageAddress); PeCoffLoaderRelocateImageExtraAction (&ImageContext); // // Find PEI Core entry point // - Status = PeCoffLoaderGetEntryPoint ((VOID *) (UINTN) PeiCoreImageBase, (VOID**) PeiCoreEntryPoint); + Status = PeCoffLoaderGetEntryPoint ((VOID *)(UINTN)PeiCoreImageBase, (VOID **)PeiCoreEntryPoint); if (EFI_ERROR (Status)) { *PeiCoreEntryPoint = 0; } @@ -738,10 +747,10 @@ SevEsProtocolFailure ( // // Use the GHCB MSR Protocol to request termination by the hypervisor // - Msr.GhcbPhysicalAddress = 0; - Msr.GhcbTerminate.Function = GHCB_INFO_TERMINATE_REQUEST; + Msr.GhcbPhysicalAddress = 0; + Msr.GhcbTerminate.Function = GHCB_INFO_TERMINATE_REQUEST; Msr.GhcbTerminate.ReasonCodeSet = GHCB_TERMINATE_GHCB; - Msr.GhcbTerminate.ReasonCode = ReasonCode; + Msr.GhcbTerminate.ReasonCode = ReasonCode; AsmWriteMsr64 (MSR_SEV_ES_GHCB, Msr.GhcbPhysicalAddress); AsmVmgExit (); @@ -771,7 +780,7 @@ SevEsProtocolCheck ( // protocol checking // Msr.GhcbPhysicalAddress = 0; - Msr.GhcbInfo.Function = GHCB_INFO_SEV_INFO_GET; + Msr.GhcbInfo.Function = GHCB_INFO_SEV_INFO_GET; AsmWriteMsr64 (MSR_SEV_ES_GHCB, Msr.GhcbPhysicalAddress); AsmVmgExit (); @@ -787,7 +796,8 @@ SevEsProtocolCheck ( } if ((Msr.GhcbProtocol.SevEsProtocolMin > GHCB_VERSION_MAX) || - (Msr.GhcbProtocol.SevEsProtocolMax < GHCB_VERSION_MIN)) { + (Msr.GhcbProtocol.SevEsProtocolMax < GHCB_VERSION_MIN)) + { SevEsProtocolFailure (GHCB_TERMINATE_GHCB_PROTOCOL); } @@ -804,7 +814,7 @@ SevEsProtocolCheck ( // Set the version to the maximum that can be supported // Ghcb->ProtocolVersion = MIN (Msr.GhcbProtocol.SevEsProtocolMax, GHCB_VERSION_MAX); - Ghcb->GhcbUsage = GHCB_STANDARD_USAGE; + Ghcb->GhcbUsage = GHCB_STANDARD_USAGE; } /** @@ -823,16 +833,18 @@ IsSevGuest ( VOID ) { - OVMF_WORK_AREA *WorkArea; + OVMF_WORK_AREA *WorkArea; // // Ensure that the size of the Confidential Computing work area header // is same as what is provided through a fixed PCD. // - ASSERT ((UINTN) FixedPcdGet32 (PcdOvmfConfidentialComputingWorkAreaHeader) == - sizeof(CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER)); + ASSERT ( + (UINTN)FixedPcdGet32 (PcdOvmfConfidentialComputingWorkAreaHeader) == + sizeof (CONFIDENTIAL_COMPUTING_WORK_AREA_HEADER) + ); - WorkArea = (OVMF_WORK_AREA *) FixedPcdGet32 (PcdOvmfWorkAreaBase); + WorkArea = (OVMF_WORK_AREA *)FixedPcdGet32 (PcdOvmfWorkAreaBase); return ((WorkArea != NULL) && (WorkArea->Header.GuestType == GUEST_TYPE_AMD_SEV)); } @@ -856,11 +868,11 @@ SevEsIsEnabled ( { SEC_SEV_ES_WORK_AREA *SevEsWorkArea; - if (!IsSevGuest()) { + if (!IsSevGuest ()) { return FALSE; } - SevEsWorkArea = (SEC_SEV_ES_WORK_AREA *) FixedPcdGet32 (PcdSevEsWorkAreaBase); + SevEsWorkArea = (SEC_SEV_ES_WORK_AREA *)FixedPcdGet32 (PcdSevEsWorkAreaBase); return (SevEsWorkArea->SevEsEnabled != 0); } @@ -868,25 +880,26 @@ SevEsIsEnabled ( VOID EFIAPI SecCoreStartupWithStack ( - IN EFI_FIRMWARE_VOLUME_HEADER *BootFv, - IN VOID *TopOfCurrentStack + IN EFI_FIRMWARE_VOLUME_HEADER *BootFv, + IN VOID *TopOfCurrentStack ) { - EFI_SEC_PEI_HAND_OFF SecCoreData; - SEC_IDT_TABLE IdtTableInStack; - IA32_DESCRIPTOR IdtDescriptor; - UINT32 Index; - volatile UINT8 *Table; + EFI_SEC_PEI_HAND_OFF SecCoreData; + SEC_IDT_TABLE IdtTableInStack; + IA32_DESCRIPTOR IdtDescriptor; + UINT32 Index; + volatile UINT8 *Table; // // To ensure SMM can't be compromised on S3 resume, we must force re-init of // the BaseExtractGuidedSectionLib. Since this is before library contructors // are called, we must use a loop rather than SetMem. // - Table = (UINT8*)(UINTN)FixedPcdGet64 (PcdGuidedExtractHandlerTableAddress); + Table = (UINT8 *)(UINTN)FixedPcdGet64 (PcdGuidedExtractHandlerTableAddress); for (Index = 0; Index < FixedPcdGet32 (PcdGuidedExtractHandlerTableSize); - ++Index) { + ++Index) + { Table[Index] = 0; } @@ -895,13 +908,13 @@ SecCoreStartupWithStack ( // we use a loop rather than CopyMem. // IdtTableInStack.PeiService = NULL; - for (Index = 0; Index < SEC_IDT_ENTRY_COUNT; Index ++) { + for (Index = 0; Index < SEC_IDT_ENTRY_COUNT; Index++) { UINT8 *Src; UINT8 *Dst; UINTN Byte; - Src = (UINT8 *) &mIdtEntryTemplate; - Dst = (UINT8 *) &IdtTableInStack.IdtTable[Index]; + Src = (UINT8 *)&mIdtEntryTemplate; + Dst = (UINT8 *)&IdtTableInStack.IdtTable[Index]; for (Byte = 0; Byte < sizeof (mIdtEntryTemplate); Byte++) { Dst[Byte] = Src[Byte]; } @@ -947,7 +960,8 @@ SecCoreStartupWithStack ( AsmEnableCache (); } - DEBUG ((DEBUG_INFO, + DEBUG (( + DEBUG_INFO, "SecCoreStartupWithStack(0x%x, 0x%x)\n", (UINT32)(UINTN)BootFv, (UINT32)(UINTN)TopOfCurrentStack @@ -959,13 +973,13 @@ SecCoreStartupWithStack ( // InitializeFloatingPointUnits (); -#if defined (MDE_CPU_X64) + #if defined (MDE_CPU_X64) // // ASSERT that the Page Tables were set by the reset vector code to // the address we expect. // - ASSERT (AsmReadCr3 () == (UINTN) PcdGet32 (PcdOvmfSecPageTablesBase)); -#endif + ASSERT (AsmReadCr3 () == (UINTN)PcdGet32 (PcdOvmfSecPageTablesBase)); + #endif // // |-------------| <-- TopOfCurrentStack @@ -975,26 +989,28 @@ SecCoreStartupWithStack ( // |-------------| <-- SecCoreData.TemporaryRamBase // - ASSERT ((UINTN) (PcdGet32 (PcdOvmfSecPeiTempRamBase) + - PcdGet32 (PcdOvmfSecPeiTempRamSize)) == - (UINTN) TopOfCurrentStack); + ASSERT ( + (UINTN)(PcdGet32 (PcdOvmfSecPeiTempRamBase) + + PcdGet32 (PcdOvmfSecPeiTempRamSize)) == + (UINTN)TopOfCurrentStack + ); // // Initialize SEC hand-off state // - SecCoreData.DataSize = sizeof(EFI_SEC_PEI_HAND_OFF); + SecCoreData.DataSize = sizeof (EFI_SEC_PEI_HAND_OFF); - SecCoreData.TemporaryRamSize = (UINTN) PcdGet32 (PcdOvmfSecPeiTempRamSize); - SecCoreData.TemporaryRamBase = (VOID*)((UINT8 *)TopOfCurrentStack - SecCoreData.TemporaryRamSize); + SecCoreData.TemporaryRamSize = (UINTN)PcdGet32 (PcdOvmfSecPeiTempRamSize); + SecCoreData.TemporaryRamBase = (VOID *)((UINT8 *)TopOfCurrentStack - SecCoreData.TemporaryRamSize); - SecCoreData.PeiTemporaryRamBase = SecCoreData.TemporaryRamBase; - SecCoreData.PeiTemporaryRamSize = SecCoreData.TemporaryRamSize >> 1; + SecCoreData.PeiTemporaryRamBase = SecCoreData.TemporaryRamBase; + SecCoreData.PeiTemporaryRamSize = SecCoreData.TemporaryRamSize >> 1; - SecCoreData.StackBase = (UINT8 *)SecCoreData.TemporaryRamBase + SecCoreData.PeiTemporaryRamSize; - SecCoreData.StackSize = SecCoreData.TemporaryRamSize >> 1; + SecCoreData.StackBase = (UINT8 *)SecCoreData.TemporaryRamBase + SecCoreData.PeiTemporaryRamSize; + SecCoreData.StackSize = SecCoreData.TemporaryRamSize >> 1; SecCoreData.BootFirmwareVolumeBase = BootFv; - SecCoreData.BootFirmwareVolumeSize = (UINTN) BootFv->FvLength; + SecCoreData.BootFirmwareVolumeSize = (UINTN)BootFv->FvLength; // // Make sure the 8259 is masked before initializing the Debug Agent and the debug timer is enabled @@ -1028,15 +1044,15 @@ SecCoreStartupWithStack ( **/ VOID EFIAPI -SecStartupPhase2( - IN VOID *Context +SecStartupPhase2 ( + IN VOID *Context ) { EFI_SEC_PEI_HAND_OFF *SecCoreData; EFI_FIRMWARE_VOLUME_HEADER *BootFv; EFI_PEI_CORE_ENTRY_POINT PeiCoreEntryPoint; - SecCoreData = (EFI_SEC_PEI_HAND_OFF *) Context; + SecCoreData = (EFI_SEC_PEI_HAND_OFF *)Context; // // Find PEI Core entry point. It will report SEC and Pei Core debug information if remote debug @@ -1045,12 +1061,12 @@ SecStartupPhase2( BootFv = (EFI_FIRMWARE_VOLUME_HEADER *)SecCoreData->BootFirmwareVolumeBase; FindAndReportEntryPoints (&BootFv, &PeiCoreEntryPoint); SecCoreData->BootFirmwareVolumeBase = BootFv; - SecCoreData->BootFirmwareVolumeSize = (UINTN) BootFv->FvLength; + SecCoreData->BootFirmwareVolumeSize = (UINTN)BootFv->FvLength; // // Transfer the control to the PEI core // - (*PeiCoreEntryPoint) (SecCoreData, (EFI_PEI_PPI_DESCRIPTOR *)&mPrivateDispatchTable); + (*PeiCoreEntryPoint)(SecCoreData, (EFI_PEI_PPI_DESCRIPTOR *)&mPrivateDispatchTable); // // If we get here then the PEI Core returned, which is not recoverable. @@ -1062,10 +1078,10 @@ SecStartupPhase2( EFI_STATUS EFIAPI TemporaryRamMigration ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, - IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, - IN UINTN CopySize + IN CONST EFI_PEI_SERVICES **PeiServices, + IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, + IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, + IN UINTN CopySize ) { IA32_DESCRIPTOR IdtDescriptor; @@ -1077,24 +1093,25 @@ TemporaryRamMigration ( BOOLEAN OldStatus; BASE_LIBRARY_JUMP_BUFFER JumpBuffer; - DEBUG ((DEBUG_INFO, + DEBUG (( + DEBUG_INFO, "TemporaryRamMigration(0x%Lx, 0x%Lx, 0x%Lx)\n", TemporaryMemoryBase, PermanentMemoryBase, (UINT64)CopySize )); - OldHeap = (VOID*)(UINTN)TemporaryMemoryBase; - NewHeap = (VOID*)((UINTN)PermanentMemoryBase + (CopySize >> 1)); + OldHeap = (VOID *)(UINTN)TemporaryMemoryBase; + NewHeap = (VOID *)((UINTN)PermanentMemoryBase + (CopySize >> 1)); - OldStack = (VOID*)((UINTN)TemporaryMemoryBase + (CopySize >> 1)); - NewStack = (VOID*)(UINTN)PermanentMemoryBase; + OldStack = (VOID *)((UINTN)TemporaryMemoryBase + (CopySize >> 1)); + NewStack = (VOID *)(UINTN)PermanentMemoryBase; - DebugAgentContext.HeapMigrateOffset = (UINTN)NewHeap - (UINTN)OldHeap; + DebugAgentContext.HeapMigrateOffset = (UINTN)NewHeap - (UINTN)OldHeap; DebugAgentContext.StackMigrateOffset = (UINTN)NewStack - (UINTN)OldStack; OldStatus = SaveAndSetDebugTimerInterrupt (FALSE); - InitializeDebugAgent (DEBUG_AGENT_INIT_POSTMEM_SEC, (VOID *) &DebugAgentContext, NULL); + InitializeDebugAgent (DEBUG_AGENT_INIT_POSTMEM_SEC, (VOID *)&DebugAgentContext, NULL); // // Migrate Heap @@ -1118,14 +1135,14 @@ TemporaryRamMigration ( // Use SetJump()/LongJump() to switch to a new stack. // if (SetJump (&JumpBuffer) == 0) { -#if defined (MDE_CPU_IA32) + #if defined (MDE_CPU_IA32) JumpBuffer.Esp = JumpBuffer.Esp + DebugAgentContext.StackMigrateOffset; JumpBuffer.Ebp = JumpBuffer.Ebp + DebugAgentContext.StackMigrateOffset; -#endif -#if defined (MDE_CPU_X64) + #endif + #if defined (MDE_CPU_X64) JumpBuffer.Rsp = JumpBuffer.Rsp + DebugAgentContext.StackMigrateOffset; JumpBuffer.Rbp = JumpBuffer.Rbp + DebugAgentContext.StackMigrateOffset; -#endif + #endif LongJump (&JumpBuffer, (UINTN)-1); } @@ -1133,4 +1150,3 @@ TemporaryRamMigration ( return EFI_SUCCESS; } - diff --git a/OvmfPkg/SioBusDxe/ComponentName.c b/OvmfPkg/SioBusDxe/ComponentName.c index 197dc6f746..b7e4ae3898 100644 --- a/OvmfPkg/SioBusDxe/ComponentName.c +++ b/OvmfPkg/SioBusDxe/ComponentName.c @@ -12,9 +12,9 @@ // // Driver name table // -GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSioBusDriverNameTable[] = { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSioBusDriverNameTable[] = { { "eng;en", L"OVMF Sio Bus Driver" }, - { NULL , NULL } + { NULL, NULL } }; // @@ -29,13 +29,12 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gSioBusComponentName // // EFI Component Name 2 Protocol // -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSioBusComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) SioBusComponentNameGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) SioBusComponentNameGetControllerName, +GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSioBusComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)SioBusComponentNameGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)SioBusComponentNameGetControllerName, "en" }; - /** Retrieves a Unicode string that is the user readable name of the driver. @@ -73,9 +72,9 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSioBusComponentName2 EFI_STATUS EFIAPI SioBusComponentNameGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) { return LookupUnicodeString2 ( @@ -149,11 +148,11 @@ SioBusComponentNameGetDriverName ( EFI_STATUS EFIAPI SioBusComponentNameGetControllerName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { return EFI_UNSUPPORTED; diff --git a/OvmfPkg/SioBusDxe/SioBusDxe.c b/OvmfPkg/SioBusDxe/SioBusDxe.c index 43a1701afa..bb2c5bf80b 100644 --- a/OvmfPkg/SioBusDxe/SioBusDxe.c +++ b/OvmfPkg/SioBusDxe/SioBusDxe.c @@ -13,7 +13,7 @@ // // SioBus Driver Binding Protocol // -EFI_DRIVER_BINDING_PROTOCOL gSioBusDriverBinding = { +EFI_DRIVER_BINDING_PROTOCOL gSioBusDriverBinding = { SioBusDriverBindingSupported, SioBusDriverBindingStart, SioBusDriverBindingStop, @@ -22,7 +22,6 @@ EFI_DRIVER_BINDING_PROTOCOL gSioBusDriverBinding = { NULL }; - /** Tests to see if this driver supports a given controller. If a child device is provided, it further tests to see if this driver supports creating a handle @@ -79,18 +78,18 @@ EFI_DRIVER_BINDING_PROTOCOL gSioBusDriverBinding = { EFI_STATUS EFIAPI SioBusDriverBindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; - UINTN SegmentNumber; - UINTN BusNumber; - UINTN DeviceNumber; - UINTN FunctionNumber; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; + UINTN SegmentNumber; + UINTN BusNumber; + UINTN DeviceNumber; + UINTN FunctionNumber; // // Get PciIo protocol instance @@ -98,21 +97,22 @@ SioBusDriverBindingSupported ( Status = gBS->OpenProtocol ( Controller, &gEfiPciIoProtocolGuid, - (VOID**)&PciIo, + (VOID **)&PciIo, This->DriverBindingHandle, Controller, EFI_OPEN_PROTOCOL_BY_DRIVER ); - if (EFI_ERROR(Status)) { + if (EFI_ERROR (Status)) { return Status; } Status = PciIo->Pci.Read ( - PciIo, - EfiPciIoWidthUint32, - 0, - sizeof(Pci) / sizeof(UINT32), - &Pci); + PciIo, + EfiPciIoWidthUint32, + 0, + sizeof (Pci) / sizeof (UINT32), + &Pci + ); if (!EFI_ERROR (Status)) { Status = EFI_UNSUPPORTED; @@ -129,8 +129,9 @@ SioBusDriverBindingSupported ( // // See if this is an Intel PCI to ISA bridge in Positive Decode Mode // - if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA_PDECODE && - Pci.Hdr.VendorId == 0x8086) { + if ((Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA_PDECODE) && + (Pci.Hdr.VendorId == 0x8086)) + { // // See if this is on Function #0 to avoid false positives on // PCI_CLASS_BRIDGE_OTHER that has the same value as @@ -143,7 +144,7 @@ SioBusDriverBindingSupported ( &DeviceNumber, &FunctionNumber ); - if (!EFI_ERROR (Status) && FunctionNumber == 0) { + if (!EFI_ERROR (Status) && (FunctionNumber == 0)) { Status = EFI_SUCCESS; } else { Status = EFI_UNSUPPORTED; @@ -212,20 +213,20 @@ SioBusDriverBindingSupported ( EFI_STATUS EFIAPI SioBusDriverBindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath; - UINT64 Supports; - UINT64 OriginalAttributes; - UINT64 Attributes; - BOOLEAN Enabled; - SIO_BUS_DRIVER_PRIVATE_DATA *Private; - UINT32 ChildDeviceNumber; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath; + UINT64 Supports; + UINT64 OriginalAttributes; + UINT64 Attributes; + BOOLEAN Enabled; + SIO_BUS_DRIVER_PRIVATE_DATA *Private; + UINT32 ChildDeviceNumber; Enabled = FALSE; Supports = 0; @@ -235,11 +236,11 @@ SioBusDriverBindingStart ( // // Open the PCI I/O Protocol Interface // - PciIo = NULL; + PciIo = NULL; Status = gBS->OpenProtocol ( Controller, &gEfiPciIoProtocolGuid, - (VOID**) &PciIo, + (VOID **)&PciIo, This->DriverBindingHandle, Controller, EFI_OPEN_PROTOCOL_BY_DRIVER @@ -254,7 +255,7 @@ SioBusDriverBindingStart ( Status = gBS->OpenProtocol ( Controller, &gEfiDevicePathProtocolGuid, - (VOID **) &ParentDevicePath, + (VOID **)&ParentDevicePath, This->DriverBindingHandle, Controller, EFI_OPEN_PROTOCOL_BY_DRIVER @@ -282,11 +283,12 @@ SioBusDriverBindingStart ( goto Done; } - Supports &= (UINT64) (EFI_PCI_IO_ATTRIBUTE_ISA_IO | - EFI_PCI_IO_ATTRIBUTE_ISA_IO_16); - if (Supports == 0 || - Supports == (EFI_PCI_IO_ATTRIBUTE_ISA_IO | - EFI_PCI_IO_ATTRIBUTE_ISA_IO_16)) { + Supports &= (UINT64)(EFI_PCI_IO_ATTRIBUTE_ISA_IO | + EFI_PCI_IO_ATTRIBUTE_ISA_IO_16); + if ((Supports == 0) || + (Supports == (EFI_PCI_IO_ATTRIBUTE_ISA_IO | + EFI_PCI_IO_ATTRIBUTE_ISA_IO_16))) + { Status = EFI_UNSUPPORTED; goto Done; } @@ -324,6 +326,7 @@ SioBusDriverBindingStart ( Status = EFI_OUT_OF_RESOURCES; goto Done; } + Private->PciIo = PciIo; Private->OriginalAttributes = OriginalAttributes; @@ -370,7 +373,7 @@ SioBusDriverBindingStart ( Done: if (EFI_ERROR (Status)) { - if (PciIo != NULL && Enabled) { + if ((PciIo != NULL) && Enabled) { PciIo->Attributes ( PciIo, EfiPciIoAttributeOperationSet, @@ -445,19 +448,19 @@ Done: EFI_STATUS EFIAPI SioBusDriverBindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) { - EFI_STATUS Status; - SIO_BUS_DRIVER_PRIVATE_DATA *Private; - UINTN Index; - BOOLEAN AllChildrenStopped; - EFI_SIO_PROTOCOL *Sio; - SIO_DEV *SioDevice; - EFI_PCI_IO_PROTOCOL *PciIo; + EFI_STATUS Status; + SIO_BUS_DRIVER_PRIVATE_DATA *Private; + UINTN Index; + BOOLEAN AllChildrenStopped; + EFI_SIO_PROTOCOL *Sio; + SIO_DEV *SioDevice; + EFI_PCI_IO_PROTOCOL *PciIo; if (NumberOfChildren == 0) { // @@ -466,7 +469,7 @@ SioBusDriverBindingStop ( Status = gBS->OpenProtocol ( Controller, &gEfiCallerIdGuid, - (VOID **) &Private, + (VOID **)&Private, This->DriverBindingHandle, Controller, EFI_OPEN_PROTOCOL_GET_PROTOCOL @@ -486,10 +489,10 @@ SioBusDriverBindingStop ( } gBS->UninstallProtocolInterface ( - Controller, - &gEfiCallerIdGuid, - Private - ); + Controller, + &gEfiCallerIdGuid, + Private + ); FreePool (Private); // @@ -527,7 +530,7 @@ SioBusDriverBindingStop ( Status = gBS->OpenProtocol ( ChildHandleBuffer[Index], &gEfiSioProtocolGuid, - (VOID **) &Sio, + (VOID **)&Sio, This->DriverBindingHandle, Controller, EFI_OPEN_PROTOCOL_GET_PROTOCOL @@ -564,7 +567,7 @@ SioBusDriverBindingStop ( gBS->OpenProtocol ( Controller, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo, + (VOID **)&PciIo, This->DriverBindingHandle, ChildHandleBuffer[Index], EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER @@ -597,8 +600,8 @@ SioBusDriverBindingStop ( EFI_STATUS EFIAPI SioBusDxeDriverEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { // diff --git a/OvmfPkg/SioBusDxe/SioBusDxe.h b/OvmfPkg/SioBusDxe/SioBusDxe.h index ae338787e8..0fc4ed8cf7 100644 --- a/OvmfPkg/SioBusDxe/SioBusDxe.h +++ b/OvmfPkg/SioBusDxe/SioBusDxe.h @@ -37,13 +37,11 @@ typedef struct { UINT64 OriginalAttributes; } SIO_BUS_DRIVER_PRIVATE_DATA; - // // Global Variables // -extern EFI_COMPONENT_NAME_PROTOCOL gSioBusComponentName; -extern EFI_COMPONENT_NAME2_PROTOCOL gSioBusComponentName2; - +extern EFI_COMPONENT_NAME_PROTOCOL gSioBusComponentName; +extern EFI_COMPONENT_NAME2_PROTOCOL gSioBusComponentName2; // // EFI Component Name Functions @@ -86,9 +84,9 @@ extern EFI_COMPONENT_NAME2_PROTOCOL gSioBusComponentName2; EFI_STATUS EFIAPI SioBusComponentNameGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ); /** @@ -153,14 +151,13 @@ SioBusComponentNameGetDriverName ( EFI_STATUS EFIAPI SioBusComponentNameGetControllerName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ); - // // Driver Binding Protocol interfaces // @@ -221,9 +218,9 @@ SioBusComponentNameGetControllerName ( EFI_STATUS EFIAPI SioBusDriverBindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); /** @@ -275,9 +272,9 @@ SioBusDriverBindingSupported ( EFI_STATUS EFIAPI SioBusDriverBindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); /** @@ -316,10 +313,10 @@ SioBusDriverBindingStart ( EFI_STATUS EFIAPI SioBusDriverBindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE Controller, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ); -#endif // __SIO_BUS_DXE_H__ +#endif // __SIO_BUS_DXE_H__ diff --git a/OvmfPkg/SioBusDxe/SioService.c b/OvmfPkg/SioBusDxe/SioService.c index ab8fa7676f..66c5a08cf9 100644 --- a/OvmfPkg/SioBusDxe/SioService.c +++ b/OvmfPkg/SioBusDxe/SioService.c @@ -13,7 +13,7 @@ // // Super I/O Protocol interfaces // -EFI_SIO_PROTOCOL mSioInterface = { +EFI_SIO_PROTOCOL mSioInterface = { SioRegisterAccess, SioGetResources, SioSetResources, @@ -25,48 +25,54 @@ EFI_SIO_PROTOCOL mSioInterface = { // COM 1 UART Controller // GLOBAL_REMOVE_IF_UNREFERENCED -SIO_RESOURCES_IO mCom1Resources = { - { { ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR }, 0x3F8, 8 }, - { ACPI_END_TAG_DESCRIPTOR, 0 } +SIO_RESOURCES_IO mCom1Resources = { + { + { ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR }, 0x3F8, 8 + }, + { ACPI_END_TAG_DESCRIPTOR, 0 } }; // // COM 2 UART Controller // GLOBAL_REMOVE_IF_UNREFERENCED -SIO_RESOURCES_IO mCom2Resources = { - { { ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR }, 0x2F8, 8 }, - { ACPI_END_TAG_DESCRIPTOR, 0 } +SIO_RESOURCES_IO mCom2Resources = { + { + { ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR }, 0x2F8, 8 + }, + { ACPI_END_TAG_DESCRIPTOR, 0 } }; // // PS/2 Keyboard Controller // GLOBAL_REMOVE_IF_UNREFERENCED -SIO_RESOURCES_IO mPs2KeyboardDeviceResources = { - { { ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR }, 0x60, 5 }, - { ACPI_END_TAG_DESCRIPTOR, 0 } +SIO_RESOURCES_IO mPs2KeyboardDeviceResources = { + { + { ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR }, 0x60, 5 + }, + { ACPI_END_TAG_DESCRIPTOR, 0 } }; // // Table of SIO Controllers // GLOBAL_REMOVE_IF_UNREFERENCED -SIO_DEVICE_INFO mDevicesInfo[] = { +SIO_DEVICE_INFO mDevicesInfo[] = { { EISA_PNP_ID (0x501), 0, - { (ACPI_SMALL_RESOURCE_HEADER *) &mCom1Resources } + { (ACPI_SMALL_RESOURCE_HEADER *)&mCom1Resources } }, // COM 1 UART Controller { EISA_PNP_ID (0x501), 1, - { (ACPI_SMALL_RESOURCE_HEADER *) &mCom2Resources } + { (ACPI_SMALL_RESOURCE_HEADER *)&mCom2Resources } }, // COM 2 UART Controller { - EISA_PNP_ID(0x303), + EISA_PNP_ID (0x303), 0, - { (ACPI_SMALL_RESOURCE_HEADER *) &mPs2KeyboardDeviceResources } + { (ACPI_SMALL_RESOURCE_HEADER *)&mPs2KeyboardDeviceResources } } // PS/2 Keyboard Controller }; @@ -74,20 +80,19 @@ SIO_DEVICE_INFO mDevicesInfo[] = { // ACPI Device Path Node template // GLOBAL_REMOVE_IF_UNREFERENCED -ACPI_HID_DEVICE_PATH mAcpiDeviceNodeTemplate = { +ACPI_HID_DEVICE_PATH mAcpiDeviceNodeTemplate = { { // Header ACPI_DEVICE_PATH, ACPI_DP, { - (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), - (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) + (UINT8)(sizeof (ACPI_HID_DEVICE_PATH)), + (UINT8)((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) } }, 0x0, // HID 0x0 // UID }; - /** Provides a low level access to the registers for the Super I/O. @@ -124,11 +129,11 @@ ACPI_HID_DEVICE_PATH mAcpiDeviceNodeTemplate = { EFI_STATUS EFIAPI SioRegisterAccess ( - IN CONST EFI_SIO_PROTOCOL *This, - IN BOOLEAN Write, - IN BOOLEAN ExitCfgMode, - IN UINT8 Register, - IN OUT UINT8 *Value + IN CONST EFI_SIO_PROTOCOL *This, + IN BOOLEAN Write, + IN BOOLEAN ExitCfgMode, + IN UINT8 Register, + IN OUT UINT8 *Value ) { return EFI_SUCCESS; @@ -156,11 +161,11 @@ SioRegisterAccess ( EFI_STATUS EFIAPI SioGetResources ( - IN CONST EFI_SIO_PROTOCOL *This, - OUT ACPI_RESOURCE_HEADER_PTR *ResourceList + IN CONST EFI_SIO_PROTOCOL *This, + OUT ACPI_RESOURCE_HEADER_PTR *ResourceList ) { - SIO_DEV *SioDevice; + SIO_DEV *SioDevice; if (ResourceList == NULL) { return EFI_INVALID_PARAMETER; @@ -189,8 +194,8 @@ SioGetResources ( EFI_STATUS EFIAPI SioSetResources ( - IN CONST EFI_SIO_PROTOCOL *This, - IN ACPI_RESOURCE_HEADER_PTR ResourceList + IN CONST EFI_SIO_PROTOCOL *This, + IN ACPI_RESOURCE_HEADER_PTR ResourceList ) { return EFI_SUCCESS; @@ -212,8 +217,8 @@ SioSetResources ( EFI_STATUS EFIAPI SioPossibleResources ( - IN CONST EFI_SIO_PROTOCOL *This, - OUT ACPI_RESOURCE_HEADER_PTR *ResourceCollection + IN CONST EFI_SIO_PROTOCOL *This, + OUT ACPI_RESOURCE_HEADER_PTR *ResourceCollection ) { return EFI_SUCCESS; @@ -247,9 +252,9 @@ SioPossibleResources ( EFI_STATUS EFIAPI SioModify ( - IN CONST EFI_SIO_PROTOCOL *This, - IN CONST EFI_SIO_REGISTER_MODIFY *Command, - IN UINTN NumberOfCommands + IN CONST EFI_SIO_PROTOCOL *This, + IN CONST EFI_SIO_REGISTER_MODIFY *Command, + IN UINTN NumberOfCommands ) { return EFI_SUCCESS; @@ -277,8 +282,8 @@ SioCreateChildDevice ( IN UINT32 DeviceIndex ) { - EFI_STATUS Status; - SIO_DEV *SioDevice; + EFI_STATUS Status; + SIO_DEV *SioDevice; // // Initialize the SIO_DEV structure @@ -288,19 +293,19 @@ SioCreateChildDevice ( return EFI_OUT_OF_RESOURCES; } - SioDevice->Signature = SIO_DEV_SIGNATURE; - SioDevice->Handle = NULL; - SioDevice->PciIo = PciIo; + SioDevice->Signature = SIO_DEV_SIGNATURE; + SioDevice->Handle = NULL; + SioDevice->PciIo = PciIo; // // Construct the child device path // mAcpiDeviceNodeTemplate.HID = mDevicesInfo[DeviceIndex].Hid; mAcpiDeviceNodeTemplate.UID = mDevicesInfo[DeviceIndex].Uid; - SioDevice->DevicePath = AppendDevicePathNode ( - ParentDevicePath, - (EFI_DEVICE_PATH_PROTOCOL *) &mAcpiDeviceNodeTemplate - ); + SioDevice->DevicePath = AppendDevicePathNode ( + ParentDevicePath, + (EFI_DEVICE_PATH_PROTOCOL *)&mAcpiDeviceNodeTemplate + ); if (SioDevice->DevicePath == NULL) { Status = EFI_OUT_OF_RESOURCES; goto Done; @@ -327,7 +332,7 @@ SioCreateChildDevice ( Status = gBS->OpenProtocol ( Controller, &gEfiPciIoProtocolGuid, - (VOID **) &PciIo, + (VOID **)&PciIo, This->DriverBindingHandle, SioDevice->Handle, EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER @@ -375,9 +380,9 @@ SioCreateAllChildDevices ( IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath ) { - UINT32 Index; - UINT32 ChildDeviceNumber; - EFI_STATUS Status; + UINT32 Index; + UINT32 ChildDeviceNumber; + EFI_STATUS Status; ChildDeviceNumber = 0; diff --git a/OvmfPkg/SioBusDxe/SioService.h b/OvmfPkg/SioBusDxe/SioService.h index 0a180caa82..d30caed9f6 100644 --- a/OvmfPkg/SioBusDxe/SioService.h +++ b/OvmfPkg/SioBusDxe/SioService.h @@ -14,8 +14,8 @@ #pragma pack(1) typedef struct { - EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR Io; - EFI_ACPI_END_TAG_DESCRIPTOR End; + EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR Io; + EFI_ACPI_END_TAG_DESCRIPTOR End; } SIO_RESOURCES_IO; #pragma pack() @@ -38,9 +38,8 @@ typedef struct { EFI_SIO_PROTOCOL Sio; UINT32 DeviceIndex; } SIO_DEV; -#define SIO_DEV_SIGNATURE SIGNATURE_32 ('S', 'I', 'O', 'D') -#define SIO_DEV_FROM_SIO(a) CR (a, SIO_DEV, Sio, SIO_DEV_SIGNATURE) - +#define SIO_DEV_SIGNATURE SIGNATURE_32 ('S', 'I', 'O', 'D') +#define SIO_DEV_FROM_SIO(a) CR (a, SIO_DEV, Sio, SIO_DEV_SIGNATURE) // // Super I/O Protocol interfaces @@ -82,11 +81,11 @@ typedef struct { EFI_STATUS EFIAPI SioRegisterAccess ( - IN CONST EFI_SIO_PROTOCOL *This, - IN BOOLEAN Write, - IN BOOLEAN ExitCfgMode, - IN UINT8 Register, - IN OUT UINT8 *Value + IN CONST EFI_SIO_PROTOCOL *This, + IN BOOLEAN Write, + IN BOOLEAN ExitCfgMode, + IN UINT8 Register, + IN OUT UINT8 *Value ); /** @@ -111,8 +110,8 @@ SioRegisterAccess ( EFI_STATUS EFIAPI SioGetResources ( - IN CONST EFI_SIO_PROTOCOL *This, - OUT ACPI_RESOURCE_HEADER_PTR *ResourceList + IN CONST EFI_SIO_PROTOCOL *This, + OUT ACPI_RESOURCE_HEADER_PTR *ResourceList ); /** @@ -130,8 +129,8 @@ SioGetResources ( EFI_STATUS EFIAPI SioSetResources ( - IN CONST EFI_SIO_PROTOCOL *This, - IN ACPI_RESOURCE_HEADER_PTR ResourceList + IN CONST EFI_SIO_PROTOCOL *This, + IN ACPI_RESOURCE_HEADER_PTR ResourceList ); /** @@ -150,8 +149,8 @@ SioSetResources ( EFI_STATUS EFIAPI SioPossibleResources ( - IN CONST EFI_SIO_PROTOCOL *This, - OUT ACPI_RESOURCE_HEADER_PTR *ResourceCollection + IN CONST EFI_SIO_PROTOCOL *This, + OUT ACPI_RESOURCE_HEADER_PTR *ResourceCollection ); /** @@ -182,9 +181,9 @@ SioPossibleResources ( EFI_STATUS EFIAPI SioModify ( - IN CONST EFI_SIO_PROTOCOL *This, - IN CONST EFI_SIO_REGISTER_MODIFY *Command, - IN UINTN NumberOfCommands + IN CONST EFI_SIO_PROTOCOL *This, + IN CONST EFI_SIO_REGISTER_MODIFY *Command, + IN UINTN NumberOfCommands ); // @@ -211,4 +210,4 @@ SioCreateAllChildDevices ( IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath ); -#endif // __SIO_SERVICE_H__ +#endif // __SIO_SERVICE_H__ diff --git a/OvmfPkg/SmbiosPlatformDxe/Qemu.c b/OvmfPkg/SmbiosPlatformDxe/Qemu.c index a668c6ac21..4dae4b0b98 100644 --- a/OvmfPkg/SmbiosPlatformDxe/Qemu.c +++ b/OvmfPkg/SmbiosPlatformDxe/Qemu.c @@ -24,17 +24,20 @@ GetQemuSmbiosTables ( VOID ) { - EFI_STATUS Status; - FIRMWARE_CONFIG_ITEM Tables; - UINTN TablesSize; - UINT8 *QemuTables; + EFI_STATUS Status; + FIRMWARE_CONFIG_ITEM Tables; + UINTN TablesSize; + UINT8 *QemuTables; if (!PcdGetBool (PcdQemuSmbiosValidated)) { return NULL; } - Status = QemuFwCfgFindFile ("etc/smbios/smbios-tables", &Tables, - &TablesSize); + Status = QemuFwCfgFindFile ( + "etc/smbios/smbios-tables", + &Tables, + &TablesSize + ); ASSERT_EFI_ERROR (Status); ASSERT (TablesSize > 0); @@ -62,12 +65,12 @@ GetQemuSmbiosTables ( EFI_STATUS EFIAPI SmbiosTablePublishEntry ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - UINT8 *SmbiosTables; + EFI_STATUS Status; + UINT8 *SmbiosTables; Status = EFI_NOT_FOUND; // diff --git a/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c b/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c index 7bcf83762e..94249d3ff1 100644 --- a/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c +++ b/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c @@ -24,34 +24,34 @@ // #pragma pack(1) typedef struct { - SMBIOS_TABLE_TYPE0 Base; - UINT8 Strings[sizeof(TYPE0_STRINGS)]; + SMBIOS_TABLE_TYPE0 Base; + UINT8 Strings[sizeof (TYPE0_STRINGS)]; } OVMF_TYPE0; #pragma pack() -STATIC CONST OVMF_TYPE0 mOvmfDefaultType0 = { +STATIC CONST OVMF_TYPE0 mOvmfDefaultType0 = { { // SMBIOS_STRUCTURE Hdr { EFI_SMBIOS_TYPE_BIOS_INFORMATION, // UINT8 Type sizeof (SMBIOS_TABLE_TYPE0), // UINT8 Length }, - 1, // SMBIOS_TABLE_STRING Vendor - 2, // SMBIOS_TABLE_STRING BiosVersion - 0xE800,// UINT16 BiosSegment - 3, // SMBIOS_TABLE_STRING BiosReleaseDate - 0, // UINT8 BiosSize + 1, // SMBIOS_TABLE_STRING Vendor + 2, // SMBIOS_TABLE_STRING BiosVersion + 0xE800, // UINT16 BiosSegment + 3, // SMBIOS_TABLE_STRING BiosReleaseDate + 0, // UINT8 BiosSize { // MISC_BIOS_CHARACTERISTICS BiosCharacteristics - 0, // Reserved :2 - 0, // Unknown :1 - 1, // BiosCharacteristicsNotSupported :1 - // Remaining BiosCharacteristics bits left unset :60 + 0, // Reserved :2 + 0, // Unknown :1 + 1, // BiosCharacteristicsNotSupported :1 + // Remaining BiosCharacteristics bits left unset :60 }, { // BIOSCharacteristicsExtensionBytes[2] - 0, // BiosReserved - 0x1C // SystemReserved = VirtualMachineSupported | - // UefiSpecificationSupported | - // TargetContentDistributionEnabled + 0, // BiosReserved + 0x1C // SystemReserved = VirtualMachineSupported | + // UefiSpecificationSupported | + // TargetContentDistributionEnabled }, 0, // UINT8 SystemBiosMajorRelease 0, // UINT8 SystemBiosMinorRelease @@ -62,7 +62,6 @@ STATIC CONST OVMF_TYPE0 mOvmfDefaultType0 = { TYPE0_STRINGS }; - /** Get SMBIOS record length. @@ -71,7 +70,7 @@ STATIC CONST OVMF_TYPE0 mOvmfDefaultType0 = { **/ UINTN SmbiosTableLength ( - IN SMBIOS_STRUCTURE_POINTER SmbiosTable + IN SMBIOS_STRUCTURE_POINTER SmbiosTable ) { CHAR8 *AChar; @@ -83,14 +82,14 @@ SmbiosTableLength ( // Each structure shall be terminated by a double-null (SMBIOS spec.7.1) // while ((*AChar != 0) || (*(AChar + 1) != 0)) { - AChar ++; + AChar++; } + Length = ((UINTN)AChar - (UINTN)SmbiosTable.Raw + 2); return Length; } - /** Install all structures from the given SMBIOS structures block @@ -99,7 +98,7 @@ SmbiosTableLength ( **/ EFI_STATUS InstallAllStructures ( - IN UINT8 *TableAddress + IN UINT8 *TableAddress ) { EFI_SMBIOS_PROTOCOL *Smbios; @@ -114,7 +113,7 @@ InstallAllStructures ( Status = gBS->LocateProtocol ( &gEfiSmbiosProtocolGuid, NULL, - (VOID**)&Smbios + (VOID **)&Smbios ); if (EFI_ERROR (Status)) { return Status; @@ -132,12 +131,12 @@ InstallAllStructures ( // Log the SMBIOS data for this structure // SmbiosHandle = SmbiosTable.Hdr->Handle; - Status = Smbios->Add ( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER*) SmbiosTable.Raw - ); + Status = Smbios->Add ( + Smbios, + NULL, + &SmbiosHandle, + (EFI_SMBIOS_TABLE_HEADER *)SmbiosTable.Raw + ); ASSERT_EFI_ERROR (Status); if (SmbiosTable.Hdr->Type == 0) { @@ -155,12 +154,12 @@ InstallAllStructures ( // Add OVMF default Type 0 (BIOS Information) table // SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED; - Status = Smbios->Add ( - Smbios, - NULL, - &SmbiosHandle, - (EFI_SMBIOS_TABLE_HEADER*) &mOvmfDefaultType0 - ); + Status = Smbios->Add ( + Smbios, + NULL, + &SmbiosHandle, + (EFI_SMBIOS_TABLE_HEADER *)&mOvmfDefaultType0 + ); ASSERT_EFI_ERROR (Status); } diff --git a/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.h b/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.h index 213a7f39e9..74e314a895 100644 --- a/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.h +++ b/OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.h @@ -19,7 +19,7 @@ **/ EFI_STATUS InstallAllStructures ( - IN UINT8 *TableAddress + IN UINT8 *TableAddress ); #endif diff --git a/OvmfPkg/SmbiosPlatformDxe/X86Xen.c b/OvmfPkg/SmbiosPlatformDxe/X86Xen.c index 0acedf8995..d8746b614a 100644 --- a/OvmfPkg/SmbiosPlatformDxe/X86Xen.c +++ b/OvmfPkg/SmbiosPlatformDxe/X86Xen.c @@ -14,8 +14,8 @@ #include "XenSmbiosPlatformDxe.h" -#define XEN_SMBIOS_PHYSICAL_ADDRESS 0x000EB000 -#define XEN_SMBIOS_PHYSICAL_END 0x000F0000 +#define XEN_SMBIOS_PHYSICAL_ADDRESS 0x000EB000 +#define XEN_SMBIOS_PHYSICAL_END 0x000F0000 /** Validates the SMBIOS entry point structure @@ -32,17 +32,17 @@ IsEntryPointStructureValid ( IN SMBIOS_TABLE_ENTRY_POINT *EntryPointStructure ) { - UINTN Index; - UINT8 Length; - UINT8 Checksum; - UINT8 *BytePtr; + UINTN Index; + UINT8 Length; + UINT8 Checksum; + UINT8 *BytePtr; - BytePtr = (UINT8*) EntryPointStructure; - Length = EntryPointStructure->EntryPointLength; + BytePtr = (UINT8 *)EntryPointStructure; + Length = EntryPointStructure->EntryPointLength; Checksum = 0; for (Index = 0; Index < Length; Index++) { - Checksum = Checksum + (UINT8) BytePtr[Index]; + Checksum = Checksum + (UINT8)BytePtr[Index]; } if (Checksum != 0) { @@ -75,18 +75,17 @@ GetXenSmbiosTables ( return NULL; } - for (XenSmbiosPtr = (UINT8*)(UINTN) XEN_SMBIOS_PHYSICAL_ADDRESS; - XenSmbiosPtr < (UINT8*)(UINTN) XEN_SMBIOS_PHYSICAL_END; - XenSmbiosPtr += 0x10) { - - XenSmbiosEntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *) XenSmbiosPtr; - - if (!AsciiStrnCmp ((CHAR8 *) XenSmbiosEntryPointStructure->AnchorString, "_SM_", 4) && - !AsciiStrnCmp ((CHAR8 *) XenSmbiosEntryPointStructure->IntermediateAnchorString, "_DMI_", 5) && - IsEntryPointStructureValid (XenSmbiosEntryPointStructure)) { + for (XenSmbiosPtr = (UINT8 *)(UINTN)XEN_SMBIOS_PHYSICAL_ADDRESS; + XenSmbiosPtr < (UINT8 *)(UINTN)XEN_SMBIOS_PHYSICAL_END; + XenSmbiosPtr += 0x10) + { + XenSmbiosEntryPointStructure = (SMBIOS_TABLE_ENTRY_POINT *)XenSmbiosPtr; + if (!AsciiStrnCmp ((CHAR8 *)XenSmbiosEntryPointStructure->AnchorString, "_SM_", 4) && + !AsciiStrnCmp ((CHAR8 *)XenSmbiosEntryPointStructure->IntermediateAnchorString, "_DMI_", 5) && + IsEntryPointStructureValid (XenSmbiosEntryPointStructure)) + { return XenSmbiosEntryPointStructure; - } } diff --git a/OvmfPkg/SmbiosPlatformDxe/Xen.c b/OvmfPkg/SmbiosPlatformDxe/Xen.c index 75d9550913..34526eacb2 100644 --- a/OvmfPkg/SmbiosPlatformDxe/Xen.c +++ b/OvmfPkg/SmbiosPlatformDxe/Xen.c @@ -25,8 +25,8 @@ EFI_STATUS EFIAPI XenSmbiosTablePublishEntry ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; @@ -39,7 +39,7 @@ XenSmbiosTablePublishEntry ( // EntryPointStructure = GetXenSmbiosTables (); if (EntryPointStructure != NULL) { - SmbiosTables = (UINT8*)(UINTN)EntryPointStructure->TableAddress; + SmbiosTables = (UINT8 *)(UINTN)EntryPointStructure->TableAddress; if (SmbiosTables != NULL) { Status = InstallAllStructures (SmbiosTables); } diff --git a/OvmfPkg/SmmAccess/SmmAccess2Dxe.c b/OvmfPkg/SmmAccess/SmmAccess2Dxe.c index 3691a6cd1f..4b9e6df37f 100644 --- a/OvmfPkg/SmmAccess/SmmAccess2Dxe.c +++ b/OvmfPkg/SmmAccess/SmmAccess2Dxe.c @@ -114,14 +114,18 @@ SmmAccess2DxeGetCapabilities ( IN OUT EFI_SMRAM_DESCRIPTOR *SmramMap ) { - return SmramAccessGetCapabilities (This->LockState, This->OpenState, - SmramMapSize, SmramMap); + return SmramAccessGetCapabilities ( + This->LockState, + This->OpenState, + SmramMapSize, + SmramMap + ); } // // LockState and OpenState will be filled in by the entry point. // -STATIC EFI_SMM_ACCESS2_PROTOCOL mAccess2 = { +STATIC EFI_SMM_ACCESS2_PROTOCOL mAccess2 = { &SmmAccess2DxeOpen, &SmmAccess2DxeClose, &SmmAccess2DxeLock, @@ -134,8 +138,8 @@ STATIC EFI_SMM_ACCESS2_PROTOCOL mAccess2 = { EFI_STATUS EFIAPI SmmAccess2DxeEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { // @@ -152,7 +156,10 @@ SmmAccess2DxeEntryPoint ( // InitQ35SmramAtDefaultSmbase (); - return gBS->InstallMultipleProtocolInterfaces (&ImageHandle, - &gEfiSmmAccess2ProtocolGuid, &mAccess2, - NULL); + return gBS->InstallMultipleProtocolInterfaces ( + &ImageHandle, + &gEfiSmmAccess2ProtocolGuid, + &mAccess2, + NULL + ); } diff --git a/OvmfPkg/SmmAccess/SmmAccessPei.c b/OvmfPkg/SmmAccess/SmmAccessPei.c index ec4e9a2761..4be5f2423e 100644 --- a/OvmfPkg/SmmAccess/SmmAccessPei.c +++ b/OvmfPkg/SmmAccess/SmmAccessPei.c @@ -59,9 +59,9 @@ STATIC EFI_STATUS EFIAPI SmmAccessPeiOpen ( - IN EFI_PEI_SERVICES **PeiServices, - IN PEI_SMM_ACCESS_PPI *This, - IN UINTN DescriptorIndex + IN EFI_PEI_SERVICES **PeiServices, + IN PEI_SMM_ACCESS_PPI *This, + IN UINTN DescriptorIndex ) { if (DescriptorIndex >= DescIdxCount) { @@ -97,9 +97,9 @@ STATIC EFI_STATUS EFIAPI SmmAccessPeiClose ( - IN EFI_PEI_SERVICES **PeiServices, - IN PEI_SMM_ACCESS_PPI *This, - IN UINTN DescriptorIndex + IN EFI_PEI_SERVICES **PeiServices, + IN PEI_SMM_ACCESS_PPI *This, + IN UINTN DescriptorIndex ) { if (DescriptorIndex >= DescIdxCount) { @@ -134,9 +134,9 @@ STATIC EFI_STATUS EFIAPI SmmAccessPeiLock ( - IN EFI_PEI_SERVICES **PeiServices, - IN PEI_SMM_ACCESS_PPI *This, - IN UINTN DescriptorIndex + IN EFI_PEI_SERVICES **PeiServices, + IN PEI_SMM_ACCESS_PPI *This, + IN UINTN DescriptorIndex ) { if (DescriptorIndex >= DescIdxCount) { @@ -171,42 +171,44 @@ STATIC EFI_STATUS EFIAPI SmmAccessPeiGetCapabilities ( - IN EFI_PEI_SERVICES **PeiServices, - IN PEI_SMM_ACCESS_PPI *This, - IN OUT UINTN *SmramMapSize, - IN OUT EFI_SMRAM_DESCRIPTOR *SmramMap + IN EFI_PEI_SERVICES **PeiServices, + IN PEI_SMM_ACCESS_PPI *This, + IN OUT UINTN *SmramMapSize, + IN OUT EFI_SMRAM_DESCRIPTOR *SmramMap ) { - return SmramAccessGetCapabilities (This->LockState, This->OpenState, - SmramMapSize, SmramMap); + return SmramAccessGetCapabilities ( + This->LockState, + This->OpenState, + SmramMapSize, + SmramMap + ); } // // LockState and OpenState will be filled in by the entry point. // -STATIC PEI_SMM_ACCESS_PPI mAccess = { +STATIC PEI_SMM_ACCESS_PPI mAccess = { &SmmAccessPeiOpen, &SmmAccessPeiClose, &SmmAccessPeiLock, &SmmAccessPeiGetCapabilities }; - -STATIC EFI_PEI_PPI_DESCRIPTOR mPpiList[] = { +STATIC EFI_PEI_PPI_DESCRIPTOR mPpiList[] = { { EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, &gPeiSmmAccessPpiGuid, &mAccess } }; - // // Utility functions. // STATIC UINT8 CmosRead8 ( - IN UINT8 Index + IN UINT8 Index ) { IoWrite8 (0x70, Index); @@ -219,8 +221,8 @@ GetSystemMemorySizeBelow4gb ( VOID ) { - UINT32 Cmos0x34; - UINT32 Cmos0x35; + UINT32 Cmos0x34; + UINT32 Cmos0x35; Cmos0x34 = CmosRead8 (0x34); Cmos0x35 = CmosRead8 (0x35); @@ -228,7 +230,6 @@ GetSystemMemorySizeBelow4gb ( return ((Cmos0x35 << 8 | Cmos0x34) << 16) + SIZE_16MB; } - // // Entry point of this driver. // @@ -239,14 +240,14 @@ SmmAccessPeiEntryPoint ( IN CONST EFI_PEI_SERVICES **PeiServices ) { - UINT16 HostBridgeDevId; - UINT8 EsmramcVal; - UINT8 RegMask8; - UINT32 TopOfLowRam, TopOfLowRamMb; - EFI_STATUS Status; - UINTN SmramMapSize; - EFI_SMRAM_DESCRIPTOR SmramMap[DescIdxCount]; - VOID *GuidHob; + UINT16 HostBridgeDevId; + UINT8 EsmramcVal; + UINT8 RegMask8; + UINT32 TopOfLowRam, TopOfLowRamMb; + EFI_STATUS Status; + UINTN SmramMapSize; + EFI_SMRAM_DESCRIPTOR SmramMap[DescIdxCount]; + VOID *GuidHob; // // This module should only be included if SMRAM support is required. @@ -258,9 +259,14 @@ SmmAccessPeiEntryPoint ( // HostBridgeDevId = PciRead16 (OVMF_HOSTBRIDGE_DID); if (HostBridgeDevId != INTEL_Q35_MCH_DEVICE_ID) { - DEBUG ((DEBUG_ERROR, "%a: no SMRAM with host bridge DID=0x%04x; only " - "DID=0x%04x (Q35) is supported\n", __FUNCTION__, HostBridgeDevId, - INTEL_Q35_MCH_DEVICE_ID)); + DEBUG (( + DEBUG_ERROR, + "%a: no SMRAM with host bridge DID=0x%04x; only " + "DID=0x%04x (Q35) is supported\n", + __FUNCTION__, + HostBridgeDevId, + INTEL_Q35_MCH_DEVICE_ID + )); goto WrongConfig; } @@ -272,10 +278,13 @@ SmmAccessPeiEntryPoint ( // bits are hard-coded as 1 by QEMU. // EsmramcVal = PciRead8 (DRAMC_REGISTER_Q35 (MCH_ESMRAMC)); - RegMask8 = MCH_ESMRAMC_SM_CACHE | MCH_ESMRAMC_SM_L1 | MCH_ESMRAMC_SM_L2; + RegMask8 = MCH_ESMRAMC_SM_CACHE | MCH_ESMRAMC_SM_L1 | MCH_ESMRAMC_SM_L2; if ((EsmramcVal & RegMask8) != RegMask8) { - DEBUG ((DEBUG_ERROR, "%a: this Q35 implementation lacks SMRAM\n", - __FUNCTION__)); + DEBUG (( + DEBUG_ERROR, + "%a: this Q35 implementation lacks SMRAM\n", + __FUNCTION__ + )); goto WrongConfig; } @@ -297,24 +306,32 @@ SmmAccessPeiEntryPoint ( // // Set Top of Low Usable DRAM. // - PciWrite16 (DRAMC_REGISTER_Q35 (MCH_TOLUD), - (UINT16)(TopOfLowRamMb << MCH_TOLUD_MB_SHIFT)); + PciWrite16 ( + DRAMC_REGISTER_Q35 (MCH_TOLUD), + (UINT16)(TopOfLowRamMb << MCH_TOLUD_MB_SHIFT) + ); // // Given the zero graphics memory sizes configured above, set the // graphics-related stolen memory bases to the same as TOLUD. // - PciWrite32 (DRAMC_REGISTER_Q35 (MCH_GBSM), - TopOfLowRamMb << MCH_GBSM_MB_SHIFT); - PciWrite32 (DRAMC_REGISTER_Q35 (MCH_BGSM), - TopOfLowRamMb << MCH_BGSM_MB_SHIFT); + PciWrite32 ( + DRAMC_REGISTER_Q35 (MCH_GBSM), + TopOfLowRamMb << MCH_GBSM_MB_SHIFT + ); + PciWrite32 ( + DRAMC_REGISTER_Q35 (MCH_BGSM), + TopOfLowRamMb << MCH_BGSM_MB_SHIFT + ); // // Set TSEG Memory Base. // InitQ35TsegMbytes (); - PciWrite32 (DRAMC_REGISTER_Q35 (MCH_TSEGMB), - (TopOfLowRamMb - mQ35TsegMbytes) << MCH_TSEGMB_MB_SHIFT); + PciWrite32 ( + DRAMC_REGISTER_Q35 (MCH_TSEGMB), + (TopOfLowRamMb - mQ35TsegMbytes) << MCH_TSEGMB_MB_SHIFT + ); // // Set TSEG size, and disable TSEG visibility outside of SMM. Note that the @@ -333,44 +350,71 @@ SmmAccessPeiEntryPoint ( // TSEG should be closed (see above), but unlocked, initially. Set G_SMRAME // (Global SMRAM Enable) too, as both D_LCK and T_EN depend on it. // - PciAndThenOr8 (DRAMC_REGISTER_Q35 (MCH_SMRAM), - (UINT8)((~(UINT32)MCH_SMRAM_D_LCK) & 0xff), MCH_SMRAM_G_SMRAME); + PciAndThenOr8 ( + DRAMC_REGISTER_Q35 (MCH_SMRAM), + (UINT8)((~(UINT32)MCH_SMRAM_D_LCK) & 0xff), + MCH_SMRAM_G_SMRAME + ); // // Create the GUID HOB and point it to the first SMRAM range. // GetStates (&mAccess.LockState, &mAccess.OpenState); SmramMapSize = sizeof SmramMap; - Status = SmramAccessGetCapabilities (mAccess.LockState, mAccess.OpenState, - &SmramMapSize, SmramMap); + Status = SmramAccessGetCapabilities ( + mAccess.LockState, + mAccess.OpenState, + &SmramMapSize, + SmramMap + ); ASSERT_EFI_ERROR (Status); DEBUG_CODE_BEGIN (); { - UINTN Count; - UINTN Idx; + UINTN Count; + UINTN Idx; Count = SmramMapSize / sizeof SmramMap[0]; - DEBUG ((DEBUG_VERBOSE, "%a: SMRAM map follows, %d entries\n", __FUNCTION__, - (INT32)Count)); - DEBUG ((DEBUG_VERBOSE, "% 20a % 20a % 20a % 20a\n", "PhysicalStart(0x)", - "PhysicalSize(0x)", "CpuStart(0x)", "RegionState(0x)")); + DEBUG (( + DEBUG_VERBOSE, + "%a: SMRAM map follows, %d entries\n", + __FUNCTION__, + (INT32)Count + )); + DEBUG (( + DEBUG_VERBOSE, + "% 20a % 20a % 20a % 20a\n", + "PhysicalStart(0x)", + "PhysicalSize(0x)", + "CpuStart(0x)", + "RegionState(0x)" + )); for (Idx = 0; Idx < Count; ++Idx) { - DEBUG ((DEBUG_VERBOSE, "% 20Lx % 20Lx % 20Lx % 20Lx\n", - SmramMap[Idx].PhysicalStart, SmramMap[Idx].PhysicalSize, - SmramMap[Idx].CpuStart, SmramMap[Idx].RegionState)); + DEBUG (( + DEBUG_VERBOSE, + "% 20Lx % 20Lx % 20Lx % 20Lx\n", + SmramMap[Idx].PhysicalStart, + SmramMap[Idx].PhysicalSize, + SmramMap[Idx].CpuStart, + SmramMap[Idx].RegionState + )); } } DEBUG_CODE_END (); - GuidHob = BuildGuidHob (&gEfiAcpiVariableGuid, - sizeof SmramMap[DescIdxSmmS3ResumeState]); + GuidHob = BuildGuidHob ( + &gEfiAcpiVariableGuid, + sizeof SmramMap[DescIdxSmmS3ResumeState] + ); if (GuidHob == NULL) { return EFI_OUT_OF_RESOURCES; } - CopyMem (GuidHob, &SmramMap[DescIdxSmmS3ResumeState], - sizeof SmramMap[DescIdxSmmS3ResumeState]); + CopyMem ( + GuidHob, + &SmramMap[DescIdxSmmS3ResumeState], + sizeof SmramMap[DescIdxSmmS3ResumeState] + ); // // SmramAccessLock() depends on "mQ35SmramAtDefaultSmbase"; init the latter diff --git a/OvmfPkg/SmmAccess/SmramInternal.c b/OvmfPkg/SmmAccess/SmramInternal.c index 0b07dc667b..d391ddc9ae 100644 --- a/OvmfPkg/SmmAccess/SmramInternal.c +++ b/OvmfPkg/SmmAccess/SmramInternal.c @@ -19,13 +19,13 @@ // // The value of PcdQ35TsegMbytes is saved into this variable at module startup. // -UINT16 mQ35TsegMbytes; +UINT16 mQ35TsegMbytes; // // The value of PcdQ35SmramAtDefaultSmbase is saved into this variable at // module startup. // -STATIC BOOLEAN mQ35SmramAtDefaultSmbase; +STATIC BOOLEAN mQ35SmramAtDefaultSmbase; /** Save PcdQ35TsegMbytes into mQ35TsegMbytes. @@ -65,11 +65,11 @@ InitQ35SmramAtDefaultSmbase ( **/ VOID GetStates ( - OUT BOOLEAN *LockState, - OUT BOOLEAN *OpenState -) + OUT BOOLEAN *LockState, + OUT BOOLEAN *OpenState + ) { - UINT8 SmramVal, EsmramcVal; + UINT8 SmramVal, EsmramcVal; SmramVal = PciRead8 (DRAMC_REGISTER_Q35 (MCH_SMRAM)); EsmramcVal = PciRead8 (DRAMC_REGISTER_Q35 (MCH_ESMRAMC)); @@ -91,27 +91,30 @@ GetStates ( EFI_STATUS SmramAccessOpen ( - OUT BOOLEAN *LockState, - OUT BOOLEAN *OpenState + OUT BOOLEAN *LockState, + OUT BOOLEAN *OpenState ) { // // Open TSEG by clearing T_EN. // - PciAnd8 (DRAMC_REGISTER_Q35 (MCH_ESMRAMC), - (UINT8)((~(UINT32)MCH_ESMRAMC_T_EN) & 0xff)); + PciAnd8 ( + DRAMC_REGISTER_Q35 (MCH_ESMRAMC), + (UINT8)((~(UINT32)MCH_ESMRAMC_T_EN) & 0xff) + ); GetStates (LockState, OpenState); if (!*OpenState) { return EFI_DEVICE_ERROR; } + return EFI_SUCCESS; } EFI_STATUS SmramAccessClose ( - OUT BOOLEAN *LockState, - OUT BOOLEAN *OpenState + OUT BOOLEAN *LockState, + OUT BOOLEAN *OpenState ) { // @@ -123,13 +126,14 @@ SmramAccessClose ( if (*OpenState) { return EFI_DEVICE_ERROR; } + return EFI_SUCCESS; } EFI_STATUS SmramAccessLock ( - OUT BOOLEAN *LockState, - IN OUT BOOLEAN *OpenState + OUT BOOLEAN *LockState, + IN OUT BOOLEAN *OpenState ) { if (*OpenState) { @@ -140,35 +144,38 @@ SmramAccessLock ( // Close & lock TSEG by setting T_EN and D_LCK. // PciOr8 (DRAMC_REGISTER_Q35 (MCH_ESMRAMC), MCH_ESMRAMC_T_EN); - PciOr8 (DRAMC_REGISTER_Q35 (MCH_SMRAM), MCH_SMRAM_D_LCK); + PciOr8 (DRAMC_REGISTER_Q35 (MCH_SMRAM), MCH_SMRAM_D_LCK); // // Close & lock the SMRAM at the default SMBASE, if it exists. // if (mQ35SmramAtDefaultSmbase) { - PciWrite8 (DRAMC_REGISTER_Q35 (MCH_DEFAULT_SMBASE_CTL), - MCH_DEFAULT_SMBASE_LCK); + PciWrite8 ( + DRAMC_REGISTER_Q35 (MCH_DEFAULT_SMBASE_CTL), + MCH_DEFAULT_SMBASE_LCK + ); } GetStates (LockState, OpenState); if (*OpenState || !*LockState) { return EFI_DEVICE_ERROR; } + return EFI_SUCCESS; } EFI_STATUS SmramAccessGetCapabilities ( - IN BOOLEAN LockState, - IN BOOLEAN OpenState, - IN OUT UINTN *SmramMapSize, - IN OUT EFI_SMRAM_DESCRIPTOR *SmramMap + IN BOOLEAN LockState, + IN BOOLEAN OpenState, + IN OUT UINTN *SmramMapSize, + IN OUT EFI_SMRAM_DESCRIPTOR *SmramMap ) { - UINTN OriginalSize; - UINT32 TsegMemoryBaseMb, TsegMemoryBase; - UINT64 CommonRegionState; - UINT8 TsegSizeBits; + UINTN OriginalSize; + UINT32 TsegMemoryBaseMb, TsegMemoryBase; + UINT64 CommonRegionState; + UINT8 TsegSizeBits; OriginalSize = *SmramMapSize; *SmramMapSize = DescIdxCount * sizeof *SmramMap; @@ -180,7 +187,7 @@ SmramAccessGetCapabilities ( // Read the TSEG Memory Base register. // TsegMemoryBaseMb = PciRead32 (DRAMC_REGISTER_Q35 (MCH_TSEGMB)); - TsegMemoryBase = (TsegMemoryBaseMb >> MCH_TSEGMB_MB_SHIFT) << 20; + TsegMemoryBase = (TsegMemoryBaseMb >> MCH_TSEGMB_MB_SHIFT) << 20; // // Precompute the region state bits that will be set for all regions. @@ -198,7 +205,7 @@ SmramAccessGetCapabilities ( SmramMap[DescIdxSmmS3ResumeState].CpuStart = TsegMemoryBase; SmramMap[DescIdxSmmS3ResumeState].PhysicalSize = EFI_PAGES_TO_SIZE (EFI_SIZE_TO_PAGES (sizeof (SMM_S3_RESUME_STATE))); - SmramMap[DescIdxSmmS3ResumeState].RegionState = + SmramMap[DescIdxSmmS3ResumeState].RegionState = CommonRegionState | EFI_ALLOCATED; // @@ -213,7 +220,7 @@ SmramAccessGetCapabilities ( SmramMap[DescIdxMain].PhysicalStart = SmramMap[DescIdxSmmS3ResumeState].PhysicalStart + SmramMap[DescIdxSmmS3ResumeState].PhysicalSize; - SmramMap[DescIdxMain].CpuStart = SmramMap[DescIdxMain].PhysicalStart; + SmramMap[DescIdxMain].CpuStart = SmramMap[DescIdxMain].PhysicalStart; SmramMap[DescIdxMain].PhysicalSize = (TsegSizeBits == MCH_ESMRAMC_TSEG_8MB ? SIZE_8MB : TsegSizeBits == MCH_ESMRAMC_TSEG_2MB ? SIZE_2MB : diff --git a/OvmfPkg/SmmAccess/SmramInternal.h b/OvmfPkg/SmmAccess/SmramInternal.h index a4d8827adf..da5b7bbca1 100644 --- a/OvmfPkg/SmmAccess/SmramInternal.h +++ b/OvmfPkg/SmmAccess/SmramInternal.h @@ -28,7 +28,7 @@ typedef enum { // // The value of PcdQ35TsegMbytes is saved into this variable at module startup. // -extern UINT16 mQ35TsegMbytes; +extern UINT16 mQ35TsegMbytes; /** Save PcdQ35TsegMbytes into mQ35TsegMbytes. @@ -62,8 +62,8 @@ InitQ35SmramAtDefaultSmbase ( **/ VOID GetStates ( - OUT BOOLEAN *LockState, - OUT BOOLEAN *OpenState + OUT BOOLEAN *LockState, + OUT BOOLEAN *OpenState ); // @@ -79,26 +79,26 @@ GetStates ( EFI_STATUS SmramAccessOpen ( - OUT BOOLEAN *LockState, - OUT BOOLEAN *OpenState + OUT BOOLEAN *LockState, + OUT BOOLEAN *OpenState ); EFI_STATUS SmramAccessClose ( - OUT BOOLEAN *LockState, - OUT BOOLEAN *OpenState + OUT BOOLEAN *LockState, + OUT BOOLEAN *OpenState ); EFI_STATUS SmramAccessLock ( - OUT BOOLEAN *LockState, - IN OUT BOOLEAN *OpenState + OUT BOOLEAN *LockState, + IN OUT BOOLEAN *OpenState ); EFI_STATUS SmramAccessGetCapabilities ( - IN BOOLEAN LockState, - IN BOOLEAN OpenState, - IN OUT UINTN *SmramMapSize, - IN OUT EFI_SMRAM_DESCRIPTOR *SmramMap + IN BOOLEAN LockState, + IN BOOLEAN OpenState, + IN OUT UINTN *SmramMapSize, + IN OUT EFI_SMRAM_DESCRIPTOR *SmramMap ); diff --git a/OvmfPkg/SmmControl2Dxe/SmiFeatures.c b/OvmfPkg/SmmControl2Dxe/SmiFeatures.c index e7e74a80e1..daeb7195ae 100644 --- a/OvmfPkg/SmmControl2Dxe/SmiFeatures.c +++ b/OvmfPkg/SmmControl2Dxe/SmiFeatures.c @@ -21,19 +21,19 @@ // The following bit value stands for "broadcast SMI" in the // "etc/smi/supported-features" and "etc/smi/requested-features" fw_cfg files. // -#define ICH9_LPC_SMI_F_BROADCAST BIT0 +#define ICH9_LPC_SMI_F_BROADCAST BIT0 // // The following bit value stands for "enable CPU hotplug, and inject an SMI // with control value ICH9_APM_CNT_CPU_HOTPLUG upon hotplug", in the // "etc/smi/supported-features" and "etc/smi/requested-features" fw_cfg files. // -#define ICH9_LPC_SMI_F_CPU_HOTPLUG BIT1 +#define ICH9_LPC_SMI_F_CPU_HOTPLUG BIT1 // // The following bit value stands for "enable CPU hot-unplug, and inject an SMI // with control value ICH9_APM_CNT_CPU_HOTPLUG upon hot-unplug", in the // "etc/smi/supported-features" and "etc/smi/requested-features" fw_cfg files. // -#define ICH9_LPC_SMI_F_CPU_HOT_UNPLUG BIT2 +#define ICH9_LPC_SMI_F_CPU_HOT_UNPLUG BIT2 // // Provides a scratch buffer (allocated in EfiReservedMemoryType type memory) @@ -41,8 +41,8 @@ // #pragma pack (1) typedef union { - UINT64 Features; - UINT8 FeaturesOk; + UINT64 Features; + UINT8 FeaturesOk; } SCRATCH_BUFFER; #pragma pack () @@ -51,14 +51,14 @@ typedef union { // "etc/smi/features-ok" fw_cfg files from NegotiateSmiFeatures() to // AppendFwCfgBootScript(). // -STATIC FIRMWARE_CONFIG_ITEM mRequestedFeaturesItem; -STATIC FIRMWARE_CONFIG_ITEM mFeaturesOkItem; +STATIC FIRMWARE_CONFIG_ITEM mRequestedFeaturesItem; +STATIC FIRMWARE_CONFIG_ITEM mFeaturesOkItem; // // Carries the negotiated SMI features from NegotiateSmiFeatures() to // AppendFwCfgBootScript(). // -STATIC UINT64 mSmiFeatures; +STATIC UINT64 mSmiFeatures; /** Negotiate SMI features with QEMU. @@ -76,11 +76,11 @@ NegotiateSmiFeatures ( VOID ) { - FIRMWARE_CONFIG_ITEM SupportedFeaturesItem; - UINTN SupportedFeaturesSize; - UINTN RequestedFeaturesSize; - UINTN FeaturesOkSize; - UINT64 RequestedFeaturesMask; + FIRMWARE_CONFIG_ITEM SupportedFeaturesItem; + UINTN SupportedFeaturesSize; + UINTN RequestedFeaturesSize; + UINTN FeaturesOkSize; + UINT64 RequestedFeaturesMask; // // Look up the fw_cfg files used for feature negotiation. The selector keys @@ -88,14 +88,33 @@ NegotiateSmiFeatures ( // statically. If the files are missing, then QEMU doesn't support SMI // feature negotiation. // - if (RETURN_ERROR (QemuFwCfgFindFile ("etc/smi/supported-features", - &SupportedFeaturesItem, &SupportedFeaturesSize)) || - RETURN_ERROR (QemuFwCfgFindFile ("etc/smi/requested-features", - &mRequestedFeaturesItem, &RequestedFeaturesSize)) || - RETURN_ERROR (QemuFwCfgFindFile ("etc/smi/features-ok", - &mFeaturesOkItem, &FeaturesOkSize))) { - DEBUG ((DEBUG_INFO, "%a: SMI feature negotiation unavailable\n", - __FUNCTION__)); + if (RETURN_ERROR ( + QemuFwCfgFindFile ( + "etc/smi/supported-features", + &SupportedFeaturesItem, + &SupportedFeaturesSize + ) + ) || + RETURN_ERROR ( + QemuFwCfgFindFile ( + "etc/smi/requested-features", + &mRequestedFeaturesItem, + &RequestedFeaturesSize + ) + ) || + RETURN_ERROR ( + QemuFwCfgFindFile ( + "etc/smi/features-ok", + &mFeaturesOkItem, + &FeaturesOkSize + ) + )) + { + DEBUG (( + DEBUG_INFO, + "%a: SMI feature negotiation unavailable\n", + __FUNCTION__ + )); return FALSE; } @@ -103,11 +122,15 @@ NegotiateSmiFeatures ( // If the files are present but their sizes disagree with us, that's a fatal // error (we can't trust the behavior of SMIs either way). // - if (SupportedFeaturesSize != sizeof mSmiFeatures || - RequestedFeaturesSize != sizeof mSmiFeatures || - FeaturesOkSize != sizeof (UINT8)) { - DEBUG ((DEBUG_ERROR, "%a: size mismatch in feature negotiation\n", - __FUNCTION__)); + if ((SupportedFeaturesSize != sizeof mSmiFeatures) || + (RequestedFeaturesSize != sizeof mSmiFeatures) || + (FeaturesOkSize != sizeof (UINT8))) + { + DEBUG (( + DEBUG_ERROR, + "%a: size mismatch in feature negotiation\n", + __FUNCTION__ + )); goto FatalError; } @@ -129,6 +152,7 @@ NegotiateSmiFeatures ( RequestedFeaturesMask |= ICH9_LPC_SMI_F_CPU_HOTPLUG; RequestedFeaturesMask |= ICH9_LPC_SMI_F_CPU_HOT_UNPLUG; } + mSmiFeatures &= RequestedFeaturesMask; QemuFwCfgSelectItem (mRequestedFeaturesItem); QemuFwCfgWriteBytes (sizeof mSmiFeatures, &mSmiFeatures); @@ -141,8 +165,12 @@ NegotiateSmiFeatures ( // QemuFwCfgSelectItem (mFeaturesOkItem); if (QemuFwCfgRead8 () != 1) { - DEBUG ((DEBUG_ERROR, "%a: negotiation failed for feature bitmap 0x%Lx\n", - __FUNCTION__, mSmiFeatures)); + DEBUG (( + DEBUG_ERROR, + "%a: negotiation failed for feature bitmap 0x%Lx\n", + __FUNCTION__, + mSmiFeatures + )); goto FatalError; } @@ -159,26 +187,37 @@ NegotiateSmiFeatures ( // the original QEMU behavior (i.e., unicast SMI) used to differ. // if (RETURN_ERROR (PcdSet64S (PcdCpuSmmApSyncTimeout, 1000000)) || - RETURN_ERROR (PcdSet8S (PcdCpuSmmSyncMode, 0x00))) { - DEBUG ((DEBUG_ERROR, "%a: PiSmmCpuDxeSmm PCD configuration failed\n", - __FUNCTION__)); + RETURN_ERROR (PcdSet8S (PcdCpuSmmSyncMode, 0x00))) + { + DEBUG (( + DEBUG_ERROR, + "%a: PiSmmCpuDxeSmm PCD configuration failed\n", + __FUNCTION__ + )); goto FatalError; } + DEBUG ((DEBUG_INFO, "%a: using SMI broadcast\n", __FUNCTION__)); } if ((mSmiFeatures & ICH9_LPC_SMI_F_CPU_HOTPLUG) == 0) { DEBUG ((DEBUG_INFO, "%a: CPU hotplug not negotiated\n", __FUNCTION__)); } else { - DEBUG ((DEBUG_INFO, "%a: CPU hotplug with SMI negotiated\n", - __FUNCTION__)); + DEBUG (( + DEBUG_INFO, + "%a: CPU hotplug with SMI negotiated\n", + __FUNCTION__ + )); } if ((mSmiFeatures & ICH9_LPC_SMI_F_CPU_HOT_UNPLUG) == 0) { DEBUG ((DEBUG_INFO, "%a: CPU hot-unplug not negotiated\n", __FUNCTION__)); } else { - DEBUG ((DEBUG_INFO, "%a: CPU hot-unplug with SMI negotiated\n", - __FUNCTION__)); + DEBUG (( + DEBUG_INFO, + "%a: CPU hot-unplug with SMI negotiated\n", + __FUNCTION__ + )); } // @@ -203,12 +242,12 @@ STATIC VOID EFIAPI AppendFwCfgBootScript ( - IN OUT VOID *Context OPTIONAL, - IN OUT VOID *ExternalScratchBuffer + IN OUT VOID *Context OPTIONAL, + IN OUT VOID *ExternalScratchBuffer ) { - SCRATCH_BUFFER *ScratchBuffer; - RETURN_STATUS Status; + SCRATCH_BUFFER *ScratchBuffer; + RETURN_STATUS Status; ScratchBuffer = ExternalScratchBuffer; @@ -216,8 +255,10 @@ AppendFwCfgBootScript ( // Write the negotiated feature bitmap into "etc/smi/requested-features". // ScratchBuffer->Features = mSmiFeatures; - Status = QemuFwCfgS3ScriptWriteBytes (mRequestedFeaturesItem, - sizeof ScratchBuffer->Features); + Status = QemuFwCfgS3ScriptWriteBytes ( + mRequestedFeaturesItem, + sizeof ScratchBuffer->Features + ); if (RETURN_ERROR (Status)) { goto FatalError; } @@ -226,8 +267,10 @@ AppendFwCfgBootScript ( // Read back "etc/smi/features-ok". This invokes the feature validation & // lockdown. (The validation succeeded at first boot.) // - Status = QemuFwCfgS3ScriptReadBytes (mFeaturesOkItem, - sizeof ScratchBuffer->FeaturesOk); + Status = QemuFwCfgS3ScriptReadBytes ( + mFeaturesOkItem, + sizeof ScratchBuffer->FeaturesOk + ); if (RETURN_ERROR (Status)) { goto FatalError; } @@ -236,14 +279,21 @@ AppendFwCfgBootScript ( // If "etc/smi/features-ok" read as 1, we're good. Otherwise, hang the S3 // resume process. // - Status = QemuFwCfgS3ScriptCheckValue (&ScratchBuffer->FeaturesOk, - sizeof ScratchBuffer->FeaturesOk, MAX_UINT8, 1); + Status = QemuFwCfgS3ScriptCheckValue ( + &ScratchBuffer->FeaturesOk, + sizeof ScratchBuffer->FeaturesOk, + MAX_UINT8, + 1 + ); if (RETURN_ERROR (Status)) { goto FatalError; } - DEBUG ((DEBUG_VERBOSE, "%a: SMI feature negotiation boot script saved\n", - __FUNCTION__)); + DEBUG (( + DEBUG_VERBOSE, + "%a: SMI feature negotiation boot script saved\n", + __FUNCTION__ + )); return; FatalError: @@ -251,7 +301,6 @@ FatalError: CpuDeadLoop (); } - /** Append a boot script fragment that will re-select the previously negotiated SMI features during S3 resume. @@ -261,15 +310,18 @@ SaveSmiFeatures ( VOID ) { - RETURN_STATUS Status; + RETURN_STATUS Status; // // We are already running at TPL_CALLBACK, on the stack of // OnS3SaveStateInstalled(). But that's okay, we can easily queue more // notification functions while executing a notification function. // - Status = QemuFwCfgS3CallWhenBootScriptReady (AppendFwCfgBootScript, NULL, - sizeof (SCRATCH_BUFFER)); + Status = QemuFwCfgS3CallWhenBootScriptReady ( + AppendFwCfgBootScript, + NULL, + sizeof (SCRATCH_BUFFER) + ); if (RETURN_ERROR (Status)) { ASSERT (FALSE); CpuDeadLoop (); diff --git a/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c index be04baf7b2..edbf8ac431 100644 --- a/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c +++ b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c @@ -38,8 +38,8 @@ STATIC VOID EFIAPI OnS3SaveStateInstalled ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ); // @@ -48,19 +48,19 @@ OnS3SaveStateInstalled ( // S3SaveState protocol installation callback, strictly before the runtime // phase. // -STATIC UINTN mSmiEnable; +STATIC UINTN mSmiEnable; // // Captures whether SMI feature negotiation is supported. The variable is only // used to carry this information from the entry point function to the // S3SaveState protocol installation callback. // -STATIC BOOLEAN mSmiFeatureNegotiation; +STATIC BOOLEAN mSmiFeatureNegotiation; // // Event signaled when an S3SaveState protocol interface is installed. // -STATIC EFI_EVENT mS3SaveStateInstalled; +STATIC EFI_EVENT mS3SaveStateInstalled; /** Invokes SMI activation from either the preboot or runtime environment. @@ -97,7 +97,7 @@ SmmControl2DxeTrigger ( // // No support for queued or periodic activation. // - if (Periodic || ActivationInterval > 0) { + if (Periodic || (ActivationInterval > 0)) { return EFI_DEVICE_ERROR; } @@ -161,7 +161,7 @@ SmmControl2DxeClear ( return EFI_SUCCESS; } -STATIC EFI_SMM_CONTROL2_PROTOCOL mControl2 = { +STATIC EFI_SMM_CONTROL2_PROTOCOL mControl2 = { &SmmControl2DxeTrigger, &SmmControl2DxeClear, MAX_UINTN // MinimumTriggerPeriod -- we don't support periodic SMIs @@ -173,13 +173,13 @@ STATIC EFI_SMM_CONTROL2_PROTOCOL mControl2 = { EFI_STATUS EFIAPI SmmControl2DxeEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - UINT32 PmBase; - UINT32 SmiEnableVal; - EFI_STATUS Status; + UINT32 PmBase; + UINT32 SmiEnableVal; + EFI_STATUS Status; // // This module should only be included if SMRAM support is required. @@ -192,7 +192,7 @@ SmmControl2DxeEntryPoint ( // ACPI PM IO space.) // PmBase = PciRead32 (POWER_MGMT_REGISTER_Q35 (ICH9_PMBASE)) & - ICH9_PMBASE_MASK; + ICH9_PMBASE_MASK; mSmiEnable = PmBase + ICH9_PMBASE_OFS_SMI_EN; // @@ -202,8 +202,11 @@ SmmControl2DxeEntryPoint ( // SmiEnableVal = IoRead32 (mSmiEnable); if ((SmiEnableVal & ICH9_SMI_EN_APMC_EN) != 0) { - DEBUG ((DEBUG_ERROR, "%a: this Q35 implementation lacks SMI\n", - __FUNCTION__)); + DEBUG (( + DEBUG_ERROR, + "%a: this Q35 implementation lacks SMI\n", + __FUNCTION__ + )); goto FatalError; } @@ -217,8 +220,10 @@ SmmControl2DxeEntryPoint ( // // Prevent software from undoing the above (until platform reset). // - PciOr16 (POWER_MGMT_REGISTER_Q35 (ICH9_GEN_PMCON_1), - ICH9_GEN_PMCON_1_SMI_LOCK); + PciOr16 ( + POWER_MGMT_REGISTER_Q35 (ICH9_GEN_PMCON_1), + ICH9_GEN_PMCON_1_SMI_LOCK + ); // // If we can clear GBL_SMI_EN now, that means QEMU's SMI support is not @@ -226,8 +231,11 @@ SmmControl2DxeEntryPoint ( // IoWrite32 (mSmiEnable, SmiEnableVal & ~(UINT32)ICH9_SMI_EN_GBL_SMI_EN); if (IoRead32 (mSmiEnable) != SmiEnableVal) { - DEBUG ((DEBUG_ERROR, "%a: failed to lock down GBL_SMI_EN\n", - __FUNCTION__)); + DEBUG (( + DEBUG_ERROR, + "%a: failed to lock down GBL_SMI_EN\n", + __FUNCTION__ + )); goto FatalError; } @@ -237,26 +245,37 @@ SmmControl2DxeEntryPoint ( mSmiFeatureNegotiation = NegotiateSmiFeatures (); if (PcdGetBool (PcdAcpiS3Enable)) { - VOID *Registration; + VOID *Registration; // // On S3 resume the above register settings have to be repeated. Register a // protocol notify callback that, when boot script saving becomes // available, saves operations equivalent to the above to the boot script. // - Status = gBS->CreateEvent (EVT_NOTIFY_SIGNAL, TPL_CALLBACK, - OnS3SaveStateInstalled, NULL /* Context */, - &mS3SaveStateInstalled); + Status = gBS->CreateEvent ( + EVT_NOTIFY_SIGNAL, + TPL_CALLBACK, + OnS3SaveStateInstalled, + NULL /* Context */, + &mS3SaveStateInstalled + ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "%a: CreateEvent: %r\n", __FUNCTION__, Status)); goto FatalError; } - Status = gBS->RegisterProtocolNotify (&gEfiS3SaveStateProtocolGuid, - mS3SaveStateInstalled, &Registration); + Status = gBS->RegisterProtocolNotify ( + &gEfiS3SaveStateProtocolGuid, + mS3SaveStateInstalled, + &Registration + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: RegisterProtocolNotify: %r\n", __FUNCTION__, - Status)); + DEBUG (( + DEBUG_ERROR, + "%a: RegisterProtocolNotify: %r\n", + __FUNCTION__, + Status + )); goto ReleaseEvent; } @@ -274,12 +293,19 @@ SmmControl2DxeEntryPoint ( // We have no pointers to convert to virtual addresses. The handle itself // doesn't matter, as protocol services are not accessible at runtime. // - Status = gBS->InstallMultipleProtocolInterfaces (&ImageHandle, - &gEfiSmmControl2ProtocolGuid, &mControl2, - NULL); + Status = gBS->InstallMultipleProtocolInterfaces ( + &ImageHandle, + &gEfiSmmControl2ProtocolGuid, + &mControl2, + NULL + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: InstallMultipleProtocolInterfaces: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: InstallMultipleProtocolInterfaces: %r\n", + __FUNCTION__, + Status + )); goto ReleaseEvent; } @@ -311,20 +337,23 @@ STATIC VOID EFIAPI OnS3SaveStateInstalled ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - EFI_STATUS Status; - EFI_S3_SAVE_STATE_PROTOCOL *S3SaveState; - UINT32 SmiEnOrMask, SmiEnAndMask; - UINT64 GenPmCon1Address; - UINT16 GenPmCon1OrMask, GenPmCon1AndMask; + EFI_STATUS Status; + EFI_S3_SAVE_STATE_PROTOCOL *S3SaveState; + UINT32 SmiEnOrMask, SmiEnAndMask; + UINT64 GenPmCon1Address; + UINT16 GenPmCon1OrMask, GenPmCon1AndMask; ASSERT (Event == mS3SaveStateInstalled); - Status = gBS->LocateProtocol (&gEfiS3SaveStateProtocolGuid, - NULL /* Registration */, (VOID **)&S3SaveState); + Status = gBS->LocateProtocol ( + &gEfiS3SaveStateProtocolGuid, + NULL /* Registration */, + (VOID **)&S3SaveState + ); if (EFI_ERROR (Status)) { return; } @@ -335,37 +364,45 @@ OnS3SaveStateInstalled ( // SmiEnOrMask = ICH9_SMI_EN_APMC_EN | ICH9_SMI_EN_GBL_SMI_EN; SmiEnAndMask = MAX_UINT32; - Status = S3SaveState->Write ( - S3SaveState, - EFI_BOOT_SCRIPT_IO_READ_WRITE_OPCODE, - EfiBootScriptWidthUint32, - (UINT64)mSmiEnable, - &SmiEnOrMask, - &SmiEnAndMask - ); + Status = S3SaveState->Write ( + S3SaveState, + EFI_BOOT_SCRIPT_IO_READ_WRITE_OPCODE, + EfiBootScriptWidthUint32, + (UINT64)mSmiEnable, + &SmiEnOrMask, + &SmiEnAndMask + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: EFI_BOOT_SCRIPT_IO_READ_WRITE_OPCODE: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: EFI_BOOT_SCRIPT_IO_READ_WRITE_OPCODE: %r\n", + __FUNCTION__, + Status + )); ASSERT (FALSE); CpuDeadLoop (); } GenPmCon1Address = POWER_MGMT_REGISTER_Q35_EFI_PCI_ADDRESS ( - ICH9_GEN_PMCON_1); + ICH9_GEN_PMCON_1 + ); GenPmCon1OrMask = ICH9_GEN_PMCON_1_SMI_LOCK; GenPmCon1AndMask = MAX_UINT16; - Status = S3SaveState->Write ( - S3SaveState, - EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE_OPCODE, - EfiBootScriptWidthUint16, - GenPmCon1Address, - &GenPmCon1OrMask, - &GenPmCon1AndMask - ); + Status = S3SaveState->Write ( + S3SaveState, + EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE_OPCODE, + EfiBootScriptWidthUint16, + GenPmCon1Address, + &GenPmCon1OrMask, + &GenPmCon1AndMask + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, - "%a: EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE_OPCODE: %r\n", __FUNCTION__, - Status)); + DEBUG (( + DEBUG_ERROR, + "%a: EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE_OPCODE: %r\n", + __FUNCTION__, + Status + )); ASSERT (FALSE); CpuDeadLoop (); } diff --git a/OvmfPkg/Tcg/Tcg2Config/Tcg2ConfigPeim.c b/OvmfPkg/Tcg/Tcg2Config/Tcg2ConfigPeim.c index b3b9035eea..96771b1935 100644 --- a/OvmfPkg/Tcg/Tcg2Config/Tcg2ConfigPeim.c +++ b/OvmfPkg/Tcg/Tcg2Config/Tcg2ConfigPeim.c @@ -11,7 +11,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ - #include #include @@ -22,7 +21,7 @@ #include "Tpm12Support.h" -STATIC CONST EFI_PEI_PPI_DESCRIPTOR mTpmSelectedPpi = { +STATIC CONST EFI_PEI_PPI_DESCRIPTOR mTpmSelectedPpi = { (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), &gEfiTpmDeviceSelectedGuid, NULL @@ -47,15 +46,15 @@ Tcg2ConfigPeimEntryPoint ( IN CONST EFI_PEI_SERVICES **PeiServices ) { - UINTN Size; - EFI_STATUS Status; + UINTN Size; + EFI_STATUS Status; DEBUG ((DEBUG_INFO, "%a\n", __FUNCTION__)); Status = InternalTpm12Detect (); if (!EFI_ERROR (Status)) { DEBUG ((DEBUG_INFO, "%a: TPM1.2 detected\n", __FUNCTION__)); - Size = sizeof (gEfiTpmDeviceInstanceTpm12Guid); + Size = sizeof (gEfiTpmDeviceInstanceTpm12Guid); Status = PcdSetPtrS ( PcdTpmInstanceGuid, &Size, @@ -66,7 +65,7 @@ Tcg2ConfigPeimEntryPoint ( Status = Tpm2RequestUseTpm (); if (!EFI_ERROR (Status)) { DEBUG ((DEBUG_INFO, "%a: TPM2 detected\n", __FUNCTION__)); - Size = sizeof (gEfiTpmDeviceInstanceTpm20DtpmGuid); + Size = sizeof (gEfiTpmDeviceInstanceTpm20DtpmGuid); Status = PcdSetPtrS ( PcdTpmInstanceGuid, &Size, diff --git a/OvmfPkg/Tcg/Tcg2Config/Tpm12Support.c b/OvmfPkg/Tcg/Tcg2Config/Tpm12Support.c index 4f5a775c7a..c88da5758b 100644 --- a/OvmfPkg/Tcg/Tcg2Config/Tpm12Support.c +++ b/OvmfPkg/Tcg/Tcg2Config/Tpm12Support.c @@ -14,8 +14,8 @@ #pragma pack (1) typedef struct { - TPM_RSP_COMMAND_HDR Hdr; - TPM_CURRENT_TICKS CurrentTicks; + TPM_RSP_COMMAND_HDR Hdr; + TPM_CURRENT_TICKS CurrentTicks; } TPM_RSP_GET_TICKS; #pragma pack () @@ -44,8 +44,12 @@ TestTpm12 ( Command.ordinal = SwapBytes32 (TPM_ORD_GetTicks); Length = sizeof (Response); - Status = Tpm12SubmitCommand (sizeof (Command), (UINT8 *)&Command, &Length, - (UINT8 *)&Response); + Status = Tpm12SubmitCommand ( + sizeof (Command), + (UINT8 *)&Command, + &Length, + (UINT8 *)&Response + ); if (EFI_ERROR (Status)) { return Status; } @@ -68,7 +72,7 @@ InternalTpm12Detect ( VOID ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = Tpm12RequestUseTpm (); if (EFI_ERROR (Status)) { diff --git a/OvmfPkg/Tcg/TpmMmioSevDecryptPei/TpmMmioSevDecryptPeim.c b/OvmfPkg/Tcg/TpmMmioSevDecryptPei/TpmMmioSevDecryptPeim.c index 570c8467a6..88bb9e8e04 100644 --- a/OvmfPkg/Tcg/TpmMmioSevDecryptPei/TpmMmioSevDecryptPeim.c +++ b/OvmfPkg/Tcg/TpmMmioSevDecryptPei/TpmMmioSevDecryptPeim.c @@ -7,7 +7,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ - #include #include @@ -36,8 +35,8 @@ TpmMmioSevDecryptPeimEntryPoint ( IN CONST EFI_PEI_SERVICES **PeiServices ) { - RETURN_STATUS DecryptStatus; - EFI_STATUS Status; + RETURN_STATUS DecryptStatus; + EFI_STATUS Status; DEBUG ((DEBUG_INFO, "%a\n", __FUNCTION__)); @@ -58,20 +57,24 @@ TpmMmioSevDecryptPeimEntryPoint ( // termination in this scenario, mark the range unencrypted ahead of access. // if (MemEncryptSevEsIsEnabled ()) { - DEBUG ((DEBUG_INFO, + DEBUG (( + DEBUG_INFO, "%a: mapping TPM MMIO address range unencrypted\n", - __FUNCTION__)); + __FUNCTION__ + )); DecryptStatus = MemEncryptSevClearMmioPageEncMask ( 0, FixedPcdGet64 (PcdTpmBaseAddress), - EFI_SIZE_TO_PAGES ((UINTN) 0x5000) + EFI_SIZE_TO_PAGES ((UINTN)0x5000) ); if (RETURN_ERROR (DecryptStatus)) { - DEBUG ((DEBUG_ERROR, + DEBUG (( + DEBUG_ERROR, "%a: failed to map TPM MMIO address range unencrypted\n", - __FUNCTION__)); + __FUNCTION__ + )); ASSERT_RETURN_ERROR (DecryptStatus); } } diff --git a/OvmfPkg/Virtio10Dxe/Virtio10.c b/OvmfPkg/Virtio10Dxe/Virtio10.c index 4d8e5b58a9..970524f6d7 100644 --- a/OvmfPkg/Virtio10Dxe/Virtio10.c +++ b/OvmfPkg/Virtio10Dxe/Virtio10.c @@ -22,7 +22,6 @@ #include "Virtio10.h" - // // Utility functions // @@ -66,22 +65,23 @@ STATIC EFI_STATUS Virtio10Transfer ( - IN EFI_PCI_IO_PROTOCOL *PciIo, - IN VIRTIO_1_0_CONFIG *Config, - IN BOOLEAN Write, - IN UINTN FieldOffset, - IN UINTN FieldSize, - IN OUT VOID *Buffer + IN EFI_PCI_IO_PROTOCOL *PciIo, + IN VIRTIO_1_0_CONFIG *Config, + IN BOOLEAN Write, + IN UINTN FieldOffset, + IN UINTN FieldSize, + IN OUT VOID *Buffer ) { - UINTN Count; - EFI_PCI_IO_PROTOCOL_WIDTH Width; - EFI_PCI_IO_PROTOCOL_ACCESS *BarType; - EFI_PCI_IO_PROTOCOL_IO_MEM Access; + UINTN Count; + EFI_PCI_IO_PROTOCOL_WIDTH Width; + EFI_PCI_IO_PROTOCOL_ACCESS *BarType; + EFI_PCI_IO_PROTOCOL_IO_MEM Access; if (!Config->Exists || - FieldSize > Config->Length || - FieldOffset > Config->Length - FieldSize) { + (FieldSize > Config->Length) || + (FieldOffset > Config->Length - FieldSize)) + { return EFI_INVALID_PARAMETER; } @@ -97,9 +97,9 @@ Virtio10Transfer ( case 8: Count = 2; - // - // fall through - // + // + // fall through + // case 4: Width = EfiPciIoWidthUint32; @@ -110,13 +110,18 @@ Virtio10Transfer ( } BarType = (Config->BarType == Virtio10BarTypeMem) ? &PciIo->Mem : &PciIo->Io; - Access = Write ? BarType->Write : BarType->Read; - - return Access (PciIo, Width, Config->Bar, Config->Offset + FieldOffset, - Count, Buffer); + Access = Write ? BarType->Write : BarType->Read; + + return Access ( + PciIo, + Width, + Config->Bar, + Config->Offset + FieldOffset, + Count, + Buffer + ); } - /** Determine if a PCI BAR is IO or MMIO. @@ -140,13 +145,13 @@ Virtio10Transfer ( STATIC EFI_STATUS GetBarType ( - IN EFI_PCI_IO_PROTOCOL *PciIo, - IN UINT8 BarIndex, - OUT VIRTIO_1_0_BAR_TYPE *BarType + IN EFI_PCI_IO_PROTOCOL *PciIo, + IN UINT8 BarIndex, + OUT VIRTIO_1_0_BAR_TYPE *BarType ) { - EFI_STATUS Status; - VOID *Resources; + EFI_STATUS Status; + VOID *Resources; Status = PciIo->GetBarAttributes (PciIo, BarIndex, NULL, &Resources); if (EFI_ERROR (Status)) { @@ -156,22 +161,22 @@ GetBarType ( Status = EFI_UNSUPPORTED; if (*(UINT8 *)Resources == ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR) { - EFI_ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR *Descriptor; + EFI_ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR *Descriptor; Descriptor = Resources; switch (Descriptor->ResType) { - case ACPI_ADDRESS_SPACE_TYPE_MEM: - *BarType = Virtio10BarTypeMem; - Status = EFI_SUCCESS; - break; - - case ACPI_ADDRESS_SPACE_TYPE_IO: - *BarType = Virtio10BarTypeIo; - Status = EFI_SUCCESS; - break; - - default: - break; + case ACPI_ADDRESS_SPACE_TYPE_MEM: + *BarType = Virtio10BarTypeMem; + Status = EFI_SUCCESS; + break; + + case ACPI_ADDRESS_SPACE_TYPE_IO: + *BarType = Virtio10BarTypeIo; + Status = EFI_SUCCESS; + break; + + default: + break; } } @@ -179,7 +184,6 @@ GetBarType ( return Status; } - /* Traverse the PCI capabilities list of a virtio-1.0 device, and capture the locations of the interesting virtio-1.0 register blocks. @@ -201,42 +205,55 @@ GetBarType ( STATIC EFI_STATUS ParseCapabilities ( - IN OUT VIRTIO_1_0_DEV *Device + IN OUT VIRTIO_1_0_DEV *Device ) { - EFI_STATUS Status; - PCI_CAP_DEV *PciDevice; - PCI_CAP_LIST *CapList; - UINT16 VendorInstance; - PCI_CAP *VendorCap; + EFI_STATUS Status; + PCI_CAP_DEV *PciDevice; + PCI_CAP_LIST *CapList; + UINT16 VendorInstance; + PCI_CAP *VendorCap; Status = PciCapPciIoDeviceInit (Device->PciIo, &PciDevice); if (EFI_ERROR (Status)) { return Status; } + Status = PciCapListInit (PciDevice, &CapList); if (EFI_ERROR (Status)) { goto UninitPciDevice; } for (VendorInstance = 0; - !EFI_ERROR (PciCapListFindCap (CapList, PciCapNormal, - EFI_PCI_CAPABILITY_ID_VENDOR, VendorInstance, - &VendorCap)); - VendorInstance++) { - UINT8 CapLen; - VIRTIO_PCI_CAP VirtIoCap; - VIRTIO_1_0_CONFIG *ParsedConfig; + !EFI_ERROR ( + PciCapListFindCap ( + CapList, + PciCapNormal, + EFI_PCI_CAPABILITY_ID_VENDOR, + VendorInstance, + &VendorCap + ) + ); + VendorInstance++) + { + UINT8 CapLen; + VIRTIO_PCI_CAP VirtIoCap; + VIRTIO_1_0_CONFIG *ParsedConfig; // // Big enough to accommodate a VIRTIO_PCI_CAP structure? // - Status = PciCapRead (PciDevice, VendorCap, - OFFSET_OF (EFI_PCI_CAPABILITY_VENDOR_HDR, Length), &CapLen, - sizeof CapLen); + Status = PciCapRead ( + PciDevice, + VendorCap, + OFFSET_OF (EFI_PCI_CAPABILITY_VENDOR_HDR, Length), + &CapLen, + sizeof CapLen + ); if (EFI_ERROR (Status)) { goto UninitCapList; } + if (CapLen < sizeof VirtIoCap) { // // Too small, move to next. @@ -253,20 +270,20 @@ ParseCapabilities ( } switch (VirtIoCap.ConfigType) { - case VIRTIO_PCI_CAP_COMMON_CFG: - ParsedConfig = &Device->CommonConfig; - break; - case VIRTIO_PCI_CAP_NOTIFY_CFG: - ParsedConfig = &Device->NotifyConfig; - break; - case VIRTIO_PCI_CAP_DEVICE_CFG: - ParsedConfig = &Device->SpecificConfig; - break; - default: - // - // Capability is not interesting. - // - continue; + case VIRTIO_PCI_CAP_COMMON_CFG: + ParsedConfig = &Device->CommonConfig; + break; + case VIRTIO_PCI_CAP_NOTIFY_CFG: + ParsedConfig = &Device->NotifyConfig; + break; + case VIRTIO_PCI_CAP_DEVICE_CFG: + ParsedConfig = &Device->SpecificConfig; + break; + default: + // + // Capability is not interesting. + // + continue; } // @@ -276,6 +293,7 @@ ParseCapabilities ( if (EFI_ERROR (Status)) { goto UninitCapList; } + ParsedConfig->Bar = VirtIoCap.Bar; ParsedConfig->Offset = VirtIoCap.Offset; ParsedConfig->Length = VirtIoCap.Length; @@ -292,9 +310,13 @@ ParseCapabilities ( continue; } - Status = PciCapRead (PciDevice, VendorCap, sizeof VirtIoCap, + Status = PciCapRead ( + PciDevice, + VendorCap, + sizeof VirtIoCap, &Device->NotifyOffsetMultiplier, - sizeof Device->NotifyOffsetMultiplier); + sizeof Device->NotifyOffsetMultiplier + ); if (EFI_ERROR (Status)) { goto UninitCapList; } @@ -317,7 +339,6 @@ UninitPciDevice: return Status; } - /** Accumulate the BAR type of a virtio-1.0 register block into a UINT64 attribute map, such that the latter is suitable for enabling IO / MMIO @@ -335,18 +356,17 @@ UninitPciDevice: STATIC VOID UpdateAttributes ( - IN VIRTIO_1_0_CONFIG *Config, - IN OUT UINT64 *Attributes + IN VIRTIO_1_0_CONFIG *Config, + IN OUT UINT64 *Attributes ) { if (Config->Exists) { *Attributes |= (Config->BarType == Virtio10BarTypeMem) ? - EFI_PCI_IO_ATTRIBUTE_MEMORY: - EFI_PCI_IO_ATTRIBUTE_IO; + EFI_PCI_IO_ATTRIBUTE_MEMORY : + EFI_PCI_IO_ATTRIBUTE_IO; } } - // // VIRTIO_DEVICE_PROTOCOL member functions // @@ -355,25 +375,30 @@ STATIC EFI_STATUS EFIAPI Virtio10GetDeviceFeatures ( - IN VIRTIO_DEVICE_PROTOCOL *This, - OUT UINT64 *DeviceFeatures + IN VIRTIO_DEVICE_PROTOCOL *This, + OUT UINT64 *DeviceFeatures ) { - VIRTIO_1_0_DEV *Dev; - UINT32 Selector; - UINT32 Features32[2]; + VIRTIO_1_0_DEV *Dev; + UINT32 Selector; + UINT32 Features32[2]; Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); for (Selector = 0; Selector < 2; ++Selector) { - EFI_STATUS Status; + EFI_STATUS Status; // // Select the low or high half of the features. // - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE, + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + TRUE, OFFSET_OF (VIRTIO_PCI_COMMON_CFG, DeviceFeatureSelect), - sizeof Selector, &Selector); + sizeof Selector, + &Selector + ); if (EFI_ERROR (Status)) { return Status; } @@ -381,9 +406,14 @@ Virtio10GetDeviceFeatures ( // // Fetch that half. // - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, FALSE, + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + FALSE, OFFSET_OF (VIRTIO_PCI_COMMON_CFG, DeviceFeature), - sizeof Features32[Selector], &Features32[Selector]); + sizeof Features32[Selector], + &Features32[Selector] + ); if (EFI_ERROR (Status)) { return Status; } @@ -393,18 +423,17 @@ Virtio10GetDeviceFeatures ( return EFI_SUCCESS; } - STATIC EFI_STATUS EFIAPI Virtio10SetGuestFeatures ( IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT64 Features + IN UINT64 Features ) { - VIRTIO_1_0_DEV *Dev; - UINT32 Selector; - UINT32 Features32[2]; + VIRTIO_1_0_DEV *Dev; + UINT32 Selector; + UINT32 Features32[2]; Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); @@ -412,14 +441,19 @@ Virtio10SetGuestFeatures ( Features32[1] = (UINT32)RShiftU64 (Features, 32); for (Selector = 0; Selector < 2; ++Selector) { - EFI_STATUS Status; + EFI_STATUS Status; // // Select the low or high half of the features. // - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE, + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + TRUE, OFFSET_OF (VIRTIO_PCI_COMMON_CFG, DriverFeatureSelect), - sizeof Selector, &Selector); + sizeof Selector, + &Selector + ); if (EFI_ERROR (Status)) { return Status; } @@ -427,9 +461,14 @@ Virtio10SetGuestFeatures ( // // Write that half. // - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE, + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + TRUE, OFFSET_OF (VIRTIO_PCI_COMMON_CFG, DriverFeature), - sizeof Features32[Selector], &Features32[Selector]); + sizeof Features32[Selector], + &Features32[Selector] + ); if (EFI_ERROR (Status)) { return Status; } @@ -438,7 +477,6 @@ Virtio10SetGuestFeatures ( return EFI_SUCCESS; } - STATIC EFI_STATUS EFIAPI @@ -448,80 +486,103 @@ Virtio10SetQueueAddress ( IN UINT64 RingBaseShift ) { - VIRTIO_1_0_DEV *Dev; - EFI_STATUS Status; - UINT64 Address; - UINT16 Enable; + VIRTIO_1_0_DEV *Dev; + EFI_STATUS Status; + UINT64 Address; + UINT16 Enable; Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); - Address = (UINTN)Ring->Desc; + Address = (UINTN)Ring->Desc; Address += RingBaseShift; - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE, - OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueDesc), - sizeof Address, &Address); + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + TRUE, + OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueDesc), + sizeof Address, + &Address + ); if (EFI_ERROR (Status)) { return Status; } - Address = (UINTN)Ring->Avail.Flags; + Address = (UINTN)Ring->Avail.Flags; Address += RingBaseShift; - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE, - OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueAvail), - sizeof Address, &Address); + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + TRUE, + OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueAvail), + sizeof Address, + &Address + ); if (EFI_ERROR (Status)) { return Status; } - Address = (UINTN)Ring->Used.Flags; + Address = (UINTN)Ring->Used.Flags; Address += RingBaseShift; - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE, - OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueUsed), - sizeof Address, &Address); + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + TRUE, + OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueUsed), + sizeof Address, + &Address + ); if (EFI_ERROR (Status)) { return Status; } Enable = 1; - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE, + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + TRUE, OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueEnable), - sizeof Enable, &Enable); + sizeof Enable, + &Enable + ); return Status; } - STATIC EFI_STATUS EFIAPI Virtio10SetQueueSel ( IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT16 Index + IN UINT16 Index ) { - VIRTIO_1_0_DEV *Dev; - EFI_STATUS Status; + VIRTIO_1_0_DEV *Dev; + EFI_STATUS Status; Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE, + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + TRUE, OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueSelect), - sizeof Index, &Index); + sizeof Index, + &Index + ); return Status; } - STATIC EFI_STATUS EFIAPI Virtio10SetQueueNotify ( IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT16 Index + IN UINT16 Index ) { - VIRTIO_1_0_DEV *Dev; - EFI_STATUS Status; - UINT16 SavedQueueSelect; - UINT16 NotifyOffset; + VIRTIO_1_0_DEV *Dev; + EFI_STATUS Status; + UINT16 SavedQueueSelect; + UINT16 NotifyOffset; Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); @@ -531,9 +592,14 @@ Virtio10SetQueueNotify ( // // So, start with saving the current queue selector. // - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, FALSE, + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + FALSE, OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueSelect), - sizeof SavedQueueSelect, &SavedQueueSelect); + sizeof SavedQueueSelect, + &SavedQueueSelect + ); if (EFI_ERROR (Status)) { return Status; } @@ -541,9 +607,14 @@ Virtio10SetQueueNotify ( // // Select the requested queue. // - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE, + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + TRUE, OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueSelect), - sizeof Index, &Index); + sizeof Index, + &Index + ); if (EFI_ERROR (Status)) { return Status; } @@ -551,9 +622,14 @@ Virtio10SetQueueNotify ( // // Read the QueueNotifyOff field. // - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, FALSE, + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + FALSE, OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueNotifyOff), - sizeof NotifyOffset, &NotifyOffset); + sizeof NotifyOffset, + &NotifyOffset + ); if (EFI_ERROR (Status)) { return Status; } @@ -561,9 +637,14 @@ Virtio10SetQueueNotify ( // // Re-select the original queue. // - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE, + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + TRUE, OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueSelect), - sizeof SavedQueueSelect, &SavedQueueSelect); + sizeof SavedQueueSelect, + &SavedQueueSelect + ); if (EFI_ERROR (Status)) { return Status; } @@ -571,37 +652,39 @@ Virtio10SetQueueNotify ( // // We can now kick the queue. // - Status = Virtio10Transfer (Dev->PciIo, &Dev->NotifyConfig, TRUE, + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->NotifyConfig, + TRUE, NotifyOffset * Dev->NotifyOffsetMultiplier, - sizeof Index, &Index); + sizeof Index, + &Index + ); return Status; } - STATIC EFI_STATUS EFIAPI Virtio10SetQueueAlign ( IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT32 Alignment + IN UINT32 Alignment ) { return (Alignment == EFI_PAGE_SIZE) ? EFI_SUCCESS : EFI_UNSUPPORTED; } - STATIC EFI_STATUS EFIAPI Virtio10SetPageSize ( IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT32 PageSize + IN UINT32 PageSize ) { return (PageSize == EFI_PAGE_SIZE) ? EFI_SUCCESS : EFI_UNSUPPORTED; } - STATIC EFI_STATUS EFIAPI @@ -610,28 +693,32 @@ Virtio10GetQueueNumMax ( OUT UINT16 *QueueNumMax ) { - VIRTIO_1_0_DEV *Dev; - EFI_STATUS Status; + VIRTIO_1_0_DEV *Dev; + EFI_STATUS Status; Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, FALSE, + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + FALSE, OFFSET_OF (VIRTIO_PCI_COMMON_CFG, QueueSize), - sizeof *QueueNumMax, QueueNumMax); + sizeof *QueueNumMax, + QueueNumMax + ); return Status; } - STATIC EFI_STATUS EFIAPI Virtio10SetQueueNum ( IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT16 QueueSize + IN UINT16 QueueSize ) { - EFI_STATUS Status; - UINT16 CurrentSize; + EFI_STATUS Status; + UINT16 CurrentSize; // // This member function is required for VirtIo MMIO, and a no-op in @@ -643,10 +730,10 @@ Virtio10SetQueueNum ( if (EFI_ERROR (Status)) { return Status; } + return (CurrentSize == QueueSize) ? EFI_SUCCESS : EFI_UNSUPPORTED; } - STATIC EFI_STATUS EFIAPI @@ -655,18 +742,22 @@ Virtio10GetDeviceStatus ( OUT UINT8 *DeviceStatus ) { - VIRTIO_1_0_DEV *Dev; - EFI_STATUS Status; + VIRTIO_1_0_DEV *Dev; + EFI_STATUS Status; Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, FALSE, + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + FALSE, OFFSET_OF (VIRTIO_PCI_COMMON_CFG, DeviceStatus), - sizeof *DeviceStatus, DeviceStatus); + sizeof *DeviceStatus, + DeviceStatus + ); return Status; } - STATIC EFI_STATUS EFIAPI @@ -675,52 +766,61 @@ Virtio10SetDeviceStatus ( IN UINT8 DeviceStatus ) { - VIRTIO_1_0_DEV *Dev; - EFI_STATUS Status; + VIRTIO_1_0_DEV *Dev; + EFI_STATUS Status; Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); - Status = Virtio10Transfer (Dev->PciIo, &Dev->CommonConfig, TRUE, + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->CommonConfig, + TRUE, OFFSET_OF (VIRTIO_PCI_COMMON_CFG, DeviceStatus), - sizeof DeviceStatus, &DeviceStatus); + sizeof DeviceStatus, + &DeviceStatus + ); return Status; } - STATIC EFI_STATUS EFIAPI Virtio10WriteDevice ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINTN FieldOffset, - IN UINTN FieldSize, - IN UINT64 Value + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN FieldOffset, + IN UINTN FieldSize, + IN UINT64 Value ) { - VIRTIO_1_0_DEV *Dev; - EFI_STATUS Status; + VIRTIO_1_0_DEV *Dev; + EFI_STATUS Status; Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); - Status = Virtio10Transfer (Dev->PciIo, &Dev->SpecificConfig, TRUE, - FieldOffset, FieldSize, &Value); + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->SpecificConfig, + TRUE, + FieldOffset, + FieldSize, + &Value + ); return Status; } - STATIC EFI_STATUS EFIAPI Virtio10ReadDevice ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINTN FieldOffset, - IN UINTN FieldSize, - IN UINTN BufferSize, - OUT VOID *Buffer + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN FieldOffset, + IN UINTN FieldSize, + IN UINTN BufferSize, + OUT VOID *Buffer ) { - VIRTIO_1_0_DEV *Dev; - EFI_STATUS Status; + VIRTIO_1_0_DEV *Dev; + EFI_STATUS Status; if (FieldSize != BufferSize) { return EFI_INVALID_PARAMETER; @@ -728,8 +828,14 @@ Virtio10ReadDevice ( Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); - Status = Virtio10Transfer (Dev->PciIo, &Dev->SpecificConfig, FALSE, - FieldOffset, FieldSize, Buffer); + Status = Virtio10Transfer ( + Dev->PciIo, + &Dev->SpecificConfig, + FALSE, + FieldOffset, + FieldSize, + Buffer + ); return Status; } @@ -742,8 +848,8 @@ Virtio10AllocateSharedPages ( IN OUT VOID **HostAddress ) { - VIRTIO_1_0_DEV *Dev; - EFI_STATUS Status; + VIRTIO_1_0_DEV *Dev; + EFI_STATUS Status; Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); @@ -767,7 +873,7 @@ Virtio10FreeSharedPages ( IN VOID *HostAddress ) { - VIRTIO_1_0_DEV *Dev; + VIRTIO_1_0_DEV *Dev; Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); @@ -790,9 +896,9 @@ Virtio10MapSharedBuffer ( OUT VOID **Mapping ) { - EFI_STATUS Status; - VIRTIO_1_0_DEV *Dev; - EFI_PCI_IO_PROTOCOL_OPERATION PciIoOperation; + EFI_STATUS Status; + VIRTIO_1_0_DEV *Dev; + EFI_PCI_IO_PROTOCOL_OPERATION PciIoOperation; Dev = VIRTIO_1_0_FROM_VIRTIO_DEVICE (This); @@ -800,17 +906,17 @@ Virtio10MapSharedBuffer ( // Map VIRTIO_MAP_OPERATION to EFI_PCI_IO_PROTOCOL_OPERATION // switch (Operation) { - case VirtioOperationBusMasterRead: - PciIoOperation = EfiPciIoOperationBusMasterRead; - break; - case VirtioOperationBusMasterWrite: - PciIoOperation = EfiPciIoOperationBusMasterWrite; - break; - case VirtioOperationBusMasterCommonBuffer: - PciIoOperation = EfiPciIoOperationBusMasterCommonBuffer; - break; - default: - return EFI_INVALID_PARAMETER; + case VirtioOperationBusMasterRead: + PciIoOperation = EfiPciIoOperationBusMasterRead; + break; + case VirtioOperationBusMasterWrite: + PciIoOperation = EfiPciIoOperationBusMasterWrite; + break; + case VirtioOperationBusMasterCommonBuffer: + PciIoOperation = EfiPciIoOperationBusMasterCommonBuffer; + break; + default: + return EFI_INVALID_PARAMETER; } Status = Dev->PciIo->Map ( @@ -845,9 +951,9 @@ Virtio10UnmapSharedBuffer ( return Status; } -STATIC CONST VIRTIO_DEVICE_PROTOCOL mVirtIoTemplate = { - VIRTIO_SPEC_REVISION (1, 0, 0), - 0, // SubSystemDeviceId, filled in dynamically +STATIC CONST VIRTIO_DEVICE_PROTOCOL mVirtIoTemplate = { + VIRTIO_SPEC_REVISION (1, 0, 0), + 0, // SubSystemDeviceId, filled in dynamically Virtio10GetDeviceFeatures, Virtio10SetGuestFeatures, Virtio10SetQueueAddress, @@ -867,7 +973,6 @@ STATIC CONST VIRTIO_DEVICE_PROTOCOL mVirtIoTemplate = { Virtio10UnmapSharedBuffer }; - // // EFI_DRIVER_BINDING_PROTOCOL member functions // @@ -876,24 +981,34 @@ STATIC EFI_STATUS EFIAPI Virtio10BindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; - - Status = gBS->OpenProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, - (VOID **)&PciIo, This->DriverBindingHandle, - DeviceHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; + + Status = gBS->OpenProtocol ( + DeviceHandle, + &gEfiPciIoProtocolGuid, + (VOID **)&PciIo, + This->DriverBindingHandle, + DeviceHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { return Status; } - Status = PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, 0, - sizeof Pci / sizeof (UINT32), &Pci); + Status = PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint32, + 0, + sizeof Pci / sizeof (UINT32), + &Pci + ); if (EFI_ERROR (Status)) { goto CloseProtocol; } @@ -903,12 +1018,13 @@ Virtio10BindingSupported ( // Recognize non-transitional modern devices. Also, we'll have to parse the // PCI capability list, so make sure the CapabilityPtr field will be valid. // - if (Pci.Hdr.VendorId == VIRTIO_VENDOR_ID && - Pci.Hdr.DeviceId >= 0x1040 && - Pci.Hdr.DeviceId <= 0x107F && - Pci.Hdr.RevisionID >= 0x01 && - Pci.Device.SubsystemID >= 0x40 && - (Pci.Hdr.Status & EFI_PCI_STATUS_CAPABILITY) != 0) { + if ((Pci.Hdr.VendorId == VIRTIO_VENDOR_ID) && + (Pci.Hdr.DeviceId >= 0x1040) && + (Pci.Hdr.DeviceId <= 0x107F) && + (Pci.Hdr.RevisionID >= 0x01) && + (Pci.Device.SubsystemID >= 0x40) && + ((Pci.Hdr.Status & EFI_PCI_STATUS_CAPABILITY) != 0)) + { // // The virtio-vga device is special. It can be driven both as a VGA device // with a linear framebuffer, and through its underlying, modern, @@ -920,32 +1036,35 @@ Virtio10BindingSupported ( // Both virtio-vga and virtio-gpu-pci have DeviceId 0x1050, but only the // former has device class PCI_CLASS_DISPLAY_VGA. // - if (Pci.Hdr.DeviceId != 0x1050 || !IS_PCI_VGA (&Pci)) { + if ((Pci.Hdr.DeviceId != 0x1050) || !IS_PCI_VGA (&Pci)) { Status = EFI_SUCCESS; } } CloseProtocol: - gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); return Status; } - STATIC EFI_STATUS EFIAPI Virtio10BindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - VIRTIO_1_0_DEV *Device; - EFI_STATUS Status; - PCI_TYPE00 Pci; - UINT64 SetAttributes; + VIRTIO_1_0_DEV *Device; + EFI_STATUS Status; + PCI_TYPE00 Pci; + UINT64 SetAttributes; Device = AllocateZeroPool (sizeof *Device); if (Device == NULL) { @@ -955,15 +1074,25 @@ Virtio10BindingStart ( Device->Signature = VIRTIO_1_0_SIGNATURE; CopyMem (&Device->VirtIo, &mVirtIoTemplate, sizeof mVirtIoTemplate); - Status = gBS->OpenProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, - (VOID **)&Device->PciIo, This->DriverBindingHandle, - DeviceHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); + Status = gBS->OpenProtocol ( + DeviceHandle, + &gEfiPciIoProtocolGuid, + (VOID **)&Device->PciIo, + This->DriverBindingHandle, + DeviceHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { goto FreeDevice; } - Status = Device->PciIo->Pci.Read (Device->PciIo, EfiPciIoWidthUint32, 0, - sizeof Pci / sizeof (UINT32), &Pci); + Status = Device->PciIo->Pci.Read ( + Device->PciIo, + EfiPciIoWidthUint32, + 0, + sizeof Pci / sizeof (UINT32), + &Pci + ); if (EFI_ERROR (Status)) { goto ClosePciIo; } @@ -975,9 +1104,12 @@ Virtio10BindingStart ( goto ClosePciIo; } - Status = Device->PciIo->Attributes (Device->PciIo, - EfiPciIoAttributeOperationGet, 0, - &Device->OriginalPciAttributes); + Status = Device->PciIo->Attributes ( + Device->PciIo, + EfiPciIoAttributeOperationGet, + 0, + &Device->OriginalPciAttributes + ); if (EFI_ERROR (Status)) { goto ClosePciIo; } @@ -987,16 +1119,22 @@ Virtio10BindingStart ( UpdateAttributes (&Device->CommonConfig, &SetAttributes); UpdateAttributes (&Device->NotifyConfig, &SetAttributes); UpdateAttributes (&Device->SpecificConfig, &SetAttributes); - Status = Device->PciIo->Attributes (Device->PciIo, - EfiPciIoAttributeOperationEnable, SetAttributes, - NULL); + Status = Device->PciIo->Attributes ( + Device->PciIo, + EfiPciIoAttributeOperationEnable, + SetAttributes, + NULL + ); if (EFI_ERROR (Status)) { goto ClosePciIo; } - Status = gBS->InstallProtocolInterface (&DeviceHandle, - &gVirtioDeviceProtocolGuid, EFI_NATIVE_INTERFACE, - &Device->VirtIo); + Status = gBS->InstallProtocolInterface ( + &DeviceHandle, + &gVirtioDeviceProtocolGuid, + EFI_NATIVE_INTERFACE, + &Device->VirtIo + ); if (EFI_ERROR (Status)) { goto RestorePciAttributes; } @@ -1004,12 +1142,20 @@ Virtio10BindingStart ( return EFI_SUCCESS; RestorePciAttributes: - Device->PciIo->Attributes (Device->PciIo, EfiPciIoAttributeOperationSet, - Device->OriginalPciAttributes, NULL); + Device->PciIo->Attributes ( + Device->PciIo, + EfiPciIoAttributeOperationSet, + Device->OriginalPciAttributes, + NULL + ); ClosePciIo: - gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); FreeDevice: FreePool (Device); @@ -1017,47 +1163,61 @@ FreeDevice: return Status; } - STATIC EFI_STATUS EFIAPI Virtio10BindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) { - EFI_STATUS Status; - VIRTIO_DEVICE_PROTOCOL *VirtIo; - VIRTIO_1_0_DEV *Device; - - Status = gBS->OpenProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - (VOID **)&VirtIo, This->DriverBindingHandle, - DeviceHandle, EFI_OPEN_PROTOCOL_GET_PROTOCOL); + EFI_STATUS Status; + VIRTIO_DEVICE_PROTOCOL *VirtIo; + VIRTIO_1_0_DEV *Device; + + Status = gBS->OpenProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + (VOID **)&VirtIo, + This->DriverBindingHandle, + DeviceHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); if (EFI_ERROR (Status)) { return Status; } Device = VIRTIO_1_0_FROM_VIRTIO_DEVICE (VirtIo); - Status = gBS->UninstallProtocolInterface (DeviceHandle, - &gVirtioDeviceProtocolGuid, &Device->VirtIo); + Status = gBS->UninstallProtocolInterface ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + &Device->VirtIo + ); if (EFI_ERROR (Status)) { return Status; } - Device->PciIo->Attributes (Device->PciIo, EfiPciIoAttributeOperationSet, - Device->OriginalPciAttributes, NULL); - gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + Device->PciIo->Attributes ( + Device->PciIo, + EfiPciIoAttributeOperationSet, + Device->OriginalPciAttributes, + NULL + ); + gBS->CloseProtocol ( + DeviceHandle, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); FreePool (Device); return EFI_SUCCESS; } - -STATIC EFI_DRIVER_BINDING_PROTOCOL mDriverBinding = { +STATIC EFI_DRIVER_BINDING_PROTOCOL mDriverBinding = { &Virtio10BindingSupported, &Virtio10BindingStart, &Virtio10BindingStop, @@ -1066,28 +1226,27 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL mDriverBinding = { NULL // DriverBindingHandle, to be overwritten }; - // // EFI_COMPONENT_NAME_PROTOCOL and EFI_COMPONENT_NAME2_PROTOCOL // implementations // STATIC -EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { +EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { { "eng;en", L"Virtio 1.0 PCI Driver" }, { NULL, NULL } }; STATIC -EFI_COMPONENT_NAME_PROTOCOL mComponentName; +EFI_COMPONENT_NAME_PROTOCOL mComponentName; STATIC EFI_STATUS EFIAPI Virtio10GetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) { return LookupUnicodeString2 ( @@ -1103,31 +1262,30 @@ STATIC EFI_STATUS EFIAPI Virtio10GetDeviceName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_HANDLE ChildHandle, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_HANDLE ChildHandle, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { return EFI_UNSUPPORTED; } STATIC -EFI_COMPONENT_NAME_PROTOCOL mComponentName = { +EFI_COMPONENT_NAME_PROTOCOL mComponentName = { &Virtio10GetDriverName, &Virtio10GetDeviceName, "eng" }; STATIC -EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &Virtio10GetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &Virtio10GetDeviceName, +EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&Virtio10GetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&Virtio10GetDeviceName, "en" }; - // // Entry point of this driver // @@ -1135,8 +1293,8 @@ EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = { EFI_STATUS EFIAPI Virtio10EntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { return EfiLibInstallDriverBindingComponentName2 ( diff --git a/OvmfPkg/Virtio10Dxe/Virtio10.h b/OvmfPkg/Virtio10Dxe/Virtio10.h index 4258bbfcaa..355f2a0785 100644 --- a/OvmfPkg/Virtio10Dxe/Virtio10.h +++ b/OvmfPkg/Virtio10Dxe/Virtio10.h @@ -12,7 +12,7 @@ #include #include -#define VIRTIO_1_0_SIGNATURE SIGNATURE_32 ('V', 'I', 'O', '1') +#define VIRTIO_1_0_SIGNATURE SIGNATURE_32 ('V', 'I', 'O', '1') // // Type of the PCI BAR that contains a VirtIo 1.0 config structure. @@ -26,22 +26,22 @@ typedef enum { // The type below defines the access to a VirtIo 1.0 config structure. // typedef struct { - BOOLEAN Exists; // The device exposes this structure - VIRTIO_1_0_BAR_TYPE BarType; - UINT8 Bar; - UINT32 Offset; // Offset into BAR where structure starts - UINT32 Length; // Length of structure in BAR. + BOOLEAN Exists; // The device exposes this structure + VIRTIO_1_0_BAR_TYPE BarType; + UINT8 Bar; + UINT32 Offset; // Offset into BAR where structure starts + UINT32 Length; // Length of structure in BAR. } VIRTIO_1_0_CONFIG; typedef struct { - UINT32 Signature; - VIRTIO_DEVICE_PROTOCOL VirtIo; - EFI_PCI_IO_PROTOCOL *PciIo; - UINT64 OriginalPciAttributes; - VIRTIO_1_0_CONFIG CommonConfig; // Common settings - VIRTIO_1_0_CONFIG NotifyConfig; // Notifications - UINT32 NotifyOffsetMultiplier; - VIRTIO_1_0_CONFIG SpecificConfig; // Device specific settings + UINT32 Signature; + VIRTIO_DEVICE_PROTOCOL VirtIo; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT64 OriginalPciAttributes; + VIRTIO_1_0_CONFIG CommonConfig; // Common settings + VIRTIO_1_0_CONFIG NotifyConfig; // Notifications + UINT32 NotifyOffsetMultiplier; + VIRTIO_1_0_CONFIG SpecificConfig; // Device specific settings } VIRTIO_1_0_DEV; #define VIRTIO_1_0_FROM_VIRTIO_DEVICE(Device) \ diff --git a/OvmfPkg/VirtioBlkDxe/VirtioBlk.c b/OvmfPkg/VirtioBlkDxe/VirtioBlk.c index 06b9859a64..cc094cc4dd 100644 --- a/OvmfPkg/VirtioBlkDxe/VirtioBlk.c +++ b/OvmfPkg/VirtioBlkDxe/VirtioBlk.c @@ -63,7 +63,7 @@ (Value) \ )) -#define VIRTIO_CFG_READ(Dev, Field, Pointer) ((Dev)->VirtIo->ReadDevice ( \ +#define VIRTIO_CFG_READ(Dev, Field, Pointer) ((Dev)->VirtIo->ReadDevice ( \ (Dev)->VirtIo, \ OFFSET_OF_VBLK (Field), \ SIZE_OF_VBLK (Field), \ @@ -71,7 +71,6 @@ (Pointer) \ )) - // // UEFI Spec 2.3.1 + Errata C, 12.8 EFI Block I/O Protocol // Driver Writer's Guide for UEFI 2.3.1 v1.01, @@ -80,8 +79,8 @@ EFI_STATUS EFIAPI VirtioBlkReset ( - IN EFI_BLOCK_IO_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EFI_BLOCK_IO_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ) { // @@ -143,26 +142,28 @@ STATIC EFI_STATUS EFIAPI VerifyReadWriteRequest ( - IN EFI_BLOCK_IO_MEDIA *Media, - IN EFI_LBA Lba, - IN UINTN PositiveBufferSize, - IN BOOLEAN RequestIsWrite + IN EFI_BLOCK_IO_MEDIA *Media, + IN EFI_LBA Lba, + IN UINTN PositiveBufferSize, + IN BOOLEAN RequestIsWrite ) { - UINTN BlockCount; + UINTN BlockCount; ASSERT (PositiveBufferSize > 0); - if (PositiveBufferSize > SIZE_1GB || - PositiveBufferSize % Media->BlockSize > 0) { + if ((PositiveBufferSize > SIZE_1GB) || + (PositiveBufferSize % Media->BlockSize > 0)) + { return EFI_BAD_BUFFER_SIZE; } + BlockCount = PositiveBufferSize / Media->BlockSize; // // Avoid unsigned wraparound on either side in the second comparison. // - if (Lba > Media->LastBlock || BlockCount - 1 > Media->LastBlock - Lba) { + if ((Lba > Media->LastBlock) || (BlockCount - 1 > Media->LastBlock - Lba)) { return EFI_INVALID_PARAMETER; } @@ -173,9 +174,6 @@ VerifyReadWriteRequest ( return EFI_SUCCESS; } - - - /** Format a read / write / flush request as three consecutive virtio @@ -230,31 +228,30 @@ VerifyReadWriteRequest ( for a bus master operation. **/ - STATIC EFI_STATUS EFIAPI SynchronousRequest ( - IN VBLK_DEV *Dev, - IN EFI_LBA Lba, - IN UINTN BufferSize, - IN OUT volatile VOID *Buffer, - IN BOOLEAN RequestIsWrite + IN VBLK_DEV *Dev, + IN EFI_LBA Lba, + IN UINTN BufferSize, + IN OUT volatile VOID *Buffer, + IN BOOLEAN RequestIsWrite ) { - UINT32 BlockSize; - volatile VIRTIO_BLK_REQ Request; - volatile UINT8 *HostStatus; - VOID *HostStatusBuffer; - DESC_INDICES Indices; - VOID *RequestMapping; - VOID *StatusMapping; - VOID *BufferMapping; - EFI_PHYSICAL_ADDRESS BufferDeviceAddress; - EFI_PHYSICAL_ADDRESS HostStatusDeviceAddress; - EFI_PHYSICAL_ADDRESS RequestDeviceAddress; - EFI_STATUS Status; - EFI_STATUS UnmapStatus; + UINT32 BlockSize; + volatile VIRTIO_BLK_REQ Request; + volatile UINT8 *HostStatus; + VOID *HostStatusBuffer; + DESC_INDICES Indices; + VOID *RequestMapping; + VOID *StatusMapping; + VOID *BufferMapping; + EFI_PHYSICAL_ADDRESS BufferDeviceAddress; + EFI_PHYSICAL_ADDRESS HostStatusDeviceAddress; + EFI_PHYSICAL_ADDRESS RequestDeviceAddress; + EFI_STATUS Status; + EFI_STATUS UnmapStatus; BlockSize = Dev->BlockIoMedia.BlockSize; @@ -280,11 +277,11 @@ SynchronousRequest ( // Prepare virtio-blk request header, setting zero size for flush. // IO Priority is homogeneously 0. // - Request.Type = RequestIsWrite ? - (BufferSize == 0 ? VIRTIO_BLK_T_FLUSH : VIRTIO_BLK_T_OUT) : - VIRTIO_BLK_T_IN; + Request.Type = RequestIsWrite ? + (BufferSize == 0 ? VIRTIO_BLK_T_FLUSH : VIRTIO_BLK_T_OUT) : + VIRTIO_BLK_T_IN; Request.IoPrio = 0; - Request.Sector = MultU64x32(Lba, BlockSize / 512); + Request.Sector = MultU64x32 (Lba, BlockSize / 512); // // Host status is bi-directional (we preset with a value and expect the @@ -309,7 +306,7 @@ SynchronousRequest ( Status = VirtioMapAllBytesInSharedBuffer ( Dev->VirtIo, VirtioOperationBusMasterRead, - (VOID *) &Request, + (VOID *)&Request, sizeof Request, &RequestDeviceAddress, &RequestMapping @@ -328,7 +325,7 @@ SynchronousRequest ( (RequestIsWrite ? VirtioOperationBusMasterRead : VirtioOperationBusMasterWrite), - (VOID *) Buffer, + (VOID *)Buffer, BufferSize, &BufferDeviceAddress, &BufferMapping @@ -400,7 +397,7 @@ SynchronousRequest ( VirtioAppendDesc ( &Dev->Ring, BufferDeviceAddress, - (UINT32) BufferSize, + (UINT32)BufferSize, VRING_DESC_F_NEXT | (RequestIsWrite ? 0 : VRING_DESC_F_WRITE), &Indices ); @@ -420,9 +417,15 @@ SynchronousRequest ( // // virtio-blk's only virtqueue is #0, called "requestq" (see Appendix D). // - if (VirtioFlush (Dev->VirtIo, 0, &Dev->Ring, &Indices, - NULL) == EFI_SUCCESS && - *HostStatus == VIRTIO_BLK_S_OK) { + if ((VirtioFlush ( + Dev->VirtIo, + 0, + &Dev->Ring, + &Indices, + NULL + ) == EFI_SUCCESS) && + (*HostStatus == VIRTIO_BLK_S_OK)) + { Status = EFI_SUCCESS; } else { Status = EFI_DEVICE_ERROR; @@ -454,7 +457,6 @@ FreeHostStatusBuffer: return Status; } - /** ReadBlocks() operation for virtio-blk. @@ -472,25 +474,24 @@ FreeHostStatusBuffer: successfully. **/ - EFI_STATUS EFIAPI VirtioBlkReadBlocks ( - IN EFI_BLOCK_IO_PROTOCOL *This, - IN UINT32 MediaId, - IN EFI_LBA Lba, - IN UINTN BufferSize, - OUT VOID *Buffer + IN EFI_BLOCK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + OUT VOID *Buffer ) { - VBLK_DEV *Dev; - EFI_STATUS Status; + VBLK_DEV *Dev; + EFI_STATUS Status; if (BufferSize == 0) { return EFI_SUCCESS; } - Dev = VIRTIO_BLK_FROM_BLOCK_IO (This); + Dev = VIRTIO_BLK_FROM_BLOCK_IO (This); Status = VerifyReadWriteRequest ( &Dev->BlockIoMedia, Lba, @@ -527,25 +528,24 @@ VirtioBlkReadBlocks ( successfully. **/ - EFI_STATUS EFIAPI VirtioBlkWriteBlocks ( - IN EFI_BLOCK_IO_PROTOCOL *This, - IN UINT32 MediaId, - IN EFI_LBA Lba, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_BLOCK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + IN VOID *Buffer ) { - VBLK_DEV *Dev; - EFI_STATUS Status; + VBLK_DEV *Dev; + EFI_STATUS Status; if (BufferSize == 0) { return EFI_SUCCESS; } - Dev = VIRTIO_BLK_FROM_BLOCK_IO (This); + Dev = VIRTIO_BLK_FROM_BLOCK_IO (This); Status = VerifyReadWriteRequest ( &Dev->BlockIoMedia, Lba, @@ -565,7 +565,6 @@ VirtioBlkWriteBlocks ( ); } - /** FlushBlocks() operation for virtio-blk. @@ -582,28 +581,26 @@ VirtioBlkWriteBlocks ( Should they do nonetheless, we do nothing, successfully. **/ - EFI_STATUS EFIAPI VirtioBlkFlushBlocks ( - IN EFI_BLOCK_IO_PROTOCOL *This + IN EFI_BLOCK_IO_PROTOCOL *This ) { - VBLK_DEV *Dev; + VBLK_DEV *Dev; Dev = VIRTIO_BLK_FROM_BLOCK_IO (This); return Dev->BlockIoMedia.WriteCaching ? - SynchronousRequest ( - Dev, - 0, // Lba - 0, // BufferSize - NULL, // Buffer - TRUE // RequestIsWrite - ) : - EFI_SUCCESS; + SynchronousRequest ( + Dev, + 0, // Lba + 0, // BufferSize + NULL, // Buffer + TRUE // RequestIsWrite + ) : + EFI_SUCCESS; } - /** Device probe function for this driver. @@ -640,17 +637,16 @@ VirtioBlkFlushBlocks ( the VirtIo protocol. **/ - EFI_STATUS EFIAPI VirtioBlkDriverBindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - VIRTIO_DEVICE_PROTOCOL *VirtIo; + EFI_STATUS Status; + VIRTIO_DEVICE_PROTOCOL *VirtIo; // // Attempt to open the device with the VirtIo set of interfaces. On success, @@ -679,12 +675,15 @@ VirtioBlkDriverBindingSupported ( // We needed VirtIo access only transitorily, to see whether we support the // device or not. // - gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); return Status; } - /** Set up all BlockIo and virtio-blk aspects of this driver for the specified @@ -704,47 +703,46 @@ VirtioBlkDriverBindingSupported ( VirtioRingMap(). **/ - STATIC EFI_STATUS EFIAPI VirtioBlkInit ( - IN OUT VBLK_DEV *Dev + IN OUT VBLK_DEV *Dev ) { - UINT8 NextDevStat; - EFI_STATUS Status; - - UINT64 Features; - UINT64 NumSectors; - UINT32 BlockSize; - UINT8 PhysicalBlockExp; - UINT8 AlignmentOffset; - UINT32 OptIoSize; - UINT16 QueueSize; - UINT64 RingBaseShift; + UINT8 NextDevStat; + EFI_STATUS Status; + + UINT64 Features; + UINT64 NumSectors; + UINT32 BlockSize; + UINT8 PhysicalBlockExp; + UINT8 AlignmentOffset; + UINT32 OptIoSize; + UINT16 QueueSize; + UINT64 RingBaseShift; PhysicalBlockExp = 0; - AlignmentOffset = 0; - OptIoSize = 0; + AlignmentOffset = 0; + OptIoSize = 0; // // Execute virtio-0.9.5, 2.2.1 Device Initialization Sequence. // NextDevStat = 0; // step 1 -- reset device - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } NextDevStat |= VSTAT_ACK; // step 2 -- acknowledge device presence - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } NextDevStat |= VSTAT_DRIVER; // step 3 -- we know how to drive it - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } @@ -769,6 +767,7 @@ VirtioBlkInit ( if (EFI_ERROR (Status)) { goto Failed; } + if (NumSectors == 0) { Status = EFI_UNSUPPORTED; goto Failed; @@ -779,8 +778,10 @@ VirtioBlkInit ( if (EFI_ERROR (Status)) { goto Failed; } - if (BlockSize == 0 || BlockSize % 512 != 0 || - ModU64x32 (NumSectors, BlockSize / 512) != 0) { + + if ((BlockSize == 0) || (BlockSize % 512 != 0) || + (ModU64x32 (NumSectors, BlockSize / 512) != 0)) + { // // We can only handle a logical block consisting of whole sectors, // and only a disk composed of whole logical blocks. @@ -788,17 +789,20 @@ VirtioBlkInit ( Status = EFI_UNSUPPORTED; goto Failed; } - } - else { + } else { BlockSize = 512; } if (Features & VIRTIO_BLK_F_TOPOLOGY) { - Status = VIRTIO_CFG_READ (Dev, Topology.PhysicalBlockExp, - &PhysicalBlockExp); + Status = VIRTIO_CFG_READ ( + Dev, + Topology.PhysicalBlockExp, + &PhysicalBlockExp + ); if (EFI_ERROR (Status)) { goto Failed; } + if (PhysicalBlockExp >= 32) { Status = EFI_UNSUPPORTED; goto Failed; @@ -837,11 +841,14 @@ VirtioBlkInit ( if (EFI_ERROR (Status)) { goto Failed; } + Status = Dev->VirtIo->GetQueueNumMax (Dev->VirtIo, &QueueSize); if (EFI_ERROR (Status)) { goto Failed; } - if (QueueSize < 3) { // SynchronousRequest() uses at most three descriptors + + if (QueueSize < 3) { + // SynchronousRequest() uses at most three descriptors Status = EFI_UNSUPPORTED; goto Failed; } @@ -890,13 +897,12 @@ VirtioBlkInit ( goto UnmapQueue; } - // // step 5 -- Report understood features. // if (Dev->VirtIo->Revision < VIRTIO_SPEC_REVISION (1, 0, 0)) { Features &= ~(UINT64)(VIRTIO_F_VERSION_1 | VIRTIO_F_IOMMU_PLATFORM); - Status = Dev->VirtIo->SetGuestFeatures (Dev->VirtIo, Features); + Status = Dev->VirtIo->SetGuestFeatures (Dev->VirtIo, Features); if (EFI_ERROR (Status)) { goto UnmapQueue; } @@ -906,7 +912,7 @@ VirtioBlkInit ( // step 6 -- initialization complete // NextDevStat |= VSTAT_DRIVER_OK; - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto UnmapQueue; } @@ -925,30 +931,45 @@ VirtioBlkInit ( Dev->BlockIoMedia.RemovableMedia = FALSE; Dev->BlockIoMedia.MediaPresent = TRUE; Dev->BlockIoMedia.LogicalPartition = FALSE; - Dev->BlockIoMedia.ReadOnly = (BOOLEAN) ((Features & VIRTIO_BLK_F_RO) != 0); - Dev->BlockIoMedia.WriteCaching = (BOOLEAN) ((Features & VIRTIO_BLK_F_FLUSH) != 0); + Dev->BlockIoMedia.ReadOnly = (BOOLEAN)((Features & VIRTIO_BLK_F_RO) != 0); + Dev->BlockIoMedia.WriteCaching = (BOOLEAN)((Features & VIRTIO_BLK_F_FLUSH) != 0); Dev->BlockIoMedia.BlockSize = BlockSize; Dev->BlockIoMedia.IoAlign = 0; - Dev->BlockIoMedia.LastBlock = DivU64x32 (NumSectors, - BlockSize / 512) - 1; - - DEBUG ((DEBUG_INFO, "%a: LbaSize=0x%x[B] NumBlocks=0x%Lx[Lba]\n", - __FUNCTION__, Dev->BlockIoMedia.BlockSize, - Dev->BlockIoMedia.LastBlock + 1)); + Dev->BlockIoMedia.LastBlock = DivU64x32 ( + NumSectors, + BlockSize / 512 + ) - 1; + + DEBUG (( + DEBUG_INFO, + "%a: LbaSize=0x%x[B] NumBlocks=0x%Lx[Lba]\n", + __FUNCTION__, + Dev->BlockIoMedia.BlockSize, + Dev->BlockIoMedia.LastBlock + 1 + )); if (Features & VIRTIO_BLK_F_TOPOLOGY) { Dev->BlockIo.Revision = EFI_BLOCK_IO_PROTOCOL_REVISION3; - Dev->BlockIoMedia.LowestAlignedLba = AlignmentOffset; - Dev->BlockIoMedia.LogicalBlocksPerPhysicalBlock = 1u << PhysicalBlockExp; + Dev->BlockIoMedia.LowestAlignedLba = AlignmentOffset; + Dev->BlockIoMedia.LogicalBlocksPerPhysicalBlock = 1u << PhysicalBlockExp; Dev->BlockIoMedia.OptimalTransferLengthGranularity = OptIoSize; - DEBUG ((DEBUG_INFO, "%a: FirstAligned=0x%Lx[Lba] PhysBlkSize=0x%x[Lba]\n", - __FUNCTION__, Dev->BlockIoMedia.LowestAlignedLba, - Dev->BlockIoMedia.LogicalBlocksPerPhysicalBlock)); - DEBUG ((DEBUG_INFO, "%a: OptimalTransferLengthGranularity=0x%x[Lba]\n", - __FUNCTION__, Dev->BlockIoMedia.OptimalTransferLengthGranularity)); + DEBUG (( + DEBUG_INFO, + "%a: FirstAligned=0x%Lx[Lba] PhysBlkSize=0x%x[Lba]\n", + __FUNCTION__, + Dev->BlockIoMedia.LowestAlignedLba, + Dev->BlockIoMedia.LogicalBlocksPerPhysicalBlock + )); + DEBUG (( + DEBUG_INFO, + "%a: OptimalTransferLengthGranularity=0x%x[Lba]\n", + __FUNCTION__, + Dev->BlockIoMedia.OptimalTransferLengthGranularity + )); } + return EFI_SUCCESS; UnmapQueue: @@ -968,7 +989,6 @@ Failed: return Status; // reached only via Failed above } - /** Uninitialize the internals of a virtio-blk device that has been successfully @@ -977,12 +997,11 @@ Failed: @param[in out] Dev The device to clean up. **/ - STATIC VOID EFIAPI VirtioBlkUninit ( - IN OUT VBLK_DEV *Dev + IN OUT VBLK_DEV *Dev ) { // @@ -995,11 +1014,10 @@ VirtioBlkUninit ( Dev->VirtIo->UnmapSharedBuffer (Dev->VirtIo, Dev->RingMap); VirtioRingUninit (Dev->VirtIo, &Dev->Ring); - SetMem (&Dev->BlockIo, sizeof Dev->BlockIo, 0x00); + SetMem (&Dev->BlockIo, sizeof Dev->BlockIo, 0x00); SetMem (&Dev->BlockIoMedia, sizeof Dev->BlockIoMedia, 0x00); } - /** Event notification function enqueued by ExitBootServices(). @@ -1009,16 +1027,15 @@ VirtioBlkUninit ( @param[in] Context Pointer to the VBLK_DEV structure. **/ - STATIC VOID EFIAPI VirtioBlkExitBoot ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - VBLK_DEV *Dev; + VBLK_DEV *Dev; DEBUG ((DEBUG_VERBOSE, "%a: Context=0x%p\n", __FUNCTION__, Context)); // @@ -1060,26 +1077,30 @@ VirtioBlkExitBoot ( or the InstallProtocolInterface() boot service. **/ - EFI_STATUS EFIAPI VirtioBlkDriverBindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - VBLK_DEV *Dev; - EFI_STATUS Status; + VBLK_DEV *Dev; + EFI_STATUS Status; - Dev = (VBLK_DEV *) AllocateZeroPool (sizeof *Dev); + Dev = (VBLK_DEV *)AllocateZeroPool (sizeof *Dev); if (Dev == NULL) { return EFI_OUT_OF_RESOURCES; } - Status = gBS->OpenProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - (VOID **)&Dev->VirtIo, This->DriverBindingHandle, - DeviceHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); + Status = gBS->OpenProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + (VOID **)&Dev->VirtIo, + This->DriverBindingHandle, + DeviceHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { goto FreeVirtioBlk; } @@ -1092,8 +1113,13 @@ VirtioBlkDriverBindingStart ( goto CloseVirtIo; } - Status = gBS->CreateEvent (EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_CALLBACK, - &VirtioBlkExitBoot, Dev, &Dev->ExitBoot); + Status = gBS->CreateEvent ( + EVT_SIGNAL_EXIT_BOOT_SERVICES, + TPL_CALLBACK, + &VirtioBlkExitBoot, + Dev, + &Dev->ExitBoot + ); if (EFI_ERROR (Status)) { goto UninitDev; } @@ -1102,9 +1128,12 @@ VirtioBlkDriverBindingStart ( // Setup complete, attempt to export the driver instance's BlockIo interface. // Dev->Signature = VBLK_SIG; - Status = gBS->InstallProtocolInterface (&DeviceHandle, - &gEfiBlockIoProtocolGuid, EFI_NATIVE_INTERFACE, - &Dev->BlockIo); + Status = gBS->InstallProtocolInterface ( + &DeviceHandle, + &gEfiBlockIoProtocolGuid, + EFI_NATIVE_INTERFACE, + &Dev->BlockIo + ); if (EFI_ERROR (Status)) { goto CloseExitBoot; } @@ -1118,8 +1147,12 @@ UninitDev: VirtioBlkUninit (Dev); CloseVirtIo: - gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); FreeVirtioBlk: FreePool (Dev); @@ -1127,7 +1160,6 @@ FreeVirtioBlk: return Status; } - /** Stop driving a virtio-blk device and remove its BlockIo interface. @@ -1150,19 +1182,18 @@ FreeVirtioBlk: @param[in] ChildHandleBuffer Ignored (corresponding to NumberOfChildren). **/ - EFI_STATUS EFIAPI VirtioBlkDriverBindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) { - EFI_STATUS Status; - EFI_BLOCK_IO_PROTOCOL *BlockIo; - VBLK_DEV *Dev; + EFI_STATUS Status; + EFI_BLOCK_IO_PROTOCOL *BlockIo; + VBLK_DEV *Dev; Status = gBS->OpenProtocol ( DeviceHandle, // candidate device @@ -1181,8 +1212,11 @@ VirtioBlkDriverBindingStop ( // // Handle Stop() requests for in-use driver instances gracefully. // - Status = gBS->UninstallProtocolInterface (DeviceHandle, - &gEfiBlockIoProtocolGuid, &Dev->BlockIo); + Status = gBS->UninstallProtocolInterface ( + DeviceHandle, + &gEfiBlockIoProtocolGuid, + &Dev->BlockIo + ); if (EFI_ERROR (Status)) { return Status; } @@ -1191,21 +1225,24 @@ VirtioBlkDriverBindingStop ( VirtioBlkUninit (Dev); - gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); FreePool (Dev); return EFI_SUCCESS; } - // // The static object that groups the Supported() (ie. probe), Start() and // Stop() functions of the driver together. Refer to UEFI Spec 2.3.1 + Errata // C, 10.1 EFI Driver Binding Protocol. // -STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { +STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { &VirtioBlkDriverBindingSupported, &VirtioBlkDriverBindingStart, &VirtioBlkDriverBindingStop, @@ -1215,7 +1252,6 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { NULL // DriverBindingHandle, ditto }; - // // The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and // EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name @@ -1229,20 +1265,20 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { // STATIC -EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { +EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { { "eng;en", L"Virtio Block Driver" }, { NULL, NULL } }; STATIC -EFI_COMPONENT_NAME_PROTOCOL gComponentName; +EFI_COMPONENT_NAME_PROTOCOL gComponentName; EFI_STATUS EFIAPI VirtioBlkGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) { return LookupUnicodeString2 ( @@ -1257,39 +1293,38 @@ VirtioBlkGetDriverName ( EFI_STATUS EFIAPI VirtioBlkGetDeviceName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_HANDLE ChildHandle, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_HANDLE ChildHandle, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { return EFI_UNSUPPORTED; } STATIC -EFI_COMPONENT_NAME_PROTOCOL gComponentName = { +EFI_COMPONENT_NAME_PROTOCOL gComponentName = { &VirtioBlkGetDriverName, &VirtioBlkGetDeviceName, "eng" // SupportedLanguages, ISO 639-2 language codes }; STATIC -EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &VirtioBlkGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &VirtioBlkGetDeviceName, +EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&VirtioBlkGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&VirtioBlkGetDeviceName, "en" // SupportedLanguages, RFC 4646 language codes }; - // // Entry point of this driver. // EFI_STATUS EFIAPI VirtioBlkEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { return EfiLibInstallDriverBindingComponentName2 ( @@ -1301,4 +1336,3 @@ VirtioBlkEntryPoint ( &gComponentName2 ); } - diff --git a/OvmfPkg/VirtioBlkDxe/VirtioBlk.h b/OvmfPkg/VirtioBlkDxe/VirtioBlk.h index efbbe2162f..54a96626ff 100644 --- a/OvmfPkg/VirtioBlkDxe/VirtioBlk.h +++ b/OvmfPkg/VirtioBlkDxe/VirtioBlk.h @@ -18,8 +18,7 @@ #include - -#define VBLK_SIG SIGNATURE_32 ('V', 'B', 'L', 'K') +#define VBLK_SIG SIGNATURE_32 ('V', 'B', 'L', 'K') typedef struct { // @@ -29,19 +28,18 @@ typedef struct { // // field init function init dpth // --------------------- ------------------ --------- - UINT32 Signature; // DriverBindingStart 0 - VIRTIO_DEVICE_PROTOCOL *VirtIo; // DriverBindingStart 0 - EFI_EVENT ExitBoot; // DriverBindingStart 0 - VRING Ring; // VirtioRingInit 2 - EFI_BLOCK_IO_PROTOCOL BlockIo; // VirtioBlkInit 1 - EFI_BLOCK_IO_MEDIA BlockIoMedia; // VirtioBlkInit 1 - VOID *RingMap; // VirtioRingMap 2 + UINT32 Signature; // DriverBindingStart 0 + VIRTIO_DEVICE_PROTOCOL *VirtIo; // DriverBindingStart 0 + EFI_EVENT ExitBoot; // DriverBindingStart 0 + VRING Ring; // VirtioRingInit 2 + EFI_BLOCK_IO_PROTOCOL BlockIo; // VirtioBlkInit 1 + EFI_BLOCK_IO_MEDIA BlockIoMedia; // VirtioBlkInit 1 + VOID *RingMap; // VirtioRingMap 2 } VBLK_DEV; #define VIRTIO_BLK_FROM_BLOCK_IO(BlockIoPointer) \ CR (BlockIoPointer, VBLK_DEV, BlockIo, VBLK_SIG) - /** Device probe function for this driver. @@ -81,12 +79,11 @@ typedef struct { EFI_STATUS EFIAPI VirtioBlkDriverBindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); - /** After we've pronounced support for a specific device in @@ -119,12 +116,11 @@ VirtioBlkDriverBindingSupported ( EFI_STATUS EFIAPI VirtioBlkDriverBindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); - /** Stop driving a virtio-blk device and remove its BlockIo interface. @@ -151,13 +147,12 @@ VirtioBlkDriverBindingStart ( EFI_STATUS EFIAPI VirtioBlkDriverBindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ); - // // UEFI Spec 2.3.1 + Errata C, 12.8 EFI Block I/O Protocol // Driver Writer's Guide for UEFI 2.3.1 v1.01, @@ -166,11 +161,10 @@ VirtioBlkDriverBindingStop ( EFI_STATUS EFIAPI VirtioBlkReset ( - IN EFI_BLOCK_IO_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EFI_BLOCK_IO_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ); - /** ReadBlocks() operation for virtio-blk. @@ -192,14 +186,13 @@ VirtioBlkReset ( EFI_STATUS EFIAPI VirtioBlkReadBlocks ( - IN EFI_BLOCK_IO_PROTOCOL *This, - IN UINT32 MediaId, - IN EFI_LBA Lba, - IN UINTN BufferSize, - OUT VOID *Buffer + IN EFI_BLOCK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + OUT VOID *Buffer ); - /** WriteBlocks() operation for virtio-blk. @@ -221,14 +214,13 @@ VirtioBlkReadBlocks ( EFI_STATUS EFIAPI VirtioBlkWriteBlocks ( - IN EFI_BLOCK_IO_PROTOCOL *This, - IN UINT32 MediaId, - IN EFI_LBA Lba, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_BLOCK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + IN VOID *Buffer ); - /** FlushBlocks() operation for virtio-blk. @@ -249,10 +241,9 @@ VirtioBlkWriteBlocks ( EFI_STATUS EFIAPI VirtioBlkFlushBlocks ( - IN EFI_BLOCK_IO_PROTOCOL *This + IN EFI_BLOCK_IO_PROTOCOL *This ); - // // The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and // EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name @@ -268,19 +259,19 @@ VirtioBlkFlushBlocks ( EFI_STATUS EFIAPI VirtioBlkGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ); EFI_STATUS EFIAPI VirtioBlkGetDeviceName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_HANDLE ChildHandle, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_HANDLE ChildHandle, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ); #endif // _VIRTIO_BLK_DXE_H_ diff --git a/OvmfPkg/VirtioFsDxe/DriverBinding.c b/OvmfPkg/VirtioFsDxe/DriverBinding.c index e273c9f362..86eb9cf0ba 100644 --- a/OvmfPkg/VirtioFsDxe/DriverBinding.c +++ b/OvmfPkg/VirtioFsDxe/DriverBinding.c @@ -17,8 +17,8 @@ // // UEFI Driver Model protocol instances. // -STATIC EFI_DRIVER_BINDING_PROTOCOL mDriverBinding; -STATIC EFI_COMPONENT_NAME2_PROTOCOL mComponentName2; +STATIC EFI_DRIVER_BINDING_PROTOCOL mDriverBinding; +STATIC EFI_COMPONENT_NAME2_PROTOCOL mComponentName2; // // UEFI Driver Model protocol member functions. @@ -26,18 +26,23 @@ STATIC EFI_COMPONENT_NAME2_PROTOCOL mComponentName2; EFI_STATUS EFIAPI VirtioFsBindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - EFI_STATUS Status; - VIRTIO_DEVICE_PROTOCOL *Virtio; - EFI_STATUS CloseStatus; - - Status = gBS->OpenProtocol (ControllerHandle, &gVirtioDeviceProtocolGuid, - (VOID **)&Virtio, This->DriverBindingHandle, - ControllerHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); + EFI_STATUS Status; + VIRTIO_DEVICE_PROTOCOL *Virtio; + EFI_STATUS CloseStatus; + + Status = gBS->OpenProtocol ( + ControllerHandle, + &gVirtioDeviceProtocolGuid, + (VOID **)&Virtio, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { return Status; } @@ -46,9 +51,12 @@ VirtioFsBindingSupported ( Status = EFI_UNSUPPORTED; } - CloseStatus = gBS->CloseProtocol (ControllerHandle, - &gVirtioDeviceProtocolGuid, This->DriverBindingHandle, - ControllerHandle); + CloseStatus = gBS->CloseProtocol ( + ControllerHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); ASSERT_EFI_ERROR (CloseStatus); return Status; @@ -57,24 +65,30 @@ VirtioFsBindingSupported ( EFI_STATUS EFIAPI VirtioFsBindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - VIRTIO_FS *VirtioFs; - EFI_STATUS Status; - EFI_STATUS CloseStatus; + VIRTIO_FS *VirtioFs; + EFI_STATUS Status; + EFI_STATUS CloseStatus; VirtioFs = AllocatePool (sizeof *VirtioFs); if (VirtioFs == NULL) { return EFI_OUT_OF_RESOURCES; } + VirtioFs->Signature = VIRTIO_FS_SIG; - Status = gBS->OpenProtocol (ControllerHandle, &gVirtioDeviceProtocolGuid, - (VOID **)&VirtioFs->Virtio, This->DriverBindingHandle, - ControllerHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); + Status = gBS->OpenProtocol ( + ControllerHandle, + &gVirtioDeviceProtocolGuid, + (VOID **)&VirtioFs->Virtio, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { goto FreeVirtioFs; } @@ -89,8 +103,13 @@ VirtioFsBindingStart ( goto UninitVirtioFs; } - Status = gBS->CreateEvent (EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_CALLBACK, - VirtioFsExitBoot, VirtioFs, &VirtioFs->ExitBoot); + Status = gBS->CreateEvent ( + EVT_SIGNAL_EXIT_BOOT_SERVICES, + TPL_CALLBACK, + VirtioFsExitBoot, + VirtioFs, + &VirtioFs->ExitBoot + ); if (EFI_ERROR (Status)) { goto UninitVirtioFs; } @@ -99,9 +118,12 @@ VirtioFsBindingStart ( VirtioFs->SimpleFs.Revision = EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION; VirtioFs->SimpleFs.OpenVolume = VirtioFsOpenVolume; - Status = gBS->InstallProtocolInterface (&ControllerHandle, - &gEfiSimpleFileSystemProtocolGuid, EFI_NATIVE_INTERFACE, - &VirtioFs->SimpleFs); + Status = gBS->InstallProtocolInterface ( + &ControllerHandle, + &gEfiSimpleFileSystemProtocolGuid, + EFI_NATIVE_INTERFACE, + &VirtioFs->SimpleFs + ); if (EFI_ERROR (Status)) { goto CloseExitBoot; } @@ -116,9 +138,12 @@ UninitVirtioFs: VirtioFsUninit (VirtioFs); CloseVirtio: - CloseStatus = gBS->CloseProtocol (ControllerHandle, - &gVirtioDeviceProtocolGuid, This->DriverBindingHandle, - ControllerHandle); + CloseStatus = gBS->CloseProtocol ( + ControllerHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); ASSERT_EFI_ERROR (CloseStatus); FreeVirtioFs: @@ -130,20 +155,24 @@ FreeVirtioFs: EFI_STATUS EFIAPI VirtioFsBindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer OPTIONAL + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer OPTIONAL ) { - EFI_STATUS Status; - EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFs; - VIRTIO_FS *VirtioFs; - - Status = gBS->OpenProtocol (ControllerHandle, - &gEfiSimpleFileSystemProtocolGuid, (VOID **)&SimpleFs, - This->DriverBindingHandle, ControllerHandle, - EFI_OPEN_PROTOCOL_GET_PROTOCOL); + EFI_STATUS Status; + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *SimpleFs; + VIRTIO_FS *VirtioFs; + + Status = gBS->OpenProtocol ( + ControllerHandle, + &gEfiSimpleFileSystemProtocolGuid, + (VOID **)&SimpleFs, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); if (EFI_ERROR (Status)) { return Status; } @@ -154,8 +183,11 @@ VirtioFsBindingStop ( return EFI_ACCESS_DENIED; } - Status = gBS->UninstallProtocolInterface (ControllerHandle, - &gEfiSimpleFileSystemProtocolGuid, SimpleFs); + Status = gBS->UninstallProtocolInterface ( + ControllerHandle, + &gEfiSimpleFileSystemProtocolGuid, + SimpleFs + ); if (EFI_ERROR (Status)) { return Status; } @@ -165,8 +197,12 @@ VirtioFsBindingStop ( VirtioFsUninit (VirtioFs); - Status = gBS->CloseProtocol (ControllerHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, ControllerHandle); + Status = gBS->CloseProtocol ( + ControllerHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); ASSERT_EFI_ERROR (Status); FreePool (VirtioFs); @@ -177,14 +213,15 @@ VirtioFsBindingStop ( EFI_STATUS EFIAPI VirtioFsGetDriverName ( - IN EFI_COMPONENT_NAME2_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME2_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) { if (AsciiStrCmp (Language, "en") != 0) { return EFI_UNSUPPORTED; } + *DriverName = L"Virtio Filesystem Driver"; return EFI_SUCCESS; } @@ -192,11 +229,11 @@ VirtioFsGetDriverName ( EFI_STATUS EFIAPI VirtioFsGetControllerName ( - IN EFI_COMPONENT_NAME2_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME2_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { return EFI_UNSUPPORTED; @@ -208,11 +245,11 @@ VirtioFsGetControllerName ( EFI_STATUS EFIAPI VirtioFsEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; + EFI_STATUS Status; mDriverBinding.Supported = VirtioFsBindingSupported; mDriverBinding.Start = VirtioFsBindingStart; @@ -225,8 +262,13 @@ VirtioFsEntryPoint ( mComponentName2.GetControllerName = VirtioFsGetControllerName; mComponentName2.SupportedLanguages = "en"; - Status = gBS->InstallMultipleProtocolInterfaces (&ImageHandle, - &gEfiDriverBindingProtocolGuid, &mDriverBinding, - &gEfiComponentName2ProtocolGuid, &mComponentName2, NULL); + Status = gBS->InstallMultipleProtocolInterfaces ( + &ImageHandle, + &gEfiDriverBindingProtocolGuid, + &mDriverBinding, + &gEfiComponentName2ProtocolGuid, + &mComponentName2, + NULL + ); return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseFlush.c b/OvmfPkg/VirtioFsDxe/FuseFlush.c index b689ad3291..ff5d6f3f5a 100644 --- a/OvmfPkg/VirtioFsDxe/FuseFlush.c +++ b/OvmfPkg/VirtioFsDxe/FuseFlush.c @@ -35,19 +35,19 @@ **/ EFI_STATUS VirtioFsFuseFlush ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - IN UINT64 FuseHandle + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + IN UINT64 FuseHandle ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_FUSE_FLUSH_REQUEST FlushReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_IO_VECTOR RespIoVec[1]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_FUSE_FLUSH_REQUEST FlushReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_IO_VECTOR RespIoVec[1]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Set up the scatter-gather lists. @@ -75,8 +75,13 @@ VirtioFsFuseFlush ( // // Populate the common request header. // - Status = VirtioFsFuseNewRequest (VirtioFs, &CommonReq, ReqSgList.TotalSize, - VirtioFsFuseOpFlush, NodeId); + Status = VirtioFsFuseNewRequest ( + VirtioFs, + &CommonReq, + ReqSgList.TotalSize, + VirtioFsFuseOpFlush, + NodeId + ); if (EFI_ERROR (Status)) { return Status; } @@ -102,10 +107,18 @@ VirtioFsFuseFlush ( // Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, NULL); if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" NodeId=%Lu FuseHandle=%Lu " - "Errno=%d\n", __FUNCTION__, VirtioFs->Label, NodeId, FuseHandle, - CommonResp.Error)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" NodeId=%Lu FuseHandle=%Lu " + "Errno=%d\n", + __FUNCTION__, + VirtioFs->Label, + NodeId, + FuseHandle, + CommonResp.Error + )); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseForget.c b/OvmfPkg/VirtioFsDxe/FuseForget.c index fdee42cffb..0ed83f1e19 100644 --- a/OvmfPkg/VirtioFsDxe/FuseForget.c +++ b/OvmfPkg/VirtioFsDxe/FuseForget.c @@ -34,15 +34,15 @@ **/ EFI_STATUS VirtioFsFuseForget ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_FUSE_FORGET_REQUEST ForgetReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_FUSE_FORGET_REQUEST ForgetReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + EFI_STATUS Status; // // Set up the scatter-gather list (note: only request). @@ -66,8 +66,13 @@ VirtioFsFuseForget ( // // Populate the common request header. // - Status = VirtioFsFuseNewRequest (VirtioFs, &CommonReq, ReqSgList.TotalSize, - VirtioFsFuseOpForget, NodeId); + Status = VirtioFsFuseNewRequest ( + VirtioFs, + &CommonReq, + ReqSgList.TotalSize, + VirtioFsFuseOpForget, + NodeId + ); if (EFI_ERROR (Status)) { return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseFsync.c b/OvmfPkg/VirtioFsDxe/FuseFsync.c index ea1463cd80..c537b064e6 100644 --- a/OvmfPkg/VirtioFsDxe/FuseFsync.c +++ b/OvmfPkg/VirtioFsDxe/FuseFsync.c @@ -40,20 +40,20 @@ **/ EFI_STATUS VirtioFsFuseFsyncFileOrDir ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - IN UINT64 FuseHandle, - IN BOOLEAN IsDir + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + IN UINT64 FuseHandle, + IN BOOLEAN IsDir ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_FUSE_FSYNC_REQUEST FsyncReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_IO_VECTOR RespIoVec[1]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_FUSE_FSYNC_REQUEST FsyncReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_IO_VECTOR RespIoVec[1]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Set up the scatter-gather lists. @@ -112,10 +112,19 @@ VirtioFsFuseFsyncFileOrDir ( // Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, NULL); if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" NodeId=%Lu FuseHandle=%Lu " - "IsDir=%d Errno=%d\n", __FUNCTION__, VirtioFs->Label, NodeId, FuseHandle, - IsDir, CommonResp.Error)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" NodeId=%Lu FuseHandle=%Lu " + "IsDir=%d Errno=%d\n", + __FUNCTION__, + VirtioFs->Label, + NodeId, + FuseHandle, + IsDir, + CommonResp.Error + )); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseGetAttr.c b/OvmfPkg/VirtioFsDxe/FuseGetAttr.c index 29d8ec8190..1dc0349a55 100644 --- a/OvmfPkg/VirtioFsDxe/FuseGetAttr.c +++ b/OvmfPkg/VirtioFsDxe/FuseGetAttr.c @@ -37,20 +37,20 @@ **/ EFI_STATUS VirtioFsFuseGetAttr ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - OUT VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + OUT VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_FUSE_GETATTR_REQUEST GetAttrReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_FUSE_GETATTR_RESPONSE GetAttrResp; - VIRTIO_FS_IO_VECTOR RespIoVec[3]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_FUSE_GETATTR_REQUEST GetAttrReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_FUSE_GETATTR_RESPONSE GetAttrResp; + VIRTIO_FS_IO_VECTOR RespIoVec[3]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Set up the scatter-gather lists. @@ -82,8 +82,13 @@ VirtioFsFuseGetAttr ( // // Populate the common request header. // - Status = VirtioFsFuseNewRequest (VirtioFs, &CommonReq, ReqSgList.TotalSize, - VirtioFsFuseOpGetAttr, NodeId); + Status = VirtioFsFuseNewRequest ( + VirtioFs, + &CommonReq, + ReqSgList.TotalSize, + VirtioFsFuseOpGetAttr, + NodeId + ); if (EFI_ERROR (Status)) { return Status; } @@ -108,9 +113,16 @@ VirtioFsFuseGetAttr ( // Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, NULL); if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" NodeId=%Lu Errno=%d\n", - __FUNCTION__, VirtioFs->Label, NodeId, CommonResp.Error)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" NodeId=%Lu Errno=%d\n", + __FUNCTION__, + VirtioFs->Label, + NodeId, + CommonResp.Error + )); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseInit.c b/OvmfPkg/VirtioFsDxe/FuseInit.c index 4318428049..d34fc05a50 100644 --- a/OvmfPkg/VirtioFsDxe/FuseInit.c +++ b/OvmfPkg/VirtioFsDxe/FuseInit.c @@ -43,18 +43,18 @@ **/ EFI_STATUS VirtioFsFuseInitSession ( - IN OUT VIRTIO_FS *VirtioFs + IN OUT VIRTIO_FS *VirtioFs ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_FUSE_INIT_REQUEST InitReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_FUSE_INIT_RESPONSE InitResp; - VIRTIO_FS_IO_VECTOR RespIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_FUSE_INIT_REQUEST InitReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_FUSE_INIT_RESPONSE InitResp; + VIRTIO_FS_IO_VECTOR RespIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Initialize the FUSE request counter. @@ -89,8 +89,13 @@ VirtioFsFuseInitSession ( // // Populate the common request header. // - Status = VirtioFsFuseNewRequest (VirtioFs, &CommonReq, ReqSgList.TotalSize, - VirtioFsFuseOpInit, 0); + Status = VirtioFsFuseNewRequest ( + VirtioFs, + &CommonReq, + ReqSgList.TotalSize, + VirtioFsFuseOpInit, + 0 + ); if (EFI_ERROR (Status)) { return Status; } @@ -117,20 +122,27 @@ VirtioFsFuseInitSession ( Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, NULL); if (EFI_ERROR (Status)) { if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" Errno=%d\n", __FUNCTION__, - VirtioFs->Label, CommonResp.Error)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" Errno=%d\n", + __FUNCTION__, + VirtioFs->Label, + CommonResp.Error + )); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } // // Check FUSE interface version / feature compatibility. // - if (InitResp.Major < InitReq.Major || - (InitResp.Major == InitReq.Major && InitResp.Minor < InitReq.Minor) || - (InitResp.Flags & VIRTIO_FS_FUSE_INIT_REQ_F_DO_READDIRPLUS) == 0 || - InitResp.MaxWrite < SIZE_4KB) { + if ((InitResp.Major < InitReq.Major) || + ((InitResp.Major == InitReq.Major) && (InitResp.Minor < InitReq.Minor)) || + ((InitResp.Flags & VIRTIO_FS_FUSE_INIT_REQ_F_DO_READDIRPLUS) == 0) || + (InitResp.MaxWrite < SIZE_4KB)) + { return EFI_UNSUPPORTED; } diff --git a/OvmfPkg/VirtioFsDxe/FuseLookup.c b/OvmfPkg/VirtioFsDxe/FuseLookup.c index 5c9a825e17..f2bda8a547 100644 --- a/OvmfPkg/VirtioFsDxe/FuseLookup.c +++ b/OvmfPkg/VirtioFsDxe/FuseLookup.c @@ -52,21 +52,21 @@ **/ EFI_STATUS VirtioFsFuseLookup ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 DirNodeId, - IN CHAR8 *Name, - OUT UINT64 *NodeId, - OUT VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 DirNodeId, + IN CHAR8 *Name, + OUT UINT64 *NodeId, + OUT VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_FUSE_NODE_RESPONSE NodeResp; - VIRTIO_FS_IO_VECTOR RespIoVec[3]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_FUSE_NODE_RESPONSE NodeResp; + VIRTIO_FS_IO_VECTOR RespIoVec[3]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Set up the scatter-gather lists. @@ -98,8 +98,13 @@ VirtioFsFuseLookup ( // // Populate the common request header. // - Status = VirtioFsFuseNewRequest (VirtioFs, &CommonReq, ReqSgList.TotalSize, - VirtioFsFuseOpLookup, DirNodeId); + Status = VirtioFsFuseNewRequest ( + VirtioFs, + &CommonReq, + ReqSgList.TotalSize, + VirtioFsFuseOpLookup, + DirNodeId + ); if (EFI_ERROR (Status)) { goto Fail; } @@ -132,8 +137,10 @@ VirtioFsFuseLookup ( if (CommonResp.Error == VIRTIO_FS_FUSE_ERRNO_ENOENT) { return EFI_NOT_FOUND; } + Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + goto Fail; } diff --git a/OvmfPkg/VirtioFsDxe/FuseMkDir.c b/OvmfPkg/VirtioFsDxe/FuseMkDir.c index 541ff330cd..409e09a418 100644 --- a/OvmfPkg/VirtioFsDxe/FuseMkDir.c +++ b/OvmfPkg/VirtioFsDxe/FuseMkDir.c @@ -41,22 +41,22 @@ **/ EFI_STATUS VirtioFsFuseMkDir ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 ParentNodeId, - IN CHAR8 *Name, - OUT UINT64 *NodeId + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 ParentNodeId, + IN CHAR8 *Name, + OUT UINT64 *NodeId ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_FUSE_MKDIR_REQUEST MkDirReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[3]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_FUSE_NODE_RESPONSE NodeResp; - VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE AttrResp; - VIRTIO_FS_IO_VECTOR RespIoVec[3]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_FUSE_MKDIR_REQUEST MkDirReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[3]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_FUSE_NODE_RESPONSE NodeResp; + VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE AttrResp; + VIRTIO_FS_IO_VECTOR RespIoVec[3]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Set up the scatter-gather lists. @@ -90,8 +90,13 @@ VirtioFsFuseMkDir ( // // Populate the common request header. // - Status = VirtioFsFuseNewRequest (VirtioFs, &CommonReq, ReqSgList.TotalSize, - VirtioFsFuseOpMkDir, ParentNodeId); + Status = VirtioFsFuseNewRequest ( + VirtioFs, + &CommonReq, + ReqSgList.TotalSize, + VirtioFsFuseOpMkDir, + ParentNodeId + ); if (EFI_ERROR (Status)) { return Status; } @@ -99,9 +104,9 @@ VirtioFsFuseMkDir ( // // Populate the FUSE_MKDIR-specific fields. // - MkDirReq.Mode = (VIRTIO_FS_FUSE_MODE_PERM_RWXU | - VIRTIO_FS_FUSE_MODE_PERM_RWXG | - VIRTIO_FS_FUSE_MODE_PERM_RWXO); + MkDirReq.Mode = (VIRTIO_FS_FUSE_MODE_PERM_RWXU | + VIRTIO_FS_FUSE_MODE_PERM_RWXG | + VIRTIO_FS_FUSE_MODE_PERM_RWXO); MkDirReq.Umask = 0; // @@ -118,11 +123,19 @@ VirtioFsFuseMkDir ( Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, NULL); if (EFI_ERROR (Status)) { if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" ParentNodeId=%Lu Name=\"%a\" " - "Errno=%d\n", __FUNCTION__, VirtioFs->Label, ParentNodeId, Name, - CommonResp.Error)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" ParentNodeId=%Lu Name=\"%a\" " + "Errno=%d\n", + __FUNCTION__, + VirtioFs->Label, + ParentNodeId, + Name, + CommonResp.Error + )); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseOpen.c b/OvmfPkg/VirtioFsDxe/FuseOpen.c index b731580729..64015bb6cc 100644 --- a/OvmfPkg/VirtioFsDxe/FuseOpen.c +++ b/OvmfPkg/VirtioFsDxe/FuseOpen.c @@ -38,21 +38,21 @@ **/ EFI_STATUS VirtioFsFuseOpen ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - IN BOOLEAN ReadWrite, - OUT UINT64 *FuseHandle + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + IN BOOLEAN ReadWrite, + OUT UINT64 *FuseHandle ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_FUSE_OPEN_REQUEST OpenReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_FUSE_OPEN_RESPONSE OpenResp; - VIRTIO_FS_IO_VECTOR RespIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_FUSE_OPEN_REQUEST OpenReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_FUSE_OPEN_RESPONSE OpenResp; + VIRTIO_FS_IO_VECTOR RespIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Set up the scatter-gather lists. @@ -82,8 +82,13 @@ VirtioFsFuseOpen ( // // Populate the common request header. // - Status = VirtioFsFuseNewRequest (VirtioFs, &CommonReq, ReqSgList.TotalSize, - VirtioFsFuseOpOpen, NodeId); + Status = VirtioFsFuseNewRequest ( + VirtioFs, + &CommonReq, + ReqSgList.TotalSize, + VirtioFsFuseOpOpen, + NodeId + ); if (EFI_ERROR (Status)) { return Status; } @@ -91,9 +96,9 @@ VirtioFsFuseOpen ( // // Populate the FUSE_OPEN-specific fields. // - OpenReq.Flags = (ReadWrite ? - VIRTIO_FS_FUSE_OPEN_REQ_F_RDWR : - VIRTIO_FS_FUSE_OPEN_REQ_F_RDONLY); + OpenReq.Flags = (ReadWrite ? + VIRTIO_FS_FUSE_OPEN_REQ_F_RDWR : + VIRTIO_FS_FUSE_OPEN_REQ_F_RDONLY); OpenReq.Unused = 0; // @@ -110,11 +115,19 @@ VirtioFsFuseOpen ( Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, NULL); if (EFI_ERROR (Status)) { if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" NodeId=%Lu ReadWrite=%d " - "Errno=%d\n", __FUNCTION__, VirtioFs->Label, NodeId, ReadWrite, - CommonResp.Error)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" NodeId=%Lu ReadWrite=%d " + "Errno=%d\n", + __FUNCTION__, + VirtioFs->Label, + NodeId, + ReadWrite, + CommonResp.Error + )); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseOpenDir.c b/OvmfPkg/VirtioFsDxe/FuseOpenDir.c index eef522693c..e49c046b9d 100644 --- a/OvmfPkg/VirtioFsDxe/FuseOpenDir.c +++ b/OvmfPkg/VirtioFsDxe/FuseOpenDir.c @@ -36,20 +36,20 @@ **/ EFI_STATUS VirtioFsFuseOpenDir ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - OUT UINT64 *FuseHandle + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + OUT UINT64 *FuseHandle ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_FUSE_OPEN_REQUEST OpenReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_FUSE_OPEN_RESPONSE OpenResp; - VIRTIO_FS_IO_VECTOR RespIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_FUSE_OPEN_REQUEST OpenReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_FUSE_OPEN_RESPONSE OpenResp; + VIRTIO_FS_IO_VECTOR RespIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Set up the scatter-gather lists. @@ -79,8 +79,13 @@ VirtioFsFuseOpenDir ( // // Populate the common request header. // - Status = VirtioFsFuseNewRequest (VirtioFs, &CommonReq, ReqSgList.TotalSize, - VirtioFsFuseOpOpenDir, NodeId); + Status = VirtioFsFuseNewRequest ( + VirtioFs, + &CommonReq, + ReqSgList.TotalSize, + VirtioFsFuseOpOpenDir, + NodeId + ); if (EFI_ERROR (Status)) { return Status; } @@ -105,10 +110,17 @@ VirtioFsFuseOpenDir ( Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, NULL); if (EFI_ERROR (Status)) { if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" NodeId=%Lu Errno=%d\n", - __FUNCTION__, VirtioFs->Label, NodeId, CommonResp.Error)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" NodeId=%Lu Errno=%d\n", + __FUNCTION__, + VirtioFs->Label, + NodeId, + CommonResp.Error + )); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseOpenOrCreate.c b/OvmfPkg/VirtioFsDxe/FuseOpenOrCreate.c index 60ab002bcd..4d9846ab3b 100644 --- a/OvmfPkg/VirtioFsDxe/FuseOpenOrCreate.c +++ b/OvmfPkg/VirtioFsDxe/FuseOpenOrCreate.c @@ -46,24 +46,24 @@ **/ EFI_STATUS VirtioFsFuseOpenOrCreate ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 ParentNodeId, - IN CHAR8 *Name, - OUT UINT64 *NodeId, - OUT UINT64 *FuseHandle + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 ParentNodeId, + IN CHAR8 *Name, + OUT UINT64 *NodeId, + OUT UINT64 *FuseHandle ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_FUSE_CREATE_REQUEST CreateReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[3]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_FUSE_NODE_RESPONSE NodeResp; - VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE AttrResp; - VIRTIO_FS_FUSE_OPEN_RESPONSE OpenResp; - VIRTIO_FS_IO_VECTOR RespIoVec[4]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_FUSE_CREATE_REQUEST CreateReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[3]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_FUSE_NODE_RESPONSE NodeResp; + VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE AttrResp; + VIRTIO_FS_FUSE_OPEN_RESPONSE OpenResp; + VIRTIO_FS_IO_VECTOR RespIoVec[4]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Set up the scatter-gather lists. @@ -99,8 +99,13 @@ VirtioFsFuseOpenOrCreate ( // // Populate the common request header. // - Status = VirtioFsFuseNewRequest (VirtioFs, &CommonReq, ReqSgList.TotalSize, - VirtioFsFuseOpCreate, ParentNodeId); + Status = VirtioFsFuseNewRequest ( + VirtioFs, + &CommonReq, + ReqSgList.TotalSize, + VirtioFsFuseOpCreate, + ParentNodeId + ); if (EFI_ERROR (Status)) { return Status; } @@ -113,13 +118,13 @@ VirtioFsFuseOpenOrCreate ( // the only OpenMode of EFI_FILE_PROTOCOL.Open() that enables filesystem // object creation -- that is, Create/Read/Write. // - CreateReq.Flags = VIRTIO_FS_FUSE_OPEN_REQ_F_RDWR; - CreateReq.Mode = (VIRTIO_FS_FUSE_MODE_PERM_RUSR | - VIRTIO_FS_FUSE_MODE_PERM_WUSR | - VIRTIO_FS_FUSE_MODE_PERM_RGRP | - VIRTIO_FS_FUSE_MODE_PERM_WGRP | - VIRTIO_FS_FUSE_MODE_PERM_ROTH | - VIRTIO_FS_FUSE_MODE_PERM_WOTH); + CreateReq.Flags = VIRTIO_FS_FUSE_OPEN_REQ_F_RDWR; + CreateReq.Mode = (VIRTIO_FS_FUSE_MODE_PERM_RUSR | + VIRTIO_FS_FUSE_MODE_PERM_WUSR | + VIRTIO_FS_FUSE_MODE_PERM_RGRP | + VIRTIO_FS_FUSE_MODE_PERM_WGRP | + VIRTIO_FS_FUSE_MODE_PERM_ROTH | + VIRTIO_FS_FUSE_MODE_PERM_WOTH); CreateReq.Umask = 0; CreateReq.Padding = 0; @@ -137,11 +142,19 @@ VirtioFsFuseOpenOrCreate ( Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, NULL); if (EFI_ERROR (Status)) { if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" ParentNodeId=%Lu Name=\"%a\" " - "Errno=%d\n", __FUNCTION__, VirtioFs->Label, ParentNodeId, Name, - CommonResp.Error)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" ParentNodeId=%Lu Name=\"%a\" " + "Errno=%d\n", + __FUNCTION__, + VirtioFs->Label, + ParentNodeId, + Name, + CommonResp.Error + )); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseRead.c b/OvmfPkg/VirtioFsDxe/FuseRead.c index 1611e298b9..013dac7e52 100644 --- a/OvmfPkg/VirtioFsDxe/FuseRead.c +++ b/OvmfPkg/VirtioFsDxe/FuseRead.c @@ -87,24 +87,24 @@ **/ EFI_STATUS VirtioFsFuseReadFileOrDir ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - IN UINT64 FuseHandle, - IN BOOLEAN IsDir, - IN UINT64 Offset, - IN OUT UINT32 *Size, - OUT VOID *Data + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + IN UINT64 FuseHandle, + IN BOOLEAN IsDir, + IN UINT64 Offset, + IN OUT UINT32 *Size, + OUT VOID *Data ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_FUSE_READ_REQUEST ReadReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_IO_VECTOR RespIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; - UINTN TailBufferFill; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_FUSE_READ_REQUEST ReadReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_IO_VECTOR RespIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; + UINTN TailBufferFill; // // Set up the scatter-gather lists. @@ -167,16 +167,30 @@ VirtioFsFuseReadFileOrDir ( // // Verify the response. Note that TailBufferFill is variable. // - Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, - &TailBufferFill); + Status = VirtioFsFuseCheckResponse ( + &RespSgList, + CommonReq.Unique, + &TailBufferFill + ); if (EFI_ERROR (Status)) { if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" NodeId=%Lu FuseHandle=%Lu " - "IsDir=%d Offset=0x%Lx Size=0x%x Data@%p Errno=%d\n", __FUNCTION__, - VirtioFs->Label, NodeId, FuseHandle, IsDir, Offset, *Size, Data, - CommonResp.Error)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" NodeId=%Lu FuseHandle=%Lu " + "IsDir=%d Offset=0x%Lx Size=0x%x Data@%p Errno=%d\n", + __FUNCTION__, + VirtioFs->Label, + NodeId, + FuseHandle, + IsDir, + Offset, + *Size, + Data, + CommonResp.Error + )); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseRelease.c b/OvmfPkg/VirtioFsDxe/FuseRelease.c index dd45c7864f..c8363158f5 100644 --- a/OvmfPkg/VirtioFsDxe/FuseRelease.c +++ b/OvmfPkg/VirtioFsDxe/FuseRelease.c @@ -39,20 +39,20 @@ **/ EFI_STATUS VirtioFsFuseReleaseFileOrDir ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - IN UINT64 FuseHandle, - IN BOOLEAN IsDir + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + IN UINT64 FuseHandle, + IN BOOLEAN IsDir ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_FUSE_RELEASE_REQUEST ReleaseReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_IO_VECTOR RespIoVec[1]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_FUSE_RELEASE_REQUEST ReleaseReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_IO_VECTOR RespIoVec[1]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Set up the scatter-gather lists. @@ -112,10 +112,19 @@ VirtioFsFuseReleaseFileOrDir ( // Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, NULL); if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" NodeId=%Lu FuseHandle=%Lu " - "IsDir=%d Errno=%d\n", __FUNCTION__, VirtioFs->Label, NodeId, FuseHandle, - IsDir, CommonResp.Error)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" NodeId=%Lu FuseHandle=%Lu " + "IsDir=%d Errno=%d\n", + __FUNCTION__, + VirtioFs->Label, + NodeId, + FuseHandle, + IsDir, + CommonResp.Error + )); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseRename.c b/OvmfPkg/VirtioFsDxe/FuseRename.c index fc9b27ccf6..a3a1050506 100644 --- a/OvmfPkg/VirtioFsDxe/FuseRename.c +++ b/OvmfPkg/VirtioFsDxe/FuseRename.c @@ -49,21 +49,21 @@ **/ EFI_STATUS VirtioFsFuseRename ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 OldParentNodeId, - IN CHAR8 *OldName, - IN UINT64 NewParentNodeId, - IN CHAR8 *NewName + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 OldParentNodeId, + IN CHAR8 *OldName, + IN UINT64 NewParentNodeId, + IN CHAR8 *NewName ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_FUSE_RENAME2_REQUEST Rename2Req; - VIRTIO_FS_IO_VECTOR ReqIoVec[4]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_IO_VECTOR RespIoVec[1]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_FUSE_RENAME2_REQUEST Rename2Req; + VIRTIO_FS_IO_VECTOR ReqIoVec[4]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_IO_VECTOR RespIoVec[1]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Set up the scatter-gather lists. @@ -95,8 +95,13 @@ VirtioFsFuseRename ( // // Populate the common request header. // - Status = VirtioFsFuseNewRequest (VirtioFs, &CommonReq, ReqSgList.TotalSize, - VirtioFsFuseOpRename2, OldParentNodeId); + Status = VirtioFsFuseNewRequest ( + VirtioFs, + &CommonReq, + ReqSgList.TotalSize, + VirtioFsFuseOpRename2, + OldParentNodeId + ); if (EFI_ERROR (Status)) { return Status; } @@ -121,11 +126,20 @@ VirtioFsFuseRename ( // Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, NULL); if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" OldParentNodeId=%Lu OldName=\"%a\" " - "NewParentNodeId=%Lu NewName=\"%a\" Errno=%d\n", __FUNCTION__, - VirtioFs->Label, OldParentNodeId, OldName, NewParentNodeId, NewName, - CommonResp.Error)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" OldParentNodeId=%Lu OldName=\"%a\" " + "NewParentNodeId=%Lu NewName=\"%a\" Errno=%d\n", + __FUNCTION__, + VirtioFs->Label, + OldParentNodeId, + OldName, + NewParentNodeId, + NewName, + CommonResp.Error + )); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseSetAttr.c b/OvmfPkg/VirtioFsDxe/FuseSetAttr.c index dcd0141720..9d0ea93fd9 100644 --- a/OvmfPkg/VirtioFsDxe/FuseSetAttr.c +++ b/OvmfPkg/VirtioFsDxe/FuseSetAttr.c @@ -52,24 +52,24 @@ **/ EFI_STATUS VirtioFsFuseSetAttr ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - IN UINT64 *Size OPTIONAL, - IN UINT64 *Atime OPTIONAL, - IN UINT64 *Mtime OPTIONAL, - IN UINT32 *Mode OPTIONAL + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + IN UINT64 *Size OPTIONAL, + IN UINT64 *Atime OPTIONAL, + IN UINT64 *Mtime OPTIONAL, + IN UINT32 *Mode OPTIONAL ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_FUSE_SETATTR_REQUEST AttrReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_FUSE_GETATTR_RESPONSE GetAttrResp; - VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE AttrResp; - VIRTIO_FS_IO_VECTOR RespIoVec[3]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_FUSE_SETATTR_REQUEST AttrReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_FUSE_GETATTR_RESPONSE GetAttrResp; + VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE AttrResp; + VIRTIO_FS_IO_VECTOR RespIoVec[3]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Set up the scatter-gather lists. @@ -101,8 +101,13 @@ VirtioFsFuseSetAttr ( // // Populate the common request header. // - Status = VirtioFsFuseNewRequest (VirtioFs, &CommonReq, ReqSgList.TotalSize, - VirtioFsFuseOpSetAttr, NodeId); + Status = VirtioFsFuseNewRequest ( + VirtioFs, + &CommonReq, + ReqSgList.TotalSize, + VirtioFsFuseOpSetAttr, + NodeId + ); if (EFI_ERROR (Status)) { return Status; } @@ -130,12 +135,15 @@ VirtioFsFuseSetAttr ( if (Size != NULL) { AttrReq.Valid |= VIRTIO_FS_FUSE_SETATTR_REQ_F_SIZE; } + if (Atime != NULL) { AttrReq.Valid |= VIRTIO_FS_FUSE_SETATTR_REQ_F_ATIME; } + if (Mtime != NULL) { AttrReq.Valid |= VIRTIO_FS_FUSE_SETATTR_REQ_F_MTIME; } + if (Mode != NULL) { AttrReq.Valid |= VIRTIO_FS_FUSE_SETATTR_REQ_F_MODE; } @@ -153,22 +161,32 @@ VirtioFsFuseSetAttr ( // Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, NULL); if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" NodeId=%Lu", __FUNCTION__, - VirtioFs->Label, NodeId)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" NodeId=%Lu", + __FUNCTION__, + VirtioFs->Label, + NodeId + )); if (Size != NULL) { DEBUG ((DEBUG_ERROR, " Size=0x%Lx", *Size)); } + if (Atime != NULL) { DEBUG ((DEBUG_ERROR, " Atime=%Lu", *Atime)); } + if (Mtime != NULL) { DEBUG ((DEBUG_ERROR, " Mtime=%Lu", *Mtime)); } + if (Mode != NULL) { DEBUG ((DEBUG_ERROR, " Mode=0x%x", *Mode)); // no support for octal :/ } - DEBUG ((DEBUG_ERROR, " Errno=%d\n", CommonResp.Error)); + + DEBUG ((DEBUG_ERROR, " Errno=%d\n", CommonResp.Error)); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseStatFs.c b/OvmfPkg/VirtioFsDxe/FuseStatFs.c index e794f8977a..d93a62080e 100644 --- a/OvmfPkg/VirtioFsDxe/FuseStatFs.c +++ b/OvmfPkg/VirtioFsDxe/FuseStatFs.c @@ -36,18 +36,18 @@ **/ EFI_STATUS VirtioFsFuseStatFs ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - OUT VIRTIO_FS_FUSE_STATFS_RESPONSE *FilesysAttr - ) + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + OUT VIRTIO_FS_FUSE_STATFS_RESPONSE *FilesysAttr + ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[1]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_IO_VECTOR RespIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[1]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_IO_VECTOR RespIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Set up the scatter-gather lists. @@ -75,8 +75,13 @@ VirtioFsFuseStatFs ( // // Populate the common request header. // - Status = VirtioFsFuseNewRequest (VirtioFs, &CommonReq, ReqSgList.TotalSize, - VirtioFsFuseOpStatFs, NodeId); + Status = VirtioFsFuseNewRequest ( + VirtioFs, + &CommonReq, + ReqSgList.TotalSize, + VirtioFsFuseOpStatFs, + NodeId + ); if (EFI_ERROR (Status)) { return Status; } @@ -94,9 +99,16 @@ VirtioFsFuseStatFs ( // Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, NULL); if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" NodeId=%Lu Errno=%d\n", - __FUNCTION__, VirtioFs->Label, NodeId, CommonResp.Error)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" NodeId=%Lu Errno=%d\n", + __FUNCTION__, + VirtioFs->Label, + NodeId, + CommonResp.Error + )); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseUnlink.c b/OvmfPkg/VirtioFsDxe/FuseUnlink.c index 8f84edbe94..14cbdec5f5 100644 --- a/OvmfPkg/VirtioFsDxe/FuseUnlink.c +++ b/OvmfPkg/VirtioFsDxe/FuseUnlink.c @@ -41,19 +41,19 @@ **/ EFI_STATUS VirtioFsFuseRemoveFileOrDir ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 ParentNodeId, - IN CHAR8 *Name, - IN BOOLEAN IsDir + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 ParentNodeId, + IN CHAR8 *Name, + IN BOOLEAN IsDir ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_IO_VECTOR RespIoVec[1]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_IO_VECTOR RespIoVec[1]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Set up the scatter-gather lists. @@ -105,10 +105,19 @@ VirtioFsFuseRemoveFileOrDir ( // Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, NULL); if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" ParentNodeId=%Lu Name=\"%a\" " - "IsDir=%d Errno=%d\n", __FUNCTION__, VirtioFs->Label, ParentNodeId, Name, - IsDir, CommonResp.Error)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" ParentNodeId=%Lu Name=\"%a\" " + "IsDir=%d Errno=%d\n", + __FUNCTION__, + VirtioFs->Label, + ParentNodeId, + Name, + IsDir, + CommonResp.Error + )); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/FuseWrite.c b/OvmfPkg/VirtioFsDxe/FuseWrite.c index cc552bd667..fe65c0bdbe 100644 --- a/OvmfPkg/VirtioFsDxe/FuseWrite.c +++ b/OvmfPkg/VirtioFsDxe/FuseWrite.c @@ -52,23 +52,23 @@ **/ EFI_STATUS VirtioFsFuseWrite ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - IN UINT64 FuseHandle, - IN UINT64 Offset, - IN OUT UINT32 *Size, - IN VOID *Data + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + IN UINT64 FuseHandle, + IN UINT64 Offset, + IN OUT UINT32 *Size, + IN VOID *Data ) { - VIRTIO_FS_FUSE_REQUEST CommonReq; - VIRTIO_FS_FUSE_WRITE_REQUEST WriteReq; - VIRTIO_FS_IO_VECTOR ReqIoVec[3]; - VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; - VIRTIO_FS_FUSE_RESPONSE CommonResp; - VIRTIO_FS_FUSE_WRITE_RESPONSE WriteResp; - VIRTIO_FS_IO_VECTOR RespIoVec[2]; - VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; - EFI_STATUS Status; + VIRTIO_FS_FUSE_REQUEST CommonReq; + VIRTIO_FS_FUSE_WRITE_REQUEST WriteReq; + VIRTIO_FS_IO_VECTOR ReqIoVec[3]; + VIRTIO_FS_SCATTER_GATHER_LIST ReqSgList; + VIRTIO_FS_FUSE_RESPONSE CommonResp; + VIRTIO_FS_FUSE_WRITE_RESPONSE WriteResp; + VIRTIO_FS_IO_VECTOR RespIoVec[2]; + VIRTIO_FS_SCATTER_GATHER_LIST RespSgList; + EFI_STATUS Status; // // Honor the write buffer size limit of the Virtio Filesystem device. @@ -107,8 +107,13 @@ VirtioFsFuseWrite ( // // Populate the common request header. // - Status = VirtioFsFuseNewRequest (VirtioFs, &CommonReq, ReqSgList.TotalSize, - VirtioFsFuseOpWrite, NodeId); + Status = VirtioFsFuseNewRequest ( + VirtioFs, + &CommonReq, + ReqSgList.TotalSize, + VirtioFsFuseOpWrite, + NodeId + ); if (EFI_ERROR (Status)) { return Status; } @@ -138,12 +143,22 @@ VirtioFsFuseWrite ( Status = VirtioFsFuseCheckResponse (&RespSgList, CommonReq.Unique, NULL); if (EFI_ERROR (Status)) { if (Status == EFI_DEVICE_ERROR) { - DEBUG ((DEBUG_ERROR, "%a: Label=\"%s\" NodeId=%Lu FuseHandle=%Lu " - "Offset=0x%Lx Size=0x%x Data@%p Errno=%d\n", __FUNCTION__, - VirtioFs->Label, NodeId, FuseHandle, Offset, *Size, Data, - CommonResp.Error)); + DEBUG (( + DEBUG_ERROR, + "%a: Label=\"%s\" NodeId=%Lu FuseHandle=%Lu " + "Offset=0x%Lx Size=0x%x Data@%p Errno=%d\n", + __FUNCTION__, + VirtioFs->Label, + NodeId, + FuseHandle, + Offset, + *Size, + Data, + CommonResp.Error + )); Status = VirtioFsErrnoToEfiStatus (CommonResp.Error); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/Helpers.c b/OvmfPkg/VirtioFsDxe/Helpers.c index b81c04e0a4..f32fb1d48a 100644 --- a/OvmfPkg/VirtioFsDxe/Helpers.c +++ b/OvmfPkg/VirtioFsDxe/Helpers.c @@ -29,12 +29,12 @@ STATIC EFI_STATUS VirtioFsReadConfig ( - IN VIRTIO_DEVICE_PROTOCOL *Virtio, - OUT VIRTIO_FS_CONFIG *Config + IN VIRTIO_DEVICE_PROTOCOL *Virtio, + OUT VIRTIO_FS_CONFIG *Config ) { - UINTN Idx; - EFI_STATUS Status; + UINTN Idx; + EFI_STATUS Status; for (Idx = 0; Idx < VIRTIO_FS_TAG_BYTES; Idx++) { Status = Virtio->ReadDevice ( @@ -78,15 +78,15 @@ VirtioFsReadConfig ( **/ EFI_STATUS VirtioFsInit ( - IN OUT VIRTIO_FS *VirtioFs + IN OUT VIRTIO_FS *VirtioFs ) { - UINT8 NextDevStat; - EFI_STATUS Status; - UINT64 Features; - VIRTIO_FS_CONFIG Config; - UINTN Idx; - UINT64 RingBaseShift; + UINT8 NextDevStat; + EFI_STATUS Status; + UINT64 Features; + VIRTIO_FS_CONFIG Config; + UINTN Idx; + UINT64 RingBaseShift; // // Execute virtio-v1.1-cs01-87fa6b5d8155, 3.1.1 Driver Requirements: Device @@ -95,7 +95,7 @@ VirtioFsInit ( // 1. Reset the device. // NextDevStat = 0; - Status = VirtioFs->Virtio->SetDeviceStatus (VirtioFs->Virtio, NextDevStat); + Status = VirtioFs->Virtio->SetDeviceStatus (VirtioFs->Virtio, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } @@ -104,7 +104,7 @@ VirtioFsInit ( // 2. Set the ACKNOWLEDGE status bit [...] // NextDevStat |= VSTAT_ACK; - Status = VirtioFs->Virtio->SetDeviceStatus (VirtioFs->Virtio, NextDevStat); + Status = VirtioFs->Virtio->SetDeviceStatus (VirtioFs->Virtio, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } @@ -113,7 +113,7 @@ VirtioFsInit ( // 3. Set the DRIVER status bit [...] // NextDevStat |= VSTAT_DRIVER; - Status = VirtioFs->Virtio->SetDeviceStatus (VirtioFs->Virtio, NextDevStat); + Status = VirtioFs->Virtio->SetDeviceStatus (VirtioFs->Virtio, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } @@ -125,10 +125,12 @@ VirtioFsInit ( if (EFI_ERROR (Status)) { goto Failed; } + if ((Features & VIRTIO_F_VERSION_1) == 0) { Status = EFI_UNSUPPORTED; goto Failed; } + // // No device-specific feature bits have been defined in file "virtio-fs.tex" // of the virtio spec at , as @@ -163,12 +165,14 @@ VirtioFsInit ( // original label. // for (Idx = 0; Idx < VIRTIO_FS_TAG_BYTES && Config.Tag[Idx] != '\0'; Idx++) { - if (Config.Tag[Idx] < 0x20 || Config.Tag[Idx] > 0x7E) { + if ((Config.Tag[Idx] < 0x20) || (Config.Tag[Idx] > 0x7E)) { Status = EFI_UNSUPPORTED; goto Failed; } + VirtioFs->Label[Idx] = Config.Tag[Idx]; } + VirtioFs->Label[Idx] = L'\0'; // @@ -184,16 +188,22 @@ VirtioFsInit ( // queue at once. We'll need two descriptors per request, as a minimum -- // request header, response header. // - Status = VirtioFs->Virtio->SetQueueSel (VirtioFs->Virtio, - VIRTIO_FS_REQUEST_QUEUE); + Status = VirtioFs->Virtio->SetQueueSel ( + VirtioFs->Virtio, + VIRTIO_FS_REQUEST_QUEUE + ); if (EFI_ERROR (Status)) { goto Failed; } - Status = VirtioFs->Virtio->GetQueueNumMax (VirtioFs->Virtio, - &VirtioFs->QueueSize); + + Status = VirtioFs->Virtio->GetQueueNumMax ( + VirtioFs->Virtio, + &VirtioFs->QueueSize + ); if (EFI_ERROR (Status)) { goto Failed; } + if (VirtioFs->QueueSize < 2) { Status = EFI_UNSUPPORTED; goto Failed; @@ -202,20 +212,30 @@ VirtioFsInit ( // // 7.d. [...] population of virtqueues [...] // - Status = VirtioRingInit (VirtioFs->Virtio, VirtioFs->QueueSize, - &VirtioFs->Ring); + Status = VirtioRingInit ( + VirtioFs->Virtio, + VirtioFs->QueueSize, + &VirtioFs->Ring + ); if (EFI_ERROR (Status)) { goto Failed; } - Status = VirtioRingMap (VirtioFs->Virtio, &VirtioFs->Ring, &RingBaseShift, - &VirtioFs->RingMap); + Status = VirtioRingMap ( + VirtioFs->Virtio, + &VirtioFs->Ring, + &RingBaseShift, + &VirtioFs->RingMap + ); if (EFI_ERROR (Status)) { goto ReleaseQueue; } - Status = VirtioFs->Virtio->SetQueueAddress (VirtioFs->Virtio, - &VirtioFs->Ring, RingBaseShift); + Status = VirtioFs->Virtio->SetQueueAddress ( + VirtioFs->Virtio, + &VirtioFs->Ring, + RingBaseShift + ); if (EFI_ERROR (Status)) { goto UnmapQueue; } @@ -224,7 +244,7 @@ VirtioFsInit ( // 8. Set the DRIVER_OK status bit. // NextDevStat |= VSTAT_DRIVER_OK; - Status = VirtioFs->Virtio->SetDeviceStatus (VirtioFs->Virtio, NextDevStat); + Status = VirtioFs->Virtio->SetDeviceStatus (VirtioFs->Virtio, NextDevStat); if (EFI_ERROR (Status)) { goto UnmapQueue; } @@ -262,7 +282,7 @@ Failed: **/ VOID VirtioFsUninit ( - IN OUT VIRTIO_FS *VirtioFs + IN OUT VIRTIO_FS *VirtioFs ) { // @@ -290,15 +310,20 @@ VirtioFsUninit ( VOID EFIAPI VirtioFsExitBoot ( - IN EFI_EVENT ExitBootEvent, - IN VOID *VirtioFsAsVoid + IN EFI_EVENT ExitBootEvent, + IN VOID *VirtioFsAsVoid ) { - VIRTIO_FS *VirtioFs; + VIRTIO_FS *VirtioFs; VirtioFs = VirtioFsAsVoid; - DEBUG ((DEBUG_VERBOSE, "%a: VirtioFs=0x%p Label=\"%s\"\n", __FUNCTION__, - VirtioFsAsVoid, VirtioFs->Label)); + DEBUG (( + DEBUG_VERBOSE, + "%a: VirtioFs=0x%p Label=\"%s\"\n", + __FUNCTION__, + VirtioFsAsVoid, + VirtioFs->Label + )); VirtioFs->Virtio->SetDeviceStatus (VirtioFs->Virtio, 0); } @@ -371,14 +396,14 @@ VirtioFsExitBoot ( **/ EFI_STATUS VirtioFsSgListsValidate ( - IN VIRTIO_FS *VirtioFs, - IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *RequestSgList, - IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList OPTIONAL + IN VIRTIO_FS *VirtioFs, + IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *RequestSgList, + IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList OPTIONAL ) { - VIRTIO_FS_SCATTER_GATHER_LIST *SgListParam[2]; - UINT16 DescriptorsNeeded; - UINTN ListId; + VIRTIO_FS_SCATTER_GATHER_LIST *SgListParam[2]; + UINT16 DescriptorsNeeded; + UINTN ListId; if (RequestSgList == NULL) { return EFI_INVALID_PARAMETER; @@ -389,42 +414,47 @@ VirtioFsSgListsValidate ( DescriptorsNeeded = 0; for (ListId = 0; ListId < ARRAY_SIZE (SgListParam); ListId++) { - VIRTIO_FS_SCATTER_GATHER_LIST *SgList; - UINT32 SgListTotalSize; - UINTN IoVecIdx; + VIRTIO_FS_SCATTER_GATHER_LIST *SgList; + UINT32 SgListTotalSize; + UINTN IoVecIdx; SgList = SgListParam[ListId]; if (SgList == NULL) { continue; } + // // Sanity-check SgList -- it must provide at least one IO Vector. // - if (SgList->IoVec == NULL || SgList->NumVec == 0) { + if ((SgList->IoVec == NULL) || (SgList->NumVec == 0)) { return EFI_INVALID_PARAMETER; } + // // Make sure that, for each IO Vector in this SgList, a virtio descriptor // can be added to the virtio queue, after the other descriptors added // previously. // - if (SgList->NumVec > (UINTN)(MAX_UINT16 - DescriptorsNeeded) || - DescriptorsNeeded + SgList->NumVec > VirtioFs->QueueSize) { + if ((SgList->NumVec > (UINTN)(MAX_UINT16 - DescriptorsNeeded)) || + (DescriptorsNeeded + SgList->NumVec > VirtioFs->QueueSize)) + { return EFI_UNSUPPORTED; } + DescriptorsNeeded += (UINT16)SgList->NumVec; SgListTotalSize = 0; for (IoVecIdx = 0; IoVecIdx < SgList->NumVec; IoVecIdx++) { - VIRTIO_FS_IO_VECTOR *IoVec; + VIRTIO_FS_IO_VECTOR *IoVec; IoVec = &SgList->IoVec[IoVecIdx]; // // Sanity-check this IoVec -- it must describe a non-empty buffer. // - if (IoVec->Buffer == NULL || IoVec->Size == 0) { + if ((IoVec->Buffer == NULL) || (IoVec->Size == 0)) { return EFI_INVALID_PARAMETER; } + // // Make sure the cumulative size of all IO Vectors in this SgList remains // expressible as a UINT32. @@ -432,6 +462,7 @@ VirtioFsSgListsValidate ( if (IoVec->Size > MAX_UINT32 - SgListTotalSize) { return EFI_UNSUPPORTED; } + SgListTotalSize += (UINT32)IoVec->Size; // @@ -505,22 +536,22 @@ VirtioFsSgListsValidate ( **/ EFI_STATUS VirtioFsSgListsSubmit ( - IN OUT VIRTIO_FS *VirtioFs, - IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *RequestSgList, - IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList OPTIONAL + IN OUT VIRTIO_FS *VirtioFs, + IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *RequestSgList, + IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList OPTIONAL ) { - VIRTIO_FS_SCATTER_GATHER_LIST *SgListParam[2]; - VIRTIO_MAP_OPERATION SgListVirtioMapOp[ARRAY_SIZE (SgListParam)]; - UINT16 SgListDescriptorFlag[ARRAY_SIZE (SgListParam)]; - UINTN ListId; - VIRTIO_FS_SCATTER_GATHER_LIST *SgList; - UINTN IoVecIdx; - VIRTIO_FS_IO_VECTOR *IoVec; - EFI_STATUS Status; - DESC_INDICES Indices; - UINT32 TotalBytesWrittenByDevice; - UINT32 BytesPermittedForWrite; + VIRTIO_FS_SCATTER_GATHER_LIST *SgListParam[2]; + VIRTIO_MAP_OPERATION SgListVirtioMapOp[ARRAY_SIZE (SgListParam)]; + UINT16 SgListDescriptorFlag[ARRAY_SIZE (SgListParam)]; + UINTN ListId; + VIRTIO_FS_SCATTER_GATHER_LIST *SgList; + UINTN IoVecIdx; + VIRTIO_FS_IO_VECTOR *IoVec; + EFI_STATUS Status; + DESC_INDICES Indices; + UINT32 TotalBytesWrittenByDevice; + UINT32 BytesPermittedForWrite; SgListParam[0] = RequestSgList; SgListVirtioMapOp[0] = VirtioOperationBusMasterRead; @@ -538,6 +569,7 @@ VirtioFsSgListsSubmit ( if (SgList == NULL) { continue; } + for (IoVecIdx = 0; IoVecIdx < SgList->NumVec; IoVecIdx++) { IoVec = &SgList->IoVec[IoVecIdx]; // @@ -554,6 +586,7 @@ VirtioFsSgListsSubmit ( if (EFI_ERROR (Status)) { goto Unmap; } + IoVec->Mapped = TRUE; } } @@ -567,18 +600,21 @@ VirtioFsSgListsSubmit ( if (SgList == NULL) { continue; } + for (IoVecIdx = 0; IoVecIdx < SgList->NumVec; IoVecIdx++) { - UINT16 NextFlag; + UINT16 NextFlag; IoVec = &SgList->IoVec[IoVecIdx]; // // Set VRING_DESC_F_NEXT on all except the very last descriptor. // NextFlag = VRING_DESC_F_NEXT; - if (ListId == ARRAY_SIZE (SgListParam) - 1 && - IoVecIdx == SgList->NumVec - 1) { + if ((ListId == ARRAY_SIZE (SgListParam) - 1) && + (IoVecIdx == SgList->NumVec - 1)) + { NextFlag = 0; } + VirtioAppendDesc ( &VirtioFs->Ring, IoVec->MappedAddress, @@ -592,8 +628,13 @@ VirtioFsSgListsSubmit ( // // Submit the descriptor chain. // - Status = VirtioFlush (VirtioFs->Virtio, VIRTIO_FS_REQUEST_QUEUE, - &VirtioFs->Ring, &Indices, &TotalBytesWrittenByDevice); + Status = VirtioFlush ( + VirtioFs->Virtio, + VIRTIO_FS_REQUEST_QUEUE, + &VirtioFs->Ring, + &Indices, + &TotalBytesWrittenByDevice + ); if (EFI_ERROR (Status)) { goto Unmap; } @@ -607,6 +648,7 @@ VirtioFsSgListsSubmit ( } else { BytesPermittedForWrite = ResponseSgList->TotalSize; } + if (TotalBytesWrittenByDevice > BytesPermittedForWrite) { Status = EFI_DEVICE_ERROR; goto Unmap; @@ -620,6 +662,7 @@ VirtioFsSgListsSubmit ( if (SgList == NULL) { continue; } + for (IoVecIdx = 0; IoVecIdx < SgList->NumVec; IoVecIdx++) { IoVec = &SgList->IoVec[IoVecIdx]; if (SgListVirtioMapOp[ListId] == VirtioOperationBusMasterRead) { @@ -636,8 +679,10 @@ VirtioFsSgListsSubmit ( // across all device-writeable descriptors, in the order they were // chained on the ring. // - IoVec->Transferred = MIN ((UINTN)TotalBytesWrittenByDevice, - IoVec->Size); + IoVec->Transferred = MIN ( + (UINTN)TotalBytesWrittenByDevice, + IoVec->Size + ); TotalBytesWrittenByDevice -= (UINT32)IoVec->Transferred; } } @@ -664,9 +709,10 @@ Unmap: if (SgList == NULL) { continue; } + IoVecIdx = SgList->NumVec; while (IoVecIdx > 0) { - EFI_STATUS UnmapStatus; + EFI_STATUS UnmapStatus; --IoVecIdx; IoVec = &SgList->IoVec[IoVecIdx]; @@ -676,8 +722,11 @@ Unmap: if (!IoVec->Mapped) { continue; } - UnmapStatus = VirtioFs->Virtio->UnmapSharedBuffer (VirtioFs->Virtio, - IoVec->Mapping); + + UnmapStatus = VirtioFs->Virtio->UnmapSharedBuffer ( + VirtioFs->Virtio, + IoVec->Mapping + ); // // Re-set the following fields to the values they initially got from // VirtioFsSgListsValidate() -- the above unmapping attempt is considered @@ -740,7 +789,7 @@ Unmap: EFI_STATUS VirtioFsFuseNewRequest ( IN OUT VIRTIO_FS *VirtioFs, - OUT VIRTIO_FS_FUSE_REQUEST *Request, + OUT VIRTIO_FS_FUSE_REQUEST *Request, IN UINT32 RequestSize, IN VIRTIO_FS_FUSE_OPCODE Opcode, IN UINT64 NodeId @@ -822,15 +871,15 @@ VirtioFsFuseNewRequest ( **/ EFI_STATUS VirtioFsFuseCheckResponse ( - IN VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList, - IN UINT64 RequestId, - OUT UINTN *TailBufferFill + IN VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList, + IN UINT64 RequestId, + OUT UINTN *TailBufferFill ) { - UINTN NumFixedSizeVec; - VIRTIO_FS_FUSE_RESPONSE *CommonResp; - UINT32 TotalTransferred; - UINTN Idx; + UINTN NumFixedSizeVec; + VIRTIO_FS_FUSE_RESPONSE *CommonResp; + UINT32 TotalTransferred; + UINTN Idx; // // Ensured by VirtioFsSgListsValidate(). @@ -851,6 +900,7 @@ VirtioFsFuseCheckResponse ( if (ResponseSgList->NumVec == 1) { return EFI_INVALID_PARAMETER; } + NumFixedSizeVec = ResponseSgList->NumVec - 1; } @@ -861,6 +911,7 @@ VirtioFsFuseCheckResponse ( if (ResponseSgList->IoVec[0].Size != sizeof *CommonResp) { return EFI_INVALID_PARAMETER; } + if (ResponseSgList->IoVec[0].Transferred != ResponseSgList->IoVec[0].Size) { return EFI_PROTOCOL_ERROR; } @@ -869,7 +920,7 @@ VirtioFsFuseCheckResponse ( // FUSE must report the same number of bytes, written by the Virtio // Filesystem device, as the virtio transport does. // - CommonResp = ResponseSgList->IoVec[0].Buffer; + CommonResp = ResponseSgList->IoVec[0].Buffer; TotalTransferred = 0; for (Idx = 0; Idx < ResponseSgList->NumVec; Idx++) { // @@ -878,6 +929,7 @@ VirtioFsFuseCheckResponse ( // TotalTransferred += (UINT32)ResponseSgList->IoVec[Idx].Transferred; } + if (CommonResp->Len != TotalTransferred) { return EFI_PROTOCOL_ERROR; } @@ -905,7 +957,8 @@ VirtioFsFuseCheckResponse ( ASSERT (NumFixedSizeVec >= 1); for (Idx = 1; Idx < NumFixedSizeVec; Idx++) { if (ResponseSgList->IoVec[Idx].Transferred != - ResponseSgList->IoVec[Idx].Size) { + ResponseSgList->IoVec[Idx].Size) + { return EFI_PROTOCOL_ERROR; } } @@ -936,185 +989,185 @@ VirtioFsFuseCheckResponse ( **/ EFI_STATUS VirtioFsErrnoToEfiStatus ( - IN INT32 Errno + IN INT32 Errno ) { switch (Errno) { - case -1: // EPERM Operation not permitted - return EFI_SECURITY_VIOLATION; - - case -2: // ENOENT No such file or directory - case -3: // ESRCH No such process - case -6: // ENXIO No such device or address - case -10: // ECHILD No child processes - case -19: // ENODEV No such device - case -49: // EUNATCH Protocol driver not attached - case -65: // ENOPKG Package not installed - case -79: // ELIBACC Can not access a needed shared library - case -126: // ENOKEY Required key not available - return EFI_NOT_FOUND; - - case -4: // EINTR Interrupted system call - case -11: // EAGAIN, EWOULDBLOCK Resource temporarily unavailable - case -16: // EBUSY Device or resource busy - case -26: // ETXTBSY Text file busy - case -35: // EDEADLK, EDEADLOCK Resource deadlock avoided - case -39: // ENOTEMPTY Directory not empty - case -42: // ENOMSG No message of desired type - case -61: // ENODATA No data available - case -85: // ERESTART Interrupted system call should be restarted - return EFI_NOT_READY; - - case -5: // EIO Input/output error - case -45: // EL2NSYNC Level 2 not synchronized - case -46: // EL3HLT Level 3 halted - case -47: // EL3RST Level 3 reset - case -51: // EL2HLT Level 2 halted - case -121: // EREMOTEIO Remote I/O error - case -133: // EHWPOISON Memory page has hardware error - return EFI_DEVICE_ERROR; - - case -7: // E2BIG Argument list too long - case -36: // ENAMETOOLONG File name too long - case -90: // EMSGSIZE Message too long - return EFI_BAD_BUFFER_SIZE; - - case -8: // ENOEXEC Exec format error - case -15: // ENOTBLK Block device required - case -18: // EXDEV Invalid cross-device link - case -20: // ENOTDIR Not a directory - case -21: // EISDIR Is a directory - case -25: // ENOTTY Inappropriate ioctl for device - case -27: // EFBIG File too large - case -29: // ESPIPE Illegal seek - case -38: // ENOSYS Function not implemented - case -59: // EBFONT Bad font file format - case -60: // ENOSTR Device not a stream - case -83: // ELIBEXEC Cannot exec a shared library directly - case -88: // ENOTSOCK Socket operation on non-socket - case -91: // EPROTOTYPE Protocol wrong type for socket - case -92: // ENOPROTOOPT Protocol not available - case -93: // EPROTONOSUPPORT Protocol not supported - case -94: // ESOCKTNOSUPPORT Socket type not supported - case -95: // ENOTSUP, EOPNOTSUPP Operation not supported - case -96: // EPFNOSUPPORT Protocol family not supported - case -97: // EAFNOSUPPORT Address family not supported by protocol - case -99: // EADDRNOTAVAIL Cannot assign requested address - case -118: // ENOTNAM Not a XENIX named type file - case -120: // EISNAM Is a named type file - case -124: // EMEDIUMTYPE Wrong medium type - return EFI_UNSUPPORTED; - - case -9: // EBADF Bad file descriptor - case -14: // EFAULT Bad address - case -44: // ECHRNG Channel number out of range - case -48: // ELNRNG Link number out of range - case -53: // EBADR Invalid request descriptor - case -56: // EBADRQC Invalid request code - case -57: // EBADSLT Invalid slot - case -76: // ENOTUNIQ Name not unique on network - case -84: // EILSEQ Invalid or incomplete multibyte or wide character - return EFI_NO_MAPPING; - - case -12: // ENOMEM Cannot allocate memory - case -23: // ENFILE Too many open files in system - case -24: // EMFILE Too many open files - case -31: // EMLINK Too many links - case -37: // ENOLCK No locks available - case -40: // ELOOP Too many levels of symbolic links - case -50: // ENOCSI No CSI structure available - case -55: // ENOANO No anode - case -63: // ENOSR Out of streams resources - case -82: // ELIBMAX Attempting to link in too many shared libraries - case -87: // EUSERS Too many users - case -105: // ENOBUFS No buffer space available - case -109: // ETOOMANYREFS Too many references: cannot splice - case -119: // ENAVAIL No XENIX semaphores available - case -122: // EDQUOT Disk quota exceeded - return EFI_OUT_OF_RESOURCES; + case -1:// EPERM Operation not permitted + return EFI_SECURITY_VIOLATION; + + case -2: // ENOENT No such file or directory + case -3: // ESRCH No such process + case -6: // ENXIO No such device or address + case -10: // ECHILD No child processes + case -19: // ENODEV No such device + case -49: // EUNATCH Protocol driver not attached + case -65: // ENOPKG Package not installed + case -79: // ELIBACC Can not access a needed shared library + case -126: // ENOKEY Required key not available + return EFI_NOT_FOUND; + + case -4: // EINTR Interrupted system call + case -11: // EAGAIN, EWOULDBLOCK Resource temporarily unavailable + case -16: // EBUSY Device or resource busy + case -26: // ETXTBSY Text file busy + case -35: // EDEADLK, EDEADLOCK Resource deadlock avoided + case -39: // ENOTEMPTY Directory not empty + case -42: // ENOMSG No message of desired type + case -61: // ENODATA No data available + case -85: // ERESTART Interrupted system call should be restarted + return EFI_NOT_READY; + + case -5: // EIO Input/output error + case -45: // EL2NSYNC Level 2 not synchronized + case -46: // EL3HLT Level 3 halted + case -47: // EL3RST Level 3 reset + case -51: // EL2HLT Level 2 halted + case -121: // EREMOTEIO Remote I/O error + case -133: // EHWPOISON Memory page has hardware error + return EFI_DEVICE_ERROR; + + case -7: // E2BIG Argument list too long + case -36: // ENAMETOOLONG File name too long + case -90: // EMSGSIZE Message too long + return EFI_BAD_BUFFER_SIZE; + + case -8: // ENOEXEC Exec format error + case -15: // ENOTBLK Block device required + case -18: // EXDEV Invalid cross-device link + case -20: // ENOTDIR Not a directory + case -21: // EISDIR Is a directory + case -25: // ENOTTY Inappropriate ioctl for device + case -27: // EFBIG File too large + case -29: // ESPIPE Illegal seek + case -38: // ENOSYS Function not implemented + case -59: // EBFONT Bad font file format + case -60: // ENOSTR Device not a stream + case -83: // ELIBEXEC Cannot exec a shared library directly + case -88: // ENOTSOCK Socket operation on non-socket + case -91: // EPROTOTYPE Protocol wrong type for socket + case -92: // ENOPROTOOPT Protocol not available + case -93: // EPROTONOSUPPORT Protocol not supported + case -94: // ESOCKTNOSUPPORT Socket type not supported + case -95: // ENOTSUP, EOPNOTSUPP Operation not supported + case -96: // EPFNOSUPPORT Protocol family not supported + case -97: // EAFNOSUPPORT Address family not supported by protocol + case -99: // EADDRNOTAVAIL Cannot assign requested address + case -118: // ENOTNAM Not a XENIX named type file + case -120: // EISNAM Is a named type file + case -124: // EMEDIUMTYPE Wrong medium type + return EFI_UNSUPPORTED; - case -13: // EACCES Permission denied - return EFI_ACCESS_DENIED; + case -9: // EBADF Bad file descriptor + case -14: // EFAULT Bad address + case -44: // ECHRNG Channel number out of range + case -48: // ELNRNG Link number out of range + case -53: // EBADR Invalid request descriptor + case -56: // EBADRQC Invalid request code + case -57: // EBADSLT Invalid slot + case -76: // ENOTUNIQ Name not unique on network + case -84: // EILSEQ Invalid or incomplete multibyte or wide character + return EFI_NO_MAPPING; + + case -12: // ENOMEM Cannot allocate memory + case -23: // ENFILE Too many open files in system + case -24: // EMFILE Too many open files + case -31: // EMLINK Too many links + case -37: // ENOLCK No locks available + case -40: // ELOOP Too many levels of symbolic links + case -50: // ENOCSI No CSI structure available + case -55: // ENOANO No anode + case -63: // ENOSR Out of streams resources + case -82: // ELIBMAX Attempting to link in too many shared libraries + case -87: // EUSERS Too many users + case -105: // ENOBUFS No buffer space available + case -109: // ETOOMANYREFS Too many references: cannot splice + case -119: // ENAVAIL No XENIX semaphores available + case -122: // EDQUOT Disk quota exceeded + return EFI_OUT_OF_RESOURCES; - case -17: // EEXIST File exists - case -98: // EADDRINUSE Address already in use - case -106: // EISCONN Transport endpoint is already connected - case -114: // EALREADY Operation already in progress - case -115: // EINPROGRESS Operation now in progress - return EFI_ALREADY_STARTED; + case -13:// EACCES Permission denied + return EFI_ACCESS_DENIED; - case -22: // EINVAL Invalid argument - case -33: // EDOM Numerical argument out of domain - return EFI_INVALID_PARAMETER; + case -17: // EEXIST File exists + case -98: // EADDRINUSE Address already in use + case -106: // EISCONN Transport endpoint is already connected + case -114: // EALREADY Operation already in progress + case -115: // EINPROGRESS Operation now in progress + return EFI_ALREADY_STARTED; - case -28: // ENOSPC No space left on device - case -54: // EXFULL Exchange full - return EFI_VOLUME_FULL; - - case -30: // EROFS Read-only file system - return EFI_WRITE_PROTECTED; - - case -32: // EPIPE Broken pipe - case -43: // EIDRM Identifier removed - case -67: // ENOLINK Link has been severed - case -68: // EADV Advertise error - case -69: // ESRMNT Srmount error - case -70: // ECOMM Communication error on send - case -73: // EDOTDOT RFS specific error - case -78: // EREMCHG Remote address changed - case -86: // ESTRPIPE Streams pipe error - case -102: // ENETRESET Network dropped connection on reset - case -103: // ECONNABORTED Software caused connection abort - case -104: // ECONNRESET Connection reset by peer - case -116: // ESTALE Stale file handle - case -125: // ECANCELED Operation canceled - case -128: // EKEYREVOKED Key has been revoked - case -129: // EKEYREJECTED Key was rejected by service - case -130: // EOWNERDEAD Owner died - case -131: // ENOTRECOVERABLE State not recoverable - return EFI_ABORTED; - - case -34: // ERANGE Numerical result out of range - case -75: // EOVERFLOW Value too large for defined data type - return EFI_BUFFER_TOO_SMALL; + case -22: // EINVAL Invalid argument + case -33: // EDOM Numerical argument out of domain + return EFI_INVALID_PARAMETER; - case -52: // EBADE Invalid exchange - case -108: // ESHUTDOWN Cannot send after transport endpoint shutdown - case -111: // ECONNREFUSED Connection refused - return EFI_END_OF_FILE; - - case -62: // ETIME Timer expired - case -110: // ETIMEDOUT Connection timed out - case -127: // EKEYEXPIRED Key has expired - return EFI_TIMEOUT; - - case -64: // ENONET Machine is not on the network - case -66: // EREMOTE Object is remote - case -72: // EMULTIHOP Multihop attempted - case -100: // ENETDOWN Network is down - case -101: // ENETUNREACH Network is unreachable - case -112: // EHOSTDOWN Host is down - case -113: // EHOSTUNREACH No route to host - case -123: // ENOMEDIUM No medium found - case -132: // ERFKILL Operation not possible due to RF-kill - return EFI_NO_MEDIA; - - case -71: // EPROTO Protocol error - return EFI_PROTOCOL_ERROR; + case -28: // ENOSPC No space left on device + case -54: // EXFULL Exchange full + return EFI_VOLUME_FULL; + + case -30:// EROFS Read-only file system + return EFI_WRITE_PROTECTED; + + case -32: // EPIPE Broken pipe + case -43: // EIDRM Identifier removed + case -67: // ENOLINK Link has been severed + case -68: // EADV Advertise error + case -69: // ESRMNT Srmount error + case -70: // ECOMM Communication error on send + case -73: // EDOTDOT RFS specific error + case -78: // EREMCHG Remote address changed + case -86: // ESTRPIPE Streams pipe error + case -102: // ENETRESET Network dropped connection on reset + case -103: // ECONNABORTED Software caused connection abort + case -104: // ECONNRESET Connection reset by peer + case -116: // ESTALE Stale file handle + case -125: // ECANCELED Operation canceled + case -128: // EKEYREVOKED Key has been revoked + case -129: // EKEYREJECTED Key was rejected by service + case -130: // EOWNERDEAD Owner died + case -131: // ENOTRECOVERABLE State not recoverable + return EFI_ABORTED; + + case -34: // ERANGE Numerical result out of range + case -75: // EOVERFLOW Value too large for defined data type + return EFI_BUFFER_TOO_SMALL; + + case -52: // EBADE Invalid exchange + case -108: // ESHUTDOWN Cannot send after transport endpoint shutdown + case -111: // ECONNREFUSED Connection refused + return EFI_END_OF_FILE; + + case -62: // ETIME Timer expired + case -110: // ETIMEDOUT Connection timed out + case -127: // EKEYEXPIRED Key has expired + return EFI_TIMEOUT; + + case -64: // ENONET Machine is not on the network + case -66: // EREMOTE Object is remote + case -72: // EMULTIHOP Multihop attempted + case -100: // ENETDOWN Network is down + case -101: // ENETUNREACH Network is unreachable + case -112: // EHOSTDOWN Host is down + case -113: // EHOSTUNREACH No route to host + case -123: // ENOMEDIUM No medium found + case -132: // ERFKILL Operation not possible due to RF-kill + return EFI_NO_MEDIA; + + case -71:// EPROTO Protocol error + return EFI_PROTOCOL_ERROR; - case -74: // EBADMSG Bad message - case -77: // EBADFD File descriptor in bad state - case -80: // ELIBBAD Accessing a corrupted shared library - case -81: // ELIBSCN .lib section in a.out corrupted - case -117: // EUCLEAN Structure needs cleaning - return EFI_VOLUME_CORRUPTED; + case -74: // EBADMSG Bad message + case -77: // EBADFD File descriptor in bad state + case -80: // ELIBBAD Accessing a corrupted shared library + case -81: // ELIBSCN .lib section in a.out corrupted + case -117: // EUCLEAN Structure needs cleaning + return EFI_VOLUME_CORRUPTED; - case -89: // EDESTADDRREQ Destination address required - case -107: // ENOTCONN Transport endpoint is not connected - return EFI_NOT_STARTED; + case -89: // EDESTADDRREQ Destination address required + case -107: // ENOTCONN Transport endpoint is not connected + return EFI_NOT_STARTED; - default: - break; + default: + break; } return EFI_DEVICE_ERROR; @@ -1151,8 +1204,8 @@ typedef enum { STATIC VOID ParserStripSlash ( - IN CHAR8 *Buffer, - IN OUT UINTN *Position + IN CHAR8 *Buffer, + IN OUT UINTN *Position ) { ASSERT (*Position >= 1); @@ -1160,6 +1213,7 @@ ParserStripSlash ( if (*Position == 1) { return; } + (*Position)--; } @@ -1182,10 +1236,10 @@ ParserStripSlash ( STATIC VOID ParserCopy ( - OUT CHAR8 *Buffer, - IN OUT UINTN *Position, - IN UINTN Size, - IN CHAR8 Char8 + OUT CHAR8 *Buffer, + IN OUT UINTN *Position, + IN UINTN Size, + IN CHAR8 Char8 ) { ASSERT (*Position < Size); @@ -1209,8 +1263,8 @@ ParserCopy ( STATIC VOID ParserRewindDot ( - IN CHAR8 *Buffer, - IN OUT UINTN *Position + IN CHAR8 *Buffer, + IN OUT UINTN *Position ) { ASSERT (*Position >= 2); @@ -1252,9 +1306,9 @@ ParserRewindDot ( STATIC VOID ParserRewindDotDot ( - IN CHAR8 *Buffer, - IN OUT UINTN *Position, - OUT BOOLEAN *RootEscape + IN CHAR8 *Buffer, + IN OUT UINTN *Position, + OUT BOOLEAN *RootEscape ) { @@ -1283,6 +1337,7 @@ ParserRewindDotDot ( ASSERT (*Position > 0); (*Position)--; } while (Buffer[*Position] != '/'); + (*Position)++; } @@ -1349,19 +1404,19 @@ EFI_STATUS VirtioFsAppendPath ( IN CHAR8 *LhsPath8, IN CHAR16 *RhsPath16, - OUT CHAR8 **ResultPath8, - OUT BOOLEAN *RootEscape + OUT CHAR8 **ResultPath8, + OUT BOOLEAN *RootEscape ) { - UINTN RhsLen; - CHAR8 *RhsPath8; - UINTN Idx; - EFI_STATUS Status; - UINTN SizeToSanitize; - CHAR8 *BufferToSanitize; - CHAR8 *SanitizedBuffer; - PARSER_STATE State; - UINTN SanitizedPosition; + UINTN RhsLen; + CHAR8 *RhsPath8; + UINTN Idx; + EFI_STATUS Status; + UINTN SizeToSanitize; + CHAR8 *BufferToSanitize; + CHAR8 *SanitizedBuffer; + PARSER_STATE State; + UINTN SanitizedPosition; // // Appending an empty pathname is not allowed. @@ -1370,6 +1425,7 @@ VirtioFsAppendPath ( if (RhsLen == 0) { return EFI_INVALID_PARAMETER; } + // // Enforce length restriction on RhsPath16. // @@ -1388,14 +1444,18 @@ VirtioFsAppendPath ( if (RhsPath8 == NULL) { return EFI_OUT_OF_RESOURCES; } + for (Idx = 0; RhsPath16[Idx] != L'\0'; Idx++) { - if (RhsPath16[Idx] < 0x20 || RhsPath16[Idx] > 0x7E || - RhsPath16[Idx] == L'/') { + if ((RhsPath16[Idx] < 0x20) || (RhsPath16[Idx] > 0x7E) || + (RhsPath16[Idx] == L'/')) + { Status = EFI_UNSUPPORTED; goto FreeRhsPath8; } + RhsPath8[Idx] = (CHAR8)((RhsPath16[Idx] == L'\\') ? L'/' : RhsPath16[Idx]); } + RhsPath8[Idx++] = '\0'; // @@ -1412,22 +1472,23 @@ VirtioFsAppendPath ( // If the right hand side path is absolute, then it is not appended to the // left hand side path -- it *replaces* the left hand side path. // - SizeToSanitize = RhsLen + 1; + SizeToSanitize = RhsLen + 1; BufferToSanitize = RhsPath8; } else { // // If the right hand side path is relative, then it is appended (naively) // to the left hand side. // - UINTN LhsLen; + UINTN LhsLen; - LhsLen = AsciiStrLen (LhsPath8); - SizeToSanitize = LhsLen + 1 + RhsLen + 1; + LhsLen = AsciiStrLen (LhsPath8); + SizeToSanitize = LhsLen + 1 + RhsLen + 1; BufferToSanitize = AllocatePool (SizeToSanitize); if (BufferToSanitize == NULL) { Status = EFI_OUT_OF_RESOURCES; goto FreeRhsPath8; } + CopyMem (BufferToSanitize, LhsPath8, LhsLen); BufferToSanitize[LhsLen] = '/'; CopyMem (BufferToSanitize + LhsLen + 1, RhsPath8, RhsLen + 1); @@ -1451,113 +1512,117 @@ VirtioFsAppendPath ( State = ParserInit; SanitizedPosition = 0; do { - CHAR8 Chr8; + CHAR8 Chr8; ASSERT (Idx < SizeToSanitize); Chr8 = BufferToSanitize[Idx++]; switch (State) { - case ParserInit: // just starting - ASSERT (Chr8 == '/'); - ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); - State = ParserSlash; - break; - - case ParserSlash: // slash(es) seen - switch (Chr8) { - case '\0': - ParserStripSlash (SanitizedBuffer, &SanitizedPosition); + case ParserInit: // just starting + ASSERT (Chr8 == '/'); ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); - State = ParserEnd; - break; - case '/': - // - // skip & stay in same state - // - break; - case '.': - ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); - State = ParserDot; - break; - default: - ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); - State = ParserNormal; - break; - } - break; - - case ParserDot: // one dot seen since last slash - switch (Chr8) { - case '\0': - ParserRewindDot (SanitizedBuffer, &SanitizedPosition); - ParserStripSlash (SanitizedBuffer, &SanitizedPosition); - ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); - State = ParserEnd; - break; - case '/': - ParserRewindDot (SanitizedBuffer, &SanitizedPosition); State = ParserSlash; break; - case '.': - ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); - State = ParserDotDot; - break; - default: - ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); - State = ParserNormal; - break; - } - break; - case ParserDotDot: // two dots seen since last slash - switch (Chr8) { - case '\0': - ParserRewindDotDot (SanitizedBuffer, &SanitizedPosition, RootEscape); - ParserStripSlash (SanitizedBuffer, &SanitizedPosition); - ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); - State = ParserEnd; - break; - case '/': - ParserRewindDotDot (SanitizedBuffer, &SanitizedPosition, RootEscape); - State = ParserSlash; + case ParserSlash: // slash(es) seen + switch (Chr8) { + case '\0': + ParserStripSlash (SanitizedBuffer, &SanitizedPosition); + ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); + State = ParserEnd; + break; + case '/': + // + // skip & stay in same state + // + break; + case '.': + ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); + State = ParserDot; + break; + default: + ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); + State = ParserNormal; + break; + } + break; - case '.': - // - // fall through - // - default: - ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); - State = ParserNormal; + + case ParserDot: // one dot seen since last slash + switch (Chr8) { + case '\0': + ParserRewindDot (SanitizedBuffer, &SanitizedPosition); + ParserStripSlash (SanitizedBuffer, &SanitizedPosition); + ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); + State = ParserEnd; + break; + case '/': + ParserRewindDot (SanitizedBuffer, &SanitizedPosition); + State = ParserSlash; + break; + case '.': + ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); + State = ParserDotDot; + break; + default: + ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); + State = ParserNormal; + break; + } + break; - } - break; - case ParserNormal: // a different sequence seen - switch (Chr8) { - case '\0': - ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); - State = ParserEnd; + case ParserDotDot: // two dots seen since last slash + switch (Chr8) { + case '\0': + ParserRewindDotDot (SanitizedBuffer, &SanitizedPosition, RootEscape); + ParserStripSlash (SanitizedBuffer, &SanitizedPosition); + ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); + State = ParserEnd; + break; + case '/': + ParserRewindDotDot (SanitizedBuffer, &SanitizedPosition, RootEscape); + State = ParserSlash; + break; + case '.': + // + // fall through + // + default: + ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); + State = ParserNormal; + break; + } + break; - case '/': - ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); - State = ParserSlash; + + case ParserNormal: // a different sequence seen + switch (Chr8) { + case '\0': + ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); + State = ParserEnd; + break; + case '/': + ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); + State = ParserSlash; + break; + case '.': + // + // fall through + // + default: + // + // copy and stay in same state + // + ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); + break; + } + break; - case '.': - // - // fall through - // + default: - // - // copy and stay in same state - // - ParserCopy (SanitizedBuffer, &SanitizedPosition, SizeToSanitize, Chr8); + ASSERT (FALSE); break; - } - break; - - default: - ASSERT (FALSE); - break; } } while (State != ParserEnd); @@ -1634,16 +1699,16 @@ FreeRhsPath8: **/ EFI_STATUS VirtioFsLookupMostSpecificParentDir ( - IN OUT VIRTIO_FS *VirtioFs, - IN OUT CHAR8 *Path, - OUT UINT64 *DirNodeId, - OUT CHAR8 **LastComponent + IN OUT VIRTIO_FS *VirtioFs, + IN OUT CHAR8 *Path, + OUT UINT64 *DirNodeId, + OUT CHAR8 **LastComponent ) { - UINT64 ParentDirNodeId; - CHAR8 *Slash; - EFI_STATUS Status; - UINT64 NextDirNodeId; + UINT64 ParentDirNodeId; + CHAR8 *Slash; + EFI_STATUS Status; + UINT64 NextDirNodeId; if (AsciiStrCmp (Path, "/") == 0) { return EFI_INVALID_PARAMETER; @@ -1651,10 +1716,10 @@ VirtioFsLookupMostSpecificParentDir ( ParentDirNodeId = VIRTIO_FS_FUSE_ROOT_DIR_NODE_ID; Slash = Path; - for (;;) { - CHAR8 *NextSlash; - VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr; - EFI_FILE_INFO FileInfo; + for ( ; ;) { + CHAR8 *NextSlash; + VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr; + EFI_FILE_INFO FileInfo; // // Find the slash (if any) that terminates the next pathname component. @@ -1670,8 +1735,13 @@ VirtioFsLookupMostSpecificParentDir ( // up. // *NextSlash = '\0'; - Status = VirtioFsFuseLookup (VirtioFs, ParentDirNodeId, Slash + 1, - &NextDirNodeId, &FuseAttr); + Status = VirtioFsFuseLookup ( + VirtioFs, + ParentDirNodeId, + Slash + 1, + &NextDirNodeId, + &FuseAttr + ); *NextSlash = '/'; // @@ -1696,6 +1766,7 @@ VirtioFsLookupMostSpecificParentDir ( if (EFI_ERROR (Status)) { goto ForgetNextDirNodeId; } + if ((FileInfo.Attribute & EFI_FILE_DIRECTORY) == 0) { Status = EFI_ACCESS_DENIED; goto ForgetNextDirNodeId; @@ -1751,14 +1822,14 @@ ForgetNextDirNodeId: EFI_STATUS VirtioFsGetBasename ( IN CHAR8 *Path, - OUT CHAR16 *Basename OPTIONAL, + OUT CHAR16 *Basename OPTIONAL, IN OUT UINTN *BasenameSize ) { - UINTN AllocSize; - UINTN LastComponent; - UINTN Idx; - UINTN PathSize; + UINTN AllocSize; + UINTN LastComponent; + UINTN Idx; + UINTN PathSize; AllocSize = *BasenameSize; @@ -1768,6 +1839,7 @@ VirtioFsGetBasename ( LastComponent = Idx; } } + PathSize = Idx + 1; ASSERT (LastComponent < MAX_UINTN); LastComponent++; @@ -1780,6 +1852,7 @@ VirtioFsGetBasename ( for (Idx = LastComponent; Idx < PathSize; Idx++) { Basename[Idx - LastComponent] = Path[Idx]; } + return EFI_SUCCESS; } @@ -1845,8 +1918,8 @@ EFI_STATUS VirtioFsComposeRenameDestination ( IN CHAR8 *LhsPath8, IN CHAR16 *RhsPath16, - OUT CHAR8 **ResultPath8, - OUT BOOLEAN *RootEscape + OUT CHAR8 **ResultPath8, + OUT BOOLEAN *RootEscape ) { // @@ -1854,13 +1927,13 @@ VirtioFsComposeRenameDestination ( // excluding terminating NULs. Sizes are expressed as byte counts, including // the bytes taken up by terminating NULs. // - UINTN RhsLen; - UINTN LhsBasename16Size; - EFI_STATUS Status; - UINTN LhsBasenameLen; - UINTN DestSuffix16Size; - CHAR16 *DestSuffix16; - CHAR8 *DestPrefix8; + UINTN RhsLen; + UINTN LhsBasename16Size; + EFI_STATUS Status; + UINTN LhsBasenameLen; + UINTN DestSuffix16Size; + CHAR16 *DestSuffix16; + CHAR8 *DestPrefix8; // // An empty destination operand for the rename/move operation is not allowed. @@ -1869,6 +1942,7 @@ VirtioFsComposeRenameDestination ( if (RhsLen == 0) { return EFI_INVALID_PARAMETER; } + // // Enforce length restriction on RhsPath16. // @@ -1880,7 +1954,7 @@ VirtioFsComposeRenameDestination ( // Determine the length of the basename of LhsPath8. // LhsBasename16Size = 0; - Status = VirtioFsGetBasename (LhsPath8, NULL, &LhsBasename16Size); + Status = VirtioFsGetBasename (LhsPath8, NULL, &LhsBasename16Size); ASSERT (Status == EFI_BUFFER_TOO_SMALL); ASSERT (LhsBasename16Size >= sizeof (CHAR16)); ASSERT (LhsBasename16Size % sizeof (CHAR16) == 0); @@ -1900,20 +1974,24 @@ VirtioFsComposeRenameDestination ( // Append the basename of LhsPath8 as a CHAR16 string to RhsPath16. // DestSuffix16Size = RhsLen * sizeof (CHAR16) + LhsBasename16Size; - DestSuffix16 = AllocatePool (DestSuffix16Size); + DestSuffix16 = AllocatePool (DestSuffix16Size); if (DestSuffix16 == NULL) { return EFI_OUT_OF_RESOURCES; } + CopyMem (DestSuffix16, RhsPath16, RhsLen * sizeof (CHAR16)); - Status = VirtioFsGetBasename (LhsPath8, DestSuffix16 + RhsLen, - &LhsBasename16Size); + Status = VirtioFsGetBasename ( + LhsPath8, + DestSuffix16 + RhsLen, + &LhsBasename16Size + ); ASSERT_EFI_ERROR (Status); } else { // // Just create a copy of RhsPath16. // DestSuffix16Size = (RhsLen + 1) * sizeof (CHAR16); - DestSuffix16 = AllocateCopyPool (DestSuffix16Size, RhsPath16); + DestSuffix16 = AllocateCopyPool (DestSuffix16Size, RhsPath16); if (DestSuffix16 == NULL) { return EFI_OUT_OF_RESOURCES; } @@ -1935,8 +2013,8 @@ VirtioFsComposeRenameDestination ( goto FreeDestSuffix16; } } else { - UINTN LhsLen; - UINTN DestPrefixLen; + UINTN LhsLen; + UINTN DestPrefixLen; // // Strip the basename of LhsPath8. @@ -1951,11 +2029,13 @@ VirtioFsComposeRenameDestination ( if (DestPrefixLen > 1) { DestPrefixLen--; } + DestPrefix8 = AllocatePool (DestPrefixLen + 1); if (DestPrefix8 == NULL) { Status = EFI_OUT_OF_RESOURCES; goto FreeDestSuffix16; } + CopyMem (DestPrefix8, LhsPath8, DestPrefixLen); DestPrefix8[DestPrefixLen] = '\0'; } @@ -1964,8 +2044,12 @@ VirtioFsComposeRenameDestination ( // Now combine DestPrefix8 and DestSuffix16 into the final canonical // pathname. // - Status = VirtioFsAppendPath (DestPrefix8, DestSuffix16, ResultPath8, - RootEscape); + Status = VirtioFsAppendPath ( + DestPrefix8, + DestSuffix16, + ResultPath8, + RootEscape + ); FreePool (DestPrefix8); // @@ -2004,13 +2088,13 @@ FreeDestSuffix16: **/ EFI_STATUS VirtioFsFuseAttrToEfiFileInfo ( - IN VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr, - OUT EFI_FILE_INFO *FileInfo + IN VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr, + OUT EFI_FILE_INFO *FileInfo ) { - UINT64 EpochTime[3]; - EFI_TIME *ConvertedTime[ARRAY_SIZE (EpochTime)]; - UINTN Idx; + UINT64 EpochTime[3]; + EFI_TIME *ConvertedTime[ARRAY_SIZE (EpochTime)]; + UINTN Idx; FileInfo->FileSize = FuseAttr->Size; @@ -2020,6 +2104,7 @@ VirtioFsFuseAttrToEfiFileInfo ( if (FuseAttr->Blocks >= BIT55) { return EFI_UNSUPPORTED; } + FileInfo->PhysicalSize = LShiftU64 (FuseAttr->Blocks, 9); // @@ -2041,6 +2126,7 @@ VirtioFsFuseAttrToEfiFileInfo ( if (EpochTime[Idx] > MAX_UINTN) { return EFI_UNSUPPORTED; } + // // Set the following fields in the converted time: Year, Month, Day, Hour, // Minute, Second, Nanosecond. @@ -2063,32 +2149,34 @@ VirtioFsFuseAttrToEfiFileInfo ( // Set the attributes. // switch (FuseAttr->Mode & VIRTIO_FS_FUSE_MODE_TYPE_MASK) { - case VIRTIO_FS_FUSE_MODE_TYPE_DIR: - FileInfo->Attribute = EFI_FILE_DIRECTORY; - break; - case VIRTIO_FS_FUSE_MODE_TYPE_REG: - FileInfo->Attribute = 0; - break; - default: - // - // Other file types are not supported. - // - return EFI_UNSUPPORTED; + case VIRTIO_FS_FUSE_MODE_TYPE_DIR: + FileInfo->Attribute = EFI_FILE_DIRECTORY; + break; + case VIRTIO_FS_FUSE_MODE_TYPE_REG: + FileInfo->Attribute = 0; + break; + default: + // + // Other file types are not supported. + // + return EFI_UNSUPPORTED; } + // // Report the regular file or directory as read-only if all classes lack // write permission. // if ((FuseAttr->Mode & (VIRTIO_FS_FUSE_MODE_PERM_WUSR | VIRTIO_FS_FUSE_MODE_PERM_WGRP | - VIRTIO_FS_FUSE_MODE_PERM_WOTH)) == 0) { + VIRTIO_FS_FUSE_MODE_PERM_WOTH)) == 0) + { FileInfo->Attribute |= EFI_FILE_READ_ONLY; } // // A hard link count greater than 1 is not supported for regular files. // - if ((FileInfo->Attribute & EFI_FILE_DIRECTORY) == 0 && FuseAttr->Nlink > 1) { + if (((FileInfo->Attribute & EFI_FILE_DIRECTORY) == 0) && (FuseAttr->Nlink > 1)) { return EFI_UNSUPPORTED; } @@ -2129,19 +2217,20 @@ VirtioFsFuseAttrToEfiFileInfo ( **/ EFI_STATUS VirtioFsFuseDirentPlusToEfiFileInfo ( - IN VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE *FuseDirent, - IN OUT EFI_FILE_INFO *FileInfo + IN VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE *FuseDirent, + IN OUT EFI_FILE_INFO *FileInfo ) { - UINTN DirentSize; - UINTN FileInfoSize; - UINT8 *DirentName; - UINT32 Idx; + UINTN DirentSize; + UINTN FileInfoSize; + UINT8 *DirentName; + UINT32 Idx; DirentSize = VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE_SIZE (FuseDirent->Namelen); if (DirentSize == 0) { return EFI_INVALID_PARAMETER; } + // // We're now safe from overflow in the calculation below. // @@ -2156,15 +2245,18 @@ VirtioFsFuseDirentPlusToEfiFileInfo ( // DirentName = (UINT8 *)(FuseDirent + 1); for (Idx = 0; Idx < FuseDirent->Namelen; Idx++) { - UINT8 NameByte; + UINT8 NameByte; NameByte = DirentName[Idx]; - if (NameByte < 0x20 || NameByte > 0x7E || - NameByte == '/' || NameByte == '\\') { + if ((NameByte < 0x20) || (NameByte > 0x7E) || + (NameByte == '/') || (NameByte == '\\')) + { return EFI_UNSUPPORTED; } + FileInfo->FileName[Idx] = (CHAR16)NameByte; } + FileInfo->FileName[Idx++] = L'\0'; // // Set the (possibly reduced) size. @@ -2196,22 +2288,23 @@ VirtioFsFuseDirentPlusToEfiFileInfo ( **/ VOID VirtioFsGetFuseSizeUpdate ( - IN EFI_FILE_INFO *Info, - IN EFI_FILE_INFO *NewInfo, - OUT BOOLEAN *Update, - OUT UINT64 *Size + IN EFI_FILE_INFO *Info, + IN EFI_FILE_INFO *NewInfo, + OUT BOOLEAN *Update, + OUT UINT64 *Size ) { - BOOLEAN IsDirectory; + BOOLEAN IsDirectory; IsDirectory = (BOOLEAN)((Info->Attribute & EFI_FILE_DIRECTORY) != 0); - if (IsDirectory || Info->FileSize == NewInfo->FileSize) { + if (IsDirectory || (Info->FileSize == NewInfo->FileSize)) { *Update = FALSE; return; } + *Update = TRUE; - *Size = NewInfo->FileSize; + *Size = NewInfo->FileSize; } /** @@ -2260,20 +2353,20 @@ VirtioFsGetFuseSizeUpdate ( **/ EFI_STATUS VirtioFsGetFuseTimeUpdates ( - IN EFI_FILE_INFO *Info, - IN EFI_FILE_INFO *NewInfo, - OUT BOOLEAN *UpdateAtime, - OUT BOOLEAN *UpdateMtime, - OUT UINT64 *Atime, - OUT UINT64 *Mtime + IN EFI_FILE_INFO *Info, + IN EFI_FILE_INFO *NewInfo, + OUT BOOLEAN *UpdateAtime, + OUT BOOLEAN *UpdateMtime, + OUT UINT64 *Atime, + OUT UINT64 *Mtime ) { - EFI_TIME *Time[3]; - EFI_TIME *NewTime[ARRAY_SIZE (Time)]; - UINTN Idx; - STATIC CONST EFI_TIME ZeroTime = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - BOOLEAN Change[ARRAY_SIZE (Time)]; - UINT64 Seconds[ARRAY_SIZE (Time)]; + EFI_TIME *Time[3]; + EFI_TIME *NewTime[ARRAY_SIZE (Time)]; + UINTN Idx; + STATIC CONST EFI_TIME ZeroTime = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + BOOLEAN Change[ARRAY_SIZE (Time)]; + UINT64 Seconds[ARRAY_SIZE (Time)]; Time[0] = &Info->CreateTime; Time[1] = &Info->LastAccessTime; @@ -2288,14 +2381,16 @@ VirtioFsGetFuseTimeUpdates ( // changed, calculate the seconds since the Epoch. // for (Idx = 0; Idx < ARRAY_SIZE (Time); Idx++) { - if (CompareMem (NewTime[Idx], &ZeroTime, sizeof (EFI_TIME)) == 0 || - CompareMem (NewTime[Idx], Time[Idx], sizeof (EFI_TIME)) == 0) { + if ((CompareMem (NewTime[Idx], &ZeroTime, sizeof (EFI_TIME)) == 0) || + (CompareMem (NewTime[Idx], Time[Idx], sizeof (EFI_TIME)) == 0)) + { Change[Idx] = FALSE; } else { if (!IsTimeValid (NewTime[Idx])) { return EFI_INVALID_PARAMETER; } - Change[Idx] = TRUE; + + Change[Idx] = TRUE; Seconds[Idx] = EfiTimeToEpoch (NewTime[Idx]); } } @@ -2307,7 +2402,7 @@ VirtioFsGetFuseTimeUpdates ( // last modification time. If changes are requested for both, but to // different timestamps, we reject the request. // - if (Change[0] && Change[2] && Seconds[0] != Seconds[2]) { + if (Change[0] && Change[2] && (Seconds[0] != Seconds[2])) { return EFI_ACCESS_DENIED; } @@ -2316,15 +2411,17 @@ VirtioFsGetFuseTimeUpdates ( if (Change[0]) { *UpdateMtime = TRUE; - *Mtime = Seconds[0]; + *Mtime = Seconds[0]; } + if (Change[1]) { *UpdateAtime = TRUE; - *Atime = Seconds[1]; + *Atime = Seconds[1]; } + if (Change[2]) { *UpdateMtime = TRUE; - *Mtime = Seconds[2]; + *Mtime = Seconds[2]; } return EFI_SUCCESS; @@ -2360,16 +2457,16 @@ VirtioFsGetFuseTimeUpdates ( **/ EFI_STATUS VirtioFsGetFuseModeUpdate ( - IN EFI_FILE_INFO *Info, - IN EFI_FILE_INFO *NewInfo, - OUT BOOLEAN *Update, - OUT UINT32 *Mode - ) + IN EFI_FILE_INFO *Info, + IN EFI_FILE_INFO *NewInfo, + OUT BOOLEAN *Update, + OUT UINT32 *Mode + ) { - UINT64 Toggle; - BOOLEAN IsDirectory; - BOOLEAN IsWriteable; - BOOLEAN WillBeWriteable; + UINT64 Toggle; + BOOLEAN IsDirectory; + BOOLEAN IsWriteable; + BOOLEAN WillBeWriteable; Toggle = Info->Attribute ^ NewInfo->Attribute; if ((Toggle & ~EFI_FILE_VALID_ATTR) != 0) { @@ -2378,6 +2475,7 @@ VirtioFsGetFuseModeUpdate ( // return EFI_ACCESS_DENIED; } + if ((Toggle & EFI_FILE_DIRECTORY) != 0) { // // EFI_FILE_DIRECTORY cannot be toggled. @@ -2421,6 +2519,7 @@ VirtioFsGetFuseModeUpdate ( VIRTIO_FS_FUSE_MODE_PERM_ROTH); } } + *Update = TRUE; return EFI_SUCCESS; } diff --git a/OvmfPkg/VirtioFsDxe/SimpleFsClose.c b/OvmfPkg/VirtioFsDxe/SimpleFsClose.c index 4c1cf52112..0cae2126b7 100644 --- a/OvmfPkg/VirtioFsDxe/SimpleFsClose.c +++ b/OvmfPkg/VirtioFsDxe/SimpleFsClose.c @@ -14,11 +14,11 @@ EFI_STATUS EFIAPI VirtioFsSimpleFileClose ( - IN EFI_FILE_PROTOCOL *This + IN EFI_FILE_PROTOCOL *This ) { - VIRTIO_FS_FILE *VirtioFsFile; - VIRTIO_FS *VirtioFs; + VIRTIO_FS_FILE *VirtioFsFile; + VIRTIO_FS *VirtioFs; VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This); VirtioFs = VirtioFsFile->OwnerFs; @@ -34,16 +34,27 @@ VirtioFsSimpleFileClose ( // if (VirtioFsFile->IsOpenForWriting) { if (!VirtioFsFile->IsDirectory) { - VirtioFsFuseFlush (VirtioFs, VirtioFsFile->NodeId, - VirtioFsFile->FuseHandle); + VirtioFsFuseFlush ( + VirtioFs, + VirtioFsFile->NodeId, + VirtioFsFile->FuseHandle + ); } - VirtioFsFuseFsyncFileOrDir (VirtioFs, VirtioFsFile->NodeId, - VirtioFsFile->FuseHandle, VirtioFsFile->IsDirectory); + VirtioFsFuseFsyncFileOrDir ( + VirtioFs, + VirtioFsFile->NodeId, + VirtioFsFile->FuseHandle, + VirtioFsFile->IsDirectory + ); } - VirtioFsFuseReleaseFileOrDir (VirtioFs, VirtioFsFile->NodeId, - VirtioFsFile->FuseHandle, VirtioFsFile->IsDirectory); + VirtioFsFuseReleaseFileOrDir ( + VirtioFs, + VirtioFsFile->NodeId, + VirtioFsFile->FuseHandle, + VirtioFsFile->IsDirectory + ); // // VirtioFsFile->FuseHandle is gone at this point, but VirtioFsFile->NodeId @@ -63,6 +74,7 @@ VirtioFsSimpleFileClose ( if (VirtioFsFile->FileInfoArray != NULL) { FreePool (VirtioFsFile->FileInfoArray); } + FreePool (VirtioFsFile); return EFI_SUCCESS; } diff --git a/OvmfPkg/VirtioFsDxe/SimpleFsDelete.c b/OvmfPkg/VirtioFsDxe/SimpleFsDelete.c index 76a868b3c2..e745c4e252 100644 --- a/OvmfPkg/VirtioFsDxe/SimpleFsDelete.c +++ b/OvmfPkg/VirtioFsDxe/SimpleFsDelete.c @@ -14,12 +14,12 @@ EFI_STATUS EFIAPI VirtioFsSimpleFileDelete ( - IN EFI_FILE_PROTOCOL *This + IN EFI_FILE_PROTOCOL *This ) { - VIRTIO_FS_FILE *VirtioFsFile; - VIRTIO_FS *VirtioFs; - EFI_STATUS Status; + VIRTIO_FS_FILE *VirtioFsFile; + VIRTIO_FS *VirtioFs; + EFI_STATUS Status; VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This); VirtioFs = VirtioFsFile->OwnerFs; @@ -38,8 +38,12 @@ VirtioFsSimpleFileDelete ( // // If any action fails below, we still try the others. // - VirtioFsFuseReleaseFileOrDir (VirtioFs, VirtioFsFile->NodeId, - VirtioFsFile->FuseHandle, VirtioFsFile->IsDirectory); + VirtioFsFuseReleaseFileOrDir ( + VirtioFs, + VirtioFsFile->NodeId, + VirtioFsFile->FuseHandle, + VirtioFsFile->IsDirectory + ); // // VirtioFsFile->FuseHandle is gone at this point, but VirtioFsFile->NodeId @@ -47,8 +51,8 @@ VirtioFsSimpleFileDelete ( // of this operation determines the return status of the function. // if (VirtioFsFile->IsOpenForWriting) { - UINT64 ParentNodeId; - CHAR8 *LastComponent; + UINT64 ParentNodeId; + CHAR8 *LastComponent; // // Split our canonical pathname into most specific parent directory @@ -78,6 +82,7 @@ VirtioFsSimpleFileDelete ( VirtioFsFuseForget (VirtioFs, ParentNodeId); } } + if (EFI_ERROR (Status)) { // // Map any failure to the spec-mandated warning code. @@ -105,6 +110,7 @@ VirtioFsSimpleFileDelete ( if (VirtioFsFile->FileInfoArray != NULL) { FreePool (VirtioFsFile->FileInfoArray); } + FreePool (VirtioFsFile); return Status; } diff --git a/OvmfPkg/VirtioFsDxe/SimpleFsFlush.c b/OvmfPkg/VirtioFsDxe/SimpleFsFlush.c index ba4a611e5a..d7d04b94e5 100644 --- a/OvmfPkg/VirtioFsDxe/SimpleFsFlush.c +++ b/OvmfPkg/VirtioFsDxe/SimpleFsFlush.c @@ -11,12 +11,12 @@ EFI_STATUS EFIAPI VirtioFsSimpleFileFlush ( - IN EFI_FILE_PROTOCOL *This + IN EFI_FILE_PROTOCOL *This ) { - VIRTIO_FS_FILE *VirtioFsFile; - VIRTIO_FS *VirtioFs; - EFI_STATUS Status; + VIRTIO_FS_FILE *VirtioFsFile; + VIRTIO_FS *VirtioFs; + EFI_STATUS Status; VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This); VirtioFs = VirtioFsFile->OwnerFs; @@ -29,14 +29,21 @@ VirtioFsSimpleFileFlush ( // FUSE_FLUSH is for regular files only. // if (!VirtioFsFile->IsDirectory) { - Status = VirtioFsFuseFlush (VirtioFs, VirtioFsFile->NodeId, - VirtioFsFile->FuseHandle); + Status = VirtioFsFuseFlush ( + VirtioFs, + VirtioFsFile->NodeId, + VirtioFsFile->FuseHandle + ); if (EFI_ERROR (Status)) { return Status; } } - Status = VirtioFsFuseFsyncFileOrDir (VirtioFs, VirtioFsFile->NodeId, - VirtioFsFile->FuseHandle, VirtioFsFile->IsDirectory); + Status = VirtioFsFuseFsyncFileOrDir ( + VirtioFs, + VirtioFsFile->NodeId, + VirtioFsFile->FuseHandle, + VirtioFsFile->IsDirectory + ); return Status; } diff --git a/OvmfPkg/VirtioFsDxe/SimpleFsGetInfo.c b/OvmfPkg/VirtioFsDxe/SimpleFsGetInfo.c index c8be1d5022..d4dc642c4d 100644 --- a/OvmfPkg/VirtioFsDxe/SimpleFsGetInfo.c +++ b/OvmfPkg/VirtioFsDxe/SimpleFsGetInfo.c @@ -19,18 +19,18 @@ STATIC EFI_STATUS GetFileInfo ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { - VIRTIO_FS_FILE *VirtioFsFile; - VIRTIO_FS *VirtioFs; - UINTN AllocSize; - UINTN BasenameSize; - EFI_STATUS Status; - EFI_FILE_INFO *FileInfo; - VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr; + VIRTIO_FS_FILE *VirtioFsFile; + VIRTIO_FS *VirtioFs; + UINTN AllocSize; + UINTN BasenameSize; + EFI_STATUS Status; + EFI_FILE_INFO *FileInfo; + VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr; VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This); VirtioFs = VirtioFsFile->OwnerFs; @@ -41,8 +41,11 @@ GetFileInfo ( // Calculate the needed size. // BasenameSize = 0; - Status = VirtioFsGetBasename (VirtioFsFile->CanonicalPathname, NULL, - &BasenameSize); + Status = VirtioFsGetBasename ( + VirtioFsFile->CanonicalPathname, + NULL, + &BasenameSize + ); ASSERT (Status == EFI_BUFFER_TOO_SMALL); *BufferSize = OFFSET_OF (EFI_FILE_INFO, FileName) + BasenameSize; @@ -53,10 +56,13 @@ GetFileInfo ( // // Set the structure size, and store the basename. // - FileInfo = Buffer; + FileInfo = Buffer; FileInfo->Size = *BufferSize; - Status = VirtioFsGetBasename (VirtioFsFile->CanonicalPathname, - FileInfo->FileName, &BasenameSize); + Status = VirtioFsGetBasename ( + VirtioFsFile->CanonicalPathname, + FileInfo->FileName, + &BasenameSize + ); ASSERT_EFI_ERROR (Status); // @@ -66,6 +72,7 @@ GetFileInfo ( if (!EFI_ERROR (Status)) { Status = VirtioFsFuseAttrToEfiFileInfo (&FuseAttr, FileInfo); } + return (Status == EFI_BUFFER_TOO_SMALL) ? EFI_DEVICE_ERROR : Status; } @@ -75,19 +82,19 @@ GetFileInfo ( STATIC EFI_STATUS GetFileSystemInfo ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { - VIRTIO_FS_FILE *VirtioFsFile; - VIRTIO_FS *VirtioFs; - UINTN AllocSize; - UINTN LabelSize; - EFI_STATUS Status; - VIRTIO_FS_FUSE_STATFS_RESPONSE FilesysAttr; - UINT64 MaxBlocks; - EFI_FILE_SYSTEM_INFO *FilesysInfo; + VIRTIO_FS_FILE *VirtioFsFile; + VIRTIO_FS *VirtioFs; + UINTN AllocSize; + UINTN LabelSize; + EFI_STATUS Status; + VIRTIO_FS_FUSE_STATFS_RESPONSE FilesysAttr; + UINT64 MaxBlocks; + EFI_FILE_SYSTEM_INFO *FilesysInfo; VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This); VirtioFs = VirtioFsFile->OwnerFs; @@ -97,7 +104,7 @@ GetFileSystemInfo ( // // Calculate the needed size. // - LabelSize = StrSize (VirtioFs->Label); + LabelSize = StrSize (VirtioFs->Label); *BufferSize = OFFSET_OF (EFI_FILE_SYSTEM_INFO, VolumeLabel) + LabelSize; if (*BufferSize > AllocSize) { @@ -111,18 +118,22 @@ GetFileSystemInfo ( if (EFI_ERROR (Status)) { return (Status == EFI_BUFFER_TOO_SMALL) ? EFI_DEVICE_ERROR : Status; } + // // Sanity checks... // if (FilesysAttr.Frsize != FilesysAttr.Bsize) { return EFI_UNSUPPORTED; } - if (FilesysAttr.Frsize == 0 || FilesysAttr.Blocks == 0 || - FilesysAttr.Bavail > FilesysAttr.Blocks) { + + if ((FilesysAttr.Frsize == 0) || (FilesysAttr.Blocks == 0) || + (FilesysAttr.Bavail > FilesysAttr.Blocks)) + { return EFI_DEVICE_ERROR; } + MaxBlocks = DivU64x32 (MAX_UINT64, FilesysAttr.Frsize); - if (FilesysAttr.Blocks > MaxBlocks || FilesysAttr.Bavail > MaxBlocks) { + if ((FilesysAttr.Blocks > MaxBlocks) || (FilesysAttr.Bavail > MaxBlocks)) { return EFI_DEVICE_ERROR; } @@ -132,11 +143,15 @@ GetFileSystemInfo ( FilesysInfo = Buffer; FilesysInfo->Size = *BufferSize; FilesysInfo->ReadOnly = FALSE; - FilesysInfo->VolumeSize = MultU64x32 (FilesysAttr.Blocks, - FilesysAttr.Frsize); - FilesysInfo->FreeSpace = MultU64x32 (FilesysAttr.Bavail, - FilesysAttr.Frsize); - FilesysInfo->BlockSize = FilesysAttr.Frsize; + FilesysInfo->VolumeSize = MultU64x32 ( + FilesysAttr.Blocks, + FilesysAttr.Frsize + ); + FilesysInfo->FreeSpace = MultU64x32 ( + FilesysAttr.Bavail, + FilesysAttr.Frsize + ); + FilesysInfo->BlockSize = FilesysAttr.Frsize; CopyMem (FilesysInfo->VolumeLabel, VirtioFs->Label, LabelSize); return EFI_SUCCESS; @@ -148,16 +163,16 @@ GetFileSystemInfo ( STATIC EFI_STATUS GetFileSystemVolumeLabelInfo ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { - VIRTIO_FS_FILE *VirtioFsFile; - VIRTIO_FS *VirtioFs; - UINTN AllocSize; - UINTN LabelSize; - EFI_FILE_SYSTEM_VOLUME_LABEL *FilesysVolumeLabel; + VIRTIO_FS_FILE *VirtioFsFile; + VIRTIO_FS *VirtioFs; + UINTN AllocSize; + UINTN LabelSize; + EFI_FILE_SYSTEM_VOLUME_LABEL *FilesysVolumeLabel; VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This); VirtioFs = VirtioFsFile->OwnerFs; @@ -167,7 +182,7 @@ GetFileSystemVolumeLabelInfo ( // // Calculate the needed size. // - LabelSize = StrSize (VirtioFs->Label); + LabelSize = StrSize (VirtioFs->Label); *BufferSize = (OFFSET_OF (EFI_FILE_SYSTEM_VOLUME_LABEL, VolumeLabel) + LabelSize); @@ -187,10 +202,10 @@ GetFileSystemVolumeLabelInfo ( EFI_STATUS EFIAPI VirtioFsSimpleFileGetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { if (CompareGuid (InformationType, &gEfiFileInfoGuid)) { diff --git a/OvmfPkg/VirtioFsDxe/SimpleFsGetPosition.c b/OvmfPkg/VirtioFsDxe/SimpleFsGetPosition.c index 53212621e9..6c30dcec57 100644 --- a/OvmfPkg/VirtioFsDxe/SimpleFsGetPosition.c +++ b/OvmfPkg/VirtioFsDxe/SimpleFsGetPosition.c @@ -12,16 +12,17 @@ EFI_STATUS EFIAPI VirtioFsSimpleFileGetPosition ( - IN EFI_FILE_PROTOCOL *This, - OUT UINT64 *Position + IN EFI_FILE_PROTOCOL *This, + OUT UINT64 *Position ) { - VIRTIO_FS_FILE *VirtioFsFile; + VIRTIO_FS_FILE *VirtioFsFile; VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This); if (VirtioFsFile->IsDirectory) { return EFI_UNSUPPORTED; } + *Position = VirtioFsFile->FilePosition; return EFI_SUCCESS; } diff --git a/OvmfPkg/VirtioFsDxe/SimpleFsOpen.c b/OvmfPkg/VirtioFsDxe/SimpleFsOpen.c index 9e46e8ab83..d479f76f5b 100644 --- a/OvmfPkg/VirtioFsDxe/SimpleFsOpen.c +++ b/OvmfPkg/VirtioFsDxe/SimpleFsOpen.c @@ -38,13 +38,13 @@ STATIC EFI_STATUS OpenRootDirectory ( - IN OUT VIRTIO_FS *VirtioFs, - OUT EFI_FILE_PROTOCOL **NewHandle, - IN BOOLEAN OpenForWriting + IN OUT VIRTIO_FS *VirtioFs, + OUT EFI_FILE_PROTOCOL **NewHandle, + IN BOOLEAN OpenForWriting ) { - EFI_STATUS Status; - VIRTIO_FS_FILE *NewVirtioFsFile; + EFI_STATUS Status; + VIRTIO_FS_FILE *NewVirtioFsFile; // // VirtioFsOpenVolume() opens the root directory for read-only access. If the @@ -54,18 +54,23 @@ OpenRootDirectory ( // permission first. // if (OpenForWriting) { - VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr; - EFI_FILE_INFO FileInfo; - - Status = VirtioFsFuseGetAttr (VirtioFs, VIRTIO_FS_FUSE_ROOT_DIR_NODE_ID, - &FuseAttr); + VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr; + EFI_FILE_INFO FileInfo; + + Status = VirtioFsFuseGetAttr ( + VirtioFs, + VIRTIO_FS_FUSE_ROOT_DIR_NODE_ID, + &FuseAttr + ); if (EFI_ERROR (Status)) { return Status; } + Status = VirtioFsFuseAttrToEfiFileInfo (&FuseAttr, &FileInfo); if (EFI_ERROR (Status)) { return Status; } + if ((FileInfo.Attribute & EFI_FILE_READ_ONLY) != 0) { return EFI_ACCESS_DENIED; } @@ -76,7 +81,7 @@ OpenRootDirectory ( return Status; } - NewVirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (*NewHandle); + NewVirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (*NewHandle); NewVirtioFsFile->IsOpenForWriting = OpenForWriting; return EFI_SUCCESS; } @@ -132,33 +137,39 @@ OpenRootDirectory ( STATIC EFI_STATUS OpenExistentFileOrDirectory ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 DirNodeId, - IN CHAR8 *Name, - IN BOOLEAN OpenForWriting, - OUT UINT64 *NodeId, - OUT UINT64 *FuseHandle, - OUT BOOLEAN *NodeIsDirectory + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 DirNodeId, + IN CHAR8 *Name, + IN BOOLEAN OpenForWriting, + OUT UINT64 *NodeId, + OUT UINT64 *FuseHandle, + OUT BOOLEAN *NodeIsDirectory ) { - EFI_STATUS Status; - UINT64 ResolvedNodeId; - VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr; - EFI_FILE_INFO FileInfo; - BOOLEAN IsDirectory; - UINT64 NewFuseHandle; - - Status = VirtioFsFuseLookup (VirtioFs, DirNodeId, Name, &ResolvedNodeId, - &FuseAttr); + EFI_STATUS Status; + UINT64 ResolvedNodeId; + VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr; + EFI_FILE_INFO FileInfo; + BOOLEAN IsDirectory; + UINT64 NewFuseHandle; + + Status = VirtioFsFuseLookup ( + VirtioFs, + DirNodeId, + Name, + &ResolvedNodeId, + &FuseAttr + ); if (EFI_ERROR (Status)) { return Status; } + Status = VirtioFsFuseAttrToEfiFileInfo (&FuseAttr, &FileInfo); if (EFI_ERROR (Status)) { goto ForgetResolvedNodeId; } - if (OpenForWriting && (FileInfo.Attribute & EFI_FILE_READ_ONLY) != 0) { + if (OpenForWriting && ((FileInfo.Attribute & EFI_FILE_READ_ONLY) != 0)) { Status = EFI_ACCESS_DENIED; goto ForgetResolvedNodeId; } @@ -173,9 +184,14 @@ OpenExistentFileOrDirectory ( // Status = VirtioFsFuseOpenDir (VirtioFs, ResolvedNodeId, &NewFuseHandle); } else { - Status = VirtioFsFuseOpen (VirtioFs, ResolvedNodeId, OpenForWriting, - &NewFuseHandle); + Status = VirtioFsFuseOpen ( + VirtioFs, + ResolvedNodeId, + OpenForWriting, + &NewFuseHandle + ); } + if (EFI_ERROR (Status)) { goto ForgetResolvedNodeId; } @@ -216,16 +232,16 @@ ForgetResolvedNodeId: STATIC EFI_STATUS CreateDirectory ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 DirNodeId, - IN CHAR8 *Name, - OUT UINT64 *NodeId, - OUT UINT64 *FuseHandle + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 DirNodeId, + IN CHAR8 *Name, + OUT UINT64 *NodeId, + OUT UINT64 *FuseHandle ) { - EFI_STATUS Status; - UINT64 NewChildDirNodeId; - UINT64 NewFuseHandle; + EFI_STATUS Status; + UINT64 NewChildDirNodeId; + UINT64 NewFuseHandle; Status = VirtioFsFuseMkDir (VirtioFs, DirNodeId, Name, &NewChildDirNodeId); if (EFI_ERROR (Status)) { @@ -273,41 +289,46 @@ RemoveNewChildDir: STATIC EFI_STATUS CreateRegularFile ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 DirNodeId, - IN CHAR8 *Name, - OUT UINT64 *NodeId, - OUT UINT64 *FuseHandle + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 DirNodeId, + IN CHAR8 *Name, + OUT UINT64 *NodeId, + OUT UINT64 *FuseHandle ) { - return VirtioFsFuseOpenOrCreate (VirtioFs, DirNodeId, Name, NodeId, - FuseHandle); + return VirtioFsFuseOpenOrCreate ( + VirtioFs, + DirNodeId, + Name, + NodeId, + FuseHandle + ); } EFI_STATUS EFIAPI VirtioFsSimpleFileOpen ( - IN EFI_FILE_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **NewHandle, - IN CHAR16 *FileName, - IN UINT64 OpenMode, - IN UINT64 Attributes + IN EFI_FILE_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **NewHandle, + IN CHAR16 *FileName, + IN UINT64 OpenMode, + IN UINT64 Attributes ) { - VIRTIO_FS_FILE *VirtioFsFile; - VIRTIO_FS *VirtioFs; - BOOLEAN OpenForWriting; - BOOLEAN PermitCreation; - BOOLEAN CreateDirectoryIfCreating; - VIRTIO_FS_FILE *NewVirtioFsFile; - EFI_STATUS Status; - CHAR8 *NewCanonicalPath; - BOOLEAN RootEscape; - UINT64 DirNodeId; - CHAR8 *LastComponent; - UINT64 NewNodeId; - UINT64 NewFuseHandle; - BOOLEAN NewNodeIsDirectory; + VIRTIO_FS_FILE *VirtioFsFile; + VIRTIO_FS *VirtioFs; + BOOLEAN OpenForWriting; + BOOLEAN PermitCreation; + BOOLEAN CreateDirectoryIfCreating; + VIRTIO_FS_FILE *NewVirtioFsFile; + EFI_STATUS Status; + CHAR8 *NewCanonicalPath; + BOOLEAN RootEscape; + UINT64 DirNodeId; + CHAR8 *LastComponent; + UINT64 NewNodeId; + UINT64 NewFuseHandle; + BOOLEAN NewNodeIsDirectory; VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This); VirtioFs = VirtioFsFile->OwnerFs; @@ -316,20 +337,20 @@ VirtioFsSimpleFileOpen ( // Validate OpenMode. // switch (OpenMode) { - case EFI_FILE_MODE_READ: - OpenForWriting = FALSE; - PermitCreation = FALSE; - break; - case EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE: - OpenForWriting = TRUE; - PermitCreation = FALSE; - break; - case EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE: - OpenForWriting = TRUE; - PermitCreation = TRUE; - break; - default: - return EFI_INVALID_PARAMETER; + case EFI_FILE_MODE_READ: + OpenForWriting = FALSE; + PermitCreation = FALSE; + break; + case EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE: + OpenForWriting = TRUE; + PermitCreation = FALSE; + break; + case EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE: + OpenForWriting = TRUE; + PermitCreation = TRUE; + break; + default: + return EFI_INVALID_PARAMETER; } // @@ -366,6 +387,7 @@ VirtioFsSimpleFileOpen ( )); return EFI_INVALID_PARAMETER; } + CreateDirectoryIfCreating = (BOOLEAN)((Attributes & EFI_FILE_DIRECTORY) != 0); } @@ -401,11 +423,16 @@ VirtioFsSimpleFileOpen ( // Create the canonical pathname at which the desired file is expected to // exist. // - Status = VirtioFsAppendPath (VirtioFsFile->CanonicalPathname, FileName, - &NewCanonicalPath, &RootEscape); + Status = VirtioFsAppendPath ( + VirtioFsFile->CanonicalPathname, + FileName, + &NewCanonicalPath, + &RootEscape + ); if (EFI_ERROR (Status)) { goto FreeNewVirtioFsFile; } + if (RootEscape) { Status = EFI_ACCESS_DENIED; goto FreeNewCanonicalPath; @@ -426,8 +453,12 @@ VirtioFsSimpleFileOpen ( // (given by DirNodeId) and last pathname component (i.e., immediate child // within that parent directory). // - Status = VirtioFsLookupMostSpecificParentDir (VirtioFs, NewCanonicalPath, - &DirNodeId, &LastComponent); + Status = VirtioFsLookupMostSpecificParentDir ( + VirtioFs, + NewCanonicalPath, + &DirNodeId, + &LastComponent + ); if (EFI_ERROR (Status)) { goto FreeNewCanonicalPath; } @@ -441,22 +472,40 @@ VirtioFsSimpleFileOpen ( // Try to open LastComponent directly under DirNodeId, as an existent regular // file or directory. // - Status = OpenExistentFileOrDirectory (VirtioFs, DirNodeId, LastComponent, - OpenForWriting, &NewNodeId, &NewFuseHandle, &NewNodeIsDirectory); + Status = OpenExistentFileOrDirectory ( + VirtioFs, + DirNodeId, + LastComponent, + OpenForWriting, + &NewNodeId, + &NewFuseHandle, + &NewNodeIsDirectory + ); // // If LastComponent could not be found under DirNodeId, but the request // allows us to create a new entry, attempt creating the requested regular // file or directory. // - if (Status == EFI_NOT_FOUND && PermitCreation) { + if ((Status == EFI_NOT_FOUND) && PermitCreation) { ASSERT (OpenForWriting); if (CreateDirectoryIfCreating) { - Status = CreateDirectory (VirtioFs, DirNodeId, LastComponent, &NewNodeId, - &NewFuseHandle); + Status = CreateDirectory ( + VirtioFs, + DirNodeId, + LastComponent, + &NewNodeId, + &NewFuseHandle + ); } else { - Status = CreateRegularFile (VirtioFs, DirNodeId, LastComponent, - &NewNodeId, &NewFuseHandle); + Status = CreateRegularFile ( + VirtioFs, + DirNodeId, + LastComponent, + &NewNodeId, + &NewFuseHandle + ); } + NewNodeIsDirectory = CreateDirectoryIfCreating; } diff --git a/OvmfPkg/VirtioFsDxe/SimpleFsOpenVolume.c b/OvmfPkg/VirtioFsDxe/SimpleFsOpenVolume.c index 058e7a41ab..d08b8e0a1d 100644 --- a/OvmfPkg/VirtioFsDxe/SimpleFsOpenVolume.c +++ b/OvmfPkg/VirtioFsDxe/SimpleFsOpenVolume.c @@ -21,15 +21,15 @@ EFI_STATUS EFIAPI VirtioFsOpenVolume ( - IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **Root + IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **Root ) { - VIRTIO_FS *VirtioFs; - VIRTIO_FS_FILE *VirtioFsFile; - EFI_STATUS Status; - CHAR8 *CanonicalPathname; - UINT64 RootDirHandle; + VIRTIO_FS *VirtioFs; + VIRTIO_FS_FILE *VirtioFsFile; + EFI_STATUS Status; + CHAR8 *CanonicalPathname; + UINT64 RootDirHandle; VirtioFs = VIRTIO_FS_FROM_SIMPLE_FS (This); @@ -47,8 +47,11 @@ VirtioFsOpenVolume ( // // Open the root directory. // - Status = VirtioFsFuseOpenDir (VirtioFs, VIRTIO_FS_FUSE_ROOT_DIR_NODE_ID, - &RootDirHandle); + Status = VirtioFsFuseOpenDir ( + VirtioFs, + VIRTIO_FS_FUSE_ROOT_DIR_NODE_ID, + &RootDirHandle + ); if (EFI_ERROR (Status)) { goto FreeCanonicalPathname; } diff --git a/OvmfPkg/VirtioFsDxe/SimpleFsRead.c b/OvmfPkg/VirtioFsDxe/SimpleFsRead.c index d6368342a1..9940bd99fe 100644 --- a/OvmfPkg/VirtioFsDxe/SimpleFsRead.c +++ b/OvmfPkg/VirtioFsDxe/SimpleFsRead.c @@ -37,21 +37,22 @@ STATIC EFI_STATUS PopulateFileInfo ( - IN VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE *Dirent, - IN UINTN SingleFileInfoSize, - OUT EFI_FILE_INFO *FileInfo + IN VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE *Dirent, + IN UINTN SingleFileInfoSize, + OUT EFI_FILE_INFO *FileInfo ) { - EFI_STATUS Status; + EFI_STATUS Status; // // Convert the name, set the actual size. // FileInfo->Size = SingleFileInfoSize; - Status = VirtioFsFuseDirentPlusToEfiFileInfo (Dirent, FileInfo); + Status = VirtioFsFuseDirentPlusToEfiFileInfo (Dirent, FileInfo); if (EFI_ERROR (Status)) { return Status; } + // // Populate the scalar fields. // @@ -65,19 +66,19 @@ PopulateFileInfo ( STATIC EFI_STATUS RefillFileInfoCache ( - IN OUT VIRTIO_FS_FILE *VirtioFsFile + IN OUT VIRTIO_FS_FILE *VirtioFsFile ) { - VIRTIO_FS *VirtioFs; - EFI_STATUS Status; - VIRTIO_FS_FUSE_STATFS_RESPONSE FilesysAttr; - UINT32 DirentBufSize; - UINT8 *DirentBuf; - UINTN SingleFileInfoSize; - UINT8 *FileInfoArray; - UINT64 DirStreamCookie; - UINT64 CacheEndsAtCookie; - UINTN NumFileInfo; + VIRTIO_FS *VirtioFs; + EFI_STATUS Status; + VIRTIO_FS_FUSE_STATFS_RESPONSE FilesysAttr; + UINT32 DirentBufSize; + UINT8 *DirentBuf; + UINTN SingleFileInfoSize; + UINT8 *FileInfoArray; + UINT64 DirStreamCookie; + UINT64 CacheEndsAtCookie; + UINTN NumFileInfo; // // Allocate a DirentBuf that can receive at least @@ -87,17 +88,20 @@ RefillFileInfoCache ( // check. // VirtioFs = VirtioFsFile->OwnerFs; - Status = VirtioFsFuseStatFs (VirtioFs, VirtioFsFile->NodeId, &FilesysAttr); + Status = VirtioFsFuseStatFs (VirtioFs, VirtioFsFile->NodeId, &FilesysAttr); if (EFI_ERROR (Status)) { return Status; } + DirentBufSize = (UINT32)VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE_SIZE ( - FilesysAttr.Namelen); + FilesysAttr.Namelen + ); if (DirentBufSize == 0) { return EFI_UNSUPPORTED; } + DirentBufSize *= VIRTIO_FS_FILE_MAX_FILE_INFO; - DirentBuf = AllocatePool (DirentBufSize); + DirentBuf = AllocatePool (DirentBufSize); if (DirentBuf == NULL) { return EFI_OUT_OF_RESOURCES; } @@ -128,8 +132,8 @@ RefillFileInfoCache ( CacheEndsAtCookie = VirtioFsFile->FilePosition; NumFileInfo = 0; do { - UINT32 Remaining; - UINT32 Consumed; + UINT32 Remaining; + UINT32 Consumed; // // Fetch a chunk of the directory stream. The chunk may hold more entries @@ -138,15 +142,15 @@ RefillFileInfoCache ( // supported under UEFI (sockets, FIFOs, filenames with backslashes, etc). // Remaining = DirentBufSize; - Status = VirtioFsFuseReadFileOrDir ( - VirtioFs, - VirtioFsFile->NodeId, - VirtioFsFile->FuseHandle, - TRUE, // IsDir - DirStreamCookie, // Offset - &Remaining, // Size - DirentBuf // Data - ); + Status = VirtioFsFuseReadFileOrDir ( + VirtioFs, + VirtioFsFile->NodeId, + VirtioFsFile->FuseHandle, + TRUE, // IsDir + DirStreamCookie, // Offset + &Remaining, // Size + DirentBuf // Data + ); if (EFI_ERROR (Status)) { goto FreeFileInfoArray; } @@ -165,12 +169,13 @@ RefillFileInfoCache ( // Consumed = 0; while (Remaining >= sizeof (VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE)) { - VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE *Dirent; - UINT32 DirentSize; + VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE *Dirent; + UINT32 DirentSize; - Dirent = (VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE *)(DirentBuf + Consumed); + Dirent = (VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE *)(DirentBuf + Consumed); DirentSize = (UINT32)VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE_SIZE ( - Dirent->Namelen); + Dirent->Namelen + ); if (DirentSize == 0) { // // This means one of two things: (a) Dirent->Namelen is zero, or (b) @@ -182,6 +187,7 @@ RefillFileInfoCache ( Status = EFI_PROTOCOL_ERROR; goto FreeFileInfoArray; } + if (DirentSize > Remaining) { // // Dirent->Namelen suggests that the filename byte array (plus any @@ -191,6 +197,7 @@ RefillFileInfoCache ( Status = EFI_PROTOCOL_ERROR; goto FreeFileInfoArray; } + if (Dirent->Namelen > FilesysAttr.Namelen) { // // This is possible without tripping the truncation check above, due to @@ -207,7 +214,7 @@ RefillFileInfoCache ( // Dirent to EFI_FILE_INFO. // if (NumFileInfo < VIRTIO_FS_FILE_MAX_FILE_INFO) { - EFI_FILE_INFO *FileInfo; + EFI_FILE_INFO *FileInfo; FileInfo = (EFI_FILE_INFO *)(FileInfoArray + (NumFileInfo * SingleFileInfoSize)); @@ -224,6 +231,7 @@ RefillFileInfoCache ( // CacheEndsAtCookie = Dirent->CookieForNextEntry; } + // // If Dirent wasn't transformable to an EFI_FILE_INFO, we'll just skip // it. @@ -244,8 +252,8 @@ RefillFileInfoCache ( // Advance to the next entry in DirentBuf. // DirStreamCookie = Dirent->CookieForNextEntry; - Consumed += DirentSize; - Remaining -= DirentSize; + Consumed += DirentSize; + Remaining -= DirentSize; } if (Remaining > 0) { @@ -257,6 +265,7 @@ RefillFileInfoCache ( Status = EFI_PROTOCOL_ERROR; goto FreeFileInfoArray; } + // // Fetch another DirentBuf from the directory stream, unless we've filled // the EFI_FILE_INFO cache. @@ -269,6 +278,7 @@ RefillFileInfoCache ( if (VirtioFsFile->FileInfoArray != NULL) { FreePool (VirtioFsFile->FileInfoArray); } + VirtioFsFile->FileInfoArray = FileInfoArray; VirtioFsFile->SingleFileInfoSize = SingleFileInfoSize; VirtioFsFile->NumFileInfo = NumFileInfo; @@ -293,30 +303,32 @@ FreeDirentBuf: STATIC EFI_STATUS ReadFileInfoCache ( - IN OUT VIRTIO_FS_FILE *VirtioFsFile, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN OUT VIRTIO_FS_FILE *VirtioFsFile, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { - EFI_FILE_INFO *FileInfo; - UINTN CallerAllocated; + EFI_FILE_INFO *FileInfo; + UINTN CallerAllocated; // // Refill the cache if needed. If the refill doesn't produce any new // EFI_FILE_INFO, report End of Directory, by setting (*BufferSize) to 0. // if (VirtioFsFile->NextFileInfo == VirtioFsFile->NumFileInfo) { - EFI_STATUS Status; + EFI_STATUS Status; Status = RefillFileInfoCache (VirtioFsFile); if (EFI_ERROR (Status)) { return (Status == EFI_BUFFER_TOO_SMALL) ? EFI_DEVICE_ERROR : Status; } + if (VirtioFsFile->NumFileInfo == 0) { *BufferSize = 0; return EFI_SUCCESS; } } + FileInfo = (EFI_FILE_INFO *)(VirtioFsFile->FileInfoArray + (VirtioFsFile->NextFileInfo * VirtioFsFile->SingleFileInfoSize)); @@ -337,10 +349,11 @@ ReadFileInfoCache ( // VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE_SIZE().) // CallerAllocated = *BufferSize; - *BufferSize = (UINTN)FileInfo->Size; + *BufferSize = (UINTN)FileInfo->Size; if (CallerAllocated < *BufferSize) { return EFI_BUFFER_TOO_SMALL; } + // // Output FileInfo, and remove it from the cache. // @@ -355,23 +368,23 @@ ReadFileInfoCache ( STATIC EFI_STATUS ReadRegularFile ( - IN OUT VIRTIO_FS_FILE *VirtioFsFile, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN OUT VIRTIO_FS_FILE *VirtioFsFile, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { - VIRTIO_FS *VirtioFs; - EFI_STATUS Status; - VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr; - UINTN Transferred; - UINTN Left; + VIRTIO_FS *VirtioFs; + EFI_STATUS Status; + VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr; + UINTN Transferred; + UINTN Left; VirtioFs = VirtioFsFile->OwnerFs; // // The UEFI spec forbids reads that start beyond the end of the file. // Status = VirtioFsFuseGetAttr (VirtioFs, VirtioFsFile->NodeId, &FuseAttr); - if (EFI_ERROR (Status) || VirtioFsFile->FilePosition > FuseAttr.Size) { + if (EFI_ERROR (Status) || (VirtioFsFile->FilePosition > FuseAttr.Size)) { return EFI_DEVICE_ERROR; } @@ -379,29 +392,30 @@ ReadRegularFile ( Transferred = 0; Left = *BufferSize; while (Left > 0) { - UINT32 ReadSize; + UINT32 ReadSize; // // FUSE_READ cannot express a >=4GB buffer size. // ReadSize = (UINT32)MIN ((UINTN)MAX_UINT32, Left); - Status = VirtioFsFuseReadFileOrDir ( - VirtioFs, - VirtioFsFile->NodeId, - VirtioFsFile->FuseHandle, - FALSE, // IsDir - VirtioFsFile->FilePosition + Transferred, - &ReadSize, - (UINT8 *)Buffer + Transferred - ); - if (EFI_ERROR (Status) || ReadSize == 0) { + Status = VirtioFsFuseReadFileOrDir ( + VirtioFs, + VirtioFsFile->NodeId, + VirtioFsFile->FuseHandle, + FALSE, // IsDir + VirtioFsFile->FilePosition + Transferred, + &ReadSize, + (UINT8 *)Buffer + Transferred + ); + if (EFI_ERROR (Status) || (ReadSize == 0)) { break; } + Transferred += ReadSize; Left -= ReadSize; } - *BufferSize = Transferred; + *BufferSize = Transferred; VirtioFsFile->FilePosition += Transferred; // // If we managed to read some data, return success. If zero bytes were @@ -415,13 +429,13 @@ ReadRegularFile ( EFI_STATUS EFIAPI VirtioFsSimpleFileRead ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ) { - VIRTIO_FS_FILE *VirtioFsFile; - EFI_STATUS Status; + VIRTIO_FS_FILE *VirtioFsFile; + EFI_STATUS Status; VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This); @@ -430,5 +444,6 @@ VirtioFsSimpleFileRead ( } else { Status = ReadRegularFile (VirtioFsFile, BufferSize, Buffer); } + return Status; } diff --git a/OvmfPkg/VirtioFsDxe/SimpleFsSetInfo.c b/OvmfPkg/VirtioFsDxe/SimpleFsSetInfo.c index e7cc3d5dc3..b5f1a58341 100644 --- a/OvmfPkg/VirtioFsDxe/SimpleFsSetInfo.c +++ b/OvmfPkg/VirtioFsDxe/SimpleFsSetInfo.c @@ -56,16 +56,16 @@ STATIC EFI_STATUS ValidateInfoStructure ( - IN UINTN SizeByProtocolCaller, - IN UINTN MinimumStructSize, - IN BOOLEAN IsSizeByInfoPresent, - IN VOID *Buffer + IN UINTN SizeByProtocolCaller, + IN UINTN MinimumStructSize, + IN BOOLEAN IsSizeByInfoPresent, + IN VOID *Buffer ) { - UINTN NameFieldByteOffset; - UINTN NameFieldBytes; - UINTN NameFieldChar16s; - CHAR16 *NameField; + UINTN NameFieldByteOffset; + UINTN NameFieldBytes; + UINTN NameFieldChar16s; + CHAR16 *NameField; // // Make sure the internal function asking for validation passes in sane @@ -92,7 +92,7 @@ ValidateInfoStructure ( // agrees with the protocol caller-provided size. // if (IsSizeByInfoPresent) { - UINT64 *SizeByInfo; + UINT64 *SizeByInfo; SizeByInfo = Buffer; if (*SizeByInfo != SizeByProtocolCaller) { @@ -172,19 +172,18 @@ ValidateInfoStructure ( STATIC EFI_STATUS Rename ( - IN OUT VIRTIO_FS_FILE *VirtioFsFile, - IN CHAR16 *NewFileName + IN OUT VIRTIO_FS_FILE *VirtioFsFile, + IN CHAR16 *NewFileName ) { - - VIRTIO_FS *VirtioFs; - EFI_STATUS Status; - CHAR8 *Destination; - BOOLEAN RootEscape; - UINT64 OldParentDirNodeId; - CHAR8 *OldLastComponent; - UINT64 NewParentDirNodeId; - CHAR8 *NewLastComponent; + VIRTIO_FS *VirtioFs; + EFI_STATUS Status; + CHAR8 *Destination; + BOOLEAN RootEscape; + UINT64 OldParentDirNodeId; + CHAR8 *OldLastComponent; + UINT64 NewParentDirNodeId; + CHAR8 *NewLastComponent; VirtioFs = VirtioFsFile->OwnerFs; @@ -198,21 +197,28 @@ Rename ( // return EFI_SUCCESS; } + return EFI_ACCESS_DENIED; } // // Compose the canonical pathname for the destination. // - Status = VirtioFsComposeRenameDestination (VirtioFsFile->CanonicalPathname, - NewFileName, &Destination, &RootEscape); + Status = VirtioFsComposeRenameDestination ( + VirtioFsFile->CanonicalPathname, + NewFileName, + &Destination, + &RootEscape + ); if (EFI_ERROR (Status)) { return Status; } + if (RootEscape) { Status = EFI_NOT_FOUND; goto FreeDestination; } + // // If the rename would leave VirtioFsFile->CanonicalPathname unchanged, then // EFI_FILE_PROTOCOL.SetInfo() isn't asking for a rename actually. @@ -221,24 +227,29 @@ Rename ( Status = EFI_SUCCESS; goto FreeDestination; } + // // Check if the rename would break the canonical pathnames of other // VIRTIO_FS_FILE instances of the same VIRTIO_FS. // if (VirtioFsFile->IsDirectory) { - UINTN PathLen; - LIST_ENTRY *OpenFilesEntry; + UINTN PathLen; + LIST_ENTRY *OpenFilesEntry; PathLen = AsciiStrLen (VirtioFsFile->CanonicalPathname); BASE_LIST_FOR_EACH (OpenFilesEntry, &VirtioFs->OpenFiles) { - VIRTIO_FS_FILE *OtherFile; + VIRTIO_FS_FILE *OtherFile; OtherFile = VIRTIO_FS_FILE_FROM_OPEN_FILES_ENTRY (OpenFilesEntry); - if (OtherFile != VirtioFsFile && - AsciiStrnCmp (VirtioFsFile->CanonicalPathname, - OtherFile->CanonicalPathname, PathLen) == 0 && - (OtherFile->CanonicalPathname[PathLen] == '\0' || - OtherFile->CanonicalPathname[PathLen] == '/')) { + if ((OtherFile != VirtioFsFile) && + (AsciiStrnCmp ( + VirtioFsFile->CanonicalPathname, + OtherFile->CanonicalPathname, + PathLen + ) == 0) && + ((OtherFile->CanonicalPathname[PathLen] == '\0') || + (OtherFile->CanonicalPathname[PathLen] == '/'))) + { // // OtherFile refers to the same directory as VirtioFsFile, or is a // (possibly indirect) child of the directory referred to by @@ -249,6 +260,7 @@ Rename ( } } } + // // From this point on, the file needs to be open for writing. // @@ -256,26 +268,41 @@ Rename ( Status = EFI_ACCESS_DENIED; goto FreeDestination; } + // // Split both source and destination canonical pathnames into (most specific // parent directory, last component) pairs. // - Status = VirtioFsLookupMostSpecificParentDir (VirtioFs, - VirtioFsFile->CanonicalPathname, &OldParentDirNodeId, - &OldLastComponent); + Status = VirtioFsLookupMostSpecificParentDir ( + VirtioFs, + VirtioFsFile->CanonicalPathname, + &OldParentDirNodeId, + &OldLastComponent + ); if (EFI_ERROR (Status)) { goto FreeDestination; } - Status = VirtioFsLookupMostSpecificParentDir (VirtioFs, Destination, - &NewParentDirNodeId, &NewLastComponent); + + Status = VirtioFsLookupMostSpecificParentDir ( + VirtioFs, + Destination, + &NewParentDirNodeId, + &NewLastComponent + ); if (EFI_ERROR (Status)) { goto ForgetOldParentDirNodeId; } + // // Perform the rename. If the destination path exists, the rename will fail. // - Status = VirtioFsFuseRename (VirtioFs, OldParentDirNodeId, OldLastComponent, - NewParentDirNodeId, NewLastComponent); + Status = VirtioFsFuseRename ( + VirtioFs, + OldParentDirNodeId, + OldLastComponent, + NewParentDirNodeId, + NewLastComponent + ); if (EFI_ERROR (Status)) { goto ForgetNewParentDirNodeId; } @@ -285,8 +312,8 @@ Rename ( // FreePool (VirtioFsFile->CanonicalPathname); VirtioFsFile->CanonicalPathname = Destination; - Destination = NULL; - Status = EFI_SUCCESS; + Destination = NULL; + Status = EFI_SUCCESS; // // Fall through. @@ -305,6 +332,7 @@ FreeDestination: if (Destination != NULL) { FreePool (Destination); } + return Status; } @@ -332,22 +360,22 @@ FreeDestination: STATIC EFI_STATUS UpdateAttributes ( - IN OUT VIRTIO_FS_FILE *VirtioFsFile, - IN EFI_FILE_INFO *NewFileInfo + IN OUT VIRTIO_FS_FILE *VirtioFsFile, + IN EFI_FILE_INFO *NewFileInfo ) { - VIRTIO_FS *VirtioFs; - EFI_STATUS Status; - VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr; - EFI_FILE_INFO FileInfo; - BOOLEAN UpdateFileSize; - UINT64 FileSize; - BOOLEAN UpdateAtime; - BOOLEAN UpdateMtime; - UINT64 Atime; - UINT64 Mtime; - BOOLEAN UpdateMode; - UINT32 Mode; + VIRTIO_FS *VirtioFs; + EFI_STATUS Status; + VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr; + EFI_FILE_INFO FileInfo; + BOOLEAN UpdateFileSize; + UINT64 FileSize; + BOOLEAN UpdateAtime; + BOOLEAN UpdateMtime; + UINT64 Atime; + UINT64 Mtime; + BOOLEAN UpdateMode; + UINT32 Mode; VirtioFs = VirtioFsFile->OwnerFs; @@ -359,28 +387,44 @@ UpdateAttributes ( if (EFI_ERROR (Status)) { return Status; } + Status = VirtioFsFuseAttrToEfiFileInfo (&FuseAttr, &FileInfo); if (EFI_ERROR (Status)) { return Status; } + // // Collect the updates. // if (VirtioFsFile->IsDirectory) { UpdateFileSize = FALSE; } else { - VirtioFsGetFuseSizeUpdate (&FileInfo, NewFileInfo, &UpdateFileSize, - &FileSize); - } - - Status = VirtioFsGetFuseTimeUpdates (&FileInfo, NewFileInfo, &UpdateAtime, - &UpdateMtime, &Atime, &Mtime); + VirtioFsGetFuseSizeUpdate ( + &FileInfo, + NewFileInfo, + &UpdateFileSize, + &FileSize + ); + } + + Status = VirtioFsGetFuseTimeUpdates ( + &FileInfo, + NewFileInfo, + &UpdateAtime, + &UpdateMtime, + &Atime, + &Mtime + ); if (EFI_ERROR (Status)) { return Status; } - Status = VirtioFsGetFuseModeUpdate (&FileInfo, NewFileInfo, &UpdateMode, - &Mode); + Status = VirtioFsGetFuseModeUpdate ( + &FileInfo, + NewFileInfo, + &UpdateMode, + &Mode + ); if (EFI_ERROR (Status)) { return Status; } @@ -391,14 +435,17 @@ UpdateAttributes ( if (!UpdateFileSize && !UpdateAtime && !UpdateMtime && !UpdateMode) { return EFI_SUCCESS; } + // // If the file is not open for writing, then only Mode may be updated (for // toggling EFI_FILE_READ_ONLY). // if (!VirtioFsFile->IsOpenForWriting && - (UpdateFileSize || UpdateAtime || UpdateMtime)) { + (UpdateFileSize || UpdateAtime || UpdateMtime)) + { return EFI_ACCESS_DENIED; } + // // Send the FUSE_SETATTR request now. // @@ -419,14 +466,14 @@ UpdateAttributes ( STATIC EFI_STATUS SetFileInfo ( - IN EFI_FILE_PROTOCOL *This, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN UINTN BufferSize, + IN VOID *Buffer ) { - VIRTIO_FS_FILE *VirtioFsFile; - EFI_STATUS Status; - EFI_FILE_INFO *FileInfo; + VIRTIO_FS_FILE *VirtioFsFile; + EFI_STATUS Status; + EFI_FILE_INFO *FileInfo; VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This); @@ -435,14 +482,17 @@ SetFileInfo ( // Status = ValidateInfoStructure ( BufferSize, // SizeByProtocolCaller - OFFSET_OF (EFI_FILE_INFO, - FileName) + sizeof (CHAR16), // MinimumStructSize + OFFSET_OF ( + EFI_FILE_INFO, + FileName + ) + sizeof (CHAR16), // MinimumStructSize TRUE, // IsSizeByInfoPresent Buffer ); if (EFI_ERROR (Status)) { return Status; } + FileInfo = Buffer; // @@ -452,6 +502,7 @@ SetFileInfo ( if (EFI_ERROR (Status)) { return Status; } + // // Update any attributes requested. // @@ -470,15 +521,15 @@ SetFileInfo ( STATIC EFI_STATUS SetFileSystemInfo ( - IN EFI_FILE_PROTOCOL *This, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN UINTN BufferSize, + IN VOID *Buffer ) { - VIRTIO_FS_FILE *VirtioFsFile; - VIRTIO_FS *VirtioFs; - EFI_STATUS Status; - EFI_FILE_SYSTEM_INFO *FileSystemInfo; + VIRTIO_FS_FILE *VirtioFsFile; + VIRTIO_FS *VirtioFs; + EFI_STATUS Status; + EFI_FILE_SYSTEM_INFO *FileSystemInfo; VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This); VirtioFs = VirtioFsFile->OwnerFs; @@ -488,14 +539,17 @@ SetFileSystemInfo ( // Status = ValidateInfoStructure ( BufferSize, // SizeByProtocolCaller - OFFSET_OF (EFI_FILE_SYSTEM_INFO, - VolumeLabel) + sizeof (CHAR16), // MinimumStructSize + OFFSET_OF ( + EFI_FILE_SYSTEM_INFO, + VolumeLabel + ) + sizeof (CHAR16), // MinimumStructSize TRUE, // IsSizeByInfoPresent Buffer ); if (EFI_ERROR (Status)) { return Status; } + FileSystemInfo = Buffer; // @@ -509,6 +563,7 @@ SetFileSystemInfo ( if (StrCmp (FileSystemInfo->VolumeLabel, VirtioFs->Label) == 0) { return EFI_SUCCESS; } + return EFI_WRITE_PROTECTED; } @@ -518,15 +573,15 @@ SetFileSystemInfo ( STATIC EFI_STATUS SetFileSystemVolumeLabelInfo ( - IN EFI_FILE_PROTOCOL *This, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN UINTN BufferSize, + IN VOID *Buffer ) { - VIRTIO_FS_FILE *VirtioFsFile; - VIRTIO_FS *VirtioFs; - EFI_STATUS Status; - EFI_FILE_SYSTEM_VOLUME_LABEL *FileSystemVolumeLabel; + VIRTIO_FS_FILE *VirtioFsFile; + VIRTIO_FS *VirtioFs; + EFI_STATUS Status; + EFI_FILE_SYSTEM_VOLUME_LABEL *FileSystemVolumeLabel; VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This); VirtioFs = VirtioFsFile->OwnerFs; @@ -536,14 +591,17 @@ SetFileSystemVolumeLabelInfo ( // Status = ValidateInfoStructure ( BufferSize, // SizeByProtocolCaller - OFFSET_OF (EFI_FILE_SYSTEM_VOLUME_LABEL, - VolumeLabel) + sizeof (CHAR16), // MinimumStructSize + OFFSET_OF ( + EFI_FILE_SYSTEM_VOLUME_LABEL, + VolumeLabel + ) + sizeof (CHAR16), // MinimumStructSize FALSE, // IsSizeByInfoPresent Buffer ); if (EFI_ERROR (Status)) { return Status; } + FileSystemVolumeLabel = Buffer; // @@ -554,16 +612,17 @@ SetFileSystemVolumeLabelInfo ( if (StrCmp (FileSystemVolumeLabel->VolumeLabel, VirtioFs->Label) == 0) { return EFI_SUCCESS; } + return EFI_WRITE_PROTECTED; } EFI_STATUS EFIAPI VirtioFsSimpleFileSetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN UINTN BufferSize, + IN VOID *Buffer ) { if (CompareGuid (InformationType, &gEfiFileInfoGuid)) { diff --git a/OvmfPkg/VirtioFsDxe/SimpleFsSetPosition.c b/OvmfPkg/VirtioFsDxe/SimpleFsSetPosition.c index a548012d9c..dd05081396 100644 --- a/OvmfPkg/VirtioFsDxe/SimpleFsSetPosition.c +++ b/OvmfPkg/VirtioFsDxe/SimpleFsSetPosition.c @@ -14,14 +14,14 @@ EFI_STATUS EFIAPI VirtioFsSimpleFileSetPosition ( - IN EFI_FILE_PROTOCOL *This, - IN UINT64 Position + IN EFI_FILE_PROTOCOL *This, + IN UINT64 Position ) { - VIRTIO_FS_FILE *VirtioFsFile; - VIRTIO_FS *VirtioFs; - EFI_STATUS Status; - VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr; + VIRTIO_FS_FILE *VirtioFsFile; + VIRTIO_FS *VirtioFs; + EFI_STATUS Status; + VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE FuseAttr; VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This); @@ -32,11 +32,13 @@ VirtioFsSimpleFileSetPosition ( if (Position != 0) { return EFI_UNSUPPORTED; } + VirtioFsFile->FilePosition = 0; if (VirtioFsFile->FileInfoArray != NULL) { FreePool (VirtioFsFile->FileInfoArray); VirtioFsFile->FileInfoArray = NULL; } + VirtioFsFile->SingleFileInfoSize = 0; VirtioFsFile->NumFileInfo = 0; VirtioFsFile->NextFileInfo = 0; @@ -58,10 +60,11 @@ VirtioFsSimpleFileSetPosition ( // Caller is requesting a seek to EOF. // VirtioFs = VirtioFsFile->OwnerFs; - Status = VirtioFsFuseGetAttr (VirtioFs, VirtioFsFile->NodeId, &FuseAttr); + Status = VirtioFsFuseGetAttr (VirtioFs, VirtioFsFile->NodeId, &FuseAttr); if (EFI_ERROR (Status)) { return Status; } + VirtioFsFile->FilePosition = FuseAttr.Size; return EFI_SUCCESS; } diff --git a/OvmfPkg/VirtioFsDxe/SimpleFsWrite.c b/OvmfPkg/VirtioFsDxe/SimpleFsWrite.c index 8ae317c88e..7f4ff8c5bb 100644 --- a/OvmfPkg/VirtioFsDxe/SimpleFsWrite.c +++ b/OvmfPkg/VirtioFsDxe/SimpleFsWrite.c @@ -11,16 +11,16 @@ EFI_STATUS EFIAPI VirtioFsSimpleFileWrite ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + IN VOID *Buffer ) { - VIRTIO_FS_FILE *VirtioFsFile; - VIRTIO_FS *VirtioFs; - EFI_STATUS Status; - UINTN Transferred; - UINTN Left; + VIRTIO_FS_FILE *VirtioFsFile; + VIRTIO_FS *VirtioFs; + EFI_STATUS Status; + UINTN Transferred; + UINTN Left; VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This); VirtioFs = VirtioFsFile->OwnerFs; @@ -28,6 +28,7 @@ VirtioFsSimpleFileWrite ( if (VirtioFsFile->IsDirectory) { return EFI_UNSUPPORTED; } + if (!VirtioFsFile->IsOpenForWriting) { return EFI_ACCESS_DENIED; } @@ -36,34 +37,36 @@ VirtioFsSimpleFileWrite ( Transferred = 0; Left = *BufferSize; while (Left > 0) { - UINT32 WriteSize; + UINT32 WriteSize; // // Honor the write buffer size limit. // WriteSize = (UINT32)MIN ((UINTN)VirtioFs->MaxWrite, Left); - Status = VirtioFsFuseWrite ( - VirtioFs, - VirtioFsFile->NodeId, - VirtioFsFile->FuseHandle, - VirtioFsFile->FilePosition + Transferred, - &WriteSize, - (UINT8 *)Buffer + Transferred - ); - if (!EFI_ERROR (Status) && WriteSize == 0) { + Status = VirtioFsFuseWrite ( + VirtioFs, + VirtioFsFile->NodeId, + VirtioFsFile->FuseHandle, + VirtioFsFile->FilePosition + Transferred, + &WriteSize, + (UINT8 *)Buffer + Transferred + ); + if (!EFI_ERROR (Status) && (WriteSize == 0)) { // // Progress should have been made. // Status = EFI_DEVICE_ERROR; } + if (EFI_ERROR (Status)) { break; } + Transferred += WriteSize; Left -= WriteSize; } - *BufferSize = Transferred; + *BufferSize = Transferred; VirtioFsFile->FilePosition += Transferred; // // According to the UEFI spec, diff --git a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h b/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h index 3c3eb1ac93..0bbf5b7895 100644 --- a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h +++ b/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h @@ -18,7 +18,7 @@ #include // VIRTIO_DEVICE_PROTOCOL #include // EFI_EVENT -#define VIRTIO_FS_SIG SIGNATURE_64 ('V', 'I', 'R', 'T', 'I', 'O', 'F', 'S') +#define VIRTIO_FS_SIG SIGNATURE_64 ('V', 'I', 'R', 'T', 'I', 'O', 'F', 'S') #define VIRTIO_FS_FILE_SIG \ SIGNATURE_64 ('V', 'I', 'O', 'F', 'S', 'F', 'I', 'L') @@ -45,12 +45,12 @@ // pathnames, separate limits could be used; a common limit is used purely for // simplicity. // -#define VIRTIO_FS_MAX_PATHNAME_LENGTH ((UINTN)65535) +#define VIRTIO_FS_MAX_PATHNAME_LENGTH ((UINTN)65535) // // Maximum value for VIRTIO_FS_FILE.NumFileInfo. // -#define VIRTIO_FS_FILE_MAX_FILE_INFO 256 +#define VIRTIO_FS_FILE_MAX_FILE_INFO 256 // // Filesystem label encoded in UCS-2, transformed from the UTF-8 representation @@ -71,17 +71,17 @@ typedef struct { // // field init function init depth // ----------- ------------------ ---------- - UINT64 Signature; // DriverBindingStart 0 - VIRTIO_DEVICE_PROTOCOL *Virtio; // DriverBindingStart 0 - VIRTIO_FS_LABEL Label; // VirtioFsInit 1 - UINT16 QueueSize; // VirtioFsInit 1 - VRING Ring; // VirtioRingInit 2 - VOID *RingMap; // VirtioRingMap 2 - UINT64 RequestId; // FuseInitSession 1 - UINT32 MaxWrite; // FuseInitSession 1 - EFI_EVENT ExitBoot; // DriverBindingStart 0 - LIST_ENTRY OpenFiles; // DriverBindingStart 0 - EFI_SIMPLE_FILE_SYSTEM_PROTOCOL SimpleFs; // DriverBindingStart 0 + UINT64 Signature; // DriverBindingStart 0 + VIRTIO_DEVICE_PROTOCOL *Virtio; // DriverBindingStart 0 + VIRTIO_FS_LABEL Label; // VirtioFsInit 1 + UINT16 QueueSize; // VirtioFsInit 1 + VRING Ring; // VirtioRingInit 2 + VOID *RingMap; // VirtioRingMap 2 + UINT64 RequestId; // FuseInitSession 1 + UINT32 MaxWrite; // FuseInitSession 1 + EFI_EVENT ExitBoot; // DriverBindingStart 0 + LIST_ENTRY OpenFiles; // DriverBindingStart 0 + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL SimpleFs; // DriverBindingStart 0 } VIRTIO_FS; #define VIRTIO_FS_FROM_SIMPLE_FS(SimpleFsReference) \ @@ -95,8 +95,8 @@ typedef struct { // // The following fields originate from the owner of the buffer. // - VOID *Buffer; - UINTN Size; + VOID *Buffer; + UINTN Size; // // All of the fields below, until the end of the structure, are // zero-initialized when the structure is initially validated. @@ -105,16 +105,16 @@ typedef struct { // for VirtioOperationBusMasterRead or VirtioOperationBusMasterWrite. They // are again updated when the buffer is unmapped. // - BOOLEAN Mapped; - EFI_PHYSICAL_ADDRESS MappedAddress; - VOID *Mapping; + BOOLEAN Mapped; + EFI_PHYSICAL_ADDRESS MappedAddress; + VOID *Mapping; // // Transferred is updated after VirtioFlush() returns successfully: // - for VirtioOperationBusMasterRead, Transferred is set to Size; // - for VirtioOperationBusMasterWrite, Transferred is calculated from the // UsedLen output parameter of VirtioFlush(). // - UINTN Transferred; + UINTN Transferred; } VIRTIO_FS_IO_VECTOR; // @@ -124,13 +124,13 @@ typedef struct { // // The following fields originate from the owner of the buffers. // - VIRTIO_FS_IO_VECTOR *IoVec; - UINTN NumVec; + VIRTIO_FS_IO_VECTOR *IoVec; + UINTN NumVec; // // TotalSize is calculated when the scatter-gather list is initially // validated. // - UINT32 TotalSize; + UINT32 TotalSize; } VIRTIO_FS_SCATTER_GATHER_LIST; // @@ -138,14 +138,14 @@ typedef struct { // FUSE file reference. // typedef struct { - UINT64 Signature; - EFI_FILE_PROTOCOL SimpleFile; - BOOLEAN IsDirectory; - BOOLEAN IsOpenForWriting; - VIRTIO_FS *OwnerFs; - LIST_ENTRY OpenFilesEntry; - CHAR8 *CanonicalPathname; - UINT64 FilePosition; + UINT64 Signature; + EFI_FILE_PROTOCOL SimpleFile; + BOOLEAN IsDirectory; + BOOLEAN IsOpenForWriting; + VIRTIO_FS *OwnerFs; + LIST_ENTRY OpenFilesEntry; + CHAR8 *CanonicalPathname; + UINT64 FilePosition; // // In the FUSE wire protocol, every request except FUSE_INIT refers to a // file, namely by the "VIRTIO_FS_FUSE_REQUEST.NodeId" field; that is, by the @@ -158,8 +158,8 @@ typedef struct { // function must send a FUSE request that needs the file handle *in addition* // to the inode number, FuseHandle will be at our disposal at once. // - UINT64 NodeId; - UINT64 FuseHandle; + UINT64 NodeId; + UINT64 FuseHandle; // // EFI_FILE_INFO objects cached for an in-flight directory read. // @@ -170,10 +170,10 @@ typedef struct { // EFI_FILE_INFOs immediately. EFI_FILE_PROTOCOL.Read() invocations (on // directories) will be served from this EFI_FILE_INFO cache. // - UINT8 *FileInfoArray; - UINTN SingleFileInfoSize; - UINTN NumFileInfo; - UINTN NextFileInfo; + UINT8 *FileInfoArray; + UINTN SingleFileInfoSize; + UINTN NumFileInfo; + UINTN NextFileInfo; } VIRTIO_FS_FILE; #define VIRTIO_FS_FILE_FROM_SIMPLE_FILE(SimpleFileReference) \ @@ -189,39 +189,39 @@ typedef struct { EFI_STATUS VirtioFsInit ( - IN OUT VIRTIO_FS *VirtioFs + IN OUT VIRTIO_FS *VirtioFs ); VOID VirtioFsUninit ( - IN OUT VIRTIO_FS *VirtioFs + IN OUT VIRTIO_FS *VirtioFs ); VOID EFIAPI VirtioFsExitBoot ( - IN EFI_EVENT ExitBootEvent, - IN VOID *VirtioFsAsVoid + IN EFI_EVENT ExitBootEvent, + IN VOID *VirtioFsAsVoid ); EFI_STATUS VirtioFsSgListsValidate ( - IN VIRTIO_FS *VirtioFs, - IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *RequestSgList, - IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList OPTIONAL + IN VIRTIO_FS *VirtioFs, + IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *RequestSgList, + IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList OPTIONAL ); EFI_STATUS VirtioFsSgListsSubmit ( - IN OUT VIRTIO_FS *VirtioFs, - IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *RequestSgList, - IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList OPTIONAL + IN OUT VIRTIO_FS *VirtioFs, + IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *RequestSgList, + IN OUT VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList OPTIONAL ); EFI_STATUS VirtioFsFuseNewRequest ( IN OUT VIRTIO_FS *VirtioFs, - OUT VIRTIO_FS_FUSE_REQUEST *Request, + OUT VIRTIO_FS_FUSE_REQUEST *Request, IN UINT32 RequestSize, IN VIRTIO_FS_FUSE_OPCODE Opcode, IN UINT64 NodeId @@ -229,36 +229,36 @@ VirtioFsFuseNewRequest ( EFI_STATUS VirtioFsFuseCheckResponse ( - IN VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList, - IN UINT64 RequestId, - OUT UINTN *TailBufferFill + IN VIRTIO_FS_SCATTER_GATHER_LIST *ResponseSgList, + IN UINT64 RequestId, + OUT UINTN *TailBufferFill ); EFI_STATUS VirtioFsErrnoToEfiStatus ( - IN INT32 Errno + IN INT32 Errno ); EFI_STATUS VirtioFsAppendPath ( IN CHAR8 *LhsPath8, IN CHAR16 *RhsPath16, - OUT CHAR8 **ResultPath8, - OUT BOOLEAN *RootEscape + OUT CHAR8 **ResultPath8, + OUT BOOLEAN *RootEscape ); EFI_STATUS VirtioFsLookupMostSpecificParentDir ( - IN OUT VIRTIO_FS *VirtioFs, - IN OUT CHAR8 *Path, - OUT UINT64 *DirNodeId, - OUT CHAR8 **LastComponent + IN OUT VIRTIO_FS *VirtioFs, + IN OUT CHAR8 *Path, + OUT UINT64 *DirNodeId, + OUT CHAR8 **LastComponent ); EFI_STATUS VirtioFsGetBasename ( IN CHAR8 *Path, - OUT CHAR16 *Basename OPTIONAL, + OUT CHAR16 *Basename OPTIONAL, IN OUT UINTN *BasenameSize ); @@ -266,47 +266,47 @@ EFI_STATUS VirtioFsComposeRenameDestination ( IN CHAR8 *LhsPath8, IN CHAR16 *RhsPath16, - OUT CHAR8 **ResultPath8, - OUT BOOLEAN *RootEscape + OUT CHAR8 **ResultPath8, + OUT BOOLEAN *RootEscape ); EFI_STATUS VirtioFsFuseAttrToEfiFileInfo ( - IN VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr, - OUT EFI_FILE_INFO *FileInfo + IN VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr, + OUT EFI_FILE_INFO *FileInfo ); EFI_STATUS VirtioFsFuseDirentPlusToEfiFileInfo ( - IN VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE *FuseDirent, - IN OUT EFI_FILE_INFO *FileInfo + IN VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE *FuseDirent, + IN OUT EFI_FILE_INFO *FileInfo ); VOID VirtioFsGetFuseSizeUpdate ( - IN EFI_FILE_INFO *Info, - IN EFI_FILE_INFO *NewInfo, - OUT BOOLEAN *Update, - OUT UINT64 *Size + IN EFI_FILE_INFO *Info, + IN EFI_FILE_INFO *NewInfo, + OUT BOOLEAN *Update, + OUT UINT64 *Size ); EFI_STATUS VirtioFsGetFuseTimeUpdates ( - IN EFI_FILE_INFO *Info, - IN EFI_FILE_INFO *NewInfo, - OUT BOOLEAN *UpdateAtime, - OUT BOOLEAN *UpdateMtime, - OUT UINT64 *Atime, - OUT UINT64 *Mtime + IN EFI_FILE_INFO *Info, + IN EFI_FILE_INFO *NewInfo, + OUT BOOLEAN *UpdateAtime, + OUT BOOLEAN *UpdateMtime, + OUT UINT64 *Atime, + OUT UINT64 *Mtime ); EFI_STATUS VirtioFsGetFuseModeUpdate ( - IN EFI_FILE_INFO *Info, - IN EFI_FILE_INFO *NewInfo, - OUT BOOLEAN *Update, - OUT UINT32 *Mode - ); + IN EFI_FILE_INFO *Info, + IN EFI_FILE_INFO *NewInfo, + OUT BOOLEAN *Update, + OUT UINT32 *Mode + ); // // Wrapper functions for FUSE commands (primitives). @@ -314,139 +314,139 @@ VirtioFsGetFuseModeUpdate ( EFI_STATUS VirtioFsFuseLookup ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 DirNodeId, - IN CHAR8 *Name, - OUT UINT64 *NodeId, - OUT VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 DirNodeId, + IN CHAR8 *Name, + OUT UINT64 *NodeId, + OUT VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr ); EFI_STATUS VirtioFsFuseForget ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId ); EFI_STATUS VirtioFsFuseGetAttr ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - OUT VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + OUT VIRTIO_FS_FUSE_ATTRIBUTES_RESPONSE *FuseAttr ); EFI_STATUS VirtioFsFuseSetAttr ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - IN UINT64 *Size OPTIONAL, - IN UINT64 *Atime OPTIONAL, - IN UINT64 *Mtime OPTIONAL, - IN UINT32 *Mode OPTIONAL + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + IN UINT64 *Size OPTIONAL, + IN UINT64 *Atime OPTIONAL, + IN UINT64 *Mtime OPTIONAL, + IN UINT32 *Mode OPTIONAL ); EFI_STATUS VirtioFsFuseMkDir ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 ParentNodeId, - IN CHAR8 *Name, - OUT UINT64 *NodeId + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 ParentNodeId, + IN CHAR8 *Name, + OUT UINT64 *NodeId ); EFI_STATUS VirtioFsFuseRemoveFileOrDir ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 ParentNodeId, - IN CHAR8 *Name, - IN BOOLEAN IsDir + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 ParentNodeId, + IN CHAR8 *Name, + IN BOOLEAN IsDir ); EFI_STATUS VirtioFsFuseOpen ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - IN BOOLEAN ReadWrite, - OUT UINT64 *FuseHandle + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + IN BOOLEAN ReadWrite, + OUT UINT64 *FuseHandle ); EFI_STATUS VirtioFsFuseReadFileOrDir ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - IN UINT64 FuseHandle, - IN BOOLEAN IsDir, - IN UINT64 Offset, - IN OUT UINT32 *Size, - OUT VOID *Data + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + IN UINT64 FuseHandle, + IN BOOLEAN IsDir, + IN UINT64 Offset, + IN OUT UINT32 *Size, + OUT VOID *Data ); EFI_STATUS VirtioFsFuseWrite ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - IN UINT64 FuseHandle, - IN UINT64 Offset, - IN OUT UINT32 *Size, - IN VOID *Data + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + IN UINT64 FuseHandle, + IN UINT64 Offset, + IN OUT UINT32 *Size, + IN VOID *Data ); EFI_STATUS VirtioFsFuseStatFs ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - OUT VIRTIO_FS_FUSE_STATFS_RESPONSE *FilesysAttr - ); + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + OUT VIRTIO_FS_FUSE_STATFS_RESPONSE *FilesysAttr + ); EFI_STATUS VirtioFsFuseReleaseFileOrDir ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - IN UINT64 FuseHandle, - IN BOOLEAN IsDir + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + IN UINT64 FuseHandle, + IN BOOLEAN IsDir ); EFI_STATUS VirtioFsFuseFsyncFileOrDir ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - IN UINT64 FuseHandle, - IN BOOLEAN IsDir + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + IN UINT64 FuseHandle, + IN BOOLEAN IsDir ); EFI_STATUS VirtioFsFuseFlush ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - IN UINT64 FuseHandle + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + IN UINT64 FuseHandle ); EFI_STATUS VirtioFsFuseInitSession ( - IN OUT VIRTIO_FS *VirtioFs + IN OUT VIRTIO_FS *VirtioFs ); EFI_STATUS VirtioFsFuseOpenDir ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 NodeId, - OUT UINT64 *FuseHandle + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 NodeId, + OUT UINT64 *FuseHandle ); EFI_STATUS VirtioFsFuseOpenOrCreate ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 ParentNodeId, - IN CHAR8 *Name, - OUT UINT64 *NodeId, - OUT UINT64 *FuseHandle + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 ParentNodeId, + IN CHAR8 *Name, + OUT UINT64 *NodeId, + OUT UINT64 *FuseHandle ); EFI_STATUS VirtioFsFuseRename ( - IN OUT VIRTIO_FS *VirtioFs, - IN UINT64 OldParentNodeId, - IN CHAR8 *OldName, - IN UINT64 NewParentNodeId, - IN CHAR8 *NewName + IN OUT VIRTIO_FS *VirtioFs, + IN UINT64 OldParentNodeId, + IN CHAR8 *OldName, + IN UINT64 NewParentNodeId, + IN CHAR8 *NewName ); // @@ -457,8 +457,8 @@ VirtioFsFuseRename ( EFI_STATUS EFIAPI VirtioFsOpenVolume ( - IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **Root + IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **Root ); // @@ -468,77 +468,77 @@ VirtioFsOpenVolume ( EFI_STATUS EFIAPI VirtioFsSimpleFileClose ( - IN EFI_FILE_PROTOCOL *This + IN EFI_FILE_PROTOCOL *This ); EFI_STATUS EFIAPI VirtioFsSimpleFileDelete ( - IN EFI_FILE_PROTOCOL *This + IN EFI_FILE_PROTOCOL *This ); EFI_STATUS EFIAPI VirtioFsSimpleFileFlush ( - IN EFI_FILE_PROTOCOL *This + IN EFI_FILE_PROTOCOL *This ); EFI_STATUS EFIAPI VirtioFsSimpleFileGetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ); EFI_STATUS EFIAPI VirtioFsSimpleFileGetPosition ( - IN EFI_FILE_PROTOCOL *This, - OUT UINT64 *Position + IN EFI_FILE_PROTOCOL *This, + OUT UINT64 *Position ); EFI_STATUS EFIAPI VirtioFsSimpleFileOpen ( - IN EFI_FILE_PROTOCOL *This, - OUT EFI_FILE_PROTOCOL **NewHandle, - IN CHAR16 *FileName, - IN UINT64 OpenMode, - IN UINT64 Attributes + IN EFI_FILE_PROTOCOL *This, + OUT EFI_FILE_PROTOCOL **NewHandle, + IN CHAR16 *FileName, + IN UINT64 OpenMode, + IN UINT64 Attributes ); EFI_STATUS EFIAPI VirtioFsSimpleFileRead ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer ); EFI_STATUS EFIAPI VirtioFsSimpleFileSetInfo ( - IN EFI_FILE_PROTOCOL *This, - IN EFI_GUID *InformationType, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN EFI_GUID *InformationType, + IN UINTN BufferSize, + IN VOID *Buffer ); EFI_STATUS EFIAPI VirtioFsSimpleFileSetPosition ( - IN EFI_FILE_PROTOCOL *This, - IN UINT64 Position + IN EFI_FILE_PROTOCOL *This, + IN UINT64 Position ); EFI_STATUS EFIAPI VirtioFsSimpleFileWrite ( - IN EFI_FILE_PROTOCOL *This, - IN OUT UINTN *BufferSize, - IN VOID *Buffer + IN EFI_FILE_PROTOCOL *This, + IN OUT UINTN *BufferSize, + IN VOID *Buffer ); #endif // VIRTIO_FS_DXE_H_ diff --git a/OvmfPkg/VirtioGpuDxe/Commands.c b/OvmfPkg/VirtioGpuDxe/Commands.c index 1645100a05..873a716567 100644 --- a/OvmfPkg/VirtioGpuDxe/Commands.c +++ b/OvmfPkg/VirtioGpuDxe/Commands.c @@ -31,14 +31,14 @@ **/ EFI_STATUS VirtioGpuInit ( - IN OUT VGPU_DEV *VgpuDev + IN OUT VGPU_DEV *VgpuDev ) { - UINT8 NextDevStat; - EFI_STATUS Status; - UINT64 Features; - UINT16 QueueSize; - UINT64 RingBaseShift; + UINT8 NextDevStat; + EFI_STATUS Status; + UINT64 Features; + UINT16 QueueSize; + UINT64 RingBaseShift; // // Execute virtio-v1.0-cs04, 3.1.1 Driver Requirements: Device @@ -47,7 +47,7 @@ VirtioGpuInit ( // 1. Reset the device. // NextDevStat = 0; - Status = VgpuDev->VirtIo->SetDeviceStatus (VgpuDev->VirtIo, NextDevStat); + Status = VgpuDev->VirtIo->SetDeviceStatus (VgpuDev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } @@ -56,7 +56,7 @@ VirtioGpuInit ( // 2. Set the ACKNOWLEDGE status bit [...] // NextDevStat |= VSTAT_ACK; - Status = VgpuDev->VirtIo->SetDeviceStatus (VgpuDev->VirtIo, NextDevStat); + Status = VgpuDev->VirtIo->SetDeviceStatus (VgpuDev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } @@ -65,7 +65,7 @@ VirtioGpuInit ( // 3. Set the DRIVER status bit [...] // NextDevStat |= VSTAT_DRIVER; - Status = VgpuDev->VirtIo->SetDeviceStatus (VgpuDev->VirtIo, NextDevStat); + Status = VgpuDev->VirtIo->SetDeviceStatus (VgpuDev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } @@ -77,10 +77,12 @@ VirtioGpuInit ( if (EFI_ERROR (Status)) { goto Failed; } + if ((Features & VIRTIO_F_VERSION_1) == 0) { Status = EFI_UNSUPPORTED; goto Failed; } + // // We only want the most basic 2D features. // @@ -101,11 +103,14 @@ VirtioGpuInit ( // 7. Perform device-specific setup, including discovery of virtqueues for // the device [...] // - Status = VgpuDev->VirtIo->SetQueueSel (VgpuDev->VirtIo, - VIRTIO_GPU_CONTROL_QUEUE); + Status = VgpuDev->VirtIo->SetQueueSel ( + VgpuDev->VirtIo, + VIRTIO_GPU_CONTROL_QUEUE + ); if (EFI_ERROR (Status)) { goto Failed; } + Status = VgpuDev->VirtIo->GetQueueNumMax (VgpuDev->VirtIo, &QueueSize); if (EFI_ERROR (Status)) { goto Failed; @@ -127,6 +132,7 @@ VirtioGpuInit ( if (EFI_ERROR (Status)) { goto Failed; } + // // If anything fails from here on, we have to release the ring. // @@ -139,6 +145,7 @@ VirtioGpuInit ( if (EFI_ERROR (Status)) { goto ReleaseQueue; } + // // If anything fails from here on, we have to unmap the ring. // @@ -155,7 +162,7 @@ VirtioGpuInit ( // 8. Set the DRIVER_OK status bit. // NextDevStat |= VSTAT_DRIVER_OK; - Status = VgpuDev->VirtIo->SetDeviceStatus (VgpuDev->VirtIo, NextDevStat); + Status = VgpuDev->VirtIo->SetDeviceStatus (VgpuDev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto UnmapQueue; } @@ -193,7 +200,7 @@ Failed: **/ VOID VirtioGpuUninit ( - IN OUT VGPU_DEV *VgpuDev + IN OUT VGPU_DEV *VgpuDev ) { // @@ -235,15 +242,15 @@ VirtioGpuUninit ( **/ EFI_STATUS VirtioGpuAllocateZeroAndMapBackingStore ( - IN VGPU_DEV *VgpuDev, - IN UINTN NumberOfPages, - OUT VOID **HostAddress, - OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, - OUT VOID **Mapping + IN VGPU_DEV *VgpuDev, + IN UINTN NumberOfPages, + OUT VOID **HostAddress, + OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, + OUT VOID **Mapping ) { - EFI_STATUS Status; - VOID *NewHostAddress; + EFI_STATUS Status; + VOID *NewHostAddress; Status = VgpuDev->VirtIo->AllocateSharedPages ( VgpuDev->VirtIo, @@ -308,10 +315,10 @@ FreeSharedPages: **/ VOID VirtioGpuUnmapAndFreeBackingStore ( - IN VGPU_DEV *VgpuDev, - IN UINTN NumberOfPages, - IN VOID *HostAddress, - IN VOID *Mapping + IN VGPU_DEV *VgpuDev, + IN UINTN NumberOfPages, + IN VOID *HostAddress, + IN VOID *Mapping ) { VgpuDev->VirtIo->UnmapSharedBuffer ( @@ -341,11 +348,11 @@ VirtioGpuUnmapAndFreeBackingStore ( VOID EFIAPI VirtioGpuExitBoot ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - VGPU_DEV *VgpuDev; + VGPU_DEV *VgpuDev; DEBUG ((DEBUG_VERBOSE, "%a: Context=0x%p\n", __FUNCTION__, Context)); VgpuDev = Context; @@ -398,26 +405,26 @@ VirtioGpuExitBoot ( STATIC EFI_STATUS VirtioGpuSendCommand ( - IN OUT VGPU_DEV *VgpuDev, - IN VIRTIO_GPU_CONTROL_TYPE RequestType, - IN BOOLEAN Fence, - IN OUT volatile VIRTIO_GPU_CONTROL_HEADER *Header, - IN UINTN RequestSize + IN OUT VGPU_DEV *VgpuDev, + IN VIRTIO_GPU_CONTROL_TYPE RequestType, + IN BOOLEAN Fence, + IN OUT volatile VIRTIO_GPU_CONTROL_HEADER *Header, + IN UINTN RequestSize ) { - DESC_INDICES Indices; - volatile VIRTIO_GPU_CONTROL_HEADER Response; - EFI_STATUS Status; - UINT32 ResponseSize; - EFI_PHYSICAL_ADDRESS RequestDeviceAddress; - VOID *RequestMap; - EFI_PHYSICAL_ADDRESS ResponseDeviceAddress; - VOID *ResponseMap; + DESC_INDICES Indices; + volatile VIRTIO_GPU_CONTROL_HEADER Response; + EFI_STATUS Status; + UINT32 ResponseSize; + EFI_PHYSICAL_ADDRESS RequestDeviceAddress; + VOID *RequestMap; + EFI_PHYSICAL_ADDRESS ResponseDeviceAddress; + VOID *ResponseMap; // // Initialize Header. // - Header->Type = RequestType; + Header->Type = RequestType; if (Fence) { Header->Flags = VIRTIO_GPU_FLAG_FENCE; Header->FenceId = VgpuDev->FenceId++; @@ -425,8 +432,9 @@ VirtioGpuSendCommand ( Header->Flags = 0; Header->FenceId = 0; } - Header->CtxId = 0; - Header->Padding = 0; + + Header->CtxId = 0; + Header->Padding = 0; ASSERT (RequestSize >= sizeof *Header); ASSERT (RequestSize <= MAX_UINT32); @@ -445,6 +453,7 @@ VirtioGpuSendCommand ( if (EFI_ERROR (Status)) { return Status; } + Status = VirtioMapAllBytesInSharedBuffer ( VgpuDev->VirtIo, VirtioOperationBusMasterWrite, @@ -479,8 +488,13 @@ VirtioGpuSendCommand ( // // Send the command. // - Status = VirtioFlush (VgpuDev->VirtIo, VIRTIO_GPU_CONTROL_QUEUE, - &VgpuDev->Ring, &Indices, &ResponseSize); + Status = VirtioFlush ( + VgpuDev->VirtIo, + VIRTIO_GPU_CONTROL_QUEUE, + &VgpuDev->Ring, + &Indices, + &ResponseSize + ); if (EFI_ERROR (Status)) { goto UnmapResponse; } @@ -489,8 +503,12 @@ VirtioGpuSendCommand ( // Verify response size. // if (ResponseSize != sizeof Response) { - DEBUG ((DEBUG_ERROR, "%a: malformed response to Request=0x%x\n", - __FUNCTION__, (UINT32)RequestType)); + DEBUG (( + DEBUG_ERROR, + "%a: malformed response to Request=0x%x\n", + __FUNCTION__, + (UINT32)RequestType + )); Status = EFI_PROTOCOL_ERROR; goto UnmapResponse; } @@ -504,6 +522,7 @@ VirtioGpuSendCommand ( if (EFI_ERROR (Status)) { goto UnmapRequest; } + Status = VgpuDev->VirtIo->UnmapSharedBuffer (VgpuDev->VirtIo, RequestMap); if (EFI_ERROR (Status)) { return Status; @@ -516,8 +535,13 @@ VirtioGpuSendCommand ( return EFI_SUCCESS; } - DEBUG ((DEBUG_ERROR, "%a: Request=0x%x Response=0x%x\n", __FUNCTION__, - (UINT32)RequestType, Response.Type)); + DEBUG (( + DEBUG_ERROR, + "%a: Request=0x%x Response=0x%x\n", + __FUNCTION__, + (UINT32)RequestType, + Response.Type + )); return EFI_DEVICE_ERROR; UnmapResponse: @@ -557,14 +581,14 @@ UnmapRequest: **/ EFI_STATUS VirtioGpuResourceCreate2d ( - IN OUT VGPU_DEV *VgpuDev, - IN UINT32 ResourceId, - IN VIRTIO_GPU_FORMATS Format, - IN UINT32 Width, - IN UINT32 Height + IN OUT VGPU_DEV *VgpuDev, + IN UINT32 ResourceId, + IN VIRTIO_GPU_FORMATS Format, + IN UINT32 Width, + IN UINT32 Height ) { - volatile VIRTIO_GPU_RESOURCE_CREATE_2D Request; + volatile VIRTIO_GPU_RESOURCE_CREATE_2D Request; if (ResourceId == 0) { return EFI_INVALID_PARAMETER; @@ -586,11 +610,11 @@ VirtioGpuResourceCreate2d ( EFI_STATUS VirtioGpuResourceUnref ( - IN OUT VGPU_DEV *VgpuDev, - IN UINT32 ResourceId + IN OUT VGPU_DEV *VgpuDev, + IN UINT32 ResourceId ) { - volatile VIRTIO_GPU_RESOURCE_UNREF Request; + volatile VIRTIO_GPU_RESOURCE_UNREF Request; if (ResourceId == 0) { return EFI_INVALID_PARAMETER; @@ -610,13 +634,13 @@ VirtioGpuResourceUnref ( EFI_STATUS VirtioGpuResourceAttachBacking ( - IN OUT VGPU_DEV *VgpuDev, - IN UINT32 ResourceId, - IN EFI_PHYSICAL_ADDRESS BackingStoreDeviceAddress, - IN UINTN NumberOfPages + IN OUT VGPU_DEV *VgpuDev, + IN UINT32 ResourceId, + IN EFI_PHYSICAL_ADDRESS BackingStoreDeviceAddress, + IN UINTN NumberOfPages ) { - volatile VIRTIO_GPU_RESOURCE_ATTACH_BACKING Request; + volatile VIRTIO_GPU_RESOURCE_ATTACH_BACKING Request; if (ResourceId == 0) { return EFI_INVALID_PARAMETER; @@ -639,11 +663,11 @@ VirtioGpuResourceAttachBacking ( EFI_STATUS VirtioGpuResourceDetachBacking ( - IN OUT VGPU_DEV *VgpuDev, - IN UINT32 ResourceId + IN OUT VGPU_DEV *VgpuDev, + IN UINT32 ResourceId ) { - volatile VIRTIO_GPU_RESOURCE_DETACH_BACKING Request; + volatile VIRTIO_GPU_RESOURCE_DETACH_BACKING Request; if (ResourceId == 0) { return EFI_INVALID_PARAMETER; @@ -669,16 +693,16 @@ VirtioGpuResourceDetachBacking ( EFI_STATUS VirtioGpuSetScanout ( - IN OUT VGPU_DEV *VgpuDev, - IN UINT32 X, - IN UINT32 Y, - IN UINT32 Width, - IN UINT32 Height, - IN UINT32 ScanoutId, - IN UINT32 ResourceId + IN OUT VGPU_DEV *VgpuDev, + IN UINT32 X, + IN UINT32 Y, + IN UINT32 Width, + IN UINT32 Height, + IN UINT32 ScanoutId, + IN UINT32 ResourceId ) { - volatile VIRTIO_GPU_SET_SCANOUT Request; + volatile VIRTIO_GPU_SET_SCANOUT Request; // // Unlike for most other commands, ResourceId=0 is valid; it @@ -702,16 +726,16 @@ VirtioGpuSetScanout ( EFI_STATUS VirtioGpuTransferToHost2d ( - IN OUT VGPU_DEV *VgpuDev, - IN UINT32 X, - IN UINT32 Y, - IN UINT32 Width, - IN UINT32 Height, - IN UINT64 Offset, - IN UINT32 ResourceId + IN OUT VGPU_DEV *VgpuDev, + IN UINT32 X, + IN UINT32 Y, + IN UINT32 Width, + IN UINT32 Height, + IN UINT64 Offset, + IN UINT32 ResourceId ) { - volatile VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D Request; + volatile VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D Request; if (ResourceId == 0) { return EFI_INVALID_PARAMETER; @@ -736,15 +760,15 @@ VirtioGpuTransferToHost2d ( EFI_STATUS VirtioGpuResourceFlush ( - IN OUT VGPU_DEV *VgpuDev, - IN UINT32 X, - IN UINT32 Y, - IN UINT32 Width, - IN UINT32 Height, - IN UINT32 ResourceId + IN OUT VGPU_DEV *VgpuDev, + IN UINT32 X, + IN UINT32 Y, + IN UINT32 Width, + IN UINT32 Height, + IN UINT32 ResourceId ) { - volatile VIRTIO_GPU_RESOURCE_FLUSH Request; + volatile VIRTIO_GPU_RESOURCE_FLUSH Request; if (ResourceId == 0) { return EFI_INVALID_PARAMETER; diff --git a/OvmfPkg/VirtioGpuDxe/DriverBinding.c b/OvmfPkg/VirtioGpuDxe/DriverBinding.c index 666d577547..21bf2babc8 100644 --- a/OvmfPkg/VirtioGpuDxe/DriverBinding.c +++ b/OvmfPkg/VirtioGpuDxe/DriverBinding.c @@ -29,13 +29,14 @@ // in the ACPI 3.0b spec, or more recently, to Table B-379, section "B.3.2 // _DOD" in the ACPI 6.0 spec. // -STATIC CONST ACPI_ADR_DEVICE_PATH mAcpiAdr = { +STATIC CONST ACPI_ADR_DEVICE_PATH mAcpiAdr = { { // Header ACPI_DEVICE_PATH, // Type ACPI_ADR_DP, // SubType { sizeof mAcpiAdr, 0 }, // Length }, - ACPI_DISPLAY_ADR ( // ADR + ACPI_DISPLAY_ADR ( + // ADR 1, // DeviceIdScheme: use the ACPI // bit-field definitions 0, // HeadId @@ -51,7 +52,7 @@ STATIC CONST ACPI_ADR_DEVICE_PATH mAcpiAdr = { // // Component Name 2 Protocol implementation. // -STATIC CONST EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { +STATIC CONST EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { { "en", L"Virtio GPU Driver" }, { NULL, NULL } }; @@ -60,51 +61,72 @@ STATIC EFI_STATUS EFIAPI VirtioGpuGetDriverName ( - IN EFI_COMPONENT_NAME2_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME2_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) { - return LookupUnicodeString2 (Language, This->SupportedLanguages, - mDriverNameTable, DriverName, FALSE /* Iso639Language */); + return LookupUnicodeString2 ( + Language, + This->SupportedLanguages, + mDriverNameTable, + DriverName, + FALSE /* Iso639Language */ + ); } STATIC EFI_STATUS EFIAPI VirtioGpuGetControllerName ( - IN EFI_COMPONENT_NAME2_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle OPTIONAL, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME2_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { - EFI_STATUS Status; - VGPU_DEV *VgpuDev; + EFI_STATUS Status; + VGPU_DEV *VgpuDev; // // Look up the VGPU_DEV "protocol interface" on ControllerHandle. // - Status = gBS->OpenProtocol (ControllerHandle, &gEfiCallerIdGuid, - (VOID **)&VgpuDev, gImageHandle, ControllerHandle, - EFI_OPEN_PROTOCOL_GET_PROTOCOL); + Status = gBS->OpenProtocol ( + ControllerHandle, + &gEfiCallerIdGuid, + (VOID **)&VgpuDev, + gImageHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); if (EFI_ERROR (Status)) { return Status; } + // // Sanity check: if we found gEfiCallerIdGuid on ControllerHandle, then we // keep its Virtio Device Protocol interface open BY_DRIVER. // - ASSERT_EFI_ERROR (EfiTestManagedDevice (ControllerHandle, gImageHandle, - &gVirtioDeviceProtocolGuid)); + ASSERT_EFI_ERROR ( + EfiTestManagedDevice ( + ControllerHandle, + gImageHandle, + &gVirtioDeviceProtocolGuid + ) + ); if (ChildHandle == NULL) { // // The caller is querying the name of the VGPU_DEV controller. // - return LookupUnicodeString2 (Language, This->SupportedLanguages, - VgpuDev->BusName, ControllerName, FALSE /* Iso639Language */); + return LookupUnicodeString2 ( + Language, + This->SupportedLanguages, + VgpuDev->BusName, + ControllerName, + FALSE /* Iso639Language */ + ); } // @@ -113,22 +135,32 @@ VirtioGpuGetControllerName ( // condition below covers the case when we haven't produced the GOP child // controller yet, or we've destroyed it since.) // - if (VgpuDev->Child == NULL || ChildHandle != VgpuDev->Child->GopHandle) { + if ((VgpuDev->Child == NULL) || (ChildHandle != VgpuDev->Child->GopHandle)) { return EFI_UNSUPPORTED; } + // // Sanity check: our GOP child controller keeps the VGPU_DEV controller's // Virtio Device Protocol interface open BY_CHILD_CONTROLLER. // - ASSERT_EFI_ERROR (EfiTestChildHandle (ControllerHandle, ChildHandle, - &gVirtioDeviceProtocolGuid)); - - return LookupUnicodeString2 (Language, This->SupportedLanguages, - VgpuDev->Child->GopName, ControllerName, - FALSE /* Iso639Language */); + ASSERT_EFI_ERROR ( + EfiTestChildHandle ( + ControllerHandle, + ChildHandle, + &gVirtioDeviceProtocolGuid + ) + ); + + return LookupUnicodeString2 ( + Language, + This->SupportedLanguages, + VgpuDev->Child->GopName, + ControllerName, + FALSE /* Iso639Language */ + ); } -STATIC CONST EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = { +STATIC CONST EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = { VirtioGpuGetDriverName, VirtioGpuGetControllerName, "en" // SupportedLanguages (RFC 4646) @@ -137,6 +169,7 @@ STATIC CONST EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = { // // Helper functions for the Driver Binding Protocol Implementation. // + /** Format the VGPU_DEV controller name, to be looked up and returned by VirtioGpuGetControllerName(). @@ -170,32 +203,55 @@ STATIC CONST EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 = { STATIC EFI_STATUS FormatVgpuDevName ( - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE AgentHandle, - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, - OUT CHAR16 **ControllerName + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE AgentHandle, + IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, + OUT CHAR16 **ControllerName ) { - EFI_HANDLE PciIoHandle; - EFI_PCI_IO_PROTOCOL *PciIo; - UINTN Segment, Bus, Device, Function; - STATIC CONST CHAR16 ControllerNameStem[] = L"Virtio GPU Device"; - UINTN ControllerNameSize; - - if (EFI_ERROR (gBS->LocateDevicePath (&gEfiPciIoProtocolGuid, &DevicePath, - &PciIoHandle)) || - EFI_ERROR (gBS->OpenProtocol (PciIoHandle, &gEfiPciIoProtocolGuid, - (VOID **)&PciIo, AgentHandle, ControllerHandle, - EFI_OPEN_PROTOCOL_GET_PROTOCOL)) || - EFI_ERROR (PciIo->GetLocation (PciIo, &Segment, &Bus, &Device, - &Function))) { + EFI_HANDLE PciIoHandle; + EFI_PCI_IO_PROTOCOL *PciIo; + UINTN Segment, Bus, Device, Function; + STATIC CONST CHAR16 ControllerNameStem[] = L"Virtio GPU Device"; + UINTN ControllerNameSize; + + if (EFI_ERROR ( + gBS->LocateDevicePath ( + &gEfiPciIoProtocolGuid, + &DevicePath, + &PciIoHandle + ) + ) || + EFI_ERROR ( + gBS->OpenProtocol ( + PciIoHandle, + &gEfiPciIoProtocolGuid, + (VOID **)&PciIo, + AgentHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ) + ) || + EFI_ERROR ( + PciIo->GetLocation ( + PciIo, + &Segment, + &Bus, + &Device, + &Function + ) + )) + { // // Failed to retrieve location info, return verbatim copy of static string. // - *ControllerName = AllocateCopyPool (sizeof ControllerNameStem, - ControllerNameStem); + *ControllerName = AllocateCopyPool ( + sizeof ControllerNameStem, + ControllerNameStem + ); return (*ControllerName == NULL) ? EFI_OUT_OF_RESOURCES : EFI_SUCCESS; } + // // Location info available, format ControllerName dynamically. // @@ -210,9 +266,16 @@ FormatVgpuDevName ( return EFI_OUT_OF_RESOURCES; } - UnicodeSPrintAsciiFormat (*ControllerName, ControllerNameSize, - "%s %04x:%02x:%02x.%x", ControllerNameStem, (UINT32)Segment, (UINT32)Bus, - (UINT32)Device, (UINT32)Function); + UnicodeSPrintAsciiFormat ( + *ControllerName, + ControllerNameSize, + "%s %04x:%02x:%02x.%x", + ControllerNameStem, + (UINT32)Segment, + (UINT32)Bus, + (UINT32)Device, + (UINT32)Function + ); return EFI_SUCCESS; } @@ -254,20 +317,20 @@ FormatVgpuDevName ( STATIC EFI_STATUS InitVgpuGop ( - IN OUT VGPU_DEV *ParentBus, - IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath, - IN EFI_HANDLE ParentBusController, - IN EFI_HANDLE DriverBindingHandle + IN OUT VGPU_DEV *ParentBus, + IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath, + IN EFI_HANDLE ParentBusController, + IN EFI_HANDLE DriverBindingHandle ) { - VGPU_GOP *VgpuGop; - EFI_STATUS Status; - CHAR16 *ParentBusName; - STATIC CONST CHAR16 NameSuffix[] = L" Head #0"; - UINTN NameSize; - CHAR16 *Name; - EFI_TPL OldTpl; - VOID *ParentVirtIo; + VGPU_GOP *VgpuGop; + EFI_STATUS Status; + CHAR16 *ParentBusName; + STATIC CONST CHAR16 NameSuffix[] = L" Head #0"; + UINTN NameSize; + CHAR16 *Name; + EFI_TPL OldTpl; + VOID *ParentVirtIo; VgpuGop = AllocateZeroPool (sizeof *VgpuGop); if (VgpuGop == NULL) { @@ -282,18 +345,29 @@ InitVgpuGop ( // VirtioGpuGetControllerName() to look up. We simply append NameSuffix to // ParentBus->BusName. // - Status = LookupUnicodeString2 ("en", mComponentName2.SupportedLanguages, - ParentBus->BusName, &ParentBusName, FALSE /* Iso639Language */); + Status = LookupUnicodeString2 ( + "en", + mComponentName2.SupportedLanguages, + ParentBus->BusName, + &ParentBusName, + FALSE /* Iso639Language */ + ); ASSERT_EFI_ERROR (Status); NameSize = StrSize (ParentBusName) - sizeof (CHAR16) + sizeof NameSuffix; - Name = AllocatePool (NameSize); + Name = AllocatePool (NameSize); if (Name == NULL) { Status = EFI_OUT_OF_RESOURCES; goto FreeVgpuGop; } + UnicodeSPrintAsciiFormat (Name, NameSize, "%s%s", ParentBusName, NameSuffix); - Status = AddUnicodeString2 ("en", mComponentName2.SupportedLanguages, - &VgpuGop->GopName, Name, FALSE /* Iso639Language */); + Status = AddUnicodeString2 ( + "en", + mComponentName2.SupportedLanguages, + &VgpuGop->GopName, + Name, + FALSE /* Iso639Language */ + ); FreePool (Name); if (EFI_ERROR (Status)) { goto FreeVgpuGop; @@ -302,8 +376,10 @@ InitVgpuGop ( // // Create the child device path. // - VgpuGop->GopDevicePath = AppendDevicePathNode (ParentDevicePath, - &mAcpiAdr.Header); + VgpuGop->GopDevicePath = AppendDevicePathNode ( + ParentDevicePath, + &mAcpiAdr.Header + ); if (VgpuGop->GopDevicePath == NULL) { Status = EFI_OUT_OF_RESOURCES; goto FreeVgpuGopName; @@ -317,9 +393,12 @@ InitVgpuGop ( // // Create the child handle with the child device path. // - Status = gBS->InstallProtocolInterface (&VgpuGop->GopHandle, - &gEfiDevicePathProtocolGuid, EFI_NATIVE_INTERFACE, - VgpuGop->GopDevicePath); + Status = gBS->InstallProtocolInterface ( + &VgpuGop->GopHandle, + &gEfiDevicePathProtocolGuid, + EFI_NATIVE_INTERFACE, + VgpuGop->GopDevicePath + ); if (EFI_ERROR (Status)) { goto FreeDevicePath; } @@ -328,12 +407,18 @@ InitVgpuGop ( // The child handle must present a reference to the parent handle's Virtio // Device Protocol interface. // - Status = gBS->OpenProtocol (ParentBusController, &gVirtioDeviceProtocolGuid, - &ParentVirtIo, DriverBindingHandle, VgpuGop->GopHandle, - EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER); + Status = gBS->OpenProtocol ( + ParentBusController, + &gVirtioDeviceProtocolGuid, + &ParentVirtIo, + DriverBindingHandle, + VgpuGop->GopHandle, + EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER + ); if (EFI_ERROR (Status)) { goto UninstallDevicePath; } + ASSERT (ParentVirtIo == ParentBus->VirtIo); // @@ -351,9 +436,12 @@ InitVgpuGop ( // // Install the Graphics Output Protocol on the child handle. // - Status = gBS->InstallProtocolInterface (&VgpuGop->GopHandle, - &gEfiGraphicsOutputProtocolGuid, EFI_NATIVE_INTERFACE, - &VgpuGop->Gop); + Status = gBS->InstallProtocolInterface ( + &VgpuGop->GopHandle, + &gEfiGraphicsOutputProtocolGuid, + EFI_NATIVE_INTERFACE, + &VgpuGop->Gop + ); if (EFI_ERROR (Status)) { goto UninitGop; } @@ -369,12 +457,19 @@ UninitGop: ReleaseGopResources (VgpuGop, TRUE /* DisableHead */); CloseVirtIoByChild: - gBS->CloseProtocol (ParentBusController, &gVirtioDeviceProtocolGuid, - DriverBindingHandle, VgpuGop->GopHandle); + gBS->CloseProtocol ( + ParentBusController, + &gVirtioDeviceProtocolGuid, + DriverBindingHandle, + VgpuGop->GopHandle + ); UninstallDevicePath: - gBS->UninstallProtocolInterface (VgpuGop->GopHandle, - &gEfiDevicePathProtocolGuid, VgpuGop->GopDevicePath); + gBS->UninstallProtocolInterface ( + VgpuGop->GopHandle, + &gEfiDevicePathProtocolGuid, + VgpuGop->GopDevicePath + ); FreeDevicePath: gBS->RestoreTPL (OldTpl); @@ -412,17 +507,20 @@ FreeVgpuGop: STATIC VOID UninitVgpuGop ( - IN OUT VGPU_DEV *ParentBus, - IN EFI_HANDLE ParentBusController, - IN EFI_HANDLE DriverBindingHandle + IN OUT VGPU_DEV *ParentBus, + IN EFI_HANDLE ParentBusController, + IN EFI_HANDLE DriverBindingHandle ) { - VGPU_GOP *VgpuGop; - EFI_STATUS Status; + VGPU_GOP *VgpuGop; + EFI_STATUS Status; VgpuGop = ParentBus->Child; - Status = gBS->UninstallProtocolInterface (VgpuGop->GopHandle, - &gEfiGraphicsOutputProtocolGuid, &VgpuGop->Gop); + Status = gBS->UninstallProtocolInterface ( + VgpuGop->GopHandle, + &gEfiGraphicsOutputProtocolGuid, + &VgpuGop->Gop + ); ASSERT_EFI_ERROR (Status); // @@ -430,12 +528,19 @@ UninitVgpuGop ( // ReleaseGopResources (VgpuGop, TRUE /* DisableHead */); - Status = gBS->CloseProtocol (ParentBusController, &gVirtioDeviceProtocolGuid, - DriverBindingHandle, VgpuGop->GopHandle); + Status = gBS->CloseProtocol ( + ParentBusController, + &gVirtioDeviceProtocolGuid, + DriverBindingHandle, + VgpuGop->GopHandle + ); ASSERT_EFI_ERROR (Status); - Status = gBS->UninstallProtocolInterface (VgpuGop->GopHandle, - &gEfiDevicePathProtocolGuid, VgpuGop->GopDevicePath); + Status = gBS->UninstallProtocolInterface ( + VgpuGop->GopHandle, + &gEfiDevicePathProtocolGuid, + VgpuGop->GopDevicePath + ); ASSERT_EFI_ERROR (Status); FreePool (VgpuGop->GopDevicePath); @@ -452,13 +557,13 @@ STATIC EFI_STATUS EFIAPI VirtioGpuDriverBindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - EFI_STATUS Status; - VIRTIO_DEVICE_PROTOCOL *VirtIo; + EFI_STATUS Status; + VIRTIO_DEVICE_PROTOCOL *VirtIo; // // - If RemainingDevicePath is NULL: the caller is interested in creating all @@ -469,19 +574,25 @@ VirtioGpuDriverBindingSupported ( // specified in RemainingDevicePath. In this case we have to see if the // requested device path is supportable. // - if (RemainingDevicePath != NULL && + if ((RemainingDevicePath != NULL) && !IsDevicePathEnd (RemainingDevicePath) && - (DevicePathNodeLength (RemainingDevicePath) != sizeof mAcpiAdr || - CompareMem (RemainingDevicePath, &mAcpiAdr, sizeof mAcpiAdr) != 0)) { + ((DevicePathNodeLength (RemainingDevicePath) != sizeof mAcpiAdr) || + (CompareMem (RemainingDevicePath, &mAcpiAdr, sizeof mAcpiAdr) != 0))) + { return EFI_UNSUPPORTED; } // // Open the Virtio Device Protocol interface on the controller, BY_DRIVER. // - Status = gBS->OpenProtocol (ControllerHandle, &gVirtioDeviceProtocolGuid, - (VOID **)&VirtIo, This->DriverBindingHandle, - ControllerHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); + Status = gBS->OpenProtocol ( + ControllerHandle, + &gVirtioDeviceProtocolGuid, + (VOID **)&VirtIo, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { // // If this fails, then by default we cannot support ControllerHandle. There @@ -491,17 +602,23 @@ VirtioGpuDriverBindingSupported ( // allowed. // if (Status == EFI_ALREADY_STARTED) { - EFI_STATUS Status2; - VGPU_DEV *VgpuDev; - - Status2 = gBS->OpenProtocol (ControllerHandle, &gEfiCallerIdGuid, - (VOID **)&VgpuDev, This->DriverBindingHandle, - ControllerHandle, EFI_OPEN_PROTOCOL_GET_PROTOCOL); + EFI_STATUS Status2; + VGPU_DEV *VgpuDev; + + Status2 = gBS->OpenProtocol ( + ControllerHandle, + &gEfiCallerIdGuid, + (VOID **)&VgpuDev, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); ASSERT_EFI_ERROR (Status2); - if (VgpuDev->Child == NULL && - (RemainingDevicePath == NULL || - !IsDevicePathEnd (RemainingDevicePath))) { + if ((VgpuDev->Child == NULL) && + ((RemainingDevicePath == NULL) || + !IsDevicePathEnd (RemainingDevicePath))) + { Status = EFI_SUCCESS; } } @@ -512,8 +629,9 @@ VirtioGpuDriverBindingSupported ( // // First BY_DRIVER open; check the VirtIo revision and subsystem. // - if (VirtIo->Revision < VIRTIO_SPEC_REVISION (1, 0, 0) || - VirtIo->SubSystemDeviceId != VIRTIO_SUBSYSTEM_GPU_DEVICE) { + if ((VirtIo->Revision < VIRTIO_SPEC_REVISION (1, 0, 0)) || + (VirtIo->SubSystemDeviceId != VIRTIO_SUBSYSTEM_GPU_DEVICE)) + { Status = EFI_UNSUPPORTED; goto CloseVirtIo; } @@ -522,13 +640,22 @@ VirtioGpuDriverBindingSupported ( // We'll need the device path of the VirtIo device both for formatting // VGPU_DEV.BusName and for populating VGPU_GOP.GopDevicePath. // - Status = gBS->OpenProtocol (ControllerHandle, &gEfiDevicePathProtocolGuid, - NULL, This->DriverBindingHandle, ControllerHandle, - EFI_OPEN_PROTOCOL_TEST_PROTOCOL); + Status = gBS->OpenProtocol ( + ControllerHandle, + &gEfiDevicePathProtocolGuid, + NULL, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_TEST_PROTOCOL + ); CloseVirtIo: - gBS->CloseProtocol (ControllerHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, ControllerHandle); + gBS->CloseProtocol ( + ControllerHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); return Status; } @@ -537,16 +664,16 @@ STATIC EFI_STATUS EFIAPI VirtioGpuDriverBindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - EFI_STATUS Status; - VIRTIO_DEVICE_PROTOCOL *VirtIo; - BOOLEAN VirtIoBoundJustNow; - VGPU_DEV *VgpuDev; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; + EFI_STATUS Status; + VIRTIO_DEVICE_PROTOCOL *VirtIo; + BOOLEAN VirtIoBoundJustNow; + VGPU_DEV *VgpuDev; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; // // Open the Virtio Device Protocol. @@ -556,9 +683,14 @@ VirtioGpuDriverBindingStart ( // binding the VirtIo controller on this call (with or without creating child // controllers), or else we're *only* creating child controllers. // - Status = gBS->OpenProtocol (ControllerHandle, &gVirtioDeviceProtocolGuid, - (VOID **)&VirtIo, This->DriverBindingHandle, - ControllerHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); + Status = gBS->OpenProtocol ( + ControllerHandle, + &gVirtioDeviceProtocolGuid, + (VOID **)&VirtIo, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { // // The assertions below are based on the success of @@ -568,14 +700,20 @@ VirtioGpuDriverBindingStart ( // ASSERT (Status == EFI_ALREADY_STARTED); - Status = gBS->OpenProtocol (ControllerHandle, &gEfiCallerIdGuid, - (VOID **)&VgpuDev, This->DriverBindingHandle, - ControllerHandle, EFI_OPEN_PROTOCOL_GET_PROTOCOL); + Status = gBS->OpenProtocol ( + ControllerHandle, + &gEfiCallerIdGuid, + (VOID **)&VgpuDev, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); ASSERT_EFI_ERROR (Status); ASSERT (VgpuDev->Child == NULL); ASSERT ( - RemainingDevicePath == NULL || !IsDevicePathEnd (RemainingDevicePath)); + RemainingDevicePath == NULL || !IsDevicePathEnd (RemainingDevicePath) + ); VirtIoBoundJustNow = FALSE; } else { @@ -589,6 +727,7 @@ VirtioGpuDriverBindingStart ( Status = EFI_OUT_OF_RESOURCES; goto CloseVirtIo; } + VgpuDev->VirtIo = VirtIo; } @@ -596,9 +735,14 @@ VirtioGpuDriverBindingStart ( // Grab the VirtIo controller's device path. This is necessary regardless of // VirtIoBoundJustNow. // - Status = gBS->OpenProtocol (ControllerHandle, &gEfiDevicePathProtocolGuid, - (VOID **)&DevicePath, This->DriverBindingHandle, - ControllerHandle, EFI_OPEN_PROTOCOL_GET_PROTOCOL); + Status = gBS->OpenProtocol ( + ControllerHandle, + &gEfiDevicePathProtocolGuid, + (VOID **)&DevicePath, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); if (EFI_ERROR (Status)) { goto FreeVgpuDev; } @@ -608,19 +752,29 @@ VirtioGpuDriverBindingStart ( // if we aren't *only* creating child handles). // if (VirtIoBoundJustNow) { - CHAR16 *VgpuDevName; + CHAR16 *VgpuDevName; // // Format a human-readable controller name for VGPU_DEV, and stash it for // VirtioGpuGetControllerName() to look up. // - Status = FormatVgpuDevName (ControllerHandle, This->DriverBindingHandle, - DevicePath, &VgpuDevName); + Status = FormatVgpuDevName ( + ControllerHandle, + This->DriverBindingHandle, + DevicePath, + &VgpuDevName + ); if (EFI_ERROR (Status)) { goto FreeVgpuDev; } - Status = AddUnicodeString2 ("en", mComponentName2.SupportedLanguages, - &VgpuDev->BusName, VgpuDevName, FALSE /* Iso639Language */); + + Status = AddUnicodeString2 ( + "en", + mComponentName2.SupportedLanguages, + &VgpuDev->BusName, + VgpuDevName, + FALSE /* Iso639Language */ + ); FreePool (VgpuDevName); if (EFI_ERROR (Status)) { goto FreeVgpuDev; @@ -631,9 +785,13 @@ VirtioGpuDriverBindingStart ( goto FreeVgpuDevBusName; } - Status = gBS->CreateEvent (EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_CALLBACK, - VirtioGpuExitBoot, VgpuDev /* NotifyContext */, - &VgpuDev->ExitBoot); + Status = gBS->CreateEvent ( + EVT_SIGNAL_EXIT_BOOT_SERVICES, + TPL_CALLBACK, + VirtioGpuExitBoot, + VgpuDev /* NotifyContext */, + &VgpuDev->ExitBoot + ); if (EFI_ERROR (Status)) { goto UninitGpu; } @@ -641,18 +799,26 @@ VirtioGpuDriverBindingStart ( // // Install the VGPU_DEV "protocol interface" on ControllerHandle. // - Status = gBS->InstallProtocolInterface (&ControllerHandle, - &gEfiCallerIdGuid, EFI_NATIVE_INTERFACE, VgpuDev); + Status = gBS->InstallProtocolInterface ( + &ControllerHandle, + &gEfiCallerIdGuid, + EFI_NATIVE_INTERFACE, + VgpuDev + ); if (EFI_ERROR (Status)) { goto CloseExitBoot; } - if (RemainingDevicePath != NULL && IsDevicePathEnd (RemainingDevicePath)) { + if ((RemainingDevicePath != NULL) && IsDevicePathEnd (RemainingDevicePath)) { // // No child handle should be produced; we're done. // - DEBUG ((DEBUG_INFO, "%a: bound VirtIo=%p without producing GOP\n", - __FUNCTION__, (VOID *)VgpuDev->VirtIo)); + DEBUG (( + DEBUG_INFO, + "%a: bound VirtIo=%p without producing GOP\n", + __FUNCTION__, + (VOID *)VgpuDev->VirtIo + )); return EFI_SUCCESS; } } @@ -663,10 +829,15 @@ VirtioGpuDriverBindingStart ( // ASSERT (VgpuDev->Child == NULL); ASSERT ( - RemainingDevicePath == NULL || !IsDevicePathEnd (RemainingDevicePath)); - - Status = InitVgpuGop (VgpuDev, DevicePath, ControllerHandle, - This->DriverBindingHandle); + RemainingDevicePath == NULL || !IsDevicePathEnd (RemainingDevicePath) + ); + + Status = InitVgpuGop ( + VgpuDev, + DevicePath, + ControllerHandle, + This->DriverBindingHandle + ); if (EFI_ERROR (Status)) { goto UninstallVgpuDev; } @@ -674,15 +845,22 @@ VirtioGpuDriverBindingStart ( // // We're done. // - DEBUG ((DEBUG_INFO, "%a: produced GOP %a VirtIo=%p\n", __FUNCTION__, + DEBUG (( + DEBUG_INFO, + "%a: produced GOP %a VirtIo=%p\n", + __FUNCTION__, VirtIoBoundJustNow ? "while binding" : "for pre-bound", - (VOID *)VgpuDev->VirtIo)); + (VOID *)VgpuDev->VirtIo + )); return EFI_SUCCESS; UninstallVgpuDev: if (VirtIoBoundJustNow) { - gBS->UninstallProtocolInterface (ControllerHandle, &gEfiCallerIdGuid, - VgpuDev); + gBS->UninstallProtocolInterface ( + ControllerHandle, + &gEfiCallerIdGuid, + VgpuDev + ); } CloseExitBoot: @@ -707,8 +885,12 @@ FreeVgpuDev: CloseVirtIo: if (VirtIoBoundJustNow) { - gBS->CloseProtocol (ControllerHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, ControllerHandle); + gBS->CloseProtocol ( + ControllerHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); } return Status; @@ -718,101 +900,134 @@ STATIC EFI_STATUS EFIAPI VirtioGpuDriverBindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer OPTIONAL + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer OPTIONAL ) { - EFI_STATUS Status; - VGPU_DEV *VgpuDev; + EFI_STATUS Status; + VGPU_DEV *VgpuDev; // // Look up the VGPU_DEV "protocol interface" on ControllerHandle. // - Status = gBS->OpenProtocol (ControllerHandle, &gEfiCallerIdGuid, - (VOID **)&VgpuDev, This->DriverBindingHandle, - ControllerHandle, EFI_OPEN_PROTOCOL_GET_PROTOCOL); + Status = gBS->OpenProtocol ( + ControllerHandle, + &gEfiCallerIdGuid, + (VOID **)&VgpuDev, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); if (EFI_ERROR (Status)) { return Status; } + // // Sanity check: if we found gEfiCallerIdGuid on ControllerHandle, then we // keep its Virtio Device Protocol interface open BY_DRIVER. // - ASSERT_EFI_ERROR (EfiTestManagedDevice (ControllerHandle, - This->DriverBindingHandle, &gVirtioDeviceProtocolGuid)); + ASSERT_EFI_ERROR ( + EfiTestManagedDevice ( + ControllerHandle, + This->DriverBindingHandle, + &gVirtioDeviceProtocolGuid + ) + ); switch (NumberOfChildren) { - case 0: - // - // The caller wants us to unbind the VirtIo controller. - // - if (VgpuDev->Child != NULL) { + case 0: // - // We still have the GOP child. + // The caller wants us to unbind the VirtIo controller. // - Status = EFI_DEVICE_ERROR; - break; - } - - DEBUG ((DEBUG_INFO, "%a: unbinding GOP-less VirtIo=%p\n", __FUNCTION__, - (VOID *)VgpuDev->VirtIo)); - - Status = gBS->UninstallProtocolInterface (ControllerHandle, - &gEfiCallerIdGuid, VgpuDev); - ASSERT_EFI_ERROR (Status); + if (VgpuDev->Child != NULL) { + // + // We still have the GOP child. + // + Status = EFI_DEVICE_ERROR; + break; + } - Status = gBS->CloseEvent (VgpuDev->ExitBoot); - ASSERT_EFI_ERROR (Status); + DEBUG (( + DEBUG_INFO, + "%a: unbinding GOP-less VirtIo=%p\n", + __FUNCTION__, + (VOID *)VgpuDev->VirtIo + )); + + Status = gBS->UninstallProtocolInterface ( + ControllerHandle, + &gEfiCallerIdGuid, + VgpuDev + ); + ASSERT_EFI_ERROR (Status); + + Status = gBS->CloseEvent (VgpuDev->ExitBoot); + ASSERT_EFI_ERROR (Status); + + VirtioGpuUninit (VgpuDev); + FreeUnicodeStringTable (VgpuDev->BusName); + FreePool (VgpuDev); + + Status = gBS->CloseProtocol ( + ControllerHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); + ASSERT_EFI_ERROR (Status); + break; - VirtioGpuUninit (VgpuDev); - FreeUnicodeStringTable (VgpuDev->BusName); - FreePool (VgpuDev); + case 1: + // + // The caller wants us to destroy our child GOP controller. + // + if ((VgpuDev->Child == NULL) || + (ChildHandleBuffer[0] != VgpuDev->Child->GopHandle)) + { + // + // We have no child controller at the moment, or it differs from the one + // the caller wants us to destroy. I.e., we don't own the child + // controller passed in. + // + Status = EFI_DEVICE_ERROR; + break; + } - Status = gBS->CloseProtocol (ControllerHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, ControllerHandle); - ASSERT_EFI_ERROR (Status); - break; + // + // Sanity check: our GOP child controller keeps the VGPU_DEV controller's + // Virtio Device Protocol interface open BY_CHILD_CONTROLLER. + // + ASSERT_EFI_ERROR ( + EfiTestChildHandle ( + ControllerHandle, + VgpuDev->Child->GopHandle, + &gVirtioDeviceProtocolGuid + ) + ); + + DEBUG (( + DEBUG_INFO, + "%a: destroying GOP under VirtIo=%p\n", + __FUNCTION__, + (VOID *)VgpuDev->VirtIo + )); + UninitVgpuGop (VgpuDev, ControllerHandle, This->DriverBindingHandle); + break; - case 1: - // - // The caller wants us to destroy our child GOP controller. - // - if (VgpuDev->Child == NULL || - ChildHandleBuffer[0] != VgpuDev->Child->GopHandle) { + default: // - // We have no child controller at the moment, or it differs from the one - // the caller wants us to destroy. I.e., we don't own the child - // controller passed in. + // Impossible, we never produced more than one child. // Status = EFI_DEVICE_ERROR; break; - } - // - // Sanity check: our GOP child controller keeps the VGPU_DEV controller's - // Virtio Device Protocol interface open BY_CHILD_CONTROLLER. - // - ASSERT_EFI_ERROR (EfiTestChildHandle (ControllerHandle, - VgpuDev->Child->GopHandle, - &gVirtioDeviceProtocolGuid)); - - DEBUG ((DEBUG_INFO, "%a: destroying GOP under VirtIo=%p\n", __FUNCTION__, - (VOID *)VgpuDev->VirtIo)); - UninitVgpuGop (VgpuDev, ControllerHandle, This->DriverBindingHandle); - break; - - default: - // - // Impossible, we never produced more than one child. - // - Status = EFI_DEVICE_ERROR; - break; } + return Status; } -STATIC EFI_DRIVER_BINDING_PROTOCOL mDriverBinding = { +STATIC EFI_DRIVER_BINDING_PROTOCOL mDriverBinding = { VirtioGpuDriverBindingSupported, VirtioGpuDriverBindingStart, VirtioGpuDriverBindingStop, @@ -827,11 +1042,16 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL mDriverBinding = { EFI_STATUS EFIAPI VirtioGpuEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - return EfiLibInstallDriverBindingComponentName2 (ImageHandle, SystemTable, - &mDriverBinding, ImageHandle, NULL /* ComponentName */, - &mComponentName2); + return EfiLibInstallDriverBindingComponentName2 ( + ImageHandle, + SystemTable, + &mDriverBinding, + ImageHandle, + NULL /* ComponentName */, + &mComponentName2 + ); } diff --git a/OvmfPkg/VirtioGpuDxe/Gop.c b/OvmfPkg/VirtioGpuDxe/Gop.c index 3f0570eaad..2c15d542e3 100644 --- a/OvmfPkg/VirtioGpuDxe/Gop.c +++ b/OvmfPkg/VirtioGpuDxe/Gop.c @@ -37,11 +37,11 @@ **/ VOID ReleaseGopResources ( - IN OUT VGPU_GOP *VgpuGop, - IN BOOLEAN DisableHead + IN OUT VGPU_GOP *VgpuGop, + IN BOOLEAN DisableHead ) { - EFI_STATUS Status; + EFI_STATUS Status; ASSERT (VgpuGop->ResourceId != 0); ASSERT (VgpuGop->BackingStore != NULL); @@ -58,7 +58,10 @@ ReleaseGopResources ( // Status = VirtioGpuSetScanout ( VgpuGop->ParentBus, // VgpuDev - 0, 0, 0, 0, // X, Y, Width, Height + 0, + 0, + 0, + 0, // X, Y, Width, Height 0, // ScanoutId 0 // ResourceId ); @@ -116,8 +119,8 @@ ReleaseGopResources ( VgpuGop->BackingStore, // HostAddress VgpuGop->BackingStoreMap // Mapping ); - VgpuGop->BackingStore = NULL; - VgpuGop->NumberOfPages = 0; + VgpuGop->BackingStore = NULL; + VgpuGop->NumberOfPages = 0; VgpuGop->BackingStoreMap = NULL; // @@ -131,6 +134,7 @@ ReleaseGopResources ( if (EFI_ERROR (Status)) { CpuDeadLoop (); } + VgpuGop->ResourceId = 0; } @@ -138,31 +142,31 @@ ReleaseGopResources ( // The resolutions supported by this driver. // typedef struct { - UINT32 Width; - UINT32 Height; + UINT32 Width; + UINT32 Height; } GOP_RESOLUTION; -STATIC CONST GOP_RESOLUTION mGopResolutions[] = { - { 640, 480 }, - { 800, 480 }, - { 800, 600 }, - { 832, 624 }, - { 960, 640 }, - { 1024, 600 }, - { 1024, 768 }, - { 1152, 864 }, - { 1152, 870 }, - { 1280, 720 }, - { 1280, 760 }, - { 1280, 768 }, - { 1280, 800 }, - { 1280, 960 }, +STATIC CONST GOP_RESOLUTION mGopResolutions[] = { + { 640, 480 }, + { 800, 480 }, + { 800, 600 }, + { 832, 624 }, + { 960, 640 }, + { 1024, 600 }, + { 1024, 768 }, + { 1152, 864 }, + { 1152, 870 }, + { 1280, 720 }, + { 1280, 760 }, + { 1280, 768 }, + { 1280, 800 }, + { 1280, 960 }, { 1280, 1024 }, - { 1360, 768 }, - { 1366, 768 }, + { 1360, 768 }, + { 1366, 768 }, { 1400, 1050 }, - { 1440, 900 }, - { 1600, 900 }, + { 1440, 900 }, + { 1600, 900 }, { 1600, 1200 }, { 1680, 1050 }, { 1920, 1080 }, @@ -195,13 +199,13 @@ STATIC EFI_STATUS EFIAPI GopQueryMode ( - IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, - IN UINT32 ModeNumber, - OUT UINTN *SizeOfInfo, - OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, + IN UINT32 ModeNumber, + OUT UINTN *SizeOfInfo, + OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info ) { - EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *GopModeInfo; + EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *GopModeInfo; if (ModeNumber >= ARRAY_SIZE (mGopResolutions)) { return EFI_INVALID_PARAMETER; @@ -218,7 +222,7 @@ GopQueryMode ( GopModeInfo->PixelsPerScanLine = mGopResolutions[ModeNumber].Width; *SizeOfInfo = sizeof *GopModeInfo; - *Info = GopModeInfo; + *Info = GopModeInfo; return EFI_SUCCESS; } @@ -226,20 +230,20 @@ STATIC EFI_STATUS EFIAPI GopSetMode ( - IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, - IN UINT32 ModeNumber + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, + IN UINT32 ModeNumber ) { - VGPU_GOP *VgpuGop; - UINT32 NewResourceId; - UINTN NewNumberOfBytes; - UINTN NewNumberOfPages; - VOID *NewBackingStore; - EFI_PHYSICAL_ADDRESS NewBackingStoreDeviceAddress; - VOID *NewBackingStoreMap; + VGPU_GOP *VgpuGop; + UINT32 NewResourceId; + UINTN NewNumberOfBytes; + UINTN NewNumberOfPages; + VOID *NewBackingStore; + EFI_PHYSICAL_ADDRESS NewBackingStoreDeviceAddress; + VOID *NewBackingStoreMap; - EFI_STATUS Status; - EFI_STATUS Status2; + EFI_STATUS Status; + EFI_STATUS Status2; if (ModeNumber >= ARRAY_SIZE (mGopResolutions)) { return EFI_UNSUPPORTED; @@ -260,9 +264,9 @@ GopSetMode ( // VgpuGop->Gop.Mode = &VgpuGop->GopMode; - VgpuGop->GopMode.MaxMode = (UINT32)(ARRAY_SIZE (mGopResolutions)); - VgpuGop->GopMode.Info = &VgpuGop->GopModeInfo; - VgpuGop->GopMode.SizeOfInfo = sizeof VgpuGop->GopModeInfo; + VgpuGop->GopMode.MaxMode = (UINT32)(ARRAY_SIZE (mGopResolutions)); + VgpuGop->GopMode.Info = &VgpuGop->GopModeInfo; + VgpuGop->GopMode.SizeOfInfo = sizeof VgpuGop->GopModeInfo; VgpuGop->GopModeInfo.PixelFormat = PixelBltOnly; @@ -302,13 +306,13 @@ GopSetMode ( NewNumberOfBytes = mGopResolutions[ModeNumber].Width * mGopResolutions[ModeNumber].Height * sizeof (UINT32); NewNumberOfPages = EFI_SIZE_TO_PAGES (NewNumberOfBytes); - Status = VirtioGpuAllocateZeroAndMapBackingStore ( - VgpuGop->ParentBus, // VgpuDev - NewNumberOfPages, // NumberOfPages - &NewBackingStore, // HostAddress - &NewBackingStoreDeviceAddress, // DeviceAddress - &NewBackingStoreMap // Mapping - ); + Status = VirtioGpuAllocateZeroAndMapBackingStore ( + VgpuGop->ParentBus, // VgpuDev + NewNumberOfPages, // NumberOfPages + &NewBackingStore, // HostAddress + &NewBackingStoreDeviceAddress, // DeviceAddress + &NewBackingStoreMap // Mapping + ); if (EFI_ERROR (Status)) { goto DestroyHostResource; } @@ -375,6 +379,7 @@ GopSetMode ( if (EFI_ERROR (Status2)) { CpuDeadLoop (); } + goto DetachBackingStore; } @@ -393,19 +398,19 @@ GopSetMode ( ASSERT (VgpuGop->ResourceId == 0); ASSERT (VgpuGop->BackingStore == NULL); - VgpuGop->ResourceId = NewResourceId; - VgpuGop->BackingStore = NewBackingStore; - VgpuGop->NumberOfPages = NewNumberOfPages; + VgpuGop->ResourceId = NewResourceId; + VgpuGop->BackingStore = NewBackingStore; + VgpuGop->NumberOfPages = NewNumberOfPages; VgpuGop->BackingStoreMap = NewBackingStoreMap; // // Populate Mode and ModeInfo (mutable fields only). // - VgpuGop->GopMode.Mode = ModeNumber; + VgpuGop->GopMode.Mode = ModeNumber; VgpuGop->GopModeInfo.HorizontalResolution = - mGopResolutions[ModeNumber].Width; + mGopResolutions[ModeNumber].Width; VgpuGop->GopModeInfo.VerticalResolution = mGopResolutions[ModeNumber].Height; - VgpuGop->GopModeInfo.PixelsPerScanLine = mGopResolutions[ModeNumber].Width; + VgpuGop->GopModeInfo.PixelsPerScanLine = mGopResolutions[ModeNumber].Width; return EFI_SUCCESS; DetachBackingStore: @@ -437,27 +442,27 @@ STATIC EFI_STATUS EFIAPI GopBlt ( - IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, - IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL, - IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, - IN UINTN SourceX, - IN UINTN SourceY, - IN UINTN DestinationX, - IN UINTN DestinationY, - IN UINTN Width, - IN UINTN Height, - IN UINTN Delta OPTIONAL + IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, + IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL, + IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, + IN UINTN SourceX, + IN UINTN SourceY, + IN UINTN DestinationX, + IN UINTN DestinationY, + IN UINTN Width, + IN UINTN Height, + IN UINTN Delta OPTIONAL ) { - VGPU_GOP *VgpuGop; - UINT32 CurrentHorizontal; - UINT32 CurrentVertical; - UINTN SegmentSize; - UINTN Y; - UINTN ResourceOffset; - EFI_STATUS Status; - - VgpuGop = VGPU_GOP_FROM_GOP (This); + VGPU_GOP *VgpuGop; + UINT32 CurrentHorizontal; + UINT32 CurrentVertical; + UINTN SegmentSize; + UINTN Y; + UINTN ResourceOffset; + EFI_STATUS Status; + + VgpuGop = VGPU_GOP_FROM_GOP (This); CurrentHorizontal = VgpuGop->GopModeInfo.HorizontalResolution; CurrentVertical = VgpuGop->GopModeInfo.VerticalResolution; @@ -476,8 +481,9 @@ GopBlt ( // zero, then Width is the entire width of BltBuffer, and the stride is // supposed to be calculated from Width. // - if (BltOperation == EfiBltVideoToBltBuffer || - BltOperation == EfiBltBufferToVideo) { + if ((BltOperation == EfiBltVideoToBltBuffer) || + (BltOperation == EfiBltBufferToVideo)) + { if (Delta == 0) { Delta = SegmentSize; } @@ -487,13 +493,15 @@ GopBlt ( // For operations that write to the display, check if the destination fits // onto the display. // - if (BltOperation == EfiBltVideoFill || - BltOperation == EfiBltBufferToVideo || - BltOperation == EfiBltVideoToVideo) { - if (DestinationX > CurrentHorizontal || - Width > CurrentHorizontal - DestinationX || - DestinationY > CurrentVertical || - Height > CurrentVertical - DestinationY) { + if ((BltOperation == EfiBltVideoFill) || + (BltOperation == EfiBltBufferToVideo) || + (BltOperation == EfiBltVideoToVideo)) + { + if ((DestinationX > CurrentHorizontal) || + (Width > CurrentHorizontal - DestinationX) || + (DestinationY > CurrentVertical) || + (Height > CurrentVertical - DestinationY)) + { return EFI_INVALID_PARAMETER; } } @@ -502,12 +510,14 @@ GopBlt ( // For operations that read from the display, check if the source fits onto // the display. // - if (BltOperation == EfiBltVideoToBltBuffer || - BltOperation == EfiBltVideoToVideo) { - if (SourceX > CurrentHorizontal || - Width > CurrentHorizontal - SourceX || - SourceY > CurrentVertical || - Height > CurrentVertical - SourceY) { + if ((BltOperation == EfiBltVideoToBltBuffer) || + (BltOperation == EfiBltVideoToVideo)) + { + if ((SourceX > CurrentHorizontal) || + (Width > CurrentHorizontal - SourceX) || + (SourceY > CurrentVertical) || + (Height > CurrentVertical - SourceY)) + { return EFI_INVALID_PARAMETER; } } @@ -517,99 +527,103 @@ GopBlt ( // won't be further steps. // switch (BltOperation) { - case EfiBltVideoFill: - // - // Write data from the BltBuffer pixel (0, 0) directly to every pixel of - // the video display rectangle (DestinationX, DestinationY) (DestinationX + - // Width, DestinationY + Height). Only one pixel will be used from the - // BltBuffer. Delta is NOT used. - // - for (Y = 0; Y < Height; ++Y) { - SetMem32 ( - VgpuGop->BackingStore + + case EfiBltVideoFill: + // + // Write data from the BltBuffer pixel (0, 0) directly to every pixel of + // the video display rectangle (DestinationX, DestinationY) (DestinationX + + // Width, DestinationY + Height). Only one pixel will be used from the + // BltBuffer. Delta is NOT used. + // + for (Y = 0; Y < Height; ++Y) { + SetMem32 ( + VgpuGop->BackingStore + (DestinationY + Y) * CurrentHorizontal + DestinationX, - SegmentSize, - *(UINT32 *)BltBuffer - ); - } - break; - - case EfiBltVideoToBltBuffer: - // - // Read data from the video display rectangle (SourceX, SourceY) (SourceX + - // Width, SourceY + Height) and place it in the BltBuffer rectangle - // (DestinationX, DestinationY ) (DestinationX + Width, DestinationY + - // Height). If DestinationX or DestinationY is not zero then Delta must be - // set to the length in bytes of a row in the BltBuffer. - // - for (Y = 0; Y < Height; ++Y) { - CopyMem ( - (UINT8 *)BltBuffer + - (DestinationY + Y) * Delta + DestinationX * sizeof *BltBuffer, - VgpuGop->BackingStore + - (SourceY + Y) * CurrentHorizontal + SourceX, - SegmentSize - ); - } - return EFI_SUCCESS; + SegmentSize, + *(UINT32 *)BltBuffer + ); + } - case EfiBltBufferToVideo: - // - // Write data from the BltBuffer rectangle (SourceX, SourceY) (SourceX + - // Width, SourceY + Height) directly to the video display rectangle - // (DestinationX, DestinationY) (DestinationX + Width, DestinationY + - // Height). If SourceX or SourceY is not zero then Delta must be set to the - // length in bytes of a row in the BltBuffer. - // - for (Y = 0; Y < Height; ++Y) { - CopyMem ( - VgpuGop->BackingStore + - (DestinationY + Y) * CurrentHorizontal + DestinationX, - (UINT8 *)BltBuffer + - (SourceY + Y) * Delta + SourceX * sizeof *BltBuffer, - SegmentSize - ); - } - break; + break; - case EfiBltVideoToVideo: - // - // Copy from the video display rectangle (SourceX, SourceY) (SourceX + - // Width, SourceY + Height) to the video display rectangle (DestinationX, - // DestinationY) (DestinationX + Width, DestinationY + Height). The - // BltBuffer and Delta are not used in this mode. - // - // A single invocation of CopyMem() handles overlap between source and - // destination (that is, within a single line), but for multiple - // invocations, we must handle overlaps. - // - if (SourceY < DestinationY) { - Y = Height; - while (Y > 0) { - --Y; + case EfiBltVideoToBltBuffer: + // + // Read data from the video display rectangle (SourceX, SourceY) (SourceX + + // Width, SourceY + Height) and place it in the BltBuffer rectangle + // (DestinationX, DestinationY ) (DestinationX + Width, DestinationY + + // Height). If DestinationX or DestinationY is not zero then Delta must be + // set to the length in bytes of a row in the BltBuffer. + // + for (Y = 0; Y < Height; ++Y) { CopyMem ( + (UINT8 *)BltBuffer + + (DestinationY + Y) * Delta + DestinationX * sizeof *BltBuffer, VgpuGop->BackingStore + - (DestinationY + Y) * CurrentHorizontal + DestinationX, - VgpuGop->BackingStore + - (SourceY + Y) * CurrentHorizontal + SourceX, + (SourceY + Y) * CurrentHorizontal + SourceX, SegmentSize ); } - } else { + + return EFI_SUCCESS; + + case EfiBltBufferToVideo: + // + // Write data from the BltBuffer rectangle (SourceX, SourceY) (SourceX + + // Width, SourceY + Height) directly to the video display rectangle + // (DestinationX, DestinationY) (DestinationX + Width, DestinationY + + // Height). If SourceX or SourceY is not zero then Delta must be set to the + // length in bytes of a row in the BltBuffer. + // for (Y = 0; Y < Height; ++Y) { CopyMem ( VgpuGop->BackingStore + - (DestinationY + Y) * CurrentHorizontal + DestinationX, - VgpuGop->BackingStore + - (SourceY + Y) * CurrentHorizontal + SourceX, + (DestinationY + Y) * CurrentHorizontal + DestinationX, + (UINT8 *)BltBuffer + + (SourceY + Y) * Delta + SourceX * sizeof *BltBuffer, SegmentSize ); } - } - break; - default: - return EFI_INVALID_PARAMETER; + break; + + case EfiBltVideoToVideo: + // + // Copy from the video display rectangle (SourceX, SourceY) (SourceX + + // Width, SourceY + Height) to the video display rectangle (DestinationX, + // DestinationY) (DestinationX + Width, DestinationY + Height). The + // BltBuffer and Delta are not used in this mode. + // + // A single invocation of CopyMem() handles overlap between source and + // destination (that is, within a single line), but for multiple + // invocations, we must handle overlaps. + // + if (SourceY < DestinationY) { + Y = Height; + while (Y > 0) { + --Y; + CopyMem ( + VgpuGop->BackingStore + + (DestinationY + Y) * CurrentHorizontal + DestinationX, + VgpuGop->BackingStore + + (SourceY + Y) * CurrentHorizontal + SourceX, + SegmentSize + ); + } + } else { + for (Y = 0; Y < Height; ++Y) { + CopyMem ( + VgpuGop->BackingStore + + (DestinationY + Y) * CurrentHorizontal + DestinationX, + VgpuGop->BackingStore + + (SourceY + Y) * CurrentHorizontal + SourceX, + SegmentSize + ); + } + } + + break; + + default: + return EFI_INVALID_PARAMETER; } // @@ -648,7 +662,7 @@ GopBlt ( // // Template for initializing VGPU_GOP.Gop. // -CONST EFI_GRAPHICS_OUTPUT_PROTOCOL mGopTemplate = { +CONST EFI_GRAPHICS_OUTPUT_PROTOCOL mGopTemplate = { GopQueryMode, GopSetMode, GopBlt, diff --git a/OvmfPkg/VirtioGpuDxe/VirtioGpu.h b/OvmfPkg/VirtioGpuDxe/VirtioGpu.h index 236cc47892..2155b261d4 100644 --- a/OvmfPkg/VirtioGpuDxe/VirtioGpu.h +++ b/OvmfPkg/VirtioGpuDxe/VirtioGpu.h @@ -36,35 +36,35 @@ typedef struct { // // VirtIo represents access to the Virtio GPU device. Never NULL. // - VIRTIO_DEVICE_PROTOCOL *VirtIo; + VIRTIO_DEVICE_PROTOCOL *VirtIo; // // BusName carries a customized name for // EFI_COMPONENT_NAME2_PROTOCOL.GetControllerName(). It is expressed in table // form because it can theoretically support several languages. Never NULL. // - EFI_UNICODE_STRING_TABLE *BusName; + EFI_UNICODE_STRING_TABLE *BusName; // // VirtIo ring used for VirtIo communication. // - VRING Ring; + VRING Ring; // // Token associated with Ring's mapping for bus master common buffer // operation, from VirtioRingMap(). // - VOID *RingMap; + VOID *RingMap; // // Event to be signaled at ExitBootServices(). // - EFI_EVENT ExitBoot; + EFI_EVENT ExitBoot; // // Common running counter for all VirtIo GPU requests that ask for fencing. // - UINT64 FenceId; + UINT64 FenceId; // // The Child field references the GOP wrapper structure. If this pointer is @@ -77,85 +77,86 @@ typedef struct { // In practice, this field represents the single head (scanout) that we // support. // - VGPU_GOP *Child; + VGPU_GOP *Child; } VGPU_DEV; // // The Graphics Output Protocol wrapper structure. // -#define VGPU_GOP_SIG SIGNATURE_64 ('V', 'G', 'P', 'U', '_', 'G', 'O', 'P') +#define VGPU_GOP_SIG SIGNATURE_64 ('V', 'G', 'P', 'U', '_', 'G', 'O', 'P') struct VGPU_GOP_STRUCT { - UINT64 Signature; + UINT64 Signature; // // ParentBus points to the parent VGPU_DEV object. Never NULL. // - VGPU_DEV *ParentBus; + VGPU_DEV *ParentBus; // // GopName carries a customized name for // EFI_COMPONENT_NAME2_PROTOCOL.GetControllerName(). It is expressed in table // form because it can theoretically support several languages. Never NULL. // - EFI_UNICODE_STRING_TABLE *GopName; + EFI_UNICODE_STRING_TABLE *GopName; // // GopHandle is the UEFI child handle that carries the device path ending // with the ACPI ADR node, and the Graphics Output Protocol. Never NULL. // - EFI_HANDLE GopHandle; + EFI_HANDLE GopHandle; // // The GopDevicePath field is the device path installed on GopHandle, // ending with an ACPI ADR node. Never NULL. // - EFI_DEVICE_PATH_PROTOCOL *GopDevicePath; + EFI_DEVICE_PATH_PROTOCOL *GopDevicePath; // // The Gop field is installed on the child handle as Graphics Output Protocol // interface. // - EFI_GRAPHICS_OUTPUT_PROTOCOL Gop; + EFI_GRAPHICS_OUTPUT_PROTOCOL Gop; // // Referenced by Gop.Mode, GopMode provides a summary about the supported // graphics modes, and the current mode. // - EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE GopMode; + EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE GopMode; // // Referenced by GopMode.Info, GopModeInfo provides detailed information // about the current mode. // - EFI_GRAPHICS_OUTPUT_MODE_INFORMATION GopModeInfo; + EFI_GRAPHICS_OUTPUT_MODE_INFORMATION GopModeInfo; // // Identifier of the 2D host resource that is in use by this head (scanout) // of the VirtIo GPU device. Zero until the first successful -- internal -- // Gop.SetMode() call, never zero afterwards. // - UINT32 ResourceId; + UINT32 ResourceId; // // A number of whole pages providing the backing store for the 2D host // resource identified by ResourceId above. NULL until the first successful // -- internal -- Gop.SetMode() call, never NULL afterwards. // - UINT32 *BackingStore; - UINTN NumberOfPages; + UINT32 *BackingStore; + UINTN NumberOfPages; // // Token associated with BackingStore's mapping for bus master common // buffer operation. BackingStoreMap is valid if, and only if, // BackingStore is non-NULL. // - VOID *BackingStoreMap; + VOID *BackingStoreMap; }; // // VirtIo GPU initialization, and commands (primitives) for the GPU device. // + /** Configure the VirtIo GPU device that underlies VgpuDev. @@ -174,7 +175,7 @@ struct VGPU_GOP_STRUCT { **/ EFI_STATUS VirtioGpuInit ( - IN OUT VGPU_DEV *VgpuDev + IN OUT VGPU_DEV *VgpuDev ); /** @@ -188,7 +189,7 @@ VirtioGpuInit ( **/ VOID VirtioGpuUninit ( - IN OUT VGPU_DEV *VgpuDev + IN OUT VGPU_DEV *VgpuDev ); /** @@ -221,11 +222,11 @@ VirtioGpuUninit ( **/ EFI_STATUS VirtioGpuAllocateZeroAndMapBackingStore ( - IN VGPU_DEV *VgpuDev, - IN UINTN NumberOfPages, - OUT VOID **HostAddress, - OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, - OUT VOID **Mapping + IN VGPU_DEV *VgpuDev, + IN UINTN NumberOfPages, + OUT VOID **HostAddress, + OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, + OUT VOID **Mapping ); /** @@ -252,10 +253,10 @@ VirtioGpuAllocateZeroAndMapBackingStore ( **/ VOID VirtioGpuUnmapAndFreeBackingStore ( - IN VGPU_DEV *VgpuDev, - IN UINTN NumberOfPages, - IN VOID *HostAddress, - IN VOID *Mapping + IN VGPU_DEV *VgpuDev, + IN UINTN NumberOfPages, + IN VOID *HostAddress, + IN VOID *Mapping ); /** @@ -274,8 +275,8 @@ VirtioGpuUnmapAndFreeBackingStore ( VOID EFIAPI VirtioGpuExitBoot ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ); /** @@ -306,63 +307,63 @@ VirtioGpuExitBoot ( **/ EFI_STATUS VirtioGpuResourceCreate2d ( - IN OUT VGPU_DEV *VgpuDev, - IN UINT32 ResourceId, - IN VIRTIO_GPU_FORMATS Format, - IN UINT32 Width, - IN UINT32 Height + IN OUT VGPU_DEV *VgpuDev, + IN UINT32 ResourceId, + IN VIRTIO_GPU_FORMATS Format, + IN UINT32 Width, + IN UINT32 Height ); EFI_STATUS VirtioGpuResourceUnref ( - IN OUT VGPU_DEV *VgpuDev, - IN UINT32 ResourceId + IN OUT VGPU_DEV *VgpuDev, + IN UINT32 ResourceId ); EFI_STATUS VirtioGpuResourceAttachBacking ( - IN OUT VGPU_DEV *VgpuDev, - IN UINT32 ResourceId, - IN EFI_PHYSICAL_ADDRESS BackingStoreDeviceAddress, - IN UINTN NumberOfPages + IN OUT VGPU_DEV *VgpuDev, + IN UINT32 ResourceId, + IN EFI_PHYSICAL_ADDRESS BackingStoreDeviceAddress, + IN UINTN NumberOfPages ); EFI_STATUS VirtioGpuResourceDetachBacking ( - IN OUT VGPU_DEV *VgpuDev, - IN UINT32 ResourceId + IN OUT VGPU_DEV *VgpuDev, + IN UINT32 ResourceId ); EFI_STATUS VirtioGpuSetScanout ( - IN OUT VGPU_DEV *VgpuDev, - IN UINT32 X, - IN UINT32 Y, - IN UINT32 Width, - IN UINT32 Height, - IN UINT32 ScanoutId, - IN UINT32 ResourceId + IN OUT VGPU_DEV *VgpuDev, + IN UINT32 X, + IN UINT32 Y, + IN UINT32 Width, + IN UINT32 Height, + IN UINT32 ScanoutId, + IN UINT32 ResourceId ); EFI_STATUS VirtioGpuTransferToHost2d ( - IN OUT VGPU_DEV *VgpuDev, - IN UINT32 X, - IN UINT32 Y, - IN UINT32 Width, - IN UINT32 Height, - IN UINT64 Offset, - IN UINT32 ResourceId + IN OUT VGPU_DEV *VgpuDev, + IN UINT32 X, + IN UINT32 Y, + IN UINT32 Width, + IN UINT32 Height, + IN UINT64 Offset, + IN UINT32 ResourceId ); EFI_STATUS VirtioGpuResourceFlush ( - IN OUT VGPU_DEV *VgpuDev, - IN UINT32 X, - IN UINT32 Y, - IN UINT32 Width, - IN UINT32 Height, - IN UINT32 ResourceId + IN OUT VGPU_DEV *VgpuDev, + IN UINT32 X, + IN UINT32 Y, + IN UINT32 Width, + IN UINT32 Height, + IN UINT32 ResourceId ); /** @@ -390,13 +391,13 @@ VirtioGpuResourceFlush ( **/ VOID ReleaseGopResources ( - IN OUT VGPU_GOP *VgpuGop, - IN BOOLEAN DisableHead + IN OUT VGPU_GOP *VgpuGop, + IN BOOLEAN DisableHead ); // // Template for initializing VGPU_GOP.Gop. // -extern CONST EFI_GRAPHICS_OUTPUT_PROTOCOL mGopTemplate; +extern CONST EFI_GRAPHICS_OUTPUT_PROTOCOL mGopTemplate; #endif // _VIRTIO_GPU_DXE_H_ diff --git a/OvmfPkg/VirtioNetDxe/ComponentName.c b/OvmfPkg/VirtioNetDxe/ComponentName.c index 483d4f7038..e340ca2f8f 100644 --- a/OvmfPkg/VirtioNetDxe/ComponentName.c +++ b/OvmfPkg/VirtioNetDxe/ComponentName.c @@ -14,13 +14,13 @@ #include "VirtioNet.h" STATIC -EFI_UNICODE_STRING_TABLE mVirtioNetDriverNameTable[] = { +EFI_UNICODE_STRING_TABLE mVirtioNetDriverNameTable[] = { { "eng;en", L"Virtio Network Driver" }, { NULL, NULL } }; STATIC -EFI_UNICODE_STRING_TABLE mVirtioNetControllerNameTable[] = { +EFI_UNICODE_STRING_TABLE mVirtioNetControllerNameTable[] = { { "eng;en", L"Virtio Network Device" }, { NULL, NULL } }; @@ -48,14 +48,13 @@ EFI_UNICODE_STRING_TABLE mVirtioNetControllerNameTable[] = { the language specified by Language. **/ - STATIC EFI_STATUS EFIAPI VirtioNetGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) { return (Language == NULL || DriverName == NULL) ? @@ -65,11 +64,10 @@ VirtioNetGetDriverName ( This->SupportedLanguages, mVirtioNetDriverNameTable, DriverName, - (BOOLEAN) (This == &gVirtioNetComponentName) // Iso639Language + (BOOLEAN)(This == &gVirtioNetComponentName) // Iso639Language ); } - /** Retrieves a Unicode string that is the user readable name of the controller that is being managed by an EFI Driver. @@ -114,21 +112,20 @@ VirtioNetGetDriverName ( the language specified by Language. **/ - STATIC EFI_STATUS EFIAPI VirtioNetGetControllerName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE ChildHandle, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { - EFI_STATUS Status; + EFI_STATUS Status; - if (ControllerHandle == NULL || Language == NULL || ControllerName == NULL) { + if ((ControllerHandle == NULL) || (Language == NULL) || (ControllerName == NULL)) { return EFI_INVALID_PARAMETER; } @@ -154,18 +151,18 @@ VirtioNetGetControllerName ( This->SupportedLanguages, mVirtioNetControllerNameTable, ControllerName, - (BOOLEAN) (This == &gVirtioNetComponentName) // Iso639Language + (BOOLEAN)(This == &gVirtioNetComponentName) // Iso639Language ); } -EFI_COMPONENT_NAME_PROTOCOL gVirtioNetComponentName = { +EFI_COMPONENT_NAME_PROTOCOL gVirtioNetComponentName = { &VirtioNetGetDriverName, &VirtioNetGetControllerName, "eng" // SupportedLanguages, ISO 639-2 language codes }; -EFI_COMPONENT_NAME2_PROTOCOL gVirtioNetComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &VirtioNetGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &VirtioNetGetControllerName, +EFI_COMPONENT_NAME2_PROTOCOL gVirtioNetComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&VirtioNetGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&VirtioNetGetControllerName, "en" // SupportedLanguages, RFC 4646 language codes }; diff --git a/OvmfPkg/VirtioNetDxe/DriverBinding.c b/OvmfPkg/VirtioNetDxe/DriverBinding.c index 3c400a6046..ac9ac2d7fb 100644 --- a/OvmfPkg/VirtioNetDxe/DriverBinding.c +++ b/OvmfPkg/VirtioNetDxe/DriverBinding.c @@ -16,7 +16,7 @@ #include "VirtioNet.h" -#define RECEIVE_FILTERS_NO_MCAST ((UINT32) ( \ +#define RECEIVE_FILTERS_NO_MCAST ((UINT32) ( \ EFI_SIMPLE_NETWORK_RECEIVE_UNICAST | \ EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST | \ EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS \ @@ -50,36 +50,36 @@ STATIC EFI_STATUS EFIAPI VirtioNetGetFeatures ( - IN OUT VNET_DEV *Dev, - OUT EFI_MAC_ADDRESS *MacAddress, - OUT BOOLEAN *MediaPresentSupported, - OUT BOOLEAN *MediaPresent + IN OUT VNET_DEV *Dev, + OUT EFI_MAC_ADDRESS *MacAddress, + OUT BOOLEAN *MediaPresentSupported, + OUT BOOLEAN *MediaPresent ) { - EFI_STATUS Status; - UINT8 NextDevStat; - UINT64 Features; - UINTN MacIdx; - UINT16 LinkStatus; + EFI_STATUS Status; + UINT8 NextDevStat; + UINT64 Features; + UINTN MacIdx; + UINT16 LinkStatus; // // Interrogate the device for features (virtio-0.9.5, 2.2.1 Device // Initialization Sequence), but don't complete setting it up. // NextDevStat = 0; // step 1 -- reset device - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { return Status; } NextDevStat |= VSTAT_ACK; // step 2 -- acknowledge device presence - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto YieldDevice; } NextDevStat |= VSTAT_DRIVER; // step 3 -- we know how to drive it - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto YieldDevice; } @@ -99,8 +99,10 @@ VirtioNetGetFeatures ( Status = EFI_UNSUPPORTED; goto YieldDevice; } + for (MacIdx = 0; MacIdx < SIZE_OF_VNET (Mac); ++MacIdx) { - Status = Dev->VirtIo->ReadDevice (Dev->VirtIo, + Status = Dev->VirtIo->ReadDevice ( + Dev->VirtIo, OFFSET_OF_VNET (Mac) + MacIdx, // Offset 1, // FieldSize 1, // BufferSize @@ -116,24 +118,25 @@ VirtioNetGetFeatures ( // if ((Features & VIRTIO_NET_F_STATUS) == 0) { *MediaPresentSupported = FALSE; - } - else { + } else { *MediaPresentSupported = TRUE; - Status = VIRTIO_CFG_READ (Dev, LinkStatus, &LinkStatus); + Status = VIRTIO_CFG_READ (Dev, LinkStatus, &LinkStatus); if (EFI_ERROR (Status)) { goto YieldDevice; } - *MediaPresent = (BOOLEAN) ((LinkStatus & VIRTIO_NET_S_LINK_UP) != 0); + + *MediaPresent = (BOOLEAN)((LinkStatus & VIRTIO_NET_S_LINK_UP) != 0); } YieldDevice: - Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, - EFI_ERROR (Status) ? VSTAT_FAILED : 0); + Dev->VirtIo->SetDeviceStatus ( + Dev->VirtIo, + EFI_ERROR (Status) ? VSTAT_FAILED : 0 + ); return Status; } - /** Set up the Simple Network Protocol fields, the Simple Network Mode fields, and the Exit Boot Services Event of the virtio-net driver instance. @@ -151,10 +154,10 @@ STATIC EFI_STATUS EFIAPI VirtioNetSnpPopulate ( - IN OUT VNET_DEV *Dev + IN OUT VNET_DEV *Dev ) { - EFI_STATUS Status; + EFI_STATUS Status; // // We set up a function here that is asynchronously callable by an @@ -177,8 +180,13 @@ VirtioNetSnpPopulate ( // I/O)". Because none of our functions block, we'd satisfy an even stronger // requirement. // - Status = gBS->CreateEvent (EVT_NOTIFY_WAIT, TPL_CALLBACK, - &VirtioNetIsPacketAvailable, Dev, &Dev->Snp.WaitForPacket); + Status = gBS->CreateEvent ( + EVT_NOTIFY_WAIT, + TPL_CALLBACK, + &VirtioNetIsPacketAvailable, + Dev, + &Dev->Snp.WaitForPacket + ); if (EFI_ERROR (Status)) { return Status; } @@ -199,31 +207,39 @@ VirtioNetSnpPopulate ( Dev->Snp.Receive = &VirtioNetReceive; Dev->Snp.Mode = &Dev->Snm; - Dev->Snm.State = EfiSimpleNetworkStopped; - Dev->Snm.HwAddressSize = SIZE_OF_VNET (Mac); - Dev->Snm.MediaHeaderSize = SIZE_OF_VNET (Mac) + // dst MAC - SIZE_OF_VNET (Mac) + // src MAC - 2; // Ethertype - Dev->Snm.MaxPacketSize = 1500; - Dev->Snm.NvRamSize = 0; - Dev->Snm.NvRamAccessSize = 0; - Dev->Snm.ReceiveFilterMask = RECEIVE_FILTERS_NO_MCAST; - Dev->Snm.ReceiveFilterSetting = RECEIVE_FILTERS_NO_MCAST; - Dev->Snm.MaxMCastFilterCount = 0; - Dev->Snm.MCastFilterCount = 0; - Dev->Snm.IfType = 1; // ethernet - Dev->Snm.MacAddressChangeable = FALSE; - Dev->Snm.MultipleTxSupported = TRUE; + Dev->Snm.State = EfiSimpleNetworkStopped; + Dev->Snm.HwAddressSize = SIZE_OF_VNET (Mac); + Dev->Snm.MediaHeaderSize = SIZE_OF_VNET (Mac) + // dst MAC + SIZE_OF_VNET (Mac) + // src MAC + 2; // Ethertype + Dev->Snm.MaxPacketSize = 1500; + Dev->Snm.NvRamSize = 0; + Dev->Snm.NvRamAccessSize = 0; + Dev->Snm.ReceiveFilterMask = RECEIVE_FILTERS_NO_MCAST; + Dev->Snm.ReceiveFilterSetting = RECEIVE_FILTERS_NO_MCAST; + Dev->Snm.MaxMCastFilterCount = 0; + Dev->Snm.MCastFilterCount = 0; + Dev->Snm.IfType = 1; // ethernet + Dev->Snm.MacAddressChangeable = FALSE; + Dev->Snm.MultipleTxSupported = TRUE; ASSERT (SIZE_OF_VNET (Mac) <= sizeof (EFI_MAC_ADDRESS)); - Status = VirtioNetGetFeatures (Dev, &Dev->Snm.CurrentAddress, - &Dev->Snm.MediaPresentSupported, &Dev->Snm.MediaPresent); + Status = VirtioNetGetFeatures ( + Dev, + &Dev->Snm.CurrentAddress, + &Dev->Snm.MediaPresentSupported, + &Dev->Snm.MediaPresent + ); if (EFI_ERROR (Status)) { goto CloseWaitForPacket; } - CopyMem (&Dev->Snm.PermanentAddress, &Dev->Snm.CurrentAddress, - SIZE_OF_VNET (Mac)); + + CopyMem ( + &Dev->Snm.PermanentAddress, + &Dev->Snm.CurrentAddress, + SIZE_OF_VNET (Mac) + ); SetMem (&Dev->Snm.BroadcastAddress, SIZE_OF_VNET (Mac), 0xFF); // @@ -235,8 +251,13 @@ VirtioNetSnpPopulate ( // could be entered immediately. VirtioNetExitBoot() checks Dev->Snm.State, // so we're safe. // - Status = gBS->CreateEvent (EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_CALLBACK, - &VirtioNetExitBoot, Dev, &Dev->ExitBoot); + Status = gBS->CreateEvent ( + EVT_SIGNAL_EXIT_BOOT_SERVICES, + TPL_CALLBACK, + &VirtioNetExitBoot, + Dev, + &Dev->ExitBoot + ); if (EFI_ERROR (Status)) { goto CloseWaitForPacket; } @@ -248,7 +269,6 @@ CloseWaitForPacket: return Status; } - /** Release any resources allocated by VirtioNetSnpPopulate(). @@ -263,7 +283,7 @@ STATIC VOID EFIAPI VirtioNetSnpEvacuate ( - IN OUT VNET_DEV *Dev + IN OUT VNET_DEV *Dev ) { // @@ -276,7 +296,6 @@ VirtioNetSnpEvacuate ( gBS->CloseEvent (Dev->Snp.WaitForPacket); } - /** Tests to see if this driver supports a given controller. If a child device is provided, it further tests to see if this driver supports creating a handle @@ -330,18 +349,17 @@ VirtioNetSnpEvacuate ( RemainingDevicePath is not supported by the driver specified by This. **/ - STATIC EFI_STATUS EFIAPI VirtioNetDriverBindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - VIRTIO_DEVICE_PROTOCOL *VirtIo; + EFI_STATUS Status; + VIRTIO_DEVICE_PROTOCOL *VirtIo; // // Attempt to open the device with the VirtIo set of interfaces. On success, @@ -370,12 +388,15 @@ VirtioNetDriverBindingSupported ( // We needed VirtIo access only transitorily, to see whether we support the // device or not. // - gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); return Status; } - /** Starts a device controller or a bus controller. @@ -422,34 +443,39 @@ VirtioNetDriverBindingSupported ( @retval Others The driver failed to start the device. **/ - STATIC EFI_STATUS EFIAPI VirtioNetDriverBindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - VNET_DEV *Dev; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - MAC_ADDR_DEVICE_PATH MacNode; - VOID *ChildVirtIo; + EFI_STATUS Status; + VNET_DEV *Dev; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + MAC_ADDR_DEVICE_PATH MacNode; + VOID *ChildVirtIo; // // allocate space for the driver instance // - Dev = (VNET_DEV *) AllocateZeroPool (sizeof *Dev); + Dev = (VNET_DEV *)AllocateZeroPool (sizeof *Dev); if (Dev == NULL) { return EFI_OUT_OF_RESOURCES; } + Dev->Signature = VNET_SIG; - Status = gBS->OpenProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - (VOID **)&Dev->VirtIo, This->DriverBindingHandle, - DeviceHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); + Status = gBS->OpenProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + (VOID **)&Dev->VirtIo, + This->DriverBindingHandle, + DeviceHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { goto FreeVirtioNet; } @@ -466,9 +492,14 @@ VirtioNetDriverBindingStart ( // // get the device path of the virtio-net device -- one-shot open // - Status = gBS->OpenProtocol (DeviceHandle, &gEfiDevicePathProtocolGuid, - (VOID **)&DevicePath, This->DriverBindingHandle, - DeviceHandle, EFI_OPEN_PROTOCOL_GET_PROTOCOL); + Status = gBS->OpenProtocol ( + DeviceHandle, + &gEfiDevicePathProtocolGuid, + (VOID **)&DevicePath, + This->DriverBindingHandle, + DeviceHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); if (EFI_ERROR (Status)) { goto Evacuate; } @@ -479,9 +510,12 @@ VirtioNetDriverBindingStart ( MacNode.Header.Type = MESSAGING_DEVICE_PATH; MacNode.Header.SubType = MSG_MAC_ADDR_DP; SetDevicePathNodeLength (&MacNode, sizeof MacNode); - CopyMem (&MacNode.MacAddress, &Dev->Snm.CurrentAddress, - sizeof (EFI_MAC_ADDRESS)); - MacNode.IfType = Dev->Snm.IfType; + CopyMem ( + &MacNode.MacAddress, + &Dev->Snm.CurrentAddress, + sizeof (EFI_MAC_ADDRESS) + ); + MacNode.IfType = Dev->Snm.IfType; Dev->MacDevicePath = AppendDevicePathNode (DevicePath, &MacNode.Header); if (Dev->MacDevicePath == NULL) { @@ -493,10 +527,14 @@ VirtioNetDriverBindingStart ( // create a child handle with the Simple Network Protocol and the new // device path installed on it // - Status = gBS->InstallMultipleProtocolInterfaces (&Dev->MacHandle, - &gEfiSimpleNetworkProtocolGuid, &Dev->Snp, - &gEfiDevicePathProtocolGuid, Dev->MacDevicePath, - NULL); + Status = gBS->InstallMultipleProtocolInterfaces ( + &Dev->MacHandle, + &gEfiSimpleNetworkProtocolGuid, + &Dev->Snp, + &gEfiDevicePathProtocolGuid, + Dev->MacDevicePath, + NULL + ); if (EFI_ERROR (Status)) { goto FreeMacDevicePath; } @@ -505,9 +543,14 @@ VirtioNetDriverBindingStart ( // make a note that we keep this device open with VirtIo for the sake of this // child // - Status = gBS->OpenProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - &ChildVirtIo, This->DriverBindingHandle, - Dev->MacHandle, EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER); + Status = gBS->OpenProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + &ChildVirtIo, + This->DriverBindingHandle, + Dev->MacHandle, + EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER + ); if (EFI_ERROR (Status)) { goto UninstallMultiple; } @@ -515,10 +558,14 @@ VirtioNetDriverBindingStart ( return EFI_SUCCESS; UninstallMultiple: - gBS->UninstallMultipleProtocolInterfaces (Dev->MacHandle, - &gEfiDevicePathProtocolGuid, Dev->MacDevicePath, - &gEfiSimpleNetworkProtocolGuid, &Dev->Snp, - NULL); + gBS->UninstallMultipleProtocolInterfaces ( + Dev->MacHandle, + &gEfiDevicePathProtocolGuid, + Dev->MacDevicePath, + &gEfiSimpleNetworkProtocolGuid, + &Dev->Snp, + NULL + ); FreeMacDevicePath: FreePool (Dev->MacDevicePath); @@ -527,8 +574,12 @@ Evacuate: VirtioNetSnpEvacuate (Dev); CloseVirtIo: - gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); FreeVirtioNet: FreePool (Dev); @@ -536,7 +587,6 @@ FreeVirtioNet: return Status; } - /** Stops a device controller or a bus controller. @@ -574,10 +624,10 @@ STATIC EFI_STATUS EFIAPI VirtioNetDriverBindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) { if (NumberOfChildren > 0) { @@ -585,17 +635,21 @@ VirtioNetDriverBindingStop ( // free all resources for whose access we need the child handle, because // the child handle is going away // - EFI_STATUS Status; - EFI_SIMPLE_NETWORK_PROTOCOL *Snp; - VNET_DEV *Dev; - EFI_TPL OldTpl; + EFI_STATUS Status; + EFI_SIMPLE_NETWORK_PROTOCOL *Snp; + VNET_DEV *Dev; + EFI_TPL OldTpl; ASSERT (NumberOfChildren == 1); - Status = gBS->OpenProtocol (ChildHandleBuffer[0], - &gEfiSimpleNetworkProtocolGuid, (VOID **)&Snp, - This->DriverBindingHandle, DeviceHandle, - EFI_OPEN_PROTOCOL_GET_PROTOCOL); + Status = gBS->OpenProtocol ( + ChildHandleBuffer[0], + &gEfiSimpleNetworkProtocolGuid, + (VOID **)&Snp, + This->DriverBindingHandle, + DeviceHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); ASSERT_EFI_ERROR (Status); Dev = VIRTIO_NET_FROM_SNP (Snp); @@ -610,14 +664,21 @@ VirtioNetDriverBindingStop ( // device in use, cannot stop driver instance // Status = EFI_DEVICE_ERROR; - } - else { - gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, Dev->MacHandle); - gBS->UninstallMultipleProtocolInterfaces (Dev->MacHandle, - &gEfiDevicePathProtocolGuid, Dev->MacDevicePath, - &gEfiSimpleNetworkProtocolGuid, &Dev->Snp, - NULL); + } else { + gBS->CloseProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + Dev->MacHandle + ); + gBS->UninstallMultipleProtocolInterfaces ( + Dev->MacHandle, + &gEfiDevicePathProtocolGuid, + Dev->MacDevicePath, + &gEfiSimpleNetworkProtocolGuid, + &Dev->Snp, + NULL + ); FreePool (Dev->MacDevicePath); VirtioNetSnpEvacuate (Dev); FreePool (Dev); @@ -630,14 +691,17 @@ VirtioNetDriverBindingStop ( // // release remaining resources, tied directly to the parent handle // - gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); return EFI_SUCCESS; } - -EFI_DRIVER_BINDING_PROTOCOL gVirtioNetDriverBinding = { +EFI_DRIVER_BINDING_PROTOCOL gVirtioNetDriverBinding = { &VirtioNetDriverBindingSupported, &VirtioNetDriverBindingStart, &VirtioNetDriverBindingStop, diff --git a/OvmfPkg/VirtioNetDxe/EntryPoint.c b/OvmfPkg/VirtioNetDxe/EntryPoint.c index 95e8bda6de..c3f41dab57 100644 --- a/OvmfPkg/VirtioNetDxe/EntryPoint.c +++ b/OvmfPkg/VirtioNetDxe/EntryPoint.c @@ -25,12 +25,11 @@ @retval EFI_SUCCESS The operation completed successfully. @retval Others An unexpected error occurred. **/ - EFI_STATUS EFIAPI VirtioNetEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { return EfiLibInstallDriverBindingComponentName2 ( diff --git a/OvmfPkg/VirtioNetDxe/Events.c b/OvmfPkg/VirtioNetDxe/Events.c index 83e96e5e5d..4c93607a38 100644 --- a/OvmfPkg/VirtioNetDxe/Events.c +++ b/OvmfPkg/VirtioNetDxe/Events.c @@ -26,12 +26,11 @@ context, which is implementation-dependent. **/ - VOID EFIAPI VirtioNetIsPacketAvailable ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { // @@ -42,8 +41,8 @@ VirtioNetIsPacketAvailable ( // almost no documentation in either the UEFI-2.3.1+errC spec or the // DWG-2.3.1, but WaitForKey does have some. // - VNET_DEV *Dev; - UINT16 RxCurUsed; + VNET_DEV *Dev; + UINT16 RxCurUsed; Dev = Context; if (Dev->Snm.State != EfiSimpleNetworkInitialized) { @@ -65,8 +64,8 @@ VirtioNetIsPacketAvailable ( VOID EFIAPI VirtioNetExitBoot ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { // @@ -76,7 +75,7 @@ VirtioNetExitBoot ( // Shut down pending transfers according to DWG-2.3.1, "25.5.1 Exit Boot // Services Event". // - VNET_DEV *Dev; + VNET_DEV *Dev; DEBUG ((DEBUG_VERBOSE, "%a: Context=0x%p\n", __FUNCTION__, Context)); Dev = Context; diff --git a/OvmfPkg/VirtioNetDxe/SnpGetStatus.c b/OvmfPkg/VirtioNetDxe/SnpGetStatus.c index 333a522d50..0e13bdc78c 100644 --- a/OvmfPkg/VirtioNetDxe/SnpGetStatus.c +++ b/OvmfPkg/VirtioNetDxe/SnpGetStatus.c @@ -46,51 +46,51 @@ interface. **/ - EFI_STATUS EFIAPI VirtioNetGetStatus ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - OUT UINT32 *InterruptStatus OPTIONAL, - OUT VOID **TxBuf OPTIONAL + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + OUT UINT32 *InterruptStatus OPTIONAL, + OUT VOID **TxBuf OPTIONAL ) { - VNET_DEV *Dev; - EFI_TPL OldTpl; - EFI_STATUS Status; - UINT16 RxCurUsed; - UINT16 TxCurUsed; - EFI_PHYSICAL_ADDRESS DeviceAddress; + VNET_DEV *Dev; + EFI_TPL OldTpl; + EFI_STATUS Status; + UINT16 RxCurUsed; + UINT16 TxCurUsed; + EFI_PHYSICAL_ADDRESS DeviceAddress; if (This == NULL) { return EFI_INVALID_PARAMETER; } - Dev = VIRTIO_NET_FROM_SNP (This); + Dev = VIRTIO_NET_FROM_SNP (This); OldTpl = gBS->RaiseTPL (TPL_CALLBACK); switch (Dev->Snm.State) { - case EfiSimpleNetworkStopped: - Status = EFI_NOT_STARTED; - goto Exit; - case EfiSimpleNetworkStarted: - Status = EFI_DEVICE_ERROR; - goto Exit; - default: - break; + case EfiSimpleNetworkStopped: + Status = EFI_NOT_STARTED; + goto Exit; + case EfiSimpleNetworkStarted: + Status = EFI_DEVICE_ERROR; + goto Exit; + default: + break; } // // update link status // if (Dev->Snm.MediaPresentSupported) { - UINT16 LinkStatus; + UINT16 LinkStatus; Status = VIRTIO_CFG_READ (Dev, LinkStatus, &LinkStatus); if (EFI_ERROR (Status)) { goto Exit; } + Dev->Snm.MediaPresent = - (BOOLEAN) ((LinkStatus & VIRTIO_NET_S_LINK_UP) != 0); + (BOOLEAN)((LinkStatus & VIRTIO_NET_S_LINK_UP) != 0); } // @@ -110,6 +110,7 @@ VirtioNetGetStatus ( if (Dev->RxLastUsed != RxCurUsed) { *InterruptStatus |= EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT; } + if (Dev->TxLastUsed != TxCurUsed) { ASSERT (Dev->TxCurPending > 0); *InterruptStatus |= EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT; @@ -119,10 +120,9 @@ VirtioNetGetStatus ( if (TxBuf != NULL) { if (Dev->TxLastUsed == TxCurUsed) { *TxBuf = NULL; - } - else { - UINT16 UsedElemIdx; - UINT32 DescIdx; + } else { + UINT16 UsedElemIdx; + UINT32 DescIdx; // // fetch the first descriptor among those that the hypervisor reports @@ -132,8 +132,8 @@ VirtioNetGetStatus ( ASSERT (Dev->TxCurPending <= Dev->TxMaxPending); UsedElemIdx = Dev->TxLastUsed++ % Dev->TxRing.QueueSize; - DescIdx = Dev->TxRing.Used.UsedElem[UsedElemIdx].Id; - ASSERT (DescIdx < (UINT32) (2 * Dev->TxMaxPending - 1)); + DescIdx = Dev->TxRing.Used.UsedElem[UsedElemIdx].Id; + ASSERT (DescIdx < (UINT32)(2 * Dev->TxMaxPending - 1)); // // get the device address that has been enqueued for the caller's @@ -144,7 +144,7 @@ VirtioNetGetStatus ( // // now this descriptor can be used again to enqueue a transmit buffer // - Dev->TxFreeStack[--Dev->TxCurPending] = (UINT16) DescIdx; + Dev->TxFreeStack[--Dev->TxCurPending] = (UINT16)DescIdx; // // Unmap the device address and perform the reverse mapping to find the diff --git a/OvmfPkg/VirtioNetDxe/SnpInitialize.c b/OvmfPkg/VirtioNetDxe/SnpInitialize.c index bb3b552d68..c77aeea826 100644 --- a/OvmfPkg/VirtioNetDxe/SnpInitialize.c +++ b/OvmfPkg/VirtioNetDxe/SnpInitialize.c @@ -39,21 +39,20 @@ VirtioRingMap(). @retval EFI_SUCCESS Ring initialized. */ - STATIC EFI_STATUS EFIAPI VirtioNetInitRing ( - IN OUT VNET_DEV *Dev, - IN UINT16 Selector, - OUT VRING *Ring, - OUT VOID **Mapping + IN OUT VNET_DEV *Dev, + IN UINT16 Selector, + OUT VRING *Ring, + OUT VOID **Mapping ) { - EFI_STATUS Status; - UINT16 QueueSize; - UINT64 RingBaseShift; - VOID *MapInfo; + EFI_STATUS Status; + UINT16 QueueSize; + UINT64 RingBaseShift; + VOID *MapInfo; // // step 4b -- allocate selected queue @@ -62,6 +61,7 @@ VirtioNetInitRing ( if (EFI_ERROR (Status)) { return Status; } + Status = Dev->VirtIo->GetQueueNumMax (Dev->VirtIo, &QueueSize); if (EFI_ERROR (Status)) { return Status; @@ -74,6 +74,7 @@ VirtioNetInitRing ( if (QueueSize < 2) { return EFI_UNSUPPORTED; } + Status = VirtioRingInit (Dev->VirtIo, QueueSize, Ring); if (EFI_ERROR (Status)) { return Status; @@ -122,7 +123,6 @@ ReleaseQueue: return Status; } - /** Set up static scaffolding for the VirtioNetTransmit() and VirtioNetGetStatus() SNP methods. @@ -148,12 +148,11 @@ ReleaseQueue: VirtioMapAllBytesInSharedBuffer() @retval EFI_SUCCESS TX setup successful. */ - STATIC EFI_STATUS EFIAPI VirtioNetInitTx ( - IN OUT VNET_DEV *Dev + IN OUT VNET_DEV *Dev ) { UINTN TxSharedReqSize; @@ -162,11 +161,15 @@ VirtioNetInitTx ( EFI_PHYSICAL_ADDRESS DeviceAddress; VOID *TxSharedReqBuffer; - Dev->TxMaxPending = (UINT16) MIN (Dev->TxRing.QueueSize / 2, - VNET_MAX_PENDING); + Dev->TxMaxPending = (UINT16)MIN ( + Dev->TxRing.QueueSize / 2, + VNET_MAX_PENDING + ); Dev->TxCurPending = 0; - Dev->TxFreeStack = AllocatePool (Dev->TxMaxPending * - sizeof *Dev->TxFreeStack); + Dev->TxFreeStack = AllocatePool ( + Dev->TxMaxPending * + sizeof *Dev->TxFreeStack + ); if (Dev->TxFreeStack == NULL) { return EFI_OUT_OF_RESOURCES; } @@ -209,7 +212,6 @@ VirtioNetInitTx ( Dev->TxSharedReq = TxSharedReqBuffer; - // // In VirtIo 1.0, the NumBuffers field is mandatory. In 0.9.5, it depends on // VIRTIO_NET_F_MRG_RXBUF, which we never negotiate. @@ -219,9 +221,9 @@ VirtioNetInitTx ( sizeof *Dev->TxSharedReq; for (PktIdx = 0; PktIdx < Dev->TxMaxPending; ++PktIdx) { - UINT16 DescIdx; + UINT16 DescIdx; - DescIdx = (UINT16) (2 * PktIdx); + DescIdx = (UINT16)(2 * PktIdx); Dev->TxFreeStack[PktIdx] = DescIdx; // @@ -229,9 +231,9 @@ VirtioNetInitTx ( // (unmodified by the host) virtio-net request header. // Dev->TxRing.Desc[DescIdx].Addr = DeviceAddress; - Dev->TxRing.Desc[DescIdx].Len = (UINT32) TxSharedReqSize; + Dev->TxRing.Desc[DescIdx].Len = (UINT32)TxSharedReqSize; Dev->TxRing.Desc[DescIdx].Flags = VRING_DESC_F_NEXT; - Dev->TxRing.Desc[DescIdx].Next = (UINT16) (DescIdx + 1); + Dev->TxRing.Desc[DescIdx].Next = (UINT16)(DescIdx + 1); // // The second descriptor of each pending TX packet is updated on the fly, @@ -261,7 +263,7 @@ VirtioNetInitTx ( // // want no interrupt when a transmit completes // - *Dev->TxRing.Avail.Flags = (UINT16) VRING_AVAIL_F_NO_INTERRUPT; + *Dev->TxRing.Avail.Flags = (UINT16)VRING_AVAIL_F_NO_INTERRUPT; return EFI_SUCCESS; @@ -281,7 +283,6 @@ FreeTxFreeStack: return Status; } - /** Set up static scaffolding for the VirtioNetReceive() SNP method and enable live device operation. @@ -304,12 +305,11 @@ FreeTxFreeStack: @retval EFI_SUCCESS RX setup successful. The device is live and may already be writing to the receive area. */ - STATIC EFI_STATUS EFIAPI VirtioNetInitRx ( - IN OUT VNET_DEV *Dev + IN OUT VNET_DEV *Dev ) { EFI_STATUS Status; @@ -343,7 +343,7 @@ VirtioNetInitRx ( // Limit the number of pending RX packets if the queue is big. The division // by two is due to the above "two descriptors per packet" trait. // - RxAlwaysPending = (UINT16) MIN (Dev->RxRing.QueueSize / 2, VNET_MAX_PENDING); + RxAlwaysPending = (UINT16)MIN (Dev->RxRing.QueueSize / 2, VNET_MAX_PENDING); // // The RxBuf is shared between guest and hypervisor, use @@ -351,13 +351,13 @@ VirtioNetInitRx ( // BusMasterCommonBuffer so that it can be accessed by both guest and // hypervisor. // - NumBytes = RxAlwaysPending * RxBufSize; + NumBytes = RxAlwaysPending * RxBufSize; Dev->RxBufNrPages = EFI_SIZE_TO_PAGES (NumBytes); - Status = Dev->VirtIo->AllocateSharedPages ( - Dev->VirtIo, - Dev->RxBufNrPages, - &RxBuffer - ); + Status = Dev->VirtIo->AllocateSharedPages ( + Dev->VirtIo, + Dev->RxBufNrPages, + &RxBuffer + ); if (EFI_ERROR (Status)) { return Status; } @@ -390,13 +390,13 @@ VirtioNetInitRx ( // the host should not send interrupts, we'll poll in VirtioNetReceive() // and VirtioNetIsPacketAvailable(). // - *Dev->RxRing.Avail.Flags = (UINT16) VRING_AVAIL_F_NO_INTERRUPT; + *Dev->RxRing.Avail.Flags = (UINT16)VRING_AVAIL_F_NO_INTERRUPT; // // now set up a separate, two-part descriptor chain for each RX packet, and // link each chain into (from) the available ring as well // - DescIdx = 0; + DescIdx = 0; RxBufDeviceAddress = Dev->RxBufDeviceBase; for (PktIdx = 0; PktIdx < RxAlwaysPending; ++PktIdx) { // @@ -409,15 +409,15 @@ VirtioNetInitRx ( // virtio-0.9.5, 2.4.1.1 Placing Buffers into the Descriptor Table // Dev->RxRing.Desc[DescIdx].Addr = RxBufDeviceAddress; - Dev->RxRing.Desc[DescIdx].Len = (UINT32) VirtioNetReqSize; + Dev->RxRing.Desc[DescIdx].Len = (UINT32)VirtioNetReqSize; Dev->RxRing.Desc[DescIdx].Flags = VRING_DESC_F_WRITE | VRING_DESC_F_NEXT; - Dev->RxRing.Desc[DescIdx].Next = (UINT16) (DescIdx + 1); - RxBufDeviceAddress += Dev->RxRing.Desc[DescIdx++].Len; + Dev->RxRing.Desc[DescIdx].Next = (UINT16)(DescIdx + 1); + RxBufDeviceAddress += Dev->RxRing.Desc[DescIdx++].Len; Dev->RxRing.Desc[DescIdx].Addr = RxBufDeviceAddress; - Dev->RxRing.Desc[DescIdx].Len = (UINT32) (RxBufSize - VirtioNetReqSize); + Dev->RxRing.Desc[DescIdx].Len = (UINT32)(RxBufSize - VirtioNetReqSize); Dev->RxRing.Desc[DescIdx].Flags = VRING_DESC_F_WRITE; - RxBufDeviceAddress += Dev->RxRing.Desc[DescIdx++].Len; + RxBufDeviceAddress += Dev->RxRing.Desc[DescIdx++].Len; } // @@ -455,7 +455,6 @@ FreeSharedBuffer: return Status; } - /** Resets a network adapter and allocates the transmit and receive buffers required by the network interface; optionally, also requests allocation of @@ -485,29 +484,29 @@ FreeSharedBuffer: interface. **/ - EFI_STATUS EFIAPI VirtioNetInitialize ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN UINTN ExtraRxBufferSize OPTIONAL, - IN UINTN ExtraTxBufferSize OPTIONAL + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN UINTN ExtraRxBufferSize OPTIONAL, + IN UINTN ExtraTxBufferSize OPTIONAL ) { - VNET_DEV *Dev; - EFI_TPL OldTpl; - EFI_STATUS Status; - UINT8 NextDevStat; - UINT64 Features; + VNET_DEV *Dev; + EFI_TPL OldTpl; + EFI_STATUS Status; + UINT8 NextDevStat; + UINT64 Features; if (This == NULL) { return EFI_INVALID_PARAMETER; } - if (ExtraRxBufferSize > 0 || ExtraTxBufferSize > 0) { + + if ((ExtraRxBufferSize > 0) || (ExtraTxBufferSize > 0)) { return EFI_UNSUPPORTED; } - Dev = VIRTIO_NET_FROM_SNP (This); + Dev = VIRTIO_NET_FROM_SNP (This); OldTpl = gBS->RaiseTPL (TPL_CALLBACK); if (Dev->Snm.State != EfiSimpleNetworkStarted) { Status = EFI_NOT_STARTED; @@ -524,13 +523,13 @@ VirtioNetInitialize ( // virtio-0.9.5 spec, 2.2.1 Device Initialization Sequence. // NextDevStat = VSTAT_ACK; // step 2 -- acknowledge device presence - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto InitFailed; } NextDevStat |= VSTAT_DRIVER; // step 3 -- we know how to drive it - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto DeviceFailed; } @@ -553,8 +552,10 @@ VirtioNetInitialize ( } ASSERT (Features & VIRTIO_NET_F_MAC); - ASSERT (Dev->Snm.MediaPresentSupported == - !!(Features & VIRTIO_NET_F_STATUS)); + ASSERT ( + Dev->Snm.MediaPresentSupported == + !!(Features & VIRTIO_NET_F_STATUS) + ); Features &= VIRTIO_NET_F_MAC | VIRTIO_NET_F_STATUS | VIRTIO_F_VERSION_1 | VIRTIO_F_IOMMU_PLATFORM; @@ -598,7 +599,7 @@ VirtioNetInitialize ( // if (Dev->VirtIo->Revision < VIRTIO_SPEC_REVISION (1, 0, 0)) { Features &= ~(UINT64)(VIRTIO_F_VERSION_1 | VIRTIO_F_IOMMU_PLATFORM); - Status = Dev->VirtIo->SetGuestFeatures (Dev->VirtIo, Features); + Status = Dev->VirtIo->SetGuestFeatures (Dev->VirtIo, Features); if (EFI_ERROR (Status)) { goto ReleaseTxRing; } @@ -608,7 +609,7 @@ VirtioNetInitialize ( // step 6 -- virtio-net initialization complete // NextDevStat |= VSTAT_DRIVER_OK; - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto ReleaseTxRing; } diff --git a/OvmfPkg/VirtioNetDxe/SnpMcastIpToMac.c b/OvmfPkg/VirtioNetDxe/SnpMcastIpToMac.c index e16c61c6ba..6870ffa19e 100644 --- a/OvmfPkg/VirtioNetDxe/SnpMcastIpToMac.c +++ b/OvmfPkg/VirtioNetDxe/SnpMcastIpToMac.c @@ -38,41 +38,41 @@ interface. **/ - EFI_STATUS EFIAPI VirtioNetMcastIpToMac ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN BOOLEAN IPv6, - IN EFI_IP_ADDRESS *Ip, - OUT EFI_MAC_ADDRESS *Mac + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN IPv6, + IN EFI_IP_ADDRESS *Ip, + OUT EFI_MAC_ADDRESS *Mac ) { - VNET_DEV *Dev; - EFI_TPL OldTpl; - EFI_STATUS Status; + VNET_DEV *Dev; + EFI_TPL OldTpl; + EFI_STATUS Status; // // http://en.wikipedia.org/wiki/Multicast_address // - if (This == NULL || Ip == NULL || Mac == NULL || - ( IPv6 && (Ip->v6.Addr[0] ) != 0xFF) || // invalid IPv6 mcast addr - (!IPv6 && (Ip->v4.Addr[0] & 0xF0) != 0xE0) // invalid IPv4 mcast addr - ) { + if ((This == NULL) || (Ip == NULL) || (Mac == NULL) || + (IPv6 && ((Ip->v6.Addr[0]) != 0xFF)) || // invalid IPv6 mcast addr + (!IPv6 && ((Ip->v4.Addr[0] & 0xF0) != 0xE0)) // invalid IPv4 mcast addr + ) + { return EFI_INVALID_PARAMETER; } - Dev = VIRTIO_NET_FROM_SNP (This); + Dev = VIRTIO_NET_FROM_SNP (This); OldTpl = gBS->RaiseTPL (TPL_CALLBACK); switch (Dev->Snm.State) { - case EfiSimpleNetworkStopped: - Status = EFI_NOT_STARTED; - goto Exit; - case EfiSimpleNetworkStarted: - Status = EFI_DEVICE_ERROR; - goto Exit; - default: - break; + case EfiSimpleNetworkStopped: + Status = EFI_NOT_STARTED; + goto Exit; + case EfiSimpleNetworkStarted: + Status = EFI_DEVICE_ERROR; + goto Exit; + default: + break; } // @@ -85,8 +85,7 @@ VirtioNetMcastIpToMac ( Mac->Addr[3] = Ip->v6.Addr[13]; Mac->Addr[4] = Ip->v6.Addr[14]; Mac->Addr[5] = Ip->v6.Addr[15]; - } - else { + } else { Mac->Addr[0] = 0x01; Mac->Addr[1] = 0x00; Mac->Addr[2] = 0x5E; @@ -94,6 +93,7 @@ VirtioNetMcastIpToMac ( Mac->Addr[4] = Ip->v4.Addr[2]; Mac->Addr[5] = Ip->v4.Addr[3]; } + Status = EFI_SUCCESS; Exit: diff --git a/OvmfPkg/VirtioNetDxe/SnpReceive.c b/OvmfPkg/VirtioNetDxe/SnpReceive.c index cdee9a2aee..cc0e1da14f 100644 --- a/OvmfPkg/VirtioNetDxe/SnpReceive.c +++ b/OvmfPkg/VirtioNetDxe/SnpReceive.c @@ -52,47 +52,46 @@ interface. **/ - EFI_STATUS EFIAPI VirtioNetReceive ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - OUT UINTN *HeaderSize OPTIONAL, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer, - OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, - OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, - OUT UINT16 *Protocol OPTIONAL + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + OUT UINTN *HeaderSize OPTIONAL, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer, + OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, + OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, + OUT UINT16 *Protocol OPTIONAL ) { - VNET_DEV *Dev; - EFI_TPL OldTpl; - EFI_STATUS Status; - UINT16 RxCurUsed; - UINT16 UsedElemIdx; - UINT32 DescIdx; - UINT32 RxLen; - UINTN OrigBufferSize; - UINT8 *RxPtr; - UINT16 AvailIdx; - EFI_STATUS NotifyStatus; - UINTN RxBufOffset; - - if (This == NULL || BufferSize == NULL || Buffer == NULL) { + VNET_DEV *Dev; + EFI_TPL OldTpl; + EFI_STATUS Status; + UINT16 RxCurUsed; + UINT16 UsedElemIdx; + UINT32 DescIdx; + UINT32 RxLen; + UINTN OrigBufferSize; + UINT8 *RxPtr; + UINT16 AvailIdx; + EFI_STATUS NotifyStatus; + UINTN RxBufOffset; + + if ((This == NULL) || (BufferSize == NULL) || (Buffer == NULL)) { return EFI_INVALID_PARAMETER; } - Dev = VIRTIO_NET_FROM_SNP (This); + Dev = VIRTIO_NET_FROM_SNP (This); OldTpl = gBS->RaiseTPL (TPL_CALLBACK); switch (Dev->Snm.State) { - case EfiSimpleNetworkStopped: - Status = EFI_NOT_STARTED; - goto Exit; - case EfiSimpleNetworkStarted: - Status = EFI_DEVICE_ERROR; - goto Exit; - default: - break; + case EfiSimpleNetworkStopped: + Status = EFI_NOT_STARTED; + goto Exit; + case EfiSimpleNetworkStarted: + Status = EFI_DEVICE_ERROR; + goto Exit; + default: + break; } // @@ -108,8 +107,8 @@ VirtioNetReceive ( } UsedElemIdx = Dev->RxLastUsed % Dev->RxRing.QueueSize; - DescIdx = Dev->RxRing.Used.UsedElem[UsedElemIdx].Id; - RxLen = Dev->RxRing.Used.UsedElem[UsedElemIdx].Len; + DescIdx = Dev->RxRing.Used.UsedElem[UsedElemIdx].Id; + RxLen = Dev->RxRing.Used.UsedElem[UsedElemIdx].Len; // // the virtio-net request header must be complete; we skip it @@ -122,7 +121,7 @@ VirtioNetReceive ( ASSERT (RxLen <= Dev->RxRing.Desc[DescIdx + 1].Len); OrigBufferSize = *BufferSize; - *BufferSize = RxLen; + *BufferSize = RxLen; if (OrigBufferSize < RxLen) { Status = EFI_BUFFER_TOO_SMALL; @@ -146,16 +145,19 @@ VirtioNetReceive ( if (DestAddr != NULL) { CopyMem (DestAddr, RxPtr, SIZE_OF_VNET (Mac)); } + RxPtr += SIZE_OF_VNET (Mac); if (SrcAddr != NULL) { CopyMem (SrcAddr, RxPtr, SIZE_OF_VNET (Mac)); } + RxPtr += SIZE_OF_VNET (Mac); if (Protocol != NULL) { - *Protocol = (UINT16) ((RxPtr[0] << 8) | RxPtr[1]); + *Protocol = (UINT16)((RxPtr[0] << 8) | RxPtr[1]); } + RxPtr += sizeof (UINT16); Status = EFI_SUCCESS; @@ -166,16 +168,17 @@ RecycleDesc: // // virtio-0.9.5, 2.4.1 Supplying Buffers to The Device // - AvailIdx = *Dev->RxRing.Avail.Idx; + AvailIdx = *Dev->RxRing.Avail.Idx; Dev->RxRing.Avail.Ring[AvailIdx++ % Dev->RxRing.QueueSize] = - (UINT16) DescIdx; + (UINT16)DescIdx; MemoryFence (); *Dev->RxRing.Avail.Idx = AvailIdx; MemoryFence (); NotifyStatus = Dev->VirtIo->SetQueueNotify (Dev->VirtIo, VIRTIO_NET_Q_RX); - if (!EFI_ERROR (Status)) { // earlier error takes precedence + if (!EFI_ERROR (Status)) { + // earlier error takes precedence Status = NotifyStatus; } diff --git a/OvmfPkg/VirtioNetDxe/SnpReceiveFilters.c b/OvmfPkg/VirtioNetDxe/SnpReceiveFilters.c index 9d5ce29b79..18027a563a 100644 --- a/OvmfPkg/VirtioNetDxe/SnpReceiveFilters.c +++ b/OvmfPkg/VirtioNetDxe/SnpReceiveFilters.c @@ -45,37 +45,36 @@ interface. **/ - EFI_STATUS EFIAPI VirtioNetReceiveFilters ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN UINT32 Enable, - IN UINT32 Disable, - IN BOOLEAN ResetMCastFilter, - IN UINTN MCastFilterCnt OPTIONAL, - IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN UINT32 Enable, + IN UINT32 Disable, + IN BOOLEAN ResetMCastFilter, + IN UINTN MCastFilterCnt OPTIONAL, + IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL ) { - VNET_DEV *Dev; - EFI_TPL OldTpl; - EFI_STATUS Status; + VNET_DEV *Dev; + EFI_TPL OldTpl; + EFI_STATUS Status; if (This == NULL) { return EFI_INVALID_PARAMETER; } - Dev = VIRTIO_NET_FROM_SNP (This); + Dev = VIRTIO_NET_FROM_SNP (This); OldTpl = gBS->RaiseTPL (TPL_CALLBACK); switch (Dev->Snm.State) { - case EfiSimpleNetworkStopped: - Status = EFI_NOT_STARTED; - goto Exit; - case EfiSimpleNetworkStarted: - Status = EFI_DEVICE_ERROR; - goto Exit; - default: - break; + case EfiSimpleNetworkStopped: + Status = EFI_NOT_STARTED; + goto Exit; + case EfiSimpleNetworkStarted: + Status = EFI_DEVICE_ERROR; + goto Exit; + default: + break; } // @@ -89,9 +88,9 @@ VirtioNetReceiveFilters ( // discarding any packets getting through the filter. // Status = ( - ((Enable | Disable) & ~Dev->Snm.ReceiveFilterMask) != 0 || - (!ResetMCastFilter && MCastFilterCnt > Dev->Snm.MaxMCastFilterCount) - ) ? EFI_INVALID_PARAMETER : EFI_SUCCESS; + ((Enable | Disable) & ~Dev->Snm.ReceiveFilterMask) != 0 || + (!ResetMCastFilter && MCastFilterCnt > Dev->Snm.MaxMCastFilterCount) + ) ? EFI_INVALID_PARAMETER : EFI_SUCCESS; Exit: gBS->RestoreTPL (OldTpl); diff --git a/OvmfPkg/VirtioNetDxe/SnpSharedHelpers.c b/OvmfPkg/VirtioNetDxe/SnpSharedHelpers.c index d1e3ecfa5a..d03255ab50 100644 --- a/OvmfPkg/VirtioNetDxe/SnpSharedHelpers.c +++ b/OvmfPkg/VirtioNetDxe/SnpSharedHelpers.c @@ -17,9 +17,9 @@ // info of the packets queued in TxRing // typedef struct { - VOID *Buffer; - EFI_PHYSICAL_ADDRESS DeviceAddress; // lookup key for reverse mapping - VOID *BufMap; + VOID *Buffer; + EFI_PHYSICAL_ADDRESS DeviceAddress; // lookup key for reverse mapping + VOID *BufMap; } TX_BUF_MAP_INFO; /** @@ -36,11 +36,10 @@ typedef struct { @param[in,out] Dev The VNET_DEV driver instance being shut down, or whose partial, failed initialization is being rolled back. */ - VOID EFIAPI VirtioNetShutdownRx ( - IN OUT VNET_DEV *Dev + IN OUT VNET_DEV *Dev ) { Dev->VirtIo->UnmapSharedBuffer (Dev->VirtIo, Dev->RxBufMap); @@ -51,16 +50,15 @@ VirtioNetShutdownRx ( ); } - VOID EFIAPI VirtioNetShutdownTx ( - IN OUT VNET_DEV *Dev + IN OUT VNET_DEV *Dev ) { - ORDERED_COLLECTION_ENTRY *Entry, *Entry2; - TX_BUF_MAP_INFO *TxBufMapInfo; - VOID *UserStruct; + ORDERED_COLLECTION_ENTRY *Entry, *Entry2; + TX_BUF_MAP_INFO *TxBufMapInfo; + VOID *UserStruct; Dev->VirtIo->UnmapSharedBuffer (Dev->VirtIo, Dev->TxSharedReqMap); Dev->VirtIo->FreeSharedPages ( @@ -71,13 +69,15 @@ VirtioNetShutdownTx ( for (Entry = OrderedCollectionMin (Dev->TxBufCollection); Entry != NULL; - Entry = Entry2) { + Entry = Entry2) + { Entry2 = OrderedCollectionNext (Entry); OrderedCollectionDelete (Dev->TxBufCollection, Entry, &UserStruct); TxBufMapInfo = UserStruct; Dev->VirtIo->UnmapSharedBuffer (Dev->VirtIo, TxBufMapInfo->BufMap); FreePool (TxBufMapInfo); } + OrderedCollectionUninit (Dev->TxBufCollection); FreePool (Dev->TxFreeStack); @@ -94,16 +94,15 @@ VirtioNetShutdownTx ( VOID EFIAPI VirtioNetUninitRing ( - IN OUT VNET_DEV *Dev, - IN OUT VRING *Ring, - IN VOID *RingMap + IN OUT VNET_DEV *Dev, + IN OUT VRING *Ring, + IN VOID *RingMap ) { Dev->VirtIo->UnmapSharedBuffer (Dev->VirtIo, RingMap); VirtioRingUninit (Dev->VirtIo, Ring); } - /** Map Caller-supplied TxBuf buffer to the device-mapped address @@ -129,10 +128,10 @@ VirtioNetMapTxBuf ( OUT EFI_PHYSICAL_ADDRESS *DeviceAddress ) { - EFI_STATUS Status; - TX_BUF_MAP_INFO *TxBufMapInfo; - EFI_PHYSICAL_ADDRESS Address; - VOID *Mapping; + EFI_STATUS Status; + TX_BUF_MAP_INFO *TxBufMapInfo; + EFI_PHYSICAL_ADDRESS Address; + VOID *Mapping; TxBufMapInfo = AllocatePool (sizeof (*TxBufMapInfo)); if (TxBufMapInfo == NULL) { @@ -146,14 +145,14 @@ VirtioNetMapTxBuf ( NumberOfBytes, &Address, &Mapping - ); + ); if (EFI_ERROR (Status)) { goto FreeTxBufMapInfo; } - TxBufMapInfo->Buffer = Buffer; + TxBufMapInfo->Buffer = Buffer; TxBufMapInfo->DeviceAddress = Address; - TxBufMapInfo->BufMap = Mapping; + TxBufMapInfo->BufMap = Mapping; Status = OrderedCollectionInsert ( Dev->TxBufCollection, @@ -161,26 +160,26 @@ VirtioNetMapTxBuf ( TxBufMapInfo ); switch (Status) { - case EFI_OUT_OF_RESOURCES: - goto UnmapTxBuf; - case EFI_ALREADY_STARTED: - // - // This should never happen: it implies - // - // - an identity-mapping VIRTIO_DEVICE_PROTOCOL.MapSharedBuffer() - // implementation -- which is fine, - // - // - and an SNP client that queues multiple instances of the exact same - // buffer address with SNP.Transmit() -- which is undefined behavior, - // based on the TxBuf language in UEFI-2.7, - // EFI_SIMPLE_NETWORK.GetStatus(). - // - ASSERT (FALSE); - Status = EFI_INVALID_PARAMETER; - goto UnmapTxBuf; - default: - ASSERT_EFI_ERROR (Status); - break; + case EFI_OUT_OF_RESOURCES: + goto UnmapTxBuf; + case EFI_ALREADY_STARTED: + // + // This should never happen: it implies + // + // - an identity-mapping VIRTIO_DEVICE_PROTOCOL.MapSharedBuffer() + // implementation -- which is fine, + // + // - and an SNP client that queues multiple instances of the exact same + // buffer address with SNP.Transmit() -- which is undefined behavior, + // based on the TxBuf language in UEFI-2.7, + // EFI_SIMPLE_NETWORK.GetStatus(). + // + ASSERT (FALSE); + Status = EFI_INVALID_PARAMETER; + goto UnmapTxBuf; + default: + ASSERT_EFI_ERROR (Status); + break; } *DeviceAddress = Address; @@ -253,12 +252,12 @@ VirtioNetUnmapTxBuf ( INTN EFIAPI VirtioNetTxBufMapInfoCompare ( - IN CONST VOID *UserStruct1, - IN CONST VOID *UserStruct2 + IN CONST VOID *UserStruct1, + IN CONST VOID *UserStruct2 ) { - CONST TX_BUF_MAP_INFO *MapInfo1; - CONST TX_BUF_MAP_INFO *MapInfo2; + CONST TX_BUF_MAP_INFO *MapInfo1; + CONST TX_BUF_MAP_INFO *MapInfo2; MapInfo1 = UserStruct1; MapInfo2 = UserStruct2; @@ -287,15 +286,15 @@ VirtioNetTxBufMapInfoCompare ( INTN EFIAPI VirtioNetTxBufDeviceAddressCompare ( - IN CONST VOID *StandaloneKey, - IN CONST VOID *UserStruct + IN CONST VOID *StandaloneKey, + IN CONST VOID *UserStruct ) { - CONST EFI_PHYSICAL_ADDRESS *DeviceAddress; - CONST TX_BUF_MAP_INFO *MapInfo; + CONST EFI_PHYSICAL_ADDRESS *DeviceAddress; + CONST TX_BUF_MAP_INFO *MapInfo; DeviceAddress = StandaloneKey; - MapInfo = UserStruct; + MapInfo = UserStruct; return *DeviceAddress < MapInfo->DeviceAddress ? -1 : *DeviceAddress > MapInfo->DeviceAddress ? 1 : diff --git a/OvmfPkg/VirtioNetDxe/SnpShutdown.c b/OvmfPkg/VirtioNetDxe/SnpShutdown.c index a217b83799..a589d458ab 100644 --- a/OvmfPkg/VirtioNetDxe/SnpShutdown.c +++ b/OvmfPkg/VirtioNetDxe/SnpShutdown.c @@ -30,32 +30,31 @@ interface. **/ - EFI_STATUS EFIAPI VirtioNetShutdown ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This + IN EFI_SIMPLE_NETWORK_PROTOCOL *This ) { - VNET_DEV *Dev; - EFI_TPL OldTpl; - EFI_STATUS Status; + VNET_DEV *Dev; + EFI_TPL OldTpl; + EFI_STATUS Status; if (This == NULL) { return EFI_INVALID_PARAMETER; } - Dev = VIRTIO_NET_FROM_SNP (This); + Dev = VIRTIO_NET_FROM_SNP (This); OldTpl = gBS->RaiseTPL (TPL_CALLBACK); switch (Dev->Snm.State) { - case EfiSimpleNetworkStopped: - Status = EFI_NOT_STARTED; - goto Exit; - case EfiSimpleNetworkStarted: - Status = EFI_DEVICE_ERROR; - goto Exit; - default: - break; + case EfiSimpleNetworkStopped: + Status = EFI_NOT_STARTED; + goto Exit; + case EfiSimpleNetworkStarted: + Status = EFI_DEVICE_ERROR; + goto Exit; + default: + break; } Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, 0); @@ -65,7 +64,7 @@ VirtioNetShutdown ( VirtioNetUninitRing (Dev, &Dev->RxRing, Dev->RxRingMap); Dev->Snm.State = EfiSimpleNetworkStarted; - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; Exit: gBS->RestoreTPL (OldTpl); diff --git a/OvmfPkg/VirtioNetDxe/SnpStart.c b/OvmfPkg/VirtioNetDxe/SnpStart.c index b8161fbe32..a45953eeb1 100644 --- a/OvmfPkg/VirtioNetDxe/SnpStart.c +++ b/OvmfPkg/VirtioNetDxe/SnpStart.c @@ -28,29 +28,27 @@ @retval EFI_UNSUPPORTED This function is not supported by the network interface. **/ - EFI_STATUS EFIAPI VirtioNetStart ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This + IN EFI_SIMPLE_NETWORK_PROTOCOL *This ) { - VNET_DEV *Dev; - EFI_TPL OldTpl; - EFI_STATUS Status; + VNET_DEV *Dev; + EFI_TPL OldTpl; + EFI_STATUS Status; if (This == NULL) { return EFI_INVALID_PARAMETER; } - Dev = VIRTIO_NET_FROM_SNP (This); + Dev = VIRTIO_NET_FROM_SNP (This); OldTpl = gBS->RaiseTPL (TPL_CALLBACK); if (Dev->Snm.State != EfiSimpleNetworkStopped) { Status = EFI_ALREADY_STARTED; - } - else { + } else { Dev->Snm.State = EfiSimpleNetworkStarted; - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; } gBS->RestoreTPL (OldTpl); diff --git a/OvmfPkg/VirtioNetDxe/SnpStop.c b/OvmfPkg/VirtioNetDxe/SnpStop.c index 3dc7bec8fd..b1ca3c86af 100644 --- a/OvmfPkg/VirtioNetDxe/SnpStop.c +++ b/OvmfPkg/VirtioNetDxe/SnpStop.c @@ -29,29 +29,27 @@ interface. **/ - EFI_STATUS EFIAPI VirtioNetStop ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This + IN EFI_SIMPLE_NETWORK_PROTOCOL *This ) { - VNET_DEV *Dev; - EFI_TPL OldTpl; - EFI_STATUS Status; + VNET_DEV *Dev; + EFI_TPL OldTpl; + EFI_STATUS Status; if (This == NULL) { return EFI_INVALID_PARAMETER; } - Dev = VIRTIO_NET_FROM_SNP (This); + Dev = VIRTIO_NET_FROM_SNP (This); OldTpl = gBS->RaiseTPL (TPL_CALLBACK); if (Dev->Snm.State != EfiSimpleNetworkStarted) { Status = EFI_NOT_STARTED; - } - else { + } else { Dev->Snm.State = EfiSimpleNetworkStopped; - Status = EFI_SUCCESS; + Status = EFI_SUCCESS; } gBS->RestoreTPL (OldTpl); diff --git a/OvmfPkg/VirtioNetDxe/SnpTransmit.c b/OvmfPkg/VirtioNetDxe/SnpTransmit.c index 2218139b33..315e0b7425 100644 --- a/OvmfPkg/VirtioNetDxe/SnpTransmit.c +++ b/OvmfPkg/VirtioNetDxe/SnpTransmit.c @@ -54,17 +54,16 @@ interface. **/ - EFI_STATUS EFIAPI VirtioNetTransmit ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN UINTN HeaderSize, - IN UINTN BufferSize, - IN /* +OUT! */ VOID *Buffer, - IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, - IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, - IN UINT16 *Protocol OPTIONAL + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN UINTN HeaderSize, + IN UINTN BufferSize, + IN /* +OUT! */ VOID *Buffer, + IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, + IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, + IN UINT16 *Protocol OPTIONAL ) { VNET_DEV *Dev; @@ -74,27 +73,28 @@ VirtioNetTransmit ( UINT16 AvailIdx; EFI_PHYSICAL_ADDRESS DeviceAddress; - if (This == NULL || BufferSize == 0 || Buffer == NULL) { + if ((This == NULL) || (BufferSize == 0) || (Buffer == NULL)) { return EFI_INVALID_PARAMETER; } - Dev = VIRTIO_NET_FROM_SNP (This); + Dev = VIRTIO_NET_FROM_SNP (This); OldTpl = gBS->RaiseTPL (TPL_CALLBACK); switch (Dev->Snm.State) { - case EfiSimpleNetworkStopped: - Status = EFI_NOT_STARTED; - goto Exit; - case EfiSimpleNetworkStarted: - Status = EFI_DEVICE_ERROR; - goto Exit; - default: - break; + case EfiSimpleNetworkStopped: + Status = EFI_NOT_STARTED; + goto Exit; + case EfiSimpleNetworkStarted: + Status = EFI_DEVICE_ERROR; + goto Exit; + default: + break; } if (BufferSize < Dev->Snm.MediaHeaderSize) { Status = EFI_BUFFER_TOO_SMALL; goto Exit; } + if (BufferSize > Dev->Snm.MediaHeaderSize + Dev->Snm.MaxPacketSize) { Status = EFI_INVALID_PARAMETER; goto Exit; @@ -114,28 +114,32 @@ VirtioNetTransmit ( // dst MAC, src MAC, Ethertype // if (HeaderSize != 0) { - UINT8 *Ptr; + UINT8 *Ptr; - if (HeaderSize != Dev->Snm.MediaHeaderSize || - DestAddr == NULL || Protocol == NULL) { + if ((HeaderSize != Dev->Snm.MediaHeaderSize) || + (DestAddr == NULL) || (Protocol == NULL)) + { Status = EFI_INVALID_PARAMETER; goto Exit; } + Ptr = Buffer; ASSERT (SIZE_OF_VNET (Mac) <= sizeof (EFI_MAC_ADDRESS)); CopyMem (Ptr, DestAddr, SIZE_OF_VNET (Mac)); Ptr += SIZE_OF_VNET (Mac); - CopyMem (Ptr, + CopyMem ( + Ptr, (SrcAddr == NULL) ? &Dev->Snm.CurrentAddress : SrcAddr, - SIZE_OF_VNET (Mac)); + SIZE_OF_VNET (Mac) + ); Ptr += SIZE_OF_VNET (Mac); - *Ptr++ = (UINT8) (*Protocol >> 8); - *Ptr++ = (UINT8) *Protocol; + *Ptr++ = (UINT8)(*Protocol >> 8); + *Ptr++ = (UINT8)*Protocol; - ASSERT ((UINTN) (Ptr - (UINT8 *) Buffer) == Dev->Snm.MediaHeaderSize); + ASSERT ((UINTN)(Ptr - (UINT8 *)Buffer) == Dev->Snm.MediaHeaderSize); } // @@ -155,15 +159,15 @@ VirtioNetTransmit ( // // virtio-0.9.5, 2.4.1 Supplying Buffers to The Device // - DescIdx = Dev->TxFreeStack[Dev->TxCurPending++]; - Dev->TxRing.Desc[DescIdx + 1].Addr = DeviceAddress; - Dev->TxRing.Desc[DescIdx + 1].Len = (UINT32) BufferSize; + DescIdx = Dev->TxFreeStack[Dev->TxCurPending++]; + Dev->TxRing.Desc[DescIdx + 1].Addr = DeviceAddress; + Dev->TxRing.Desc[DescIdx + 1].Len = (UINT32)BufferSize; // // the available index is never written by the host, we can read it back // without a barrier // - AvailIdx = *Dev->TxRing.Avail.Idx; + AvailIdx = *Dev->TxRing.Avail.Idx; Dev->TxRing.Avail.Ring[AvailIdx++ % Dev->TxRing.QueueSize] = DescIdx; MemoryFence (); diff --git a/OvmfPkg/VirtioNetDxe/SnpUnsupported.c b/OvmfPkg/VirtioNetDxe/SnpUnsupported.c index e41cc31b27..2d0c1ab913 100644 --- a/OvmfPkg/VirtioNetDxe/SnpUnsupported.c +++ b/OvmfPkg/VirtioNetDxe/SnpUnsupported.c @@ -32,18 +32,16 @@ interface. **/ - EFI_STATUS EFIAPI VirtioNetReset ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ) { return EFI_UNSUPPORTED; } - /** Modifies or resets the current station address, if supported. @@ -63,19 +61,17 @@ VirtioNetReset ( interface. **/ - EFI_STATUS EFIAPI VirtioNetStationAddress ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN BOOLEAN Reset, - IN EFI_MAC_ADDRESS *New OPTIONAL + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN Reset, + IN EFI_MAC_ADDRESS *New OPTIONAL ) { return EFI_UNSUPPORTED; } - /** Resets or collects the statistics on a network interface. @@ -102,20 +98,18 @@ VirtioNetStationAddress ( interface. **/ - EFI_STATUS EFIAPI VirtioNetStatistics ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN BOOLEAN Reset, - IN OUT UINTN *StatisticsSize OPTIONAL, - OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN Reset, + IN OUT UINTN *StatisticsSize OPTIONAL, + OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL ) { return EFI_UNSUPPORTED; } - /** Performs read and write operations on the NVRAM device attached to a network interface. @@ -139,15 +133,14 @@ VirtioNetStatistics ( interface. **/ - EFI_STATUS EFIAPI VirtioNetNvData ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN BOOLEAN ReadWrite, - IN UINTN Offset, - IN UINTN BufferSize, - IN OUT VOID *Buffer + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN ReadWrite, + IN UINTN Offset, + IN UINTN BufferSize, + IN OUT VOID *Buffer ) { return EFI_UNSUPPORTED; diff --git a/OvmfPkg/VirtioNetDxe/VirtioNet.h b/OvmfPkg/VirtioNetDxe/VirtioNet.h index 711b7c4cfa..719c575132 100644 --- a/OvmfPkg/VirtioNetDxe/VirtioNet.h +++ b/OvmfPkg/VirtioNetDxe/VirtioNet.h @@ -22,12 +22,12 @@ #include #include -#define VNET_SIG SIGNATURE_32 ('V', 'N', 'E', 'T') +#define VNET_SIG SIGNATURE_32 ('V', 'N', 'E', 'T') // // maximum number of pending packets, separately for each direction // -#define VNET_MAX_PENDING 64 +#define VNET_MAX_PENDING 64 // // State diagram: @@ -69,36 +69,35 @@ typedef struct { // // field init function // ------------------ ------------------------------ - UINT32 Signature; // VirtioNetDriverBindingStart - VIRTIO_DEVICE_PROTOCOL *VirtIo; // VirtioNetDriverBindingStart - EFI_SIMPLE_NETWORK_PROTOCOL Snp; // VirtioNetSnpPopulate - EFI_SIMPLE_NETWORK_MODE Snm; // VirtioNetSnpPopulate - EFI_EVENT ExitBoot; // VirtioNetSnpPopulate - EFI_DEVICE_PATH_PROTOCOL *MacDevicePath; // VirtioNetDriverBindingStart - EFI_HANDLE MacHandle; // VirtioNetDriverBindingStart - - VRING RxRing; // VirtioNetInitRing - VOID *RxRingMap; // VirtioRingMap and - // VirtioNetInitRing - UINT8 *RxBuf; // VirtioNetInitRx - UINT16 RxLastUsed; // VirtioNetInitRx - UINTN RxBufNrPages; // VirtioNetInitRx - EFI_PHYSICAL_ADDRESS RxBufDeviceBase; // VirtioNetInitRx - VOID *RxBufMap; // VirtioNetInitRx - - VRING TxRing; // VirtioNetInitRing - VOID *TxRingMap; // VirtioRingMap and - // VirtioNetInitRing - UINT16 TxMaxPending; // VirtioNetInitTx - UINT16 TxCurPending; // VirtioNetInitTx - UINT16 *TxFreeStack; // VirtioNetInitTx - VIRTIO_1_0_NET_REQ *TxSharedReq; // VirtioNetInitTx - VOID *TxSharedReqMap; // VirtioNetInitTx - UINT16 TxLastUsed; // VirtioNetInitTx - ORDERED_COLLECTION *TxBufCollection; // VirtioNetInitTx + UINT32 Signature; // VirtioNetDriverBindingStart + VIRTIO_DEVICE_PROTOCOL *VirtIo; // VirtioNetDriverBindingStart + EFI_SIMPLE_NETWORK_PROTOCOL Snp; // VirtioNetSnpPopulate + EFI_SIMPLE_NETWORK_MODE Snm; // VirtioNetSnpPopulate + EFI_EVENT ExitBoot; // VirtioNetSnpPopulate + EFI_DEVICE_PATH_PROTOCOL *MacDevicePath; // VirtioNetDriverBindingStart + EFI_HANDLE MacHandle; // VirtioNetDriverBindingStart + + VRING RxRing; // VirtioNetInitRing + VOID *RxRingMap; // VirtioRingMap and + // VirtioNetInitRing + UINT8 *RxBuf; // VirtioNetInitRx + UINT16 RxLastUsed; // VirtioNetInitRx + UINTN RxBufNrPages; // VirtioNetInitRx + EFI_PHYSICAL_ADDRESS RxBufDeviceBase; // VirtioNetInitRx + VOID *RxBufMap; // VirtioNetInitRx + + VRING TxRing; // VirtioNetInitRing + VOID *TxRingMap; // VirtioRingMap and + // VirtioNetInitRing + UINT16 TxMaxPending; // VirtioNetInitTx + UINT16 TxCurPending; // VirtioNetInitTx + UINT16 *TxFreeStack; // VirtioNetInitTx + VIRTIO_1_0_NET_REQ *TxSharedReq; // VirtioNetInitTx + VOID *TxSharedReqMap; // VirtioNetInitTx + UINT16 TxLastUsed; // VirtioNetInitTx + ORDERED_COLLECTION *TxBufCollection; // VirtioNetInitTx } VNET_DEV; - // // In order to avoid duplication of interface documentation, please find all // leading comments near the respective function / variable definitions (not @@ -119,7 +118,7 @@ typedef struct { (Value) \ )) -#define VIRTIO_CFG_READ(Dev, Field, Pointer) ((Dev)->VirtIo->ReadDevice ( \ +#define VIRTIO_CFG_READ(Dev, Field, Pointer) ((Dev)->VirtIo->ReadDevice ( \ (Dev)->VirtIo, \ OFFSET_OF_VNET (Field), \ SIZE_OF_VNET (Field), \ @@ -130,13 +129,13 @@ typedef struct { // // component naming // -extern EFI_COMPONENT_NAME_PROTOCOL gVirtioNetComponentName; -extern EFI_COMPONENT_NAME2_PROTOCOL gVirtioNetComponentName2; +extern EFI_COMPONENT_NAME_PROTOCOL gVirtioNetComponentName; +extern EFI_COMPONENT_NAME2_PROTOCOL gVirtioNetComponentName2; // // driver binding // -extern EFI_DRIVER_BINDING_PROTOCOL gVirtioNetDriverBinding; +extern EFI_DRIVER_BINDING_PROTOCOL gVirtioNetDriverBinding; // // member functions implementing the Simple Network Protocol @@ -144,113 +143,113 @@ extern EFI_DRIVER_BINDING_PROTOCOL gVirtioNetDriverBinding; EFI_STATUS EFIAPI VirtioNetStart ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This + IN EFI_SIMPLE_NETWORK_PROTOCOL *This ); EFI_STATUS EFIAPI VirtioNetStop ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This + IN EFI_SIMPLE_NETWORK_PROTOCOL *This ); EFI_STATUS EFIAPI VirtioNetInitialize ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN UINTN ExtraRxBufferSize OPTIONAL, - IN UINTN ExtraTxBufferSize OPTIONAL + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN UINTN ExtraRxBufferSize OPTIONAL, + IN UINTN ExtraTxBufferSize OPTIONAL ); EFI_STATUS EFIAPI VirtioNetReset ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ); EFI_STATUS EFIAPI VirtioNetShutdown ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This + IN EFI_SIMPLE_NETWORK_PROTOCOL *This ); EFI_STATUS EFIAPI VirtioNetReceiveFilters ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN UINT32 Enable, - IN UINT32 Disable, - IN BOOLEAN ResetMCastFilter, - IN UINTN MCastFilterCnt OPTIONAL, - IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN UINT32 Enable, + IN UINT32 Disable, + IN BOOLEAN ResetMCastFilter, + IN UINTN MCastFilterCnt OPTIONAL, + IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL ); EFI_STATUS EFIAPI VirtioNetStationAddress ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN BOOLEAN Reset, - IN EFI_MAC_ADDRESS *New OPTIONAL + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN Reset, + IN EFI_MAC_ADDRESS *New OPTIONAL ); EFI_STATUS EFIAPI VirtioNetStatistics ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN BOOLEAN Reset, - IN OUT UINTN *StatisticsSize OPTIONAL, - OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN Reset, + IN OUT UINTN *StatisticsSize OPTIONAL, + OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL ); EFI_STATUS EFIAPI VirtioNetMcastIpToMac ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN BOOLEAN IPv6, - IN EFI_IP_ADDRESS *Ip, - OUT EFI_MAC_ADDRESS *Mac + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN IPv6, + IN EFI_IP_ADDRESS *Ip, + OUT EFI_MAC_ADDRESS *Mac ); EFI_STATUS EFIAPI VirtioNetNvData ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN BOOLEAN ReadWrite, - IN UINTN Offset, - IN UINTN BufferSize, - IN OUT VOID *Buffer + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN ReadWrite, + IN UINTN Offset, + IN UINTN BufferSize, + IN OUT VOID *Buffer ); EFI_STATUS EFIAPI VirtioNetGetStatus ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - OUT UINT32 *InterruptStatus OPTIONAL, - OUT VOID **TxBuf OPTIONAL + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + OUT UINT32 *InterruptStatus OPTIONAL, + OUT VOID **TxBuf OPTIONAL ); EFI_STATUS EFIAPI VirtioNetTransmit ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - IN UINTN HeaderSize, - IN UINTN BufferSize, - IN /* +OUT! */ VOID *Buffer, - IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, - IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, - IN UINT16 *Protocol OPTIONAL + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN UINTN HeaderSize, + IN UINTN BufferSize, + IN /* +OUT! */ VOID *Buffer, + IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, + IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, + IN UINT16 *Protocol OPTIONAL ); EFI_STATUS EFIAPI VirtioNetReceive ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *This, - OUT UINTN *HeaderSize OPTIONAL, - IN OUT UINTN *BufferSize, - OUT VOID *Buffer, - OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, - OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, - OUT UINT16 *Protocol OPTIONAL + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + OUT UINTN *HeaderSize OPTIONAL, + IN OUT UINTN *BufferSize, + OUT VOID *Buffer, + OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, + OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL, + OUT UINT16 *Protocol OPTIONAL ); // @@ -259,21 +258,21 @@ VirtioNetReceive ( VOID EFIAPI VirtioNetShutdownRx ( - IN OUT VNET_DEV *Dev + IN OUT VNET_DEV *Dev ); VOID EFIAPI VirtioNetShutdownTx ( - IN OUT VNET_DEV *Dev + IN OUT VNET_DEV *Dev ); VOID EFIAPI VirtioNetUninitRing ( - IN OUT VNET_DEV *Dev, - IN OUT VRING *Ring, - IN VOID *RingMap + IN OUT VNET_DEV *Dev, + IN OUT VRING *Ring, + IN VOID *RingMap ); // @@ -300,33 +299,32 @@ VirtioNetUnmapTxBuf ( INTN EFIAPI VirtioNetTxBufMapInfoCompare ( - IN CONST VOID *UserStruct1, - IN CONST VOID *UserStruct2 + IN CONST VOID *UserStruct1, + IN CONST VOID *UserStruct2 ); INTN EFIAPI VirtioNetTxBufDeviceAddressCompare ( - IN CONST VOID *StandaloneKey, - IN CONST VOID *UserStruct + IN CONST VOID *StandaloneKey, + IN CONST VOID *UserStruct ); - // // event callbacks // VOID EFIAPI VirtioNetIsPacketAvailable ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ); VOID EFIAPI VirtioNetExitBoot ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ); #endif // _VIRTIO_NET_DXE_H_ diff --git a/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.c b/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.c index c5c8d5ebef..b4ac195b0d 100644 --- a/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.c +++ b/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.c @@ -20,7 +20,7 @@ #include "VirtioPciDevice.h" -STATIC VIRTIO_DEVICE_PROTOCOL mDeviceProtocolTemplate = { +STATIC VIRTIO_DEVICE_PROTOCOL mDeviceProtocolTemplate = { 0, // Revision 0, // SubSystemDeviceId VirtioPciGetDeviceFeatures, // GetDeviceFeatures @@ -67,16 +67,16 @@ STATIC VIRTIO_DEVICE_PROTOCOL mDeviceProtocolTemplate = { EFI_STATUS EFIAPI VirtioPciIoRead ( - IN VIRTIO_PCI_DEVICE *Dev, - IN UINTN FieldOffset, - IN UINTN FieldSize, - IN UINTN BufferSize, - OUT VOID *Buffer + IN VIRTIO_PCI_DEVICE *Dev, + IN UINTN FieldOffset, + IN UINTN FieldSize, + IN UINTN BufferSize, + OUT VOID *Buffer ) { - UINTN Count; - EFI_PCI_IO_PROTOCOL_WIDTH Width; - EFI_PCI_IO_PROTOCOL *PciIo; + UINTN Count; + EFI_PCI_IO_PROTOCOL_WIDTH Width; + EFI_PCI_IO_PROTOCOL *PciIo; ASSERT (FieldSize == BufferSize); @@ -105,9 +105,9 @@ VirtioPciIoRead ( // Count = 2; - // - // fall through - // + // + // fall through + // case 4: Width = EfiPciIoWidthUint32; break; @@ -150,15 +150,15 @@ VirtioPciIoRead ( EFI_STATUS EFIAPI VirtioPciIoWrite ( - IN VIRTIO_PCI_DEVICE *Dev, - IN UINTN FieldOffset, - IN UINTN FieldSize, - IN UINT64 Value + IN VIRTIO_PCI_DEVICE *Dev, + IN UINTN FieldOffset, + IN UINTN FieldSize, + IN UINT64 Value ) { - UINTN Count; - EFI_PCI_IO_PROTOCOL_WIDTH Width; - EFI_PCI_IO_PROTOCOL *PciIo; + UINTN Count; + EFI_PCI_IO_PROTOCOL_WIDTH Width; + EFI_PCI_IO_PROTOCOL *PciIo; PciIo = Dev->PciIo; Count = 1; @@ -185,9 +185,9 @@ VirtioPciIoWrite ( // Count = Count * 2; - // - // fall through - // + // + // fall through + // case 4: Width = EfiPciIoWidthUint32; break; @@ -236,14 +236,14 @@ STATIC EFI_STATUS EFIAPI VirtioPciDeviceBindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; // // Attempt to open the device with the PciIo set of interfaces. On success, @@ -284,7 +284,8 @@ VirtioPciDeviceBindingSupported ( if ((Pci.Hdr.VendorId == VIRTIO_VENDOR_ID) && (Pci.Hdr.DeviceId >= 0x1000) && (Pci.Hdr.DeviceId <= 0x103F) && - (Pci.Hdr.RevisionID == 0x00)) { + (Pci.Hdr.RevisionID == 0x00)) + { Status = EFI_SUCCESS; } else { Status = EFI_UNSUPPORTED; @@ -295,8 +296,12 @@ VirtioPciDeviceBindingSupported ( // We needed PCI IO access only transitorily, to see whether we support the // device or not. // - gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); return Status; } @@ -321,12 +326,12 @@ STATIC EFI_STATUS EFIAPI VirtioPciInit ( - IN OUT VIRTIO_PCI_DEVICE *Device + IN OUT VIRTIO_PCI_DEVICE *Device ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; ASSERT (Device != NULL); PciIo = Device->PciIo; @@ -334,13 +339,13 @@ VirtioPciInit ( ASSERT (PciIo->Pci.Read != NULL); Status = PciIo->Pci.Read ( - PciIo, // (protocol, device) - // handle - EfiPciIoWidthUint32, // access width & copy - // mode - 0, // Offset + PciIo, // (protocol, device) + // handle + EfiPciIoWidthUint32, // access width & copy + // mode + 0, // Offset sizeof (Pci) / sizeof (UINT32), // Count - &Pci // target buffer + &Pci // target buffer ); if (EFI_ERROR (Status)) { return Status; @@ -349,13 +354,16 @@ VirtioPciInit ( // // Copy protocol template // - CopyMem (&Device->VirtioDevice, &mDeviceProtocolTemplate, - sizeof (VIRTIO_DEVICE_PROTOCOL)); + CopyMem ( + &Device->VirtioDevice, + &mDeviceProtocolTemplate, + sizeof (VIRTIO_DEVICE_PROTOCOL) + ); // // Initialize the protocol interface attributes // - Device->VirtioDevice.Revision = VIRTIO_SPEC_REVISION (0, 9, 5); + Device->VirtioDevice.Revision = VIRTIO_SPEC_REVISION (0, 9, 5); Device->VirtioDevice.SubSystemDeviceId = Pci.Device.SubsystemID; // @@ -363,7 +371,7 @@ VirtioPciInit ( // the offset would become 24 after enabling MSI-X. // Device->DeviceSpecificConfigurationOffset = - VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_PCI; + VIRTIO_DEVICE_SPECIFIC_CONFIGURATION_OFFSET_PCI; return EFI_SUCCESS; } @@ -376,12 +384,11 @@ VirtioPciInit ( @param[in, out] Dev The device to clean up. **/ - STATIC VOID EFIAPI VirtioPciUninit ( - IN OUT VIRTIO_PCI_DEVICE *Device + IN OUT VIRTIO_PCI_DEVICE *Device ) { // Note: This function mirrors VirtioPciInit() that does not allocate any @@ -420,22 +427,27 @@ STATIC EFI_STATUS EFIAPI VirtioPciDeviceBindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - VIRTIO_PCI_DEVICE *Device; - EFI_STATUS Status; + VIRTIO_PCI_DEVICE *Device; + EFI_STATUS Status; - Device = (VIRTIO_PCI_DEVICE *) AllocateZeroPool (sizeof *Device); + Device = (VIRTIO_PCI_DEVICE *)AllocateZeroPool (sizeof *Device); if (Device == NULL) { return EFI_OUT_OF_RESOURCES; } - Status = gBS->OpenProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, - (VOID **)&Device->PciIo, This->DriverBindingHandle, - DeviceHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); + Status = gBS->OpenProtocol ( + DeviceHandle, + &gEfiPciIoProtocolGuid, + (VOID **)&Device->PciIo, + This->DriverBindingHandle, + DeviceHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { goto FreeVirtioPci; } @@ -451,8 +463,12 @@ VirtioPciDeviceBindingStart ( // // For virtio-pci we only need IO space access. // - Status = Device->PciIo->Attributes (Device->PciIo, - EfiPciIoAttributeOperationGet, 0, &Device->OriginalPciAttributes); + Status = Device->PciIo->Attributes ( + Device->PciIo, + EfiPciIoAttributeOperationGet, + 0, + &Device->OriginalPciAttributes + ); if (EFI_ERROR (Status)) { goto ClosePciIo; } @@ -482,9 +498,12 @@ VirtioPciDeviceBindingStart ( // interface. // Device->Signature = VIRTIO_PCI_DEVICE_SIGNATURE; - Status = gBS->InstallProtocolInterface (&DeviceHandle, - &gVirtioDeviceProtocolGuid, EFI_NATIVE_INTERFACE, - &Device->VirtioDevice); + Status = gBS->InstallProtocolInterface ( + &DeviceHandle, + &gVirtioDeviceProtocolGuid, + EFI_NATIVE_INTERFACE, + &Device->VirtioDevice + ); if (EFI_ERROR (Status)) { goto UninitDev; } @@ -495,12 +514,20 @@ UninitDev: VirtioPciUninit (Device); RestorePciAttributes: - Device->PciIo->Attributes (Device->PciIo, EfiPciIoAttributeOperationSet, - Device->OriginalPciAttributes, NULL); + Device->PciIo->Attributes ( + Device->PciIo, + EfiPciIoAttributeOperationSet, + Device->OriginalPciAttributes, + NULL + ); ClosePciIo: - gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); FreeVirtioPci: FreePool (Device); @@ -537,13 +564,13 @@ STATIC EFI_STATUS EFIAPI VirtioPciDeviceBindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) { - EFI_STATUS Status; + EFI_STATUS Status; VIRTIO_DEVICE_PROTOCOL *VirtioDevice; VIRTIO_PCI_DEVICE *Device; @@ -564,32 +591,42 @@ VirtioPciDeviceBindingStop ( // // Handle Stop() requests for in-use driver instances gracefully. // - Status = gBS->UninstallProtocolInterface (DeviceHandle, - &gVirtioDeviceProtocolGuid, &Device->VirtioDevice); + Status = gBS->UninstallProtocolInterface ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + &Device->VirtioDevice + ); if (EFI_ERROR (Status)) { return Status; } VirtioPciUninit (Device); - Device->PciIo->Attributes (Device->PciIo, EfiPciIoAttributeOperationSet, - Device->OriginalPciAttributes, NULL); - - Status = gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + Device->PciIo->Attributes ( + Device->PciIo, + EfiPciIoAttributeOperationSet, + Device->OriginalPciAttributes, + NULL + ); + + Status = gBS->CloseProtocol ( + DeviceHandle, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); FreePool (Device); return Status; } - // // The static object that groups the Supported() (ie. probe), Start() and // Stop() functions of the driver together. Refer to UEFI Spec 2.3.1 + Errata // C, 10.1 EFI Driver Binding Protocol. // -STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { +STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { &VirtioPciDeviceBindingSupported, &VirtioPciDeviceBindingStart, &VirtioPciDeviceBindingStop, @@ -599,7 +636,6 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { NULL // DriverBindingHandle, ditto }; - // // The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and // EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name @@ -608,20 +644,20 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { // Guide for UEFI 2.3.1 v1.01, 11 UEFI Driver and Controller Names. // STATIC -EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { +EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { { "eng;en", L"Virtio PCI Driver" }, - { NULL, NULL } + { NULL, NULL } }; STATIC -EFI_COMPONENT_NAME_PROTOCOL gComponentName; +EFI_COMPONENT_NAME_PROTOCOL gComponentName; EFI_STATUS EFIAPI VirtioPciGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) { return LookupUnicodeString2 ( @@ -636,39 +672,38 @@ VirtioPciGetDriverName ( EFI_STATUS EFIAPI VirtioPciGetDeviceName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_HANDLE ChildHandle, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_HANDLE ChildHandle, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { return EFI_UNSUPPORTED; } STATIC -EFI_COMPONENT_NAME_PROTOCOL gComponentName = { +EFI_COMPONENT_NAME_PROTOCOL gComponentName = { &VirtioPciGetDriverName, &VirtioPciGetDeviceName, "eng" // SupportedLanguages, ISO 639-2 language codes }; STATIC -EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &VirtioPciGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &VirtioPciGetDeviceName, +EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&VirtioPciGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&VirtioPciGetDeviceName, "en" // SupportedLanguages, RFC 4646 language codes }; - // // Entry point of this driver. // EFI_STATUS EFIAPI VirtioPciDeviceEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { return EfiLibInstallDriverBindingComponentName2 ( diff --git a/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h b/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h index fe8514d42a..772a03c446 100644 --- a/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h +++ b/OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h @@ -19,37 +19,36 @@ #include -#define VIRTIO_PCI_DEVICE_SIGNATURE SIGNATURE_32 ('V', 'P', 'C', 'I') +#define VIRTIO_PCI_DEVICE_SIGNATURE SIGNATURE_32 ('V', 'P', 'C', 'I') typedef struct { - UINT32 Signature; - VIRTIO_DEVICE_PROTOCOL VirtioDevice; - EFI_PCI_IO_PROTOCOL *PciIo; - UINT64 OriginalPciAttributes; - UINT32 DeviceSpecificConfigurationOffset; + UINT32 Signature; + VIRTIO_DEVICE_PROTOCOL VirtioDevice; + EFI_PCI_IO_PROTOCOL *PciIo; + UINT64 OriginalPciAttributes; + UINT32 DeviceSpecificConfigurationOffset; } VIRTIO_PCI_DEVICE; #define VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE(Device) \ CR (Device, VIRTIO_PCI_DEVICE, VirtioDevice, VIRTIO_PCI_DEVICE_SIGNATURE) - EFI_STATUS EFIAPI VirtioPciIoRead ( - IN VIRTIO_PCI_DEVICE *Dev, - IN UINTN FieldOffset, - IN UINTN FieldSize, - IN UINTN BufferSize, - OUT VOID *Buffer + IN VIRTIO_PCI_DEVICE *Dev, + IN UINTN FieldOffset, + IN UINTN FieldSize, + IN UINTN BufferSize, + OUT VOID *Buffer ); EFI_STATUS EFIAPI VirtioPciIoWrite ( - IN VIRTIO_PCI_DEVICE *Dev, - IN UINTN FieldOffset, - IN UINTN FieldSize, - IN UINT64 Value + IN VIRTIO_PCI_DEVICE *Dev, + IN UINTN FieldOffset, + IN UINTN FieldSize, + IN UINT64 Value ); /******************************************** @@ -58,27 +57,27 @@ VirtioPciIoWrite ( EFI_STATUS EFIAPI VirtioPciDeviceRead ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINTN FieldOffset, - IN UINTN FieldSize, - IN UINTN BufferSize, - OUT VOID *Buffer + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN FieldOffset, + IN UINTN FieldSize, + IN UINTN BufferSize, + OUT VOID *Buffer ); EFI_STATUS EFIAPI VirtioPciDeviceWrite ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINTN FieldOffset, - IN UINTN FieldSize, - IN UINT64 Value + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN FieldOffset, + IN UINTN FieldSize, + IN UINT64 Value ); EFI_STATUS EFIAPI VirtioPciGetDeviceFeatures ( - IN VIRTIO_DEVICE_PROTOCOL *This, - OUT UINT64 *DeviceFeatures + IN VIRTIO_DEVICE_PROTOCOL *This, + OUT UINT64 *DeviceFeatures ); EFI_STATUS @@ -91,15 +90,15 @@ VirtioPciGetQueueSize ( EFI_STATUS EFIAPI VirtioPciSetQueueAlignment ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT32 Alignment + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT32 Alignment ); EFI_STATUS EFIAPI VirtioPciSetPageSize ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT32 PageSize + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT32 PageSize ); EFI_STATUS @@ -113,7 +112,7 @@ EFI_STATUS EFIAPI VirtioPciSetGuestFeatures ( IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT64 Features + IN UINT64 Features ); EFI_STATUS @@ -127,62 +126,63 @@ VirtioPciSetQueueAddress ( EFI_STATUS EFIAPI VirtioPciSetQueueSel ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT16 Sel + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT16 Sel ); EFI_STATUS EFIAPI VirtioPciSetQueueNotify ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT16 Index + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT16 Index ); EFI_STATUS EFIAPI VirtioPciSetQueueSize ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT16 Size + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT16 Size ); EFI_STATUS EFIAPI VirtioPciSetDeviceStatus ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT8 DeviceStatus + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT8 DeviceStatus ); EFI_STATUS EFIAPI VirtioPciAllocateSharedPages ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINTN NumPages, - OUT VOID **HostAddress + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN NumPages, + OUT VOID **HostAddress ); VOID EFIAPI VirtioPciFreeSharedPages ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINTN NumPages, - IN VOID *HostAddress + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN NumPages, + IN VOID *HostAddress ); EFI_STATUS EFIAPI VirtioPciMapSharedBuffer ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN VIRTIO_MAP_OPERATION Operation, - IN VOID *HostAddress, - IN OUT UINTN *NumberOfBytes, - OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, - OUT VOID **Mapping + IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_MAP_OPERATION Operation, + IN VOID *HostAddress, + IN OUT UINTN *NumberOfBytes, + OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, + OUT VOID **Mapping ); EFI_STATUS EFIAPI VirtioPciUnmapSharedBuffer ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN VOID *Mapping + IN VIRTIO_DEVICE_PROTOCOL *This, + IN VOID *Mapping ); + #endif // _VIRTIO_PCI_DEVICE_DXE_H_ diff --git a/OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c b/OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c index 46a9354be0..92165de226 100644 --- a/OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c +++ b/OvmfPkg/VirtioPciDeviceDxe/VirtioPciFunctions.c @@ -42,20 +42,24 @@ EFI_STATUS EFIAPI VirtioPciDeviceRead ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINTN FieldOffset, - IN UINTN FieldSize, - IN UINTN BufferSize, - OUT VOID *Buffer + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN FieldOffset, + IN UINTN FieldSize, + IN UINTN BufferSize, + OUT VOID *Buffer ) { - VIRTIO_PCI_DEVICE *Dev; + VIRTIO_PCI_DEVICE *Dev; Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This); - return VirtioPciIoRead (Dev, - Dev->DeviceSpecificConfigurationOffset + FieldOffset, - FieldSize, BufferSize, Buffer); + return VirtioPciIoRead ( + Dev, + Dev->DeviceSpecificConfigurationOffset + FieldOffset, + FieldSize, + BufferSize, + Buffer + ); } /** @@ -78,30 +82,34 @@ VirtioPciDeviceRead ( EFI_STATUS EFIAPI VirtioPciDeviceWrite ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINTN FieldOffset, - IN UINTN FieldSize, - IN UINT64 Value + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINTN FieldOffset, + IN UINTN FieldSize, + IN UINT64 Value ) { - VIRTIO_PCI_DEVICE *Dev; + VIRTIO_PCI_DEVICE *Dev; Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This); - return VirtioPciIoWrite (Dev, - Dev->DeviceSpecificConfigurationOffset + FieldOffset, FieldSize, Value); + return VirtioPciIoWrite ( + Dev, + Dev->DeviceSpecificConfigurationOffset + FieldOffset, + FieldSize, + Value + ); } EFI_STATUS EFIAPI VirtioPciGetDeviceFeatures ( - IN VIRTIO_DEVICE_PROTOCOL *This, - OUT UINT64 *DeviceFeatures + IN VIRTIO_DEVICE_PROTOCOL *This, + OUT UINT64 *DeviceFeatures ) { - VIRTIO_PCI_DEVICE *Dev; - EFI_STATUS Status; - UINT32 Features32; + VIRTIO_PCI_DEVICE *Dev; + EFI_STATUS Status; + UINT32 Features32; if (DeviceFeatures == NULL) { return EFI_INVALID_PARAMETER; @@ -109,11 +117,17 @@ VirtioPciGetDeviceFeatures ( Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This); - Status = VirtioPciIoRead (Dev, VIRTIO_PCI_OFFSET_DEVICE_FEATURES, - sizeof (UINT32), sizeof (UINT32), &Features32); + Status = VirtioPciIoRead ( + Dev, + VIRTIO_PCI_OFFSET_DEVICE_FEATURES, + sizeof (UINT32), + sizeof (UINT32), + &Features32 + ); if (!EFI_ERROR (Status)) { *DeviceFeatures = Features32; } + return Status; } @@ -124,7 +138,7 @@ VirtioPciGetQueueSize ( OUT UINT16 *QueueNumMax ) { - VIRTIO_PCI_DEVICE *Dev; + VIRTIO_PCI_DEVICE *Dev; if (QueueNumMax == NULL) { return EFI_INVALID_PARAMETER; @@ -132,8 +146,13 @@ VirtioPciGetQueueSize ( Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This); - return VirtioPciIoRead (Dev, VIRTIO_PCI_OFFSET_QUEUE_SIZE, sizeof (UINT16), - sizeof (UINT16), QueueNumMax); + return VirtioPciIoRead ( + Dev, + VIRTIO_PCI_OFFSET_QUEUE_SIZE, + sizeof (UINT16), + sizeof (UINT16), + QueueNumMax + ); } EFI_STATUS @@ -143,7 +162,7 @@ VirtioPciGetDeviceStatus ( OUT UINT8 *DeviceStatus ) { - VIRTIO_PCI_DEVICE *Dev; + VIRTIO_PCI_DEVICE *Dev; if (DeviceStatus == NULL) { return EFI_INVALID_PARAMETER; @@ -151,26 +170,36 @@ VirtioPciGetDeviceStatus ( Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This); - return VirtioPciIoRead (Dev, VIRTIO_PCI_OFFSET_QUEUE_DEVICE_STATUS, - sizeof (UINT8), sizeof (UINT8), DeviceStatus); + return VirtioPciIoRead ( + Dev, + VIRTIO_PCI_OFFSET_QUEUE_DEVICE_STATUS, + sizeof (UINT8), + sizeof (UINT8), + DeviceStatus + ); } EFI_STATUS EFIAPI VirtioPciSetGuestFeatures ( IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT64 Features + IN UINT64 Features ) { - VIRTIO_PCI_DEVICE *Dev; + VIRTIO_PCI_DEVICE *Dev; Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This); if (Features > MAX_UINT32) { return EFI_UNSUPPORTED; } - return VirtioPciIoWrite (Dev, VIRTIO_PCI_OFFSET_GUEST_FEATURES, - sizeof (UINT32), Features); + + return VirtioPciIoWrite ( + Dev, + VIRTIO_PCI_OFFSET_GUEST_FEATURES, + sizeof (UINT32), + Features + ); } EFI_STATUS @@ -181,35 +210,43 @@ VirtioPciSetQueueAddress ( IN UINT64 RingBaseShift ) { - VIRTIO_PCI_DEVICE *Dev; + VIRTIO_PCI_DEVICE *Dev; ASSERT (RingBaseShift == 0); Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This); - return VirtioPciIoWrite (Dev, VIRTIO_PCI_OFFSET_QUEUE_ADDRESS, sizeof (UINT32), - (UINT32)((UINTN)Ring->Base >> EFI_PAGE_SHIFT)); + return VirtioPciIoWrite ( + Dev, + VIRTIO_PCI_OFFSET_QUEUE_ADDRESS, + sizeof (UINT32), + (UINT32)((UINTN)Ring->Base >> EFI_PAGE_SHIFT) + ); } EFI_STATUS EFIAPI VirtioPciSetQueueSel ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT16 Sel + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT16 Sel ) { - VIRTIO_PCI_DEVICE *Dev; + VIRTIO_PCI_DEVICE *Dev; Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This); - return VirtioPciIoWrite (Dev, VIRTIO_PCI_OFFSET_QUEUE_SELECT, sizeof (UINT16), - Sel); + return VirtioPciIoWrite ( + Dev, + VIRTIO_PCI_OFFSET_QUEUE_SELECT, + sizeof (UINT16), + Sel + ); } EFI_STATUS EFIAPI VirtioPciSetQueueAlignment ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT32 Alignment ) { @@ -219,7 +256,7 @@ VirtioPciSetQueueAlignment ( EFI_STATUS EFIAPI VirtioPciSetPageSize ( - IN VIRTIO_DEVICE_PROTOCOL *This, + IN VIRTIO_DEVICE_PROTOCOL *This, IN UINT32 PageSize ) { @@ -229,23 +266,27 @@ VirtioPciSetPageSize ( EFI_STATUS EFIAPI VirtioPciSetQueueNotify ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT16 Index + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT16 Index ) { - VIRTIO_PCI_DEVICE *Dev; + VIRTIO_PCI_DEVICE *Dev; Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This); - return VirtioPciIoWrite (Dev, VIRTIO_PCI_OFFSET_QUEUE_NOTIFY, sizeof (UINT16), - Index); + return VirtioPciIoWrite ( + Dev, + VIRTIO_PCI_OFFSET_QUEUE_NOTIFY, + sizeof (UINT16), + Index + ); } EFI_STATUS EFIAPI VirtioPciSetQueueSize ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT16 Size + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT16 Size ) { // @@ -258,16 +299,20 @@ VirtioPciSetQueueSize ( EFI_STATUS EFIAPI VirtioPciSetDeviceStatus ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN UINT8 DeviceStatus + IN VIRTIO_DEVICE_PROTOCOL *This, + IN UINT8 DeviceStatus ) { - VIRTIO_PCI_DEVICE *Dev; + VIRTIO_PCI_DEVICE *Dev; Dev = VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE (This); - return VirtioPciIoWrite (Dev, VIRTIO_PCI_OFFSET_QUEUE_DEVICE_STATUS, - sizeof (UINT8), DeviceStatus); + return VirtioPciIoWrite ( + Dev, + VIRTIO_PCI_OFFSET_QUEUE_DEVICE_STATUS, + sizeof (UINT8), + DeviceStatus + ); } EFI_STATUS @@ -278,7 +323,7 @@ VirtioPciAllocateSharedPages ( OUT VOID **HostAddress ) { - VOID *Buffer; + VOID *Buffer; Buffer = AllocatePages (NumPages); if (Buffer == NULL) { @@ -311,8 +356,8 @@ VirtioPciMapSharedBuffer ( OUT VOID **Mapping ) { - *DeviceAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) HostAddress; - *Mapping = NULL; + *DeviceAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress; + *Mapping = NULL; return EFI_SUCCESS; } @@ -320,8 +365,8 @@ VirtioPciMapSharedBuffer ( EFI_STATUS EFIAPI VirtioPciUnmapSharedBuffer ( - IN VIRTIO_DEVICE_PROTOCOL *This, - IN VOID *Mapping + IN VIRTIO_DEVICE_PROTOCOL *This, + IN VOID *Mapping ) { return EFI_SUCCESS; diff --git a/OvmfPkg/VirtioRngDxe/VirtioRng.c b/OvmfPkg/VirtioRngDxe/VirtioRng.c index 9525abdabe..aabc7230ab 100644 --- a/OvmfPkg/VirtioRngDxe/VirtioRng.c +++ b/OvmfPkg/VirtioRngDxe/VirtioRng.c @@ -64,12 +64,12 @@ STATIC EFI_STATUS EFIAPI VirtioRngGetInfo ( - IN EFI_RNG_PROTOCOL *This, - IN OUT UINTN *RNGAlgorithmListSize, - OUT EFI_RNG_ALGORITHM *RNGAlgorithmList + IN EFI_RNG_PROTOCOL *This, + IN OUT UINTN *RNGAlgorithmListSize, + OUT EFI_RNG_ALGORITHM *RNGAlgorithmList ) { - if (This == NULL || RNGAlgorithmListSize == NULL) { + if ((This == NULL) || (RNGAlgorithmListSize == NULL)) { return EFI_INVALID_PARAMETER; } @@ -121,31 +121,32 @@ STATIC EFI_STATUS EFIAPI VirtioRngGetRNG ( - IN EFI_RNG_PROTOCOL *This, - IN EFI_RNG_ALGORITHM *RNGAlgorithm OPTIONAL, - IN UINTN RNGValueLength, - OUT UINT8 *RNGValue + IN EFI_RNG_PROTOCOL *This, + IN EFI_RNG_ALGORITHM *RNGAlgorithm OPTIONAL, + IN UINTN RNGValueLength, + OUT UINT8 *RNGValue ) { - VIRTIO_RNG_DEV *Dev; - DESC_INDICES Indices; - volatile UINT8 *Buffer; - UINTN Index; - UINT32 Len; - UINT32 BufferSize; - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS DeviceAddress; - VOID *Mapping; - - if (This == NULL || RNGValueLength == 0 || RNGValue == NULL) { + VIRTIO_RNG_DEV *Dev; + DESC_INDICES Indices; + volatile UINT8 *Buffer; + UINTN Index; + UINT32 Len; + UINT32 BufferSize; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS DeviceAddress; + VOID *Mapping; + + if ((This == NULL) || (RNGValueLength == 0) || (RNGValue == NULL)) { return EFI_INVALID_PARAMETER; } // // We only support the raw algorithm, so reject requests for anything else // - if (RNGAlgorithm != NULL && - !CompareGuid (RNGAlgorithm, &gEfiRngAlgorithmRaw)) { + if ((RNGAlgorithm != NULL) && + !CompareGuid (RNGAlgorithm, &gEfiRngAlgorithmRaw)) + { return EFI_UNSUPPORTED; } @@ -180,17 +181,21 @@ VirtioRngGetRNG ( BufferSize = (UINT32)MIN (RNGValueLength - Index, (UINTN)MAX_UINT32); VirtioPrepare (&Dev->Ring, &Indices); - VirtioAppendDesc (&Dev->Ring, + VirtioAppendDesc ( + &Dev->Ring, DeviceAddress + Index, BufferSize, VRING_DESC_F_WRITE, - &Indices); + &Indices + ); if (VirtioFlush (Dev->VirtIo, 0, &Dev->Ring, &Indices, &Len) != - EFI_SUCCESS) { + EFI_SUCCESS) + { Status = EFI_DEVICE_ERROR; goto UnmapBuffer; } + ASSERT (Len > 0); ASSERT (Len <= BufferSize); } @@ -207,6 +212,7 @@ VirtioRngGetRNG ( for (Index = 0; Index < RNGValueLength; Index++) { RNGValue[Index] = Buffer[Index]; } + Status = EFI_SUCCESS; UnmapBuffer: @@ -227,32 +233,32 @@ STATIC EFI_STATUS EFIAPI VirtioRngInit ( - IN OUT VIRTIO_RNG_DEV *Dev + IN OUT VIRTIO_RNG_DEV *Dev ) { - UINT8 NextDevStat; - EFI_STATUS Status; - UINT16 QueueSize; - UINT64 Features; - UINT64 RingBaseShift; + UINT8 NextDevStat; + EFI_STATUS Status; + UINT16 QueueSize; + UINT64 Features; + UINT64 RingBaseShift; // // Execute virtio-0.9.5, 2.2.1 Device Initialization Sequence. // NextDevStat = 0; // step 1 -- reset device - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } NextDevStat |= VSTAT_ACK; // step 2 -- acknowledge device presence - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } NextDevStat |= VSTAT_DRIVER; // step 3 -- we know how to drive it - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } @@ -293,6 +299,7 @@ VirtioRngInit ( if (EFI_ERROR (Status)) { goto Failed; } + Status = Dev->VirtIo->GetQueueNumMax (Dev->VirtIo, &QueueSize); if (EFI_ERROR (Status)) { goto Failed; @@ -355,7 +362,7 @@ VirtioRngInit ( // if (Dev->VirtIo->Revision < VIRTIO_SPEC_REVISION (1, 0, 0)) { Features &= ~(UINT64)(VIRTIO_F_VERSION_1 | VIRTIO_F_IOMMU_PLATFORM); - Status = Dev->VirtIo->SetGuestFeatures (Dev->VirtIo, Features); + Status = Dev->VirtIo->SetGuestFeatures (Dev->VirtIo, Features); if (EFI_ERROR (Status)) { goto UnmapQueue; } @@ -365,7 +372,7 @@ VirtioRngInit ( // step 6 -- initialization complete // NextDevStat |= VSTAT_DRIVER_OK; - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto UnmapQueue; } @@ -373,8 +380,8 @@ VirtioRngInit ( // // populate the exported interface's attributes // - Dev->Rng.GetInfo = VirtioRngGetInfo; - Dev->Rng.GetRNG = VirtioRngGetRNG; + Dev->Rng.GetInfo = VirtioRngGetInfo; + Dev->Rng.GetRNG = VirtioRngGetRNG; return EFI_SUCCESS; @@ -395,12 +402,11 @@ Failed: return Status; // reached only via Failed above } - STATIC VOID EFIAPI VirtioRngUninit ( - IN OUT VIRTIO_RNG_DEV *Dev + IN OUT VIRTIO_RNG_DEV *Dev ) { // @@ -423,11 +429,11 @@ STATIC VOID EFIAPI VirtioRngExitBoot ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - VIRTIO_RNG_DEV *Dev; + VIRTIO_RNG_DEV *Dev; DEBUG ((DEBUG_VERBOSE, "%a: Context=0x%p\n", __FUNCTION__, Context)); // @@ -441,7 +447,6 @@ VirtioRngExitBoot ( Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, 0); } - // // Probe, start and stop functions of this driver, called by the DXE core for // specific devices. @@ -461,13 +466,13 @@ STATIC EFI_STATUS EFIAPI VirtioRngDriverBindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - VIRTIO_DEVICE_PROTOCOL *VirtIo; + EFI_STATUS Status; + VIRTIO_DEVICE_PROTOCOL *VirtIo; // // Attempt to open the device with the VirtIo set of interfaces. On success, @@ -496,8 +501,12 @@ VirtioRngDriverBindingSupported ( // We needed VirtIo access only transitorily, to see whether we support the // device or not. // - gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); return Status; } @@ -505,22 +514,27 @@ STATIC EFI_STATUS EFIAPI VirtioRngDriverBindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { VIRTIO_RNG_DEV *Dev; - EFI_STATUS Status; + EFI_STATUS Status; - Dev = (VIRTIO_RNG_DEV *) AllocateZeroPool (sizeof *Dev); + Dev = (VIRTIO_RNG_DEV *)AllocateZeroPool (sizeof *Dev); if (Dev == NULL) { return EFI_OUT_OF_RESOURCES; } - Status = gBS->OpenProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - (VOID **)&Dev->VirtIo, This->DriverBindingHandle, - DeviceHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); + Status = gBS->OpenProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + (VOID **)&Dev->VirtIo, + This->DriverBindingHandle, + DeviceHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { goto FreeVirtioRng; } @@ -533,8 +547,13 @@ VirtioRngDriverBindingStart ( goto CloseVirtIo; } - Status = gBS->CreateEvent (EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_CALLBACK, - &VirtioRngExitBoot, Dev, &Dev->ExitBoot); + Status = gBS->CreateEvent ( + EVT_SIGNAL_EXIT_BOOT_SERVICES, + TPL_CALLBACK, + &VirtioRngExitBoot, + Dev, + &Dev->ExitBoot + ); if (EFI_ERROR (Status)) { goto UninitDev; } @@ -544,9 +563,12 @@ VirtioRngDriverBindingStart ( // interface. // Dev->Signature = VIRTIO_RNG_SIG; - Status = gBS->InstallProtocolInterface (&DeviceHandle, - &gEfiRngProtocolGuid, EFI_NATIVE_INTERFACE, - &Dev->Rng); + Status = gBS->InstallProtocolInterface ( + &DeviceHandle, + &gEfiRngProtocolGuid, + EFI_NATIVE_INTERFACE, + &Dev->Rng + ); if (EFI_ERROR (Status)) { goto CloseExitBoot; } @@ -560,8 +582,12 @@ UninitDev: VirtioRngUninit (Dev); CloseVirtIo: - gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); FreeVirtioRng: FreePool (Dev); @@ -569,20 +595,19 @@ FreeVirtioRng: return Status; } - STATIC EFI_STATUS EFIAPI VirtioRngDriverBindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) { - EFI_STATUS Status; - EFI_RNG_PROTOCOL *Rng; - VIRTIO_RNG_DEV *Dev; + EFI_STATUS Status; + EFI_RNG_PROTOCOL *Rng; + VIRTIO_RNG_DEV *Dev; Status = gBS->OpenProtocol ( DeviceHandle, // candidate device @@ -601,8 +626,11 @@ VirtioRngDriverBindingStop ( // // Handle Stop() requests for in-use driver instances gracefully. // - Status = gBS->UninstallProtocolInterface (DeviceHandle, - &gEfiRngProtocolGuid, &Dev->Rng); + Status = gBS->UninstallProtocolInterface ( + DeviceHandle, + &gEfiRngProtocolGuid, + &Dev->Rng + ); if (EFI_ERROR (Status)) { return Status; } @@ -611,21 +639,24 @@ VirtioRngDriverBindingStop ( VirtioRngUninit (Dev); - gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); FreePool (Dev); return EFI_SUCCESS; } - // // The static object that groups the Supported() (ie. probe), Start() and // Stop() functions of the driver together. Refer to UEFI Spec 2.3.1 + Errata // C, 10.1 EFI Driver Binding Protocol. // -STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { +STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { &VirtioRngDriverBindingSupported, &VirtioRngDriverBindingStart, &VirtioRngDriverBindingStop, @@ -635,7 +666,6 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { NULL // DriverBindingHandle, ditto }; - // // The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and // EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name @@ -645,21 +675,21 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { // STATIC -EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { +EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { { "eng;en", L"Virtio Random Number Generator Driver" }, - { NULL, NULL } + { NULL, NULL } }; STATIC -EFI_COMPONENT_NAME_PROTOCOL gComponentName; +EFI_COMPONENT_NAME_PROTOCOL gComponentName; STATIC EFI_STATUS EFIAPI VirtioRngGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) { return LookupUnicodeString2 ( @@ -675,39 +705,38 @@ STATIC EFI_STATUS EFIAPI VirtioRngGetDeviceName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_HANDLE ChildHandle, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_HANDLE ChildHandle, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { return EFI_UNSUPPORTED; } STATIC -EFI_COMPONENT_NAME_PROTOCOL gComponentName = { +EFI_COMPONENT_NAME_PROTOCOL gComponentName = { &VirtioRngGetDriverName, &VirtioRngGetDeviceName, "eng" // SupportedLanguages, ISO 639-2 language codes }; STATIC -EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &VirtioRngGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &VirtioRngGetDeviceName, +EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&VirtioRngGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&VirtioRngGetDeviceName, "en" // SupportedLanguages, RFC 4646 language codes }; - // // Entry point of this driver. // EFI_STATUS EFIAPI VirtioRngEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { return EfiLibInstallDriverBindingComponentName2 ( diff --git a/OvmfPkg/VirtioRngDxe/VirtioRng.h b/OvmfPkg/VirtioRngDxe/VirtioRng.h index 21b9103097..2da99540a2 100644 --- a/OvmfPkg/VirtioRngDxe/VirtioRng.h +++ b/OvmfPkg/VirtioRngDxe/VirtioRng.h @@ -17,7 +17,7 @@ #include -#define VIRTIO_RNG_SIG SIGNATURE_32 ('V', 'R', 'N', 'G') +#define VIRTIO_RNG_SIG SIGNATURE_32 ('V', 'R', 'N', 'G') typedef struct { // diff --git a/OvmfPkg/VirtioScsiDxe/VirtioScsi.c b/OvmfPkg/VirtioScsiDxe/VirtioScsi.c index 935d154395..d44f9ebca7 100644 --- a/OvmfPkg/VirtioScsiDxe/VirtioScsi.c +++ b/OvmfPkg/VirtioScsiDxe/VirtioScsi.c @@ -76,7 +76,7 @@ (Value) \ )) -#define VIRTIO_CFG_READ(Dev, Field, Pointer) ((Dev)->VirtIo->ReadDevice ( \ +#define VIRTIO_CFG_READ(Dev, Field, Pointer) ((Dev)->VirtIo->ReadDevice ( \ (Dev)->VirtIo, \ OFFSET_OF_VSCSI (Field), \ SIZE_OF_VSCSI (Field), \ @@ -84,7 +84,6 @@ (Pointer) \ )) - // // UEFI Spec 2.3.1 + Errata C, 14.7 Extended SCSI Pass Thru Protocol specifies // the PassThru() interface. Beside returning a status code, the function must @@ -153,32 +152,32 @@ PopulateRequest ( OUT volatile VIRTIO_SCSI_REQ *Request ) { - UINTN Idx; + UINTN Idx; if ( // // bidirectional transfer was requested, but the host doesn't support it // - (Packet->InTransferLength > 0 && Packet->OutTransferLength > 0 && + ((Packet->InTransferLength > 0) && (Packet->OutTransferLength > 0) && !Dev->InOutSupported) || // // a target / LUN was addressed that's impossible to encode for the host // - Target > 0xFF || Lun >= 0x4000 || + (Target > 0xFF) || (Lun >= 0x4000) || // // Command Descriptor Block bigger than VIRTIO_SCSI_CDB_SIZE // - Packet->CdbLength > VIRTIO_SCSI_CDB_SIZE || + (Packet->CdbLength > VIRTIO_SCSI_CDB_SIZE) || // // From virtio-0.9.5, 2.3.2 Descriptor Table: // "no descriptor chain may be more than 2^32 bytes long in total". // - (UINT64) Packet->InTransferLength + Packet->OutTransferLength > SIZE_1GB - ) { - + ((UINT64)Packet->InTransferLength + Packet->OutTransferLength > SIZE_1GB) + ) + { // // this error code doesn't require updates to the Packet output fields // @@ -189,35 +188,35 @@ PopulateRequest ( // // addressed invalid device // - Target > Dev->MaxTarget || Lun > Dev->MaxLun || + (Target > Dev->MaxTarget) || (Lun > Dev->MaxLun) || // // invalid direction (there doesn't seem to be a macro for the "no data // transferred" "direction", eg. for TEST UNIT READY) // - Packet->DataDirection > EFI_EXT_SCSI_DATA_DIRECTION_BIDIRECTIONAL || + (Packet->DataDirection > EFI_EXT_SCSI_DATA_DIRECTION_BIDIRECTIONAL) || // // trying to receive, but destination pointer is NULL, or contradicting // transfer direction // - (Packet->InTransferLength > 0 && - (Packet->InDataBuffer == NULL || - Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_WRITE - ) - ) || + ((Packet->InTransferLength > 0) && + ((Packet->InDataBuffer == NULL) || + (Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_WRITE) + ) + ) || // // trying to send, but source pointer is NULL, or contradicting transfer // direction // - (Packet->OutTransferLength > 0 && - (Packet->OutDataBuffer == NULL || - Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_READ - ) + ((Packet->OutTransferLength > 0) && + ((Packet->OutDataBuffer == NULL) || + (Packet->DataDirection == EFI_EXT_SCSI_DATA_DIRECTION_READ) ) - ) { - + ) + ) + { // // this error code doesn't require updates to the Packet output fields // @@ -229,16 +228,17 @@ PopulateRequest ( // then the combined size of a bidirectional request will not exceed the // virtio-scsi device's transfer limit either. // - if (ALIGN_VALUE (Packet->OutTransferLength, 512) / 512 - > Dev->MaxSectors / 2 || - ALIGN_VALUE (Packet->InTransferLength, 512) / 512 - > Dev->MaxSectors / 2) { + if ((ALIGN_VALUE (Packet->OutTransferLength, 512) / 512 + > Dev->MaxSectors / 2) || + (ALIGN_VALUE (Packet->InTransferLength, 512) / 512 + > Dev->MaxSectors / 2)) + { Packet->InTransferLength = (Dev->MaxSectors / 2) * 512; Packet->OutTransferLength = (Dev->MaxSectors / 2) * 512; Packet->HostAdapterStatus = - EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; - Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_GOOD; - Packet->SenseDataLength = 0; + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; + Packet->TargetStatus = EFI_EXT_SCSI_STATUS_TARGET_GOOD; + Packet->SenseDataLength = 0; return EFI_BAD_BUFFER_SIZE; } @@ -247,22 +247,21 @@ PopulateRequest ( // Device Operation: request queues // Request->Lun[0] = 1; - Request->Lun[1] = (UINT8) Target; - Request->Lun[2] = (UINT8) (((UINT32)Lun >> 8) | 0x40); - Request->Lun[3] = (UINT8) Lun; + Request->Lun[1] = (UINT8)Target; + Request->Lun[2] = (UINT8)(((UINT32)Lun >> 8) | 0x40); + Request->Lun[3] = (UINT8)Lun; // // CopyMem() would cast away the "volatile" qualifier before access, which is // undefined behavior (ISO C99 6.7.3p5) // for (Idx = 0; Idx < Packet->CdbLength; ++Idx) { - Request->Cdb[Idx] = ((UINT8 *) Packet->Cdb)[Idx]; + Request->Cdb[Idx] = ((UINT8 *)Packet->Cdb)[Idx]; } return EFI_SUCCESS; } - /** Parse the virtio-scsi device's response, translate it to an EFI status code, @@ -288,22 +287,23 @@ STATIC EFI_STATUS EFIAPI ParseResponse ( - IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, - IN CONST volatile VIRTIO_SCSI_RESP *Response + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, + IN CONST volatile VIRTIO_SCSI_RESP *Response ) { - UINTN ResponseSenseLen; - UINTN Idx; + UINTN ResponseSenseLen; + UINTN Idx; // // return sense data (length and contents) in all cases, truncated if needed // ResponseSenseLen = MIN (Response->SenseLen, VIRTIO_SCSI_SENSE_SIZE); if (Packet->SenseDataLength > ResponseSenseLen) { - Packet->SenseDataLength = (UINT8) ResponseSenseLen; + Packet->SenseDataLength = (UINT8)ResponseSenseLen; } + for (Idx = 0; Idx < Packet->SenseDataLength; ++Idx) { - ((UINT8 *) Packet->SenseData)[Idx] = Response->Sense[Idx]; + ((UINT8 *)Packet->SenseData)[Idx] = Response->Sense[Idx]; } // @@ -321,9 +321,8 @@ ParseResponse ( // V @ OutTransferLength + InTransferLength -+- @ 0 // if (Response->Residual <= Packet->InTransferLength) { - Packet->InTransferLength -= Response->Residual; - } - else { + Packet->InTransferLength -= Response->Residual; + } else { Packet->OutTransferLength -= Response->Residual - Packet->InTransferLength; Packet->InTransferLength = 0; } @@ -338,50 +337,49 @@ ParseResponse ( // response code // switch (Response->Response) { - case VIRTIO_SCSI_S_OK: - Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OK; - return EFI_SUCCESS; + case VIRTIO_SCSI_S_OK: + Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OK; + return EFI_SUCCESS; - case VIRTIO_SCSI_S_OVERRUN: - Packet->HostAdapterStatus = - EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; - break; + case VIRTIO_SCSI_S_OVERRUN: + Packet->HostAdapterStatus = + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; + break; - case VIRTIO_SCSI_S_BAD_TARGET: - // - // This is non-intuitive but explicitly required by the - // EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru() specification for - // disconnected (but otherwise valid) target / LUN addresses. - // - Packet->HostAdapterStatus = - EFI_EXT_SCSI_STATUS_HOST_ADAPTER_TIMEOUT_COMMAND; - return EFI_TIMEOUT; + case VIRTIO_SCSI_S_BAD_TARGET: + // + // This is non-intuitive but explicitly required by the + // EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru() specification for + // disconnected (but otherwise valid) target / LUN addresses. + // + Packet->HostAdapterStatus = + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_TIMEOUT_COMMAND; + return EFI_TIMEOUT; - case VIRTIO_SCSI_S_RESET: - Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_BUS_RESET; - break; + case VIRTIO_SCSI_S_RESET: + Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_BUS_RESET; + break; - case VIRTIO_SCSI_S_BUSY: - Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OK; - return EFI_NOT_READY; + case VIRTIO_SCSI_S_BUSY: + Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OK; + return EFI_NOT_READY; - // - // Lump together the rest. The mapping for VIRTIO_SCSI_S_ABORTED is - // intentional as well, not an oversight. - // - case VIRTIO_SCSI_S_ABORTED: - case VIRTIO_SCSI_S_TRANSPORT_FAILURE: - case VIRTIO_SCSI_S_TARGET_FAILURE: - case VIRTIO_SCSI_S_NEXUS_FAILURE: - case VIRTIO_SCSI_S_FAILURE: - default: - Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OTHER; + // + // Lump together the rest. The mapping for VIRTIO_SCSI_S_ABORTED is + // intentional as well, not an oversight. + // + case VIRTIO_SCSI_S_ABORTED: + case VIRTIO_SCSI_S_TRANSPORT_FAILURE: + case VIRTIO_SCSI_S_TARGET_FAILURE: + case VIRTIO_SCSI_S_NEXUS_FAILURE: + case VIRTIO_SCSI_S_FAILURE: + default: + Packet->HostAdapterStatus = EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OTHER; } return EFI_DEVICE_ERROR; } - /** The function can be used to create a fake host adapter error. @@ -412,7 +410,6 @@ ReportHostAdapterError ( return EFI_DEVICE_ERROR; } - // // The next seven functions implement EFI_EXT_SCSI_PASS_THRU_PROTOCOL // for the virtio-scsi HBA. Refer to UEFI Spec 2.3.1 + Errata C, sections @@ -423,31 +420,31 @@ ReportHostAdapterError ( EFI_STATUS EFIAPI VirtioScsiPassThru ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun, - IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, - IN EFI_EVENT Event OPTIONAL + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, + IN EFI_EVENT Event OPTIONAL ) { - VSCSI_DEV *Dev; - UINT16 TargetValue; - EFI_STATUS Status; - volatile VIRTIO_SCSI_REQ Request; - volatile VIRTIO_SCSI_RESP *Response; - VOID *ResponseBuffer; - DESC_INDICES Indices; - VOID *RequestMapping; - VOID *ResponseMapping; - VOID *InDataMapping; - VOID *OutDataMapping; - EFI_PHYSICAL_ADDRESS RequestDeviceAddress; - EFI_PHYSICAL_ADDRESS ResponseDeviceAddress; - EFI_PHYSICAL_ADDRESS InDataDeviceAddress; - EFI_PHYSICAL_ADDRESS OutDataDeviceAddress; - VOID *InDataBuffer; - UINTN InDataNumPages; - BOOLEAN OutDataBufferIsMapped; + VSCSI_DEV *Dev; + UINT16 TargetValue; + EFI_STATUS Status; + volatile VIRTIO_SCSI_REQ Request; + volatile VIRTIO_SCSI_RESP *Response; + VOID *ResponseBuffer; + DESC_INDICES Indices; + VOID *RequestMapping; + VOID *ResponseMapping; + VOID *InDataMapping; + VOID *OutDataMapping; + EFI_PHYSICAL_ADDRESS RequestDeviceAddress; + EFI_PHYSICAL_ADDRESS ResponseDeviceAddress; + EFI_PHYSICAL_ADDRESS InDataDeviceAddress; + EFI_PHYSICAL_ADDRESS OutDataDeviceAddress; + VOID *InDataBuffer; + UINTN InDataNumPages; + BOOLEAN OutDataBufferIsMapped; // // Set InDataMapping,OutDataMapping,InDataDeviceAddress and OutDataDeviceAddress to @@ -458,14 +455,14 @@ VirtioScsiPassThru ( InDataDeviceAddress = 0; OutDataDeviceAddress = 0; - ZeroMem ((VOID*) &Request, sizeof (Request)); + ZeroMem ((VOID *)&Request, sizeof (Request)); Dev = VIRTIO_SCSI_FROM_PASS_THRU (This); CopyMem (&TargetValue, Target, sizeof TargetValue); - InDataBuffer = NULL; + InDataBuffer = NULL; OutDataBufferIsMapped = FALSE; - InDataNumPages = 0; + InDataNumPages = 0; Status = PopulateRequest (Dev, TargetValue, Lun, Packet, &Request); if (EFI_ERROR (Status)) { @@ -478,10 +475,11 @@ VirtioScsiPassThru ( Status = VirtioMapAllBytesInSharedBuffer ( Dev->VirtIo, VirtioOperationBusMasterRead, - (VOID *) &Request, + (VOID *)&Request, sizeof Request, &RequestDeviceAddress, - &RequestMapping); + &RequestMapping + ); if (EFI_ERROR (Status)) { return ReportHostAdapterError (Packet); } @@ -506,11 +504,11 @@ VirtioScsiPassThru ( // buffer into Packet->InDataBuffer. // InDataNumPages = EFI_SIZE_TO_PAGES ((UINTN)Packet->InTransferLength); - Status = Dev->VirtIo->AllocateSharedPages ( - Dev->VirtIo, - InDataNumPages, - &InDataBuffer - ); + Status = Dev->VirtIo->AllocateSharedPages ( + Dev->VirtIo, + InDataNumPages, + &InDataBuffer + ); if (EFI_ERROR (Status)) { Status = ReportHostAdapterError (Packet); goto UnmapRequestBuffer; @@ -653,8 +651,14 @@ VirtioScsiPassThru ( // EFI_NOT_READY would save us the effort, but it would also suggest that the // caller retry. // - if (VirtioFlush (Dev->VirtIo, VIRTIO_SCSI_REQUEST_QUEUE, &Dev->Ring, - &Indices, NULL) != EFI_SUCCESS) { + if (VirtioFlush ( + Dev->VirtIo, + VIRTIO_SCSI_REQUEST_QUEUE, + &Dev->Ring, + &Indices, + NULL + ) != EFI_SUCCESS) + { Status = ReportHostAdapterError (Packet); goto UnmapResponseBuffer; } @@ -701,19 +705,18 @@ UnmapRequestBuffer: return Status; } - EFI_STATUS EFIAPI VirtioScsiGetNextTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN OUT UINT8 **TargetPointer, - IN OUT UINT64 *Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN OUT UINT8 **TargetPointer, + IN OUT UINT64 *Lun ) { - UINT8 *Target; - UINTN Idx; - UINT16 LastTarget; - VSCSI_DEV *Dev; + UINT8 *Target; + UINTN Idx; + UINT16 LastTarget; + VSCSI_DEV *Dev; // // the TargetPointer input parameter is unnecessarily a pointer-to-pointer @@ -723,8 +726,9 @@ VirtioScsiGetNextTargetLun ( // // Search for first non-0xFF byte. If not found, return first target & LUN. // - for (Idx = 0; Idx < TARGET_MAX_BYTES && Target[Idx] == 0xFF; ++Idx) - ; + for (Idx = 0; Idx < TARGET_MAX_BYTES && Target[Idx] == 0xFF; ++Idx) { + } + if (Idx == TARGET_MAX_BYTES) { SetMem (Target, TARGET_MAX_BYTES, 0x00); *Lun = 0; @@ -740,7 +744,7 @@ VirtioScsiGetNextTargetLun ( // increment (target, LUN) pair if valid on input // Dev = VIRTIO_SCSI_FROM_PASS_THRU (This); - if (LastTarget > Dev->MaxTarget || *Lun > Dev->MaxLun) { + if ((LastTarget > Dev->MaxTarget) || (*Lun > Dev->MaxLun)) { return EFI_INVALID_PARAMETER; } @@ -759,19 +763,18 @@ VirtioScsiGetNextTargetLun ( return EFI_NOT_FOUND; } - EFI_STATUS EFIAPI VirtioScsiBuildDevicePath ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun, - IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath ) { - UINT16 TargetValue; - VSCSI_DEV *Dev; - SCSI_DEVICE_PATH *ScsiDevicePath; + UINT16 TargetValue; + VSCSI_DEV *Dev; + SCSI_DEVICE_PATH *ScsiDevicePath; if (DevicePath == NULL) { return EFI_INVALID_PARAMETER; @@ -779,7 +782,7 @@ VirtioScsiBuildDevicePath ( CopyMem (&TargetValue, Target, sizeof TargetValue); Dev = VIRTIO_SCSI_FROM_PASS_THRU (This); - if (TargetValue > Dev->MaxTarget || Lun > Dev->MaxLun || Lun > 0xFFFF) { + if ((TargetValue > Dev->MaxTarget) || (Lun > Dev->MaxLun) || (Lun > 0xFFFF)) { return EFI_NOT_FOUND; } @@ -790,43 +793,45 @@ VirtioScsiBuildDevicePath ( ScsiDevicePath->Header.Type = MESSAGING_DEVICE_PATH; ScsiDevicePath->Header.SubType = MSG_SCSI_DP; - ScsiDevicePath->Header.Length[0] = (UINT8) sizeof *ScsiDevicePath; - ScsiDevicePath->Header.Length[1] = (UINT8) (sizeof *ScsiDevicePath >> 8); + ScsiDevicePath->Header.Length[0] = (UINT8)sizeof *ScsiDevicePath; + ScsiDevicePath->Header.Length[1] = (UINT8)(sizeof *ScsiDevicePath >> 8); ScsiDevicePath->Pun = TargetValue; - ScsiDevicePath->Lun = (UINT16) Lun; + ScsiDevicePath->Lun = (UINT16)Lun; *DevicePath = &ScsiDevicePath->Header; return EFI_SUCCESS; } - EFI_STATUS EFIAPI VirtioScsiGetTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, - OUT UINT8 **TargetPointer, - OUT UINT64 *Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, + OUT UINT8 **TargetPointer, + OUT UINT64 *Lun ) { - SCSI_DEVICE_PATH *ScsiDevicePath; - VSCSI_DEV *Dev; - UINT8 *Target; + SCSI_DEVICE_PATH *ScsiDevicePath; + VSCSI_DEV *Dev; + UINT8 *Target; - if (DevicePath == NULL || TargetPointer == NULL || *TargetPointer == NULL || - Lun == NULL) { + if ((DevicePath == NULL) || (TargetPointer == NULL) || (*TargetPointer == NULL) || + (Lun == NULL)) + { return EFI_INVALID_PARAMETER; } - if (DevicePath->Type != MESSAGING_DEVICE_PATH || - DevicePath->SubType != MSG_SCSI_DP) { + if ((DevicePath->Type != MESSAGING_DEVICE_PATH) || + (DevicePath->SubType != MSG_SCSI_DP)) + { return EFI_UNSUPPORTED; } - ScsiDevicePath = (SCSI_DEVICE_PATH *) DevicePath; - Dev = VIRTIO_SCSI_FROM_PASS_THRU (This); - if (ScsiDevicePath->Pun > Dev->MaxTarget || - ScsiDevicePath->Lun > Dev->MaxLun) { + ScsiDevicePath = (SCSI_DEVICE_PATH *)DevicePath; + Dev = VIRTIO_SCSI_FROM_PASS_THRU (This); + if ((ScsiDevicePath->Pun > Dev->MaxTarget) || + (ScsiDevicePath->Lun > Dev->MaxLun)) + { return EFI_NOT_FOUND; } @@ -843,40 +848,37 @@ VirtioScsiGetTargetLun ( return EFI_SUCCESS; } - EFI_STATUS EFIAPI VirtioScsiResetChannel ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This ) { return EFI_UNSUPPORTED; } - EFI_STATUS EFIAPI VirtioScsiResetTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun ) { return EFI_UNSUPPORTED; } - EFI_STATUS EFIAPI VirtioScsiGetNextTarget ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN OUT UINT8 **TargetPointer + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN OUT UINT8 **TargetPointer ) { - UINT8 *Target; - UINTN Idx; - UINT16 LastTarget; - VSCSI_DEV *Dev; + UINT8 *Target; + UINTN Idx; + UINT16 LastTarget; + VSCSI_DEV *Dev; // // the TargetPointer input parameter is unnecessarily a pointer-to-pointer @@ -886,8 +888,9 @@ VirtioScsiGetNextTarget ( // // Search for first non-0xFF byte. If not found, return first target. // - for (Idx = 0; Idx < TARGET_MAX_BYTES && Target[Idx] == 0xFF; ++Idx) - ; + for (Idx = 0; Idx < TARGET_MAX_BYTES && Target[Idx] == 0xFF; ++Idx) { + } + if (Idx == TARGET_MAX_BYTES) { SetMem (Target, TARGET_MAX_BYTES, 0x00); return EFI_SUCCESS; @@ -915,39 +918,38 @@ VirtioScsiGetNextTarget ( return EFI_NOT_FOUND; } - STATIC EFI_STATUS EFIAPI VirtioScsiInit ( - IN OUT VSCSI_DEV *Dev + IN OUT VSCSI_DEV *Dev ) { - UINT8 NextDevStat; - EFI_STATUS Status; - UINT64 RingBaseShift; - UINT64 Features; - UINT16 MaxChannel; // for validation only - UINT32 NumQueues; // for validation only - UINT16 QueueSize; + UINT8 NextDevStat; + EFI_STATUS Status; + UINT64 RingBaseShift; + UINT64 Features; + UINT16 MaxChannel; // for validation only + UINT32 NumQueues; // for validation only + UINT16 QueueSize; // // Execute virtio-0.9.5, 2.2.1 Device Initialization Sequence. // NextDevStat = 0; // step 1 -- reset device - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } NextDevStat |= VSTAT_ACK; // step 2 -- acknowledge device presence - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } NextDevStat |= VSTAT_DRIVER; // step 3 -- we know how to drive it - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto Failed; } @@ -967,12 +969,14 @@ VirtioScsiInit ( if (EFI_ERROR (Status)) { goto Failed; } - Dev->InOutSupported = (BOOLEAN) ((Features & VIRTIO_SCSI_F_INOUT) != 0); + + Dev->InOutSupported = (BOOLEAN)((Features & VIRTIO_SCSI_F_INOUT) != 0); Status = VIRTIO_CFG_READ (Dev, MaxChannel, &MaxChannel); if (EFI_ERROR (Status)) { goto Failed; } + if (MaxChannel != 0) { // // this driver is for a single-channel virtio-scsi HBA @@ -985,6 +989,7 @@ VirtioScsiInit ( if (EFI_ERROR (Status)) { goto Failed; } + if (NumQueues < 1) { Status = EFI_UNSUPPORTED; goto Failed; @@ -994,6 +999,7 @@ VirtioScsiInit ( if (EFI_ERROR (Status)) { goto Failed; } + if (Dev->MaxTarget > PcdGet16 (PcdVirtioScsiMaxTargetLimit)) { Dev->MaxTarget = PcdGet16 (PcdVirtioScsiMaxTargetLimit); } @@ -1002,6 +1008,7 @@ VirtioScsiInit ( if (EFI_ERROR (Status)) { goto Failed; } + if (Dev->MaxLun > PcdGet32 (PcdVirtioScsiMaxLunLimit)) { Dev->MaxLun = PcdGet32 (PcdVirtioScsiMaxLunLimit); } @@ -1010,6 +1017,7 @@ VirtioScsiInit ( if (EFI_ERROR (Status)) { goto Failed; } + if (Dev->MaxSectors < 2) { // // We must be able to halve it for bidirectional transfers @@ -1040,10 +1048,12 @@ VirtioScsiInit ( if (EFI_ERROR (Status)) { goto Failed; } + Status = Dev->VirtIo->GetQueueNumMax (Dev->VirtIo, &QueueSize); if (EFI_ERROR (Status)) { goto Failed; } + // // VirtioScsiPassThru() uses at most four descriptors // @@ -1101,7 +1111,7 @@ VirtioScsiInit ( // if (Dev->VirtIo->Revision < VIRTIO_SPEC_REVISION (1, 0, 0)) { Features &= ~(UINT64)(VIRTIO_F_VERSION_1 | VIRTIO_F_IOMMU_PLATFORM); - Status = Dev->VirtIo->SetGuestFeatures (Dev->VirtIo, Features); + Status = Dev->VirtIo->SetGuestFeatures (Dev->VirtIo, Features); if (EFI_ERROR (Status)) { goto UnmapQueue; } @@ -1115,6 +1125,7 @@ VirtioScsiInit ( if (EFI_ERROR (Status)) { goto UnmapQueue; } + Status = VIRTIO_CFG_WRITE (Dev, SenseSize, VIRTIO_SCSI_SENSE_SIZE); if (EFI_ERROR (Status)) { goto UnmapQueue; @@ -1124,7 +1135,7 @@ VirtioScsiInit ( // step 6 -- initialization complete // NextDevStat |= VSTAT_DRIVER_OK; - Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); + Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat); if (EFI_ERROR (Status)) { goto UnmapQueue; } @@ -1184,12 +1195,11 @@ Failed: return Status; // reached only via Failed above } - STATIC VOID EFIAPI VirtioScsiUninit ( - IN OUT VSCSI_DEV *Dev + IN OUT VSCSI_DEV *Dev ) { // @@ -1207,11 +1217,10 @@ VirtioScsiUninit ( Dev->VirtIo->UnmapSharedBuffer (Dev->VirtIo, Dev->RingMap); VirtioRingUninit (Dev->VirtIo, &Dev->Ring); - SetMem (&Dev->PassThru, sizeof Dev->PassThru, 0x00); + SetMem (&Dev->PassThru, sizeof Dev->PassThru, 0x00); SetMem (&Dev->PassThruMode, sizeof Dev->PassThruMode, 0x00); } - // // Event notification function enqueued by ExitBootServices(). // @@ -1220,11 +1229,11 @@ STATIC VOID EFIAPI VirtioScsiExitBoot ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - VSCSI_DEV *Dev; + VSCSI_DEV *Dev; DEBUG ((DEBUG_VERBOSE, "%a: Context=0x%p\n", __FUNCTION__, Context)); // @@ -1238,7 +1247,6 @@ VirtioScsiExitBoot ( Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, 0); } - // // Probe, start and stop functions of this driver, called by the DXE core for // specific devices. @@ -1257,13 +1265,13 @@ VirtioScsiExitBoot ( EFI_STATUS EFIAPI VirtioScsiDriverBindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - VIRTIO_DEVICE_PROTOCOL *VirtIo; + EFI_STATUS Status; + VIRTIO_DEVICE_PROTOCOL *VirtIo; // // Attempt to open the device with the VirtIo set of interfaces. On success, @@ -1292,31 +1300,39 @@ VirtioScsiDriverBindingSupported ( // We needed VirtIo access only transitorily, to see whether we support the // device or not. // - gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); return Status; } - EFI_STATUS EFIAPI VirtioScsiDriverBindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - VSCSI_DEV *Dev; - EFI_STATUS Status; + VSCSI_DEV *Dev; + EFI_STATUS Status; - Dev = (VSCSI_DEV *) AllocateZeroPool (sizeof *Dev); + Dev = (VSCSI_DEV *)AllocateZeroPool (sizeof *Dev); if (Dev == NULL) { return EFI_OUT_OF_RESOURCES; } - Status = gBS->OpenProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - (VOID **)&Dev->VirtIo, This->DriverBindingHandle, - DeviceHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); + Status = gBS->OpenProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + (VOID **)&Dev->VirtIo, + This->DriverBindingHandle, + DeviceHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { goto FreeVirtioScsi; } @@ -1329,8 +1345,13 @@ VirtioScsiDriverBindingStart ( goto CloseVirtIo; } - Status = gBS->CreateEvent (EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_CALLBACK, - &VirtioScsiExitBoot, Dev, &Dev->ExitBoot); + Status = gBS->CreateEvent ( + EVT_SIGNAL_EXIT_BOOT_SERVICES, + TPL_CALLBACK, + &VirtioScsiExitBoot, + Dev, + &Dev->ExitBoot + ); if (EFI_ERROR (Status)) { goto UninitDev; } @@ -1340,9 +1361,12 @@ VirtioScsiDriverBindingStart ( // interface. // Dev->Signature = VSCSI_SIG; - Status = gBS->InstallProtocolInterface (&DeviceHandle, - &gEfiExtScsiPassThruProtocolGuid, EFI_NATIVE_INTERFACE, - &Dev->PassThru); + Status = gBS->InstallProtocolInterface ( + &DeviceHandle, + &gEfiExtScsiPassThruProtocolGuid, + EFI_NATIVE_INTERFACE, + &Dev->PassThru + ); if (EFI_ERROR (Status)) { goto CloseExitBoot; } @@ -1356,8 +1380,12 @@ UninitDev: VirtioScsiUninit (Dev); CloseVirtIo: - gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); FreeVirtioScsi: FreePool (Dev); @@ -1365,19 +1393,18 @@ FreeVirtioScsi: return Status; } - EFI_STATUS EFIAPI VirtioScsiDriverBindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) { - EFI_STATUS Status; - EFI_EXT_SCSI_PASS_THRU_PROTOCOL *PassThru; - VSCSI_DEV *Dev; + EFI_STATUS Status; + EFI_EXT_SCSI_PASS_THRU_PROTOCOL *PassThru; + VSCSI_DEV *Dev; Status = gBS->OpenProtocol ( DeviceHandle, // candidate device @@ -1396,8 +1423,11 @@ VirtioScsiDriverBindingStop ( // // Handle Stop() requests for in-use driver instances gracefully. // - Status = gBS->UninstallProtocolInterface (DeviceHandle, - &gEfiExtScsiPassThruProtocolGuid, &Dev->PassThru); + Status = gBS->UninstallProtocolInterface ( + DeviceHandle, + &gEfiExtScsiPassThruProtocolGuid, + &Dev->PassThru + ); if (EFI_ERROR (Status)) { return Status; } @@ -1406,21 +1436,24 @@ VirtioScsiDriverBindingStop ( VirtioScsiUninit (Dev); - gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gVirtioDeviceProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); FreePool (Dev); return EFI_SUCCESS; } - // // The static object that groups the Supported() (ie. probe), Start() and // Stop() functions of the driver together. Refer to UEFI Spec 2.3.1 + Errata // C, 10.1 EFI Driver Binding Protocol. // -STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { +STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { &VirtioScsiDriverBindingSupported, &VirtioScsiDriverBindingStart, &VirtioScsiDriverBindingStop, @@ -1430,7 +1463,6 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { NULL // DriverBindingHandle, ditto }; - // // The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and // EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name @@ -1444,20 +1476,20 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { // STATIC -EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { +EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { { "eng;en", L"Virtio SCSI Host Driver" }, - { NULL, NULL } + { NULL, NULL } }; STATIC -EFI_COMPONENT_NAME_PROTOCOL gComponentName; +EFI_COMPONENT_NAME_PROTOCOL gComponentName; EFI_STATUS EFIAPI VirtioScsiGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) { return LookupUnicodeString2 ( @@ -1472,39 +1504,38 @@ VirtioScsiGetDriverName ( EFI_STATUS EFIAPI VirtioScsiGetDeviceName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_HANDLE ChildHandle, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_HANDLE ChildHandle, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { return EFI_UNSUPPORTED; } STATIC -EFI_COMPONENT_NAME_PROTOCOL gComponentName = { +EFI_COMPONENT_NAME_PROTOCOL gComponentName = { &VirtioScsiGetDriverName, &VirtioScsiGetDeviceName, "eng" // SupportedLanguages, ISO 639-2 language codes }; STATIC -EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &VirtioScsiGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &VirtioScsiGetDeviceName, +EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&VirtioScsiGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&VirtioScsiGetDeviceName, "en" // SupportedLanguages, RFC 4646 language codes }; - // // Entry point of this driver. // EFI_STATUS EFIAPI VirtioScsiEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { return EfiLibInstallDriverBindingComponentName2 ( diff --git a/OvmfPkg/VirtioScsiDxe/VirtioScsi.h b/OvmfPkg/VirtioScsiDxe/VirtioScsi.h index af1901891f..e7aa16dc2f 100644 --- a/OvmfPkg/VirtioScsiDxe/VirtioScsi.h +++ b/OvmfPkg/VirtioScsiDxe/VirtioScsi.h @@ -18,7 +18,6 @@ #include - // // This driver supports 2-byte target identifiers and 4-byte LUN identifiers. // @@ -30,11 +29,10 @@ // AdapterId and our target identifiers. // #if TARGET_MAX_BYTES < 4 -# error "virtio-scsi requires TARGET_MAX_BYTES >= 4" + #error "virtio-scsi requires TARGET_MAX_BYTES >= 4" #endif - -#define VSCSI_SIG SIGNATURE_32 ('V', 'S', 'C', 'S') +#define VSCSI_SIG SIGNATURE_32 ('V', 'S', 'C', 'S') typedef struct { // @@ -44,23 +42,22 @@ typedef struct { // // field init function init depth // ---------------- ------------------ ---------- - UINT32 Signature; // DriverBindingStart 0 - VIRTIO_DEVICE_PROTOCOL *VirtIo; // DriverBindingStart 0 - EFI_EVENT ExitBoot; // DriverBindingStart 0 - BOOLEAN InOutSupported; // VirtioScsiInit 1 - UINT16 MaxTarget; // VirtioScsiInit 1 - UINT32 MaxLun; // VirtioScsiInit 1 - UINT32 MaxSectors; // VirtioScsiInit 1 - VRING Ring; // VirtioRingInit 2 - EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; // VirtioScsiInit 1 - EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; // VirtioScsiInit 1 - VOID *RingMap; // VirtioRingMap 2 + UINT32 Signature; // DriverBindingStart 0 + VIRTIO_DEVICE_PROTOCOL *VirtIo; // DriverBindingStart 0 + EFI_EVENT ExitBoot; // DriverBindingStart 0 + BOOLEAN InOutSupported; // VirtioScsiInit 1 + UINT16 MaxTarget; // VirtioScsiInit 1 + UINT32 MaxLun; // VirtioScsiInit 1 + UINT32 MaxSectors; // VirtioScsiInit 1 + VRING Ring; // VirtioRingInit 2 + EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; // VirtioScsiInit 1 + EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; // VirtioScsiInit 1 + VOID *RingMap; // VirtioRingMap 2 } VSCSI_DEV; #define VIRTIO_SCSI_FROM_PASS_THRU(PassThruPointer) \ CR (PassThruPointer, VSCSI_DEV, PassThru, VSCSI_SIG) - // // Probe, start and stop functions of this driver, called by the DXE core for // specific devices. @@ -73,31 +70,28 @@ typedef struct { EFI_STATUS EFIAPI VirtioScsiDriverBindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); - EFI_STATUS EFIAPI VirtioScsiDriverBindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); - EFI_STATUS EFIAPI VirtioScsiDriverBindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ); - // // The next seven functions implement EFI_EXT_SCSI_PASS_THRU_PROTOCOL // for the virtio-scsi HBA. Refer to UEFI Spec 2.3.1 + Errata C, sections @@ -108,67 +102,60 @@ VirtioScsiDriverBindingStop ( EFI_STATUS EFIAPI VirtioScsiPassThru ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun, - IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, - IN EFI_EVENT Event OPTIONAL + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, + IN EFI_EVENT Event OPTIONAL ); - EFI_STATUS EFIAPI VirtioScsiGetNextTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN OUT UINT8 **Target, - IN OUT UINT64 *Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN OUT UINT8 **Target, + IN OUT UINT64 *Lun ); - EFI_STATUS EFIAPI VirtioScsiBuildDevicePath ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun, - IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath ); - EFI_STATUS EFIAPI VirtioScsiGetTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, - OUT UINT8 **Target, - OUT UINT64 *Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, + OUT UINT8 **Target, + OUT UINT64 *Lun ); - EFI_STATUS EFIAPI VirtioScsiResetChannel ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This ); - EFI_STATUS EFIAPI VirtioScsiResetTargetLun ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN UINT8 *Target, - IN UINT64 Lun + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun ); - EFI_STATUS EFIAPI VirtioScsiGetNextTarget ( - IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, - IN OUT UINT8 **Target + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN OUT UINT8 **Target ); - // // The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and // EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name @@ -184,20 +171,19 @@ VirtioScsiGetNextTarget ( EFI_STATUS EFIAPI VirtioScsiGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ); - EFI_STATUS EFIAPI VirtioScsiGetDeviceName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_HANDLE ChildHandle, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_HANDLE ChildHandle, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ); #endif // _VIRTIO_SCSI_DXE_H_ diff --git a/OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.c b/OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.c index 60576f3cc6..e06bb25dfc 100644 --- a/OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.c +++ b/OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.c @@ -25,10 +25,10 @@ EFI_STATUS EFIAPI InstallAcpiTables ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable + IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable ) { - EFI_STATUS Status; + EFI_STATUS Status; if (XenDetected ()) { Status = InstallXenTables (AcpiTable); @@ -38,4 +38,3 @@ InstallAcpiTables ( return Status; } - diff --git a/OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.h b/OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.h index 47d9769ed1..ccb5b092ad 100644 --- a/OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.h +++ b/OvmfPkg/XenAcpiPlatformDxe/AcpiPlatform.h @@ -15,14 +15,13 @@ EFI_STATUS EFIAPI InstallXenTables ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol + IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol ); EFI_STATUS EFIAPI InstallAcpiTables ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable + IN EFI_ACPI_TABLE_PROTOCOL *AcpiTable ); #endif - diff --git a/OvmfPkg/XenAcpiPlatformDxe/EntryPoint.c b/OvmfPkg/XenAcpiPlatformDxe/EntryPoint.c index 1a23790a3b..3bd015223f 100644 --- a/OvmfPkg/XenAcpiPlatformDxe/EntryPoint.c +++ b/OvmfPkg/XenAcpiPlatformDxe/EntryPoint.c @@ -19,24 +19,23 @@ FindAcpiTableProtocol ( VOID ) { - EFI_STATUS Status; - EFI_ACPI_TABLE_PROTOCOL *AcpiTable; + EFI_STATUS Status; + EFI_ACPI_TABLE_PROTOCOL *AcpiTable; Status = gBS->LocateProtocol ( &gEfiAcpiTableProtocolGuid, NULL, - (VOID**)&AcpiTable + (VOID **)&AcpiTable ); ASSERT_EFI_ERROR (Status); return AcpiTable; } - EFI_STATUS EFIAPI AcpiPlatformEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { return InstallAcpiTables (FindAcpiTableProtocol ()); diff --git a/OvmfPkg/XenAcpiPlatformDxe/Xen.c b/OvmfPkg/XenAcpiPlatformDxe/Xen.c index 151376176f..cc2fa2cdcf 100644 --- a/OvmfPkg/XenAcpiPlatformDxe/Xen.c +++ b/OvmfPkg/XenAcpiPlatformDxe/Xen.c @@ -15,8 +15,8 @@ #include "AcpiPlatform.h" -#define XEN_ACPI_PHYSICAL_ADDRESS 0x000EA020 -#define XEN_BIOS_PHYSICAL_END 0x000FFFFF +#define XEN_ACPI_PHYSICAL_ADDRESS 0x000EA020 +#define XEN_BIOS_PHYSICAL_END 0x000FFFFF EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *XenAcpiRsdpStructurePtr = NULL; @@ -34,13 +34,13 @@ EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *XenAcpiRsdpStructurePtr = NULL; EFI_STATUS EFIAPI GetXenAcpiRsdp ( - OUT EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER **RsdpPtr + OUT EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER **RsdpPtr ) { - EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *RsdpStructurePtr; - UINT8 *XenAcpiPtr; - UINT8 Sum; - EFI_XEN_INFO *XenInfo; + EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *RsdpStructurePtr; + UINT8 *XenAcpiPtr; + UINT8 Sum; + EFI_XEN_INFO *XenInfo; // // Detect the RSDP structure @@ -52,8 +52,12 @@ GetXenAcpiRsdp ( XenInfo = XenGetInfoHOB (); ASSERT (XenInfo != NULL); if (XenInfo->RsdpPvh != NULL) { - DEBUG ((DEBUG_INFO, "%a: Use ACPI RSDP table at 0x%p\n", - gEfiCallerBaseName, XenInfo->RsdpPvh)); + DEBUG (( + DEBUG_INFO, + "%a: Use ACPI RSDP table at 0x%p\n", + gEfiCallerBaseName, + XenInfo->RsdpPvh + )); *RsdpPtr = XenInfo->RsdpPvh; return EFI_SUCCESS; } @@ -61,14 +65,14 @@ GetXenAcpiRsdp ( // // Otherwise, look for the HVM one // - for (XenAcpiPtr = (UINT8*)(UINTN) XEN_ACPI_PHYSICAL_ADDRESS; - XenAcpiPtr < (UINT8*)(UINTN) XEN_BIOS_PHYSICAL_END; - XenAcpiPtr += 0x10) { - + for (XenAcpiPtr = (UINT8 *)(UINTN)XEN_ACPI_PHYSICAL_ADDRESS; + XenAcpiPtr < (UINT8 *)(UINTN)XEN_BIOS_PHYSICAL_END; + XenAcpiPtr += 0x10) + { RsdpStructurePtr = (EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *) - (UINTN) XenAcpiPtr; + (UINTN)XenAcpiPtr; - if (!AsciiStrnCmp ((CHAR8 *) &RsdpStructurePtr->Signature, "RSD PTR ", 8)) { + if (!AsciiStrnCmp ((CHAR8 *)&RsdpStructurePtr->Signature, "RSD PTR ", 8)) { // // RSDP ACPI 1.0 checksum for 1.0/2.0/3.0 table. // This is only the first 20 bytes of the structure @@ -93,6 +97,7 @@ GetXenAcpiRsdp ( return EFI_ABORTED; } } + *RsdpPtr = RsdpStructurePtr; return EFI_SUCCESS; } @@ -119,31 +124,31 @@ GetXenAcpiRsdp ( EFI_STATUS EFIAPI InstallXenTables ( - IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol + IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol ) { - EFI_STATUS Status; - UINTN TableHandle; - - EFI_ACPI_DESCRIPTION_HEADER *Rsdt; - EFI_ACPI_DESCRIPTION_HEADER *Xsdt; - VOID *CurrentTableEntry; - UINTN CurrentTablePointer; - EFI_ACPI_DESCRIPTION_HEADER *CurrentTable; - UINTN Index; - UINTN NumberOfTableEntries; - EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt2Table; - EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt1Table; - EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs2Table; - EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs1Table; - EFI_ACPI_DESCRIPTION_HEADER *DsdtTable; - - Fadt2Table = NULL; - Fadt1Table = NULL; - Facs2Table = NULL; - Facs1Table = NULL; - DsdtTable = NULL; - TableHandle = 0; + EFI_STATUS Status; + UINTN TableHandle; + + EFI_ACPI_DESCRIPTION_HEADER *Rsdt; + EFI_ACPI_DESCRIPTION_HEADER *Xsdt; + VOID *CurrentTableEntry; + UINTN CurrentTablePointer; + EFI_ACPI_DESCRIPTION_HEADER *CurrentTable; + UINTN Index; + UINTN NumberOfTableEntries; + EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt2Table; + EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt1Table; + EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs2Table; + EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs1Table; + EFI_ACPI_DESCRIPTION_HEADER *DsdtTable; + + Fadt2Table = NULL; + Fadt1Table = NULL; + Facs2Table = NULL; + Facs1Table = NULL; + DsdtTable = NULL; + TableHandle = 0; NumberOfTableEntries = 0; // @@ -163,11 +168,11 @@ InstallXenTables ( // Retrieve the addresses of XSDT and // calculate the number of its table entries. // - Xsdt = (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) - XenAcpiRsdpStructurePtr->XsdtAddress; + Xsdt = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN) + XenAcpiRsdpStructurePtr->XsdtAddress; NumberOfTableEntries = (Xsdt->Length - - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / - sizeof (UINT64); + sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / + sizeof (UINT64); // // Install ACPI tables found in XSDT. @@ -176,11 +181,11 @@ InstallXenTables ( // // Get the table entry from XSDT // - CurrentTableEntry = (VOID *) ((UINT8 *) Xsdt + - sizeof (EFI_ACPI_DESCRIPTION_HEADER) + - Index * sizeof (UINT64)); - CurrentTablePointer = (UINTN) *(UINT64 *)CurrentTableEntry; - CurrentTable = (EFI_ACPI_DESCRIPTION_HEADER *) CurrentTablePointer; + CurrentTableEntry = (VOID *)((UINT8 *)Xsdt + + sizeof (EFI_ACPI_DESCRIPTION_HEADER) + + Index * sizeof (UINT64)); + CurrentTablePointer = (UINTN)*(UINT64 *)CurrentTableEntry; + CurrentTable = (EFI_ACPI_DESCRIPTION_HEADER *)CurrentTablePointer; // // Install the XSDT tables @@ -199,25 +204,24 @@ InstallXenTables ( // // Get the FACS and DSDT table address from the table FADT // - if (!AsciiStrnCmp ((CHAR8 *) &CurrentTable->Signature, "FACP", 4)) { + if (!AsciiStrnCmp ((CHAR8 *)&CurrentTable->Signature, "FACP", 4)) { Fadt2Table = (EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *) - (UINTN) CurrentTablePointer; + (UINTN)CurrentTablePointer; Facs2Table = (EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *) - (UINTN) Fadt2Table->FirmwareCtrl; - DsdtTable = (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) Fadt2Table->Dsdt; + (UINTN)Fadt2Table->FirmwareCtrl; + DsdtTable = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Fadt2Table->Dsdt; } } - } - else if (XenAcpiRsdpStructurePtr->RsdtAddress) { + } else if (XenAcpiRsdpStructurePtr->RsdtAddress) { // // Retrieve the addresses of RSDT and // calculate the number of its table entries. // - Rsdt = (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) - XenAcpiRsdpStructurePtr->RsdtAddress; + Rsdt = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN) + XenAcpiRsdpStructurePtr->RsdtAddress; NumberOfTableEntries = (Rsdt->Length - - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / - sizeof (UINT32); + sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / + sizeof (UINT32); // // Install ACPI tables found in XSDT. @@ -226,11 +230,11 @@ InstallXenTables ( // // Get the table entry from RSDT // - CurrentTableEntry = (UINT32 *) ((UINT8 *) Rsdt + - sizeof (EFI_ACPI_DESCRIPTION_HEADER) + - Index * sizeof (UINT32)); + CurrentTableEntry = (UINT32 *)((UINT8 *)Rsdt + + sizeof (EFI_ACPI_DESCRIPTION_HEADER) + + Index * sizeof (UINT32)); CurrentTablePointer = *(UINT32 *)CurrentTableEntry; - CurrentTable = (EFI_ACPI_DESCRIPTION_HEADER *) CurrentTablePointer; + CurrentTable = (EFI_ACPI_DESCRIPTION_HEADER *)CurrentTablePointer; // // Install the RSDT tables @@ -249,12 +253,12 @@ InstallXenTables ( // // Get the FACS and DSDT table address from the table FADT // - if (!AsciiStrnCmp ((CHAR8 *) &CurrentTable->Signature, "FACP", 4)) { + if (!AsciiStrnCmp ((CHAR8 *)&CurrentTable->Signature, "FACP", 4)) { Fadt1Table = (EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE *) - (UINTN) CurrentTablePointer; + (UINTN)CurrentTablePointer; Facs1Table = (EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *) - (UINTN) Fadt1Table->FirmwareCtrl; - DsdtTable = (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) Fadt1Table->Dsdt; + (UINTN)Fadt1Table->FirmwareCtrl; + DsdtTable = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Fadt1Table->Dsdt; } } } @@ -275,8 +279,7 @@ InstallXenTables ( if (EFI_ERROR (Status)) { return Status; } - } - else if (Fadt1Table) { + } else if (Fadt1Table) { // // FACS 1.0 // @@ -313,4 +316,3 @@ InstallXenTables ( return EFI_SUCCESS; } - diff --git a/OvmfPkg/XenBusDxe/ComponentName.c b/OvmfPkg/XenBusDxe/ComponentName.c index 83e7628a2c..9141e9264f 100644 --- a/OvmfPkg/XenBusDxe/ComponentName.c +++ b/OvmfPkg/XenBusDxe/ComponentName.c @@ -14,7 +14,7 @@ /// GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gXenBusDxeComponentName = { - (EFI_COMPONENT_NAME_GET_DRIVER_NAME) XenBusDxeComponentNameGetDriverName, + (EFI_COMPONENT_NAME_GET_DRIVER_NAME)XenBusDxeComponentNameGetDriverName, (EFI_COMPONENT_NAME_GET_CONTROLLER_NAME)XenBusDxeComponentNameGetControllerName, "eng" }; @@ -33,18 +33,18 @@ EFI_COMPONENT_NAME2_PROTOCOL gXenBusDxeComponentName2 = { /// Table of driver names /// GLOBAL_REMOVE_IF_UNREFERENCED -EFI_UNICODE_STRING_TABLE mXenBusDxeDriverNameTable[] = { +EFI_UNICODE_STRING_TABLE mXenBusDxeDriverNameTable[] = { { "eng;en", (CHAR16 *)L"XenBus Bus Driver" }, - { NULL, NULL } + { NULL, NULL } }; /// /// Table of controller names /// GLOBAL_REMOVE_IF_UNREFERENCED -EFI_UNICODE_STRING_TABLE mXenBusDxeControllerNameTable[] = { +EFI_UNICODE_STRING_TABLE mXenBusDxeControllerNameTable[] = { { "eng;en", (CHAR16 *)L"XenBus Controller" }, - { NULL, NULL } + { NULL, NULL } }; /** diff --git a/OvmfPkg/XenBusDxe/EventChannel.c b/OvmfPkg/XenBusDxe/EventChannel.c index 6c905b511f..810c9bdb7f 100644 --- a/OvmfPkg/XenBusDxe/EventChannel.c +++ b/OvmfPkg/XenBusDxe/EventChannel.c @@ -15,14 +15,14 @@ UINT32 XenEventChannelNotify ( - IN XENBUS_DEVICE *Dev, - IN evtchn_port_t Port + IN XENBUS_DEVICE *Dev, + IN evtchn_port_t Port ) { - INTN ReturnCode; - evtchn_send_t Send; + INTN ReturnCode; + evtchn_send_t Send; - Send.port = Port; + Send.port = Port; ReturnCode = XenHypercallEventChannelOp (EVTCHNOP_send, &Send); return (UINT32)ReturnCode; } @@ -30,23 +30,25 @@ XenEventChannelNotify ( UINT32 EFIAPI XenBusEventChannelAllocate ( - IN XENBUS_PROTOCOL *This, - IN domid_t DomainId, - OUT evtchn_port_t *Port + IN XENBUS_PROTOCOL *This, + IN domid_t DomainId, + OUT evtchn_port_t *Port ) { - evtchn_alloc_unbound_t Parameter; - UINT32 ReturnCode; + evtchn_alloc_unbound_t Parameter; + UINT32 ReturnCode; - Parameter.dom = DOMID_SELF; + Parameter.dom = DOMID_SELF; Parameter.remote_dom = DomainId; - ReturnCode = (UINT32)XenHypercallEventChannelOp ( + ReturnCode = (UINT32)XenHypercallEventChannelOp ( EVTCHNOP_alloc_unbound, - &Parameter); + &Parameter + ); if (ReturnCode != 0) { DEBUG ((DEBUG_ERROR, "ERROR: alloc_unbound failed with rc=%d", ReturnCode)); return ReturnCode; } + *Port = Parameter.port; return ReturnCode; } @@ -54,24 +56,24 @@ XenBusEventChannelAllocate ( UINT32 EFIAPI XenBusEventChannelNotify ( - IN XENBUS_PROTOCOL *This, - IN evtchn_port_t Port + IN XENBUS_PROTOCOL *This, + IN evtchn_port_t Port ) { - XENBUS_PRIVATE_DATA *Private; + XENBUS_PRIVATE_DATA *Private; - Private = XENBUS_PRIVATE_DATA_FROM_THIS(This); + Private = XENBUS_PRIVATE_DATA_FROM_THIS (This); return XenEventChannelNotify (Private->Dev, Port); } UINT32 EFIAPI XenBusEventChannelClose ( - IN XENBUS_PROTOCOL *This, - IN evtchn_port_t Port + IN XENBUS_PROTOCOL *This, + IN evtchn_port_t Port ) { - evtchn_close_t Close; + evtchn_close_t Close; Close.port = Port; return (UINT32)XenHypercallEventChannelOp (EVTCHNOP_close, &Close); diff --git a/OvmfPkg/XenBusDxe/EventChannel.h b/OvmfPkg/XenBusDxe/EventChannel.h index 793571fab6..1e748825dd 100644 --- a/OvmfPkg/XenBusDxe/EventChannel.h +++ b/OvmfPkg/XenBusDxe/EventChannel.h @@ -6,6 +6,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ + #ifndef __XENBUS_EVENT_CHANNEL_H #define __XENBUS_EVENT_CHANNEL_H @@ -23,8 +24,8 @@ **/ UINT32 XenEventChannelNotify ( - IN XENBUS_DEVICE *Dev, - IN evtchn_port_t Port + IN XENBUS_DEVICE *Dev, + IN evtchn_port_t Port ); /* @@ -44,9 +45,9 @@ XenEventChannelNotify ( UINT32 EFIAPI XenBusEventChannelAllocate ( - IN XENBUS_PROTOCOL *This, - IN domid_t DomainId, - OUT evtchn_port_t *Port + IN XENBUS_PROTOCOL *This, + IN domid_t DomainId, + OUT evtchn_port_t *Port ); /** @@ -60,8 +61,8 @@ XenBusEventChannelAllocate ( UINT32 EFIAPI XenBusEventChannelNotify ( - IN XENBUS_PROTOCOL *This, - IN evtchn_port_t Port + IN XENBUS_PROTOCOL *This, + IN evtchn_port_t Port ); /** @@ -75,8 +76,8 @@ XenBusEventChannelNotify ( UINT32 EFIAPI XenBusEventChannelClose ( - IN XENBUS_PROTOCOL *This, - IN evtchn_port_t Port + IN XENBUS_PROTOCOL *This, + IN evtchn_port_t Port ); #endif diff --git a/OvmfPkg/XenBusDxe/GrantTable.c b/OvmfPkg/XenBusDxe/GrantTable.c index 58d687abad..76e0e8f17f 100644 --- a/OvmfPkg/XenBusDxe/GrantTable.c +++ b/OvmfPkg/XenBusDxe/GrantTable.c @@ -20,31 +20,31 @@ #include "GrantTable.h" -#define NR_RESERVED_ENTRIES 8 +#define NR_RESERVED_ENTRIES 8 -#define NR_GRANT_FRAMES (FixedPcdGet32 (PcdXenGrantFrames)) -#define NR_GRANT_ENTRIES (NR_GRANT_FRAMES * EFI_PAGE_SIZE / sizeof(grant_entry_v1_t)) +#define NR_GRANT_FRAMES (FixedPcdGet32 (PcdXenGrantFrames)) +#define NR_GRANT_ENTRIES (NR_GRANT_FRAMES * EFI_PAGE_SIZE / sizeof(grant_entry_v1_t)) -STATIC grant_entry_v1_t *GrantTable = NULL; -STATIC grant_ref_t GrantList[NR_GRANT_ENTRIES]; -STATIC EFI_LOCK mGrantListLock; +STATIC grant_entry_v1_t *GrantTable = NULL; +STATIC grant_ref_t GrantList[NR_GRANT_ENTRIES]; +STATIC EFI_LOCK mGrantListLock; #ifdef GNT_DEBUG -STATIC BOOLEAN GrantInUseList[NR_GRANT_ENTRIES]; +STATIC BOOLEAN GrantInUseList[NR_GRANT_ENTRIES]; #endif STATIC VOID XenGrantTablePutFreeEntry ( - grant_ref_t Ref + grant_ref_t Ref ) { EfiAcquireLock (&mGrantListLock); -#ifdef GNT_DEBUG + #ifdef GNT_DEBUG ASSERT (GrantInUseList[Ref]); GrantInUseList[Ref] = FALSE; -#endif + #endif GrantList[Ref] = GrantList[0]; - GrantList[0] = Ref; + GrantList[0] = Ref; EfiReleaseLock (&mGrantListLock); } @@ -54,16 +54,16 @@ XenGrantTableGetFreeEntry ( VOID ) { - grant_ref_t Ref; + grant_ref_t Ref; EfiAcquireLock (&mGrantListLock); Ref = GrantList[0]; ASSERT (Ref >= NR_RESERVED_ENTRIES && Ref < NR_GRANT_ENTRIES); GrantList[0] = GrantList[Ref]; -#ifdef GNT_DEBUG + #ifdef GNT_DEBUG ASSERT (!GrantInUseList[Ref]); GrantInUseList[Ref] = TRUE; -#endif + #endif EfiReleaseLock (&mGrantListLock); return Ref; } @@ -76,11 +76,11 @@ XenGrantTableGrantAccess ( IN BOOLEAN ReadOnly ) { - grant_ref_t Ref; - UINT16 Flags; + grant_ref_t Ref; + UINT16 Flags; ASSERT (GrantTable != NULL); - Ref = XenGrantTableGetFreeEntry (); + Ref = XenGrantTableGetFreeEntry (); GrantTable[Ref].frame = (UINT32)Frame; GrantTable[Ref].domid = DomainId; MemoryFence (); @@ -88,6 +88,7 @@ XenGrantTableGrantAccess ( if (ReadOnly) { Flags |= GTF_readonly; } + GrantTable[Ref].flags = Flags; return Ref; @@ -96,10 +97,10 @@ XenGrantTableGrantAccess ( STATIC EFI_STATUS XenGrantTableEndAccess ( - grant_ref_t Ref + grant_ref_t Ref ) { - UINT16 Flags, OldFlags; + UINT16 Flags, OldFlags; ASSERT (GrantTable != NULL); ASSERT (Ref >= NR_RESERVED_ENTRIES && Ref < NR_GRANT_ENTRIES); @@ -110,6 +111,7 @@ XenGrantTableEndAccess ( DEBUG ((DEBUG_WARN, "WARNING: g.e. still in use! (%x)\n", Flags)); return EFI_NOT_READY; } + OldFlags = InterlockedCompareExchange16 (&GrantTable[Ref].flags, Flags, 0); } while (OldFlags != Flags); @@ -122,40 +124,42 @@ XenGrantTableInit ( IN XENBUS_DEVICE *Dev ) { - xen_add_to_physmap_t Parameters; - INTN Index; - INTN ReturnCode; + xen_add_to_physmap_t Parameters; + INTN Index; + INTN ReturnCode; -#ifdef GNT_DEBUG - SetMem(GrantInUseList, sizeof (GrantInUseList), 1); -#endif + #ifdef GNT_DEBUG + SetMem (GrantInUseList, sizeof (GrantInUseList), 1); + #endif EfiInitializeLock (&mGrantListLock, TPL_NOTIFY); for (Index = NR_RESERVED_ENTRIES; Index < NR_GRANT_ENTRIES; Index++) { XenGrantTablePutFreeEntry ((grant_ref_t)Index); } - GrantTable = (VOID*)(UINTN) Dev->XenIo->GrantTableAddress; + GrantTable = (VOID *)(UINTN)Dev->XenIo->GrantTableAddress; for (Index = 0; Index < NR_GRANT_FRAMES; Index++) { Parameters.domid = DOMID_SELF; - Parameters.idx = Index; + Parameters.idx = Index; Parameters.space = XENMAPSPACE_grant_table; - Parameters.gpfn = (xen_pfn_t) ((UINTN) GrantTable >> EFI_PAGE_SHIFT) + Index; - ReturnCode = XenHypercallMemoryOp (XENMEM_add_to_physmap, &Parameters); + Parameters.gpfn = (xen_pfn_t)((UINTN)GrantTable >> EFI_PAGE_SHIFT) + Index; + ReturnCode = XenHypercallMemoryOp (XENMEM_add_to_physmap, &Parameters); if (ReturnCode != 0) { - DEBUG ((DEBUG_ERROR, + DEBUG (( + DEBUG_ERROR, "Xen GrantTable, add_to_physmap hypercall error: %Ld\n", - (INT64)ReturnCode)); + (INT64)ReturnCode + )); } } } VOID XenGrantTableDeinit ( - XENBUS_DEVICE *Dev + XENBUS_DEVICE *Dev ) { - INTN ReturnCode, Index; - xen_remove_from_physmap_t Parameters; + INTN ReturnCode, Index; + xen_remove_from_physmap_t Parameters; if (GrantTable == NULL) { return; @@ -163,27 +167,33 @@ XenGrantTableDeinit ( for (Index = NR_GRANT_FRAMES - 1; Index >= 0; Index--) { Parameters.domid = DOMID_SELF; - Parameters.gpfn = (xen_pfn_t) ((UINTN) GrantTable >> EFI_PAGE_SHIFT) + Index; - DEBUG ((DEBUG_INFO, "Xen GrantTable, removing %Lx\n", - (UINT64)Parameters.gpfn)); + Parameters.gpfn = (xen_pfn_t)((UINTN)GrantTable >> EFI_PAGE_SHIFT) + Index; + DEBUG (( + DEBUG_INFO, + "Xen GrantTable, removing %Lx\n", + (UINT64)Parameters.gpfn + )); ReturnCode = XenHypercallMemoryOp (XENMEM_remove_from_physmap, &Parameters); if (ReturnCode != 0) { - DEBUG ((DEBUG_ERROR, + DEBUG (( + DEBUG_ERROR, "Xen GrantTable, remove_from_physmap hypercall error: %Ld\n", - (INT64)ReturnCode)); + (INT64)ReturnCode + )); } } + GrantTable = NULL; } EFI_STATUS EFIAPI XenBusGrantAccess ( - IN XENBUS_PROTOCOL *This, - IN domid_t DomainId, - IN UINTN Frame, // MFN - IN BOOLEAN ReadOnly, - OUT grant_ref_t *RefPtr + IN XENBUS_PROTOCOL *This, + IN domid_t DomainId, + IN UINTN Frame, // MFN + IN BOOLEAN ReadOnly, + OUT grant_ref_t *RefPtr ) { *RefPtr = XenGrantTableGrantAccess (DomainId, Frame, ReadOnly); diff --git a/OvmfPkg/XenBusDxe/GrantTable.h b/OvmfPkg/XenBusDxe/GrantTable.h index 0c1e076337..3d5c98e85d 100644 --- a/OvmfPkg/XenBusDxe/GrantTable.h +++ b/OvmfPkg/XenBusDxe/GrantTable.h @@ -9,6 +9,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ + #ifndef __GNTTAB_H__ #define __GNTTAB_H__ @@ -46,11 +47,11 @@ XenGrantTableDeinit ( EFI_STATUS EFIAPI XenBusGrantAccess ( - IN XENBUS_PROTOCOL *This, - IN domid_t DomainId, - IN UINTN Frame, // MFN - IN BOOLEAN ReadOnly, - OUT grant_ref_t *RefPtr + IN XENBUS_PROTOCOL *This, + IN domid_t DomainId, + IN UINTN Frame, // MFN + IN BOOLEAN ReadOnly, + OUT grant_ref_t *RefPtr ); /** diff --git a/OvmfPkg/XenBusDxe/Helpers.c b/OvmfPkg/XenBusDxe/Helpers.c index b22f9c5b0d..753ac107fa 100644 --- a/OvmfPkg/XenBusDxe/Helpers.c +++ b/OvmfPkg/XenBusDxe/Helpers.c @@ -1,8 +1,8 @@ #include "XenBusDxe.h" -CHAR8* +CHAR8 * AsciiStrDup ( - IN CONST CHAR8* Str + IN CONST CHAR8 *Str ) { return AllocateCopyPool (AsciiStrSize (Str), Str); diff --git a/OvmfPkg/XenBusDxe/TestAndClearBit.c b/OvmfPkg/XenBusDxe/TestAndClearBit.c index 989ab70358..4d51064718 100644 --- a/OvmfPkg/XenBusDxe/TestAndClearBit.c +++ b/OvmfPkg/XenBusDxe/TestAndClearBit.c @@ -14,12 +14,12 @@ INT32 EFIAPI TestAndClearBit ( - IN INT32 Bit, - IN VOID *Address + IN INT32 Bit, + IN VOID *Address ) { - UINT16 Word, Read; - UINT16 Mask; + UINT16 Word, Read; + UINT16 Mask; // // Calculate the effective address relative to 'Address' based on the @@ -27,14 +27,15 @@ TestAndClearBit ( // ensure we round towards -Inf, and end up with a positive shift in // 'Bit', even if 'Bit' itself is negative. // - Address = (VOID*)((UINT8*) Address + ((Bit >> 4) * sizeof(UINT16))); - Mask = 1U << (Bit & 15); + Address = (VOID *)((UINT8 *)Address + ((Bit >> 4) * sizeof (UINT16))); + Mask = 1U << (Bit & 15); - for (Word = *(UINT16 *) Address; Word & Mask; Word = Read) { + for (Word = *(UINT16 *)Address; Word &Mask; Word = Read) { Read = InterlockedCompareExchange16 (Address, Word, Word & ~Mask); if (Read == Word) { return 1; } } + return 0; } diff --git a/OvmfPkg/XenBusDxe/XenBus.c b/OvmfPkg/XenBusDxe/XenBus.c index f8a41b6d36..7b67670ccb 100644 --- a/OvmfPkg/XenBusDxe/XenBus.c +++ b/OvmfPkg/XenBusDxe/XenBus.c @@ -26,16 +26,16 @@ #include -STATIC XENBUS_PRIVATE_DATA gXenBusPrivateData; +STATIC XENBUS_PRIVATE_DATA gXenBusPrivateData; -STATIC XENBUS_DEVICE_PATH gXenBusDevicePathTemplate = { +STATIC XENBUS_DEVICE_PATH gXenBusDevicePathTemplate = { { // Vendor { // Vendor.Header HARDWARE_DEVICE_PATH, // Vendor.Header.Type HW_VENDOR_DP, // Vendor.Header.SubType { - (UINT8) (sizeof (XENBUS_DEVICE_PATH)), // Vendor.Header.Length[0] - (UINT8) (sizeof (XENBUS_DEVICE_PATH) >> 8), // Vendor.Header.Length[1] + (UINT8)(sizeof (XENBUS_DEVICE_PATH)), // Vendor.Header.Length[0] + (UINT8)(sizeof (XENBUS_DEVICE_PATH) >> 8), // Vendor.Header.Length[1] } }, XENBUS_PROTOCOL_GUID, // Vendor.Guid @@ -44,7 +44,6 @@ STATIC XENBUS_DEVICE_PATH gXenBusDevicePathTemplate = { 0 // DeviceId }; - /** Search our internal record of configured devices (not the XenStore) to determine if the XenBus device indicated by Node is known to the system. @@ -57,13 +56,13 @@ STATIC XENBUS_DEVICE_PATH gXenBusDevicePathTemplate = { STATIC XENBUS_PRIVATE_DATA * XenBusDeviceInitialized ( - IN XENBUS_DEVICE *Dev, - IN CONST CHAR8 *Node + IN XENBUS_DEVICE *Dev, + IN CONST CHAR8 *Node ) { - LIST_ENTRY *Entry; - XENBUS_PRIVATE_DATA *Child; - XENBUS_PRIVATE_DATA *Result; + LIST_ENTRY *Entry; + XENBUS_PRIVATE_DATA *Child; + XENBUS_PRIVATE_DATA *Result; if (IsListEmpty (&Dev->ChildList)) { return NULL; @@ -72,7 +71,8 @@ XenBusDeviceInitialized ( Result = NULL; for (Entry = GetFirstNode (&Dev->ChildList); !IsNodeAtEnd (&Dev->ChildList, Entry); - Entry = GetNextNode (&Dev->ChildList, Entry)) { + Entry = GetNextNode (&Dev->ChildList, Entry)) + { Child = XENBUS_PRIVATE_DATA_FROM_LINK (Entry); if (!AsciiStrCmp (Child->XenBusIo.Node, Node)) { Result = Child; @@ -86,12 +86,12 @@ XenBusDeviceInitialized ( STATIC XenbusState XenBusReadDriverState ( - IN CONST CHAR8 *Path + IN CONST CHAR8 *Path ) { - XenbusState State; - CHAR8 *Ptr = NULL; - XENSTORE_STATUS Status; + XenbusState State; + CHAR8 *Ptr = NULL; + XENSTORE_STATUS Status; Status = XenStoreRead (XST_NIL, Path, "state", NULL, (VOID **)&Ptr); if (Status != XENSTORE_STATUS_SUCCESS) { @@ -113,24 +113,30 @@ XenBusReadDriverState ( STATIC EFI_STATUS XenBusAddDevice ( - XENBUS_DEVICE *Dev, - CONST CHAR8 *Type, - CONST CHAR8 *Id) + XENBUS_DEVICE *Dev, + CONST CHAR8 *Type, + CONST CHAR8 *Id + ) { - CHAR8 DevicePath[XENSTORE_ABS_PATH_MAX]; - XENSTORE_STATUS StatusXenStore; - XENBUS_PRIVATE_DATA *Private; - EFI_STATUS Status; - XENBUS_DEVICE_PATH *TempXenBusPath; - VOID *ChildXenIo; - - AsciiSPrint (DevicePath, sizeof (DevicePath), - "device/%a/%a", Type, Id); + CHAR8 DevicePath[XENSTORE_ABS_PATH_MAX]; + XENSTORE_STATUS StatusXenStore; + XENBUS_PRIVATE_DATA *Private; + EFI_STATUS Status; + XENBUS_DEVICE_PATH *TempXenBusPath; + VOID *ChildXenIo; + + AsciiSPrint ( + DevicePath, + sizeof (DevicePath), + "device/%a/%a", + Type, + Id + ); if (XenStorePathExists (XST_NIL, DevicePath, "")) { - XENBUS_PRIVATE_DATA *Child; - enum xenbus_state State; - CHAR8 *BackendPath; + XENBUS_PRIVATE_DATA *Child; + enum xenbus_state State; + CHAR8 *BackendPath; Child = XenBusDeviceInitialized (Dev, DevicePath); if (Child != NULL) { @@ -148,57 +154,80 @@ XenBusAddDevice ( * happen if a device is going away after * switching to Closed. */ - DEBUG ((DEBUG_INFO, "XenBus: Device %a ignored. " - "State %d\n", DevicePath, State)); + DEBUG (( + DEBUG_INFO, + "XenBus: Device %a ignored. " + "State %d\n", + DevicePath, + State + )); Status = EFI_SUCCESS; goto out; } - StatusXenStore = XenStoreRead (XST_NIL, DevicePath, "backend", - NULL, (VOID **) &BackendPath); + StatusXenStore = XenStoreRead ( + XST_NIL, + DevicePath, + "backend", + NULL, + (VOID **)&BackendPath + ); if (StatusXenStore != XENSTORE_STATUS_SUCCESS) { DEBUG ((DEBUG_ERROR, "xenbus: %a no backend path.\n", DevicePath)); Status = EFI_NOT_FOUND; goto out; } - Private = AllocateCopyPool (sizeof (*Private), &gXenBusPrivateData); - Private->XenBusIo.Type = AsciiStrDup (Type); - Private->XenBusIo.Node = AsciiStrDup (DevicePath); - Private->XenBusIo.Backend = BackendPath; + Private = AllocateCopyPool (sizeof (*Private), &gXenBusPrivateData); + Private->XenBusIo.Type = AsciiStrDup (Type); + Private->XenBusIo.Node = AsciiStrDup (DevicePath); + Private->XenBusIo.Backend = BackendPath; Private->XenBusIo.DeviceId = (UINT16)AsciiStrDecimalToUintn (Id); - Private->Dev = Dev; + Private->Dev = Dev; - TempXenBusPath = AllocateCopyPool (sizeof (XENBUS_DEVICE_PATH), - &gXenBusDevicePathTemplate); + TempXenBusPath = AllocateCopyPool ( + sizeof (XENBUS_DEVICE_PATH), + &gXenBusDevicePathTemplate + ); if (!AsciiStrCmp (Private->XenBusIo.Type, "vbd")) { TempXenBusPath->Type = XENBUS_DEVICE_PATH_TYPE_VBD; } + TempXenBusPath->DeviceId = Private->XenBusIo.DeviceId; - Private->DevicePath = (XENBUS_DEVICE_PATH *)AppendDevicePathNode ( - Dev->DevicePath, - &TempXenBusPath->Vendor.Header); + Private->DevicePath = (XENBUS_DEVICE_PATH *)AppendDevicePathNode ( + Dev->DevicePath, + &TempXenBusPath->Vendor.Header + ); FreePool (TempXenBusPath); InsertTailList (&Dev->ChildList, &Private->Link); Status = gBS->InstallMultipleProtocolInterfaces ( - &Private->Handle, - &gEfiDevicePathProtocolGuid, Private->DevicePath, - &gXenBusProtocolGuid, &Private->XenBusIo, - NULL); + &Private->Handle, + &gEfiDevicePathProtocolGuid, + Private->DevicePath, + &gXenBusProtocolGuid, + &Private->XenBusIo, + NULL + ); if (EFI_ERROR (Status)) { goto ErrorInstallProtocol; } - Status = gBS->OpenProtocol (Dev->ControllerHandle, - &gXenIoProtocolGuid, - &ChildXenIo, Dev->This->DriverBindingHandle, - Private->Handle, - EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER); + Status = gBS->OpenProtocol ( + Dev->ControllerHandle, + &gXenIoProtocolGuid, + &ChildXenIo, + Dev->This->DriverBindingHandle, + Private->Handle, + EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER + ); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "open by child controller fail (%r)\n", - Status)); + DEBUG (( + DEBUG_ERROR, + "open by child controller fail (%r)\n", + Status + )); goto ErrorOpenProtocolByChild; } } else { @@ -210,16 +239,19 @@ XenBusAddDevice ( ErrorOpenProtocolByChild: gBS->UninstallMultipleProtocolInterfaces ( - Private->Handle, - &gEfiDevicePathProtocolGuid, Private->DevicePath, - &gXenBusProtocolGuid, &Private->XenBusIo, - NULL); + Private->Handle, + &gEfiDevicePathProtocolGuid, + Private->DevicePath, + &gXenBusProtocolGuid, + &Private->XenBusIo, + NULL + ); ErrorInstallProtocol: RemoveEntryList (&Private->Link); FreePool (Private->DevicePath); - FreePool ((VOID *) Private->XenBusIo.Backend); - FreePool ((VOID *) Private->XenBusIo.Node); - FreePool ((VOID *) Private->XenBusIo.Type); + FreePool ((VOID *)Private->XenBusIo.Backend); + FreePool ((VOID *)Private->XenBusIo.Node); + FreePool ((VOID *)Private->XenBusIo.Type); FreePool (Private); out: return Status; @@ -239,29 +271,33 @@ out: STATIC VOID XenBusEnumerateDeviceType ( - XENBUS_DEVICE *Dev, - CONST CHAR8 *Type + XENBUS_DEVICE *Dev, + CONST CHAR8 *Type ) { - CONST CHAR8 **Directory; - UINTN Index; - UINT32 Count; - XENSTORE_STATUS Status; - - Status = XenStoreListDirectory (XST_NIL, - "device", Type, - &Count, &Directory); + CONST CHAR8 **Directory; + UINTN Index; + UINT32 Count; + XENSTORE_STATUS Status; + + Status = XenStoreListDirectory ( + XST_NIL, + "device", + Type, + &Count, + &Directory + ); if (Status != XENSTORE_STATUS_SUCCESS) { return; } + for (Index = 0; Index < Count; Index++) { XenBusAddDevice (Dev, Type, Directory[Index]); } - FreePool ((VOID*)Directory); + FreePool ((VOID *)Directory); } - /** Enumerate the devices on a XenBus bus and install a XenBus Protocol instance. @@ -275,17 +311,21 @@ XenBusEnumerateDeviceType ( */ XENSTORE_STATUS XenBusEnumerateBus ( - XENBUS_DEVICE *Dev + XENBUS_DEVICE *Dev ) { - CONST CHAR8 **Types; - UINTN Index; - UINT32 Count; - XENSTORE_STATUS Status; - - Status = XenStoreListDirectory (XST_NIL, - "device", "", - &Count, &Types); + CONST CHAR8 **Types; + UINTN Index; + UINT32 Count; + XENSTORE_STATUS Status; + + Status = XenStoreListDirectory ( + XST_NIL, + "device", + "", + &Count, + &Types + ); if (Status != XENSTORE_STATUS_SUCCESS) { return Status; } @@ -294,7 +334,7 @@ XenBusEnumerateBus ( XenBusEnumerateDeviceType (Dev, Types[Index]); } - FreePool ((VOID*)Types); + FreePool ((VOID *)Types); return XENSTORE_STATUS_SUCCESS; } @@ -303,14 +343,14 @@ STATIC XENSTORE_STATUS EFIAPI XenBusSetState ( - IN XENBUS_PROTOCOL *This, - IN CONST XENSTORE_TRANSACTION *Transaction, - IN enum xenbus_state NewState + IN XENBUS_PROTOCOL *This, + IN CONST XENSTORE_TRANSACTION *Transaction, + IN enum xenbus_state NewState ) { - enum xenbus_state CurrentState; - XENSTORE_STATUS Status; - CHAR8 *Temp; + enum xenbus_state CurrentState; + XENSTORE_STATUS Status; + CHAR8 *Temp; DEBUG ((DEBUG_INFO, "XenBus: Set state to %d\n", NewState)); @@ -318,6 +358,7 @@ XenBusSetState ( if (Status != XENSTORE_STATUS_SUCCESS) { goto Out; } + CurrentState = AsciiStrDecimalToUintn (Temp); FreePool (Temp); if (CurrentState == NewState) { @@ -327,17 +368,19 @@ XenBusSetState ( do { Status = XenStoreSPrint (Transaction, This->Node, "state", "%d", NewState); } while (Status == XENSTORE_STATUS_EAGAIN); + if (Status != XENSTORE_STATUS_SUCCESS) { DEBUG ((DEBUG_ERROR, "XenBus: failed to write new state\n")); goto Out; } + DEBUG ((DEBUG_INFO, "XenBus: Set state to %d, done\n", NewState)); Out: return Status; } -STATIC XENBUS_PRIVATE_DATA gXenBusPrivateData = { +STATIC XENBUS_PRIVATE_DATA gXenBusPrivateData = { XENBUS_PRIVATE_DATA_SIGNATURE, // Signature { NULL, NULL }, // Link NULL, // Handle diff --git a/OvmfPkg/XenBusDxe/XenBus.h b/OvmfPkg/XenBusDxe/XenBus.h index c85ca99465..36aff47019 100644 --- a/OvmfPkg/XenBusDxe/XenBus.h +++ b/OvmfPkg/XenBusDxe/XenBus.h @@ -6,19 +6,19 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ + #ifndef _XEN_XENBUS_XENBUSB_H #define _XEN_XENBUS_XENBUSB_H #include "XenBusDxe.h" -#define XENBUS_DEVICE_PATH_TYPE_VBD 0x1 +#define XENBUS_DEVICE_PATH_TYPE_VBD 0x1 struct _XENBUS_DEVICE_PATH { - VENDOR_DEVICE_PATH Vendor; - UINT8 Type; - UINT16 DeviceId; + VENDOR_DEVICE_PATH Vendor; + UINT8 Type; + UINT16 DeviceId; }; - /** Perform XenBus bus enumeration and install protocol for children. @@ -32,7 +32,7 @@ struct _XENBUS_DEVICE_PATH { **/ XENSTORE_STATUS XenBusEnumerateBus ( - XENBUS_DEVICE *Dev + XENBUS_DEVICE *Dev ); #endif /* _XEN_XENBUS_XENBUSB_H */ diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.c b/OvmfPkg/XenBusDxe/XenBusDxe.c index 1f5628ad83..132f43a72b 100644 --- a/OvmfPkg/XenBusDxe/XenBusDxe.c +++ b/OvmfPkg/XenBusDxe/XenBusDxe.c @@ -32,7 +32,7 @@ /// /// Driver Binding Protocol instance /// -EFI_DRIVER_BINDING_PROTOCOL gXenBusDxeDriverBinding = { +EFI_DRIVER_BINDING_PROTOCOL gXenBusDxeDriverBinding = { XenBusDxeDriverBindingSupported, XenBusDxeDriverBindingStart, XenBusDxeDriverBindingStop, @@ -41,9 +41,8 @@ EFI_DRIVER_BINDING_PROTOCOL gXenBusDxeDriverBinding = { NULL }; - STATIC EFI_LOCK mMyDeviceLock = EFI_INITIALIZE_LOCK_VARIABLE (TPL_CALLBACK); -STATIC XENBUS_DEVICE *mMyDevice = NULL; +STATIC XENBUS_DEVICE *mMyDevice = NULL; /** Map the shared_info_t page into memory. @@ -58,16 +57,16 @@ STATIC XENBUS_DEVICE *mMyDevice = NULL; STATIC EFI_STATUS XenGetSharedInfoPage ( - IN OUT XENBUS_DEVICE *Dev + IN OUT XENBUS_DEVICE *Dev ) { - xen_add_to_physmap_t Parameter; + xen_add_to_physmap_t Parameter; ASSERT (Dev->SharedInfo == NULL); Parameter.domid = DOMID_SELF; Parameter.space = XENMAPSPACE_shared_info; - Parameter.idx = 0; + Parameter.idx = 0; // // using reserved page because the page is not released when Linux is @@ -75,7 +74,7 @@ XenGetSharedInfoPage ( // page, and fail because it have no right to do so (segv). // Dev->SharedInfo = AllocateReservedPages (1); - Parameter.gpfn = (UINTN) Dev->SharedInfo >> EFI_PAGE_SHIFT; + Parameter.gpfn = (UINTN)Dev->SharedInfo >> EFI_PAGE_SHIFT; if (XenHypercallMemoryOp (XENMEM_add_to_physmap, &Parameter) != 0) { FreePages (Dev->SharedInfo, 1); Dev->SharedInfo = NULL; @@ -132,15 +131,17 @@ XenBusDxeUnload ( // FreePool (HandleBuffer); - // // Uninstall protocols installed in the driver entry point // Status = gBS->UninstallMultipleProtocolInterfaces ( ImageHandle, - &gEfiDriverBindingProtocolGuid, &gXenBusDxeDriverBinding, - &gEfiComponentNameProtocolGuid, &gXenBusDxeComponentName, - &gEfiComponentName2ProtocolGuid, &gXenBusDxeComponentName2, + &gEfiDriverBindingProtocolGuid, + &gXenBusDxeDriverBinding, + &gEfiComponentNameProtocolGuid, + &gXenBusDxeComponentName, + &gEfiComponentName2ProtocolGuid, + &gXenBusDxeComponentName2, NULL ); if (EFI_ERROR (Status)) { @@ -171,7 +172,7 @@ XenBusDxeDriverEntryPoint ( { EFI_STATUS Status; - if (! XenHypercallIsAvailable ()) { + if (!XenHypercallIsAvailable ()) { return EFI_ABORTED; } @@ -188,11 +189,9 @@ XenBusDxeDriverEntryPoint ( ); ASSERT_EFI_ERROR (Status); - return Status; } - /** Tests to see if this driver supports a given controller. If a child device is provided, it further tests to see if this driver supports creating a handle for the specified child device. @@ -229,24 +228,28 @@ XenBusDxeDriverBindingSupported ( IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - EFI_STATUS Status; - XENIO_PROTOCOL *XenIo; + EFI_STATUS Status; + XENIO_PROTOCOL *XenIo; Status = gBS->OpenProtocol ( - ControllerHandle, - &gXenIoProtocolGuid, - (VOID **)&XenIo, - This->DriverBindingHandle, - ControllerHandle, - EFI_OPEN_PROTOCOL_BY_DRIVER - ); + ControllerHandle, + &gXenIoProtocolGuid, + (VOID **)&XenIo, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { return Status; } - gBS->CloseProtocol (ControllerHandle, &gXenIoProtocolGuid, - This->DriverBindingHandle, ControllerHandle); + gBS->CloseProtocol ( + ControllerHandle, + &gXenIoProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); return Status; } @@ -254,14 +257,17 @@ XenBusDxeDriverBindingSupported ( VOID EFIAPI NotifyExitBoot ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - XENBUS_DEVICE *Dev = Context; + XENBUS_DEVICE *Dev = Context; - gBS->DisconnectController(Dev->ControllerHandle, - Dev->This->DriverBindingHandle, NULL); + gBS->DisconnectController ( + Dev->ControllerHandle, + Dev->This->DriverBindingHandle, + NULL + ); } /** @@ -309,19 +315,19 @@ XenBusDxeDriverBindingStart ( IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - EFI_STATUS Status; - XENBUS_DEVICE *Dev; - XENIO_PROTOCOL *XenIo; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; + EFI_STATUS Status; + XENBUS_DEVICE *Dev; + XENIO_PROTOCOL *XenIo; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; Status = gBS->OpenProtocol ( - ControllerHandle, - &gXenIoProtocolGuid, - (VOID**)&XenIo, - This->DriverBindingHandle, - ControllerHandle, - EFI_OPEN_PROTOCOL_BY_DRIVER - ); + ControllerHandle, + &gXenIoProtocolGuid, + (VOID **)&XenIo, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { return Status; @@ -330,7 +336,7 @@ XenBusDxeDriverBindingStart ( Status = gBS->OpenProtocol ( ControllerHandle, &gEfiDevicePathProtocolGuid, - (VOID **) &DevicePath, + (VOID **)&DevicePath, This->DriverBindingHandle, ControllerHandle, EFI_OPEN_PROTOCOL_BY_DRIVER @@ -340,12 +346,12 @@ XenBusDxeDriverBindingStart ( goto ErrorOpenningProtocol; } - Dev = AllocateZeroPool (sizeof (*Dev)); - Dev->Signature = XENBUS_DEVICE_SIGNATURE; - Dev->This = This; + Dev = AllocateZeroPool (sizeof (*Dev)); + Dev->Signature = XENBUS_DEVICE_SIGNATURE; + Dev->This = This; Dev->ControllerHandle = ControllerHandle; - Dev->XenIo = XenIo; - Dev->DevicePath = DevicePath; + Dev->XenIo = XenIo; + Dev->DevicePath = DevicePath; InitializeListHead (&Dev->ChildList); EfiAcquireLock (&mMyDeviceLock); @@ -357,6 +363,7 @@ XenBusDxeDriverBindingStart ( Status = EFI_ALREADY_STARTED; goto ErrorAllocated; } + mMyDevice = Dev; EfiReleaseLock (&mMyDeviceLock); @@ -374,21 +381,32 @@ XenBusDxeDriverBindingStart ( XenBusEnumerateBus (Dev); - Status = gBS->CreateEvent (EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_CALLBACK, - NotifyExitBoot, - (VOID*) Dev, - &Dev->ExitBootEvent); + Status = gBS->CreateEvent ( + EVT_SIGNAL_EXIT_BOOT_SERVICES, + TPL_CALLBACK, + NotifyExitBoot, + (VOID *)Dev, + &Dev->ExitBootEvent + ); ASSERT_EFI_ERROR (Status); return EFI_SUCCESS; ErrorAllocated: FreePool (Dev); - gBS->CloseProtocol (ControllerHandle, &gEfiDevicePathProtocolGuid, - This->DriverBindingHandle, ControllerHandle); + gBS->CloseProtocol ( + ControllerHandle, + &gEfiDevicePathProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); ErrorOpenningProtocol: - gBS->CloseProtocol (ControllerHandle, &gXenIoProtocolGuid, - This->DriverBindingHandle, ControllerHandle); + gBS->CloseProtocol ( + ControllerHandle, + &gXenIoProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); return Status; } @@ -427,44 +445,54 @@ XenBusDxeDriverBindingStop ( IN EFI_HANDLE *ChildHandleBuffer OPTIONAL ) { - UINTN Index; - XENBUS_PROTOCOL *XenBusIo; - XENBUS_PRIVATE_DATA *ChildData; - EFI_STATUS Status; - XENBUS_DEVICE *Dev = mMyDevice; + UINTN Index; + XENBUS_PROTOCOL *XenBusIo; + XENBUS_PRIVATE_DATA *ChildData; + EFI_STATUS Status; + XENBUS_DEVICE *Dev = mMyDevice; for (Index = 0; Index < NumberOfChildren; Index++) { Status = gBS->OpenProtocol ( - ChildHandleBuffer[Index], - &gXenBusProtocolGuid, - (VOID **) &XenBusIo, - This->DriverBindingHandle, - ControllerHandle, - EFI_OPEN_PROTOCOL_GET_PROTOCOL); + ChildHandleBuffer[Index], + &gXenBusProtocolGuid, + (VOID **)&XenBusIo, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL + ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "XenBusDxe: get children protocol failed: %r\n", Status)); continue; } + ChildData = XENBUS_PRIVATE_DATA_FROM_THIS (XenBusIo); - Status = gBS->CloseProtocol (Dev->ControllerHandle, &gXenIoProtocolGuid, - Dev->This->DriverBindingHandle, ChildData->Handle); + Status = gBS->CloseProtocol ( + Dev->ControllerHandle, + &gXenIoProtocolGuid, + Dev->This->DriverBindingHandle, + ChildData->Handle + ); ASSERT_EFI_ERROR (Status); Status = gBS->UninstallMultipleProtocolInterfaces ( - ChildData->Handle, - &gEfiDevicePathProtocolGuid, ChildData->DevicePath, - &gXenBusProtocolGuid, &ChildData->XenBusIo, - NULL); + ChildData->Handle, + &gEfiDevicePathProtocolGuid, + ChildData->DevicePath, + &gXenBusProtocolGuid, + &ChildData->XenBusIo, + NULL + ); ASSERT_EFI_ERROR (Status); - FreePool ((VOID*)ChildData->XenBusIo.Type); - FreePool ((VOID*)ChildData->XenBusIo.Node); - FreePool ((VOID*)ChildData->XenBusIo.Backend); + FreePool ((VOID *)ChildData->XenBusIo.Type); + FreePool ((VOID *)ChildData->XenBusIo.Node); + FreePool ((VOID *)ChildData->XenBusIo.Backend); FreePool (ChildData->DevicePath); RemoveEntryList (&ChildData->Link); FreePool (ChildData); } + if (NumberOfChildren > 0) { return EFI_SUCCESS; } @@ -473,10 +501,18 @@ XenBusDxeDriverBindingStop ( XenStoreDeinit (Dev); XenGrantTableDeinit (Dev); - gBS->CloseProtocol (ControllerHandle, &gEfiDevicePathProtocolGuid, - This->DriverBindingHandle, ControllerHandle); - gBS->CloseProtocol (ControllerHandle, &gXenIoProtocolGuid, - This->DriverBindingHandle, ControllerHandle); + gBS->CloseProtocol ( + ControllerHandle, + &gEfiDevicePathProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); + gBS->CloseProtocol ( + ControllerHandle, + &gXenIoProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); mMyDevice = NULL; FreePool (Dev); diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.h b/OvmfPkg/XenBusDxe/XenBusDxe.h index b1dcc3549c..8b32505cb0 100644 --- a/OvmfPkg/XenBusDxe/XenBusDxe.h +++ b/OvmfPkg/XenBusDxe/XenBusDxe.h @@ -24,38 +24,32 @@ #include #include - // // UEFI Driver Model Protocols // #include - // // Consumed Protocols // #include - // // Produced Protocols // #include - // // Driver Version // #define XENBUS_DXE_VERSION 0x00000010 - // // Protocol instances // -extern EFI_DRIVER_BINDING_PROTOCOL gXenBusDxeDriverBinding; +extern EFI_DRIVER_BINDING_PROTOCOL gXenBusDxeDriverBinding; extern EFI_COMPONENT_NAME2_PROTOCOL gXenBusDxeComponentName2; -extern EFI_COMPONENT_NAME_PROTOCOL gXenBusDxeComponentName; - +extern EFI_COMPONENT_NAME_PROTOCOL gXenBusDxeComponentName; // // Include files with function prototypes @@ -68,32 +62,32 @@ extern EFI_COMPONENT_NAME_PROTOCOL gXenBusDxeComponentName; // #include -typedef struct _XENBUS_DEVICE_PATH XENBUS_DEVICE_PATH; -typedef struct _XENBUS_DEVICE XENBUS_DEVICE; +typedef struct _XENBUS_DEVICE_PATH XENBUS_DEVICE_PATH; +typedef struct _XENBUS_DEVICE XENBUS_DEVICE; // Have the state of the driver. -#define XENBUS_DEVICE_SIGNATURE SIGNATURE_32 ('X','B','s','t') +#define XENBUS_DEVICE_SIGNATURE SIGNATURE_32 ('X','B','s','t') struct _XENBUS_DEVICE { - UINT32 Signature; - EFI_DRIVER_BINDING_PROTOCOL *This; - EFI_HANDLE ControllerHandle; - XENIO_PROTOCOL *XenIo; - EFI_EVENT ExitBootEvent; - EFI_DEVICE_PATH_PROTOCOL *DevicePath; - LIST_ENTRY ChildList; - - shared_info_t *SharedInfo; + UINT32 Signature; + EFI_DRIVER_BINDING_PROTOCOL *This; + EFI_HANDLE ControllerHandle; + XENIO_PROTOCOL *XenIo; + EFI_EVENT ExitBootEvent; + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + LIST_ENTRY ChildList; + + shared_info_t *SharedInfo; }; // There is one of this struct allocated for every child. -#define XENBUS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('X', 'B', 'p', 'd') +#define XENBUS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('X', 'B', 'p', 'd') typedef struct { - UINTN Signature; - LIST_ENTRY Link; - EFI_HANDLE Handle; - XENBUS_PROTOCOL XenBusIo; - XENBUS_DEVICE *Dev; - XENBUS_DEVICE_PATH *DevicePath; + UINTN Signature; + LIST_ENTRY Link; + EFI_HANDLE Handle; + XENBUS_PROTOCOL XenBusIo; + XENBUS_DEVICE *Dev; + XENBUS_DEVICE_PATH *DevicePath; } XENBUS_PRIVATE_DATA; #define XENBUS_PRIVATE_DATA_FROM_THIS(a) \ @@ -116,13 +110,13 @@ typedef struct { INT32 EFIAPI TestAndClearBit ( - IN INT32 Bit, - IN VOID *Address + IN INT32 Bit, + IN VOID *Address ); -CHAR8* +CHAR8 * AsciiStrDup ( - IN CONST CHAR8* Str + IN CONST CHAR8 *Str ); #endif diff --git a/OvmfPkg/XenBusDxe/XenStore.c b/OvmfPkg/XenBusDxe/XenStore.c index e5cca108e0..0241cfda48 100644 --- a/OvmfPkg/XenBusDxe/XenStore.c +++ b/OvmfPkg/XenBusDxe/XenStore.c @@ -52,46 +52,44 @@ // typedef struct { - CONST VOID *Data; - UINT32 Len; + CONST VOID *Data; + UINT32 Len; } WRITE_REQUEST; /* Register callback to watch subtree (node) in the XenStore. */ -#define XENSTORE_WATCH_SIGNATURE SIGNATURE_32 ('X','S','w','a') -struct _XENSTORE_WATCH -{ - UINT32 Signature; - LIST_ENTRY Link; +#define XENSTORE_WATCH_SIGNATURE SIGNATURE_32 ('X','S','w','a') +struct _XENSTORE_WATCH { + UINT32 Signature; + LIST_ENTRY Link; /* Path being watched. */ - CHAR8 *Node; + CHAR8 *Node; }; #define XENSTORE_WATCH_FROM_LINK(l) \ CR (l, XENSTORE_WATCH, Link, XENSTORE_WATCH_SIGNATURE) - /** * Structure capturing messages received from the XenStore service. */ -#define XENSTORE_MESSAGE_SIGNATURE SIGNATURE_32 ('X', 'S', 's', 'm') +#define XENSTORE_MESSAGE_SIGNATURE SIGNATURE_32 ('X', 'S', 's', 'm') typedef struct { - UINT32 Signature; - LIST_ENTRY Link; + UINT32 Signature; + LIST_ENTRY Link; - struct xsd_sockmsg Header; + struct xsd_sockmsg Header; union { /* Queued replies. */ struct { - CHAR8 *Body; + CHAR8 *Body; } Reply; /* Queued watch events. */ struct { - XENSTORE_WATCH *Handle; - CONST CHAR8 **Vector; - UINT32 VectorSize; + XENSTORE_WATCH *Handle; + CONST CHAR8 **Vector; + UINT32 VectorSize; } Watch; } u; } XENSTORE_MESSAGE; @@ -106,9 +104,9 @@ typedef struct { * Pointer to shared memory communication structures allowing us * to communicate with the XenStore service. */ - struct xenstore_domain_interface *XenStore; + struct xenstore_domain_interface *XenStore; - XENBUS_DEVICE *Dev; + XENBUS_DEVICE *Dev; /** * A list of replies to our requests. @@ -120,42 +118,41 @@ typedef struct { * * /note Only one requesting context can be active at a time. */ - LIST_ENTRY ReplyList; + LIST_ENTRY ReplyList; /** Lock protecting the reply list. */ - EFI_LOCK ReplyLock; + EFI_LOCK ReplyLock; /** * List of registered watches. */ - LIST_ENTRY RegisteredWatches; + LIST_ENTRY RegisteredWatches; /** Lock protecting the registered watches list. */ - EFI_LOCK RegisteredWatchesLock; + EFI_LOCK RegisteredWatchesLock; /** * List of pending watch callback events. */ - LIST_ENTRY WatchEvents; + LIST_ENTRY WatchEvents; /** Lock protecting the watch callback list. */ - EFI_LOCK WatchEventsLock; + EFI_LOCK WatchEventsLock; /** * The event channel for communicating with the * XenStore service. */ - evtchn_port_t EventChannel; + evtchn_port_t EventChannel; /** Handle for XenStore events. */ - EFI_EVENT EventChannelEvent; + EFI_EVENT EventChannelEvent; } XENSTORE_PRIVATE; // // Global Data // -static XENSTORE_PRIVATE xs; - +static XENSTORE_PRIVATE xs; // // Private Utility Functions @@ -174,18 +171,19 @@ static XENSTORE_PRIVATE xs; STATIC UINT32 ExtractStrings ( - IN CONST CHAR8 *Strings, - IN UINTN Len, - OUT CONST CHAR8 **Dst OPTIONAL + IN CONST CHAR8 *Strings, + IN UINTN Len, + OUT CONST CHAR8 **Dst OPTIONAL ) { - UINT32 Num = 0; - CONST CHAR8 *Ptr; + UINT32 Num = 0; + CONST CHAR8 *Ptr; for (Ptr = Strings; Ptr < Strings + Len; Ptr += AsciiStrSize (Ptr)) { if (Dst != NULL) { *Dst++ = Ptr; } + Num++; } @@ -217,10 +215,10 @@ Split ( OUT UINT32 *NumPtr ) { - CONST CHAR8 **Dst; + CONST CHAR8 **Dst; - ASSERT(NumPtr != NULL); - ASSERT(Strings != NULL); + ASSERT (NumPtr != NULL); + ASSERT (Strings != NULL); /* Protect against unterminated buffers. */ if (Len > 0) { @@ -232,11 +230,11 @@ Split ( /* Transfer to one big alloc for easy freeing by the caller. */ Dst = AllocatePool (*NumPtr * sizeof (CHAR8 *) + Len); - CopyMem ((VOID*)&Dst[*NumPtr], Strings, Len); + CopyMem ((VOID *)&Dst[*NumPtr], Strings, Len); FreePool (Strings); /* Extract pointers to newly allocated array. */ - Strings = (CHAR8 *) &Dst[*NumPtr]; + Strings = (CHAR8 *)&Dst[*NumPtr]; ExtractStrings (Strings, Len, Dst); return (Dst); @@ -253,23 +251,26 @@ Split ( STATIC XENSTORE_WATCH * XenStoreFindWatch ( - IN CONST CHAR8 *Token + IN CONST CHAR8 *Token ) { - XENSTORE_WATCH *Watch, *WantedWatch; - LIST_ENTRY *Entry; + XENSTORE_WATCH *Watch, *WantedWatch; + LIST_ENTRY *Entry; - WantedWatch = (VOID *) AsciiStrHexToUintn (Token); + WantedWatch = (VOID *)AsciiStrHexToUintn (Token); if (IsListEmpty (&xs.RegisteredWatches)) { return NULL; } + for (Entry = GetFirstNode (&xs.RegisteredWatches); !IsNull (&xs.RegisteredWatches, Entry); - Entry = GetNextNode (&xs.RegisteredWatches, Entry)) { + Entry = GetNextNode (&xs.RegisteredWatches, Entry)) + { Watch = XENSTORE_WATCH_FROM_LINK (Entry); - if (Watch == WantedWatch) + if (Watch == WantedWatch) { return Watch; + } } return NULL; @@ -282,16 +283,16 @@ XenStoreFindWatch ( CHAR8 * XenStoreJoin ( - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node ) { - CHAR8 *Buf; - UINTN BufSize; + CHAR8 *Buf; + UINTN BufSize; /* +1 for '/' and +1 for '\0' */ BufSize = AsciiStrLen (DirectoryPath) + AsciiStrLen (Node) + 2; - Buf = AllocatePool (BufSize); + Buf = AllocatePool (BufSize); ASSERT (Buf != NULL); if (Node[0] == '\0') { @@ -322,8 +323,8 @@ XenStoreJoin ( STATIC BOOLEAN XenStoreCheckIndexes ( - XENSTORE_RING_IDX Cons, - XENSTORE_RING_IDX Prod + XENSTORE_RING_IDX Cons, + XENSTORE_RING_IDX Prod ) { return ((Prod - Cons) <= XENSTORE_RING_SIZE); @@ -343,17 +344,19 @@ XenStoreCheckIndexes ( STATIC VOID * XenStoreGetOutputChunk ( - IN XENSTORE_RING_IDX Cons, - IN XENSTORE_RING_IDX Prod, - IN CHAR8 *Buffer, - OUT UINT32 *LenPtr + IN XENSTORE_RING_IDX Cons, + IN XENSTORE_RING_IDX Prod, + IN CHAR8 *Buffer, + OUT UINT32 *LenPtr ) { - UINT32 Len; + UINT32 Len; + Len = XENSTORE_RING_SIZE - MASK_XENSTORE_IDX (Prod); if ((XENSTORE_RING_SIZE - (Prod - Cons)) < Len) { Len = XENSTORE_RING_SIZE - (Prod - Cons); } + *LenPtr = Len; return (Buffer + MASK_XENSTORE_IDX (Prod)); } @@ -372,18 +375,19 @@ XenStoreGetOutputChunk ( STATIC CONST VOID * XenStoreGetInputChunk ( - IN XENSTORE_RING_IDX Cons, - IN XENSTORE_RING_IDX Prod, - IN CONST CHAR8 *Buffer, - OUT UINT32 *LenPtr + IN XENSTORE_RING_IDX Cons, + IN XENSTORE_RING_IDX Prod, + IN CONST CHAR8 *Buffer, + OUT UINT32 *LenPtr ) { - UINT32 Len; + UINT32 Len; Len = XENSTORE_RING_SIZE - MASK_XENSTORE_IDX (Cons); if ((Prod - Cons) < Len) { Len = Prod - Cons; } + *LenPtr = Len; return (Buffer + MASK_XENSTORE_IDX (Cons)); } @@ -401,26 +405,27 @@ XenStoreGetInputChunk ( STATIC EFI_STATUS XenStoreWaitForEvent ( - IN EFI_EVENT Event, - IN UINT64 Timeout + IN EFI_EVENT Event, + IN UINT64 Timeout ) { - UINTN Index; - EFI_STATUS Status; - EFI_EVENT TimerEvent; - EFI_EVENT WaitList[2]; + UINTN Index; + EFI_STATUS Status; + EFI_EVENT TimerEvent; + EFI_EVENT WaitList[2]; gBS->CreateEvent (EVT_TIMER, 0, NULL, NULL, &TimerEvent); gBS->SetTimer (TimerEvent, TimerRelative, Timeout); WaitList[0] = xs.EventChannelEvent; WaitList[1] = TimerEvent; - Status = gBS->WaitForEvent (2, WaitList, &Index); + Status = gBS->WaitForEvent (2, WaitList, &Index); ASSERT (Status != EFI_INVALID_PARAMETER); gBS->CloseEvent (TimerEvent); if (Status == EFI_UNSUPPORTED) { return EFI_SUCCESS; } + if (Index == 1) { return EFI_TIMEOUT; } else { @@ -442,16 +447,16 @@ XenStoreWaitForEvent ( STATIC XENSTORE_STATUS XenStoreWriteStore ( - IN CONST VOID *DataPtr, - IN UINT32 Len + IN CONST VOID *DataPtr, + IN UINT32 Len ) { - XENSTORE_RING_IDX Cons, Prod; - CONST CHAR8 *Data = (CONST CHAR8 *)DataPtr; + XENSTORE_RING_IDX Cons, Prod; + CONST CHAR8 *Data = (CONST CHAR8 *)DataPtr; while (Len != 0) { - void *Dest; - UINT32 Available; + void *Dest; + UINT32 Available; Cons = xs.XenStore->req_cons; Prod = xs.XenStore->req_prod; @@ -462,13 +467,16 @@ XenStoreWriteStore ( * Note that the events from both queues are combined, so being woken * does not guarantee that data exist in the read ring. */ - EFI_STATUS Status; + EFI_STATUS Status; - Status = XenStoreWaitForEvent (xs.EventChannelEvent, - EFI_TIMER_PERIOD_SECONDS (1)); + Status = XenStoreWaitForEvent ( + xs.EventChannelEvent, + EFI_TIMER_PERIOD_SECONDS (1) + ); if (Status == EFI_TIMEOUT) { DEBUG ((DEBUG_WARN, "XenStore Write, waiting for a ring event.\n")); } + continue; } @@ -485,7 +493,7 @@ XenStoreWriteStore ( CopyMem (Dest, Data, Available); Data += Available; - Len -= Available; + Len -= Available; /* * The store to the producer index, which indicates @@ -521,16 +529,16 @@ XenStoreWriteStore ( STATIC XENSTORE_STATUS XenStoreReadStore ( - OUT VOID *DataPtr, - IN UINT32 Len + OUT VOID *DataPtr, + IN UINT32 Len ) { - XENSTORE_RING_IDX Cons, Prod; - CHAR8 *Data = (CHAR8 *) DataPtr; + XENSTORE_RING_IDX Cons, Prod; + CHAR8 *Data = (CHAR8 *)DataPtr; while (Len != 0) { - UINT32 Available; - CONST CHAR8 *Src; + UINT32 Available; + CONST CHAR8 *Src; Cons = xs.XenStore->rsp_cons; Prod = xs.XenStore->rsp_prod; @@ -541,13 +549,16 @@ XenStoreReadStore ( * Note that the events from both queues are combined, so being woken * does not guarantee that data exist in the read ring. */ - EFI_STATUS Status; + EFI_STATUS Status; - Status = XenStoreWaitForEvent (xs.EventChannelEvent, - EFI_TIMER_PERIOD_SECONDS (1)); + Status = XenStoreWaitForEvent ( + xs.EventChannelEvent, + EFI_TIMER_PERIOD_SECONDS (1) + ); if (Status == EFI_TIMEOUT) { DEBUG ((DEBUG_WARN, "XenStore Read, waiting for a ring event.\n")); } + continue; } @@ -570,7 +581,7 @@ XenStoreReadStore ( CopyMem (Data, Src, Available); Data += Available; - Len -= Available; + Len -= Available; /* * Insure that the producer of this ring does not see @@ -608,20 +619,20 @@ XenStoreProcessMessage ( VOID ) { - XENSTORE_MESSAGE *Message; - CHAR8 *Body; - XENSTORE_STATUS Status; + XENSTORE_MESSAGE *Message; + CHAR8 *Body; + XENSTORE_STATUS Status; - Message = AllocateZeroPool (sizeof (XENSTORE_MESSAGE)); + Message = AllocateZeroPool (sizeof (XENSTORE_MESSAGE)); Message->Signature = XENSTORE_MESSAGE_SIGNATURE; - Status = XenStoreReadStore (&Message->Header, sizeof (Message->Header)); + Status = XenStoreReadStore (&Message->Header, sizeof (Message->Header)); if (Status != XENSTORE_STATUS_SUCCESS) { FreePool (Message); DEBUG ((DEBUG_ERROR, "XenStore: Error read store (%d)\n", Status)); return Status; } - Body = AllocatePool (Message->Header.len + 1); + Body = AllocatePool (Message->Header.len + 1); Status = XenStoreReadStore (Body, Message->Header.len); if (Status != XENSTORE_STATUS_SUCCESS) { FreePool (Body); @@ -629,27 +640,38 @@ XenStoreProcessMessage ( DEBUG ((DEBUG_ERROR, "XenStore: Error read store (%d)\n", Status)); return Status; } + Body[Message->Header.len] = '\0'; if (Message->Header.type == XS_WATCH_EVENT) { - Message->u.Watch.Vector = Split(Body, Message->Header.len, - &Message->u.Watch.VectorSize); + Message->u.Watch.Vector = Split ( + Body, + Message->Header.len, + &Message->u.Watch.VectorSize + ); EfiAcquireLock (&xs.RegisteredWatchesLock); Message->u.Watch.Handle = XenStoreFindWatch (Message->u.Watch.Vector[XS_WATCH_TOKEN]); - DEBUG ((DEBUG_INFO, "XenStore: Watch event %a\n", - Message->u.Watch.Vector[XS_WATCH_TOKEN])); + DEBUG (( + DEBUG_INFO, + "XenStore: Watch event %a\n", + Message->u.Watch.Vector[XS_WATCH_TOKEN] + )); if (Message->u.Watch.Handle != NULL) { EfiAcquireLock (&xs.WatchEventsLock); InsertHeadList (&xs.WatchEvents, &Message->Link); EfiReleaseLock (&xs.WatchEventsLock); } else { - DEBUG ((DEBUG_WARN, "XenStore: Watch handle %a not found\n", - Message->u.Watch.Vector[XS_WATCH_TOKEN])); - FreePool((VOID*)Message->u.Watch.Vector); - FreePool(Message); + DEBUG (( + DEBUG_WARN, + "XenStore: Watch handle %a not found\n", + Message->u.Watch.Vector[XS_WATCH_TOKEN] + )); + FreePool ((VOID *)Message->u.Watch.Vector); + FreePool (Message); } + EfiReleaseLock (&xs.RegisteredWatchesLock); } else { Message->u.Reply.Body = Body; @@ -676,41 +698,42 @@ XenStoreProcessMessage ( **/ typedef struct { - XENSTORE_STATUS Status; - CONST CHAR8 *ErrorStr; + XENSTORE_STATUS Status; + CONST CHAR8 *ErrorStr; } XenStoreErrors; -static XenStoreErrors gXenStoreErrors[] = { - { XENSTORE_STATUS_EINVAL, "EINVAL" }, - { XENSTORE_STATUS_EACCES, "EACCES" }, - { XENSTORE_STATUS_EEXIST, "EEXIST" }, - { XENSTORE_STATUS_EISDIR, "EISDIR" }, - { XENSTORE_STATUS_ENOENT, "ENOENT" }, - { XENSTORE_STATUS_ENOMEM, "ENOMEM" }, - { XENSTORE_STATUS_ENOSPC, "ENOSPC" }, - { XENSTORE_STATUS_EIO, "EIO" }, +static XenStoreErrors gXenStoreErrors[] = { + { XENSTORE_STATUS_EINVAL, "EINVAL" }, + { XENSTORE_STATUS_EACCES, "EACCES" }, + { XENSTORE_STATUS_EEXIST, "EEXIST" }, + { XENSTORE_STATUS_EISDIR, "EISDIR" }, + { XENSTORE_STATUS_ENOENT, "ENOENT" }, + { XENSTORE_STATUS_ENOMEM, "ENOMEM" }, + { XENSTORE_STATUS_ENOSPC, "ENOSPC" }, + { XENSTORE_STATUS_EIO, "EIO" }, { XENSTORE_STATUS_ENOTEMPTY, "ENOTEMPTY" }, - { XENSTORE_STATUS_ENOSYS, "ENOSYS" }, - { XENSTORE_STATUS_EROFS, "EROFS" }, - { XENSTORE_STATUS_EBUSY, "EBUSY" }, - { XENSTORE_STATUS_EAGAIN, "EAGAIN" }, - { XENSTORE_STATUS_EISCONN, "EISCONN" }, - { XENSTORE_STATUS_E2BIG, "E2BIG" } + { XENSTORE_STATUS_ENOSYS, "ENOSYS" }, + { XENSTORE_STATUS_EROFS, "EROFS" }, + { XENSTORE_STATUS_EBUSY, "EBUSY" }, + { XENSTORE_STATUS_EAGAIN, "EAGAIN" }, + { XENSTORE_STATUS_EISCONN, "EISCONN" }, + { XENSTORE_STATUS_E2BIG, "E2BIG" } }; STATIC XENSTORE_STATUS XenStoreGetError ( - CONST CHAR8 *ErrorStr + CONST CHAR8 *ErrorStr ) { - UINT32 Index; + UINT32 Index; - for (Index = 0; Index < ARRAY_SIZE(gXenStoreErrors); Index++) { + for (Index = 0; Index < ARRAY_SIZE (gXenStoreErrors); Index++) { if (!AsciiStrCmp (ErrorStr, gXenStoreErrors[Index].ErrorStr)) { return gXenStoreErrors[Index].Status; } } + DEBUG ((DEBUG_WARN, "XenStore gave unknown error %a\n", ErrorStr)); return XENSTORE_STATUS_EINVAL; } @@ -725,26 +748,30 @@ XenStoreGetError ( STATIC XENSTORE_STATUS XenStoreReadReply ( - OUT enum xsd_sockmsg_type *TypePtr, - OUT UINT32 *LenPtr OPTIONAL, - OUT VOID **Result + OUT enum xsd_sockmsg_type *TypePtr, + OUT UINT32 *LenPtr OPTIONAL, + OUT VOID **Result ) { - XENSTORE_MESSAGE *Message; - LIST_ENTRY *Entry; - CHAR8 *Body; + XENSTORE_MESSAGE *Message; + LIST_ENTRY *Entry; + CHAR8 *Body; while (IsListEmpty (&xs.ReplyList)) { - XENSTORE_STATUS Status; + XENSTORE_STATUS Status; Status = XenStoreProcessMessage (); - if (Status != XENSTORE_STATUS_SUCCESS && Status != XENSTORE_STATUS_EAGAIN) { - DEBUG ((DEBUG_ERROR, "XenStore, error while reading the ring (%d).", - Status)); + if ((Status != XENSTORE_STATUS_SUCCESS) && (Status != XENSTORE_STATUS_EAGAIN)) { + DEBUG (( + DEBUG_ERROR, + "XenStore, error while reading the ring (%d).", + Status + )); return Status; } } + EfiAcquireLock (&xs.ReplyLock); - Entry = GetFirstNode (&xs.ReplyList); + Entry = GetFirstNode (&xs.ReplyList); Message = XENSTORE_MESSAGE_FROM_LINK (Entry); RemoveEntryList (Entry); EfiReleaseLock (&xs.ReplyLock); @@ -753,6 +780,7 @@ XenStoreReadReply ( if (LenPtr != NULL) { *LenPtr = Message->Header.len; } + Body = Message->u.Reply.Body; FreePool (Message); @@ -776,27 +804,28 @@ XenStoreReadReply ( STATIC XENSTORE_STATUS XenStoreTalkv ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN enum xsd_sockmsg_type RequestType, - IN CONST WRITE_REQUEST *WriteRequest, - IN UINT32 NumRequests, - OUT UINT32 *LenPtr OPTIONAL, - OUT VOID **ResultPtr OPTIONAL + IN CONST XENSTORE_TRANSACTION *Transaction, + IN enum xsd_sockmsg_type RequestType, + IN CONST WRITE_REQUEST *WriteRequest, + IN UINT32 NumRequests, + OUT UINT32 *LenPtr OPTIONAL, + OUT VOID **ResultPtr OPTIONAL ) { - struct xsd_sockmsg Message; - void *Return = NULL; - UINT32 Index; - XENSTORE_STATUS Status; + struct xsd_sockmsg Message; + void *Return = NULL; + UINT32 Index; + XENSTORE_STATUS Status; if (Transaction == XST_NIL) { Message.tx_id = 0; } else { Message.tx_id = Transaction->Id; } + Message.req_id = 0; - Message.type = RequestType; - Message.len = 0; + Message.type = RequestType; + Message.len = 0; for (Index = 0; Index < NumRequests; Index++) { Message.len += WriteRequest[Index].Len; } @@ -859,20 +888,26 @@ Error: STATIC XENSTORE_STATUS XenStoreSingle ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN enum xsd_sockmsg_type RequestType, - IN CONST CHAR8 *Body, - OUT UINT32 *LenPtr OPTIONAL, - OUT VOID **Result OPTIONAL + IN CONST XENSTORE_TRANSACTION *Transaction, + IN enum xsd_sockmsg_type RequestType, + IN CONST CHAR8 *Body, + OUT UINT32 *LenPtr OPTIONAL, + OUT VOID **Result OPTIONAL ) { - WRITE_REQUEST WriteRequest; - - WriteRequest.Data = (VOID *) Body; - WriteRequest.Len = (UINT32)AsciiStrSize (Body); - - return XenStoreTalkv (Transaction, RequestType, &WriteRequest, 1, - LenPtr, Result); + WRITE_REQUEST WriteRequest; + + WriteRequest.Data = (VOID *)Body; + WriteRequest.Len = (UINT32)AsciiStrSize (Body); + + return XenStoreTalkv ( + Transaction, + RequestType, + &WriteRequest, + 1, + LenPtr, + Result + ); } // @@ -891,16 +926,16 @@ XenStoreSingle ( STATIC XENSTORE_STATUS XenStoreWatch ( - CONST CHAR8 *Path, - CONST CHAR8 *Token + CONST CHAR8 *Path, + CONST CHAR8 *Token ) { - WRITE_REQUEST WriteRequest[2]; + WRITE_REQUEST WriteRequest[2]; - WriteRequest[0].Data = (VOID *) Path; - WriteRequest[0].Len = (UINT32)AsciiStrSize (Path); - WriteRequest[1].Data = (VOID *) Token; - WriteRequest[1].Len = (UINT32)AsciiStrSize (Token); + WriteRequest[0].Data = (VOID *)Path; + WriteRequest[0].Len = (UINT32)AsciiStrSize (Path); + WriteRequest[1].Data = (VOID *)Token; + WriteRequest[1].Len = (UINT32)AsciiStrSize (Token); return XenStoreTalkv (XST_NIL, XS_WATCH, WriteRequest, 2, NULL, NULL); } @@ -917,16 +952,16 @@ XenStoreWatch ( STATIC XENSTORE_STATUS XenStoreUnwatch ( - CONST CHAR8 *Path, - CONST CHAR8 *Token + CONST CHAR8 *Path, + CONST CHAR8 *Token ) { - WRITE_REQUEST WriteRequest[2]; + WRITE_REQUEST WriteRequest[2]; - WriteRequest[0].Data = (VOID *) Path; - WriteRequest[0].Len = (UINT32)AsciiStrSize (Path); - WriteRequest[1].Data = (VOID *) Token; - WriteRequest[1].Len = (UINT32)AsciiStrSize (Token); + WriteRequest[0].Data = (VOID *)Path; + WriteRequest[0].Len = (UINT32)AsciiStrSize (Path); + WriteRequest[1].Data = (VOID *)Token; + WriteRequest[1].Len = (UINT32)AsciiStrSize (Token); return XenStoreTalkv (XST_NIL, XS_UNWATCH, WriteRequest, 2, NULL, NULL); } @@ -934,38 +969,42 @@ XenStoreUnwatch ( STATIC XENSTORE_STATUS XenStoreWaitWatch ( - VOID *Token + VOID *Token ) { - XENSTORE_MESSAGE *Message; - LIST_ENTRY *Entry = NULL; - LIST_ENTRY *Last = NULL; - XENSTORE_STATUS Status; + XENSTORE_MESSAGE *Message; + LIST_ENTRY *Entry = NULL; + LIST_ENTRY *Last = NULL; + XENSTORE_STATUS Status; while (TRUE) { EfiAcquireLock (&xs.WatchEventsLock); if (IsListEmpty (&xs.WatchEvents) || - Last == GetFirstNode (&xs.WatchEvents)) { + (Last == GetFirstNode (&xs.WatchEvents))) + { EfiReleaseLock (&xs.WatchEventsLock); Status = XenStoreProcessMessage (); - if (Status != XENSTORE_STATUS_SUCCESS && Status != XENSTORE_STATUS_EAGAIN) { + if ((Status != XENSTORE_STATUS_SUCCESS) && (Status != XENSTORE_STATUS_EAGAIN)) { return Status; } + continue; } for (Entry = GetFirstNode (&xs.WatchEvents); Entry != Last && !IsNull (&xs.WatchEvents, Entry); - Entry = GetNextNode (&xs.WatchEvents, Entry)) { + Entry = GetNextNode (&xs.WatchEvents, Entry)) + { Message = XENSTORE_MESSAGE_FROM_LINK (Entry); if (Message->u.Watch.Handle == Token) { RemoveEntryList (Entry); EfiReleaseLock (&xs.WatchEventsLock); - FreePool((VOID*)Message->u.Watch.Vector); - FreePool(Message); + FreePool ((VOID *)Message->u.Watch.Vector); + FreePool (Message); return XENSTORE_STATUS_SUCCESS; } } + Last = GetFirstNode (&xs.WatchEvents); EfiReleaseLock (&xs.WatchEventsLock); } @@ -974,11 +1013,12 @@ XenStoreWaitWatch ( VOID EFIAPI NotifyEventChannelCheckForEvent ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { - XENSTORE_PRIVATE *xsp; + XENSTORE_PRIVATE *xsp; + xsp = (XENSTORE_PRIVATE *)Context; if (TestAndClearBit (xsp->EventChannel, xsp->Dev->SharedInfo->evtchn_pending)) { gBS->SignalEvent (Event); @@ -993,30 +1033,42 @@ NotifyEventChannelCheckForEvent ( STATIC EFI_STATUS XenStoreInitComms ( - XENSTORE_PRIVATE *xsp + XENSTORE_PRIVATE *xsp ) { - EFI_STATUS Status; - EFI_EVENT TimerEvent; - struct xenstore_domain_interface *XenStore = xsp->XenStore; + EFI_STATUS Status; + EFI_EVENT TimerEvent; + struct xenstore_domain_interface *XenStore = xsp->XenStore; Status = gBS->CreateEvent (EVT_TIMER, 0, NULL, NULL, &TimerEvent); - Status = gBS->SetTimer (TimerEvent, TimerRelative, - EFI_TIMER_PERIOD_SECONDS (5)); + Status = gBS->SetTimer ( + TimerEvent, + TimerRelative, + EFI_TIMER_PERIOD_SECONDS (5) + ); while (XenStore->rsp_prod != XenStore->rsp_cons) { Status = gBS->CheckEvent (TimerEvent); if (!EFI_ERROR (Status)) { - DEBUG ((DEBUG_WARN, "XENSTORE response ring is not quiescent " - "(%08x:%08x): fixing up\n", - XenStore->rsp_cons, XenStore->rsp_prod)); + DEBUG (( + DEBUG_WARN, + "XENSTORE response ring is not quiescent " + "(%08x:%08x): fixing up\n", + XenStore->rsp_cons, + XenStore->rsp_prod + )); XenStore->rsp_cons = XenStore->rsp_prod; } } + gBS->CloseEvent (TimerEvent); - Status = gBS->CreateEvent (EVT_NOTIFY_WAIT, TPL_NOTIFY, - NotifyEventChannelCheckForEvent, xsp, - &xsp->EventChannelEvent); + Status = gBS->CreateEvent ( + EVT_NOTIFY_WAIT, + TPL_NOTIFY, + NotifyEventChannelCheckForEvent, + xsp, + &xsp->EventChannelEvent + ); ASSERT_EFI_ERROR (Status); return Status; @@ -1031,23 +1083,28 @@ XenStoreInitComms ( **/ EFI_STATUS XenStoreInit ( - XENBUS_DEVICE *Dev + XENBUS_DEVICE *Dev ) { - EFI_STATUS Status; + EFI_STATUS Status; + /** * The HVM guest pseudo-physical frame number. This is Xen's mapping * of the true machine frame number into our "physical address space". */ - UINTN XenStoreGpfn; + UINTN XenStoreGpfn; xs.Dev = Dev; xs.EventChannel = (evtchn_port_t)XenHypercallHvmGetParam (HVM_PARAM_STORE_EVTCHN); - XenStoreGpfn = (UINTN)XenHypercallHvmGetParam (HVM_PARAM_STORE_PFN); - xs.XenStore = (VOID *) (XenStoreGpfn << EFI_PAGE_SHIFT); - DEBUG ((DEBUG_INFO, "XenBusInit: XenBus rings @%p, event channel %x\n", - xs.XenStore, xs.EventChannel)); + XenStoreGpfn = (UINTN)XenHypercallHvmGetParam (HVM_PARAM_STORE_PFN); + xs.XenStore = (VOID *)(XenStoreGpfn << EFI_PAGE_SHIFT); + DEBUG (( + DEBUG_INFO, + "XenBusInit: XenBus rings @%p, event channel %x\n", + xs.XenStore, + xs.EventChannel + )); InitializeListHead (&xs.ReplyList); InitializeListHead (&xs.WatchEvents); @@ -1065,7 +1122,7 @@ XenStoreInit ( VOID XenStoreDeinit ( - IN XENBUS_DEVICE *Dev + IN XENBUS_DEVICE *Dev ) { // @@ -1074,8 +1131,8 @@ XenStoreDeinit ( // it is stopped. // if (!IsListEmpty (&xs.RegisteredWatches)) { - XENSTORE_WATCH *Watch; - LIST_ENTRY *Entry; + XENSTORE_WATCH *Watch; + LIST_ENTRY *Entry; DEBUG ((DEBUG_WARN, "XenStore: RegisteredWatches is not empty, cleaning up...")); Entry = GetFirstNode (&xs.RegisteredWatches); while (!IsNull (&xs.RegisteredWatches, Entry)) { @@ -1091,25 +1148,25 @@ XenStoreDeinit ( // having cleanup the list RegisteredWatches. // if (!IsListEmpty (&xs.WatchEvents)) { - LIST_ENTRY *Entry; + LIST_ENTRY *Entry; DEBUG ((DEBUG_WARN, "XenStore: WatchEvents is not empty, cleaning up...")); Entry = GetFirstNode (&xs.WatchEvents); while (!IsNull (&xs.WatchEvents, Entry)) { - XENSTORE_MESSAGE *Message = XENSTORE_MESSAGE_FROM_LINK (Entry); + XENSTORE_MESSAGE *Message = XENSTORE_MESSAGE_FROM_LINK (Entry); Entry = GetNextNode (&xs.WatchEvents, Entry); RemoveEntryList (&Message->Link); - FreePool ((VOID*)Message->u.Watch.Vector); + FreePool ((VOID *)Message->u.Watch.Vector); FreePool (Message); } } if (!IsListEmpty (&xs.ReplyList)) { - XENSTORE_MESSAGE *Message; - LIST_ENTRY *Entry; + XENSTORE_MESSAGE *Message; + LIST_ENTRY *Entry; Entry = GetFirstNode (&xs.ReplyList); while (!IsNull (&xs.ReplyList, Entry)) { Message = XENSTORE_MESSAGE_FROM_LINK (Entry); - Entry = GetNextNode (&xs.ReplyList, Entry); + Entry = GetNextNode (&xs.ReplyList, Entry); RemoveEntryList (&Message->Link); FreePool (Message->u.Reply.Body); FreePool (Message); @@ -1121,7 +1178,7 @@ XenStoreDeinit ( if (xs.XenStore->server_features & XENSTORE_SERVER_FEATURE_RECONNECTION) { xs.XenStore->connection = XENSTORE_RECONNECT; XenEventChannelNotify (xs.Dev, xs.EventChannel); - while (*(volatile UINT32*)&xs.XenStore->connection == XENSTORE_RECONNECT) { + while (*(volatile UINT32 *)&xs.XenStore->connection == XENSTORE_RECONNECT) { XenStoreWaitForEvent (xs.EventChannelEvent, EFI_TIMER_PERIOD_MILLISECONDS (100)); } } else { @@ -1134,6 +1191,7 @@ XenStoreDeinit ( xs.XenStore->req_cons = xs.XenStore->req_prod = 0; xs.XenStore->rsp_cons = xs.XenStore->rsp_prod = 0; } + xs.XenStore = NULL; } @@ -1144,21 +1202,26 @@ XenStoreDeinit ( XENSTORE_STATUS XenStoreListDirectory ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node, - OUT UINT32 *DirectoryCountPtr, - OUT CONST CHAR8 ***DirectoryListPtr + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node, + OUT UINT32 *DirectoryCountPtr, + OUT CONST CHAR8 ***DirectoryListPtr ) { - CHAR8 *Path; - CHAR8 *TempStr; - UINT32 Len = 0; - XENSTORE_STATUS Status; - - Path = XenStoreJoin (DirectoryPath, Node); - Status = XenStoreSingle (Transaction, XS_DIRECTORY, Path, &Len, - (VOID **) &TempStr); + CHAR8 *Path; + CHAR8 *TempStr; + UINT32 Len = 0; + XENSTORE_STATUS Status; + + Path = XenStoreJoin (DirectoryPath, Node); + Status = XenStoreSingle ( + Transaction, + XS_DIRECTORY, + Path, + &Len, + (VOID **)&TempStr + ); FreePool (Path); if (Status != XENSTORE_STATUS_SUCCESS) { return Status; @@ -1171,38 +1234,44 @@ XenStoreListDirectory ( BOOLEAN XenStorePathExists ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *Directory, - IN CONST CHAR8 *Node + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *Directory, + IN CONST CHAR8 *Node ) { - CONST CHAR8 **TempStr; - XENSTORE_STATUS Status; - UINT32 TempNum; - - Status = XenStoreListDirectory (Transaction, Directory, Node, - &TempNum, &TempStr); + CONST CHAR8 **TempStr; + XENSTORE_STATUS Status; + UINT32 TempNum; + + Status = XenStoreListDirectory ( + Transaction, + Directory, + Node, + &TempNum, + &TempStr + ); if (Status != XENSTORE_STATUS_SUCCESS) { return FALSE; } - FreePool ((VOID*)TempStr); + + FreePool ((VOID *)TempStr); return TRUE; } XENSTORE_STATUS XenStoreRead ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node, - OUT UINT32 *LenPtr OPTIONAL, - OUT VOID **Result + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node, + OUT UINT32 *LenPtr OPTIONAL, + OUT VOID **Result ) { - CHAR8 *Path; - VOID *Value; - XENSTORE_STATUS Status; + CHAR8 *Path; + VOID *Value; + XENSTORE_STATUS Status; - Path = XenStoreJoin (DirectoryPath, Node); + Path = XenStoreJoin (DirectoryPath, Node); Status = XenStoreSingle (Transaction, XS_READ, Path, LenPtr, &Value); FreePool (Path); if (Status != XENSTORE_STATUS_SUCCESS) { @@ -1215,22 +1284,22 @@ XenStoreRead ( XENSTORE_STATUS XenStoreWrite ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node, - IN CONST CHAR8 *Str + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node, + IN CONST CHAR8 *Str ) { - CHAR8 *Path; - WRITE_REQUEST WriteRequest[2]; - XENSTORE_STATUS Status; + CHAR8 *Path; + WRITE_REQUEST WriteRequest[2]; + XENSTORE_STATUS Status; Path = XenStoreJoin (DirectoryPath, Node); - WriteRequest[0].Data = (VOID *) Path; - WriteRequest[0].Len = (UINT32)AsciiStrSize (Path); - WriteRequest[1].Data = (VOID *) Str; - WriteRequest[1].Len = (UINT32)AsciiStrLen (Str); + WriteRequest[0].Data = (VOID *)Path; + WriteRequest[0].Len = (UINT32)AsciiStrSize (Path); + WriteRequest[1].Data = (VOID *)Str; + WriteRequest[1].Len = (UINT32)AsciiStrLen (Str); Status = XenStoreTalkv (Transaction, XS_WRITE, WriteRequest, 2, NULL, NULL); FreePool (Path); @@ -1240,15 +1309,15 @@ XenStoreWrite ( XENSTORE_STATUS XenStoreRemove ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node ) { - CHAR8 *Path; - XENSTORE_STATUS Status; + CHAR8 *Path; + XENSTORE_STATUS Status; - Path = XenStoreJoin (DirectoryPath, Node); + Path = XenStoreJoin (DirectoryPath, Node); Status = XenStoreSingle (Transaction, XS_RM, Path, NULL, NULL); FreePool (Path); @@ -1260,11 +1329,16 @@ XenStoreTransactionStart ( OUT XENSTORE_TRANSACTION *Transaction ) { - CHAR8 *IdStr; - XENSTORE_STATUS Status; - - Status = XenStoreSingle (XST_NIL, XS_TRANSACTION_START, "", NULL, - (VOID **) &IdStr); + CHAR8 *IdStr; + XENSTORE_STATUS Status; + + Status = XenStoreSingle ( + XST_NIL, + XS_TRANSACTION_START, + "", + NULL, + (VOID **)&IdStr + ); if (Status == XENSTORE_STATUS_SUCCESS) { Transaction->Id = (UINT32)AsciiStrDecimalToUintn (IdStr); FreePool (IdStr); @@ -1275,11 +1349,11 @@ XenStoreTransactionStart ( XENSTORE_STATUS XenStoreTransactionEnd ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN BOOLEAN Abort + IN CONST XENSTORE_TRANSACTION *Transaction, + IN BOOLEAN Abort ) { - CHAR8 AbortStr[2]; + CHAR8 AbortStr[2]; AbortStr[0] = Abort ? 'F' : 'T'; AbortStr[1] = '\0'; @@ -1290,17 +1364,17 @@ XenStoreTransactionEnd ( XENSTORE_STATUS EFIAPI XenStoreVSPrint ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node, - IN CONST CHAR8 *FormatString, - IN VA_LIST Marker + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node, + IN CONST CHAR8 *FormatString, + IN VA_LIST Marker ) { - CHAR8 *Buf; - XENSTORE_STATUS Status; - UINTN BufSize; - VA_LIST Marker2; + CHAR8 *Buf; + XENSTORE_STATUS Status; + UINTN BufSize; + VA_LIST Marker2; VA_COPY (Marker2, Marker); BufSize = SPrintLengthAsciiFormat (FormatString, Marker2) + 1; @@ -1316,15 +1390,15 @@ XenStoreVSPrint ( XENSTORE_STATUS EFIAPI XenStoreSPrint ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node, - IN CONST CHAR8 *FormatString, + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node, + IN CONST CHAR8 *FormatString, ... ) { - VA_LIST Marker; - XENSTORE_STATUS Status; + VA_LIST Marker; + XENSTORE_STATUS Status; VA_START (Marker, FormatString); Status = XenStoreVSPrint (Transaction, DirectoryPath, Node, FormatString, Marker); @@ -1341,19 +1415,19 @@ XenStoreRegisterWatch ( ) { /* Pointer in ascii is the token. */ - CHAR8 Token[sizeof (XENSTORE_WATCH) * 2 + 1]; - XENSTORE_STATUS Status; - XENSTORE_WATCH *Watch; + CHAR8 Token[sizeof (XENSTORE_WATCH) * 2 + 1]; + XENSTORE_STATUS Status; + XENSTORE_WATCH *Watch; - Watch = AllocateZeroPool (sizeof (XENSTORE_WATCH)); + Watch = AllocateZeroPool (sizeof (XENSTORE_WATCH)); Watch->Signature = XENSTORE_WATCH_SIGNATURE; - Watch->Node = XenStoreJoin (DirectoryPath, Node); + Watch->Node = XenStoreJoin (DirectoryPath, Node); EfiAcquireLock (&xs.RegisteredWatchesLock); InsertTailList (&xs.RegisteredWatches, &Watch->Link); EfiReleaseLock (&xs.RegisteredWatchesLock); - AsciiSPrint (Token, sizeof (Token), "%p", (VOID*) Watch); + AsciiSPrint (Token, sizeof (Token), "%p", (VOID *)Watch); Status = XenStoreWatch (Watch->Node, Token); /* Ignore errors due to multiple registration. */ @@ -1376,15 +1450,15 @@ XenStoreRegisterWatch ( VOID XenStoreUnregisterWatch ( - IN XENSTORE_WATCH *Watch + IN XENSTORE_WATCH *Watch ) { - CHAR8 Token[sizeof (Watch) * 2 + 1]; - LIST_ENTRY *Entry; + CHAR8 Token[sizeof (Watch) * 2 + 1]; + LIST_ENTRY *Entry; ASSERT (Watch->Signature == XENSTORE_WATCH_SIGNATURE); - AsciiSPrint (Token, sizeof (Token), "%p", (VOID *) Watch); + AsciiSPrint (Token, sizeof (Token), "%p", (VOID *)Watch); if (XenStoreFindWatch (Token) == NULL) { return; } @@ -1399,21 +1473,21 @@ XenStoreUnregisterWatch ( EfiAcquireLock (&xs.WatchEventsLock); Entry = GetFirstNode (&xs.WatchEvents); while (!IsNull (&xs.WatchEvents, Entry)) { - XENSTORE_MESSAGE *Message = XENSTORE_MESSAGE_FROM_LINK (Entry); + XENSTORE_MESSAGE *Message = XENSTORE_MESSAGE_FROM_LINK (Entry); Entry = GetNextNode (&xs.WatchEvents, Entry); if (Message->u.Watch.Handle == Watch) { RemoveEntryList (&Message->Link); - FreePool ((VOID*)Message->u.Watch.Vector); + FreePool ((VOID *)Message->u.Watch.Vector); FreePool (Message); } } + EfiReleaseLock (&xs.WatchEventsLock); FreePool (Watch->Node); FreePool (Watch); } - // // XENBUS protocol // @@ -1421,8 +1495,8 @@ XenStoreUnregisterWatch ( XENSTORE_STATUS EFIAPI XenBusWaitForWatch ( - IN XENBUS_PROTOCOL *This, - IN VOID *Token + IN XENBUS_PROTOCOL *This, + IN VOID *Token ) { return XenStoreWaitWatch (Token); @@ -1431,10 +1505,10 @@ XenBusWaitForWatch ( XENSTORE_STATUS EFIAPI XenBusXenStoreRead ( - IN XENBUS_PROTOCOL *This, - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *Node, - OUT VOID **Value + IN XENBUS_PROTOCOL *This, + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *Node, + OUT VOID **Value ) { return XenStoreRead (Transaction, This->Node, Node, NULL, Value); @@ -1443,10 +1517,10 @@ XenBusXenStoreRead ( XENSTORE_STATUS EFIAPI XenBusXenStoreBackendRead ( - IN XENBUS_PROTOCOL *This, - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *Node, - OUT VOID **Value + IN XENBUS_PROTOCOL *This, + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *Node, + OUT VOID **Value ) { return XenStoreRead (Transaction, This->Backend, Node, NULL, Value); @@ -1455,9 +1529,9 @@ XenBusXenStoreBackendRead ( XENSTORE_STATUS EFIAPI XenBusXenStoreRemove ( - IN XENBUS_PROTOCOL *This, - IN CONST XENSTORE_TRANSACTION *Transaction, - IN const char *Node + IN XENBUS_PROTOCOL *This, + IN CONST XENSTORE_TRANSACTION *Transaction, + IN const char *Node ) { return XenStoreRemove (Transaction, This->Node, Node); @@ -1476,9 +1550,9 @@ XenBusXenStoreTransactionStart ( XENSTORE_STATUS EFIAPI XenBusXenStoreTransactionEnd ( - IN XENBUS_PROTOCOL *This, - IN CONST XENSTORE_TRANSACTION *Transaction, - IN BOOLEAN Abort + IN XENBUS_PROTOCOL *This, + IN CONST XENSTORE_TRANSACTION *Transaction, + IN BOOLEAN Abort ) { return XenStoreTransactionEnd (Transaction, Abort); @@ -1487,16 +1561,16 @@ XenBusXenStoreTransactionEnd ( XENSTORE_STATUS EFIAPI XenBusXenStoreSPrint ( - IN XENBUS_PROTOCOL *This, - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node, - IN CONST CHAR8 *FormatString, + IN XENBUS_PROTOCOL *This, + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node, + IN CONST CHAR8 *FormatString, ... ) { - VA_LIST Marker; - XENSTORE_STATUS Status; + VA_LIST Marker; + XENSTORE_STATUS Status; VA_START (Marker, FormatString); Status = XenStoreVSPrint (Transaction, DirectoryPath, Node, FormatString, Marker); @@ -1508,23 +1582,23 @@ XenBusXenStoreSPrint ( XENSTORE_STATUS EFIAPI XenBusRegisterWatch ( - IN XENBUS_PROTOCOL *This, - IN CONST CHAR8 *Node, - OUT VOID **Token + IN XENBUS_PROTOCOL *This, + IN CONST CHAR8 *Node, + OUT VOID **Token ) { - return XenStoreRegisterWatch (This->Node, Node, (XENSTORE_WATCH **) Token); + return XenStoreRegisterWatch (This->Node, Node, (XENSTORE_WATCH **)Token); } XENSTORE_STATUS EFIAPI XenBusRegisterWatchBackend ( - IN XENBUS_PROTOCOL *This, - IN CONST CHAR8 *Node, - OUT VOID **Token + IN XENBUS_PROTOCOL *This, + IN CONST CHAR8 *Node, + OUT VOID **Token ) { - return XenStoreRegisterWatch (This->Backend, Node, (XENSTORE_WATCH **) Token); + return XenStoreRegisterWatch (This->Backend, Node, (XENSTORE_WATCH **)Token); } VOID @@ -1534,5 +1608,5 @@ XenBusUnregisterWatch ( IN VOID *Token ) { - XenStoreUnregisterWatch ((XENSTORE_WATCH *) Token); + XenStoreUnregisterWatch ((XENSTORE_WATCH *)Token); } diff --git a/OvmfPkg/XenBusDxe/XenStore.h b/OvmfPkg/XenBusDxe/XenStore.h index effaad7336..b2ae805524 100644 --- a/OvmfPkg/XenBusDxe/XenStore.h +++ b/OvmfPkg/XenBusDxe/XenStore.h @@ -38,11 +38,11 @@ typedef struct _XENSTORE_WATCH XENSTORE_WATCH; **/ XENSTORE_STATUS XenStoreListDirectory ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node, - OUT UINT32 *DirectoryCountPtr, - OUT CONST CHAR8 ***DirectoryListPtr + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node, + OUT UINT32 *DirectoryCountPtr, + OUT CONST CHAR8 ***DirectoryListPtr ); /** @@ -58,9 +58,9 @@ XenStoreListDirectory ( **/ BOOLEAN XenStorePathExists ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *Directory, - IN CONST CHAR8 *Node + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *Directory, + IN CONST CHAR8 *Node ); /** @@ -82,11 +82,11 @@ XenStorePathExists ( **/ XENSTORE_STATUS XenStoreRead ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node, - OUT UINT32 *LenPtr OPTIONAL, - OUT VOID **Result + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node, + OUT UINT32 *LenPtr OPTIONAL, + OUT VOID **Result ); /** @@ -102,10 +102,10 @@ XenStoreRead ( **/ XENSTORE_STATUS XenStoreWrite ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node, - IN CONST CHAR8 *Str + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node, + IN CONST CHAR8 *Str ); /** @@ -120,9 +120,9 @@ XenStoreWrite ( **/ XENSTORE_STATUS XenStoreRemove ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node ); /** @@ -139,7 +139,7 @@ XenStoreRemove ( **/ XENSTORE_STATUS XenStoreTransactionStart ( - OUT XENSTORE_TRANSACTION *Transaction + OUT XENSTORE_TRANSACTION *Transaction ); /** @@ -154,8 +154,8 @@ XenStoreTransactionStart ( **/ XENSTORE_STATUS XenStoreTransactionEnd ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN BOOLEAN Abort + IN CONST XENSTORE_TRANSACTION *Transaction, + IN BOOLEAN Abort ); /** @@ -173,10 +173,10 @@ XenStoreTransactionEnd ( XENSTORE_STATUS EFIAPI XenStoreSPrint ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node, - IN CONST CHAR8 *FormatString, + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node, + IN CONST CHAR8 *FormatString, ... ); @@ -195,11 +195,11 @@ XenStoreSPrint ( XENSTORE_STATUS EFIAPI XenStoreVSPrint ( - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node, - IN CONST CHAR8 *FormatString, - IN VA_LIST Marker + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node, + IN CONST CHAR8 *FormatString, + IN VA_LIST Marker ); /** @@ -232,7 +232,7 @@ XenStoreRegisterWatch ( **/ VOID XenStoreUnregisterWatch ( - IN XENSTORE_WATCH *Watch + IN XENSTORE_WATCH *Watch ); /** @@ -240,18 +240,17 @@ XenStoreUnregisterWatch ( is the NUL string, the returned value contains the path string . - @param DirectoryPath The NUL terminated directory prefix for new path. + @param DirectoryPath The NUL terminated directory prefix for new path. @param Node The NUL terminated basename for the new path. @return A buffer containing the joined path. */ CHAR8 * XenStoreJoin ( - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node ); - /** Initialize the XenStore states and rings. @@ -261,7 +260,7 @@ XenStoreJoin ( **/ EFI_STATUS XenStoreInit ( - XENBUS_DEVICE *Dev + XENBUS_DEVICE *Dev ); /** @@ -271,10 +270,9 @@ XenStoreInit ( **/ VOID XenStoreDeinit ( - IN XENBUS_DEVICE *Dev + IN XENBUS_DEVICE *Dev ); - // // XENBUS protocol // @@ -282,34 +280,34 @@ XenStoreDeinit ( XENSTORE_STATUS EFIAPI XenBusWaitForWatch ( - IN XENBUS_PROTOCOL *This, - IN VOID *Token + IN XENBUS_PROTOCOL *This, + IN VOID *Token ); XENSTORE_STATUS EFIAPI XenBusXenStoreRead ( - IN XENBUS_PROTOCOL *This, - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *Node, - OUT VOID **Value + IN XENBUS_PROTOCOL *This, + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *Node, + OUT VOID **Value ); XENSTORE_STATUS EFIAPI XenBusXenStoreBackendRead ( - IN XENBUS_PROTOCOL *This, - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *Node, - OUT VOID **Value + IN XENBUS_PROTOCOL *This, + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *Node, + OUT VOID **Value ); XENSTORE_STATUS EFIAPI XenBusXenStoreRemove ( - IN XENBUS_PROTOCOL *This, - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *Node + IN XENBUS_PROTOCOL *This, + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *Node ); XENSTORE_STATUS @@ -322,36 +320,36 @@ XenBusXenStoreTransactionStart ( XENSTORE_STATUS EFIAPI XenBusXenStoreTransactionEnd ( - IN XENBUS_PROTOCOL *This, - IN CONST XENSTORE_TRANSACTION *Transaction, - IN BOOLEAN Abort + IN XENBUS_PROTOCOL *This, + IN CONST XENSTORE_TRANSACTION *Transaction, + IN BOOLEAN Abort ); XENSTORE_STATUS EFIAPI XenBusXenStoreSPrint ( - IN XENBUS_PROTOCOL *This, - IN CONST XENSTORE_TRANSACTION *Transaction, - IN CONST CHAR8 *DirectoryPath, - IN CONST CHAR8 *Node, - IN CONST CHAR8 *FormatString, + IN XENBUS_PROTOCOL *This, + IN CONST XENSTORE_TRANSACTION *Transaction, + IN CONST CHAR8 *DirectoryPath, + IN CONST CHAR8 *Node, + IN CONST CHAR8 *FormatString, ... ); XENSTORE_STATUS EFIAPI XenBusRegisterWatch ( - IN XENBUS_PROTOCOL *This, - IN CONST CHAR8 *Node, - OUT VOID **Token + IN XENBUS_PROTOCOL *This, + IN CONST CHAR8 *Node, + OUT VOID **Token ); XENSTORE_STATUS EFIAPI XenBusRegisterWatchBackend ( - IN XENBUS_PROTOCOL *This, - IN CONST CHAR8 *Node, - OUT VOID **Token + IN XENBUS_PROTOCOL *This, + IN CONST CHAR8 *Node, + OUT VOID **Token ); VOID diff --git a/OvmfPkg/XenIoPciDxe/XenIoPciDxe.c b/OvmfPkg/XenIoPciDxe/XenIoPciDxe.c index 0b3fd03e08..caf2c42b1e 100644 --- a/OvmfPkg/XenIoPciDxe/XenIoPciDxe.c +++ b/OvmfPkg/XenIoPciDxe/XenIoPciDxe.c @@ -22,8 +22,8 @@ #include #include -#define PCI_VENDOR_ID_XEN 0x5853 -#define PCI_DEVICE_ID_XEN_PLATFORM 0x0001 +#define PCI_VENDOR_ID_XEN 0x5853 +#define PCI_DEVICE_ID_XEN_PLATFORM 0x0001 /** @@ -53,14 +53,14 @@ STATIC EFI_STATUS EFIAPI XenIoPciDeviceBindingSupported ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - EFI_PCI_IO_PROTOCOL *PciIo; - PCI_TYPE00 Pci; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; // // Attempt to open the device with the PciIo set of interfaces. On success, @@ -96,7 +96,8 @@ XenIoPciDeviceBindingSupported ( if (Status == EFI_SUCCESS) { if ((Pci.Hdr.VendorId == PCI_VENDOR_ID_XEN) && - (Pci.Hdr.DeviceId == PCI_DEVICE_ID_XEN_PLATFORM)) { + (Pci.Hdr.DeviceId == PCI_DEVICE_ID_XEN_PLATFORM)) + { Status = EFI_SUCCESS; } else { Status = EFI_UNSUPPORTED; @@ -107,8 +108,12 @@ XenIoPciDeviceBindingSupported ( // We needed PCI IO access only transitorily, to see whether we support the // device or not. // - gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); return Status; } @@ -143,24 +148,29 @@ STATIC EFI_STATUS EFIAPI XenIoPciDeviceBindingStart ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { - EFI_STATUS Status; - XENIO_PROTOCOL *XenIo; - EFI_PCI_IO_PROTOCOL *PciIo; - EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *BarDesc; + EFI_STATUS Status; + XENIO_PROTOCOL *XenIo; + EFI_PCI_IO_PROTOCOL *PciIo; + EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *BarDesc; - XenIo = (XENIO_PROTOCOL *) AllocateZeroPool (sizeof *XenIo); + XenIo = (XENIO_PROTOCOL *)AllocateZeroPool (sizeof *XenIo); if (XenIo == NULL) { return EFI_OUT_OF_RESOURCES; } - Status = gBS->OpenProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, - (VOID **)&PciIo, This->DriverBindingHandle, - DeviceHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); + Status = gBS->OpenProtocol ( + DeviceHandle, + &gEfiPciIoProtocolGuid, + (VOID **)&PciIo, + This->DriverBindingHandle, + DeviceHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { goto FreeXenIo; } @@ -170,7 +180,7 @@ XenIoPciDeviceBindingStart ( // look like MMIO. The address space of the BAR1 will be used to map the // Grant Table. // - Status = PciIo->GetBarAttributes (PciIo, PCI_BAR_IDX1, NULL, (VOID**) &BarDesc); + Status = PciIo->GetBarAttributes (PciIo, PCI_BAR_IDX1, NULL, (VOID **)&BarDesc); ASSERT_EFI_ERROR (Status); ASSERT (BarDesc->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM); @@ -179,15 +189,23 @@ XenIoPciDeviceBindingStart ( XenIo->GrantTableAddress = BarDesc->AddrRangeMin; FreePool (BarDesc); - Status = gBS->InstallProtocolInterface (&DeviceHandle, - &gXenIoProtocolGuid, EFI_NATIVE_INTERFACE, XenIo); + Status = gBS->InstallProtocolInterface ( + &DeviceHandle, + &gXenIoProtocolGuid, + EFI_NATIVE_INTERFACE, + XenIo + ); if (!EFI_ERROR (Status)) { return EFI_SUCCESS; } - gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + gBS->CloseProtocol ( + DeviceHandle, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); FreeXenIo: FreePool (XenIo); @@ -224,14 +242,14 @@ STATIC EFI_STATUS EFIAPI XenIoPciDeviceBindingStop ( - IN EFI_DRIVER_BINDING_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer ) { - EFI_STATUS Status; - XENIO_PROTOCOL *XenIo; + EFI_STATUS Status; + XENIO_PROTOCOL *XenIo; Status = gBS->OpenProtocol ( DeviceHandle, // candidate device @@ -248,27 +266,33 @@ XenIoPciDeviceBindingStop ( // // Handle Stop() requests for in-use driver instances gracefully. // - Status = gBS->UninstallProtocolInterface (DeviceHandle, - &gXenIoProtocolGuid, XenIo); + Status = gBS->UninstallProtocolInterface ( + DeviceHandle, + &gXenIoProtocolGuid, + XenIo + ); if (EFI_ERROR (Status)) { return Status; } - Status = gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, - This->DriverBindingHandle, DeviceHandle); + Status = gBS->CloseProtocol ( + DeviceHandle, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + DeviceHandle + ); FreePool (XenIo); return Status; } - // // The static object that groups the Supported() (ie. probe), Start() and // Stop() functions of the driver together. Refer to UEFI Spec 2.3.1 + Errata // C, 10.1 EFI Driver Binding Protocol. // -STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { +STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { &XenIoPciDeviceBindingSupported, &XenIoPciDeviceBindingStart, &XenIoPciDeviceBindingStop, @@ -278,7 +302,6 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { NULL // DriverBindingHandle, ditto }; - // // The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and // EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name @@ -287,20 +310,20 @@ STATIC EFI_DRIVER_BINDING_PROTOCOL gDriverBinding = { // Guide for UEFI 2.3.1 v1.01, 11 UEFI Driver and Controller Names. // STATIC -EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { +EFI_UNICODE_STRING_TABLE mDriverNameTable[] = { { "eng;en", L"XenIo PCI Driver" }, { NULL, NULL } }; STATIC -EFI_COMPONENT_NAME_PROTOCOL gComponentName; +EFI_COMPONENT_NAME_PROTOCOL gComponentName; EFI_STATUS EFIAPI XenIoPciGetDriverName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN CHAR8 *Language, - OUT CHAR16 **DriverName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName ) { return LookupUnicodeString2 ( @@ -315,39 +338,38 @@ XenIoPciGetDriverName ( EFI_STATUS EFIAPI XenIoPciGetDeviceName ( - IN EFI_COMPONENT_NAME_PROTOCOL *This, - IN EFI_HANDLE DeviceHandle, - IN EFI_HANDLE ChildHandle, - IN CHAR8 *Language, - OUT CHAR16 **ControllerName + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_HANDLE ChildHandle, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName ) { return EFI_UNSUPPORTED; } STATIC -EFI_COMPONENT_NAME_PROTOCOL gComponentName = { +EFI_COMPONENT_NAME_PROTOCOL gComponentName = { &XenIoPciGetDriverName, &XenIoPciGetDeviceName, "eng" // SupportedLanguages, ISO 639-2 language codes }; STATIC -EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = { - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &XenIoPciGetDriverName, - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &XenIoPciGetDeviceName, +EFI_COMPONENT_NAME2_PROTOCOL gComponentName2 = { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)&XenIoPciGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)&XenIoPciGetDeviceName, "en" // SupportedLanguages, RFC 4646 language codes }; - // // Entry point of this driver. // EFI_STATUS EFIAPI XenIoPciDeviceEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { return EfiLibInstallDriverBindingComponentName2 ( diff --git a/OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c b/OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c index 9264a85df1..f76564b2f2 100644 --- a/OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c +++ b/OvmfPkg/XenIoPvhDxe/XenIoPvhDxe.c @@ -18,15 +18,15 @@ EFI_STATUS EFIAPI InitializeXenIoPvhDxe ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - VOID *Allocation; - EFI_STATUS Status; - EFI_HANDLE XenIoHandle; + VOID *Allocation; + EFI_STATUS Status; + EFI_HANDLE XenIoHandle; - Allocation = NULL; + Allocation = NULL; XenIoHandle = NULL; if (!XenPvhDetected ()) { @@ -39,7 +39,7 @@ InitializeXenIoPvhDxe ( goto Error; } - Status = XenIoMmioInstall (&XenIoHandle, (UINTN) Allocation); + Status = XenIoMmioInstall (&XenIoHandle, (UINTN)Allocation); if (EFI_ERROR (Status)) { goto Error; } @@ -50,5 +50,6 @@ Error: if (Allocation != NULL) { FreePages (Allocation, FixedPcdGet32 (PcdXenGrantFrames)); } + return Status; } diff --git a/OvmfPkg/XenPlatformPei/AmdSev.c b/OvmfPkg/XenPlatformPei/AmdSev.c index 4ed448632a..3b79c1837f 100644 --- a/OvmfPkg/XenPlatformPei/AmdSev.c +++ b/OvmfPkg/XenPlatformPei/AmdSev.c @@ -28,8 +28,8 @@ AmdSevInitialize ( VOID ) { - UINT64 EncryptionMask; - RETURN_STATUS PcdStatus; + UINT64 EncryptionMask; + RETURN_STATUS PcdStatus; // // Check if SEV is enabled @@ -42,7 +42,7 @@ AmdSevInitialize ( // Set Memory Encryption Mask PCD // EncryptionMask = MemEncryptSevGetEncryptionMask (); - PcdStatus = PcdSet64S (PcdPteMemoryEncryptionAddressOrMask, EncryptionMask); + PcdStatus = PcdSet64S (PcdPteMemoryEncryptionAddressOrMask, EncryptionMask); ASSERT_RETURN_ERROR (PcdStatus); DEBUG ((DEBUG_INFO, "SEV is enabled (mask 0x%lx)\n", EncryptionMask)); diff --git a/OvmfPkg/XenPlatformPei/ClearCache.c b/OvmfPkg/XenPlatformPei/ClearCache.c index fab53633a9..71e63ab868 100644 --- a/OvmfPkg/XenPlatformPei/ClearCache.c +++ b/OvmfPkg/XenPlatformPei/ClearCache.c @@ -30,7 +30,7 @@ STATIC VOID EFIAPI ClearCache ( - IN OUT VOID *WorkSpace + IN OUT VOID *WorkSpace ) { WriteBackInvalidateDataCache (); @@ -57,8 +57,8 @@ ClearCacheOnMpServicesAvailable ( IN VOID *Ppi ) { - EFI_PEI_MP_SERVICES_PPI *MpServices; - EFI_STATUS Status; + EFI_PEI_MP_SERVICES_PPI *MpServices; + EFI_STATUS Status; DEBUG ((DEBUG_INFO, "%a: %a\n", gEfiCallerBaseName, __FUNCTION__)); @@ -66,15 +66,15 @@ ClearCacheOnMpServicesAvailable ( // Clear cache on all the APs in parallel. // MpServices = Ppi; - Status = MpServices->StartupAllAPs ( - (CONST EFI_PEI_SERVICES **)PeiServices, - MpServices, - ClearCache, // Procedure - FALSE, // SingleThread - 0, // TimeoutInMicroSeconds: inf. - NULL // ProcedureArgument - ); - if (EFI_ERROR (Status) && Status != EFI_NOT_STARTED) { + Status = MpServices->StartupAllAPs ( + (CONST EFI_PEI_SERVICES **)PeiServices, + MpServices, + ClearCache, // Procedure + FALSE, // SingleThread + 0, // TimeoutInMicroSeconds: inf. + NULL // ProcedureArgument + ); + if (EFI_ERROR (Status) && (Status != EFI_NOT_STARTED)) { DEBUG ((DEBUG_ERROR, "%a: StartupAllAps(): %r\n", __FUNCTION__, Status)); return Status; } @@ -90,7 +90,7 @@ ClearCacheOnMpServicesAvailable ( // Notification object for registering the callback, for when // EFI_PEI_MP_SERVICES_PPI becomes available. // -STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mMpServicesNotify = { +STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mMpServicesNotify = { EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | // Flags EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, &gEfiPeiMpServicesPpiGuid, // Guid @@ -102,11 +102,15 @@ InstallClearCacheCallback ( VOID ) { - EFI_STATUS Status; + EFI_STATUS Status; Status = PeiServicesNotifyPpi (&mMpServicesNotify); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: failed to set up MP Services callback: %r\n", - __FUNCTION__, Status)); + DEBUG (( + DEBUG_ERROR, + "%a: failed to set up MP Services callback: %r\n", + __FUNCTION__, + Status + )); } } diff --git a/OvmfPkg/XenPlatformPei/Cmos.c b/OvmfPkg/XenPlatformPei/Cmos.c index 5d9ee67cd8..9b5993a43a 100644 --- a/OvmfPkg/XenPlatformPei/Cmos.c +++ b/OvmfPkg/XenPlatformPei/Cmos.c @@ -8,7 +8,6 @@ **/ - #include "Cmos.h" #include "Library/IoLib.h" @@ -26,14 +25,13 @@ UINT8 EFIAPI CmosRead8 ( - IN UINTN Index + IN UINTN Index ) { - IoWrite8 (0x70, (UINT8) Index); + IoWrite8 (0x70, (UINT8)Index); return IoRead8 (0x71); } - /** Writes 8-bits of CMOS data. @@ -49,12 +47,11 @@ CmosRead8 ( UINT8 EFIAPI CmosWrite8 ( - IN UINTN Index, - IN UINT8 Value + IN UINTN Index, + IN UINT8 Value ) { - IoWrite8 (0x70, (UINT8) Index); + IoWrite8 (0x70, (UINT8)Index); IoWrite8 (0x71, Value); return Value; } - diff --git a/OvmfPkg/XenPlatformPei/Cmos.h b/OvmfPkg/XenPlatformPei/Cmos.h index 80ffcb002f..8fca4866b4 100644 --- a/OvmfPkg/XenPlatformPei/Cmos.h +++ b/OvmfPkg/XenPlatformPei/Cmos.h @@ -25,7 +25,7 @@ UINT8 EFIAPI CmosRead8 ( - IN UINTN Index + IN UINTN Index ); /** @@ -43,10 +43,8 @@ CmosRead8 ( UINT8 EFIAPI CmosWrite8 ( - IN UINTN Index, - IN UINT8 Value + IN UINTN Index, + IN UINT8 Value ); - #endif - diff --git a/OvmfPkg/XenPlatformPei/Fv.c b/OvmfPkg/XenPlatformPei/Fv.c index 70e9b52700..871a2c1c5b 100644 --- a/OvmfPkg/XenPlatformPei/Fv.c +++ b/OvmfPkg/XenPlatformPei/Fv.c @@ -15,7 +15,6 @@ #include #include - /** Publish PEI & DXE (Decompressed) Memory based FVs to let PEI and DXE know about them. @@ -65,7 +64,7 @@ PeiFvInitialization ( // PeiServicesInstallFvInfoPpi ( NULL, - (VOID *)(UINTN) PcdGet32 (PcdOvmfDxeMemFvBase), + (VOID *)(UINTN)PcdGet32 (PcdOvmfDxeMemFvBase), PcdGet32 (PcdOvmfDxeMemFvSize), NULL, NULL @@ -73,4 +72,3 @@ PeiFvInitialization ( return EFI_SUCCESS; } - diff --git a/OvmfPkg/XenPlatformPei/MemDetect.c b/OvmfPkg/XenPlatformPei/MemDetect.c index fa1be888d6..d412d1f4db 100644 --- a/OvmfPkg/XenPlatformPei/MemDetect.c +++ b/OvmfPkg/XenPlatformPei/MemDetect.c @@ -34,20 +34,20 @@ Module Name: #include "Platform.h" #include "Cmos.h" -UINT8 mPhysMemAddressWidth; +UINT8 mPhysMemAddressWidth; -STATIC UINT32 mS3AcpiReservedMemoryBase; -STATIC UINT32 mS3AcpiReservedMemorySize; +STATIC UINT32 mS3AcpiReservedMemoryBase; +STATIC UINT32 mS3AcpiReservedMemorySize; -STATIC UINT16 mQ35TsegMbytes; +STATIC UINT16 mQ35TsegMbytes; VOID Q35TsegMbytesInitialization ( VOID ) { - UINT16 ExtendedTsegMbytes; - RETURN_STATUS PcdStatus; + UINT16 ExtendedTsegMbytes; + RETURN_STATUS PcdStatus; if (mHostBridgeDevId != INTEL_Q35_MCH_DEVICE_ID) { DEBUG (( @@ -99,16 +99,16 @@ Q35TsegMbytesInitialization ( STATIC UINT64 GetHighestSystemMemoryAddress ( - BOOLEAN Below4gb + BOOLEAN Below4gb ) { - EFI_E820_ENTRY64 *E820Map; - UINT32 E820EntriesCount; - EFI_E820_ENTRY64 *Entry; - EFI_STATUS Status; - UINT32 Loop; - UINT64 HighestAddress; - UINT64 EntryEnd; + EFI_E820_ENTRY64 *E820Map; + UINT32 E820EntriesCount; + EFI_E820_ENTRY64 *Entry; + EFI_STATUS Status; + UINT32 Loop; + UINT64 HighestAddress; + UINT64 EntryEnd; HighestAddress = 0; @@ -116,12 +116,12 @@ GetHighestSystemMemoryAddress ( ASSERT_EFI_ERROR (Status); for (Loop = 0; Loop < E820EntriesCount; Loop++) { - Entry = E820Map + Loop; + Entry = E820Map + Loop; EntryEnd = Entry->BaseAddr + Entry->Length; - if (Entry->Type == EfiAcpiAddressRangeMemory && - EntryEnd > HighestAddress) { - + if ((Entry->Type == EfiAcpiAddressRangeMemory) && + (EntryEnd > HighestAddress)) + { if (Below4gb && (EntryEnd <= BASE_4GB)) { HighestAddress = EntryEnd; } else if (!Below4gb && (EntryEnd >= BASE_4GB)) { @@ -141,8 +141,8 @@ GetSystemMemorySizeBelow4gb ( VOID ) { - UINT8 Cmos0x34; - UINT8 Cmos0x35; + UINT8 Cmos0x34; + UINT8 Cmos0x35; // // In PVH case, there is no CMOS, we have to calculate the memory size @@ -166,10 +166,10 @@ GetSystemMemorySizeBelow4gb ( // into the calculation to get the total memory size. // - Cmos0x34 = (UINT8) CmosRead8 (0x34); - Cmos0x35 = (UINT8) CmosRead8 (0x35); + Cmos0x34 = (UINT8)CmosRead8 (0x34); + Cmos0x35 = (UINT8)CmosRead8 (0x35); - return (UINT32) (((UINTN)((Cmos0x35 << 8) + Cmos0x34) << 16) + SIZE_16MB); + return (UINT32)(((UINTN)((Cmos0x35 << 8) + Cmos0x34) << 16) + SIZE_16MB); } /** @@ -180,12 +180,12 @@ AddressWidthInitialization ( VOID ) { - UINT32 RegEax; + UINT32 RegEax; AsmCpuid (0x80000000, &RegEax, NULL, NULL, NULL); if (RegEax >= 0x80000008) { AsmCpuid (0x80000008, &RegEax, NULL, NULL, NULL); - mPhysMemAddressWidth = (UINT8) RegEax; + mPhysMemAddressWidth = (UINT8)RegEax; } else { mPhysMemAddressWidth = 36; } @@ -208,21 +208,22 @@ GetPeiMemoryCap ( VOID ) { - BOOLEAN Page1GSupport; - UINT32 RegEax; - UINT32 RegEdx; - UINT32 Pml4Entries; - UINT32 PdpEntries; - UINTN TotalPages; + BOOLEAN Page1GSupport; + UINT32 RegEax; + UINT32 RegEdx; + UINT32 Pml4Entries; + UINT32 PdpEntries; + UINTN TotalPages; // // If DXE is 32-bit, then just return the traditional 64 MB cap. // -#ifdef MDE_CPU_IA32 + #ifdef MDE_CPU_IA32 if (!FeaturePcdGet (PcdDxeIplSwitchToLongMode)) { return SIZE_64MB; } -#endif + + #endif // // Dependent on physical address width, PEI memory allocations can be @@ -243,7 +244,7 @@ GetPeiMemoryCap ( if (mPhysMemAddressWidth <= 39) { Pml4Entries = 1; - PdpEntries = 1 << (mPhysMemAddressWidth - 30); + PdpEntries = 1 << (mPhysMemAddressWidth - 30); ASSERT (PdpEntries <= 0x200); } else { Pml4Entries = 1 << (mPhysMemAddressWidth - 39); @@ -252,7 +253,7 @@ GetPeiMemoryCap ( } TotalPages = Page1GSupport ? Pml4Entries + 1 : - (PdpEntries + 1) * Pml4Entries + 1; + (PdpEntries + 1) * Pml4Entries + 1; ASSERT (TotalPages <= 0x40201); // @@ -263,7 +264,6 @@ GetPeiMemoryCap ( return (UINT32)(EFI_PAGES_TO_SIZE (TotalPages) + SIZE_64MB); } - /** Publish PEI core memory @@ -275,11 +275,11 @@ PublishPeiMemory ( VOID ) { - EFI_STATUS Status; - EFI_PHYSICAL_ADDRESS MemoryBase; - UINT64 MemorySize; - UINT32 LowerMemorySize; - UINT32 PeiMemoryCap; + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS MemoryBase; + UINT64 MemorySize; + UINT32 LowerMemorySize; + UINT32 PeiMemoryCap; LowerMemorySize = GetSystemMemorySizeBelow4gb (); @@ -288,8 +288,13 @@ PublishPeiMemory ( MemorySize = mS3AcpiReservedMemorySize; } else { PeiMemoryCap = GetPeiMemoryCap (); - DEBUG ((DEBUG_INFO, "%a: mPhysMemAddressWidth=%d PeiMemoryCap=%u KB\n", - __FUNCTION__, mPhysMemAddressWidth, PeiMemoryCap >> 10)); + DEBUG (( + DEBUG_INFO, + "%a: mPhysMemAddressWidth=%d PeiMemoryCap=%u KB\n", + __FUNCTION__, + mPhysMemAddressWidth, + PeiMemoryCap >> 10 + )); // // Determine the range of memory to use during PEI @@ -306,13 +311,12 @@ PublishPeiMemory ( // // Publish this memory to the PEI Core // - Status = PublishSystemMemory(MemoryBase, MemorySize); + Status = PublishSystemMemory (MemoryBase, MemorySize); ASSERT_EFI_ERROR (Status); return Status; } - /** Publish system RAM and reserve memory regions @@ -336,12 +340,12 @@ InitializeRamRegions ( // such that they would overlap the LockBox storage. // ZeroMem ( - (VOID*)(UINTN) PcdGet32 (PcdOvmfLockBoxStorageBase), - (UINTN) PcdGet32 (PcdOvmfLockBoxStorageSize) + (VOID *)(UINTN)PcdGet32 (PcdOvmfLockBoxStorageBase), + (UINTN)PcdGet32 (PcdOvmfLockBoxStorageSize) ); BuildMemoryAllocationHob ( - (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdOvmfLockBoxStorageBase), - (UINT64)(UINTN) PcdGet32 (PcdOvmfLockBoxStorageSize), + (EFI_PHYSICAL_ADDRESS)(UINTN)PcdGet32 (PcdOvmfLockBoxStorageBase), + (UINT64)(UINTN)PcdGet32 (PcdOvmfLockBoxStorageSize), EfiBootServicesData ); } diff --git a/OvmfPkg/XenPlatformPei/Platform.c b/OvmfPkg/XenPlatformPei/Platform.c index e60478fdb4..2d97a41ca7 100644 --- a/OvmfPkg/XenPlatformPei/Platform.c +++ b/OvmfPkg/XenPlatformPei/Platform.c @@ -36,7 +36,7 @@ #include "Platform.h" #include "Cmos.h" -EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = { +EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = { { EfiACPIMemoryNVS, 0x004 }, { EfiACPIReclaimMemory, 0x008 }, { EfiReservedMemoryType, 0x004 }, @@ -47,8 +47,7 @@ EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = { { EfiMaxMemoryType, 0x000 } }; - -EFI_PEI_PPI_DESCRIPTOR mPpiBootMode[] = { +EFI_PEI_PPI_DESCRIPTOR mPpiBootMode[] = { { EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, &gEfiPeiMasterBootModePpiGuid, @@ -56,24 +55,22 @@ EFI_PEI_PPI_DESCRIPTOR mPpiBootMode[] = { } }; +UINT16 mHostBridgeDevId; -UINT16 mHostBridgeDevId; - -EFI_BOOT_MODE mBootMode = BOOT_WITH_FULL_CONFIGURATION; - +EFI_BOOT_MODE mBootMode = BOOT_WITH_FULL_CONFIGURATION; VOID AddIoMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize ) { BuildResourceDescriptorHob ( EFI_RESOURCE_MEMORY_MAPPED_IO, - EFI_RESOURCE_ATTRIBUTE_PRESENT | - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | - EFI_RESOURCE_ATTRIBUTE_TESTED, + EFI_RESOURCE_ATTRIBUTE_PRESENT | + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | + EFI_RESOURCE_ATTRIBUTE_TESTED, MemoryBase, MemorySize ); @@ -81,23 +78,23 @@ AddIoMemoryBaseSizeHob ( VOID AddReservedMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize, - BOOLEAN Cacheable + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize, + BOOLEAN Cacheable ) { BuildResourceDescriptorHob ( EFI_RESOURCE_MEMORY_RESERVED, - EFI_RESOURCE_ATTRIBUTE_PRESENT | - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | - (Cacheable ? - EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE : - 0 - ) | - EFI_RESOURCE_ATTRIBUTE_TESTED, + EFI_RESOURCE_ATTRIBUTE_PRESENT | + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | + (Cacheable ? + EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE : + 0 + ) | + EFI_RESOURCE_ATTRIBUTE_TESTED, MemoryBase, MemorySize ); @@ -105,64 +102,64 @@ AddReservedMemoryBaseSizeHob ( VOID AddReservedMemoryRangeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - EFI_PHYSICAL_ADDRESS MemoryLimit, - BOOLEAN Cacheable + EFI_PHYSICAL_ADDRESS MemoryBase, + EFI_PHYSICAL_ADDRESS MemoryLimit, + BOOLEAN Cacheable ) { - AddReservedMemoryBaseSizeHob (MemoryBase, - (UINT64)(MemoryLimit - MemoryBase), Cacheable); + AddReservedMemoryBaseSizeHob ( + MemoryBase, + (UINT64)(MemoryLimit - MemoryBase), + Cacheable + ); } VOID AddIoMemoryRangeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - EFI_PHYSICAL_ADDRESS MemoryLimit + EFI_PHYSICAL_ADDRESS MemoryBase, + EFI_PHYSICAL_ADDRESS MemoryLimit ) { AddIoMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase)); } - VOID AddMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize ) { BuildResourceDescriptorHob ( EFI_RESOURCE_SYSTEM_MEMORY, - EFI_RESOURCE_ATTRIBUTE_PRESENT | - EFI_RESOURCE_ATTRIBUTE_INITIALIZED | - EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | - EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | - EFI_RESOURCE_ATTRIBUTE_TESTED, + EFI_RESOURCE_ATTRIBUTE_PRESENT | + EFI_RESOURCE_ATTRIBUTE_INITIALIZED | + EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE | + EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE | + EFI_RESOURCE_ATTRIBUTE_TESTED, MemoryBase, MemorySize ); } - VOID AddMemoryRangeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - EFI_PHYSICAL_ADDRESS MemoryLimit + EFI_PHYSICAL_ADDRESS MemoryBase, + EFI_PHYSICAL_ADDRESS MemoryLimit ) { AddMemoryBaseSizeHob (MemoryBase, (UINT64)(MemoryLimit - MemoryBase)); } - VOID MemMapInitialization ( VOID ) { - UINT64 PciIoBase; - UINT64 PciIoSize; - RETURN_STATUS PcdStatus; + UINT64 PciIoBase; + UINT64 PciIoSize; + RETURN_STATUS PcdStatus; PciIoBase = 0xC000; PciIoSize = 0x4000; @@ -173,7 +170,7 @@ MemMapInitialization ( BuildGuidDataHob ( &gEfiMemoryTypeInformationGuid, mDefaultMemoryTypeInformation, - sizeof(mDefaultMemoryTypeInformation) + sizeof (mDefaultMemoryTypeInformation) ); // @@ -203,8 +200,8 @@ PciExBarInitialization ( ) { union { - UINT64 Uint64; - UINT32 Uint32[2]; + UINT64 Uint64; + UINT32 Uint32[2]; } PciExBarBase; // @@ -243,13 +240,13 @@ MiscInitialization ( VOID ) { - UINTN PmCmd; - UINTN Pmba; - UINT32 PmbaAndVal; - UINT32 PmbaOrVal; - UINTN AcpiCtlReg; - UINT8 AcpiEnBit; - RETURN_STATUS PcdStatus; + UINTN PmCmd; + UINTN Pmba; + UINT32 PmbaAndVal; + UINT32 PmbaOrVal; + UINTN AcpiCtlReg; + UINT8 AcpiEnBit; + RETURN_STATUS PcdStatus; // // Disable A20 Mask @@ -290,11 +287,17 @@ MiscInitialization ( // return; } - DEBUG ((DEBUG_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", - __FUNCTION__, mHostBridgeDevId)); + + DEBUG (( + DEBUG_ERROR, + "%a: Unknown Host Bridge Device ID: 0x%04x\n", + __FUNCTION__, + mHostBridgeDevId + )); ASSERT (FALSE); return; } + PcdStatus = PcdSet16S (PcdOvmfHostBridgePciDevId, mHostBridgeDevId); ASSERT_RETURN_ERROR (PcdStatus); @@ -337,17 +340,17 @@ MiscInitialization ( } } - VOID BootModeInitialization ( VOID ) { - EFI_STATUS Status; + EFI_STATUS Status; if (CmosRead8 (0xF) == 0xFE) { mBootMode = BOOT_ON_S3_RESUME; } + CmosWrite8 (0xF, 0x00); Status = PeiServicesSetBootMode (mBootMode); @@ -357,13 +360,12 @@ BootModeInitialization ( ASSERT_EFI_ERROR (Status); } - VOID ReserveEmuVariableNvStore ( ) { - EFI_PHYSICAL_ADDRESS VariableStore; - RETURN_STATUS PcdStatus; + EFI_PHYSICAL_ADDRESS VariableStore; + RETURN_STATUS PcdStatus; // // Allocate storage for NV variables early on so it will be @@ -373,25 +375,25 @@ ReserveEmuVariableNvStore ( // VariableStore = (EFI_PHYSICAL_ADDRESS)(UINTN) - AllocateRuntimePages ( - EFI_SIZE_TO_PAGES (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) - ); - DEBUG ((DEBUG_INFO, - "Reserved variable store memory: 0x%lX; size: %dkb\n", - VariableStore, - (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) / 1024 - )); + AllocateRuntimePages ( + EFI_SIZE_TO_PAGES (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) + ); + DEBUG (( + DEBUG_INFO, + "Reserved variable store memory: 0x%lX; size: %dkb\n", + VariableStore, + (2 * PcdGet32 (PcdFlashNvStorageFtwSpareSize)) / 1024 + )); PcdStatus = PcdSet64S (PcdEmuVariableNvStoreReserved, VariableStore); ASSERT_RETURN_ERROR (PcdStatus); } - VOID DebugDumpCmos ( VOID ) { - UINT32 Loop; + UINT32 Loop; DEBUG ((DEBUG_INFO, "CMOS:\n")); @@ -399,6 +401,7 @@ DebugDumpCmos ( if ((Loop % 0x10) == 0) { DEBUG ((DEBUG_INFO, "%02x:", Loop)); } + DEBUG ((DEBUG_INFO, " %02x", CmosRead8 (Loop))); if ((Loop % 0x10) == 0xf) { DEBUG ((DEBUG_INFO, "\n")); @@ -406,8 +409,6 @@ DebugDumpCmos ( } } - - /** Perform Platform PEI initialization. @@ -424,7 +425,7 @@ InitializeXenPlatform ( IN CONST EFI_PEI_SERVICES **PeiServices ) { - EFI_STATUS Status; + EFI_STATUS Status; DEBUG ((DEBUG_INFO, "Platform PEIM Loaded\n")); diff --git a/OvmfPkg/XenPlatformPei/Platform.h b/OvmfPkg/XenPlatformPei/Platform.h index 67887c9c4c..039af50ffa 100644 --- a/OvmfPkg/XenPlatformPei/Platform.h +++ b/OvmfPkg/XenPlatformPei/Platform.h @@ -15,40 +15,40 @@ VOID AddIoMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize ); VOID AddIoMemoryRangeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - EFI_PHYSICAL_ADDRESS MemoryLimit + EFI_PHYSICAL_ADDRESS MemoryBase, + EFI_PHYSICAL_ADDRESS MemoryLimit ); VOID AddMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize ); VOID AddMemoryRangeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - EFI_PHYSICAL_ADDRESS MemoryLimit + EFI_PHYSICAL_ADDRESS MemoryBase, + EFI_PHYSICAL_ADDRESS MemoryLimit ); VOID AddReservedMemoryBaseSizeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - UINT64 MemorySize, - BOOLEAN Cacheable + EFI_PHYSICAL_ADDRESS MemoryBase, + UINT64 MemorySize, + BOOLEAN Cacheable ); VOID AddReservedMemoryRangeHob ( - EFI_PHYSICAL_ADDRESS MemoryBase, - EFI_PHYSICAL_ADDRESS MemoryLimit, - BOOLEAN Cacheable + EFI_PHYSICAL_ADDRESS MemoryBase, + EFI_PHYSICAL_ADDRESS MemoryLimit, + BOOLEAN Cacheable ); VOID @@ -118,13 +118,13 @@ XenPublishRamRegions ( EFI_STATUS XenGetE820Map ( - EFI_E820_ENTRY64 **Entries, - UINT32 *Count + EFI_E820_ENTRY64 **Entries, + UINT32 *Count ); EFI_STATUS PhysicalAddressIdentityMapping ( - IN EFI_PHYSICAL_ADDRESS AddressToMap + IN EFI_PHYSICAL_ADDRESS AddressToMap ); VOID @@ -132,10 +132,10 @@ CalibrateLapicTimer ( VOID ); -extern EFI_BOOT_MODE mBootMode; +extern EFI_BOOT_MODE mBootMode; -extern UINT8 mPhysMemAddressWidth; +extern UINT8 mPhysMemAddressWidth; -extern UINT16 mHostBridgeDevId; +extern UINT16 mHostBridgeDevId; #endif // _PLATFORM_PEI_H_INCLUDED_ diff --git a/OvmfPkg/XenPlatformPei/Xen.c b/OvmfPkg/XenPlatformPei/Xen.c index 9c66418959..7f00eef11e 100644 --- a/OvmfPkg/XenPlatformPei/Xen.c +++ b/OvmfPkg/XenPlatformPei/Xen.c @@ -37,17 +37,17 @@ #include "Platform.h" #include "Xen.h" -STATIC UINT32 mXenLeaf = 0; +STATIC UINT32 mXenLeaf = 0; -EFI_XEN_INFO mXenInfo; +EFI_XEN_INFO mXenInfo; // // Location of the firmware info struct setup by hvmloader. // Only the E820 table is used by OVMF. // -EFI_XEN_OVMF_INFO *mXenHvmloaderInfo; -STATIC EFI_E820_ENTRY64 mE820Entries[128]; -STATIC UINT32 mE820EntriesCount; +EFI_XEN_OVMF_INFO *mXenHvmloaderInfo; +STATIC EFI_E820_ENTRY64 mE820Entries[128]; +STATIC UINT32 mE820EntriesCount; /** Returns E820 map provided by Xen @@ -59,23 +59,23 @@ STATIC UINT32 mE820EntriesCount; **/ EFI_STATUS XenGetE820Map ( - EFI_E820_ENTRY64 **Entries, - UINT32 *Count + EFI_E820_ENTRY64 **Entries, + UINT32 *Count ) { - INTN ReturnCode; - xen_memory_map_t Parameters; - UINTN LoopIndex; - UINTN Index; - EFI_E820_ENTRY64 TmpEntry; + INTN ReturnCode; + xen_memory_map_t Parameters; + UINTN LoopIndex; + UINTN Index; + EFI_E820_ENTRY64 TmpEntry; // // Get E820 produced by hvmloader // if (mXenHvmloaderInfo != NULL) { ASSERT (mXenHvmloaderInfo->E820 < MAX_ADDRESS); - *Entries = (EFI_E820_ENTRY64 *)(UINTN) mXenHvmloaderInfo->E820; - *Count = mXenHvmloaderInfo->E820EntriesCount; + *Entries = (EFI_E820_ENTRY64 *)(UINTN)mXenHvmloaderInfo->E820; + *Count = mXenHvmloaderInfo->E820EntriesCount; return EFI_SUCCESS; } @@ -86,7 +86,7 @@ XenGetE820Map ( if (mE820EntriesCount > 0) { *Entries = mE820Entries; - *Count = mE820EntriesCount; + *Count = mE820EntriesCount; return EFI_SUCCESS; } @@ -105,14 +105,14 @@ XenGetE820Map ( for (LoopIndex = 1; LoopIndex < mE820EntriesCount; LoopIndex++) { for (Index = LoopIndex; Index < mE820EntriesCount; Index++) { if (mE820Entries[Index - 1].BaseAddr > mE820Entries[Index].BaseAddr) { - TmpEntry = mE820Entries[Index]; - mE820Entries[Index] = mE820Entries[Index - 1]; + TmpEntry = mE820Entries[Index]; + mE820Entries[Index] = mE820Entries[Index - 1]; mE820Entries[Index - 1] = TmpEntry; } } } - *Count = mE820EntriesCount; + *Count = mE820EntriesCount; *Entries = mE820Entries; return EFI_SUCCESS; @@ -128,14 +128,14 @@ EFI_STATUS XenConnect ( ) { - UINT32 Index; - UINT32 TransferReg; - UINT32 TransferPages; - UINT32 XenVersion; - EFI_XEN_OVMF_INFO *Info; - CHAR8 Sig[sizeof (Info->Signature) + 1]; - UINT32 *PVHResetVectorData; - RETURN_STATUS Status; + UINT32 Index; + UINT32 TransferReg; + UINT32 TransferPages; + UINT32 XenVersion; + EFI_XEN_OVMF_INFO *Info; + CHAR8 Sig[sizeof (Info->Signature) + 1]; + UINT32 *PVHResetVectorData; + RETURN_STATUS Status; ASSERT (mXenLeaf != 0); @@ -150,9 +150,11 @@ XenConnect ( } for (Index = 0; Index < TransferPages; Index++) { - AsmWriteMsr64 (TransferReg, - (UINTN) mXenInfo.HyperPages + - (Index << EFI_PAGE_SHIFT) + Index); + AsmWriteMsr64 ( + TransferReg, + (UINTN)mXenInfo.HyperPages + + (Index << EFI_PAGE_SHIFT) + Index + ); } // @@ -160,8 +162,12 @@ XenConnect ( // AsmCpuid (mXenLeaf + 1, &XenVersion, NULL, NULL, NULL); - DEBUG ((DEBUG_ERROR, "Detected Xen version %d.%d\n", - XenVersion >> 16, XenVersion & 0xFFFF)); + DEBUG (( + DEBUG_ERROR, + "Detected Xen version %d.%d\n", + XenVersion >> 16, + XenVersion & 0xFFFF + )); mXenInfo.VersionMajor = (UINT16)(XenVersion >> 16); mXenInfo.VersionMinor = (UINT16)(XenVersion & 0xFFFF); @@ -169,12 +175,16 @@ XenConnect ( // Check if there are information left by hvmloader // - Info = (EFI_XEN_OVMF_INFO *)(UINTN) OVMF_INFO_PHYSICAL_ADDRESS; + Info = (EFI_XEN_OVMF_INFO *)(UINTN)OVMF_INFO_PHYSICAL_ADDRESS; // // Copy the signature, and make it null-terminated. // - AsciiStrnCpyS (Sig, sizeof (Sig), (CHAR8 *) &Info->Signature, - sizeof (Info->Signature)); + AsciiStrnCpyS ( + Sig, + sizeof (Sig), + (CHAR8 *)&Info->Signature, + sizeof (Info->Signature) + ); if (AsciiStrCmp (Sig, "XenHVMOVMF") == 0) { mXenHvmloaderInfo = Info; } else { @@ -188,14 +198,14 @@ XenConnect ( // booted via the PVH entry point. // - PVHResetVectorData = (VOID *)(UINTN) PcdGet32 (PcdXenPvhStartOfDayStructPtr); + PVHResetVectorData = (VOID *)(UINTN)PcdGet32 (PcdXenPvhStartOfDayStructPtr); // // That magic value is written in XenResetVector/Ia32/XenPVHMain.asm // if (PVHResetVectorData[1] == SIGNATURE_32 ('X', 'P', 'V', 'H')) { - struct hvm_start_info *HVMStartInfo; + struct hvm_start_info *HVMStartInfo; - HVMStartInfo = (VOID *)(UINTN) PVHResetVectorData[0]; + HVMStartInfo = (VOID *)(UINTN)PVHResetVectorData[0]; if (HVMStartInfo->magic == XEN_HVM_START_MAGIC_VALUE) { ASSERT (HVMStartInfo->rsdp_paddr != 0); if (HVMStartInfo->rsdp_paddr != 0) { @@ -207,7 +217,7 @@ XenConnect ( BuildGuidDataHob ( &gEfiXenInfoGuid, &mXenInfo, - sizeof(mXenInfo) + sizeof (mXenInfo) ); // @@ -232,7 +242,7 @@ XenDetect ( VOID ) { - UINT8 Signature[13]; + UINT8 Signature[13]; if (mXenLeaf != 0) { return TRUE; @@ -240,13 +250,15 @@ XenDetect ( Signature[12] = '\0'; for (mXenLeaf = 0x40000000; mXenLeaf < 0x40010000; mXenLeaf += 0x100) { - AsmCpuid (mXenLeaf, - NULL, - (UINT32 *) &Signature[0], - (UINT32 *) &Signature[4], - (UINT32 *) &Signature[8]); - - if (!AsciiStrCmp ((CHAR8 *) Signature, "XenVMMXenVMM")) { + AsmCpuid ( + mXenLeaf, + NULL, + (UINT32 *)&Signature[0], + (UINT32 *)&Signature[4], + (UINT32 *)&Signature[8] + ); + + if (!AsciiStrCmp ((CHAR8 *)Signature, "XenVMMXenVMM")) { return TRUE; } } @@ -281,14 +293,13 @@ XenPublishRamRegions ( VOID ) { - EFI_E820_ENTRY64 *E820Map; - UINT32 E820EntriesCount; - EFI_STATUS Status; - EFI_E820_ENTRY64 *Entry; - UINTN Index; - UINT64 LapicBase; - UINT64 LapicEnd; - + EFI_E820_ENTRY64 *E820Map; + UINT32 E820EntriesCount; + EFI_STATUS Status; + EFI_E820_ENTRY64 *Entry; + UINTN Index; + UINT64 LapicBase; + UINT64 LapicEnd; DEBUG ((DEBUG_INFO, "Using memory map provided by Xen\n")); @@ -296,7 +307,7 @@ XenPublishRamRegions ( // Parse RAM in E820 map // E820EntriesCount = 0; - Status = XenGetE820Map (&E820Map, &E820EntriesCount); + Status = XenGetE820Map (&E820Map, &E820EntriesCount); ASSERT_EFI_ERROR (Status); AddMemoryBaseSizeHob (0, 0xA0000); @@ -306,14 +317,14 @@ XenPublishRamRegions ( AddReservedMemoryBaseSizeHob (0xA0000, BASE_1MB - 0xA0000, TRUE); LapicBase = PcdGet32 (PcdCpuLocalApicBaseAddress); - LapicEnd = LapicBase + SIZE_1MB; + LapicEnd = LapicBase + SIZE_1MB; AddIoMemoryRangeHob (LapicBase, LapicEnd); for (Index = 0; Index < E820EntriesCount; Index++) { - UINT64 Base; - UINT64 End; - UINT64 ReservedBase; - UINT64 ReservedEnd; + UINT64 Base; + UINT64 End; + UINT64 ReservedBase; + UINT64 ReservedEnd; Entry = &E820Map[Index]; @@ -321,7 +332,7 @@ XenPublishRamRegions ( // Round up the start address, and round down the end address. // Base = ALIGN_VALUE (Entry->BaseAddr, (UINT64)EFI_PAGE_SIZE); - End = (Entry->BaseAddr + Entry->Length) & ~(UINT64)EFI_PAGE_MASK; + End = (Entry->BaseAddr + Entry->Length) & ~(UINT64)EFI_PAGE_MASK; // // Ignore the first 1MB, this is handled before the loop. @@ -329,52 +340,53 @@ XenPublishRamRegions ( if (Base < BASE_1MB) { Base = BASE_1MB; } + if (Base >= End) { continue; } switch (Entry->Type) { - case EfiAcpiAddressRangeMemory: - AddMemoryRangeHob (Base, End); - break; - case EfiAcpiAddressRangeACPI: - AddReservedMemoryRangeHob (Base, End, FALSE); - break; - case EfiAcpiAddressRangeReserved: - // - // hvmloader marks a range that overlaps with the local APIC memory - // mapped region as reserved, but CpuDxe wants it as mapped IO. We - // have already added it as mapped IO, so skip it here. - // - - // - // add LAPIC predecessor range, if any - // - ReservedBase = Base; - ReservedEnd = MIN (End, LapicBase); - if (ReservedBase < ReservedEnd) { - AddReservedMemoryRangeHob (ReservedBase, ReservedEnd, FALSE); - } - - // - // add LAPIC successor range, if any - // - ReservedBase = MAX (Base, LapicEnd); - ReservedEnd = End; - if (ReservedBase < ReservedEnd) { - AddReservedMemoryRangeHob (ReservedBase, ReservedEnd, FALSE); - } - break; - default: - break; + case EfiAcpiAddressRangeMemory: + AddMemoryRangeHob (Base, End); + break; + case EfiAcpiAddressRangeACPI: + AddReservedMemoryRangeHob (Base, End, FALSE); + break; + case EfiAcpiAddressRangeReserved: + // + // hvmloader marks a range that overlaps with the local APIC memory + // mapped region as reserved, but CpuDxe wants it as mapped IO. We + // have already added it as mapped IO, so skip it here. + // + + // + // add LAPIC predecessor range, if any + // + ReservedBase = Base; + ReservedEnd = MIN (End, LapicBase); + if (ReservedBase < ReservedEnd) { + AddReservedMemoryRangeHob (ReservedBase, ReservedEnd, FALSE); + } + + // + // add LAPIC successor range, if any + // + ReservedBase = MAX (Base, LapicEnd); + ReservedEnd = End; + if (ReservedBase < ReservedEnd) { + AddReservedMemoryRangeHob (ReservedBase, ReservedEnd, FALSE); + } + + break; + default: + break; } } } - EFI_STATUS PhysicalAddressIdentityMapping ( - IN EFI_PHYSICAL_ADDRESS AddressToMap + IN EFI_PHYSICAL_ADDRESS AddressToMap ) { INTN Index; @@ -385,7 +397,7 @@ PhysicalAddressIdentityMapping ( // L4 / Top level Page Directory Pointers - L4 = (VOID*)(UINTN)PcdGet32 (PcdOvmfSecPageTablesBase); + L4 = (VOID *)(UINTN)PcdGet32 (PcdOvmfSecPageTablesBase); Index = PML4_OFFSET (AddressToMap); if (!L4[Index].Bits.Present) { @@ -396,15 +408,15 @@ PhysicalAddressIdentityMapping ( ZeroMem (L3, EFI_PAGE_SIZE); - L4[Index].Bits.ReadWrite = 1; - L4[Index].Bits.Accessed = 1; + L4[Index].Bits.ReadWrite = 1; + L4[Index].Bits.Accessed = 1; L4[Index].Bits.PageTableBaseAddress = (EFI_PHYSICAL_ADDRESS)L3 >> 12; - L4[Index].Bits.Present = 1; + L4[Index].Bits.Present = 1; } // L3 / Next level Page Directory Pointers - L3 = (VOID*)(EFI_PHYSICAL_ADDRESS)(L4[Index].Bits.PageTableBaseAddress << 12); + L3 = (VOID *)(EFI_PHYSICAL_ADDRESS)(L4[Index].Bits.PageTableBaseAddress << 12); Index = PDP_OFFSET (AddressToMap); if (!L3[Index].Bits.Present) { @@ -415,24 +427,24 @@ PhysicalAddressIdentityMapping ( ZeroMem (PageTable, EFI_PAGE_SIZE); - L3[Index].Bits.ReadWrite = 1; - L3[Index].Bits.Accessed = 1; + L3[Index].Bits.ReadWrite = 1; + L3[Index].Bits.Accessed = 1; L3[Index].Bits.PageTableBaseAddress = (EFI_PHYSICAL_ADDRESS)PageTable >> 12; - L3[Index].Bits.Present = 1; + L3[Index].Bits.Present = 1; } // L2 / Page Table Entries - PageTable = (VOID*)(EFI_PHYSICAL_ADDRESS)(L3[Index].Bits.PageTableBaseAddress << 12); - Index = PDE_OFFSET (AddressToMap); + PageTable = (VOID *)(EFI_PHYSICAL_ADDRESS)(L3[Index].Bits.PageTableBaseAddress << 12); + Index = PDE_OFFSET (AddressToMap); if (!PageTable[Index].Bits.Present) { - PageTable[Index].Bits.ReadWrite = 1; - PageTable[Index].Bits.Accessed = 1; - PageTable[Index].Bits.Dirty = 1; - PageTable[Index].Bits.MustBe1 = 1; + PageTable[Index].Bits.ReadWrite = 1; + PageTable[Index].Bits.Accessed = 1; + PageTable[Index].Bits.Dirty = 1; + PageTable[Index].Bits.MustBe1 = 1; PageTable[Index].Bits.PageTableBaseAddress = AddressToMap >> 21; - PageTable[Index].Bits.Present = 1; + PageTable[Index].Bits.Present = 1; } CpuFlushTlb (); @@ -443,7 +455,7 @@ PhysicalAddressIdentityMapping ( STATIC EFI_STATUS MapSharedInfoPage ( - IN VOID *PagePtr + IN VOID *PagePtr ) { xen_add_to_physmap_t Parameters; @@ -451,81 +463,85 @@ MapSharedInfoPage ( Parameters.domid = DOMID_SELF; Parameters.space = XENMAPSPACE_shared_info; - Parameters.idx = 0; - Parameters.gpfn = (UINTN)PagePtr >> EFI_PAGE_SHIFT; - ReturnCode = XenHypercallMemoryOp (XENMEM_add_to_physmap, &Parameters); + Parameters.idx = 0; + Parameters.gpfn = (UINTN)PagePtr >> EFI_PAGE_SHIFT; + ReturnCode = XenHypercallMemoryOp (XENMEM_add_to_physmap, &Parameters); if (ReturnCode != 0) { return EFI_NO_MAPPING; } + return EFI_SUCCESS; } STATIC VOID UnmapXenPage ( - IN VOID *PagePtr + IN VOID *PagePtr ) { - xen_remove_from_physmap_t Parameters; - INTN ReturnCode; + xen_remove_from_physmap_t Parameters; + INTN ReturnCode; Parameters.domid = DOMID_SELF; - Parameters.gpfn = (UINTN)PagePtr >> EFI_PAGE_SHIFT; - ReturnCode = XenHypercallMemoryOp (XENMEM_remove_from_physmap, &Parameters); + Parameters.gpfn = (UINTN)PagePtr >> EFI_PAGE_SHIFT; + ReturnCode = XenHypercallMemoryOp (XENMEM_remove_from_physmap, &Parameters); ASSERT (ReturnCode == 0); } - STATIC UINT64 GetCpuFreq ( - IN XEN_VCPU_TIME_INFO *VcpuTime + IN XEN_VCPU_TIME_INFO *VcpuTime ) { - UINT32 Version; - UINT32 TscToSystemMultiplier; - INT8 TscShift; - UINT64 CpuFreq; + UINT32 Version; + UINT32 TscToSystemMultiplier; + INT8 TscShift; + UINT64 CpuFreq; do { Version = VcpuTime->Version; MemoryFence (); TscToSystemMultiplier = VcpuTime->TscToSystemMultiplier; - TscShift = VcpuTime->TscShift; + TscShift = VcpuTime->TscShift; MemoryFence (); } while (((Version & 1) != 0) && (Version != VcpuTime->Version)); CpuFreq = DivU64x32 (LShiftU64 (1000000000ULL, 32), TscToSystemMultiplier); if (TscShift >= 0) { - CpuFreq = RShiftU64 (CpuFreq, TscShift); + CpuFreq = RShiftU64 (CpuFreq, TscShift); } else { - CpuFreq = LShiftU64 (CpuFreq, -TscShift); + CpuFreq = LShiftU64 (CpuFreq, -TscShift); } + return CpuFreq; } STATIC VOID XenDelay ( - IN XEN_VCPU_TIME_INFO *VcpuTimeInfo, - IN UINT64 DelayNs + IN XEN_VCPU_TIME_INFO *VcpuTimeInfo, + IN UINT64 DelayNs ) { - UINT64 Tick; - UINT64 CpuFreq; - UINT64 Delay; - UINT64 DelayTick; - UINT64 NewTick; - RETURN_STATUS Status; + UINT64 Tick; + UINT64 CpuFreq; + UINT64 Delay; + UINT64 DelayTick; + UINT64 NewTick; + RETURN_STATUS Status; Tick = AsmReadTsc (); CpuFreq = GetCpuFreq (VcpuTimeInfo); - Status = SafeUint64Mult (DelayNs, CpuFreq, &Delay); + Status = SafeUint64Mult (DelayNs, CpuFreq, &Delay); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, + DEBUG (( + DEBUG_ERROR, "XenDelay (%lu ns): delay too big in relation to CPU freq %lu Hz\n", - DelayNs, CpuFreq)); + DelayNs, + CpuFreq + )); ASSERT_EFI_ERROR (Status); CpuDeadLoop (); } @@ -551,7 +567,6 @@ XenDelay ( } } - /** Calculate the frequency of the Local Apic Timer **/ @@ -560,29 +575,33 @@ CalibrateLapicTimer ( VOID ) { - XEN_SHARED_INFO *SharedInfo; - XEN_VCPU_TIME_INFO *VcpuTimeInfo; - UINT32 TimerTick, TimerTick2, DiffTimer; - UINT64 TscTick, TscTick2; - UINT64 Freq; - UINT64 Dividend; - EFI_STATUS Status; - - - SharedInfo = (VOID*)((UINTN)PcdGet32 (PcdCpuLocalApicBaseAddress) + SIZE_1MB); - Status = PhysicalAddressIdentityMapping ((EFI_PHYSICAL_ADDRESS)SharedInfo); + XEN_SHARED_INFO *SharedInfo; + XEN_VCPU_TIME_INFO *VcpuTimeInfo; + UINT32 TimerTick, TimerTick2, DiffTimer; + UINT64 TscTick, TscTick2; + UINT64 Freq; + UINT64 Dividend; + EFI_STATUS Status; + + SharedInfo = (VOID *)((UINTN)PcdGet32 (PcdCpuLocalApicBaseAddress) + SIZE_1MB); + Status = PhysicalAddressIdentityMapping ((EFI_PHYSICAL_ADDRESS)SharedInfo); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, + DEBUG (( + DEBUG_ERROR, "Failed to add page table entry for Xen shared info page: %r\n", - Status)); + Status + )); ASSERT_EFI_ERROR (Status); return; } Status = MapSharedInfoPage (SharedInfo); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "Failed to map Xen's shared info page: %r\n", - Status)); + DEBUG (( + DEBUG_ERROR, + "Failed to map Xen's shared info page: %r\n", + Status + )); ASSERT_EFI_ERROR (Status); return; } @@ -593,18 +612,21 @@ CalibrateLapicTimer ( DisableApicTimerInterrupt (); TimerTick = GetApicTimerCurrentCount (); - TscTick = AsmReadTsc (); + TscTick = AsmReadTsc (); XenDelay (VcpuTimeInfo, 1000000ULL); TimerTick2 = GetApicTimerCurrentCount (); - TscTick2 = AsmReadTsc (); - + TscTick2 = AsmReadTsc (); DiffTimer = TimerTick - TimerTick2; - Status = SafeUint64Mult (GetCpuFreq (VcpuTimeInfo), DiffTimer, &Dividend); + Status = SafeUint64Mult (GetCpuFreq (VcpuTimeInfo), DiffTimer, &Dividend); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "overflow while calculating APIC frequency\n")); - DEBUG ((DEBUG_ERROR, "CPU freq: %lu Hz; APIC timer tick count for 1 ms: %u\n", - GetCpuFreq (VcpuTimeInfo), DiffTimer)); + DEBUG (( + DEBUG_ERROR, + "CPU freq: %lu Hz; APIC timer tick count for 1 ms: %u\n", + GetCpuFreq (VcpuTimeInfo), + DiffTimer + )); ASSERT_EFI_ERROR (Status); CpuDeadLoop (); } diff --git a/OvmfPkg/XenPlatformPei/Xen.h b/OvmfPkg/XenPlatformPei/Xen.h index 2605481280..58d1f05484 100644 --- a/OvmfPkg/XenPlatformPei/Xen.h +++ b/OvmfPkg/XenPlatformPei/Xen.h @@ -13,26 +13,26 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include // Physical address of OVMF info -#define OVMF_INFO_PHYSICAL_ADDRESS 0x00001000 +#define OVMF_INFO_PHYSICAL_ADDRESS 0x00001000 // This structure must match the definition on Xen side #pragma pack(1) typedef struct { - CHAR8 Signature[14]; // XenHVMOVMF\0 - UINT8 Length; // Length of this structure - UINT8 Checksum; // Set such that the sum over bytes 0..length == 0 + CHAR8 Signature[14]; // XenHVMOVMF\0 + UINT8 Length; // Length of this structure + UINT8 Checksum; // Set such that the sum over bytes 0..length == 0 // // Physical address of an array of TablesCount elements. // // Each element contains the physical address of a BIOS table. // - EFI_PHYSICAL_ADDRESS Tables; - UINT32 TablesCount; + EFI_PHYSICAL_ADDRESS Tables; + UINT32 TablesCount; // // Physical address of the E820 table, contains E820EntriesCount entries. // - EFI_PHYSICAL_ADDRESS E820; - UINT32 E820EntriesCount; + EFI_PHYSICAL_ADDRESS E820; + UINT32 E820EntriesCount; } EFI_XEN_OVMF_INFO; #pragma pack() diff --git a/OvmfPkg/XenPvBlkDxe/BlockFront.c b/OvmfPkg/XenPvBlkDxe/BlockFront.c index 14f9cc85b3..7aa5ef044b 100644 --- a/OvmfPkg/XenPvBlkDxe/BlockFront.c +++ b/OvmfPkg/XenPvBlkDxe/BlockFront.c @@ -34,23 +34,25 @@ STATIC XENSTORE_STATUS XenBusReadUint64 ( - IN XENBUS_PROTOCOL *This, - IN CONST CHAR8 *Node, - IN BOOLEAN FromBackend, - OUT UINT64 *ValuePtr + IN XENBUS_PROTOCOL *This, + IN CONST CHAR8 *Node, + IN BOOLEAN FromBackend, + OUT UINT64 *ValuePtr ) { - XENSTORE_STATUS Status; - CHAR8 *Ptr; + XENSTORE_STATUS Status; + CHAR8 *Ptr; if (!FromBackend) { - Status = This->XsRead (This, XST_NIL, Node, (VOID**)&Ptr); + Status = This->XsRead (This, XST_NIL, Node, (VOID **)&Ptr); } else { - Status = This->XsBackendRead (This, XST_NIL, Node, (VOID**)&Ptr); + Status = This->XsBackendRead (This, XST_NIL, Node, (VOID **)&Ptr); } + if (Status != XENSTORE_STATUS_SUCCESS) { return Status; } + // AsciiStrDecimalToUint64 will ASSERT if Ptr overflow UINT64. *ValuePtr = AsciiStrDecimalToUint64 (Ptr); FreePool (Ptr); @@ -65,20 +67,23 @@ XenBusReadUint64 ( STATIC VOID XenPvBlockFree ( - IN XEN_BLOCK_FRONT_DEVICE *Dev + IN XEN_BLOCK_FRONT_DEVICE *Dev ) { - XENBUS_PROTOCOL *XenBusIo = Dev->XenBusIo; + XENBUS_PROTOCOL *XenBusIo = Dev->XenBusIo; if (Dev->RingRef != 0) { XenBusIo->GrantEndAccess (XenBusIo, Dev->RingRef); } + if (Dev->Ring.sring != NULL) { FreePages (Dev->Ring.sring, 1); } + if (Dev->EventChannel != 0) { XenBusIo->EventChannelClose (XenBusIo, Dev->EventChannel); } + FreePool (Dev); } @@ -95,27 +100,29 @@ XenPvBlockFree ( STATIC XENSTORE_STATUS XenPvBlkWaitForBackendState ( - IN XEN_BLOCK_FRONT_DEVICE *Dev, - IN XenbusState ExpectedState, - OUT XenbusState *LastStatePtr OPTIONAL + IN XEN_BLOCK_FRONT_DEVICE *Dev, + IN XenbusState ExpectedState, + OUT XenbusState *LastStatePtr OPTIONAL ) { - XENBUS_PROTOCOL *XenBusIo = Dev->XenBusIo; - XenbusState State; - UINT64 Value; - XENSTORE_STATUS Status = XENSTORE_STATUS_SUCCESS; + XENBUS_PROTOCOL *XenBusIo = Dev->XenBusIo; + XenbusState State; + UINT64 Value; + XENSTORE_STATUS Status = XENSTORE_STATUS_SUCCESS; while (TRUE) { Status = XenBusReadUint64 (XenBusIo, "state", TRUE, &Value); if (Status != XENSTORE_STATUS_SUCCESS) { return Status; } + if (Value > XenbusStateReconfigured) { // // Value is not a State value. // return XENSTORE_STATUS_EIO; } + State = Value; if (State == ExpectedState) { break; @@ -123,9 +130,13 @@ XenPvBlkWaitForBackendState ( Status = XENSTORE_STATUS_FAIL; break; } - DEBUG ((DEBUG_INFO, - "XenPvBlk: waiting backend state %d, current: %d\n", - ExpectedState, State)); + + DEBUG (( + DEBUG_INFO, + "XenPvBlk: waiting backend state %d, current: %d\n", + ExpectedState, + State + )); XenBusIo->WaitForWatch (XenBusIo, Dev->StateWatchToken); } @@ -143,14 +154,14 @@ XenPvBlockFrontInitialization ( OUT XEN_BLOCK_FRONT_DEVICE **DevPtr ) { - XENSTORE_TRANSACTION Transaction; - CHAR8 *DeviceType; - blkif_sring_t *SharedRing; - XENSTORE_STATUS Status; - XEN_BLOCK_FRONT_DEVICE *Dev; - XenbusState State; - UINT64 Value; - CHAR8 *Params; + XENSTORE_TRANSACTION Transaction; + CHAR8 *DeviceType; + blkif_sring_t *SharedRing; + XENSTORE_STATUS Status; + XEN_BLOCK_FRONT_DEVICE *Dev; + XenbusState State; + UINT64 Value; + CHAR8 *Params; ASSERT (NodeName != NULL); @@ -160,49 +171,58 @@ XenPvBlockFrontInitialization ( } Dev->Signature = XEN_BLOCK_FRONT_SIGNATURE; - Dev->NodeName = NodeName; - Dev->XenBusIo = XenBusIo; - Dev->DeviceId = XenBusIo->DeviceId; + Dev->NodeName = NodeName; + Dev->XenBusIo = XenBusIo; + Dev->DeviceId = XenBusIo->DeviceId; - XenBusIo->XsRead (XenBusIo, XST_NIL, "device-type", (VOID**)&DeviceType); + XenBusIo->XsRead (XenBusIo, XST_NIL, "device-type", (VOID **)&DeviceType); if (AsciiStrCmp (DeviceType, "cdrom") == 0) { Dev->MediaInfo.CdRom = TRUE; } else { Dev->MediaInfo.CdRom = FALSE; } + FreePool (DeviceType); if (Dev->MediaInfo.CdRom) { - Status = XenBusIo->XsBackendRead (XenBusIo, XST_NIL, "params", (VOID**)&Params); + Status = XenBusIo->XsBackendRead (XenBusIo, XST_NIL, "params", (VOID **)&Params); if (Status != XENSTORE_STATUS_SUCCESS) { DEBUG ((DEBUG_ERROR, "%a: Failed to read params (%d)\n", __FUNCTION__, Status)); goto Error; } - if (AsciiStrLen (Params) == 0 || AsciiStrCmp (Params, "aio:") == 0) { + + if ((AsciiStrLen (Params) == 0) || (AsciiStrCmp (Params, "aio:") == 0)) { FreePool (Params); DEBUG ((DEBUG_INFO, "%a: Empty cdrom\n", __FUNCTION__)); goto Error; } + FreePool (Params); } Status = XenBusReadUint64 (XenBusIo, "backend-id", FALSE, &Value); - if (Status != XENSTORE_STATUS_SUCCESS || Value > MAX_UINT16) { - DEBUG ((DEBUG_ERROR, "XenPvBlk: Failed to get backend-id (%d)\n", - Status)); + if ((Status != XENSTORE_STATUS_SUCCESS) || (Value > MAX_UINT16)) { + DEBUG (( + DEBUG_ERROR, + "XenPvBlk: Failed to get backend-id (%d)\n", + Status + )); goto Error; } + Dev->DomainId = (domid_t)Value; XenBusIo->EventChannelAllocate (XenBusIo, Dev->DomainId, &Dev->EventChannel); - SharedRing = (blkif_sring_t*) AllocatePages (1); + SharedRing = (blkif_sring_t *)AllocatePages (1); SHARED_RING_INIT (SharedRing); FRONT_RING_INIT (&Dev->Ring, SharedRing, EFI_PAGE_SIZE); - XenBusIo->GrantAccess (XenBusIo, - Dev->DomainId, - (INTN) SharedRing >> EFI_PAGE_SHIFT, - FALSE, - &Dev->RingRef); + XenBusIo->GrantAccess ( + XenBusIo, + Dev->DomainId, + (INTN)SharedRing >> EFI_PAGE_SHIFT, + FALSE, + &Dev->RingRef + ); Again: Status = XenBusIo->XsTransactionStart (XenBusIo, &Transaction); @@ -211,20 +231,40 @@ Again: goto Error; } - Status = XenBusIo->XsPrintf (XenBusIo, &Transaction, NodeName, "ring-ref", "%d", - Dev->RingRef); + Status = XenBusIo->XsPrintf ( + XenBusIo, + &Transaction, + NodeName, + "ring-ref", + "%d", + Dev->RingRef + ); if (Status != XENSTORE_STATUS_SUCCESS) { DEBUG ((DEBUG_ERROR, "XenPvBlk: Failed to write ring-ref.\n")); goto AbortTransaction; } - Status = XenBusIo->XsPrintf (XenBusIo, &Transaction, NodeName, - "event-channel", "%d", Dev->EventChannel); + + Status = XenBusIo->XsPrintf ( + XenBusIo, + &Transaction, + NodeName, + "event-channel", + "%d", + Dev->EventChannel + ); if (Status != XENSTORE_STATUS_SUCCESS) { DEBUG ((DEBUG_ERROR, "XenPvBlk: Failed to write event-channel.\n")); goto AbortTransaction; } - Status = XenBusIo->XsPrintf (XenBusIo, &Transaction, NodeName, - "protocol", "%a", XEN_IO_PROTO_ABI_NATIVE); + + Status = XenBusIo->XsPrintf ( + XenBusIo, + &Transaction, + NodeName, + "protocol", + "%a", + XEN_IO_PROTO_ABI_NATIVE + ); if (Status != XENSTORE_STATUS_SUCCESS) { DEBUG ((DEBUG_ERROR, "XenPvBlk: Failed to write protocol.\n")); goto AbortTransaction; @@ -248,16 +288,22 @@ Again: // Status = XenPvBlkWaitForBackendState (Dev, XenbusStateConnected, &State); if (Status != XENSTORE_STATUS_SUCCESS) { - DEBUG ((DEBUG_ERROR, - "XenPvBlk: backend for %a/%d not available, rc=%d state=%d\n", - XenBusIo->Type, XenBusIo->DeviceId, Status, State)); + DEBUG (( + DEBUG_ERROR, + "XenPvBlk: backend for %a/%d not available, rc=%d state=%d\n", + XenBusIo->Type, + XenBusIo->DeviceId, + Status, + State + )); goto Error2; } Status = XenBusReadUint64 (XenBusIo, "info", TRUE, &Value); - if (Status != XENSTORE_STATUS_SUCCESS || Value > MAX_UINT32) { + if ((Status != XENSTORE_STATUS_SUCCESS) || (Value > MAX_UINT32)) { goto Error2; } + Dev->MediaInfo.VDiskInfo = (UINT32)Value; if (Dev->MediaInfo.VDiskInfo & VDISK_READONLY) { Dev->MediaInfo.ReadWrite = FALSE; @@ -271,17 +317,23 @@ Again: } Status = XenBusReadUint64 (XenBusIo, "sector-size", TRUE, &Value); - if (Status != XENSTORE_STATUS_SUCCESS || Value > MAX_UINT32) { + if ((Status != XENSTORE_STATUS_SUCCESS) || (Value > MAX_UINT32)) { goto Error2; } + if ((UINT32)Value % 512 != 0) { // // This is not supported by the driver. // - DEBUG ((DEBUG_ERROR, "XenPvBlk: Unsupported sector-size value %Lu, " - "it must be a multiple of 512\n", Value)); + DEBUG (( + DEBUG_ERROR, + "XenPvBlk: Unsupported sector-size value %Lu, " + "it must be a multiple of 512\n", + Value + )); goto Error2; } + Dev->MediaInfo.SectorSize = (UINT32)Value; // Default value @@ -302,8 +354,12 @@ Again: Dev->MediaInfo.FeatureFlushCache = FALSE; } - DEBUG ((DEBUG_INFO, "XenPvBlk: New disk with %ld sectors of %d bytes\n", - Dev->MediaInfo.Sectors, Dev->MediaInfo.SectorSize)); + DEBUG (( + DEBUG_INFO, + "XenPvBlk: New disk with %ld sectors of %d bytes\n", + Dev->MediaInfo.Sectors, + Dev->MediaInfo.SectorSize + )); *DevPtr = Dev; return EFI_SUCCESS; @@ -323,69 +379,86 @@ Error: VOID XenPvBlockFrontShutdown ( - IN XEN_BLOCK_FRONT_DEVICE *Dev + IN XEN_BLOCK_FRONT_DEVICE *Dev ) { - XENBUS_PROTOCOL *XenBusIo = Dev->XenBusIo; - XENSTORE_STATUS Status; - UINT64 Value; + XENBUS_PROTOCOL *XenBusIo = Dev->XenBusIo; + XENSTORE_STATUS Status; + UINT64 Value; XenPvBlockSync (Dev); Status = XenBusIo->SetState (XenBusIo, XST_NIL, XenbusStateClosing); if (Status != XENSTORE_STATUS_SUCCESS) { - DEBUG ((DEBUG_ERROR, - "XenPvBlk: error while changing state to Closing: %d\n", - Status)); + DEBUG (( + DEBUG_ERROR, + "XenPvBlk: error while changing state to Closing: %d\n", + Status + )); goto Close; } Status = XenPvBlkWaitForBackendState (Dev, XenbusStateClosing, NULL); if (Status != XENSTORE_STATUS_SUCCESS) { - DEBUG ((DEBUG_ERROR, - "XenPvBlk: error while waiting for closing backend state: %d\n", - Status)); + DEBUG (( + DEBUG_ERROR, + "XenPvBlk: error while waiting for closing backend state: %d\n", + Status + )); goto Close; } Status = XenBusIo->SetState (XenBusIo, XST_NIL, XenbusStateClosed); if (Status != XENSTORE_STATUS_SUCCESS) { - DEBUG ((DEBUG_ERROR, - "XenPvBlk: error while changing state to Closed: %d\n", - Status)); + DEBUG (( + DEBUG_ERROR, + "XenPvBlk: error while changing state to Closed: %d\n", + Status + )); goto Close; } Status = XenPvBlkWaitForBackendState (Dev, XenbusStateClosed, NULL); if (Status != XENSTORE_STATUS_SUCCESS) { - DEBUG ((DEBUG_ERROR, - "XenPvBlk: error while waiting for closed backend state: %d\n", - Status)); + DEBUG (( + DEBUG_ERROR, + "XenPvBlk: error while waiting for closed backend state: %d\n", + Status + )); goto Close; } Status = XenBusIo->SetState (XenBusIo, XST_NIL, XenbusStateInitialising); if (Status != XENSTORE_STATUS_SUCCESS) { - DEBUG ((DEBUG_ERROR, - "XenPvBlk: error while changing state to initialising: %d\n", - Status)); + DEBUG (( + DEBUG_ERROR, + "XenPvBlk: error while changing state to initialising: %d\n", + Status + )); goto Close; } while (TRUE) { Status = XenBusReadUint64 (XenBusIo, "state", TRUE, &Value); if (Status != XENSTORE_STATUS_SUCCESS) { - DEBUG ((DEBUG_ERROR, - "XenPvBlk: error while waiting for new backend state: %d\n", - Status)); + DEBUG (( + DEBUG_ERROR, + "XenPvBlk: error while waiting for new backend state: %d\n", + Status + )); goto Close; } - if (Value <= XenbusStateInitWait || Value >= XenbusStateClosed) { + + if ((Value <= XenbusStateInitWait) || (Value >= XenbusStateClosed)) { break; } - DEBUG ((DEBUG_INFO, - "XenPvBlk: waiting backend state %d, current: %Lu\n", - XenbusStateInitWait, Value)); + + DEBUG (( + DEBUG_INFO, + "XenPvBlk: waiting backend state %d, current: %Lu\n", + XenbusStateInitWait, + Value + )); XenBusIo->WaitForWatch (XenBusIo, Dev->StateWatchToken); } @@ -401,7 +474,7 @@ Close: STATIC VOID XenPvBlockWaitSlot ( - IN XEN_BLOCK_FRONT_DEVICE *Dev + IN XEN_BLOCK_FRONT_DEVICE *Dev ) { /* Wait for a slot */ @@ -411,6 +484,7 @@ XenPvBlockWaitSlot ( if (!RING_FULL (&Dev->Ring)) { break; } + /* Really no slot, could wait for an event on Dev->EventChannel. */ } } @@ -418,53 +492,58 @@ XenPvBlockWaitSlot ( VOID XenPvBlockAsyncIo ( - IN OUT XEN_BLOCK_FRONT_IO *IoData, - IN BOOLEAN IsWrite + IN OUT XEN_BLOCK_FRONT_IO *IoData, + IN BOOLEAN IsWrite ) { - XEN_BLOCK_FRONT_DEVICE *Dev = IoData->Dev; - XENBUS_PROTOCOL *XenBusIo = Dev->XenBusIo; - blkif_request_t *Request; - RING_IDX RingIndex; - BOOLEAN Notify; - INT32 NumSegments, Index; - UINTN Start, End; + XEN_BLOCK_FRONT_DEVICE *Dev = IoData->Dev; + XENBUS_PROTOCOL *XenBusIo = Dev->XenBusIo; + blkif_request_t *Request; + RING_IDX RingIndex; + BOOLEAN Notify; + INT32 NumSegments, Index; + UINTN Start, End; // Can't io at non-sector-aligned location - ASSERT(!(IoData->Sector & ((Dev->MediaInfo.SectorSize / 512) - 1))); + ASSERT (!(IoData->Sector & ((Dev->MediaInfo.SectorSize / 512) - 1))); // Can't io non-sector-sized amounts - ASSERT(!(IoData->Size & (Dev->MediaInfo.SectorSize - 1))); + ASSERT (!(IoData->Size & (Dev->MediaInfo.SectorSize - 1))); // Can't io non-sector-aligned buffer - ASSERT(!((UINTN) IoData->Buffer & (Dev->MediaInfo.SectorSize - 1))); + ASSERT (!((UINTN)IoData->Buffer & (Dev->MediaInfo.SectorSize - 1))); - Start = (UINTN) IoData->Buffer & ~EFI_PAGE_MASK; - End = ((UINTN) IoData->Buffer + IoData->Size + EFI_PAGE_SIZE - 1) & ~EFI_PAGE_MASK; + Start = (UINTN)IoData->Buffer & ~EFI_PAGE_MASK; + End = ((UINTN)IoData->Buffer + IoData->Size + EFI_PAGE_SIZE - 1) & ~EFI_PAGE_MASK; IoData->NumRef = NumSegments = (INT32)((End - Start) / EFI_PAGE_SIZE); ASSERT (NumSegments <= BLKIF_MAX_SEGMENTS_PER_REQUEST); XenPvBlockWaitSlot (Dev); RingIndex = Dev->Ring.req_prod_pvt; - Request = RING_GET_REQUEST (&Dev->Ring, RingIndex); + Request = RING_GET_REQUEST (&Dev->Ring, RingIndex); - Request->operation = IsWrite ? BLKIF_OP_WRITE : BLKIF_OP_READ; - Request->nr_segments = (UINT8)NumSegments; - Request->handle = Dev->DeviceId; - Request->id = (UINTN) IoData; + Request->operation = IsWrite ? BLKIF_OP_WRITE : BLKIF_OP_READ; + Request->nr_segments = (UINT8)NumSegments; + Request->handle = Dev->DeviceId; + Request->id = (UINTN)IoData; Request->sector_number = IoData->Sector; for (Index = 0; Index < NumSegments; Index++) { Request->seg[Index].first_sect = 0; - Request->seg[Index].last_sect = EFI_PAGE_SIZE / 512 - 1; + Request->seg[Index].last_sect = EFI_PAGE_SIZE / 512 - 1; } - Request->seg[0].first_sect = (UINT8)(((UINTN) IoData->Buffer & EFI_PAGE_MASK) / 512); + + Request->seg[0].first_sect = (UINT8)(((UINTN)IoData->Buffer & EFI_PAGE_MASK) / 512); Request->seg[NumSegments - 1].last_sect = - (UINT8)((((UINTN) IoData->Buffer + IoData->Size - 1) & EFI_PAGE_MASK) / 512); + (UINT8)((((UINTN)IoData->Buffer + IoData->Size - 1) & EFI_PAGE_MASK) / 512); for (Index = 0; Index < NumSegments; Index++) { - UINTN Data = Start + Index * EFI_PAGE_SIZE; - XenBusIo->GrantAccess (XenBusIo, Dev->DomainId, - Data >> EFI_PAGE_SHIFT, IsWrite, - &Request->seg[Index].gref); + UINTN Data = Start + Index * EFI_PAGE_SIZE; + XenBusIo->GrantAccess ( + XenBusIo, + Dev->DomainId, + Data >> EFI_PAGE_SHIFT, + IsWrite, + &Request->seg[Index].gref + ); IoData->GrantRef[Index] = Request->seg[Index].gref; } @@ -474,20 +553,22 @@ XenPvBlockAsyncIo ( RING_PUSH_REQUESTS_AND_CHECK_NOTIFY (&Dev->Ring, Notify); if (Notify) { - UINT32 ReturnCode; + UINT32 ReturnCode; ReturnCode = XenBusIo->EventChannelNotify (XenBusIo, Dev->EventChannel); if (ReturnCode != 0) { - DEBUG ((DEBUG_ERROR, - "XenPvBlk: Unexpected return value from EventChannelNotify: %d\n", - ReturnCode)); + DEBUG (( + DEBUG_ERROR, + "XenPvBlk: Unexpected return value from EventChannelNotify: %d\n", + ReturnCode + )); } } } EFI_STATUS XenPvBlockIo ( - IN OUT XEN_BLOCK_FRONT_IO *IoData, - IN BOOLEAN IsWrite + IN OUT XEN_BLOCK_FRONT_IO *IoData, + IN BOOLEAN IsWrite ) { // @@ -506,42 +587,44 @@ XenPvBlockIo ( STATIC VOID XenPvBlockPushOperation ( - IN XEN_BLOCK_FRONT_DEVICE *Dev, - IN UINT8 Operation, - IN UINT64 Id + IN XEN_BLOCK_FRONT_DEVICE *Dev, + IN UINT8 Operation, + IN UINT64 Id ) { - INT32 Index; - blkif_request_t *Request; - BOOLEAN Notify; + INT32 Index; + blkif_request_t *Request; + BOOLEAN Notify; XenPvBlockWaitSlot (Dev); - Index = Dev->Ring.req_prod_pvt; - Request = RING_GET_REQUEST(&Dev->Ring, Index); - Request->operation = Operation; + Index = Dev->Ring.req_prod_pvt; + Request = RING_GET_REQUEST (&Dev->Ring, Index); + Request->operation = Operation; Request->nr_segments = 0; - Request->handle = Dev->DeviceId; - Request->id = Id; + Request->handle = Dev->DeviceId; + Request->id = Id; /* Not needed anyway, but the backend will check it */ Request->sector_number = 0; Dev->Ring.req_prod_pvt = Index + 1; MemoryFence (); RING_PUSH_REQUESTS_AND_CHECK_NOTIFY (&Dev->Ring, Notify); if (Notify) { - XENBUS_PROTOCOL *XenBusIo = Dev->XenBusIo; - UINT32 ReturnCode; + XENBUS_PROTOCOL *XenBusIo = Dev->XenBusIo; + UINT32 ReturnCode; ReturnCode = XenBusIo->EventChannelNotify (XenBusIo, Dev->EventChannel); if (ReturnCode != 0) { - DEBUG ((DEBUG_ERROR, - "XenPvBlk: Unexpected return value from EventChannelNotify: %d\n", - ReturnCode)); + DEBUG (( + DEBUG_ERROR, + "XenPvBlk: Unexpected return value from EventChannelNotify: %d\n", + ReturnCode + )); } } } VOID XenPvBlockSync ( - IN XEN_BLOCK_FRONT_DEVICE *Dev + IN XEN_BLOCK_FRONT_DEVICE *Dev ) { if (Dev->MediaInfo.ReadWrite) { @@ -565,12 +648,12 @@ XenPvBlockSync ( VOID XenPvBlockAsyncIoPoll ( - IN XEN_BLOCK_FRONT_DEVICE *Dev + IN XEN_BLOCK_FRONT_DEVICE *Dev ) { - RING_IDX ProducerIndex, ConsumerIndex; - blkif_response_t *Response; - INT32 More; + RING_IDX ProducerIndex, ConsumerIndex; + blkif_response_t *Response; + INT32 More; do { ProducerIndex = Dev->Ring.sring->rsp_prod; @@ -579,28 +662,31 @@ XenPvBlockAsyncIoPoll ( ConsumerIndex = Dev->Ring.rsp_cons; while (ConsumerIndex != ProducerIndex) { - XEN_BLOCK_FRONT_IO *IoData = NULL; - INT16 Status; + XEN_BLOCK_FRONT_IO *IoData = NULL; + INT16 Status; Response = RING_GET_RESPONSE (&Dev->Ring, ConsumerIndex); - IoData = (VOID *) (UINTN) Response->id; + IoData = (VOID *)(UINTN)Response->id; Status = Response->status; switch (Response->operation) { - case BLKIF_OP_READ: - case BLKIF_OP_WRITE: + case BLKIF_OP_READ: + case BLKIF_OP_WRITE: { - INT32 Index; + INT32 Index; if (Status != BLKIF_RSP_OKAY) { - DEBUG ((DEBUG_ERROR, - "XenPvBlk: " - "%a error %d on %a at sector %Lx, num bytes %Lx\n", - Response->operation == BLKIF_OP_READ ? "read" : "write", - Status, IoData->Dev->NodeName, - (UINT64)IoData->Sector, - (UINT64)IoData->Size)); + DEBUG (( + DEBUG_ERROR, + "XenPvBlk: " + "%a error %d on %a at sector %Lx, num bytes %Lx\n", + Response->operation == BLKIF_OP_READ ? "read" : "write", + Status, + IoData->Dev->NodeName, + (UINT64)IoData->Sector, + (UINT64)IoData->Size + )); } for (Index = 0; Index < IoData->NumRef; Index++) { @@ -610,28 +696,34 @@ XenPvBlockAsyncIoPoll ( break; } - case BLKIF_OP_WRITE_BARRIER: - if (Status != BLKIF_RSP_OKAY) { - DEBUG ((DEBUG_ERROR, "XenPvBlk: write barrier error %d\n", Status)); - } - break; - case BLKIF_OP_FLUSH_DISKCACHE: - if (Status != BLKIF_RSP_OKAY) { - DEBUG ((DEBUG_ERROR, "XenPvBlk: flush error %d\n", Status)); - } - break; + case BLKIF_OP_WRITE_BARRIER: + if (Status != BLKIF_RSP_OKAY) { + DEBUG ((DEBUG_ERROR, "XenPvBlk: write barrier error %d\n", Status)); + } - default: - DEBUG ((DEBUG_ERROR, - "XenPvBlk: unrecognized block operation %d response (status %d)\n", - Response->operation, Status)); - break; + break; + case BLKIF_OP_FLUSH_DISKCACHE: + if (Status != BLKIF_RSP_OKAY) { + DEBUG ((DEBUG_ERROR, "XenPvBlk: flush error %d\n", Status)); + } + + break; + + default: + DEBUG (( + DEBUG_ERROR, + "XenPvBlk: unrecognized block operation %d response (status %d)\n", + Response->operation, + Status + )); + break; } Dev->Ring.rsp_cons = ++ConsumerIndex; if (IoData != NULL) { IoData->Status = Status ? EFI_DEVICE_ERROR : EFI_SUCCESS; } + if (Dev->Ring.rsp_cons != ConsumerIndex) { /* We reentered, we must not continue here */ break; diff --git a/OvmfPkg/XenPvBlkDxe/BlockFront.h b/OvmfPkg/XenPvBlkDxe/BlockFront.h index 7c2d7f2c9e..3651a6c8cd 100644 --- a/OvmfPkg/XenPvBlkDxe/BlockFront.h +++ b/OvmfPkg/XenPvBlkDxe/BlockFront.h @@ -11,50 +11,48 @@ #include #include -typedef struct _XEN_BLOCK_FRONT_DEVICE XEN_BLOCK_FRONT_DEVICE; -typedef struct _XEN_BLOCK_FRONT_IO XEN_BLOCK_FRONT_IO; +typedef struct _XEN_BLOCK_FRONT_DEVICE XEN_BLOCK_FRONT_DEVICE; +typedef struct _XEN_BLOCK_FRONT_IO XEN_BLOCK_FRONT_IO; -struct _XEN_BLOCK_FRONT_IO -{ - XEN_BLOCK_FRONT_DEVICE *Dev; - UINT8 *Buffer; - UINTN Size; - UINTN Sector; ///< 512 bytes sector. +struct _XEN_BLOCK_FRONT_IO { + XEN_BLOCK_FRONT_DEVICE *Dev; + UINT8 *Buffer; + UINTN Size; + UINTN Sector; ///< 512 bytes sector. - grant_ref_t GrantRef[BLKIF_MAX_SEGMENTS_PER_REQUEST]; - INT32 NumRef; + grant_ref_t GrantRef[BLKIF_MAX_SEGMENTS_PER_REQUEST]; + INT32 NumRef; - EFI_STATUS Status; + EFI_STATUS Status; }; -typedef struct -{ - UINT64 Sectors; - UINT32 SectorSize; - UINT32 VDiskInfo; - BOOLEAN ReadWrite; - BOOLEAN CdRom; - BOOLEAN FeatureBarrier; - BOOLEAN FeatureFlushCache; +typedef struct { + UINT64 Sectors; + UINT32 SectorSize; + UINT32 VDiskInfo; + BOOLEAN ReadWrite; + BOOLEAN CdRom; + BOOLEAN FeatureBarrier; + BOOLEAN FeatureFlushCache; } XEN_BLOCK_FRONT_MEDIA_INFO; -#define XEN_BLOCK_FRONT_SIGNATURE SIGNATURE_32 ('X', 'p', 'v', 'B') +#define XEN_BLOCK_FRONT_SIGNATURE SIGNATURE_32 ('X', 'p', 'v', 'B') struct _XEN_BLOCK_FRONT_DEVICE { - UINT32 Signature; - EFI_BLOCK_IO_PROTOCOL BlockIo; - domid_t DomainId; + UINT32 Signature; + EFI_BLOCK_IO_PROTOCOL BlockIo; + domid_t DomainId; - blkif_front_ring_t Ring; - grant_ref_t RingRef; - evtchn_port_t EventChannel; - blkif_vdev_t DeviceId; + blkif_front_ring_t Ring; + grant_ref_t RingRef; + evtchn_port_t EventChannel; + blkif_vdev_t DeviceId; - CONST CHAR8 *NodeName; - XEN_BLOCK_FRONT_MEDIA_INFO MediaInfo; + CONST CHAR8 *NodeName; + XEN_BLOCK_FRONT_MEDIA_INFO MediaInfo; - VOID *StateWatchToken; + VOID *StateWatchToken; - XENBUS_PROTOCOL *XenBusIo; + XENBUS_PROTOCOL *XenBusIo; }; #define XEN_BLOCK_FRONT_FROM_BLOCK_IO(b) \ @@ -62,34 +60,34 @@ struct _XEN_BLOCK_FRONT_DEVICE { EFI_STATUS XenPvBlockFrontInitialization ( - IN XENBUS_PROTOCOL *XenBusIo, - IN CONST CHAR8 *NodeName, - OUT XEN_BLOCK_FRONT_DEVICE **DevPtr + IN XENBUS_PROTOCOL *XenBusIo, + IN CONST CHAR8 *NodeName, + OUT XEN_BLOCK_FRONT_DEVICE **DevPtr ); VOID XenPvBlockFrontShutdown ( - IN XEN_BLOCK_FRONT_DEVICE *Dev + IN XEN_BLOCK_FRONT_DEVICE *Dev ); VOID XenPvBlockAsyncIo ( - IN OUT XEN_BLOCK_FRONT_IO *IoData, - IN BOOLEAN IsWrite + IN OUT XEN_BLOCK_FRONT_IO *IoData, + IN BOOLEAN IsWrite ); EFI_STATUS XenPvBlockIo ( - IN OUT XEN_BLOCK_FRONT_IO *IoData, - IN BOOLEAN IsWrite + IN OUT XEN_BLOCK_FRONT_IO *IoData, + IN BOOLEAN IsWrite ); VOID XenPvBlockAsyncIoPoll ( - IN XEN_BLOCK_FRONT_DEVICE *Dev + IN XEN_BLOCK_FRONT_DEVICE *Dev ); VOID XenPvBlockSync ( - IN XEN_BLOCK_FRONT_DEVICE *Dev + IN XEN_BLOCK_FRONT_DEVICE *Dev ); diff --git a/OvmfPkg/XenPvBlkDxe/BlockIo.c b/OvmfPkg/XenPvBlkDxe/BlockIo.c index c013fc80f0..63914751cf 100644 --- a/OvmfPkg/XenPvBlkDxe/BlockIo.c +++ b/OvmfPkg/XenPvBlkDxe/BlockIo.c @@ -46,9 +46,6 @@ EFI_BLOCK_IO_PROTOCOL gXenPvBlkDxeBlockIo = { XenPvBlkDxeBlockIoFlushBlocks // FlushBlocks }; - - - /** Read/Write BufferSize bytes from Lba into Buffer. @@ -76,29 +73,38 @@ XenPvBlkDxeBlockIoReadWriteBlocks ( IN BOOLEAN IsWrite ) { - XEN_BLOCK_FRONT_IO IoData; - EFI_BLOCK_IO_MEDIA *Media = This->Media; - UINTN Sector; - EFI_STATUS Status; + XEN_BLOCK_FRONT_IO IoData; + EFI_BLOCK_IO_MEDIA *Media = This->Media; + UINTN Sector; + EFI_STATUS Status; if (Buffer == NULL) { return EFI_INVALID_PARAMETER; } + if (BufferSize == 0) { return EFI_SUCCESS; } if (BufferSize % Media->BlockSize != 0) { - DEBUG ((DEBUG_ERROR, "XenPvBlkDxe: Bad buffer size: 0x%Lx\n", - (UINT64)BufferSize)); + DEBUG (( + DEBUG_ERROR, + "XenPvBlkDxe: Bad buffer size: 0x%Lx\n", + (UINT64)BufferSize + )); return EFI_BAD_BUFFER_SIZE; } - if (Lba > Media->LastBlock || - (BufferSize / Media->BlockSize) - 1 > Media->LastBlock - Lba) { - DEBUG ((DEBUG_ERROR, + if ((Lba > Media->LastBlock) || + ((BufferSize / Media->BlockSize) - 1 > Media->LastBlock - Lba)) + { + DEBUG (( + DEBUG_ERROR, "XenPvBlkDxe: %a with invalid LBA: 0x%Lx, size: 0x%Lx\n", - IsWrite ? "Write" : "Read", Lba, (UINT64)BufferSize)); + IsWrite ? "Write" : "Read", + Lba, + (UINT64)BufferSize + )); return EFI_INVALID_PARAMETER; } @@ -111,54 +117,74 @@ XenPvBlkDxeBlockIoReadWriteBlocks ( // Grub2 does not appear to respect IoAlign of 512, so reallocate the // buffer here. // - VOID *NewBuffer; + VOID *NewBuffer; // // Try again with a properly aligned buffer. // - NewBuffer = AllocateAlignedPages((BufferSize + EFI_PAGE_SIZE) / EFI_PAGE_SIZE, - Media->IoAlign); + NewBuffer = AllocateAlignedPages ( + (BufferSize + EFI_PAGE_SIZE) / EFI_PAGE_SIZE, + Media->IoAlign + ); if (!IsWrite) { - Status = XenPvBlkDxeBlockIoReadBlocks (This, MediaId, - Lba, BufferSize, NewBuffer); + Status = XenPvBlkDxeBlockIoReadBlocks ( + This, + MediaId, + Lba, + BufferSize, + NewBuffer + ); CopyMem (Buffer, NewBuffer, BufferSize); } else { CopyMem (NewBuffer, Buffer, BufferSize); - Status = XenPvBlkDxeBlockIoWriteBlocks (This, MediaId, - Lba, BufferSize, NewBuffer); + Status = XenPvBlkDxeBlockIoWriteBlocks ( + This, + MediaId, + Lba, + BufferSize, + NewBuffer + ); } + FreeAlignedPages (NewBuffer, (BufferSize + EFI_PAGE_SIZE) / EFI_PAGE_SIZE); return Status; } IoData.Dev = XEN_BLOCK_FRONT_FROM_BLOCK_IO (This); - Sector = (UINTN)MultU64x32 (Lba, Media->BlockSize / 512); + Sector = (UINTN)MultU64x32 (Lba, Media->BlockSize / 512); while (BufferSize > 0) { if (((UINTN)Buffer & EFI_PAGE_MASK) == 0) { - IoData.Size = MIN (BLKIF_MAX_SEGMENTS_PER_REQUEST * EFI_PAGE_SIZE, - BufferSize); + IoData.Size = MIN ( + BLKIF_MAX_SEGMENTS_PER_REQUEST * EFI_PAGE_SIZE, + BufferSize + ); } else { - IoData.Size = MIN ((BLKIF_MAX_SEGMENTS_PER_REQUEST - 1) * EFI_PAGE_SIZE, - BufferSize); + IoData.Size = MIN ( + (BLKIF_MAX_SEGMENTS_PER_REQUEST - 1) * EFI_PAGE_SIZE, + BufferSize + ); } IoData.Buffer = Buffer; IoData.Sector = Sector; - BufferSize -= IoData.Size; - Buffer = (VOID*) ((UINTN) Buffer + IoData.Size); - Sector += IoData.Size / 512; - Status = XenPvBlockIo (&IoData, IsWrite); + BufferSize -= IoData.Size; + Buffer = (VOID *)((UINTN)Buffer + IoData.Size); + Sector += IoData.Size / 512; + Status = XenPvBlockIo (&IoData, IsWrite); if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "XenPvBlkDxe: Error during %a operation.\n", - IsWrite ? "write" : "read")); + DEBUG (( + DEBUG_ERROR, + "XenPvBlkDxe: Error during %a operation.\n", + IsWrite ? "write" : "read" + )); return Status; } } + return EFI_SUCCESS; } - /** Read BufferSize bytes from Lba into Buffer. @@ -181,15 +207,21 @@ XenPvBlkDxeBlockIoReadWriteBlocks ( EFI_STATUS EFIAPI XenPvBlkDxeBlockIoReadBlocks ( - IN EFI_BLOCK_IO_PROTOCOL *This, - IN UINT32 MediaId, - IN EFI_LBA Lba, - IN UINTN BufferSize, - OUT VOID *Buffer + IN EFI_BLOCK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + OUT VOID *Buffer ) { - return XenPvBlkDxeBlockIoReadWriteBlocks (This, - MediaId, Lba, BufferSize, Buffer, FALSE); + return XenPvBlkDxeBlockIoReadWriteBlocks ( + This, + MediaId, + Lba, + BufferSize, + Buffer, + FALSE + ); } /** @@ -215,15 +247,21 @@ XenPvBlkDxeBlockIoReadBlocks ( EFI_STATUS EFIAPI XenPvBlkDxeBlockIoWriteBlocks ( - IN EFI_BLOCK_IO_PROTOCOL *This, - IN UINT32 MediaId, - IN EFI_LBA Lba, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_BLOCK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + IN VOID *Buffer ) { - return XenPvBlkDxeBlockIoReadWriteBlocks (This, - MediaId, Lba, BufferSize, Buffer, TRUE); + return XenPvBlkDxeBlockIoReadWriteBlocks ( + This, + MediaId, + Lba, + BufferSize, + Buffer, + TRUE + ); } /** @@ -258,8 +296,8 @@ XenPvBlkDxeBlockIoFlushBlocks ( EFI_STATUS EFIAPI XenPvBlkDxeBlockIoReset ( - IN EFI_BLOCK_IO_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EFI_BLOCK_IO_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ) { // diff --git a/OvmfPkg/XenPvBlkDxe/BlockIo.h b/OvmfPkg/XenPvBlkDxe/BlockIo.h index 1100791183..1aaae8b754 100644 --- a/OvmfPkg/XenPvBlkDxe/BlockIo.h +++ b/OvmfPkg/XenPvBlkDxe/BlockIo.h @@ -29,11 +29,11 @@ EFI_STATUS EFIAPI XenPvBlkDxeBlockIoReadBlocks ( - IN EFI_BLOCK_IO_PROTOCOL *This, - IN UINT32 MediaId, - IN EFI_LBA Lba, - IN UINTN BufferSize, - OUT VOID *Buffer + IN EFI_BLOCK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + OUT VOID *Buffer ); /** @@ -59,11 +59,11 @@ XenPvBlkDxeBlockIoReadBlocks ( EFI_STATUS EFIAPI XenPvBlkDxeBlockIoWriteBlocks ( - IN EFI_BLOCK_IO_PROTOCOL *This, - IN UINT32 MediaId, - IN EFI_LBA Lba, - IN UINTN BufferSize, - IN VOID *Buffer + IN EFI_BLOCK_IO_PROTOCOL *This, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSize, + IN VOID *Buffer ); /** @@ -94,9 +94,9 @@ XenPvBlkDxeBlockIoFlushBlocks ( EFI_STATUS EFIAPI XenPvBlkDxeBlockIoReset ( - IN EFI_BLOCK_IO_PROTOCOL *This, - IN BOOLEAN ExtendedVerification + IN EFI_BLOCK_IO_PROTOCOL *This, + IN BOOLEAN ExtendedVerification ); -extern EFI_BLOCK_IO_MEDIA gXenPvBlkDxeBlockIoMedia; +extern EFI_BLOCK_IO_MEDIA gXenPvBlkDxeBlockIoMedia; extern EFI_BLOCK_IO_PROTOCOL gXenPvBlkDxeBlockIo; diff --git a/OvmfPkg/XenPvBlkDxe/ComponentName.c b/OvmfPkg/XenPvBlkDxe/ComponentName.c index 8ab6628a9f..6a27822749 100644 --- a/OvmfPkg/XenPvBlkDxe/ComponentName.c +++ b/OvmfPkg/XenPvBlkDxe/ComponentName.c @@ -14,7 +14,7 @@ /// GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gXenPvBlkDxeComponentName = { - (EFI_COMPONENT_NAME_GET_DRIVER_NAME) XenPvBlkDxeComponentNameGetDriverName, + (EFI_COMPONENT_NAME_GET_DRIVER_NAME)XenPvBlkDxeComponentNameGetDriverName, (EFI_COMPONENT_NAME_GET_CONTROLLER_NAME)XenPvBlkDxeComponentNameGetControllerName, "eng" }; @@ -33,18 +33,18 @@ EFI_COMPONENT_NAME2_PROTOCOL gXenPvBlkDxeComponentName2 = { /// Table of driver names /// GLOBAL_REMOVE_IF_UNREFERENCED -EFI_UNICODE_STRING_TABLE mXenPvBlkDxeDriverNameTable[] = { +EFI_UNICODE_STRING_TABLE mXenPvBlkDxeDriverNameTable[] = { { "eng;en", (CHAR16 *)L"Xen PV Block Driver" }, - { NULL, NULL } + { NULL, NULL } }; /// /// Table of controller names /// GLOBAL_REMOVE_IF_UNREFERENCED -EFI_UNICODE_STRING_TABLE mXenPvBlkDxeControllerNameTable[] = { +EFI_UNICODE_STRING_TABLE mXenPvBlkDxeControllerNameTable[] = { { "eng;en", (CHAR16 *)L"Xen PV Block Device" }, - { NULL, NULL } + { NULL, NULL } }; /** diff --git a/OvmfPkg/XenPvBlkDxe/DriverBinding.h b/OvmfPkg/XenPvBlkDxe/DriverBinding.h index fa2983644c..1d38f76e27 100644 --- a/OvmfPkg/XenPvBlkDxe/DriverBinding.h +++ b/OvmfPkg/XenPvBlkDxe/DriverBinding.h @@ -1,4 +1,3 @@ - /** @file Driver Binding functions declaration for XenPvBlk driver. diff --git a/OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.c b/OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.c index 1440e1d23b..dfc40bffaa 100644 --- a/OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.c +++ b/OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.c @@ -16,11 +16,10 @@ #include "BlockFront.h" - /// /// Driver Binding Protocol instance /// -EFI_DRIVER_BINDING_PROTOCOL gXenPvBlkDxeDriverBinding = { +EFI_DRIVER_BINDING_PROTOCOL gXenPvBlkDxeDriverBinding = { XenPvBlkDxeDriverBindingSupported, XenPvBlkDxeDriverBindingStart, XenPvBlkDxeDriverBindingStop, @@ -29,7 +28,6 @@ EFI_DRIVER_BINDING_PROTOCOL gXenPvBlkDxeDriverBinding = { NULL }; - /** Unloads an image. @@ -51,7 +49,6 @@ XenPvBlkDxeUnload ( UINTN HandleCount; UINTN Index; - // // Retrieve array of all handles in the handle database // @@ -78,15 +75,17 @@ XenPvBlkDxeUnload ( // FreePool (HandleBuffer); - // // Uninstall protocols installed in the driver entry point // Status = gBS->UninstallMultipleProtocolInterfaces ( ImageHandle, - &gEfiDriverBindingProtocolGuid, &gXenPvBlkDxeDriverBinding, - &gEfiComponentNameProtocolGuid, &gXenPvBlkDxeComponentName, - &gEfiComponentName2ProtocolGuid, &gXenPvBlkDxeComponentName2, + &gEfiDriverBindingProtocolGuid, + &gXenPvBlkDxeDriverBinding, + &gEfiComponentNameProtocolGuid, + &gXenPvBlkDxeComponentName, + &gEfiComponentName2ProtocolGuid, + &gXenPvBlkDxeComponentName2, NULL ); if (EFI_ERROR (Status)) { @@ -132,7 +131,6 @@ XenPvBlkDxeDriverEntryPoint ( return Status; } - /** Tests to see if this driver supports a given controller. If a child device is provided, it further tests to see if this driver supports creating a handle for the specified child device. @@ -183,28 +181,33 @@ XenPvBlkDxeDriverBindingSupported ( IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - EFI_STATUS Status; - XENBUS_PROTOCOL *XenBusIo; + EFI_STATUS Status; + XENBUS_PROTOCOL *XenBusIo; Status = gBS->OpenProtocol ( - ControllerHandle, - &gXenBusProtocolGuid, - (VOID **)&XenBusIo, - This->DriverBindingHandle, - ControllerHandle, - EFI_OPEN_PROTOCOL_BY_DRIVER - ); + ControllerHandle, + &gXenBusProtocolGuid, + (VOID **)&XenBusIo, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { return Status; } + if (AsciiStrCmp (XenBusIo->Type, "vbd") == 0) { Status = EFI_SUCCESS; } else { Status = EFI_UNSUPPORTED; } - gBS->CloseProtocol (ControllerHandle, &gXenBusProtocolGuid, - This->DriverBindingHandle, ControllerHandle); + gBS->CloseProtocol ( + ControllerHandle, + &gXenBusProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); return Status; } @@ -252,19 +255,19 @@ XenPvBlkDxeDriverBindingStart ( IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - EFI_STATUS Status; - XENBUS_PROTOCOL *XenBusIo; - XEN_BLOCK_FRONT_DEVICE *Dev; - EFI_BLOCK_IO_MEDIA *Media; + EFI_STATUS Status; + XENBUS_PROTOCOL *XenBusIo; + XEN_BLOCK_FRONT_DEVICE *Dev; + EFI_BLOCK_IO_MEDIA *Media; Status = gBS->OpenProtocol ( - ControllerHandle, - &gXenBusProtocolGuid, - (VOID **)&XenBusIo, - This->DriverBindingHandle, - ControllerHandle, - EFI_OPEN_PROTOCOL_BY_DRIVER - ); + ControllerHandle, + &gXenBusProtocolGuid, + (VOID **)&XenBusIo, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); if (EFI_ERROR (Status)) { return Status; } @@ -275,13 +278,16 @@ XenPvBlkDxeDriverBindingStart ( } CopyMem (&Dev->BlockIo, &gXenPvBlkDxeBlockIo, sizeof (EFI_BLOCK_IO_PROTOCOL)); - Media = AllocateCopyPool (sizeof (EFI_BLOCK_IO_MEDIA), - &gXenPvBlkDxeBlockIoMedia); + Media = AllocateCopyPool ( + sizeof (EFI_BLOCK_IO_MEDIA), + &gXenPvBlkDxeBlockIoMedia + ); if (Dev->MediaInfo.VDiskInfo & VDISK_REMOVABLE) { Media->RemovableMedia = TRUE; } + Media->MediaPresent = TRUE; - Media->ReadOnly = !Dev->MediaInfo.ReadWrite; + Media->ReadOnly = !Dev->MediaInfo.ReadWrite; if (Dev->MediaInfo.CdRom) { // // If it's a cdrom, the blocksize value need to be 2048 for OVMF to @@ -289,20 +295,24 @@ XenPvBlkDxeDriverBindingStart ( // MdeModulePkg/Universal/Disk/PartitionDxe/ElTorito.c // Media->BlockSize = 2048; - Media->LastBlock = DivU64x32 (Dev->MediaInfo.Sectors, - Media->BlockSize / Dev->MediaInfo.SectorSize) - 1; + Media->LastBlock = DivU64x32 ( + Dev->MediaInfo.Sectors, + Media->BlockSize / Dev->MediaInfo.SectorSize + ) - 1; } else { Media->BlockSize = Dev->MediaInfo.SectorSize; Media->LastBlock = Dev->MediaInfo.Sectors - 1; } + ASSERT (Media->BlockSize % 512 == 0); Dev->BlockIo.Media = Media; Status = gBS->InstallMultipleProtocolInterfaces ( - &ControllerHandle, - &gEfiBlockIoProtocolGuid, &Dev->BlockIo, - NULL - ); + &ControllerHandle, + &gEfiBlockIoProtocolGuid, + &Dev->BlockIo, + NULL + ); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "XenPvBlk: install protocol fail: %r\n", Status)); goto UninitBlockFront; @@ -314,8 +324,12 @@ UninitBlockFront: FreePool (Media); XenPvBlockFrontShutdown (Dev); CloseProtocol: - gBS->CloseProtocol (ControllerHandle, &gXenBusProtocolGuid, - This->DriverBindingHandle, ControllerHandle); + gBS->CloseProtocol ( + ControllerHandle, + &gXenBusProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); return Status; } @@ -354,35 +368,44 @@ XenPvBlkDxeDriverBindingStop ( IN EFI_HANDLE *ChildHandleBuffer OPTIONAL ) { - EFI_BLOCK_IO_PROTOCOL *BlockIo; - XEN_BLOCK_FRONT_DEVICE *Dev; - EFI_BLOCK_IO_MEDIA *Media; - EFI_STATUS Status; + EFI_BLOCK_IO_PROTOCOL *BlockIo; + XEN_BLOCK_FRONT_DEVICE *Dev; + EFI_BLOCK_IO_MEDIA *Media; + EFI_STATUS Status; Status = gBS->OpenProtocol ( - ControllerHandle, &gEfiBlockIoProtocolGuid, + ControllerHandle, + &gEfiBlockIoProtocolGuid, (VOID **)&BlockIo, - This->DriverBindingHandle, ControllerHandle, + This->DriverBindingHandle, + ControllerHandle, EFI_OPEN_PROTOCOL_GET_PROTOCOL ); if (EFI_ERROR (Status)) { return Status; } - Status = gBS->UninstallProtocolInterface (ControllerHandle, - &gEfiBlockIoProtocolGuid, BlockIo); + Status = gBS->UninstallProtocolInterface ( + ControllerHandle, + &gEfiBlockIoProtocolGuid, + BlockIo + ); if (EFI_ERROR (Status)) { return Status; } Media = BlockIo->Media; - Dev = XEN_BLOCK_FRONT_FROM_BLOCK_IO (BlockIo); + Dev = XEN_BLOCK_FRONT_FROM_BLOCK_IO (BlockIo); XenPvBlockFrontShutdown (Dev); FreePool (Media); - gBS->CloseProtocol (ControllerHandle, &gXenBusProtocolGuid, - This->DriverBindingHandle, ControllerHandle); + gBS->CloseProtocol ( + ControllerHandle, + &gXenBusProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); return EFI_SUCCESS; } diff --git a/OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.h b/OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.h index 78c103deb0..350b7bd309 100644 --- a/OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.h +++ b/OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.h @@ -12,9 +12,9 @@ #include -#define xen_mb() MemoryFence() -#define xen_rmb() MemoryFence() -#define xen_wmb() MemoryFence() +#define xen_mb() MemoryFence() +#define xen_rmb() MemoryFence() +#define xen_wmb() MemoryFence() // // Libraries @@ -27,7 +27,6 @@ #include #include - // // UEFI Driver Model Protocols // @@ -35,32 +34,27 @@ #include #include - // // Consumed Protocols // #include - // // Produced Protocols // #include - // // Driver Version // #define XEN_PV_BLK_DXE_VERSION 0x00000010 - // // Protocol instances // -extern EFI_DRIVER_BINDING_PROTOCOL gXenPvBlkDxeDriverBinding; +extern EFI_DRIVER_BINDING_PROTOCOL gXenPvBlkDxeDriverBinding; extern EFI_COMPONENT_NAME2_PROTOCOL gXenPvBlkDxeComponentName2; -extern EFI_COMPONENT_NAME_PROTOCOL gXenPvBlkDxeComponentName; - +extern EFI_COMPONENT_NAME_PROTOCOL gXenPvBlkDxeComponentName; // // Include files with function prototypes @@ -69,5 +63,4 @@ extern EFI_COMPONENT_NAME_PROTOCOL gXenPvBlkDxeComponentName; #include "ComponentName.h" #include "BlockIo.h" - #endif diff --git a/OvmfPkg/XenTimerDxe/XenTimerDxe.c b/OvmfPkg/XenTimerDxe/XenTimerDxe.c index 19fa17a29f..bbd964eb7a 100644 --- a/OvmfPkg/XenTimerDxe/XenTimerDxe.c +++ b/OvmfPkg/XenTimerDxe/XenTimerDxe.c @@ -13,12 +13,12 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // // The handle onto which the Timer Architectural Protocol will be installed // -EFI_HANDLE mTimerHandle = NULL; +EFI_HANDLE mTimerHandle = NULL; // // The Timer Architectural Protocol that this driver produces // -EFI_TIMER_ARCH_PROTOCOL mTimer = { +EFI_TIMER_ARCH_PROTOCOL mTimer = { TimerDriverRegisterHandler, TimerDriverSetTimerPeriod, TimerDriverGetTimerPeriod, @@ -28,22 +28,23 @@ EFI_TIMER_ARCH_PROTOCOL mTimer = { // // Pointer to the CPU Architectural Protocol instance // -EFI_CPU_ARCH_PROTOCOL *mCpu; +EFI_CPU_ARCH_PROTOCOL *mCpu; // // The notification function to call on every timer interrupt. // A bug in the compiler prevents us from initializing this here. // -EFI_TIMER_NOTIFY mTimerNotifyFunction; +EFI_TIMER_NOTIFY mTimerNotifyFunction; // // The current period of the timer interrupt // -volatile UINT64 mTimerPeriod = 0; +volatile UINT64 mTimerPeriod = 0; // // Worker Functions // + /** Interrupt Handler. @@ -53,11 +54,11 @@ volatile UINT64 mTimerPeriod = 0; VOID EFIAPI TimerInterruptHandler ( - IN EFI_EXCEPTION_TYPE InterruptType, - IN EFI_SYSTEM_CONTEXT SystemContext + IN EFI_EXCEPTION_TYPE InterruptType, + IN EFI_SYSTEM_CONTEXT SystemContext ) { - EFI_TPL OriginalTPL; + EFI_TPL OriginalTPL; OriginalTPL = gBS->RaiseTPL (TPL_HIGH_LEVEL); @@ -115,11 +116,11 @@ TimerDriverRegisterHandler ( // // Check for invalid parameters // - if (NotifyFunction == NULL && mTimerNotifyFunction == NULL) { + if ((NotifyFunction == NULL) && (mTimerNotifyFunction == NULL)) { return EFI_INVALID_PARAMETER; } - if (NotifyFunction != NULL && mTimerNotifyFunction != NULL) { + if ((NotifyFunction != NULL) && (mTimerNotifyFunction != NULL)) { return EFI_ALREADY_STARTED; } @@ -171,17 +172,19 @@ TimerDriverSetTimerPeriod ( // // Disable timer interrupt for a TimerPeriod of 0 // - DisableApicTimerInterrupt(); + DisableApicTimerInterrupt (); } else { - TimerFrequency = PcdGet32(PcdFSBClock) / DivideValue; + TimerFrequency = PcdGet32 (PcdFSBClock) / DivideValue; // // Convert TimerPeriod into local APIC counts // // TimerPeriod is in 100ns // TimerPeriod/10000000 will be in seconds. - TimerCount = DivU64x32 (MultU64x32 (TimerPeriod, TimerFrequency), - 10000000); + TimerCount = DivU64x32 ( + MultU64x32 (TimerPeriod, TimerFrequency), + 10000000 + ); // Check for overflow if (TimerCount > MAX_UINT32) { @@ -193,13 +196,14 @@ TimerDriverSetTimerPeriod ( // // Program the timer with the new count value // - InitializeApicTimer(DivideValue, (UINT32)TimerCount, TRUE, LOCAL_APIC_TIMER_VECTOR); + InitializeApicTimer (DivideValue, (UINT32)TimerCount, TRUE, LOCAL_APIC_TIMER_VECTOR); // // Enable timer interrupt // - EnableApicTimerInterrupt(); + EnableApicTimerInterrupt (); } + // // Save the new timer period // @@ -227,8 +231,8 @@ TimerDriverSetTimerPeriod ( EFI_STATUS EFIAPI TimerDriverGetTimerPeriod ( - IN EFI_TIMER_ARCH_PROTOCOL *This, - OUT UINT64 *TimerPeriod + IN EFI_TIMER_ARCH_PROTOCOL *This, + OUT UINT64 *TimerPeriod ) { if (TimerPeriod == NULL) { @@ -263,9 +267,9 @@ TimerDriverGenerateSoftInterrupt ( IN EFI_TIMER_ARCH_PROTOCOL *This ) { - EFI_TPL OriginalTPL; + EFI_TPL OriginalTPL; - if (GetApicTimerInterruptState()) { + if (GetApicTimerInterruptState ()) { // // Invoke the registered handler // @@ -319,7 +323,7 @@ TimerDriverInitialize ( // // Find the CPU architectural protocol. // - Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **) &mCpu); + Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)&mCpu); ASSERT_EFI_ERROR (Status); // @@ -331,8 +335,11 @@ TimerDriverInitialize ( // // Install interrupt handler for Local APIC Timer // - Status = mCpu->RegisterInterruptHandler (mCpu, LOCAL_APIC_TIMER_VECTOR, - TimerInterruptHandler); + Status = mCpu->RegisterInterruptHandler ( + mCpu, + LOCAL_APIC_TIMER_VECTOR, + TimerInterruptHandler + ); ASSERT_EFI_ERROR (Status); // @@ -346,11 +353,11 @@ TimerDriverInitialize ( // Status = gBS->InstallMultipleProtocolInterfaces ( &mTimerHandle, - &gEfiTimerArchProtocolGuid, &mTimer, + &gEfiTimerArchProtocolGuid, + &mTimer, NULL ); ASSERT_EFI_ERROR (Status); return Status; } - diff --git a/OvmfPkg/XenTimerDxe/XenTimerDxe.h b/OvmfPkg/XenTimerDxe/XenTimerDxe.h index e0a3d95fd0..b55ece0d94 100644 --- a/OvmfPkg/XenTimerDxe/XenTimerDxe.h +++ b/OvmfPkg/XenTimerDxe/XenTimerDxe.h @@ -25,16 +25,17 @@ SPDX-License-Identifier: BSD-2-Clause-Patent // The default timer tick duration is set to 10 ms = 100000 100 ns units // -#define DEFAULT_TIMER_TICK_DURATION 100000 +#define DEFAULT_TIMER_TICK_DURATION 100000 // // The Timer Vector use for interrupt // -#define LOCAL_APIC_TIMER_VECTOR 32 +#define LOCAL_APIC_TIMER_VECTOR 32 // // Function Prototypes // + /** Initialize the Timer Architectural Protocol driver @@ -145,8 +146,8 @@ TimerDriverSetTimerPeriod ( EFI_STATUS EFIAPI TimerDriverGetTimerPeriod ( - IN EFI_TIMER_ARCH_PROTOCOL *This, - OUT UINT64 *TimerPeriod + IN EFI_TIMER_ARCH_PROTOCOL *This, + OUT UINT64 *TimerPeriod ) ; -- 2.39.2