6d3d698d (Colin Watson 2010-09-20 13:18:41 +0100 1) /* lsefisystab.c - Display EFI systab. */ 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 2) /* 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 3) * GRUB -- GRand Unified Bootloader 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 4) * Copyright (C) 2008 Free Software Foundation, Inc. 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 5) * 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 6) * GRUB is free software: you can redistribute it and/or modify 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 7) * it under the terms of the GNU General Public License as published by 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 8) * the Free Software Foundation, either version 3 of the License, or 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 9) * (at your option) any later version. 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 10) * 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 11) * GRUB is distributed in the hope that it will be useful, 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 12) * but WITHOUT ANY WARRANTY; without even the implied warranty of 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 13) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 14) * GNU General Public License for more details. 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 15) * 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 16) * You should have received a copy of the GNU General Public License 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 17) * along with GRUB. If not, see . 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 18) */ 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 19) #include 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 20) #include e745cf0c (Vladimir 'phcoder' Serbinenko 2011-04-11 23:01:51 +0200 21) #include 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 22) #include 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 23) #include 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 24) #include 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 25) #include 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 26) #include 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 27) e745cf0c (Vladimir 'phcoder' Serbinenko 2011-04-11 23:01:51 +0200 28) GRUB_MOD_LICENSE ("GPLv3+"); e745cf0c (Vladimir 'phcoder' Serbinenko 2011-04-11 23:01:51 +0200 29) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 30) struct guid_mapping 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 31) { 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 32) grub_efi_guid_t guid; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 33) const char *name; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 34) }; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 35) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 36) static const struct guid_mapping guid_mappings[] = 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 37) { 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 38) { GRUB_EFI_ACPI_20_TABLE_GUID, "ACPI-2.0"}, 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 39) { GRUB_EFI_ACPI_TABLE_GUID, "ACPI-1.0"}, 7994077a (Pavel Bludov 2015-11-11 15:21:52 +0800 40) { GRUB_EFI_CRC32_GUIDED_SECTION_EXTRACTION_GUID, 7994077a (Pavel Bludov 2015-11-11 15:21:52 +0800 41) "CRC32 GUIDED SECTION EXTRACTION"}, 7994077a (Pavel Bludov 2015-11-11 15:21:52 +0800 42) { GRUB_EFI_DEBUG_IMAGE_INFO_TABLE_GUID, "DEBUG IMAGE INFO"}, 7994077a (Pavel Bludov 2015-11-11 15:21:52 +0800 43) { GRUB_EFI_DXE_SERVICES_TABLE_GUID, "DXE SERVICES"}, 7994077a (Pavel Bludov 2015-11-11 15:21:52 +0800 44) { GRUB_EFI_HCDP_TABLE_GUID, "HCDP"} 7994077a (Pavel Bludov 2015-11-11 15:21:52 +0800 45) { GRUB_EFI_HOB_LIST_GUID, "HOB LIST"}, 7994077a (Pavel Bludov 2015-11-11 15:21:52 +0800 46) { GRUB_EFI_LZMA_CUSTOM_DECOMPRESS_GUID, "LZMA CUSTOM DECOMPRESS"}, 7994077a (Pavel Bludov 2015-11-11 15:21:52 +0800 47) { GRUB_EFI_MEMORY_TYPE_INFORMATION_GUID, "MEMORY TYPE INFO"}, 7994077a (Pavel Bludov 2015-11-11 15:21:52 +0800 48) { GRUB_EFI_MPS_TABLE_GUID, "MPS"}, 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 49) { GRUB_EFI_SAL_TABLE_GUID, "SAL"}, 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 50) { GRUB_EFI_SMBIOS_TABLE_GUID, "SMBIOS"}, 7994077a (Pavel Bludov 2015-11-11 15:21:52 +0800 51) { GRUB_EFI_SYSTEM_RESOURCE_TABLE_GUID, "SYSTEM RESOURCE TABLE"}, 7994077a (Pavel Bludov 2015-11-11 15:21:52 +0800 52) { GRUB_EFI_TIANO_CUSTOM_DECOMPRESS_GUID, "TIANO CUSTOM DECOMPRESS"}, 7994077a (Pavel Bludov 2015-11-11 15:21:52 +0800 53) { GRUB_EFI_TSC_FREQUENCY_GUID, "TSC FREQUENCY"}, 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 54) }; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 55) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 56) static grub_err_t 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 57) grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)), 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 58) int argc __attribute__ ((unused)), 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 59) char **args __attribute__ ((unused))) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 60) { 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 61) const grub_efi_system_table_t *st = grub_efi_system_table; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 62) grub_efi_configuration_table_t *t; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 63) unsigned int i; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 64) 3f3ec8ef (Stephane Rochoy 2014-06-22 01:34:57 +0200 65) grub_printf ("Address: %p\n", st); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 66) grub_printf ("Signature: %016" PRIxGRUB_UINT64_T " revision: %08x\n", 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 67) st->hdr.signature, st->hdr.revision); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 68) { 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 69) char *vendor; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 70) grub_uint16_t *vendor_utf16; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 71) grub_printf ("Vendor: "); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 72) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 73) for (vendor_utf16 = st->firmware_vendor; *vendor_utf16; vendor_utf16++); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 74) vendor = grub_malloc (4 * (vendor_utf16 - st->firmware_vendor) + 1); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 75) if (!vendor) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 76) return grub_errno; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 77) *grub_utf16_to_utf8 ((grub_uint8_t *) vendor, st->firmware_vendor, 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 78) vendor_utf16 - st->firmware_vendor) = 0; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 79) grub_printf ("%s", vendor); 48798b6a (Vladimir 'phcoder' Serbinenko 2010-09-01 09:34:09 +0200 80) grub_free (vendor); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 81) } 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 82) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 83) grub_printf (", Version=%x\n", st->firmware_revision); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 84) d99af4f0 (Vladimir Serbinenko 2013-12-15 14:42:19 +0100 85) grub_printf ("%lld tables:\n", (long long) st->num_table_entries); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 86) t = st->configuration_table; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 87) for (i = 0; i < st->num_table_entries; i++) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 88) { 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 89) unsigned int j; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 90) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 91) grub_printf ("%p ", t->vendor_table); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 92) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 93) grub_printf ("%08x-%04x-%04x-", 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 94) t->vendor_guid.data1, t->vendor_guid.data2, 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 95) t->vendor_guid.data3); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 96) for (j = 0; j < 8; j++) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 97) grub_printf ("%02x", t->vendor_guid.data4[j]); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 98) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 99) for (j = 0; j < ARRAY_SIZE (guid_mappings); j++) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 100) if (grub_memcmp (&guid_mappings[j].guid, &t->vendor_guid, 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 101) sizeof (grub_efi_guid_t)) == 0) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 102) grub_printf (" %s", guid_mappings[j].name); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 103) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 104) grub_printf ("\n"); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 105) t++; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 106) } 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 107) return GRUB_ERR_NONE; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 108) } 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 109) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 110) static grub_command_t cmd; 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 111) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 112) GRUB_MOD_INIT(lsefisystab) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 113) { 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 114) cmd = grub_register_command ("lsefisystab", grub_cmd_lsefisystab, 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 115) "", "Display EFI system tables."); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 116) } 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 117) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 118) GRUB_MOD_FINI(lsefisystab) 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 119) { 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 120) grub_unregister_command (cmd); 105de6a7 (Tristan Gingold 2010-09-01 02:37:17 +0200 121) }