|
|
1.1 root 1: #ifndef MDEV_H
2: #define MDEV_H
3:
4: #include "devadm.h"
5:
6:
7: enum {
8: MD_DISABLED,
9: MD_INSTALLABLE,
10: MD_ENABLED
11: };
12:
13:
14: /*
15: * Structure of the data gathered by the mdev routines.
16: */
17:
18: typedef unsigned int maj_t;
19: typedef unsigned int min_t;
20:
21: struct mdevice {
22: mdev_t * md_next; /* global list of all entries */
23: mdev_t * md_chrlink; /* for sorts */
24: mdev_t * md_blklink; /* for sorts */
25: mdev_t * md_modlink; /* for sorts */
26: mdev_t * md_cohlink; /* for sorts */
27:
28: sdev_t * md_sdevices; /* thread of "sdevice" entries */
29: int md_configure; /* See MD_... constants */
30: int md_interrupt; /* has an enabled interrupt */
31:
32: symbol_t * md_devname; /* internal module/device name */
33: symbol_t * md_functions; /* present driver entry points */
34: symbol_t * md_flags; /* driver characteristics */
35: symbol_t * md_prefix; /* driver prefix */
36: maj_t md_blk_maj [2]; /* block major number low, high */
37: maj_t md_chr_maj [2]; /* character major number low, high */
38: min_t md_minor_min; /* minor number minimum */
39: min_t md_minor_max; /* minor number maximum */
40:
41: /*
42: * The following fields are not used in the Coherent system as yet
43: * but are defined by mdevice (4) so we read them.
44: */
45:
46: int md_dma_chan; /* DMA channel number */
47: int md_cpu_id; /* processor-id */
48: };
49:
50:
51: /*
52: * Types suitable for use as selection and comparison predicates for the
53: * mdev_sort () function.
54: */
55:
56: typedef int (* msel_t) PROTO ((mdev_t * _mdevp));
57: typedef int (* mcmp_t) PROTO ((mdev_t * _left, mdev_t * _right));
58: typedef void (* miter_t) PROTO ((VOID * _extra, mdev_t * _mdevp));
59:
60:
61: /*
62: * For Coherent, the first 32 major numbers are reserved for the use of the
63: * old-style Coherent device-driver system.
64: */
65:
66: enum {
67: MAJOR_RESERVED = 32,
68: MAX_DEVNAME = 8,
69: MAX_PREFIX = 4
70: };
71:
72: enum {
73: MDEV_OPEN = 'o',
74: MDEV_CLOSE = 'c',
75: MDEV_READ = 'r',
76: MDEV_WRITE = 'w',
77: MDEV_IOCTL = 'i',
78: MDEV_STARTUP = 's',
79: MDEV_EXIT = 'x',
80: MDEV_INIT = 'I',
81: MDEV_HALT = 'h',
82: MDEV_CHPOLL = 'p',
83:
84: MDEV_MMAP = 'M', /* not defined in SVR4 mdevice (4) */
85: MDEV_SIZE = 'z' /* not defined in SVR4 mdevice (4) */
86: };
87:
88: #define MDEV_FUNCS "ocrwisxIhpMz"
89:
90: enum {
91: MDEV_INSTALLABLE = 'i',
92: MDEV_CHAR = 'c',
93: MDEV_BLOCK = 'b',
94: MDEV_STREAM = 'S',
95: MDEV_DDI_DDK = 'f',
96: MDEV_TTY = 't',
97: MDEV_ONE_SDEVICE = 'o',
98: MDEV_REQUIRED = 'r',
99: MDEV_SAME_MAJORS = 'u',
100: MDEV_HARDWARE = 'H',
101: MDEV_NO_INT = 'G',
102: MDEV_SHARE_DMA = 'D',
103: MDEV_MULTIPLE_MAJORS = 'M',
104: MDEV_ALLOW_IOA_OVERLAP = 'O',
105:
106: /*
107: * The following flag specifies that we are dealing with an old-style Coherent
108: * device driver. These drivers ignore any interrupt settings, doing their
109: * work though the mtune/stune system instead, so the 'G' flag also applies.
110: * The 'o' flag is also appropriate.
111: */
112:
113: MDEV_COHERENT = 'C'
114: };
115:
116: #define MDEV_FLAGS "icbSftoruHGDMOC"
117:
118:
119: EXTERN_C_BEGIN
120:
121: mdev_t * find_mdev PROTO ((symbol_t * _sym));
122: void for_all_mdevices PROTO ((miter_t _iter, VOID * _extra));
123: int mdev_func PROTO ((mdev_t * _mdevp, char _func));
124: int mdev_flag PROTO ((mdev_t * _mdevp, char _flag));
125: void read_mdev_file PROTO ((CONST char * _inname,
126: CONST char * _outname,
127: VOID * _extra));
128: void read_mdev_string PROTO ((CONST char * _string,
129: VOID * _extra));
130: int mdev_sort PROTO ((mdev_t ** _mlistp, mdev_t ** _mdendp,
131: msel_t _selpred, mcmp_t _cmppred,
132: size_t _ptroff));
133: void write_mdevice PROTO ((mdev_t * _mdevp, input_t * _input));
134:
135: EXTERN_C_END
136:
137: #endif /* ! defined (MDEV_H) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.