[BACK]Return to specialreg.h CVS log [TXT][DIR] Up to [local] / sys / arch / i386 / include

Annotation of sys/arch/i386/include/specialreg.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: specialreg.h,v 1.31 2007/05/29 21:01:56 tedu Exp $    */
        !             2: /*     $NetBSD: specialreg.h,v 1.7 1994/10/27 04:16:26 cgd Exp $       */
        !             3:
        !             4: /*-
        !             5:  * Copyright (c) 1991 The Regents of the University of California.
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * Redistribution and use in source and binary forms, with or without
        !             9:  * modification, are permitted provided that the following conditions
        !            10:  * are met:
        !            11:  * 1. Redistributions of source code must retain the above copyright
        !            12:  *    notice, this list of conditions and the following disclaimer.
        !            13:  * 2. Redistributions in binary form must reproduce the above copyright
        !            14:  *    notice, this list of conditions and the following disclaimer in the
        !            15:  *    documentation and/or other materials provided with the distribution.
        !            16:  * 3. Neither the name of the University nor the names of its contributors
        !            17:  *    may be used to endorse or promote products derived from this software
        !            18:  *    without specific prior written permission.
        !            19:  *
        !            20:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            21:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            22:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            23:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            24:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            25:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            26:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            27:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            28:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            29:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            30:  * SUCH DAMAGE.
        !            31:  *
        !            32:  *     @(#)specialreg.h        7.1 (Berkeley) 5/9/91
        !            33:  */
        !            34:
        !            35: /*
        !            36:  * Bits in 386 special registers:
        !            37:  */
        !            38: #define        CR0_PE  0x00000001      /* Protected mode Enable */
        !            39: #define        CR0_MP  0x00000002      /* "Math" Present (NPX or NPX emulator) */
        !            40: #define        CR0_EM  0x00000004      /* EMulate non-NPX coproc. (trap ESC only) */
        !            41: #define        CR0_TS  0x00000008      /* Task Switched (if MP, trap ESC and WAIT) */
        !            42: #define        CR0_ET  0x00000010      /* Extension Type (387 (if set) vs 287) */
        !            43: #define        CR0_PG  0x80000000      /* PaGing enable */
        !            44:
        !            45: /*
        !            46:  * Bits in 486 special registers:
        !            47:  */
        !            48: #define CR0_NE 0x00000020      /* Numeric Error enable (EX16 vs IRQ13) */
        !            49: #define CR0_WP 0x00010000      /* Write Protect (honor PG_RW in all modes) */
        !            50: #define CR0_AM 0x00040000      /* Alignment Mask (set to enable AC flag) */
        !            51: #define        CR0_NW  0x20000000      /* Not Write-through */
        !            52: #define        CR0_CD  0x40000000      /* Cache Disable */
        !            53:
        !            54: /*
        !            55:  * Cyrix 486 DLC special registers, accessable as IO ports.
        !            56:  */
        !            57: #define CCR0   0xc0            /* configuration control register 0 */
        !            58: #define CCR0_NC0       0x01    /* first 64K of each 1M memory region is non-cacheable */
        !            59: #define CCR0_NC1       0x02    /* 640K-1M region is non-cacheable */
        !            60: #define CCR0_A20M      0x04    /* enables A20M# input pin */
        !            61: #define CCR0_KEN       0x08    /* enables KEN# input pin */
        !            62: #define CCR0_FLUSH     0x10    /* enables FLUSH# input pin */
        !            63: #define CCR0_BARB      0x20    /* flushes internal cache when entering hold state */
        !            64: #define CCR0_CO                0x40    /* cache org: 1=direct mapped, 0=2x set assoc */
        !            65: #define CCR0_SUSPEND   0x80    /* enables SUSP# and SUSPA# pins */
        !            66:
        !            67: #define CCR1   0xc1            /* configuration control register 1 */
        !            68: #define CCR1_RPL       0x01    /* enables RPLSET and RPLVAL# pins */
        !            69: /* the remaining 7 bits of this register are reserved */
        !            70:
        !            71: /*
        !            72:  * bits in the pentiums %cr4 register:
        !            73:  */
        !            74:
        !            75: #define CR4_VME        0x00000001      /* virtual 8086 mode extension enable */
        !            76: #define CR4_PVI 0x00000002     /* protected mode virtual interrupt enable */
        !            77: #define CR4_TSD 0x00000004     /* restrict RDTSC instruction to cpl 0 only */
        !            78: #define CR4_DE 0x00000008      /* debugging extension */
        !            79: #define CR4_PSE        0x00000010      /* large (4MB) page size enable */
        !            80: #define CR4_PAE 0x00000020     /* physical address extension enable */
        !            81: #define CR4_MCE        0x00000040      /* machine check enable */
        !            82: #define CR4_PGE        0x00000080      /* page global enable */
        !            83: #define CR4_PCE        0x00000100      /* enable RDPMC instruction for all cpls */
        !            84: #define CR4_OSFXSR     0x00000200      /* enable SSE instructions (P6 & later) */
        !            85: #define CR4_OSXMMEXCPT 0x00000400      /* enable SSE instructions (P6 & later) */
        !            86:
        !            87: /*
        !            88:  * CPUID "features" (and "extended features") bits:
        !            89:  */
        !            90:
        !            91: #define CPUID_FPU      0x00000001      /* processor has an FPU? */
        !            92: #define CPUID_VME      0x00000002      /* has virtual mode (%cr4's VME/PVI) */
        !            93: #define CPUID_DE       0x00000004      /* has debugging extension */
        !            94: #define CPUID_PSE      0x00000008      /* has 4MB page size extension */
        !            95: #define CPUID_TSC      0x00000010      /* has time stamp counter */
        !            96: #define CPUID_MSR      0x00000020      /* has mode specific registers */
        !            97: #define CPUID_PAE      0x00000040      /* has phys address extension */
        !            98: #define CPUID_MCE      0x00000080      /* has machine check exception */
        !            99: #define CPUID_CX8      0x00000100      /* has CMPXCHG8B instruction */
        !           100: #define CPUID_APIC     0x00000200      /* has enabled APIC */
        !           101: #define CPUID_SYS1     0x00000400      /* has SYSCALL/SYSRET inst. (Cyrix) */
        !           102: #define CPUID_SEP      0x00000800      /* has SYSCALL/SYSRET inst. (AMD/Intel) */
        !           103: #define CPUID_MTRR     0x00001000      /* has memory type range register */
        !           104: #define CPUID_PGE      0x00002000      /* has page global extension */
        !           105: #define CPUID_MCA      0x00004000      /* has machine check architecture */
        !           106: #define CPUID_CMOV     0x00008000      /* has CMOVcc instruction */
        !           107: #define CPUID_PAT      0x00010000      /* has page attribute table */
        !           108: #define CPUID_PSE36    0x00020000      /* has 36bit page size extension */
        !           109: #define CPUID_SER      0x00040000      /* has processor serial number */
        !           110: #define CPUID_CFLUSH   0x00080000      /* CFLUSH insn supported */
        !           111: #define CPUID_B20      0x00100000      /* reserved */
        !           112: #define CPUID_DS       0x00200000      /* Debug Store */
        !           113: #define CPUID_ACPI     0x00400000      /* ACPI performance modulation regs */
        !           114: #define CPUID_MMX      0x00800000      /* has MMX instructions */
        !           115: #define CPUID_FXSR     0x01000000      /* has FXRSTOR instruction (Intel) */
        !           116: #define CPUID_EMMX     0x01000000      /* has extended MMX (Cyrix; obsolete) */
        !           117: #define CPUID_SSE      0x02000000      /* has SSE instructions */
        !           118: #define CPUID_SSE2     0x04000000      /* has SSE2 instructions  */
        !           119: #define CPUID_SS       0x08000000      /* self-snoop */
        !           120: #define CPUID_HTT      0x10000000      /* hyper-threading tech */
        !           121: #define CPUID_TM       0x20000000      /* thermal monitor (TCC) */
        !           122: #define CPUID_B30      0x40000000      /* reserved */
        !           123: #define CPUID_SBF      0x80000000      /* signal break on FERR */
        !           124:
        !           125: /*
        !           126:  * Note: The 3DNOW flag does not really belong in this feature set since it is
        !           127:  * returned by the cpuid instruction when called with 0x80000001 in eax rather
        !           128:  * than 0x00000001, but cyrix3_cpu_setup() moves it to a reserved bit of the
        !           129:  * feature set for simplicity
        !           130:  */
        !           131: #define CPUID_3DNOW    0x40000000      /* has 3DNow! instructions (AMD) */
        !           132: #define CPUID_LONG     0x20000000      /* long mode (AMD64, ext cpuid) */
        !           133:
        !           134: #define CPUIDECX_SSE3  0x00000001      /* has SSE3 instructions */
        !           135: #define CPUIDECX_MWAIT 0x00000008      /* Monitor/Mwait */
        !           136: #define CPUIDECX_DSCPL 0x00000010      /* CPL Qualified Debug Store */
        !           137: #define CPUIDECX_VMX   0x00000020      /* Virtual Machine Extensions */
        !           138: #define CPUIDECX_EST   0x00000080      /* enhanced SpeedStep */
        !           139: #define CPUIDECX_TM2   0x00000100      /* thermal monitor 2 */
        !           140: #define CPUIDECX_CNXTID        0x00000400      /* Context ID */
        !           141: #define CPUIDECX_CX16  0x00002000      /* has CMPXCHG16B instruction */
        !           142: #define CPUIDECX_XTPR  0x00004000      /* xTPR Update Control */
        !           143:
        !           144: /*
        !           145:  * Model-specific registers for the i386 family
        !           146:  */
        !           147: #define MSR_P5_MC_ADDR         0x000
        !           148: #define MSR_P5_MC_TYPE         0x001
        !           149: #define MSR_TSC                        0x010
        !           150: #define        P5MSR_CTRSEL            0x011   /* P5 only (trap on P6) */
        !           151: #define        P5MSR_CTR0              0x012   /* P5 only (trap on P6) */
        !           152: #define        P5MSR_CTR1              0x013   /* P5 only (trap on P6) */
        !           153: #define MSR_APICBASE           0x01b
        !           154: #define MSR_EBL_CR_POWERON     0x02a
        !           155: #define MSR_EBC_FREQUENCY_ID   0x02c   /* Pentium 4 only */
        !           156: #define        MSR_TEST_CTL            0x033
        !           157: #define MSR_BIOS_UPDT_TRIG     0x079
        !           158: #define        MSR_BBL_CR_D0           0x088   /* PII+ only */
        !           159: #define        MSR_BBL_CR_D1           0x089   /* PII+ only */
        !           160: #define        MSR_BBL_CR_D2           0x08a   /* PII+ only */
        !           161: #define MSR_BIOS_SIGN          0x08b
        !           162: #define P6MSR_CTR0             0x0c1
        !           163: #define P6MSR_CTR1             0x0c2
        !           164: #define MSR_FSB_FREQ           0x0cd   /* Core Duo/Solo only */
        !           165: #define MSR_TEMPERATURE_TARGET 0x0ee
        !           166: #define MSR_TEMPERATURE_TARGET_LOW_BIT 0x40000000
        !           167: #define MSR_MTRRcap            0x0fe
        !           168: #define        MSR_BBL_CR_ADDR         0x116   /* PII+ only */
        !           169: #define        MSR_BBL_CR_DECC         0x118   /* PII+ only */
        !           170: #define        MSR_BBL_CR_CTL          0x119   /* PII+ only */
        !           171: #define        MSR_BBL_CR_TRIG         0x11a   /* PII+ only */
        !           172: #define        MSR_BBL_CR_BUSY         0x11b   /* PII+ only */
        !           173: #define        MSR_BBL_CR_CTR3         0x11e   /* PII+ only */
        !           174: #define MSR_SYSENTER_CS                0x174
        !           175: #define MSR_SYSENTER_ESP       0x175
        !           176: #define MSR_SYSENTER_EIP       0x176
        !           177: #define MSR_MCG_CAP            0x179
        !           178: #define MSR_MCG_STATUS         0x17a
        !           179: #define MSR_MCG_CTL            0x17b
        !           180: #define P6MSR_CTRSEL0          0x186
        !           181: #define P6MSR_CTRSEL1          0x187
        !           182: #define MSR_PERF_STATUS                0x198   /* Pentium M */
        !           183: #define MSR_PERF_CTL           0x199   /* Pentium M */
        !           184: #define MSR_THERM_CONTROL      0x19a
        !           185: #define MSR_THERM_INTERRUPT    0x19b
        !           186: #define MSR_THERM_STATUS       0x19c
        !           187: #define MSR_THERM_STATUS_VALID_BIT     0x80000000
        !           188: #define MSR_THERM_STATUS_TEMP(msr)     ((msr >> 16) & 0x7f)
        !           189: #define MSR_THERM2_CTL         0x19d   /* Pentium M */
        !           190: #define MSR_MISC_ENABLE                0x1a0
        !           191: #define MSR_DEBUGCTLMSR                0x1d9
        !           192: #define MSR_LASTBRANCHFROMIP   0x1db
        !           193: #define MSR_LASTBRANCHTOIP     0x1dc
        !           194: #define MSR_LASTINTFROMIP      0x1dd
        !           195: #define MSR_LASTINTTOIP                0x1de
        !           196: #define MSR_ROB_CR_BKUPTMPDR6  0x1e0
        !           197: #define MSR_MTRRVarBase                0x200
        !           198: #define        MSR_MTRRphysMask0       0x201
        !           199: #define        MSR_MTRRphysBase1       0x202
        !           200: #define        MSR_MTRRphysMask1       0x203
        !           201: #define        MSR_MTRRphysBase2       0x204
        !           202: #define        MSR_MTRRphysMask2       0x205
        !           203: #define        MSR_MTRRphysBase3       0x206
        !           204: #define        MSR_MTRRphysMask3       0x207
        !           205: #define        MSR_MTRRphysBase4       0x208
        !           206: #define        MSR_MTRRphysMask4       0x209
        !           207: #define        MSR_MTRRphysBase5       0x20a
        !           208: #define        MSR_MTRRphysMask5       0x20b
        !           209: #define        MSR_MTRRphysBase6       0x20c
        !           210: #define        MSR_MTRRphysMask6       0x20d
        !           211: #define        MSR_MTRRphysBase7       0x20e
        !           212: #define        MSR_MTRRphysMask7       0x20f
        !           213: #define MSR_MTRR64kBase                0x250
        !           214: #define MSR_MTRR16kBase                0x258
        !           215: #define        MSR_MTRRfix16K_A0000    0x259
        !           216: #define MSR_MTRR4kBase         0x268
        !           217: #define        MSR_MTRRfix4K_C8000     0x269
        !           218: #define        MSR_MTRRfix4K_D0000     0x26a
        !           219: #define        MSR_MTRRfix4K_D8000     0x26b
        !           220: #define        MSR_MTRRfix4K_E0000     0x26c
        !           221: #define        MSR_MTRRfix4K_E8000     0x26d
        !           222: #define        MSR_MTRRfix4K_F0000     0x26e
        !           223: #define        MSR_MTRRfix4K_F8000     0x26f
        !           224: #define MSR_MTRRdefType                0x2ff
        !           225: #define MSR_MC0_CTL            0x400
        !           226: #define MSR_MC0_STATUS         0x401
        !           227: #define MSR_MC0_ADDR           0x402
        !           228: #define MSR_MC0_MISC           0x403
        !           229: #define MSR_MC1_CTL            0x404
        !           230: #define MSR_MC1_STATUS         0x405
        !           231: #define MSR_MC1_ADDR           0x406
        !           232: #define MSR_MC1_MISC           0x407
        !           233: #define MSR_MC2_CTL            0x408
        !           234: #define MSR_MC2_STATUS         0x409
        !           235: #define MSR_MC2_ADDR           0x40a
        !           236: #define MSR_MC2_MISC           0x40b
        !           237: #define MSR_MC4_CTL            0x40c
        !           238: #define MSR_MC4_STATUS         0x40d
        !           239: #define MSR_MC4_ADDR           0x40e
        !           240: #define MSR_MC4_MISC           0x40f
        !           241: #define MSR_MC3_CTL            0x410
        !           242: #define MSR_MC3_STATUS         0x411
        !           243: #define MSR_MC3_ADDR           0x412
        !           244: #define MSR_MC3_MISC           0x413
        !           245:
        !           246: /* AMD MSRs */
        !           247: #define MSR_K6_EPMR            0xc0000086
        !           248:
        !           249: /*
        !           250:  * AMD K8 (Opteron) MSRs.
        !           251:  */
        !           252: #define        MSR_SYSCFG      0xc0000010
        !           253:
        !           254: #define MSR_EFER       0xc0000080              /* Extended feature enable */
        !           255: #define        EFER_SCE                0x00000001      /* SYSCALL extension */
        !           256: #define        EFER_LME                0x00000100      /* Long Mode Active */
        !           257: #define                EFER_LMA                0x00000400      /* Long Mode Enabled */
        !           258: #define        EFER_NXE                0x00000800      /* No-Execute Enabled */
        !           259:
        !           260: #define MSR_STAR       0xc0000081              /* 32 bit syscall gate addr */
        !           261: #define MSR_LSTAR      0xc0000082              /* 64 bit syscall gate addr */
        !           262: #define MSR_CSTAR      0xc0000083              /* compat syscall gate addr */
        !           263: #define MSR_SFMASK     0xc0000084              /* flags to clear on syscall */
        !           264:
        !           265: #define MSR_FSBASE     0xc0000100              /* 64bit offset for fs: */
        !           266: #define MSR_GSBASE     0xc0000101              /* 64bit offset for gs: */
        !           267: #define MSR_KERNELGSBASE 0xc0000102            /* storage for swapgs ins */
        !           268:
        !           269: /*
        !           270:  * These require a 'passcode' for access.  See cpufunc.h.
        !           271:  */
        !           272: #define        MSR_HWCR        0xc0010015
        !           273: #define                HWCR_FFDIS              0x00000040
        !           274:
        !           275: #define        MSR_NB_CFG      0xc001001f
        !           276: #define                NB_CFG_DISIOREQLOCK     0x0000000000000004ULL
        !           277: #define                NB_CFG_DISDATMSK        0x0000001000000000ULL
        !           278:
        !           279: #define        MSR_LS_CFG      0xc0011020
        !           280: #define                LS_CFG_DIS_LS2_SQUISH   0x02000000
        !           281:
        !           282: #define        MSR_IC_CFG      0xc0011021
        !           283: #define                IC_CFG_DIS_SEQ_PREFETCH 0x00000800
        !           284:
        !           285: #define        MSR_DC_CFG      0xc0011022
        !           286: #define                DC_CFG_DIS_CNV_WC_SSO   0x00000004
        !           287: #define                DC_CFG_DIS_SMC_CHK_BUF  0x00000400
        !           288:
        !           289: #define        MSR_BU_CFG      0xc0011023
        !           290: #define                BU_CFG_THRL2IDXCMPDIS   0x0000080000000000ULL
        !           291: #define                BU_CFG_WBPFSMCCHKDIS    0x0000200000000000ULL
        !           292: #define                BU_CFG_WBENHWSBDIS      0x0001000000000000ULL
        !           293:
        !           294: /*
        !           295:  * Constants related to MTRRs
        !           296:  */
        !           297: #define MTRR_N64K              8       /* numbers of fixed-size entries */
        !           298: #define MTRR_N16K              16
        !           299: #define MTRR_N4K               64
        !           300:
        !           301: /*
        !           302:  * the following four 3-byte registers control the non-cacheable regions.
        !           303:  * These registers must be written as three separate bytes.
        !           304:  *
        !           305:  * NCRx+0: A31-A24 of starting address
        !           306:  * NCRx+1: A23-A16 of starting address
        !           307:  * NCRx+2: A15-A12 of starting address | NCR_SIZE_xx.
        !           308:  *
        !           309:  * The non-cacheable region's starting address must be aligned to the
        !           310:  * size indicated by the NCR_SIZE_xx field.
        !           311:  */
        !           312: #define NCR1   0xc4
        !           313: #define NCR2   0xc7
        !           314: #define NCR3   0xca
        !           315: #define NCR4   0xcd
        !           316:
        !           317: #define NCR_SIZE_0K    0
        !           318: #define NCR_SIZE_4K    1
        !           319: #define NCR_SIZE_8K    2
        !           320: #define NCR_SIZE_16K   3
        !           321: #define NCR_SIZE_32K   4
        !           322: #define NCR_SIZE_64K   5
        !           323: #define NCR_SIZE_128K  6
        !           324: #define NCR_SIZE_256K  7
        !           325: #define NCR_SIZE_512K  8
        !           326: #define NCR_SIZE_1M    9
        !           327: #define NCR_SIZE_2M    10
        !           328: #define NCR_SIZE_4M    11
        !           329: #define NCR_SIZE_8M    12
        !           330: #define NCR_SIZE_16M   13
        !           331: #define NCR_SIZE_32M   14
        !           332: #define NCR_SIZE_4G    15
        !           333:
        !           334: /*
        !           335:  * Performance monitor events.
        !           336:  *
        !           337:  * Note that 586-class and 686-class CPUs have different performance
        !           338:  * monitors available, and they are accessed differently:
        !           339:  *
        !           340:  *     686-class: `rdpmc' instruction
        !           341:  *     586-class: `rdmsr' instruction, CESR MSR
        !           342:  *
        !           343:  * The descriptions of these events are too lenghy to include here.
        !           344:  * See Appendix A of "Intel Architecture Software Developer's
        !           345:  * Manual, Volume 3: System Programming" for more information.
        !           346:  */
        !           347:
        !           348: /*
        !           349:  * 586-class CESR MSR format.  Lower 16 bits is CTR0, upper 16 bits
        !           350:  * is CTR1.
        !           351:  */
        !           352:
        !           353: #define        PMC5_CESR_EVENT                 0x003f
        !           354: #define        PMC5_CESR_OS                    0x0040
        !           355: #define        PMC5_CESR_USR                   0x0080
        !           356: #define        PMC5_CESR_E                     0x0100
        !           357: #define        PMC5_CESR_P                     0x0200
        !           358:
        !           359: /*
        !           360:  * 686-class Event Selector MSR format.
        !           361:  */
        !           362:
        !           363: #define        PMC6_EVTSEL_EVENT               0x000000ff
        !           364: #define        PMC6_EVTSEL_UNIT                0x0000ff00
        !           365: #define        PMC6_EVTSEL_UNIT_SHIFT          8
        !           366: #define        PMC6_EVTSEL_USR                 (1 << 16)
        !           367: #define        PMC6_EVTSEL_OS                  (1 << 17)
        !           368: #define        PMC6_EVTSEL_E                   (1 << 18)
        !           369: #define        PMC6_EVTSEL_PC                  (1 << 19)
        !           370: #define        PMC6_EVTSEL_INT                 (1 << 20)
        !           371: #define        PMC6_EVTSEL_EN                  (1 << 22)       /* PerfEvtSel0 only */
        !           372: #define        PMC6_EVTSEL_INV                 (1 << 23)
        !           373: #define        PMC6_EVTSEL_COUNTER_MASK        0xff000000
        !           374: #define        PMC6_EVTSEL_COUNTER_MASK_SHIFT  24
        !           375:
        !           376: /* Data Cache Unit */
        !           377: #define        PMC6_DATA_MEM_REFS              0x43
        !           378: #define        PMC6_DCU_LINES_IN               0x45
        !           379: #define        PMC6_DCU_M_LINES_IN             0x46
        !           380: #define        PMC6_DCU_M_LINES_OUT            0x47
        !           381: #define        PMC6_DCU_MISS_OUTSTANDING       0x48
        !           382:
        !           383: /* Instruction Fetch Unit */
        !           384: #define        PMC6_IFU_IFETCH                 0x80
        !           385: #define        PMC6_IFU_IFETCH_MISS            0x81
        !           386: #define        PMC6_ITLB_MISS                  0x85
        !           387: #define        PMC6_IFU_MEM_STALL              0x86
        !           388: #define        PMC6_ILD_STALL                  0x87
        !           389:
        !           390: /* L2 Cache */
        !           391: #define        PMC6_L2_IFETCH                  0x28
        !           392: #define        PMC6_L2_LD                      0x29
        !           393: #define        PMC6_L2_ST                      0x2a
        !           394: #define        PMC6_L2_LINES_IN                0x24
        !           395: #define        PMC6_L2_LINES_OUT               0x26
        !           396: #define        PMC6_L2_M_LINES_INM             0x25
        !           397: #define        PMC6_L2_M_LINES_OUTM            0x27
        !           398: #define        PMC6_L2_RQSTS                   0x2e
        !           399: #define        PMC6_L2_ADS                     0x21
        !           400: #define        PMC6_L2_DBUS_BUSY               0x22
        !           401: #define        PMC6_L2_DBUS_BUSY_RD            0x23
        !           402:
        !           403: /* External Bus Logic */
        !           404: #define        PMC6_BUS_DRDY_CLOCKS            0x62
        !           405: #define        PMC6_BUS_LOCK_CLOCKS            0x63
        !           406: #define        PMC6_BUS_REQ_OUTSTANDING        0x60
        !           407: #define        PMC6_BUS_TRAN_BRD               0x65
        !           408: #define        PMC6_BUS_TRAN_RFO               0x66
        !           409: #define        PMC6_BUS_TRANS_WB               0x67
        !           410: #define        PMC6_BUS_TRAN_IFETCH            0x68
        !           411: #define        PMC6_BUS_TRAN_INVAL             0x69
        !           412: #define        PMC6_BUS_TRAN_PWR               0x6a
        !           413: #define        PMC6_BUS_TRANS_P                0x6b
        !           414: #define        PMC6_BUS_TRANS_IO               0x6c
        !           415: #define        PMC6_BUS_TRAN_DEF               0x6d
        !           416: #define        PMC6_BUS_TRAN_BURST             0x6e
        !           417: #define        PMC6_BUS_TRAN_ANY               0x70
        !           418: #define        PMC6_BUS_TRAN_MEM               0x6f
        !           419: #define        PMC6_BUS_DATA_RCV               0x64
        !           420: #define        PMC6_BUS_BNR_DRV                0x61
        !           421: #define        PMC6_BUS_HIT_DRV                0x7a
        !           422: #define        PMC6_BUS_HITM_DRDV              0x7b
        !           423: #define        PMC6_BUS_SNOOP_STALL            0x7e
        !           424:
        !           425: /* Floating Point Unit */
        !           426: #define        PMC6_FLOPS                      0xc1
        !           427: #define        PMC6_FP_COMP_OPS_EXE            0x10
        !           428: #define        PMC6_FP_ASSIST                  0x11
        !           429: #define        PMC6_MUL                        0x12
        !           430: #define        PMC6_DIV                        0x12
        !           431: #define        PMC6_CYCLES_DIV_BUSY            0x14
        !           432:
        !           433: /* Memory Ordering */
        !           434: #define        PMC6_LD_BLOCKS                  0x03
        !           435: #define        PMC6_SB_DRAINS                  0x04
        !           436: #define        PMC6_MISALIGN_MEM_REF           0x05
        !           437: #define        PMC6_EMON_KNI_PREF_DISPATCHED   0x07    /* P-III only */
        !           438: #define        PMC6_EMON_KNI_PREF_MISS         0x4b    /* P-III only */
        !           439:
        !           440: /* Instruction Decoding and Retirement */
        !           441: #define        PMC6_INST_RETIRED               0xc0
        !           442: #define        PMC6_UOPS_RETIRED               0xc2
        !           443: #define        PMC6_INST_DECODED               0xd0
        !           444: #define        PMC6_EMON_KNI_INST_RETIRED      0xd8
        !           445: #define        PMC6_EMON_KNI_COMP_INST_RET     0xd9
        !           446:
        !           447: /* Interrupts */
        !           448: #define        PMC6_HW_INT_RX                  0xc8
        !           449: #define        PMC6_CYCLES_INT_MASKED          0xc6
        !           450: #define        PMC6_CYCLES_INT_PENDING_AND_MASKED 0xc7
        !           451:
        !           452: /* Branches */
        !           453: #define        PMC6_BR_INST_RETIRED            0xc4
        !           454: #define        PMC6_BR_MISS_PRED_RETIRED       0xc5
        !           455: #define        PMC6_BR_TAKEN_RETIRED           0xc9
        !           456: #define        PMC6_BR_MISS_PRED_TAKEN_RET     0xca
        !           457: #define        PMC6_BR_INST_DECODED            0xe0
        !           458: #define        PMC6_BTB_MISSES                 0xe2
        !           459: #define        PMC6_BR_BOGUS                   0xe4
        !           460: #define        PMC6_BACLEARS                   0xe6
        !           461:
        !           462: /* Stalls */
        !           463: #define        PMC6_RESOURCE_STALLS            0xa2
        !           464: #define        PMC6_PARTIAL_RAT_STALLS         0xd2
        !           465:
        !           466: /* Segment Register Loads */
        !           467: #define        PMC6_SEGMENT_REG_LOADS          0x06
        !           468:
        !           469: /* Clocks */
        !           470: #define        PMC6_CPU_CLK_UNHALTED           0x79
        !           471:
        !           472: /* MMX Unit */
        !           473: #define        PMC6_MMX_INSTR_EXEC             0xb0    /* Celeron, P-II, P-IIX only */
        !           474: #define        PMC6_MMX_SAT_INSTR_EXEC         0xb1    /* P-II and P-III only */
        !           475: #define        PMC6_MMX_UOPS_EXEC              0xb2    /* P-II and P-III only */
        !           476: #define        PMC6_MMX_INSTR_TYPE_EXEC        0xb3    /* P-II and P-III only */
        !           477: #define        PMC6_FP_MMX_TRANS               0xcc    /* P-II and P-III only */
        !           478: #define        PMC6_MMX_ASSIST                 0xcd    /* P-II and P-III only */
        !           479: #define        PMC6_MMX_INSTR_RET              0xc3    /* P-II only */
        !           480:
        !           481: /* Segment Register Renaming */
        !           482: #define        PMC6_SEG_RENAME_STALLS          0xd4    /* P-II and P-III only */
        !           483: #define        PMC6_SEG_REG_RENAMES            0xd5    /* P-II and P-III only */
        !           484: #define        PMC6_RET_SEG_RENAMES            0xd6    /* P-II and P-III only */
        !           485:
        !           486: /* VIA C3 crypto featureset: for i386_has_xcrypt */
        !           487: #define C3_HAS_AES                     1       /* cpu has AES */
        !           488: #define C3_HAS_SHA                     2       /* cpu has SHA1 & SHA256 */
        !           489: #define C3_HAS_MM                      4       /* cpu has RSA instructions */
        !           490: #define C3_HAS_AESCTR                  8       /* cpu has AES-CTR instructions */
        !           491:
        !           492: /* Centaur Extended Feature flags */
        !           493: #define C3_CPUID_HAS_RNG               0x000004
        !           494: #define C3_CPUID_DO_RNG                        0x000008
        !           495: #define C3_CPUID_HAS_ACE               0x000040
        !           496: #define C3_CPUID_DO_ACE                        0x000080
        !           497: #define C3_CPUID_HAS_ACE2              0x000100
        !           498: #define C3_CPUID_DO_ACE2               0x000200
        !           499: #define C3_CPUID_HAS_PHE               0x000400
        !           500: #define C3_CPUID_DO_PHE                        0x000800
        !           501: #define C3_CPUID_HAS_PMM               0x001000
        !           502: #define C3_CPUID_DO_PMM                        0x002000
        !           503:
        !           504: /* VIA C3 xcrypt-* instruction context control options */
        !           505: #define        C3_CRYPT_CWLO_ROUND_M           0x0000000f
        !           506: #define        C3_CRYPT_CWLO_ALG_M             0x00000070
        !           507: #define        C3_CRYPT_CWLO_ALG_AES           0x00000000
        !           508: #define        C3_CRYPT_CWLO_KEYGEN_M          0x00000080
        !           509: #define        C3_CRYPT_CWLO_KEYGEN_HW         0x00000000
        !           510: #define        C3_CRYPT_CWLO_KEYGEN_SW         0x00000080
        !           511: #define        C3_CRYPT_CWLO_NORMAL            0x00000000
        !           512: #define        C3_CRYPT_CWLO_INTERMEDIATE      0x00000100
        !           513: #define        C3_CRYPT_CWLO_ENCRYPT           0x00000000
        !           514: #define        C3_CRYPT_CWLO_DECRYPT           0x00000200
        !           515: #define        C3_CRYPT_CWLO_KEY128            0x0000000a      /* 128bit, 10 rds */
        !           516: #define        C3_CRYPT_CWLO_KEY192            0x0000040c      /* 192bit, 12 rds */
        !           517: #define        C3_CRYPT_CWLO_KEY256            0x0000080e      /* 256bit, 15 rds */

CVSweb