|
| FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) |
|
void __asmcall | mp_jump (mp_addr_t func, mp_addr_t opaque) |
| Protected-mode startup IPI handler. More...
|
|
static void | bios_mp_exec_boot (mp_func_t func, void *opaque) |
| Execute a multiprocessor function on the boot processor. More...
|
|
static void | bios_mp_ipi (void *apic, int x2apic, uint32_t icr) |
| Send an interprocessor interrupt. More...
|
|
static void | bios_mp_start_all (mp_func_t func, void *opaque) |
| Start a multiprocessor function on all application processors. More...
|
|
| PROVIDE_MPAPI_INLINE (pcbios, mp_address) |
|
| PROVIDE_MPAPI (pcbios, mp_exec_boot, bios_mp_exec_boot) |
|
| PROVIDE_MPAPI (pcbios, mp_start_all, bios_mp_start_all) |
|
BIOS multiprocessor API implementation.
Definition in file bios_mp.c.
static void bios_mp_start_all |
( |
mp_func_t |
func, |
|
|
void * |
opaque |
|
) |
| |
|
static |
Start a multiprocessor function on all application processors.
- Parameters
-
func | Multiprocessor function |
opaque | Opaque data pointer |
Definition at line 127 of file bios_mp.c.
143 ( x2apic ?
"x2" :
"" ), ( (
unsigned long long )
base ) );
static mp_address(void *address)
Calculate address as seen by a multiprocessor function.
unsigned long long uint64_t
#define SIPI_VECTOR
Startup IPI vector.
#define PAGE_SIZE
Page size.
#define MSR_APIC_BASE_MASK
Local APIC base address mask.
static const void * base
Base address.
static __always_inline unsigned long virt_to_phys(volatile const void *addr)
Convert virtual address to a physical address.
#define APIC_ICR_INIT
Interrupt command register: INIT.
#define APIC_ICR_LEVEL
Interrupt command register: level mode.
#define APIC_ICR_SIPI(vector)
Interrupt command register: SIPI.
void setup_sipi(unsigned int vector, uint32_t handler, struct i386_regs *regs)
Set up startup IPI handler.
#define APIC_ICR_ALL_NOT_SELF
Interrupt command register: send to all excluding self.
A 32-bit general register dump.
#define MSR_APIC_BASE
Local APIC base address MSR.
void __asmcall mp_jump(mp_addr_t func, mp_addr_t opaque)
Protected-mode startup IPI handler.
#define MSR_APIC_BASE_X2APIC
Local APIC is in x2APIC mode.
#define APIC_ICR_LEVEL_ASSERT
Interrupt command register: level asserted.
void iounmap(volatile const void *io_addr)
Unmap I/O address.
void * ioremap(unsigned long bus_addr, size_t len)
Map bus address as an I/O address.
static void bios_mp_ipi(void *apic, int x2apic, uint32_t icr)
Send an interprocessor interrupt.
References APIC_ICR_ALL_NOT_SELF, APIC_ICR_INIT, APIC_ICR_LEVEL, APIC_ICR_LEVEL_ASSERT, APIC_ICR_SIPI, base, bios_mp_ipi(), DBGC, i386_regs::eax, i386_regs::edx, ioremap(), iounmap(), mp_address(), mp_jump(), MSR_APIC_BASE, MSR_APIC_BASE_MASK, MSR_APIC_BASE_X2APIC, PAGE_SIZE, regs, setup_sipi(), SIPI_VECTOR, and virt_to_phys().