Module Name: src Committed By: msaitoh Date: Fri Oct 4 17:53:19 UTC 2013
Modified Files: src/sys/arch/x86/include: specialreg.h Log Message: Sort definitions. No functional change. - CPUID_FEAT_BLACKLIST is for Fn00000001 %edx, so move it. - Sort CPUID definitions with initial EAX value. To generate a diff of this commit: cvs rdiff -u -r1.69 -r1.70 src/sys/arch/x86/include/specialreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/x86/include/specialreg.h diff -u src/sys/arch/x86/include/specialreg.h:1.69 src/sys/arch/x86/include/specialreg.h:1.70 --- src/sys/arch/x86/include/specialreg.h:1.69 Fri Oct 4 17:21:43 2013 +++ src/sys/arch/x86/include/specialreg.h Fri Oct 4 17:53:19 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: specialreg.h,v 1.69 2013/10/04 17:21:43 msaitoh Exp $ */ +/* $NetBSD: specialreg.h,v 1.70 2013/10/04 17:53:19 msaitoh Exp $ */ /*- * Copyright (c) 1991 The Regents of the University of California. @@ -137,6 +137,75 @@ "\31" "FXSR" "\32" "SSE" "\33" "SSE2" "\34" "SS" \ "\35" "HTT" "\36" "TM" "\37" "IA64" "\40" "SBF" +/* Blacklists of CPUID flags - used to mask certain features */ +#ifdef XEN +/* Not on Xen */ +#define CPUID_FEAT_BLACKLIST (CPUID_PGE|CPUID_PSE|CPUID_MTRR) +#else +#define CPUID_FEAT_BLACKLIST 0 +#endif /* XEN */ + +/* + * CPUID "features" bits in Fn00000001 %ecx + */ + +#define CPUID2_SSE3 0x00000001 /* Streaming SIMD Extensions 3 */ +#define CPUID2_PCLMUL 0x00000002 /* PCLMULQDQ instructions */ +#define CPUID2_DTES64 0x00000004 /* 64-bit Debug Trace */ +#define CPUID2_MONITOR 0x00000008 /* MONITOR/MWAIT instructions */ +#define CPUID2_DS_CPL 0x00000010 /* CPL Qualified Debug Store */ +#define CPUID2_VMX 0x00000020 /* Virtual Machine Extensions */ +#define CPUID2_SMX 0x00000040 /* Safer Mode Extensions */ +#define CPUID2_EST 0x00000080 /* Enhanced SpeedStep Technology */ +#define CPUID2_TM2 0x00000100 /* Thermal Monitor 2 */ +#define CPUID2_SSSE3 0x00000200 /* Supplemental SSE3 */ +#define CPUID2_CID 0x00000400 /* Context ID */ +/* bit 11 unused 0x00000800 */ +#define CPUID2_FMA 0x00001000 /* has Fused Multiply Add */ +#define CPUID2_CX16 0x00002000 /* has CMPXCHG16B instruction */ +#define CPUID2_xTPR 0x00004000 /* Task Priority Messages disabled? */ +#define CPUID2_PDCM 0x00008000 /* Perf/Debug Capability MSR */ +/* bit 16 unused 0x00010000 */ +#define CPUID2_PCID 0x00020000 /* Process Context ID */ +#define CPUID2_DCA 0x00040000 /* Direct Cache Access */ +#define CPUID2_SSE41 0x00080000 /* Streaming SIMD Extensions 4.1 */ +#define CPUID2_SSE42 0x00100000 /* Streaming SIMD Extensions 4.2 */ +#define CPUID2_X2APIC 0x00200000 /* xAPIC Extensions */ +#define CPUID2_MOVBE 0x00400000 /* MOVBE (move after byteswap) */ +#define CPUID2_POPCNT 0x00800000 /* popcount instruction available */ +#define CPUID2_DEADLINE 0x01000000 /* APIC Timer supports TSC Deadline */ +#define CPUID2_AES 0x02000000 /* AES instructions */ +#define CPUID2_XSAVE 0x04000000 /* XSAVE instructions */ +#define CPUID2_OSXSAVE 0x08000000 /* XGETBV/XSETBV instructions */ +#define CPUID2_AVX 0x10000000 /* AVX instructions */ +#define CPUID2_F16C 0x20000000 /* half precision conversion */ +#define CPUID2_RDRAND 0x40000000 /* RDRAND (hardware random number) */ +#define CPUID2_RAZ 0x80000000 /* RAZ. Indicates guest state. */ + +#define CPUID2_FLAGS1 "\20" \ + "\1" "SSE3" "\2" "PCLMULQDQ" "\3" "DTES64" "\4" "MONITOR" \ + "\5" "DS-CPL" "\6" "VMX" "\7" "SMX" "\10" "EST" \ + "\11" "TM2" "\12" "SSSE3" "\13" "CID" "\14" "B11" \ + "\15" "FMA" "\16" "CX16" "\17" "xTPR" "\20" "PDCM" \ + "\21" "B16" "\22" "PCID" "\23" "DCA" "\24" "SSE41" \ + "\25" "SSE42" "\26" "X2APIC" "\27" "MOVBE" "\30" "POPCNT" \ + "\31" "DEADLINE" "\32" "AES" "\33" "XSAVE" "\34" "OSXSAVE" \ + "\35" "AVX" "\36" "F16C" "\37" "RDRAND" "\40" "RAZ" + +#define CPUID2FAMILY(cpuid) (((cpuid) >> 8) & 0xf) +#define CPUID2MODEL(cpuid) (((cpuid) >> 4) & 0xf) +#define CPUID2STEPPING(cpuid) ((cpuid) & 0xf) + +/* + * The Extended family bits should only be inspected when CPUID2FAMILY() + * returns 15. They are use to encode family value 16 to 270 (add 15). + * The Extended model hits are the high 4 bits of the model. + * They are only valid for family >= 15 or family 6 (intel, but all amd + * family 6 are documented to return zero bits for them). + */ +#define CPUID2EXTFAMILY(cpuid) (((cpuid) >> 20) & 0xff) +#define CPUID2EXTMODEL(cpuid) (((cpuid) >> 16) & 0xf) + /* * Intel Digital Thermal Sensor and * Power Management, Fn0000_0006 - %eax. @@ -197,6 +266,40 @@ "\32" "PT" "\33" "AVX512PF""\34" "AVX512ER"\ "\35" "AVX512CD""\36" "SHA" +/* + * CPUID Processor extended state Enumeration Fn0000000d %eax + * + * Extended Control Register XCR0 + */ +#define XCR0_X87 0x00000001 /* x87 FPU/MMX state */ +#define XCR0_SSE 0x00000002 /* SSE state */ +#define XCR0_AVX 0x00000004 /* AVX state (ymmn registers) */ + +#define XCR0_FLAGS1 "\20" \ + "\1" "x87" "\2" "SSE" "\3" "AVX" "\4" "B03" + +/* + * CPUID Processor extended state Enumeration Fn0000000d + * + * %ecx == 0: supported features info: + * %edx:%eax bits valid for XCR0 + * %ebx Save area size for features enabled in XCR0 + * %ecx Maximim save area size for all cpu features + * + * %ecx == 1: Bit 0 => xsaveopt instruction avalaible (sandy bridge onwards) + * + * %ecx >= 2: Save area details for XCR0 bit n + * %eax: size of save area for this feature + * %ebx: offset of save area for this feature + * %ecx, %edx: reserved + * All of %eax, %ebx, %ecx and %edx zero for unsupported features. + */ + +#define CPUID_PES1_XSAVEOPT 0x00000001 /* xsaveopt instruction */ + +#define CPUID_PES1_FLAGS "\20" \ + "\1" "XSAVEOPT" + /* Intel Fn80000001 extended features - %edx */ #define CPUID_SYSCALL 0x00000800 /* SYSCALL/SYSRET */ #define CPUID_XD 0x00100000 /* Execute Disable (like CPUID_NOX) */ @@ -267,24 +370,6 @@ "\31" "B24" "\32" "B25" "\33" "B26" "\34" "B27" \ "\35" "B28" "\36" "B29" "\37" "B30" "\40" "B31" -/* AMD Fn8000000a %edx features (SVM features) */ -#define CPUID_AMD_SVM_NP 0x00000001 -#define CPUID_AMD_SVM_LbrVirt 0x00000002 -#define CPUID_AMD_SVM_SVML 0x00000004 -#define CPUID_AMD_SVM_NRIPS 0x00000008 -#define CPUID_AMD_SVM_TSCRateCtrl 0x00000010 -#define CPUID_AMD_SVM_VMCBCleanBits 0x00000020 -#define CPUID_AMD_SVM_FlushByASID 0x00000040 -#define CPUID_AMD_SVM_DecodeAssist 0x00000080 -#define CPUID_AMD_SVM_PauseFilter 0x00000400 -#define CPUID_AMD_SVM_FLAGS "\20" \ - "\1" "NP" "\2" "LbrVirt" "\3" "SVML" "\4" "NRIPS" \ - "\5" "TSCRate" "\6" "VMCBCleanBits" \ - "\7" "FlushByASID" "\10" "DecodeAssist" \ - "\11" "B08" "\12" "B09" "\13" "PauseFilter" "\14" "B11" \ - "\15" "B12" "\16" "B13" "\17" "B17" "\20" "B18" \ - "\21" "B19" - /* * AMD Advanced Power Management * CPUID Fn8000_0007 %edx @@ -307,6 +392,24 @@ "\11" "TSC" "\12" "CPB" "\13" "EffFreq" "\14" "B11" \ "\15" "B12" +/* AMD Fn8000000a %edx features (SVM features) */ +#define CPUID_AMD_SVM_NP 0x00000001 +#define CPUID_AMD_SVM_LbrVirt 0x00000002 +#define CPUID_AMD_SVM_SVML 0x00000004 +#define CPUID_AMD_SVM_NRIPS 0x00000008 +#define CPUID_AMD_SVM_TSCRateCtrl 0x00000010 +#define CPUID_AMD_SVM_VMCBCleanBits 0x00000020 +#define CPUID_AMD_SVM_FlushByASID 0x00000040 +#define CPUID_AMD_SVM_DecodeAssist 0x00000080 +#define CPUID_AMD_SVM_PauseFilter 0x00000400 +#define CPUID_AMD_SVM_FLAGS "\20" \ + "\1" "NP" "\2" "LbrVirt" "\3" "SVML" "\4" "NRIPS" \ + "\5" "TSCRate" "\6" "VMCBCleanBits" \ + "\7" "FlushByASID" "\10" "DecodeAssist" \ + "\11" "B08" "\12" "B09" "\13" "PauseFilter" "\14" "B11" \ + "\15" "B12" "\16" "B13" "\17" "B17" "\20" "B18" \ + "\21" "B19" + /* * Centaur Extended Feature flags */ @@ -326,109 +429,6 @@ "\15" "RSA" /* - * CPUID "features" bits in Fn00000001 %ecx - */ - -#define CPUID2_SSE3 0x00000001 /* Streaming SIMD Extensions 3 */ -#define CPUID2_PCLMUL 0x00000002 /* PCLMULQDQ instructions */ -#define CPUID2_DTES64 0x00000004 /* 64-bit Debug Trace */ -#define CPUID2_MONITOR 0x00000008 /* MONITOR/MWAIT instructions */ -#define CPUID2_DS_CPL 0x00000010 /* CPL Qualified Debug Store */ -#define CPUID2_VMX 0x00000020 /* Virtual Machine Extensions */ -#define CPUID2_SMX 0x00000040 /* Safer Mode Extensions */ -#define CPUID2_EST 0x00000080 /* Enhanced SpeedStep Technology */ -#define CPUID2_TM2 0x00000100 /* Thermal Monitor 2 */ -#define CPUID2_SSSE3 0x00000200 /* Supplemental SSE3 */ -#define CPUID2_CID 0x00000400 /* Context ID */ -/* bit 11 unused 0x00000800 */ -#define CPUID2_FMA 0x00001000 /* has Fused Multiply Add */ -#define CPUID2_CX16 0x00002000 /* has CMPXCHG16B instruction */ -#define CPUID2_xTPR 0x00004000 /* Task Priority Messages disabled? */ -#define CPUID2_PDCM 0x00008000 /* Perf/Debug Capability MSR */ -/* bit 16 unused 0x00010000 */ -#define CPUID2_PCID 0x00020000 /* Process Context ID */ -#define CPUID2_DCA 0x00040000 /* Direct Cache Access */ -#define CPUID2_SSE41 0x00080000 /* Streaming SIMD Extensions 4.1 */ -#define CPUID2_SSE42 0x00100000 /* Streaming SIMD Extensions 4.2 */ -#define CPUID2_X2APIC 0x00200000 /* xAPIC Extensions */ -#define CPUID2_MOVBE 0x00400000 /* MOVBE (move after byteswap) */ -#define CPUID2_POPCNT 0x00800000 /* popcount instruction available */ -#define CPUID2_DEADLINE 0x01000000 /* APIC Timer supports TSC Deadline */ -#define CPUID2_AES 0x02000000 /* AES instructions */ -#define CPUID2_XSAVE 0x04000000 /* XSAVE instructions */ -#define CPUID2_OSXSAVE 0x08000000 /* XGETBV/XSETBV instructions */ -#define CPUID2_AVX 0x10000000 /* AVX instructions */ -#define CPUID2_F16C 0x20000000 /* half precision conversion */ -#define CPUID2_RDRAND 0x40000000 /* RDRAND (hardware random number) */ -#define CPUID2_RAZ 0x80000000 /* RAZ. Indicates guest state. */ - -#define CPUID2_FLAGS1 "\20" \ - "\1" "SSE3" "\2" "PCLMULQDQ" "\3" "DTES64" "\4" "MONITOR" \ - "\5" "DS-CPL" "\6" "VMX" "\7" "SMX" "\10" "EST" \ - "\11" "TM2" "\12" "SSSE3" "\13" "CID" "\14" "B11" \ - "\15" "FMA" "\16" "CX16" "\17" "xTPR" "\20" "PDCM" \ - "\21" "B16" "\22" "PCID" "\23" "DCA" "\24" "SSE41" \ - "\25" "SSE42" "\26" "X2APIC" "\27" "MOVBE" "\30" "POPCNT" \ - "\31" "DEADLINE" "\32" "AES" "\33" "XSAVE" "\34" "OSXSAVE" \ - "\35" "AVX" "\36" "F16C" "\37" "RDRAND" "\40" "RAZ" - -#define CPUID2FAMILY(cpuid) (((cpuid) >> 8) & 0xf) -#define CPUID2MODEL(cpuid) (((cpuid) >> 4) & 0xf) -#define CPUID2STEPPING(cpuid) ((cpuid) & 0xf) - -/* - * The Extended family bits should only be inspected when CPUID2FAMILY() - * returns 15. They are use to encode family value 16 to 270 (add 15). - * The Extended model hits are the high 4 bits of the model. - * They are only valid for family >= 15 or family 6 (intel, but all amd - * family 6 are documented to return zero bits for them). - */ -#define CPUID2EXTFAMILY(cpuid) (((cpuid) >> 20) & 0xff) -#define CPUID2EXTMODEL(cpuid) (((cpuid) >> 16) & 0xf) - -/* Blacklists of CPUID flags - used to mask certain features */ -#ifdef XEN -/* Not on Xen */ -#define CPUID_FEAT_BLACKLIST (CPUID_PGE|CPUID_PSE|CPUID_MTRR) -#else -#define CPUID_FEAT_BLACKLIST 0 -#endif /* XEN */ - -/* - * CPUID Processor extended state Enumeration Fn0000000d %eax - * - * Extended Control Register XCR0 - */ -#define XCR0_X87 0x00000001 /* x87 FPU/MMX state */ -#define XCR0_SSE 0x00000002 /* SSE state */ -#define XCR0_AVX 0x00000004 /* AVX state (ymmn registers) */ - -#define XCR0_FLAGS1 "\20" \ - "\1" "x87" "\2" "SSE" "\3" "AVX" "\4" "B03" - -/* - * CPUID Processor extended state Enumeration Fn0000000d - * - * %ecx == 0: supported features info: - * %edx:%eax bits valid for XCR0 - * %ebx Save area size for features enabled in XCR0 - * %ecx Maximim save area size for all cpu features - * - * %ecx == 1: Bit 0 => xsaveopt instruction avalaible (sandy bridge onwards) - * - * %ecx >= 2: Save area details for XCR0 bit n - * %eax: size of save area for this feature - * %ebx: offset of save area for this feature - * %ecx, %edx: reserved - * All of %eax, %ebx, %ecx and %edx zero for unsupported features. - */ - -#define CPUID_PES1_XSAVEOPT 0x00000001 /* xsaveopt instruction */ - -#define CPUID_PES1_FLAGS "\20" \ - "\1" "XSAVEOPT" - -/* * Model-specific registers for the i386 family */ #define MSR_P5_MC_ADDR 0x000 /* P5 only */