1#include "driver.h"
2
3extern sb16_dev_t device;
4
5static status_t
6sb16_open (const char *name, uint32 flags, void** cookie)
7{
8	sb16_dev_t* dev = &device;
9	status_t rc = B_OK;
10
11	if (dev->opened)
12		return B_BUSY;
13
14	rc = sb16_hw_init(dev);
15	if (rc != B_OK)
16		return rc;
17
18	dev->opened++;
19
20	*cookie = dev;
21	return B_OK;
22}
23
24static status_t
25sb16_read (void* cookie, off_t position, void *buf, size_t* num_bytes)
26{
27	*num_bytes = 0;				/* tell caller nothing was read */
28	return B_IO_ERROR;
29}
30
31static status_t
32sb16_write (void* cookie, off_t position, const void* buffer, size_t* num_bytes)
33{
34	*num_bytes = 0;				/* tell caller nothing was written */
35	return B_IO_ERROR;
36}
37
38static status_t
39sb16_control (void* cookie, uint32 op, void* arg, size_t len)
40{
41	if (cookie)
42		return multi_audio_control(cookie, op, arg, len);
43
44	return B_BAD_VALUE;
45}
46
47static status_t
48sb16_close (void* cookie)
49{
50	sb16_dev_t* dev = (sb16_dev_t*)cookie;
51	sb16_hw_stop(dev);
52
53	return B_OK;
54}
55
56static status_t
57sb16_free (void* cookie)
58{
59	sb16_dev_t* dev = (sb16_dev_t*)cookie;
60	sb16_hw_uninit(dev);
61	--dev->opened;
62
63	return B_OK;
64}
65
66device_hooks driver_hooks = {
67	sb16_open, 			/* -> open entry point */
68	sb16_close, 			/* -> close entry point */
69	sb16_free,			/* -> free cookie */
70	sb16_control, 		/* -> control entry point */
71	sb16_read,			/* -> read entry point */
72	sb16_write			/* -> write entry point */
73};
74