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