msr.cc revision 8582
18582Sgblack@eecs.umich.edu/* 28582Sgblack@eecs.umich.edu * Copyright (c) 2011 Google 38582Sgblack@eecs.umich.edu * All rights reserved. 48582Sgblack@eecs.umich.edu * 58582Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 68582Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 78582Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 88582Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 98582Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 108582Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 118582Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 128582Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 138582Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 148582Sgblack@eecs.umich.edu * this software without specific prior written permission. 158582Sgblack@eecs.umich.edu * 168582Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 178582Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 188582Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 198582Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 208582Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 218582Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 228582Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 238582Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 248582Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258582Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 268582Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278582Sgblack@eecs.umich.edu * 288582Sgblack@eecs.umich.edu * Authors: Gabe Black 298582Sgblack@eecs.umich.edu */ 308582Sgblack@eecs.umich.edu 318582Sgblack@eecs.umich.edu#include "arch/x86/regs/msr.hh" 328582Sgblack@eecs.umich.edu#include "base/hashmap.hh" 338582Sgblack@eecs.umich.edu 348582Sgblack@eecs.umich.edunamespace X86ISA 358582Sgblack@eecs.umich.edu{ 368582Sgblack@eecs.umich.edu 378582Sgblack@eecs.umich.edutypedef m5::hash_map<Addr, MiscRegIndex> MsrMap; 388582Sgblack@eecs.umich.edu 398582Sgblack@eecs.umich.edutypedef MsrMap::value_type MsrVal; 408582Sgblack@eecs.umich.edu 418582Sgblack@eecs.umich.educonst MsrMap::value_type msrMapData[] = { 428582Sgblack@eecs.umich.edu MsrVal(0x10, MISCREG_TSC), 438582Sgblack@eecs.umich.edu MsrVal(0x1B, MISCREG_APIC_BASE), 448582Sgblack@eecs.umich.edu MsrVal(0xFE, MISCREG_MTRRCAP), 458582Sgblack@eecs.umich.edu MsrVal(0x174, MISCREG_SYSENTER_CS), 468582Sgblack@eecs.umich.edu MsrVal(0x175, MISCREG_SYSENTER_ESP), 478582Sgblack@eecs.umich.edu MsrVal(0x176, MISCREG_SYSENTER_EIP), 488582Sgblack@eecs.umich.edu MsrVal(0x179, MISCREG_MCG_CAP), 498582Sgblack@eecs.umich.edu MsrVal(0x17A, MISCREG_MCG_STATUS), 508582Sgblack@eecs.umich.edu MsrVal(0x17B, MISCREG_MCG_CTL), 518582Sgblack@eecs.umich.edu MsrVal(0x1D9, MISCREG_DEBUG_CTL_MSR), 528582Sgblack@eecs.umich.edu MsrVal(0x1DB, MISCREG_LAST_BRANCH_FROM_IP), 538582Sgblack@eecs.umich.edu MsrVal(0x1DC, MISCREG_LAST_BRANCH_TO_IP), 548582Sgblack@eecs.umich.edu MsrVal(0x1DD, MISCREG_LAST_EXCEPTION_FROM_IP), 558582Sgblack@eecs.umich.edu MsrVal(0x1DE, MISCREG_LAST_EXCEPTION_TO_IP), 568582Sgblack@eecs.umich.edu MsrVal(0x200, MISCREG_MTRR_PHYS_BASE_0), 578582Sgblack@eecs.umich.edu MsrVal(0x201, MISCREG_MTRR_PHYS_MASK_0), 588582Sgblack@eecs.umich.edu MsrVal(0x202, MISCREG_MTRR_PHYS_BASE_1), 598582Sgblack@eecs.umich.edu MsrVal(0x203, MISCREG_MTRR_PHYS_MASK_1), 608582Sgblack@eecs.umich.edu MsrVal(0x204, MISCREG_MTRR_PHYS_BASE_2), 618582Sgblack@eecs.umich.edu MsrVal(0x205, MISCREG_MTRR_PHYS_MASK_2), 628582Sgblack@eecs.umich.edu MsrVal(0x206, MISCREG_MTRR_PHYS_BASE_3), 638582Sgblack@eecs.umich.edu MsrVal(0x207, MISCREG_MTRR_PHYS_MASK_3), 648582Sgblack@eecs.umich.edu MsrVal(0x208, MISCREG_MTRR_PHYS_BASE_4), 658582Sgblack@eecs.umich.edu MsrVal(0x209, MISCREG_MTRR_PHYS_MASK_4), 668582Sgblack@eecs.umich.edu MsrVal(0x20A, MISCREG_MTRR_PHYS_BASE_5), 678582Sgblack@eecs.umich.edu MsrVal(0x20B, MISCREG_MTRR_PHYS_MASK_5), 688582Sgblack@eecs.umich.edu MsrVal(0x20C, MISCREG_MTRR_PHYS_BASE_6), 698582Sgblack@eecs.umich.edu MsrVal(0x20D, MISCREG_MTRR_PHYS_MASK_6), 708582Sgblack@eecs.umich.edu MsrVal(0x20E, MISCREG_MTRR_PHYS_BASE_7), 718582Sgblack@eecs.umich.edu MsrVal(0x20F, MISCREG_MTRR_PHYS_MASK_7), 728582Sgblack@eecs.umich.edu MsrVal(0x250, MISCREG_MTRR_FIX_64K_00000), 738582Sgblack@eecs.umich.edu MsrVal(0x258, MISCREG_MTRR_FIX_16K_80000), 748582Sgblack@eecs.umich.edu MsrVal(0x259, MISCREG_MTRR_FIX_16K_A0000), 758582Sgblack@eecs.umich.edu MsrVal(0x268, MISCREG_MTRR_FIX_4K_C0000), 768582Sgblack@eecs.umich.edu MsrVal(0x269, MISCREG_MTRR_FIX_4K_C8000), 778582Sgblack@eecs.umich.edu MsrVal(0x26A, MISCREG_MTRR_FIX_4K_D0000), 788582Sgblack@eecs.umich.edu MsrVal(0x26B, MISCREG_MTRR_FIX_4K_D8000), 798582Sgblack@eecs.umich.edu MsrVal(0x26C, MISCREG_MTRR_FIX_4K_E0000), 808582Sgblack@eecs.umich.edu MsrVal(0x26D, MISCREG_MTRR_FIX_4K_E8000), 818582Sgblack@eecs.umich.edu MsrVal(0x26E, MISCREG_MTRR_FIX_4K_F0000), 828582Sgblack@eecs.umich.edu MsrVal(0x26F, MISCREG_MTRR_FIX_4K_F8000), 838582Sgblack@eecs.umich.edu MsrVal(0x277, MISCREG_PAT), 848582Sgblack@eecs.umich.edu MsrVal(0x2FF, MISCREG_DEF_TYPE), 858582Sgblack@eecs.umich.edu MsrVal(0x400, MISCREG_MC0_CTL), 868582Sgblack@eecs.umich.edu MsrVal(0x404, MISCREG_MC1_CTL), 878582Sgblack@eecs.umich.edu MsrVal(0x408, MISCREG_MC2_CTL), 888582Sgblack@eecs.umich.edu MsrVal(0x40C, MISCREG_MC3_CTL), 898582Sgblack@eecs.umich.edu MsrVal(0x410, MISCREG_MC4_CTL), 908582Sgblack@eecs.umich.edu MsrVal(0x414, MISCREG_MC5_CTL), 918582Sgblack@eecs.umich.edu MsrVal(0x418, MISCREG_MC6_CTL), 928582Sgblack@eecs.umich.edu MsrVal(0x41C, MISCREG_MC7_CTL), 938582Sgblack@eecs.umich.edu MsrVal(0x401, MISCREG_MC0_STATUS), 948582Sgblack@eecs.umich.edu MsrVal(0x405, MISCREG_MC1_STATUS), 958582Sgblack@eecs.umich.edu MsrVal(0x409, MISCREG_MC2_STATUS), 968582Sgblack@eecs.umich.edu MsrVal(0x40D, MISCREG_MC3_STATUS), 978582Sgblack@eecs.umich.edu MsrVal(0x411, MISCREG_MC4_STATUS), 988582Sgblack@eecs.umich.edu MsrVal(0x415, MISCREG_MC5_STATUS), 998582Sgblack@eecs.umich.edu MsrVal(0x419, MISCREG_MC6_STATUS), 1008582Sgblack@eecs.umich.edu MsrVal(0x41D, MISCREG_MC7_STATUS), 1018582Sgblack@eecs.umich.edu MsrVal(0x402, MISCREG_MC0_ADDR), 1028582Sgblack@eecs.umich.edu MsrVal(0x406, MISCREG_MC1_ADDR), 1038582Sgblack@eecs.umich.edu MsrVal(0x40A, MISCREG_MC2_ADDR), 1048582Sgblack@eecs.umich.edu MsrVal(0x40E, MISCREG_MC3_ADDR), 1058582Sgblack@eecs.umich.edu MsrVal(0x412, MISCREG_MC4_ADDR), 1068582Sgblack@eecs.umich.edu MsrVal(0x416, MISCREG_MC5_ADDR), 1078582Sgblack@eecs.umich.edu MsrVal(0x41A, MISCREG_MC6_ADDR), 1088582Sgblack@eecs.umich.edu MsrVal(0x41E, MISCREG_MC7_ADDR), 1098582Sgblack@eecs.umich.edu MsrVal(0x403, MISCREG_MC0_MISC), 1108582Sgblack@eecs.umich.edu MsrVal(0x407, MISCREG_MC1_MISC), 1118582Sgblack@eecs.umich.edu MsrVal(0x40B, MISCREG_MC2_MISC), 1128582Sgblack@eecs.umich.edu MsrVal(0x40F, MISCREG_MC3_MISC), 1138582Sgblack@eecs.umich.edu MsrVal(0x413, MISCREG_MC4_MISC), 1148582Sgblack@eecs.umich.edu MsrVal(0x417, MISCREG_MC5_MISC), 1158582Sgblack@eecs.umich.edu MsrVal(0x41B, MISCREG_MC6_MISC), 1168582Sgblack@eecs.umich.edu MsrVal(0x41F, MISCREG_MC7_MISC), 1178582Sgblack@eecs.umich.edu MsrVal(0xC0000080, MISCREG_EFER), 1188582Sgblack@eecs.umich.edu MsrVal(0xC0000081, MISCREG_STAR), 1198582Sgblack@eecs.umich.edu MsrVal(0xC0000082, MISCREG_LSTAR), 1208582Sgblack@eecs.umich.edu MsrVal(0xC0000083, MISCREG_CSTAR), 1218582Sgblack@eecs.umich.edu MsrVal(0xC0000084, MISCREG_SF_MASK), 1228582Sgblack@eecs.umich.edu MsrVal(0xC0000100, MISCREG_FS_BASE), 1238582Sgblack@eecs.umich.edu MsrVal(0xC0000101, MISCREG_GS_BASE), 1248582Sgblack@eecs.umich.edu MsrVal(0xC0000102, MISCREG_KERNEL_GS_BASE), 1258582Sgblack@eecs.umich.edu MsrVal(0xC0000103, MISCREG_TSC_AUX), 1268582Sgblack@eecs.umich.edu MsrVal(0xC0010000, MISCREG_PERF_EVT_SEL0), 1278582Sgblack@eecs.umich.edu MsrVal(0xC0010001, MISCREG_PERF_EVT_SEL1), 1288582Sgblack@eecs.umich.edu MsrVal(0xC0010002, MISCREG_PERF_EVT_SEL2), 1298582Sgblack@eecs.umich.edu MsrVal(0xC0010003, MISCREG_PERF_EVT_SEL3), 1308582Sgblack@eecs.umich.edu MsrVal(0xC0010004, MISCREG_PERF_EVT_CTR0), 1318582Sgblack@eecs.umich.edu MsrVal(0xC0010005, MISCREG_PERF_EVT_CTR1), 1328582Sgblack@eecs.umich.edu MsrVal(0xC0010006, MISCREG_PERF_EVT_CTR2), 1338582Sgblack@eecs.umich.edu MsrVal(0xC0010007, MISCREG_PERF_EVT_CTR3), 1348582Sgblack@eecs.umich.edu MsrVal(0xC0010010, MISCREG_SYSCFG), 1358582Sgblack@eecs.umich.edu MsrVal(0xC0010016, MISCREG_IORR_BASE0), 1368582Sgblack@eecs.umich.edu MsrVal(0xC0010017, MISCREG_IORR_BASE1), 1378582Sgblack@eecs.umich.edu MsrVal(0xC0010018, MISCREG_IORR_MASK0), 1388582Sgblack@eecs.umich.edu MsrVal(0xC0010019, MISCREG_IORR_MASK1), 1398582Sgblack@eecs.umich.edu MsrVal(0xC001001A, MISCREG_TOP_MEM), 1408582Sgblack@eecs.umich.edu MsrVal(0xC001001D, MISCREG_TOP_MEM2), 1418582Sgblack@eecs.umich.edu MsrVal(0xC0010114, MISCREG_VM_CR), 1428582Sgblack@eecs.umich.edu MsrVal(0xC0010115, MISCREG_IGNNE), 1438582Sgblack@eecs.umich.edu MsrVal(0xC0010116, MISCREG_SMM_CTL), 1448582Sgblack@eecs.umich.edu MsrVal(0xC0010117, MISCREG_VM_HSAVE_PA) 1458582Sgblack@eecs.umich.edu}; 1468582Sgblack@eecs.umich.edu 1478582Sgblack@eecs.umich.edustatic const unsigned msrMapSize = sizeof(msrMapData) / sizeof(msrMapData[0]); 1488582Sgblack@eecs.umich.edu 1498582Sgblack@eecs.umich.edustatic MsrMap msrMap(msrMapData, msrMapData + msrMapSize); 1508582Sgblack@eecs.umich.edu 1518582Sgblack@eecs.umich.edubool 1528582Sgblack@eecs.umich.edumsrAddrToIndex(MiscRegIndex ®Num, Addr addr) 1538582Sgblack@eecs.umich.edu{ 1548582Sgblack@eecs.umich.edu MsrMap::iterator it = msrMap.find(addr); 1558582Sgblack@eecs.umich.edu if (it == msrMap.end()) { 1568582Sgblack@eecs.umich.edu return false; 1578582Sgblack@eecs.umich.edu } else { 1588582Sgblack@eecs.umich.edu regNum = it->second; 1598582Sgblack@eecs.umich.edu return true; 1608582Sgblack@eecs.umich.edu } 1618582Sgblack@eecs.umich.edu} 1628582Sgblack@eecs.umich.edu 1638582Sgblack@eecs.umich.edu} // namespace X86ISA 164