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

Annotation of sys/arch/amd64/include/specialreg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: specialreg.h,v 1.11 2007/06/01 22:28:21 tedu Exp $    */
                      2: /*     $NetBSD: specialreg.h,v 1.1 2003/04/26 18:39:48 fvdl Exp $      */
                      3: /*     $NetBSD: x86/specialreg.h,v 1.2 2003/04/25 21:54:30 fvdl Exp $  */
                      4:
                      5: /*-
                      6:  * Copyright (c) 1991 The Regents of the University of California.
                      7:  * All rights reserved.
                      8:  *
                      9:  * Redistribution and use in source and binary forms, with or without
                     10:  * modification, are permitted provided that the following conditions
                     11:  * are met:
                     12:  * 1. Redistributions of source code must retain the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer.
                     14:  * 2. Redistributions in binary form must reproduce the above copyright
                     15:  *    notice, this list of conditions and the following disclaimer in the
                     16:  *    documentation and/or other materials provided with the distribution.
                     17:  * 3. Neither the name of the University nor the names of its contributors
                     18:  *    may be used to endorse or promote products derived from this software
                     19:  *    without specific prior written permission.
                     20:  *
                     21:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     22:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     23:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     24:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     25:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     26:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     27:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     28:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     29:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     30:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     31:  * SUCH DAMAGE.
                     32:  *
                     33:  *     @(#)specialreg.h        7.1 (Berkeley) 5/9/91
                     34:  */
                     35:
                     36: /*
                     37:  * Bits in 386 special registers:
                     38:  */
                     39: #define        CR0_PE  0x00000001      /* Protected mode Enable */
                     40: #define        CR0_MP  0x00000002      /* "Math" Present (NPX or NPX emulator) */
                     41: #define        CR0_EM  0x00000004      /* EMulate non-NPX coproc. (trap ESC only) */
                     42: #define        CR0_TS  0x00000008      /* Task Switched (if MP, trap ESC and WAIT) */
                     43: #define        CR0_ET  0x00000010      /* Extension Type (387 (if set) vs 287) */
                     44: #define        CR0_PG  0x80000000      /* PaGing enable */
                     45:
                     46: /*
                     47:  * Bits in 486 special registers:
                     48:  */
                     49: #define CR0_NE 0x00000020      /* Numeric Error enable (EX16 vs IRQ13) */
                     50: #define CR0_WP 0x00010000      /* Write Protect (honor PG_RW in all modes) */
                     51: #define CR0_AM 0x00040000      /* Alignment Mask (set to enable AC flag) */
                     52: #define        CR0_NW  0x20000000      /* Not Write-through */
                     53: #define        CR0_CD  0x40000000      /* Cache Disable */
                     54:
                     55: /*
                     56:  * Cyrix 486 DLC special registers, accessible as IO ports.
                     57:  */
                     58: #define CCR0   0xc0            /* configuration control register 0 */
                     59: #define CCR0_NC0       0x01    /* first 64K of each 1M memory region is non-cacheable */
                     60: #define CCR0_NC1       0x02    /* 640K-1M region is non-cacheable */
                     61: #define CCR0_A20M      0x04    /* enables A20M# input pin */
                     62: #define CCR0_KEN       0x08    /* enables KEN# input pin */
                     63: #define CCR0_FLUSH     0x10    /* enables FLUSH# input pin */
                     64: #define CCR0_BARB      0x20    /* flushes internal cache when entering hold state */
                     65: #define CCR0_CO                0x40    /* cache org: 1=direct mapped, 0=2x set assoc */
                     66: #define CCR0_SUSPEND   0x80    /* enables SUSP# and SUSPA# pins */
                     67:
                     68: #define CCR1   0xc1            /* configuration control register 1 */
                     69: #define CCR1_RPL       0x01    /* enables RPLSET and RPLVAL# pins */
                     70: /* the remaining 7 bits of this register are reserved */
                     71:
                     72: /*
                     73:  * bits in the pentiums %cr4 register:
                     74:  */
                     75:
                     76: #define CR4_VME        0x00000001      /* virtual 8086 mode extension enable */
                     77: #define CR4_PVI 0x00000002     /* protected mode virtual interrupt enable */
                     78: #define CR4_TSD 0x00000004     /* restrict RDTSC instruction to cpl 0 only */
                     79: #define CR4_DE 0x00000008      /* debugging extension */
                     80: #define CR4_PSE        0x00000010      /* large (4MB) page size enable */
                     81: #define CR4_PAE 0x00000020     /* physical address extension enable */
                     82: #define CR4_MCE        0x00000040      /* machine check enable */
                     83: #define CR4_PGE        0x00000080      /* page global enable */
                     84: #define CR4_PCE        0x00000100      /* enable RDPMC instruction for all cpls */
                     85: #define CR4_OSFXSR     0x00000200      /* enable fxsave/fxrestor and SSE */
                     86: #define CR4_OSXMMEXCPT 0x00000400      /* enable unmasked SSE exceptions */
                     87:
                     88: /*
                     89:  * CPUID "features" bits:
                     90:  */
                     91:
                     92: #define        CPUID_FPU       0x00000001      /* processor has an FPU? */
                     93: #define        CPUID_VME       0x00000002      /* has virtual mode (%cr4's VME/PVI) */
                     94: #define        CPUID_DE        0x00000004      /* has debugging extension */
                     95: #define        CPUID_PSE       0x00000008      /* has page 4MB page size extension */
                     96: #define        CPUID_TSC       0x00000010      /* has time stamp counter */
                     97: #define        CPUID_MSR       0x00000020      /* has mode specific registers */
                     98: #define        CPUID_PAE       0x00000040      /* has phys address extension */
                     99: #define        CPUID_MCE       0x00000080      /* has machine check exception */
                    100: #define        CPUID_CX8       0x00000100      /* has CMPXCHG8B instruction */
                    101: #define        CPUID_APIC      0x00000200      /* has enabled APIC */
                    102: #define        CPUID_B10       0x00000400      /* reserved, MTRR */
                    103: #define        CPUID_SEP       0x00000800      /* has SYSENTER/SYSEXIT extension */
                    104: #define        CPUID_MTRR      0x00001000      /* has memory type range register */
                    105: #define        CPUID_PGE       0x00002000      /* has page global extension */
                    106: #define        CPUID_MCA       0x00004000      /* has machine check architecture */
                    107: #define        CPUID_CMOV      0x00008000      /* has CMOVcc instruction */
                    108: #define        CPUID_PAT       0x00010000      /* Page Attribute Table */
                    109: #define        CPUID_PSE36     0x00020000      /* 36-bit PSE */
                    110: #define        CPUID_PN        0x00040000      /* processor serial number */
                    111: #define        CPUID_CFLUSH    0x00080000      /* CFLUSH insn supported */
                    112: #define        CPUID_B20       0x00100000      /* reserved */
                    113: #define        CPUID_DS        0x00200000      /* Debug Store */
                    114: #define        CPUID_ACPI      0x00400000      /* ACPI performance modulation regs */
                    115: #define        CPUID_MMX       0x00800000      /* MMX supported */
                    116: #define        CPUID_FXSR      0x01000000      /* FP/MMX save/restore */
                    117: #define        CPUID_SSE       0x02000000      /* streaming SIMD extensions */
                    118: #define        CPUID_SSE2      0x04000000      /* streaming SIMD extensions #2 */
                    119: #define        CPUID_SS        0x08000000      /* self-snoop */
                    120: #define        CPUID_HTT       0x10000000      /* Hyper-Threading Technology */
                    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: #define        CPUIDECX_SSE3   0x00000001      /* streaming SIMD extensions #3 */
                    126: #define CPUIDECX_MWAIT 0x00000008      /* Monitor/Mwait */
                    127: #define CPUIDECX_DSCPL 0x00000010      /* CPL Qualified Debug Store */
                    128: #define CPUIDECX_VMX   0x00000020      /* Virtual Machine Extensions */
                    129: #define CPUIDECX_EST   0x00000080      /* enhanced SpeedStep */
                    130: #define CPUIDECX_TM2   0x00000100      /* thermal monitor 2 */
                    131: #define CPUIDECX_CNXTID        0x00000400      /* Context ID */
                    132: #define CPUIDECX_CX16  0x00002000      /* has CMPXCHG16B instruction */
                    133: #define CPUIDECX_XTPR  0x00004000      /* xTPR Update Control */
                    134:
                    135: /*
                    136:  * AMD/VIA processor specific flags.
                    137:  */
                    138:
                    139: #define CPUID_MPC      0x00080000      /* Multiprocessing Capable */
                    140: #define        CPUID_NXE       0x00100000      /* No-Execute Extension */
                    141: #define CPUID_MMXX     0x00400000      /* AMD MMX Extensions */
                    142: #define        CPUID_FFXSR     0x02000000      /* fast FP/MMX save/restore */
                    143: #define CPUID_LONG     0x20000000      /* long mode */
                    144: #define CPUID_3DNOW2   0x40000000      /* 3DNow! Instruction Extension */
                    145: #define CPUID_3DNOW    0x80000000      /* 3DNow! Instructions */
                    146:
                    147: #define CPUID2FAMILY(cpuid)    (((cpuid) >> 8) & 15)
                    148: #define CPUID2MODEL(cpuid)     (((cpuid) >> 4) & 15)
                    149: #define CPUID2STEPPING(cpuid)  ((cpuid) & 15)
                    150:
                    151: #define CPUID(code, eax, ebx, ecx, edx)                         \
                    152:        __asm("cpuid"                                           \
                    153:            : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)    \
                    154:            : "a" (code));
                    155:
                    156:
                    157: /*
                    158:  * Model-specific registers for the i386 family
                    159:  */
                    160: #define MSR_P5_MC_ADDR         0x000   /* P5 only */
                    161: #define MSR_P5_MC_TYPE         0x001   /* P5 only */
                    162: #define MSR_TSC                        0x010
                    163: #define        MSR_CESR                0x011   /* P5 only (trap on P6) */
                    164: #define        MSR_CTR0                0x012   /* P5 only (trap on P6) */
                    165: #define        MSR_CTR1                0x013   /* P5 only (trap on P6) */
                    166: #define MSR_APICBASE           0x01b
                    167: #define MSR_EBL_CR_POWERON     0x02a
                    168: #define MSR_EBC_FREQUENCY_ID    0x02c   /* Pentium 4 only */
                    169: #define        MSR_TEST_CTL            0x033
                    170: #define MSR_BIOS_UPDT_TRIG     0x079
                    171: #define        MSR_BBL_CR_D0           0x088   /* PII+ only */
                    172: #define        MSR_BBL_CR_D1           0x089   /* PII+ only */
                    173: #define        MSR_BBL_CR_D2           0x08a   /* PII+ only */
                    174: #define MSR_BIOS_SIGN          0x08b
                    175: #define MSR_PERFCTR0           0x0c1
                    176: #define MSR_PERFCTR1           0x0c2
                    177: #define MSR_FSB_FREQ           0x0cd   /* Core Duo/Solo only */
                    178: /* not documented anywhere, see intelcore_update_sensor() */
                    179: #define MSR_TEMPERATURE_TARGET 0x0ee
                    180: #define MSR_TEMPERATURE_TARGET_LOW_BIT 0x40000000
                    181: #define MSR_MTRRcap            0x0fe
                    182: #define        MSR_BBL_CR_ADDR         0x116   /* PII+ only */
                    183: #define        MSR_BBL_CR_DECC         0x118   /* PII+ only */
                    184: #define        MSR_BBL_CR_CTL          0x119   /* PII+ only */
                    185: #define        MSR_BBL_CR_TRIG         0x11a   /* PII+ only */
                    186: #define        MSR_BBL_CR_BUSY         0x11b   /* PII+ only */
                    187: #define        MSR_BBL_CR_CTR3         0x11e   /* PII+ only */
                    188: #define        MSR_SYSENTER_CS         0x174   /* PII+ only */
                    189: #define        MSR_SYSENTER_ESP        0x175   /* PII+ only */
                    190: #define        MSR_SYSENTER_EIP        0x176   /* PII+ only */
                    191: #define MSR_MCG_CAP            0x179
                    192: #define MSR_MCG_STATUS         0x17a
                    193: #define MSR_MCG_CTL            0x17b
                    194: #define MSR_EVNTSEL0           0x186
                    195: #define MSR_EVNTSEL1           0x187
                    196: #define MSR_PERF_STATUS                0x198   /* Pentium M */
                    197: #define MSR_PERF_CTL           0x199   /* Pentium M */
                    198: #define MSR_THERM_CONTROL      0x19a
                    199: #define MSR_THERM_INTERRUPT    0x19b
                    200: #define MSR_THERM_STATUS       0x19c
                    201: #define MSR_THERM_STATUS_VALID_BIT     0x80000000
                    202: #define        MSR_THERM_STATUS_TEMP(msr)      ((msr >> 16) & 0x7f)
                    203: #define MSR_THERM2_CTL         0x19d   /* Pentium M */
                    204: #define MSR_DEBUGCTLMSR                0x1d9
                    205: #define MSR_LASTBRANCHFROMIP   0x1db
                    206: #define MSR_LASTBRANCHTOIP     0x1dc
                    207: #define MSR_LASTINTFROMIP      0x1dd
                    208: #define MSR_LASTINTTOIP                0x1de
                    209: #define MSR_ROB_CR_BKUPTMPDR6  0x1e0
                    210: #define        MSR_MTRRphysBase0       0x200
                    211: #define        MSR_MTRRphysMask0       0x201
                    212: #define        MSR_MTRRphysBase1       0x202
                    213: #define        MSR_MTRRphysMask1       0x203
                    214: #define        MSR_MTRRphysBase2       0x204
                    215: #define        MSR_MTRRphysMask2       0x205
                    216: #define        MSR_MTRRphysBase3       0x206
                    217: #define        MSR_MTRRphysMask3       0x207
                    218: #define        MSR_MTRRphysBase4       0x208
                    219: #define        MSR_MTRRphysMask4       0x209
                    220: #define        MSR_MTRRphysBase5       0x20a
                    221: #define        MSR_MTRRphysMask5       0x20b
                    222: #define        MSR_MTRRphysBase6       0x20c
                    223: #define        MSR_MTRRphysMask6       0x20d
                    224: #define        MSR_MTRRphysBase7       0x20e
                    225: #define        MSR_MTRRphysMask7       0x20f
                    226: #define        MSR_MTRRfix64K_00000    0x250
                    227: #define        MSR_MTRRfix16K_80000    0x258
                    228: #define        MSR_MTRRfix16K_A0000    0x259
                    229: #define        MSR_MTRRfix4K_C0000     0x268
                    230: #define        MSR_MTRRfix4K_C8000     0x269
                    231: #define        MSR_MTRRfix4K_D0000     0x26a
                    232: #define        MSR_MTRRfix4K_D8000     0x26b
                    233: #define        MSR_MTRRfix4K_E0000     0x26c
                    234: #define        MSR_MTRRfix4K_E8000     0x26d
                    235: #define        MSR_MTRRfix4K_F0000     0x26e
                    236: #define        MSR_MTRRfix4K_F8000     0x26f
                    237: #define MSR_MTRRdefType                0x2ff
                    238: #define MSR_MC0_CTL            0x400
                    239: #define MSR_MC0_STATUS         0x401
                    240: #define MSR_MC0_ADDR           0x402
                    241: #define MSR_MC0_MISC           0x403
                    242: #define MSR_MC1_CTL            0x404
                    243: #define MSR_MC1_STATUS         0x405
                    244: #define MSR_MC1_ADDR           0x406
                    245: #define MSR_MC1_MISC           0x407
                    246: #define MSR_MC2_CTL            0x408
                    247: #define MSR_MC2_STATUS         0x409
                    248: #define MSR_MC2_ADDR           0x40a
                    249: #define MSR_MC2_MISC           0x40b
                    250: #define MSR_MC4_CTL            0x40c
                    251: #define MSR_MC4_STATUS         0x40d
                    252: #define MSR_MC4_ADDR           0x40e
                    253: #define MSR_MC4_MISC           0x40f
                    254: #define MSR_MC3_CTL            0x410
                    255: #define MSR_MC3_STATUS         0x411
                    256: #define MSR_MC3_ADDR           0x412
                    257: #define MSR_MC3_MISC           0x413
                    258:
                    259: /*
                    260:  * AMD K6/K7 MSRs.
                    261:  */
                    262: #define        MSR_K6_UWCCR            0xc0000085
                    263: #define        MSR_K7_EVNTSEL0         0xc0010000
                    264: #define        MSR_K7_EVNTSEL1         0xc0010001
                    265: #define        MSR_K7_EVNTSEL2         0xc0010002
                    266: #define        MSR_K7_EVNTSEL3         0xc0010003
                    267: #define        MSR_K7_PERFCTR0         0xc0010004
                    268: #define        MSR_K7_PERFCTR1         0xc0010005
                    269: #define        MSR_K7_PERFCTR2         0xc0010006
                    270: #define        MSR_K7_PERFCTR3         0xc0010007
                    271:
                    272: /*
                    273:  * AMD K8 (Opteron) MSRs.
                    274:  */
                    275: #define        MSR_SYSCFG      0xc0000010
                    276:
                    277: #define MSR_EFER       0xc0000080              /* Extended feature enable */
                    278: #define        EFER_SCE                0x00000001      /* SYSCALL extension */
                    279: #define        EFER_LME                0x00000100      /* Long Mode Active */
                    280: #define                EFER_LMA                0x00000400      /* Long Mode Enabled */
                    281: #define        EFER_NXE                0x00000800      /* No-Execute Enabled */
                    282:
                    283: #define MSR_STAR       0xc0000081              /* 32 bit syscall gate addr */
                    284: #define MSR_LSTAR      0xc0000082              /* 64 bit syscall gate addr */
                    285: #define MSR_CSTAR      0xc0000083              /* compat syscall gate addr */
                    286: #define MSR_SFMASK     0xc0000084              /* flags to clear on syscall */
                    287:
                    288: #define MSR_FSBASE     0xc0000100              /* 64bit offset for fs: */
                    289: #define MSR_GSBASE     0xc0000101              /* 64bit offset for gs: */
                    290: #define MSR_KERNELGSBASE 0xc0000102            /* storage for swapgs ins */
                    291:
                    292: /*
                    293:  * These require a 'passcode' for access.  See cpufunc.h.
                    294:  */
                    295: #define        MSR_HWCR        0xc0010015
                    296: #define                HWCR_FFDIS              0x00000040
                    297:
                    298: #define        MSR_NB_CFG      0xc001001f
                    299: #define                NB_CFG_DISIOREQLOCK     0x0000000000000004ULL
                    300: #define                NB_CFG_DISDATMSK        0x0000001000000000ULL
                    301:
                    302: #define        MSR_LS_CFG      0xc0011020
                    303: #define                LS_CFG_DIS_LS2_SQUISH   0x02000000
                    304:
                    305: #define        MSR_IC_CFG      0xc0011021
                    306: #define                IC_CFG_DIS_SEQ_PREFETCH 0x00000800
                    307:
                    308: #define        MSR_DC_CFG      0xc0011022
                    309: #define                DC_CFG_DIS_CNV_WC_SSO   0x00000004
                    310: #define                DC_CFG_DIS_SMC_CHK_BUF  0x00000400
                    311:
                    312: #define        MSR_BU_CFG      0xc0011023
                    313: #define                BU_CFG_THRL2IDXCMPDIS   0x0000080000000000ULL
                    314: #define                BU_CFG_WBPFSMCCHKDIS    0x0000200000000000ULL
                    315: #define                BU_CFG_WBENHWSBDIS      0x0001000000000000ULL
                    316:
                    317: /*
                    318:  * Constants related to MTRRs
                    319:  */
                    320: #define MTRR_N64K              8       /* numbers of fixed-size entries */
                    321: #define MTRR_N16K              16
                    322: #define MTRR_N4K               64
                    323:
                    324: /*
                    325:  * the following four 3-byte registers control the non-cacheable regions.
                    326:  * These registers must be written as three separate bytes.
                    327:  *
                    328:  * NCRx+0: A31-A24 of starting address
                    329:  * NCRx+1: A23-A16 of starting address
                    330:  * NCRx+2: A15-A12 of starting address | NCR_SIZE_xx.
                    331:  *
                    332:  * The non-cacheable region's starting address must be aligned to the
                    333:  * size indicated by the NCR_SIZE_xx field.
                    334:  */
                    335: #define NCR1   0xc4
                    336: #define NCR2   0xc7
                    337: #define NCR3   0xca
                    338: #define NCR4   0xcd
                    339:
                    340: #define NCR_SIZE_0K    0
                    341: #define NCR_SIZE_4K    1
                    342: #define NCR_SIZE_8K    2
                    343: #define NCR_SIZE_16K   3
                    344: #define NCR_SIZE_32K   4
                    345: #define NCR_SIZE_64K   5
                    346: #define NCR_SIZE_128K  6
                    347: #define NCR_SIZE_256K  7
                    348: #define NCR_SIZE_512K  8
                    349: #define NCR_SIZE_1M    9
                    350: #define NCR_SIZE_2M    10
                    351: #define NCR_SIZE_4M    11
                    352: #define NCR_SIZE_8M    12
                    353: #define NCR_SIZE_16M   13
                    354: #define NCR_SIZE_32M   14
                    355: #define NCR_SIZE_4G    15
                    356:
                    357: /*
                    358:  * Performance monitor events.
                    359:  *
                    360:  * Note that 586-class and 686-class CPUs have different performance
                    361:  * monitors available, and they are accessed differently:
                    362:  *
                    363:  *     686-class: `rdpmc' instruction
                    364:  *     586-class: `rdmsr' instruction, CESR MSR
                    365:  *
                    366:  * The descriptions of these events are too lenghy to include here.
                    367:  * See Appendix A of "Intel Architecture Software Developer's
                    368:  * Manual, Volume 3: System Programming" for more information.
                    369:  */
                    370:
                    371: /*
                    372:  * 586-class CESR MSR format.  Lower 16 bits is CTR0, upper 16 bits
                    373:  * is CTR1.
                    374:  */
                    375:
                    376: #define        PMC5_CESR_EVENT                 0x003f
                    377: #define        PMC5_CESR_OS                    0x0040
                    378: #define        PMC5_CESR_USR                   0x0080
                    379: #define        PMC5_CESR_E                     0x0100
                    380: #define        PMC5_CESR_P                     0x0200
                    381:
                    382: #define PMC5_DATA_READ                 0x00
                    383: #define PMC5_DATA_WRITE                        0x01
                    384: #define PMC5_DATA_TLB_MISS             0x02
                    385: #define PMC5_DATA_READ_MISS            0x03
                    386: #define PMC5_DATA_WRITE_MISS           0x04
                    387: #define PMC5_WRITE_M_E                 0x05
                    388: #define PMC5_DATA_LINES_WBACK          0x06
                    389: #define PMC5_DATA_CACHE_SNOOP          0x07
                    390: #define PMC5_DATA_CACHE_SNOOP_HIT      0x08
                    391: #define PMC5_MEM_ACCESS_BOTH_PIPES     0x09
                    392: #define PMC5_BANK_CONFLICTS            0x0a
                    393: #define PMC5_MISALIGNED_DATA           0x0b
                    394: #define PMC5_INST_READ                 0x0c
                    395: #define PMC5_INST_TLB_MISS             0x0d
                    396: #define PMC5_INST_CACHE_MISS           0x0e
                    397: #define PMC5_SEGMENT_REG_LOAD          0x0f
                    398: #define PMC5_BRANCHES                  0x12
                    399: #define PMC5_BTB_HITS                  0x13
                    400: #define PMC5_BRANCH_TAKEN              0x14
                    401: #define PMC5_PIPELINE_FLUSH            0x15
                    402: #define PMC5_INST_EXECUTED             0x16
                    403: #define PMC5_INST_EXECUTED_V_PIPE      0x17
                    404: #define PMC5_BUS_UTILIZATION           0x18
                    405: #define PMC5_WRITE_BACKUP_STALL                0x19
                    406: #define PMC5_DATA_READ_STALL           0x1a
                    407: #define PMC5_WRITE_E_M_STALL           0x1b
                    408: #define PMC5_LOCKED_BUS                        0x1c
                    409: #define PMC5_IO_CYCLE                  0x1d
                    410: #define PMC5_NONCACHE_MEM_READ         0x1e
                    411: #define PMC5_AGI_STALL                 0x1f
                    412: #define PMC5_FLOPS                     0x22
                    413: #define PMC5_BP0_MATCH                 0x23
                    414: #define PMC5_BP1_MATCH                 0x24
                    415: #define PMC5_BP2_MATCH                 0x25
                    416: #define PMC5_BP3_MATCH                 0x26
                    417: #define PMC5_HARDWARE_INTR             0x27
                    418: #define PMC5_DATA_RW                   0x28
                    419: #define PMC5_DATA_RW_MISS              0x29
                    420:
                    421: /*
                    422:  * 686-class Event Selector MSR format.
                    423:  */
                    424:
                    425: #define        PMC6_EVTSEL_EVENT               0x000000ff
                    426: #define        PMC6_EVTSEL_UNIT                0x0000ff00
                    427: #define        PMC6_EVTSEL_UNIT_SHIFT          8
                    428: #define        PMC6_EVTSEL_USR                 (1 << 16)
                    429: #define        PMC6_EVTSEL_OS                  (1 << 17)
                    430: #define        PMC6_EVTSEL_E                   (1 << 18)
                    431: #define        PMC6_EVTSEL_PC                  (1 << 19)
                    432: #define        PMC6_EVTSEL_INT                 (1 << 20)
                    433: #define        PMC6_EVTSEL_EN                  (1 << 22)       /* PerfEvtSel0 only */
                    434: #define        PMC6_EVTSEL_INV                 (1 << 23)
                    435: #define        PMC6_EVTSEL_COUNTER_MASK        0xff000000
                    436: #define        PMC6_EVTSEL_COUNTER_MASK_SHIFT  24
                    437:
                    438: /* Data Cache Unit */
                    439: #define        PMC6_DATA_MEM_REFS              0x43
                    440: #define        PMC6_DCU_LINES_IN               0x45
                    441: #define        PMC6_DCU_M_LINES_IN             0x46
                    442: #define        PMC6_DCU_M_LINES_OUT            0x47
                    443: #define        PMC6_DCU_MISS_OUTSTANDING       0x48
                    444:
                    445: /* Instruction Fetch Unit */
                    446: #define        PMC6_IFU_IFETCH                 0x80
                    447: #define        PMC6_IFU_IFETCH_MISS            0x81
                    448: #define        PMC6_ITLB_MISS                  0x85
                    449: #define        PMC6_IFU_MEM_STALL              0x86
                    450: #define        PMC6_ILD_STALL                  0x87
                    451:
                    452: /* L2 Cache */
                    453: #define        PMC6_L2_IFETCH                  0x28
                    454: #define        PMC6_L2_LD                      0x29
                    455: #define        PMC6_L2_ST                      0x2a
                    456: #define        PMC6_L2_LINES_IN                0x24
                    457: #define        PMC6_L2_LINES_OUT               0x26
                    458: #define        PMC6_L2_M_LINES_INM             0x25
                    459: #define        PMC6_L2_M_LINES_OUTM            0x27
                    460: #define        PMC6_L2_RQSTS                   0x2e
                    461: #define        PMC6_L2_ADS                     0x21
                    462: #define        PMC6_L2_DBUS_BUSY               0x22
                    463: #define        PMC6_L2_DBUS_BUSY_RD            0x23
                    464:
                    465: /* External Bus Logic */
                    466: #define        PMC6_BUS_DRDY_CLOCKS            0x62
                    467: #define        PMC6_BUS_LOCK_CLOCKS            0x63
                    468: #define        PMC6_BUS_REQ_OUTSTANDING        0x60
                    469: #define        PMC6_BUS_TRAN_BRD               0x65
                    470: #define        PMC6_BUS_TRAN_RFO               0x66
                    471: #define        PMC6_BUS_TRANS_WB               0x67
                    472: #define        PMC6_BUS_TRAN_IFETCH            0x68
                    473: #define        PMC6_BUS_TRAN_INVAL             0x69
                    474: #define        PMC6_BUS_TRAN_PWR               0x6a
                    475: #define        PMC6_BUS_TRANS_P                0x6b
                    476: #define        PMC6_BUS_TRANS_IO               0x6c
                    477: #define        PMC6_BUS_TRAN_DEF               0x6d
                    478: #define        PMC6_BUS_TRAN_BURST             0x6e
                    479: #define        PMC6_BUS_TRAN_ANY               0x70
                    480: #define        PMC6_BUS_TRAN_MEM               0x6f
                    481: #define        PMC6_BUS_DATA_RCV               0x64
                    482: #define        PMC6_BUS_BNR_DRV                0x61
                    483: #define        PMC6_BUS_HIT_DRV                0x7a
                    484: #define        PMC6_BUS_HITM_DRDV              0x7b
                    485: #define        PMC6_BUS_SNOOP_STALL            0x7e
                    486:
                    487: /* Floating Point Unit */
                    488: #define        PMC6_FLOPS                      0xc1
                    489: #define        PMC6_FP_COMP_OPS_EXE            0x10
                    490: #define        PMC6_FP_ASSIST                  0x11
                    491: #define        PMC6_MUL                        0x12
                    492: #define        PMC6_DIV                        0x12
                    493: #define        PMC6_CYCLES_DIV_BUSY            0x14
                    494:
                    495: /* Memory Ordering */
                    496: #define        PMC6_LD_BLOCKS                  0x03
                    497: #define        PMC6_SB_DRAINS                  0x04
                    498: #define        PMC6_MISALIGN_MEM_REF           0x05
                    499: #define        PMC6_EMON_KNI_PREF_DISPATCHED   0x07    /* P-III only */
                    500: #define        PMC6_EMON_KNI_PREF_MISS         0x4b    /* P-III only */
                    501:
                    502: /* Instruction Decoding and Retirement */
                    503: #define        PMC6_INST_RETIRED               0xc0
                    504: #define        PMC6_UOPS_RETIRED               0xc2
                    505: #define        PMC6_INST_DECODED               0xd0
                    506: #define        PMC6_EMON_KNI_INST_RETIRED      0xd8
                    507: #define        PMC6_EMON_KNI_COMP_INST_RET     0xd9
                    508:
                    509: /* Interrupts */
                    510: #define        PMC6_HW_INT_RX                  0xc8
                    511: #define        PMC6_CYCLES_INT_MASKED          0xc6
                    512: #define        PMC6_CYCLES_INT_PENDING_AND_MASKED 0xc7
                    513:
                    514: /* Branches */
                    515: #define        PMC6_BR_INST_RETIRED            0xc4
                    516: #define        PMC6_BR_MISS_PRED_RETIRED       0xc5
                    517: #define        PMC6_BR_TAKEN_RETIRED           0xc9
                    518: #define        PMC6_BR_MISS_PRED_TAKEN_RET     0xca
                    519: #define        PMC6_BR_INST_DECODED            0xe0
                    520: #define        PMC6_BTB_MISSES                 0xe2
                    521: #define        PMC6_BR_BOGUS                   0xe4
                    522: #define        PMC6_BACLEARS                   0xe6
                    523:
                    524: /* Stalls */
                    525: #define        PMC6_RESOURCE_STALLS            0xa2
                    526: #define        PMC6_PARTIAL_RAT_STALLS         0xd2
                    527:
                    528: /* Segment Register Loads */
                    529: #define        PMC6_SEGMENT_REG_LOADS          0x06
                    530:
                    531: /* Clocks */
                    532: #define        PMC6_CPU_CLK_UNHALTED           0x79
                    533:
                    534: /* MMX Unit */
                    535: #define        PMC6_MMX_INSTR_EXEC             0xb0    /* Celeron, P-II, P-IIX only */
                    536: #define        PMC6_MMX_SAT_INSTR_EXEC         0xb1    /* P-II and P-III only */
                    537: #define        PMC6_MMX_UOPS_EXEC              0xb2    /* P-II and P-III only */
                    538: #define        PMC6_MMX_INSTR_TYPE_EXEC        0xb3    /* P-II and P-III only */
                    539: #define        PMC6_FP_MMX_TRANS               0xcc    /* P-II and P-III only */
                    540: #define        PMC6_MMX_ASSIST                 0xcd    /* P-II and P-III only */
                    541: #define        PMC6_MMX_INSTR_RET              0xc3    /* P-II only */
                    542:
                    543: /* Segment Register Renaming */
                    544: #define        PMC6_SEG_RENAME_STALLS          0xd4    /* P-II and P-III only */
                    545: #define        PMC6_SEG_REG_RENAMES            0xd5    /* P-II and P-III only */
                    546: #define        PMC6_RET_SEG_RENAMES            0xd6    /* P-II and P-III only */
                    547:
                    548: /*
                    549:  * AMD K7 Event Selector MSR format.
                    550:  */
                    551:
                    552: #define        K7_EVTSEL_EVENT                 0x000000ff
                    553: #define        K7_EVTSEL_UNIT                  0x0000ff00
                    554: #define        K7_EVTSEL_UNIT_SHIFT            8
                    555: #define        K7_EVTSEL_USR                   (1 << 16)
                    556: #define        K7_EVTSEL_OS                    (1 << 17)
                    557: #define        K7_EVTSEL_E                     (1 << 18)
                    558: #define        K7_EVTSEL_PC                    (1 << 19)
                    559: #define        K7_EVTSEL_INT                   (1 << 20)
                    560: #define        K7_EVTSEL_EN                    (1 << 22)
                    561: #define        K7_EVTSEL_INV                   (1 << 23)
                    562: #define        K7_EVTSEL_COUNTER_MASK          0xff000000
                    563: #define        K7_EVTSEL_COUNTER_MASK_SHIFT    24
                    564:
                    565: /* Segment Register Loads */
                    566: #define        K7_SEGMENT_REG_LOADS            0x20
                    567:
                    568: #define        K7_STORES_TO_ACTIVE_INST_STREAM 0x21
                    569:
                    570: /* Data Cache Unit */
                    571: #define        K7_DATA_CACHE_ACCESS            0x40
                    572: #define        K7_DATA_CACHE_MISS              0x41
                    573: #define        K7_DATA_CACHE_REFILL            0x42
                    574: #define        K7_DATA_CACHE_REFILL_SYSTEM     0x43
                    575: #define        K7_DATA_CACHE_WBACK             0x44
                    576: #define        K7_L2_DTLB_HIT                  0x45
                    577: #define        K7_L2_DTLB_MISS                 0x46
                    578: #define        K7_MISALIGNED_DATA_REF          0x47
                    579: #define        K7_SYSTEM_REQUEST               0x64
                    580: #define        K7_SYSTEM_REQUEST_TYPE          0x65
                    581:
                    582: #define        K7_SNOOP_HIT                    0x73
                    583: #define        K7_SINGLE_BIT_ECC_ERROR         0x74
                    584: #define        K7_CACHE_LINE_INVAL             0x75
                    585: #define        K7_CYCLES_PROCESSOR_IS_RUNNING  0x76
                    586: #define        K7_L2_REQUEST                   0x79
                    587: #define        K7_L2_REQUEST_BUSY              0x7a
                    588:
                    589: /* Instruction Fetch Unit */
                    590: #define        K7_IFU_IFETCH                   0x80
                    591: #define        K7_IFU_IFETCH_MISS              0x81
                    592: #define        K7_IFU_REFILL_FROM_L2           0x82
                    593: #define        K7_IFU_REFILL_FROM_SYSTEM       0x83
                    594: #define        K7_ITLB_L1_MISS                 0x84
                    595: #define        K7_ITLB_L2_MISS                 0x85
                    596: #define        K7_SNOOP_RESYNC                 0x86
                    597: #define        K7_IFU_STALL                    0x87
                    598:
                    599: #define        K7_RETURN_STACK_HITS            0x88
                    600: #define        K7_RETURN_STACK_OVERFLOW        0x89
                    601:
                    602: /* Retired */
                    603: #define        K7_RETIRED_INST                 0xc0
                    604: #define        K7_RETIRED_OPS                  0xc1
                    605: #define        K7_RETIRED_BRANCHES             0xc2
                    606: #define        K7_RETIRED_BRANCH_MISPREDICTED  0xc3
                    607: #define        K7_RETIRED_TAKEN_BRANCH         0xc4
                    608: #define        K7_RETIRED_TAKEN_BRANCH_MISPREDICTED    0xc5
                    609: #define        K7_RETIRED_FAR_CONTROL_TRANSFER 0xc6
                    610: #define        K7_RETIRED_RESYNC_BRANCH        0xc7
                    611: #define        K7_RETIRED_NEAR_RETURNS         0xc8
                    612: #define        K7_RETIRED_NEAR_RETURNS_MISPREDICTED    0xc9
                    613: #define        K7_RETIRED_INDIRECT_MISPREDICTED        0xca
                    614:
                    615: /* Interrupts */
                    616: #define        K7_CYCLES_INT_MASKED            0xcd
                    617: #define        K7_CYCLES_INT_PENDING_AND_MASKED        0xce
                    618: #define        K7_HW_INTR_RECV                 0xcf
                    619:
                    620: #define        K7_INSTRUCTION_DECODER_EMPTY    0xd0
                    621: #define        K7_DISPATCH_STALLS              0xd1
                    622: #define        K7_BRANCH_ABORTS_TO_RETIRE      0xd2
                    623: #define        K7_SERIALIZE                    0xd3
                    624: #define        K7_SEGMENT_LOAD_STALL           0xd4
                    625: #define        K7_ICU_FULL                     0xd5
                    626: #define        K7_RESERVATION_STATIONS_FULL    0xd6
                    627: #define        K7_FPU_FULL                     0xd7
                    628: #define        K7_LS_FULL                      0xd8
                    629: #define        K7_ALL_QUIET_STALL              0xd9
                    630: #define        K7_FAR_TRANSFER_OR_RESYNC_BRANCH_PENDING        0xda
                    631:
                    632: #define        K7_BP0_MATCH                    0xdc
                    633: #define        K7_BP1_MATCH                    0xdd
                    634: #define        K7_BP2_MATCH                    0xde
                    635: #define        K7_BP3_MATCH                    0xdf

CVSweb