#ifndef _KDI_IMPL_H
#define _KDI_IMPL_H
#include <sys/kdi.h>
#include <sys/kdi_machimpl.h>
#include <sys/privregs.h>
#ifdef __cplusplus
extern "C" {
#endif
struct module;
struct gdscr;
struct kdi_debugvec {
void (*dv_kctl_vmready)(void);
void (*dv_kctl_memavail)(void);
void (*dv_kctl_modavail)(void);
void (*dv_kctl_thravail)(void);
void (*dv_vmready)(void);
void (*dv_memavail)(caddr_t, size_t);
void (*dv_mod_loaded)(struct modctl *);
void (*dv_mod_unloading)(struct modctl *);
#if defined(__i386) || defined(__amd64)
void (*dv_handle_fault)(greg_t, greg_t, greg_t, int);
#endif
#if defined(__sparc)
void (*dv_kctl_cpu_init)(void);
void (*dv_cpu_init)(struct cpu *);
void (*dv_cpr_restart)(void);
#endif
};
typedef struct kdi_plat {
void (*pkdi_system_claim)(void);
void (*pkdi_system_release)(void);
void (*pkdi_console_claim)(void);
void (*pkdi_console_release)(void);
} kdi_plat_t;
#define pkdi_system_claim kdi_plat.pkdi_system_claim
#define pkdi_system_release kdi_plat.pkdi_system_release
#define pkdi_console_claim kdi_plat.pkdi_console_claim
#define pkdi_console_release kdi_plat.pkdi_console_release
struct kdi {
int kdi_version;
int (*kdi_mods_changed)(void);
int (*kdi_mod_iter)(int (*)(struct modctl *, void *), void *);
int (*kdi_mod_isloaded)(struct modctl *);
int (*kdi_mod_haschanged)(struct modctl *, struct module *,
struct modctl *, struct module *);
void (*kdi_system_claim)(void);
void (*kdi_system_release)(void);
int (*kdi_pread)(caddr_t, size_t, uint64_t, size_t *);
int (*kdi_pwrite)(caddr_t, size_t, uint64_t, size_t *);
void (*kdi_flush_caches)(void);
size_t (*kdi_range_is_nontoxic)(uintptr_t, size_t, int);
struct cons_polledio *(*kdi_get_polled_io)(void);
int (*kdi_vtop)(uintptr_t, uint64_t *);
kdi_dtrace_state_t (*kdi_dtrace_get_state)(void);
int (*kdi_dtrace_set)(kdi_dtrace_set_t);
void (*kdi_plat_call)(void (*)(void));
void (*kdi_kmdb_enter)(void);
kdi_mach_t kdi_mach;
kdi_plat_t kdi_plat;
};
extern void kdi_softcall(void (*)(void));
extern void kdi_setsoftint(uint64_t);
extern int kdi_pread(caddr_t, size_t, uint64_t, size_t *);
extern int kdi_pwrite(caddr_t, size_t, uint64_t, size_t *);
extern size_t kdi_range_is_nontoxic(uintptr_t, size_t, int);
extern void kdi_flush_caches(void);
extern kdi_dtrace_state_t kdi_dtrace_get_state(void);
extern int kdi_vtop(uintptr_t, uint64_t *);
extern void cpu_kdi_init(kdi_t *);
extern void mach_kdi_init(kdi_t *);
extern void plat_kdi_init(kdi_t *);
extern void *boot_kdi_tmpinit(void);
extern void boot_kdi_tmpfini(void *);
#ifdef __cplusplus
}
#endif
#endif