summaryrefslogtreecommitdiffstats
path: root/sys/contrib
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1999-08-29 13:29:29 +0000
committerphk <phk@FreeBSD.org>1999-08-29 13:29:29 +0000
commitee7265381ca9703a2bee698711e273ab8bada018 (patch)
tree6c69ea7331da521a809d49f392cb69f60f56e30b /sys/contrib
parentdf39983a633a9255cb03784338b81cd63bf45aae (diff)
downloadFreeBSD-src-ee7265381ca9703a2bee698711e273ab8bada018.zip
FreeBSD-src-ee7265381ca9703a2bee698711e273ab8bada018.tar.gz
Convert to use the new "disk" layer.
A few cleanups while here.
Diffstat (limited to 'sys/contrib')
-rw-r--r--sys/contrib/dev/fla/fla.c186
1 files changed, 79 insertions, 107 deletions
diff --git a/sys/contrib/dev/fla/fla.c b/sys/contrib/dev/fla/fla.c
index b6439dd..928a98f 100644
--- a/sys/contrib/dev/fla/fla.c
+++ b/sys/contrib/dev/fla/fla.c
@@ -17,8 +17,7 @@
#include <sys/kernel.h>
#include <sys/buf.h>
#include <sys/malloc.h>
-#include <sys/disklabel.h>
-#include <sys/diskslice.h>
+#include <sys/disk.h>
#include <sys/devicestat.h>
#include <sys/module.h>
#include <sys/conf.h>
@@ -36,6 +35,11 @@
#ifdef SMP
#include <machine/smp.h>
+#define LEAVE() rel_mplock();
+#define ENTER() get_mplock();
+#else
+#define LEAVE()
+#define ENTER()
#endif
#include <contrib/dev/fla/msysosak.h>
@@ -52,7 +56,6 @@ static d_strategy_t flastrategy;
static d_open_t flaopen;
static d_close_t flaclose;
static d_ioctl_t flaioctl;
-static d_psize_t flapsize;
static struct cdevsw fla_cdevsw = {
/* open */ flaopen,
@@ -70,7 +73,7 @@ static struct cdevsw fla_cdevsw = {
/* parms */ noparms,
/* maj */ CDEV_MAJOR,
/* dump */ nodump,
- /* psize */ flapsize,
+ /* psize */ nopsize,
/* flags */ D_DISK | D_CANFREE,
/* maxio */ 0,
/* bmaj */ BDEV_MAJOR
@@ -115,73 +118,76 @@ doc2k_memset(void *dst, int c, unsigned len)
}
static struct fla_s {
+ int busy;
+ int unit;
unsigned nsect;
struct doc2k_stat ds;
struct diskslices *dk_slices;
struct buf_queue_head buf_queue;
struct devstat stats;
- int busy;
+ struct disk disk;
+ dev_t dev;
} softc[NFLA];
static int
flaopen(dev_t dev, int flag, int fmt, struct proc *p)
{
- int unit;
struct fla_s *sc;
int error;
- struct disklabel dk_dd;
+ struct disklabel *dl;
if (fla_debug)
- printf("flaopen(%x %x %x %p)\n",
- dev2udev(dev), flag, fmt, p);
- unit = dkunit(dev);
- if (unit >= NFLA)
- return (ENXIO);
- sc = &softc[unit];
- if (!sc->nsect)
- return (ENXIO);
- bzero(&dk_dd, sizeof(dk_dd));
- error = doc2k_size(unit, &dk_dd.d_secperunit,
- &dk_dd.d_ncylinders, &dk_dd.d_ntracks, &dk_dd.d_nsectors);
- dk_dd.d_secsize = DEV_BSIZE;
- dk_dd.d_secpercyl = dk_dd.d_ntracks * dk_dd.d_nsectors;
-
- error = dsopen(dev, fmt, 0, &sc->dk_slices, &dk_dd);
- if (error)
- return (error);
+ printf("flaopen(%s %x %x %p)\n",
+ devtoname(dev), flag, fmt, p);
+
+ sc = dev->si_drv1;
+
+ error = doc2k_open(sc->unit);
+
+ if (error) {
+ printf("doc2k_open(%d) -> err %d\n", sc->unit, error);
+ return (EIO);
+ }
+
+ dl = &sc->disk.d_label;
+ bzero(dl, sizeof(*dl));
+ error = doc2k_size(sc->unit, &dl->d_secperunit,
+ &dl->d_ncylinders, &dl->d_ntracks, &dl->d_nsectors);
+ dl->d_secsize = DEV_BSIZE;
+ dl->d_secpercyl = dl->d_ntracks * dl->d_nsectors; /* XXX */
+
return (0);
}
static int
flaclose(dev_t dev, int flags, int fmt, struct proc *p)
{
- int unit;
+ int error;
struct fla_s *sc;
if (fla_debug)
- printf("flaclose(%x %x %x %p)\n",
- dev2udev(dev), flags, fmt, p);
- unit = dkunit(dev);
- sc = &softc[unit];
- dsclose(dev, fmt, sc->dk_slices);
+ printf("flaclose(%s %x %x %p)\n",
+ devtoname(dev), flags, fmt, p);
+
+ sc = dev->si_drv1;
+
+ error = doc2k_close(sc->unit);
+ if (error) {
+ printf("doc2k_close(%d) -> err %d\n", sc->unit, error);
+ return (EIO);
+ }
return (0);
}
static int
flaioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct proc *p)
{
- int unit, error;
- struct fla_s *sc;
if (fla_debug)
- printf("flaioctl(%x %lx %p %x %p)\n",
- dev2udev(dev), cmd, addr, flags, p);
- unit = dkunit(dev);
- sc = &softc[unit];
- error = dsioctl(dev, cmd, addr, flags, &sc->dk_slices);
- if (error == ENOIOCTL)
- error = ENOTTY;
- return (error);
+ printf("flaioctl(%s %lx %p %x %p)\n",
+ devtoname(dev), cmd, addr, flags, p);
+
+ return (ENOIOCTL);
}
static void
@@ -194,16 +200,11 @@ flastrategy(struct buf *bp)
devstat_trans_flags dop;
if (fla_debug > 1)
- printf("flastrategy(%p) %x %lx, %d, %ld, %p)\n",
- bp, dev2udev(bp->b_dev), bp->b_flags, bp->b_blkno,
- bp->b_bcount / DEV_BSIZE, bp->b_data);
- unit = dkunit(bp->b_dev);
- sc = &softc[unit];
+ printf("flastrategy(%p) %s %lx, %d, %ld, %p)\n",
+ bp, devtoname(bp->b_dev), bp->b_flags, bp->b_blkno,
+ bp->b_bcount / DEV_BSIZE, bp->b_data);
- if (dscheck(bp, sc->dk_slices) <= 0) {
- biodone(bp);
- return;
- }
+ sc = bp->b_dev->si_drv1;
s = splbio();
@@ -234,14 +235,13 @@ flastrategy(struct buf *bp)
what = DOC2K_READ, dop = DEVSTAT_READ;
else
what = DOC2K_WRITE, dop = DEVSTAT_WRITE;
-#ifdef SMP
- rel_mplock();
-#endif
+
+ LEAVE();
+
error = doc2k_rwe( unit, what, bp->b_pblkno,
bp->b_bcount / DEV_BSIZE, bp->b_data);
-#ifdef SMP
- get_mplock();
-#endif
+
+ ENTER();
if (fla_debug > 1 || error) {
printf("fla%d: %d = rwe(%p, %d, %d, %d, %ld, %p)\n",
@@ -266,27 +266,14 @@ flastrategy(struct buf *bp)
}
static int
-flapsize(dev_t dev)
+flaprobe (device_t dev)
{
int unit;
struct fla_s *sc;
-
- if (fla_debug)
- printf("flapsize(%x)\n", dev2udev(dev));
- unit = dkunit(dev);
- sc = &softc[unit];
- if (!sc->nsect)
- return 0;
-
- return (dssize(dev, &sc->dk_slices));
-}
-
-static int
-flarealprobe(int unit)
-{
- struct fla_s *sc;
+ device_t bus;
int i;
+ unit = device_get_unit(dev);
sc = &softc[unit];
/* This is slightly ugly */
@@ -298,16 +285,22 @@ flarealprobe(int unit)
if (i)
return (ENXIO);
+ bus = device_get_parent(dev);
+ ISA_SET_RESOURCE(bus, dev, SYS_RES_MEMORY, 0,
+ sc->ds.window - KERNBASE, 8192);
+
return (0);
}
-
static int
-flarealattach(int unit)
+flaattach (device_t dev)
{
+ int unit;
int i, j, k, l, m, error;
struct fla_s *sc;
+ unit = device_get_unit(dev);
+
sc = &softc[unit];
error = doc2k_open(unit);
@@ -323,6 +316,12 @@ flarealattach(int unit)
}
printf("fla%d: <%s %s>\n", unit, sc->ds.product, sc->ds.model);
+
+ error = doc2k_close(unit);
+ if (error) {
+ printf("doc2k_close(%d) -> err %d\n", unit, error);
+ return (EIO);
+ }
m = 1024L * 1024L / DEV_BSIZE;
l = (sc->nsect * 10 + m/2) / m;
@@ -338,42 +337,15 @@ flarealattach(int unit)
bufq_init(&sc->buf_queue);
- return (0);
-}
-
-static int
-flaprobe (device_t dev)
-{
- int unit;
- struct fla_s *sc;
- device_t bus;
- int i;
-
- unit = device_get_unit(dev);
- sc = &softc[unit];
- i = flarealprobe(unit);
- if (i)
- return (i);
-
- bus = device_get_parent(dev);
- ISA_SET_RESOURCE(bus, dev, SYS_RES_MEMORY, 0,
- sc->ds.window - KERNBASE, 8192);
-
- return (0);
-}
-
-
-static int
-flaattach (device_t dev)
-{
- int unit, i;
-
- unit = device_get_unit(dev);
- i = flarealattach(unit);
devstat_add_entry(&softc[unit].stats, "fla", unit, DEV_BSIZE,
DEVSTAT_NO_ORDERED_TAGS,
DEVSTAT_TYPE_DIRECT | DEVSTAT_TYPE_IF_OTHER, 0x190);
- return (i);
+
+ sc->dev = disk_create(unit, &sc->disk, &fla_cdevsw);
+ sc->dev->si_drv1 = sc;
+ sc->unit = unit;
+
+ return (0);
}
static device_method_t fla_methods[] = {
@@ -391,4 +363,4 @@ static driver_t fladriver = {
static devclass_t fla_devclass;
-DEV_DRIVER_MODULE(fla, isa, fladriver, fla_devclass, fla_cdevsw, 0, 0);
+DRIVER_MODULE(fla, isa, fladriver, fla_devclass, 0, 0);
OpenPOWER on IntegriCloud