43 lines
1.0 KiB
C
43 lines
1.0 KiB
C
|
#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);
|
||
|
}
|