1#include "driver.h"
2
3sb16_dev_t device;
4
5const char* devs[2] = {
6	NULL, NULL
7};
8
9const char** publish_devices(void); /* Just to silence compiler */
10
11static status_t
12extract_driver_settings(void* settings, sb16_dev_t* sb16)
13{
14	const char* port;
15	const char* irq;
16	const char* dma8;
17	const char* dma16;
18	const char* midiport;
19	status_t rc;
20
21	if ((port=get_driver_parameter(settings, "port", "220", NULL)) != NULL &&
22		(irq=get_driver_parameter(settings, "irq", "5", NULL)) != NULL &&
23		(dma8=get_driver_parameter(settings, "dma8", "1", NULL)) != NULL &&
24		(dma16=get_driver_parameter(settings, "dma16", "5", NULL)) != NULL &&
25		(midiport=get_driver_parameter(settings, "midiport", "330", NULL)) != NULL) {
26		sb16->port	= strtol(port, NULL, 16);
27		sb16->irq	= strtol(irq, NULL, 16);
28		sb16->dma8	= strtol(dma8, NULL, 16);
29		sb16->dma16	= strtol(dma16, NULL, 16);
30		sb16->midiport	= strtol(midiport, NULL, 16);
31
32		rc = B_OK;
33	} else {
34		rc = B_BAD_VALUE;
35	}
36
37	return rc;
38}
39
40//#pragma mark --
41
42int32 api_version = B_CUR_DRIVER_API_VERSION;
43
44status_t
45init_hardware(void)
46{
47	return B_OK;
48}
49
50status_t
51init_driver (void)
52{
53	void* settings = load_driver_settings("sb16");
54	status_t rc;
55
56	if (settings != NULL) {
57		rc = extract_driver_settings(settings, &device);
58		if (rc == B_OK) {
59			devs[0] = DEVFS_PATH "/sb16/0";
60			dprintf("%s: publishing %s\n", __func__, devs[0]);
61		}
62	} else
63		rc = ENODEV;
64
65	return rc;
66}
67
68void
69uninit_driver (void)
70{
71}
72
73const char**
74publish_devices(void)
75{
76	return devs;
77}
78
79device_hooks*
80find_device(const char* name)
81{
82	return &driver_hooks;
83}
84