X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=UefiCpuPkg%2FCpuDxe%2FCpuMp.h;h=481f7b16183527af8d181e9ceec984fb1a8638ac;hp=157ac36c48d0162c01a37c827fd1b6610123d0b4;hb=03673ae11e255b9467e8f317175495b1ff79f965;hpb=003973d98cf1ef84ab810cb4f3870acd3a7f40a6 diff --git a/UefiCpuPkg/CpuDxe/CpuMp.h b/UefiCpuPkg/CpuDxe/CpuMp.h index 157ac36c48..481f7b1618 100644 --- a/UefiCpuPkg/CpuDxe/CpuMp.h +++ b/UefiCpuPkg/CpuDxe/CpuMp.h @@ -16,6 +16,7 @@ #define _CPU_MP_H_ #include +#include /** Initialize Multi-processor support. @@ -77,5 +78,51 @@ AsmApDoneWithCommonStack ( VOID ); +typedef enum { + CpuStateIdle, + CpuStateBlocked, + CpuStateReady, + CpuStateBuzy, + CpuStateFinished +} CPU_STATE; + +/** + Define Individual Processor Data block. + +**/ +typedef struct { + EFI_PROCESSOR_INFORMATION Info; + SPIN_LOCK CpuDataLock; + volatile CPU_STATE State; + + EFI_AP_PROCEDURE Procedure; + VOID *Parameter; +} CPU_DATA_BLOCK; + +/** + Define MP data block which consumes individual processor block. + +**/ +typedef struct { + CPU_DATA_BLOCK *CpuDatas; + UINTN NumberOfProcessors; + UINTN NumberOfEnabledProcessors; +} MP_SYSTEM_DATA; + +/** + This function is called by all processors (both BSP and AP) once and collects MP related data. + + @param Bsp TRUE if the CPU is BSP + @param ProcessorNumber The specific processor number + + @retval EFI_SUCCESS Data for the processor collected and filled in + +**/ +EFI_STATUS +FillInProcessorInformation ( + IN BOOLEAN Bsp, + IN UINTN ProcessorNumber + ); + #endif // _CPU_MP_H_