1/* 2 * Copyright (c) 2000-2012 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28/* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */ 29/*- 30 * Copyright (c) 1990, 1993 31 * The Regents of the University of California. All rights reserved. 32 * (c) UNIX System Laboratories, Inc. 33 * All or some portions of this file are derived from material licensed 34 * to the University of California by American Telephone and Telegraph 35 * Co. or Unix System Laboratories, Inc. and are reproduced herein with 36 * the permission of UNIX System Laboratories, Inc. 37 * 38 * Redistribution and use in source and binary forms, with or without 39 * modification, are permitted provided that the following conditions 40 * are met: 41 * 1. Redistributions of source code must retain the above copyright 42 * notice, this list of conditions and the following disclaimer. 43 * 2. Redistributions in binary form must reproduce the above copyright 44 * notice, this list of conditions and the following disclaimer in the 45 * documentation and/or other materials provided with the distribution. 46 * 3. All advertising materials mentioning features or use of this software 47 * must display the following acknowledgement: 48 * This product includes software developed by the University of 49 * California, Berkeley and its contributors. 50 * 4. Neither the name of the University nor the names of its contributors 51 * may be used to endorse or promote products derived from this software 52 * without specific prior written permission. 53 * 54 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 55 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 56 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 57 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 58 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 59 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 60 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 61 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 62 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 63 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 64 * SUCH DAMAGE. 65 * 66 * @(#)conf.h 8.5 (Berkeley) 1/9/95 67 */ 68 69#ifndef _SYS_CONF_H_ 70#define _SYS_CONF_H_ 1 71 72#include <sys/appleapiopts.h> 73#include <sys/cdefs.h> 74#include <sys/queue.h> 75#include <stdint.h> 76 77/* 78 * Definitions of device driver entry switches 79 */ 80 81struct buf; 82struct proc; 83struct tty; 84struct uio; 85struct vnode; 86 87/* 88 * Types for d_type. 89 * These are returned by ioctl FIODTYPE 90 */ 91#define D_TAPE 1 92#define D_DISK 2 93#define D_TTY 3 94 95#ifdef KERNEL 96/* 97 * Flags for d_type (squeezed into the top half of d_type). 98 */ 99#define D_TYPEMASK 0xffff 100#define D_TRACKCLOSE 0x00010000 /* track all closes */ 101 102/* 103 * Device switch function types. 104 */ 105typedef int open_close_fcn_t(dev_t dev, int flags, int devtype, 106 struct proc *p); 107 108typedef struct tty *d_devtotty_t(dev_t dev); 109 110typedef void strategy_fcn_t(struct buf *bp); 111typedef int ioctl_fcn_t(dev_t dev, u_long cmd, caddr_t data, 112 int fflag, struct proc *p); 113typedef int dump_fcn_t(void); /* parameters vary by architecture */ 114typedef int psize_fcn_t(dev_t dev); 115typedef int read_write_fcn_t(dev_t dev, struct uio *uio, int ioflag); 116typedef int stop_fcn_t(struct tty *tp, int rw); 117typedef int reset_fcn_t(int uban); 118typedef int select_fcn_t(dev_t dev, int which, void * wql, struct proc *p); 119typedef int mmap_fcn_t(void); 120 121#define d_open_t open_close_fcn_t 122#define d_close_t open_close_fcn_t 123#define d_read_t read_write_fcn_t 124#define d_write_t read_write_fcn_t 125#define d_ioctl_t ioctl_fcn_t 126#define d_stop_t stop_fcn_t 127#define d_reset_t reset_fcn_t 128#define d_select_t select_fcn_t 129#define d_mmap_t mmap_fcn_t 130#define d_strategy_t strategy_fcn_t 131 132__BEGIN_DECLS 133int enodev(void); 134void enodev_strat(void); 135__END_DECLS 136 137/* 138 * Versions of enodev() pointer, cast to appropriate function type. For use 139 * in empty devsw slots. 140 */ 141#define eno_opcl ((open_close_fcn_t *)&enodev) 142#define eno_strat ((strategy_fcn_t *)&enodev_strat) 143#define eno_ioctl ((ioctl_fcn_t *)&enodev) 144#define eno_dump ((dump_fcn_t *)&enodev) 145#define eno_psize ((psize_fcn_t *)&enodev) 146#define eno_rdwrt ((read_write_fcn_t *)&enodev) 147#define eno_stop ((stop_fcn_t *)&enodev) 148#define eno_reset ((reset_fcn_t *)&enodev) 149#define eno_mmap ((mmap_fcn_t *)&enodev) 150#define eno_select ((select_fcn_t *)&enodev) 151 152/* For source backward compatibility only! */ 153#define eno_getc ((void *)&enodev) 154#define eno_putc ((void *)&enodev) 155 156/* 157 * Block device switch table 158 */ 159struct bdevsw { 160 open_close_fcn_t *d_open; 161 open_close_fcn_t *d_close; 162 strategy_fcn_t *d_strategy; 163 ioctl_fcn_t *d_ioctl; 164 dump_fcn_t *d_dump; 165 psize_fcn_t *d_psize; 166 int d_type; 167}; 168 169 170d_devtotty_t nodevtotty; 171d_write_t nowrite; 172 173#ifdef KERNEL_PRIVATE 174extern struct bdevsw bdevsw[]; 175extern int (*bootcache_contains_block)(dev_t device, u_int64_t blkno); 176#endif /* KERNEL_PRIVATE */ 177 178/* 179 * Contents of empty bdevsw slot. 180 */ 181#define NO_BDEVICE \ 182 { eno_opcl, eno_opcl, eno_strat, eno_ioctl, \ 183 eno_dump, eno_psize, 0 } 184 185 186/* 187 * Character device switch table 188 */ 189struct cdevsw { 190 open_close_fcn_t *d_open; 191 open_close_fcn_t *d_close; 192 read_write_fcn_t *d_read; 193 read_write_fcn_t *d_write; 194 ioctl_fcn_t *d_ioctl; 195 stop_fcn_t *d_stop; 196 reset_fcn_t *d_reset; 197 struct tty **d_ttys; 198 select_fcn_t *d_select; 199 mmap_fcn_t *d_mmap; 200 strategy_fcn_t *d_strategy; 201 void *d_reserved_1; 202 void *d_reserved_2; 203 int d_type; 204}; 205 206#ifdef BSD_KERNEL_PRIVATE 207void devsw_init(void); 208 209extern uint64_t cdevsw_flags[]; 210#define CDEVSW_SELECT_KQUEUE 0x01 211#define CDEVSW_USE_OFFSET 0x02 212 213struct thread; 214 215typedef struct devsw_lock { 216 TAILQ_ENTRY(devsw_lock) dl_list; 217 struct thread *dl_thread; 218 dev_t dl_dev; 219 int dl_mode; 220} *devsw_lock_t; 221 222#endif /* BSD_KERNEL_PRIVATE */ 223 224 225/* 226 * Contents of empty cdevsw slot. 227 */ 228 229#define NO_CDEVICE \ 230 { \ 231 eno_opcl, eno_opcl, eno_rdwrt, eno_rdwrt, \ 232 eno_ioctl, eno_stop, eno_reset, 0, \ 233 (select_fcn_t *)seltrue, eno_mmap, eno_strat, eno_getc, \ 234 eno_putc, 0 \ 235 } 236 237#endif /* KERNEL */ 238 239#ifdef KERNEL_PRIVATE 240typedef int l_open_t (dev_t dev, struct tty *tp); 241typedef int l_close_t(struct tty *tp, int flags); 242typedef int l_read_t (struct tty *tp, struct uio *uio, int flag); 243typedef int l_write_t(struct tty *tp, struct uio *uio, int flag); 244typedef int l_ioctl_t(struct tty *tp, u_long cmd, caddr_t data, int flag, 245 struct proc *p); 246typedef int l_rint_t (int c, struct tty *tp); 247typedef void l_start_t(struct tty *tp); 248typedef int l_modem_t(struct tty *tp, int flag); 249 250/* 251 * Line discipline switch table 252 */ 253struct linesw { 254 l_open_t *l_open; 255 l_close_t *l_close; 256 l_read_t *l_read; 257 l_write_t *l_write; 258 l_ioctl_t *l_ioctl; 259 l_rint_t *l_rint; 260 l_start_t *l_start; 261 l_modem_t *l_modem; 262}; 263 264 265extern struct linesw linesw[]; 266extern int nlinesw; 267 268int ldisc_register(int , struct linesw *); 269void ldisc_deregister(int); 270#define LDISC_LOAD -1 /* Loadable line discipline */ 271 272#endif /* KERNEL_PRIVATE */ 273 274#ifdef BSD_KERNEL_PRIVATE 275/* 276 * Swap device table 277 */ 278struct swdevt { 279 dev_t sw_dev; 280 int sw_flags; 281 int sw_nblks; 282 struct vnode *sw_vp; 283}; 284#define SW_FREED 0x01 285#define SW_SEQUENTIAL 0x02 286#define sw_freed sw_flags /* XXX compat */ 287 288extern struct swdevt swdevt[]; 289 290#endif /* BSD_KERNEL_PRIVATE */ 291 292 293#ifdef KERNEL 294/* 295 * ***_free finds free slot; 296 * ***_add adds entries to the devsw table 297 * If int arg is -1; finds a free slot 298 * Returns the major number if successful 299 * else -1 300 */ 301__BEGIN_DECLS 302#ifdef KERNEL_PRIVATE 303extern struct cdevsw cdevsw[]; 304extern int cdevsw_setkqueueok(int, struct cdevsw*, int); 305#endif /* KERNEL_PRIVATE */ 306 307#ifdef BSD_KERNEL_PRIVATE 308extern void devsw_lock(dev_t, int); 309extern void devsw_unlock(dev_t, int); 310#endif /* BSD_KERNEL_PRIVATE */ 311 312int bdevsw_isfree(int); 313int bdevsw_add(int, struct bdevsw *); 314int bdevsw_remove(int, struct bdevsw *); 315int cdevsw_isfree(int); 316int cdevsw_add(int, struct cdevsw *); 317int cdevsw_add_with_bdev(int index, struct cdevsw * csw, int bdev); 318int cdevsw_remove(int, struct cdevsw *); 319int isdisk(dev_t, int); 320__END_DECLS 321#endif /* KERNEL */ 322 323#endif /* _SYS_CONF_H_ */ 324