summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorDavid Gwynne <dlg@cvs.openbsd.org>2005-07-18 15:10:58 +0000
committerDavid Gwynne <dlg@cvs.openbsd.org>2005-07-18 15:10:58 +0000
commit69c687924e0aac6b65efd331cab86c86bfb61fc4 (patch)
tree4940df3520abad4620c539904122cae61ba9c405 /sys/dev
parent266c19464df004208d3eb2fc4d421579a43b28cd (diff)
revert marcos bio changes, mickey not ok
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/biovar.h187
-rw-r--r--sys/dev/ic/ami.c481
-rw-r--r--sys/dev/ic/amireg.h4
-rw-r--r--sys/dev/ic/amivar.h3
4 files changed, 148 insertions, 527 deletions
diff --git a/sys/dev/biovar.h b/sys/dev/biovar.h
index 410ef126d28..2fb76943011 100644
--- a/sys/dev/biovar.h
+++ b/sys/dev/biovar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: biovar.h,v 1.6 2005/07/18 01:29:01 marco Exp $ */
+/* $OpenBSD: biovar.h,v 1.7 2005/07/18 15:10:57 dlg Exp $ */
/*
* Copyright (c) 2002 Niklas Hallqvist. All rights reserved.
@@ -50,56 +50,147 @@ int bio_register(struct device *, int (*)(struct device *, u_long,
/* RAID section */
-#define BIOCINQ _IOWR('B', 32, bioc_inq)
-typedef struct _bioc_inq {
- void *cookie;
-
- int novol; /* nr of volumes */
- int nodisk; /* nr of total disks */
-} bioc_inq;
+#define BIOC_MAX_CDB 16
+#define BIOC_MAX_SENSE 32
+#define BIOC_MAX_PHYSDISK 128 /* based on FC arrays */
+#define BIOC_MAX_VIRTDISK 128 /* based on FC arrays */
-#define BIOCDISK _IOWR('B', 33, bioc_disk)
-/* structure that represents a disk in a RAID volume */
-typedef struct _bioc_disk {
+/* ioctl tunnel defines */
+/* SHALL be implemented */
+#define BIOCPING _IOWR('B', 32, bioc_ping)
+typedef struct _bioc_ping {
void *cookie;
+ int x;
+} bioc_ping;
- int diskid; /* virtual disk id */
- int status; /* current status */
- int volid; /* associate with volume, if -1 unused */
-
- quad_t size; /* size of the disk */
-
- /* this is provided by the physical disks if suported */
- char vendor[8]; /* vendor string */
- char product[16]; /* product string */
- char revision[4]; /* revision string */
- char pad[4]; /* zero terminate in here */
-
- /* XXX get this too? */
- /* serial number */
-} bioc_disk;
+/* SHALL be implemented */
+#define BIOCCAPABILITIES _IOWR('B', 33, bioc_capabilities)
+typedef struct _bioc_capabilities {
+ void *cookie;
+ u_int64_t ioctls; /* bit field, 1 ioctl supported */
+#define BIOC_PING 0x01
+#define BIOC_ALARM 0x02
+#define BIOC_PREP_REMOVAL 0x04
+#define BIOC_REBUILD 0x08
+#define BIOC_STATUS 0x10
+#define BIOC_SCSICMD 0x20
+#define BIOC_STARTSTOP 0x40
+#define BIOC_BLINK 0x80
+ u_int32_t raid_types; /* bit field, 1 supported raid type */
+#define BIOC_RAID0 0x01
+#define BIOC_RAID1 0x02
+#define BIOC_RAID3 0x04
+#define BIOC_RAID5 0x08
+#define BIOC_RAID10 0x10
+#define BIOC_RAID01 0x20
+#define BIOC_RAID50 0x40
+} bioc_capabilities;
+
+/* OPTIONAL */
+#define BIOCALARM _IOWR('B', 34, bioc_alarm)
+typedef struct _bioc_alarm {
+ void *cookie;
+ u_int32_t opcode;
+#define BIOCSALARM_DISABLE 0x00
+#define BIOCSALARM_ENABLE 0x01
+#define BIOCSALARM_SILENCE 0x02
+#define BIOCGALARM_STATE 0x03
+#define BIOCSALARM_TEST 0x04
+ u_int8_t state; /* only used with GET function */
+} bioc_alarm;
+
+/* OPTIONAL */
+#define BIOCSCSICMD _IOWR('B', 35, bioc_scsicmd)
+typedef struct _bioc_scsicmd {
+ void *cookie;
-#define BIOCVOL _IOWR('B', 34, bioc_vol)
-/* structure that represents a RAID volume */
-typedef struct _bioc_vol {
+ /* in (kernel centric) */
+ u_int8_t channel;
+ u_int8_t target;
+ u_int8_t cdb[BIOC_MAX_CDB];
+ u_int8_t cdblen;
+ u_int8_t direction; /* 0 = out, 1 = in, this is userland centric */
+#define BIOC_DIROUT 0x00
+#define BIOC_DIRIN 0x01
+#define BIOC_DIRNONE 0x02
+
+ /* out (kernel centric) */
+ u_int8_t status;
+ u_int8_t sensebuf[BIOC_MAX_SENSE];
+ u_int8_t senselen;
+
+ /* in & out (kernel centric) */
+ void *data;
+ u_int32_t datalen; /* going in it governs the maximum buffer size
+ going out it contains actual bytes transfered */
+} bioc_scsicmd;
+
+/* OPTIONAL */
+#define BIOCSTARTSTOP _IOWR('B', 36, bioc_startstop)
+typedef struct _bioc_startstop {
+ void *cookie;
+ u_int8_t opcode;
+#define BIOCSUNIT_START 0x00
+#define BIOCSUNIT_STOP 0x01
+ u_int8_t channel;
+ u_int8_t target;
+} bioc_startstop;
+
+/* SHALL be implemented */
+#define BIOCSTATUS _IOWR('B', 37, bioc_status)
+typedef struct _bioc_status {
+ void *cookie;
+ u_int8_t opcode;
+#define BIOCGSTAT_CHANGE 0x00 /* any changes since last call? */
+#define BIOCGSTAT_ALL 0x01 /* get all status */
+#define BIOCGSTAT_PHYSDISK 0x02 /* get physical disk status only */
+#define BIOCGSTAT_VIRTDISK 0x03 /* get virtual disk status only */
+#define BIOCGSTAT_BATTERY 0x04 /* get battery status only */
+#define BIOCGSTAT_ENCLOSURE 0x05 /* get enclosure status only */
+#define BIOCGSTAT_TEMPERATURE 0x06 /* get temperature status only */
+ u_int8_t status; /* global status flag */
+#define BIOC_STATOK 0x00 /* status is OK */
+#define BIOC_STATDEGRAD 0x01 /* status is degraded */
+#define BIOC_STATCRIT 0x02 /* status is critical */
+#define BIOC_STATBAT 0x04 /* something wrong with battery */
+#define BIOC_STATENC 0x08 /* something wrong with enclosure */
+#define BIOC_STATTEMP 0x10 /* something is over/under heating */
+ /* return fields used per request define in opcode */
+ u_int8_t channels; /* max channels */
+ u_int8_t buswidth; /* max physical drives per channel */
+ /* filled in when called with BIOCGSTAT_PHYSDISK set */
+ u_int8_t pdcount; /* physical disk counter */
+ u_int8_t physdisk[BIOC_MAX_PHYSDISK];
+#define BIOC_PDUNUSED 0x00 /* disk not present */
+#define BIOC_PDONLINE 0x01 /* disk present */
+#define BIOC_PDOFFLINE 0x02 /* disk present but offline */
+#define BIOC_PDINUSE 0x04 /* critical operation in progress */
+ /* filled in when called with BIOCGSTAT_VIRTDISK set */
+ u_int8_t vdcount; /* virtual disk counter */
+ u_int8_t virtdisk[BIOC_MAX_VIRTDISK];
+#define BIOC_VDUNUSED 0x00 /* disk not present */
+#define BIOC_VDONLINE 0x01 /* disk present */
+#define BIOC_VDOFFLINE 0x02 /* disk present but offline */
+#define BIOC_VDINUSE 0x04 /* critical operation in progress */
+ /* filled in when called with BIOCGSTAT_BATTERY set */
+ u_int8_t batstat; /* battery status */
+#define BIOC_BATNOTPRES 0x00 /* battery not present */
+#define BIOC_BATMISSING 0x01 /* battery removed */
+#define BIOC_BATVOLTERR 0x02 /* battery low/high power */
+#define BIOC_BATTEMP 0x04 /* battery over/under temp*/
+ /* NOTYET: encloure status & temperature status */
+} bioc_status;
+
+/* OPTIONAL */
+/* depending on the controller it is handled either in userland or in kernel */
+#define BIOCBLINK _IOWR('B', 38, bioc_blink)
+typedef struct _bioc_blink {
void *cookie;
+ u_int8_t opcode;
+#define BIOCSBLINK_BLINK 0x00
+#define BIOCSBLINK_UNBLINK 0x01
+#define BIOCSBLINK_ALERT 0x02
+ u_int8_t channel;
+ u_int8_t target;
+} bioc_blink;
- int volid; /* volume id */
- int status; /* current status */
-#define BIOC_SONLINE 0x00
-#define BIOC_SOFFLINE 0x01
-#define BIOC_SDEGRADED 0x02
- quad_t size; /* size of the disk */
- int level; /* raid level */
- int nodisk; /* nr of drives */
-
- /* this is provided by the RAID card */
- char vendor[8]; /* vendor string */
- char product[16]; /* product string */
- char revision[4]; /* revision string */
- char pad[4]; /* zero terminate in here */
-} bioc_vol;
-
-#define BIOC_INQ 0x01
-#define BIOC_DISK 0x02
-#define BIOC_VOL 0x04
diff --git a/sys/dev/ic/ami.c b/sys/dev/ic/ami.c
index 49e98cbbb3b..885a77eae3e 100644
--- a/sys/dev/ic/ami.c
+++ b/sys/dev/ic/ami.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ami.c,v 1.47 2005/07/18 01:29:01 marco Exp $ */
+/* $OpenBSD: ami.c,v 1.48 2005/07/18 15:10:56 dlg Exp $ */
/*
* Copyright (c) 2001 Michael Shalayeff
@@ -45,7 +45,7 @@
* Theo de Raadt.
*/
-/*#define AMI_DEBUG */
+/*#define AMI_DEBUG */
#include <sys/param.h>
#include <sys/systm.h>
@@ -76,11 +76,11 @@
#define AMI_D_DMA 0x0008
#define AMI_D_IOCTL 0x0010
int ami_debug = 0
-/* | AMI_D_CMD*/
-/* | AMI_D_INTR*/
-/* | AMI_D_MISC*/
-/* | AMI_D_DMA*/
- | AMI_D_IOCTL
+ | AMI_D_CMD
+ | AMI_D_INTR
+ | AMI_D_MISC
+/* | AMI_D_DMA */
+/* | AMI_D_IOCTL */
;
#else
#define AMI_DPRINTF(m,a) /* m, a */
@@ -136,19 +136,11 @@ void ami_copy_internal_data(struct scsi_xfer *xs, void *v, size_t size);
int ami_inquire(struct ami_softc *sc, u_int8_t op);
#if NBIO > 0
-int ami_mgmt(struct ami_softc *, u_int8_t, u_int8_t, u_int8_t,
- size_t, void *);
-int ami_drv_inq(struct ami_softc *, u_int8_t, u_int8_t, void *);
int ami_ioctl(struct device *, u_long, caddr_t);
-int ami_ioctl_inq(struct ami_softc *, bioc_inq *);
-int ami_ioctl_vol(struct ami_softc *, bioc_vol *);
-int ami_ioctl_disk(struct ami_softc *, bioc_disk *);
-#if 0
int ami_ioctl_alarm(struct ami_softc *, bioc_alarm *);
int ami_ioctl_startstop( struct ami_softc *, bioc_startstop *);
int ami_ioctl_status( struct ami_softc *, bioc_status *);
int ami_ioctl_passthru(struct ami_softc *, bioc_scsicmd *);
-#endif
#endif /* NBIO > 0 */
struct ami_ccb *
@@ -590,7 +582,6 @@ ami_attach(sc)
sc->sc_link.adapter = &ami_switch;
sc->sc_link.adapter_target = sc->sc_maxunits;
sc->sc_link.adapter_buswidth = sc->sc_maxunits;
- sc->sc_state_ch = 1; /* mark state as changed */
#ifdef AMI_DEBUG
printf(": FW %s, BIOS v%s, %dMB RAM\n"
@@ -1689,7 +1680,6 @@ ami_scsi_ioctl(struct scsi_link *link, u_long cmd,
caddr_t addr, int flag, struct proc *p)
{
struct ami_softc *sc = (struct ami_softc *)link->adapter_softc;
- /* u_int8_t target = link->target; */
if (sc->sc_ioctl)
return (sc->sc_ioctl(link->adapter_softc, cmd, addr));
@@ -1698,461 +1688,6 @@ ami_scsi_ioctl(struct scsi_link *link, u_long cmd,
}
#if NBIO > 0
-struct disk {
- SLIST_ENTRY(disk) next;
- bioc_disk bd;
-
- int ch;
- int tg;
-};
-
-struct volume {
- SLIST_ENTRY(volume) next;
- bioc_vol bv;
-};
-
-SLIST_HEAD(disk_list, disk);
-struct disk_list disks = SLIST_HEAD_INITIALIZER(disk);
-
-SLIST_HEAD(vol_list, volume);
-struct vol_list volumes = SLIST_HEAD_INITIALIZER(volume);
-
-int
-ami_ioctl(dev, cmd, addr)
- struct device *dev;
- u_long cmd;
- caddr_t addr;
-{
- struct ami_softc *sc = (struct ami_softc *)dev;
- ami_lock_t lock;
- int error = 0;
-
- AMI_DPRINTF(AMI_D_IOCTL, ("%s: ioctl()\n", sc->sc_dev.dv_xname));
-
- if (sc->sc_flags & AMI_BROKEN)
- return ENODEV; /* can't do this to broken device for now */
-
- lock = AMI_LOCK_AMI(sc);
- if (sc->sc_flags & AMI_CMDWAIT) {
- AMI_UNLOCK_AMI(sc, lock);
- return EBUSY;
- }
-
- switch (cmd) {
- case BIOCINQ:
- case BIOCVOL:
- case BIOCDISK:
- sc->sc_flags |= AMI_CMDWAIT;
- while (!TAILQ_EMPTY(&sc->sc_ccbq))
- if (tsleep(&sc->sc_free_ccb, PRIBIO, "ami_ioctl",
- 100 * 60) == EWOULDBLOCK)
- return EWOULDBLOCK;
- }
-
- switch (cmd) {
- case BIOCINQ:
- AMI_DPRINTF(AMI_D_IOCTL, ("inquiry\n"));
- error = ami_ioctl_inq(sc, (bioc_inq *)addr);
- break;
-
- case BIOCVOL:
- AMI_DPRINTF(AMI_D_IOCTL, ("volume\n"));
- error = ami_ioctl_vol(sc, (bioc_vol *)addr);
- break;
-
- case BIOCDISK:
- AMI_DPRINTF(AMI_D_IOCTL, ("disk\n"));
- error = ami_ioctl_disk(sc, (bioc_disk *)addr);
- break;
-
- default:
- AMI_DPRINTF(AMI_D_IOCTL, ("%s: invalid ioctl\n",
- sc->sc_dev.dv_xname));
- error = EINVAL;
- }
-
- sc->sc_flags &= ~AMI_CMDWAIT;
- wakeup(&sc->sc_ccbq);
-
- AMI_UNLOCK_AMI(sc, lock);
-
- return (error);
-}
-
-int
-ami_drv_inq(sc, ch, tg, inqbuf)
- struct ami_softc *sc;
- u_int8_t ch;
- u_int8_t tg;
- void *inqbuf;
-{
- struct ami_ccb *ccb;
- struct ami_iocmd *cmd;
- struct ami_passthrough *ps;
- struct scsi_inquiry_data *pp;
- void *idata;
- bus_dmamap_t idatamap;
- bus_dma_segment_t idataseg[1];
- paddr_t pa;
- int error = 0;
-
- if (!(idata = ami_allocmem(sc->dmat, &idatamap, idataseg, NBPG, 1,
- "ami mgmt"))) {
- error = ENOMEM;
- goto bail;
- }
-
- pa = idataseg[0].ds_addr;
- ps = idata;
- pp = idata + sizeof *ps;
-
- ccb = ami_get_ccb(sc);
- ccb->ccb_data = NULL;
- cmd = ccb->ccb_cmd;
-
- cmd->acc_cmd = AMI_PASSTHRU;
- cmd->acc_passthru.apt_data = htole32(pa);
-
- memset(ps, 0, sizeof *ps);
-
- ps->apt_channel = ch;
- ps->apt_target = tg;
- ps->apt_ncdb = sizeof(struct scsi_inquiry);
- ps->apt_nsense = sizeof(struct scsi_sense_data);
-
- ps->apt_cdb[0] = INQUIRY;
- ps->apt_cdb[1] = 0;
- ps->apt_cdb[2] = 0;
- ps->apt_cdb[3] = 0;
- ps->apt_cdb[4] = sizeof(struct scsi_inquiry_data); /* INQUIRY length */
- ps->apt_cdb[5] = 0;
-
- ps->apt_data = htole32(pa + sizeof *ps);
- ps->apt_datalen = sizeof(struct scsi_inquiry_data);
-
- AMI_DPRINTF(AMI_D_IOCTL, ("%s: ami_drv_inq(%p, %02x, %02x, ,%p) ",
- sc->sc_dev.dv_xname, sc, ch, tg, inqbuf));
-
- if (ami_cmd(ccb, BUS_DMA_WAITOK, 1) == 0) {
- AMI_DPRINTF(AMI_D_IOCTL, ("completed\n"));
-
- memcpy(inqbuf, pp, sizeof(struct scsi_inquiry_data));
- }
- else {
- AMI_DPRINTF(AMI_D_IOCTL, ("failed\n"));
-
- error = EINVAL;
- }
-
-bail:
- ami_freemem(sc->dmat, &idatamap, idataseg, NBPG, 1, "ami mgmt");
-
- return (error);
-}
-
-int
-ami_mgmt(sc, opcode, par1, par2, size, buffer)
- struct ami_softc *sc;
- u_int8_t opcode;
- u_int8_t par1;
- u_int8_t par2;
- size_t size;
- void *buffer;
-{
- struct ami_ccb *ccb;
- struct ami_iocmd *cmd;
- void *idata;
- bus_dmamap_t idatamap;
- bus_dma_segment_t idataseg[1];
- paddr_t pa;
- int error = 0;
-
- if (!(idata = ami_allocmem(sc->dmat, &idatamap, idataseg, NBPG,
- (size / NBPG) + 1, "ami mgmt"))) {
- error = ENOMEM;
- goto bail;
- }
-
- pa = idataseg[0].ds_addr;
-
- ccb = ami_get_ccb(sc);
- ccb->ccb_data = NULL;
- cmd = ccb->ccb_cmd;
-
- cmd->acc_cmd = opcode;
- cmd->acc_io.aio_channel = par1;
- cmd->acc_io.aio_param = par2;
- cmd->acc_io.aio_data = htole32(pa);
-
- AMI_DPRINTF(AMI_D_IOCTL, ("%s: ami_mgmt(%p, %02x, %02x, %02x, %d,%p) ",
- sc->sc_dev.dv_xname, sc, opcode, par1, par2, size, buffer));
-
- if (ami_cmd(ccb, BUS_DMA_WAITOK, 1) == 0) {
- AMI_DPRINTF(AMI_D_IOCTL, ("completed\n"));
-
- memcpy(buffer, idata, size);
- }
- else {
- AMI_DPRINTF(AMI_D_IOCTL, ("failed\n"));
-
- error = EINVAL;
- }
-
-bail:;
- ami_freemem(sc->dmat, &idatamap, idataseg, NBPG, (size / NBPG) + 1,
- "ami mgmt");
-
- return (error);
-}
-
-int
-ami_ioctl_inq(sc, bi)
- struct ami_softc *sc;
- bioc_inq *bi;
-{
- struct scsi_inquiry_data inqbuf;
- struct ami_big_diskarray *p; /* struct too large for stack */
- struct volume *vol;
- struct disk *dk;
- int i, s, t, c;
- int off;
- int error = 0;
-
- if (!sc->sc_state_ch) {
- bi->novol = 0;
- bi->nodisk = 0;
- SLIST_FOREACH(vol, &volumes, next) {
- bi->novol++;
- bi->nodisk += vol->bv.nodisk;
- }
-
- return 0;
- }
-
- AMI_DPRINTF(AMI_D_IOCTL, ("%s: biocinq", sc->sc_dev.dv_xname));
-
- p = malloc(sizeof *p, M_DEVBUF, M_NOWAIT);
- if (!p) {
- printf("%s: no memory for raw interface\n", sc->sc_dev.dv_xname);
- return (ENOMEM);
- }
-
- bi->nodisk = 0;
-
- for (c = 0; c < 4; c++) { /* FIXME get max channel from inq3 */
- for (t = 0; t < AMI_MAX_TARGET; t++) {
- if (!ami_drv_inq(sc, c, t, &inqbuf)) {
- if ((inqbuf.device & SID_TYPE) != T_DIRECT)
- /* XXX save c:t if PROC for later use */
- continue; /* we only care about disk */
-
- dk = malloc(sizeof(struct disk), M_DEVBUF,
- M_NOWAIT);
- if (!dk) {
- /* FIXME */
- panic("not enough memory.");
- }
-
- dk->ch = c;
- dk->tg = t;
- dk->bd.diskid = bi->nodisk;
- dk->bd.status = 0; /* XXX xlate */
- dk->bd.volid = -1; /* not yet claimed */
- dk->bd.size = 0; /* GETCAP or get in 2nd pass */
- strlcpy(dk->bd.vendor, inqbuf.vendor,
- 8 + 16 + 4 + 1); /* vendor prod rev zero */
-
- bi->nodisk++;
-
- SLIST_INSERT_HEAD(&disks, dk, next);
- }
- else {
- AMI_DPRINTF(AMI_D_IOCTL, ("c: %d t: %d "
- "fail\n", c, t));
- }
- }
- }
-
- if (!ami_mgmt(sc, AMI_FCOP, AMI_FC_RDCONF, 0, sizeof *p, p)) {
- bi->novol = p->ada_nld;
-
- AMI_DPRINTF(AMI_D_IOCTL, ("novol: %d nodisk: %d p: %p\n",
- bi->novol, bi->nodisk, &p));
-
- /* setup volume list */
- for (i = 0; i < p->ada_nld; i++) {
- vol = malloc(sizeof(struct volume), M_DEVBUF, M_NOWAIT);
- if (!vol) {
- /* FIXME */
- panic("not enough memory.");
- }
-
- vol->bv.volid = i;
- vol->bv.status = 0; /* XXX translate ami status */
- vol->bv.size = 0;
- vol->bv.level = p->ada_ldrv[i].adl_raidlvl;
- vol->bv.nodisk = 0;
- /* do string ops here, question is how */
-
- for (s = 0; s < p->ada_ldrv[i].adl_spandepth; s++) {
- for (t = 0; t < p->ada_ldrv[i].adl_nstripes; t++) {
- vol->bv.nodisk++;
-
- off = p->ada_ldrv[i].adl_spans[s].ads_devs[t].add_channel * AMI_MAX_TARGET + p->ada_ldrv[i].adl_spans[s].ads_devs[t].add_target;
- /* walk disk list and add size */
- SLIST_FOREACH(dk, &disks, next) {
- if (dk->ch != (p->ada_ldrv[i].adl_spans[s].ads_devs[t].add_target >> 4) || dk->tg != (p->ada_ldrv[i].adl_spans[s].ads_devs[t].add_target & 0x0f))
- continue;
-
- dk->bd.size = (quad_t)p->ada_pdrv[off].adp_size;
- dk->bd.volid = i;
-
- AMI_DPRINTF(AMI_D_IOCTL, ("\tdiskid: %d\n", dk->bd.diskid));
- AMI_DPRINTF(AMI_D_IOCTL, ("\tstatus: %d\n", dk->bd.status));
- AMI_DPRINTF(AMI_D_IOCTL, ("\tvolid : %d\n", dk->bd.volid));
- AMI_DPRINTF(AMI_D_IOCTL, ("\tsize : %d\n", dk->bd.size));
- AMI_DPRINTF(AMI_D_IOCTL, ("\tvendor: %s\n", dk->bd.vendor));
- AMI_DPRINTF(AMI_D_IOCTL, ("\tchan : %d\n", dk->ch));
- AMI_DPRINTF(AMI_D_IOCTL, ("\ttarget: %d\n", dk->tg));
-
- }
- }
-
- switch (vol->bv.level) {
- case 0:
- vol->bv.size += p->ada_ldrv[i].adl_spans[s].ads_length * p->ada_ldrv[i].adl_nstripes;
- break;
-
- case 1:
- vol->bv.size += p->ada_ldrv[i].adl_spans[s].ads_length;
- break;
-
- case 5:
- vol->bv.size += p->ada_ldrv[i].adl_spans[s].ads_length * (p->ada_ldrv[i].adl_nstripes - 1);
- break;
- }
-
- }
-
- if (p->ada_ldrv[i].adl_spandepth > 1)
- vol->bv.level *= 10;
-
- vol->bv.size *= (quad_t)512;
-
- AMI_DPRINTF(AMI_D_IOCTL, ("voldid: %d\n",
- vol->bv.volid));
- AMI_DPRINTF(AMI_D_IOCTL, ("status: %d\n",
- vol->bv.status));
- AMI_DPRINTF(AMI_D_IOCTL, ("size : %lld\n",
- vol->bv.size));
- AMI_DPRINTF(AMI_D_IOCTL, ("level : %d\n",
- vol->bv.level));
- AMI_DPRINTF(AMI_D_IOCTL, ("nodisk: %d\n",
- vol->bv.nodisk));
-
- SLIST_INSERT_HEAD(&volumes, vol, next);
- }
-
-#if 0
- printf("LD: %d %d\n", p->ada_nld, sizeof p);
-
- for (i = 0; i < p->ada_nld; i++) {
- printf("\tspandepth: %d\n", p->ada_ldrv[i].adl_spandepth);
- printf("\traidlvl : %d\n", p->ada_ldrv[i].adl_raidlvl);
- printf("\trd ahead : %d\n", p->ada_ldrv[i].adl_rdahead);
- printf("\tstrp size: %d\n", p->ada_ldrv[i].adl_stripesz);
- printf("\tstatus : %d\n", p->ada_ldrv[i].adl_status);
- printf("\twr policy: %d\n", p->ada_ldrv[i].adl_wrpolicy);
- printf("\tdirectio : %d\n", p->ada_ldrv[i].adl_directio);
- printf("\tnr stripe: %d\n", p->ada_ldrv[i].adl_nstripes);
- for (s = 0; s < p->ada_ldrv[i].adl_spandepth; s++) {
- for (t = 0; t < p->ada_ldrv[i].adl_nstripes; t++) {
- off = p->ada_ldrv[i].adl_spans[s].ads_devs[t].add_channel *
- AMI_MAX_TARGET +
- p->ada_ldrv[i].adl_spans[s].ads_devs[t].add_target;
-
- printf("\t\tspan : %d\n", s);
- printf("\t\tstart : %d\n",
- (u_int32_t)p->ada_ldrv[i].adl_spans[s].ads_start);
- printf("\t\tlength : %d\n",
- (u_int32_t)p->ada_ldrv[i].adl_spans[s].ads_length);
-
- printf("\t\t\tchannel : %02x\n",
- p->ada_ldrv[i].adl_spans[s].ads_devs[t].add_channel);
- printf("\t\t\ttarget : %02x\n",
- p->ada_ldrv[i].adl_spans[s].ads_devs[t].add_target);
- printf("\t\t\toff : %d\n");
-
- printf("\t\t\ttype : %d\n",
- p->ada_pdrv[off].adp_type);
- printf("\t\t\tstatus : %d\n",
- p->ada_pdrv[off].adp_ostatus);
- printf("\t\t\tdepth : %d\n",
- p->ada_pdrv[off].adp_tagdepth);
- printf("\t\t\tsneg : %d\n",
- p->ada_pdrv[off].adp_sneg);
- printf("\t\t\tsize : %d\n\n",
- (u_int32_t)p->ada_pdrv[off].adp_size);
- }
- }
- }
-#endif
- }
- else {
- AMI_DPRINTF(AMI_D_IOCTL, ("failed\n"));
- error = EINVAL;
- }
-
- free(p, M_DEVBUF);
-
- sc->sc_state_ch = 0; /* state normalized */
-
- return (error);
-}
-
-int
-ami_ioctl_vol(sc, bv)
- struct ami_softc *sc;
- bioc_vol *bv;
-{
- struct volume *vol;
- int error = EINVAL;
-
- AMI_DPRINTF(AMI_D_IOCTL, ("%s: biocvol\n", sc->sc_dev.dv_xname));
-
- SLIST_FOREACH(vol, &volumes, next) {
- if (bv->volid != vol->bv.volid)
- continue;
-
- memcpy(bv, &vol->bv, sizeof *bv);
- error = 0;
- }
-
- return (error);
-}
-
-int
-ami_ioctl_disk(sc, bd)
- struct ami_softc *sc;
- bioc_disk *bd;
-{
- struct disk *dk;
- int error = EINVAL;
-
- AMI_DPRINTF(AMI_D_IOCTL, ("%s: biocdisk\n", sc->sc_dev.dv_xname));
-
- SLIST_FOREACH(dk, &disks, next) {
- if (bd->diskid != dk->bd.diskid)
- continue;
-
- memcpy(bd, &dk->bd, sizeof *bd);
- error = 0;
- }
-
- return (error);
-}
-
-#if 0
int
ami_ioctl(dev, cmd, addr)
struct device *dev;
@@ -2537,8 +2072,6 @@ ami_ioctl_passthru(sc, bp)
return (error);
}
-#endif
-
#endif /* NBIO > 0 */
#ifdef AMI_DEBUG
diff --git a/sys/dev/ic/amireg.h b/sys/dev/ic/amireg.h
index 204237944e5..84841c2aea8 100644
--- a/sys/dev/ic/amireg.h
+++ b/sys/dev/ic/amireg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: amireg.h,v 1.16 2005/07/18 01:29:01 marco Exp $ */
+/* $OpenBSD: amireg.h,v 1.17 2005/07/18 15:10:57 dlg Exp $ */
/*
* Copyright (c) 2000 Michael Shalayeff
@@ -223,8 +223,6 @@
#define AMI_HSPDIAG 0xb1
#define AMI_GESENSEINFO 0xb2 /* get extended sense info */
#define AMI_SYSFLUSH 0xfe /* flush system */
-#define AMI_GETINQ 0xcf /* get proc & drive inquiry data */
-/* this needs to be removed when the new bioctl goes in */
#define AMI_ALARM 0x51 /* alarm functions */
#define AMI_ALARM_OFF 0x00
#define AMI_ALARM_ON 0x01
diff --git a/sys/dev/ic/amivar.h b/sys/dev/ic/amivar.h
index 798e91937b0..68edd84a843 100644
--- a/sys/dev/ic/amivar.h
+++ b/sys/dev/ic/amivar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: amivar.h,v 1.12 2005/07/18 01:29:01 marco Exp $ */
+/* $OpenBSD: amivar.h,v 1.13 2005/07/18 15:10:57 dlg Exp $ */
/*
* Copyright (c) 2001 Michael Shalayeff
@@ -92,7 +92,6 @@ struct ami_softc {
struct timeout sc_requeue_tmo;
struct timeout sc_poll_tmo;
int sc_dis_poll;
- int sc_state_ch;
char sc_fwver[16];
char sc_biosver[16];