diff --git a/ChangeLog b/ChangeLog index 84b24256f..23c68d25c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2009-08-01 Vladimir Serbinenko +2009-08-01 Robert Millan + + Fix cpuid command. + + * commands/i386/cpuid.c (options): New variable. + (grub_cmd_cpuid): Return real error. + (GRUB_MOD_INIT(cpuid)): Declare options. + 2009-07-31 Vladimir Serbinenko * partmap/pc.c (pc_partition_map_iterate): Check that boot flags are diff --git a/commands/i386/cpuid.c b/commands/i386/cpuid.c index b80b14c10..71f33efb3 100644 --- a/commands/i386/cpuid.c +++ b/commands/i386/cpuid.c @@ -23,25 +23,33 @@ #include #include #include +#include #define cpuid(num,a,b,c,d) \ asm volatile ("xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1" \ : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \ : "0" (num)) +static const struct grub_arg_option options[] = + { + {"long-mode", 'l', 0, "check for long mode flag (default)", 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + #define bit_LM (1 << 29) static unsigned char has_longmode = 0; static grub_err_t -grub_cmd_cpuid (struct grub_command *cmd __attribute__ ((unused)), - int argc __attribute__ ((unused)), - char **args __attribute__ ((unused))) +grub_cmd_cpuid (grub_extcmd_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) { - return !has_longmode; + return has_longmode ? GRUB_ERR_NONE + : grub_error (GRUB_ERR_TEST_FAILURE, "false"); } -static grub_command_t cmd; +static grub_extcmd_t cmd; GRUB_MOD_INIT(cpuid) { @@ -78,11 +86,11 @@ GRUB_MOD_INIT(cpuid) done: #endif - cmd = grub_register_command ("cpuid", grub_cmd_cpuid, - 0, "Check for CPU features"); + cmd = grub_register_extcmd ("cpuid", grub_cmd_cpuid, GRUB_COMMAND_FLAG_BOTH, + "cpuid [-l]", "Check for CPU features", options); } GRUB_MOD_FINI(cpuid) { - grub_unregister_command (cmd); + grub_unregister_extcmd (cmd); }