#ifndef _CPRBOOT_H
#define _CPRBOOT_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#define CB_SRC_VIRT 0x200000
#define CB_DST_VIRT 0x300000
#define CB_STACK_VIRT 0x400000
#define CB_HIGH_VIRT 0x500000
#define CB_MSS 0x009000
#define CB_SSS 0x001000
#define CB_STACK_SIZE (CB_MSS + CB_SSS)
#define CB_MAX_KPAGES mmu_btop(CPR_MAX_BLOCK)
#define CB_MAX_BPAGES (CB_MAX_KPAGES + 1)
#define ERR -1
#ifndef _ASM
#define CB_VPRINTF(args) \
if (verbose) prom_printf args
#define CB_VENTRY(name) \
CB_VPRINTF((ent_fmt, #name, entry))
#define NULLP (char *)0
#define CPR_DBG(n) (cpr_debug & CPR_DEBUG##n)
struct statefile {
int fd;
int kpages;
size_t size;
caddr_t buf;
size_t buf_offset;
uint_t *buf_map;
pfn_t low_ppn;
pfn_t high_ppn;
int npages;
int ngroups;
int outside;
int precede;
int move;
int recycle;
};
#define SF_BUF_PPN(off) *(sfile.buf_map + mmu_btop(off))
#define SF_ORIG_PPN(off) sfile.low_ppn + mmu_btop(off)
#define SF_SAME_PPN(off) (SF_BUF_PPN(off) == SF_ORIG_PPN(off))
#define SF_DIFF_PPN(off) (SF_BUF_PPN(off) != SF_ORIG_PPN(off))
#define SF_STAT_INC(field) sfile.field++
#define SF_DATA() sfile.buf + sfile.buf_offset
#define SF_ADV(len) sfile.buf_offset += len
#define SF_DCOPY(space) \
bcopy(SF_DATA(), &space, sizeof (space)); \
SF_ADV(sizeof (space))
struct prom_physavail {
physaddr_t base;
size_t size;
};
struct avail_range {
pfn_t low;
pfn_t high;
pgcnt_t nfree;
};
typedef struct prom_physavail pphav_t;
typedef struct avail_range arange_t;
struct cb_props {
caddr_t prop;
uint_t *datap;
};
extern int cpr_reset_properties(void);
extern int cpr_locate_statefile(char *, char *);
extern void cpr_update_terminator(ctrm_t *, caddr_t);
extern struct statefile sfile;
extern char prog[];
extern char rsvp[];
extern char entry[];
extern char ent_fmt[];
extern int verbose;
extern uint_t cb_dents;
extern uint_t cb_msec;
extern char *volname;
extern int cpr_test_mode;
extern csu_md_t mdinfo;
extern uint_t cpu_delay;
extern uint_t cb_mid;
extern uint_t cb_clock_freq;
extern int cb_check_machdep(void);
extern int cb_interpret(void);
extern int cb_ksetup(void);
extern int cb_mpsetup(void);
extern void slave_init(int);
extern int cb_restore_kpages(void);
extern int cb_terminator(void);
extern int cb_nbitmaps;
extern pfn_t find_apage(void);
extern int cb_set_bitmap(void);
extern int cb_get_newstack(void);
extern int cb_tracking_setup(void);
extern int cb_get_physavail(void);
extern int cb_relocate(void);
extern int cpr_statefile_open(char *, char *);
extern int cpr_statefile_close(int);
extern int cpr_read(int, caddr_t, size_t);
extern void cb_spin(void);
extern pfn_t cpr_vatopfn(caddr_t);
extern int prom_remap(size_t, caddr_t, physaddr_t);
extern void install_remap(void);
extern int cb_alloc(size_t, uint_t, caddr_t *, physaddr_t *);
extern int cb_mountroot(void);
extern int cb_unmountroot(void);
extern int cb_get_props(void);
extern void cb_mapin(caddr_t, pfn_t, uint_t, uint_t, uint_t);
extern int cb_usb_setup(void);
extern void cb_enter_mon(void);
extern void cb_exit_to_mon(void);
extern int cpr_fs_close(int);
extern int cpr_fs_volopen(char *);
extern int cpr_fs_open(char *);
extern int cpr_fs_read(int, char *, int);
extern int cpr_fs_seek(int, offset_t);
extern int cpr_read(int, char *, size_t);
extern caddr_t _end[];
extern void *estack;
extern void _start(void *, ...);
extern void exit_to_kernel(void *, csu_md_t *);
extern void bzero(void *, size_t);
extern void phys_xcopy(physaddr_t, physaddr_t, size_t);
extern void ptov_bcopy(physaddr_t, void *, size_t);
extern void get_dtlb_entry(int, caddr_t *, tte_t *);
extern void set_dtlb_entry(int, caddr_t, tte_t *);
extern void set_itlb_entry(int, caddr_t, tte_t *);
extern void cpu_launch(int);
extern void cb_usec_wait(int);
extern void membar_stld(void);
extern uint_t getmid(void);
#endif
#ifdef __cplusplus
}
#endif
#endif