uint32_t x86_features[FSCAPINTS];
enum x86_vendor x86_vendor;
unsigned int x86_family, x86_model, x86_stepping;
+unsigned int maxphysaddr, maxvirtaddr;
const char *environment_description = ENVIRONMENT_DESCRIPTION;
static void collect_cpuid(cpuid_count_fn_t cpuid_fn)
{
- unsigned int max, tmp, eax, ebx, ecx, edx;
+ unsigned int max, tmp, eax, ebx, ecx, edx, addr = 0;
cpuid_fn(0, 0, &max, &ebx, &ecx, &edx);
cpuid_fn(0x80000007, 0, &tmp, &tmp, &tmp,
&x86_features[FEATURESET_e7d]);
if ( max >= 0x80000008 )
- cpuid_fn(0x80000008, 0, &tmp,
+ cpuid_fn(0x80000008, 0, &addr,
&x86_features[FEATURESET_e8b],
&tmp, &tmp);
}
+
+ maxphysaddr = (addr & 0xff) ?: 36;
+ maxvirtaddr = ((addr >> 8) & 0xff) ?: 32;
}
/*
extern enum x86_vendor x86_vendor;
extern unsigned int x86_family, x86_model, x86_stepping;
+extern unsigned int maxphysaddr, maxvirtaddr;
static inline bool vendor_is(enum x86_vendor v)
{