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