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 30 int 31 db_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 55 int 56 db_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 78 void 79 db_show_mdpcpu(struct pcpu *pc) 80 { 81 82 db_printf("PPC: hwref = %#x\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