xref: /freebsd/sys/powerpc/powerpc/db_interface.c (revision 71625ec9)
145b4eca5SBenno Rice /*	$NetBSD: db_interface.c,v 1.20 2002/05/13 20:30:09 matt Exp $ */
245b4eca5SBenno Rice /*	$OpenBSD: db_interface.c,v 1.2 1996/12/28 06:21:50 rahnds Exp $	*/
345b4eca5SBenno Rice 
445b4eca5SBenno Rice #include <sys/param.h>
545b4eca5SBenno Rice #include <sys/systm.h>
6d13782efSPeter Grehan #include <sys/cons.h>
7a136236eSPeter Grehan #include <sys/kdb.h>
8a136236eSPeter Grehan #include <sys/ktr.h>
9a136236eSPeter Grehan #include <sys/lock.h>
10a136236eSPeter Grehan #include <sys/pcpu.h>
11a136236eSPeter Grehan #include <sys/proc.h>
12a136236eSPeter Grehan #include <sys/smp.h>
1345b4eca5SBenno Rice 
1401bd17ccSMarcel Moolenaar #include <machine/kdb.h>
15a136236eSPeter Grehan #include <machine/md_var.h>
1645b4eca5SBenno Rice 
17a136236eSPeter Grehan #include <vm/vm.h>
18a136236eSPeter Grehan #include <vm/pmap.h>
19a136236eSPeter Grehan 
2045b4eca5SBenno Rice #include <ddb/ddb.h>
2145b4eca5SBenno Rice #include <ddb/db_sym.h>
2245b4eca5SBenno Rice #include <ddb/db_command.h>
2345b4eca5SBenno Rice #include <ddb/db_access.h>
2445b4eca5SBenno Rice #include <ddb/db_output.h>
2545b4eca5SBenno Rice 
2645b4eca5SBenno Rice #include <dev/ofw/openfirm.h>
2745b4eca5SBenno Rice 
2845b4eca5SBenno Rice int
db_read_bytes(vm_offset_t addr,size_t size,char * data)29a136236eSPeter Grehan db_read_bytes(vm_offset_t addr, size_t size, char *data)
3045b4eca5SBenno Rice {
31a136236eSPeter Grehan 	jmp_buf jb;
32a136236eSPeter Grehan 	void *prev_jb;
33a136236eSPeter Grehan 	char *src;
34a136236eSPeter Grehan 	int ret;
35a136236eSPeter Grehan 
36a136236eSPeter Grehan 	prev_jb = kdb_jmpbuf(jb);
37a136236eSPeter Grehan 	ret = setjmp(jb);
38a136236eSPeter Grehan 	if (ret == 0) {
39a136236eSPeter Grehan 		src = (char *)addr;
40a136236eSPeter Grehan 
41e683c328SJustin Hibbits 		if (size == 8)
42e683c328SJustin Hibbits 			*((uint64_t*)data) = *((uint64_t*)src);
43a136236eSPeter Grehan 		if (size == 4)
44a136236eSPeter Grehan 			*((int *)data) = *((int *)src);
45a136236eSPeter Grehan 		else if (size == 2)
46a136236eSPeter Grehan 			*((short *)data) = *((short *)src);
47a136236eSPeter Grehan 		else
48a136236eSPeter Grehan 			while (size-- > 0)
49a136236eSPeter Grehan 				*data++ = *src++;
5045b4eca5SBenno Rice 	}
51a136236eSPeter Grehan 	(void)kdb_jmpbuf(prev_jb);
52a136236eSPeter Grehan 	return (ret);
5345b4eca5SBenno Rice }
5445b4eca5SBenno Rice 
5545b4eca5SBenno Rice int
db_write_bytes(vm_offset_t addr,size_t size,char * data)56a136236eSPeter Grehan db_write_bytes(vm_offset_t addr, size_t size, char *data)
5745b4eca5SBenno Rice {
58a136236eSPeter Grehan 	jmp_buf jb;
59a136236eSPeter Grehan 	void *prev_jb;
60a136236eSPeter Grehan 	char *dst;
6101bd17ccSMarcel Moolenaar 	size_t cnt;
62a136236eSPeter Grehan 	int ret;
6345b4eca5SBenno Rice 
64a136236eSPeter Grehan 	prev_jb = kdb_jmpbuf(jb);
65a136236eSPeter Grehan 	ret = setjmp(jb);
66a136236eSPeter Grehan 	if (ret == 0) {
67a136236eSPeter Grehan 		dst = (char *)addr;
6801bd17ccSMarcel Moolenaar 		cnt = size;
69a136236eSPeter Grehan 
70e683c328SJustin Hibbits 		if (size == 8)
71e683c328SJustin Hibbits 			*((uint64_t*)dst) = *((uint64_t*)data);
72e683c328SJustin Hibbits 		if (size == 4)
73fdf068bcSJustin Hibbits 			*((int*)dst) = *((int*)data);
74fdf068bcSJustin Hibbits 		else
75e683c328SJustin Hibbits 		if (size == 2)
76fdf068bcSJustin Hibbits 			*((short*)dst) = *((short*)data);
77fdf068bcSJustin Hibbits 		else
7801bd17ccSMarcel Moolenaar 			while (cnt-- > 0)
79a136236eSPeter Grehan 				*dst++ = *data++;
8001bd17ccSMarcel Moolenaar 		kdb_cpu_sync_icache((void *)addr, size);
8145b4eca5SBenno Rice 	}
82a136236eSPeter Grehan 	(void)kdb_jmpbuf(prev_jb);
83a136236eSPeter Grehan 	return (ret);
8445b4eca5SBenno Rice }
8545b4eca5SBenno Rice 
8645b4eca5SBenno Rice void
db_show_mdpcpu(struct pcpu * pc)8745b4eca5SBenno Rice db_show_mdpcpu(struct pcpu *pc)
8845b4eca5SBenno Rice {
89896b3541SMarcel Moolenaar 
90c3e289e1SNathan Whitehorn 	db_printf("PPC: hwref   = %#zx\n", pc->pc_hwref);
91896b3541SMarcel Moolenaar 	db_printf("PPC: ipimask = %#x\n", pc->pc_ipimask);
923f24b505SJustin Hibbits 	db_printf("PPC: flags   = %#x\n", pc->pc_flags);
9345b4eca5SBenno Rice }
94