|
@@ -219,6 +219,24 @@ static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,
|
|
|
: "memory");
|
|
|
}
|
|
|
|
|
|
+#define native_cpuid_reg(reg) \
|
|
|
+static inline unsigned int native_cpuid_##reg(unsigned int op) \
|
|
|
+{ \
|
|
|
+ unsigned int eax = op, ebx, ecx = 0, edx; \
|
|
|
+ \
|
|
|
+ native_cpuid(&eax, &ebx, &ecx, &edx); \
|
|
|
+ \
|
|
|
+ return reg; \
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Native CPUID functions returning a single datum.
|
|
|
+ */
|
|
|
+native_cpuid_reg(eax)
|
|
|
+native_cpuid_reg(ebx)
|
|
|
+native_cpuid_reg(ecx)
|
|
|
+native_cpuid_reg(edx)
|
|
|
+
|
|
|
static inline void load_cr3(pgd_t *pgdir)
|
|
|
{
|
|
|
write_cr3(__pa(pgdir));
|