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