diff options
author | David Gwynne <dlg@cvs.openbsd.org> | 2007-04-03 04:15:51 +0000 |
---|---|---|
committer | David Gwynne <dlg@cvs.openbsd.org> | 2007-04-03 04:15:51 +0000 |
commit | 8695298712ca6b05d95e2878ffa7ce38f135ccef (patch) | |
tree | e176e112d37d79ca8393e7f78acd1d4a66ab19ff | |
parent | dad57cbeaa269b36143f1e82dd2e1b74cec4496b (diff) |
modernise scsi_inquiry. the length field has grown and now theres pages to
query.
ok krw@
-rw-r--r-- | sys/dev/ic/mpi.c | 3 | ||||
-rw-r--r-- | sys/scsi/safte.c | 19 | ||||
-rw-r--r-- | sys/scsi/scsi_all.h | 8 | ||||
-rw-r--r-- | sys/scsi/scsi_base.c | 8 |
4 files changed, 21 insertions, 17 deletions
diff --git a/sys/dev/ic/mpi.c b/sys/dev/ic/mpi.c index f3555d48224..acb6a24a8ef 100644 --- a/sys/dev/ic/mpi.c +++ b/sys/dev/ic/mpi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mpi.c,v 1.83 2007/03/17 10:25:39 dlg Exp $ */ +/* $OpenBSD: mpi.c,v 1.84 2007/04/03 04:15:50 dlg Exp $ */ /* * Copyright (c) 2005, 2006 David Gwynne <dlg@openbsd.org> @@ -588,6 +588,7 @@ mpi_inq(struct mpi_softc *sc, u_int16_t target, int physdisk) bzero(&inq, sizeof(inq)); inq.opcode = INQUIRY; + _lto2b(sizeof(struct scsi_inquiry_data), inq.length); ccb = mpi_get_ccb(sc); if (ccb == NULL) diff --git a/sys/scsi/safte.c b/sys/scsi/safte.c index ce874794f35..f6385878573 100644 --- a/sys/scsi/safte.c +++ b/sys/scsi/safte.c @@ -1,4 +1,4 @@ -/* $OpenBSD: safte.c,v 1.34 2007/03/22 16:55:31 deraadt Exp $ */ +/* $OpenBSD: safte.c,v 1.35 2007/04/03 04:15:50 dlg Exp $ */ /* * Copyright (c) 2005 David Gwynne <dlg@openbsd.org> @@ -112,7 +112,7 @@ safte_match(struct device *parent, void *match, void *aux) struct scsi_inquiry_data inqbuf; struct scsi_inquiry cmd; struct safte_inq *si = (struct safte_inq *)&inqbuf.extra; - int flags; + int length, flags; if (inq == NULL) return (0); @@ -127,14 +127,15 @@ safte_match(struct device *parent, void *match, void *aux) (inq->response_format & SID_ANSII) != 2) return (0); - memset(&cmd, 0, sizeof(cmd)); - cmd.opcode = INQUIRY; - cmd.length = inq->additional_length + SAFTE_EXTRA_OFFSET; - if (cmd.length < SAFTE_INQ_LEN) + length = inq->additional_length + SAFTE_EXTRA_OFFSET; + if (length < SAFTE_INQ_LEN) return (0); + if (length > sizeof(inqbuf)) + length = sizeof(inqbuf); - if (cmd.length > sizeof(inqbuf)) - cmd.length = sizeof(inqbuf); + memset(&cmd, 0, sizeof(cmd)); + cmd.opcode = INQUIRY; + _lto2b(length, cmd.length); memset(&inqbuf, 0, sizeof(inqbuf)); memset(&inqbuf.extra, ' ', sizeof(inqbuf.extra)); @@ -144,7 +145,7 @@ safte_match(struct device *parent, void *match, void *aux) flags |= SCSI_AUTOCONF; if (scsi_scsi_cmd(sa->sa_sc_link, (struct scsi_generic *)&cmd, - sizeof(cmd), (u_char *)&inqbuf, cmd.length, 2, 10000, NULL, + sizeof(cmd), (u_char *)&inqbuf, length, 2, 10000, NULL, flags) != 0) return (0); diff --git a/sys/scsi/scsi_all.h b/sys/scsi/scsi_all.h index cf2155d5256..d15ec399b5b 100644 --- a/sys/scsi/scsi_all.h +++ b/sys/scsi/scsi_all.h @@ -1,4 +1,4 @@ -/* $OpenBSD: scsi_all.h,v 1.40 2006/11/27 23:14:22 beck Exp $ */ +/* $OpenBSD: scsi_all.h,v 1.41 2007/04/03 04:15:50 dlg Exp $ */ /* $NetBSD: scsi_all.h,v 1.10 1996/09/12 01:57:17 thorpej Exp $ */ /* @@ -79,10 +79,10 @@ struct scsi_sense { struct scsi_inquiry { u_int8_t opcode; - u_int8_t byte2; + u_int8_t flags; #define SI_EVPD 0x01 - u_int8_t unused[2]; - u_int8_t length; + u_int8_t pagecode; + u_int8_t length[2]; u_int8_t control; }; diff --git a/sys/scsi/scsi_base.c b/sys/scsi/scsi_base.c index 8c8cc705e88..bcde4fb7d9e 100644 --- a/sys/scsi/scsi_base.c +++ b/sys/scsi/scsi_base.c @@ -1,4 +1,4 @@ -/* $OpenBSD: scsi_base.c,v 1.117 2006/12/12 02:44:36 krw Exp $ */ +/* $OpenBSD: scsi_base.c,v 1.118 2007/04/03 04:15:50 dlg Exp $ */ /* $NetBSD: scsi_base.c,v 1.43 1997/04/02 02:29:36 mycroft Exp $ */ /* @@ -378,6 +378,7 @@ scsi_inquire(struct scsi_link *sc_link, struct scsi_inquiry_data *inqbuf, int flags) { struct scsi_inquiry scsi_cmd; + int length; int error; bzero(&scsi_cmd, sizeof(scsi_cmd)); @@ -394,9 +395,10 @@ scsi_inquire(struct scsi_link *sc_link, struct scsi_inquiry_data *inqbuf, * Ask for only the basic 36 bytes of SCSI2 inquiry information. This * avoids problems with devices that choke trying to supply more. */ - scsi_cmd.length = SID_INQUIRY_HDR + SID_SCSI2_ALEN; + length = SID_INQUIRY_HDR + SID_SCSI2_ALEN; + _lto2b(length, scsi_cmd.length); error = scsi_scsi_cmd(sc_link, (struct scsi_generic *)&scsi_cmd, - sizeof(scsi_cmd), (u_char *)inqbuf, scsi_cmd.length, 2, 10000, NULL, + sizeof(scsi_cmd), (u_char *)inqbuf, length, 2, 10000, NULL, SCSI_DATA_IN | flags); return (error); |