#ifndef _CMA_H
#define _CMA_H
#include <fm/fmd_api.h>
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
#define CMA_RA_SUCCESS 0
#define CMA_RA_FAILURE 1
#ifdef opl
#define FM_FMRI_HC_CPUIDS "hc-xscf-cpuids"
#endif
#ifdef i386
extern boolean_t cma_is_native;
#endif
typedef struct cma_page {
struct cma_page *pg_next;
nvlist_t *pg_rsrc;
nvlist_t *pg_asru;
uint64_t pg_addr;
char *pg_uuid;
uint_t pg_nretries;
} cma_page_t;
#ifdef sun4v
typedef struct cma_cpu {
struct cma_cpu *cpu_next;
nvlist_t *cpu_fmri;
int cpuid;
char *cpu_uuid;
uint_t cpu_nretries;
} cma_cpu_t;
#endif
typedef struct cma {
struct timespec cma_cpu_delay;
uint_t cma_cpu_tries;
uint_t cma_cpu_dooffline;
uint_t cma_cpu_forcedoffline;
uint_t cma_cpu_doonline;
uint_t cma_cpu_doblacklist;
uint_t cma_cpu_dounblacklist;
cma_page_t *cma_pages;
hrtime_t cma_page_curdelay;
hrtime_t cma_page_mindelay;
hrtime_t cma_page_maxdelay;
id_t cma_page_timerid;
uint_t cma_page_doretire;
uint_t cma_page_dounretire;
#ifdef sun4v
cma_cpu_t *cma_cpus;
hrtime_t cma_cpu_curdelay;
hrtime_t cma_cpu_mindelay;
hrtime_t cma_cpu_maxdelay;
id_t cma_cpu_timerid;
#endif
} cma_t;
typedef struct cma_stats {
fmd_stat_t cpu_flts;
fmd_stat_t cpu_repairs;
fmd_stat_t cpu_fails;
fmd_stat_t cpu_blfails;
fmd_stat_t cpu_supp;
fmd_stat_t cpu_blsupp;
fmd_stat_t page_flts;
fmd_stat_t page_repairs;
fmd_stat_t page_fails;
fmd_stat_t page_supp;
fmd_stat_t page_nonent;
fmd_stat_t bad_flts;
fmd_stat_t nop_flts;
fmd_stat_t auto_flts;
} cma_stats_t;
extern cma_stats_t cma_stats;
extern cma_t cma;
extern int cma_cpu_cpu_retire(fmd_hdl_t *, nvlist_t *, nvlist_t *,
const char *, boolean_t);
extern int cma_cpu_hc_retire(fmd_hdl_t *, nvlist_t *, nvlist_t *,
const char *, boolean_t);
extern int cma_page_retire(fmd_hdl_t *, nvlist_t *, nvlist_t *,
const char *, boolean_t);
extern void cma_page_retry(fmd_hdl_t *);
extern void cma_page_fini(fmd_hdl_t *);
extern int cma_set_errno(int);
extern int cma_cache_way_retire(fmd_hdl_t *, nvlist_t *, nvlist_t *,
const char *, boolean_t);
extern int cma_cpu_blacklist(fmd_hdl_t *, nvlist_t *, nvlist_t *, boolean_t);
extern int cma_cpu_statechange(fmd_hdl_t *, nvlist_t *, const char *, int,
boolean_t);
extern int cma_fmri_page_service_state(fmd_hdl_t *, nvlist_t *);
extern int cma_fmri_page_retire(fmd_hdl_t *, nvlist_t *);
extern int cma_fmri_page_unretire(fmd_hdl_t *, nvlist_t *);
#ifdef sun4v
extern void cma_cpu_start_retry(fmd_hdl_t *, nvlist_t *, const char *,
boolean_t);
extern void cma_cpu_fini(fmd_hdl_t *);
extern void cma_cpu_retry(fmd_hdl_t *);
#endif
extern const char *p_online_state_fmt(int);
#ifdef __cplusplus
}
#endif
#endif