199730Sbenno/* $FreeBSD$ */ 299730Sbenno/* $NetBSD: db_interface.c,v 1.20 2002/05/13 20:30:09 matt Exp $ */ 399730Sbenno/* $OpenBSD: db_interface.c,v 1.2 1996/12/28 06:21:50 rahnds Exp $ */ 499730Sbenno 599730Sbenno 699730Sbenno#include <sys/param.h> 799730Sbenno#include <sys/systm.h> 8104435Sgrehan#include <sys/cons.h> 9132069Sgrehan#include <sys/kdb.h> 10132069Sgrehan#include <sys/ktr.h> 11132069Sgrehan#include <sys/lock.h> 12132069Sgrehan#include <sys/pcpu.h> 13132069Sgrehan#include <sys/proc.h> 14132069Sgrehan#include <sys/smp.h> 1599730Sbenno 16170473Smarcel#include <machine/kdb.h> 17132069Sgrehan#include <machine/md_var.h> 1899730Sbenno 19132069Sgrehan#include <vm/vm.h> 20132069Sgrehan#include <vm/pmap.h> 21132069Sgrehan 2299730Sbenno#include <ddb/ddb.h> 2399730Sbenno#include <ddb/db_sym.h> 2499730Sbenno#include <ddb/db_command.h> 2599730Sbenno#include <ddb/db_access.h> 2699730Sbenno#include <ddb/db_output.h> 2799730Sbenno 2899730Sbenno#include <dev/ofw/openfirm.h> 2999730Sbenno 3099730Sbennoint 31132069Sgrehandb_read_bytes(vm_offset_t addr, size_t size, char *data) 3299730Sbenno{ 33132069Sgrehan jmp_buf jb; 34132069Sgrehan void *prev_jb; 35132069Sgrehan char *src; 36132069Sgrehan int ret; 3799730Sbenno 38132069Sgrehan prev_jb = kdb_jmpbuf(jb); 39132069Sgrehan ret = setjmp(jb); 40132069Sgrehan if (ret == 0) { 41132069Sgrehan src = (char *)addr; 4299730Sbenno 43132069Sgrehan if (size == 4) 44132069Sgrehan *((int *)data) = *((int *)src); 45132069Sgrehan else if (size == 2) 46132069Sgrehan *((short *)data) = *((short *)src); 47132069Sgrehan else 48132069Sgrehan while (size-- > 0) 49132069Sgrehan *data++ = *src++; 5099730Sbenno } 51132069Sgrehan (void)kdb_jmpbuf(prev_jb); 52132069Sgrehan return (ret); 5399730Sbenno} 5499730Sbenno 55132069Sgrehanint 56132069Sgrehandb_write_bytes(vm_offset_t addr, size_t size, char *data) 5799730Sbenno{ 58132069Sgrehan jmp_buf jb; 59132069Sgrehan void *prev_jb; 60132069Sgrehan char *dst; 61170473Smarcel size_t cnt; 62132069Sgrehan int ret; 6399730Sbenno 64132069Sgrehan prev_jb = kdb_jmpbuf(jb); 65132069Sgrehan ret = setjmp(jb); 66132069Sgrehan if (ret == 0) { 67132069Sgrehan dst = (char *)addr; 68170473Smarcel cnt = size; 6999730Sbenno 70170473Smarcel while (cnt-- > 0) 71170473Smarcel *dst++ = *data++; 72170473Smarcel kdb_cpu_sync_icache((void *)addr, size); 7399730Sbenno } 74132069Sgrehan (void)kdb_jmpbuf(prev_jb); 75132069Sgrehan return (ret); 7699730Sbenno} 7799730Sbenno 78132069Sgrehanvoid 79132069Sgrehandb_show_mdpcpu(struct pcpu *pc) 8099730Sbenno{ 81182487Smarcel 82209975Snwhitehorn db_printf("PPC: hwref = %#zx\n", pc->pc_hwref); 83182487Smarcel db_printf("PPC: ipimask = %#x\n", pc->pc_ipimask); 84182487Smarcel db_printf("PPC: pir = %#x\n", pc->pc_pir); 8599730Sbenno} 86