120c794b3Sgavinm /* 220c794b3Sgavinm * CDDL HEADER START 320c794b3Sgavinm * 420c794b3Sgavinm * The contents of this file are subject to the terms of the 520c794b3Sgavinm * Common Development and Distribution License (the "License"). 620c794b3Sgavinm * You may not use this file except in compliance with the License. 720c794b3Sgavinm * 820c794b3Sgavinm * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 920c794b3Sgavinm * or http://www.opensolaris.org/os/licensing. 1020c794b3Sgavinm * See the License for the specific language governing permissions 1120c794b3Sgavinm * and limitations under the License. 1220c794b3Sgavinm * 1320c794b3Sgavinm * When distributing Covered Code, include this CDDL HEADER in each 1420c794b3Sgavinm * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1520c794b3Sgavinm * If applicable, add the following below this CDDL HEADER, with the 1620c794b3Sgavinm * fields enclosed by brackets "[]" replaced with your own identifying 1720c794b3Sgavinm * information: Portions Copyright [yyyy] [name of copyright owner] 1820c794b3Sgavinm * 1920c794b3Sgavinm * CDDL HEADER END 2020c794b3Sgavinm */ 2120c794b3Sgavinm 2220c794b3Sgavinm /* 23*c84b7bbeSAdrian Frost * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 2420c794b3Sgavinm */ 2520c794b3Sgavinm 2620c794b3Sgavinm #ifndef _CPU_MODULE_MS_H 2720c794b3Sgavinm #define _CPU_MODULE_MS_H 2820c794b3Sgavinm 2920c794b3Sgavinm #include <sys/types.h> 3020c794b3Sgavinm #include <sys/cpuvar.h> 3120c794b3Sgavinm #include <sys/nvpair.h> 3220c794b3Sgavinm #include <sys/cpu_module.h> 3320c794b3Sgavinm 3420c794b3Sgavinm #ifdef __cplusplus 3520c794b3Sgavinm extern "C" { 3620c794b3Sgavinm #endif 3720c794b3Sgavinm 3820c794b3Sgavinm #ifdef _KERNEL 3920c794b3Sgavinm 4020c794b3Sgavinm #define CMSERR_BASE 0xe000 4120c794b3Sgavinm 4220c794b3Sgavinm typedef enum cms_errno { 4320c794b3Sgavinm CMS_SUCCESS = 0, 4420c794b3Sgavinm CMSERR_UNKNOWN = CMSERR_BASE, /* No specific error reason given */ 4520c794b3Sgavinm CMSERR_NOTSUP, /* Unsupported operation */ 4620c794b3Sgavinm CMSERR_BADMSRWRITE /* Error on wrmsr */ 4720c794b3Sgavinm 4820c794b3Sgavinm } cms_errno_t; 4920c794b3Sgavinm 5020c794b3Sgavinm extern void cms_init(cmi_hdl_t); 5120c794b3Sgavinm extern boolean_t cms_present(cmi_hdl_t); 5220c794b3Sgavinm extern void *cms_hdl_getcmsdata(cmi_hdl_t); 5320c794b3Sgavinm extern void cms_post_startup(cmi_hdl_t); 5420c794b3Sgavinm extern void cms_post_mpstartup(cmi_hdl_t); 5520c794b3Sgavinm 5620c794b3Sgavinm extern size_t cms_logout_size(cmi_hdl_t); 5720c794b3Sgavinm 5820c794b3Sgavinm extern uint64_t cms_mcgctl_val(cmi_hdl_t, int, uint64_t); 5920c794b3Sgavinm 6020c794b3Sgavinm extern boolean_t cms_bankctl_skipinit(cmi_hdl_t, int); 6120c794b3Sgavinm extern uint64_t cms_bankctl_val(cmi_hdl_t, int, uint64_t); 6220c794b3Sgavinm extern boolean_t cms_bankstatus_skipinit(cmi_hdl_t, int); 6320c794b3Sgavinm extern uint64_t cms_bankstatus_val(cmi_hdl_t, int, uint64_t); 6420c794b3Sgavinm 6520c794b3Sgavinm extern void cms_mca_init(cmi_hdl_t, int); 6620c794b3Sgavinm 6720c794b3Sgavinm extern uint64_t cms_poll_ownermask(cmi_hdl_t, hrtime_t); 6820c794b3Sgavinm 6920c794b3Sgavinm extern void cms_bank_logout(cmi_hdl_t, int, uint64_t, uint64_t, uint64_t, 7020c794b3Sgavinm void *); 7120c794b3Sgavinm 7220c794b3Sgavinm extern cms_errno_t cms_msrinject(cmi_hdl_t, uint_t, uint64_t); 7320c794b3Sgavinm 7420c794b3Sgavinm extern void cms_fini(cmi_hdl_t); 7520c794b3Sgavinm 7620c794b3Sgavinm /* 7720c794b3Sgavinm * Return flags for cms_error_action. The model-specific implementation 7820c794b3Sgavinm * can perform additional error handling during this call (e.g., cache 7920c794b3Sgavinm * flush). but it needs to return an indication to the caller as to 8020c794b3Sgavinm * the high-level impact of the error. 8120c794b3Sgavinm * 8220c794b3Sgavinm * CMS_ERRSCOPE_CLEAREDUC indicates that a UC error has in some way 8320c794b3Sgavinm * been cleared by the model-specific handling, and that no bad data 8420c794b3Sgavinm * remains in the system as far as this error is concerned. 8520c794b3Sgavinm * 8620c794b3Sgavinm * CMS_ERRSCOPE_POISONED indicates that the uncorrected data has 8720c794b3Sgavinm * been marked in some way to ensure that is cannot subsequently be mistaken 8820c794b3Sgavinm * for good data. 8920c794b3Sgavinm * 9020c794b3Sgavinm * CMS_ERRSCOPE_CURCONTEXT_OK indicates that the interrupted context is 9120c794b3Sgavinm * unaffected by the uncorrected error. 9220c794b3Sgavinm * 9320c794b3Sgavinm * CMS_ERRSCOPE_IGNORE_ERR indicates that the error should be ignored, 9420c794b3Sgavinm * regardless of apparent current context status and presence of uncorrected 9520c794b3Sgavinm * data. 9620c794b3Sgavinm * 9720c794b3Sgavinm * CMS_ERRSCOPE_FORCE_FATAL indicates that the error should be considered 9820c794b3Sgavinm * terminal, even if no uncorrected data is present and context appears ok 9920c794b3Sgavinm */ 10020c794b3Sgavinm 10120c794b3Sgavinm #define CMS_ERRSCOPE_CLEARED_UC 0x01 10220c794b3Sgavinm #define CMS_ERRSCOPE_POISONED 0x02 10320c794b3Sgavinm #define CMS_ERRSCOPE_CURCONTEXT_OK 0x04 10420c794b3Sgavinm #define CMS_ERRSCOPE_IGNORE_ERR 0x08 10520c794b3Sgavinm #define CMS_ERRSCOPE_FORCE_FATAL 0x10 10620c794b3Sgavinm 10720c794b3Sgavinm typedef void *cms_cookie_t; 10820c794b3Sgavinm 10920c794b3Sgavinm extern uint32_t cms_error_action(cmi_hdl_t, int, int, uint64_t, uint64_t, 11020c794b3Sgavinm uint64_t, void *); 11120c794b3Sgavinm 112*c84b7bbeSAdrian Frost extern cms_cookie_t cms_disp_match(cmi_hdl_t, int, int, uint64_t, uint64_t, 113*c84b7bbeSAdrian Frost uint64_t, void *); 11420c794b3Sgavinm extern void cms_ereport_class(cmi_hdl_t, cms_cookie_t, const char **, 11520c794b3Sgavinm const char **); 116491f61a1SYanmin Sun extern nvlist_t *cms_ereport_detector(cmi_hdl_t, int, cms_cookie_t, 117491f61a1SYanmin Sun nv_alloc_t *); 11820c794b3Sgavinm extern boolean_t cms_ereport_includestack(cmi_hdl_t, cms_cookie_t); 11920c794b3Sgavinm extern void cms_ereport_add_logout(cmi_hdl_t, nvlist_t *, nv_alloc_t *, int, 12020c794b3Sgavinm uint64_t, uint64_t, uint64_t, void *, cms_cookie_t); 12120c794b3Sgavinm 12220c794b3Sgavinm #endif /* _KERNEL */ 12320c794b3Sgavinm 12420c794b3Sgavinm #ifdef __cplusplus 12520c794b3Sgavinm } 12620c794b3Sgavinm #endif 12720c794b3Sgavinm 12820c794b3Sgavinm #endif /* _CPU_MODULE_MS_H */ 129