MASSIVE reorganization of the device operations vector. Change cdevsw
authorMatthew Dillon <dillon@dragonflybsd.org>
Fri, 28 Jul 2006 02:17:41 +0000 (02:17 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Fri, 28 Jul 2006 02:17:41 +0000 (02:17 +0000)
to dev_ops.  dev_ops is a syslink-compatible operations vector structure
similar to the vop_ops structure used by vnodes.

Remove a huge number of instances where a thread pointer is still being
passed as an argument to various device ops and other related routines.
The device OPEN and IOCTL calls now take a ucred instead of a thread pointer,
and the CLOSE call no longer takes a thread pointer.

195 files changed:
sys/bus/cam/cam_xpt.c
sys/bus/cam/scsi/scsi_cd.c
sys/bus/cam/scsi/scsi_ch.c
sys/bus/cam/scsi/scsi_da.c
sys/bus/cam/scsi/scsi_pass.c
sys/bus/cam/scsi/scsi_pt.c
sys/bus/cam/scsi/scsi_sa.c
sys/bus/cam/scsi/scsi_ses.c
sys/bus/cam/scsi/scsi_target.c
sys/bus/firewire/firewirereg.h
sys/bus/firewire/fwdev.c
sys/bus/firewire/fwmem.c
sys/bus/firewire/fwmem.h
sys/bus/firewire/fwohci.c
sys/bus/iicbus/iic.c
sys/bus/isa/vga_isa.c
sys/bus/pci/pci.c
sys/bus/smbus/smb.c
sys/bus/usb/usb.c
sys/conf/files
sys/contrib/dev/fla/fla.c
sys/contrib/ipfilter/netinet/ip_fil.c
sys/contrib/ipfilter/netinet/ip_fil.h
sys/contrib/ipfilter/netinet/mlfk_ipl.c
sys/dev/acpica5/acpi.c
sys/dev/agp/agp.c
sys/dev/disk/ata/ata-all.c
sys/dev/disk/ata/ata-disk.c
sys/dev/disk/ata/ata-raid.c
sys/dev/disk/ata/atapi-cd.c
sys/dev/disk/ata/atapi-fd.c
sys/dev/disk/ata/atapi-tape.c
sys/dev/disk/ccd/ccd.c
sys/dev/disk/fd/fd.c
sys/dev/disk/isp/isp_freebsd.c
sys/dev/disk/mcd/mcd.c
sys/dev/disk/md/md.c
sys/dev/disk/scd/scd.c
sys/dev/disk/vn/vn.c
sys/dev/disk/wt/wt.c
sys/dev/drm/drm_drv.h
sys/dev/drm/drm_fops.h
sys/dev/drm/drm_os_freebsd.h
sys/dev/drm/drm_vm.h
sys/dev/misc/dcons/dcons_os.c
sys/dev/misc/gpib/gpib.c
sys/dev/misc/joy/joy.c
sys/dev/misc/kbd/kbd.c
sys/dev/misc/labpc/labpc.c
sys/dev/misc/lpt/lpt.c
sys/dev/misc/mse/mse.c
sys/dev/misc/nmdm/nmdm.c
sys/dev/misc/pcfclock/pcfclock.c
sys/dev/misc/ppi/ppi.c
sys/dev/misc/pps/pps.c
sys/dev/misc/psm/psm.c
sys/dev/misc/snp/snp.c
sys/dev/misc/spic/spic.c
sys/dev/misc/spigot/spigot.c
sys/dev/misc/syscons/schistory.c
sys/dev/misc/syscons/scmouse.c
sys/dev/misc/syscons/scterm-dumb.c
sys/dev/misc/syscons/scterm-sc.c
sys/dev/misc/syscons/scvesactl.c
sys/dev/misc/syscons/scvidctl.c
sys/dev/misc/syscons/syscons.c
sys/dev/misc/syscons/syscons.h
sys/dev/misc/syscons/sysmouse.c
sys/dev/misc/tw/tw.c
sys/dev/misc/xrpu/xrpu.c
sys/dev/netif/cx/cx.c
sys/dev/netif/cx/if_cx.c
sys/dev/raid/aac/aac.c
sys/dev/raid/aac/aac_disk.c
sys/dev/raid/amr/amr.c
sys/dev/raid/amr/amr_disk.c
sys/dev/raid/asr/asr.c
sys/dev/raid/ciss/ciss.c
sys/dev/raid/ida/ida_disk.c
sys/dev/raid/iir/iir_ctrl.c
sys/dev/raid/ips/ips.c
sys/dev/raid/ips/ips.h
sys/dev/raid/ips/ips_disk.c
sys/dev/raid/mlx/mlx.c
sys/dev/raid/mlx/mlx_disk.c
sys/dev/raid/mlx/mlxvar.h
sys/dev/raid/mly/mly.c
sys/dev/raid/pst/pst-raid.c
sys/dev/raid/twa/twa_freebsd.c
sys/dev/raid/twa/twa_includes.h
sys/dev/raid/twe/twe_freebsd.c
sys/dev/raid/vinum/vinum.c
sys/dev/raid/vinum/vinumext.h
sys/dev/raid/vinum/vinumio.c
sys/dev/raid/vinum/vinumioctl.c
sys/dev/raid/vinum/vinumrequest.c
sys/dev/raid/vinum/vinumvar.h
sys/dev/serial/cy/cy.c
sys/dev/serial/dgb/dgm.c
sys/dev/serial/digi/digi.c
sys/dev/serial/rc/rc.c
sys/dev/serial/rp/rp.c
sys/dev/serial/si/si.c
sys/dev/serial/sio/sio.c
sys/dev/serial/stl/stallion.c
sys/dev/serial/stli/istallion.c
sys/dev/sound/pcm/channel.c
sys/dev/sound/pcm/channel.h
sys/dev/sound/pcm/dsp.c
sys/dev/sound/pcm/mixer.c
sys/dev/sound/pcm/mixer.h
sys/dev/sound/pcm/sndstat.c
sys/dev/usbmisc/ucom/ucom.c
sys/dev/usbmisc/ufm/ufm.c
sys/dev/usbmisc/ugen/ugen.c
sys/dev/usbmisc/uhid/uhid.c
sys/dev/usbmisc/ulpt/ulpt.c
sys/dev/usbmisc/ums/ums.c
sys/dev/usbmisc/urio/urio.c
sys/dev/usbmisc/uscanner/uscanner.c
sys/dev/video/bktr/bktr_os.c
sys/dev/video/ctx/ctx.c
sys/dev/video/fb/fb.c
sys/dev/video/fb/fbreg.h
sys/dev/video/fb/vga.c
sys/dev/video/fb/vgareg.h
sys/dev/video/gsc/gsc.c
sys/dev/video/meteor/meteor.c
sys/i386/acpica5/acpi_machdep.c
sys/i386/apm/apm.c
sys/i386/i386/elan-mmcr.c
sys/i386/i386/mem.c
sys/i386/i386/perfmon.c
sys/i386/isa/asc.c
sys/kern/kern_conf.c
sys/kern/kern_descrip.c
sys/kern/kern_device.c
sys/kern/kern_memio.c
sys/kern/kern_nrandom.c
sys/kern/kern_physio.c
sys/kern/subr_disk.c
sys/kern/subr_diskslice.c
sys/kern/subr_log.c
sys/kern/subr_xxx.c [deleted file]
sys/kern/sys_generic.c
sys/kern/tty.c
sys/kern/tty_conf.c
sys/kern/tty_cons.c
sys/kern/tty_pty.c
sys/kern/tty_tty.c
sys/kern/vfs_sync.c
sys/kern/vfs_vopops.c
sys/net/bpf.c
sys/net/i4b/driver/i4b_ctl.c
sys/net/i4b/driver/i4b_rbch.c
sys/net/i4b/driver/i4b_tel.c
sys/net/i4b/driver/i4b_trace.c
sys/net/i4b/layer4/i4b_i4bdrv.c
sys/net/pf/pf_ioctl.c
sys/net/ppp/if_ppp.c
sys/net/ppp/if_pppvar.h
sys/net/ppp_layer/ppp_tty.c
sys/net/sl/if_sl.c
sys/net/tap/if_tap.c
sys/net/tun/if_tun.c
sys/netgraph/tty/ng_tty.c
sys/netproto/smb/smb_conn.c
sys/netproto/smb/smb_conn.h
sys/netproto/smb/smb_dev.c
sys/opencrypto/cryptodev.c
sys/platform/pc32/acpica5/acpi_machdep.c
sys/platform/pc32/apm/apm.c
sys/platform/pc32/i386/elan-mmcr.c
sys/platform/pc32/i386/mem.c
sys/platform/pc32/i386/perfmon.c
sys/platform/pc32/isa/asc.c
sys/sys/buf.h
sys/sys/conf.h
sys/sys/device.h
sys/sys/disk.h
sys/sys/random.h
sys/sys/systm.h
sys/sys/tty.h
sys/sys/vfsops.h
sys/vfs/coda/coda_fbsd.c
sys/vfs/coda/coda_psdev.c
sys/vfs/coda/coda_psdev.h
sys/vfs/coda/coda_vfsops.c
sys/vfs/fdesc/fdesc_vnops.c
sys/vfs/gnu/ext2fs/ext2_vfsops.c
sys/vfs/isofs/cd9660/cd9660_vfsops.c
sys/vfs/mfs/mfs_vfsops.c
sys/vfs/smbfs/smbfs_vfsops.c
sys/vfs/specfs/spec_vnops.c
sys/vfs/ufs/ffs_vfsops.c

index 44c18b9..e92c3b7 100644 (file)
@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/cam/cam_xpt.c,v 1.80.2.18 2002/12/09 17:31:55 gibbs Exp $
- * $DragonFly: src/sys/bus/cam/cam_xpt.c,v 1.28 2006/01/22 14:03:51 swildner Exp $
+ * $DragonFly: src/sys/bus/cam/cam_xpt.c,v 1.29 2006/07/28 02:17:31 dillon Exp $
  */
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -36,6 +36,7 @@
 #include <sys/kernel.h>
 #include <sys/time.h>
 #include <sys/conf.h>
+#include <sys/device.h>
 #include <sys/fcntl.h>
 #include <sys/md5.h>
 #include <sys/devicestat.h>
@@ -601,23 +602,11 @@ static d_open_t xptopen;
 static d_close_t xptclose;
 static d_ioctl_t xptioctl;
 
-static struct cdevsw xpt_cdevsw = {
-       /* name */      "xpt",
-       /* maj */       XPT_CDEV_MAJOR,
-       /* flags */     0,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      xptopen,
-       /* close */     xptclose,
-       /* read */      noread,
-       /* write */     nowrite,
-       /* ioctl */     xptioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  nostrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops xpt_ops = {
+       { "xpt", XPT_CDEV_MAJOR, 0 },
+       .d_open = xptopen,
+       .d_close = xptclose,
+       .d_ioctl = xptioctl
 };
 
 static struct intr_config_hook *xpt_config_hook;
@@ -877,8 +866,8 @@ dev_allocq_is_runnable(struct cam_devq *devq)
 static void
 xpt_periph_init(void)
 {
-       cdevsw_add(&xpt_cdevsw, 0, 0);
-       make_dev(&xpt_cdevsw, 0, UID_ROOT, GID_OPERATOR, 0600, "xpt0");
+       dev_ops_add(&xpt_ops, 0, 0);
+       make_dev(&xpt_ops, 0, UID_ROOT, GID_OPERATOR, 0600, "xpt0");
 }
 
 static void
@@ -895,8 +884,9 @@ xptdone(struct cam_periph *periph, union ccb *done_ccb)
 }
 
 static int
-xptopen(dev_t dev, int flags, int fmt, struct thread *td)
+xptopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int unit;
 
        unit = minor(dev) & 0xff;
@@ -904,13 +894,13 @@ xptopen(dev_t dev, int flags, int fmt, struct thread *td)
        /*
         * Only allow read-write access.
         */
-       if (((flags & FWRITE) == 0) || ((flags & FREAD) == 0))
+       if (((ap->a_oflags & FWRITE) == 0) || ((ap->a_oflags & FREAD) == 0))
                return(EPERM);
 
        /*
         * We don't allow nonblocking access.
         */
-       if ((flags & O_NONBLOCK) != 0) {
+       if ((ap->a_oflags & O_NONBLOCK) != 0) {
                printf("xpt%d: can't do nonblocking access\n", unit);
                return(ENODEV);
        }
@@ -932,8 +922,9 @@ xptopen(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int
-xptclose(dev_t dev, int flag, int fmt, struct thread *td)
+xptclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int unit;
 
        unit = minor(dev) & 0xff;
@@ -955,8 +946,9 @@ xptclose(dev_t dev, int flag, int fmt, struct thread *td)
 }
 
 static int
-xptioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
+xptioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int unit, error;
 
        error = 0;
@@ -972,7 +964,7 @@ xptioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
                return(ENXIO);
        }
 
-       switch(cmd) {
+       switch(ap->a_cmd) {
        /*
         * For the transport layer CAMIOCOMMAND ioctl, we really only want
         * to accept CCB types that don't quite make sense to send through a
@@ -982,7 +974,7 @@ xptioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
                union ccb *ccb;
                union ccb *inccb;
 
-               inccb = (union ccb *)addr;
+               inccb = (union ccb *)ap->a_data;
 
                switch(inccb->ccb_h.func_code) {
                case XPT_SCAN_BUS:
@@ -1139,7 +1131,7 @@ xptioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
                int base_periph_found;
                int splbreaknum;
 
-               ccb = (union ccb *)addr;
+               ccb = (union ccb *)ap->a_data;
                unit = ccb->cgdl.unit_number;
                name = ccb->cgdl.periph_name;
                /*
@@ -1152,7 +1144,7 @@ xptioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
                 */
                splbreaknum = 100;
 
-               ccb = (union ccb *)addr;
+               ccb = (union ccb *)ap->a_data;
 
                base_periph_found = 0;
 
index 0bb3f19..87c519a 100644 (file)
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/cam/scsi/scsi_cd.c,v 1.31.2.16 2003/10/21 22:26:11 thomas Exp $
- * $DragonFly: src/sys/bus/cam/scsi/scsi_cd.c,v 1.22 2006/04/30 17:22:15 dillon Exp $
+ * $DragonFly: src/sys/bus/cam/scsi/scsi_cd.c,v 1.23 2006/07/28 02:17:32 dillon Exp $
  */
 /*
  * Portions of this driver taken from the original FreeBSD cd driver.
@@ -298,23 +298,14 @@ DATA_SET(periphdriver_set, cddriver);
 #ifndef D_DISK
 #define D_DISK 0
 #endif
-static struct cdevsw cd_cdevsw = {
-       /* name */      "cd",
-       /* maj */       SCSICD_CDEV_MAJOR,
-       /* flags */     D_DISK,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      cdopen,
-       /* close */     cdclose,
-       /* read */      physread,
-       /* write */     physwrite,
-       /* ioctl */     cdioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  cdstrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize,
+static struct dev_ops cd_ops = {
+       { "cd", SCSICD_CDEV_MAJOR, D_DISK },
+       .d_open = cdopen,
+       .d_close = cdclose,
+       .d_read = physread,
+       .d_write = physwrite,
+       .d_ioctl = cdioctl,
+       .d_strategy = cdstrategy
 };
 
 static struct extend_array *cdperiphs;
@@ -777,7 +768,7 @@ cdregister(struct cam_periph *periph, void *arg)
                          DEVSTAT_TYPE_CDROM | DEVSTAT_TYPE_IF_SCSI,
                          DEVSTAT_PRIORITY_CD);
        disk_create(periph->unit_number, &softc->disk,
-                   DSO_ONESLICE | DSO_COMPATLABEL, &cd_cdevsw);
+                   DSO_ONESLICE | DSO_COMPATLABEL, &cd_ops);
 
        /*
         * Add an async callback so that we get
@@ -1005,8 +996,9 @@ cdregisterexit:
 }
 
 static int
-cdopen(dev_t dev, int flags, int fmt, struct thread *td)
+cdopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct cam_periph *periph;
        struct cd_softc *softc;
        int unit, error;
@@ -1060,8 +1052,9 @@ cdopen(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int
-cdclose(dev_t dev, int flag, int fmt, struct thread *td)
+cdclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct  cam_periph *periph;
        struct  cd_softc *softc;
        int     unit, error;
@@ -1432,9 +1425,11 @@ cdgetccb(struct cam_periph *periph, u_int32_t priority)
  * can understand.  The transfer is described by a buf and will include
  * only one physical transfer.
  */
-static void
-cdstrategy(dev_t dev, struct bio *bio)
+static int
+cdstrategy(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp = bio->bio_buf;
        struct cam_periph *periph;
        struct cd_softc *softc;
@@ -1499,7 +1494,7 @@ cdstrategy(dev_t dev, struct bio *bio)
        else
                cdschedule(periph, /* priority */ 1);
 
-       return;
+       return(0);
 bad:
        bp->b_flags |= B_ERROR;
        /*
@@ -1507,6 +1502,7 @@ bad:
         */
        bp->b_resid = bp->b_bcount;
        biodone(bio);
+       return(0);
 }
 
 static void
@@ -1927,9 +1923,10 @@ cdgetpagesize(int page_num)
 }
 
 static int
-cdioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
+cdioctl(struct dev_ioctl_args *ap)
 {
-
+       dev_t dev = ap->a_head.a_dev;
+       caddr_t addr = ap->a_data;
        struct  cam_periph *periph;
        struct  cd_softc *softc;
        int     error, unit;
@@ -1945,7 +1942,7 @@ cdioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
        softc = (struct cd_softc *)periph->softc;
 
        CAM_DEBUG(periph->path, CAM_DEBUG_TRACE, 
-                 ("trying to do ioctl %#lx\n", cmd));
+                 ("trying to do ioctl %#lx\n", ap->a_cmd));
 
        error = cam_periph_lock(periph, PCATCH);
 
@@ -1957,8 +1954,8 @@ cdioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
         * have media loaded, we can only do a load or eject.
         */
        if (((softc->flags & CD_FLAG_VALID_MEDIA) == 0)
-           && ((cmd != CDIOCCLOSE)
-           && (cmd != CDIOCEJECT))) {
+           && ((ap->a_cmd != CDIOCCLOSE)
+           && (ap->a_cmd != CDIOCEJECT))) {
                error = cdcheckmedia(periph);
                if (error != 0) {
                        cam_periph_unlock(periph);
@@ -1966,12 +1963,12 @@ cdioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
                }
        }
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
 
        case CDIOCPLAYTRACKS:
                {
                        struct ioc_play_track *args
-                           = (struct ioc_play_track *) addr;
+                           = (struct ioc_play_track *)addr;
                        struct cd_mode_params params;
                        union cd_pages *page;
 
@@ -2685,7 +2682,7 @@ cdioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
 
                authinfo = (struct dvd_authinfo *)addr;
 
-               if (cmd == DVDIOCREPORTKEY)
+               if (ap->a_cmd == DVDIOCREPORTKEY)
                        error = cdreportkey(periph, authinfo);
                else
                        error = cdsendkey(periph, authinfo);
@@ -2701,7 +2698,7 @@ cdioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
                break;
        }
        default:
-               error = cam_periph_ioctl(periph, cmd, addr, cderror);
+               error = cam_periph_ioctl(periph, ap->a_cmd, addr, cderror);
                break;
        }
 
index e72ad5e..523cadd 100644 (file)
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/cam/scsi/scsi_ch.c,v 1.20.2.2 2000/10/31 08:09:49 dwmalone Exp $
- * $DragonFly: src/sys/bus/cam/scsi/scsi_ch.c,v 1.13 2006/02/17 19:17:42 dillon Exp $
+ * $DragonFly: src/sys/bus/cam/scsi/scsi_ch.c,v 1.14 2006/07/28 02:17:32 dillon Exp $
  */
 /*
  * Derived from the NetBSD SCSI changer driver.
@@ -215,23 +215,11 @@ static struct periph_driver chdriver =
 
 DATA_SET(periphdriver_set, chdriver);
 
-static struct cdevsw ch_cdevsw = {
-       /* name */      "ch",
-       /* maj */       CH_CDEV_MAJOR,
-       /* flags */     0,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      chopen,
-       /* close */     chclose,
-       /* read */      noread,
-       /* write */     nowrite,
-       /* ioctl */     chioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  nostrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops ch_ops = {
+       { "ch", CH_CDEV_MAJOR, 0 },
+       .d_open = chopen,
+       .d_close = chclose,
+       .d_ioctl = chioctl
 };
 
 static struct extend_array *chperiphs;
@@ -314,7 +302,7 @@ chcleanup(struct cam_periph *periph)
        cam_extend_release(chperiphs, periph->unit_number);
        xpt_print_path(periph->path);
        printf("removing device entry\n");
-       cdevsw_remove(&ch_cdevsw, -1, periph->unit_number);
+       dev_ops_remove(&ch_ops, -1, periph->unit_number);
        free(softc, M_DEVBUF);
 }
 
@@ -395,8 +383,8 @@ chregister(struct cam_periph *periph, void *arg)
                          DEVSTAT_PRIORITY_OTHER);
 
        /* Register the device */
-       cdevsw_add(&ch_cdevsw, -1, periph->unit_number);
-       make_dev(&ch_cdevsw, periph->unit_number, UID_ROOT,
+       dev_ops_add(&ch_ops, -1, periph->unit_number);
+       make_dev(&ch_ops, periph->unit_number, UID_ROOT,
                  GID_OPERATOR, 0600, "%s%d", periph->periph_name,
                  periph->unit_number);
 
@@ -422,8 +410,9 @@ chregister(struct cam_periph *periph, void *arg)
 }
 
 static int
-chopen(dev_t dev, int flags, int fmt, struct thread *td)
+chopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct cam_periph *periph;
        struct ch_softc *softc;
        int unit, error;
@@ -471,8 +460,9 @@ chopen(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int
-chclose(dev_t dev, int flag, int fmt, struct thread *td)
+chclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct  cam_periph *periph;
        struct  ch_softc *softc;
        int     unit, error;
@@ -712,8 +702,11 @@ cherror(union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags)
 }
 
 static int
-chioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
+chioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       caddr_t addr = ap->a_data;
+       int flag = ap->a_fflag;
        struct cam_periph *periph;
        struct ch_softc *softc;
        u_int8_t unit;
@@ -732,13 +725,13 @@ chioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
        error = 0;
 
        CAM_DEBUG(periph->path, CAM_DEBUG_TRACE, 
-                 ("trying to do ioctl %#lx\n", cmd));
+                 ("trying to do ioctl %#lx\n", ap->a_cmd));
 
        /*
         * If this command can change the device's state, we must
         * have the device open for writing.
         */
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case CHIOGPICKER:
        case CHIOGPARAMS:
        case CHIOGSTATUS:
@@ -749,7 +742,7 @@ chioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
                        return (EBADF);
        }
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case CHIOMOVE:
                error = chmove(periph, (struct changer_move *)addr);
                break;
@@ -806,7 +799,7 @@ chioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
        /* Implement prevent/allow? */
 
        default:
-               error = cam_periph_ioctl(periph, cmd, addr, cherror);
+               error = cam_periph_ioctl(periph, ap->a_cmd, addr, cherror);
                break;
        }
 
index cef1523..7dff480 100644 (file)
@@ -26,7 +26,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/cam/scsi/scsi_da.c,v 1.42.2.46 2003/10/21 22:18:19 thomas Exp $
- * $DragonFly: src/sys/bus/cam/scsi/scsi_da.c,v 1.29 2006/04/30 17:22:15 dillon Exp $
+ * $DragonFly: src/sys/bus/cam/scsi/scsi_da.c,v 1.30 2006/07/28 02:17:32 dillon Exp $
  */
 
 #ifdef _KERNEL
@@ -498,31 +498,24 @@ DATA_SET(periphdriver_set, dadriver);
 #define D_DISK 0
 #endif
 
-static struct cdevsw da_cdevsw = {
-       /* name */      "da",
-       /* maj */       DA_CDEV_MAJOR,
-       /* flags */     D_DISK,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      daopen,
-       /* close */     daclose,
-       /* read */      physread,
-       /* write */     physwrite,
-       /* ioctl */     daioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  dastrategy,
-       /* dump */      dadump,
-       /* psize */     nopsize
+static struct dev_ops da_ops = {
+       { "da", DA_CDEV_MAJOR, D_DISK },
+       .d_open =       daopen,
+       .d_close =      daclose,
+       .d_read =       physread,
+       .d_write =      physwrite,
+       .d_ioctl =      daioctl,
+       .d_strategy =   dastrategy,
+       .d_dump =       dadump
 };
 
 static SLIST_HEAD(,da_softc) softc_list;
 static struct extend_array *daperiphs;
 
 static int
-daopen(dev_t dev, int flags, int fmt, struct thread *td)
+daopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct cam_periph *periph;
        struct da_softc *softc;
        struct disklabel *label;        
@@ -645,8 +638,9 @@ daopen(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int
-daclose(dev_t dev, int flag, int fmt, struct thread *td)
+daclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct  cam_periph *periph;
        struct  da_softc *softc;
        int     unit;
@@ -735,9 +729,11 @@ daclose(dev_t dev, int flag, int fmt, struct thread *td)
  * can understand.  The transfer is described by a buf and will include
  * only one physical transfer.
  */
-static void
-dastrategy(dev_t dev, struct bio *bio)
+static int
+dastrategy(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp = bio->bio_buf;
        struct cam_periph *periph;
        struct da_softc *softc;
@@ -787,7 +783,7 @@ dastrategy(dev_t dev, struct bio *bio)
         */
        xpt_schedule(periph, /* XXX priority */1);
 
-       return;
+       return(0);
 bad:
        bp->b_flags |= B_ERROR;
 
@@ -796,6 +792,7 @@ bad:
         */
        bp->b_resid = bp->b_bcount;
        biodone(bio);
+       return(0);
 }
 
 /* For 2.2-stable support */
@@ -804,8 +801,9 @@ bad:
 #endif
 
 static int
-daioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
+daioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct cam_periph *periph;
        struct da_softc *softc;
        int unit;
@@ -824,7 +822,7 @@ daioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
                return (error); /* error code from tsleep */
        }       
 
-       error = cam_periph_ioctl(periph, cmd, addr, daerror);
+       error = cam_periph_ioctl(periph, ap->a_cmd, ap->a_data, daerror);
 
        cam_periph_unlock(periph);
        
@@ -832,8 +830,9 @@ daioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
 }
 
 static int
-dadump(dev_t dev, u_int num, u_int blknum, u_int secsize) 
+dadump(struct dev_dump_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct      cam_periph *periph;
        struct      da_softc *softc;
        u_int       unit;
@@ -858,13 +857,13 @@ dadump(dev_t dev, u_int num, u_int blknum, u_int secsize)
                return (ENXIO);
 
        addr = 0;       /* starting address */
-       blkcnt = howmany(PAGE_SIZE, secsize);
+       blkcnt = howmany(PAGE_SIZE, ap->a_secsize);
 
-       while (num > 0) {
+       while (ap->a_count > 0) {
                caddr_t va = NULL;
 
-               if ((num / blkcnt) < dumppages)
-                       dumppages = num / blkcnt;
+               if ((ap->a_count / blkcnt) < dumppages)
+                       dumppages = ap->a_count / blkcnt;
 
                for (i = 0; i < dumppages; ++i) {
                        vm_paddr_t a = addr + (i * PAGE_SIZE);
@@ -883,10 +882,10 @@ dadump(dev_t dev, u_int num, u_int blknum, u_int secsize)
                                /*read*/FALSE,
                                /*byte2*/0,
                                /*minimum_cmd_size*/ softc->minimum_cmd_size,
-                               blknum,
+                               ap->a_blkno,
                                blkcnt * dumppages,
                                /*data_ptr*/(u_int8_t *) va,
-                               /*dxfer_len*/blkcnt * secsize * dumppages,
+                               /*dxfer_len*/blkcnt * ap->a_secsize * dumppages,
                                /*sense_len*/SSD_FULL_SIZE,
                                DA_DEFAULT_TIMEOUT * 1000);             
                xpt_polled_action((union ccb *)&csio);
@@ -902,12 +901,12 @@ dadump(dev_t dev, u_int num, u_int blknum, u_int secsize)
                        return(EIO);
                }
                
-               if (dumpstatus(addr, (off_t)num * softc->params.secsize) < 0)
+               if (dumpstatus(addr, (off_t)ap->a_count * softc->params.secsize) < 0)
                        return (EINTR);
 
                /* update block count */
-               num -= blkcnt * dumppages;
-               blknum += blkcnt * dumppages;
+               ap->a_count -= blkcnt * dumppages;
+               ap->a_blkno += blkcnt * dumppages;
                addr += PAGE_SIZE * dumppages;
        }
 
@@ -1318,7 +1317,7 @@ daregister(struct cam_periph *periph, void *arg)
        /*
         * Register this media as a disk
         */
-       disk_create(periph->unit_number, &softc->disk, 0, &da_cdevsw);
+       disk_create(periph->unit_number, &softc->disk, 0, &da_ops);
 
        /*
         * Add async callbacks for bus reset and
index 6a48512..aab8af0 100644 (file)
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/cam/scsi/scsi_pass.c,v 1.19 2000/01/17 06:27:37 mjacob Exp $
- * $DragonFly: src/sys/bus/cam/scsi/scsi_pass.c,v 1.15 2006/03/24 18:35:27 dillon Exp $
+ * $DragonFly: src/sys/bus/cam/scsi/scsi_pass.c,v 1.16 2006/07/28 02:17:32 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -113,23 +113,14 @@ static struct periph_driver passdriver =
 
 DATA_SET(periphdriver_set, passdriver);
 
-static struct cdevsw pass_cdevsw = {
-       /* name */      "pass",
-       /* maj */       PASS_CDEV_MAJOR,
-       /* flags */     0,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      passopen,
-       /* close */     passclose,
-       /* read */      physread,
-       /* write */     physwrite,
-       /* ioctl */     passioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  passstrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops pass_ops = {
+       { "pass", PASS_CDEV_MAJOR, 0 },
+       .d_open =       passopen,
+       .d_close =      passclose,
+       .d_read =       physread,
+       .d_write =      physwrite,
+       .d_ioctl =      passioctl,
+       .d_strategy =   passstrategy,
 };
 
 static struct extend_array *passperiphs;
@@ -242,7 +233,7 @@ passcleanup(struct cam_periph *periph)
                xpt_print_path(periph->path);
                printf("removing device entry\n");
        }
-       cdevsw_remove(&pass_cdevsw, -1, periph->unit_number);
+       dev_ops_remove(&pass_ops, -1, periph->unit_number);
        free(softc, M_DEVBUF);
 }
 
@@ -324,8 +315,8 @@ passregister(struct cam_periph *periph, void *arg)
                          DEVSTAT_PRIORITY_PASS);
 
        /* Register the device */
-       cdevsw_add(&pass_cdevsw, -1, periph->unit_number);
-       make_dev(&pass_cdevsw, periph->unit_number, UID_ROOT,
+       dev_ops_add(&pass_ops, -1, periph->unit_number);
+       make_dev(&pass_ops, periph->unit_number, UID_ROOT,
                  GID_OPERATOR, 0600, "%s%d", periph->periph_name,
                  periph->unit_number);
 
@@ -347,8 +338,9 @@ passregister(struct cam_periph *periph, void *arg)
 }
 
 static int
-passopen(dev_t dev, int flags, int fmt, struct thread *td)
+passopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct cam_periph *periph;
        struct pass_softc *softc;
        int unit, error;
@@ -383,7 +375,7 @@ passopen(dev_t dev, int flags, int fmt, struct thread *td)
        /*
         * Only allow read-write access.
         */
-       if (((flags & FWRITE) == 0) || ((flags & FREAD) == 0)) {
+       if (((ap->a_oflags & FWRITE) == 0) || ((ap->a_oflags & FREAD) == 0)) {
                crit_exit();
                return(EPERM);
        }
@@ -391,7 +383,7 @@ passopen(dev_t dev, int flags, int fmt, struct thread *td)
        /*
         * We don't allow nonblocking access.
         */
-       if ((flags & O_NONBLOCK) != 0) {
+       if ((ap->a_oflags & O_NONBLOCK) != 0) {
                xpt_print_path(periph->path);
                printf("can't do nonblocking accesss\n");
                crit_exit();
@@ -417,8 +409,9 @@ passopen(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int
-passclose(dev_t dev, int flag, int fmt, struct thread *td)
+passclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct  cam_periph *periph;
        struct  pass_softc *softc;
        int     unit, error;
@@ -449,9 +442,11 @@ passclose(dev_t dev, int flag, int fmt, struct thread *td)
  * can understand.  The transfer is described by a buf and will include
  * only one physical transfer.
  */
-static void
-passstrategy(dev_t dev, struct bio *bio)
+static int
+passstrategy(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp = bio->bio_buf;
        struct cam_periph *periph;
        struct pass_softc *softc;
@@ -499,7 +494,7 @@ passstrategy(dev_t dev, struct bio *bio)
         */
        xpt_schedule(periph, /* XXX priority */1);
 
-       return;
+       return(0);
 bad:
        bp->b_flags |= B_ERROR;
 
@@ -508,6 +503,7 @@ bad:
         */
        bp->b_resid = bp->b_bcount;
        biodone(bio);
+       return(0);
 }
 
 static void
@@ -633,8 +629,10 @@ passdone(struct cam_periph *periph, union ccb *done_ccb)
 }
 
 static int
-passioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
+passioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       caddr_t addr = ap->a_data;
        struct  cam_periph *periph;
        struct  pass_softc *softc;
        u_int8_t unit;
@@ -654,7 +652,7 @@ passioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
 
        error = 0;
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
 
        case CAMIOCOMMAND:
        {
@@ -713,7 +711,7 @@ passioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
                break;
        }
        default:
-               error = cam_periph_ioctl(periph, cmd, addr, passerror);
+               error = cam_periph_ioctl(periph, ap->a_cmd, addr, passerror);
                break;
        }
 
index 9a95126..2f18aec 100644 (file)
@@ -26,7 +26,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/cam/scsi/scsi_pt.c,v 1.17 2000/01/17 06:27:37 mjacob Exp $
- * $DragonFly: src/sys/bus/cam/scsi/scsi_pt.c,v 1.14 2006/04/30 17:22:15 dillon Exp $
+ * $DragonFly: src/sys/bus/cam/scsi/scsi_pt.c,v 1.15 2006/07/28 02:17:32 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -121,23 +121,14 @@ DATA_SET(periphdriver_set, ptdriver);
 
 #define PT_CDEV_MAJOR 61
 
-static struct cdevsw pt_cdevsw = {
-       /* name */      "pt",
-       /* maj */       PT_CDEV_MAJOR,
-       /* flags */     0,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      ptopen,
-       /* close */     ptclose,
-       /* read */      physread,
-       /* write */     physwrite,
-       /* ioctl */     ptioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  ptstrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops pt_ops = {
+       { "pt", PT_CDEV_MAJOR, 0 },
+       .d_open =       ptopen,
+       .d_close =      ptclose,
+       .d_read =       physread,
+       .d_write =      physwrite,
+       .d_ioctl =      ptioctl,
+       .d_strategy =   ptstrategy,
 };
 
 static struct extend_array *ptperiphs;
@@ -147,8 +138,9 @@ static struct extend_array *ptperiphs;
 #endif
 
 static int
-ptopen(dev_t dev, int flags, int fmt, struct thread *td)
+ptopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct cam_periph *periph;
        struct pt_softc *softc;
        int unit;
@@ -190,8 +182,9 @@ ptopen(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int
-ptclose(dev_t dev, int flag, int fmt, struct thread *td)
+ptclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct  cam_periph *periph;
        struct  pt_softc *softc;
        int     unit;
@@ -218,9 +211,11 @@ ptclose(dev_t dev, int flag, int fmt, struct thread *td)
  * can understand.  The transfer is described by a buf and will include
  * only one physical transfer.
  */
-static void
-ptstrategy(dev_t dev, struct bio *bio)
+static int
+ptstrategy(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp = bio->bio_buf;
        struct cam_periph *periph;
        struct pt_softc *softc;
@@ -262,7 +257,7 @@ ptstrategy(dev_t dev, struct bio *bio)
         */
        xpt_schedule(periph, /* XXX priority */1);
 
-       return;
+       return(0);
 bad:
        bp->b_flags |= B_ERROR;
 
@@ -271,6 +266,7 @@ bad:
         */
        bp->b_resid = bp->b_bcount;
        biodone(bio);
+       return(0);
 }
 
 static void
@@ -349,8 +345,8 @@ ptctor(struct cam_periph *periph, void *arg)
                          SID_TYPE(&cgd->inq_data) | DEVSTAT_TYPE_IF_SCSI,
                          DEVSTAT_PRIORITY_OTHER);
 
-       cdevsw_add(&pt_cdevsw, -1, periph->unit_number);
-       make_dev(&pt_cdevsw, periph->unit_number, UID_ROOT,
+       dev_ops_add(&pt_ops, -1, periph->unit_number);
+       make_dev(&pt_ops, periph->unit_number, UID_ROOT,
                  GID_OPERATOR, 0600, "%s%d", periph->periph_name,
                  periph->unit_number);
        /*
@@ -435,7 +431,7 @@ ptdtor(struct cam_periph *periph)
        cam_extend_release(ptperiphs, periph->unit_number);
        xpt_print_path(periph->path);
        printf("removing device entry\n");
-       cdevsw_remove(&pt_cdevsw, -1, periph->unit_number);
+       dev_ops_remove(&pt_ops, -1, periph->unit_number);
        free(softc, M_DEVBUF);
 }
 
@@ -686,8 +682,10 @@ pterror(union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags)
 }
 
 static int
-ptioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
+ptioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       caddr_t addr = ap->a_data;
        struct cam_periph *periph;
        struct pt_softc *softc;
        int unit;
@@ -705,7 +703,7 @@ ptioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
                return (error); /* error code from tsleep */
        }       
 
-       switch(cmd) {
+       switch(ap->a_cmd) {
        case PTIOCGETTIMEOUT:
                if (softc->io_timeout >= 1000)
                        *(int *)addr = softc->io_timeout / 1000;
@@ -726,7 +724,7 @@ ptioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
                break;
        }
        default:
-               error = cam_periph_ioctl(periph, cmd, addr, pterror);
+               error = cam_periph_ioctl(periph, ap->a_cmd, addr, pterror);
                break;
        }
 
index bc20769..fc81631 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * $FreeBSD: src/sys/cam/scsi/scsi_sa.c,v 1.45.2.13 2002/12/17 17:08:50 trhodes Exp $
- * $DragonFly: src/sys/bus/cam/scsi/scsi_sa.c,v 1.17 2006/04/30 17:22:15 dillon Exp $
+ * $DragonFly: src/sys/bus/cam/scsi/scsi_sa.c,v 1.18 2006/07/28 02:17:32 dillon Exp $
  *
  * Implementation of SCSI Sequential Access Peripheral driver for CAM.
  *
@@ -425,30 +425,22 @@ DATA_SET(periphdriver_set, sadriver);
 
 #define SA_CDEV_MAJOR 14
 
-static struct cdevsw sa_cdevsw = {
-       /* name */      "sa",
-       /* maj */       SA_CDEV_MAJOR,
-       /* flags */     D_TAPE,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      saopen,
-       /* close */     saclose,
-       /* read */      physread,
-       /* write */     physwrite,
-       /* ioctl */     saioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  sastrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops sa_ops = {
+       { "sa", SA_CDEV_MAJOR, D_TAPE },
+       .d_open =       saopen,
+       .d_close =      saclose,
+       .d_read =       physread,
+       .d_write =      physwrite,
+       .d_ioctl =      saioctl,
+       .d_strategy =   sastrategy,
 };
 
 static struct extend_array *saperiphs;
 
 static int
-saopen(dev_t dev, int flags, int fmt, struct thread *td)
+saopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct cam_periph *periph;
        struct sa_softc *softc;
        int unit;
@@ -496,7 +488,7 @@ saopen(dev_t dev, int flags, int fmt, struct thread *td)
                 * The function samount ensures media is loaded and ready.
                 * It also does a device RESERVE if the tape isn't yet mounted.
                 */
-               error = samount(periph, flags, dev);
+               error = samount(periph, ap->a_oflags, dev);
        }
 
        if (error) {
@@ -510,8 +502,9 @@ saopen(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int
-saclose(dev_t dev, int flag, int fmt, struct thread *td)
+saclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct  cam_periph *periph;
        struct  sa_softc *softc;
        int     unit, mode, error, writing, tmp;
@@ -660,9 +653,11 @@ saclose(dev_t dev, int flag, int fmt, struct thread *td)
  * can understand.  The transfer is described by a buf and will include
  * only one physical transfer.
  */
-static void
-sastrategy(dev_t dev, struct bio *bio)
+static int
+sastrategy(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp = bio->bio_buf;
        struct cam_periph *periph;
        struct sa_softc *softc;
@@ -760,7 +755,7 @@ sastrategy(dev_t dev, struct bio *bio)
         */
        xpt_schedule(periph, 1);
 
-       return;
+       return(0);
 bad:
        bp->b_flags |= B_ERROR;
 done:
@@ -770,11 +765,14 @@ done:
         */
        bp->b_resid = bp->b_bcount;
        biodone(bio);
+       return(0);
 }
 
 static int
-saioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
+saioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       caddr_t addr = ap->a_data;
        struct cam_periph *periph;
        struct sa_softc *softc;
        scsi_space_code spaceop;
@@ -805,7 +803,7 @@ saioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
         */
 
        if (SA_IS_CTRL(dev)) {
-               switch (cmd) {
+               switch (ap->a_cmd) {
                case MTIOCGETEOTMODEL:
                case MTIOCGET:
                        break;
@@ -858,10 +856,10 @@ saioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
        /*
         * Find the device that the user is talking about
         */
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case MTIOCGET:
        {
-               struct mtget *g = (struct mtget *)arg;
+               struct mtget *g = (struct mtget *)addr;
 
                /*
                 * If this isn't the control mode device, actually go out
@@ -947,7 +945,7 @@ saioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
        case MTIOCERRSTAT:
        {
                struct scsi_tape_errors *sep =
-                   &((union mterrstat *)arg)->scsi_errstat;
+                   &((union mterrstat *)addr)->scsi_errstat;
 
                CAM_DEBUG(periph->path, CAM_DEBUG_TRACE,
                    ("saioctl: MTIOCERRSTAT\n"));
@@ -975,7 +973,7 @@ saioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
                struct mtop *mt;
                int    count;
 
-               mt = (struct mtop *)arg;
+               mt = (struct mtop *)addr;
 
                CAM_DEBUG(periph->path, CAM_DEBUG_TRACE,
                         ("saioctl: op=0x%x count=0x%x\n",
@@ -1195,16 +1193,16 @@ saioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
                error = 0;
                break;
        case MTIOCRDSPOS:
-               error = sardpos(periph, 0, (u_int32_t *) arg);
+               error = sardpos(periph, 0, (u_int32_t *) addr);
                break;
        case MTIOCRDHPOS:
-               error = sardpos(periph, 1, (u_int32_t *) arg);
+               error = sardpos(periph, 1, (u_int32_t *) addr);
                break;
        case MTIOCSLOCATE:
-               error = sasetpos(periph, 0, (u_int32_t *) arg);
+               error = sasetpos(periph, 0, (u_int32_t *) addr);
                break;
        case MTIOCHLOCATE:
-               error = sasetpos(periph, 1, (u_int32_t *) arg);
+               error = sasetpos(periph, 1, (u_int32_t *) addr);
                break;
        case MTIOCGETEOTMODEL:
                error = 0;
@@ -1212,11 +1210,11 @@ saioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
                        mode = 1;
                else
                        mode = 2;
-               *((u_int32_t *) arg) = mode;
+               *((u_int32_t *) addr) = mode;
                break;
        case MTIOCSETEOTMODEL:
                error = 0;
-               switch (*((u_int32_t *) arg)) {
+               switch (*((u_int32_t *) addr)) {
                case 1:
                        softc->quirks &= ~SA_QUIRK_2FM;
                        softc->quirks |= SA_QUIRK_1FM;
@@ -1231,7 +1229,7 @@ saioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
                }
                break;
        default:
-               error = cam_periph_ioctl(periph, cmd, arg, saerror);
+               error = cam_periph_ioctl(periph, ap->a_cmd, addr, saerror);
                break;
        }
 
@@ -1239,7 +1237,7 @@ saioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
         * Check to see if we cleared a frozen state
         */
        if (error == 0 && (softc->flags & SA_FLAG_TAPE_FROZEN)) {
-               switch(cmd) {
+               switch(ap->a_cmd) {
                case MTIOCRDSPOS:
                case MTIOCRDHPOS:
                case MTIOCSLOCATE:
@@ -1365,7 +1363,7 @@ sacleanup(struct cam_periph *periph)
        cam_extend_release(saperiphs, periph->unit_number);
        xpt_print_path(periph->path);
        printf("removing device entry\n");
-       cdevsw_remove(&sa_cdevsw, SA_UNITMASK, SA_UNIT(periph->unit_number));
+       dev_ops_remove(&sa_ops, SA_UNITMASK, SA_UNIT(periph->unit_number));
        free(softc, M_DEVBUF);
 }
 
@@ -1470,37 +1468,37 @@ saregister(struct cam_periph *periph, void *arg)
            DEVSTAT_BS_UNAVAILABLE, SID_TYPE(&cgd->inq_data) |
            DEVSTAT_TYPE_IF_SCSI, DEVSTAT_PRIORITY_TAPE);
 
-       cdevsw_add(&sa_cdevsw, SA_UNITMASK, SA_UNIT(periph->unit_number));
-       make_dev(&sa_cdevsw, SAMINOR(SA_CTLDEV,
+       dev_ops_add(&sa_ops, SA_UNITMASK, SA_UNIT(periph->unit_number));
+       make_dev(&sa_ops, SAMINOR(SA_CTLDEV,
            periph->unit_number, 0, SA_ATYPE_R), UID_ROOT, GID_OPERATOR,
            0660, "r%s%d.ctl", periph->periph_name, periph->unit_number);
 
-       make_dev(&sa_cdevsw, SAMINOR(SA_NOT_CTLDEV,
+       make_dev(&sa_ops, SAMINOR(SA_NOT_CTLDEV,
            periph->unit_number, 0, SA_ATYPE_R), UID_ROOT, GID_OPERATOR,
            0660, "r%s%d", periph->periph_name, periph->unit_number);
 
-       make_dev(&sa_cdevsw, SAMINOR(SA_NOT_CTLDEV,
+       make_dev(&sa_ops, SAMINOR(SA_NOT_CTLDEV,
            periph->unit_number, 0, SA_ATYPE_NR), UID_ROOT, GID_OPERATOR,
            0660, "nr%s%d", periph->periph_name, periph->unit_number);
 
-       make_dev(&sa_cdevsw, SAMINOR(SA_NOT_CTLDEV,
+       make_dev(&sa_ops, SAMINOR(SA_NOT_CTLDEV,
            periph->unit_number, 0, SA_ATYPE_ER), UID_ROOT, GID_OPERATOR,
            0660, "er%s%d", periph->periph_name, periph->unit_number);
 
        for (i = 0; i < SA_NUM_MODES; i++) {
 
-               make_dev(&sa_cdevsw,
+               make_dev(&sa_ops,
                    SAMINOR(SA_NOT_CTLDEV, periph->unit_number, i, SA_ATYPE_R),
                    UID_ROOT, GID_OPERATOR, 0660, "r%s%d.%d",
                    periph->periph_name, periph->unit_number, i);
 
-               make_dev(&sa_cdevsw,
+               make_dev(&sa_ops,
                    SAMINOR(SA_NOT_CTLDEV, periph->unit_number, i, SA_ATYPE_NR),
                    UID_ROOT, GID_OPERATOR, 0660, "nr%s%d.%d",
                    periph->periph_name, periph->unit_number, i);
 
 
-               make_dev(&sa_cdevsw,
+               make_dev(&sa_ops,
                    SAMINOR(SA_NOT_CTLDEV, periph->unit_number, i, SA_ATYPE_ER),
                    UID_ROOT, GID_OPERATOR, 0660, "er%s%d.%d",
                    periph->periph_name, periph->unit_number, i);
index 7fa821a..652b6aa 100644 (file)
@@ -1,5 +1,5 @@
 /* $FreeBSD: src/sys/cam/scsi/scsi_ses.c,v 1.8.2.2 2000/08/08 23:19:21 mjacob Exp $ */
-/* $DragonFly: src/sys/bus/cam/scsi/scsi_ses.c,v 1.14 2006/02/17 19:17:42 dillon Exp $ */
+/* $DragonFly: src/sys/bus/cam/scsi/scsi_ses.c,v 1.15 2006/07/28 02:17:32 dillon Exp $ */
 /*
  * Copyright (c) 2000 Matthew Jacob
  * All rights reserved.
@@ -179,23 +179,11 @@ static struct periph_driver sesdriver = {
 
 DATA_SET(periphdriver_set, sesdriver);
 
-static struct cdevsw ses_cdevsw = {
-       /* name */      "ses",
-       /* maj */       SES_CDEV_MAJOR,
-       /* flags */     0,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      sesopen,
-       /* close */     sesclose,
-       /* read */      noread,
-       /* write */     nowrite,
-       /* ioctl */     sesioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  nostrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops ses_ops = {
+       { "ses", SES_CDEV_MAJOR, 0 }, 
+       .d_open =       sesopen,
+       .d_close =      sesclose,
+       .d_ioctl =      sesioctl,
 };
 static struct extend_array *sesperiphs;
 
@@ -274,7 +262,7 @@ sescleanup(struct cam_periph *periph)
        cam_extend_release(sesperiphs, periph->unit_number);
        xpt_print_path(periph->path);
        printf("removing device entry\n");
-       cdevsw_remove(&ses_cdevsw, -1, periph->unit_number);
+       dev_ops_remove(&ses_ops, -1, periph->unit_number);
        free(softc, M_DEVBUF);
 }
 
@@ -378,8 +366,8 @@ sesregister(struct cam_periph *periph, void *arg)
 
        cam_extend_set(sesperiphs, periph->unit_number, periph);
 
-       cdevsw_add(&ses_cdevsw, -1, periph->unit_number);
-       make_dev(&ses_cdevsw, periph->unit_number,
+       dev_ops_add(&ses_ops, -1, periph->unit_number);
+       make_dev(&ses_ops, periph->unit_number,
                    UID_ROOT, GID_OPERATOR, 0600, "%s%d",
                    periph->periph_name, periph->unit_number);
 
@@ -420,8 +408,9 @@ sesregister(struct cam_periph *periph, void *arg)
 }
 
 static int
-sesopen(dev_t dev, int flags, int fmt, struct thread *td)
+sesopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct cam_periph *periph;
        struct ses_softc *softc;
        int error;
@@ -476,8 +465,9 @@ out:
 }
 
 static int
-sesclose(dev_t dev, int flag, int fmt, struct thread *td)
+sesclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct cam_periph *periph;
        struct ses_softc *softc;
        int unit, error;
@@ -533,8 +523,9 @@ seserror(union ccb *ccb, u_int32_t cflags, u_int32_t sflags)
 }
 
 static int
-sesioctl(dev_t dev, u_long cmd, caddr_t arg_addr, int flag, struct thread *td)
+sesioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct cam_periph *periph;
        ses_encstat tmp;
        ses_objstat objs;
@@ -544,8 +535,8 @@ sesioctl(dev_t dev, u_long cmd, caddr_t arg_addr, int flag, struct thread *td)
        int error, i;
 
 
-       if (arg_addr)
-               addr = *((caddr_t *) arg_addr);
+       if (ap->a_data)
+               addr = *((caddr_t *)ap->a_data);
        else
                addr = NULL;
 
@@ -567,25 +558,25 @@ sesioctl(dev_t dev, u_long cmd, caddr_t arg_addr, int flag, struct thread *td)
        error = 0;
 
        CAM_DEBUG(periph->path, CAM_DEBUG_TRACE,
-           ("trying to do ioctl %#lx\n", cmd));
+           ("trying to do ioctl %#lx\n", ap->a_cmd));
 
        /*
         * If this command can change the device's state,
         * we must have the device open for writing.
         */
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case SESIOC_GETNOBJ:
        case SESIOC_GETOBJMAP:
        case SESIOC_GETENCSTAT:
        case SESIOC_GETOBJSTAT:
                break;
        default:
-               if ((flag & FWRITE) == 0) {
+               if ((ap->a_fflag & FWRITE) == 0) {
                        return (EBADF);
                }
        }
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case SESIOC_GETNOBJ:
                error = copyout(&ssc->ses_nobjects, addr,
                    sizeof (ssc->ses_nobjects));
@@ -660,7 +651,7 @@ sesioctl(dev_t dev, u_long cmd, caddr_t arg_addr, int flag, struct thread *td)
                break;
 
        default:
-               error = cam_periph_ioctl(periph, cmd, arg_addr, seserror);
+               error = cam_periph_ioctl(periph, ap->a_cmd, ap->a_data, seserror);
                break;
        }
        return (error);
index 63990ce..cf227da 100644 (file)
@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/cam/scsi/scsi_target.c,v 1.22.2.7 2003/02/18 22:07:10 njl Exp $
- * $DragonFly: src/sys/bus/cam/scsi/scsi_target.c,v 1.11 2005/06/02 20:40:31 dillon Exp $
+ * $DragonFly: src/sys/bus/cam/scsi/scsi_target.c,v 1.12 2006/07/28 02:17:32 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -286,7 +286,7 @@ targioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *p)
 
 /* Writes are always ready, reads wait for user_ccb_queue or abort_queue */
 static int
-targpoll(dev_t dev, int poll_events, struct proc *p)
+targpoll(struct dev_poll_args *ap)
 {
        struct targ_softc *softc;
        int     revents;
@@ -294,21 +294,21 @@ targpoll(dev_t dev, int poll_events, struct proc *p)
        softc = (struct targ_softc *)dev->si_drv1;
 
        /* Poll for write() is always ok. */
-       revents = poll_events & (POLLOUT | POLLWRNORM);
-       if ((poll_events & (POLLIN | POLLRDNORM)) != 0) {
+       revents = ap->a_events & (POLLOUT | POLLWRNORM);
+       if ((ap->a_events & (POLLIN | POLLRDNORM)) != 0) {
                crit_enter();
                /* Poll for read() depends on user and abort queues. */
                if (!TAILQ_EMPTY(&softc->user_ccb_queue) ||
                    !TAILQ_EMPTY(&softc->abort_queue)) {
-                       revents |= poll_events & (POLLIN | POLLRDNORM);
+                       revents |= ap->a_events & (POLLIN | POLLRDNORM);
                }
                /* Only sleep if the user didn't poll for write. */
                if (revents == 0)
                        selrecord(p, &softc->read_select);
                crit_exit();
        }
-
-       return (revents);
+       ap->a_events = revents;
+       return (0);
 }
 
 static int
index cf52474..4c16891 100644 (file)
  * POSSIBILITY OF SUCH DAMAGE.
  * 
  * $FreeBSD: src/sys/dev/firewire/firewirereg.h,v 1.33 2004/01/06 14:30:46 simokawa Exp $
- * $DragonFly: src/sys/bus/firewire/firewirereg.h,v 1.10 2006/06/10 20:00:12 dillon Exp $
+ * $DragonFly: src/sys/bus/firewire/firewirereg.h,v 1.11 2006/07/28 02:17:33 dillon Exp $
  *
  */
 
 #ifdef __DragonFly__
-typedef d_thread_t fw_proc;
+typedef        struct thread fw_proc;
 #elif __FreeBSD_version >= 500000
 typedef        struct thread fw_proc;
 #else
@@ -47,6 +47,8 @@ typedef       struct proc fw_proc;
 #include <sys/selinfo.h>
 #include <sys/uio.h>
 
+struct dev_ioctl_args;
+
 struct fw_device{
        u_int16_t dst;
        struct fw_eui64 eui;
@@ -153,7 +155,7 @@ struct firewire_comm{
        u_int32_t (*cyctimer) (struct  firewire_comm *);
        void (*ibr) (struct firewire_comm *);
        u_int32_t (*set_bmr) (struct firewire_comm *, u_int32_t);
-       int (*ioctl) (dev_t, u_long, caddr_t, int, fw_proc *);
+       int (*ioctl) (struct dev_ioctl_args *);
        int (*irx_enable) (struct firewire_comm *, int);
        int (*irx_disable) (struct firewire_comm *, int);
        int (*itx_enable) (struct firewire_comm *, int);
index 93290e3..c08e618 100644 (file)
@@ -32,7 +32,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  * 
  * $FreeBSD: src/sys/dev/firewire/fwdev.c,v 1.36 2004/01/22 14:41:17 simokawa Exp $
- * $DragonFly: src/sys/bus/firewire/fwdev.c,v 1.11 2006/02/17 19:17:44 dillon Exp $
+ * $DragonFly: src/sys/bus/firewire/fwdev.c,v 1.12 2006/07/28 02:17:33 dillon Exp $
  *
  */
 
@@ -84,13 +84,9 @@ static       d_write_t       fw_write;
 static d_mmap_t        fw_mmap;
 static d_strategy_t    fw_strategy;
 
-struct cdevsw firewire_cdevsw = 
+struct dev_ops firewire_ops = 
 {
-#ifdef __DragonFly__
-       "fw", CDEV_MAJOR, D_MEM, NULL, 0,
-       fw_open, fw_close, fw_read, fw_write, fw_ioctl,
-       fw_poll, fw_mmap, fw_strategy, nodump, nopsize,
-#elif __FreeBSD_version >= 500104
+       { "fw", CDEV_MAJOR, D_MEM },
        .d_open =       fw_open,
        .d_close =      fw_close,
        .d_read =       fw_read,
@@ -99,14 +95,6 @@ struct cdevsw firewire_cdevsw =
        .d_poll =       fw_poll,
        .d_mmap =       fw_mmap,
        .d_strategy =   fw_strategy,
-       .d_name =       "fw",
-       .d_maj =        CDEV_MAJOR,
-       .d_flags =      D_MEM
-#else
-       fw_open, fw_close, fw_read, fw_write, fw_ioctl,
-       fw_poll, fw_mmap, fw_strategy, "fw", CDEV_MAJOR,
-       nodump, nopsize, D_MEM, -1
-#endif
 };
 
 struct fw_drv1 {
@@ -180,12 +168,13 @@ fwdev_freebuf(struct fw_xferq *q)
 
 
 static int
-fw_open (dev_t dev, int flags, int fmt, fw_proc *td)
+fw_open (struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int err = 0;
 
        if (DEV_FWMEM(dev))
-               return fwmem_open(dev, flags, fmt, td);
+               return fwmem_open(ap);
 
        if (dev->si_drv1 != NULL)
                return (EBUSY);
@@ -195,7 +184,7 @@ fw_open (dev_t dev, int flags, int fmt, fw_proc *td)
                int unit = DEV2UNIT(dev);
                int sub = DEV2SUB(dev);
 
-               make_dev(&firewire_cdevsw, minor(dev),
+               make_dev(&firewire_ops, minor(dev),
                        UID_ROOT, GID_OPERATOR, 0660,
                        "fw%d.%d", unit, sub);
        }
@@ -207,8 +196,9 @@ fw_open (dev_t dev, int flags, int fmt, fw_proc *td)
 }
 
 static int
-fw_close (dev_t dev, int flags, int fmt, fw_proc *td)
+fw_close (struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct firewire_softc *sc;
        struct firewire_comm *fc;
        struct fw_drv1 *d;
@@ -218,7 +208,7 @@ fw_close (dev_t dev, int flags, int fmt, fw_proc *td)
        int err = 0;
 
        if (DEV_FWMEM(dev))
-               return fwmem_close(dev, flags, fmt, td);
+               return fwmem_close(ap);
 
        sc = devclass_get_softc(firewire_devclass, unit);
        fc = sc->fc;
@@ -281,8 +271,10 @@ fw_close (dev_t dev, int flags, int fmt, fw_proc *td)
  * read request.
  */
 static int
-fw_read (dev_t dev, struct uio *uio, int ioflag)
+fw_read (struct dev_read_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct uio *uio = ap->a_uio;
        struct firewire_softc *sc;
        struct fw_xferq *ir;
        struct fw_xfer *xfer;
@@ -291,7 +283,7 @@ fw_read (dev_t dev, struct uio *uio, int ioflag)
        struct fw_pkt *fp;
 
        if (DEV_FWMEM(dev))
-               return physio(dev, uio, ioflag);
+               return physread(ap);
 
        sc = devclass_get_softc(firewire_devclass, unit);
 
@@ -367,8 +359,10 @@ readloop:
 }
 
 static int
-fw_write (dev_t dev, struct uio *uio, int ioflag)
+fw_write (struct dev_write_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct uio *uio = ap->a_uio;
        int err = 0;
        struct firewire_softc *sc;
        int unit = DEV2UNIT(dev);
@@ -378,7 +372,7 @@ fw_write (dev_t dev, struct uio *uio, int ioflag)
        struct fw_xferq *it;
 
        if (DEV_FWMEM(dev))
-               return physio(dev, uio, ioflag);
+               return physwrite(ap);
 
        sc = devclass_get_softc(firewire_devclass, unit);
        fc = sc->fc;
@@ -430,8 +424,9 @@ isoloop:
  * ioctl support.
  */
 int
-fw_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, fw_proc *td)
+fw_ioctl (struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct firewire_softc *sc;
        struct firewire_comm *fc;
        struct fw_drv1 *d;
@@ -445,17 +440,17 @@ fw_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, fw_proc *td)
        struct fw_devinfo *devinfo;
        void *ptr;
 
-       struct fw_devlstreq *fwdevlst = (struct fw_devlstreq *)data;
-       struct fw_asyreq *asyreq = (struct fw_asyreq *)data;
-       struct fw_isochreq *ichreq = (struct fw_isochreq *)data;
-       struct fw_isobufreq *ibufreq = (struct fw_isobufreq *)data;
-       struct fw_asybindreq *bindreq = (struct fw_asybindreq *)data;
-       struct fw_crom_buf *crom_buf = (struct fw_crom_buf *)data;
+       struct fw_devlstreq *fwdevlst = (struct fw_devlstreq *)ap->a_data;
+       struct fw_asyreq *asyreq = (struct fw_asyreq *)ap->a_data;
+       struct fw_isochreq *ichreq = (struct fw_isochreq *)ap->a_data;
+       struct fw_isobufreq *ibufreq = (struct fw_isobufreq *)ap->a_data;
+       struct fw_asybindreq *bindreq = (struct fw_asybindreq *)ap->a_data;
+       struct fw_crom_buf *crom_buf = (struct fw_crom_buf *)ap->a_data;
 
        if (DEV_FWMEM(dev))
-               return fwmem_ioctl(dev, cmd, data, flag, td);
+               return fwmem_ioctl(ap);
 
-       if (!data)
+       if (!ap->a_data)
                return(EINVAL);
 
        sc = devclass_get_softc(firewire_devclass, unit);
@@ -464,7 +459,7 @@ fw_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, fw_proc *td)
        ir = d->ir;
        it = d->it;
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case FW_STSTREAM:
                if (it == NULL) {
                        for (i = 0; i < fc->nisodma; i ++) {
@@ -676,7 +671,7 @@ out:
                fwdevlst->info_len = len;
                break;
        case FW_GTPMAP:
-               bcopy(sc->fc->topology_map, data,
+               bcopy(sc->fc->topology_map, ap->a_data,
                                (sc->fc->topology_map->crc_len + 1) * 4);
                break;
        case FW_GCROM:
@@ -712,14 +707,15 @@ out:
                        free(ptr, M_FW);
                break;
        default:
-               sc->fc->ioctl (dev, cmd, data, flag, td);
+               sc->fc->ioctl(ap);
                break;
        }
        return err;
 }
 int
-fw_poll(dev_t dev, int events, fw_proc *td)
+fw_poll(struct dev_poll_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct firewire_softc *sc;
        struct fw_xferq *ir;
        int revents;
@@ -727,62 +723,57 @@ fw_poll(dev_t dev, int events, fw_proc *td)
        int unit = DEV2UNIT(dev);
 
        if (DEV_FWMEM(dev))
-               return fwmem_poll(dev, events, td);
+               return fwmem_poll(ap);
 
        sc = devclass_get_softc(firewire_devclass, unit);
        ir = ((struct fw_drv1 *)dev->si_drv1)->ir;
        revents = 0;
        tmp = POLLIN | POLLRDNORM;
-       if (events & tmp) {
+       if (ap->a_events & tmp) {
                if (STAILQ_FIRST(&ir->q) != NULL)
                        revents |= tmp;
                else
-                       selrecord(td, &ir->rsel);
+                       selrecord(curthread, &ir->rsel);
        }
        tmp = POLLOUT | POLLWRNORM;
-       if (events & tmp) {
+       if (ap->a_events & tmp) {
                /* XXX should be fixed */       
                revents |= tmp;
        }
-
-       return revents;
+       ap->a_events = revents;
+       return(0);
 }
 
 static int
-#if defined(__DragonFly__) || __FreeBSD_version < 500102
-fw_mmap (dev_t dev, vm_offset_t offset, int nproto)
-#else
-fw_mmap (dev_t dev, vm_offset_t offset, vm_paddr_t *paddr, int nproto)
-#endif
+fw_mmap (struct dev_mmap_args *ap)
 {  
+       dev_t dev = ap->a_head.a_dev;
        struct firewire_softc *sc;
        int unit = DEV2UNIT(dev);
 
        if (DEV_FWMEM(dev))
-#if defined(__DragonFly__) || __FreeBSD_version < 500102
-               return fwmem_mmap(dev, offset, nproto);
-#else
-               return fwmem_mmap(dev, offset, paddr, nproto);
-#endif
-
+               return fwmem_mmap(ap);
        sc = devclass_get_softc(firewire_devclass, unit);
 
        return EINVAL;
 }
 
-static void
-fw_strategy(dev_t dev, struct bio *bio)
+static int
+fw_strategy(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp = bio->bio_buf;
 
        if (DEV_FWMEM(dev)) {
-               fwmem_strategy(dev, bio);
-               return;
+               fwmem_strategy(ap);
+               return(0);
        }
        bp->b_error = EOPNOTSUPP;
        bp->b_flags |= B_ERROR;
        bp->b_resid = bp->b_bcount;
        biodone(bio);
+       return(0);
 }
 
 int
@@ -791,7 +782,7 @@ fwdev_makedev(struct firewire_softc *sc)
        int unit;
 
        unit = device_get_unit(sc->fc->bdev);
-       cdevsw_add(&firewire_cdevsw, FW_UNITMASK, FW_UNIT(unit));
+       dev_ops_add(&firewire_ops, FW_UNITMASK, FW_UNIT(unit));
        return(0);
 }
 
@@ -801,7 +792,7 @@ fwdev_destroydev(struct firewire_softc *sc)
        int unit;
 
        unit = device_get_unit(sc->fc->bdev);
-       cdevsw_remove(&firewire_cdevsw, FW_UNITMASK, FW_UNIT(unit));
+       dev_ops_remove(&firewire_ops, FW_UNITMASK, FW_UNIT(unit));
        return(0);
 }
 
@@ -840,7 +831,7 @@ found:
        sc = devclass_get_softc(firewire_devclass, unit);
        if (sc == NULL)
                return;
-       *dev = make_dev(&firewire_cdevsw, MAKEMINOR(devflag[i], unit, sub),
+       *dev = make_dev(&firewire_ops, MAKEMINOR(devflag[i], unit, sub),
                       UID_ROOT, GID_OPERATOR, 0660,
                       "%s%d.%d", devnames[i], unit, sub);
        (*dev)->si_flags |= SI_CHEAPCLONE;
index 694cd7b..9bf06a5 100644 (file)
@@ -31,7 +31,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * 
- * $DragonFly: src/sys/bus/firewire/fwmem.c,v 1.9 2006/04/30 17:22:15 dillon Exp $
+ * $DragonFly: src/sys/bus/firewire/fwmem.c,v 1.10 2006/07/28 02:17:33 dillon Exp $
  */
 
 #ifndef __DragonFly__
@@ -276,12 +276,13 @@ fwmem_write_block(
 
 
 int
-fwmem_open (dev_t dev, int flags, int fmt, fw_proc *td)
+fwmem_open (struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct fwmem_softc *fms;
 
        if (dev->si_drv1 != NULL) {
-               if ((flags & FWRITE) != 0)
+               if ((ap->a_oflags & FWRITE) != 0)
                        return (EBUSY);
                fms = (struct fwmem_softc *)dev->si_drv1;
                fms->refcount ++;
@@ -302,8 +303,9 @@ fwmem_open (dev_t dev, int flags, int fmt, fw_proc *td)
 }
 
 int
-fwmem_close (dev_t dev, int flags, int fmt, fw_proc *td)
+fwmem_close (struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct fwmem_softc *fms;
 
        fms = (struct fwmem_softc *)dev->si_drv1;
@@ -339,9 +341,11 @@ fwmem_biodone(struct fw_xfer *xfer)
        biodone(bio);
 }
 
-void
-fwmem_strategy(dev_t dev, struct bio *bio)
+int
+fwmem_strategy(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp = bio->bio_buf;
        struct firewire_softc *sc;
        struct fwmem_softc *fms;
@@ -410,21 +414,23 @@ error:
                bp->b_resid = bp->b_bcount;
                biodone(bio);
        }
+       return(0);
 }
 
 int
-fwmem_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, fw_proc *td)
+fwmem_ioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct fwmem_softc *fms;
        int err = 0;
 
        fms = (struct fwmem_softc *)dev->si_drv1;
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case FW_SDEUI64:
-               bcopy(data, &fms->eui, sizeof(struct fw_eui64));
+               bcopy(ap->a_data, &fms->eui, sizeof(struct fw_eui64));
                break;
        case FW_GDEUI64:
-               bcopy(&fms->eui, data, sizeof(struct fw_eui64));
+               bcopy(&fms->eui, ap->a_data, sizeof(struct fw_eui64));
                break;
        default:
                err = EINVAL;
@@ -432,16 +438,12 @@ fwmem_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, fw_proc *td)
        return(err);
 }
 int
-fwmem_poll (dev_t dev, int events, fw_proc *td)
+fwmem_poll(struct dev_poll_args *ap)
 {  
        return EINVAL;
 }
 int
-#if defined(__DragonFly__) || __FreeBSD_version < 500102
-fwmem_mmap (dev_t dev, vm_offset_t offset, int nproto)
-#else
-fwmem_mmap (dev_t dev, vm_offset_t offset, vm_paddr_t *paddr, int nproto)
-#endif
+fwmem_mmap(struct dev_mmap_args *ap)
 {  
        return EINVAL;
 }
index c26d3ba..b7945da 100644 (file)
  * SUCH DAMAGE.
  * 
  * $FreeBSD: src/sys/dev/firewire/fwmem.h,v 1.6 2003/10/02 04:06:56 simokawa Exp $
- * $DragonFly: src/sys/bus/firewire/fwmem.h,v 1.3 2004/02/05 13:32:08 joerg Exp $
+ * $DragonFly: src/sys/bus/firewire/fwmem.h,v 1.4 2006/07/28 02:17:33 dillon Exp $
  */
 
+#ifndef _SYS_DEVICE_H_
+#include <sys/device.h>
+#endif
+
 struct fw_xfer *fwmem_read_quad(struct fw_device *, caddr_t, u_int8_t,
        u_int16_t, u_int32_t, void *, void (*)(struct fw_xfer *));
 struct fw_xfer *fwmem_write_quad(struct fw_device *, caddr_t, u_int8_t,
index ceef3ce..1cc61bd 100644 (file)
@@ -33,7 +33,7 @@
  * 
  * $FreeBSD: src/sys/dev/firewire/fwohci.c,v 1.72 2004/01/22 14:41:17 simokawa Exp $
  * $FreeBSD: src/sys/dev/firewire/fwohci.c,v 1.1.2.19 2003/05/01 06:24:37 simokawa Exp $
- * $DragonFly: src/sys/bus/firewire/fwohci.c,v 1.9 2005/06/02 20:40:33 dillon Exp $
+ * $DragonFly: src/sys/bus/firewire/fwohci.c,v 1.10 2006/07/28 02:17:33 dillon Exp $
  */
 
 #define ATRQ_CH 0
@@ -51,6 +51,7 @@
 #include <sys/bus.h>
 #include <sys/kernel.h>
 #include <sys/conf.h>
+#include <sys/device.h>
 #include <sys/endian.h>
 #include <sys/thread2.h>
 
@@ -347,14 +348,15 @@ again:
 }
 /* Device specific ioctl. */
 int
-fwohci_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, fw_proc *td)
+fwohci_ioctl (struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct firewire_softc *sc;
        struct fwohci_softc *fc;
        int unit = DEV2UNIT(dev);
        int err = 0;
-       struct fw_reg_req_t *reg  = (struct fw_reg_req_t *) data;
-       u_int32_t *dmach = (u_int32_t *) data;
+       struct fw_reg_req_t *reg  = (struct fw_reg_req_t *) ap->a_data;
+       u_int32_t *dmach = (u_int32_t *) ap->a_data;
 
        sc = devclass_get_softc(firewire_devclass, unit);
        if(sc == NULL){
@@ -362,10 +364,10 @@ fwohci_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, fw_proc *td)
        }
        fc = (struct fwohci_softc *)sc->fc;
 
-       if (!data)
+       if (!ap->a_data)
                return(EINVAL);
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case FWOHCI_WRREG:
 #define OHCI_MAX_REG 0x800
                if(reg->addr <= OHCI_MAX_REG){
index 1342e44..39e1f64 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/iicbus/iic.c,v 1.18 1999/11/18 05:43:32 peter Exp $
- * $DragonFly: src/sys/bus/iicbus/iic.c,v 1.8 2005/02/17 13:59:35 joerg Exp $
+ * $DragonFly: src/sys/bus/iicbus/iic.c,v 1.9 2006/07/28 02:17:34 dillon Exp $
  *
  */
 #include <sys/param.h>
@@ -93,23 +93,13 @@ static      d_read_t        iicread;
 static d_ioctl_t       iicioctl;
 
 #define CDEV_MAJOR 105
-static struct cdevsw iic_cdevsw = {
-       /* name */      "iic",
-       /* maj */       CDEV_MAJOR,
-       /* flags */     0,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      iicopen,
-       /* close */     iicclose,
-       /* read */      iicread,
-       /* write */     iicwrite,
-       /* ioctl */     iicioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  nostrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops iic_ops = {
+       { "iic", CDEV_MAJOR, 0 },
+       .d_open =       iicopen,
+       .d_close =      iicclose,
+       .d_read =       iicread,
+       .d_write =      iicwrite,
+       .d_ioctl =      iicioctl,
 };
 
 /*
@@ -133,16 +123,17 @@ iic_probe(device_t dev)
 static int
 iic_attach(device_t dev)
 {
-       cdevsw_add(&iic_cdevsw, -1, device_get_unit(dev));
-       make_dev(&iic_cdevsw, device_get_unit(dev),     /* XXX cleanup */
+       dev_ops_add(&iic_ops, -1, device_get_unit(dev));
+       make_dev(&iic_ops, device_get_unit(dev),        /* XXX cleanup */
                        UID_ROOT, GID_WHEEL,
                        0600, "iic%d", device_get_unit(dev));
        return (0);
 }
 
 static int
-iicopen (dev_t dev, int flags, int fmt, struct thread *td)
+iicopen (struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct iic_softc *sc = IIC_SOFTC(minor(dev));
 
        if (!sc)
@@ -157,8 +148,9 @@ iicopen (dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int
-iicclose(dev_t dev, int flags, int fmt, struct thread *td)
+iicclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct iic_softc *sc = IIC_SOFTC(minor(dev));
 
        if (!sc)
@@ -176,8 +168,10 @@ iicclose(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int
-iicwrite(dev_t dev, struct uio * uio, int ioflag)
+iicwrite(struct dev_write_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct uio *uio = ap->a_uio;
        device_t iicdev = IIC_DEVICE(minor(dev));
        struct iic_softc *sc = IIC_SOFTC(minor(dev));
        int sent, error, count;
@@ -203,8 +197,10 @@ iicwrite(dev_t dev, struct uio * uio, int ioflag)
 }
 
 static int
-iicread(dev_t dev, struct uio * uio, int ioflag)
+iicread(struct dev_read_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct uio *uio = ap->a_uio;
        device_t iicdev = IIC_DEVICE(minor(dev));
        struct iic_softc *sc = IIC_SOFTC(minor(dev));
        int len, error = 0;
@@ -235,23 +231,24 @@ iicread(dev_t dev, struct uio * uio, int ioflag)
 }
 
 static int
-iicioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct thread *td)
+iicioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        device_t iicdev = IIC_DEVICE(minor(dev));
        struct iic_softc *sc = IIC_SOFTC(minor(dev));
        device_t parent = device_get_parent(iicdev);
-       struct iiccmd *s = (struct iiccmd *)data;
+       struct iiccmd *s = (struct iiccmd *)ap->a_data;
        int error, count;
 
        if (!sc)
                return (EINVAL);
 
        if ((error = iicbus_request_bus(device_get_parent(iicdev), iicdev,
-                       (flags & O_NONBLOCK) ? IIC_DONTWAIT :
+                       (ap->a_fflag & O_NONBLOCK) ? IIC_DONTWAIT :
                                                (IIC_WAIT | IIC_INTR))))
                return (error);
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case I2CSTART:
                error = iicbus_start(parent, s->slave, 0);
                break;
index 09c34e5..6378cee 100644 (file)
@@ -24,7 +24,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/isa/vga_isa.c,v 1.17 2000/01/29 15:08:56 peter Exp $
- * $DragonFly: src/sys/bus/isa/vga_isa.c,v 1.9 2005/07/10 13:06:18 swildner Exp $
+ * $DragonFly: src/sys/bus/isa/vga_isa.c,v 1.10 2006/07/28 02:17:34 dillon Exp $
  */
 
 #include "opt_vga.h"
@@ -36,6 +36,7 @@
 #include <sys/kernel.h>
 #include <sys/malloc.h>
 #include <sys/conf.h>
+#include <sys/device.h>
 #include <sys/bus.h>
 #include <sys/fbio.h>
 
@@ -93,23 +94,14 @@ static d_write_t    isavga_write;
 static d_ioctl_t       isavga_ioctl;
 static d_mmap_t                isavga_mmap;
 
-static struct cdevsw isavga_cdevsw = {
-       /* name */      VGA_DRIVER_NAME,
-       /* maj */       -1,
-       /* flags */     0,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      isavga_open,
-       /* close */     isavga_close,
-       /* read */      isavga_read,
-       /* write */     isavga_write,
-       /* ioctl */     isavga_ioctl,
-       /* poll */      nopoll,
-       /* mmap */      isavga_mmap,
-       /* strategy */  nostrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops isavga_ops = {
+       { VGA_DRIVER_NAME, -1, 0 },
+       .d_open =       isavga_open,
+       .d_close =      isavga_close,
+       .d_read =       isavga_read,
+       .d_write =      isavga_write,
+       .d_ioctl =      isavga_ioctl,
+       .d_mmap =       isavga_mmap,
 };
 
 #endif /* FB_INSTALL_CDEV */
@@ -169,8 +161,8 @@ isavga_attach(device_t dev)
 
 #ifdef FB_INSTALL_CDEV
        /* attach a virtual frame buffer device */
-       cdevsw_add(&isavga_cdevsw, VGA_MKMINOR(-1), VGA_MKMINOR(unit));
-       sc->devt = make_dev(&isavga_cdevsw, VGA_MKMINOR(unit), 0, 0, 02660, "vga%x", VGA_MKMINOR(unit));
+       dev_ops_add(&isavga_ops, VGA_MKMINOR(-1), VGA_MKMINOR(unit));
+       sc->devt = make_dev(&isavga_ops, VGA_MKMINOR(unit), 0, 0, 02660, "vga%x", VGA_MKMINOR(unit));
        reference_dev(sc->devt);
        error = fb_attach(sc->devt, sc->adp);
        if (error)
@@ -243,39 +235,54 @@ isavga_resume(device_t dev)
 #ifdef FB_INSTALL_CDEV
 
 static int
-isavga_open(dev_t dev, int flag, int mode, struct thread *td)
+isavga_open(struct dev_open_args *ap)
 {
-       return vga_open(dev, VGA_SOFTC(VGA_UNIT(dev)), flag, mode, td);
+       dev_t dev = ap->a_head.a_dev;
+
+       return vga_open(dev, VGA_SOFTC(VGA_UNIT(dev)), ap->a_oflags,
+                       ap->a_devtype, ap->a_cred);
 }
 
 static int
-isavga_close(dev_t dev, int flag, int mode, struct thread *td)
+isavga_close(struct dev_close_args *ap)
 {
-       return vga_close(dev, VGA_SOFTC(VGA_UNIT(dev)), flag, mode, td);
+       dev_t dev = ap->a_head.a_dev;
+
+       return vga_close(dev, VGA_SOFTC(VGA_UNIT(dev)),
+                        ap->a_fflag, ap->a_devtype);
 }
 
 static int
-isavga_read(dev_t dev, struct uio *uio, int flag)
+isavga_read(struct dev_read_args *ap)
 {
-       return vga_read(dev, VGA_SOFTC(VGA_UNIT(dev)), uio, flag);
+       dev_t dev = ap->a_head.a_dev;
+
+       return vga_read(dev, VGA_SOFTC(VGA_UNIT(dev)), ap->a_uio, ap->a_ioflag);
 }
 
 static int
-isavga_write(dev_t dev, struct uio *uio, int flag)
+isavga_write(struct dev_write_args *ap)
 {
-       return vga_write(dev, VGA_SOFTC(VGA_UNIT(dev)), uio, flag);
+       dev_t dev = ap->a_head.a_dev;
+
+       return vga_write(dev, VGA_SOFTC(VGA_UNIT(dev)), ap->a_uio, ap->a_ioflag);
 }
 
 static int
-isavga_ioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
+isavga_ioctl(struct dev_ioctl_args *ap)
 {
-       return vga_ioctl(dev, VGA_SOFTC(VGA_UNIT(dev)), cmd, arg, flag, td);
+       dev_t dev = ap->a_head.a_dev;
+
+       return vga_ioctl(dev, VGA_SOFTC(VGA_UNIT(dev)), ap->a_cmd, ap->a_data, ap->a_fflag, ap->a_cred);
 }
 
 static int
-isavga_mmap(dev_t dev, vm_offset_t offset, int prot)
+isavga_mmap(struct dev_mmap_args *ap)
 {
-       return vga_mmap(dev, VGA_SOFTC(VGA_UNIT(dev)), offset, prot);
+       dev_t dev = ap->a_head.a_dev;
+
+       ap->a_result = vga_mmap(dev, VGA_SOFTC(VGA_UNIT(dev)), ap->a_offset, ap->a_nprot);
+       return(0);
 }
 
 #endif /* FB_INSTALL_CDEV */
index 6bf7ea3..de0f379 100644 (file)
@@ -24,7 +24,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/pci/pci.c,v 1.141.2.15 2002/04/30 17:48:18 tmm Exp $
- * $DragonFly: src/sys/bus/pci/pci.c,v 1.29 2005/11/04 08:57:22 dillon Exp $
+ * $DragonFly: src/sys/bus/pci/pci.c,v 1.30 2006/07/28 02:17:34 dillon Exp $
  *
  */
 
@@ -687,16 +687,16 @@ pci_disable_io_method(device_t dev, device_t child, int space)
  */
   
 static int
-pci_open(dev_t dev, int oflags, int devtype, struct thread *td)
+pci_open(struct dev_open_args *ap)
 {
-       if ((oflags & FWRITE) && securelevel > 0) {
+       if ((ap->a_oflags & FWRITE) && securelevel > 0) {
                return EPERM;
        }
        return 0;
 }
 
 static int
-pci_close(dev_t dev, int flag, int devtype, struct thread *td)
+pci_close(struct dev_close_args *ap)
 {
        return 0;
 }
@@ -815,18 +815,17 @@ pci_devlist_get_parent(pcicfgregs *cfg)
 }
 
 static int
-pci_ioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td)
+pci_ioctl(struct dev_ioctl_args *ap)
 {
        device_t pci, pcib;
        struct pci_io *io;
        const char *name;
        int error;
 
-       if (!(flag & FWRITE))
+       if (!(ap->a_fflag & FWRITE))
                return EPERM;
 
-
-       switch(cmd) {
+       switch(ap->a_cmd) {
        case PCIOCGETCONF:
                {
                struct pci_devinfo *dinfo;
@@ -837,7 +836,7 @@ pci_ioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td)
                size_t iolen;
                int ionum, i;
 
-               cio = (struct pci_conf_io *)data;
+               cio = (struct pci_conf_io *)ap->a_data;
 
                num_patterns = 0;
                dinfo = NULL;
@@ -1057,7 +1056,7 @@ pci_ioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td)
                break;
                }
        case PCIOCREAD:
-               io = (struct pci_io *)data;
+               io = (struct pci_io *)ap->a_data;
                switch(io->pi_width) {
                case 4:
                case 2:
@@ -1099,7 +1098,7 @@ pci_ioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td)
                break;
 
        case PCIOCWRITE:
-               io = (struct pci_io *)data;
+               io = (struct pci_io *)ap->a_data;
                switch(io->pi_width) {
                case 4:
                case 2:
@@ -1150,23 +1149,11 @@ pci_ioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td)
 
 #define        PCI_CDEV        78
 
-static struct cdevsw pcicdev = {
-       /* name */      "pci",
-       /* maj */       PCI_CDEV,
-       /* flags */     0,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      pci_open,
-       /* close */     pci_close,
-       /* read */      noread,
-       /* write */     nowrite,
-       /* ioctl */     pci_ioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  nostrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops pcic_ops = {
+       { "pci", PCI_CDEV, 0 },
+       .d_open =       pci_open,
+       .d_close =      pci_close,
+       .d_ioctl =      pci_ioctl,
 };
 
 #include "pci_if.h"
@@ -1462,8 +1449,8 @@ pci_attach(device_t dev)
        int busno;
        int lunit = device_get_unit(dev);
 
-       cdevsw_add(&pcicdev, -1, lunit);
-       make_dev(&pcicdev, lunit, UID_ROOT, GID_WHEEL, 0644, "pci%d", lunit);
+       dev_ops_add(&pcic_ops, -1, lunit);
+       make_dev(&pcic_ops, lunit, UID_ROOT, GID_WHEEL, 0644, "pci%d", lunit);
 
         /*
          * Since there can be multiple independantly numbered PCI
index 7308f4b..d0a9a5d 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/smbus/smb.c,v 1.20 1999/11/18 05:44:56 peter Exp $
- * $DragonFly: src/sys/bus/smbus/smb.c,v 1.7 2004/05/19 22:52:39 dillon Exp $
+ * $DragonFly: src/sys/bus/smbus/smb.c,v 1.8 2006/07/28 02:17:34 dillon Exp $
  *
  */
 #include <sys/param.h>
@@ -94,23 +94,13 @@ static      d_read_t        smbread;
 static d_ioctl_t       smbioctl;
 
 #define CDEV_MAJOR 106
-static struct cdevsw smb_cdevsw = {
-       /* name */      "smb",
-       /* maj */       CDEV_MAJOR,
-       /* flags */     0,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      smbopen,
-       /* close */     smbclose,
-       /* read */      smbread,
-       /* write */     smbwrite,
-       /* ioctl */     smbioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  nostrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops smb_ops = {
+       { "smb", CDEV_MAJOR, 0 },
+       .d_open =       smbopen,
+       .d_close =      smbclose,
+       .d_read =       smbread,
+       .d_write =      smbwrite,
+       .d_ioctl =      smbioctl,
 };
 
 /*
@@ -134,16 +124,17 @@ smb_probe(device_t dev)
 static int
 smb_attach(device_t dev)
 {
-       cdevsw_add(&smb_cdevsw, -1, device_get_unit(dev));
-       make_dev(&smb_cdevsw, device_get_unit(dev),     /* XXX cleanup */
+       dev_ops_add(&smb_ops, -1, device_get_unit(dev));
+       make_dev(&smb_ops, device_get_unit(dev),        /* XXX cleanup */
                        UID_ROOT, GID_WHEEL,
                        0600, "smb%d", device_get_unit(dev));
        return (0);
 }
 
 static int
-smbopen (dev_t dev, int flags, int fmt, struct thread *td)
+smbopen (struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct smb_softc *sc = IIC_SOFTC(minor(dev));
 
        if (!sc)
@@ -158,8 +149,9 @@ smbopen (dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int
-smbclose(dev_t dev, int flags, int fmt, struct thread *td)
+smbclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct smb_softc *sc = IIC_SOFTC(minor(dev));
 
        if (!sc)
@@ -174,40 +166,37 @@ smbclose(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int
-smbwrite(dev_t dev, struct uio * uio, int ioflag)
+smbwrite(struct dev_write_args *ap)
 {
-       /* not supported */
-
        return (EINVAL);
 }
 
 static int
-smbread(dev_t dev, struct uio * uio, int ioflag)
+smbread(struct dev_read_args *ap)
 {
-       /* not supported */
-
        return (EINVAL);
 }
 
 static int
-smbioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct thread *td)
+smbioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        device_t smbdev = IIC_DEVICE(minor(dev));
        struct smb_softc *sc = IIC_SOFTC(minor(dev));
        device_t parent = device_get_parent(smbdev);
 
        int error = 0;
-       struct smbcmd *s = (struct smbcmd *)data;
+       struct smbcmd *s = (struct smbcmd *)ap->a_data;
 
        if (!sc || !s)
                return (EINVAL);
 
        /* allocate the bus */
        if ((error = smbus_request_bus(parent, smbdev,
-                       (flags & O_NONBLOCK) ? SMB_DONTWAIT : (SMB_WAIT | SMB_INTR))))
+                       (ap->a_fflag & O_NONBLOCK) ? SMB_DONTWAIT : (SMB_WAIT | SMB_INTR))))
                return (error);
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case SMB_QUICK_WRITE:
                error = smbus_error(smbus_quick(parent, s->slave, SMB_QWRITE));
                break;
index 181ec06..aa9e119 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * $NetBSD: usb.c,v 1.68 2002/02/20 20:30:12 christos Exp $
  * $FreeBSD: src/sys/dev/usb/usb.c,v 1.95 2003/11/09 23:54:21 joe Exp $
- * $DragonFly: src/sys/bus/usb/usb.c,v 1.17 2006/06/13 08:11:56 dillon Exp $
+ * $DragonFly: src/sys/bus/usb/usb.c,v 1.18 2006/07/28 02:17:34 dillon Exp $
  */
 
 /* Also already merged from NetBSD:
@@ -73,6 +73,7 @@
 #include <sys/kthread.h>
 #include <sys/proc.h>
 #include <sys/conf.h>
+#include <sys/device.h>
 #include <sys/poll.h>
 #if defined(__FreeBSD__) && __FreeBSD_version >= 500014
 #include <sys/selinfo.h>
@@ -145,25 +146,15 @@ d_open_t  usbopen;
 d_close_t usbclose;
 d_read_t usbread;
 d_ioctl_t usbioctl;
-int usbpoll(dev_t, int, usb_proc_ptr);
-
-struct cdevsw usb_cdevsw = {
-       /* name */      "usb",
-       /* maj */       USB_CDEV_MAJOR,
-       /* flags */     0,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      usbopen,
-       /* close */     usbclose,
-       /* read */      usbread,
-       /* write */     nowrite,
-       /* ioctl */     usbioctl,
-       /* poll */      usbpoll,
-       /* mmap */      nommap,
-       /* strategy */  nostrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+d_poll_t usbpoll;
+
+struct dev_ops usb_ops = {
+       { "usb", USB_CDEV_MAJOR, 0 },
+       .d_open =       usbopen,
+       .d_close =      usbclose,
+       .d_read =       usbread,
+       .d_ioctl =      usbioctl,
+       .d_poll =       usbpoll,
 };
 #endif
 
@@ -320,13 +311,13 @@ USB_ATTACH(usb)
        /* XXX This is redundant now, but old usbd's will want it */
        if (!global_init_done) {
                /* The device spitting out events */
-               cdevsw_add(&usb_cdevsw, -1, USB_DEV_MINOR);
-               make_dev(&usb_cdevsw, USB_DEV_MINOR, UID_ROOT, GID_OPERATOR,
+               dev_ops_add(&usb_ops, -1, USB_DEV_MINOR);
+               make_dev(&usb_ops, USB_DEV_MINOR, UID_ROOT, GID_OPERATOR,
                        0660, "usb");
                global_init_done = 1;
        }
-       cdevsw_add(&usb_cdevsw, -1, device_get_unit(self));
-       make_dev(&usb_cdevsw, device_get_unit(self), UID_ROOT, GID_OPERATOR,
+       dev_ops_add(&usb_ops, -1, device_get_unit(self));
+       make_dev(&usb_ops, device_get_unit(self), UID_ROOT, GID_OPERATOR,
                0660, "usb%d", device_get_unit(self));
 #endif
 
@@ -473,8 +464,9 @@ usbctlprint(void *aux, const char *pnp)
 #endif /* defined(__NetBSD__) || defined(__OpenBSD__) */
 
 int
-usbopen(dev_t dev, int flag, int mode, usb_proc_ptr p)
+usbopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int unit = USBUNIT(dev);
        struct usb_softc *sc;
 
@@ -495,8 +487,10 @@ usbopen(dev_t dev, int flag, int mode, usb_proc_ptr p)
 }
 
 int
-usbread(dev_t dev, struct uio *uio, int flag)
+usbread(struct dev_read_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct uio *uio = ap->a_uio;
        struct usb_event ue;
        int unit = USBUNIT(dev);
        int error, n;
@@ -513,7 +507,7 @@ usbread(dev_t dev, struct uio *uio, int flag)
                n = usb_get_next_event(&ue);
                if (n != 0)
                        break;
-               if (flag & IO_NDELAY) {
+               if (ap->a_ioflag & IO_NDELAY) {
                        error = EWOULDBLOCK;
                        break;
                }
@@ -529,8 +523,9 @@ usbread(dev_t dev, struct uio *uio, int flag)
 }
 
 int
-usbclose(dev_t dev, int flag, int mode, usb_proc_ptr p)
+usbclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int unit = USBUNIT(dev);
 
        if (unit == USB_DEV_MINOR) {
@@ -542,17 +537,18 @@ usbclose(dev_t dev, int flag, int mode, usb_proc_ptr p)
 }
 
 int
-usbioctl(dev_t devt, u_long cmd, caddr_t data, int flag, usb_proc_ptr p)
+usbioctl(struct dev_ioctl_args *ap)
 {
+       dev_t devt = ap->a_head.a_dev;
        struct usb_softc *sc;
        int unit = USBUNIT(devt);
 
        if (unit == USB_DEV_MINOR) {
-               switch (cmd) {
+               switch (ap->a_cmd) {
                case FIOASYNC:
-                       if (*(int *)data)
+                       if (*(int *)ap->a_data)
 #if defined(__DragonFly__)
-                               usb_async_proc = p->td_proc;
+                               usb_async_proc = curproc;
 #elif __FreeBSD_version >= 500000
                                usb_async_proc = p->td_proc;
 #else
@@ -572,7 +568,7 @@ usbioctl(dev_t devt, u_long cmd, caddr_t data, int flag, usb_proc_ptr p)
        if (sc->sc_dying)
                return (EIO);
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
 #if defined(__FreeBSD__) || defined(__DragonFly__)
        /* This part should be deleted */
        case USB_DISCOVER:
@@ -580,7 +576,7 @@ usbioctl(dev_t devt, u_long cmd, caddr_t data, int flag, usb_proc_ptr p)
 #endif
        case USB_REQUEST:
        {
-               struct usb_ctl_request *ur = (void *)data;
+               struct usb_ctl_request *ur = (void *)ap->a_data;
                int len = UGETW(ur->ucr_request.wLength);
                struct iovec iov;
                struct uio uio;
@@ -606,7 +602,7 @@ usbioctl(dev_t devt, u_long cmd, caddr_t data, int flag, usb_proc_ptr p)
                        uio.uio_rw =
                                ur->ucr_request.bmRequestType & UT_READ ?
                                UIO_READ : UIO_WRITE;
-                       uio.uio_td = p;
+                       uio.uio_td = curthread;
                        ptr = malloc(len, M_TEMP, M_WAITOK);
                        if (uio.uio_rw == UIO_WRITE) {
                                error = uiomove(ptr, len, &uio);
@@ -636,7 +632,7 @@ usbioctl(dev_t devt, u_long cmd, caddr_t data, int flag, usb_proc_ptr p)
 
        case USB_DEVICEINFO:
        {
-               struct usb_device_info *di = (void *)data;
+               struct usb_device_info *di = (void *)ap->a_data;
                int addr = di->udi_addr;
                usbd_device_handle dev;
 
@@ -650,7 +646,7 @@ usbioctl(dev_t devt, u_long cmd, caddr_t data, int flag, usb_proc_ptr p)
        }
 
        case USB_DEVICESTATS:
-               *(struct usb_device_stats *)data = sc->sc_bus->stats;
+               *(struct usb_device_stats *)ap->a_data = sc->sc_bus->stats;
                break;
 
        default:
@@ -660,8 +656,9 @@ usbioctl(dev_t devt, u_long cmd, caddr_t data, int flag, usb_proc_ptr p)
 }
 
 int
-usbpoll(dev_t dev, int events, usb_proc_ptr p)
+usbpoll(struct dev_poll_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int revents, mask;
        int unit = USBUNIT(dev);
 
@@ -670,19 +667,16 @@ usbpoll(dev_t dev, int events, usb_proc_ptr p)
                mask = POLLIN | POLLRDNORM;
 
                crit_enter();
-               if (events & mask && usb_nevents > 0)
-                       revents |= events & mask;
-               if (revents == 0 && events & mask)
-                       selrecord(p, &usb_selevent);
+               if (ap->a_events & mask && usb_nevents > 0)
+                       revents |= ap->a_events & mask;
+               if (revents == 0 && ap->a_events & mask)
+                       selrecord(curthread, &usb_selevent);
                crit_exit();
-
-               return (revents);
+               ap->a_events = revents;
+               return (0);
        } else {
-#if defined(__FreeBSD__) || defined(__DragonFly__)
+               ap->a_events = 0;
                return (0);     /* select/poll never wakes up - back compat */
-#else
-               return (ENXIO);
-#endif
        }
 }
 
index 6c12253..0350166 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/sys/conf/files,v 1.340.2.137 2003/06/04 17:10:30 sam Exp $
-# $DragonFly: src/sys/conf/files,v 1.131 2006/07/07 14:16:29 sephe Exp $
+# $DragonFly: src/sys/conf/files,v 1.132 2006/07/28 02:17:34 dillon Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -567,7 +567,6 @@ kern/subr_blist.c   standard
 kern/subr_sbuf.c       standard
 kern/subr_scanf.c      standard
 kern/subr_taskqueue.c  standard
-kern/subr_xxx.c                standard
 kern/sys_generic.c     standard
 kern/sys_pipe.c                standard
 kern/sys_process.c     standard
index 43ee3aa..188b374 100644 (file)
@@ -7,7 +7,7 @@
  * ----------------------------------------------------------------------------
  *
  * $FreeBSD: src/sys/contrib/dev/fla/fla.c,v 1.16 1999/12/08 04:45:16 ken Exp $ 
- * $DragonFly: src/sys/contrib/dev/fla/Attic/fla.c,v 1.12 2006/04/30 17:22:15 dillon Exp $ 
+ * $DragonFly: src/sys/contrib/dev/fla/Attic/fla.c,v 1.13 2006/07/28 02:17:35 dillon Exp $ 
  *
  */
 
@@ -60,23 +60,14 @@ static d_open_t flaopen;
 static d_close_t flaclose;
 static d_ioctl_t flaioctl;
 
-static struct cdevsw fla_cdevsw = {
-        /* name */      "fla",
-        /* maj */       CDEV_MAJOR,
-        /* flags */     D_DISK | D_CANFREE,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-        /* open */      flaopen,
-        /* close */     flaclose,
-        /* read */      physread,
-        /* write */     physwrite,
-        /* ioctl */     flaioctl,
-        /* poll */      nopoll,
-        /* mmap */      nommap,
-        /* strategy */  flastrategy,
-        /* dump */      nodump,
-        /* psize */     nopsize
+static struct dev_ops fla_ops = {
+       { "fla", CDEV_MAJOR, D_DISK | D_CANFREE },
+        .d_open =      flaopen,
+        .d_close =     flaclose,
+        .d_read =      physread,
+        .d_write =     physwrite,
+        .d_ioctl =     flaioctl,
+        .d_strategy =  flastrategy,
 };
 
 void *
@@ -129,15 +120,16 @@ static struct fla_s {
 } softc[NFLA];
 
 static int
-flaopen(dev_t dev, int flag, int fmt, struct thread *td)
+flaopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct fla_s *sc;
        int error;
        struct disklabel *dl;
 
        if (fla_debug)
-               printf("flaopen(%s %x %x %p)\n",
-                       devtoname(dev), flag, fmt, td);
+               printf("flaopen(%s %x %x)\n",
+                       devtoname(dev), ap->a_oflags, ap->a_devtype);
 
        sc = dev->si_drv1;
 
@@ -159,14 +151,15 @@ flaopen(dev_t dev, int flag, int fmt, struct thread *td)
 }
 
 static int
-flaclose(dev_t dev, int flags, int fmt, struct thread *td)
+flaclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int error;
        struct fla_s *sc;
 
        if (fla_debug)
-               printf("flaclose(%s %x %x %p)\n",
-                       devtoname(dev), flags, fmt, td);
+               printf("flaclose(%s %x %x)\n",
+                       devtoname(dev), ap->a_fflag, ap->a_devtype);
 
        sc = dev->si_drv1;
 
@@ -179,28 +172,31 @@ flaclose(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int
-flaioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
+flaioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
 
        if (fla_debug)
-               printf("flaioctl(%s %lx %p %x %p)\n",
-                       devtoname(dev), cmd, addr, flags, td);
+               printf("flaioctl(%s %lx %p %x)\n",
+                       devtoname(dev), ap->a_cmd, ap->a_data, ap->a_fflag);
 
        return (ENOIOCTL);
 }
 
-static void
-flastrategy(dev_t dev, struct bio *bio)
+static int
+flastrategy(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp = bio->bio_buf;
        int unit, error;
        struct fla_s *sc;
        enum doc2k_work what;
 
        if (fla_debug > 1) {
-               printf("flastrategy(%p) %s %lx, %lld, %ld, %p)\n",
-                   bp, devtoname(dev), bp->b_flags, bio->bio_offset, 
-                   bp->b_bcount, bp->b_data);
+               printf("flastrategy(%p) %s %x, %lld, %d, %p)\n",
+                       bp, devtoname(dev), bp->b_flags, bio->bio_offset, 
+                       bp->b_bcount, bp->b_data);
        }
 
        sc = dev->si_drv1;
@@ -209,7 +205,7 @@ flastrategy(dev_t dev, struct bio *bio)
        bioqdisksort(&sc->bio_queue, bio);
        if (sc->busy) {
                crit_exit();
-               return;
+               return(0);
        }
        sc->busy++;
        
@@ -250,7 +246,7 @@ flastrategy(dev_t dev, struct bio *bio)
                ENTER();
 
                if (fla_debug > 1 || error) {
-                       printf("fla%d: %d = rwe(%p, %d, %d, %lld, %ld, %p)\n",
+                       printf("fla%d: %d = rwe(%p, %d, %d, %lld, %d, %p)\n",
                            unit, error, bp, unit, what, bio->bio_offset, 
                            bp->b_bcount, bp->b_data);
                }
@@ -266,7 +262,7 @@ flastrategy(dev_t dev, struct bio *bio)
                crit_enter();
        }
        sc->busy = 0;
-       return;
+       return(0);
 }
 
 static int
@@ -343,7 +339,7 @@ flaattach (device_t dev)
                DEVSTAT_TYPE_DIRECT | DEVSTAT_TYPE_IF_OTHER,
                DEVSTAT_PRIORITY_DISK);
 
-       sc->dev = disk_create(unit, &sc->disk, 0, &fla_cdevsw);
+       sc->dev = disk_create(unit, &sc->disk, 0, &fla_ops);
        sc->dev->si_drv1 = sc;
        sc->unit = unit;
 
index f917003..8d03570 100644 (file)
@@ -6,7 +6,7 @@
  * @(#)ip_fil.c     2.41 6/5/96 (C) 1993-2000 Darren Reed
  * @(#)$Id: ip_fil.c,v 2.42.2.60 2002/08/28 12:40:39 darrenr Exp $
  * $FreeBSD: src/sys/contrib/ipfilter/netinet/ip_fil.c,v 1.25.2.7 2004/07/04  09:24:38 darrenr Exp $
- * $DragonFly: src/sys/contrib/ipfilter/netinet/ip_fil.c,v 1.20 2005/11/28 17:13:35 dillon Exp $
+ * $DragonFly: src/sys/contrib/ipfilter/netinet/ip_fil.c,v 1.21 2006/07/28 02:17:35 dillon Exp $
  */
 #ifndef        SOLARIS
 #define        SOLARIS (defined(sun) && (defined(__svr4__) || defined(__SVR4)))
@@ -666,12 +666,15 @@ int IPL_EXTERN(ioctl)(dev_t dev, int cmd, caddr_t data, int mode
 # endif
 )
 #else
+#if defined(__DragonFly__)
+int IPL_EXTERN(ioctl)(struct dev_ioctl_args *ap)
+#else
 int IPL_EXTERN(ioctl)(dev, cmd, data, mode
-#if (defined(_KERNEL) && (defined(__DragonFly__) || defined(__FreeBSD__)))
+#if (defined(_KERNEL) && defined(__FreeBSD__))
 , td)
 struct thread *td;
 # elif (defined(_KERNEL) && ((_BSDI_VERSION >= 199510) || (BSD >= 199506) || \
-       (NetBSD >= 199511) || defined(__DragonFly__) || (__FreeBSD_version >= 220000) || \
+       (NetBSD >= 199511) || (__FreeBSD_version >= 220000) || \
        defined(__OpenBSD__)))
 , p)
 struct proc *p;
@@ -680,15 +683,22 @@ struct proc *p;
 # endif
 dev_t dev;
 # if defined(__NetBSD__) || defined(__OpenBSD__) || \
-       (_BSDI_VERSION >= 199701) || (defined(__DragonFly__) || __FreeBSD_version >= 300000)
+       (_BSDI_VERSION >= 199701) || (__FreeBSD_version >= 300000)
 u_long cmd;
 # else
 int cmd;
 # endif
 caddr_t data;
 int mode;
+#endif /* DragonFly */
 #endif /* __sgi */
 {
+#if defined(__DragonFly__)
+       dev_t dev = ap->a_head.a_dev;
+       u_long cmd = ap->a_cmd;
+       caddr_t data = ap->a_data;
+       int mode = ap->a_fflag;
+#endif
 #if defined(_KERNEL) && !SOLARIS && !defined(__DragonFly__)
        int s;
 #endif
@@ -1132,20 +1142,19 @@ caddr_t data;
 /*
  * routines below for saving IP headers to buffer
  */
+#ifdef __DragonFly__
+int IPL_EXTERN(open)(struct dev_open_args *ap)
+#else
 # ifdef __sgi
-#  ifdef _KERNEL
 int IPL_EXTERN(open)(dev_t *pdev, int flags, int devtype, cred_t *cp)
-#  else
-int IPL_EXTERN(open)(dev_t dev, int flags)
-#  endif
 # else
 int IPL_EXTERN(open)(dev, flags
-#if defined(__DragonFly__) || defined(__FreeBSD__)
+#if defined(__FreeBSD__)
 , devtype, td)
 int devtype;
 struct thread *td;
 #elif ((_BSDI_VERSION >= 199510) || (BSD >= 199506) || (NetBSD >= 199511) || \
-     (defined(__DragonFly__) || __FreeBSD_version >= 220000) || defined(__OpenBSD__)) && defined(_KERNEL)
+     (__FreeBSD_version >= 220000) || defined(__OpenBSD__)) && defined(_KERNEL)
 , devtype, p)
 int devtype;
 struct proc *p;
@@ -1155,7 +1164,11 @@ struct proc *p;
 dev_t dev;
 int flags;
 # endif /* __sgi */
+#endif /* DragonFly */
 {
+#ifdef __DragonFly__
+       dev_t dev = ap->a_head.a_dev;
+#endif
 # if defined(__sgi) && defined(_KERNEL)
        u_int min = geteminor(*pdev);
 # else
@@ -1170,16 +1183,19 @@ int flags;
 }
 
 
+#ifdef __DragonFly__
+int IPL_EXTERN(close)(struct dev_close_args *ap)
+#else
 # ifdef __sgi
 int IPL_EXTERN(close)(dev_t dev, int flags, int devtype, cred_t *cp)
 #else
 int IPL_EXTERN(close)(dev, flags
-#if defined(__DragonFly__) || defined(__FreeBSD__)
+#if defined(__FreeBSD__)
 , devtype, td)
 int devtype;
 struct thread *td;
 #elif ((_BSDI_VERSION >= 199510) || (BSD >= 199506) || (NetBSD >= 199511) || \
-     (defined(__DragonFly__) || __FreeBSD_version >= 220000) || defined(__OpenBSD__)) && defined(_KERNEL)
+     (__FreeBSD_version >= 220000) || defined(__OpenBSD__)) && defined(_KERNEL)
 , devtype, p)
 int devtype;
 struct proc *p;
@@ -1189,7 +1205,11 @@ struct proc *p;
 dev_t dev;
 int flags;
 # endif /* __sgi */
+#endif /* DragonFly */
 {
+#ifdef __DragonFly__
+       dev_t dev = ap->a_head.a_dev;
+#endif
        u_int   min = GET_MINOR(dev);
 
        if (IPL_LOGMAX < min)
@@ -1205,6 +1225,9 @@ int flags;
  * called during packet processing and cause an inconsistancy to appear in
  * the filter lists.
  */
+#ifdef __DragonFly__
+int IPL_EXTERN(read)(struct dev_read_args *ap)
+#else
 # ifdef __sgi
 int IPL_EXTERN(read)(dev_t dev, uio_t *uio, cred_t *crp)
 # else
@@ -1217,7 +1240,12 @@ int IPL_EXTERN(read)(dev, uio)
 dev_t dev;
 struct uio *uio;
 # endif /* __sgi */
+#endif /* DragonFly */
 {
+#ifdef __DragonFly__
+       dev_t dev = ap->a_head.a_dev;
+       struct uio *uio = ap->a_uio;
+#endif
 # ifdef IPFILTER_LOG
        return ipflog_read(GET_MINOR(dev), uio);
 # else
index b120dc2..97081d2 100644 (file)
@@ -6,12 +6,16 @@
  * @(#)ip_fil.h        1.35 6/5/96
  * $Id: ip_fil.h,v 2.29.2.33 2002/06/04 14:46:28 darrenr Exp $
  * $FreeBSD: src/sys/contrib/ipfilter/netinet/ip_fil.h,v 1.18.2.8 2004/07/05 06:02:35 darrenr Exp $
- * $DragonFly: src/sys/contrib/ipfilter/netinet/ip_fil.h,v 1.8 2005/02/26 14:15:36 joerg Exp $
+ * $DragonFly: src/sys/contrib/ipfilter/netinet/ip_fil.h,v 1.9 2006/07/28 02:17:35 dillon Exp $
  */
 
 #ifndef        __IP_FIL_H__
 #define        __IP_FIL_H__
 
+#if defined(__DragonFly__)
+#include <sys/device.h>
+#endif
+
 /*
  * Pathnames for various IP Filter control devices.  Used by LKM
  * and userland, so defined here.
@@ -564,9 +568,9 @@ extern      void    ipfilter_sgi_intfsync (void);
 extern int     iplidentify (char *);
 #   endif
 #if    defined(__DragonFly__) || defined(__FreeBSD__)
-extern int     iplioctl (dev_t, u_long, caddr_t, int, struct thread *);
-extern int     iplopen (dev_t, int, int, struct thread *);
-extern int     iplclose (dev_t, int, int, struct thread *);
+extern d_ioctl_t       iplioctl;
+extern d_open_t                iplopen;
+extern d_close_t       iplclose;
 #else
 #   if defined(__DragonFly__) || (_BSDI_VERSION >= 199510) || (__FreeBSD_version >= 220000) || \
       (NetBSD >= 199511) || defined(__OpenBSD__)
@@ -591,7 +595,7 @@ extern      void    iplclose (struct inode *, struct file *);
 #   endif /* (_BSDI_VERSION >= 199510) */
 #endif
 #   if BSD >= 199306
-extern int     iplread (dev_t, struct uio *, int);
+extern d_read_t        iplread;
 #   else
 #    ifndef linux
 extern int     iplread (dev_t, struct uio *);
index fdcb732..f677a9f 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/contrib/ipfilter/netinet/mlfk_ipl.c,v 1.9.2.2 2002/04/27 17:37:12 darrenr Exp $
- * $DragonFly: src/sys/contrib/ipfilter/netinet/mlfk_ipl.c,v 1.7 2004/05/19 22:52:39 dillon Exp $
+ * $DragonFly: src/sys/contrib/ipfilter/netinet/mlfk_ipl.c,v 1.8 2006/07/28 02:17:35 dillon Exp $
  */
 
 
@@ -103,23 +103,12 @@ SYSCTL_INT(_net_inet_ipf, OID_AUTO, fr_minttllog, CTLFLAG_RW,
           &fr_minttllog, 0, "");
 
 #define CDEV_MAJOR 79
-static struct cdevsw ipl_cdevsw = {
-       /* name */      "ipl",
-       /* maj */       CDEV_MAJOR,
-       /* flags */     0,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      iplopen,
-       /* close */     iplclose,
-       /* read */      iplread,
-       /* write */     nowrite,
-       /* ioctl */     iplioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  nostrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops ipl_ops = {
+       { "ipl", CDEV_MAJOR, 0 },
+       .d_open =       iplopen,
+       .d_close =      iplclose,
+       .d_read =       iplread,
+       .d_ioctl =      iplioctl,
 };
 
 static int
@@ -134,7 +123,7 @@ ipfilter_modevent(module_t mod, int type, void *unused)
                error = iplattach();
                if (error)
                        break;
-               cdevsw_add(&ipl_cdevsw, 0, 0);
+               dev_ops_add(&ipl_ops, 0, 0);
 
                c = NULL;
                for(i=strlen(IPL_NAME); i>0; i--)
@@ -144,7 +133,7 @@ ipfilter_modevent(module_t mod, int type, void *unused)
                        }
                if (!c)
                        c = IPL_NAME;
-               make_dev(&ipl_cdevsw, IPL_LOGIPF, 0, 0, 0600, c);
+               make_dev(&ipl_ops, IPL_LOGIPF, 0, 0, 0600, c);
 
                c = NULL;
                for(i=strlen(IPL_NAT); i>0; i--)
@@ -154,7 +143,7 @@ ipfilter_modevent(module_t mod, int type, void *unused)
                        }
                if (!c)
                        c = IPL_NAT;
-               make_dev(&ipl_cdevsw, IPL_LOGNAT, 0, 0, 0600, c);
+               make_dev(&ipl_ops, IPL_LOGNAT, 0, 0, 0600, c);
 
                c = NULL;
                for(i=strlen(IPL_STATE); i>0; i--)
@@ -164,7 +153,7 @@ ipfilter_modevent(module_t mod, int type, void *unused)
                        }
                if (!c)
                        c = IPL_STATE;
-               make_dev(&ipl_cdevsw, IPL_LOGSTATE, 0, 0, 0600, c);
+               make_dev(&ipl_ops, IPL_LOGSTATE, 0, 0, 0600, c);
 
                c = NULL;
                for(i=strlen(IPL_AUTH); i>0; i--)
@@ -174,11 +163,11 @@ ipfilter_modevent(module_t mod, int type, void *unused)
                        }
                if (!c)
                        c = IPL_AUTH;
-               make_dev(&ipl_cdevsw, IPL_LOGAUTH, 0, 0, 0600, c);
+               make_dev(&ipl_ops, IPL_LOGAUTH, 0, 0, 0600, c);
 
                break;
        case MOD_UNLOAD :
-               cdevsw_remove(&ipl_cdevsw, 0, 0);
+               dev_ops_remove(&ipl_ops, 0, 0);
                error = ipldetach();
                break;
        default:
index 5ed1417..469d0d0 100644 (file)
@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *     $FreeBSD: src/sys/dev/acpica/acpi.c,v 1.157 2004/06/05 09:56:04 njl Exp $
- *     $DragonFly: src/sys/dev/acpica5/acpi.c,v 1.19 2005/12/11 01:54:07 swildner Exp $
+ *     $DragonFly: src/sys/dev/acpica5/acpi.c,v 1.20 2006/07/28 02:17:35 dillon Exp $
  */
 
 #include "opt_acpi.h"
@@ -38,6 +38,7 @@
 #include <sys/malloc.h>
 #include <sys/bus.h>
 #include <sys/conf.h>
+#include <sys/device.h>
 #include <sys/ioccom.h>
 #include <sys/reboot.h>
 #include <sys/sysctl.h>
@@ -70,15 +71,11 @@ static d_close_t    acpiclose;
 static d_ioctl_t       acpiioctl;
 
 #define CDEV_MAJOR 152
-static struct cdevsw acpi_cdevsw = {
-       .d_name = "acpi",
-       .d_maj  = CDEV_MAJOR,
-       .d_flags = 0,
-       .d_port = NULL,
-       .d_clone = NULL,
-       .old_open = acpiopen,
-       .old_close = acpiclose,
-       .old_ioctl = acpiioctl
+static struct dev_ops acpi_ops = {
+       { "acpi", CDEV_MAJOR, 0 },
+       .d_open = acpiopen,
+       .d_close = acpiclose,
+       .d_ioctl = acpiioctl
 };
 
 #if __FreeBSD_version >= 500000
@@ -595,8 +592,8 @@ acpi_attach(device_t dev)
     sc->acpi_sleep_disabled = 0;
 
     /* Create the control device */
-    cdevsw_add(&acpi_cdevsw, 0, 0);
-    sc->acpi_dev_t = make_dev(&acpi_cdevsw, 0, UID_ROOT, GID_WHEEL, 0644,
+    dev_ops_add(&acpi_ops, 0, 0);
+    sc->acpi_dev_t = make_dev(&acpi_ops, 0, UID_ROOT, GID_WHEEL, 0644,
                              "acpi");
     sc->acpi_dev_t->si_drv1 = sc;
 
@@ -2441,19 +2438,19 @@ acpi_deregister_ioctl(u_long cmd, acpi_ioctl_fn fn)
 }
 
 static int
-acpiopen(dev_t dev, int flag, int fmt, d_thread_t *td)
+acpiopen(struct dev_open_args *ap)
 {
     return (0);
 }
 
 static int
-acpiclose(dev_t dev, int flag, int fmt, d_thread_t *td)
+acpiclose(struct dev_close_args *ap)
 {
     return (0);
 }
 
 static int
-acpiioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, d_thread_t *td)
+acpiioctl(struct dev_ioctl_args *ap)
 {
     struct acpi_softc          *sc;
     struct acpi_ioctl_hook     *hp;
@@ -2463,15 +2460,15 @@ acpiioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, d_thread_t *td)
     ACPI_LOCK;
 
     error = state = 0;
-    sc = dev->si_drv1;
+    sc = ap->a_head.a_dev->si_drv1;
 
     /*
      * Scan the list of registered ioctls, looking for handlers.
      */
     if (acpi_ioctl_hooks_initted) {
        TAILQ_FOREACH(hp, &acpi_ioctl_hooks, link) {
-           if (hp->cmd == cmd) {
-               xerror = hp->fn(cmd, addr, hp->arg);
+           if (hp->cmd == ap->a_cmd) {
+               xerror = hp->fn(ap->a_cmd, ap->a_data, hp->arg);
                if (xerror != 0)
                    error = xerror;
                goto out;
@@ -2484,11 +2481,11 @@ acpiioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, d_thread_t *td)
      * Currently, other ioctls just fetch information.
      * Not changing system behavior.
      */
-    if((flag & FWRITE) == 0)
+    if((ap->a_fflag & FWRITE) == 0)
        return (EPERM);
 
     /* Core system ioctls. */
-    switch (cmd) {
+    switch (ap->a_cmd) {
     case ACPIIO_ENABLE:
        if (ACPI_FAILURE(acpi_Enable(sc)))
            error = ENXIO;
@@ -2502,7 +2499,7 @@ acpiioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, d_thread_t *td)
            error = ENXIO;
            break;
        }
-       state = *(int *)addr;
+       state = *(int *)ap->a_data;
        if (state >= ACPI_STATE_S0  && state <= ACPI_S_STATES_MAX) {
            if (ACPI_FAILURE(acpi_SetSleepState(sc, state)))
                error = EINVAL;
index 8fe66ea..3fadf33 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  *     $FreeBSD: src/sys/pci/agp.c,v 1.3.2.4 2002/08/11 19:58:12 alc Exp $
- *     $DragonFly: src/sys/dev/agp/agp.c,v 1.20 2006/05/05 20:15:01 dillon Exp $
+ *     $DragonFly: src/sys/dev/agp/agp.c,v 1.21 2006/07/28 02:17:35 dillon Exp $
  */
 
 #include "opt_bus.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
+#include <sys/device.h>
+#include <sys/conf.h>
 #include <sys/malloc.h>
 #include <sys/kernel.h>
 #include <sys/bus.h>
-#include <sys/conf.h>
 #include <sys/ioccom.h>
 #include <sys/agpio.h>
 #include <sys/lock.h>
@@ -69,23 +70,12 @@ static d_close_t agp_close;
 static d_ioctl_t agp_ioctl;
 static d_mmap_t agp_mmap;
 
-static struct cdevsw agp_cdevsw = {
-       /* name */      "agp",
-       /* maj */       CDEV_MAJOR,
-       /* flags */     D_TTY,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      agp_open,
-       /* close */     agp_close,
-       /* read */      noread,
-       /* write */     nowrite,
-       /* ioctl */     agp_ioctl,
-       /* poll */      nopoll,
-       /* mmap */      agp_mmap,
-       /* strategy */  nostrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops agp_ops = {
+       { "agp", CDEV_MAJOR, D_TTY },
+       .d_open =       agp_open,
+       .d_close =      agp_close,
+       .d_ioctl =      agp_ioctl,
+       .d_mmap =       agp_mmap,
 };
 
 static devclass_t agp_devclass;
@@ -260,8 +250,8 @@ agp_generic_attach(device_t dev)
        TAILQ_INIT(&sc->as_memory);
        sc->as_nextid = 1;
 
-       cdevsw_add(&agp_cdevsw, -1, device_get_unit(dev));
-       make_dev(&agp_cdevsw, device_get_unit(dev), UID_ROOT, GID_WHEEL,
+       dev_ops_add(&agp_ops, -1, device_get_unit(dev));
+       make_dev(&agp_ops, device_get_unit(dev), UID_ROOT, GID_WHEEL,
                  0600, "agpgart");
 
        return 0;
@@ -274,7 +264,7 @@ agp_generic_detach(device_t dev)
 
        bus_release_resource(dev, SYS_RES_MEMORY, AGP_APBASE, sc->as_aperture);
        agp_flush_cache();
-       cdevsw_remove(&agp_cdevsw, -1, device_get_unit(dev));
+       dev_ops_remove(&agp_ops, -1, device_get_unit(dev));
        return 0;
 }
 
@@ -734,8 +724,9 @@ agp_unbind_user(device_t dev, agp_unbind *unbind)
 }
 
 static int
-agp_open(dev_t kdev, int oflags, int devtype, struct thread *td)
+agp_open(struct dev_open_args *ap)
 {
+       dev_t kdev = ap->a_head.a_dev;
        device_t dev = KDEV2DEV(kdev);
        struct agp_softc *sc = device_get_softc(dev);
 
@@ -748,8 +739,9 @@ agp_open(dev_t kdev, int oflags, int devtype, struct thread *td)
 }
 
 static int
-agp_close(dev_t kdev, int fflag, int devtype, struct thread *td)
+agp_close(struct dev_close_args *ap)
 {
+       dev_t kdev = ap->a_head.a_dev;
        device_t dev = KDEV2DEV(kdev);
        struct agp_softc *sc = device_get_softc(dev);
        struct agp_memory *mem;
@@ -771,13 +763,14 @@ agp_close(dev_t kdev, int fflag, int devtype, struct thread *td)
 }
 
 static int
-agp_ioctl(dev_t kdev, u_long cmd, caddr_t data, int fflag, struct thread *td)
+agp_ioctl(struct dev_ioctl_args *ap)
 {
+       dev_t kdev = ap->a_head.a_dev;
        device_t dev = KDEV2DEV(kdev);
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case AGPIOC_INFO:
-               return agp_info_user(dev, (agp_info *) data);
+               return agp_info_user(dev, (agp_info *)ap->a_data);
 
        case AGPIOC_ACQUIRE:
                return agp_acquire_helper(dev, AGP_ACQUIRE_USER);
@@ -786,19 +779,19 @@ agp_ioctl(dev_t kdev, u_long cmd, caddr_t data, int fflag, struct thread *td)
                return agp_release_helper(dev, AGP_ACQUIRE_USER);
 
        case AGPIOC_SETUP:
-               return agp_setup_user(dev, (agp_setup *)data);
+               return agp_setup_user(dev, (agp_setup *)ap->a_data);
 
        case AGPIOC_ALLOCATE:
-               return agp_allocate_user(dev, (agp_allocate *)data);
+               return agp_allocate_user(dev, (agp_allocate *)ap->a_data);
 
        case AGPIOC_DEALLOCATE:
-               return agp_deallocate_user(dev, *(int *) data);
+               return agp_deallocate_user(dev, *(int *)ap->a_data);
 
        case AGPIOC_BIND:
-               return agp_bind_user(dev, (agp_bind *)data);
+               return agp_bind_user(dev, (agp_bind *)ap->a_data);
 
        case AGPIOC_UNBIND:
-               return agp_unbind_user(dev, (agp_unbind *)data);
+               return agp_unbind_user(dev, (agp_unbind *)ap->a_data);
 
        }
 
@@ -806,14 +799,16 @@ agp_ioctl(dev_t kdev, u_long cmd, caddr_t data, int fflag, struct thread *td)
 }
 
 static int
-agp_mmap(dev_t kdev, vm_offset_t offset, int prot)
+agp_mmap(struct dev_mmap_args *ap)
 {
+       dev_t kdev = ap->a_head.a_dev;
        device_t dev = KDEV2DEV(kdev);
        struct agp_softc *sc = device_get_softc(dev);
 
-       if (offset > AGP_GET_APERTURE(dev))
-               return -1;
-       return atop(rman_get_start(sc->as_aperture) + offset);
+       if (ap->a_offset > AGP_GET_APERTURE(dev))
+               return EINVAL;
+       ap->a_result = atop(rman_get_start(sc->as_aperture) + ap->a_offset);
+       return(0);
 }
 
 /* Implementation of the kernel api */
index 4526b36..8f2a98a 100644 (file)
@@ -26,7 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/ata/ata-all.c,v 1.50.2.45 2003/03/12 14:47:12 sos Exp $
- * $DragonFly: src/sys/dev/disk/ata/ata-all.c,v 1.28 2005/10/13 00:02:29 dillon Exp $
+ * $DragonFly: src/sys/dev/disk/ata/ata-all.c,v 1.29 2006/07/28 02:17:35 dillon Exp $
  */
 
 #include "opt_ata.h"
@@ -66,23 +66,11 @@ union ata_request {
 
 /* device structures */
 static d_ioctl_t       ataioctl;
-static struct cdevsw ata_cdevsw = {  
-       /* name */      "ata",
-       /* maj */       159,
-       /* flags */     0,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      nullopen,
-       /* close */     nullclose,
-       /* read */      noread,
-       /* write */     nowrite,
-       /* ioctl */     ataioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  nostrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops ata_ops = {  
+       { "ata", 159, 0 },
+       .d_open =       nullopen,
+       .d_close =      nullclose,
+       .d_ioctl =      ataioctl,
 };
 
 /* prototypes */
@@ -320,14 +308,14 @@ ata_resume(device_t dev)
 }
 
 static int
-ataioctl(dev_t dev, u_long cmd, caddr_t addr, int32_t flag, struct thread *td)
+ataioctl(struct dev_ioctl_args *ap)
 {
-    struct ata_cmd *iocmd = (struct ata_cmd *)addr;
+    struct ata_cmd *iocmd = (struct ata_cmd *)ap->a_data;
     struct ata_channel *ch;
     device_t device = devclass_get_device(ata_devclass, iocmd->channel);
     int error;
 
-    if (cmd != IOCATA)
+    if (ap->a_cmd != IOCATA)
        return ENOTTY;
     
     if (iocmd->channel < -1 || iocmd->device < -1 || iocmd->device > SLAVE)
@@ -1588,8 +1576,8 @@ static void
 ata_init(void)
 {
     /* register controlling device */
-    cdevsw_add(&ata_cdevsw, 0, 0);
-    make_dev(&ata_cdevsw, 0, UID_ROOT, GID_OPERATOR, 0600, "ata");
+    dev_ops_add(&ata_ops, 0, 0);
+    make_dev(&ata_ops, 0, UID_ROOT, GID_OPERATOR, 0600, "ata");
 
     /* register boot attach to be run when interrupts are enabled */
     ata_delayed_attach = malloc(sizeof(struct intr_config_hook),
index 8ff4023..d54d199 100644 (file)
@@ -26,7 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/ata/ata-disk.c,v 1.60.2.24 2003/01/30 07:19:59 sos Exp $
- * $DragonFly: src/sys/dev/disk/ata/ata-disk.c,v 1.28 2006/04/30 17:22:16 dillon Exp $
+ * $DragonFly: src/sys/dev/disk/ata/ata-disk.c,v 1.29 2006/07/28 02:17:35 dillon Exp $
  */
 
 #include "opt_ata.h"
@@ -62,23 +62,14 @@ static d_close_t    adclose;
 static d_strategy_t    adstrategy;
 static d_dump_t                addump;
 
-static struct cdevsw ad_cdevsw = {
-       /* name */      "ad",
-       /* maj */       116,
-       /* flags */     D_DISK,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      adopen,
-       /* close */     adclose,
-       /* read */      physread,
-       /* write */     physwrite,
-       /* ioctl */     noioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  adstrategy,
-       /* dump */      addump,
-       /* psize */     nopsize
+static struct dev_ops ad_ops = {
+       { "ad", 116, D_DISK },
+       .d_open =       adopen,
+       .d_close =      adclose,
+       .d_read =       physread,
+       .d_write =      physwrite,
+       .d_strategy =   adstrategy,
+       .d_dump =       addump,
 };
 
 /* prototypes */
@@ -204,7 +195,7 @@ ad_attach(struct ata_device *atadev, int alreadylocked)
                      DEVSTAT_TYPE_DIRECT | DEVSTAT_TYPE_IF_IDE,
                      DEVSTAT_PRIORITY_DISK);
 
-    dev = disk_create(adp->lun, &adp->disk, 0, &ad_cdevsw);
+    dev = disk_create(adp->lun, &adp->disk, 0, &ad_ops);
     dev->si_drv1 = adp;
     dev->si_iosize_max = 256 * DEV_BSIZE;
     adp->dev = dev;
@@ -277,9 +268,9 @@ ad_detach(struct ata_device *atadev, int flush) /* get rid of flush XXX SOS */
 }
 
 static int
-adopen(dev_t dev, int flags, int fmt, struct thread *td)
+adopen(struct dev_open_args *ap)
 {
-    struct ad_softc *adp = dev->si_drv1;
+    struct ad_softc *adp = ap->a_head.a_dev->si_drv1;
 
     if (adp->flags & AD_F_RAID_SUBDISK)
        return EBUSY;
@@ -287,9 +278,9 @@ adopen(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int
-adclose(dev_t dev, int flags, int fmt, struct thread *td)
+adclose(struct dev_close_args *ap)
 {
-    struct ad_softc *adp = dev->si_drv1;
+    struct ad_softc *adp = ap->a_head.a_dev->si_drv1;
 
     crit_enter();      /* interlock non-atomic channel lock */
     ATA_SLEEPLOCK_CH(adp->device->channel, ATA_CONTROL);
@@ -304,9 +295,11 @@ adclose(dev_t dev, int flags, int fmt, struct thread *td)
  * note: always use the passed device rather then bp->b_dev, as the bp
  * may have been translated through several layers.
  */
-static void 
-adstrategy(dev_t dev, struct bio *bio)
+static int 
+adstrategy(struct dev_strategy_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
+    struct bio *bio = ap->a_bio;
     struct buf *bp = bio->bio_buf;
     struct ad_softc *adp = dev->si_drv1;
 
@@ -314,18 +307,20 @@ adstrategy(dev_t dev, struct bio *bio)
        bp->b_error = ENXIO;
        bp->b_flags |= B_ERROR;
        biodone(bio);
-       return;
+       return(0);
     }
     bio->bio_driver_info = dev;
     crit_enter();
     bioqdisksort(&adp->bio_queue, bio);
     crit_exit();
     ata_start(adp->device->channel);
+    return(0);
 }
 
 int
-addump(dev_t dev, u_int count, u_int blkno, u_int secsize)
+addump(struct dev_dump_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
     struct ad_softc *adp = dev->si_drv1;
     struct ad_request request;
     vm_paddr_t addr = 0;
@@ -340,14 +335,14 @@ addump(dev_t dev, u_int count, u_int blkno, u_int secsize)
     adp->device->mode = ATA_PIO;
     ata_reinit(adp->device->channel);
 
-    blkcnt = howmany(PAGE_SIZE, secsize);
+    blkcnt = howmany(PAGE_SIZE, ap->a_secsize);
 
-    while (count > 0) {
+    while (ap->a_count > 0) {
        caddr_t va = NULL;
        DELAY(1000);
 
-       if ((count / blkcnt) < dumppages)
-           dumppages = count / blkcnt;
+       if ((ap->a_count / blkcnt) < dumppages)
+           dumppages = ap->a_count / blkcnt;
 
        for (i = 0; i < dumppages; ++i) {
            vm_paddr_t a = addr + (i * PAGE_SIZE);
@@ -359,7 +354,7 @@ addump(dev_t dev, u_int count, u_int blkno, u_int secsize)
 
        bzero(&request, sizeof(struct ad_request));
        request.softc = adp;
-       request.blockaddr = blkno;
+       request.blockaddr = ap->a_blkno;
        request.bytecount = PAGE_SIZE * dumppages;
        request.data = va;
        callout_init(&request.callout);
@@ -373,11 +368,11 @@ addump(dev_t dev, u_int count, u_int blkno, u_int secsize)
            DELAY(20);
        }
 
-       if (dumpstatus(addr, (off_t)count * DEV_BSIZE) < 0)
+       if (dumpstatus(addr, (off_t)ap->a_count * DEV_BSIZE) < 0)
            return EINTR;
 
-       blkno += blkcnt * dumppages;
-       count -= blkcnt * dumppages;
+       ap->a_blkno += blkcnt * dumppages;
+       ap->a_count -= blkcnt * dumppages;
        addr += PAGE_SIZE * dumppages;
     }
 
index 0be9798..7c90619 100644 (file)
@@ -26,7 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/ata/ata-raid.c,v 1.3.2.19 2003/01/30 07:19:59 sos Exp $
- * $DragonFly: src/sys/dev/disk/ata/ata-raid.c,v 1.20 2006/05/03 06:28:01 dillon Exp $
+ * $DragonFly: src/sys/dev/disk/ata/ata-raid.c,v 1.21 2006/07/28 02:17:35 dillon Exp $
  */
 
 #include "opt_ata.h"
 static d_open_t                aropen;
 static d_strategy_t    arstrategy;
 
-static struct cdevsw ar_cdevsw = {
-       /* name */      "ar",
-       /* maj */       157,
-       /* flags */     D_DISK,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      aropen,
-       /* close */     nullclose,
-       /* read */      physread,
-       /* write */     physwrite,
-       /* ioctl */     noioctl, 
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  arstrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops ar_ops = {
+       { "ar", 157, D_DISK },
+       .d_open =       aropen,
+       .d_close =      nullclose,
+       .d_read =       physread,
+       .d_write =      physwrite,
+       .d_strategy =   arstrategy,
 };  
 
 /* prototypes */
@@ -186,7 +176,7 @@ ar_attach_raid(struct ar_softc *rdp, int update)
     int disk;
 
     ar_config_changed(rdp, update);
-    dev = disk_create(rdp->lun, &rdp->disk, 0, &ar_cdevsw);
+    dev = disk_create(rdp->lun, &rdp->disk, 0, &ar_ops);
     dev->si_drv1 = rdp;
     dev->si_iosize_max = 256 * DEV_BSIZE;
     rdp->dev = dev;
@@ -464,9 +454,9 @@ ata_raid_rebuild(int array)
 }
 
 static int
-aropen(dev_t dev, int flags, int fmt, struct thread *td)
+aropen(struct dev_open_args *ap)
 {
-    struct ar_softc *rdp = dev->si_drv1;
+    struct ar_softc *rdp = ap->a_head.a_dev->si_drv1;
     struct disklabel *dl;
        
     dl = &rdp->disk.d_label;
@@ -480,9 +470,11 @@ aropen(dev_t dev, int flags, int fmt, struct thread *td)
     return 0;
 }
 
-static void
-arstrategy(dev_t dev, struct bio *bio)
+static int
+arstrategy(struct dev_strategy_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
+    struct bio *bio = ap->a_bio;
     struct buf *bp = bio->bio_buf;
     struct ar_softc *rdp = dev->si_drv1;
     int blkno, count, chunk, lba, lbs, tmplba;
@@ -495,7 +487,7 @@ arstrategy(dev_t dev, struct bio *bio)
        bp->b_flags |= B_ERROR;
        bp->b_error = EIO;
        biodone(bio);
-       return;
+       return(0);
     }
 
     KKASSERT((bio->bio_offset & DEV_BMASK) == 0);
@@ -546,7 +538,7 @@ arstrategy(dev_t dev, struct bio *bio)
            bp->b_flags |= B_ERROR;
            bp->b_error = EIO;
            biodone(bio);
-           return;
+           return(0);
        }
 
        buf1 = malloc(sizeof(struct ar_buf), M_AR, M_INTWAIT | M_ZERO);
@@ -577,7 +569,7 @@ arstrategy(dev_t dev, struct bio *bio)
                bp->b_flags |= B_ERROR;
                bp->b_error = EIO;
                biodone(bio);
-               return;
+               return(0);
            }
            dev_dstrategy(AD_SOFTC(rdp->disks[buf1->drive])->dev,
                          &buf1->bp.b_bio1);
@@ -613,7 +605,7 @@ arstrategy(dev_t dev, struct bio *bio)
                bp->b_flags |= B_ERROR;
                bp->b_error = EIO;
                biodone(bio);
-               return;
+               return(0);
            }
            if (bp->b_cmd == BUF_CMD_READ) {
                if ((buf1_blkno <
@@ -658,6 +650,7 @@ arstrategy(dev_t dev, struct bio *bio)
            printf("ar%d: unknown array type in arstrategy\n", rdp->lun);
        }
     }
+    return(0);
 }
 
 static void
index 696ca18..dbf1413 100644 (file)
@@ -26,7 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/ata/atapi-cd.c,v 1.48.2.20 2002/11/25 05:30:31 njl Exp $
- * $DragonFly: src/sys/dev/disk/ata/atapi-cd.c,v 1.22 2006/04/30 17:22:16 dillon Exp $
+ * $DragonFly: src/sys/dev/disk/ata/atapi-cd.c,v 1.23 2006/07/28 02:17:35 dillon Exp $
  */
 
 #include "opt_ata.h"
@@ -59,23 +59,14 @@ static d_close_t    acdclose;
 static d_ioctl_t       acdioctl;
 static d_strategy_t    acdstrategy;
 
-static struct cdevsw acd_cdevsw = {
-       /* name */      "acd",
-       /* maj */       117,
-       /* flags */     D_DISK | D_TRACKCLOSE,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      acdopen,
-       /* close */     acdclose,
-       /* read */      physread,
-       /* write */     physwrite,
-       /* ioctl */     acdioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  acdstrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops acd_ops = {
+       { "acd", 117, D_DISK | D_TRACKCLOSE },
+       .d_open =       acdopen,
+       .d_close =      acdclose,
+       .d_read =       physread,
+       .d_write =      physwrite,
+       .d_ioctl =      acdioctl,
+       .d_strategy =   acdstrategy,
 };
 
 /* prototypes */
@@ -229,7 +220,7 @@ acddetach(struct ata_device *atadev)
     }
     release_dev(cdp->dev);
     devstat_remove_entry(cdp->stats);
-    cdevsw_remove(&acd_cdevsw, dkunitmask(), dkmakeunit(cdp->lun));
+    dev_ops_remove(&acd_ops, dkunitmask(), dkmakeunit(cdp->lun));
     free(cdp->stats, M_ACD);
     ata_free_name(atadev);
     ata_free_lun(&acd_lun_map, cdp->lun);
@@ -259,8 +250,8 @@ acd_make_dev(struct acd_softc *cdp)
 {
     dev_t dev;
 
-    cdevsw_add(&acd_cdevsw, dkunitmask(), dkmakeunit(cdp->lun));
-    dev = make_dev(&acd_cdevsw, dkmakeminor(cdp->lun, 0, 0),
+    dev_ops_add(&acd_ops, dkunitmask(), dkmakeunit(cdp->lun));
+    dev = make_dev(&acd_ops, dkmakeminor(cdp->lun, 0, 0),
                   UID_ROOT, GID_OPERATOR, 0644, "acd%d", cdp->lun);
     reference_dev(dev);
     dev->si_drv1 = cdp;
@@ -484,15 +475,16 @@ msf2lba(u_int8_t m, u_int8_t s, u_int8_t f)
 }
 
 static int
-acdopen(dev_t dev, int flags, int fmt, struct thread *td)
+acdopen(struct dev_open_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
     struct acd_softc *cdp = dev->si_drv1;
     int timeout = 60;
     
     if (!cdp)
        return ENXIO;
 
-    if (flags & FWRITE) {
+    if (ap->a_oflags & FWRITE) {
        if (count_dev(dev) > 1)
            return EBUSY;
     }
@@ -522,8 +514,9 @@ acdopen(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int 
-acdclose(dev_t dev, int flags, int fmt, struct thread *td)
+acdclose(struct dev_close_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
     struct acd_softc *cdp = dev->si_drv1;
     
     if (!cdp)
@@ -541,8 +534,9 @@ acdclose(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int 
-acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
+acdioctl(struct dev_ioctl_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
     struct acd_softc *cdp = dev->si_drv1;
     int error = 0;
 
@@ -554,7 +548,7 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
        tsleep(&cdp->changer_info, 0, "acdctl", 0);
     }
     if (cdp->device->flags & ATA_D_MEDIA_CHANGED)
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case CDIOCRESET:
            atapi_test_ready(cdp->device);
            break;
@@ -565,7 +559,7 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
            cdp->flags |= F_LOCKED;
            break;
        }
-    switch (cmd) {
+    switch (ap->a_cmd) {
 
     case CDIOCRESUME:
        error = acd_pause_resume(cdp, 1);
@@ -594,7 +588,8 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
        break;
 
     case CDIOCRESET:
-       error = suser(td);      /* note: if no proc EPERM will be returned */
+;      /* note: if no proc EPERM will be returned */
+       error = suser_cred(ap->a_cred, 0);
        if (error)
            break;
        error = atapi_test_ready(cdp->device);
@@ -619,12 +614,12 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
            error = EIO;
            break;
        }
-       bcopy(&cdp->toc.hdr, addr, sizeof(cdp->toc.hdr));
+       bcopy(&cdp->toc.hdr, ap->a_data, sizeof(cdp->toc.hdr));
        break;
 
     case CDIOREADTOCENTRYS:
        {
-           struct ioc_read_toc_entry *te = (struct ioc_read_toc_entry *)addr;
+           struct ioc_read_toc_entry *te = (struct ioc_read_toc_entry *)ap->a_data;
            struct toc *toc = &cdp->toc;
            int starting_track = te->starting_track;
            int len;
@@ -681,7 +676,7 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
     case CDIOREADTOCENTRY:
        {
            struct ioc_read_toc_single_entry *te =
-               (struct ioc_read_toc_single_entry *)addr;
+               (struct ioc_read_toc_single_entry *)ap->a_data;
            struct toc *toc = &cdp->toc;
            u_char track = te->track;
 
@@ -726,7 +721,7 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
     case CDIOCREADSUBCHANNEL:
        {
            struct ioc_read_subchannel *args =
-               (struct ioc_read_subchannel *)addr;
+               (struct ioc_read_subchannel *)ap->a_data;
            u_int8_t format;
            int8_t ccb[16] = { ATAPI_READ_SUBCHANNEL, 0, 0x40, 1, 0, 0, 0,
                               sizeof(cdp->subchan)>>8, sizeof(cdp->subchan),
@@ -775,7 +770,7 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
 
     case CDIOCPLAYMSF:
        {
-           struct ioc_play_msf *args = (struct ioc_play_msf *)addr;
+           struct ioc_play_msf *args = (struct ioc_play_msf *)ap->a_data;
 
            error = 
                acd_play(cdp, 
@@ -786,7 +781,7 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
 
     case CDIOCPLAYBLOCKS:
        {
-           struct ioc_play_blocks *args = (struct ioc_play_blocks *)addr;
+           struct ioc_play_blocks *args = (struct ioc_play_blocks *)ap->a_data;
 
            error = acd_play(cdp, args->blk, args->blk + args->len);
            break;
@@ -794,7 +789,7 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
 
     case CDIOCPLAYTRACKS:
        {
-           struct ioc_play_track *args = (struct ioc_play_track *)addr;
+           struct ioc_play_track *args = (struct ioc_play_track *)ap->a_data;
            int t1, t2;
 
            if (!cdp->toc.hdr.ending_track) {
@@ -819,7 +814,7 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
 
     case CDIOCREADAUDIO:
        {
-           struct ioc_read_audio *args = (struct ioc_read_audio *)addr;
+           struct ioc_read_audio *args = (struct ioc_read_audio *)ap->a_data;
            int32_t lba;
            caddr_t buffer, ubuf = args->buffer;
            int8_t ccb[16];
@@ -892,7 +887,7 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
 
     case CDIOCGETVOL:
        {
-           struct ioc_vol *arg = (struct ioc_vol *)addr;
+           struct ioc_vol *arg = (struct ioc_vol *)ap->a_data;
 
            if ((error = acd_mode_sense(cdp, ATAPI_CDROM_AUDIO_PAGE,
                                        (caddr_t)&cdp->au, sizeof(cdp->au))))
@@ -911,7 +906,7 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
 
     case CDIOCSETVOL:
        {
-           struct ioc_vol *arg = (struct ioc_vol *)addr;
+           struct ioc_vol *arg = (struct ioc_vol *)ap->a_data;
 
            if ((error = acd_mode_sense(cdp, ATAPI_CDROM_AUDIO_PAGE,
                                        (caddr_t)&cdp->au, sizeof(cdp->au))))
@@ -936,7 +931,7 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
        }
     case CDIOCSETPATCH:
        {
-           struct ioc_patch *arg = (struct ioc_patch *)addr;
+           struct ioc_patch *arg = (struct ioc_patch *)ap->a_data;
 
            error = acd_setchan(cdp, arg->patch[0], arg->patch[1],
                                arg->patch[2], arg->patch[3]);
@@ -964,7 +959,7 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
        break;
 
     case CDRIOCBLANK:
-       error = acd_blank(cdp, (*(int *)addr));
+       error = acd_blank(cdp, (*(int *)ap->a_data));
        break;
 
     case CDRIOCNEXTWRITEABLEADDR:
@@ -978,16 +973,16 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
                error = EINVAL;
                break;
            }
-           *(int*)addr = track_info.next_writeable_addr;
+           *(int*)ap->a_data = track_info.next_writeable_addr;
        }
        break;
  
     case CDRIOCINITWRITER:
-       error = acd_init_writer(cdp, (*(int *)addr));
+       error = acd_init_writer(cdp, (*(int *)ap->a_data));
        break;
 
     case CDRIOCINITTRACK:
-       error = acd_init_track(cdp, (struct cdr_track *)addr);
+       error = acd_init_track(cdp, (struct cdr_track *)ap->a_data);
        break;
 
     case CDRIOCFLUSH:
@@ -995,12 +990,12 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
        break;
 
     case CDRIOCFIXATE:
-       error = acd_fixate(cdp, (*(int *)addr));
+       error = acd_fixate(cdp, (*(int *)ap->a_data));
        break;
 
     case CDRIOCREADSPEED:
        {
-           int speed = *(int *)addr;
+           int speed = *(int *)ap->a_data;
 
            /* Preserve old behavior: units in multiples of CDROM speed */
            if (speed < 177)
@@ -1011,7 +1006,7 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
 
     case CDRIOCWRITESPEED:
        {
-           int speed = *(int *)addr;
+           int speed = *(int *)ap->a_data;
 
            if (speed < 177)
                speed *= 177;
@@ -1020,53 +1015,53 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
        break;
 
     case CDRIOCGETBLOCKSIZE:
-       *(int *)addr = cdp->block_size;
+       *(int *)ap->a_data = cdp->block_size;
        break;
 
     case CDRIOCSETBLOCKSIZE:
-       cdp->block_size = *(int *)addr;
+       cdp->block_size = *(int *)ap->a_data;
        acd_set_ioparm(cdp);
        break;
 
     case CDRIOCGETPROGRESS:
-       error = acd_get_progress(cdp, (int *)addr);
+       error = acd_get_progress(cdp, (int *)ap->a_data);
        break;
 
     case CDRIOCSENDCUE:
-       error = acd_send_cue(cdp, (struct cdr_cuesheet *)addr);
+       error = acd_send_cue(cdp, (struct cdr_cuesheet *)ap->a_data);
        break;
 
     case DVDIOCREPORTKEY:
        if (!cdp->cap.read_dvdrom)
            error = EINVAL;
        else
-           error = acd_report_key(cdp, (struct dvd_authinfo *)addr);
+           error = acd_report_key(cdp, (struct dvd_authinfo *)ap->a_data);
        break;
 
     case DVDIOCSENDKEY:
        if (!cdp->cap.read_dvdrom)
            error = EINVAL;
        else
-           error = acd_send_key(cdp, (struct dvd_authinfo *)addr);
+           error = acd_send_key(cdp, (struct dvd_authinfo *)ap->a_data);
        break;
 
     case DVDIOCREADSTRUCTURE:
        if (!cdp->cap.read_dvdrom)
            error = EINVAL;
        else
-           error = acd_read_structure(cdp, (struct dvd_struct *)addr);
+           error = acd_read_structure(cdp, (struct dvd_struct *)ap->a_data);
        break;
 
     case DIOCGDINFO:
-       *(struct disklabel *)addr = cdp->disklabel;
+       *(struct disklabel *)ap->a_data = cdp->disklabel;
        break;
 
     case DIOCWDINFO:
     case DIOCSDINFO:
-       if ((flags & FWRITE) == 0)
+       if ((ap->a_fflag & FWRITE) == 0)
            error = EBADF;
        else
-           error = setdisklabel(&cdp->disklabel, (struct disklabel *)addr, 0);
+           error = setdisklabel(&cdp->disklabel, (struct disklabel *)ap->a_data, 0);
        break;
 
     case DIOCWLABEL:
@@ -1074,8 +1069,8 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
        break;
 
     case DIOCGPART:
-       ((struct partinfo *)addr)->disklab = &cdp->disklabel;
-       ((struct partinfo *)addr)->part = &cdp->disklabel.d_partitions[0];
+       ((struct partinfo *)ap->a_data)->disklab = &cdp->disklabel;
+       ((struct partinfo *)ap->a_data)->part = &cdp->disklabel.d_partitions[0];
        break;
 
     default:
@@ -1084,9 +1079,11 @@ acdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
     return error;
 }
 
-static void 
-acdstrategy(dev_t dev, struct bio *bio)
+static int 
+acdstrategy(struct dev_strategy_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
+    struct bio *bio = ap->a_bio;
     struct buf *bp = bio->bio_buf;
     struct acd_softc *cdp = dev->si_drv1;
 
@@ -1094,14 +1091,14 @@ acdstrategy(dev_t dev, struct bio *bio)
        bp->b_flags |= B_ERROR;
        bp->b_error = ENXIO;
        biodone(bio);
-       return;
+       return(0);
     }
 
     /* if it's a null transfer, return immediatly. */
     if (bp->b_bcount == 0) {
        bp->b_resid = 0;
        biodone(bio);
-       return;
+       return(0);
     }
 
     KKASSERT(bio->bio_offset != NOOFFSET);
@@ -1112,6 +1109,7 @@ acdstrategy(dev_t dev, struct bio *bio)
     bioqdisksort(&cdp->bio_queue, bio);
     crit_exit();
     ata_start(cdp->device->channel);
+    return(0);
 }
 
 void 
@@ -1332,7 +1330,7 @@ acd_read_toc(struct acd_softc *cdp)
 
        sprintf(name, "acd%dt%d", cdp->lun, track);
        entry = malloc(sizeof(struct acd_devlist), M_ACD, M_WAITOK | M_ZERO);
-       entry->dev = make_dev(&acd_cdevsw, (cdp->lun << 3) | (track << 16),
+       entry->dev = make_dev(&acd_ops, (cdp->lun << 3) | (track << 16),
                              0, 0, 0644, name, NULL);
        entry->dev->si_drv1 = cdp->dev->si_drv1;
        reference_dev(entry->dev);
index 69632e3..9f93347 100644 (file)
@@ -26,7 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/ata/atapi-fd.c,v 1.44.2.9 2002/07/31 11:19:26 sos Exp $
- * $DragonFly: src/sys/dev/disk/ata/atapi-fd.c,v 1.15 2006/04/30 17:22:16 dillon Exp $
+ * $DragonFly: src/sys/dev/disk/ata/atapi-fd.c,v 1.16 2006/07/28 02:17:35 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -54,23 +54,14 @@ static      d_close_t       afdclose;
 static d_ioctl_t       afdioctl;
 static d_strategy_t    afdstrategy;
 
-static struct cdevsw afd_cdevsw = {
-       /* name */      "afd",
-       /* maj */       118,
-       /* flags */     D_DISK | D_TRACKCLOSE,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      afdopen,
-       /* close */     afdclose,
-       /* read */      physread,
-       /* write */     physwrite,
-       /* ioctl */     afdioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  afdstrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops afd_ops = {
+       { "afd", 118, D_DISK | D_TRACKCLOSE },
+       .d_open =       afdopen,
+       .d_close =      afdclose,
+       .d_read =       physread,
+       .d_write =      physwrite,
+       .d_ioctl =      afdioctl,
+       .d_strategy =   afdstrategy,
 };
 
 /* prototypes */
@@ -111,7 +102,7 @@ afdattach(struct ata_device *atadev)
                      DEVSTAT_NO_ORDERED_TAGS,
                      DEVSTAT_TYPE_DIRECT | DEVSTAT_TYPE_IF_IDE,
                      DEVSTAT_PRIORITY_WFD);
-    dev = disk_create(fdp->lun, &fdp->disk, 0, &afd_cdevsw);
+    dev = disk_create(fdp->lun, &fdp->disk, 0, &afd_ops);
     dev->si_drv1 = fdp;
     fdp->dev = dev;
 
@@ -237,8 +228,9 @@ afd_describe(struct afd_softc *fdp)
 }
 
 static int
-afdopen(dev_t dev, int flags, int fmt, struct thread *td)
+afdopen(struct dev_open_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
     struct afd_softc *fdp = dev->si_drv1;
     struct disklabel *label = &fdp->disk.d_label;
 
@@ -263,8 +255,9 @@ afdopen(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int 
-afdclose(dev_t dev, int flags, int fmt, struct thread *td)
+afdclose(struct dev_close_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
     struct afd_softc *fdp = dev->si_drv1;
 
     if (count_dev(dev) == 1)
@@ -273,11 +266,12 @@ afdclose(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int 
-afdioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
+afdioctl(struct dev_ioctl_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
     struct afd_softc *fdp = dev->si_drv1;
 
-    switch (cmd) {
+    switch (ap->a_cmd) {
     case CDIOCEJECT:
        if (count_dev(dev) > 1)
            return EBUSY;
@@ -293,9 +287,11 @@ afdioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
     }
 }
 
-static void 
-afdstrategy(dev_t dev, struct bio *bio)
+static int 
+afdstrategy(struct dev_strategy_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
+    struct bio *bio = ap->a_bio;
     struct buf *bp = bio->bio_buf;
     struct afd_softc *fdp = dev->si_drv1;
 
@@ -303,20 +299,21 @@ afdstrategy(dev_t dev, struct bio *bio)
        bp->b_flags |= B_ERROR;
        bp->b_error = ENXIO;
        biodone(bio);
-       return;
+       return(0);
     }
 
     /* if it's a null transfer, return immediatly. */
     if (bp->b_bcount == 0) {
        bp->b_resid = 0;
        biodone(bio);
-       return;
+       return(0);
     }
 
     crit_enter();
     bioqdisksort(&fdp->bio_queue, bio);
     crit_exit();
     ata_start(fdp->device->channel);
+    return(0);
 }
 
 void 
index 2ac4bcb..ef57b0d 100644 (file)
@@ -26,7 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/ata/atapi-tape.c,v 1.36.2.12 2002/07/31 11:19:26 sos Exp $
- * $DragonFly: src/sys/dev/disk/ata/atapi-tape.c,v 1.15 2006/04/30 17:22:16 dillon Exp $
+ * $DragonFly: src/sys/dev/disk/ata/atapi-tape.c,v 1.16 2006/07/28 02:17:35 dillon Exp $
  */
 
 #include "opt_ata.h"
@@ -55,23 +55,14 @@ static      d_close_t       astclose;
 static d_ioctl_t       astioctl;
 static d_strategy_t    aststrategy;
 
-static struct cdevsw ast_cdevsw = {
-       /* name */      "ast",
-       /* maj */       119,
-       /* flags */     D_TAPE | D_TRACKCLOSE,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      astopen,
-       /* close */     astclose,
-       /* read */      physread,
-       /* write */     physwrite,
-       /* ioctl */     astioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  aststrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops ast_ops = {
+       { "ast", 119, D_TAPE | D_TRACKCLOSE },
+       .d_open =       astopen,
+       .d_close =      astclose,
+       .d_read =       physread,
+       .d_write =      physwrite,
+       .d_ioctl =      astioctl,
+       .d_strategy =   aststrategy
 };
 
 /* prototypes */
@@ -137,12 +128,12 @@ astattach(struct ata_device *atadev)
                      DEVSTAT_NO_ORDERED_TAGS,
                      DEVSTAT_TYPE_SEQUENTIAL | DEVSTAT_TYPE_IF_IDE,
                      DEVSTAT_PRIORITY_TAPE);
-    cdevsw_add(&ast_cdevsw, dkunitmask(), dkmakeunit(stp->lun));
-    dev = make_dev(&ast_cdevsw, dkmakeminor(stp->lun, 0, 0),
+    dev_ops_add(&ast_ops, dkunitmask(), dkmakeunit(stp->lun));
+    dev = make_dev(&ast_ops, dkmakeminor(stp->lun, 0, 0),
                   UID_ROOT, GID_OPERATOR, 0640, "ast%d", stp->lun);
     dev->si_drv1 = stp;
     dev->si_iosize_max = 256 * DEV_BSIZE;
-    dev = make_dev(&ast_cdevsw, dkmakeminor(stp->lun, 0, 1),
+    dev = make_dev(&ast_ops, dkmakeminor(stp->lun, 0, 1),
                   UID_ROOT, GID_OPERATOR, 0640, "nast%d", stp->lun);
     dev->si_drv1 = stp;
     dev->si_iosize_max = 256 * DEV_BSIZE;
@@ -167,7 +158,7 @@ astdetach(struct ata_device *atadev)
        biodone(bio);
     }
     devstat_remove_entry(&stp->stats);
-    cdevsw_remove(&ast_cdevsw, dkunitmask(), dkmakeunit(stp->lun));
+    dev_ops_remove(&ast_ops, dkunitmask(), dkmakeunit(stp->lun));
     ata_free_name(atadev);
     ata_free_lun(&ast_lun_map, stp->lun);
     free(stp, M_AST);
@@ -254,8 +245,9 @@ ast_describe(struct ast_softc *stp)
 }
 
 static int
-astopen(dev_t dev, int flags, int fmt, struct thread *td)
+astopen(struct dev_open_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
     struct ast_softc *stp = dev->si_drv1;
 
     if (!stp)
@@ -279,8 +271,9 @@ astopen(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int 
-astclose(dev_t dev, int flags, int fmt, struct thread *td)
+astclose(struct dev_close_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
     struct ast_softc *stp = dev->si_drv1;
 
     /* flush buffers, some drives fail here, they should report ctl = 0 */
@@ -307,15 +300,16 @@ astclose(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int 
-astioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
+astioctl(struct dev_ioctl_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
     struct ast_softc *stp = dev->si_drv1;
     int error = 0;
 
-    switch (cmd) {
+    switch (ap->a_cmd) {
     case MTIOCGET:
        {
-           struct mtget *g = (struct mtget *) addr;
+           struct mtget *g = (struct mtget *) ap->a_data;
 
            bzero(g, sizeof(struct mtget));
            g->mt_type = 7;
@@ -333,7 +327,7 @@ astioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
     case MTIOCTOP:
        {       
            int i;
-           struct mtop *mt = (struct mtop *)addr;
+           struct mtop *mt = (struct mtop *)ap->a_data;
 
            switch ((int16_t) (mt->mt_op)) {
 
@@ -394,7 +388,7 @@ astioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
 
            if ((error = ast_read_position(stp, 0, &position)))
                break;
-           *(u_int32_t *)addr = position.tape;
+           *(u_int32_t *)ap->a_data = position.tape;
            break;
        }
     case MTIOCRDHPOS:
@@ -403,14 +397,14 @@ astioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
 
            if ((error = ast_read_position(stp, 1, &position)))
                break;
-           *(u_int32_t *)addr = position.tape;
+           *(u_int32_t *)ap->a_data = position.tape;
            break;
        }
     case MTIOCSLOCATE:
-       error = ast_locate(stp, 0, *(u_int32_t *)addr);
+       error = ast_locate(stp, 0, *(u_int32_t *)ap->a_data);
        break;
     case MTIOCHLOCATE:
-       error = ast_locate(stp, 1, *(u_int32_t *)addr);
+       error = ast_locate(stp, 1, *(u_int32_t *)ap->a_data);
        break;
     default:
        error = ENOTTY;
@@ -418,9 +412,11 @@ astioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
     return error;
 }
 
-static void 
-aststrategy(dev_t dev, struct bio *bio)
+static int 
+aststrategy(struct dev_strategy_args *ap)
 {
+    dev_t dev = ap->a_head.a_dev;
+    struct bio *bio = ap->a_bio;
     struct buf *bp = bio->bio_buf;
     struct ast_softc *stp = dev->si_drv1;
 
@@ -428,20 +424,20 @@ aststrategy(dev_t dev, struct bio *bio)
        bp->b_flags |= B_ERROR;
        bp->b_error = ENXIO;
        biodone(bio);
-       return;
+       return(0);
     }
 
     /* if it's a null transfer, return immediatly. */
     if (bp->b_bcount == 0) {
        bp->b_resid = 0;
        biodone(bio);
-       return;
+       return(0);
     }
     if (bp->b_cmd != BUF_CMD_READ && (stp->flags & F_WRITEPROTECT)) {
        bp->b_flags |= B_ERROR;
        bp->b_error = EPERM;
        biodone(bio);
-       return;
+       return(0);
     }
        
     /* check for != blocksize requests */
@@ -451,7 +447,7 @@ aststrategy(dev_t dev, struct bio *bio)
        bp->b_flags |= B_ERROR;
        bp->b_error = EIO;
        biodone(bio);
-       return;
+       return(0);
     }
 
     /* warn about transfers bigger than the device suggests */
@@ -467,6 +463,7 @@ aststrategy(dev_t dev, struct bio *bio)
     bioq_insert_tail(&stp->bio_queue, bio);
     crit_exit();
     ata_start(stp->device->channel);
+    return(0);
 }
 
 void 
index aeda097..3f6f1fd 100644 (file)
@@ -1,5 +1,5 @@
 /* $FreeBSD: src/sys/dev/ccd/ccd.c,v 1.73.2.1 2001/09/11 09:49:52 kris Exp $ */
-/* $DragonFly: src/sys/dev/disk/ccd/ccd.c,v 1.32 2006/05/06 02:43:02 dillon Exp $ */
+/* $DragonFly: src/sys/dev/disk/ccd/ccd.c,v 1.33 2006/07/28 02:17:35 dillon Exp $ */
 
 /*     $NetBSD: ccd.c,v 1.22 1995/12/08 19:13:26 thorpej Exp $ */
 
@@ -176,23 +176,16 @@ static d_psize_t ccdsize;
 
 #define CDEV_MAJOR 74
 
-static struct cdevsw ccd_cdevsw = {
-       /* name */      "ccd",
-       /* maj */       CDEV_MAJOR,
-       /* flags */     D_DISK,
-       /* port */      NULL,
-       /* clone */     NULL,
-       /* open */      ccdopen,
-       /* close */     ccdclose,
-       /* read */      physread,
-       /* write */     physwrite,
-       /* ioctl */     ccdioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  ccdstrategy,
-       /* dump */      ccddump,
-       /* psize */     ccdsize
+static struct dev_ops ccd_ops = {
+       { "ccd", CDEV_MAJOR, D_DISK },
+       .d_open =       ccdopen,
+       .d_close =      ccdclose,
+       .d_read =       physread,
+       .d_write =      physwrite,
+       .d_ioctl =      ccdioctl,
+       .d_strategy =   ccdstrategy,
+       .d_dump =       ccddump,
+       .d_psize =      ccdsize
 };
 
 /* called during module initialization */
@@ -205,8 +198,8 @@ static      void ccdiodone (struct bio *bio);
 static void ccdstart (struct ccd_softc *, struct bio *);
 static void ccdinterleave (struct ccd_softc *, int);
 static void ccdintr (struct ccd_softc *, struct bio *);
-static int ccdinit (struct ccddevice *, char **, struct thread *);
-static int ccdlookup (char *, struct thread *td, struct vnode **);
+static int ccdinit (struct ccddevice *, char **, struct ucred *);
+static int ccdlookup (char *, struct vnode **);
 static void ccdbuffer (struct ccdbuf **ret, struct ccd_softc *,
                struct bio *, off_t, caddr_t, long);
 static void ccdgetdisklabel (dev_t);
@@ -315,7 +308,7 @@ ccdattach(void)
                            M_WAITOK | M_ZERO);
        numccd = num;
 
-       cdevsw_add(&ccd_cdevsw, 0, 0);
+       dev_ops_add(&ccd_ops, 0, 0);
        /* XXX: is this necessary? */
        for (i = 0; i < numccd; ++i)
                ccddevs[i].ccd_dk = -1;
@@ -345,7 +338,7 @@ ccd_modevent(module_t mod, int type, void *data)
 DEV_MODULE(ccd, ccd_modevent, NULL);
 
 static int
-ccdinit(struct ccddevice *ccd, char **cpaths, struct thread *td)
+ccdinit(struct ccddevice *ccd, char **cpaths, struct ucred *cred)
 {
        struct ccd_softc *cs = &ccd_softc[ccd->ccd_unit];
        struct ccdcinfo *ci = NULL;     /* XXX */
@@ -358,10 +351,6 @@ ccdinit(struct ccddevice *ccd, char **cpaths, struct thread *td)
        struct ccdgeom *ccg = &cs->sc_geom;
        char tmppath[MAXPATHLEN];
        int error = 0;
-       struct ucred *cred;
-
-       KKASSERT(td->td_proc);
-       cred = td->td_proc->p_ucred;
 
 #ifdef DEBUG
        if (ccddebug & (CCDB_FOLLOW|CCDB_INIT))
@@ -673,8 +662,9 @@ ccdinterleave(struct ccd_softc *cs, int unit)
 
 /* ARGSUSED */
 static int
-ccdopen(dev_t dev, int flags, int fmt, d_thread_t *td)
+ccdopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int unit = ccdunit(dev);
        struct ccd_softc *cs;
        struct disklabel *lp;
@@ -719,8 +709,9 @@ ccdopen(dev_t dev, int flags, int fmt, d_thread_t *td)
 
 /* ARGSUSED */
 static int
-ccdclose(dev_t dev, int flags, int fmt, d_thread_t *td)
+ccdclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int unit = ccdunit(dev);
        struct ccd_softc *cs;
        int error = 0, part;
@@ -745,9 +736,11 @@ ccdclose(dev_t dev, int flags, int fmt, d_thread_t *td)
        return (0);
 }
 
-static void
-ccdstrategy(dev_t dev, struct bio *bio)
+static int
+ccdstrategy(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        int unit = ccdunit(dev);
        struct bio *nbio;
        struct buf *bp = bio->bio_buf;
@@ -822,7 +815,7 @@ ccdstrategy(dev_t dev, struct bio *bio)
        crit_enter();
        ccdstart(cs, nbio);
        crit_exit();
-       return;
+       return(0);
 
        /*
         * note: bio, not nbio, is valid at the done label.
@@ -834,6 +827,7 @@ error:
        bp->b_flags |= B_ERROR | B_INVAL;
 done:
        biodone(bio);
+       return(0);
 }
 
 static void
@@ -1263,20 +1257,17 @@ ccdiodone(struct bio *bio)
 }
 
 static int
-ccdioctl(dev_t dev, u_long cmd, caddr_t data, int flag, d_thread_t *td)
+ccdioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int unit = ccdunit(dev);
        int i, j, lookedup = 0, error = 0;
        int part, pmask;
        struct ccd_softc *cs;
-       struct ccd_ioctl *ccio = (struct ccd_ioctl *)data;
+       struct ccd_ioctl *ccio = (struct ccd_ioctl *)ap->a_data;
        struct ccddevice ccd;
        char **cpp;
        struct vnode **vpp;
-       struct ucred *cred;
-
-       KKASSERT(td->td_proc != NULL);
-       cred = td->td_proc->p_ucred;
 
        if (unit >= numccd)
                return (ENXIO);
@@ -1284,12 +1275,12 @@ ccdioctl(dev_t dev, u_long cmd, caddr_t data, int flag, d_thread_t *td)
 
        bzero(&ccd, sizeof(ccd));
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case CCDIOCSET:
                if (cs->sc_flags & CCDF_INITED)
                        return (EBUSY);
 
-               if ((flag & FWRITE) == 0)
+               if ((ap->a_fflag & FWRITE) == 0)
                        return (EBADF);
 
                if ((error = ccdlock(cs)) != 0)
@@ -1350,7 +1341,7 @@ ccdioctl(dev_t dev, u_long cmd, caddr_t data, int flag, d_thread_t *td)
                        if (ccddebug & CCDB_INIT)
                                printf("ccdioctl: lookedup = %d\n", lookedup);
 #endif
-                       if ((error = ccdlookup(cpp[i], td, &vpp[i])) != 0) {
+                       if ((error = ccdlookup(cpp[i], &vpp[i])) != 0) {
                                for (j = 0; j < lookedup; ++j)
                                        (void)vn_close(vpp[j], FREAD|FWRITE);
                                free(vpp, M_DEVBUF);
@@ -1367,7 +1358,7 @@ ccdioctl(dev_t dev, u_long cmd, caddr_t data, int flag, d_thread_t *td)
                /*
                 * Initialize the ccd.  Fills in the softc for us.
                 */
-               if ((error = ccdinit(&ccd, cpp, td)) != 0) {
+               if ((error = ccdinit(&ccd, cpp, ap->a_cred)) != 0) {
                        for (j = 0; j < lookedup; ++j)
                                (void)vn_close(vpp[j], FREAD|FWRITE);
                        bzero(&ccd_softc[unit], sizeof(struct ccd_softc));
@@ -1394,7 +1385,7 @@ ccdioctl(dev_t dev, u_long cmd, caddr_t data, int flag, d_thread_t *td)
                if ((cs->sc_flags & CCDF_INITED) == 0)
                        return (ENXIO);
 
-               if ((flag & FWRITE) == 0)
+               if ((ap->a_fflag & FWRITE) == 0)
                        return (EBADF);
 
                if ((error = ccdlock(cs)) != 0)
@@ -1462,15 +1453,15 @@ ccdioctl(dev_t dev, u_long cmd, caddr_t data, int flag, d_thread_t *td)
                if ((cs->sc_flags & CCDF_INITED) == 0)
                        return (ENXIO);
 
-               *(struct disklabel *)data = cs->sc_label;
+               *(struct disklabel *)ap->a_data = cs->sc_label;
                break;
 
        case DIOCGPART:
                if ((cs->sc_flags & CCDF_INITED) == 0)
                        return (ENXIO);
 
-               ((struct partinfo *)data)->disklab = &cs->sc_label;
-               ((struct partinfo *)data)->part =
+               ((struct partinfo *)ap->a_data)->disklab = &cs->sc_label;
+               ((struct partinfo *)ap->a_data)->part =
                    &cs->sc_label.d_partitions[ccdpart(dev)];
                break;
 
@@ -1479,7 +1470,7 @@ ccdioctl(dev_t dev, u_long cmd, caddr_t data, int flag, d_thread_t *td)
                if ((cs->sc_flags & CCDF_INITED) == 0)
                        return (ENXIO);
 
-               if ((flag & FWRITE) == 0)
+               if ((ap->a_fflag & FWRITE) == 0)
                        return (EBADF);
 
                if ((error = ccdlock(cs)) != 0)
@@ -1488,9 +1479,9 @@ ccdioctl(dev_t dev, u_long cmd, caddr_t data, int flag, d_thread_t *td)
                cs->sc_flags |= CCDF_LABELLING;
 
                error = setdisklabel(&cs->sc_label,
-                   (struct disklabel *)data, 0);
+                   (struct disklabel *)ap->a_data, 0);
                if (error == 0) {
-                       if (cmd == DIOCWDINFO) {
+                       if (ap->a_cmd == DIOCWDINFO) {
                                dev_t cdev = CCDLABELDEV(dev);
                                error = writedisklabel(cdev, &cs->sc_label);
                        }
@@ -1508,9 +1499,9 @@ ccdioctl(dev_t dev, u_long cmd, caddr_t data, int flag, d_thread_t *td)
                if ((cs->sc_flags & CCDF_INITED) == 0)
                        return (ENXIO);
 
-               if ((flag & FWRITE) == 0)
+               if ((ap->a_fflag & FWRITE) == 0)
                        return (EBADF);
-               if (*(int *)data != 0)
+               if (*(int *)ap->a_data != 0)
                        cs->sc_flags |= CCDF_WLABEL;
                else
                        cs->sc_flags &= ~CCDF_WLABEL;
@@ -1524,12 +1515,13 @@ ccdioctl(dev_t dev, u_long cmd, caddr_t data, int flag, d_thread_t *td)
 }
 
 static int
-ccdsize(dev_t dev)
+ccdsize(struct dev_psize_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct ccd_softc *cs;
        int part, size;
 
-       if (ccdopen(dev, 0, S_IFCHR, curthread))
+       if (dev_dopen(dev, 0, S_IFCHR, proc0.p_ucred))
                return (-1);
 
        cs = &ccd_softc[ccdunit(dev)];
@@ -1543,14 +1535,15 @@ ccdsize(dev_t dev)
        else
                size = cs->sc_label.d_partitions[part].p_size;
 
-       if (ccdclose(dev, 0, S_IFCHR, curthread))
+       if (dev_dclose(dev, 0, S_IFCHR))
                return (-1);
 
-       return (size);
+       ap->a_result = size;
+       return(0);
 }
 
 static int
-ccddump(dev_t dev, u_int count, u_int blkno, u_int secsize)
+ccddump(struct dev_dump_args *ap)
 {
        /* Not implemented. */
        return ENXIO;
@@ -1562,15 +1555,12 @@ ccddump(dev_t dev, u_int count, u_int blkno, u_int secsize)
  * set *vpp to the file's vnode.
  */
 static int
-ccdlookup(char *path, struct thread *td, struct vnode **vpp)
+ccdlookup(char *path, struct vnode **vpp)
 {
        struct nlookupdata nd;
-       struct ucred *cred;
        struct vnode *vp;
        int error;
 
-       KKASSERT(td->td_proc);
-       cred = td->td_proc->p_ucred;
        *vpp = NULL;
 
        error = nlookup_init(&nd, path, UIO_USERSPACE, NLC_FOLLOW|NLC_LOCKVP);
index 3cdc443..af21f65 100644 (file)
@@ -51,7 +51,7 @@
  *
  *     from:   @(#)fd.c        7.4 (Berkeley) 5/25/91
  * $FreeBSD: src/sys/isa/fd.c,v 1.176.2.8 2002/05/15 21:56:14 joerg Exp $
- * $DragonFly: src/sys/dev/disk/fd/fd.c,v 1.30 2006/05/24 21:50:11 dillon Exp $
+ * $DragonFly: src/sys/dev/disk/fd/fd.c,v 1.31 2006/07/28 02:17:35 dillon Exp $
  *
  */
 
@@ -234,7 +234,7 @@ static timeout_t fd_iotimeout;
 static timeout_t fd_pseudointr;
 static int fdstate(struct fdc_data *);
 static int retrier(struct fdc_data *);
-static int fdformat(dev_t, struct fd_formb *, struct thread *);
+static int fdformat(dev_t, struct fd_formb *, struct ucred *);
 
 static int enable_fifo(fdc_p fdc);
 
@@ -329,23 +329,14 @@ static    d_close_t       fdclose;
 static d_ioctl_t       fdioctl;
 static d_strategy_t    fdstrategy;
 
-static struct cdevsw fd_cdevsw = {
-       /* name */      "fd",
-       /* maj */       FD_CDEV_MAJOR,
-       /* flags */     D_DISK,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      Fdopen,
-       /* close */     fdclose,
-       /* read */      physread,
-       /* write */     physwrite,
-       /* ioctl */     fdioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  fdstrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops fd_ops = {
+       { "fd", FD_CDEV_MAJOR, D_DISK },
+       .d_open =       Fdopen,
+       .d_close =      fdclose,
+       .d_read =       physread,
+       .d_write =      physwrite,
+       .d_ioctl =      fdioctl,
+       .d_strategy =   fdstrategy,
 };
 
 static int
@@ -1026,8 +1017,8 @@ fd_attach(device_t dev)
 
        fd = device_get_softc(dev);
 
-       cdevsw_add(&fd_cdevsw, -1 << 6, fd->fdu << 6);
-       make_dev(&fd_cdevsw, (fd->fdu << 6),
+       dev_ops_add(&fd_ops, -1 << 6, fd->fdu << 6);
+       make_dev(&fd_ops, (fd->fdu << 6),
                UID_ROOT, GID_OPERATOR, 0640, "rfd%d", fd->fdu);
 
 #if 0
@@ -1267,8 +1258,9 @@ out_fdc(struct fdc_data *fdc, int x)
 /*                           fdopen/fdclose                                 */
 /****************************************************************************/
 int
-Fdopen(dev_t dev, int flags, int mode, struct thread *td)
+Fdopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        fdu_t fdu = FDUNIT(minor(dev));
        int type = FDTYPE(minor(dev));
        fd_p    fd;
@@ -1362,8 +1354,9 @@ Fdopen(dev_t dev, int flags, int mode, struct thread *td)
 }
 
 int
-fdclose(dev_t dev, int flags, int mode, struct thread *td)
+fdclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        fdu_t fdu = FDUNIT(minor(dev));
        struct fd_data *fd;
 
@@ -1377,9 +1370,11 @@ fdclose(dev_t dev, int flags, int mode, struct thread *td)
 /****************************************************************************/
 /*                               fdstrategy                                 */
 /****************************************************************************/
-void
-fdstrategy(dev_t dev, struct bio *bio)
+int
+fdstrategy(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp = bio->bio_buf;
        unsigned nblocks, blknum, cando;
        fdu_t   fdu;
@@ -1454,10 +1449,11 @@ fdstrategy(dev_t dev, struct bio *bio)
 
        fdstart(fdc);
        crit_exit();
-       return;
+       return(0);
 
 bad:
        biodone(bio);
+       return(0);
 }
 
 /***************************************************************\
@@ -2165,7 +2161,7 @@ fdformat_wakeup(struct bio *bio)
 }
 
 static int
-fdformat(dev_t dev, struct fd_formb *finfo, struct thread *td)
+fdformat(dev_t dev, struct fd_formb *finfo, struct ucred *cred)
 {
        fdu_t   fdu;
        fd_p    fd;
@@ -2226,8 +2222,9 @@ fdformat(dev_t dev, struct fd_formb *finfo, struct thread *td)
  */
 
 static int
-fdioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
+fdioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        fdu_t   fdu = FDUNIT(minor(dev));
        fd_p    fd = devclass_get_softc(fd_devclass, fdu);
        size_t fdblk;
@@ -2240,7 +2237,7 @@ fdioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
 
        fdblk = 128 << fd->ft->secsize;
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case DIOCGDINFO:
                bzero(buffer, sizeof (buffer));
                dl = (struct disklabel *)buffer;
@@ -2255,26 +2252,26 @@ fdioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
                else
                        error = EINVAL;
 
-               *(struct disklabel *)addr = *dl;
+               *(struct disklabel *)ap->a_data = *dl;
                break;
 
        case DIOCSDINFO:
-               if ((flag & FWRITE) == 0)
+               if ((ap->a_fflag & FWRITE) == 0)
                        error = EBADF;
                break;
 
        case DIOCWLABEL:
-               if ((flag & FWRITE) == 0)
+               if ((ap->a_fflag & FWRITE) == 0)
                        error = EBADF;
                break;
 
        case DIOCWDINFO:
-               if ((flag & FWRITE) == 0) {
+               if ((ap->a_fflag & FWRITE) == 0) {
                        error = EBADF;
                        break;
                }
 
-               dl = (struct disklabel *)addr;
+               dl = (struct disklabel *)ap->a_data;
 
                if ((error = setdisklabel((struct disklabel *)buffer, dl,
                                          (u_long)0)) != 0)
@@ -2283,36 +2280,36 @@ fdioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct thread *td)
                error = writedisklabel(dev, (struct disklabel *)buffer);
                break;
        case FD_FORM:
-               if ((flag & FWRITE) == 0)
+               if ((ap->a_fflag & FWRITE) == 0)
                        error = EBADF;  /* must be opened for writing */
-               else if (((struct fd_formb *)addr)->format_version !=
+               else if (((struct fd_formb *)ap->a_data)->format_version !=
                        FD_FORMAT_VERSION)
                        error = EINVAL; /* wrong version of formatting prog */
                else
-                       error = fdformat(dev, (struct fd_formb *)addr, td);
+                       error = fdformat(dev, (struct fd_formb *)ap->a_data, ap->a_cred);
                break;
 
        case FD_GTYPE:                  /* get drive type */
-               *(struct fd_type *)addr = *fd->ft;
+               *(struct fd_type *)ap->a_data = *fd->ft;
                break;
 
        case FD_STYPE:                  /* set drive type */
                /* this is considered harmful; only allow for superuser */
-               if (suser(td) != 0)
+               if (suser_cred(ap->a_cred, 0) != 0)
                        return EPERM;
-               *fd->ft = *(struct fd_type *)addr;
+               *fd->ft = *(struct fd_type *)ap->a_data;
                break;
 
        case FD_GOPTS:                  /* get drive options */
-               *(int *)addr = fd->options;
+               *(int *)ap->a_data = fd->options;
                break;
 
        case FD_SOPTS:                  /* set drive options */
-               fd->options = *(int *)addr;
+               fd->options = *(int *)ap->a_data;
                break;
 
        case FD_GSTAT:
-               fsp = (struct fdc_status *)addr;
+               fsp = (struct fdc_status *)ap->a_data;
                if ((fd->fdc->flags & FDC_STAT_VALID) == 0)
                        return EINVAL;
                memcpy(fsp->status, fd->fdc->status, 7 * sizeof(u_int));
index f3c1f87..8406bb2 100644 (file)
@@ -1,5 +1,5 @@
 /* $FreeBSD: src/sys/dev/isp/isp_freebsd.c,v 1.32.2.20 2002/10/11 18:49:25 mjacob Exp $ */
-/* $DragonFly: src/sys/dev/disk/isp/isp_freebsd.c,v 1.13 2005/06/06 22:51:54 corecode Exp $ */
+/* $DragonFly: src/sys/dev/disk/isp/isp_freebsd.c,v 1.14 2006/07/28 02:17:35 dillon Exp $ */
 /*
  * Platform (FreeBSD) dependent common attachment code for Qlogic adapters.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  */
-#include "isp_freebsd.h"
 #include <sys/unistd.h>
 #include <sys/kthread.h>
-#include <machine/stdarg.h>    /* for use by isp_prt below */
 #include <sys/conf.h>
+#include <sys/device.h>
 #include <sys/ioccom.h>
-#include "isp_ioctl.h"
+#include <machine/stdarg.h>    /* for use by isp_prt below */
 
+#include "isp_ioctl.h"
+#include "isp_freebsd.h"
 
 static d_ioctl_t ispioctl;
 static void isp_intr_enable(void *);
@@ -45,23 +46,11 @@ static void isp_action(struct cam_sim *, union ccb *);
 
 
 #define ISP_CDEV_MAJOR 248
-static struct cdevsw isp_cdevsw = {
-       /* name */      "isp",
-       /* maj */       ISP_CDEV_MAJOR,
-       /* flags */     D_TAPE,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      nullopen,
-       /* close */     nullclose,
-       /* read */      noread,
-       /* write */     nowrite,
-       /* ioctl */     ispioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  nostrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops isp_ops = {
+       { "isp", ISP_CDEV_MAJOR, D_TAPE },
+       .d_open =       nullopen,
+       .d_close =      nullclose,
+       .d_ioctl =      ispioctl,
 };
 
 static struct ispsoftc *isplist = NULL;
@@ -204,8 +193,8 @@ isp_attach(struct ispsoftc *isp)
        /*
         * Create device nodes
         */
-       cdevsw_add(&isp_cdevsw, -1, device_get_unit(isp->isp_dev));
-       make_dev(&isp_cdevsw, device_get_unit(isp->isp_dev), UID_ROOT,
+       dev_ops_add(&isp_ops, -1, device_get_unit(isp->isp_dev));
+       make_dev(&isp_ops, device_get_unit(isp->isp_dev), UID_ROOT,
            GID_OPERATOR, 0600, "%s", device_get_nameunit(isp->isp_dev));
 
        if (isp->isp_role != ISP_ROLE_NONE) {
@@ -239,8 +228,9 @@ isp_freeze_loopdown(struct ispsoftc *isp, char *msg)
 }
 
 static int
-ispioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, d_thread_t *td)
+ispioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct ispsoftc *isp;
        int retval = ENOTTY;
 
@@ -254,7 +244,7 @@ ispioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, d_thread_t *td)
        if (isp == NULL)
                return (ENXIO);
        
-       switch (cmd) {
+       switch (ap->a_cmd) {
 #ifdef ISP_FW_CRASH_DUMP
        case ISP_GET_FW_CRASH_DUMP:
        {
@@ -293,8 +283,8 @@ ispioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, d_thread_t *td)
        case ISP_SDBLEV:
        {
                int olddblev = isp->isp_dblev;
-               isp->isp_dblev = *(int *)addr;
-               *(int *)addr = olddblev;
+               isp->isp_dblev = *(int *)ap->a_data;
+               *(int *)ap->a_data = olddblev;
                retval = 0;
                break;
        }
@@ -328,7 +318,7 @@ ispioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, d_thread_t *td)
                break;
        case ISP_FC_GETDINFO:
        {
-               struct isp_fc_device *ifc = (struct isp_fc_device *) addr;
+               struct isp_fc_device *ifc = (struct isp_fc_device *) ap->a_data;
                struct lportdb *lp;
 
                if (ifc->loopid < 0 || ifc->loopid >= MAX_FC_TARG) {
@@ -351,7 +341,7 @@ ispioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, d_thread_t *td)
        }
        case ISP_GET_STATS:
        {
-               isp_stats_t *sp = (isp_stats_t *) addr;
+               isp_stats_t *sp = (isp_stats_t *) ap->a_data;
 
                MEMZERO(sp, sizeof (*sp));
                sp->isp_stat_version = ISP_STATS_VERSION;
@@ -385,7 +375,7 @@ ispioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, d_thread_t *td)
                break;
        case ISP_FC_GETHINFO:
        {
-               struct isp_hba_device *hba = (struct isp_hba_device *) addr;
+               struct isp_hba_device *hba = (struct isp_hba_device *) ap->a_data;
                MEMZERO(hba, sizeof (*hba));
                ISP_LOCK(isp);
                hba->fc_speed = FCPARAM(isp)->isp_gbspeed;
@@ -400,7 +390,7 @@ ispioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, d_thread_t *td)
        }
        case ISP_GET_FC_PARAM:
        {
-               struct isp_fc_param *f = (struct isp_fc_param *) addr;
+               struct isp_fc_param *f = (struct isp_fc_param *) ap->a_data;
 
                if (!IS_FC(isp)) {
                        retval = EINVAL;
@@ -433,7 +423,7 @@ ispioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, d_thread_t *td)
        }
        case ISP_SET_FC_PARAM:
        {
-               struct isp_fc_param *f = (struct isp_fc_param *) addr;
+               struct isp_fc_param *f = (struct isp_fc_param *) ap->a_data;
                u_int32_t param = f->parameter;
 
                if (!IS_FC(isp)) {
index c7e57df..7b68df4 100644 (file)
@@ -41,7 +41,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/isa/mcd.c,v 1.115 2000/01/29 16:17:34 peter Exp $
- * $DragonFly: src/sys/dev/disk/mcd/Attic/mcd.c,v 1.18 2006/04/30 17:22:16 dillon Exp $
+ * $DragonFly: src/sys/dev/disk/mcd/Attic/mcd.c,v 1.19 2006/07/28 02:17:35 dillon Exp $
  */
 static const char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore";
 
@@ -204,26 +204,17 @@ struct    isa_driver      mcddriver = { mcd_probe, mcd_attach, "mcd" };
 static d_open_t        mcdopen;
 static d_close_t       mcdclose;
 static d_ioctl_t       mcdioctl;
-static d_psize_t       mcdsize;
 static d_strategy_t    mcdstrategy;
 
-static struct cdevsw mcd_cdevsw = {
-       /* name */      "mcd",
-       /* maj */       MCD_CDEV_MAJOR,
-       /* flags */     D_DISK,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      mcdopen,
-       /* close */     mcdclose,
-       /* read */      physread,
-       /* write */     nowrite,
-       /* ioctl */     mcdioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  mcdstrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static int mcdsize(dev_t dev);
+
+static struct dev_ops mcd_ops = {
+       { "mcd", MCD_CDEV_MAJOR, D_DISK },
+       .d_open =       mcdopen,
+       .d_close =      mcdclose,
+       .d_read =       physread,
+       .d_ioctl =      mcdioctl,
+       .d_strategy =   mcdstrategy,
 };
 
 #define mcd_put(port,byte)     outb(port,byte)
@@ -260,20 +251,22 @@ int mcd_attach(struct isa_device *dev)
        mcd_configure(cd);
 #endif
        /* name filled in probe */
-       cdevsw_add(&mcd_cdevsw, dkunitmask(), dkmakeunit(unit));
-       make_dev(&mcd_cdevsw, dkmakeminor(unit, 0, 0),
+       dev_ops_add(&mcd_ops, dkunitmask(), dkmakeunit(unit));
+       make_dev(&mcd_ops, dkmakeminor(unit, 0, 0),
            UID_ROOT, GID_OPERATOR, 0640, "rmcd%da", unit);
-       make_dev(&mcd_cdevsw, dkmakeminor(unit, 0, RAW_PART),
+       make_dev(&mcd_ops, dkmakeminor(unit, 0, RAW_PART),
            UID_ROOT, GID_OPERATOR, 0640, "rmcd%dc", unit);
-       make_dev(&mcd_cdevsw, dkmakeminor(unit, 0, 0),
+       make_dev(&mcd_ops, dkmakeminor(unit, 0, 0),
            UID_ROOT, GID_OPERATOR, 0640, "mcd%da", unit);
-       make_dev(&mcd_cdevsw, dkmakeminor(unit, 0, RAW_PART),
+       make_dev(&mcd_ops, dkmakeminor(unit, 0, RAW_PART),
            UID_ROOT, GID_OPERATOR, 0640, "mcd%dc", unit);
        return 1;
 }
 
-int mcdopen(dev_t dev, int flags, int fmt, struct thread *td)
+int
+mcdopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int unit,part,phys,r,retry;
        struct mcd_data *cd;
 
@@ -364,8 +357,9 @@ MCD_TRACE("open: partition=%d, disksize = %ld, blksize=%d\n",
        return ENXIO;
 }
 
-int mcdclose(dev_t dev, int flags, int fmt, struct thread *td)
+int mcdclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int unit,part;
        struct mcd_data *cd;
 
@@ -388,9 +382,11 @@ int mcdclose(dev_t dev, int flags, int fmt, struct thread *td)
        return 0;
 }
 
-void
-mcdstrategy(dev_t dev, struct bio *bio)
+int
+mcdstrategy(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct bio *nbio;
        struct buf *bp = bio->bio_buf;
        struct mcd_data *cd;
@@ -450,7 +446,7 @@ MCD_TRACE("strategy: drive not valid\n");
 
        /* now check whether we can perform processing */
        mcd_start(unit);
-       return;
+       return(0);
 
        /*
         * These cases occur before nbio is set, use bio.
@@ -460,7 +456,7 @@ bad:
 done:
        bp->b_resid = bp->b_bcount;
        biodone(bio);
-       return;
+       return(0);
 }
 
 static void mcd_start(int unit)
@@ -514,8 +510,11 @@ static void mcd_start(int unit)
        return;
 }
 
-int mcdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
+int
+mcdioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       caddr_t addr = ap->a_data;
        struct mcd_data *cd;
        int unit,part,retry,r;
 
@@ -525,9 +524,9 @@ int mcdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
 
        if (mcd_getstat(unit, 1) == -1) /* detect disk change too */
                return EIO;
-MCD_TRACE("ioctl called 0x%lx\n", cmd);
+MCD_TRACE("ioctl called 0x%lx\n", ap->a_cmd);
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case CDIOCSETPATCH:
        case CDIOCGETVOL:
        case CDIOCSETVOL:
@@ -584,7 +583,7 @@ MCD_TRACE("ioctl called 0x%lx\n", cmd);
                        return ENXIO;
        }
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case DIOCGDINFO:
                *(struct disklabel *) addr = cd->dlabel;
                return 0;
@@ -600,7 +599,7 @@ MCD_TRACE("ioctl called 0x%lx\n", cmd);
                 */
        case DIOCWDINFO:
        case DIOCSDINFO:
-               if ((flags & FWRITE) == 0)
+               if ((ap->a_fflag & FWRITE) == 0)
                        return EBADF;
                else {
                        return setdisklabel(&cd->dlabel,
index d9284ed..21a2c75 100644 (file)
@@ -7,7 +7,7 @@
  * ----------------------------------------------------------------------------
  *
  * $FreeBSD: src/sys/dev/md/md.c,v 1.8.2.2 2002/08/19 17:43:34 jdp Exp $
- * $DragonFly: src/sys/dev/disk/md/md.c,v 1.12 2006/05/11 08:23:20 swildner Exp $
+ * $DragonFly: src/sys/dev/disk/md/md.c,v 1.13 2006/07/28 02:17:35 dillon Exp $
  *
  */
 
@@ -55,23 +55,14 @@ static d_strategy_t mdstrategy_malloc;
 static d_open_t mdopen;
 static d_ioctl_t mdioctl;
 
-static struct cdevsw md_cdevsw = {
-        /* name */      "md",
-        /* maj */       CDEV_MAJOR,
-        /* flags */     D_DISK | D_CANFREE | D_MEMDISK,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-        /* open */      mdopen,
-        /* close */     nullclose,
-        /* read */      physread,
-        /* write */     physwrite,
-        /* ioctl */     mdioctl,
-        /* poll */      nopoll,
-        /* mmap */      nommap,
-        /* strategy */  mdstrategy,
-        /* dump */      nodump,
-        /* psize */     nopsize,
+static struct dev_ops md_ops = {
+       { "md", CDEV_MAJOR, D_DISK | D_CANFREE | D_MEMDISK },
+        .d_open =      mdopen,
+        .d_close =     nullclose,
+        .d_read =      physread,
+        .d_write =     physwrite,
+        .d_ioctl =     mdioctl,
+        .d_strategy =  mdstrategy,
 };
 
 struct md_s {
@@ -96,14 +87,15 @@ struct md_s {
 static int mdunits;
 
 static int
-mdopen(dev_t dev, int flag, int fmt, struct thread *td)
+mdopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct md_s *sc;
        struct disklabel *dl;
 
        if (md_debug)
-               printf("mdopen(%s %x %x %p)\n",
-                       devtoname(dev), flag, fmt, td);
+               printf("mdopen(%s %x %x)\n",
+                       devtoname(dev), ap->a_oflags, ap->a_devtype);
 
        sc = dev->si_drv1;
        if (sc->unit + 1 == mdunits)
@@ -121,19 +113,22 @@ mdopen(dev_t dev, int flag, int fmt, struct thread *td)
 }
 
 static int
-mdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
+mdioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
 
        if (md_debug)
-               printf("mdioctl(%s %lx %p %x %p)\n",
-                       devtoname(dev), cmd, addr, flags, td);
+               printf("mdioctl(%s %lx %p %x)\n",
+                       devtoname(dev), ap->a_cmd, ap->a_data, ap->a_fflag);
 
        return (ENOIOCTL);
 }
 
-static void
-mdstrategy(dev_t dev, struct bio *bio)
+static int
+mdstrategy(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp = bio->bio_buf;
        struct md_s *sc;
 
@@ -145,16 +140,19 @@ mdstrategy(dev_t dev, struct bio *bio)
        bio->bio_driver_info = dev;
        sc = dev->si_drv1;
        if (sc->type == MD_MALLOC) {
-               mdstrategy_malloc(dev, bio);
+               mdstrategy_malloc(ap);
        } else {
-               mdstrategy_preload(dev, bio);
+               mdstrategy_preload(ap);
        }
+       return(0);
 }
 
 
-static void
-mdstrategy_malloc(dev_t dev, struct bio *bio)
+static int
+mdstrategy_malloc(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp = bio->bio_buf;
        unsigned secno, nsec, secval, uc;
        u_char *secp, **secpp, *dst;
@@ -175,7 +173,7 @@ mdstrategy_malloc(dev_t dev, struct bio *bio)
 
        if (sc->busy) {
                crit_exit();
-               return;
+               return(0);
        }
 
        sc->busy++;
@@ -289,12 +287,15 @@ mdstrategy_malloc(dev_t dev, struct bio *bio)
                crit_enter();
        }
        sc->busy = 0;
+       return(0);
 }
 
 
-static void
-mdstrategy_preload(dev_t dev, struct bio *bio)
+static int
+mdstrategy_preload(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp = bio->bio_buf;
        devstat_trans_flags dop;
        struct md_s *sc;
@@ -312,7 +313,7 @@ mdstrategy_preload(dev_t dev, struct bio *bio)
 
        if (sc->busy) {
                crit_exit();
-               return;
+               return(0);
        }
 
        sc->busy++;
@@ -350,6 +351,7 @@ mdstrategy_preload(dev_t dev, struct bio *bio)
                crit_enter();
        }
        sc->busy = 0;
+       return(0);
 }
 
 static struct md_s *
@@ -365,7 +367,7 @@ mdcreate(void)
                DEVSTAT_NO_ORDERED_TAGS, 
                DEVSTAT_TYPE_DIRECT | DEVSTAT_TYPE_IF_OTHER,
                DEVSTAT_PRIORITY_OTHER);
-       sc->dev = disk_create(sc->unit, &sc->disk, 0, &md_cdevsw);
+       sc->dev = disk_create(sc->unit, &sc->disk, 0, &md_ops);
        sc->dev->si_drv1 = sc;
        return (sc);
 }
index b9c635f..8ce5142 100644 (file)
@@ -42,7 +42,7 @@
 
 
 /* $FreeBSD: src/sys/i386/isa/scd.c,v 1.54 2000/01/29 16:00:30 peter Exp $ */
-/* $DragonFly: src/sys/dev/disk/scd/Attic/scd.c,v 1.17 2006/04/30 17:22:16 dillon Exp $ */
+/* $DragonFly: src/sys/dev/disk/scd/Attic/scd.c,v 1.18 2006/07/28 02:17:35 dillon Exp $ */
 
 /* Please send any comments to micke@dynas.se */
 
@@ -182,23 +182,13 @@ static    d_ioctl_t       scdioctl;
 static d_strategy_t    scdstrategy;
 
 #define CDEV_MAJOR 45
-static struct cdevsw scd_cdevsw = {
-       /* name */      "scd",
-       /* maj */       CDEV_MAJOR,
-       /* flags */     D_DISK,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      scdopen,
-       /* close */     scdclose,
-       /* read */      physread,
-       /* write */     nowrite,
-       /* ioctl */     scdioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  scdstrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops scd_ops = {
+       { "scd", CDEV_MAJOR, D_DISK },
+       .d_open =       scdopen,
+       .d_close =      scdclose,
+       .d_read =       physread,
+       .d_ioctl =      scdioctl,
+       .d_strategy =   scdstrategy,
 };
 
 
@@ -219,21 +209,22 @@ scd_attach(struct isa_device *dev)
        cd->audio_status = CD_AS_AUDIO_INVALID;
        bioq_init(&cd->bio_queue);
 
-       cdevsw_add(&scd_cdevsw, dkunitmask(), dkmakeunit(unit));
-       make_dev(&scd_cdevsw, dkmakeminor(unit, 0, 0),
+       dev_ops_add(&scd_ops, dkunitmask(), dkmakeunit(unit));
+       make_dev(&scd_ops, dkmakeminor(unit, 0, 0),
            UID_ROOT, GID_OPERATOR, 0640, "rscd%da", unit);
-       make_dev(&scd_cdevsw, dkmakeminor(unit, 0, RAW_PART),
+       make_dev(&scd_ops, dkmakeminor(unit, 0, RAW_PART),
            UID_ROOT, GID_OPERATOR, 0640, "rscd%dc", unit);
-       make_dev(&scd_cdevsw, dkmakeminor(unit, 0, 0),
+       make_dev(&scd_ops, dkmakeminor(unit, 0, 0),
            UID_ROOT, GID_OPERATOR, 0640, "scd%da", unit);
-       make_dev(&scd_cdevsw, dkmakeminor(unit, 0, RAW_PART),
+       make_dev(&scd_ops, dkmakeminor(unit, 0, RAW_PART),
            UID_ROOT, GID_OPERATOR, 0640, "scd%dc", unit);
        return 1;
 }
 
 static int
-scdopen(dev_t dev, int flags, int fmt, struct thread *td)
+scdopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int unit,part,phys;
        int rc;
        struct scd_data *cd;
@@ -286,8 +277,9 @@ scdopen(dev_t dev, int flags, int fmt, struct thread *td)
 }
 
 static int
-scdclose(dev_t dev, int flags, int fmt, struct thread *td)
+scdclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int unit,part,phys;
        struct scd_data *cd;
 
@@ -314,9 +306,11 @@ scdclose(dev_t dev, int flags, int fmt, struct thread *td)
        return 0;
 }
 
-static void
-scdstrategy(dev_t dev, struct bio *bio)
+static int
+scdstrategy(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp = bio->bio_buf;
        struct bio *nbio;
        struct scd_data *cd;
@@ -371,13 +365,14 @@ scdstrategy(dev_t dev, struct bio *bio)
 
        /* now check whether we can perform processing */
        scd_start(unit);
-       return;
+       return(0);
 
 bad:
        bp->b_flags |= B_ERROR;
 done:
        bp->b_resid = bp->b_bcount;
        biodone(bio);
+       return(0);
 }
 
 static void
@@ -419,8 +414,10 @@ scd_start(int unit)
 }
 
 static int
-scdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
+scdioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       caddr_t addr = ap->a_data;
        struct scd_data *cd;
        int unit,part;
 
@@ -428,12 +425,12 @@ scdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
        part = scd_part(dev);
        cd = scd_data + unit;
 
-       XDEBUG(1, ("scd%d: ioctl: cmd=0x%lx\n", unit, cmd));
+       XDEBUG(1, ("scd%d: ioctl: cmd=0x%lx\n", unit, ap->a_cmd));
 
        if (!(cd->flags & SCDVALID))
                return EIO;
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case DIOCGDINFO:
                *(struct disklabel *)addr = cd->dlabel;
                return 0;
@@ -489,7 +486,8 @@ scdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
 #endif
                return 0;
        default:
-               printf("scd%d: unsupported ioctl (cmd=0x%lx)\n", unit, cmd);
+               printf("scd%d: unsupported ioctl (cmd=0x%lx)\n",
+                       unit, ap->a_cmd);
                return ENOTTY;
        }
 }
index a7e3257..6751381 100644 (file)
@@ -39,7 +39,7 @@
  *
  *     from: @(#)vn.c  8.6 (Berkeley) 4/1/94
  * $FreeBSD: src/sys/dev/vn/vn.c,v 1.105.2.4 2001/11/18 07:11:00 dillon Exp $
- * $DragonFly: src/sys/dev/disk/vn/vn.c,v 1.24 2006/05/06 02:43:03 dillon Exp $
+ * $DragonFly: src/sys/dev/disk/vn/vn.c,v 1.25 2006/07/28 02:17:35 dillon Exp $
  */
 
 /*
@@ -94,28 +94,20 @@ static      d_strategy_t    vnstrategy;
 #define VN_BSIZE_BEST  8192
 
 /*
- * cdevsw
+ * dev_ops
  *     D_DISK          we want to look like a disk
  *     D_CANFREE       We support BUF_CMD_FREEBLKS
  */
 
-static struct cdevsw vn_cdevsw = {
-       /* name */      "vn",
-       /* maj */       CDEV_MAJOR,
-       /* flags */     D_DISK|D_CANFREE,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      vnopen,
-       /* close */     vnclose,
-       /* read */      physread,
-       /* write */     physwrite,
-       /* ioctl */     vnioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  vnstrategy,
-       /* dump */      nodump,
-       /* psize */     vnsize
+static struct dev_ops vn_ops = {
+       { "vn", CDEV_MAJOR, D_DISK | D_CANFREE },
+       .d_open =       vnopen,
+       .d_close =      vnclose,
+       .d_read =       physread,
+       .d_write =      physwrite,
+       .d_ioctl =      vnioctl,
+       .d_strategy =   vnstrategy,
+       .d_psize =      vnsize
 };
 
 struct vn_softc {
@@ -148,17 +140,18 @@ static u_long     vn_options;
 static int     vnsetcred (struct vn_softc *vn, struct ucred *cred);
 static void    vnclear (struct vn_softc *vn);
 static int     vn_modevent (module_t, int, void *);
-static int     vniocattach_file (struct vn_softc *, struct vn_ioctl *, dev_t dev, int flag, struct thread *p);
-static int     vniocattach_swap (struct vn_softc *, struct vn_ioctl *, dev_t dev, int flag, struct thread *p);
+static int     vniocattach_file (struct vn_softc *, struct vn_ioctl *, dev_t dev, int flag, struct ucred *cred);
+static int     vniocattach_swap (struct vn_softc *, struct vn_ioctl *, dev_t dev, int flag, struct ucred *cred);
 
 static int
-vnclose(dev_t dev, int flags, int mode, struct thread *td)
+vnclose(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct vn_softc *vn = dev->si_drv1;
 
        IFOPT(vn, VN_LABELS)
                if (vn->sc_slices != NULL)
-                       dsclose(dev, mode, vn->sc_slices);
+                       dsclose(dev, ap->a_devtype, vn->sc_slices);
        return (0);
 }
 
@@ -186,7 +179,7 @@ vnfindvn(dev_t dev)
                vn = malloc(sizeof *vn, M_DEVBUF, M_WAITOK | M_ZERO);
                vn->sc_unit = unit;
                dev->si_drv1 = vn;
-               vn->sc_devlist = make_dev(&vn_cdevsw, 0, UID_ROOT,
+               vn->sc_devlist = make_dev(&vn_ops, 0, UID_ROOT,
                                        GID_OPERATOR, 0640, "vn%d", unit);
                if (vn->sc_devlist->si_drv1 == NULL) {
                        reference_dev(vn->sc_devlist);
@@ -205,8 +198,9 @@ vnfindvn(dev_t dev)
 }
 
 static int
-vnopen(dev_t dev, int flags, int mode, struct thread *td)
+vnopen(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct vn_softc *vn;
 
        /*
@@ -229,12 +223,12 @@ vnopen(dev_t dev, int flags, int mode, struct thread *td)
        if (dev->si_bsize_best < VN_BSIZE_BEST)
                dev->si_bsize_best = VN_BSIZE_BEST;
 
-       if ((flags & FWRITE) && (vn->sc_flags & VNF_READONLY))
+       if ((ap->a_oflags & FWRITE) && (vn->sc_flags & VNF_READONLY))
                return (EACCES);
 
        IFOPT(vn, VN_FOLLOW)
-               printf("vnopen(%s, 0x%x, 0x%x, %p)\n",
-                   devtoname(dev), flags, mode, (void *)td);
+               printf("vnopen(%s, 0x%x, 0x%x)\n",
+                   devtoname(dev), ap->a_oflags, ap->a_devtype);
 
        /*
         * Initialize label
@@ -254,11 +248,11 @@ vnopen(dev_t dev, int flags, int mode, struct thread *td)
                        label.d_secperunit = vn->sc_size;
                        label.d_partitions[RAW_PART].p_size = vn->sc_size;
 
-                       return (dsopen(dev, mode, 0, &vn->sc_slices, &label));
+                       return (dsopen(dev, ap->a_devtype, 0, &vn->sc_slices, &label));
                }
                if (dkslice(dev) != WHOLE_DISK_SLICE ||
                    dkpart(dev) != RAW_PART ||
-                   mode != S_IFCHR) {
+                   ap->a_devtype != S_IFCHR) {
                        return (ENXIO);
                }
        }
@@ -274,9 +268,11 @@ vnopen(dev_t dev, int flags, int mode, struct thread *td)
  *
  *     Currently B_ASYNC is only partially handled - for OBJT_SWAP I/O only.
  */
-static void
-vnstrategy(dev_t dev, struct bio *bio)
+static int
+vnstrategy(struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp;
        struct bio *nbio;
        int unit;
@@ -296,7 +292,7 @@ vnstrategy(dev_t dev, struct bio *bio)
                bp->b_error = ENXIO;
                bp->b_flags |= B_ERROR;
                biodone(bio);
-               return;
+               return(0);
        }
 
        bp->b_resid = bp->b_bcount;
@@ -409,7 +405,7 @@ vnstrategy(dev_t dev, struct bio *bio)
                        /* operation complete */
                } else {
                        vm_pager_strategy(vn->sc_object, nbio);
-                       return;
+                       return(0);
                        /* NOT REACHED */
                }
        } else {
@@ -419,7 +415,7 @@ vnstrategy(dev_t dev, struct bio *bio)
                /* operation complete */
        }
        biodone(nbio);
-       return;
+       return(0);
 
        /*
         * Shortcuts / check failures on the original bio (not nbio).
@@ -429,24 +425,27 @@ bad:
        bp->b_flags |= B_ERROR | B_INVAL;
 done:
        biodone(bio);
+       return(0);
 }
 
 /* ARGSUSED */
 static int
-vnioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td)
+vnioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct vn_softc *vn;
        struct vn_ioctl *vio;
        int error;
        u_long *f;
 
        vn = dev->si_drv1;
-       IFOPT(vn,VN_FOLLOW)
-               printf("vnioctl(%s, 0x%lx, %p, 0x%x, %p): unit %d\n",
-                   devtoname(dev), cmd, (void *)data, flag, (void *)td,
+       IFOPT(vn,VN_FOLLOW) {
+               printf("vnioctl(%s, 0x%lx, %p, 0x%x): unit %d\n",
+                   devtoname(dev), ap->a_cmd, ap->a_data, ap->a_fflag,
                    dkunit(dev));
+       }
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case VNIOCATTACH:
        case VNIOCDETACH:
        case VNIOCGSET:
@@ -458,7 +457,8 @@ vnioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td)
 
        IFOPT(vn,VN_LABELS) {
                if (vn->sc_slices != NULL) {
-                       error = dsioctl(dev, cmd, data, flag, &vn->sc_slices);
+                       error = dsioctl(dev, ap->a_cmd, ap->a_data,
+                                       ap->a_fflag, &vn->sc_slices);
                        if (error != ENOIOCTL)
                                return (error);
                }
@@ -469,22 +469,22 @@ vnioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td)
 
     vn_specific:
 
-       error = suser(td);
+       error = suser_cred(ap->a_cred, 0);
        if (error)
                return (error);
 
-       vio = (struct vn_ioctl *)data;
-       f = (u_long*)data;
-       switch (cmd) {
+       vio = (struct vn_ioctl *)ap->a_data;
+       f = (u_long*)ap->a_data;
 
+       switch (ap->a_cmd) {
        case VNIOCATTACH:
                if (vn->sc_flags & VNF_INITED)
                        return(EBUSY);
 
                if (vio->vn_file == NULL)
-                       error = vniocattach_swap(vn, vio, dev, flag, td);
+                       error = vniocattach_swap(vn, vio, dev, ap->a_fflag, ap->a_cred);
                else
-                       error = vniocattach_file(vn, vio, dev, flag, td);
+                       error = vniocattach_file(vn, vio, dev, ap->a_fflag, ap->a_cred);
                break;
 
        case VNIOCDETACH:
@@ -539,15 +539,12 @@ vnioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td)
 
 static int
 vniocattach_file(struct vn_softc *vn, struct vn_ioctl *vio, dev_t dev,
-                int flag, struct thread *td)
+                int flag, struct ucred *cred)
 {
        struct vattr vattr;
        struct nlookupdata nd;
        int error, flags;
        struct vnode *vp;
-       struct proc *p = td->td_proc;
-
-       KKASSERT(p != NULL);
 
        flags = FREAD|FWRITE;
        error = nlookup_init(&nd, vio->vn_file, 
@@ -585,7 +582,7 @@ vniocattach_file(struct vn_softc *vn, struct vn_ioctl *vio, dev_t dev,
                vn->sc_size = (quad_t)vio->vn_size * PAGE_SIZE / vn->sc_secsize;
        else
                vn->sc_size = vattr.va_size / vn->sc_secsize;
-       error = vnsetcred(vn, p->p_ucred);
+       error = vnsetcred(vn, cred);
        if (error) {
                vn->sc_vp = NULL;
                vn_close(vp, flags);
@@ -602,7 +599,7 @@ vniocattach_file(struct vn_softc *vn, struct vn_ioctl *vio, dev_t dev,
                 * no other slices or labels are open.  Otherwise,
                 * we rely on VNIOCCLR not being abused.
                 */
-               error = vnopen(dev, flag, S_IFCHR, td);
+               error = dev_dopen(dev, flag, S_IFCHR, cred);
                if (error)
                        vnclear(vn);
        }
@@ -623,12 +620,10 @@ done:
 
 static int
 vniocattach_swap(struct vn_softc *vn, struct vn_ioctl *vio, dev_t dev,
-                int flag, struct thread *td)
+                int flag, struct ucred *cred)
 {
        int error;
-       struct proc *p = td->td_proc;
 
-       KKASSERT(p != NULL);
        /*
         * Range check.  Disallow negative sizes or any size less then the
         * size of a page.  Then round to a page.
@@ -661,7 +656,7 @@ vniocattach_swap(struct vn_softc *vn, struct vn_ioctl *vio, dev_t dev,
        }
        vn->sc_flags |= VNF_INITED;
 
-       error = vnsetcred(vn, p->p_ucred);
+       error = vnsetcred(vn, cred);
        if (error == 0) {
                IFOPT(vn, VN_LABELS) {
                        /*
@@ -671,7 +666,7 @@ vniocattach_swap(struct vn_softc *vn, struct vn_ioctl *vio, dev_t dev,
                         * no other slices or labels are open.  Otherwise,
                         * we rely on VNIOCCLR not being abused.
                         */
-                       error = vnopen(dev, flag, S_IFCHR, td);
+                       error = dev_dopen(dev, flag, S_IFCHR, cred);
                }
        }
        if (error == 0) {
@@ -757,18 +752,19 @@ vnclear(struct vn_softc *vn)
        vn->sc_size = 0;
 }
 
-static int
-vnsize(dev_t dev)
+static int
+vnsize(struct dev_psize_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct vn_softc *vn;
 
        vn = dev->si_drv1;
        if (!vn)
-               return(-1);
+               return(ENXIO);
        if ((vn->sc_flags & VNF_INITED) == 0)
-               return(-1);
-
-       return(vn->sc_size);
+               return(ENXIO);
+       ap->a_result = vn->sc_size;
+       return(0);
 }
 
 static int 
@@ -779,7 +775,7 @@ vn_modevent(module_t mod, int type, void *data)
 
        switch (type) {
        case MOD_LOAD:
-               cdevsw_add(&vn_cdevsw, 0, 0);
+               dev_ops_add(&vn_ops, 0, 0);
                break;
        case MOD_UNLOAD:
                /* fall through */
@@ -796,7 +792,7 @@ vn_modevent(module_t mod, int type, void *data)
                        }
                        free(vn, M_DEVBUF);
                }
-               cdevsw_remove(&vn_cdevsw, 0, 0);
+               dev_ops_remove(&vn_ops, 0, 0);
                break;
        default:
                break;
index 954b54d..54f62ff 100644 (file)
@@ -21,7 +21,7 @@
  *
  * Version 1.3, Thu Nov 11 12:09:13 MSK 1993
  * $FreeBSD: src/sys/i386/isa/wt.c,v 1.57.2.1 2000/08/08 19:49:53 peter Exp $
- * $DragonFly: src/sys/dev/disk/wt/wt.c,v 1.15 2006/05/01 01:32:11 swildner Exp $
+ * $DragonFly: src/sys/dev/disk/wt/wt.c,v 1.16 2006/07/28 02:17:35 dillon Exp $
  *
  */
 
@@ -185,23 +185,14 @@ static    d_strategy_t    wtstrategy;
 
 #define CDEV_MAJOR 10
 
-static struct cdevsw wt_cdevsw = {
-       /* name */      "wt",
-       /* maj */       CDEV_MAJOR,
-       /* flags */     0,
-       /* port */      NULL,
-       /* clone */     NULL,
-
-       /* open */      wtopen,
-       /* close */     wtclose,
-       /* read */      physread,
-       /* write */     physwrite,
-       /* ioctl */     wtioctl,
-       /* poll */      nopoll,
-       /* mmap */      nommap,
-       /* strategy */  wtstrategy,
-       /* dump */      nodump,
-       /* psize */     nopsize
+static struct dev_ops wt_ops = {
+       { "wt", CDEV_MAJOR, 0 },
+       .d_open =       wtopen,
+       .d_close =      wtclose,
+       .d_read =       physread,
+       .d_write =      physwrite,
+       .d_ioctl =      wtioctl,
+       .d_strategy =   wtstrategy,
 };
 
 
@@ -269,8 +260,8 @@ wtattach (struct isa_device *id)
        t->dens = -1;                           /* unknown density */
        isa_dmainit(t->chan, 1024);
 
-       cdevsw_add(&wt_cdevsw, -1, id->id_unit);
-       make_dev(&wt_cdevsw, id->id_unit, 0, 0, 0600, "rwt%d", id->id_unit);
+       dev_ops_add(&wt_ops, -1, id->id_unit);
+       make_dev(&wt_ops, id->id_unit, 0, 0, 0600, "rwt%d", id->id_unit);
        return (1);
 }
 
@@ -280,8 +271,9 @@ struct isa_driver wtdriver = { wtprobe, wtattach, "wt", };
  * Open routine, called on every device open.
  */
 static int
-wtopen (dev_t dev, int flag, int fmt, struct thread *td)
+wtopen (struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int u = minor (dev) & T_UNIT;
        wtinfo_t *t = wttab + u;
        int error;
@@ -301,11 +293,11 @@ wtopen (dev_t dev, int flag, int fmt, struct thread *td)
                        return (error);
 
                /* Check the controller status */
-               if (! wtsense (t, 0, (flag & FWRITE) ? 0 : TP_WRP)) {
+               if (! wtsense (t, 0, (ap->a_oflags & FWRITE) ? 0 : TP_WRP)) {
                        /* Bad status, reset the controller */
                        if (! wtreset (t))
                                return (EIO);
-                       if (! wtsense (t, 1, (flag & FWRITE) ? 0 : TP_WRP))
+                       if (! wtsense (t, 1, (ap->a_oflags & FWRITE) ? 0 : TP_WRP))
                                return (EIO);
                }
 
@@ -351,9 +343,9 @@ wtopen (dev_t dev, int flag, int fmt, struct thread *td)
 
        t->flags = TPINUSE;
 
-       if (flag & FREAD)
+       if (ap->a_oflags & FREAD)
                t->flags |= TPREAD;
-       if (flag & FWRITE)
+       if (ap->a_oflags & FWRITE)
                t->flags |= TPWRITE;
        return (0);
 }
@@ -362,8 +354,9 @@ wtopen (dev_t dev, int flag, int fmt, struct thread *td)
  * Close routine, called on last device close.
  */
 static int
-wtclose (dev_t dev, int flags, int fmt, struct thread *td)
+wtclose (struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int u = minor (dev) & T_UNIT;
        wtinfo_t *t = wttab + u;
 
@@ -411,8 +404,10 @@ done:
  * ioctl (int fd, MTIOCTOP, struct mtop *buf)   -- do BSD-like op
  */
 static int
-wtioctl (dev_t dev, u_long cmd, caddr_t arg, int flags, struct thread *td)
+wtioctl (struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       caddr_t arg = ap->a_data;
        int u = minor (dev) & T_UNIT;
        wtinfo_t *t = wttab + u;
        int error, count, op;
@@ -420,7 +415,7 @@ wtioctl (dev_t dev, u_long cmd, caddr_t arg, int flags, struct thread *td)
        if (u >= NWT || t->type == UNKNOWN)
                return (ENXIO);
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        default:
                return (EINVAL);
        case MTIOCIEOT:         /* ignore EOT errors */
@@ -508,9 +503,11 @@ wtioctl (dev_t dev, u_long cmd, caddr_t arg, int flags, struct thread *td)
 /*
  * Strategy routine.
  */
-static void
-wtstrategy (dev_t dev, struct bio *bio)
+static int
+wtstrategy (struct dev_strategy_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
+       struct bio *bio = ap->a_bio;
        struct buf *bp = bio->bio_buf;
        int u = minor(dev) & T_UNIT;
        wtinfo_t *t = wttab + u;
@@ -583,7 +580,7 @@ errxit:             bp->b_error = EIO;
 err2xit:       bp->b_flags |= B_ERROR;
        }
 xit:    biodone (bio);
-       return;
+       return(0);
 }
 
 /*
index 3b980c3..d48e099 100644 (file)
@@ -29,7 +29,7 @@
  *    Gareth Hughes <gareth@valinux.com>
  *
  * $FreeBSD: src/sys/dev/drm/drm_drv.h,v 1.13.2.1 2003/04/26 07:05:28 anholt Exp $
- * $DragonFly: src/sys/dev/drm/Attic/drm_drv.h,v 1.13 2006/06/13 08:12:01 dillon Exp $
+ * $DragonFly: src/sys/dev/drm/Attic/drm_drv.h,v 1.14 2006/07/28 02:17:36 dillon Exp $
  */
 
 /*
@@ -206,19 +206,14 @@ static drm_ioctl_desc_t             DRM(ioctls)[] = {
 const char *DRM(find_description)(int vendor, int device);
 
 #if defined(__DragonFly__) || defined(__FreeBSD__)
-static struct cdevsw DRM(cdevsw) = {
-       .d_name =       DRIVER_NAME,
-       .d_maj =        CDEV_MAJOR,
-       .d_flags =      D_TTY | D_TRACKCLOSE,
-       .d_port =       NULL,
-       .d_clone =      NULL,
-
-       .old_open =     DRM( open ),
-       .old_close =    DRM( close ),
-       .old_read =     DRM( read ),
-       .old_ioctl =    DRM( ioctl ),
-       .old_poll =     DRM( poll ),
-       .old_mmap =     DRM( mmap )
+static struct dev_ops DRM(ops) = {
+       { DRIVER_NAME, CDEV_MAJOR, D_TTY | D_TRACKCLOSE },
+       .d_open =       DRM(open),
+       .d_close =      DRM(close),
+       .d_read =       DRM(read),
+       .d_ioctl =      DRM(ioctl),
+       .d_poll =       DRM(poll),
+       .d_mmap =       DRM(mmap)
 };
 
 static int DRM(probe)(device_t dev)
@@ -654,8 +649,8 @@ static int DRM(init)( device_t nbdev )
        dev = device_get_softc(nbdev);
        memset( (void *)dev, 0, sizeof(*dev) );
        dev->device = nbdev;
-       cdevsw_add(&DRM(cdevsw), -1, unit);
-       dev->devnode = make_dev( &DRM(cdevsw),
+       dev_ops_add(&DRM(ops), -1, unit);
+       dev->devnode = make_dev( &DRM(ops),
                        unit,
                        DRM_DEV_UID,
                        DRM_DEV_GID,
@@ -774,7 +769,7 @@ static void DRM(cleanup)(device_t nbdev)
 #endif
        }
 #endif
-       cdevsw_remove(&DRM(cdevsw), -1, device_get_unit(nbdev));
+       dev_ops_remove(&DRM(ops), -1, device_get_unit(nbdev));
 
        DRM(takedown)( dev );
 
@@ -820,8 +815,9 @@ int DRM(version)( DRM_IOCTL_ARGS )
        return 0;
 }
 
-int DRM(open)(dev_t kdev, int flags, int fmt, DRM_STRUCTPROC *p)
+int DRM(open)(struct dev_open_args *ap)
 {
+       dev_t kdev = ap->a_head.a_dev;
        drm_device_t *dev = NULL;
        int retcode = 0;
 
@@ -829,7 +825,8 @@ int DRM(open)(dev_t kdev, int flags, int fmt, DRM_STRUCTPROC *p)
 
        DRM_DEBUG( "open_count = %d\n", dev->open_count );
 
-       retcode = DRM(open_helper)(kdev, flags, fmt, p, dev);
+       retcode = DRM(open_helper)(kdev, ap->a_oflags, ap->a_devtype,
+                                  curthread, dev);
 
        if ( !retcode ) {
                atomic_inc( &dev->counts[_DRM_STAT_OPENS] );
@@ -845,15 +842,16 @@ int DRM(open)(dev_t kdev, int flags, int fmt, DRM_STRUCTPROC *p)
        return retcode;
 }
 
-int DRM(close)(dev_t kdev, int flags, int fmt, DRM_STRUCTPROC *p)
+int DRM(close)(struct dev_close_args *ap)
 {
+       dev_t kdev = ap->a_head.a_dev;
        drm_file_t *priv;
        DRM_DEVICE;
        int retcode = 0;
        DRMFILE __unused filp = (void *)(DRM_CURRENTPID);
        
        DRM_DEBUG( "open_count = %d\n", dev->open_count );
-       priv = DRM(find_file_by_proc)(dev, p);
+       priv = DRM(find_file_by_proc)(dev, curthread);
        if (!priv) {
                DRM_DEBUG("can't find authenticator\n");
                return EINVAL;
@@ -934,7 +932,7 @@ int DRM(close)(dev_t kdev, int flags, int fmt, DRM_STRUCTPROC *p)
 #endif /* __NetBSD__ */
 
        DRM_LOCK;
-       priv = DRM(find_file_by_proc)(dev, p);
+       priv = DRM(find_file_by_proc)(dev, curthread);
        if (priv) {
                priv->refs--;
                if (!priv->refs) {
@@ -965,14 +963,14 @@ int DRM(close)(dev_t kdev, int flags, int fmt, DRM_STRUCTPROC *p)
 
 /* DRM(ioctl) is called whenever a process performs an ioctl on /dev/drm.
  */
-int DRM(ioctl)(dev_t kdev, u_long cmd, caddr_t data, int flags, 
-    DRM_STRUCTPROC *p)
+int DRM(ioctl)(struct dev_ioctl_args *ap)
 {
+       dev_t kdev = ap->a_head.a_dev;
        DRM_DEVICE;
        int retcode = 0;
        drm_ioctl_desc_t *ioctl;
        int (*func)(DRM_IOCTL_ARGS);
-       int nr = DRM_IOCTL_NR(cmd);
+       int nr = DRM_IOCTL_NR(ap->a_cmd);
        DRM_PRIV;
 
        atomic_inc( &dev->counts[_DRM_STAT_IOCTLS] );
@@ -980,36 +978,36 @@ int DRM(ioctl)(dev_t kdev, u_long cmd, caddr_t data, int flags,
 
 #if defined(__DragonFly__) || defined(__FreeBSD__)
        DRM_DEBUG( "pid=%d, cmd=0x%02lx, nr=0x%02x, dev 0x%lx, auth=%d\n",
-                DRM_CURRENTPID, cmd, nr, (long)dev->device, priv->authenticated );
+                DRM_CURRENTPID, ap->a_cmd, nr, (long)dev->device, priv->authenticated );
 #elif defined(__NetBSD__)
        DRM_DEBUG( "pid=%d, cmd=0x%02lx, nr=0x%02x, dev 0x%lx, auth=%d\n",
-                DRM_CURRENTPID, cmd, nr, (long)&dev->device, priv->authenticated );
+                DRM_CURRENTPID, ap->a_cmd, nr, (long)&dev->device, priv->authenticated );
 #endif
 
-       switch (cmd) {
+       switch (ap->a_cmd) {
        case FIOASYNC:
                dev->flags |= FASYNC;
                return 0;
 
 #if defined(__DragonFly__) || defined(__FreeBSD__)
        case FIOSETOWN:
-               return fsetown(*(int *)data, &dev->buf_sigio);
+               return fsetown(*(int *)ap->a_data, &dev->buf_sigio);
 
        case FIOGETOWN:
 #if defined(__FreeBSD__) && (__FreeBSD_version >= 500000)
-               *(int *) data = fgetown(&dev->buf_sigio);
+               *(int *) ap->a_data = fgetown(&dev->buf_sigio);
 #else
-               *(int *) data = fgetown(dev->buf_sigio);
+               *(int *) ap->a_data = fgetown(dev->buf_sigio);
 #endif
                return 0;
 #endif /* __FreeBSD__ */
 #ifdef __NetBSD__
        case TIOCSPGRP:
-               dev->buf_pgid = *(int *)data;
+               dev->buf_pgid = *(int *)ap->a_data;
                return 0;
 
        case TIOCGPGRP:
-               *(int *)data = dev->buf_pgid;
+               *(int *)ap->a_data = dev->buf_pgid;
                return 0;
 #endif /* __NetBSD__ */
        }
@@ -1023,11 +1021,11 @@ int DRM(ioctl)(dev_t kdev, u_long cmd, caddr_t data, int flags,
                if ( !func ) {
                        DRM_DEBUG( "no function\n" );
                        retcode = EINVAL;
-               } else if ( ( ioctl->root_only && DRM_SUSER(p) ) 
+               } else if ( ( ioctl->root_only && suser_cred(ap->a_cred, 0) ) 
                         || ( ioctl->auth_needed && !priv->authenticated ) ) {
                        retcode = EACCES;
                } else {
-                       retcode = func(kdev, cmd, data, flags, p, (void *)DRM_CURRENTPID);
+                       retcode = func(kdev, ap->a_cmd, ap->a_data, ap->a_fflag, curthread, (void *)DRM_CURRENTPID);
                }
        }
 
index 5c55282..4559aa8 100644 (file)
@@ -30,7 +30,7 @@
  *    Gareth Hughes <gareth@valinux.com>
  *
  * $FreeBSD: src/sys/dev/drm/drm_fops.h,v 1.7.2.1 2003/04/26 07:05:28 anholt Exp $
- * $DragonFly: src/sys/dev/drm/Attic/drm_fops.h,v 1.4 2004/02/13 01:23:57 joerg Exp $
+ * $DragonFly: src/sys/dev/drm/Attic/drm_fops.h,v 1.5 2006/07/28 02:17:36 dillon Exp $
  */
 
 #include "dev/drm/drmP.h"
@@ -100,12 +100,13 @@ int DRM(open_helper)(dev_t kdev, int flags, int fmt, DRM_STRUCTPROC *p,
 /* The DRM(read) and DRM(poll) are stubs to prevent spurious errors
  * on older X Servers (4.3.0 and earlier) */
 
-int DRM(read)(dev_t kdev, struct uio *uio, int ioflag)
+int DRM(read)(struct dev_read_args *ap)
 {
        return 0;
 }
 
-int DRM(poll)(dev_t kdev, int events, DRM_STRUCTPROC *p)
+int DRM(poll)(struct dev_poll_args *ap)
 {
+       ap->a_events = 0;
        return 0;
 }
index b2181da..59ac2b2 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * $FreeBSD: src/sys/dev/drm/drm_os_freebsd.h,v 1.10.2.1 2003/04/26 07:05:28 anholt Exp $
- * $DragonFly: src/sys/dev/drm/Attic/drm_os_freebsd.h,v 1.17 2006/06/04 21:09:49 dillon Exp $
+ * $DragonFly: src/sys/dev/drm/Attic/drm_os_freebsd.h,v 1.18 2006/07/28 02:17:36 dillon Exp $
  */
 #include <sys/param.h>
 #include <sys/queue.h>
@@ -9,6 +9,7 @@
 #include <sys/module.h>
 #include <sys/systm.h>
 #include <sys/conf.h>
+#include <sys/device.h>
 #include <sys/stat.h>
 #include <sys/proc.h>
 #include <sys/lock.h>
 #define DRM_ERR(v)             v
 
 #define DRM_PRIV                                       \
-       drm_file_t      *priv   = (drm_file_t *) DRM(find_file_by_proc)(dev, p); \
+       drm_file_t      *priv   = (drm_file_t *) DRM(find_file_by_proc)(dev, curthread); \
        if (!priv) {                                            \
                DRM_DEBUG("can't find authenticator\n");        \
                return EINVAL;                                  \
index bbd56a6..b3dde7b 100644 (file)
@@ -1,17 +1,23 @@
 /*
  * $FreeBSD: src/sys/dev/drm/drm_vm.h,v 1.6.2.1 2003/04/26 07:05:29 anholt Exp $
- * $DragonFly: src/sys/dev/drm/Attic/drm_vm.h,v 1.3 2004/02/13 01:23:57 joerg Exp $
+ * $DragonFly: src/sys/dev/drm/Attic/drm_vm.h,v 1.4 2006/07/28 02:17:36 dillon Exp $
  */
 
 #if defined(__FreeBSD__) && __FreeBSD_version >= 500102
 static int DRM(dma_mmap)(dev_t kdev, vm_offset_t offset, vm_paddr_t *paddr, 
     int prot)
-#elif defined(__DragonFly__) || defined(__FreeBSD__)
+#elif defined(__DragonFly__)
+static int DRM(dma_mmap)(struct dev_mmap_args *ap)
+#elif defined(__FreeBSD__)
 static int DRM(dma_mmap)(dev_t kdev, vm_offset_t offset, int prot)
 #elif defined(__NetBSD__)
 static paddr_t DRM(dma_mmap)(dev_t kdev, vm_offset_t offset, int prot)
 #endif
 {
+#ifdef __DragonFly__
+       dev_t kdev = ap->a_head.a_dev;
+       vm_offset_t offset = ap->a_offset;
+#endif
        DRM_DEVICE;
        drm_device_dma_t *dma    = dev->dma;
        unsigned long    physical;
@@ -24,7 +30,10 @@ static paddr_t DRM(dma_mmap)(dev_t kdev, vm_offset_t offset, int prot)
        physical = dma->pagelist[page];
 
        DRM_DEBUG("0x%08lx (page %lu) => 0x%08lx\n", (long)offset, page, physical);
-#if defined(__FreeBSD__) && __FreeBSD_version >= 500102
+#if defined(__DragonFly__)
+       ap->a_result = physical;
+       return 0;
+#elif defined(__FreeBSD__) && __FreeBSD_version >= 500102
        *paddr = physical;
        return 0;
 #else
@@ -35,12 +44,13 @@ static paddr_t DRM(dma_mmap)(dev_t kdev, vm_offset_t offset, int prot)
 #if defined(__FreeBSD__) && __FreeBSD_version >= 500102
 int DRM(mmap)(dev_t kdev, vm_offset_t offset, vm_paddr_t *paddr, 
     int prot)
-#elif defined(__DragonFly__) || defined(__FreeBSD__)
-int DRM(mmap)(dev_t kdev, vm_offset_t offset, int prot)
+#elif defined(__DragonFly__)
+int DRM(mmap)(struct dev_mmap_args *ap)
 #elif defined(__NetBSD__)
 paddr_t DRM(mmap)(dev_t kdev, off_t offset, int prot)
 #endif
 {
+       dev_t kdev = ap->a_head.a_dev;
        DRM_DEVICE;
        drm_local_map_t *map    = NULL;
        drm_map_list_entry_t *listentry=NULL;
@@ -56,12 +66,14 @@ paddr_t DRM(mmap)(dev_t kdev, off_t offset, int prot)
                return DRM_ERR(EACCES);
 
        if (dev->dma
-           && offset >= 0
-           && offset < ptoa(dev->dma->page_count))
+           && ap->a_offset >= 0
+           && ap->a_offset < ptoa(dev->dma->page_count))
 #if defined(__FreeBSD__) && __FreeBSD_version >= 500102
                return DRM(dma_mmap)(kdev, offset, paddr, prot);
+#elif defined(__DragonFly__)
+               return DRM(dma_mmap)(ap);
 #else
-               return DRM(dma_mmap)(kdev, offset, prot);
+               return DRM(dma_mmap)(kdev, ap->a_offset, ap->a_nprot);
 #endif
 
                                /* A sequential search of a linked list is
@@ -74,17 +86,17 @@ paddr_t DRM(mmap)(dev_t kdev, off_t offset, int prot)
        TAILQ_FOREACH(listentry, dev->maplist, link) {
                map = listentry->map;
 /*             DRM_DEBUG("considering 0x%x..0x%x\n", map->offset, map->offset + map->size - 1);*/
-               if (offset >= map->offset
-                   && offset < map->offset + map->size) break;
+               if (ap->a_offset >= map->offset
+                   && ap->a_offset < map->offset + map->size) break;
        }
        
        if (!listentry) {
                DRM_DEBUG("can't find map\n");
-               return -1;
+               return EINVAL;
        }
        if (((map->flags&_DRM_RESTRICTED) && DRM_SUSER(DRM_CURPROC))) {
                DRM_DEBUG("restricted map\n");
-               return -1;
+               return EINVAL;
        }
 
        switch (map->type) {
@@ -92,24 +104,30 @@ paddr_t DRM(mmap)(dev_t kdev, off_t offset, int prot)
        case _DRM_REGISTERS:
        case _DRM_AGP:
 #if defined(__FreeBSD__) && __FreeBSD_version >= 500102
-               *paddr = offset;
+               *paddr = ap->a_offset;
+               return 0;
+#elif defined(__DragonFly__)
+               ap->a_result = atop(ap->a_offset);
                return 0;
 #else
-               return atop(offset);
+               return atop(ap->a_offset);
 #endif
        case _DRM_SCATTER_GATHER:
        case _DRM_SHM:
 #if defined(__FreeBSD__) && __FreeBSD_version >= 500102
-               *paddr = vtophys(offset);
+               *paddr = vtophys(ap->a_offset);
+               return 0;
+#elif defined(__DragonFly__)
+               ap->a_result = vtophys(ap->a_offset);
                return 0;
 #else
-               return atop(vtophys(offset));
+               return atop(vtophys(ap->a_offset));
 #endif
        default:
-               return -1;      /* This should never happen. */
+               return EINVAL;  /* This should never happen. */
        }
        DRM_DEBUG("bailing out\n");
        
-       return -1;
+       return EINVAL;
 }
 
index c0c17fc..fdf6f8b 100644 (file)
@@ -32,7 +32,7 @@
  * SUCH DAMAGE.
  * 
  * $FreeBSD: src/sys/dev/dcons/dcons_os.c,v 1.4 2004/10/24 12:41:04 simokawa Exp $
- * $DragonFly: src/sys/dev/misc/dcons/dcons_os.c,v 1.2 2005/06/16 15:50:17 joerg Exp $
+ * $DragonFly: src/sys/dev/misc/dcons/dcons_os.c,v 1.3 2006/07/28 02:17:36 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -99,40 +99,20 @@ static struct consdev gdbconsdev;
 #endif
 #endif
 
+#define CDEV_MAJOR      184
+
 static d_open_t                dcons_open;
 static d_close_t       dcons_close;
-#if defined(__DragonFly__) || __FreeBSD_version < 500104
 static d_ioctl_t       dcons_ioctl;
-#endif
 
-static struct cdevsw dcons_cdevsw = {
-#ifdef __DragonFly__
-#define CDEV_MAJOR      184
-       "dcons", CDEV_MAJOR, D_TTY, NULL, 0,
-       dcons_open, dcons_close, ttyread, ttywrite, dcons_ioctl,
-       ttypoll, nommap, nostrategy, nodump, nopsize,
-#elif __FreeBSD_version >= 500104
-       .d_version =    D_VERSION,
+static struct dev_ops dcons_ops = {
+       { "dcons", CDEV_MAJOR, D_TTY },
        .d_open =       dcons_open,
        .d_close =      dcons_close,
-       .d_name =       "dcons",
-       .d_flags =      D_TTY | D_NEEDGIANT,
-#else
-#define CDEV_MAJOR      184
-       /* open */      dcons_open,
-       /* close */     dcons_close,
-       /* read */      ttyread,
-       /* write */     ttywrite,
-       /* ioctl */     dcons_ioctl,
-       /* poll */      ttypoll,
-       /* mmap */      nommap,
-       /* strategy */  nostrategy,
-       /* name */      "dcons",
-       /* major */     CDEV_MAJOR,
-       /* dump */      nodump,
-       /* psize */     nopsize,
-       /* flags */     D_TTY,
-#endif
+       .d_read =       ttyread,
+       .d_write =      ttywrite,
+       .d_ioctl =      dcons_ioctl,
+       .d_poll =       ttypoll,
 };
 
 #ifndef KLD_MODULE
@@ -276,8 +256,9 @@ dcons_os_putc(struct dcons_softc *dc, int c)
                bus_dmamap_sync(dg.dma_tag, dg.dma_map, BUS_DMASYNC_PREWRITE);
 }
 static int
-dcons_open(DEV dev, int flag, int mode, THREAD *td)
+dcons_open(struct dev_open_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        struct tty *tp;
        int unit, error;
 
@@ -303,7 +284,7 @@ dcons_open(DEV dev, int flag, int mode, THREAD *td)
                tp->t_lflag = TTYDEF_LFLAG;
                tp->t_ispeed = tp->t_ospeed = TTYDEF_SPEED;
                ttsetwater(tp);
-       } else if ((tp->t_state & TS_XCLUDE) && suser(td)) {
+       } else if ((tp->t_state & TS_XCLUDE) && suser_cred(ap->a_cred, 0)) {
                crit_exit();
                return (EBUSY);
        }
@@ -319,8 +300,9 @@ dcons_open(DEV dev, int flag, int mode, THREAD *td)
 }
 
 static int
-dcons_close(DEV dev, int flag, int mode, THREAD *td)
+dcons_close(struct dev_close_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int     unit;
        struct  tty *tp;
 
@@ -330,22 +312,17 @@ dcons_close(DEV dev, int flag, int mode, THREAD *td)
 
        tp = dev->si_tty;
        if (tp->t_state & TS_ISOPEN) {
-#if __FreeBSD_version < 502113
-               (*linesw[tp->t_line].l_close)(tp, flag);
+               (*linesw[tp->t_line].l_close)(tp, ap->a_fflag);
                ttyclose(tp);
-#else
-               ttyld_close(tp, flag);
-               tty_close(tp);
-#endif
        }
 
        return (0);
 }
 
-#if defined(__DragonFly__) || __FreeBSD_version < 500104
 static int
-dcons_ioctl(DEV dev, u_long cmd, caddr_t data, int flag, THREAD *td)
+dcons_ioctl(struct dev_ioctl_args *ap)
 {
+       dev_t dev = ap->a_head.a_dev;
        int     unit;
        struct  tty *tp;
        int     error;
@@ -355,17 +332,16 @@ dcons_ioctl(DEV dev, u_long cmd, caddr_t data, int flag, THREAD *td)
                return (ENXIO);
 
        tp = dev->si_tty;
-       error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data, flag, td);
+       error = (*linesw[tp->t_line].l_ioctl)(tp, ap->a_cmd, ap->a_data, ap->a_fflag, ap->a_cred);
        if (error != ENOIOCTL)
                return (error);
 
-       error = ttioctl(tp, cmd, data, flag);
+       error = ttioctl(tp, ap->a_cmd, ap->a_data, ap->a_fflag);
        if (error != ENOIOCTL)
   &nbs