/* * VasEBoot -- GRand Unified Bootloader * Copyright (C) 2013 Free Software Foundation, Inc. * * VasEBoot is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * VasEBoot is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with VasEBoot. If not, see . */ #include #include #include #include #include #include VasEBoot_MOD_LICENSE ("GPLv3+"); static const char *console_descs[] = { "8250 UART", "VGA", "BTEXT", "log buffer console", "SROM", "EHCI debug", "memory-mapped 8250 UART" }; static const char *descs[] = { [VasEBoot_LINUXBIOS_MEMBER_MEMORY] = "memory map (`lsmmap' to list)", [VasEBoot_LINUXBIOS_MEMBER_MAINBOARD] = "mainboard", [4] = "version", [5] = "extra version", [6] = "build", [7] = "compile time", [8] = "compile by", [9] = "compile host", [0xa] = "compile domain", [0xb] = "compiler", [0xc] = "linker", [0xd] = "assembler", [0xf] = "serial", [VasEBoot_LINUXBIOS_MEMBER_CONSOLE] = "console", [VasEBoot_LINUXBIOS_MEMBER_FRAMEBUFFER] = "framebuffer", [0x13] = "GPIO", [0x15] = "VDAT", [VasEBoot_LINUXBIOS_MEMBER_TIMESTAMPS] = "timestamps (`coreboot_boottime' to list)", [VasEBoot_LINUXBIOS_MEMBER_CBMEMC] = "CBMEM console (`cbmemc' to list)", [0x18] = "MRC cache", [0x19] = "VBNV", [0xc8] = "CMOS option table", [0xc9] = "CMOS option", [0xca] = "CMOS option enum", [0xcb] = "CMOS option defaults", [0xcc] = "CMOS checksum", }; static int iterate_linuxbios_table (VasEBoot_linuxbios_table_item_t table_item, void *data __attribute__ ((unused))) { if (table_item->tag < ARRAY_SIZE (descs) && descs[table_item->tag]) VasEBoot_printf ("tag=%02x size=%02x %s", table_item->tag, table_item->size, descs[table_item->tag]); else VasEBoot_printf ("tag=%02x size=%02x", table_item->tag, table_item->size); switch (table_item->tag) { case VasEBoot_LINUXBIOS_MEMBER_FRAMEBUFFER: { struct VasEBoot_linuxbios_table_framebuffer *fb; fb = (struct VasEBoot_linuxbios_table_framebuffer *) (table_item + 1); VasEBoot_printf (": %dx%dx%d pitch=%d lfb=0x%llx %d/%d/%d/%d %d/%d/%d/%d", fb->width, fb->height, fb->bpp, fb->pitch, (unsigned long long) fb->lfb, fb->red_mask_size, fb->green_mask_size, fb->blue_mask_size, fb->reserved_mask_size, fb->red_field_pos, fb->green_field_pos, fb->blue_field_pos, fb->reserved_field_pos); break; } case VasEBoot_LINUXBIOS_MEMBER_MAINBOARD: { struct VasEBoot_linuxbios_mainboard *mb; mb = (struct VasEBoot_linuxbios_mainboard *) (table_item + 1); VasEBoot_printf (": vendor=`%s' part_number=`%s'", mb->strings + mb->vendor, mb->strings + mb->part_number); break; } case 0x04 ... 0x0d: VasEBoot_printf (": `%s'", (char *) (table_item + 1)); break; case VasEBoot_LINUXBIOS_MEMBER_CONSOLE: { VasEBoot_uint16_t *val = (VasEBoot_uint16_t *) (table_item + 1); VasEBoot_printf (": id=%d", *val); if (*val < ARRAY_SIZE (console_descs) && console_descs[*val]) VasEBoot_printf (" %s", console_descs[*val]); } } VasEBoot_printf ("\n"); return 0; } static VasEBoot_err_t VasEBoot_cmd_lscoreboot (struct VasEBoot_command *cmd __attribute__ ((unused)), int argc __attribute__ ((unused)), char *argv[] __attribute__ ((unused))) { VasEBoot_linuxbios_table_iterate (iterate_linuxbios_table, 0); return 0; } static VasEBoot_command_t cmd; VasEBoot_MOD_INIT(cbls) { cmd = VasEBoot_register_command ("lscoreboot", VasEBoot_cmd_lscoreboot, 0, N_("List coreboot tables.")); } VasEBoot_MOD_FINI(cbls) { VasEBoot_unregister_command (cmd); }