1/* $FreeBSD$ */ 2/* $NetBSD: db_interface.c,v 1.20 2002/05/13 20:30:09 matt Exp $ */ 3/* $OpenBSD: db_interface.c,v 1.2 1996/12/28 06:21:50 rahnds Exp $ */ 4 5 6#include <sys/param.h> 7#include <sys/systm.h> 8#include <sys/cons.h> 9#include <sys/kdb.h> 10#include <sys/ktr.h> 11#include <sys/lock.h> 12#include <sys/pcpu.h> 13#include <sys/proc.h> 14#include <sys/smp.h> 15 16#include <machine/kdb.h> 17#include <machine/md_var.h> 18 19#include <vm/vm.h> 20#include <vm/pmap.h> 21 22#include <ddb/ddb.h> 23#include <ddb/db_sym.h> 24#include <ddb/db_command.h> 25#include <ddb/db_access.h> 26#include <ddb/db_output.h> 27 28#include <dev/ofw/openfirm.h> 29 30int 31db_read_bytes(vm_offset_t addr, size_t size, char *data) 32{ 33 jmp_buf jb; 34 void *prev_jb; 35 char *src; 36 int ret; 37 38 prev_jb = kdb_jmpbuf(jb); 39 ret = setjmp(jb); 40 if (ret == 0) { 41 src = (char *)addr; 42 43 if (size == 4) 44 *((int *)data) = *((int *)src); 45 else if (size == 2) 46 *((short *)data) = *((short *)src); 47 else 48 while (size-- > 0) 49 *data++ = *src++; 50 } 51 (void)kdb_jmpbuf(prev_jb); 52 return (ret); 53} 54 55int 56db_write_bytes(vm_offset_t addr, size_t size, char *data) 57{ 58 jmp_buf jb; 59 void *prev_jb; 60 char *dst; 61 size_t cnt; 62 int ret; 63 64 prev_jb = kdb_jmpbuf(jb); 65 ret = setjmp(jb); 66 if (ret == 0) { 67 dst = (char *)addr; 68 cnt = size; 69 70 while (cnt-- > 0) 71 *dst++ = *data++; 72 kdb_cpu_sync_icache((void *)addr, size); 73 } 74 (void)kdb_jmpbuf(prev_jb); 75 return (ret); 76} 77 78void 79db_show_mdpcpu(struct pcpu *pc) 80{ 81 82 db_printf("PPC: hwref = %#zx\n", pc->pc_hwref); 83 db_printf("PPC: ipimask = %#x\n", pc->pc_ipimask); 84 db_printf("PPC: pir = %#x\n", pc->pc_pir); 85} 86