#ifndef _SYS_ERRCLASSIFY_H
#define _SYS_ERRCLASSIFY_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _ASM
#include <sys/errorq.h>
typedef enum {
CE_DISP_UNKNOWN,
CE_DISP_INTERMITTENT,
CE_DISP_POSS_PERS,
CE_DISP_PERS,
CE_DISP_LEAKY,
CE_DISP_POSS_STICKY,
CE_DISP_STICKY,
CE_ACT_DONE = 0x100,
CE_ACT_LKYCHK = 0x200,
CE_ACT_PTNRCHK = 0x400,
CE_DISP_BAD = 0xbadbad1
} ce_dispact_t;
#define CE_DISP(dispact) \
(dispact & 0xff)
#define CE_ACT(dispact) \
(dispact & 0xff00)
#define CE_DISP_DESC_U "U"
#define CE_DISP_DESC_I "I"
#define CE_DISP_DESC_PP "PP"
#define CE_DISP_DESC_P "P"
#define CE_DISP_DESC_L "L"
#define CE_DISP_DESC_PS "PS"
#define CE_DISP_DESC_S "S"
#define EC_STATE_M 0x4
#define EC_STATE_O 0x3
#define EC_STATE_E 0x2
#define EC_STATE_S 0x1
#define EC_STATE_I 0x0
#define CE_INITDISPTBL_SIZE (1 << 6)
#define CE_INITDISPTBL_INDEX(afarmatch, ecstate, ce1, ce2) \
((afarmatch) << 5 | (ecstate) << 2 | (ce2) << 1 | (ce1))
#define CE_DISPACT(array, afarmatch, ecstate, ce1, ce2) \
(array[CE_INITDISPTBL_INDEX(afarmatch, ecstate, ce1, ce2)])
#define CE_INITDISPTBL_POPULATE(a) \
{ \
int i; \
for (i = 0; i < CE_INITDISPTBL_SIZE; ++i) \
a[i] = CE_DISP_BAD; \
\
CE_DISPACT(a, 0, 0, 0, 0) = CE_DISP_UNKNOWN | CE_ACT_DONE; \
CE_DISPACT(a, 0, 0, 0, 1) = CE_DISP_POSS_STICKY | CE_ACT_PTNRCHK; \
CE_DISPACT(a, 0, 0, 1, 0) = CE_DISP_POSS_PERS | CE_ACT_LKYCHK; \
CE_DISPACT(a, 0, 0, 1, 1) = CE_DISP_POSS_STICKY | CE_ACT_PTNRCHK; \
CE_DISPACT(a, 1, EC_STATE_M, 0, 0) = CE_DISP_UNKNOWN | CE_ACT_DONE; \
CE_DISPACT(a, 1, EC_STATE_M, 0, 1) = CE_DISP_UNKNOWN | CE_ACT_DONE; \
CE_DISPACT(a, 1, EC_STATE_M, 1, 0) = CE_DISP_UNKNOWN | CE_ACT_DONE; \
CE_DISPACT(a, 1, EC_STATE_M, 1, 1) = CE_DISP_POSS_STICKY | CE_ACT_PTNRCHK; \
CE_DISPACT(a, 1, EC_STATE_O, 0, 0) = CE_DISP_UNKNOWN | CE_ACT_DONE; \
CE_DISPACT(a, 1, EC_STATE_O, 0, 1) = CE_DISP_UNKNOWN | CE_ACT_DONE; \
CE_DISPACT(a, 1, EC_STATE_O, 1, 0) = CE_DISP_UNKNOWN | CE_ACT_DONE; \
CE_DISPACT(a, 1, EC_STATE_O, 1, 1) = CE_DISP_POSS_STICKY | CE_ACT_PTNRCHK; \
CE_DISPACT(a, 1, EC_STATE_E, 0, 0) = CE_DISP_INTERMITTENT | CE_ACT_DONE; \
CE_DISPACT(a, 1, EC_STATE_E, 0, 1) = CE_DISP_UNKNOWN | CE_ACT_DONE; \
CE_DISPACT(a, 1, EC_STATE_E, 1, 0) = CE_DISP_POSS_PERS | CE_ACT_LKYCHK; \
CE_DISPACT(a, 1, EC_STATE_E, 1, 1) = CE_DISP_POSS_STICKY | CE_ACT_PTNRCHK; \
CE_DISPACT(a, 1, EC_STATE_S, 0, 0) = CE_DISP_INTERMITTENT | CE_ACT_DONE; \
CE_DISPACT(a, 1, EC_STATE_S, 0, 1) = CE_DISP_POSS_STICKY | CE_ACT_PTNRCHK; \
CE_DISPACT(a, 1, EC_STATE_S, 1, 0) = CE_DISP_POSS_PERS | CE_ACT_LKYCHK; \
CE_DISPACT(a, 1, EC_STATE_S, 1, 1) = CE_DISP_POSS_STICKY | CE_ACT_PTNRCHK; \
CE_DISPACT(a, 1, EC_STATE_I, 0, 0) = CE_DISP_UNKNOWN | CE_ACT_DONE; \
CE_DISPACT(a, 1, EC_STATE_I, 0, 1) = CE_DISP_POSS_STICKY | CE_ACT_PTNRCHK; \
CE_DISPACT(a, 1, EC_STATE_I, 1, 0) = CE_DISP_POSS_PERS | CE_ACT_LKYCHK; \
CE_DISPACT(a, 1, EC_STATE_I, 1, 1) = CE_DISP_POSS_STICKY | CE_ACT_PTNRCHK; \
}
#endif
#define ERR_TYPE_DESC_INTERMITTENT "Intermittent"
#define ERR_TYPE_DESC_PERSISTENT "Persistent"
#define ERR_TYPE_DESC_STICKY "Sticky"
#define ERR_TYPE_DESC_UNKNOWN "Unknown"
#define CE_XDIAG_DTCRMASK 0xffULL
#define CE_XDIAG_PTNRSHIFT 8
#define CE_XDIAG_PTNRMASK (0xffULL << CE_XDIAG_PTNRSHIFT)
#define CE_XDIAG_LKYSHIFT 16
#define CE_XDIAG_LKYMASK (0xffULL << CE_XDIAG_LKYSHIFT)
#define CE_XDIAG_SKIPCODESHIFT 24
#define CE_XDIAG_SKIPCODEMASK (0xfULL << CE_XDIAG_SKIPCODESHIFT)
#define CE_XDIAG_PTNRTYPESHIFT 30
#define CE_XDIAG_PTNRTYPEMASK (0x3ULL << CE_XDIAG_PTNRTYPESHIFT)
#define CE_XDIAG_PTNRIDSHIFT 32
#define CE_XDIAG_SETPTNRID(disp, id) \
((disp) |= (uint64_t)(id) << CE_XDIAG_PTNRIDSHIFT)
#define CE_XDIAG_SETPTNRTYPE(disp, type) \
((disp) |= (uint64_t)type << CE_XDIAG_PTNRTYPESHIFT)
#define CE_XDIAG_SETSKIPCODE(disp, code) \
((disp) |= (uint64_t)code << CE_XDIAG_SKIPCODESHIFT)
#define CE_XDIAG_SETLKYINFO(disp, result) \
((disp) |= (uint64_t)result << CE_XDIAG_LKYSHIFT)
#define CE_XDIAG_SETPTNRINFO(disp, result) \
((disp) |= (uint64_t)result << CE_XDIAG_PTNRSHIFT)
#define CE_XDIAG_SETDTCRINFO(disp, result) \
((disp) |= (uint64_t)result)
#define CE_XDIAG_DTCRINFO(disp) ((disp) & CE_XDIAG_DTCRMASK)
#define CE_XDIAG_PTNRINFO(disp) (((disp) & CE_XDIAG_PTNRMASK) >> \
CE_XDIAG_PTNRSHIFT)
#define CE_XDIAG_LKYINFO(disp) (((disp) & CE_XDIAG_LKYMASK) >> \
CE_XDIAG_LKYSHIFT)
#define CE_XDIAG_SKIPCODE(disp) (((disp) & CE_XDIAG_SKIPCODEMASK) >> \
CE_XDIAG_SKIPCODESHIFT)
#define CE_XDIAG_PTNRTYPE(disp) (((disp) & CE_XDIAG_PTNRTYPEMASK) >> \
CE_XDIAG_PTNRTYPESHIFT)
#define CE_XDIAG_PTNRID(disp) ((disp) >> CE_XDIAG_PTNRIDSHIFT)
#define CE_XDIAG_STATE_MASK 0x7
#define CE_XDIAG_AFARMATCH 0x08
#define CE_XDIAG_NOLOGOUT 0x10
#define CE_XDIAG_CE1 0x20
#define CE_XDIAG_CE2 0x40
#define CE_XDIAG_EXTALG 0x80
#define CE_XDIAG_AFARMATCHED(c) (((c) & CE_XDIAG_AFARMATCH) != 0)
#define CE_XDIAG_LOGOUTVALID(c) (((c) & CE_XDIAG_NOLOGOUT) == 0)
#define CE_XDIAG_CE1SEEN(c) (((c) & CE_XDIAG_CE1) != 0)
#define CE_XDIAG_CE2SEEN(c) (((c) & CE_XDIAG_CE2) != 0)
#define CE_XDIAG_STATE(c) (CE_XDIAG_AFARMATCHED(c) ? \
((c) & CE_XDIAG_STATE_MASK) : 0)
#define CE_XDIAG_EXT_ALG_APPLIED(c) (((c) & CE_XDIAG_EXTALG) != 0)
#define CE_XDIAG_TESTVALID(c) (CE_XDIAG_EXT_ALG_APPLIED(c) && \
(!CE_XDIAG_AFARMATCHED(c) || CE_XDIAG_STATE(c) == EC_STATE_I))
#define CE_XDIAG_SKIP_NOPP 0x1
#define CE_XDIAG_SKIP_PAGEDET 0x2
#define CE_XDIAG_SKIP_NOTMEM 0x3
#define CE_XDIAG_SKIP_DUPFAIL 0x4
#define CE_XDIAG_SKIP_NOPTNR 0x5
#define CE_XDIAG_SKIP_UNIPROC 0x6
#define CE_XDIAG_SKIP_ACTBAD 0x7
#define CE_XDIAG_SKIP_NOSCRUB 0x8
#define CE_XDIAG_PTNR_REMOTE 0x0
#define CE_XDIAG_PTNR_LOCAL 0x1
#define CE_XDIAG_PTNR_SIBLING 0x2
#define CE_XDIAG_PTNR_SELF 0x3
#ifdef __cplusplus
}
#endif
#endif