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