|
|
1.1 root 1: #ifndef __SYS_CONFINFO_H__
2: #define __SYS_CONFINFO_H__
3:
4: /*
5: * This file contains definitions used by the automatically-generated
6: * configuration file "conf.c". The generated code makes heavy use of macros
7: * to allow the final result to be precisely tailored to the target system
8: * without modification to the code generator.
9: */
10: /*
11: *-IMPORTS:
12: * <common/ccompat.h>
13: * __EXTERN_C_BEGIN__
14: * __EXTERN_C_END__
15: * __USE_PROTO__
16: * __PROTO ()
17: * <common/xdebug.h>
18: * __LOCAL__
19: * <common/_intmask.h>
20: * intmask_t
21: * <common/_cred.h>
22: * cred_t
23: * <common/_uid.h>
24: * n_dev_t
25: * __major_t
26: * __minor_t
27: * <common/_off.h>
28: * off_t
29: * <sys/inline.h>
30: * _masktab []
31: * __GET_BASE_MASK ()
32: * __SET_BASE_MASK ()
33: * <sys/stream.h>
34: * struct streamtab
35: * <sys/uio.h>
36: * uio_t
37: */
38:
39: #include <common/ccompat.h>
40: #include <common/xdebug.h>
41: #include <common/_intmask.h>
42: #include <common/_cred.h>
43: #include <common/_uid.h>
44: #include <common/_off.h>
45: #include <sys/inline.h>
46: #include <sys/stream.h>
47: #include <sys/uio.h>
48:
49:
50: #ifdef __USE_PROTO__
51: #define DEF(ansi,k_r) ansi
52: #else
53: #define DEF(ansi,k_r) k_r
54: #endif
55:
56: /*
57: * Since we don't import the definition of "buf", let's create an incomplete
58: * definition at file scope. Same for "pollhead".
59: */
60:
61: struct buf;
62: struct pollhead;
63:
64: #define __OPEN(name) __CONCAT (name, open)
65: #define __CLOSE(name) __CONCAT (name, close)
66: #define __READ(name) __CONCAT (name, read)
67: #define __WRITE(name) __CONCAT (name, write)
68: #define __IOCTL(name) __CONCAT (name, ioctl)
69: #define __STRATEGY(name) __CONCAT (name, strategy)
70: #define __PRINT(name) __CONCAT (name, print)
71: #define __SIZE(name) __CONCAT (name, size)
72: #define __CHPOLL(name) __CONCAT (name, chpoll)
73: #define __MMAP(name) __CONCAT (name, mmap)
74: #define __INTR(name) __CONCAT (name, intr)
75: #define __INIT(name) __CONCAT (name, init)
76: #define __HALT(name) __CONCAT (name, halt)
77: #define __START(name) __CONCAT (name, start)
78: #define __EXIT(name) __CONCAT (name, exit)
79:
80: #define __INFO(name) __CONCAT (name, info)
81: #define __DEVFLAG(name) __CONCAT (name, devflag)
82:
83:
84: typedef int (* ddi_open_t) __PROTO ((n_dev_t * _devp, int _oflag,
85: int _otyp, cred_t * _credp));
86: #define EXTERN_OPEN(name) __EXTERN_C__ \
87: int __OPEN (name) __PROTO ((n_dev_t * _devp, int _oflag,\
88: int _otyp, cred_t * _credp))
89:
90: typedef int (* ddi_close_t) __PROTO ((n_dev_t _dev, int _oflag, int _otyp,
91: cred_t * _credp));
92: #define EXTERN_CLOSE(name) __EXTERN_C__ \
93: int __CLOSE (name) __PROTO ((n_dev_t _dev, int _oflag, int _otyp,\
94: cred_t * _credp))
95:
96: typedef int (* ddi_read_t) __PROTO ((n_dev_t _dev, uio_t * _uiop,
97: cred_t * _credp));
98: #define EXTERN_READ(name) __EXTERN_C__ \
99: int __READ (name) __PROTO ((n_dev_t _dev, uio_t * _uiop,\
100: cred_t * _credp))
101:
102: typedef int (* ddi_write_t) __PROTO ((n_dev_t _dev, uio_t * _uiop,
103: cred_t * _credp));
104: #define EXTERN_WRITE(name) __EXTERN_C__ \
105: int __WRITE (name) __PROTO ((n_dev_t _dev, uio_t * _uiop,\
106: cred_t * _credp))
107:
108: typedef int (* ddi_ioctl_t) __PROTO ((n_dev_t _dev, int _cmd, _VOID * _arg,
109: int _mode, cred_t * _credp,
110: int * _rvalp));
111: #define EXTERN_IOCTL(name) __EXTERN_C__ \
112: int __IOCTL (name) __PROTO ((n_dev_t _dev, int _cmd, _VOID * _arg,\
113: int _mode, cred_t * _credp,\
114: int * _rvalp))
115:
116: typedef int (* ddi_strategy_t) __PROTO ((struct buf * _bufp));
117: #define EXTERN_STRATEGY(name) __EXTERN_C__ \
118: int __STRATEGY (name) __PROTO ((struct buf * _bufp))
119:
120: typedef int (* ddi_print_t) __PROTO ((n_dev_t _dev, char * _str));
121: #define EXTERN_PRINT(name) __EXTERN_C__ \
122: int __PRINT (name) __PROTO ((n_dev_t _dev, char * _str))
123:
124: typedef int (* ddi_size_t) __PROTO ((n_dev_t _dev));
125: #define EXTERN_SIZE(name) __EXTERN_C__ \
126: int __SIZE (name) __PROTO ((n_dev_t _dev))
127:
128: typedef int (* ddi_chpoll_t) __PROTO ((n_dev_t _dev, short _events,
129: int _anyyet, short * _reventsp,
130: struct pollhead ** _phpp));
131: #define EXTERN_CHPOLL(name) __EXTERN_C__ \
132: int __CHPOLL (name) __PROTO ((n_dev_t _dev, short _events,\
133: int _anyyet, short * _reventsp,\
134: struct pollhead ** _phpp))
135:
136: typedef int (* ddi_mmap_t) __PROTO ((n_dev_t _dev, off_t _off,
137: int _prot));
138: #define EXTERN_MMAP(name) __EXTERN_C__ \
139: int __MMAP (name) __PROTO ((n_dev_t _dev, off_t _off,\
140: int _prot))
141:
142: typedef int (* ddi_intr_t) __PROTO ((int _ivec));
143: #define EXTERN_INTR(name) __EXTERN_C__ \
144: int __INTR (name) __PROTO ((int _ivec))
145:
146: typedef void (* ddi_init_t) __PROTO ((void));
147: #define EXTERN_INIT(name) __EXTERN_C__ \
148: void __INIT (name) __PROTO ((void))
149:
150: typedef void (* ddi_start_t) __PROTO ((void));
151: #define EXTERN_START(name) __EXTERN_C__ \
152: void __START (name) __PROTO ((void))
153:
154: typedef void (* ddi_exit_t) __PROTO ((void));
155: #define EXTERN_EXIT(name) __EXTERN_C__ \
156: void __EXIT (name) __PROTO ((void))
157:
158: typedef void (* ddi_halt_t) __PROTO ((void));
159: #define EXTERN_HALT(name) __EXTERN_C__ \
160: void __HALT (name) __PROTO ((void))
161:
162: #define NULL_OPEN ((ddi_open_t) 0)
163: #define NULL_CLOSE ((ddi_close_t) 0)
164: #define NULL_READ ((ddi_read_t) 0)
165: #define NULL_WRITE ((ddi_write_t) 0)
166: #define NULL_IOCTL ((ddi_ioctl_t) 0)
167: #define NULL_STRATEGY ((ddi_strategy_t) 0)
168: #define NULL_PRINT ((ddi_print_t) 0)
169: #define NULL_SIZE ((ddi_size_t) 0)
170: #define NULL_CHPOLL ((ddi_chpoll_t) 0)
171: #define NULL_MMAP ((ddi_mmap_t) 0)
172: #define NULL_INTR ((ddi_intr_t) 0)
173: #define NULL_INIT ((ddi_init_t) 0)
174: #define NULL_START ((ddi_start_t) 0)
175: #define NULL_EXIT ((ddi_exit_t) 0)
176: #define NULL_HALT ((ddi_halt_t) 0)
177: #define NULL_CON ((CON *) 0)
178:
179: #if __COHERENT__ || defined (__MSDOS__)
180:
181: #define __KERNEL__ 2
182:
183: #if defined (__MSDOS__)
184: #include <sys/_con.h>
185: #else
186: #include <sys/buf.h>
187: #include <sys/con.h>
188: #endif
189:
190: #include <sys/io.h>
191:
192: #undef __KERNEL__
193:
194: __EXTERN_C_BEGIN__
195:
196: int _forward_open __PROTO ((o_dev_t _dev, int _mode, int _flags,
197: ddi_open_t _funcp));
198: int _forward_close __PROTO ((o_dev_t _dev, int _mode, int _flags,
199: ddi_close_t _funcp));
200: int _forward_read __PROTO ((o_dev_t _dev, IO * _iop,
201: ddi_read_t _funcp));
202: int _forward_write __PROTO ((o_dev_t _dev, IO * _iop,
203: ddi_write_t _funcp));
204: int _forward_ioctl __PROTO ((o_dev_t _dev, int _cmd,
205: _VOID * _arg, int mode,
206: ddi_ioctl_t _funcp));
207: #ifndef __MSDOS__
208: int _forward_strategy __PROTO ((BUF * _buf,
209: ddi_strategy_t _funcp));
210: #endif
211: int _forward_chpoll __PROTO ((o_dev_t _dev, int _events,
212: int _msec, ddi_chpoll_t _funcp));
213:
214: int _streams_open __PROTO ((o_dev_t _dev, int _mode, int _flags,
215: struct streamtab * _infop));
216: int _streams_close __PROTO ((o_dev_t _dev, int _mode, int _flags,
217: struct streamtab * _infop));
218: int _streams_read __PROTO ((o_dev_t _dev, IO * _iop,
219: struct streamtab * _infop));
220: int _streams_write __PROTO ((o_dev_t _dev, IO * _iop,
221: struct streamtab * _infop));
222: int _streams_ioctl __PROTO ((o_dev_t _dev, int _cmd,
223: _VOID * _arg, int mode,
224: struct streamtab * _infop));
225: int _streams_chpoll __PROTO ((o_dev_t _dev, int _events,
226: int _msec,
227: struct streamtab * _infop));
228:
229: __EXTERN_C_END__
230:
231: typedef struct {
232: int * cdev_flag;
233: CON cdev_con;
234: } cdevsw_t;
235:
236: /*
237: * Note that we do not have the DFPOL flag set by default. While most compilers
238: * can evaluate a "(ch) == 0 ? :" type of expression which is a constant in an
239: * initializer, the MWC compiler cannot do so reliably. We fix up the flags at
240: * startup time as a result.
241: */
242:
243: #define CDEVSW_ENTRY(fl,op,cl,re,wr,io,ch,mm) \
244: { (fl), { (ch) == 0 ? DFCHR : DFCHR | DFPOL, 0, \
245: (op), (cl), 0, (re), (wr), (io), 0, 0, 0, 0, (ch) } }
246:
247: #define NULL_CDEVSW() \
248: { 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
249:
250: #define STREAMS_ENTRY(name) \
251: { & __DEVFLAG (name), { DFCHR | DFPOL, 0, \
252: __CONCAT (name, openS), __CONCAT (name, closeS), \
253: 0, __CONCAT (name, readS), __CONCAT (name, writeS), \
254: __CONCAT (name, ioctlS), 0, 0, 0, 0, \
255: __CONCAT (name, chpollS) } }
256:
257: #define COH_OPEN(name,s) \
258: __LOCAL__ int __CONCAT3 (name, open, s) \
259: DEF ((o_dev_t dev, int mode, int flag),\
260: (dev, mode, flag) o_dev_t dev; int mode; int flag;)
261:
262: #define COH_CLOSE(name,s) \
263: __LOCAL__ int __CONCAT3 (name, close, s) \
264: DEF ((o_dev_t dev, int mode, int flag), \
265: (dev, mode, flag) o_dev_t dev; int mode; int flag;)
266:
267: #define COH_READ(name,s) \
268: __LOCAL__ int __CONCAT3 (name, read, s) \
269: DEF ((o_dev_t dev, IO * iop), \
270: (dev, iop) o_dev_t dev; IO * iop;)
271:
272: #define COH_WRITE(name,s) \
273: __LOCAL__ int __CONCAT3 (name, write, s) \
274: DEF ((o_dev_t dev, IO * iop), \
275: (dev, iop) o_dev_t dev; IO * iop;)
276:
277: #define COH_IOCTL(name,s) \
278: __LOCAL__ int __CONCAT3 (name, ioctl, s) \
279: DEF ((o_dev_t dev, int cmd, _VOID * arg, int mode), \
280: (dev, cmd, arg, mode) \
281: o_dev_t dev; int cmd; _VOID * arg; int mode;)
282:
283: #define COH_STRATEGY(name,s) \
284: __LOCAL__ int __CONCAT3 (name, strategy, s) \
285: DEF ((BUF * buf), \
286: (buf) BUF * buf;)
287:
288: #define COH_CHPOLL(name,s) \
289: __LOCAL__ int __CONCAT3 (name, chpoll, s) \
290: DEF ((o_dev_t dev, int events, int msec), \
291: (dev, events, msec) o_dev_t dev; int events; int msec;)
292:
293: #define DECLARE_STREAMS(name) \
294: extern struct streamtab __INFO (name); \
295: COH_OPEN (name, S) { \
296: return _streams_open (dev, mode, flag, & __INFO (name)); \
297: } \
298: COH_CLOSE (name, S) { \
299: return _streams_close (dev, mode, flag, & __INFO (name)); \
300: } \
301: COH_READ (name, S) { \
302: return _streams_read (dev, iop, & __INFO (name)); \
303: } \
304: COH_WRITE (name, S) { \
305: return _streams_write (dev, iop, & __INFO (name)); \
306: } \
307: COH_IOCTL (name, S) { \
308: return _streams_ioctl (dev, cmd, arg, mode, & __INFO (name));\
309: } \
310: COH_CHPOLL (name, S) { \
311: return _streams_chpoll (dev, events, msec, & __INFO (name)); \
312: }
313:
314: #define DECLARE_OPEN(name) \
315: COH_OPEN (name,D) { \
316: EXTERN_OPEN (name); \
317: return _forward_open (dev, mode, flag, __OPEN (name)); \
318: }
319:
320: #define DECLARE_CLOSE(name) \
321: COH_CLOSE (name,D) { \
322: EXTERN_CLOSE (name); \
323: return _forward_close (dev, mode, flag, __CLOSE (name)); \
324: }
325:
326: #define DECLARE_READ(name) \
327: COH_READ (name,D) { \
328: EXTERN_READ (name); \
329: return _forward_read (dev, iop, __READ (name)); \
330: }
331:
332: #define DECLARE_WRITE(name) \
333: COH_WRITE (name,D) { \
334: EXTERN_WRITE (name); \
335: return _forward_write (dev, iop, __WRITE (name)); \
336: }
337:
338: #define DECLARE_IOCTL(name) \
339: COH_IOCTL (name,D) { \
340: EXTERN_IOCTL (name); \
341: return _forward_ioctl (dev, cmd, arg, mode, __IOCTL (name)); \
342: }
343:
344: #define DECLARE_STRATEGY(name) \
345: COH_STRATEGY (name,D) { \
346: EXTERN_STRATEGY (name); \
347: return _forward_strategy (buf, __STRATEGY (name)); \
348: }
349:
350: #define DECLARE_CHPOLL(name) \
351: COH_CHPOLL (name,D) { \
352: EXTERN_CHPOLL (name); \
353: return _forward_chpoll (dev, events, msec, __CHPOLL (name)); \
354: }
355:
356: #define OPEN(name) __CONCAT (name, openD)
357: #define CLOSE(name) __CONCAT (name, closeD)
358: #define READ(name) __CONCAT (name, readD)
359: #define WRITE(name) __CONCAT (name, writeD)
360: #define IOCTL(name) __CONCAT (name, ioctlD)
361: #define STRATEGY(name) __CONCAT (name, strategyD)
362: #define CHPOLL(name) __CONCAT (name, chpollD)
363:
364: /*
365: * "drvl" and "drvn" are declared for us in <sys/con.h>. Note that the drvl []
366: * table always has 32 entries to allow the patching hacks (shudder).
367: */
368:
369: #define DECLARE_DRVL(name) extern CON __CONCAT (name, con);
370:
371: #define DRVL_ENTRY(name) { & __CONCAT (name, con) }
372:
373: #define NULL_DRVL() { 0 }
374:
375: #endif /* __COHERENT__ || defined (__MSDOS__) */
376:
377:
378: /*
379: * Now default definitions for those things that are not overridden above.
380: */
381:
382: #if ! defined (DECLARE_STREAMS)
383: # define DECLARE_STREAMS(name) extern struct streamtab __INFO (name);
384: #endif
385:
386: #if ! defined (DECLARE_MODULE)
387: # define DECLARE_MODULE(name) extern struct streamtab __INFO (name);
388: #endif
389:
390: #if ! defined (DECLARE_OPEN) || ! defined (OPEN)
391: # define DECLARE_OPEN(name) EXTERN_OPEN (name);
392: # define OPEN(name) __OPEN (name)
393: #endif
394:
395: #if ! defined (DECLARE_CLOSE) || ! defined (CLOSE)
396: # define DECLARE_CLOSE(name) EXTERN_CLOSE (name);
397: # define CLOSE(name) __CLOSE (name)
398: #endif
399:
400: #if ! defined (DECLARE_READ) || ! defined (READ)
401: # define DECLARE_READ(name) EXTERN_READ (name);
402: # define READ(name) __READ (name)
403: #endif
404:
405: #if ! defined (DECLARE_WRITE) || ! defined (WRITE)
406: # define DECLARE_WRITE(name) EXTERN_WRITE (name);
407: # define WRITE(name) __WRITE (name)
408: #endif
409:
410: #if ! defined (DECLARE_IOCTL) || ! defined (IOCTL)
411: # define DECLARE_IOCTL(name) EXTERN_IOCTL (name);
412: # define IOCTL(name) __IOCTL (name)
413: #endif
414:
415: #if ! defined (DECLARE_CHPOLL) || ! defined (CHPOLL)
416: # define DECLARE_CHPOLL(name) EXTERN_CHPOLL (name);
417: # define CHPOLL(name) __CHPOLL (name)
418: #endif
419:
420: #if ! defined (DECLARE_MMAP) || ! defined (MMAP)
421: # define DECLARE_MMAP(name) EXTERN_MMAP (name);
422: # define MMAP(name) __MMAP (name)
423: #endif
424:
425: #if ! defined (DECLARE_STRATEGY) || ! defined (STRATEGY)
426: # define DECLARE_STRATEGY(name) EXTERN_STRATEGY (name);
427: # define STRATEGY(name) __STRATEGY (name)
428: #endif
429:
430: #if ! defined (DECLARE_PRINT) || ! defined (PRINT)
431: # define DECLARE_PRINT(name) EXTERN_PRINT (name);
432: # define PRINT(name) __PRINT (name)
433: #endif
434:
435: #if ! defined (DECLARE_SIZE) || ! defined (SIZE)
436: # define DECLARE_SIZE(name) EXTERN_SIZE (name);
437: # define SIZE(name) __SIZE (name)
438: #endif
439:
440: #if ! defined (DECLARE_INTR) || ! defined (INTR)
441: # define DECLARE_INTR(name) EXTERN_INTR (name);
442: # define INTR(name) __INTR (name)
443: #endif
444:
445: #if ! defined (DECLARE_INIT) || ! defined (INIT)
446: # define DECLARE_INIT(name) EXTERN_INIT (name);
447: # define INIT(name) __INIT (name)
448: #endif
449:
450: #if ! defined (DECLARE_START) || ! defined (START)
451: # define DECLARE_START(name) EXTERN_START (name);
452: # define START(name) __START (name)
453: #endif
454:
455: #if ! defined (DECLARE_EXIT) || ! defined (EXIT)
456: # define DECLARE_EXIT(name) EXTERN_EXIT (name);
457: # define EXIT(name) __EXIT (name)
458: #endif
459:
460: #if ! defined (DECLARE_HALT) || ! defined (HALT)
461: # define DECLARE_HALT(name) EXTERN_HALT (name);
462: # define HALT(name) __EXIT (halt)
463: #endif
464:
465: #ifndef CDEVSW_ENTRY
466:
467: typedef struct {
468: int * cdev_flag;
469: struct streamtab
470: * cdev_stream;
471: ddi_open_t cdev_open;
472: ddi_close_t cdev_close;
473: ddi_read_t cdev_read;
474: ddi_write_t cdev_write;
475: ddi_ioctl_t cdev_ioctl;
476: ddi_chpoll_t cdev_chpoll;
477: ddi_mmap_t cdev_mmap;
478: } cdevsw_t;
479:
480: #define CDEVSW_ENTRY(fl,op,cl,re,wr,io,ch,mm) \
481: { (fl), 0, (op), (cl), (re), (wr), (io), (ch), (mm) }
482:
483: #define STREAMS_ENTRY(name) \
484: { & __DEVFLAG (name), & __INFO (name), 0, 0, 0, 0, 0, 0 }
485:
486: #define NULL_CDEVSW() \
487: { 0, 0, 0, 0, 0, 0, 0, 0 }
488:
489: #endif /* ! defined (CDEVSW_ENTRY) */
490:
491: #ifndef BDEVSW_ENTRY
492:
493: typedef struct {
494: int * bdev_flag;
495: ddi_open_t bdev_open;
496: ddi_close_t bdev_close;
497: ddi_strategy_t bdev_strategy;
498: ddi_print_t bdev_print;
499: ddi_size_t bdev_size;
500: } bdevsw_t;
501:
502: #define BDEVSW_ENTRY(fl,op,cl,st,pr,si) \
503: { (fl), (op), (cl), (st), (pr), (si) }
504:
505: #define NULL_BDEVSW() \
506: { 0, 0, 0, 0, 0, 0 }
507:
508: #endif /* ! defined (BDEVSW_ENTRY) */
509:
510:
511: #ifndef MODSW_ENTRY
512:
513: typedef struct {
514: int * mod_flag;
515: struct streamtab
516: * mod_stream;
517: } modsw_t;
518:
519: #define MODSW_ENTRY(name) { & __DEVFLAG (name), & __INFO (name) }
520:
521: #define NULL_MODSW() { 0, 0 }
522:
523: #endif /* ! defined (MODSW_ENTRY) */
524:
525:
526: #define __VECTOR(vec) __CONCAT (vector, vec)
527: #define __PREV(vec) __CONCAT3 (vector, vec, _prev)
528:
529:
530: #ifdef __BORLANDC__
531:
532: /*
533: * Under MS-DOS, we have to avoid disrupting the existing software. That means
534: * we have to take care to chain to the appropriate previous handlers; given
535: * that Borland C++ has support for this, interrupts under C++ are supported
536: * using native facilities rather than a generic trap layer. A generic trap
537: * layer should be doing similar things, of course.
538: */
539:
540: typedef interrupt void (* intthunk_t) __PROTO ((__ANY_ARGS__));
541:
542: __EXTERN_C_BEGIN__
543:
544: void _chain_intr (intthunk_t _prev_int); /* Borland C++ library */
545: void CHECK_DEFER (void);
546:
547: __EXTERN_C_END__
548:
549:
550: typedef struct {
551: int int_vector;
552: intthunk_t int_thunk;
553: intthunk_t * int_prev;
554: } intr_t;
555:
556: #define BEGIN_THUNK(vec,mask) \
557: __LOCAL__ intthunk_t __PREV (vec); \
558: __LOCAL__ interrupt void __VECTOR (vec) \
559: DEF ((__ANY_ARGS__), __ARGS (())) { \
560: intmask_t oldmask = __GET_BASE_MASK (); \
561: pl_t prev_pl; \
562: if (__PREV (vec) != 0) \
563: (* __PREV (vec)) (); \
564: __SET_BASE_MASK (oldmask | (mask)); \
565: ddi_cpu_data ()->dc_int_level ++; \
566: prev_pl = spltimeout (); \
567: __SEND_EOI (vec); \
568: __CHEAP_ENABLE_INTS ();
569:
570: #define CALL_INTR(vec,name) (void) __INTR (name) (vec);
571:
572: #define END_THUNK(vec) \
573: __CHEAP_DISABLE_INTS (); \
574: __SET_BASE_MASK (oldmask); \
575: splx (prev_pl); \
576: if (ddi_cpu_data ()->dc_int_level == 1 && \
577: ddi_cpu_data ()->dc_ipl == plbase) \
578: CHECK_DEFER (); \
579: ddi_cpu_data ()->dc_int_level --; \
580: }
581:
582: #define INTR_THUNK(vec) { vec, __VECTOR (vec), & __PREV (vec) }
583:
584: #else
585:
586: typedef void (* intthunk_t) __PROTO ((__ANY_ARGS__));
587:
588: typedef struct {
589: int int_vector;
590: intthunk_t int_thunk;
591: } intr_t;
592:
593: #define BEGIN_THUNK(vec,mask) \
594: __LOCAL__ void __VECTOR (vec) \
595: DEF ((void), __ARGS (())) { \
596: intmask_t oldmask = __GET_BASE_MASK (); \
597: __SET_BASE_MASK (oldmask | (mask)); \
598: ddi_cpu_data ()->dc_int_level ++;
599:
600: #define CALL_INTR(vec,name) (void) __INTR (name) (vec);
601:
602: #define END_THUNK(vec) \
603: ddi_cpu_data ()->dc_int_level --; \
604: __SET_BASE_MASK (oldmask); \
605: }
606:
607: #define INTR_THUNK(vec) { vec, __VECTOR (vec) }
608:
609: #endif
610:
611:
612: typedef ddi_init_t init_t;
613: typedef ddi_start_t start_t;
614: typedef ddi_exit_t exit_t;
615: typedef ddi_halt_t halt_t;
616:
617: extern init_t inittab [];
618: extern unsigned int ninit;
619:
620: extern start_t starttab [];
621: extern unsigned int nstart;
622:
623: extern exit_t exittab [];
624: extern unsigned int nexit;
625:
626: extern halt_t halttab [];
627: extern unsigned int nhalt;
628:
629: extern cdevsw_t cdevsw [];
630: extern unsigned int ncdevsw;
631:
632: extern bdevsw_t bdevsw [];
633: extern unsigned int nbdevsw;
634:
635: extern modsw_t modsw [];
636: extern unsigned int nmodsw;
637:
638: extern __major_t _maxmajor;
639: extern __major_t _major [];
640: extern __minor_t _minor [];
641:
642: extern intr_t inttab [];
643: extern unsigned int nintr;
644:
645: #endif /* ! defined (__SYS_CONFINFO_H__) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.