#ifndef _SYS_DUMPHDR_H
#define _SYS_DUMPHDR_H
#include <sys/types.h>
#include <sys/param.h>
#include <sys/utsname.h>
#include <sys/log.h>
#ifdef __cplusplus
extern "C" {
#endif
#define DUMP_MAGIC 0xdefec8edU
#define DUMP_VERSION 10
#define DUMP_WORDSIZE (sizeof (long) * NBBY)
#define DUMP_PANICSIZE 200
#define DUMP_COMPRESS_RATIO 2
#define DUMP_OFFSET 65536
#define DUMP_LOGSIZE (2 * LOG_HIWAT)
#define DUMP_ERPTSIZE (P2ROUNDUP( \
(ERPT_DATA_SZ / 2) * \
(ERPT_EVCH_MAX + \
ERPT_MAX_ERRS * ERPT_HIWAT), \
DUMP_OFFSET))
#define DUMP_SUMMARYSIZE (P2ROUNDUP( \
(STACK_BUF_SIZE + \
sizeof (summary_dump_t) + 1024), \
DUMP_OFFSET))
typedef struct dumphdr {
uint32_t dump_magic;
uint32_t dump_version;
uint32_t dump_flags;
uint32_t dump_wordsize;
offset_t dump_start;
offset_t dump_ksyms;
offset_t dump_pfn;
offset_t dump_map;
offset_t dump_data;
struct utsname dump_utsname;
char dump_platform[SYS_NMLN];
char dump_panicstring[DUMP_PANICSIZE];
time_t dump_crashtime;
long dump_pageshift;
long dump_pagesize;
long dump_hashmask;
long dump_nvtop;
pgcnt_t dump_npages;
size_t dump_ksyms_size;
size_t dump_ksyms_csize;
uint32_t dump_fm_panic;
char dump_uuid[36 + 1];
} dumphdr_t;
#define DF_VALID 0x00000001
#define DF_COMPLETE 0x00000002
#define DF_LIVE 0x00000004
#define DF_COMPRESSED 0x00000008
#define DF_KERNEL 0x00010000
#define DF_ALL 0x00020000
#define DF_CURPROC 0x00040000
#define DF_CONTENT 0xffff0000
typedef struct dump_map {
offset_t dm_first;
offset_t dm_next;
offset_t dm_data;
struct as *dm_as;
uintptr_t dm_va;
} dump_map_t;
#define DUMP_HASH(dhp, as, va) \
((((uintptr_t)(as) >> 3) + ((va) >> (dhp)->dump_pageshift)) & \
(dhp)->dump_hashmask)
typedef uint32_t dumpcsize_t;
#define DUMP_MAX_TAG (0xfffU)
#define DUMP_MAX_CSIZE (0xfffffU)
#define DUMP_SET_TAG(w, v) (((w) & DUMP_MAX_CSIZE) | ((v) << 20))
#define DUMP_GET_TAG(w) (((w) >> 20) & DUMP_MAX_TAG)
#define DUMP_SET_CSIZE(w, v) \
(((w) & (DUMP_MAX_TAG << 20)) | ((v) & DUMP_MAX_CSIZE))
#define DUMP_GET_CSIZE(w) ((w) & DUMP_MAX_CSIZE)
typedef struct dumpstreamhdr {
char stream_magic[8];
pgcnt_t stream_pagenum;
pgcnt_t stream_npages;
} dumpstreamhdr_t;
#define DUMP_STREAM_MAGIC "StrmHdr"
#define DUMP_MAX_NHELPER DUMP_MAX_TAG
typedef struct dumpdatahdr {
uint32_t dump_datahdr_magic;
uint32_t dump_datahdr_version;
uint64_t dump_data_csize;
uint32_t dump_maxcsize;
uint32_t dump_maxrange;
uint16_t dump_nstreams;
uint16_t dump_clevel;
uint32_t dump_metrics;
} dumpdatahdr_t;
#define DUMP_DATAHDR_MAGIC ('d' << 24 | 'h' << 16 | 'd' << 8 | 'r')
#define DUMP_DATAHDR_VERSION 1
#define DUMP_CLEVEL_LZJB 1
#define DUMP_CLEVEL_BZIP2 2
#ifdef _KERNEL
extern kmutex_t dump_lock;
extern struct vnode *dumpvp;
extern u_offset_t dumpvp_size;
extern struct dumphdr *dumphdr;
extern int dump_conflags;
extern char *dumppath;
extern int dump_timeout;
extern int dump_timeleft;
extern int dump_ioerr;
extern int dumpinit(struct vnode *, char *, int);
extern void dumpfini(void);
extern void dump_resize(void);
extern void dump_page(pfn_t);
extern void dump_addpage(struct as *, void *, pfn_t);
extern void dumpsys(void);
extern void dumpsys_helper(void);
extern void dumpsys_helper_nw(void);
extern void dump_messages(void);
extern void dump_ereports(void);
extern void dumpvp_write(const void *, size_t);
extern int dumpvp_resize(void);
extern int dump_plat_addr(void);
extern void dump_plat_pfn(void);
extern int dump_plat_data(void *);
extern int dump_set_uuid(const char *);
extern const char *dump_get_uuid(void);
extern uint_t dump_plat_mincpu_default;
#define DUMP_PLAT_SUN4U_MINCPU 0
#define DUMP_PLAT_SUN4U_OPL_MINCPU 0
#define DUMP_PLAT_SUN4V_MINCPU 0
#define DUMP_PLAT_X86_64_MINCPU 0
#define DUMP_PLAT_X86_32_MINCPU 0
extern uint_t dump_plat_mincpu;
#define IS_DUMP_PAGE(pp) (dump_check_used && dump_test_used((pp)->p_pagenum))
extern int dump_test_used(pfn_t);
extern int dump_check_used;
#endif
#ifdef __cplusplus
}
#endif
#endif