summaryrefslogtreecommitdiff
path: root/src/x86.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2013-09-14 13:01:30 -0400
committerKevin O'Connor <kevin@koconnor.net>2013-09-18 20:48:34 -0400
commitb9c6a960808451d75acd9c048f418dd2c92ac59d (patch)
tree7b7cd650fae1418f6284fc7579762cf832c17fdf /src/x86.c
parent490797e851af64481a998b80072554b75009483c (diff)
downloadqemu-seabios-b9c6a960808451d75acd9c048f418dd2c92ac59d.tar.gz
Split x86 specific functions out of util.c/h to new files x86.c/h.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src/x86.c')
-rw-r--r--src/x86.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/x86.c b/src/x86.c
new file mode 100644
index 0000000..0fdf86f
--- /dev/null
+++ b/src/x86.c
@@ -0,0 +1,23 @@
+// X86 utility functions.
+//
+// Copyright (C) 2013 Kevin O'Connor <kevin@koconnor.net>
+//
+// This file may be distributed under the terms of the GNU LGPLv3 license.
+
+#include "x86.h" // __cpuid
+
+void
+cpuid(u32 index, u32 *eax, u32 *ebx, u32 *ecx, u32 *edx)
+{
+ // Check for cpu id
+ u32 origflags = save_flags();
+ restore_flags(origflags ^ F_ID);
+ u32 newflags = save_flags();
+ restore_flags(origflags);
+
+ if (((origflags ^ newflags) & F_ID) != F_ID)
+ // no cpuid
+ *eax = *ebx = *ecx = *edx = 0;
+ else
+ __cpuid(index, eax, ebx, ecx, edx);
+}