vxBoot/src/builtin/hw.c

43 lines
1.0 KiB
C
Raw Normal View History

2021-10-08 19:32:46 +02:00
#include "vxBoot/builtin.h"
#include "vxBoot/terminal.h"
#include <gint/mmu.h>
static ptrdiff_t __ram_get_size(uintptr_t start_ram)
{
volatile uint32_t *ptr = (void*)start_ram;
volatile uint32_t *tst = (void*)start_ram;
uint32_t backup;
//TODO: use UTLB page size information
while (1) {
ptr = &ptr[4096];
backup = ptr[0];
ptr[0] = 0xdeadbeef;
if (ptr[0] == tst[0]) break;
ptr[0] = backup;
}
ptr[0] = backup;
return ((ptrdiff_t)((uintptr_t)ptr - (uintptr_t)tst));
}
/* hw_main() : hw builtin entry */
int hw_main(int argc, char **argv)
{
//TODO handle args
(void)argc;
(void)argv;
uintptr_t uram = mmu_translate(0x08100000, NULL);
uintptr_t bram = uram & 0xff000000;
terminal_write("user RAM physical addr: %p\n", uram);
terminal_write("RAM physical addr: %p\n", bram);
terminal_write("RAM size: ");
uintptr_t size = __ram_get_size((uram & 0xff000000) | 0xa0000000);
terminal_write("%d bytes\n", size);
terminal_write("kernel RAM space: %d o\n", size - (uram & 0x00ffffff));
return (0);
}