18ab2f5ecSMark Murray /*- 28ab2f5ecSMark Murray * Copyright (c) 2004 Mark R V Murray 38ab2f5ecSMark Murray * All rights reserved. 48ab2f5ecSMark Murray * 58ab2f5ecSMark Murray * Redistribution and use in source and binary forms, with or without 68ab2f5ecSMark Murray * modification, are permitted provided that the following conditions 78ab2f5ecSMark Murray * are met: 88ab2f5ecSMark Murray * 1. Redistributions of source code must retain the above copyright 98ab2f5ecSMark Murray * notice, this list of conditions and the following disclaimer 108ab2f5ecSMark Murray * in this position and unchanged. 118ab2f5ecSMark Murray * 2. Redistributions in binary form must reproduce the above copyright 128ab2f5ecSMark Murray * notice, this list of conditions and the following disclaimer in the 138ab2f5ecSMark Murray * documentation and/or other materials provided with the distribution. 148ab2f5ecSMark Murray * 158ab2f5ecSMark Murray * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 168ab2f5ecSMark Murray * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 178ab2f5ecSMark Murray * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 188ab2f5ecSMark Murray * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 198ab2f5ecSMark Murray * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 208ab2f5ecSMark Murray * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 218ab2f5ecSMark Murray * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 228ab2f5ecSMark Murray * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 238ab2f5ecSMark Murray * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 248ab2f5ecSMark Murray * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 258ab2f5ecSMark Murray * 268ab2f5ecSMark Murray */ 278ab2f5ecSMark Murray 288ab2f5ecSMark Murray #include <sys/cdefs.h> 298ab2f5ecSMark Murray __FBSDID("$FreeBSD$"); 308ab2f5ecSMark Murray 318ab2f5ecSMark Murray #include <sys/param.h> 328ab2f5ecSMark Murray #include <sys/conf.h> 338ab2f5ecSMark Murray #include <sys/fcntl.h> 348ab2f5ecSMark Murray #include <sys/kernel.h> 358ab2f5ecSMark Murray #include <sys/lock.h> 368ab2f5ecSMark Murray #include <sys/malloc.h> 378ab2f5ecSMark Murray #include <sys/module.h> 388ab2f5ecSMark Murray #include <sys/mutex.h> 398ab2f5ecSMark Murray #include <sys/proc.h> 408ab2f5ecSMark Murray #include <sys/signalvar.h> 418ab2f5ecSMark Murray #include <sys/systm.h> 428ab2f5ecSMark Murray #include <sys/uio.h> 438ab2f5ecSMark Murray 448ab2f5ecSMark Murray #include <vm/vm.h> 458ab2f5ecSMark Murray #include <vm/pmap.h> 468ab2f5ecSMark Murray 478ab2f5ecSMark Murray #include <machine/iodev.h> 488ab2f5ecSMark Murray 498ab2f5ecSMark Murray static struct cdev *iodev; 508ab2f5ecSMark Murray 518ab2f5ecSMark Murray static struct cdevsw io_cdevsw = { 528ab2f5ecSMark Murray .d_version = D_VERSION, 538ab2f5ecSMark Murray .d_open = ioopen, 548ab2f5ecSMark Murray .d_close = ioclose, 55409a390cSMarcel Moolenaar .d_ioctl = ioioctl, 568ab2f5ecSMark Murray .d_name = "io", 578ab2f5ecSMark Murray }; 588ab2f5ecSMark Murray 598ab2f5ecSMark Murray /* ARGSUSED */ 608ab2f5ecSMark Murray static int 618ab2f5ecSMark Murray io_modevent(module_t mod __unused, int type, void *data __unused) 628ab2f5ecSMark Murray { 638ab2f5ecSMark Murray switch(type) { 648ab2f5ecSMark Murray case MOD_LOAD: 658ab2f5ecSMark Murray if (bootverbose) 668ab2f5ecSMark Murray printf("io: <I/O>\n"); 6772135187SEd Schouten iodev = make_dev(&io_cdevsw, 0, 688ab2f5ecSMark Murray UID_ROOT, GID_WHEEL, 0600, "io"); 698ab2f5ecSMark Murray break; 708ab2f5ecSMark Murray 718ab2f5ecSMark Murray case MOD_UNLOAD: 728ab2f5ecSMark Murray destroy_dev(iodev); 738ab2f5ecSMark Murray break; 748ab2f5ecSMark Murray 758ab2f5ecSMark Murray case MOD_SHUTDOWN: 768ab2f5ecSMark Murray break; 778ab2f5ecSMark Murray 788ab2f5ecSMark Murray default: 798ab2f5ecSMark Murray return(EOPNOTSUPP); 808ab2f5ecSMark Murray break; 818ab2f5ecSMark Murray 828ab2f5ecSMark Murray } 838ab2f5ecSMark Murray 848ab2f5ecSMark Murray return (0); 858ab2f5ecSMark Murray } 868ab2f5ecSMark Murray 878ab2f5ecSMark Murray DEV_MODULE(io, io_modevent, NULL); 88ce46e205SMark Murray MODULE_VERSION(io, 1); 89