home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 4 / hacker04 / 04_HACK04.ISO / darwin / darwinx86.iso / usr / include / sys / conf.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-09-30  |  7.8 KB  |  263 lines

  1. /*
  2.  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
  3.  *
  4.  * @APPLE_LICENSE_HEADER_START@
  5.  * 
  6.  * The contents of this file constitute Original Code as defined in and
  7.  * are subject to the Apple Public Source License Version 1.1 (the
  8.  * "License").  You may not use this file except in compliance with the
  9.  * License.  Please obtain a copy of the License at
  10.  * http://www.apple.com/publicsource and read it before using this file.
  11.  * 
  12.  * This Original Code and all software distributed under the License are
  13.  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  14.  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  15.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  16.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
  17.  * License for the specific language governing rights and limitations
  18.  * under the License.
  19.  * 
  20.  * @APPLE_LICENSE_HEADER_END@
  21.  */
  22. /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
  23. /*-
  24.  * Copyright (c) 1990, 1993
  25.  *    The Regents of the University of California.  All rights reserved.
  26.  * (c) UNIX System Laboratories, Inc.
  27.  * All or some portions of this file are derived from material licensed
  28.  * to the University of California by American Telephone and Telegraph
  29.  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
  30.  * the permission of UNIX System Laboratories, Inc.
  31.  *
  32.  * Redistribution and use in source and binary forms, with or without
  33.  * modification, are permitted provided that the following conditions
  34.  * are met:
  35.  * 1. Redistributions of source code must retain the above copyright
  36.  *    notice, this list of conditions and the following disclaimer.
  37.  * 2. Redistributions in binary form must reproduce the above copyright
  38.  *    notice, this list of conditions and the following disclaimer in the
  39.  *    documentation and/or other materials provided with the distribution.
  40.  * 3. All advertising materials mentioning features or use of this software
  41.  *    must display the following acknowledgement:
  42.  *    This product includes software developed by the University of
  43.  *    California, Berkeley and its contributors.
  44.  * 4. Neither the name of the University nor the names of its contributors
  45.  *    may be used to endorse or promote products derived from this software
  46.  *    without specific prior written permission.
  47.  *
  48.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  49.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  50.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  51.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  52.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  53.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  54.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  55.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  56.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  57.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  58.  * SUCH DAMAGE.
  59.  *
  60.  *    @(#)conf.h    8.5 (Berkeley) 1/9/95
  61.  */
  62.  
  63. #ifndef _SYS_CONF_H_
  64. #define _SYS_CONF_H_ 1
  65.  
  66. /*
  67.  * Definitions of device driver entry switches
  68.  */
  69.  
  70. struct buf;
  71. struct proc;
  72. struct tty;
  73. struct uio;
  74. struct vnode;
  75.  
  76. /* 
  77.  * Device switch function types.
  78.  */
  79. typedef int  open_close_fcn_t    __P((dev_t dev, int flags, int devtype,
  80.                      struct proc *p));
  81.  
  82. typedef struct tty *d_devtotty_t __P((dev_t dev));
  83.  
  84. typedef    void strategy_fcn_t    __P((struct buf *bp));
  85. typedef int  ioctl_fcn_t    __P((dev_t dev, u_long cmd, caddr_t data,
  86.                      int fflag, struct proc *p));
  87. typedef int  dump_fcn_t    ();     /* parameters vary by architecture */
  88. typedef    int  psize_fcn_t    __P((dev_t dev));
  89. typedef int  read_write_fcn_t     __P((dev_t dev, struct uio *uio, int ioflag));
  90. typedef    int  stop_fcn_t     __P((struct tty *tp, int rw));
  91. typedef    int  reset_fcn_t     __P((int uban));
  92. typedef    int  select_fcn_t     __P((dev_t dev, int which, void * wql, struct proc *p));
  93. typedef    int  mmap_fcn_t     __P(());
  94. typedef    int  getc_fcn_t     __P((dev_t dev));
  95. typedef    int  putc_fcn_t     __P((dev_t dev, char c));
  96. typedef int  d_poll_t        __P((dev_t dev, int events, struct proc *p));
  97.  
  98. #define    d_open_t    open_close_fcn_t
  99. #define    d_close_t    open_close_fcn_t
  100. #define    d_read_t    read_write_fcn_t
  101. #define    d_write_t    read_write_fcn_t
  102. #define    d_ioctl_t    ioctl_fcn_t
  103.  
  104. __BEGIN_DECLS
  105. int    enodev ();        /* avoid actual prototype for multiple use */
  106. void    enodev_strat();
  107. __END_DECLS
  108.  
  109. /*
  110.  * Versions of enodev() pointer, cast to appropriate function type. For use
  111.  * in empty devsw slots.
  112.  */
  113. #define eno_opcl        ((open_close_fcn_t *)&enodev)
  114. #define eno_strat        ((strategy_fcn_t *)&enodev_strat)
  115. #define eno_ioctl        ((ioctl_fcn_t *)&enodev)
  116. #define eno_dump        ((dump_fcn_t *)&enodev)
  117. #define eno_psize        ((psize_fcn_t *)&enodev)
  118. #define eno_rdwrt        ((read_write_fcn_t *)&enodev)
  119. #define eno_stop        ((stop_fcn_t *)&enodev)
  120. #define eno_reset        ((reset_fcn_t *)&enodev)
  121. #define eno_mmap        ((mmap_fcn_t *)&enodev)
  122. #define eno_getc        ((getc_fcn_t *)&enodev)
  123. #define eno_putc        ((putc_fcn_t *)&enodev)
  124. #define eno_select        ((select_fcn_t *)&enodev)
  125.  
  126. /*
  127.  * Types for d_type.
  128.  */
  129. #define    D_TAPE    1
  130. #define    D_DISK    2
  131. #define    D_TTY    3
  132.  
  133. /*
  134.  * Block device switch table
  135.  */
  136. struct bdevsw {
  137.     open_close_fcn_t    *d_open;
  138.     open_close_fcn_t    *d_close;
  139.     strategy_fcn_t        *d_strategy;
  140.     ioctl_fcn_t        *d_ioctl;
  141.     dump_fcn_t        *d_dump;
  142.     psize_fcn_t        *d_psize;
  143.     int            d_type;
  144. };
  145.  
  146. #ifdef    KERNEL
  147.  
  148. d_devtotty_t    nodevtotty;
  149. d_write_t    nowrite;
  150.  
  151.  
  152. extern struct bdevsw bdevsw[];
  153.  
  154. /*
  155.  * Contents of empty bdevsw slot.
  156.  */
  157. #define     NO_BDEVICE                        \
  158.     { eno_opcl,    eno_opcl,    eno_strat, eno_ioctl,    \
  159.       eno_dump,    eno_psize,    0     }
  160.       
  161. #endif    /* KERNEL */
  162.  
  163. /*
  164.  * Character device switch table
  165.  */
  166. struct cdevsw {
  167.     open_close_fcn_t    *d_open;
  168.     open_close_fcn_t    *d_close;
  169.     read_write_fcn_t    *d_read;
  170.     read_write_fcn_t    *d_write;
  171.     ioctl_fcn_t        *d_ioctl;
  172.     stop_fcn_t        *d_stop;
  173.     reset_fcn_t        *d_reset;
  174.     struct    tty         **d_ttys;
  175.     select_fcn_t        *d_select;
  176.     mmap_fcn_t        *d_mmap;
  177.     strategy_fcn_t        *d_strategy;
  178.     getc_fcn_t        *d_getc;
  179.     putc_fcn_t        *d_putc;
  180.     int            d_type;
  181. };
  182.  
  183. #ifdef KERNEL
  184.  
  185. extern struct cdevsw cdevsw[];
  186.  
  187. /*
  188.  * Contents of empty cdevsw slot.
  189.  */
  190.  
  191. #define     NO_CDEVICE                              \
  192.     {                                      \
  193.     eno_opcl,    eno_opcl,    eno_rdwrt,    eno_rdwrt,    \
  194.     eno_ioctl,    eno_stop,    eno_reset,    0,          \
  195.     seltrue,    eno_mmap,    eno_strat,    eno_getc,    \
  196.     eno_putc,    0                           \
  197.     }
  198.     
  199. #endif    /* KERNEL */
  200.  
  201. /*
  202.  * Line discipline switch table
  203.  */
  204. struct linesw {
  205.     int    (*l_open)    __P((dev_t dev, struct tty *tp));
  206.     int    (*l_close)    __P((struct tty *tp, int flags));
  207.     int    (*l_read)    __P((struct tty *tp, struct uio *uio,
  208.                      int flag));
  209.     int    (*l_write)    __P((struct tty *tp, struct uio *uio,
  210.                      int flag));
  211.     int    (*l_ioctl)    __P((struct tty *tp, u_long cmd, caddr_t data,
  212.                      int flag, struct proc *p));
  213.     int    (*l_rint)    __P((int c, struct tty *tp));
  214.     int    (*l_start)    __P((struct tty *tp));
  215.     int    (*l_modem)    __P((struct tty *tp, int flag));
  216. };
  217.  
  218. #ifdef KERNEL
  219. extern struct linesw linesw[];
  220. extern int nlinesw;
  221.  
  222. int ldisc_register __P((int , struct linesw *));
  223. void ldisc_deregister __P((int));
  224. #define LDISC_LOAD      -1              /* Loadable line discipline */
  225. #endif
  226.  
  227. /*
  228.  * Swap device table
  229.  */
  230. struct swdevt {
  231.     dev_t    sw_dev;
  232.     int    sw_flags;
  233.     int    sw_nblks;
  234.     struct    vnode *sw_vp;
  235. };
  236. #define    SW_FREED    0x01
  237. #define    SW_SEQUENTIAL    0x02
  238. #define    sw_freed    sw_flags    /* XXX compat */
  239.  
  240. #ifdef KERNEL
  241. extern struct swdevt swdevt[];
  242. #endif
  243.  
  244. #ifdef KERNEL
  245. /*
  246.  * ***_free finds free slot;
  247.  * ***_add adds entries to the devsw table
  248.  * If int arg is -1; finds a free slot
  249.  * Returns the major number if successful
  250.  *  else -1
  251.  */
  252. __BEGIN_DECLS
  253. int  bdevsw_isfree __P((int));
  254. int  bdevsw_add __P((int, struct bdevsw *));
  255. int  bdevsw_remove __P((int, struct bdevsw *));
  256. int  cdevsw_isfree __P((int));
  257. int  cdevsw_add __P((int, struct cdevsw *));
  258. int  cdevsw_remove __P((int, struct cdevsw *));
  259. __END_DECLS
  260. #endif
  261.  
  262. #endif /* _SYS_CONF_H_ */
  263.