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);
}