setup: mm: add a kernel data page mapping

For kernel bootstrap - map an initial kernel data page for kernel boot
structures.

Signed-off-by: Matthew Leach <matthew@mattleach.net>
init: add a system-level initcall

Add another initcall level for low-level kernel initalisation.

Signed-off-by: Matthew Leach <matthew@mattleach.net>
mm: add the pmem type for describing physical memory

The pmem structure is used to keep track of blocks of physical memory;
the size of a single page.

Signed-off-by: Matthew Leach <matthew@mattleach.net>
init: Don't store the pmem addr in r12

r12 is a register that can be clobbered in C-code. In order to
preserve the value across function calls, store it in r10.

Signed-off-by: Matthew Leach <matthew@mattleach.net>
init: store pmem address

When branching to the main function, store the address of the start of
physical ram so that the physical memory manager knows where physical
RAM starts.

Signed-off-by: Matthew Leach <matthew@mattleach.net>
mm: use the data_start page for malloc

Malloc can now use the mapped kernel data page for allocation rather
than using the end of the binary.

Signed-off-by: Matthew Leach <matthew@mattleach.net>
mm: add a basic physical memory manager

This commit introduces the pgalloc file that contains functions for
managing blocks of physical memory that are one page in size.

Signed-off-by: Matthew Leach <matthew@mattleach.net>