xref: /titanic_51/usr/src/cmd/fm/modules/common/cpumem-retire/cma.h (revision 3f1e69bef33050bee99ea1e9992af13fc467281f)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
525cf1a30Sjl139090  * Common Development and Distribution License (the "License").
625cf1a30Sjl139090  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
225f149bcaScy152378  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
247c478bd9Sstevel@tonic-gate  */
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate #ifndef _CMA_H
277c478bd9Sstevel@tonic-gate #define	_CMA_H
287c478bd9Sstevel@tonic-gate 
297c478bd9Sstevel@tonic-gate #include <fm/fmd_api.h>
307c478bd9Sstevel@tonic-gate #include <sys/types.h>
317c478bd9Sstevel@tonic-gate 
327c478bd9Sstevel@tonic-gate #ifdef __cplusplus
337c478bd9Sstevel@tonic-gate extern "C" {
347c478bd9Sstevel@tonic-gate #endif
357c478bd9Sstevel@tonic-gate 
3625cf1a30Sjl139090 #define	CMA_RA_SUCCESS	0
3725cf1a30Sjl139090 #define	CMA_RA_FAILURE	1
3825cf1a30Sjl139090 
395f149bcaScy152378 #ifdef opl
405f149bcaScy152378 #define	FM_FMRI_HC_CPUIDS	"hc-xscf-cpuids"
415f149bcaScy152378 #endif
425f149bcaScy152378 
43e4b86885SCheng Sean Ye #ifdef i386
44e4b86885SCheng Sean Ye extern boolean_t cma_is_native;
45e4b86885SCheng Sean Ye #endif
46e4b86885SCheng Sean Ye 
477c478bd9Sstevel@tonic-gate typedef struct cma_page {
487c478bd9Sstevel@tonic-gate 	struct cma_page *pg_next;	/* List of page retirements for retry */
49*3f1e69beSCheng Sean Ye 	nvlist_t *pg_rsrc;		/* Resource for this page */
50*3f1e69beSCheng Sean Ye 	nvlist_t *pg_asru;		/* ASRU for this page */
517c478bd9Sstevel@tonic-gate 	uint64_t pg_addr;		/* Address of this page */
527c478bd9Sstevel@tonic-gate 	char *pg_uuid;			/* UUID for this page's case */
537c478bd9Sstevel@tonic-gate 	uint_t pg_nretries;		/* Number of retries so far for page */
547c478bd9Sstevel@tonic-gate } cma_page_t;
557c478bd9Sstevel@tonic-gate 
565f149bcaScy152378 #ifdef sun4v
575f149bcaScy152378 typedef struct cma_cpu {
585f149bcaScy152378 	struct cma_cpu *cpu_next;	/* List of cpus */
595f149bcaScy152378 	nvlist_t *cpu_fmri;		/* FMRI for this cpu entry  */
605f149bcaScy152378 	int cpuid;			/* physical id of this cpu */
615f149bcaScy152378 	char *cpu_uuid;			/* UUID for this cpu's case */
625f149bcaScy152378 	uint_t cpu_nretries;		/* Number of retries so far for cpu */
635f149bcaScy152378 } cma_cpu_t;
645f149bcaScy152378 #endif /* sun4v */
655f149bcaScy152378 
667c478bd9Sstevel@tonic-gate typedef struct cma {
677c478bd9Sstevel@tonic-gate 	struct timespec cma_cpu_delay;	/* CPU offline retry interval */
687c478bd9Sstevel@tonic-gate 	uint_t cma_cpu_tries;		/* Number of CPU offline retries */
697c478bd9Sstevel@tonic-gate 	uint_t cma_cpu_dooffline;	/* Whether to offline CPUs */
707c478bd9Sstevel@tonic-gate 	uint_t cma_cpu_forcedoffline;	/* Whether to do forced CPU offline */
715f149bcaScy152378 	uint_t cma_cpu_doonline;	/* Whether to online CPUs */
727c478bd9Sstevel@tonic-gate 	uint_t cma_cpu_doblacklist;	/* Whether to blacklist CPUs */
735f149bcaScy152378 	uint_t cma_cpu_dounblacklist;	/* Whether to unblacklist CPUs */
747c478bd9Sstevel@tonic-gate 	cma_page_t *cma_pages;		/* List of page retirements for retry */
757c478bd9Sstevel@tonic-gate 	hrtime_t cma_page_curdelay;	/* Current retry sleep interval */
767c478bd9Sstevel@tonic-gate 	hrtime_t cma_page_mindelay;	/* Minimum retry sleep interval */
777c478bd9Sstevel@tonic-gate 	hrtime_t cma_page_maxdelay;	/* Maximum retry sleep interval */
787c478bd9Sstevel@tonic-gate 	id_t cma_page_timerid;		/* fmd timer ID for retry sleep */
797c478bd9Sstevel@tonic-gate 	uint_t cma_page_doretire;	/* Whether to retire pages */
805f149bcaScy152378 	uint_t cma_page_dounretire;	/* Whether to unretire pages */
815f149bcaScy152378 #ifdef sun4v
825f149bcaScy152378 	cma_cpu_t *cma_cpus;		/* List of cpus */
835f149bcaScy152378 	hrtime_t cma_cpu_curdelay;	/* Current retry sleep interval */
845f149bcaScy152378 	hrtime_t cma_cpu_mindelay;	/* Minimum retry sleep interval */
855f149bcaScy152378 	hrtime_t cma_cpu_maxdelay;	/* Maximum retry sleep interval */
865f149bcaScy152378 	id_t cma_cpu_timerid;		/* LDOM cpu timer */
875f149bcaScy152378 #endif /* sun4v */
887c478bd9Sstevel@tonic-gate } cma_t;
897c478bd9Sstevel@tonic-gate 
907c478bd9Sstevel@tonic-gate typedef struct cma_stats {
917c478bd9Sstevel@tonic-gate 	fmd_stat_t cpu_flts;		/* Successful offlines */
925f149bcaScy152378 	fmd_stat_t cpu_repairs;		/* Successful onlines */
935f149bcaScy152378 	fmd_stat_t cpu_fails;		/* Failed offlines/onlines */
947c478bd9Sstevel@tonic-gate 	fmd_stat_t cpu_blfails;		/* Failed blacklists */
955f149bcaScy152378 	fmd_stat_t cpu_supp;		/* Suppressed offlines/onlines */
967c478bd9Sstevel@tonic-gate 	fmd_stat_t cpu_blsupp;		/* Suppressed blacklists */
977c478bd9Sstevel@tonic-gate 	fmd_stat_t page_flts;		/* Successful page retires */
985f149bcaScy152378 	fmd_stat_t page_repairs;	/* Successful page unretires */
995f149bcaScy152378 	fmd_stat_t page_fails;		/* Failed page retires/unretires */
1005f149bcaScy152378 	fmd_stat_t page_supp;		/* Suppressed retires/unretires */
1017c478bd9Sstevel@tonic-gate 	fmd_stat_t page_nonent;		/* Retires for non-present pages */
1027c478bd9Sstevel@tonic-gate 	fmd_stat_t bad_flts;		/* Malformed faults */
1037c478bd9Sstevel@tonic-gate 	fmd_stat_t nop_flts;		/* Inapplicable faults */
1047c478bd9Sstevel@tonic-gate 	fmd_stat_t auto_flts;		/* Auto-close faults */
1057c478bd9Sstevel@tonic-gate } cma_stats_t;
1067c478bd9Sstevel@tonic-gate 
1077c478bd9Sstevel@tonic-gate extern cma_stats_t cma_stats;
1087c478bd9Sstevel@tonic-gate extern cma_t cma;
1097c478bd9Sstevel@tonic-gate 
110*3f1e69beSCheng Sean Ye extern int cma_cpu_cpu_retire(fmd_hdl_t *, nvlist_t *, nvlist_t *,
1115f149bcaScy152378     const char *, boolean_t);
1125f149bcaScy152378 extern int cma_cpu_hc_retire(fmd_hdl_t *, nvlist_t *, nvlist_t *,
1135f149bcaScy152378     const char *, boolean_t);
1145f149bcaScy152378 extern int cma_page_retire(fmd_hdl_t *, nvlist_t *, nvlist_t *,
1155f149bcaScy152378     const char *, boolean_t);
1167c478bd9Sstevel@tonic-gate extern void cma_page_retry(fmd_hdl_t *);
1177c478bd9Sstevel@tonic-gate extern void cma_page_fini(fmd_hdl_t *);
1187c478bd9Sstevel@tonic-gate extern int cma_set_errno(int);
1197c478bd9Sstevel@tonic-gate 
1207bebe46cSjc25722 extern int cma_cache_way_retire(fmd_hdl_t *, nvlist_t *, nvlist_t *,
1217bebe46cSjc25722     const char *, boolean_t);
1225f149bcaScy152378 /*
1235f149bcaScy152378  * Platforms may have their own implementations of these functions
1245f149bcaScy152378  */
1255f149bcaScy152378 extern int cma_cpu_blacklist(fmd_hdl_t *, nvlist_t *, nvlist_t *, boolean_t);
1265f149bcaScy152378 extern int cma_cpu_statechange(fmd_hdl_t *, nvlist_t *, const char *, int,
1275f149bcaScy152378     boolean_t);
128e4b86885SCheng Sean Ye extern int cma_fmri_page_service_state(fmd_hdl_t *, nvlist_t *);
129e4b86885SCheng Sean Ye extern int cma_fmri_page_retire(fmd_hdl_t *, nvlist_t *);
130e4b86885SCheng Sean Ye extern int cma_fmri_page_unretire(fmd_hdl_t *, nvlist_t *);
1315f149bcaScy152378 
1325f149bcaScy152378 #ifdef sun4v
133*3f1e69beSCheng Sean Ye extern void cma_cpu_start_retry(fmd_hdl_t *, nvlist_t *, const char *,
134*3f1e69beSCheng Sean Ye     boolean_t);
1355f149bcaScy152378 extern void cma_cpu_fini(fmd_hdl_t *);
1365f149bcaScy152378 extern void cma_cpu_retry(fmd_hdl_t *);
1375f149bcaScy152378 #endif /* sun4v */
1385f149bcaScy152378 
1395f149bcaScy152378 extern const char *p_online_state_fmt(int);
1405f149bcaScy152378 
1417c478bd9Sstevel@tonic-gate #ifdef __cplusplus
1427c478bd9Sstevel@tonic-gate }
1437c478bd9Sstevel@tonic-gate #endif
1447c478bd9Sstevel@tonic-gate 
1457c478bd9Sstevel@tonic-gate #endif /* _CMA_H */
146