Put CPU namespaces in separate files to make cpu.hpp smaller

This commit is contained in:
Alex
2023-02-22 01:48:38 +02:00
parent a35482694f
commit c817be50ff
24 changed files with 4872 additions and 4736 deletions

View File

@ -0,0 +1,610 @@
#ifndef __FENNIX_KERNEL_CPU_x32_CPUID_AMD_H__
#define __FENNIX_KERNEL_CPU_x32_CPUID_AMD_H__
#include <types.h>
namespace CPU
{
namespace x32
{
/** @brief EXPERIMENTAL IMPLEMENTATION */
namespace AMD
{
/** @brief Basic CPU information */
struct CPUID0x0
{
union
{
struct
{
uint32_t HighestFunctionSupported : 32;
};
uint32_t raw;
} EAX;
union
{
struct
{
char Vendor[4];
};
uint32_t raw;
} EBX;
union
{
struct
{
char Vendor[4];
};
uint32_t raw;
} ECX;
union
{
struct
{
char Vendor[4];
};
uint32_t raw;
} EDX;
};
/** @brief Additional CPU information */
struct CPUID0x1
{
union
{
struct
{
uint32_t SteppingID : 4;
uint32_t ModelID : 4;
uint32_t FamilyID : 4;
uint32_t Reserved0 : 4;
uint32_t ExtendedModel : 4;
uint32_t ExtendedFamily : 8;
uint32_t Reserved1 : 4;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t BrandIndex : 8;
uint32_t CLFLUSHLineSize : 8;
uint32_t LogicalProcessorsPerPackage : 8;
uint32_t LocalAPICID : 8;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t SSE3 : 1;
uint32_t Reserved0 : 1;
uint32_t MONITOR : 1;
uint32_t Reserved1 : 1;
uint32_t DS_CPL : 1;
uint32_t Reserved2 : 1;
uint32_t SMX : 1;
uint32_t Reserved3 : 1;
uint32_t TM2 : 1;
uint32_t Reserved4 : 1;
uint32_t CNXT_ID : 1;
uint32_t Reserved5 : 1;
uint32_t CMPXCHG16B : 1;
uint32_t Reserved6 : 1;
uint32_t xTPRUpdateControl : 1;
uint32_t Reserved7 : 1;
uint32_t Reserved8 : 1;
uint32_t DCA : 1;
uint32_t Reserved9 : 1;
uint32_t SSE4_1 : 1;
uint32_t SSE4_2 : 1;
uint32_t Reserved10 : 1;
uint32_t MOVBE : 1;
uint32_t POPCNT : 1;
uint32_t Reserved11 : 1;
uint32_t AES : 1;
uint32_t Reserved12 : 1;
uint32_t XSAVE : 1;
uint32_t OSXSAVE : 1;
uint32_t AVX : 1;
uint32_t Reserved13 : 1;
uint32_t RDRAND : 1;
uint32_t Reserved14 : 1;
uint32_t Hypervisor : 1;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t FPU : 1;
uint32_t VME : 1;
uint32_t DE : 1;
uint32_t PSE : 1;
uint32_t TSC : 1;
uint32_t MSR : 1;
uint32_t PAE : 1;
uint32_t MCE : 1;
uint32_t CX8 : 1;
uint32_t APIC : 1;
uint32_t Reserved0 : 1;
uint32_t SEP : 1;
uint32_t MTRR : 1;
uint32_t PGE : 1;
uint32_t MCA : 1;
uint32_t CMOV : 1;
uint32_t PAT : 1;
uint32_t PSE36 : 1;
uint32_t PSN : 1;
uint32_t CLFSH : 1;
uint32_t Reserved1 : 1;
uint32_t DS : 1;
uint32_t ACPI : 1;
uint32_t MMX : 1;
uint32_t FXSR : 1;
uint32_t SSE : 1;
uint32_t SSE2 : 1;
uint32_t SS : 1;
uint32_t HTT : 1;
uint32_t TM : 1;
uint32_t Reserved2 : 1;
uint32_t PBE : 1;
};
uint32_t raw;
} EDX;
};
/** @brief CPU cache and TLB */
struct CPUID0x2
{
union
{
struct
{
uint32_t L1DataCacheSize : 8;
uint32_t L1DataCacheAssociativity : 8;
uint32_t L1DataCacheLineSize : 8;
uint32_t L1DataCachePartitions : 8;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t L1InstructionCacheSize : 8;
uint32_t L1InstructionCacheAssociativity : 8;
uint32_t L1InstructionCacheLineSize : 8;
uint32_t L1InstructionCachePartitions : 8;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t L2UnifiedCacheSize : 16;
uint32_t L2UnifiedCacheAssociativity : 8;
uint32_t L2UnifiedCacheLineSize : 8;
uint32_t L2UnifiedCachePartitions : 8;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t L3UnifiedCacheSize : 18;
uint32_t L3UnifiedCacheAssociativity : 8;
uint32_t L3UnifiedCacheLineSize : 8;
uint32_t L3UnifiedCachePartitions : 8;
};
uint32_t raw;
} EDX;
};
/** @brief Get CPU hypervisor information */
struct CPUID0x40000000
{
union
{
struct
{
/**
* @brief Maximum input value for hypervisor CPUID information.
* @note Can be from 0x40000001 to 0x400000FF
*/
uint32_t MaximumInputValue : 32;
};
uint32_t raw;
} EAX;
union
{
struct
{
/** @brief Hypervisor vendor signature */
char Hypervisor[4];
};
uint32_t raw;
} EBX;
union
{
struct
{
/** @brief Hypervisor vendor signature */
char Hypervisor[4];
};
uint32_t raw;
} ECX;
union
{
struct
{
/** @brief Hypervisor vendor signature */
char Hypervisor[4];
};
uint32_t raw;
} EDX;
};
/** @brief Extended CPU information */
struct CPUID0x80000001
{
union
{
struct
{
uint32_t SteppingID : 4;
uint32_t ModelID : 4;
uint32_t FamilyID : 4;
uint32_t Reserved0 : 4;
uint32_t ExtendedModel : 4;
uint32_t ExtendedFamily : 8;
uint32_t Reserved1 : 4;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t BranchID : 16;
uint32_t Reserved0 : 16;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t LAHF_SAHF : 1;
uint32_t CmpLegacy : 1;
uint32_t SVM : 1;
uint32_t Reserved0 : 1;
uint32_t AltMovCr8 : 1;
uint32_t Reserved1 : 26;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t FPU : 1;
uint32_t VME : 1;
uint32_t DE : 1;
uint32_t PSE : 1;
uint32_t TSC : 1;
uint32_t MSR : 1;
uint32_t PAE : 1;
uint32_t MCE : 1;
uint32_t CMPXCHG8B : 1;
uint32_t APIC : 1;
uint32_t Reserved0 : 1;
uint32_t SYSCALL : 1;
uint32_t MTRR : 1;
uint32_t PGE : 1;
uint32_t MCA : 1;
uint32_t CMOV : 1;
uint32_t PAT : 1;
uint32_t PSE36 : 1;
uint32_t Reserved1 : 1;
uint32_t ExeDisable : 1;
uint32_t Reserved2 : 1;
uint32_t MMXExtended : 1;
uint32_t MMX : 1;
uint32_t FXSR : 1;
uint32_t FFXSR : 1;
uint32_t Reserved3 : 1;
uint32_t RDTSCP : 1;
uint32_t Reserved4 : 1;
uint32_t LongMode : 1;
uint32_t ThreeDNowExtended : 1;
uint32_t ThreeDNow : 1;
};
uint32_t raw;
} EDX;
};
/** @brief CPU brand string */
struct CPUID0x80000002
{
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EAX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EBX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} ECX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EDX;
};
/** @brief CPU brand string */
struct CPUID0x80000003
{
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EAX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EBX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} ECX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EDX;
};
/** @brief CPU brand string */
struct CPUID0x80000004
{
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EAX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EBX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} ECX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EDX;
};
/** @brief Cache and TLB information */
struct CPUID0x80000005
{
union
{
struct
{
uint32_t InstructionCount : 8;
uint32_t InstructionAssociativity : 8;
uint32_t DataCount : 8;
uint32_t DataAssociativity : 8;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t InstructionCount : 8;
uint32_t InstructionAssociativity : 8;
uint32_t DataCount : 8;
uint32_t DataAssociativity : 8;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t LineSize : 8;
uint32_t LinePerTag : 8;
uint32_t Associativity : 8;
uint32_t CacheSize : 8;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t LineSize : 8;
uint32_t LinePerTag : 8;
uint32_t Associativity : 8;
uint32_t CacheSize : 8;
};
uint32_t raw;
} EDX;
};
/** @brief CPU cache line information */
struct CPUID0x80000006
{
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t LineSize : 8;
uint32_t LinePerTag : 4;
uint32_t Associativity : 4;
uint32_t CacheSize : 16;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EDX;
};
/** @brief APM */
struct CPUID0x80000007
{
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t TemperatureSensor : 1;
uint32_t FrequencyID : 1;
uint32_t VoltageID : 1;
uint32_t ThermaTrip : 1;
uint32_t HarwareThermalControl : 1;
uint32_t SoftwareThermalControl : 1;
uint32_t Reserved0 : 2;
uint32_t TSCInvariant : 1;
uint32_t Reserved1 : 23;
};
uint32_t raw;
} EDX;
};
}
}
}
#endif // !__FENNIX_KERNEL_CPU_x32_CPUID_AMD_H__

View File

@ -0,0 +1,948 @@
#ifndef __FENNIX_KERNEL_CPU_x32_CPUID_INTEL_H__
#define __FENNIX_KERNEL_CPU_x32_CPUID_INTEL_H__
#include <types.h>
namespace CPU
{
namespace x32
{
/** @brief EXPERIMENTAL IMPLEMENTATION */
namespace Intel
{
/** @brief Basic CPU information */
struct CPUID0x0
{
union
{
struct
{
uint32_t HighestFunctionSupported : 32;
};
uint32_t raw;
} EAX;
union
{
struct
{
char rbx[4];
};
uint32_t raw;
} EBX;
union
{
struct
{
char rcx[4];
};
uint32_t raw;
} ECX;
union
{
struct
{
char rdx[4];
};
uint32_t raw;
} EDX;
};
/** @brief Additional CPU information */
struct CPUID0x1
{
union
{
struct
{
uint32_t SteppingID : 4;
uint32_t ModelID : 4;
uint32_t FamilyID : 4;
uint32_t Type : 2;
uint32_t Reserved0 : 2;
uint32_t ExtendedModel : 4;
uint32_t ExtendedFamily : 8;
uint32_t Reserved1 : 4;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t BrandIndex : 8;
uint32_t CLFLUSHLineSize : 8;
uint32_t LogicalProcessorsPerPackage : 8;
uint32_t LocalAPICID : 8;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t SSE3 : 1;
uint32_t PCLMULQDQ : 1;
uint32_t DTES64 : 1;
uint32_t MONITOR : 1;
uint32_t DS_CPL : 1;
uint32_t VMX : 1;
uint32_t SMX : 1;
uint32_t EIST : 1;
uint32_t TM2 : 1;
uint32_t SSSE3 : 1;
uint32_t CNXT_ID : 1;
uint32_t Reserved0 : 1;
uint32_t FMA : 1;
uint32_t CMPXCHG16B : 1;
uint32_t xTPRUpdateControl : 1;
uint32_t PDCM : 1;
uint32_t Reserved1 : 1;
uint32_t PCID : 1;
uint32_t DCA : 1;
uint32_t SSE4_1 : 1;
uint32_t SSE4_2 : 1;
uint32_t x2APIC : 1;
uint32_t MOVBE : 1;
uint32_t POPCNT : 1;
uint32_t TSCDeadline : 1;
uint32_t AES : 1;
uint32_t XSAVE : 1;
uint32_t OSXSAVE : 1;
uint32_t AVX : 1;
uint32_t F16C : 1;
uint32_t RDRAND : 1;
uint32_t Reserved2 : 1;
uint32_t Hypervisor : 1;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t FPU : 1;
uint32_t VME : 1;
uint32_t DE : 1;
uint32_t PSE : 1;
uint32_t TSC : 1;
uint32_t MSR : 1;
uint32_t PAE : 1;
uint32_t MCE : 1;
uint32_t CX8 : 1;
uint32_t APIC : 1;
uint32_t Reserved0 : 1;
uint32_t SEP : 1;
uint32_t MTRR : 1;
uint32_t PGE : 1;
uint32_t MCA : 1;
uint32_t CMOV : 1;
uint32_t PAT : 1;
uint32_t PSE36 : 1;
uint32_t PSN : 1;
uint32_t CLFSH : 1;
uint32_t Reserved1 : 1;
uint32_t DS : 1;
uint32_t ACPI : 1;
uint32_t MMX : 1;
uint32_t FXSR : 1;
uint32_t SSE : 1;
uint32_t SSE2 : 1;
uint32_t SS : 1;
uint32_t HTT : 1;
uint32_t TM : 1;
uint32_t Reserved2 : 1;
uint32_t PBE : 1;
};
uint32_t raw;
} EDX;
};
/** @brief CPU cache and TLB */
struct CPUID0x2
{
union
{
struct
{
uint32_t CacheLineSize : 8;
uint32_t CacheLinesPerTag : 8;
uint32_t Associativity : 8;
uint32_t CacheSize : 8;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t CacheLineSize : 8;
uint32_t CacheLinesPerTag : 8;
uint32_t Associativity : 8;
uint32_t CacheSize : 8;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t CacheLineSize : 8;
uint32_t CacheLinesPerTag : 8;
uint32_t Associativity : 8;
uint32_t CacheSize : 8;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t CacheLineSize : 8;
uint32_t CacheLinesPerTag : 8;
uint32_t Associativity : 8;
uint32_t CacheSize : 8;
};
uint32_t raw;
} EDX;
};
/** @brief CPU serial number */
struct CPUID0x3
{
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t ProcessorSerialNumber : 32;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t ProcessorSerialNumber : 32;
};
uint32_t raw;
} EDX;
};
/** @brief Cache information */
struct CPUID0x4_1
{
union
{
struct
{
uint32_t Type : 5;
uint32_t Level : 3;
uint32_t SelfInitializing : 1;
uint32_t FullyAssociative : 1;
uint32_t Reserved : 4;
uint32_t MaxAddressableIdsForLogicalProcessors : 12;
uint32_t CoresPerPackage : 6;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t SystemCoherencyLineSize : 12;
uint32_t PhysicalLinePartitions : 10;
uint32_t WaysOfAssociativity : 10;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EDX;
};
/** @brief MONITOR information */
struct CPUID0x5
{
union
{
struct
{
uint32_t SmallestMonitorLineSize : 16;
uint32_t Reserved : 16;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t LargestMonitorLineSize : 16;
uint32_t Reserved : 16;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t MWAITEnumerationSupported : 1;
uint32_t InterruptsAsBreakEvent : 1;
uint32_t Reserved : 30;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t C0 : 4;
uint32_t C1 : 4;
uint32_t C2 : 4;
uint32_t C3 : 4;
uint32_t C4 : 4;
uint32_t Reserved : 12;
};
uint32_t raw;
} EDX;
};
/** @brief Thermal and power management information */
struct CPUID0x6
{
union
{
struct
{
uint32_t SensorSupported : 1;
uint32_t Reserved : 31;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t InterruptThreshold : 4;
uint32_t Reserved : 26;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t ACNT_MCNT : 1;
uint32_t Reserved : 31;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EDX;
};
/** @brief Performance monitors */
struct CPUID0xA
{
union
{
struct
{
uint32_t VersionID : 8;
uint32_t NumberCounters : 8;
uint32_t BitWidthOfCounters : 8;
uint32_t LengthOfEBXBitVector : 8;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t CoreCycles : 1;
uint32_t InstructionsRetired : 1;
uint32_t ReferenceCycles : 1;
uint32_t CacheReferences : 1;
uint32_t CacheMisses : 1;
uint32_t BranchInstructionsRetired : 1;
uint32_t BranchMissesRetired : 1;
uint32_t Reserved : 25;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t FixedFunctionCounters : 5;
uint32_t CounterWidth : 8;
uint32_t Reserved : 19;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EDX;
};
/** @brief Get CPU frequency information */
struct CPUID0x15
{
union
{
struct
{
uint32_t VersionID : 8;
uint32_t NumberCounters : 8;
uint32_t BitWidthOfCounters : 8;
uint32_t LengthOfEBXBitVector : 8;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t CoreCycles : 1;
uint32_t InstructionsRetired : 1;
uint32_t ReferenceCycles : 1;
uint32_t CacheReferences : 1;
uint32_t CacheMisses : 1;
uint32_t BranchInstructionsRetired : 1;
uint32_t BranchMissesRetired : 1;
uint32_t Reserved : 25;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t FixedFunctionCounters : 5;
uint32_t CounterWidth : 8;
uint32_t Reserved : 19;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EDX;
};
/** @brief Get CPU frequency information */
struct CPUID0x16
{
union
{
struct
{
/**
* @brief Denominator of the TSC frequency
*
* @note TSC frequency = core crystal clock frequency * EBX/EAX
*/
uint32_t Denominator : 31;
};
uint32_t raw;
} EAX;
union
{
struct
{
/**
* @brief Numerator of the TSC frequency
*
* @note TSC frequency = core crystal clock frequency * EBX/EAX
*/
uint32_t Numerator : 31;
};
uint32_t raw;
} EBX;
union
{
struct
{
/** @brief Core crystal clock frequency in Hz */
uint32_t CoreCrystalClock : 31;
};
uint32_t raw;
} ECX;
union
{
struct
{
/** @brief Reserved */
uint32_t Reserved : 31;
};
uint32_t raw;
} EDX;
};
/** @brief Get CPU hypervisor information */
struct CPUID0x40000000
{
union
{
struct
{
/**
* @brief Maximum input value for hypervisor CPUID information.
* @note Can be from 0x40000001 to 0x400000FF
*/
uint32_t MaximumInputValue : 32;
};
uint32_t raw;
} EAX;
union
{
struct
{
/** @brief Hypervisor vendor signature */
char Hypervisor[4];
};
uint32_t raw;
} EBX;
union
{
struct
{
/** @brief Hypervisor vendor signature */
char Hypervisor[4];
};
uint32_t raw;
} ECX;
union
{
struct
{
/** @brief Hypervisor vendor signature */
char Hypervisor[4];
};
uint32_t raw;
} EDX;
};
/** @brief Extended CPU information */
struct CPUID0x80000000
{
union
{
struct
{
uint32_t HighestExtendedFunctionSupported : 32;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EDX;
uint32_t raw;
};
/** @brief Extended CPU information */
struct CPUID0x80000001
{
union
{
struct
{
uint32_t Unknown : 32;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t LAHF_SAHF : 1;
uint32_t Reserved : 31;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t Reserved0 : 11;
uint32_t SYSCALL : 1;
uint32_t Reserved1 : 8;
uint32_t ExecuteDisable : 1;
uint32_t Reserved2 : 8;
uint32_t EMT64T : 1;
uint32_t Reserved3 : 2;
};
uint32_t raw;
} EDX;
uint32_t raw;
};
/** @brief CPU brand string */
struct CPUID0x80000002
{
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EAX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EBX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} ECX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EDX;
uint32_t raw;
};
/** @brief CPU brand string */
struct CPUID0x80000003
{
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EAX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EBX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} ECX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EDX;
uint32_t raw;
};
/** @brief CPU brand string */
struct CPUID0x80000004
{
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EAX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EBX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} ECX;
union
{
struct
{
char Brand[4];
};
uint32_t raw;
} EDX;
uint32_t raw;
};
/** @brief CPU cache line information */
struct CPUID0x80000006
{
union
{
struct
{
uint32_t InstructionCount : 12;
uint32_t InstructionAssociativity : 4;
uint32_t DataCount : 12;
uint32_t DataAssociativity : 4;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t InstructionCount : 12;
uint32_t InstructionAssociativity : 4;
uint32_t DataCount : 12;
uint32_t DataAssociativity : 4;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t LineSize : 8;
uint32_t LinePerTag : 4;
uint32_t Associativity : 4;
uint32_t CacheSize : 16;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EDX;
uint32_t raw;
};
/** @brief Virtual and physical memory size */
struct CPUID0x80000008
{
union
{
struct
{
uint32_t PhysicalAddressBits : 8;
uint32_t LinearAddressBits : 8;
uint32_t Reserved : 16;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EDX;
uint32_t raw;
};
/** @brief Secure virtual machine parameters */
struct CPUID0x8000000A
{
union
{
struct
{
uint32_t SVMRevision : 8;
uint32_t Reserved : 24;
};
uint32_t raw;
} EAX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EBX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} ECX;
union
{
struct
{
uint32_t Reserved : 32;
};
uint32_t raw;
} EDX;
uint32_t raw;
};
}
}
}
#endif // !__FENNIX_KERNEL_CPU_x32_CPUID_INTEL_H__

140
include/cpu/x86/x32/cr.hpp Normal file
View File

@ -0,0 +1,140 @@
#ifndef __FENNIX_KERNEL_CPU_x32_CR_H__
#define __FENNIX_KERNEL_CPU_x32_CR_H__
#include <types.h>
namespace CPU
{
namespace x32
{
typedef union CR0
{
struct
{
/** @brief Protection Enable */
uint32_t PE : 1;
/** @brief Monitor Coprocessor */
uint32_t MP : 1;
/** @brief Emulation */
uint32_t EM : 1;
/** @brief Task Switched */
uint32_t TS : 1;
/** @brief Extension Type */
uint32_t ET : 1;
/** @brief Numeric Error */
uint32_t NE : 1;
/** @brief Reserved */
uint32_t Reserved0 : 10;
/** @brief Write Protect */
uint32_t WP : 1;
/** @brief Reserved */
uint32_t Reserved1 : 1;
/** @brief Alignment Mask */
uint32_t AM : 1;
/** @brief Reserved */
uint32_t Reserved2 : 10;
/** @brief Not Write-through */
uint32_t NW : 1;
/** @brief Cache Disable */
uint32_t CD : 1;
/** @brief Paging */
uint32_t PG : 1;
};
uint32_t raw;
} CR0;
typedef union CR2
{
struct
{
/** @brief Page Fault Linear Address */
uint32_t PFLA;
};
uint32_t raw;
} CR2;
typedef union CR3
{
struct
{
/** @brief Not used if bit 17 of CR4 is 1 */
uint32_t PWT : 1;
/** @brief Not used if bit 17 of CR4 is 1 */
uint32_t PCD : 1;
/** @brief Base of PML4T/PML5T */
uint32_t PDBR;
};
uint32_t raw;
} CR3;
typedef union CR4
{
struct
{
/** @brief Virtual-8086 Mode Extensions */
uint32_t VME : 1;
/** @brief Protected-Mode Virtual Interrupts */
uint32_t PVI : 1;
/** @brief Time Stamp Disable */
uint32_t TSD : 1;
/** @brief Debugging Extensions */
uint32_t DE : 1;
/** @brief Page Size Extensions */
uint32_t PSE : 1;
/** @brief Physical Address Extension */
uint32_t PAE : 1;
/** @brief Machine Check Enable */
uint32_t MCE : 1;
/** @brief Page Global Enable */
uint32_t PGE : 1;
/** @brief Performance Monitoring Counter */
uint32_t PCE : 1;
/** @brief Operating System Support */
uint32_t OSFXSR : 1;
/** @brief Operating System Support */
uint32_t OSXMMEXCPT : 1;
/** @brief User-Mode Instruction Prevention */
uint32_t UMIP : 1;
/** @brief Linear Address 57bit */
uint32_t LA57 : 1;
/** @brief VMX Enable */
uint32_t VMXE : 1;
/** @brief SMX Enable */
uint32_t SMXE : 1;
/** @brief Reserved */
uint32_t Reserved0 : 1;
/** @brief FSGSBASE Enable */
uint32_t FSGSBASE : 1;
/** @brief PCID Enable */
uint32_t PCIDE : 1;
/** @brief XSAVE and Processor Extended States Enable */
uint32_t OSXSAVE : 1;
/** @brief Reserved */
uint32_t Reserved1 : 1;
/** @brief SMEP Enable */
uint32_t SMEP : 1;
/** @brief SMAP Enable */
uint32_t SMAP : 1;
/** @brief Protection-Key Enable */
uint32_t PKE : 1;
/** @brief Control-flow Enforcement Technology*/
uint32_t CET : 1;
/* @brief Enable Protection Keys for Supervisor Mode Pages */
uint32_t PKS : 1;
};
uint32_t raw;
} CR4;
typedef union CR8
{
struct
{
/** @brief Task Priority Level */
uint32_t TPL : 1;
};
uint32_t raw;
} CR8;
}
}
#endif // !__FENNIX_KERNEL_CPU_x32_CR_H__

View File

@ -0,0 +1,14 @@
#ifndef __FENNIX_KERNEL_CPU_x32_MSR_H__
#define __FENNIX_KERNEL_CPU_x32_MSR_H__
#include <types.h>
namespace CPU
{
namespace x32
{
}
}
#endif // !__FENNIX_KERNEL_CPU_x32_MSR_H__