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 /*
23c84b7bbeSAdrian Frost  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
2420c794b3Sgavinm  */
2520c794b3Sgavinm 
2620c794b3Sgavinm #ifndef _AUTHAMD_H
2720c794b3Sgavinm #define	_AUTHAMD_H
2820c794b3Sgavinm 
2920c794b3Sgavinm #include <sys/types.h>
3020c794b3Sgavinm #include <sys/mca_amd.h>
3120c794b3Sgavinm #include <sys/cpu_module_ms_impl.h>
3220c794b3Sgavinm 
3320c794b3Sgavinm #ifdef __cplusplus
3420c794b3Sgavinm extern "C" {
3520c794b3Sgavinm #endif
3620c794b3Sgavinm 
378031591dSSrihari Venkatesan #define	AUTHAMD_MAX_NODES		8	/* max number of nodes */
388031591dSSrihari Venkatesan #define	AUTHAMD_DRAM_NCHANNEL		2	/* dram channels per node */
3920c794b3Sgavinm #define	AUTHAMD_DRAM_NCS		8	/* chip-selects per channel */
4020c794b3Sgavinm 
4120c794b3Sgavinm #define	AUTHAMD_FAMILY_6		0x6
4220c794b3Sgavinm #define	AUTHAMD_FAMILY_F		0xf
4320c794b3Sgavinm #define	AUTHAMD_FAMILY_10		0x10
4420c794b3Sgavinm 
4520c794b3Sgavinm #define	AUTHAMD_SYNDTYPE_64_8		0x0
4620c794b3Sgavinm #define	AUTHAMD_SYNDTYPE_128_16		0x1
4720c794b3Sgavinm 
4820c794b3Sgavinm typedef struct authamd_data authamd_data_t;
4920c794b3Sgavinm 
5020c794b3Sgavinm typedef struct authamd_error_disp {
5120c794b3Sgavinm 	const char *aad_subclass;
5220c794b3Sgavinm 	const char *aad_leafclass;
5320c794b3Sgavinm 	uint64_t aad_ereport_members;
5420c794b3Sgavinm } authamd_error_disp_t;
5520c794b3Sgavinm 
5620c794b3Sgavinm /*
5720c794b3Sgavinm  * Model-specific logout structure.
5820c794b3Sgavinm  */
5920c794b3Sgavinm #pragma pack(1)
6020c794b3Sgavinm typedef struct authamd_logout {
6120c794b3Sgavinm 	uint8_t aal_eccerrcnt[AUTHAMD_DRAM_NCHANNEL][AUTHAMD_DRAM_NCS];
6220c794b3Sgavinm } authamd_logout_t;
6320c794b3Sgavinm #pragma pack()
6420c794b3Sgavinm 
6520c794b3Sgavinm /*
668031591dSSrihari Venkatesan  * Per node shared state
6720c794b3Sgavinm  */
688031591dSSrihari Venkatesan struct authamd_nodeshared {
695667185bSSrihari Venkatesan 	uint_t ans_chipid;
705667185bSSrihari Venkatesan 	uint_t ans_procnodeid;
715667185bSSrihari Venkatesan 	uint_t ans_family;		/* family number */
72*22e4c3acSKeith M Wesolowski 	x86_chiprev_t ans_rev;		/* revision per cpuid_getchiprev */
735667185bSSrihari Venkatesan 	volatile ulong_t ans_cfgonce;	/* Config performed once per chip */
745667185bSSrihari Venkatesan 	hrtime_t ans_poll_timestamp;	/* Checks poll owner is alive */
755667185bSSrihari Venkatesan 	cmi_hdl_t ans_pollowner;	/* poller of shared resources */
765667185bSSrihari Venkatesan 	char *ans_eccsymsz;		/* DRAM ChipKill ECC Symbol Size */
7720c794b3Sgavinm };
7820c794b3Sgavinm 
7920c794b3Sgavinm enum authamd_cfgonce_bitnum {
8020c794b3Sgavinm 	AUTHAMD_CFGONCE_ONLNSPRCFG,
8125f47677Sgavinm 	AUTHAMD_CFGONCE_NBTHRESH,
8225f47677Sgavinm 	AUTHAMD_CFGONCE_NBMCACFG,
83a4e4e13fSgavinm 	AUTHAMD_CFGONCE_CACHESCRUB,
845667185bSSrihari Venkatesan 	AUTHAMD_CFGONCE_NBMCA,
855667185bSSrihari Venkatesan 	AUTHAMD_CFGONCE_ECCSYMSZ
8620c794b3Sgavinm };
8720c794b3Sgavinm 
8820c794b3Sgavinm /*
8920c794b3Sgavinm  * Per-CPU model-specific state
9020c794b3Sgavinm  */
9120c794b3Sgavinm struct authamd_data {
9220c794b3Sgavinm 	cmi_hdl_t amd_hdl;			/* cpu we're associated with */
9320c794b3Sgavinm 	uint64_t amd_hwcr;
948031591dSSrihari Venkatesan 	struct authamd_nodeshared *amd_shared;
9520c794b3Sgavinm };
9620c794b3Sgavinm 
9720c794b3Sgavinm #ifdef _KERNEL
9820c794b3Sgavinm 
9920c794b3Sgavinm /*
10020c794b3Sgavinm  * Our cms_ops operations and function prototypes for all non-NULL members.
10120c794b3Sgavinm  */
10220c794b3Sgavinm extern const cms_ops_t _cms_ops;
10320c794b3Sgavinm 
10420c794b3Sgavinm extern int authamd_init(cmi_hdl_t, void **);
10520c794b3Sgavinm extern size_t authamd_logout_size(cmi_hdl_t);
10620c794b3Sgavinm extern uint64_t authamd_mcgctl_val(cmi_hdl_t, int, uint64_t);
10720c794b3Sgavinm extern boolean_t authamd_bankctl_skipinit(cmi_hdl_t, int);
10820c794b3Sgavinm extern uint64_t authamd_bankctl_val(cmi_hdl_t, int, uint64_t);
10920c794b3Sgavinm extern void authamd_mca_init(cmi_hdl_t, int);
11020c794b3Sgavinm extern void authamd_bank_logout(cmi_hdl_t, int, uint64_t, uint64_t,
11120c794b3Sgavinm     uint64_t, void *);
11220c794b3Sgavinm extern uint32_t authamd_error_action(cmi_hdl_t, int, int, uint64_t,
11320c794b3Sgavinm     uint64_t, uint64_t, void *);
114c84b7bbeSAdrian Frost extern cms_cookie_t authamd_disp_match(cmi_hdl_t, int, int, uint64_t, uint64_t,
11520c794b3Sgavinm     uint64_t, void *);
11620c794b3Sgavinm extern void authamd_ereport_class(cmi_hdl_t, cms_cookie_t, const char **,
11720c794b3Sgavinm     const char **);
11820c794b3Sgavinm extern void authamd_ereport_add_logout(cmi_hdl_t, nvlist_t *,
11920c794b3Sgavinm     nv_alloc_t *, int, uint64_t, uint64_t, uint64_t, void *, cms_cookie_t);
12020c794b3Sgavinm extern cms_errno_t authamd_msrinject(cmi_hdl_t, uint_t, uint64_t);
12120c794b3Sgavinm 
12220c794b3Sgavinm #endif /* _KERNEL */
12320c794b3Sgavinm 
12420c794b3Sgavinm #ifdef __cplusplus
12520c794b3Sgavinm }
12620c794b3Sgavinm #endif
12720c794b3Sgavinm 
12820c794b3Sgavinm #endif /* _AUTHAMD_H */
129