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.