1/*
2 * Copyright 2008, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		François Revol, revol@free.fr
7 */
8
9
10#include <debug.h>
11#include <driver_settings.h>
12#include <ISA.h>
13
14static isa_module_info *sISAModule;
15
16
17static int
18debugger_puts(const char *s, int32 length)
19{
20	int i;
21	for (i = 0; i < length; i++)
22		sISAModule->write_io_8(0xe9, s[i]);
23	return i;
24}
25
26
27static status_t
28std_ops(int32 op, ...)
29{
30	void *handle;
31	bool load = false;
32
33	switch (op) {
34	case B_MODULE_INIT:
35		handle = load_driver_settings("kernel");
36		if (handle) {
37			load = get_driver_boolean_parameter(handle,
38				"bochs_debug_output", load, true);
39			unload_driver_settings(handle);
40		}
41		if (load) {
42			if (get_module(B_ISA_MODULE_NAME, (module_info **)&sISAModule) < B_OK)
43				return B_ERROR;
44		}
45		return load ? B_OK : B_ERROR;
46	case B_MODULE_UNINIT:
47		put_module(B_ISA_MODULE_NAME);
48		return B_OK;
49	}
50	return B_BAD_VALUE;
51}
52
53
54static struct debugger_module_info sModuleInfo = {
55	{
56		"debugger/bochs/v1",
57		0,
58		&std_ops
59	},
60	NULL,
61	NULL,
62	debugger_puts,
63	NULL
64};
65
66module_info *modules[] = {
67	(module_info *)&sModuleInfo,
68	NULL
69};
70
71