#include #include #include #include "panic.h" #include "term.h" #include "bootinfo.h" #define CMDLINE_MAX 128 static char boot_cmdline[CMDLINE_MAX]; static uint32_t *read_tag(uint32_t *tag) { uint32_t type = tag[0]; size_t size = tag[1]; switch(type) { case 0: return NULL; case 1: { size_t cmdline_len = size - 2 * sizeof(uint32_t); if(cmdline_len > CMDLINE_MAX) { panic("Command line argument length %d exceeds maximum length %d", cmdline_len, CMDLINE_MAX); } char* cmdline = (char*)(tag + 2); memcpy(boot_cmdline, cmdline, cmdline_len); break; } default: break; } if(size % 8 != 0) { size += 8 - (size % 8); } return tag + size / sizeof(uint32_t); } void bootinfo_load(void *ptr) { uint32_t *p = ptr; p += 2; while(p != NULL) { p = read_tag(p); } } char* bootinfo_get_cmdline(void) { return boot_cmdline; }