xref: /NextBSD/sys/sys/mach/device/data_device.h (revision 33da5adc555b3bc29986eeadca03829e4ad06b1e)
1 /*
2  * Copyright 1991-1998 by Open Software Foundation, Inc.
3  *              All Rights Reserved
4  *
5  * Permission to use, copy, modify, and distribute this software and
6  * its documentation for any purpose and without fee is hereby granted,
7  * provided that the above copyright notice appears in all copies and
8  * that both the copyright notice and this permission notice appear in
9  * supporting documentation.
10  *
11  * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
12  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
13  * FOR A PARTICULAR PURPOSE.
14  *
15  * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
16  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
17  * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
18  * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
19  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20  */
21 /*
22  * MkLinux
23  */
24 
25 #include <types.h>
26 #include <kern/macro_help.h>
27 #include <kern/queue.h>
28 #include <device/dev_hdr.h>
29 #include <device/device_types.h>
30 #include <device/io_req.h>
31 
32 #ifndef _DEVICE_DATA_DEVICE_H_
33 #define	_DEVICE_DATA_DEVICE_H_
34 
35 /*
36  * Request sent to the bootstrap task
37  */
38 #define	DATADEV_NAME	"data_device"		      /* Device generic name */
39 
40 typedef struct datadev {
41     queue_chain_t	  dd_chain;		      /* data request chain */
42     const char		 *dd_name;		      /* name */
43     unsigned		  dd_size;		      /* name size */
44     dev_t		  dd_dev;		      /* data device */
45     void		(*dd_close)(void *);	      /* close function */
46     void		(*dd_write)(void *, io_req_t);/* write function */
47     void		 *dd_arg;		      /* functions argument */
48 } *datadev_t;
49 
50 #define	DATADEV_INIT(_ddev, _name, _close, _write, _arg)	\
51 MACRO_BEGIN							\
52     const char *_p = (_ddev)->dd_name  = (const char *)(_name);	\
53     (_ddev)->dd_size = 1;					\
54     while (*_p++ != '\0')					\
55 	(_ddev)->dd_size++;					\
56     (_ddev)->dd_close = (void (*)(void *))(_close);		\
57     (_ddev)->dd_write = (void (*)(void *, io_req_t))(_write);	\
58     (_ddev)->dd_arg   = (_arg);					\
59 MACRO_END
60 
61 extern void		datadev_init(void);
62 
63 extern void		datadev_request(datadev_t);
64 
65 extern io_return_t	datadev_open(dev_t,
66 				     dev_mode_t,
67 				     io_req_t);
68 
69 extern void		datadev_close(dev_t);
70 
71 extern io_return_t	datadev_read(dev_t,
72 				     io_req_t);
73 
74 extern io_return_t	datadev_write(dev_t,
75 				      io_req_t);
76 
77 extern io_return_t	datadev_dinfo(dev_t,
78 				      dev_flavor_t,
79 				      char *);
80 
81 #endif /* _DEVICE_DATA_DEVICE_H_ */
82