20c794b39650d115e17a15983b6b82e46238cf45gavinm/*
20c794b39650d115e17a15983b6b82e46238cf45gavinm * CDDL HEADER START
20c794b39650d115e17a15983b6b82e46238cf45gavinm *
20c794b39650d115e17a15983b6b82e46238cf45gavinm * The contents of this file are subject to the terms of the
20c794b39650d115e17a15983b6b82e46238cf45gavinm * Common Development and Distribution License (the "License").
20c794b39650d115e17a15983b6b82e46238cf45gavinm * You may not use this file except in compliance with the License.
20c794b39650d115e17a15983b6b82e46238cf45gavinm *
20c794b39650d115e17a15983b6b82e46238cf45gavinm * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
20c794b39650d115e17a15983b6b82e46238cf45gavinm * or http://www.opensolaris.org/os/licensing.
20c794b39650d115e17a15983b6b82e46238cf45gavinm * See the License for the specific language governing permissions
20c794b39650d115e17a15983b6b82e46238cf45gavinm * and limitations under the License.
20c794b39650d115e17a15983b6b82e46238cf45gavinm *
20c794b39650d115e17a15983b6b82e46238cf45gavinm * When distributing Covered Code, include this CDDL HEADER in each
20c794b39650d115e17a15983b6b82e46238cf45gavinm * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
20c794b39650d115e17a15983b6b82e46238cf45gavinm * If applicable, add the following below this CDDL HEADER, with the
20c794b39650d115e17a15983b6b82e46238cf45gavinm * fields enclosed by brackets "[]" replaced with your own identifying
20c794b39650d115e17a15983b6b82e46238cf45gavinm * information: Portions Copyright [yyyy] [name of copyright owner]
20c794b39650d115e17a15983b6b82e46238cf45gavinm *
20c794b39650d115e17a15983b6b82e46238cf45gavinm * CDDL HEADER END
20c794b39650d115e17a15983b6b82e46238cf45gavinm */
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm/*
491f61a1e1c1fc54a47bbcf53dbbbe1293b93b27Yanmin Sun * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
20c794b39650d115e17a15983b6b82e46238cf45gavinm * Use is subject to license terms.
20c794b39650d115e17a15983b6b82e46238cf45gavinm */
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#ifndef _SYS_FM_CPU_GMCA_H
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define _SYS_FM_CPU_GMCA_H
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#ifdef __cplusplus
20c794b39650d115e17a15983b6b82e46238cf45gavinmextern "C" {
20c794b39650d115e17a15983b6b82e46238cf45gavinm#endif
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm/*
20c794b39650d115e17a15983b6b82e46238cf45gavinm * Generic x86 cpu ereports.
20c794b39650d115e17a15983b6b82e46238cf45gavinm *
20c794b39650d115e17a15983b6b82e46238cf45gavinm * On a machine-check exception, or on a periodic poll for error status
20c794b39650d115e17a15983b6b82e46238cf45gavinm * of a cpu, we read through all the MCA banks of the processor and
20c794b39650d115e17a15983b6b82e46238cf45gavinm * log an ereport for each MCA bank that contains valid error telemetry.
20c794b39650d115e17a15983b6b82e46238cf45gavinm * These ereports will all share the same detector FMRI and ENA.
20c794b39650d115e17a15983b6b82e46238cf45gavinm *
20c794b39650d115e17a15983b6b82e46238cf45gavinm * Since we have no model-specific knowledge of the cpu we cannot
20c794b39650d115e17a15983b6b82e46238cf45gavinm * decode all details of the error, so we'll stick to the "architectural"
20c794b39650d115e17a15983b6b82e46238cf45gavinm * bits. Similarly since we have no associated memory-controller driver
20c794b39650d115e17a15983b6b82e46238cf45gavinm * or detailed topology information we cannot produce "resource" ereport
20c794b39650d115e17a15983b6b82e46238cf45gavinm * FMRIs.
20c794b39650d115e17a15983b6b82e46238cf45gavinm */
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm/* Ereport class subcategory for generic x86 processors */
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC "generic-x86"
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm/*
20c794b39650d115e17a15983b6b82e46238cf45gavinm * Simple error code ereport leaf classes
20c794b39650d115e17a15983b6b82e46238cf45gavinm */
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_UNCLASSIFIED "unclassified"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_MC_CODE_PARITY "microcode_rom_parity"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_EXTERNAL "external"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_FRC "frc"
e3d60c9bd991a9826cbfa63b10595d44e123b9c4Adrian Frost#define FM_EREPORT_CPU_GENERIC_INTERNAL_PARITY "internal_parity"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_INTERNAL_TIMER "internal_timer"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_INTERNAL_UNCLASS "internal_unclassified"
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm/*
20c794b39650d115e17a15983b6b82e46238cf45gavinm * Leaf class to be used when we can match no simple or compound class
20c794b39650d115e17a15983b6b82e46238cf45gavinm */
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_UNKNOWN "unknown"
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm/*
20c794b39650d115e17a15983b6b82e46238cf45gavinm * Compound error code ereport leaf classes. The arguments for snprintf
20c794b39650d115e17a15983b6b82e46238cf45gavinm * will appear in the following order:
20c794b39650d115e17a15983b6b82e46238cf45gavinm *
20c794b39650d115e17a15983b6b82e46238cf45gavinm * 1 - TT interpretation
20c794b39650d115e17a15983b6b82e46238cf45gavinm * 2 - LL interpretation
20c794b39650d115e17a15983b6b82e46238cf45gavinm * 3 - RRRR interpretation
20c794b39650d115e17a15983b6b82e46238cf45gavinm * 4 - PP interpretation
20c794b39650d115e17a15983b6b82e46238cf45gavinm * 5 - II interpretation
20c794b39650d115e17a15983b6b82e46238cf45gavinm * 6 - T interpretation
20c794b39650d115e17a15983b6b82e46238cf45gavinm * 7 - "_uc" if this is a compound error with MCi_STATUS.UC set, else ""
e3d60c9bd991a9826cbfa63b10595d44e123b9c4Adrian Frost * 8 - CCCC interpretation
e3d60c9bd991a9826cbfa63b10595d44e123b9c4Adrian Frost * 9 - MMM interpretation
20c794b39650d115e17a15983b6b82e46238cf45gavinm *
20c794b39650d115e17a15983b6b82e46238cf45gavinm * They can be selected in the format string using the %n$s specifier form.
20c794b39650d115e17a15983b6b82e46238cf45gavinm *
20c794b39650d115e17a15983b6b82e46238cf45gavinm * The set of interpretations that we expand to will not be exactly the
20c794b39650d115e17a15983b6b82e46238cf45gavinm * same as the set of mnemonics described in Vol 3A (see the
20c794b39650d115e17a15983b6b82e46238cf45gavinm * FM_EREPORT_PAYLOAD_NAME_COMPOUND_ERR ereport payload member for that).
20c794b39650d115e17a15983b6b82e46238cf45gavinm * Instead we wish to compress the possible ereport classes that can
20c794b39650d115e17a15983b6b82e46238cf45gavinm * be generated by pushing things such as "LG" for generic cache level
20c794b39650d115e17a15983b6b82e46238cf45gavinm * down to "".
20c794b39650d115e17a15983b6b82e46238cf45gavinm *
20c794b39650d115e17a15983b6b82e46238cf45gavinm *
20c794b39650d115e17a15983b6b82e46238cf45gavinm * "Memory Hierarchy" in compound errors actually refers to CPU cache
20c794b39650d115e17a15983b6b82e46238cf45gavinm * memory.
20c794b39650d115e17a15983b6b82e46238cf45gavinm */
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_GENMEMHIER "%2$s" "cache" "%7$s"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_TLB "%2$s" "%1$s" "tlb" "%7$s"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_MEMHIER "%2$s" "%1$s" "cache" "%7$s"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_BUS_INTERCONNECT "bus_interconnect" "%5$s" "%7$s"
e3d60c9bd991a9826cbfa63b10595d44e123b9c4Adrian Frost#define FM_EREPORT_CPU_GENERIC_MEMORY_CONTROLLER "mc"
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm/*
20c794b39650d115e17a15983b6b82e46238cf45gavinm * The "interpretation" expansions for the above ereport leaf subclasses.
20c794b39650d115e17a15983b6b82e46238cf45gavinm */
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_TT_INSTR "i"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_TT_DATA "d"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_TT_GEN ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_LL_L0 "l0"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_LL_L1 "l1"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_LL_L2 "l2"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_LL_LG ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_RRRR_ERR ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_RRRR_RD ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_RRRR_WR ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_RRRR_DRD ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_RRRR_DWR ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_RRRR_IRD ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_RRRR_PREFETCH ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_RRRR_EVICT ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_RRRR_SNOOP ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_PP_SRC ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_PP_RES ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_PP_OBS ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_PP_GEN ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_II_MEM "_memory"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_II_IO "_io"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_II_GEN ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_T_NOTIMEOUT ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_CPU_GENERIC_T_TIMEOUT ""
20c794b39650d115e17a15983b6b82e46238cf45gavinm
e3d60c9bd991a9826cbfa63b10595d44e123b9c4Adrian Frost#define FM_EREPORT_CPU_GENERIC_CCCC ""
e3d60c9bd991a9826cbfa63b10595d44e123b9c4Adrian Frost
e3d60c9bd991a9826cbfa63b10595d44e123b9c4Adrian Frost#define FM_EREPORT_CPU_GENERIC_MMM_ERR ""
e3d60c9bd991a9826cbfa63b10595d44e123b9c4Adrian Frost#define FM_EREPORT_CPU_GENERIC_MMM_RD ""
e3d60c9bd991a9826cbfa63b10595d44e123b9c4Adrian Frost#define FM_EREPORT_CPU_GENERIC_MMM_WR ""
e3d60c9bd991a9826cbfa63b10595d44e123b9c4Adrian Frost#define FM_EREPORT_CPU_GENERIC_MMM_ADRCMD ""
491f61a1e1c1fc54a47bbcf53dbbbe1293b93b27Yanmin Sun#define FM_EREPORT_CPU_GENERIC_MMM_SCRUB ""
e3d60c9bd991a9826cbfa63b10595d44e123b9c4Adrian Frost
20c794b39650d115e17a15983b6b82e46238cf45gavinm/*
20c794b39650d115e17a15983b6b82e46238cf45gavinm * Ereport payload member names together with bitmask values to select
20c794b39650d115e17a15983b6b82e46238cf45gavinm * their inclusion in ereports.
20c794b39650d115e17a15983b6b82e46238cf45gavinm */
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define _FM_EREPORT_FLAG(n) (1ULL << (n))
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_FLAG_COMPOUND_ERR _FM_EREPORT_FLAG(1)
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_COMPOUND_ERR "compound_errorname"
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_FLAG_MCG_STATUS _FM_EREPORT_FLAG(2)
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_MCG_STATUS "IA32_MCG_STATUS"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_MCG_STATUS_MCIP "machine_check_in_progress"
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_FLAG_IP _FM_EREPORT_FLAG(3)
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_IP "ip"
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_FLAG_PRIV _FM_EREPORT_FLAG(4)
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_PRIV "privileged"
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_FLAG_BANK_NUM _FM_EREPORT_FLAG(5)
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_BANK_NUM "bank_number"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_BANK_MSR_OFFSET "bank_msr_offset"
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_FLAG_MC_STATUS _FM_EREPORT_FLAG(6)
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_MC_STATUS "IA32_MCi_STATUS"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_MC_STATUS_OVER "overflow"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_MC_STATUS_UC "error_uncorrected"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_MC_STATUS_EN "error_enabled"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_MC_STATUS_PCC "processor_context_corrupt"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_MC_STATUS_TES "threshold_based_error_status"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_MC_STATUS_ERRCODE "error_code"
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_MC_STATUS_EXTERRCODE "model_specific_error_code"
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_FLAG_MC_ADDR _FM_EREPORT_FLAG(7)
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_MC_ADDR "IA32_MCi_ADDR"
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_FLAG_MC_MISC _FM_EREPORT_FLAG(8)
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_MC_MISC "IA32_MCi_MISC"
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_FLAG_DISP _FM_EREPORT_FLAG(9)
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_NAME_DISP "disp"
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm/*
20c794b39650d115e17a15983b6b82e46238cf45gavinm * Common combinations of payload members
20c794b39650d115e17a15983b6b82e46238cf45gavinm */
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_FLAGS_GLOBAL \
20c794b39650d115e17a15983b6b82e46238cf45gavinm (FM_EREPORT_PAYLOAD_FLAG_MCG_STATUS | \
20c794b39650d115e17a15983b6b82e46238cf45gavinm FM_EREPORT_PAYLOAD_FLAG_IP | \
20c794b39650d115e17a15983b6b82e46238cf45gavinm FM_EREPORT_PAYLOAD_FLAG_PRIV)
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_FLAGS_BANK \
20c794b39650d115e17a15983b6b82e46238cf45gavinm (FM_EREPORT_PAYLOAD_FLAG_BANK_NUM | \
20c794b39650d115e17a15983b6b82e46238cf45gavinm FM_EREPORT_PAYLOAD_FLAG_MC_STATUS | \
20c794b39650d115e17a15983b6b82e46238cf45gavinm FM_EREPORT_PAYLOAD_FLAG_MC_ADDR | \
20c794b39650d115e17a15983b6b82e46238cf45gavinm FM_EREPORT_PAYLOAD_FLAG_MC_MISC | \
20c794b39650d115e17a15983b6b82e46238cf45gavinm FM_EREPORT_PAYLOAD_FLAG_DISP)
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_FLAGS_COMMON \
20c794b39650d115e17a15983b6b82e46238cf45gavinm (FM_EREPORT_PAYLOAD_FLAGS_GLOBAL | FM_EREPORT_PAYLOAD_FLAGS_BANK)
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define FM_EREPORT_PAYLOAD_FLAGS_COMPOUND_ERR \
20c794b39650d115e17a15983b6b82e46238cf45gavinm (FM_EREPORT_PAYLOAD_FLAGS_COMMON | FM_EREPORT_PAYLOAD_FLAG_COMPOUND_ERR)
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#ifdef __cplusplus
20c794b39650d115e17a15983b6b82e46238cf45gavinm}
20c794b39650d115e17a15983b6b82e46238cf45gavinm#endif
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#endif /* _SYS_FM_CPU_GMCA_H */