1168404Spjd/* 2168404Spjd * CDDL HEADER START 3168404Spjd * 4168404Spjd * The contents of this file are subject to the terms of the 5168404Spjd * Common Development and Distribution License (the "License"). 6168404Spjd * You may not use this file except in compliance with the License. 7168404Spjd * 8168404Spjd * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9168404Spjd * or http://www.opensolaris.org/os/licensing. 10168404Spjd * See the License for the specific language governing permissions 11168404Spjd * and limitations under the License. 12168404Spjd * 13168404Spjd * When distributing Covered Code, include this CDDL HEADER in each 14168404Spjd * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15168404Spjd * If applicable, add the following below this CDDL HEADER, with the 16168404Spjd * fields enclosed by brackets "[]" replaced with your own identifying 17168404Spjd * information: Portions Copyright [yyyy] [name of copyright owner] 18168404Spjd * 19168404Spjd * CDDL HEADER END 20168404Spjd */ 21168404Spjd 22168404Spjd/* 23219089Spjd * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. 24168404Spjd */ 25168404Spjd 26168404Spjd#ifndef _SYS_FM_PROTOCOL_H 27168404Spjd#define _SYS_FM_PROTOCOL_H 28168404Spjd 29168404Spjd#ifdef __cplusplus 30168404Spjdextern "C" { 31168404Spjd#endif 32168404Spjd 33168404Spjd#ifdef _KERNEL 34168404Spjd#include <sys/varargs.h> 35168404Spjd#include <sys/nvpair.h> 36168404Spjd#else 37168404Spjd#include <libnvpair.h> 38168404Spjd#include <stdarg.h> 39168404Spjd#endif 40168404Spjd 41168404Spjd/* FM common member names */ 42168404Spjd#define FM_CLASS "class" 43168404Spjd#define FM_VERSION "version" 44168404Spjd 45219089Spjd/* FM protocol category 1 class names */ 46168404Spjd#define FM_EREPORT_CLASS "ereport" 47168404Spjd#define FM_FAULT_CLASS "fault" 48219089Spjd#define FM_DEFECT_CLASS "defect" 49168404Spjd#define FM_RSRC_CLASS "resource" 50168404Spjd#define FM_LIST_EVENT "list" 51219089Spjd#define FM_IREPORT_CLASS "ireport" 52168404Spjd 53168404Spjd/* FM list.* event class values */ 54168404Spjd#define FM_LIST_SUSPECT_CLASS FM_LIST_EVENT ".suspect" 55168404Spjd#define FM_LIST_ISOLATED_CLASS FM_LIST_EVENT ".isolated" 56168404Spjd#define FM_LIST_REPAIRED_CLASS FM_LIST_EVENT ".repaired" 57185029Spjd#define FM_LIST_UPDATED_CLASS FM_LIST_EVENT ".updated" 58185029Spjd#define FM_LIST_RESOLVED_CLASS FM_LIST_EVENT ".resolved" 59168404Spjd 60168404Spjd/* ereport class subcategory values */ 61168404Spjd#define FM_ERROR_CPU "cpu" 62168404Spjd#define FM_ERROR_IO "io" 63168404Spjd 64168404Spjd/* ereport version and payload member names */ 65168404Spjd#define FM_EREPORT_VERS0 0 66168404Spjd#define FM_EREPORT_VERSION FM_EREPORT_VERS0 67168404Spjd 68168404Spjd/* ereport payload member names */ 69168404Spjd#define FM_EREPORT_DETECTOR "detector" 70168404Spjd#define FM_EREPORT_ENA "ena" 71168404Spjd 72168404Spjd/* list.* event payload member names */ 73168404Spjd#define FM_LIST_EVENT_SIZE "list-sz" 74168404Spjd 75219089Spjd/* ireport.* event payload member names */ 76219089Spjd#define FM_IREPORT_DETECTOR "detector" 77219089Spjd#define FM_IREPORT_UUID "uuid" 78219089Spjd#define FM_IREPORT_PRIORITY "pri" 79219089Spjd#define FM_IREPORT_ATTRIBUTES "attr" 80219089Spjd 81185029Spjd/* 82185029Spjd * list.suspect, isolated, updated, repaired and resolved 83185029Spjd * versions/payload member names. 84185029Spjd */ 85168404Spjd#define FM_SUSPECT_UUID "uuid" 86168404Spjd#define FM_SUSPECT_DIAG_CODE "code" 87168404Spjd#define FM_SUSPECT_DIAG_TIME "diag-time" 88168404Spjd#define FM_SUSPECT_DE "de" 89168404Spjd#define FM_SUSPECT_FAULT_LIST "fault-list" 90168404Spjd#define FM_SUSPECT_FAULT_SZ "fault-list-sz" 91168404Spjd#define FM_SUSPECT_FAULT_STATUS "fault-status" 92219089Spjd#define FM_SUSPECT_INJECTED "__injected" 93168404Spjd#define FM_SUSPECT_MESSAGE "message" 94185029Spjd#define FM_SUSPECT_RETIRE "retire" 95185029Spjd#define FM_SUSPECT_RESPONSE "response" 96219089Spjd#define FM_SUSPECT_SEVERITY "severity" 97168404Spjd 98168404Spjd#define FM_SUSPECT_VERS0 0 99168404Spjd#define FM_SUSPECT_VERSION FM_SUSPECT_VERS0 100168404Spjd 101185029Spjd#define FM_SUSPECT_FAULTY 0x1 102185029Spjd#define FM_SUSPECT_UNUSABLE 0x2 103185029Spjd#define FM_SUSPECT_NOT_PRESENT 0x4 104185029Spjd#define FM_SUSPECT_DEGRADED 0x8 105185029Spjd#define FM_SUSPECT_REPAIRED 0x10 106185029Spjd#define FM_SUSPECT_REPLACED 0x20 107185029Spjd#define FM_SUSPECT_ACQUITTED 0x40 108185029Spjd 109168404Spjd/* fault event versions and payload member names */ 110168404Spjd#define FM_FAULT_VERS0 0 111168404Spjd#define FM_FAULT_VERSION FM_FAULT_VERS0 112168404Spjd 113168404Spjd#define FM_FAULT_ASRU "asru" 114168404Spjd#define FM_FAULT_FRU "fru" 115168404Spjd#define FM_FAULT_FRU_LABEL "fru-label" 116168404Spjd#define FM_FAULT_CERTAINTY "certainty" 117168404Spjd#define FM_FAULT_RESOURCE "resource" 118168404Spjd#define FM_FAULT_LOCATION "location" 119168404Spjd 120168404Spjd/* resource event versions and payload member names */ 121168404Spjd#define FM_RSRC_VERS0 0 122168404Spjd#define FM_RSRC_VERSION FM_RSRC_VERS0 123168404Spjd#define FM_RSRC_RESOURCE "resource" 124168404Spjd 125168404Spjd/* resource.fm.asru.* payload member names */ 126168404Spjd#define FM_RSRC_ASRU_UUID "uuid" 127168404Spjd#define FM_RSRC_ASRU_CODE "code" 128168404Spjd#define FM_RSRC_ASRU_FAULTY "faulty" 129185029Spjd#define FM_RSRC_ASRU_REPAIRED "repaired" 130185029Spjd#define FM_RSRC_ASRU_REPLACED "replaced" 131185029Spjd#define FM_RSRC_ASRU_ACQUITTED "acquitted" 132219089Spjd#define FM_RSRC_ASRU_RESOLVED "resolved" 133168404Spjd#define FM_RSRC_ASRU_UNUSABLE "unusable" 134168404Spjd#define FM_RSRC_ASRU_EVENT "event" 135168404Spjd 136168404Spjd/* resource.fm.xprt.* versions and payload member names */ 137168404Spjd#define FM_RSRC_XPRT_VERS0 0 138168404Spjd#define FM_RSRC_XPRT_VERSION FM_RSRC_XPRT_VERS0 139168404Spjd#define FM_RSRC_XPRT_UUID "uuid" 140168404Spjd#define FM_RSRC_XPRT_SUBCLASS "subclass" 141219089Spjd#define FM_RSRC_XPRT_FAULT_STATUS "fault-status" 142219089Spjd#define FM_RSRC_XPRT_FAULT_HAS_ASRU "fault-has-asru" 143168404Spjd 144168404Spjd/* 145168404Spjd * FM ENA Format Macros 146168404Spjd */ 147168404Spjd#define ENA_FORMAT_MASK 0x3 148168404Spjd#define ENA_FORMAT(ena) ((ena) & ENA_FORMAT_MASK) 149168404Spjd 150168404Spjd/* ENA format types */ 151168404Spjd#define FM_ENA_FMT0 0 152168404Spjd#define FM_ENA_FMT1 1 153168404Spjd#define FM_ENA_FMT2 2 154168404Spjd 155168404Spjd/* Format 1 */ 156168404Spjd#define ENA_FMT1_GEN_MASK 0x00000000000003FCull 157168404Spjd#define ENA_FMT1_ID_MASK 0xFFFFFFFFFFFFFC00ull 158168404Spjd#define ENA_FMT1_CPUID_MASK 0x00000000000FFC00ull 159168404Spjd#define ENA_FMT1_TIME_MASK 0xFFFFFFFFFFF00000ull 160168404Spjd#define ENA_FMT1_GEN_SHFT 2 161168404Spjd#define ENA_FMT1_ID_SHFT 10 162168404Spjd#define ENA_FMT1_CPUID_SHFT ENA_FMT1_ID_SHFT 163168404Spjd#define ENA_FMT1_TIME_SHFT 20 164168404Spjd 165168404Spjd/* Format 2 */ 166168404Spjd#define ENA_FMT2_GEN_MASK 0x00000000000003FCull 167168404Spjd#define ENA_FMT2_ID_MASK 0xFFFFFFFFFFFFFC00ull 168168404Spjd#define ENA_FMT2_TIME_MASK ENA_FMT2_ID_MASK 169168404Spjd#define ENA_FMT2_GEN_SHFT 2 170168404Spjd#define ENA_FMT2_ID_SHFT 10 171168404Spjd#define ENA_FMT2_TIME_SHFT ENA_FMT2_ID_SHFT 172168404Spjd 173168404Spjd/* Common FMRI type names */ 174168404Spjd#define FM_FMRI_AUTHORITY "authority" 175168404Spjd#define FM_FMRI_SCHEME "scheme" 176168404Spjd#define FM_FMRI_SVC_AUTHORITY "svc-authority" 177185029Spjd#define FM_FMRI_FACILITY "facility" 178168404Spjd 179168404Spjd/* FMRI authority-type member names */ 180168404Spjd#define FM_FMRI_AUTH_CHASSIS "chassis-id" 181219089Spjd#define FM_FMRI_AUTH_PRODUCT_SN "product-sn" 182168404Spjd#define FM_FMRI_AUTH_PRODUCT "product-id" 183168404Spjd#define FM_FMRI_AUTH_DOMAIN "domain-id" 184168404Spjd#define FM_FMRI_AUTH_SERVER "server-id" 185168404Spjd#define FM_FMRI_AUTH_HOST "host-id" 186168404Spjd 187168404Spjd#define FM_AUTH_VERS0 0 188168404Spjd#define FM_FMRI_AUTH_VERSION FM_AUTH_VERS0 189168404Spjd 190168404Spjd/* scheme name values */ 191168404Spjd#define FM_FMRI_SCHEME_FMD "fmd" 192168404Spjd#define FM_FMRI_SCHEME_DEV "dev" 193168404Spjd#define FM_FMRI_SCHEME_HC "hc" 194168404Spjd#define FM_FMRI_SCHEME_SVC "svc" 195168404Spjd#define FM_FMRI_SCHEME_CPU "cpu" 196168404Spjd#define FM_FMRI_SCHEME_MEM "mem" 197168404Spjd#define FM_FMRI_SCHEME_MOD "mod" 198168404Spjd#define FM_FMRI_SCHEME_PKG "pkg" 199168404Spjd#define FM_FMRI_SCHEME_LEGACY "legacy-hc" 200168404Spjd#define FM_FMRI_SCHEME_ZFS "zfs" 201219089Spjd#define FM_FMRI_SCHEME_SW "sw" 202168404Spjd 203168404Spjd/* Scheme versions */ 204168404Spjd#define FMD_SCHEME_VERSION0 0 205168404Spjd#define FM_FMD_SCHEME_VERSION FMD_SCHEME_VERSION0 206168404Spjd#define DEV_SCHEME_VERSION0 0 207168404Spjd#define FM_DEV_SCHEME_VERSION DEV_SCHEME_VERSION0 208168404Spjd#define FM_HC_VERS0 0 209168404Spjd#define FM_HC_SCHEME_VERSION FM_HC_VERS0 210168404Spjd#define CPU_SCHEME_VERSION0 0 211168404Spjd#define CPU_SCHEME_VERSION1 1 212168404Spjd#define FM_CPU_SCHEME_VERSION CPU_SCHEME_VERSION1 213168404Spjd#define MEM_SCHEME_VERSION0 0 214168404Spjd#define FM_MEM_SCHEME_VERSION MEM_SCHEME_VERSION0 215168404Spjd#define MOD_SCHEME_VERSION0 0 216168404Spjd#define FM_MOD_SCHEME_VERSION MOD_SCHEME_VERSION0 217168404Spjd#define PKG_SCHEME_VERSION0 0 218168404Spjd#define FM_PKG_SCHEME_VERSION PKG_SCHEME_VERSION0 219168404Spjd#define LEGACY_SCHEME_VERSION0 0 220168404Spjd#define FM_LEGACY_SCHEME_VERSION LEGACY_SCHEME_VERSION0 221219089Spjd#define SVC_SCHEME_VERSION0 0 222219089Spjd#define FM_SVC_SCHEME_VERSION SVC_SCHEME_VERSION0 223168404Spjd#define ZFS_SCHEME_VERSION0 0 224168404Spjd#define FM_ZFS_SCHEME_VERSION ZFS_SCHEME_VERSION0 225219089Spjd#define SW_SCHEME_VERSION0 0 226219089Spjd#define FM_SW_SCHEME_VERSION SW_SCHEME_VERSION0 227168404Spjd 228168404Spjd/* hc scheme member names */ 229168404Spjd#define FM_FMRI_HC_SERIAL_ID "serial" 230168404Spjd#define FM_FMRI_HC_PART "part" 231168404Spjd#define FM_FMRI_HC_REVISION "revision" 232168404Spjd#define FM_FMRI_HC_ROOT "hc-root" 233168404Spjd#define FM_FMRI_HC_LIST_SZ "hc-list-sz" 234168404Spjd#define FM_FMRI_HC_LIST "hc-list" 235168404Spjd#define FM_FMRI_HC_SPECIFIC "hc-specific" 236168404Spjd 237185029Spjd/* facility member names */ 238185029Spjd#define FM_FMRI_FACILITY_NAME "facility-name" 239185029Spjd#define FM_FMRI_FACILITY_TYPE "facility-type" 240185029Spjd 241168404Spjd/* hc-list version and member names */ 242168404Spjd#define FM_FMRI_HC_NAME "hc-name" 243168404Spjd#define FM_FMRI_HC_ID "hc-id" 244168404Spjd 245168404Spjd#define HC_LIST_VERSION0 0 246168404Spjd#define FM_HC_LIST_VERSION HC_LIST_VERSION0 247168404Spjd 248168404Spjd/* hc-specific member names */ 249168404Spjd#define FM_FMRI_HC_SPECIFIC_OFFSET "offset" 250185029Spjd#define FM_FMRI_HC_SPECIFIC_PHYSADDR "physaddr" 251168404Spjd 252168404Spjd/* fmd module scheme member names */ 253168404Spjd#define FM_FMRI_FMD_NAME "mod-name" 254168404Spjd#define FM_FMRI_FMD_VERSION "mod-version" 255168404Spjd 256168404Spjd/* dev scheme member names */ 257168404Spjd#define FM_FMRI_DEV_ID "devid" 258219089Spjd#define FM_FMRI_DEV_TGTPTLUN0 "target-port-l0id" 259168404Spjd#define FM_FMRI_DEV_PATH "device-path" 260168404Spjd 261168404Spjd/* pkg scheme member names */ 262168404Spjd#define FM_FMRI_PKG_BASEDIR "pkg-basedir" 263168404Spjd#define FM_FMRI_PKG_INST "pkg-inst" 264168404Spjd#define FM_FMRI_PKG_VERSION "pkg-version" 265168404Spjd 266168404Spjd/* svc scheme member names */ 267219089Spjd#define FM_FMRI_SVC_NAME "svc-name" 268219089Spjd#define FM_FMRI_SVC_INSTANCE "svc-instance" 269219089Spjd#define FM_FMRI_SVC_CONTRACT_ID "svc-contract-id" 270168404Spjd 271168404Spjd/* svc-authority member names */ 272168404Spjd#define FM_FMRI_SVC_AUTH_SCOPE "scope" 273219089Spjd#define FM_FMRI_SVC_AUTH_SYSTEM_FQN "system-fqn" 274168404Spjd 275168404Spjd/* cpu scheme member names */ 276168404Spjd#define FM_FMRI_CPU_ID "cpuid" 277168404Spjd#define FM_FMRI_CPU_SERIAL_ID "serial" 278168404Spjd#define FM_FMRI_CPU_MASK "cpumask" 279168404Spjd#define FM_FMRI_CPU_VID "cpuvid" 280168404Spjd#define FM_FMRI_CPU_CPUFRU "cpufru" 281185029Spjd#define FM_FMRI_CPU_CACHE_INDEX "cacheindex" 282185029Spjd#define FM_FMRI_CPU_CACHE_WAY "cacheway" 283185029Spjd#define FM_FMRI_CPU_CACHE_BIT "cachebit" 284185029Spjd#define FM_FMRI_CPU_CACHE_TYPE "cachetype" 285168404Spjd 286185029Spjd#define FM_FMRI_CPU_CACHE_TYPE_L2 0 287185029Spjd#define FM_FMRI_CPU_CACHE_TYPE_L3 1 288185029Spjd 289168404Spjd/* legacy-hc scheme member names */ 290168404Spjd#define FM_FMRI_LEGACY_HC "component" 291168404Spjd#define FM_FMRI_LEGACY_HC_PREFIX FM_FMRI_SCHEME_HC":///" \ 292168404Spjd FM_FMRI_LEGACY_HC"=" 293168404Spjd 294168404Spjd/* mem scheme member names */ 295168404Spjd#define FM_FMRI_MEM_UNUM "unum" 296168404Spjd#define FM_FMRI_MEM_SERIAL_ID "serial" 297168404Spjd#define FM_FMRI_MEM_PHYSADDR "physaddr" 298168404Spjd#define FM_FMRI_MEM_MEMCONFIG "memconfig" 299168404Spjd#define FM_FMRI_MEM_OFFSET "offset" 300168404Spjd 301168404Spjd/* mod scheme member names */ 302168404Spjd#define FM_FMRI_MOD_PKG "mod-pkg" 303168404Spjd#define FM_FMRI_MOD_NAME "mod-name" 304168404Spjd#define FM_FMRI_MOD_ID "mod-id" 305168404Spjd#define FM_FMRI_MOD_DESC "mod-desc" 306168404Spjd 307168404Spjd/* zfs scheme member names */ 308168404Spjd#define FM_FMRI_ZFS_POOL "pool" 309168404Spjd#define FM_FMRI_ZFS_VDEV "vdev" 310168404Spjd 311219089Spjd/* sw scheme member names - extra indentation for members of an nvlist */ 312219089Spjd#define FM_FMRI_SW_OBJ "object" 313219089Spjd#define FM_FMRI_SW_OBJ_PATH "path" 314219089Spjd#define FM_FMRI_SW_OBJ_ROOT "root" 315219089Spjd#define FM_FMRI_SW_OBJ_PKG "pkg" 316219089Spjd#define FM_FMRI_SW_SITE "site" 317219089Spjd#define FM_FMRI_SW_SITE_TOKEN "token" 318219089Spjd#define FM_FMRI_SW_SITE_MODULE "module" 319219089Spjd#define FM_FMRI_SW_SITE_FILE "file" 320219089Spjd#define FM_FMRI_SW_SITE_LINE "line" 321219089Spjd#define FM_FMRI_SW_SITE_FUNC "func" 322219089Spjd#define FM_FMRI_SW_CTXT "context" 323219089Spjd#define FM_FMRI_SW_CTXT_ORIGIN "origin" 324219089Spjd#define FM_FMRI_SW_CTXT_EXECNAME "execname" 325219089Spjd#define FM_FMRI_SW_CTXT_PID "pid" 326219089Spjd#define FM_FMRI_SW_CTXT_ZONE "zone" 327219089Spjd#define FM_FMRI_SW_CTXT_CTID "ctid" 328219089Spjd#define FM_FMRI_SW_CTXT_STACK "stack" 329219089Spjd 330168404Spjdextern nv_alloc_t *fm_nva_xcreate(char *, size_t); 331168404Spjdextern void fm_nva_xdestroy(nv_alloc_t *); 332168404Spjd 333168404Spjdextern nvlist_t *fm_nvlist_create(nv_alloc_t *); 334168404Spjdextern void fm_nvlist_destroy(nvlist_t *, int); 335168404Spjd 336168404Spjd#define FM_NVA_FREE 0 /* free allocator on nvlist_destroy */ 337168404Spjd#define FM_NVA_RETAIN 1 /* keep allocator on nvlist_destroy */ 338168404Spjd 339168404Spjdextern void fm_ereport_set(nvlist_t *, int, const char *, uint64_t, 340168404Spjd const nvlist_t *, ...); 341168404Spjdextern void fm_payload_set(nvlist_t *, ...); 342168404Spjdextern int i_fm_payload_set(nvlist_t *, const char *, va_list); 343168404Spjdextern void fm_fmri_hc_set(nvlist_t *, int, const nvlist_t *, nvlist_t *, 344168404Spjd int, ...); 345168404Spjdextern void fm_fmri_dev_set(nvlist_t *, int, const nvlist_t *, const char *, 346219089Spjd const char *, const char *); 347168404Spjdextern void fm_fmri_de_set(nvlist_t *, int, const nvlist_t *, const char *); 348168404Spjdextern void fm_fmri_cpu_set(nvlist_t *, int, const nvlist_t *, uint32_t, 349168404Spjd uint8_t *, const char *); 350168404Spjdextern void fm_fmri_mem_set(nvlist_t *, int, const nvlist_t *, const char *, 351168404Spjd const char *, uint64_t); 352168404Spjdextern void fm_authority_set(nvlist_t *, int, const char *, const char *, 353168404Spjd const char *, const char *); 354168404Spjdextern void fm_fmri_zfs_set(nvlist_t *, int, uint64_t, uint64_t); 355219089Spjdextern void fm_fmri_hc_create(nvlist_t *, int, const nvlist_t *, nvlist_t *, 356219089Spjd nvlist_t *, int, ...); 357168404Spjd 358168404Spjdextern uint64_t fm_ena_increment(uint64_t); 359168404Spjdextern uint64_t fm_ena_generate(uint64_t, uchar_t); 360168404Spjdextern uint64_t fm_ena_generation_get(uint64_t); 361168404Spjdextern uchar_t fm_ena_format_get(uint64_t); 362168404Spjdextern uint64_t fm_ena_id_get(uint64_t); 363168404Spjdextern uint64_t fm_ena_time_get(uint64_t); 364168404Spjd 365168404Spjd#ifdef __cplusplus 366168404Spjd} 367168404Spjd#endif 368168404Spjd 369168404Spjd#endif /* _SYS_FM_PROTOCOL_H */ 370