un

Updated: April 19, 2023

Union where processor-specific system page information is kept

The un union stores processor-specific system page information. The union serves as a demultiplexing point for the various CPU families. It is demultiplexed based on the value of the type member of the system page structure.

Currently supported CPU architectures include:
Processor Member type
ARM, 32-bit arm SYSPAGE_ARM
ARM, 64-bit aarch64 SYSPAGE_AARCH64
x86, 64-bit x86_64 SYSPAGE_X86_64

un.x86_64

These structures contain x86-specific information. Usually, startup library functions automatically fill in these structures, which contain the following members:
smpinfo
Contains information on how to manipulate the SMP control hardware; filled in by init_smp().
gdt
Contains the Global Descriptor Table (GDT).
idt
Contains the Interrupt Descriptor Table (IDT).
pgdir
Contains pointers to the Page Directory Tables (PDTs).
real_addr
Virtual address corresponding to the physical address range 0 through 0xFFFFF (the bottom 1 megabyte).

un.arm and un.aarch64

These structures contain ARM-specific information. Usually, startup library functions automatically fill in these structures, which contain the following members:
L1_vaddr
Virtual address of the MMU level-one page table used to map the kernel.
L1_paddr
Physical address of the MMU level-one page table used to map the kernel.
startup_base
Virtual address of a one-to-one virtual-to-physical mapping used to map the startup code that enables the MMU. This mapping is removed when the kernel is initialized.
startup_size
Size of the mapping used for startup_base, in bytes.
cpu
Structure containing ARM core-specific operations and data (see the next subsection).

ARM cpu

Currently the ARM cpu structure contains the following routines:
page_flush()
Implements CPU-specific cache/TLB flushing when the memory manager unmaps or changes the access protections to a virtual memory mapping for a page. This routine is called for each page in a range being modified by the virtual memory manager.
page_flush_deferred()
Performs any operations that can be deferred when the page_flush() kernel callout is used. For example on the SA-1110 processor, an Icache flush is deferred until all pages being operated on have been modified.