summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/conf/majors2
-rw-r--r--sys/dev/twe/twe_compat.h4
-rw-r--r--sys/dev/twe/twe_freebsd.c53
3 files changed, 19 insertions, 40 deletions
diff --git a/sys/conf/majors b/sys/conf/majors
index d048e95..0caf3aa 100644
--- a/sys/conf/majors
+++ b/sys/conf/majors
@@ -164,7 +164,7 @@ chrdev name comments
144 nsmb SMB/CIFS protocol interface <bp>
145 dri DRI Graphics for OpenGL <dfr>
146 twe 3ware Escalade ATA RAID (controller)
-147 twed 3ware Escalade ATA RAID (drives)
+147
148 agp AGP <dfr>
149 tap Ethernet tunneling device <myevmenkin@att.com>
150 aac Adaptec FSA RAID (controller)
diff --git a/sys/dev/twe/twe_compat.h b/sys/dev/twe/twe_compat.h
index 2dc17b5..3d10434 100644
--- a/sys/dev/twe/twe_compat.h
+++ b/sys/dev/twe/twe_compat.h
@@ -165,8 +165,8 @@ typedef struct bio_queue_head twe_bioq;
# define TWE_BIO_DATA(bp) (bp)->bio_data
# define TWE_BIO_LENGTH(bp) (bp)->bio_bcount
# define TWE_BIO_LBA(bp) (bp)->bio_pblkno
-# define TWE_BIO_SOFTC(bp) (bp)->bio_dev->si_drv1
-# define TWE_BIO_UNIT(bp) *(int *)((bp)->bio_dev->si_drv2)
+# define TWE_BIO_SOFTC(bp) (bp)->bio_disk->d_drv1
+# define TWE_BIO_UNIT(bp) (bp)->bio_disk->d_unit
# define TWE_BIO_SET_ERROR(bp, err) do { (bp)->bio_error = err; (bp)->bio_flags |= BIO_ERROR;} while(0)
# define TWE_BIO_HAS_ERROR(bp) ((bp)->bio_flags & BIO_ERROR)
# define TWE_BIO_RESID(bp) (bp)->bio_resid
diff --git a/sys/dev/twe/twe_freebsd.c b/sys/dev/twe/twe_freebsd.c
index cc6efca..7acdbad 100644
--- a/sys/dev/twe/twe_freebsd.c
+++ b/sys/dev/twe/twe_freebsd.c
@@ -544,7 +544,6 @@ twe_clear_pci_abort(struct twe_softc *sc)
struct twed_softc
{
device_t twed_dev;
- dev_t twed_dev_t;
struct twe_softc *twed_controller; /* parent device softc */
struct twe_drive *twed_drive; /* drive data in parent softc */
struct disk twed_disk; /* generic disk handle */
@@ -581,29 +580,7 @@ DRIVER_MODULE(twed, twe, twed_driver, twed_devclass, 0, 0);
/*
* Disk device control interface.
*/
-static d_open_t twed_open;
-static d_strategy_t twed_strategy;
-static dumper_t twed_dump;
-
-#define TWED_CDEV_MAJOR 147
-
-static struct cdevsw twed_cdevsw = {
- twed_open,
- nullclose,
- physread,
- physwrite,
- noioctl,
- nopoll,
- nommap,
- twed_strategy,
- "twed",
- TWED_CDEV_MAJOR,
- twed_dump,
- nopsize,
- D_DISK
-};
-static struct cdevsw tweddisk_cdevsw;
#ifdef FREEBSD_4
static int disks_registered = 0;
#endif
@@ -615,9 +592,9 @@ static int disks_registered = 0;
* for opens on subdevices (eg. slices, partitions).
*/
static int
-twed_open(dev_t dev, int flags, int fmt, d_thread_t *td)
+twed_open(struct disk *dp)
{
- struct twed_softc *sc = (struct twed_softc *)dev->si_drv1;
+ struct twed_softc *sc = (struct twed_softc *)dp->d_drv1;
debug_called(4);
@@ -628,11 +605,6 @@ twed_open(dev_t dev, int flags, int fmt, d_thread_t *td)
if (sc->twed_controller->twe_state & TWE_STATE_SHUTDOWN)
return(ENXIO);
- sc->twed_disk.d_sectorsize = TWE_BLOCK_SIZE;
- sc->twed_disk.d_mediasize = TWE_BLOCK_SIZE * (off_t)sc->twed_drive->td_size;
- sc->twed_disk.d_fwsectors = sc->twed_drive->td_sectors;
- sc->twed_disk.d_fwheads = sc->twed_drive->td_heads;
-
return (0);
}
@@ -680,7 +652,7 @@ twed_dump(void *arg, void *virtual, vm_offset_t physical, off_t offset, size_t l
struct disk *dp;
dp = arg;
- twed_sc = (struct twed_softc *)dp->d_dev->si_drv1;
+ twed_sc = (struct twed_softc *)dp->d_drv1;
twe_sc = (struct twe_softc *)twed_sc->twed_controller;
if (!twed_sc || !twe_sc)
return(ENXIO);
@@ -726,7 +698,6 @@ twed_attach(device_t dev)
{
struct twed_softc *sc;
device_t parent;
- dev_t dsk;
debug_called(4);
@@ -748,16 +719,24 @@ twed_attach(device_t dev)
DEVSTAT_PRIORITY_ARRAY);
/* attach a generic disk device to ourselves */
- dsk = disk_create(device_get_unit(dev), &sc->twed_disk, 0, &twed_cdevsw, &tweddisk_cdevsw);
- dsk->si_drv1 = sc;
- dsk->si_drv2 = &sc->twed_drive->td_unit;
- sc->twed_dev_t = dsk;
+
+ sc->twed_disk.d_open = twed_open;
+ sc->twed_disk.d_strategy = twed_strategy;
+ sc->twed_disk.d_dump = (dumper_t *)twed_dump;
+ sc->twed_disk.d_name = "twed";
+ sc->twed_disk.d_drv1 = sc;
+ sc->twed_disk.d_maxsize = (TWE_MAX_SGL_LENGTH - 1) * PAGE_SIZE;
+ sc->twed_disk.d_sectorsize = TWE_BLOCK_SIZE;
+ sc->twed_disk.d_mediasize = TWE_BLOCK_SIZE * (off_t)sc->twed_drive->td_size;
+ sc->twed_disk.d_fwsectors = sc->twed_drive->td_sectors;
+ sc->twed_disk.d_fwheads = sc->twed_drive->td_heads;
+
+ disk_create(device_get_unit(dev), &sc->twed_disk, 0, NULL, NULL);
#ifdef FREEBSD_4
disks_registered++;
#endif
/* set the maximum I/O size to the theoretical maximum allowed by the S/G list size */
- dsk->si_iosize_max = (TWE_MAX_SGL_LENGTH - 1) * PAGE_SIZE;
return (0);
}
OpenPOWER on IntegriCloud