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