root/arch/x86/include/asm/cpuid/leaf_types.h
/* SPDX-License-Identifier: MIT */
/* Generator: x86-cpuid-db v3.1 */

/*
 * Auto-generated file.
 * Please submit all updates and bugfixes to https://x86-cpuid.org
 */

#ifndef _ASM_X86_CPUID_LEAF_TYPES
#define _ASM_X86_CPUID_LEAF_TYPES

#include <linux/types.h>

/*
 * Leaf 0x0
 * Maximum standard leaf + CPU vendor string
 */

struct leaf_0x0_0 {
        // eax
        u32     max_std_leaf                    : 32; // Highest standard CPUID leaf
        // ebx
        u32     cpu_vendorid_0                  : 32; // CPU vendor ID string bytes 0 - 3
        // ecx
        u32     cpu_vendorid_2                  : 32; // CPU vendor ID string bytes 8 - 11
        // edx
        u32     cpu_vendorid_1                  : 32; // CPU vendor ID string bytes 4 - 7
};

/*
 * Leaf 0x1
 * CPU FMS (Family/Model/Stepping) + standard feature flags
 */

struct leaf_0x1_0 {
        // eax
        u32     stepping                        :  4, // Stepping ID
                base_model                      :  4, // Base CPU model ID
                base_family_id                  :  4, // Base CPU family ID
                cpu_type                        :  2, // CPU type
                                                :  2, // Reserved
                ext_model                       :  4, // Extended CPU model ID
                ext_family                      :  8, // Extended CPU family ID
                                                :  4; // Reserved
        // ebx
        u32     brand_id                        :  8, // Brand index
                clflush_size                    :  8, // CLFLUSH instruction cache line size
                n_logical_cpu                   :  8, // Logical CPU count
                local_apic_id                   :  8; // Initial local APIC physical ID
        // ecx
        u32     sse3                            :  1, // Streaming SIMD Extensions 3 (SSE3)
                pclmulqdq                       :  1, // PCLMULQDQ instruction support
                dtes64                          :  1, // 64-bit DS save area
                monitor                         :  1, // MONITOR/MWAIT support
                dscpl                           :  1, // CPL Qualified Debug Store
                vmx                             :  1, // Virtual Machine Extensions
                smx                             :  1, // Safer Mode Extensions
                est                             :  1, // Enhanced Intel SpeedStep
                tm2                             :  1, // Thermal Monitor 2
                ssse3                           :  1, // Supplemental SSE3
                cntxt_id                        :  1, // L1 Context ID
                sdbg                            :  1, // Silicon Debug
                fma                             :  1, // FMA extensions using YMM state
                cx16                            :  1, // CMPXCHG16B instruction support
                xtpr_update                     :  1, // xTPR Update Control
                pdcm                            :  1, // Perfmon and Debug Capability
                                                :  1, // Reserved
                pcid                            :  1, // Process-context identifiers
                dca                             :  1, // Direct Cache Access
                sse4_1                          :  1, // SSE4.1
                sse4_2                          :  1, // SSE4.2
                x2apic                          :  1, // X2APIC support
                movbe                           :  1, // MOVBE instruction support
                popcnt                          :  1, // POPCNT instruction support
                tsc_deadline_timer              :  1, // APIC timer one-shot operation
                aes                             :  1, // AES instructions
                xsave                           :  1, // XSAVE (and related instructions) support
                osxsave                         :  1, // XSAVE (and related instructions) are enabled by OS
                avx                             :  1, // AVX instructions support
                f16c                            :  1, // Half-precision floating-point conversion support
                rdrand                          :  1, // RDRAND instruction support
                guest_status                    :  1; // System is running as guest; (para-)virtualized system
        // edx
        u32     fpu                             :  1, // Floating-Point Unit on-chip (x87)
                vme                             :  1, // Virtual-8086 Mode Extensions
                de                              :  1, // Debugging Extensions
                pse                             :  1, // Page Size Extension
                tsc                             :  1, // Time Stamp Counter
                msr                             :  1, // Model-Specific Registers (RDMSR and WRMSR support)
                pae                             :  1, // Physical Address Extensions
                mce                             :  1, // Machine Check Exception
                cx8                             :  1, // CMPXCHG8B instruction
                apic                            :  1, // APIC on-chip
                                                :  1, // Reserved
                sep                             :  1, // SYSENTER, SYSEXIT, and associated MSRs
                mtrr                            :  1, // Memory Type Range Registers
                pge                             :  1, // Page Global Extensions
                mca                             :  1, // Machine Check Architecture
                cmov                            :  1, // Conditional Move Instruction
                pat                             :  1, // Page Attribute Table
                pse36                           :  1, // Page Size Extension (36-bit)
                psn                             :  1, // Processor Serial Number
                clflush                         :  1, // CLFLUSH instruction
                                                :  1, // Reserved
                ds                              :  1, // Debug Store
                acpi                            :  1, // Thermal monitor and clock control
                mmx                             :  1, // MMX instructions
                fxsr                            :  1, // FXSAVE and FXRSTOR instructions
                sse                             :  1, // SSE instructions
                sse2                            :  1, // SSE2 instructions
                selfsnoop                       :  1, // Self Snoop
                htt                             :  1, // Hyper-threading
                tm                              :  1, // Thermal Monitor
                ia64                            :  1, // Legacy IA-64 (Itanium) support bit, now reserved
                pbe                             :  1; // Pending Break Enable
};

/*
 * Leaf 0x2
 * Intel cache and TLB information one-byte descriptors
 */

struct leaf_0x2_0 {
        // eax
        u32     iteration_count                 :  8, // Number of times this leaf must be queried
                desc1                           :  8, // Descriptor #1
                desc2                           :  8, // Descriptor #2
                desc3                           :  7, // Descriptor #3
                eax_invalid                     :  1; // Descriptors 1-3 are invalid if set
        // ebx
        u32     desc4                           :  8, // Descriptor #4
                desc5                           :  8, // Descriptor #5
                desc6                           :  8, // Descriptor #6
                desc7                           :  7, // Descriptor #7
                ebx_invalid                     :  1; // Descriptors 4-7 are invalid if set
        // ecx
        u32     desc8                           :  8, // Descriptor #8
                desc9                           :  8, // Descriptor #9
                desc10                          :  8, // Descriptor #10
                desc11                          :  7, // Descriptor #11
                ecx_invalid                     :  1; // Descriptors 8-11 are invalid if set
        // edx
        u32     desc12                          :  8, // Descriptor #12
                desc13                          :  8, // Descriptor #13
                desc14                          :  8, // Descriptor #14
                desc15                          :  7, // Descriptor #15
                edx_invalid                     :  1; // Descriptors 12-15 are invalid if set
};

/*
 * Leaf 0x4
 * Intel deterministic cache parameters
 */

struct leaf_0x4_n {
        // eax
        u32     cache_type                      :  5, // Cache type field
                cache_level                     :  3, // Cache level (1-based)
                cache_self_init                 :  1, // Self-initializing cache level
                fully_associative               :  1, // Fully-associative cache
                                                :  4, // Reserved
                num_threads_sharing             : 12, // Number logical CPUs sharing this cache
                num_cores_on_die                :  6; // Number of cores in the physical package
        // ebx
        u32     cache_linesize                  : 12, // System coherency line size (0-based)
                cache_npartitions               : 10, // Physical line partitions (0-based)
                cache_nways                     : 10; // Ways of associativity (0-based)
        // ecx
        u32     cache_nsets                     : 31, // Cache number of sets (0-based)
                                                :  1; // Reserved
        // edx
        u32     wbinvd_rll_no_guarantee         :  1, // WBINVD/INVD not guaranteed for Remote Lower-Level caches
                ll_inclusive                    :  1, // Cache is inclusive of Lower-Level caches
                complex_indexing                :  1, // Not a direct-mapped cache (complex function)
                                                : 29; // Reserved
};

#define LEAF_0x4_SUBLEAF_N_FIRST                0
#define LEAF_0x4_SUBLEAF_N_LAST                 31

/*
 * Leaf 0x5
 * MONITOR/MWAIT instructions
 */

struct leaf_0x5_0 {
        // eax
        u32     min_mon_size                    : 16, // Smallest monitor-line size, in bytes
                                                : 16; // Reserved
        // ebx
        u32     max_mon_size                    : 16, // Largest monitor-line size, in bytes
                                                : 16; // Reserved
        // ecx
        u32     mwait_ext                       :  1, // MONITOR/MWAIT extensions
                mwait_irq_break                 :  1, // Interrupts as a break event for MWAIT
                                                : 30; // Reserved
        // edx
        u32     n_c0_substates                  :  4, // Number of C0 sub C-states
                n_c1_substates                  :  4, // Number of C1 sub C-states
                n_c2_substates                  :  4, // Number of C2 sub C-states
                n_c3_substates                  :  4, // Number of C3 sub C-states
                n_c4_substates                  :  4, // Number of C4 sub C-states
                n_c5_substates                  :  4, // Number of C5 sub C-states
                n_c6_substates                  :  4, // Number of C6 sub C-states
                n_c7_substates                  :  4; // Number of C7 sub C-states
};

/*
 * Leaf 0x6
 * Thermal and power management
 */

struct leaf_0x6_0 {
        // eax
        u32     digital_temp                    :  1, // Digital temperature sensor
                turbo_boost                     :  1, // Intel Turbo Boost
                lapic_timer_always_on           :  1, // Always-Running APIC Timer (not affected by p-state)
                                                :  1, // Reserved
                power_limit_event               :  1, // Power Limit Notification (PLN) event
                ecmd                            :  1, // Clock modulation duty cycle extension
                package_thermal                 :  1, // Package thermal management
                hwp_base_regs                   :  1, // HWP (Hardware P-states) base registers
                hwp_notify                      :  1, // HWP notification (IA32_HWP_INTERRUPT MSR)
                hwp_activity_window             :  1, // HWP activity window (IA32_HWP_REQUEST[bits 41:32])
                hwp_energy_perf_pr              :  1, // HWP Energy Performance Preference
                hwp_package_req                 :  1, // HWP Package Level Request
                                                :  1, // Reserved
                hdc_base_regs                   :  1, // HDC base registers
                turbo_boost_3_0                 :  1, // Intel Turbo Boost Max 3.0
                hwp_capabilities                :  1, // HWP Highest Performance change
                hwp_peci_override               :  1, // HWP PECI override
                hwp_flexible                    :  1, // Flexible HWP
                hwp_fast                        :  1, // IA32_HWP_REQUEST MSR fast access mode
                hw_feedback                     :  1, // HW_FEEDBACK MSRs
                hwp_ignore_idle                 :  1, // Ignoring idle logical CPU HWP request is supported
                                                :  1, // Reserved
                hwp_ctl                         :  1, // IA32_HWP_CTL MSR
                thread_director                 :  1, // Intel thread director
                therm_interrupt_bit25           :  1, // IA32_THERM_INTERRUPT MSR bit 25
                                                :  7; // Reserved
        // ebx
        u32     n_therm_thresholds              :  4, // Digital thermometer thresholds
                                                : 28; // Reserved
        // ecx
        u32     aperf_mperf                     :  1, // MPERF/APERF MSRs (effective frequency interface)
                                                :  2, // Reserved
                energy_perf_bias                :  1, // IA32_ENERGY_PERF_BIAS MSR
                                                :  4, // Reserved
                hw_feedback_nclasses            :  8, // Number of Intel Thread Director classes
                                                : 16; // Reserved
        // edx
        u32     perfcap_reporting               :  1, // Performance capability reporting
                encap_reporting                 :  1, // Energy efficiency capability reporting
                                                :  6, // Reserved
                feedback_sz                     :  4, // Feedback interface structure size, in 4K pages
                                                :  4, // Reserved
                this_lcpu_hwfdbk_idx            : 16; // This logical CPU hardware feedback interface index
};

/*
 * Leaf 0x7
 * Extended CPU features
 */

struct leaf_0x7_0 {
        // eax
        u32     leaf7_n_subleaves               : 32; // Number of leaf 0x7 subleaves
        // ebx
        u32     fsgsbase                        :  1, // FSBASE/GSBASE read/write
                tsc_adjust                      :  1, // IA32_TSC_ADJUST MSR
                sgx                             :  1, // Intel SGX (Software Guard Extensions)
                bmi1                            :  1, // Bit manipulation extensions group 1
                hle                             :  1, // Hardware Lock Elision
                avx2                            :  1, // AVX2 instruction set
                fdp_excptn_only                 :  1, // FPU Data Pointer updated only on x87 exceptions
                smep                            :  1, // Supervisor Mode Execution Protection
                bmi2                            :  1, // Bit manipulation extensions group 2
                erms                            :  1, // Enhanced REP MOVSB/STOSB
                invpcid                         :  1, // INVPCID instruction (Invalidate Processor Context ID)
                rtm                             :  1, // Intel restricted transactional memory
                pqm                             :  1, // Intel RDT-CMT / AMD Platform-QoS cache monitoring
                zero_fcs_fds                    :  1, // Deprecated FPU CS/DS (stored as zero)
                mpx                             :  1, // Intel memory protection extensions
                rdt_a                           :  1, // Intel RDT / AMD Platform-QoS Enforcement
                avx512f                         :  1, // AVX-512 foundation instructions
                avx512dq                        :  1, // AVX-512 double/quadword instructions
                rdseed                          :  1, // RDSEED instruction
                adx                             :  1, // ADCX/ADOX instructions
                smap                            :  1, // Supervisor mode access prevention
                avx512ifma                      :  1, // AVX-512 integer fused multiply add
                                                :  1, // Reserved
                clflushopt                      :  1, // CLFLUSHOPT instruction
                clwb                            :  1, // CLWB instruction
                intel_pt                        :  1, // Intel processor trace
                avx512pf                        :  1, // AVX-512 prefetch instructions
                avx512er                        :  1, // AVX-512 exponent/reciprocal instructions
                avx512cd                        :  1, // AVX-512 conflict detection instructions
                sha                             :  1, // SHA/SHA256 instructions
                avx512bw                        :  1, // AVX-512 byte/word instructions
                avx512vl                        :  1; // AVX-512 VL (128/256 vector length) extensions
        // ecx
        u32     prefetchwt1                     :  1, // PREFETCHWT1 (Intel Xeon Phi only)
                avx512vbmi                      :  1, // AVX-512 Vector byte manipulation instructions
                umip                            :  1, // User mode instruction protection
                pku                             :  1, // Protection keys for user-space
                ospke                           :  1, // OS protection keys enable
                waitpkg                         :  1, // WAITPKG instructions
                avx512_vbmi2                    :  1, // AVX-512 vector byte manipulation instructions group 2
                cet_ss                          :  1, // CET shadow stack features
                gfni                            :  1, // Galois field new instructions
                vaes                            :  1, // Vector AES instructions
                vpclmulqdq                      :  1, // VPCLMULQDQ 256-bit instruction
                avx512_vnni                     :  1, // Vector neural network instructions
                avx512_bitalg                   :  1, // AVX-512 bitwise algorithms
                tme                             :  1, // Intel total memory encryption
                avx512_vpopcntdq                :  1, // AVX-512: POPCNT for vectors of DWORD/QWORD
                                                :  1, // Reserved
                la57                            :  1, // 57-bit linear addresses (five-level paging)
                mawau_val_lm                    :  5, // BNDLDX/BNDSTX MAWAU value in 64-bit mode
                rdpid                           :  1, // RDPID instruction
                key_locker                      :  1, // Intel key locker
                bus_lock_detect                 :  1, // OS bus-lock detection
                cldemote                        :  1, // CLDEMOTE instruction
                                                :  1, // Reserved
                movdiri                         :  1, // MOVDIRI instruction
                movdir64b                       :  1, // MOVDIR64B instruction
                enqcmd                          :  1, // Enqueue stores (ENQCMD{,S})
                sgx_lc                          :  1, // Intel SGX launch configuration
                pks                             :  1; // Protection keys for supervisor-mode pages
        // edx
        u32                                     :  1, // Reserved
                sgx_keys                        :  1, // Intel SGX attestation services
                avx512_4vnniw                   :  1, // AVX-512 neural network instructions
                avx512_4fmaps                   :  1, // AVX-512 multiply accumulation single precision
                fsrm                            :  1, // Fast short REP MOVSB
                uintr                           :  1, // User interrupts
                                                :  2, // Reserved
                avx512_vp2intersect             :  1, // VP2INTERSECT{D,Q} instructions
                srbds_ctrl                      :  1, // SRBDS mitigation MSR
                md_clear                        :  1, // VERW MD_CLEAR microcode
                rtm_always_abort                :  1, // XBEGIN (RTM transaction) always aborts
                                                :  1, // Reserved
                tsx_force_abort                 :  1, // MSR TSX_FORCE_ABORT, RTM_ABORT bit
                serialize                       :  1, // SERIALIZE instruction
                hybrid_cpu                      :  1, // The CPU is identified as a 'hybrid part'
                tsxldtrk                        :  1, // TSX suspend/resume load address tracking
                                                :  1, // Reserved
                pconfig                         :  1, // PCONFIG instruction
                arch_lbr                        :  1, // Intel architectural LBRs
                cet_ibt                         :  1, // CET indirect branch tracking
                                                :  1, // Reserved
                amx_bf16                        :  1, // AMX-BF16: tile bfloat16
                avx512_fp16                     :  1, // AVX-512 FP16 instructions
                amx_tile                        :  1, // AMX-TILE: tile architecture
                amx_int8                        :  1, // AMX-INT8: tile 8-bit integer
                spec_ctrl                       :  1, // Speculation Control (IBRS/IBPB: indirect branch restrictions)
                intel_stibp                     :  1, // Single thread indirect branch predictors
                flush_l1d                       :  1, // FLUSH L1D cache: IA32_FLUSH_CMD MSR
                arch_capabilities               :  1, // Intel IA32_ARCH_CAPABILITIES MSR
                core_capabilities               :  1, // IA32_CORE_CAPABILITIES MSR
                spec_ctrl_ssbd                  :  1; // Speculative store bypass disable
};

struct leaf_0x7_1 {
        // eax
        u32                                     :  4, // Reserved
                avx_vnni                        :  1, // AVX-VNNI instructions
                avx512_bf16                     :  1, // AVX-512 bfloat16 instructions
                lass                            :  1, // Linear address space separation
                cmpccxadd                       :  1, // CMPccXADD instructions
                arch_perfmon_ext                :  1, // ArchPerfmonExt: leaf 0x23
                                                :  1, // Reserved
                fzrm                            :  1, // Fast zero-length REP MOVSB
                fsrs                            :  1, // Fast short REP STOSB
                fsrc                            :  1, // Fast Short REP CMPSB/SCASB
                                                :  4, // Reserved
                fred                            :  1, // FRED: Flexible return and event delivery transitions
                lkgs                            :  1, // LKGS: Load 'kernel' (userspace) GS
                wrmsrns                         :  1, // WRMSRNS instruction (WRMSR-non-serializing)
                nmi_src                         :  1, // NMI-source reporting with FRED event data
                amx_fp16                        :  1, // AMX-FP16: FP16 tile operations
                hreset                          :  1, // HRESET (Thread director history reset)
                avx_ifma                        :  1, // Integer fused multiply add
                                                :  2, // Reserved
                lam                             :  1, // Linear address masking
                rd_wr_msrlist                   :  1, // RDMSRLIST/WRMSRLIST instructions
                                                :  4; // Reserved
        // ebx
        u32     intel_ppin                      :  1, // Protected processor inventory number (PPIN{,_CTL} MSRs)
                                                : 31; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     :  4, // Reserved
                avx_vnni_int8                   :  1, // AVX-VNNI-INT8 instructions
                avx_ne_convert                  :  1, // AVX-NE-CONVERT instructions
                                                :  2, // Reserved
                amx_complex                     :  1, // AMX-COMPLEX instructions (starting from Granite Rapids)
                                                :  5, // Reserved
                prefetchit_0_1                  :  1, // PREFETCHIT0/1 instructions
                                                :  3, // Reserved
                cet_sss                         :  1, // CET supervisor shadow stacks safe to use
                                                : 13; // Reserved
};

struct leaf_0x7_2 {
        // eax
        u32                                     : 32; // Reserved
        // ebx
        u32                                     : 32; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32     intel_psfd                      :  1, // Intel predictive store forward disable
                ipred_ctrl                      :  1, // MSR bits IA32_SPEC_CTRL.IPRED_DIS_{U,S}
                rrsba_ctrl                      :  1, // MSR bits IA32_SPEC_CTRL.RRSBA_DIS_{U,S}
                ddp_ctrl                        :  1, // MSR bit IA32_SPEC_CTRL.DDPD_U
                bhi_ctrl                        :  1, // MSR bit IA32_SPEC_CTRL.BHI_DIS_S
                mcdt_no                         :  1, // MCDT mitigation not needed
                uclock_disable                  :  1, // UC-lock disable
                                                : 25; // Reserved
};

/*
 * Leaf 0x9
 * Intel DCA (Direct Cache Access)
 */

struct leaf_0x9_0 {
        // eax
        u32     dca_enabled_in_bios             :  1, // DCA is enabled in BIOS
                                                : 31; // Reserved
        // ebx
        u32                                     : 32; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0xa
 * Intel PMU (Performance Monitoring Unit)
 */

struct leaf_0xa_0 {
        // eax
        u32     pmu_version                     :  8, // Performance monitoring unit version ID
                num_counters_gp                 :  8, // Number of general-purpose PMU counters per logical CPU
                bit_width_gp                    :  8, // Bitwidth of PMU general-purpose counters
                events_mask_len                 :  8; // Length of CPUID(0xa).EBX bit vector
        // ebx
        u32     no_core_cycle                   :  1, // Core cycle event not available
                no_instruction_retired          :  1, // Instruction retired event not available
                no_reference_cycles             :  1, // Reference cycles event not available
                no_llc_reference                :  1, // LLC-reference event not available
                no_llc_misses                   :  1, // LLC-misses event not available
                no_br_insn_retired              :  1, // Branch instruction retired event not available
                no_br_misses_retired            :  1, // Branch mispredict retired event not available
                no_topdown_slots                :  1, // Topdown slots event not available
                no_backend_bound                :  1, // Topdown backend bound not available
                no_bad_speculation              :  1, // Topdown bad speculation not available
                no_frontend_bound               :  1, // Topdown frontend bound not available
                no_retiring                     :  1, // Topdown retiring not available
                no_lbr_inserts                  :  1, // LBR inserts not available
                                                : 19; // Reserved
        // ecx
        u32     pmu_fcounters_bitmap            : 32; // Fixed-function PMU counters support bitmap
        // edx
        u32     num_counters_fixed              :  5, // Number of fixed PMU counters
                bitwidth_fixed                  :  8, // Bitwidth of PMU fixed counters
                                                :  2, // Reserved
                anythread_deprecation           :  1, // AnyThread mode deprecation
                                                : 16; // Reserved
};

/*
 * Leaf 0xb
 * CPU extended topology v1
 */

struct leaf_0xb_n {
        // eax
        u32     x2apic_id_shift                 :  5, // Bit width of this level (previous levels inclusive)
                                                : 27; // Reserved
        // ebx
        u32     domain_lcpus_count              : 16, // Logical CPUs count across all instances of this domain
                                                : 16; // Reserved
        // ecx
        u32     domain_nr                       :  8, // This domain level (subleaf ID)
                domain_type                     :  8, // This domain type
                                                : 16; // Reserved
        // edx
        u32     x2apic_id                       : 32; // x2APIC ID of current logical CPU
};

#define LEAF_0xb_SUBLEAF_N_FIRST                0
#define LEAF_0xb_SUBLEAF_N_LAST                 1

/*
 * Leaf 0xd
 * CPU extended state
 */

struct leaf_0xd_0 {
        // eax
        u32     xcr0_x87                        :  1, // XCR0.X87
                xcr0_sse                        :  1, // XCR0.SSE
                xcr0_avx                        :  1, // XCR0.AVX
                xcr0_mpx_bndregs                :  1, // XCR0.BNDREGS: MPX BND0-BND3 registers
                xcr0_mpx_bndcsr                 :  1, // XCR0.BNDCSR: MPX BNDCFGU/BNDSTATUS registers
                xcr0_avx512_opmask              :  1, // XCR0.OPMASK: AVX-512 k0-k7 registers
                xcr0_avx512_zmm_hi256           :  1, // XCR0.ZMM_Hi256: AVX-512 ZMM0->ZMM7/15 registers
                xcr0_avx512_hi16_zmm            :  1, // XCR0.HI16_ZMM: AVX-512 ZMM16->ZMM31 registers
                                                :  1, // Reserved
                xcr0_pkru                       :  1, // XCR0.PKRU: XSAVE PKRU registers
                                                :  1, // Reserved
                xcr0_cet_u                      :  1, // XCR0.CET_U: CET user state
                xcr0_cet_s                      :  1, // XCR0.CET_S: CET supervisor state
                                                :  4, // Reserved
                xcr0_tileconfig                 :  1, // XCR0.TILECONFIG: AMX can manage TILECONFIG
                xcr0_tiledata                   :  1, // XCR0.TILEDATA: AMX can manage TILEDATA
                                                : 13; // Reserved
        // ebx
        u32     xsave_sz_xcr0                   : 32; // XSAVE/XRSTOR area byte size, for XCR0 enabled features
        // ecx
        u32     xsave_sz_max                    : 32; // XSAVE/XRSTOR area max byte size, all CPU features
        // edx
        u32                                     : 30, // Reserved
                xcr0_lwp                        :  1, // AMD XCR0.LWP: Light-weight Profiling
                                                :  1; // Reserved
};

struct leaf_0xd_1 {
        // eax
        u32     xsaveopt                        :  1, // XSAVEOPT instruction
                xsavec                          :  1, // XSAVEC instruction
                xgetbv1                         :  1, // XGETBV instruction with ECX = 1
                xsaves                          :  1, // XSAVES/XRSTORS instructions (and XSS MSR)
                xfd                             :  1, // Extended feature disable
                                                : 27; // Reserved
        // ebx
        u32     xsave_sz_xcr0_xss               : 32; // XSAVES/XSAVEC area byte size, for XCR0|XSS enabled features
        // ecx
        u32                                     :  8, // Reserved
                xss_pt                          :  1, // PT state
                                                :  1, // Reserved
                xss_pasid                       :  1, // PASID state
                xss_cet_u                       :  1, // CET user state
                xss_cet_s                       :  1, // CET supervisor state
                xss_hdc                         :  1, // HDC state
                xss_uintr                       :  1, // UINTR state
                xss_lbr                         :  1, // LBR state
                xss_hwp                         :  1, // HWP state
                                                : 15; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

struct leaf_0xd_n {
        // eax
        u32     xsave_sz                        : 32; // Subleaf-N feature save area size, in bytes
        // ebx
        u32     xsave_offset                    : 32; // Subleaf-N feature save area offset, in bytes
        // ecx
        u32     is_xss_bit                      :  1, // Subleaf N describes an XSS bit (otherwise XCR0)
                compacted_xsave_64byte_aligned  :  1, // When compacted, subleaf-N XSAVE area is 64-byte aligned
                                                : 30; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

#define LEAF_0xd_SUBLEAF_N_FIRST                2
#define LEAF_0xd_SUBLEAF_N_LAST                 63

/*
 * Leaf 0xf
 * Intel RDT / AMD PQoS resource monitoring
 */

struct leaf_0xf_0 {
        // eax
        u32                                     : 32; // Reserved
        // ebx
        u32     core_rmid_max                   : 32; // RMID max within this core (0-based)
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     :  1, // Reserved
                llc_qos_mon                     :  1, // LLC QoS-monitoring
                                                : 30; // Reserved
};

struct leaf_0xf_1 {
        // eax
        u32     l3c_qm_bitwidth                 :  8, // L3 QoS-monitoring counter bitwidth (24-based)
                l3c_qm_overflow_bit             :  1, // QM_CTR MSR bit 61 is an overflow bit
                io_rdt_cmt                      :  1, // non-CPU agent supporting Intel RDT CMT present
                io_rdt_mbm                      :  1, // non-CPU agent supporting Intel RDT MBM present
                                                : 21; // Reserved
        // ebx
        u32     l3c_qm_conver_factor            : 32; // QM_CTR MSR conversion factor to bytes
        // ecx
        u32     l3c_qm_rmid_max                 : 32; // L3 QoS-monitoring max RMID
        // edx
        u32     l3c_qm_occupancy                :  1, // L3 QoS occupancy monitoring
                l3c_qm_mbm_total                :  1, // L3 QoS total bandwidth monitoring
                l3c_qm_mbm_local                :  1, // L3 QoS local bandwidth monitoring
                                                : 29; // Reserved
};

/*
 * Leaf 0x10
 * Intel RDT / AMD PQoS allocation
 */

struct leaf_0x10_0 {
        // eax
        u32                                     : 32; // Reserved
        // ebx
        u32                                     :  1, // Reserved
                cat_l3                          :  1, // L3 Cache Allocation Technology
                cat_l2                          :  1, // L2 Cache Allocation Technology
                mba                             :  1, // Memory Bandwidth Allocation
                                                : 28; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

struct leaf_0x10_n {
        // eax
        u32     cat_cbm_len                     :  5, // L3/L2_CAT capacity bitmask length, minus-one notation
                                                : 27; // Reserved
        // ebx
        u32     cat_units_bitmap                : 32; // L3/L2_CAT allocation units bitmap
        // ecx
        u32                                     :  1, // Reserved
                l3_cat_cos_infreq_updates       :  1, // L3_CAT COS updates should be infrequent
                cat_cdp_supported               :  1, // L3/L2_CAT Code and Data Prioritization
                cat_sparse_1s                   :  1, // L3/L2_CAT non-contiguous 1s value
                                                : 28; // Reserved
        // edx
        u32     cat_cos_max                     : 16, // L3/L2_CAT max Class of Service
                                                : 16; // Reserved
};

#define LEAF_0x10_SUBLEAF_N_FIRST               1
#define LEAF_0x10_SUBLEAF_N_LAST                2

struct leaf_0x10_3 {
        // eax
        u32     mba_max_delay                   : 12, // Max MBA throttling value; minus-one notation
                                                : 20; // Reserved
        // ebx
        u32                                     : 32; // Reserved
        // ecx
        u32     mba_per_thread                  :  1, // Per-thread MBA controls
                                                :  1, // Reserved
                mba_delay_linear                :  1, // Delay values are linear
                                                : 29; // Reserved
        // edx
        u32     mba_cos_max                     : 16, // MBA max Class of Service
                                                : 16; // Reserved
};

/*
 * Leaf 0x12
 * Intel SGX (Software Guard Extensions)
 */

struct leaf_0x12_0 {
        // eax
        u32     sgx1                            :  1, // SGX1 leaf functions
                sgx2                            :  1, // SGX2 leaf functions
                                                :  3, // Reserved
                enclv_leaves                    :  1, // ENCLV leaves
                encls_leaves                    :  1, // ENCLS leaves
                enclu_everifyreport2            :  1, // ENCLU leaf EVERIFYREPORT2
                                                :  2, // Reserved
                encls_eupdatesvn                :  1, // ENCLS leaf EUPDATESVN
                enclu_edeccssa                  :  1, // ENCLU leaf EDECCSSA
                                                : 20; // Reserved
        // ebx
        u32     miscselect_exinfo               :  1, // SSA.MISC frame: Enclave #PF and #GP reporting
                miscselect_cpinfo               :  1, // SSA.MISC frame: Enclave #CP reporting
                                                : 30; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32     max_enclave_sz_not64            :  8, // Maximum enclave size in non-64-bit mode (log2)
                max_enclave_sz_64               :  8, // Maximum enclave size in 64-bit mode (log2)
                                                : 16; // Reserved
};

struct leaf_0x12_1 {
        // eax
        u32     secs_attr_init                  :  1, // Enclave initialized by EINIT
                secs_attr_debug                 :  1, // Enclave permits debugger read/write
                secs_attr_mode64bit             :  1, // Enclave runs in 64-bit mode
                                                :  1, // Reserved
                secs_attr_provisionkey          :  1, // Provisioning key
                secs_attr_einittoken_key        :  1, // EINIT token key
                secs_attr_cet                   :  1, // CET attributes
                secs_attr_kss                   :  1, // Key Separation and Sharing
                                                :  2, // Reserved
                secs_attr_aexnotify             :  1, // Enclave threads: AEX notifications
                                                : 21; // Reserved
        // ebx
        u32                                     : 32; // Reserved
        // ecx
        u32     xfrm_x87                        :  1, // Enclave XFRM.X87
                xfrm_sse                        :  1, // Enclave XFRM.SSE
                xfrm_avx                        :  1, // Enclave XFRM.AVX
                xfrm_mpx_bndregs                :  1, // Enclave XFRM.BNDREGS (MPX BND0-BND3 registers)
                xfrm_mpx_bndcsr                 :  1, // Enclave XFRM.BNDCSR (MPX BNDCFGU/BNDSTATUS registers)
                xfrm_avx512_opmask              :  1, // Enclave XFRM.OPMASK (AVX-512 k0-k7 registers)
                xfrm_avx512_zmm_hi256           :  1, // Enclave XFRM.ZMM_Hi256 (AVX-512 ZMM0->ZMM7/15 registers)
                xfrm_avx512_hi16_zmm            :  1, // Enclave XFRM.HI16_ZMM (AVX-512 ZMM16->ZMM31 registers)
                                                :  1, // Reserved
                xfrm_pkru                       :  1, // Enclave XFRM.PKRU (XSAVE PKRU registers)
                                                :  7, // Reserved
                xfrm_tileconfig                 :  1, // Enclave XFRM.TILECONFIG (AMX can manage TILECONFIG)
                xfrm_tiledata                   :  1, // Enclave XFRM.TILEDATA (AMX can manage TILEDATA)
                                                : 13; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

struct leaf_0x12_n {
        // eax
        u32     subleaf_type                    :  4, // Subleaf type
                                                :  8, // Reserved
                epc_sec_base_addr_0             : 20; // EPC section base address, bits[12:31]
        // ebx
        u32     epc_sec_base_addr_1             : 20, // EPC section base address, bits[32:51]
                                                : 12; // Reserved
        // ecx
        u32     epc_sec_type                    :  4, // EPC section type / property encoding
                                                :  8, // Reserved
                epc_sec_size_0                  : 20; // EPC section size, bits[12:31]
        // edx
        u32     epc_sec_size_1                  : 20, // EPC section size, bits[32:51]
                                                : 12; // Reserved
};

#define LEAF_0x12_SUBLEAF_N_FIRST               2
#define LEAF_0x12_SUBLEAF_N_LAST                31

/*
 * Leaf 0x14
 * Intel Processor Trace
 */

struct leaf_0x14_0 {
        // eax
        u32     pt_max_subleaf                  : 32; // Maximum leaf 0x14 subleaf
        // ebx
        u32     cr3_filtering                   :  1, // IA32_RTIT_CR3_MATCH is accessible
                psb_cyc                         :  1, // Configurable PSB and cycle-accurate mode
                ip_filtering                    :  1, // IP/TraceStop filtering; Warm-reset PT MSRs preservation
                mtc_timing                      :  1, // MTC timing packet; COFI-based packets suppression
                ptwrite                         :  1, // PTWRITE instruction
                power_event_trace               :  1, // Power Event Trace
                psb_pmi_preserve                :  1, // PSB and PMI preservation
                event_trace                     :  1, // Event Trace packet generation
                tnt_disable                     :  1, // TNT packet generation disable
                                                : 23; // Reserved
        // ecx
        u32     topa_output                     :  1, // ToPA output scheme
                topa_multiple_entries           :  1, // ToPA tables can hold multiple entries
                single_range_output             :  1, // Single-range output
                trace_transport_output          :  1, // Trace Transport subsystem output
                                                : 27, // Reserved
                ip_payloads_lip                 :  1; // IP payloads have LIP values (CS base included)
        // edx
        u32                                     : 32; // Reserved
};

struct leaf_0x14_1 {
        // eax
        u32     num_address_ranges              :  3, // Number of configurable address ranges
                                                : 13, // Reserved
                mtc_periods_bmp                 : 16; // MTC period encodings bitmap
        // ebx
        u32     cycle_thresholds_bmp            : 16, // Cycle Threshold encodings bitmap
                psb_periods_bmp                 : 16; // Configurable PSB frequency encodings bitmap
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x15
 * Intel TSC (Time Stamp Counter)
 */

struct leaf_0x15_0 {
        // eax
        u32     tsc_denominator                 : 32; // Denominator of the TSC/'core crystal clock' ratio
        // ebx
        u32     tsc_numerator                   : 32; // Numerator of the TSC/'core crystal clock' ratio
        // ecx
        u32     cpu_crystal_hz                  : 32; // Core crystal clock nominal frequency, in Hz
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x16
 * Intel processor frequency
 */

struct leaf_0x16_0 {
        // eax
        u32     cpu_base_mhz                    : 16, // Processor base frequency, in MHz
                                                : 16; // Reserved
        // ebx
        u32     cpu_max_mhz                     : 16, // Processor max frequency, in MHz
                                                : 16; // Reserved
        // ecx
        u32     bus_mhz                         : 16, // Bus reference frequency, in MHz
                                                : 16; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x17
 * Intel SoC vendor attributes
 */

struct leaf_0x17_0 {
        // eax
        u32     soc_max_subleaf                 : 32; // Maximum leaf 0x17 subleaf
        // ebx
        u32     soc_vendor_id                   : 16, // SoC vendor ID
                is_vendor_scheme                :  1, // Assigned by industry enumeration scheme (not Intel)
                                                : 15; // Reserved
        // ecx
        u32     soc_proj_id                     : 32; // SoC project ID, assigned by vendor
        // edx
        u32     soc_stepping_id                 : 32; // SoC project stepping ID, assigned by vendor
};

struct leaf_0x17_n {
        // eax
        u32     vendor_brand_a                  : 32; // Vendor Brand ID string, bytes subleaf_nr * (0 -> 3)
        // ebx
        u32     vendor_brand_b                  : 32; // Vendor Brand ID string, bytes subleaf_nr * (4 -> 7)
        // ecx
        u32     vendor_brand_c                  : 32; // Vendor Brand ID string, bytes subleaf_nr * (8 -> 11)
        // edx
        u32     vendor_brand_d                  : 32; // Vendor Brand ID string, bytes subleaf_nr * (12 -> 15)
};

#define LEAF_0x17_SUBLEAF_N_FIRST               1
#define LEAF_0x17_SUBLEAF_N_LAST                3

/*
 * Leaf 0x18
 * Intel deterministic address translation (TLB) parameters
 */

struct leaf_0x18_n {
        // eax
        u32     tlb_max_subleaf                 : 32; // Maximum leaf 0x18 subleaf
        // ebx
        u32     tlb_4k_page                     :  1, // TLB supports 4KB-page entries
                tlb_2m_page                     :  1, // TLB supports 2MB-page entries
                tlb_4m_page                     :  1, // TLB supports 4MB-page entries
                tlb_1g_page                     :  1, // TLB supports 1GB-page entries
                                                :  4, // Reserved
                hard_partitioning               :  3, // Partitioning between logical CPUs
                                                :  5, // Reserved
                n_way_associative               : 16; // Ways of associativity
        // ecx
        u32     n_sets                          : 32; // Number of sets
        // edx
        u32     tlb_type                        :  5, // Translation cache type (TLB type)
                tlb_cache_level                 :  3, // Translation cache level (1-based)
                is_fully_associative            :  1, // Fully-associative
                                                :  5, // Reserved
                tlb_max_addressable_ids         : 12, // Max number of addressable IDs - 1
                                                :  6; // Reserved
};

#define LEAF_0x18_SUBLEAF_N_FIRST               0
#define LEAF_0x18_SUBLEAF_N_LAST                31

/*
 * Leaf 0x19
 * Intel key locker
 */

struct leaf_0x19_0 {
        // eax
        u32     kl_cpl0_only                    :  1, // CPL0-only key locker restriction
                kl_no_encrypt                   :  1, // No-encrypt key locker restriction
                kl_no_decrypt                   :  1, // No-decrypt key locker restriction
                                                : 29; // Reserved
        // ebx
        u32     aes_keylocker                   :  1, // AES key locker instructions
                                                :  1, // Reserved
                aes_keylocker_wide              :  1, // AES wide key locker instructions
                                                :  1, // Reserved
                kl_msr_iwkey                    :  1, // Key locker MSRs and IWKEY backups
                                                : 27; // Reserved
        // ecx
        u32     loadiwkey_no_backup             :  1, // LOADIWKEY NoBackup parameter
                iwkey_rand                      :  1, // IWKEY randomization
                                                : 30; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x1a
 * Intel hybrid CPUs identification (e.g. Atom, Core)
 */

struct leaf_0x1a_0 {
        // eax
        u32     core_native_model               : 24, // This core's native model ID
                core_type                       :  8; // This core's type
        // ebx
        u32                                     : 32; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x1b
 * Intel PCONFIG (Platform configuration)
 */

struct leaf_0x1b_n {
        // eax
        u32     pconfig_subleaf_type            : 12, // CPUID 0x1b subleaf type
                                                : 20; // Reserved
        // ebx
        u32     pconfig_target_id_x             : 32; // A supported PCONFIG target ID
        // ecx
        u32     pconfig_target_id_y             : 32; // A supported PCONFIG target ID
        // edx
        u32     pconfig_target_id_z             : 32; // A supported PCONFIG target ID
};

#define LEAF_0x1b_SUBLEAF_N_FIRST               0
#define LEAF_0x1b_SUBLEAF_N_LAST                31

/*
 * Leaf 0x1c
 * Intel LBR (Last Branch Record)
 */

struct leaf_0x1c_0 {
        // eax
        u32     lbr_depth_mask                  :  8, // Max LBR stack depth bitmask
                                                : 22, // Reserved
                lbr_deep_c_reset                :  1, // LBRs may be cleared on MWAIT C-state > C1
                lbr_ip_is_lip                   :  1; // LBR IP contain Last IP (otherwise effective IP)
        // ebx
        u32     lbr_cpl                         :  1, // CPL filtering
                lbr_branch_filter               :  1, // Branch filtering
                lbr_call_stack                  :  1, // Call-stack mode
                                                : 29; // Reserved
        // ecx
        u32     lbr_mispredict                  :  1, // Branch misprediction bit
                lbr_timed_lbr                   :  1, // Timed LBRs (CPU cycles since last LBR entry)
                lbr_branch_type                 :  1, // Branch type field
                                                : 13, // Reserved
                lbr_events_gpc_bmp              :  4, // PMU-events logging support
                                                : 12; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x1d
 * Intel AMX (Advanced Matrix Extensions) tile information
 */

struct leaf_0x1d_0 {
        // eax
        u32     amx_max_palette                 : 32; // Highest palette ID / subleaf ID
        // ebx
        u32                                     : 32; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

struct leaf_0x1d_1 {
        // eax
        u32     amx_palette_size                : 16, // AMX palette total tiles size, in bytes
                amx_tile_size                   : 16; // AMX single tile's size, in bytes
        // ebx
        u32     amx_tile_row_size               : 16, // AMX tile single row's size, in bytes
                amx_palette_nr_tiles            : 16; // AMX palette number of tiles
        // ecx
        u32     amx_tile_nr_rows                : 16, // AMX tile max number of rows
                                                : 16; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x1e
 * Intel TMUL (Tile-matrix Multiply)
 */

struct leaf_0x1e_0 {
        // eax
        u32                                     : 32; // Reserved
        // ebx
        u32     tmul_maxk                       :  8, // TMUL unit maximum height, K (rows or columns)
                tmul_maxn                       : 16, // TMUL unit maximum SIMD dimension, N (column bytes)
                                                :  8; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x1f
 * Intel extended topology v2
 */

struct leaf_0x1f_n {
        // eax
        u32     x2apic_id_shift                 :  5, // Bit width of this level (previous levels inclusive)
                                                : 27; // Reserved
        // ebx
        u32     domain_lcpus_count              : 16, // Logical CPUs count across all instances of this domain
                                                : 16; // Reserved
        // ecx
        u32     domain_level                    :  8, // This domain level (subleaf ID)
                domain_type                     :  8, // This domain type
                                                : 16; // Reserved
        // edx
        u32     x2apic_id                       : 32; // x2APIC ID of current logical CPU
};

#define LEAF_0x1f_SUBLEAF_N_FIRST               0
#define LEAF_0x1f_SUBLEAF_N_LAST                5

/*
 * Leaf 0x20
 * Intel HRESET (History Reset)
 */

struct leaf_0x20_0 {
        // eax
        u32     hreset_nr_subleaves             : 32; // CPUID 0x20 max subleaf + 1
        // ebx
        u32     hreset_thread_director          :  1, // Intel thread director HRESET
                                                : 31; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x21
 * Intel TD (Trust Domain)
 */

struct leaf_0x21_0 {
        // eax
        u32                                     : 32; // Reserved
        // ebx
        u32     tdx_vendorid_0                  : 32; // TDX vendor ID string bytes 0 - 3
        // ecx
        u32     tdx_vendorid_2                  : 32; // TDX vendor ID string bytes 8 - 11
        // edx
        u32     tdx_vendorid_1                  : 32; // TDX vendor ID string bytes 4 - 7
};

/*
 * Leaf 0x23
 * Intel Architectural Performance Monitoring Extended (ArchPerfmonExt)
 */

struct leaf_0x23_0 {
        // eax
        u32     subleaf_0                       :  1, // Subleaf 0, this subleaf
                counters_subleaf                :  1, // Subleaf 1, PMU counter bitmaps
                acr_subleaf                     :  1, // Subleaf 2, Auto Counter Reload bitmaps
                events_subleaf                  :  1, // Subleaf 3, PMU event bitmaps
                pebs_caps_subleaf               :  1, // Subleaf 4, PEBS capabilities
                pebs_subleaf                    :  1, // Subleaf 5, Arch PEBS bitmaps
                                                : 26; // Reserved
        // ebx
        u32     unitmask2                       :  1, // IA32_PERFEVTSELx MSRs UnitMask2 bit
                eq                              :  1, // IA32_PERFEVTSELx MSRs EQ bit
                rdpmc_user_disable              :  1, // RDPMC userspace disable
                                                : 29; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

struct leaf_0x23_1 {
        // eax
        u32     gp_counters                     : 32; // Bitmap of general-purpose PMU counters
        // ebx
        u32     fixed_counters                  : 32; // Bitmap of fixed PMU counters
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

struct leaf_0x23_2 {
        // eax
        u32     acr_gp_reload                   : 32; // Bitmap of general-purpose counters that can be reloaded
        // ebx
        u32     acr_fixed_reload                : 32; // Bitmap of fixed counters that can be reloaded
        // ecx
        u32     acr_gp_trigger                  : 32; // Bitmap of general-purpose counters that can trigger reloads
        // edx
        u32     acr_fixed_trigger               : 32; // Bitmap of fixed counters that can trigger reloads
};

struct leaf_0x23_3 {
        // eax
        u32     core_cycles_evt                 :  1, // Core cycles event
                insn_retired_evt                :  1, // Instructions retired event
                ref_cycles_evt                  :  1, // Reference cycles event
                llc_refs_evt                    :  1, // Last-level cache references event
                llc_misses_evt                  :  1, // Last-level cache misses event
                br_insn_ret_evt                 :  1, // Branch instruction retired event
                br_mispr_evt                    :  1, // Branch mispredict retired event
                td_slots_evt                    :  1, // Topdown slots event
                td_backend_bound_evt            :  1, // Topdown backend bound event
                td_bad_spec_evt                 :  1, // Topdown bad speculation event
                td_frontend_bound_evt           :  1, // Topdown frontend bound event
                td_retiring_evt                 :  1, // Topdown retiring event
                                                : 20; // Reserved
        // ebx
        u32                                     : 32; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

struct leaf_0x23_4 {
        // eax
        u32                                     : 32; // Reserved
        // ebx
        u32                                     :  3, // Reserved
                allow_in_record                 :  1, // ALLOW_IN_RECORD bit in MSRs
                counters_gp                     :  1, // Counters group sub-group general-purpose counters
                counters_fixed                  :  1, // Counters group sub-group fixed-function counters
                counters_metrics                :  1, // Counters group sub-group performance metrics
                                                :  1, // Reserved
                lbr                             :  2, // LBR group
                                                :  6, // Reserved
                xer                             :  8, // XER group
                                                :  5, // Reserved
                gpr                             :  1, // GPR group
                aux                             :  1, // AUX group
                                                :  1; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

struct leaf_0x23_5 {
        // eax
        u32     pebs_gp                         : 32; // Architectural PEBS general-purpose counters
        // ebx
        u32     pebs_pdist_gp                   : 32; // Architectural PEBS PDIST general-purpose counters
        // ecx
        u32     pebs_fixed                      : 32; // Architectural PEBS fixed counters
        // edx
        u32     pebs_pdist_fixed                : 32; // Architectural PEBS PDIST fixed counters
};

/*
 * Leaf 0x40000000
 * Maximum hypervisor leaf + hypervisor vendor string
 */

struct leaf_0x40000000_0 {
        // eax
        u32     max_hyp_leaf                    : 32; // Maximum hypervisor leaf
        // ebx
        u32     hypervisor_id_0                 : 32; // Hypervisor ID string bytes 0 - 3
        // ecx
        u32     hypervisor_id_1                 : 32; // Hypervisor ID string bytes 4 - 7
        // edx
        u32     hypervisor_id_2                 : 32; // Hypervisor ID string bytes 8 - 11
};

/*
 * Leaf 0x4c780001
 * Linux-defined synthetic feature flags
 */

struct leaf_0x4c780001_0 {
        // eax
        u32     cxmmx                           :  1, // Cyrix MMX extensions
                k6_mtrr                         :  1, // AMD K6 nonstandard MTRRs
                cyrix_arr                       :  1, // Cyrix ARRs (= MTRRs)
                centaur_mcr                     :  1, // Centaur MCRs (= MTRRs)
                k8                              :  1, // Opteron, Athlon64
                zen5                            :  1, // CPU based on Zen5 micro-architecture
                zen6                            :  1, // CPU based on Zen6 micro-architecture
                                                :  1, // Reserved
                constant_tsc                    :  1, // TSC ticks at a constant rate
                up                              :  1, // SMP kernel running on UP
                art                             :  1, // Always running timer (ART)
                arch_perfmon                    :  1, // Intel Architectural PerfMon
                pebs                            :  1, // Precise-Event Based Sampling
                bts                             :  1, // Branch Trace Store
                syscall32                       :  1, // SYSCALL in IA32 userspace
                sysenter32                      :  1, // SYSENTER in IA32 userspace
                rep_good                        :  1, // REP microcode works well
                amd_lbr_v2                      :  1, // AMD Last Branch Record Extension version 2
                clear_cpu_buf                   :  1, // Clear CPU buffers using VERW
                acc_power                       :  1, // AMD Accumulated Power Mechanism
                nopl                            :  1, // The NOPL instructions
                always                          :  1, // Always-present feature
                xtopology                       :  1, // CPU topology enumeration extensions
                tsc_reliable                    :  1, // TSC is known to be reliable
                nonstop_tsc                     :  1, // TSC does not stop in C states
                cpuid                           :  1, // CPU has the CPUID instruction
                extd_apicid                     :  1, // Extended APIC ID (8 bits)
                amd_dcm                         :  1, // AMD multi-node processor
                aperfmperf                      :  1, // APERF/MPERF MSRs: P-State hardware coordination feedback
                rapl                            :  1, // AMD/Hygon RAPL interface
                nonstop_tsc_s3                  :  1, // TSC does not stop in S3 state
                tsc_known_freq                  :  1; // TSC has known frequency
        // ebx
        u32     ring3mwait                      :  1, // Ring 3 MONITOR/MWAIT instructions
                cpuid_fault                     :  1, // Intel CPUID faulting
                cpb                             :  1, // AMD Core Performance Boost
                epb                             :  1, // IA32_ENERGY_PERF_BIAS support
                cat_l3                          :  1, // Cache Allocation Technology L3
                cat_l2                          :  1, // Cache Allocation Technology L2
                cdp_l3                          :  1, // Code and Data Prioritization L3
                tdx_host_platform               :  1, // Platform supports being a TDX host
                hw_pstate                       :  1, // AMD Hardware P-state control
                proc_feedback                   :  1, // AMD Processor Feedback Interface
                xcompacted                      :  1, // Use compacted XSTATE (XSAVES or XSAVEC)
                pti                             :  1, // Kernel Page Table Isolation enabled
                kernel_ibrs                     :  1, // Set/clear IBRS on kernel entry/exit
                rsb_vmexit                      :  1, // Fill RSB on VM-Exit
                intel_ppin                      :  1, // Intel Processor Inventory Number
                cdp_l2                          :  1, // Code and Data Prioritization L2
                msr_spec_ctrl                   :  1, // MSR SPEC_CTRL is implemented
                ssbd                            :  1, // Speculative Store Bypass Disable
                mba                             :  1, // Memory Bandwidth Allocation
                rsb_ctxsw                       :  1, // Fill RSB on context switches
                perfmon_v2                      :  1, // AMD Performance Monitoring Version 2
                                                :  1, // Reserved
                use_ibrs_fw                     :  1, // Use IBRS during runtime firmware calls
                ss_bypass_disable               :  1, // Disable Speculative Store Bypass
                ls_cfg_ssbd                     :  1, // AMD SSBD implementation via LS_CFG MSR
                ibrs                            :  1, // Indirect Branch Restricted Speculation
                ibpb                            :  1, // Indirect Branch Prediction Barrier (without RSB flush guarantee)
                stibp                           :  1, // Single Thread Indirect Branch Predictors
                zen                             :  1, // Generic flag for all Zen and newer
                l1tf_pteinv                     :  1, // L1TF workaround PTE inversion
                ibrs_enhanced                   :  1, // Enhanced IBRS
                msr_ia32_feat_ctl               :  1; // MSR IA32_FEAT_CTL configured
        // ecx
        u32     tpr_shadow                      :  1, // Intel TPR Shadow
                flexpriority                    :  1, // Intel FlexPriority
                ept                             :  1, // Intel Extended Page Table
                vpid                            :  1, // Intel Virtual Processor ID
                coherency_sfw_no                :  1, // SNP cache coherency software workaround not needed
                                                : 10, // Reserved
                vmmcall                         :  1, // Prefer VMMCALL to VMCALL
                xenpv                           :  1, // Xen paravirtual guest
                ept_ad                          :  1, // Intel Extended Page Table access-dirty bit
                vmcall                          :  1, // Hypervisor supports the VMCALL instruction
                vmw_vmmcall                     :  1, // VMware prefers the VMMCALL instruction
                pvunlock                        :  1, // PV unlock function
                vcpupreempt                     :  1, // PV vcpu_is_preempted function
                tdx_guest                       :  1, // Intel Trust Domain Extensions Guest
                                                :  9; // Reserved
        // edx
        u32     cqm_llc                         :  1, // LLC QoS
                cqm_occup_llc                   :  1, // LLC occupancy monitoring
                cqm_mbm_total                   :  1, // LLC Total MBM monitoring
                cqm_mbm_local                   :  1, // LLC Local MBM monitoring
                fence_swapgs_user               :  1, // LFENCE in user entry SWAPGS path
                fence_swapgs_kernel             :  1, // LFENCE in kernel entry SWAPGS path
                split_lock_detect               :  1, // #AC for split lock
                per_thread_mba                  :  1, // Per-thread Memory Bandwidth Allocation
                sgx1                            :  1, // SGX Basic
                sgx2                            :  1, // SGX Enclave Dynamic Memory Management (EDMM)
                entry_ibpb                      :  1, // Issue an IBPB on kernel entry
                rrsba_ctrl                      :  1, // RET prediction control
                retpoline                       :  1, // Generic Retpoline mitigation for Spectre variant 2
                retpoline_lfence                :  1, // Use LFENCE for Spectre variant 2
                rethunk                         :  1, // Use Return THUNK
                unret                           :  1, // AMD BTB untrain return
                use_ibpb_fw                     :  1, // Use IBPB during runtime firmware calls
                rsb_vmexit_lite                 :  1, // Fill RSB on VM exit when EIBRS is enabled
                sgx_edeccssa                    :  1, // SGX EDECCSSA user leaf function
                call_depth                      :  1, // Call depth tracking for RSB stuffing
                msr_tsx_ctrl                    :  1, // MSR IA32_TSX_CTRL (Intel) implemented
                smba                            :  1, // Slow Memory Bandwidth Allocation
                bmec                            :  1, // Bandwidth Monitoring Event Configuration
                user_shstk                      :  1, // Shadow stack support for user mode applications
                srso                            :  1, // AMD BTB untrain RETs
                srso_alias                      :  1, // AMD BTB untrain RETs through aliasing
                ibpb_on_vmexit                  :  1, // Issue an IBPB only on VMEXIT
                apic_msrs_fence                 :  1, // IA32_TSC_DEADLINE and X2APIC MSRs need fencing
                zen2                            :  1, // CPU based on Zen2 microarchitecture
                zen3                            :  1, // CPU based on Zen3 microarchitecture
                zen4                            :  1, // CPU based on Zen4 microarchitecture
                zen1                            :  1; // CPU based on Zen1 microarchitecture
};

struct leaf_0x4c780001_1 {
        // eax
        u32     overflow_recov                  :  1, // MCA overflow recovery support
                succor                          :  1, // Uncorrectable error containment and recovery
                                                :  1, // Reserved
                smca                            :  1, // Scalable MCA
                                                : 28; // Reserved
        // ebx
        u32     amd_lbr_pmc_freeze              :  1, // AMD LBR and PMC Freeze
                clear_bhb_loop                  :  1, // Clear branch history at SYSCALL entry using SW loop
                bhi_ctrl                        :  1, // BHI_DIS_S HW control available
                clear_bhb_hw                    :  1, // BHI_DIS_S HW control enabled
                clear_bhb_vmexit                :  1, // Clear branch history at VMEXIT using SW loop
                amd_fast_cppc                   :  1, // AMD fast Collaborative Processor Performance Control
                amd_htr_cores                   :  1, // Heterogeneous Core Topology
                amd_workload_class              :  1, // Workload Classification
                prefer_ymm                      :  1, // Avoid ZMM registers due to downclocking
                apx                             :  1, // Advanced Performance Extensions
                indirect_thunk_its              :  1, // Use thunk for indirect branches in lower half of cache line
                tsa_sq_no                       :  1, // AMD CPU not vulnerable to TSA-SQ
                tsa_l1_no                       :  1, // AMD CPU not vulnerable to TSA-L1
                clear_cpu_buf_vm                :  1, // Clear CPU buffers using VERW before VMRUN
                ibpb_exit_to_user               :  1, // Use IBPB on exit-to-userspace, see VMSCAPE bug
                                                : 17; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x4c780002
 * Linux-defined synthetic CPU bug flags
 */

struct leaf_0x4c780002_0 {
        // eax
        u32     f00f                            :  1, // Intel F00F
                fdiv                            :  1, // FPU FDIV
                coma                            :  1, // Cyrix 6x86 coma
                amd_tlb_mmatch                  :  1, // AMD Erratum 383
                amd_apic_c1e                    :  1, // AMD Erratum 400
                bug_11ap                        :  1, // Bad local APIC aka 11AP
                fxsave_leak                     :  1, // FXSAVE leaks FOP/FIP/FOP
                clflush_monitor                 :  1, // AAI65, CLFLUSH required before MONITOR
                sysret_ss_attrs                 :  1, // SYSRET does not fix up SS attributes
                espfix                          :  1, // IRET to 16-bit SS corrupts ESP/RSP high bits (x86-32)
                null_seg                        :  1, // Setting a selector to NULL preserves the base
                swapgs_fence                    :  1, // SWAPGS without input dep on GS
                monitor                         :  1, // IPI required to wake up remote CPU
                amd_e400                        :  1, // CPU is among the affected by Erratum 400
                cpu_meltdown                    :  1, // CPU affected by meltdown; needs kernel page table isolation
                spectre_v1                      :  1, // CPU affected by Spectre variant 1 with conditional branches
                spectre_v2                      :  1, // CPU affected by Spectre variant 2 with indirect branches
                spec_store_bypass               :  1, // CPU affected by speculative store bypass attack
                l1tf                            :  1, // CPU affected by L1 Terminal Fault
                mds                             :  1, // CPU affected by Microarchitectural data sampling
                msbds_only                      :  1, // Microarchitectural data sampling: CPU only affected by the MSBDS variant
                swapgs                          :  1, // CPU affected by speculation through SWAPGS
                taa                             :  1, // CPU is affected by TSX Async Abort (TAA)
                itlb_multihit                   :  1, // CPU may incur MCE during certain page attribute changes
                srbds                           :  1, // CPU may leak RNG bits if not mitigated
                mmio_stale_data                 :  1, // CPU affected by Processor MMIO Stale Data vulnerabilities
                                                :  1, // Reserved
                retbleed                        :  1, // CPU affected by Retbleed
                eibrs_pbrsb                     :  1, // EIBRS is vulnerable to Post Barrier RSB Predictions
                smt_rsb                         :  1, // CPU vulnerable to Cross-Thread Return Address Predictions
                gds                             :  1, // CPU affected by Gather Data Sampling
                tdx_pw_mce                      :  1; // CPU may incur #MC if non-TD software does partial write to TDX private memory
        // ebx
        u32     srso                            :  1, // AMD SRSO bug
                div0                            :  1, // AMD DIV0 speculation bug
                rfds                            :  1, // CPU vulnerable to Register File Data Sampling
                bhi                             :  1, // CPU affected by Branch History Injection
                ibpb_no_ret                     :  1, // IBPB omits return target predictions
                spectre_v2_user                 :  1, // CPU affected by Spectre variant 2 between user processes
                old_microcode                   :  1, // CPU has old microcode; it must be vulnerable to something
                its                             :  1, // CPU affected by Indirect Target Selection
                its_native_only                 :  1, // CPU affected by ITS; VMX is not affected
                tsa                             :  1, // CPU affected by Transient Scheduler Attacks
                vmscape                         :  1, // CPU affected by VMSCAPE attacks from guests
                                                : 21; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x80000000
 * Maximum extended leaf + CPU vendor string
 */

struct leaf_0x80000000_0 {
        // eax
        u32     max_ext_leaf                    : 32; // Maximum extended CPUID leaf
        // ebx
        u32     cpu_vendorid_0                  : 32; // Vendor ID string bytes 0 - 3
        // ecx
        u32     cpu_vendorid_2                  : 32; // Vendor ID string bytes 8 - 11
        // edx
        u32     cpu_vendorid_1                  : 32; // Vendor ID string bytes 4 - 7
};

/*
 * Leaf 0x80000001
 * Extended CPU features
 */

struct leaf_0x80000001_0 {
        // eax
        u32     e_stepping_id                   :  4, // Stepping ID
                e_base_model                    :  4, // Base processor model
                e_base_family                   :  4, // Base processor family
                e_base_type                     :  2, // Base processor type (Transmeta)
                                                :  2, // Reserved
                e_ext_model                     :  4, // Extended processor model
                e_ext_family                    :  8, // Extended processor family
                                                :  4; // Reserved
        // ebx
        u32     brand_id                        : 16, // Brand ID
                                                : 12, // Reserved
                pkg_type                        :  4; // Package type
        // ecx
        u32     lahf_lm                         :  1, // LAHF and SAHF in 64-bit mode
                cmp_legacy                      :  1, // Multi-processing legacy mode (No HT)
                svm                             :  1, // Secure Virtual Machine
                extapic                         :  1, // Extended APIC space
                cr8_legacy                      :  1, // LOCK MOV CR0 means MOV CR8
                lzcnt_abm                       :  1, // LZCNT advanced bit manipulation
                sse4a                           :  1, // SSE4A support
                misaligned_sse                  :  1, // Misaligned SSE mode
                _3dnow_prefetch                 :  1, // 3DNow PREFETCH/PREFETCHW support
                osvw                            :  1, // OS visible workaround
                ibs                             :  1, // Instruction based sampling
                xop                             :  1, // XOP: extended operation (AVX instructions)
                skinit                          :  1, // SKINIT/STGI support
                wdt                             :  1, // Watchdog timer support
                                                :  1, // Reserved
                lwp                             :  1, // Lightweight profiling
                fma4                            :  1, // 4-operand FMA instruction
                tce                             :  1, // Translation cache extension
                                                :  1, // Reserved
                nodeid_msr                      :  1, // NodeId MSR (0xc001100c)
                                                :  1, // Reserved
                tbm                             :  1, // Trailing bit manipulations
                topoext                         :  1, // Topology Extensions (leaf 0x8000001d)
                perfctr_core                    :  1, // Core performance counter extensions
                perfctr_nb                      :  1, // NB/DF performance counter extensions
                                                :  1, // Reserved
                data_bp_ext                     :  1, // Data access breakpoint extension
                perf_tsc                        :  1, // Performance time-stamp counter
                perfctr_llc                     :  1, // LLC (L3) performance counter extensions
                mwaitx                          :  1, // MWAITX/MONITORX support
                addr_mask_ext                   :  1, // Breakpoint address mask extension (to bit 31)
                                                :  1; // Reserved
        // edx
        u32     e_fpu                           :  1, // Floating-Point Unit on-chip (x87)
                e_vme                           :  1, // Virtual-8086 Mode Extensions
                e_de                            :  1, // Debugging Extensions
                e_pse                           :  1, // Page Size Extension
                e_tsc                           :  1, // Time Stamp Counter
                e_msr                           :  1, // Model-Specific Registers (RDMSR and WRMSR support)
                pae                             :  1, // Physical Address Extensions
                mce                             :  1, // Machine Check Exception
                cx8                             :  1, // CMPXCHG8B instruction
                apic                            :  1, // APIC on-chip
                                                :  1, // Reserved
                syscall                         :  1, // SYSCALL and SYSRET instructions
                mtrr                            :  1, // Memory Type Range Registers
                pge                             :  1, // Page Global Extensions
                mca                             :  1, // Machine Check Architecture
                cmov                            :  1, // Conditional Move Instruction
                pat                             :  1, // Page Attribute Table
                pse36                           :  1, // Page Size Extension (36-bit)
                                                :  1, // Reserved
                obsolete_mp_bit                 :  1, // Out-of-spec AMD Multiprocessing bit
                nx                              :  1, // No-execute page protection
                                                :  1, // Reserved
                mmxext                          :  1, // AMD MMX extensions
                e_mmx                           :  1, // MMX instructions
                e_fxsr                          :  1, // FXSAVE and FXRSTOR instructions
                fxsr_opt                        :  1, // FXSAVE and FXRSTOR optimizations
                page1gb                         :  1, // 1-GB large page support
                rdtscp                          :  1, // RDTSCP instruction
                                                :  1, // Reserved
                lm                              :  1, // Long mode (x86-64, 64-bit support)
                _3dnowext                       :  1, // AMD 3DNow extensions
                _3dnow                          :  1; // 3DNow instructions
};

/*
 * Leaf 0x80000002
 * CPU brand ID string, bytes 0 - 15
 */

struct leaf_0x80000002_0 {
        // eax
        u32     cpu_brandid_0                   : 32; // CPU brand ID string, bytes 0 - 3
        // ebx
        u32     cpu_brandid_1                   : 32; // CPU brand ID string, bytes 4 - 7
        // ecx
        u32     cpu_brandid_2                   : 32; // CPU brand ID string, bytes 8 - 11
        // edx
        u32     cpu_brandid_3                   : 32; // CPU brand ID string, bytes 12 - 15
};

/*
 * Leaf 0x80000003
 * CPU brand ID string, bytes 16 - 31
 */

struct leaf_0x80000003_0 {
        // eax
        u32     cpu_brandid_4                   : 32; // CPU brand ID string bytes, 16 - 19
        // ebx
        u32     cpu_brandid_5                   : 32; // CPU brand ID string bytes, 20 - 23
        // ecx
        u32     cpu_brandid_6                   : 32; // CPU brand ID string bytes, 24 - 27
        // edx
        u32     cpu_brandid_7                   : 32; // CPU brand ID string bytes, 28 - 31
};

/*
 * Leaf 0x80000004
 * CPU brand ID string, bytes 32 - 47
 */

struct leaf_0x80000004_0 {
        // eax
        u32     cpu_brandid_8                   : 32; // CPU brand ID string, bytes 32 - 35
        // ebx
        u32     cpu_brandid_9                   : 32; // CPU brand ID string, bytes 36 - 39
        // ecx
        u32     cpu_brandid_10                  : 32; // CPU brand ID string, bytes 40 - 43
        // edx
        u32     cpu_brandid_11                  : 32; // CPU brand ID string, bytes 44 - 47
};

/*
 * Leaf 0x80000005
 * AMD/Transmeta L1 cache and TLB
 */

struct leaf_0x80000005_0 {
        // eax
        u32     l1_itlb_2m_4m_nentries          :  8, // L1 ITLB #entries, 2M and 4M pages
                l1_itlb_2m_4m_assoc             :  8, // L1 ITLB associativity, 2M and 4M pages
                l1_dtlb_2m_4m_nentries          :  8, // L1 DTLB #entries, 2M and 4M pages
                l1_dtlb_2m_4m_assoc             :  8; // L1 DTLB associativity, 2M and 4M pages
        // ebx
        u32     l1_itlb_4k_nentries             :  8, // L1 ITLB #entries, 4K pages
                l1_itlb_4k_assoc                :  8, // L1 ITLB associativity, 4K pages
                l1_dtlb_4k_nentries             :  8, // L1 DTLB #entries, 4K pages
                l1_dtlb_4k_assoc                :  8; // L1 DTLB associativity, 4K pages
        // ecx
        u32     l1_dcache_line_size             :  8, // L1 dcache line size, in bytes
                l1_dcache_nlines                :  8, // L1 dcache lines per tag
                l1_dcache_assoc                 :  8, // L1 dcache associativity
                l1_dcache_size_kb               :  8; // L1 dcache size, in KB
        // edx
        u32     l1_icache_line_size             :  8, // L1 icache line size, in bytes
                l1_icache_nlines                :  8, // L1 icache lines per tag
                l1_icache_assoc                 :  8, // L1 icache associativity
                l1_icache_size_kb               :  8; // L1 icache size, in KB
};

/*
 * Leaf 0x80000006
 * (Mostly AMD) L2/L3 cache and TLB
 */

struct leaf_0x80000006_0 {
        // eax
        u32     l2_itlb_2m_4m_nentries          : 12, // L2 iTLB #entries, 2M and 4M pages
                l2_itlb_2m_4m_assoc             :  4, // L2 iTLB associativity, 2M and 4M pages
                l2_dtlb_2m_4m_nentries          : 12, // L2 dTLB #entries, 2M and 4M pages
                l2_dtlb_2m_4m_assoc             :  4; // L2 dTLB associativity, 2M and 4M pages
        // ebx
        u32     l2_itlb_4k_nentries             : 12, // L2 iTLB #entries, 4K pages
                l2_itlb_4k_assoc                :  4, // L2 iTLB associativity, 4K pages
                l2_dtlb_4k_nentries             : 12, // L2 dTLB #entries, 4K pages
                l2_dtlb_4k_assoc                :  4; // L2 dTLB associativity, 4K pages
        // ecx
        u32     l2_line_size                    :  8, // L2 cache line size, in bytes
                l2_nlines                       :  4, // L2 cache number of lines per tag
                l2_assoc                        :  4, // L2 cache associativity
                l2_size_kb                      : 16; // L2 cache size, in KB
        // edx
        u32     l3_line_size                    :  8, // L3 cache line size, in bytes
                l3_nlines                       :  4, // L3 cache number of lines per tag
                l3_assoc                        :  4, // L3 cache associativity
                                                :  2, // Reserved
                l3_size_range                   : 14; // L3 cache size range
};

/*
 * Leaf 0x80000007
 * CPU power management (mostly AMD) and AMD RAS
 */

struct leaf_0x80000007_0 {
        // eax
        u32                                     : 32; // Reserved
        // ebx
        u32     mca_overflow_recovery           :  1, // MCA overflow conditions not fatal
                succor                          :  1, // Software containment of uncorrectable errors
                hw_assert                       :  1, // Hardware assert MSRs
                scalable_mca                    :  1, // Scalable MCA (MCAX MSRs)
                                                : 28; // Reserved
        // ecx
        u32     cpu_pwr_sample_ratio            : 32; // CPU power sample time ratio
        // edx
        u32     digital_temp                    :  1, // Digital temperature sensor
                powernow_freq_id                :  1, // PowerNOW! frequency scaling
                powernow_volt_id                :  1, // PowerNOW! voltage scaling
                thermal_trip                    :  1, // THERMTRIP (Thermal Trip)
                hw_thermal_control              :  1, // Hardware thermal control
                sw_thermal_control              :  1, // Software thermal control
                _100mhz_steps                   :  1, // 100 MHz multiplier control
                hw_pstate                       :  1, // Hardware P-state control
                constant_tsc                    :  1, // TSC ticks at constant rate across all P and C states
                core_perf_boost                 :  1, // Core performance boost
                eff_freq_ro                     :  1, // Read-only effective frequency interface
                proc_feedback                   :  1, // Processor feedback interface (deprecated)
                proc_power_reporting            :  1, // Processor power reporting interface
                connected_standby               :  1, // CPU Connected Standby support
                rapl_interface                  :  1, // Runtime Average Power Limit interface
                                                : 17; // Reserved
};

/*
 * Leaf 0x80000008
 * CPU capacity parameters and extended feature flags (mostly AMD)
 */

struct leaf_0x80000008_0 {
        // eax
        u32     phys_addr_bits                  :  8, // Max physical address bits
                virt_addr_bits                  :  8, // Max virtual address bits
                guest_phys_addr_bits            :  8, // Max nested-paging guest physical address bits
                                                :  8; // Reserved
        // ebx
        u32     clzero                          :  1, // CLZERO instruction
                insn_retired_perf               :  1, // Instruction retired counter MSR
                xsave_err_ptr                   :  1, // XSAVE/XRSTOR always saves/restores FPU error pointers
                invlpgb                         :  1, // INVLPGB broadcasts a TLB invalidate
                rdpru                           :  1, // RDPRU (Read Processor Register at User level)
                                                :  1, // Reserved
                mba                             :  1, // Memory Bandwidth Allocation (AMD bit)
                                                :  1, // Reserved
                mcommit                         :  1, // MCOMMIT instruction
                wbnoinvd                        :  1, // WBNOINVD instruction
                                                :  2, // Reserved
                ibpb                            :  1, // Indirect Branch Prediction Barrier
                wbinvd_int                      :  1, // Interruptible WBINVD/WBNOINVD
                ibrs                            :  1, // Indirect Branch Restricted Speculation
                stibp                           :  1, // Single Thread Indirect Branch Prediction mode
                ibrs_always_on                  :  1, // IBRS always-on preferred
                stibp_always_on                 :  1, // STIBP always-on preferred
                ibrs_fast                       :  1, // IBRS is preferred over software solution
                ibrs_same_mode                  :  1, // IBRS provides same mode protection
                no_efer_lmsle                   :  1, // Long-Mode Segment Limit Enable unsupported
                tlb_flush_nested                :  1, // INVLPGB RAX[5] bit can be set
                                                :  1, // Reserved
                amd_ppin                        :  1, // Protected Processor Inventory Number
                amd_ssbd                        :  1, // Speculative Store Bypass Disable
                virt_ssbd                       :  1, // virtualized SSBD (Speculative Store Bypass Disable)
                amd_ssb_no                      :  1, // SSBD is not needed (fixed in hardware)
                cppc                            :  1, // Collaborative Processor Performance Control
                amd_psfd                        :  1, // Predictive Store Forward Disable
                btc_no                          :  1, // CPU not affected by Branch Type Confusion
                ibpb_ret                        :  1, // IBPB clears RSB/RAS too
                branch_sampling                 :  1; // Branch Sampling
        // ecx
        u32     cpu_nthreads                    :  8, // Number of physical threads - 1
                                                :  4, // Reserved
                apicid_coreid_len               :  4, // Number of thread core ID bits (shift) in APIC ID
                perf_tsc_len                    :  2, // Performance time-stamp counter size
                                                : 14; // Reserved
        // edx
        u32     invlpgb_max_pages               : 16, // INVLPGB maximum page count
                rdpru_max_reg_id                : 16; // RDPRU max register ID (ECX input)
};

/*
 * Leaf 0x8000000a
 * AMD SVM (Secure Virtual Machine)
 */

struct leaf_0x8000000a_0 {
        // eax
        u32     svm_version                     :  8, // SVM revision number
                                                : 24; // Reserved
        // ebx
        u32     svm_nasid                       : 32; // Number of address space identifiers (ASID)
        // ecx
        u32                                     :  4, // Reserved
                pml                             :  1, // Page Modification Logging (PML)
                                                : 27; // Reserved
        // edx
        u32     nested_pt                       :  1, // Nested paging
                lbr_virt                        :  1, // LBR virtualization
                svm_lock                        :  1, // SVM lock
                nrip_save                       :  1, // NRIP save support on #VMEXIT
                tsc_rate_msr                    :  1, // MSR-based TSC rate control
                vmcb_clean                      :  1, // VMCB clean bits support
                flush_by_asid                   :  1, // Flush by ASID + Extended VMCB TLB_Control
                decode_assists                  :  1, // Decode Assists support
                                                :  2, // Reserved
                pause_filter                    :  1, // Pause intercept filter
                                                :  1, // Reserved
                pf_threshold                    :  1, // Pause filter threshold
                avic                            :  1, // Advanced virtual interrupt controller
                                                :  1, // Reserved
                v_vmsave_vmload                 :  1, // Virtual VMSAVE/VMLOAD (nested virtualization)
                v_gif                           :  1, // Virtualize the Global Interrupt Flag
                gmet                            :  1, // Guest mode execution trap
                x2avic                          :  1, // Virtual x2APIC
                sss_check                       :  1, // Supervisor Shadow Stack restrictions
                v_spec_ctrl                     :  1, // Virtual SPEC_CTRL
                ro_gpt                          :  1, // Read-Only guest page table support
                                                :  1, // Reserved
                h_mce_override                  :  1, // Host MCE override
                tlbsync_int                     :  1, // TLBSYNC intercept + INVLPGB/TLBSYNC in VMCB
                nmi_virt                        :  1, // NMI virtualization
                ibs_virt                        :  1, // IBS Virtualization
                ext_lvt_off_chg                 :  1, // Extended LVT offset fault change
                svme_addr_chk                   :  1, // Guest SVME address check
                                                :  3; // Reserved
};

/*
 * Leaf 0x80000019
 * AMD TLB characteristics for 1GB pages
 */

struct leaf_0x80000019_0 {
        // eax
        u32     l1_itlb_1g_nentries             : 12, // L1 iTLB #entries, 1G pages
                l1_itlb_1g_assoc                :  4, // L1 iTLB associativity, 1G pages
                l1_dtlb_1g_nentries             : 12, // L1 dTLB #entries, 1G pages
                l1_dtlb_1g_assoc                :  4; // L1 dTLB associativity, 1G pages
        // ebx
        u32     l2_itlb_1g_nentries             : 12, // L2 iTLB #entries, 1G pages
                l2_itlb_1g_assoc                :  4, // L2 iTLB associativity, 1G pages
                l2_dtlb_1g_nentries             : 12, // L2 dTLB #entries, 1G pages
                l2_dtlb_1g_assoc                :  4; // L2 dTLB associativity, 1G pages
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x8000001a
 * AMD instruction optimizations
 */

struct leaf_0x8000001a_0 {
        // eax
        u32     fp_128                          :  1, // Internal FP/SIMD exec data path is 128-bits wide
                movu_preferred                  :  1, // SSE: MOVU* better than MOVL*/MOVH*
                fp_256                          :  1, // Internal FP/SSE exec data path is 256-bits wide
                                                : 29; // Reserved
        // ebx
        u32                                     : 32; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x8000001b
 * AMD IBS (Instruction-Based Sampling)
 */

struct leaf_0x8000001b_0 {
        // eax
        u32     ibs_flags                       :  1, // IBS feature flags
                ibs_fetch_sampling              :  1, // IBS fetch sampling
                ibs_op_sampling                 :  1, // IBS execution sampling
                ibs_rdwr_op_counter             :  1, // IBS read/write of op counter
                ibs_op_count                    :  1, // IBS OP counting mode
                ibs_branch_target               :  1, // IBS branch target address reporting
                ibs_op_counters_ext             :  1, // IBS IbsOpCurCnt/IbsOpMaxCnt extend by 7 bits
                ibs_rip_invalid_chk             :  1, // IBS invalid RIP indication
                ibs_op_branch_fuse              :  1, // IBS fused branch micro-op indication
                ibs_fetch_ctl_ext               :  1, // IBS Fetch Control Extended MSR
                ibs_op_data_4                   :  1, // IBS op data 4 MSR
                ibs_l3_miss_filter              :  1, // IBS L3-miss filtering (Zen4+)
                                                : 20; // Reserved
        // ebx
        u32                                     : 32; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x8000001c
 * AMD LWP (Lightweight Profiling)
 */

struct leaf_0x8000001c_0 {
        // eax
        u32     os_lwp_avail                    :  1, // OS: LWP is available to application programs
                os_lwpval                       :  1, // OS: LWPVAL instruction
                os_lwp_ire                      :  1, // OS: Instructions Retired Event
                os_lwp_bre                      :  1, // OS: Branch Retired Event
                os_lwp_dme                      :  1, // OS: Dcache Miss Event
                os_lwp_cnh                      :  1, // OS: CPU Clocks Not Halted event
                os_lwp_rnh                      :  1, // OS: CPU Reference clocks Not Halted event
                                                : 22, // Reserved
                os_lwp_cont                     :  1, // OS: LWP sampling in continuous mode
                os_lwp_ptsc                     :  1, // OS: Performance Time Stamp Counter in event records
                os_lwp_int                      :  1; // OS: Interrupt on threshold overflow
        // ebx
        u32     lwp_lwpcb_sz                    :  8, // Control Block size, in quadwords
                lwp_event_sz                    :  8, // Event record size, in bytes
                lwp_max_events                  :  8, // Max EventID supported
                lwp_event_offset                :  8; // Control Block events area offset
        // ecx
        u32     lwp_latency_max                 :  5, // Cache latency counters number of bits
                lwp_data_addr                   :  1, // Cache miss events report data cache address
                lwp_latency_rnd                 :  3, // Cache latency rounding amount
                lwp_version                     :  7, // LWP version
                lwp_buf_min_sz                  :  8, // LWP event ring buffer min size, 32 event record units
                                                :  4, // Reserved
                lwp_branch_predict              :  1, // Branches Retired events can be filtered
                lwp_ip_filtering                :  1, // IP filtering (IPI, IPF, BaseIP, and LimitIP @ LWPCP)
                lwp_cache_levels                :  1, // Cache-related events: filter by cache level
                lwp_cache_latency               :  1; // Cache-related events: filter by latency
        // edx
        u32     hw_lwp_avail                    :  1, // HW: LWP available
                hw_lwpval                       :  1, // HW: LWPVAL available
                hw_lwp_ire                      :  1, // HW: Instructions Retired Event
                hw_lwp_bre                      :  1, // HW: Branch Retired Event
                hw_lwp_dme                      :  1, // HW: Dcache Miss Event
                hw_lwp_cnh                      :  1, // HW: Clocks Not Halted event
                hw_lwp_rnh                      :  1, // HW: Reference clocks Not Halted event
                                                : 22, // Reserved
                hw_lwp_cont                     :  1, // HW: LWP sampling in continuous mode
                hw_lwp_ptsc                     :  1, // HW: Performance Time Stamp Counter in event records
                hw_lwp_int                      :  1; // HW: Interrupt on threshold overflow
};

/*
 * Leaf 0x8000001d
 * AMD deterministic cache parameters
 */

struct leaf_0x8000001d_n {
        // eax
        u32     cache_type                      :  5, // Cache type field
                cache_level                     :  3, // Cache level (1-based)
                cache_self_init                 :  1, // Self-initializing cache level
                fully_associative               :  1, // Fully-associative cache
                                                :  4, // Reserved
                num_threads_sharing             : 12, // Number of logical CPUs sharing cache
                                                :  6; // Reserved
        // ebx
        u32     cache_linesize                  : 12, // System coherency line size (0-based)
                cache_npartitions               : 10, // Physical line partitions (0-based)
                cache_nways                     : 10; // Ways of associativity (0-based)
        // ecx
        u32     cache_nsets                     : 31, // Cache number of sets (0-based)
                                                :  1; // Reserved
        // edx
        u32     wbinvd_rll_no_guarantee         :  1, // WBINVD/INVD not guaranteed for Remote Lower-Level caches
                ll_inclusive                    :  1, // Cache is inclusive of Lower-Level caches
                                                : 30; // Reserved
};

#define LEAF_0x8000001d_SUBLEAF_N_FIRST         0
#define LEAF_0x8000001d_SUBLEAF_N_LAST          31

/*
 * Leaf 0x8000001e
 * AMD CPU topology
 */

struct leaf_0x8000001e_0 {
        // eax
        u32     ext_apic_id                     : 32; // Extended APIC ID
        // ebx
        u32     core_id                         :  8, // Unique per-socket logical core unit ID
                core_nthreads                   :  8, // #Threads per core (zero-based)
                                                : 16; // Reserved
        // ecx
        u32     node_id                         :  8, // Node (die) ID of invoking logical CPU
                nnodes_per_socket               :  3, // #nodes in invoking logical CPU's package/socket
                                                : 21; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x8000001f
 * AMD encrypted memory capabilities (SME/SEV)
 */

struct leaf_0x8000001f_0 {
        // eax
        u32     sme                             :  1, // Secure Memory Encryption
                sev                             :  1, // Secure Encrypted Virtualization
                vm_page_flush                   :  1, // VM Page Flush MSR
                sev_encrypted_state             :  1, // SEV Encrypted State
                sev_nested_paging               :  1, // SEV secure nested paging
                vm_permission_levels            :  1, // VMPL
                rpmquery                        :  1, // RPMQUERY instruction
                vmpl_sss                        :  1, // VMPL supervisor shadow stack
                secure_tsc                      :  1, // Secure TSC
                virt_tsc_aux                    :  1, // Hardware virtualizes TSC_AUX
                sme_coherent                    :  1, // Cache coherency enforcement across encryption domains
                req_64bit_hypervisor            :  1, // SEV guest mandates 64-bit hypervisor
                restricted_injection            :  1, // Restricted Injection supported
                alternate_injection             :  1, // Alternate Injection supported
                debug_swap                      :  1, // SEV-ES: Full debug state swap
                disallow_host_ibs               :  1, // SEV-ES: Disallowing IBS use by the host
                virt_transparent_enc            :  1, // Virtual Transparent Encryption
                vmgexit_parameter               :  1, // SEV_FEATURES: VmgexitParameter
                virt_tom_msr                    :  1, // Virtual TOM MSR
                virt_ibs                        :  1, // SEV-ES guests: IBS state virtualization
                                                :  4, // Reserved
                vmsa_reg_protection             :  1, // VMSA register protection
                smt_protection                  :  1, // SMT protection
                                                :  2, // Reserved
                svsm_page_msr                   :  1, // SVSM communication page MSR
                nested_virt_snp_msr             :  1, // VIRT_RMPUPDATE/VIRT_PSMASH MSRs
                                                :  2; // Reserved
        // ebx
        u32     pte_cbit_pos                    :  6, // PTE bit number to enable memory encryption
                phys_addr_reduction_nbits       :  6, // Reduction of phys address space in bits
                vmpl_count                      :  4, // Number of VM permission levels (VMPL)
                                                : 16; // Reserved
        // ecx
        u32     enc_guests_max                  : 32; // Max number of simultaneous encrypted guests
        // edx
        u32     min_sev_asid_no_sev_es          : 32; // Minimum ASID for SEV-enabled SEV-ES-disabled guest
};

/*
 * Leaf 0x80000020
 * AMD PQoS (Platform QoS) extended features
 */

struct leaf_0x80000020_0 {
        // eax
        u32                                     : 32; // Reserved
        // ebx
        u32                                     :  1, // Reserved
                mba                             :  1, // Memory Bandwidth Allocation support
                smba                            :  1, // Slow Memory Bandwidth Allocation support
                bmec                            :  1, // Bandwidth Monitoring Event Configuration support
                l3rr                            :  1, // L3 Range Reservation support
                abmc                            :  1, // Assignable Bandwidth Monitoring Counters
                sdciae                          :  1, // Smart Data Cache Injection (SDCI) Allocation Enforcement
                                                : 25; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

struct leaf_0x80000020_1 {
        // eax
        u32     mba_limit_len                   : 32; // MBA enforcement limit size
        // ebx
        u32                                     : 32; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32     mba_cos_max                     : 32; // MBA max Class of Service number (zero-based)
};

struct leaf_0x80000020_2 {
        // eax
        u32     smba_limit_len                  : 32; // SMBA enforcement limit size
        // ebx
        u32                                     : 32; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32     smba_cos_max                    : 32; // SMBA max Class of Service number (zero-based)
};

struct leaf_0x80000020_3 {
        // eax
        u32                                     : 32; // Reserved
        // ebx
        u32     bmec_num_events                 :  8, // BMEC number of bandwidth events available
                                                : 24; // Reserved
        // ecx
        u32     bmec_local_reads                :  1, // Local NUMA reads can be tracked
                bmec_remote_reads               :  1, // Remote NUMA reads can be tracked
                bmec_local_nontemp_wr           :  1, // Local NUMA non-temporal writes can be tracked
                bmec_remote_nontemp_wr          :  1, // Remote NUMA non-temporal writes can be tracked
                bmec_local_slow_mem_rd          :  1, // Local NUMA slow-memory reads can be tracked
                bmec_remote_slow_mem_rd         :  1, // Remote NUMA slow-memory reads can be tracked
                bmec_all_dirty_victims          :  1, // Dirty QoS victims to all types of memory can be tracked
                                                : 25; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x80000021
 * AMD extended CPU features 2
 */

struct leaf_0x80000021_0 {
        // eax
        u32     no_nested_data_bp               :  1, // No nested data breakpoints
                fsgs_non_serializing            :  1, // WRMSR to {FS,GS,KERNEL_GS}_BASE is non-serializing
                lfence_serializing              :  1, // LFENCE always serializing / synchronizes RDTSC
                smm_page_cfg_lock               :  1, // SMM paging configuration lock
                                                :  2, // Reserved
                null_sel_clr_base               :  1, // Null selector clears base
                upper_addr_ignore               :  1, // EFER MSR Upper Address Ignore
                auto_ibrs                       :  1, // EFER MSR Automatic IBRS
                no_smm_ctl_msr                  :  1, // SMM_CTL MSR not available
                fsrs                            :  1, // Fast Short REP STOSB
                fsrc                            :  1, // Fast Short REP CMPSB
                                                :  1, // Reserved
                prefetch_ctl_msr                :  1, // Prefetch control MSR
                                                :  2, // Reserved
                opcode_reclaim                  :  1, // Reserves opcode space
                user_cpuid_disable              :  1, // #GP when executing CPUID at CPL > 0
                epsf                            :  1, // Enhanced Predictive Store Forwarding
                                                :  3, // Reserved
                wl_feedback                     :  1, // Workload-based heuristic feedback to OS
                                                :  1, // Reserved
                eraps                           :  1, // Enhanced Return Address Predictor Security
                                                :  2, // Reserved
                sbpb                            :  1, // Selective Branch Predictor Barrier
                ibpb_brtype                     :  1, // Branch predictions flushed from CPU branch predictor
                srso_no                         :  1, // No SRSO vulnerability
                srso_uk_no                      :  1, // No SRSO at user-kernel boundary
                srso_msr_fix                    :  1; // MSR BP_CFG[BpSpecReduce] SRSO mitigation
        // ebx
        u32     microcode_patch_size            : 16, // Microcode patch size, in 16-byte units
                rap_size                        :  8, // Return Address Predictor size
                                                :  8; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x80000022
 * AMD extended performance monitoring
 */

struct leaf_0x80000022_0 {
        // eax
        u32     perfmon_v2                      :  1, // Performance monitoring v2
                lbr_v2                          :  1, // Last Branch Record v2 extensions (LBR Stack)
                lbr_pmc_freeze                  :  1, // Freezing core performance counters / LBR Stack
                                                : 29; // Reserved
        // ebx
        u32     n_pmc_core                      :  4, // Number of core performance counters
                lbr_v2_stack_size               :  6, // Number of LBR stack entries
                n_pmc_northbridge               :  6, // Number of northbridge performance counters
                n_pmc_umc                       :  6, // Number of UMC performance counters
                                                : 10; // Reserved
        // ecx
        u32     active_umc_bitmask              : 32; // Active UMCs bitmask
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x80000023
 * AMD multi-key encrypted memory
 */

struct leaf_0x80000023_0 {
        // eax
        u32     mem_hmk_mode                    :  1, // MEM-HMK encryption mode
                                                : 31; // Reserved
        // ebx
        u32     mem_hmk_avail_keys              : 16, // Total number of available encryption keys
                                                : 16; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x80000026
 * AMD extended CPU topology
 */

struct leaf_0x80000026_n {
        // eax
        u32     x2apic_id_shift                 :  5, // Bit width of this level (previous levels inclusive)
                                                : 24, // Reserved
                core_has_pwreff_ranking         :  1, // This core has a power efficiency ranking
                domain_has_hybrid_cores         :  1, // This domain level has hybrid (E, P) cores
                domain_core_count_asymm         :  1; // The 'Core' domain has asymmetric cores count
        // ebx
        u32     domain_lcpus_count              : 16, // Number of logical CPUs at this domain instance
                core_pwreff_ranking             :  8, // This core's static power efficiency ranking
                core_native_model_id            :  4, // This core's native model ID
                core_type                       :  4; // This core's type
        // ecx
        u32     domain_level                    :  8, // This domain level (subleaf ID)
                domain_type                     :  8, // This domain type
                                                : 16; // Reserved
        // edx
        u32     x2apic_id                       : 32; // x2APIC ID of current logical CPU
};

#define LEAF_0x80000026_SUBLEAF_N_FIRST         0
#define LEAF_0x80000026_SUBLEAF_N_LAST          3

/*
 * Leaf 0x80860000
 * Maximum Transmeta leaf + CPU vendor string
 */

struct leaf_0x80860000_0 {
        // eax
        u32     max_tra_leaf                    : 32; // Maximum Transmeta leaf
        // ebx
        u32     cpu_vendorid_0                  : 32; // Transmeta vendor ID string bytes 0 - 3
        // ecx
        u32     cpu_vendorid_2                  : 32; // Transmeta vendor ID string bytes 8 - 11
        // edx
        u32     cpu_vendorid_1                  : 32; // Transmeta vendor ID string bytes 4 - 7
};

/*
 * Leaf 0x80860001
 * Transmeta extended CPU features
 */

struct leaf_0x80860001_0 {
        // eax
        u32     stepping                        :  4, // Stepping ID
                base_model                      :  4, // Base CPU model ID
                base_family_id                  :  4, // Base CPU family ID
                cpu_type                        :  2, // CPU type
                                                : 18; // Reserved
        // ebx
        u32     cpu_rev_mask_minor              :  8, // CPU revision ID, mask minor
                cpu_rev_mask_major              :  8, // CPU revision ID, mask major
                cpu_rev_minor                   :  8, // CPU revision ID, minor
                cpu_rev_major                   :  8; // CPU revision ID, major
        // ecx
        u32     cpu_base_mhz                    : 32; // CPU nominal frequency, in MHz
        // edx
        u32     recovery                        :  1, // Recovery CMS is active (after bad flush)
                longrun                         :  1, // LongRun power management capabilities
                                                :  1, // Reserved
                lrti                            :  1, // LongRun Table Interface
                                                : 28; // Reserved
};

/*
 * Leaf 0x80860002
 * Transmeta CMS (Code Morphing Software)
 */

struct leaf_0x80860002_0 {
        // eax
        u32     cpu_rev_id                      : 32; // CPU revision ID
        // ebx
        u32     cms_rev_mask_2                  :  8, // CMS revision ID, mask component 2
                cms_rev_mask_1                  :  8, // CMS revision ID, mask component 1
                cms_rev_minor                   :  8, // CMS revision ID, minor
                cms_rev_major                   :  8; // CMS revision ID, major
        // ecx
        u32     cms_rev_mask_3                  : 32; // CMS revision ID, mask component 3
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0x80860003
 * Transmeta CPU information string, bytes 0 - 15
 */

struct leaf_0x80860003_0 {
        // eax
        u32     cpu_info_0                      : 32; // CPU info string bytes 0 - 3
        // ebx
        u32     cpu_info_1                      : 32; // CPU info string bytes 4 - 7
        // ecx
        u32     cpu_info_2                      : 32; // CPU info string bytes 8 - 11
        // edx
        u32     cpu_info_3                      : 32; // CPU info string bytes 12 - 15
};

/*
 * Leaf 0x80860004
 * Transmeta CPU information string, bytes 16 - 31
 */

struct leaf_0x80860004_0 {
        // eax
        u32     cpu_info_4                      : 32; // CPU info string bytes 16 - 19
        // ebx
        u32     cpu_info_5                      : 32; // CPU info string bytes 20 - 23
        // ecx
        u32     cpu_info_6                      : 32; // CPU info string bytes 24 - 27
        // edx
        u32     cpu_info_7                      : 32; // CPU info string bytes 28 - 31
};

/*
 * Leaf 0x80860005
 * Transmeta CPU information string, bytes 32 - 47
 */

struct leaf_0x80860005_0 {
        // eax
        u32     cpu_info_8                      : 32; // CPU info string bytes 32 - 35
        // ebx
        u32     cpu_info_9                      : 32; // CPU info string bytes 36 - 39
        // ecx
        u32     cpu_info_10                     : 32; // CPU info string bytes 40 - 43
        // edx
        u32     cpu_info_11                     : 32; // CPU info string bytes 44 - 47
};

/*
 * Leaf 0x80860006
 * Transmeta CPU information string, bytes 48 - 63
 */

struct leaf_0x80860006_0 {
        // eax
        u32     cpu_info_12                     : 32; // CPU info string bytes 48 - 51
        // ebx
        u32     cpu_info_13                     : 32; // CPU info string bytes 52 - 55
        // ecx
        u32     cpu_info_14                     : 32; // CPU info string bytes 56 - 59
        // edx
        u32     cpu_info_15                     : 32; // CPU info string bytes 60 - 63
};

/*
 * Leaf 0x80860007
 * Transmeta live CPU information
 */

struct leaf_0x80860007_0 {
        // eax
        u32     cpu_cur_mhz                     : 32; // Current CPU frequency, in MHz
        // ebx
        u32     cpu_cur_voltage                 : 32; // Current CPU voltage, in millivolts
        // ecx
        u32     cpu_cur_perf_pctg               : 32; // Current CPU performance percentage, 0 - 100
        // edx
        u32     cpu_cur_gate_delay              : 32; // Current CPU gate delay, in femtoseconds
};

/*
 * Leaf 0xc0000000
 * Maximum Centaur/Zhaoxin leaf
 */

struct leaf_0xc0000000_0 {
        // eax
        u32     max_cntr_leaf                   : 32; // Maximum Centaur/Zhaoxin leaf
        // ebx
        u32                                     : 32; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32                                     : 32; // Reserved
};

/*
 * Leaf 0xc0000001
 * Centaur/Zhaoxin extended CPU features
 */

struct leaf_0xc0000001_0 {
        // eax
        u32                                     : 32; // Reserved
        // ebx
        u32                                     : 32; // Reserved
        // ecx
        u32                                     : 32; // Reserved
        // edx
        u32     ccs_sm2                         :  1, // CCS SM2 instructions
                ccs_sm2_en                      :  1, // CCS SM2 enabled
                rng                             :  1, // Random Number Generator
                rng_en                          :  1, // RNG enabled
                ccs_sm3_sm4                     :  1, // CCS SM3 and SM4 instructions
                ccs_sm3_sm4_en                  :  1, // CCS SM3/SM4 enabled
                ace                             :  1, // Advanced Cryptography Engine
                ace_en                          :  1, // ACE enabled
                ace2                            :  1, // Advanced Cryptography Engine v2
                ace2_en                         :  1, // ACE v2 enabled
                phe                             :  1, // PadLock Hash Engine
                phe_en                          :  1, // PHE enabled
                pmm                             :  1, // PadLock Montgomery Multiplier
                pmm_en                          :  1, // PMM enabled
                                                :  2, // Reserved
                parallax                        :  1, // Parallax auto adjust processor voltage
                parallax_en                     :  1, // Parallax enabled
                                                :  2, // Reserved
                tm3                             :  1, // Thermal Monitor v3
                tm3_en                          :  1, // TM v3 enabled
                                                :  3, // Reserved
                phe2                            :  1, // PadLock Hash Engine v2 (SHA384/SHA512)
                phe2_en                         :  1, // PHE v2 enabled
                rsa                             :  1, // RSA instructions (XMODEXP/MONTMUL2)
                rsa_en                          :  1, // RSA instructions enabled
                                                :  3; // Reserved
};

#endif /* _ASM_X86_CPUID_LEAF_TYPES */