iodev.c revision 202097
185228Sdfr/*- 285228Sdfr * Copyright (c) 2004 Mark R V Murray 385228Sdfr * All rights reserved. 485228Sdfr * 585228Sdfr * Redistribution and use in source and binary forms, with or without 685228Sdfr * modification, are permitted provided that the following conditions 785228Sdfr * are met: 885228Sdfr * 1. Redistributions of source code must retain the above copyright 985228Sdfr * notice, this list of conditions and the following disclaimer 1085228Sdfr * in this position and unchanged. 1185228Sdfr * 2. Redistributions in binary form must reproduce the above copyright 1285228Sdfr * notice, this list of conditions and the following disclaimer in the 1385228Sdfr * documentation and/or other materials provided with the distribution. 1485228Sdfr * 1585228Sdfr * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 1685228Sdfr * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1785228Sdfr * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1885228Sdfr * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 1985228Sdfr * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2085228Sdfr * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2185228Sdfr * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2285228Sdfr * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2385228Sdfr * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2485228Sdfr * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2585228Sdfr * 2685228Sdfr */ 2785228Sdfr 2885228Sdfr#include <sys/cdefs.h> 29111777Sobrien__FBSDID("$FreeBSD: head/sys/dev/io/iodev.c 202097 2010-01-11 18:10:13Z marcel $"); 3085228Sdfr 3185228Sdfr#include <sys/param.h> 3285228Sdfr#include <sys/conf.h> 3385228Sdfr#include <sys/fcntl.h> 3485228Sdfr#include <sys/kernel.h> 3585228Sdfr#include <sys/lock.h> 3685228Sdfr#include <sys/malloc.h> 3785228Sdfr#include <sys/module.h> 3885228Sdfr#include <sys/mutex.h> 3985228Sdfr#include <sys/proc.h> 4085228Sdfr#include <sys/signalvar.h> 4185228Sdfr#include <sys/systm.h> 4285228Sdfr#include <sys/uio.h> 4385228Sdfr 4485228Sdfr#include <vm/vm.h> 4585228Sdfr#include <vm/pmap.h> 4685228Sdfr 4785228Sdfr#include <machine/iodev.h> 4885228Sdfr 4985228Sdfrstatic struct cdev *iodev; 5085228Sdfr 5185228Sdfrstatic struct cdevsw io_cdevsw = { 5285228Sdfr .d_version = D_VERSION, 5385228Sdfr .d_open = ioopen, 5485228Sdfr .d_close = ioclose, 5585228Sdfr .d_ioctl = ioioctl, 5685228Sdfr .d_name = "io", 5785228Sdfr}; 5885228Sdfr 5985228Sdfr/* ARGSUSED */ 6085228Sdfrstatic int 6185228Sdfrio_modevent(module_t mod __unused, int type, void *data __unused) 6285228Sdfr{ 6385228Sdfr switch(type) { 6485228Sdfr case MOD_LOAD: 6585228Sdfr if (bootverbose) 6685228Sdfr printf("io: <I/O>\n"); 6785228Sdfr iodev = make_dev(&io_cdevsw, 0, 6885228Sdfr UID_ROOT, GID_WHEEL, 0600, "io"); 6985228Sdfr break; 7085228Sdfr 7185228Sdfr case MOD_UNLOAD: 7285228Sdfr destroy_dev(iodev); 7385228Sdfr break; 7485228Sdfr 7585228Sdfr case MOD_SHUTDOWN: 7685228Sdfr break; 7785228Sdfr 7885228Sdfr default: 7985228Sdfr return(EOPNOTSUPP); 8085228Sdfr break; 8185228Sdfr 8285228Sdfr } 8385228Sdfr 8485228Sdfr return (0); 8585228Sdfr} 8685228Sdfr 8785228SdfrDEV_MODULE(io, io_modevent, NULL); 8885228SdfrMODULE_VERSION(io, 1); 8985228Sdfr