db_interface.c revision 170473
1168404Spjd/*	$FreeBSD: head/sys/powerpc/powerpc/db_interface.c 170473 2007-06-09 21:55:17Z marcel $ */
2168404Spjd/*	$NetBSD: db_interface.c,v 1.20 2002/05/13 20:30:09 matt Exp $ */
3168404Spjd/*	$OpenBSD: db_interface.c,v 1.2 1996/12/28 06:21:50 rahnds Exp $	*/
4168404Spjd
5168404Spjd
6168404Spjd#include <sys/param.h>
7168404Spjd#include <sys/systm.h>
8168404Spjd#include <sys/cons.h>
9168404Spjd#include <sys/kdb.h>
10168404Spjd#include <sys/ktr.h>
11168404Spjd#include <sys/lock.h>
12168404Spjd#include <sys/pcpu.h>
13168404Spjd#include <sys/proc.h>
14168404Spjd#include <sys/smp.h>
15168404Spjd
16168404Spjd#include <machine/kdb.h>
17168404Spjd#include <machine/md_var.h>
18168404Spjd
19168404Spjd#include <vm/vm.h>
20168404Spjd#include <vm/pmap.h>
21168404Spjd
22168404Spjd#include <ddb/ddb.h>
23219089Spjd#include <ddb/db_sym.h>
24228103Smm#include <ddb/db_command.h>
25236155Smm#include <ddb/db_access.h>
26168404Spjd#include <ddb/db_output.h>
27168404Spjd
28168404Spjd#include <dev/ofw/openfirm.h>
29168404Spjd
30168404Spjdint
31168404Spjddb_read_bytes(vm_offset_t addr, size_t size, char *data)
32168404Spjd{
33168404Spjd	jmp_buf jb;
34168404Spjd	void *prev_jb;
35168404Spjd	char *src;
36168404Spjd	int ret;
37168404Spjd
38168404Spjd	prev_jb = kdb_jmpbuf(jb);
39168404Spjd	ret = setjmp(jb);
40168404Spjd	if (ret == 0) {
41168404Spjd		src = (char *)addr;
42185029Spjd
43213197Smm		if (size == 4)
44219089Spjd			*((int *)data) = *((int *)src);
45168404Spjd		else if (size == 2)
46168404Spjd			*((short *)data) = *((short *)src);
47168404Spjd		else
48168404Spjd			while (size-- > 0)
49168404Spjd				*data++ = *src++;
50168404Spjd	}
51168404Spjd	(void)kdb_jmpbuf(prev_jb);
52168404Spjd	return (ret);
53168404Spjd}
54168404Spjd
55168404Spjdint
56168404Spjddb_write_bytes(vm_offset_t addr, size_t size, char *data)
57168404Spjd{
58168404Spjd	jmp_buf jb;
59168404Spjd	void *prev_jb;
60168404Spjd	char *dst;
61168404Spjd	size_t cnt;
62168404Spjd	int ret;
63185029Spjd
64168404Spjd	prev_jb = kdb_jmpbuf(jb);
65168404Spjd	ret = setjmp(jb);
66219089Spjd	if (ret == 0) {
67168404Spjd		dst = (char *)addr;
68168404Spjd		cnt = size;
69168404Spjd
70168404Spjd		while (cnt-- > 0)
71168404Spjd			*dst++ = *data++;
72168404Spjd		kdb_cpu_sync_icache((void *)addr, size);
73168404Spjd	}
74168404Spjd	(void)kdb_jmpbuf(prev_jb);
75168404Spjd	return (ret);
76168404Spjd}
77168404Spjd
78168404Spjdvoid
79168404Spjddb_show_mdpcpu(struct pcpu *pc)
80168404Spjd{
81168404Spjd}
82168404Spjd