1 #ifndef _SERVERS_DEVMAN_DEVMAN_H 2 #define _SERVERS_DEVMAN_DEVMAN_H 3 #define _SYSTEM 1 /* tell headers that this is the kernel */ 4 #define DEVMAN_SERVER 1 5 6 #include <minix/config.h> 7 #include <errno.h> 8 #include <unistd.h> 9 #include <stdlib.h> 10 #include <stdio.h> 11 #include <string.h> 12 #include <lib.h> 13 #include <minix/timers.h> 14 15 #include <minix/callnr.h> 16 #include <minix/type.h> 17 #include <minix/const.h> 18 #include <minix/com.h> 19 #include <minix/syslib.h> 20 #include <minix/sysutil.h> 21 #include <minix/vfsif.h> 22 #include <minix/endpoint.h> 23 #include <minix/sysinfo.h> 24 #include <minix/u64.h> 25 #include <minix/sysinfo.h> 26 #include <minix/type.h> 27 #include <minix/ipc.h> 28 29 #include <sys/time.h> 30 #include <sys/times.h> 31 #include <sys/types.h> 32 #include <sys/stat.h> 33 34 #include <minix/vtreefs.h> 35 36 #include <minix/devman.h> 37 #include <sys/queue.h> 38 39 #define BUF_SIZE 4097 40 41 #define DEVMAN_DEFAULT_MODE (S_IRUSR | S_IRGRP | S_IROTH) 42 #define DEVMAN_STRING_LEN 128 43 44 #define ADD_STRING "ADD " 45 #define REMOVE_STRING "REMOVE " 46 47 enum devman_inode_type { 48 DEVMAN_DEVINFO_STATIC, 49 DEVMAN_DEVINFO_DYNAMIC, 50 DEVMAN_DEVICE 51 }; 52 53 typedef ssize_t (*devman_read_fn) 54 (char *ptr, size_t len, off_t offset, void *data); 55 56 struct devman_device_file { 57 int minor; 58 int type; 59 }; 60 61 struct devman_static_info_inode { 62 struct devman_device *dev; 63 char data[DEVMAN_STRING_LEN]; 64 }; 65 66 struct devman_event { 67 char data[DEVMAN_STRING_LEN]; 68 TAILQ_ENTRY(devman_event) events; 69 }; 70 71 struct devman_event_inode { 72 TAILQ_HEAD(event_head, devman_event) event_queue; 73 }; 74 75 struct devman_inode { 76 struct inode *inode; 77 devman_read_fn read_fn; 78 void *data; 79 TAILQ_ENTRY(devman_inode) inode_list; 80 }; 81 82 struct devman_device { 83 int dev_id; 84 char * name; 85 86 int ref_count; 87 88 int major; 89 #define DEVMAN_DEVICE_ZOMBIE 2 90 #define DEVMAN_DEVICE_BOUND 1 91 #define DEVMAN_DEVICE_UNBOUND 0 92 int state; 93 94 endpoint_t owner; 95 96 struct devman_inode inode; 97 struct devman_device *parent; 98 99 /* the serialized information on this device */ 100 struct devman_device_info *info; 101 102 TAILQ_ENTRY(devman_device) siblings; 103 104 /* devices attached to the this device */ 105 TAILQ_HEAD(children_head, devman_device) children; 106 TAILQ_HEAD(info_head, devman_inode) infos; 107 }; 108 #endif 109