Join GitHub today
Tasks UefiCpuPkg CpuDxe MP support
Clone this wiki locally
Enable multiprocessor support for IA32 & X64 within UefiCpuPkg/CpuDxe. (Implement )
- Difficulty: Medium
- Language: Assembly, C
- Suggested by:
Table of Contents
Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3A: System Programming Guide, Part 1
Building: This project can be completed on any edk2 supported OS or toolchain.
Any assembly code should be ported to all assembly formats.
- OVMF: With QEMU you can use the -smp parameter to enable multiple processors
- DUET: With DUET you can run on a system with multiple threads/cores/processors
Some possible sub-goals for the driver
- Successfully start up other processor (Startup IPI)
Transition from 16-bit real to 32-bit flat mode(see ap-startup-example below)
Transition from 16-bit real to 64-bit long mode(see ap-startup-example below)
AP starts running CpuDxe code(see ap-startup-example below)
- AP can run code requested by MpService protocol (StartupAllAPs/StartupThisAP)
- See StartCore below
- Support for remaining MpService protocol functions
Dynamically update ACPI tables in OVMF based on number of processors
- Refer to "Software Developer's Manual" to research further initialization requirements.
- Code to start from: https://github.com/jljusten/edk2/tree/ap-startup-example
- This code already starts the APs. This should provide most assembly code needed for this task.
- Tested with QEMU/OVMF on Linux
- The StartCore project provides a sample program that uses the MpServices protocol
- EmulatorPkg already supports MpServices, so this may be used as a reference.