2011-02-23 03:12:36 +00:00
|
|
|
#ifndef __SYSTEM_H__
|
|
|
|
#define __SYSTEM_H__
|
|
|
|
|
2011-08-25 17:56:32 +00:00
|
|
|
#include "load_context.h"
|
|
|
|
|
2011-02-23 03:12:36 +00:00
|
|
|
struct S_SYSTEM_MLTBT_MMAP {
|
|
|
|
u32 Size;
|
2011-07-02 11:03:29 +00:00
|
|
|
u64 Base;
|
|
|
|
u64 Length;
|
2011-02-23 03:12:36 +00:00
|
|
|
u32 Type;
|
|
|
|
} __attribute__ ((packed));
|
|
|
|
typedef struct S_SYSTEM_MLTBT_MMAP T_SYSTEM_MLTBT_MMAP;
|
|
|
|
|
|
|
|
struct S_SYSTEM_INVALID_RAM {
|
2011-07-02 11:03:29 +00:00
|
|
|
u64 Base;
|
|
|
|
u64 Size;
|
2011-02-23 03:12:36 +00:00
|
|
|
} __attribute__ ((packed));
|
|
|
|
typedef struct S_SYSTEM_INVALID_RAM T_SYSTEM_INVALID_RAM;
|
|
|
|
|
2011-08-28 16:06:40 +00:00
|
|
|
void system_parse_cpu_features(void);
|
|
|
|
void system_parse_load_context(T_LOAD_CONTEXT *LoadContext);
|
|
|
|
u64 system_get_memory_upper(void);
|
|
|
|
u64 system_get_memory_lower(void);
|
|
|
|
s8 *system_get_bootloader_name(void);
|
|
|
|
u8 system_memory_available(u64 Start, u64 Length);
|
|
|
|
|
|
|
|
// CPUID stuff
|
|
|
|
typedef union {
|
|
|
|
struct {
|
|
|
|
u8 FPU : 1;
|
|
|
|
u8 VME : 1;
|
|
|
|
u8 DE : 1;
|
|
|
|
u8 PSE : 1;
|
|
|
|
u8 TSC : 1;
|
|
|
|
u8 MSR : 1;
|
|
|
|
u8 PAE : 1;
|
|
|
|
u8 MCE : 1;
|
|
|
|
u8 CX8 : 1;
|
|
|
|
u8 APIC : 1;
|
|
|
|
u8 Res4 : 1;
|
|
|
|
u8 SEP : 1;
|
|
|
|
u8 MTRR : 1;
|
|
|
|
u8 PGE1 : 1;
|
|
|
|
u8 MCA : 1;
|
|
|
|
u8 CMOV : 1;
|
|
|
|
u8 PAT : 1;
|
|
|
|
u8 PSE36 : 1;
|
|
|
|
u8 PSN : 1;
|
|
|
|
u8 CLF : 1;
|
|
|
|
u8 Res5 : 1;
|
|
|
|
u8 DTES : 1;
|
|
|
|
u8 ACPI : 1;
|
|
|
|
u8 MMX : 1;
|
|
|
|
u8 FXSR : 1;
|
|
|
|
u8 SSE : 1;
|
|
|
|
u8 SSE2 : 1;
|
|
|
|
u8 SS : 1;
|
|
|
|
u8 HTT : 1;
|
|
|
|
u8 TM1 : 1;
|
|
|
|
u8 IA64 : 1;
|
|
|
|
u8 PBE : 1;
|
|
|
|
u8 SSE3 : 1;
|
|
|
|
u8 PCLMUL : 1;
|
|
|
|
u8 DTES64 : 1;
|
|
|
|
u8 MONITOR : 1;
|
|
|
|
u8 DS_CPL : 1;
|
|
|
|
u8 VMX : 1;
|
|
|
|
u8 SMX : 1;
|
|
|
|
u8 EST : 1;
|
|
|
|
u8 TM2 : 1;
|
|
|
|
u8 SSSE3 : 1;
|
|
|
|
u8 CID : 1;
|
|
|
|
u8 Res1 : 1;
|
|
|
|
u8 FMA : 1;
|
|
|
|
u8 CX16 : 1;
|
|
|
|
u8 ETPRD : 1;
|
|
|
|
u8 PDCM : 1;
|
|
|
|
u8 Res2 : 2;
|
|
|
|
u8 DCA : 1;
|
|
|
|
u8 SSE4_1 : 1;
|
|
|
|
u8 SSE4_2 : 1;
|
|
|
|
u8 x2APIC : 1;
|
|
|
|
u8 MOVBE : 1;
|
|
|
|
u8 POPCNT : 1;
|
|
|
|
u8 Res3 : 1;
|
|
|
|
u8 AES : 1;
|
|
|
|
u8 XSAVE : 1;
|
|
|
|
u8 OSXSAVE : 1;
|
|
|
|
u8 AVX : 1;
|
|
|
|
} __attribute__((packed)) Flags;
|
|
|
|
u64 FlagsU64;
|
|
|
|
} T_CPUID_FEATURES;
|
|
|
|
|
2011-08-28 23:42:26 +00:00
|
|
|
#define CPUID_HAS(f) (g_SystemInfo.CPUFeatures.Flags.f ? 1 : 0)
|
|
|
|
|
2011-08-25 17:56:32 +00:00
|
|
|
typedef struct {
|
|
|
|
u64 MemoryLower;
|
|
|
|
u64 MemoryUpper;
|
|
|
|
s8* BootloaderName;
|
|
|
|
|
2011-08-28 16:06:40 +00:00
|
|
|
T_CPUID_FEATURES CPUFeatures;
|
|
|
|
|
2011-08-25 17:56:32 +00:00
|
|
|
// Just a guess...
|
|
|
|
T_SYSTEM_INVALID_RAM InvalidMemoryAreas[256];
|
|
|
|
u8 NumInvalidAreas;
|
|
|
|
} T_SYSTEM_INFO;
|
|
|
|
|
2011-08-28 16:06:40 +00:00
|
|
|
u64 system_cpuid(u32 Code);
|
|
|
|
|
|
|
|
// MSR stuff
|
|
|
|
u8 system_msr_available(void);
|
|
|
|
u64 system_msr_get(u32 MSR);
|
|
|
|
void system_msr_set(u32 MSR, u64 Data);
|
2011-02-23 03:12:36 +00:00
|
|
|
|
|
|
|
#endif
|