diff --git a/ChangeLog b/ChangeLog index 752bde8..ab758eb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2009-07-27 Vladimir Serbinenko +2009-07-27 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-25 Felix Zielcke * kern/file.c (grub_file_open): Revert to previous check with diff --git a/commands/i386/cpuid.c b/commands/i386/cpuid.c index b80b14c..71f33ef 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); }