15254Sgavinm /* 25254Sgavinm * CDDL HEADER START 35254Sgavinm * 45254Sgavinm * The contents of this file are subject to the terms of the 55254Sgavinm * Common Development and Distribution License (the "License"). 65254Sgavinm * You may not use this file except in compliance with the License. 75254Sgavinm * 85254Sgavinm * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 95254Sgavinm * or http://www.opensolaris.org/os/licensing. 105254Sgavinm * See the License for the specific language governing permissions 115254Sgavinm * and limitations under the License. 125254Sgavinm * 135254Sgavinm * When distributing Covered Code, include this CDDL HEADER in each 145254Sgavinm * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 155254Sgavinm * If applicable, add the following below this CDDL HEADER, with the 165254Sgavinm * fields enclosed by brackets "[]" replaced with your own identifying 175254Sgavinm * information: Portions Copyright [yyyy] [name of copyright owner] 185254Sgavinm * 195254Sgavinm * CDDL HEADER END 205254Sgavinm */ 215254Sgavinm 225254Sgavinm /* 23*10831SYanmin.Sun@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 245254Sgavinm * Use is subject to license terms. 255254Sgavinm */ 265254Sgavinm 275254Sgavinm #ifndef _SYS_FM_CPU_GMCA_H 285254Sgavinm #define _SYS_FM_CPU_GMCA_H 295254Sgavinm 305254Sgavinm #ifdef __cplusplus 315254Sgavinm extern "C" { 325254Sgavinm #endif 335254Sgavinm 345254Sgavinm /* 355254Sgavinm * Generic x86 cpu ereports. 365254Sgavinm * 375254Sgavinm * On a machine-check exception, or on a periodic poll for error status 385254Sgavinm * of a cpu, we read through all the MCA banks of the processor and 395254Sgavinm * log an ereport for each MCA bank that contains valid error telemetry. 405254Sgavinm * These ereports will all share the same detector FMRI and ENA. 415254Sgavinm * 425254Sgavinm * Since we have no model-specific knowledge of the cpu we cannot 435254Sgavinm * decode all details of the error, so we'll stick to the "architectural" 445254Sgavinm * bits. Similarly since we have no associated memory-controller driver 455254Sgavinm * or detailed topology information we cannot produce "resource" ereport 465254Sgavinm * FMRIs. 475254Sgavinm */ 485254Sgavinm 495254Sgavinm /* Ereport class subcategory for generic x86 processors */ 505254Sgavinm #define FM_EREPORT_CPU_GENERIC "generic-x86" 515254Sgavinm 525254Sgavinm /* 535254Sgavinm * Simple error code ereport leaf classes 545254Sgavinm */ 555254Sgavinm #define FM_EREPORT_CPU_GENERIC_UNCLASSIFIED "unclassified" 565254Sgavinm #define FM_EREPORT_CPU_GENERIC_MC_CODE_PARITY "microcode_rom_parity" 575254Sgavinm #define FM_EREPORT_CPU_GENERIC_EXTERNAL "external" 585254Sgavinm #define FM_EREPORT_CPU_GENERIC_FRC "frc" 597349SAdrian.Frost@Sun.COM #define FM_EREPORT_CPU_GENERIC_INTERNAL_PARITY "internal_parity" 605254Sgavinm #define FM_EREPORT_CPU_GENERIC_INTERNAL_TIMER "internal_timer" 615254Sgavinm #define FM_EREPORT_CPU_GENERIC_INTERNAL_UNCLASS "internal_unclassified" 625254Sgavinm 635254Sgavinm /* 645254Sgavinm * Leaf class to be used when we can match no simple or compound class 655254Sgavinm */ 665254Sgavinm #define FM_EREPORT_CPU_GENERIC_UNKNOWN "unknown" 675254Sgavinm 685254Sgavinm /* 695254Sgavinm * Compound error code ereport leaf classes. The arguments for snprintf 705254Sgavinm * will appear in the following order: 715254Sgavinm * 725254Sgavinm * 1 - TT interpretation 735254Sgavinm * 2 - LL interpretation 745254Sgavinm * 3 - RRRR interpretation 755254Sgavinm * 4 - PP interpretation 765254Sgavinm * 5 - II interpretation 775254Sgavinm * 6 - T interpretation 785254Sgavinm * 7 - "_uc" if this is a compound error with MCi_STATUS.UC set, else "" 797349SAdrian.Frost@Sun.COM * 8 - CCCC interpretation 807349SAdrian.Frost@Sun.COM * 9 - MMM interpretation 815254Sgavinm * 825254Sgavinm * They can be selected in the format string using the %n$s specifier form. 835254Sgavinm * 845254Sgavinm * The set of interpretations that we expand to will not be exactly the 855254Sgavinm * same as the set of mnemonics described in Vol 3A (see the 865254Sgavinm * FM_EREPORT_PAYLOAD_NAME_COMPOUND_ERR ereport payload member for that). 875254Sgavinm * Instead we wish to compress the possible ereport classes that can 885254Sgavinm * be generated by pushing things such as "LG" for generic cache level 895254Sgavinm * down to "". 905254Sgavinm * 915254Sgavinm * 925254Sgavinm * "Memory Hierarchy" in compound errors actually refers to CPU cache 935254Sgavinm * memory. 945254Sgavinm */ 955254Sgavinm #define FM_EREPORT_CPU_GENERIC_GENMEMHIER "%2$s" "cache" "%7$s" 965254Sgavinm #define FM_EREPORT_CPU_GENERIC_TLB "%2$s" "%1$s" "tlb" "%7$s" 975254Sgavinm #define FM_EREPORT_CPU_GENERIC_MEMHIER "%2$s" "%1$s" "cache" "%7$s" 985254Sgavinm #define FM_EREPORT_CPU_GENERIC_BUS_INTERCONNECT "bus_interconnect" "%5$s" "%7$s" 997349SAdrian.Frost@Sun.COM #define FM_EREPORT_CPU_GENERIC_MEMORY_CONTROLLER "mc" 1005254Sgavinm 1015254Sgavinm /* 1025254Sgavinm * The "interpretation" expansions for the above ereport leaf subclasses. 1035254Sgavinm */ 1045254Sgavinm #define FM_EREPORT_CPU_GENERIC_TT_INSTR "i" 1055254Sgavinm #define FM_EREPORT_CPU_GENERIC_TT_DATA "d" 1065254Sgavinm #define FM_EREPORT_CPU_GENERIC_TT_GEN "" 1075254Sgavinm 1085254Sgavinm #define FM_EREPORT_CPU_GENERIC_LL_L0 "l0" 1095254Sgavinm #define FM_EREPORT_CPU_GENERIC_LL_L1 "l1" 1105254Sgavinm #define FM_EREPORT_CPU_GENERIC_LL_L2 "l2" 1115254Sgavinm #define FM_EREPORT_CPU_GENERIC_LL_LG "" 1125254Sgavinm 1135254Sgavinm #define FM_EREPORT_CPU_GENERIC_RRRR_ERR "" 1145254Sgavinm #define FM_EREPORT_CPU_GENERIC_RRRR_RD "" 1155254Sgavinm #define FM_EREPORT_CPU_GENERIC_RRRR_WR "" 1165254Sgavinm #define FM_EREPORT_CPU_GENERIC_RRRR_DRD "" 1175254Sgavinm #define FM_EREPORT_CPU_GENERIC_RRRR_DWR "" 1185254Sgavinm #define FM_EREPORT_CPU_GENERIC_RRRR_IRD "" 1195254Sgavinm #define FM_EREPORT_CPU_GENERIC_RRRR_PREFETCH "" 1205254Sgavinm #define FM_EREPORT_CPU_GENERIC_RRRR_EVICT "" 1215254Sgavinm #define FM_EREPORT_CPU_GENERIC_RRRR_SNOOP "" 1225254Sgavinm 1235254Sgavinm #define FM_EREPORT_CPU_GENERIC_PP_SRC "" 1245254Sgavinm #define FM_EREPORT_CPU_GENERIC_PP_RES "" 1255254Sgavinm #define FM_EREPORT_CPU_GENERIC_PP_OBS "" 1265254Sgavinm #define FM_EREPORT_CPU_GENERIC_PP_GEN "" 1275254Sgavinm 1285254Sgavinm #define FM_EREPORT_CPU_GENERIC_II_MEM "_memory" 1295254Sgavinm #define FM_EREPORT_CPU_GENERIC_II_IO "_io" 1305254Sgavinm #define FM_EREPORT_CPU_GENERIC_II_GEN "" 1315254Sgavinm 1325254Sgavinm #define FM_EREPORT_CPU_GENERIC_T_NOTIMEOUT "" 1335254Sgavinm #define FM_EREPORT_CPU_GENERIC_T_TIMEOUT "" 1345254Sgavinm 1357349SAdrian.Frost@Sun.COM #define FM_EREPORT_CPU_GENERIC_CCCC "" 1367349SAdrian.Frost@Sun.COM 1377349SAdrian.Frost@Sun.COM #define FM_EREPORT_CPU_GENERIC_MMM_ERR "" 1387349SAdrian.Frost@Sun.COM #define FM_EREPORT_CPU_GENERIC_MMM_RD "" 1397349SAdrian.Frost@Sun.COM #define FM_EREPORT_CPU_GENERIC_MMM_WR "" 1407349SAdrian.Frost@Sun.COM #define FM_EREPORT_CPU_GENERIC_MMM_ADRCMD "" 141*10831SYanmin.Sun@Sun.COM #define FM_EREPORT_CPU_GENERIC_MMM_SCRUB "" 1427349SAdrian.Frost@Sun.COM 1435254Sgavinm /* 1445254Sgavinm * Ereport payload member names together with bitmask values to select 1455254Sgavinm * their inclusion in ereports. 1465254Sgavinm */ 1475254Sgavinm 1485254Sgavinm #define _FM_EREPORT_FLAG(n) (1ULL << (n)) 1495254Sgavinm 1505254Sgavinm #define FM_EREPORT_PAYLOAD_FLAG_COMPOUND_ERR _FM_EREPORT_FLAG(1) 1515254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_COMPOUND_ERR "compound_errorname" 1525254Sgavinm 1535254Sgavinm #define FM_EREPORT_PAYLOAD_FLAG_MCG_STATUS _FM_EREPORT_FLAG(2) 1545254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_MCG_STATUS "IA32_MCG_STATUS" 1555254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_MCG_STATUS_MCIP "machine_check_in_progress" 1565254Sgavinm 1575254Sgavinm #define FM_EREPORT_PAYLOAD_FLAG_IP _FM_EREPORT_FLAG(3) 1585254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_IP "ip" 1595254Sgavinm 1605254Sgavinm #define FM_EREPORT_PAYLOAD_FLAG_PRIV _FM_EREPORT_FLAG(4) 1615254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_PRIV "privileged" 1625254Sgavinm 1635254Sgavinm #define FM_EREPORT_PAYLOAD_FLAG_BANK_NUM _FM_EREPORT_FLAG(5) 1645254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_BANK_NUM "bank_number" 1655254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_BANK_MSR_OFFSET "bank_msr_offset" 1665254Sgavinm 1675254Sgavinm #define FM_EREPORT_PAYLOAD_FLAG_MC_STATUS _FM_EREPORT_FLAG(6) 1685254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_MC_STATUS "IA32_MCi_STATUS" 1695254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_MC_STATUS_OVER "overflow" 1705254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_MC_STATUS_UC "error_uncorrected" 1715254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_MC_STATUS_EN "error_enabled" 1725254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_MC_STATUS_PCC "processor_context_corrupt" 1735254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_MC_STATUS_TES "threshold_based_error_status" 1745254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_MC_STATUS_ERRCODE "error_code" 1755254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_MC_STATUS_EXTERRCODE "model_specific_error_code" 1765254Sgavinm 1775254Sgavinm #define FM_EREPORT_PAYLOAD_FLAG_MC_ADDR _FM_EREPORT_FLAG(7) 1785254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_MC_ADDR "IA32_MCi_ADDR" 1795254Sgavinm 1805254Sgavinm #define FM_EREPORT_PAYLOAD_FLAG_MC_MISC _FM_EREPORT_FLAG(8) 1815254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_MC_MISC "IA32_MCi_MISC" 1825254Sgavinm 1835254Sgavinm #define FM_EREPORT_PAYLOAD_FLAG_DISP _FM_EREPORT_FLAG(9) 1845254Sgavinm #define FM_EREPORT_PAYLOAD_NAME_DISP "disp" 1855254Sgavinm 1865254Sgavinm /* 1875254Sgavinm * Common combinations of payload members 1885254Sgavinm */ 1895254Sgavinm #define FM_EREPORT_PAYLOAD_FLAGS_GLOBAL \ 1905254Sgavinm (FM_EREPORT_PAYLOAD_FLAG_MCG_STATUS | \ 1915254Sgavinm FM_EREPORT_PAYLOAD_FLAG_IP | \ 1925254Sgavinm FM_EREPORT_PAYLOAD_FLAG_PRIV) 1935254Sgavinm 1945254Sgavinm #define FM_EREPORT_PAYLOAD_FLAGS_BANK \ 1955254Sgavinm (FM_EREPORT_PAYLOAD_FLAG_BANK_NUM | \ 1965254Sgavinm FM_EREPORT_PAYLOAD_FLAG_MC_STATUS | \ 1975254Sgavinm FM_EREPORT_PAYLOAD_FLAG_MC_ADDR | \ 1985254Sgavinm FM_EREPORT_PAYLOAD_FLAG_MC_MISC | \ 1995254Sgavinm FM_EREPORT_PAYLOAD_FLAG_DISP) 2005254Sgavinm 2015254Sgavinm #define FM_EREPORT_PAYLOAD_FLAGS_COMMON \ 2025254Sgavinm (FM_EREPORT_PAYLOAD_FLAGS_GLOBAL | FM_EREPORT_PAYLOAD_FLAGS_BANK) 2035254Sgavinm 2045254Sgavinm #define FM_EREPORT_PAYLOAD_FLAGS_COMPOUND_ERR \ 2055254Sgavinm (FM_EREPORT_PAYLOAD_FLAGS_COMMON | FM_EREPORT_PAYLOAD_FLAG_COMPOUND_ERR) 2065254Sgavinm 2075254Sgavinm #ifdef __cplusplus 2085254Sgavinm } 2095254Sgavinm #endif 2105254Sgavinm 2115254Sgavinm #endif /* _SYS_FM_CPU_GMCA_H */ 212