/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* bos72X src/bos/kernel/sys/livedump.h 1.22.2.1                          */
/*                                                                        */
/* Licensed Materials - Property of IBM                                   */
/*                                                                        */
/* Restricted Materials of IBM                                            */
/*                                                                        */
/* COPYRIGHT International Business Machines Corp. 2006,2021              */
/* All Rights Reserved                                                    */
/*                                                                        */
/* US Government Users Restricted Rights - Use, duplication or            */
/* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.      */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */
/* @(#)02     1.22.2.1  src/bos/kernel/sys/livedump.h, sysdump, bos72X, x2022_10A6 11/16/21 02:08:26 */

#ifndef _H_livedump
#define _H_livedump

#ifdef __cplusplus
extern "C" {
#endif

#include <sys/ras.h>
#include <sys/err_rec.h>
#include <sys/dump.h>
#include <sys/errno.h>

/* live dump type flags. */
#define LDT_UNSERIALIZED 0x1		/* dump is not serialized */
#define LDT_ONEPASS	0x2		/* limit dump to one pass */
#define LDT_ASYNC	0x4		/* dump is asynchronous */
#define LDT_NOADDCOMPS	0x8		/* components can't be added by callbacks */
#define LDT_NOLOG	0x10		/* no error is to be logged */
#define LDT_FORCE	0x20		/* force this dump */
#define LDT_ESTIMATE	0x40		/* used if this is an estimate dump */
#define LDT_POST	0x80		/* post this tid when i/o complete */
/* Posted events */
#define LDMP_IODONE_EVENT 0x80000000	/* i/o finished */
#define LDMP_HELD_EVENT   0x40000000	/* Dump moved to held list */
#define LDMP_DROP_EVENT   0x20000000	/* Dump dropped due to error */

/* Live Dump priorities. */
#define LDPP_INFO	1		/* informational dump */
#define LDPP_CRITICAL	7		/* critical dump */

/* Valid Live Dump priorities */
#define LDPP_VALID(p) \
	((p==LDPP_INFO) || (p==LDPP_CRITICAL))

#if (defined _RAS_INTERNAL) || (defined _KERNEL)

typedef	long	dumpid_t;

/*
 * There will be a work area in the ldmp_prepare_t, ldmp_start_t, and
 * sdmp_start_t data structures for use in keeping state across calls when
 * necessary.
 */
#define DMP_WKSZ 256                    /* dump work area size */
#define LDMP_ERRBUF_SZ 2048		/* dump error buffer size */

/* Optional returned file name. */
typedef struct ldmp_filename {
	char		ldf_name[PATH_MAX];
} ldmp_filename_t;
/* Optional returned error record. */
typedef struct ldmp_errbuf {
	char		ler_data[LDMP_ERRBUF_SZ]; /* detail data */
} ldmp_errbuf_t;

/*
 * Parameter definition for the livedump kernel service.
 */
typedef struct ldmp_parms {
	int		ldp_eyec;	/* must be EYEC_LDP */
	int		ldp_vers;	/* version */
	int		ldp_flags;	/* dump characteristics (LDT_) */
	int		ldp_prio;	/* dump priority (LDPP_) */
	union {
		long	_d;		/* dump disposition (LDPD_) */
		long	_e;		/* estimate */
	} _ldpu;
	char		*ldp_recov;	/* optional recovery func name */
	char		*ldp_func;	/* optional failing func name */
	char		*ldp_namepref;	/* dump file name prefix, may be NULL */
	long		ldp_errcode;	/* error code */
	char		*ldp_symptom;	/* symptom, 2k max, null terminated */
	char		*ldp_title;	/* title, 128 byte max */
	ldmp_filename_t	*ldp_filename;	/* dump file name (optional) */
	ldmp_errbuf_t	*ldp_errbuf;	/* Error data (optional) */
	void		*ldp_rsvd1;	/* Reserved */
} ldmp_parms_t;
#define EYEC_LDP                __EYEC4('l','d','p','m') /* ldpm */
#define ldp_disposition	_ldpu._d	/* dump disposition */
#define ldp_estimate	_ldpu._e	/* dump size estimate */
#define LDP_VERS1	0		/* version 1 */
#define LDP_VERS	LDP_VERS1	/* current version */
#define LDMP_RECOV_MAX	128		/* max recov func name length */
#define LDMP_FUNC_MAX	128		/* max failing func name length */
#define LDMP_PREFIX_MAX	64		/* MAX filename prefix length */
#define LDMP_SYMPTOM_MAX 2048		/* max sympt string length */
#define LDMP_TITLE_MAX 128		/* max title length */

/* live dump priorities */
#define LDPP_INFO	1		/* informational */
#define LDPP_CRITICAL	7		/* critical */

/*
 * Live dump dispositions.
 * This field informs the caller whether i/o was started for the dump.
 * LDPD_NODUMP means the dump could not be taken, and no i/o was attempted.
 * LDPD_IO_STARTED indicates that the dump was sent to the i/o process.
 * This does not mean that all i/o was successful.
 * LDPD_NOIO_HELD indicates that the dump was buffered, but was put on the
 * held list, because no i/o process was running.
 * LDPD_NOIO_DROP indicates that the dump was dropped since it was multi-pass
 * capable and the i/o process was not running or returned error during the 
 * first pass. If failure occurred on subsequent passes, disposition 
 * will be LDPD_IO_STARTED since some passes have made it to the filesystem.
 * The remaining passes will be dropped.
 */
#define LDPD_NODUMP	1		/* No dump was possible */
#define LDPD_IO_STARTED	2		/* i/o was started for this dump */
#define LDPD_NOIO_HELD	3		/* The dump was put on the held list */
#define LDPD_NOIO_DROP	4		/* The dump was dropped. */

/*
 * This structure is received by a callback to prepare for a live dump.
 */
typedef struct ldmp_prepare {
	int		ldpr_eyec;	/* EYEC_LDPR */
	int		ldpr_vers;
	int		ldpr_flags;	/* type flags, LDT_ */
	dmp_lvl_t	ldpr_lvl;	/* level at which to dump this component */
	short		ldpr_pflags;	/* prepare flags, LDPF_ */
#define LDPF_MOREDATA	0x1		/* Always called to provide more data */
	dumpid_t	ldpr_dumpid;	/* id of this dump */
	size_t		ldpr_plen;	/* parameters length */
	char		*ldpr_parms;	/* Pointer to parameters */
	size_t		ldpr_datasize;	/* amount of data to be dumped */
	size_t		ldpr_sbufsz;	/* staging buffer size */
	void		*ldpr_rsvd1;	/* reserved */
	void		*ldpr_rsvd2;	/* reserved */
	char		ldpr_wk[DMP_WKSZ]; /* Work area */
	int		ldpr_eyec2;	/* overflow protection */
} ldmp_prepare_t;
#define EYEC_LDPR               __EYEC4('l','d','p','r') /* ldpr */
#define LDPR_VERS1	0		/* version 1 */
#define LDPR_VERS	LDPR_VERS1	/* current version */
#define ldpr_estimate	ldpr_datasize	/* set for RASCD_LDMP_ESTIMATE */

/*
 * This structure is passed to a callback when it is to dump its data for a
 * live dump, RASCD_LDMP_START.
 */
typedef struct ldmp_start {
	int		ldmpst_eyec;	/* EYEC_LDMPST */
	int		ldmpst_vers;	/* version */
	int		ldmpst_flags;	/* type flags, see ldmp_parms_t */
	dmp_lvl_t	ldmpst_lvl;	/* level at which to dump */
	dumpid_t	ldmpst_dumpid;	/* dump id */
	size_t		ldmpst_plen;	/* parameters length */
	char		*ldmpst_parms;	/* passed parameters */
	void		*ldmpst_buffer;	/* staging buffer if requested */
	size_t		ldmpst_sbufsz;	/* staging buffer size */
	void		*ldmpst_table;	/* dump table ptr set by callback */
	char		ldmpst_wk[DMP_WKSZ]; /* Work area */
	int		ldmpst_eyec2;	/* for integrity check */
} ldmp_start_t;
#define EYEC_LDMPST 	__EYEC4('l','d','s','t') /* ldst */
#define LDMPST_VERS1	0		/* version 1 */
#define LDMPST_VERS	LDMPST_VERS1	/* current version */

/* Sizes */
#define LDMP_SBUFSZ_MAX	(64*1024*1024)	/* max staging buf size=64mb -- refer to defect 1143922 */
#define LDMP_DATASIZE_MINIMAL	(2*1024*1024)
#define LDMP_DATASIZE_NORMAL	(4*1024*1024)
#define LDMP_DATASIZE_DETAIL	(8*1024*1024)
#define LDMP_DATASIZE_LEVEL9	((size_t)4*1024*1024*1024)
#define LDMP_MAX_DATASIZE(lvl)\
	((lvl < CD_LVL_NORMAL) ? LDMP_DATASIZE_MINIMAL : \
	((lvl < CD_LVL_DETAIL) ? LDMP_DATASIZE_NORMAL : \
				  LDMP_DATASIZE_DETAIL))
#define LDMP_ERRSTR_MAX	128		/* error string max */

/* external functions */
extern kerrno_t livedump(ldmp_parms_t *p);
extern kerrno_t ldmp_setupparms(ldmp_parms_t *p);
extern kerrno_t ldmp_freeparms(ldmp_parms_t *p);
extern kerrno_t ldmp_xmalloc(dumpid_t id, size_t sz, uint align, void **p);
extern kerrno_t ldmp_xmfree(dumpid_t id, void *addr);
extern kerrno_t ldmp_errstr(dumpid_t, ras_block_t, char	*);
extern kerrno_t ldmp_bufest(dumpid_t, ras_block_t, size_t*);
extern kerrno_t ldmp_timeleft(dumpid_t, long *);

/* Errors returned. */
/* EEEE0000962208xx - LDMP_SUBBLK is defined in dump.h */
#define EBUSY_RAS_LIVEDUMP KERROR(EBUSY, sysdump_BLOCK_00, 0x800+0)
#define EFAULT_RAS_LDMP_SETUPPARMS KERROR(EFAULT, sysdump_BLOCK_00, 0x800+1)
#define EINVAL_RAS_LDMP_XMALLOC_ID KERROR(EINVAL, sysdump_BLOCK_00, 0x800+2)
#define EINVAL_RAS_LDMP_XMALLOC_SZ KERROR(EINVAL, sysdump_BLOCK_00, 0x800+3)
#define EINVAL_RAS_LDMP_XMALLOC_ALIGN KERROR(EINVAL, sysdump_BLOCK_00, 0x800+4)
#define EFAULT_RAS_LDMP_XMALLOC KERROR(EFAULT, sysdump_BLOCK_00, 0x800+5)
#define ENOMEM_RAS_LDMP_XMALLOC KERROR(ENOMEM, sysdump_BLOCK_00, 0x800+6)
#define EINVAL_RAS_LDMP_XMFREE_ID KERROR(EINVAL, sysdump_BLOCK_00, 0x800+7)
#define EINVAL_RAS_LDMP_XMFREE_ADDR KERROR(EINVAL, sysdump_BLOCK_00, 0x800+8)
#define EFAULT_RAS_LIVEDUMP_PARM KERROR(EFAULT, sysdump_BLOCK_00, 0x800+9)
#define EINVAL_RAS_LIVEDUMP_PARM KERROR(EINVAL, sysdump_BLOCK_00, 0x800+10)
#define EINVAL_RAS_LIVEDUMP_PARM_STR_TOOLONG KERROR(EINVAL, sysdump_BLOCK_00, 0x800+11)
#define EINVAL_RAS_LIVEDUMP_NOSYMP KERROR(EINVAL, sysdump_BLOCK_00, 0x800+12)
#define EINVAL_RAS_LIVEDUMP_COMP KERROR(EINVAL, sysdump_BLOCK_00, 0x800+13)
#define ENOTREADY_RAS_LIVEDUMP KERROR(ENOTREADY, sysdump_BLOCK_00, 0x800+14)
#define ENOMEM_RAS_LIVEDUMP_ERR KERROR(ENOMEM, sysdump_BLOCK_00, 0x800+15)
#define EINVAL_RAS_LIVEDUMP_SER KERROR(EINVAL, sysdump_BLOCK_00, 0x800+16)
#define ETIMEDOUT_RAS_LIVEDUMP_FREEZE_STOP KERROR(ETIMEDOUT, sysdump_BLOCK_00, 0x800+17)
#define EINVAL_RAS_LDMP_ERRSTR_ID KERROR(EINVAL, sysdump_BLOCK_00, 0x800+18)
#define EINVAL_RAS_LDMP_ERRSTR_COMP KERROR(EINVAL, sysdump_BLOCK_00, 0x800+19)
#define EINVAL_RAS_LDMP_ERRSTR_STR KERROR(EINVAL, sysdump_BLOCK_00, 0x800+20)
#define EFAULT_RAS_LIVEDUMP_ERRBUF KERROR(EFAULT, sysdump_BLOCK_00, 0x800+21)
#define EFAULT_RAS_LDMP_FREEPARMS KERROR(EFAULT, sysdump_BLOCK_00, 0x800+22)
#define EINVAL_RAS_LDMP_FREEPARMS KERROR(EINVAL, sysdump_BLOCK_00, 0x800+23)
#define EBUSY_RAS_LDMP_FREEPARMS KERROR(EBUSY, sysdump_BLOCK_00, 0x800+24)
#define EINVAL_RAS_LDMP_BUFEST KERROR(EINVAL, sysdump_BLOCK_00, 0x800+25)
#define EFAULT_RAS_LDMP_BUFEST KERROR(EFAULT, sysdump_BLOCK_00, 0x800+26)
#define EINVAL_RAS_LDMP_TIMELEFT KERROR(EINVAL, sysdump_BLOCK_00, 0x800+27)
#define EFAULT_RAS_LDMP_TIMELEFT KERROR(EFAULT, sysdump_BLOCK_00, 0x800+28)
#define ENOMEM_LDMP_GETHS KERROR(ENOMEM, sysdump_BLOCK_00, 0x800+29)
#define EINVAL_RAS_LDMP_ESTIMATE KERROR(EINVAL, sysdump_BLOCK_00, 0x800+30)
#define EFAULT_RAS_LIVEDUMP_FILENAME KERROR(EFAULT, sysdump_BLOCK_00, 0x800+31)
#define EINVAL_RAS_LIVEDUMP_EMPTY_DUMP KERROR(EINVAL, sysdump_BLOCK_00, 0x800+32)
#define EINVAL_RAS_LDMP_IO_PASS_ERR KERROR(EINVAL, sysdump_BLOCK_00, 0x800+33)
#define EEXIST_RAS_LIVEDUMP KERROR(EEXIST, sysdump_BLOCK_00, 0x800+34)
#define EINVAL_RAS_LDMP_EMPTY KERROR(EINVAL, sysdump_BLOCK_00, 0x800+35)
#define ENOMEM_RAS_LIVEDUMP_CB KERROR(ENOMEM, sysdump_BLOCK_00, 0x800+36)
#define ENOMEM_RAS_LIVEDUMP_PREP KERROR(ENOMEM, sysdump_BLOCK_00, 0x800+37)
#define ENOMEM_RAS_LIVEDUMP_START KERROR(ENOMEM, sysdump_BLOCK_00, 0x800+38)
#define ENOMEM_RAS_LIVEDUMP_MYPARM KERROR(ENOMEM, sysdump_BLOCK_00, 0x800+39)
#define EINVAL_RAS_LIVEDUMP_BADCB KERROR(EINVAL, sysdump_BLOCK_00, 0x800+40)
#define EINVAL_RAS_LIVEDUMP_EMPTY_VALRES KERROR(EINVAL, sysdump_BLOCK_00, 0x800+41)
#define EINVAL_RAS_LIVEDUMP_EMPTY_DUP KERROR(EINVAL, sysdump_BLOCK_00, 0x800+42)
#define EINVAL_RAS_LIVEDUMP_EMPTY_PREP KERROR(EINVAL, sysdump_BLOCK_00, 0x800+43)
#define ETIMEDOUT_RAS_LIVEDUMP_FREEZE_TO KERROR(ETIMEDOUT, sysdump_BLOCK_00, 0x800+44)
#define EAGAIN_RAS_LIVEDUMP_NEXTPASS KERROR(EAGAIN, sysdump_BLOCK_00, 0x800+45)
#define ENOMEM_LDMP_GETHS1 KERROR(ENOMEM, sysdump_BLOCK_00, 0x800+46)
#define ENOMEM_LDMP_GETHS2 KERROR(ENOMEM, sysdump_BLOCK_00, 0x800+47)
#define ENOMEM_LDMP_GETHS3 KERROR(ENOMEM, sysdump_BLOCK_00, 0x800+48)
#endif /* _RAS_INTERNAL || _KERNEL */

/* Command basis */
#define LDMP_FIRST 0x01			/* first live dump command */
#define SDMP_FIRST 0x40			/* first system dump command */
enum {
	LDMP_ON = LDMP_FIRST,
	LDMP_OFF,
	LDMP_LVL,
	LDMP_UNUSED1,
	LDMP_PREPARE,
	LDMP_ESTIMATE,
	LDMP_START,
	LDMP_AGAIN,
	LDMP_FINISHED,
	LDMP_LAST,
	SDMP_ON = SDMP_FIRST,
	SDMP_OFF,
	SDMP_LVL,
	SDMP_UNUSED2,
	SDMP_CALLONRESTART,
	SDMP_STAGING,
	SDMP_SHARED_STAGING,
	SDMP_START,
	SDMP_AGAIN,
	SDMP_FINISHED,
	SDMP_ESTIMATE,
	SDMP_RETRY,
	SDMP_SET_RETRY,
	SDMP_SET_SERIALIO,
	SDMP_LAST,
	DMP_PASS_THROUGH = 4094, /* Handled via live dump services */
	DMP_NOCMD = 4095
};

/* Live dump callback commands */
#define RASCD_LDMP_ON RASC_COMMAND(RASD_DUMP, LDMP_ON)
RAS_COMMAND_CHECK(RASCD_LDMP_ON,		0x5200000000000103ull);
#define RASCD_LDMP_OFF	RASC_COMMAND(RASD_DUMP, LDMP_OFF)
RAS_COMMAND_CHECK(RASCD_LDMP_OFF,	 	0x5200000000000203ull);
#define RASCD_LDMP_LVL	RASC_COMMAND(RASD_DUMP, LDMP_LVL)
RAS_COMMAND_CHECK(RASCD_LDMP_LVL,	 	0x5200000000000303ull);
#define RASCD_LDMP_PREPARE RASC_COMMAND(RASD_DUMP, LDMP_PREPARE)
RAS_COMMAND_CHECK(RASCD_LDMP_PREPARE,	 	0x5200000000000503ull);
#define RASCD_LDMP_ESTIMATE RASC_COMMAND(RASD_DUMP, LDMP_ESTIMATE)
RAS_COMMAND_CHECK(RASCD_LDMP_ESTIMATE,	 	0x5200000000000603ull);
#define RASCD_LDMP_START RASC_COMMAND(RASD_DUMP, LDMP_START)
RAS_COMMAND_CHECK(RASCD_LDMP_START,	 	0x5200000000000703ull);
#define RASCD_LDMP_AGAIN RASC_COMMAND(RASD_DUMP, LDMP_AGAIN)
RAS_COMMAND_CHECK(RASCD_LDMP_AGAIN,	 	0x5200000000000803ull);
#define RASCD_LDMP_FINISHED RASC_COMMAND(RASD_DUMP, LDMP_FINISHED)
RAS_COMMAND_CHECK(RASCD_LDMP_FINISHED,	 	0x5200000000000903ull);
#define RASCD_DMP_PASS_THROUGH RASC_COMMAND(RASD_DUMP, DMP_PASS_THROUGH)
RAS_COMMAND_CHECK(RASCD_DMP_PASS_THROUGH,	 0x52000000000FFE03ull);
/* System dump */
#define RASCD_SDMP_ON RASC_COMMAND(RASD_DUMP, SDMP_ON)
RAS_COMMAND_CHECK(RASCD_SDMP_ON,	 	0x5200000000004003ull);
#define RASCD_SDMP_OFF   RASC_COMMAND(RASD_DUMP, SDMP_OFF)
RAS_COMMAND_CHECK(RASCD_SDMP_OFF,	 	0x5200000000004103ull);
#define RASCD_SDMP_LVL   RASC_COMMAND(RASD_DUMP, SDMP_LVL)
RAS_COMMAND_CHECK(RASCD_SDMP_LVL,	 	0x5200000000004203ull);
#define RASCD_SDMP_START RASC_COMMAND(RASD_DUMP, SDMP_START)
RAS_COMMAND_CHECK(RASCD_SDMP_START,	 	0x5200000000004703ull);
#define RASCD_SDMP_AGAIN RASC_COMMAND(RASD_DUMP, SDMP_AGAIN)
RAS_COMMAND_CHECK(RASCD_SDMP_AGAIN,	 	0x5200000000004803ull);
#define RASCD_SDMP_FINISHED RASC_COMMAND(RASD_DUMP, SDMP_FINISHED)
RAS_COMMAND_CHECK(RASCD_SDMP_FINISHED,	 	0x5200000000004903ull);
#define RASCD_SDMP_ESTIMATE RASC_COMMAND(RASD_DUMP, SDMP_ESTIMATE)
RAS_COMMAND_CHECK(RASCD_SDMP_ESTIMATE,	 	0x5200000000004A03ull);
#define RASCD_SDMP_RETRY RASC_COMMAND(RASD_DUMP, SDMP_RETRY)
RAS_COMMAND_CHECK(RASCD_SDMP_RETRY,             0x5200000000004B03ull);

/* Special commands to (1) use buffer for multiple RAS attributes;
 * (2) delete persistent attribute customizations;
 * (3) query persistent customizations.
 */
#define RASCD_MULTI	(RASC_COMMAND(RASD_DUMP, DMP_NOCMD) | RAS_BUFFER)
#define RASCD_DELETE	(RASC_COMMAND(RASD_DUMP, DMP_NOCMD) | RAS_DELETE)
#define RASCD_QUERY	(RASC_COMMAND(RASD_DUMP, DMP_NOCMD) | RAS_QUERY)

#ifdef _KERNEL
#define RASCD_SET_LDMP_ON \
	RASC_COMMAND(RASD_DUMP, LDMP_ON | NOCALLBACK)
RAS_COMMAND_CHECK(RASCD_SET_LDMP_ON,		0x5200000001000103ull);
#define RASCD_SET_LDMP_OFF \
	RASC_COMMAND(RASD_DUMP, LDMP_OFF | NOCALLBACK)
RAS_COMMAND_CHECK(RASCD_SET_LDMP_OFF,		0x5200000001000203ull);
#define RASCD_SET_LDMP_LVL \
	RASC_COMMAND(RASD_DUMP, LDMP_LVL | NOCALLBACK)
RAS_COMMAND_CHECK(RASCD_SET_LDMP_LVL,		0x5200000001000303ull);
/*
 * This returns the current live dump level.
 * The component must be customized.
 */
#define rasrb_ldmp_level(__rasb) \
	(((const rasr_block_t *)(__rasb))->rrb_ldmp_lvl)
#define RASCD_SET_SDMP_ON \
	RASC_COMMAND(RASD_DUMP, SDMP_ON | NOCALLBACK)
RAS_COMMAND_CHECK(RASCD_SET_SDMP_ON,		0x5200000001004003ull);
#define RASCD_SET_SDMP_OFF \
	RASC_COMMAND(RASD_DUMP, SDMP_OFF | NOCALLBACK)
RAS_COMMAND_CHECK(RASCD_SET_SDMP_OFF,		0x5200000001004103ull);
#define RASCD_SET_SDMP_LVL \
	RASC_COMMAND(RASD_DUMP, SDMP_LVL | NOCALLBACK)
RAS_COMMAND_CHECK(RASCD_SET_SDMP_LVL,		0x5200000001004203ull);
/*
 * This returns the current system dump level.
 * The component must be customized.
 */
#define rasrb_sdmp_level(__rasb) \
	(((const rasr_block_t *)(__rasb))->rrb_sdmp_lvl)
#define RASCD_SET_SDMP_CALLONRESTART \
	RASC_COMMAND(RASD_DUMP, SDMP_CALLONRESTART | NOCALLBACK)
RAS_COMMAND_CHECK(RASCD_SET_SDMP_CALLONRESTART,	0x5200000001004403ull);
#define RASCD_SET_SDMP_STAGING \
	RASC_COMMAND(RASD_DUMP, SDMP_STAGING | NOCALLBACK)
RAS_COMMAND_CHECK(RASCD_SET_SDMP_STAGING,	0x5200000001004503ull);
#define RASCD_SET_SDMP_SHARED_STAGING \
	RASC_COMMAND(RASD_DUMP, SDMP_SHARED_STAGING | NOCALLBACK)
RAS_COMMAND_CHECK(RASCD_SET_SDMP_SHARED_STAGING,	0x5200000001004603ull);
#define RASCD_SET_SDMP_RETRY \
	RASC_COMMAND(RASD_DUMP, SDMP_SET_RETRY | NOCALLBACK)
RAS_COMMAND_CHECK(RASCD_SET_SDMP_RETRY, 0x5200000001004C03ull);
#define RASCD_SET_SDMP_SERIALIO \
	RASC_COMMAND(RASD_DUMP, SDMP_SET_SERIALIO | NOCALLBACK)
RAS_COMMAND_CHECK(RASCD_SET_SDMP_SERIALIO, 0x5200000001004D03ull);

/* Inline for checking whether a livedump return code means that the
 * caller should halt the system */
static __inline int
DUMP_KERRNO_BAD(kerrno_t rc)
{
	if (rc != 0) {
		if (KERROR2ERRNO(rc) == EINVAL || KERROR2ERRNO(rc) == EFAULT) {
			return 1;
		}
	}
	return 0;
} 

#endif /* _KERNEL */

#ifdef __cplusplus
}
#endif

#endif /* _H_livedump */
