/* * GRUB -- GRand Unified Bootloader * Copyright (C) 2013 Free Software Foundation, Inc. * * GRUB 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. * * GRUB 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 GRUB. If not, see . */ #include #include #include #include #include #include GRUB_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[] = { [GRUB_LINUXBIOS_MEMBER_MEMORY] = "memory map (`lsmmap' to list)", [GRUB_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", [GRUB_LINUXBIOS_MEMBER_CONSOLE] = "console", [GRUB_LINUXBIOS_MEMBER_FRAMEBUFFER] = "framebuffer", [0x13] = "GPIO", [0x15] = "VDAT", [GRUB_LINUXBIOS_MEMBER_TIMESTAMPS] = "timestamps (`coreboot_boottime' to list)", [GRUB_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 (grub_linuxbios_table_item_t table_item, void *data __attribute__ ((unused))) { if (table_item->tag < ARRAY_SIZE (descs) && descs[table_item->tag]) grub_printf ("tag=%02x size=%02x %s", table_item->tag, table_item->size, descs[table_item->tag]); else grub_printf ("tag=%02x size=%02x", table_item->tag, table_item->size); switch (table_item->tag) { case GRUB_LINUXBIOS_MEMBER_FRAMEBUFFER: { struct grub_linuxbios_table_framebuffer *fb; fb = (struct grub_linuxbios_table_framebuffer *) (table_item + 1); grub_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 GRUB_LINUXBIOS_MEMBER_MAINBOARD: { struct grub_linuxbios_mainboard *mb; mb = (struct grub_linuxbios_mainboard *) (table_item + 1); grub_printf (": vendor=`%s' part_number=`%s'", mb->strings + mb->vendor, mb->strings + mb->part_number); break; } case 0x04 ... 0x0d: grub_printf (": `%s'", (char *) (table_item + 1)); break; case GRUB_LINUXBIOS_MEMBER_CONSOLE: { grub_uint16_t *val = (grub_uint16_t *) (table_item + 1); grub_printf (": id=%d", *val); if (*val < ARRAY_SIZE (console_descs) && console_descs[*val]) grub_printf (" %s", console_descs[*val]); } } grub_printf ("\n"); return 0; } static grub_err_t grub_cmd_lscoreboot (struct grub_command *cmd __attribute__ ((unused)), int argc __attribute__ ((unused)), char *argv[] __attribute__ ((unused))) { grub_linuxbios_table_iterate (iterate_linuxbios_table, 0); return 0; } static grub_command_t cmd; GRUB_MOD_INIT(cbls) { cmd = grub_register_command ("lscoreboot", grub_cmd_lscoreboot, 0, N_("List coreboot tables.")); } GRUB_MOD_FINI(cbls) { grub_unregister_command (cmd); }