/* fwconfig.c - command to read config from qemu fwconfig */ /* * VasEBoot -- GRand Unified Bootloader * Copyright (C) 2015 CoreOS, 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 #include VasEBoot_MOD_LICENSE ("GPLv3+"); #define SELECTOR 0x510 #define DATA 0x511 #define SIGNATURE_INDEX 0x00 #define DIRECTORY_INDEX 0x19 static VasEBoot_extcmd_t cmd_read_fwconfig; struct VasEBoot_qemu_fwcfgfile { VasEBoot_uint32_t size; VasEBoot_uint16_t select; VasEBoot_uint16_t reserved; char name[56]; }; static const struct VasEBoot_arg_option options[] = { {0, 'v', 0, N_("Save read value into variable VARNAME."), N_("VARNAME"), ARG_TYPE_STRING}, {0, 0, 0, 0, 0, 0} }; static VasEBoot_err_t VasEBoot_cmd_fwconfig (VasEBoot_extcmd_context_t ctxt __attribute__ ((unused)), int argc, char **argv) { VasEBoot_uint32_t i, j, value = 0; struct VasEBoot_qemu_fwcfgfile file; char fwsig[4], signature[4] = { 'Q', 'E', 'M', 'U' }; if (argc != 2) return VasEBoot_error (VasEBoot_ERR_BAD_ARGUMENT, N_("two arguments expected")); /* Verify that we have meaningful hardware here */ VasEBoot_outw(SIGNATURE_INDEX, SELECTOR); for (i=0; i