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/*
c84b7bbef5ecc2a27799422588073deefd9db715Adrian Frost * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
20c794b39650d115e17a15983b6b82e46238cf45gavinm */
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#ifndef _AUTHAMD_H
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define _AUTHAMD_H
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#include <sys/types.h>
20c794b39650d115e17a15983b6b82e46238cf45gavinm#include <sys/mca_amd.h>
20c794b39650d115e17a15983b6b82e46238cf45gavinm#include <sys/cpu_module_ms_impl.h>
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#ifdef __cplusplus
20c794b39650d115e17a15983b6b82e46238cf45gavinmextern "C" {
20c794b39650d115e17a15983b6b82e46238cf45gavinm#endif
20c794b39650d115e17a15983b6b82e46238cf45gavinm
8031591d3cc3c82e97f4b60ea22d671525077b15Srihari Venkatesan#define AUTHAMD_MAX_NODES 8 /* max number of nodes */
8031591d3cc3c82e97f4b60ea22d671525077b15Srihari Venkatesan#define AUTHAMD_DRAM_NCHANNEL 2 /* dram channels per node */
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define AUTHAMD_DRAM_NCS 8 /* chip-selects per channel */
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define AUTHAMD_FAMILY_6 0x6
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define AUTHAMD_FAMILY_F 0xf
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define AUTHAMD_FAMILY_10 0x10
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define AUTHAMD_SYNDTYPE_64_8 0x0
20c794b39650d115e17a15983b6b82e46238cf45gavinm#define AUTHAMD_SYNDTYPE_128_16 0x1
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinmtypedef struct authamd_data authamd_data_t;
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinmtypedef struct authamd_error_disp {
20c794b39650d115e17a15983b6b82e46238cf45gavinm const char *aad_subclass;
20c794b39650d115e17a15983b6b82e46238cf45gavinm const char *aad_leafclass;
20c794b39650d115e17a15983b6b82e46238cf45gavinm uint64_t aad_ereport_members;
20c794b39650d115e17a15983b6b82e46238cf45gavinm} authamd_error_disp_t;
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm/*
20c794b39650d115e17a15983b6b82e46238cf45gavinm * Model-specific logout structure.
20c794b39650d115e17a15983b6b82e46238cf45gavinm */
20c794b39650d115e17a15983b6b82e46238cf45gavinm#pragma pack(1)
20c794b39650d115e17a15983b6b82e46238cf45gavinmtypedef struct authamd_logout {
20c794b39650d115e17a15983b6b82e46238cf45gavinm uint8_t aal_eccerrcnt[AUTHAMD_DRAM_NCHANNEL][AUTHAMD_DRAM_NCS];
20c794b39650d115e17a15983b6b82e46238cf45gavinm} authamd_logout_t;
20c794b39650d115e17a15983b6b82e46238cf45gavinm#pragma pack()
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm/*
8031591d3cc3c82e97f4b60ea22d671525077b15Srihari Venkatesan * Per node shared state
20c794b39650d115e17a15983b6b82e46238cf45gavinm */
8031591d3cc3c82e97f4b60ea22d671525077b15Srihari Venkatesanstruct authamd_nodeshared {
5667185bc023b9742cb2480659d7673fa9ac8050Srihari Venkatesan uint_t ans_chipid;
5667185bc023b9742cb2480659d7673fa9ac8050Srihari Venkatesan uint_t ans_procnodeid;
5667185bc023b9742cb2480659d7673fa9ac8050Srihari Venkatesan uint_t ans_family; /* family number */
5667185bc023b9742cb2480659d7673fa9ac8050Srihari Venkatesan uint32_t ans_rev; /* revision per cpuid_getchiprev */
5667185bc023b9742cb2480659d7673fa9ac8050Srihari Venkatesan volatile ulong_t ans_cfgonce; /* Config performed once per chip */
5667185bc023b9742cb2480659d7673fa9ac8050Srihari Venkatesan hrtime_t ans_poll_timestamp; /* Checks poll owner is alive */
5667185bc023b9742cb2480659d7673fa9ac8050Srihari Venkatesan cmi_hdl_t ans_pollowner; /* poller of shared resources */
5667185bc023b9742cb2480659d7673fa9ac8050Srihari Venkatesan char *ans_eccsymsz; /* DRAM ChipKill ECC Symbol Size */
20c794b39650d115e17a15983b6b82e46238cf45gavinm};
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinmenum authamd_cfgonce_bitnum {
20c794b39650d115e17a15983b6b82e46238cf45gavinm AUTHAMD_CFGONCE_ONLNSPRCFG,
25f476773dea2a0ee593dcf662a38d5f02487196gavinm AUTHAMD_CFGONCE_NBTHRESH,
25f476773dea2a0ee593dcf662a38d5f02487196gavinm AUTHAMD_CFGONCE_NBMCACFG,
a4e4e13f4001644f2f960e3be0056c22b3a40fd1gavinm AUTHAMD_CFGONCE_CACHESCRUB,
5667185bc023b9742cb2480659d7673fa9ac8050Srihari Venkatesan AUTHAMD_CFGONCE_NBMCA,
5667185bc023b9742cb2480659d7673fa9ac8050Srihari Venkatesan AUTHAMD_CFGONCE_ECCSYMSZ
20c794b39650d115e17a15983b6b82e46238cf45gavinm};
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm/*
20c794b39650d115e17a15983b6b82e46238cf45gavinm * Per-CPU model-specific state
20c794b39650d115e17a15983b6b82e46238cf45gavinm */
20c794b39650d115e17a15983b6b82e46238cf45gavinmstruct authamd_data {
20c794b39650d115e17a15983b6b82e46238cf45gavinm cmi_hdl_t amd_hdl; /* cpu we're associated with */
20c794b39650d115e17a15983b6b82e46238cf45gavinm uint64_t amd_hwcr;
8031591d3cc3c82e97f4b60ea22d671525077b15Srihari Venkatesan struct authamd_nodeshared *amd_shared;
20c794b39650d115e17a15983b6b82e46238cf45gavinm};
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#ifdef _KERNEL
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm/*
20c794b39650d115e17a15983b6b82e46238cf45gavinm * Our cms_ops operations and function prototypes for all non-NULL members.
20c794b39650d115e17a15983b6b82e46238cf45gavinm */
20c794b39650d115e17a15983b6b82e46238cf45gavinmextern const cms_ops_t _cms_ops;
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinmextern int authamd_init(cmi_hdl_t, void **);
20c794b39650d115e17a15983b6b82e46238cf45gavinmextern size_t authamd_logout_size(cmi_hdl_t);
20c794b39650d115e17a15983b6b82e46238cf45gavinmextern uint64_t authamd_mcgctl_val(cmi_hdl_t, int, uint64_t);
20c794b39650d115e17a15983b6b82e46238cf45gavinmextern boolean_t authamd_bankctl_skipinit(cmi_hdl_t, int);
20c794b39650d115e17a15983b6b82e46238cf45gavinmextern uint64_t authamd_bankctl_val(cmi_hdl_t, int, uint64_t);
20c794b39650d115e17a15983b6b82e46238cf45gavinmextern void authamd_mca_init(cmi_hdl_t, int);
20c794b39650d115e17a15983b6b82e46238cf45gavinmextern void authamd_bank_logout(cmi_hdl_t, int, uint64_t, uint64_t,
20c794b39650d115e17a15983b6b82e46238cf45gavinm uint64_t, void *);
20c794b39650d115e17a15983b6b82e46238cf45gavinmextern uint32_t authamd_error_action(cmi_hdl_t, int, int, uint64_t,
20c794b39650d115e17a15983b6b82e46238cf45gavinm uint64_t, uint64_t, void *);
c84b7bbef5ecc2a27799422588073deefd9db715Adrian Frostextern cms_cookie_t authamd_disp_match(cmi_hdl_t, int, int, uint64_t, uint64_t,
20c794b39650d115e17a15983b6b82e46238cf45gavinm uint64_t, void *);
20c794b39650d115e17a15983b6b82e46238cf45gavinmextern void authamd_ereport_class(cmi_hdl_t, cms_cookie_t, const char **,
20c794b39650d115e17a15983b6b82e46238cf45gavinm const char **);
20c794b39650d115e17a15983b6b82e46238cf45gavinmextern void authamd_ereport_add_logout(cmi_hdl_t, nvlist_t *,
20c794b39650d115e17a15983b6b82e46238cf45gavinm nv_alloc_t *, int, uint64_t, uint64_t, uint64_t, void *, cms_cookie_t);
20c794b39650d115e17a15983b6b82e46238cf45gavinmextern cms_errno_t authamd_msrinject(cmi_hdl_t, uint_t, uint64_t);
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#endif /* _KERNEL */
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#ifdef __cplusplus
20c794b39650d115e17a15983b6b82e46238cf45gavinm}
20c794b39650d115e17a15983b6b82e46238cf45gavinm#endif
20c794b39650d115e17a15983b6b82e46238cf45gavinm
20c794b39650d115e17a15983b6b82e46238cf45gavinm#endif /* _AUTHAMD_H */