diff options
author | 2010-08-30 02:47:56 +0000 | |
---|---|---|
committer | 2010-08-30 02:47:56 +0000 | |
commit | 49227f1aaa3eead5f133aa4334dea8b7803a10ed (patch) | |
tree | 87099badd1430e57f158f5f73623eb0597845221 | |
parent | add one airport... anyone want to maintain this? (diff) | |
download | wireguard-openbsd-49227f1aaa3eead5f133aa4334dea8b7803a10ed.tar.xz wireguard-openbsd-49227f1aaa3eead5f133aa4334dea8b7803a10ed.zip |
Avoid possible aliasing-related compiler issues by always writing to
cmd->opcode through the type casted command pointer rather than
through xs->cmd->opcode.
Requested by deraadt@; ok krw@.
-rw-r--r-- | sys/scsi/cd.c | 105 | ||||
-rw-r--r-- | sys/scsi/ch.c | 10 | ||||
-rw-r--r-- | sys/scsi/safte.c | 10 | ||||
-rw-r--r-- | sys/scsi/scsi_base.c | 28 | ||||
-rw-r--r-- | sys/scsi/ses.c | 8 | ||||
-rw-r--r-- | sys/scsi/st.c | 18 |
6 files changed, 95 insertions, 84 deletions
diff --git a/sys/scsi/cd.c b/sys/scsi/cd.c index dfdef0f0f1a..22fb8542f13 100644 --- a/sys/scsi/cd.c +++ b/sys/scsi/cd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cd.c,v 1.182 2010/08/28 20:23:22 matthew Exp $ */ +/* $OpenBSD: cd.c,v 1.183 2010/08/30 02:47:56 matthew Exp $ */ /* $NetBSD: cd.c,v 1.100 1997/04/02 02:29:30 mycroft Exp $ */ /* @@ -1350,11 +1350,11 @@ cd_load_unload(struct cd_softc *sc, int options, int slot) xs = scsi_xs_get(sc->sc_link, 0); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = LOAD_UNLOAD; xs->cmdlen = sizeof(*cmd); xs->timeout = 200000; cmd = (struct scsi_load_unload *)xs->cmd; + cmd->opcode = LOAD_UNLOAD; cmd->options = options; /* ioctl uses ATAPI values */ cmd->slot = slot; @@ -1415,11 +1415,11 @@ cd_play(struct cd_softc *sc, int blkno, int nblks) xs = scsi_xs_get(sc->sc_link, 0); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = PLAY; xs->cmdlen = sizeof(*cmd); xs->timeout = 200000; cmd = (struct scsi_play *)xs->cmd; + cmd->opcode = PLAY; _lto4b(blkno, cmd->blk_addr); _lto2b(nblks, cmd->xfer_len); @@ -1502,11 +1502,11 @@ cd_play_msf(struct cd_softc *sc, int startm, int starts, int startf, int endm, xs = scsi_xs_get(sc->sc_link, 0); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = PLAY_MSF; xs->cmdlen = sizeof(*cmd); xs->timeout = 20000; cmd = (struct scsi_play_msf *)xs->cmd; + cmd->opcode = PLAY_MSF; cmd->start_m = startm; cmd->start_s = starts; cmd->start_f = startf; @@ -1533,11 +1533,11 @@ cd_pause(struct cd_softc *sc, int go) xs = scsi_xs_get(sc->sc_link, 0); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = PAUSE; xs->cmdlen = sizeof(*cmd); xs->timeout = 2000; cmd = (struct scsi_pause *)xs->cmd; + cmd->opcode = PAUSE; cmd->resume = go; error = scsi_xs_sync(xs); @@ -1581,13 +1581,13 @@ cd_read_subchannel(struct cd_softc *sc, int mode, int format, int track, xs = scsi_xs_get(sc->sc_link, SCSI_DATA_IN | SCSI_SILENT); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = READ_SUBCHANNEL; xs->cmdlen = sizeof(*cmd); xs->data = (void *)data; xs->datalen = len; xs->timeout = 5000; cmd = (struct scsi_read_subchannel *)xs->cmd; + cmd->opcode = READ_SUBCHANNEL; if (mode == CD_MSF_FORMAT) cmd->byte2 |= CD_MSF; cmd->byte3 = SRS_SUBQ; @@ -1616,7 +1616,6 @@ cd_read_toc(struct cd_softc *sc, int mode, int start, void *data, int len, SCSI_IGNORE_ILLEGAL_REQUEST); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = READ_TOC; xs->cmdlen = sizeof(*cmd); xs->data = data; xs->datalen = len; @@ -1625,6 +1624,7 @@ cd_read_toc(struct cd_softc *sc, int mode, int start, void *data, int len, bzero(data, len); cmd = (struct scsi_read_toc *)xs->cmd; + cmd->opcode = READ_TOC; if (mode == CD_MSF_FORMAT) cmd->byte2 |= CD_MSF; @@ -1720,11 +1720,13 @@ dvd_auth(struct cd_softc *sc, union dvd_authinfo *a) bzero(buf, sizeof(buf)); + cmd = xs->cmd; + switch (a->type) { case DVD_LU_SEND_AGID: - xs->cmd->opcode = GPCMD_REPORT_KEY; - xs->cmd->bytes[8] = 8; - xs->cmd->bytes[9] = 0 | (0 << 6); + cmd->opcode = GPCMD_REPORT_KEY; + cmd->bytes[8] = 8; + cmd->bytes[9] = 0 | (0 << 6); xs->datalen = 8; xs->flags |= SCSI_DATA_IN; @@ -1736,9 +1738,9 @@ dvd_auth(struct cd_softc *sc, union dvd_authinfo *a) return (error); case DVD_LU_SEND_CHALLENGE: - xs->cmd->opcode = GPCMD_REPORT_KEY; - xs->cmd->bytes[8] = 16; - xs->cmd->bytes[9] = 1 | (a->lsc.agid << 6); + cmd->opcode = GPCMD_REPORT_KEY; + cmd->bytes[8] = 16; + cmd->bytes[9] = 1 | (a->lsc.agid << 6); xs->datalen = 16; xs->flags |= SCSI_DATA_IN; @@ -1749,9 +1751,9 @@ dvd_auth(struct cd_softc *sc, union dvd_authinfo *a) return (error); case DVD_LU_SEND_KEY1: - xs->cmd->opcode = GPCMD_REPORT_KEY; - xs->cmd->bytes[8] = 12; - xs->cmd->bytes[9] = 2 | (a->lsk.agid << 6); + cmd->opcode = GPCMD_REPORT_KEY; + cmd->bytes[8] = 12; + cmd->bytes[9] = 2 | (a->lsk.agid << 6); xs->datalen = 12; xs->flags |= SCSI_DATA_IN; @@ -1763,10 +1765,10 @@ dvd_auth(struct cd_softc *sc, union dvd_authinfo *a) return (error); case DVD_LU_SEND_TITLE_KEY: - xs->cmd->opcode = GPCMD_REPORT_KEY; - _lto4b(a->lstk.lba, &xs->cmd->bytes[1]); - xs->cmd->bytes[8] = 12; - xs->cmd->bytes[9] = 4 | (a->lstk.agid << 6); + cmd->opcode = GPCMD_REPORT_KEY; + _lto4b(a->lstk.lba, &cmd->bytes[1]); + cmd->bytes[8] = 12; + cmd->bytes[9] = 4 | (a->lstk.agid << 6); xs->datalen = 12; xs->flags |= SCSI_DATA_IN; @@ -1782,9 +1784,9 @@ dvd_auth(struct cd_softc *sc, union dvd_authinfo *a) return (error); case DVD_LU_SEND_ASF: - xs->cmd->opcode = GPCMD_REPORT_KEY; - xs->cmd->bytes[8] = 8; - xs->cmd->bytes[9] = 5 | (a->lsasf.agid << 6); + cmd->opcode = GPCMD_REPORT_KEY; + cmd->bytes[8] = 8; + cmd->bytes[9] = 5 | (a->lsasf.agid << 6); xs->datalen = 8; xs->flags |= SCSI_DATA_IN; @@ -1796,9 +1798,9 @@ dvd_auth(struct cd_softc *sc, union dvd_authinfo *a) return (error); case DVD_HOST_SEND_CHALLENGE: - xs->cmd->opcode = GPCMD_SEND_KEY; - xs->cmd->bytes[8] = 16; - xs->cmd->bytes[9] = 1 | (a->hsc.agid << 6); + cmd->opcode = GPCMD_SEND_KEY; + cmd->bytes[8] = 16; + cmd->bytes[9] = 1 | (a->hsc.agid << 6); buf[1] = 14; dvd_copy_challenge(&buf[4], a->hsc.chal); xs->datalen = 16; @@ -1812,9 +1814,9 @@ dvd_auth(struct cd_softc *sc, union dvd_authinfo *a) return (error); case DVD_HOST_SEND_KEY2: - xs->cmd->opcode = GPCMD_SEND_KEY; - xs->cmd->bytes[8] = 12; - xs->cmd->bytes[9] = 3 | (a->hsk.agid << 6); + cmd->opcode = GPCMD_SEND_KEY; + cmd->bytes[8] = 12; + cmd->bytes[9] = 3 | (a->hsk.agid << 6); buf[1] = 10; dvd_copy_key(&buf[4], a->hsk.key); xs->datalen = 12; @@ -1830,8 +1832,8 @@ dvd_auth(struct cd_softc *sc, union dvd_authinfo *a) return (error); case DVD_INVALIDATE_AGID: - xs->cmd->opcode = GPCMD_REPORT_KEY; - xs->cmd->bytes[9] = 0x3f | (a->lsa.agid << 6); + cmd->opcode = GPCMD_REPORT_KEY; + cmd->bytes[9] = 0x3f | (a->lsa.agid << 6); xs->data = NULL; error = scsi_xs_sync(xs); @@ -1840,9 +1842,9 @@ dvd_auth(struct cd_softc *sc, union dvd_authinfo *a) return (error); case DVD_LU_SEND_RPC_STATE: - xs->cmd->opcode = GPCMD_REPORT_KEY; - xs->cmd->bytes[8] = 8; - xs->cmd->bytes[9] = 8 | (0 << 6); + cmd->opcode = GPCMD_REPORT_KEY; + cmd->bytes[8] = 8; + cmd->bytes[9] = 8 | (0 << 6); xs->datalen = 8; xs->flags |= SCSI_DATA_IN; @@ -1859,9 +1861,9 @@ dvd_auth(struct cd_softc *sc, union dvd_authinfo *a) return (error); case DVD_HOST_SEND_RPC_STATE: - xs->cmd->opcode = GPCMD_SEND_KEY; - xs->cmd->bytes[8] = 8; - xs->cmd->bytes[9] = 6 | (0 << 6); + cmd->opcode = GPCMD_SEND_KEY; + cmd->bytes[8] = 8; + cmd->bytes[9] = 6 | (0 << 6); buf[1] = 6; buf[4] = a->hrpcs.pdrc; xs->datalen = 8; @@ -1890,7 +1892,6 @@ dvd_read_physical(struct cd_softc *sc, union dvd_struct *s) xs = scsi_xs_get(sc->sc_link, SCSI_DATA_IN); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = GPCMD_READ_DVD_STRUCTURE; xs->cmdlen = sizeof(*cmd); xs->data = buf; xs->datalen = sizeof(buf); @@ -1898,10 +1899,12 @@ dvd_read_physical(struct cd_softc *sc, union dvd_struct *s) bzero(buf, sizeof(buf)); - xs->cmd->bytes[6] = s->type; - _lto2b(sizeof(buf), &xs->cmd->bytes[7]); + cmd = xs->cmd; + cmd->opcode = GPCMD_READ_DVD_STRUCTURE; + cmd->bytes[6] = s->type; + _lto2b(sizeof(buf), &cmd->bytes[7]); - xs->cmd->bytes[5] = s->physical.layer_num; + cmd->bytes[5] = s->physical.layer_num; error = scsi_xs_sync(xs); scsi_xs_put(xs); @@ -1939,7 +1942,6 @@ dvd_read_copyright(struct cd_softc *sc, union dvd_struct *s) xs = scsi_xs_get(sc->sc_link, SCSI_DATA_IN); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = GPCMD_READ_DVD_STRUCTURE; xs->cmdlen = sizeof(*cmd); xs->data = buf; xs->datalen = sizeof(buf); @@ -1947,10 +1949,12 @@ dvd_read_copyright(struct cd_softc *sc, union dvd_struct *s) bzero(buf, sizeof(buf)); - xs->cmd->bytes[6] = s->type; - _lto2b(sizeof(buf), &xs->cmd->bytes[7]); + cmd = xs->cmd; + cmd->opcode = GPCMD_READ_DVD_STRUCTURE; + cmd->bytes[6] = s->type; + _lto2b(sizeof(buf), &cmd->bytes[7]); - xs->cmd->bytes[5] = s->copyright.layer_num; + cmd->bytes[5] = s->copyright.layer_num; error = scsi_xs_sync(xs); scsi_xs_put(xs); @@ -1980,13 +1984,13 @@ dvd_read_disckey(struct cd_softc *sc, union dvd_struct *s) free(buf, M_TEMP); return (ENOMEM); } - xs->cmd->opcode = GPCMD_READ_DVD_STRUCTURE; xs->cmdlen = sizeof(*cmd); xs->data = (void *)buf; xs->datalen = sizeof(*buf); xs->timeout = 30000; cmd = (struct scsi_read_dvd_structure *)xs->cmd; + cmd->opcode = GPCMD_READ_DVD_STRUCTURE; cmd->format = s->type; cmd->agid = s->disckey.agid << 6; _lto2b(sizeof(*buf), cmd->length); @@ -2012,7 +2016,6 @@ dvd_read_bca(struct cd_softc *sc, union dvd_struct *s) xs = scsi_xs_get(sc->sc_link, SCSI_DATA_IN); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = GPCMD_READ_DVD_STRUCTURE; xs->cmdlen = sizeof(*cmd); xs->data = buf; xs->datalen = sizeof(buf); @@ -2020,8 +2023,10 @@ dvd_read_bca(struct cd_softc *sc, union dvd_struct *s) bzero(buf, sizeof(buf)); - xs->cmd->bytes[6] = s->type; - _lto2b(sizeof(buf), &xs->cmd->bytes[7]); + cmd = xs->cmd; + cmd->opcode = GPCMD_READ_DVD_STRUCTURE; + cmd->bytes[6] = s->type; + _lto2b(sizeof(buf), &cmd->bytes[7]); error = scsi_xs_sync(xs); scsi_xs_put(xs); @@ -2052,13 +2057,13 @@ dvd_read_manufact(struct cd_softc *sc, union dvd_struct *s) free(buf, M_TEMP); return (ENOMEM); } - xs->cmd->opcode = GPCMD_READ_DVD_STRUCTURE; xs->cmdlen = sizeof(*cmd); xs->data = (void *)buf; xs->datalen = sizeof(*buf); xs->timeout = 30000; cmd = (struct scsi_read_dvd_structure *)xs->cmd; + cmd->opcode = GPCMD_READ_DVD_STRUCTURE; cmd->format = s->type; _lto2b(sizeof(*buf), cmd->length); diff --git a/sys/scsi/ch.c b/sys/scsi/ch.c index 82387004867..9429c09a91f 100644 --- a/sys/scsi/ch.c +++ b/sys/scsi/ch.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ch.c,v 1.42 2010/07/22 15:59:47 matthew Exp $ */ +/* $OpenBSD: ch.c,v 1.43 2010/08/30 02:47:56 matthew Exp $ */ /* $NetBSD: ch.c,v 1.26 1997/02/21 22:06:52 thorpej Exp $ */ /* @@ -380,12 +380,12 @@ ch_move(sc, cm) xs = scsi_xs_get(sc->sc_link, 0); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = MOVE_MEDIUM; xs->cmdlen = sizeof(*cmd); xs->retries = CHRETRIES; xs->timeout = 100000; cmd = (struct scsi_move_medium *)xs->cmd; + cmd->opcode = MOVE_MEDIUM; _lto2b(sc->sc_picker, cmd->tea); _lto2b(fromelem, cmd->src); _lto2b(toelem, cmd->dst); @@ -441,12 +441,12 @@ ch_exchange(sc, ce) xs = scsi_xs_get(sc->sc_link, 0); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = EXCHANGE_MEDIUM; xs->cmdlen = sizeof(*cmd); xs->retries = CHRETRIES; xs->timeout = 100000; cmd = (struct scsi_exchange_medium *)xs->cmd; + cmd->opcode = EXCHANGE_MEDIUM; _lto2b(sc->sc_picker, cmd->tea); _lto2b(src, cmd->src); _lto2b(dst1, cmd->fdst); @@ -491,12 +491,12 @@ ch_position(sc, cp) xs = scsi_xs_get(sc->sc_link, 0); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = POSITION_TO_ELEMENT; xs->cmdlen = sizeof(*cmd); xs->retries = CHRETRIES; xs->timeout = 100000; cmd = (struct scsi_position_to_element *)xs->cmd; + cmd->opcode = POSITION_TO_ELEMENT; _lto2b(sc->sc_picker, cmd->tea); _lto2b(dst, cmd->dst); if (cp->cp_flags & CP_INVERT) @@ -658,7 +658,6 @@ ch_getelemstatus(sc, first, count, data, datalen, voltag) xs = scsi_xs_get(sc->sc_link, SCSI_DATA_IN); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = READ_ELEMENT_STATUS; xs->cmdlen = sizeof(*cmd); xs->data = data; xs->datalen = datalen; @@ -666,6 +665,7 @@ ch_getelemstatus(sc, first, count, data, datalen, voltag) xs->timeout = 100000; cmd = (struct scsi_read_element_status *)xs->cmd; + cmd->opcode = READ_ELEMENT_STATUS; _lto2b(first, cmd->sea); _lto2b(count, cmd->count); _lto3b(datalen, cmd->len); diff --git a/sys/scsi/safte.c b/sys/scsi/safte.c index 707573c650e..58e903e9939 100644 --- a/sys/scsi/safte.c +++ b/sys/scsi/safte.c @@ -1,4 +1,4 @@ -/* $OpenBSD: safte.c,v 1.44 2010/07/22 15:59:47 matthew Exp $ */ +/* $OpenBSD: safte.c,v 1.45 2010/08/30 02:47:56 matthew Exp $ */ /* * Copyright (c) 2005 David Gwynne <dlg@openbsd.org> @@ -142,7 +142,6 @@ safte_match(struct device *parent, void *match, void *aux) xs = scsi_xs_get(sa->sa_sc_link, flags | SCSI_DATA_IN); if (xs == NULL) return (0); - xs->cmd->opcode = INQUIRY; xs->cmdlen = sizeof(*cmd); xs->data = (void *)&inqbuf; xs->datalen = length; @@ -150,6 +149,7 @@ safte_match(struct device *parent, void *match, void *aux) xs->timeout = 10000; cmd = (struct scsi_inquiry *)xs->cmd; + cmd->opcode = INQUIRY; _lto2b(length, cmd->length); memset(&inqbuf, 0, sizeof(inqbuf)); @@ -270,7 +270,6 @@ safte_read_config(struct safte_softc *sc) xs = scsi_xs_get(sc->sc_link, flags | SCSI_DATA_IN | SCSI_SILENT); if (xs == NULL) return (1); - xs->cmd->opcode = READ_BUFFER; xs->cmdlen = sizeof(*cmd); xs->data = (void *)&config; xs->datalen = sizeof(config); @@ -278,6 +277,7 @@ safte_read_config(struct safte_softc *sc) xs->timeout = 30000; cmd = (struct safte_readbuf_cmd *)xs->cmd; + cmd->opcode = READ_BUFFER; cmd->flags |= SAFTE_RD_MODE; cmd->bufferid = SAFTE_RD_CONFIG; cmd->length = htobe16(sizeof(config)); @@ -412,7 +412,6 @@ safte_read_encstat(void *arg) rw_exit_write(&sc->sc_lock); return; } - xs->cmd->opcode = READ_BUFFER; xs->cmdlen = sizeof(*cmd); xs->data = sc->sc_encbuf; xs->datalen = sc->sc_encbuflen; @@ -420,6 +419,7 @@ safte_read_encstat(void *arg) xs->timeout = 30000; cmd = (struct safte_readbuf_cmd *)xs->cmd; + cmd->opcode = READ_BUFFER; cmd->flags |= SAFTE_RD_MODE; cmd->bufferid = SAFTE_RD_ENCSTAT; cmd->length = htobe16(sc->sc_encbuflen); @@ -596,7 +596,6 @@ safte_bio_blink(struct safte_softc *sc, struct bioc_blink *blink) free(op, M_TEMP); return (ENOMEM); } - xs->cmd->opcode = WRITE_BUFFER; xs->cmdlen = sizeof(*cmd); xs->data = (void *)op; xs->datalen = sizeof(*op); @@ -604,6 +603,7 @@ safte_bio_blink(struct safte_softc *sc, struct bioc_blink *blink) xs->timeout = 30000; cmd = (struct safte_writebuf_cmd *)xs->cmd; + cmd->opcode = WRITE_BUFFER; cmd->flags |= SAFTE_WR_MODE; cmd->length = htobe16(sizeof(struct safte_slotop)); diff --git a/sys/scsi/scsi_base.c b/sys/scsi/scsi_base.c index 830abeb87ae..bdbb1604dd6 100644 --- a/sys/scsi/scsi_base.c +++ b/sys/scsi/scsi_base.c @@ -1,4 +1,4 @@ -/* $OpenBSD: scsi_base.c,v 1.192 2010/08/25 00:31:35 dlg Exp $ */ +/* $OpenBSD: scsi_base.c,v 1.193 2010/08/30 02:47:56 matthew Exp $ */ /* $NetBSD: scsi_base.c,v 1.43 1997/04/02 02:29:36 mycroft Exp $ */ /* @@ -768,12 +768,14 @@ scsi_size(struct scsi_link *sc_link, int flags, u_int32_t *blksize) free(rdcap, M_TEMP); return (0); } - xs->cmd->opcode = READ_CAPACITY; xs->cmdlen = sizeof(*cmd10); xs->data = (void *)rdcap; xs->datalen = sizeof(*rdcap); xs->timeout = 20000; + cmd10 = (struct scsi_read_capacity *)xs->cmd; + cmd10->opcode = READ_CAPACITY; + error = scsi_xs_sync(xs); scsi_xs_put(xs); @@ -806,13 +808,13 @@ scsi_size(struct scsi_link *sc_link, int flags, u_int32_t *blksize) free(rdcap16, M_TEMP); goto exit; } - xs->cmd->opcode = READ_CAPACITY_16; xs->cmdlen = sizeof(*cmd); xs->data = (void *)rdcap16; xs->datalen = sizeof(*rdcap16); xs->timeout = 20000; cmd = (struct scsi_read_capacity_16 *)xs->cmd; + cmd->opcode = READ_CAPACITY_16; cmd->byte2 = SRC16_SERVICE_ACTION; _lto4b(sizeof(*rdcap16), cmd->length); @@ -855,11 +857,13 @@ scsi_test_unit_ready(struct scsi_link *sc_link, int retries, int flags) xs = scsi_xs_get(sc_link, flags); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = TEST_UNIT_READY; xs->cmdlen = sizeof(*cmd); xs->retries = retries; xs->timeout = 10000; + cmd = (struct scsi_test_unit_ready *)xs->cmd; + cmd->opcode = TEST_UNIT_READY; + error = scsi_xs_sync(xs); scsi_xs_put(xs); @@ -931,7 +935,6 @@ scsi_inquire_vpd(struct scsi_link *sc_link, void *buf, u_int buflen, xs = scsi_xs_get(sc_link, flags | SCSI_DATA_IN | SCSI_SILENT); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = INQUIRY; xs->cmdlen = sizeof(*cmd); xs->data = buf; xs->datalen = buflen; @@ -939,6 +942,7 @@ scsi_inquire_vpd(struct scsi_link *sc_link, void *buf, u_int buflen, xs->timeout = 10000; cmd = (struct scsi_inquiry *)xs->cmd; + cmd->opcode = INQUIRY; cmd->flags = SI_EVPD; cmd->pagecode = page; _lto2b(buflen, cmd->length); @@ -965,12 +969,12 @@ scsi_prevent(struct scsi_link *sc_link, int type, int flags) xs = scsi_xs_get(sc_link, flags); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = PREVENT_ALLOW; xs->cmdlen = sizeof(*cmd); xs->retries = 2; xs->timeout = 5000; cmd = (struct scsi_prevent *)xs->cmd; + cmd->opcode = PREVENT_ALLOW; cmd->how = type; error = scsi_xs_sync(xs); @@ -992,12 +996,12 @@ scsi_start(struct scsi_link *sc_link, int type, int flags) xs = scsi_xs_get(sc_link, flags); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = START_STOP; xs->cmdlen = sizeof(*cmd); xs->retries = 2; xs->timeout = (type == SSS_START) ? 30000 : 10000; cmd = (struct scsi_start_stop *)xs->cmd; + cmd->opcode = START_STOP; cmd->how = type; error = scsi_xs_sync(xs); @@ -1017,7 +1021,6 @@ scsi_mode_sense(struct scsi_link *sc_link, int byte2, int page, xs = scsi_xs_get(sc_link, flags | SCSI_DATA_IN); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = MODE_SENSE; xs->cmdlen = sizeof(*cmd); xs->data = (void *)data; xs->datalen = len; @@ -1031,6 +1034,7 @@ scsi_mode_sense(struct scsi_link *sc_link, int byte2, int page, bzero(data, len); cmd = (struct scsi_mode_sense *)xs->cmd; + cmd->opcode = MODE_SENSE; cmd->byte2 = byte2; cmd->page = page; @@ -1058,7 +1062,6 @@ scsi_mode_sense_big(struct scsi_link *sc_link, int byte2, int page, xs = scsi_xs_get(sc_link, flags | SCSI_DATA_IN); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = MODE_SENSE_BIG; xs->cmdlen = sizeof(*cmd); xs->data = (void *)data; xs->datalen = len; @@ -1072,6 +1075,7 @@ scsi_mode_sense_big(struct scsi_link *sc_link, int byte2, int page, bzero(data, len); cmd = (struct scsi_mode_sense_big *)xs->cmd; + cmd->opcode = MODE_SENSE_BIG; cmd->byte2 = byte2; cmd->page = page; @@ -1234,13 +1238,13 @@ scsi_mode_select(struct scsi_link *sc_link, int byte2, xs = scsi_xs_get(sc_link, flags | SCSI_DATA_OUT); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = MODE_SELECT; xs->cmdlen = sizeof(*cmd); xs->data = (void *)data; xs->datalen = len; xs->timeout = timeout; cmd = (struct scsi_mode_select *)xs->cmd; + cmd->opcode = MODE_SELECT; cmd->byte2 = byte2; cmd->length = len; @@ -1269,13 +1273,13 @@ scsi_mode_select_big(struct scsi_link *sc_link, int byte2, xs = scsi_xs_get(sc_link, flags | SCSI_DATA_OUT); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = MODE_SELECT_BIG; xs->cmdlen = sizeof(*cmd); xs->data = (void *)data; xs->datalen = len; xs->timeout = timeout; cmd = (struct scsi_mode_select_big *)xs->cmd; + cmd->opcode = MODE_SELECT_BIG; cmd->byte2 = byte2; _lto2b(len, cmd->length); @@ -1303,7 +1307,6 @@ scsi_report_luns(struct scsi_link *sc_link, int selectreport, xs = scsi_xs_get(sc_link, flags | SCSI_DATA_IN); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = REPORT_LUNS; xs->cmdlen = sizeof(*cmd); xs->data = (void *)data; xs->datalen = datalen; @@ -1312,6 +1315,7 @@ scsi_report_luns(struct scsi_link *sc_link, int selectreport, bzero(data, datalen); cmd = (struct scsi_report_luns *)xs->cmd; + cmd->opcode = REPORT_LUNS; cmd->selectreport = selectreport; _lto4b(datalen, cmd->length); diff --git a/sys/scsi/ses.c b/sys/scsi/ses.c index f67b4907130..4cbe7596586 100644 --- a/sys/scsi/ses.c +++ b/sys/scsi/ses.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ses.c,v 1.49 2010/08/02 23:00:54 krw Exp $ */ +/* $OpenBSD: ses.c,v 1.50 2010/08/30 02:47:56 matthew Exp $ */ /* * Copyright (c) 2005 David Gwynne <dlg@openbsd.org> @@ -280,7 +280,6 @@ ses_read_config(struct ses_softc *sc) free(buf, M_DEVBUF); return (1); } - xs->cmd->opcode = RECEIVE_DIAGNOSTIC; xs->cmdlen = sizeof(*cmd); xs->data = buf; xs->datalen = SES_BUFLEN; @@ -288,6 +287,7 @@ ses_read_config(struct ses_softc *sc) xs->timeout = 3000; cmd = (struct ses_scsi_diag *)xs->cmd; + cmd->opcode = RECEIVE_DIAGNOSTIC; cmd->flags |= SES_DIAG_PCV; cmd->pgcode = SES_PAGE_CONFIG; cmd->length = htobe16(SES_BUFLEN); @@ -376,7 +376,6 @@ ses_read_status(struct ses_softc *sc) xs = scsi_xs_get(sc->sc_link, flags | SCSI_DATA_IN | SCSI_SILENT); if (xs == NULL) return (1); - xs->cmd->opcode = RECEIVE_DIAGNOSTIC; xs->cmdlen = sizeof(*cmd); xs->data = sc->sc_buf; xs->datalen = sc->sc_buflen; @@ -384,6 +383,7 @@ ses_read_status(struct ses_softc *sc) xs->timeout = 3000; cmd = (struct ses_scsi_diag *)xs->cmd; + cmd->opcode = RECEIVE_DIAGNOSTIC; cmd->flags |= SES_DIAG_PCV; cmd->pgcode = SES_PAGE_STATUS; cmd->length = htobe16(sc->sc_buflen); @@ -607,7 +607,6 @@ ses_write_config(struct ses_softc *sc) xs = scsi_xs_get(sc->sc_link, flags | SCSI_DATA_OUT | SCSI_SILENT); if (xs == NULL) return (1); - xs->cmd->opcode = SEND_DIAGNOSTIC; xs->cmdlen = sizeof(*cmd); xs->data = sc->sc_buf; xs->datalen = sc->sc_buflen; @@ -615,6 +614,7 @@ ses_write_config(struct ses_softc *sc) xs->timeout = 3000; cmd = (struct ses_scsi_diag *)xs->cmd; + cmd->opcode = SEND_DIAGNOSTIC; cmd->flags |= SES_DIAG_PF; cmd->length = htobe16(sc->sc_buflen); diff --git a/sys/scsi/st.c b/sys/scsi/st.c index 44fdd294666..5ce3c057a0e 100644 --- a/sys/scsi/st.c +++ b/sys/scsi/st.c @@ -1,4 +1,4 @@ -/* $OpenBSD: st.c,v 1.106 2010/07/22 05:26:34 matthew Exp $ */ +/* $OpenBSD: st.c,v 1.107 2010/08/30 02:47:56 matthew Exp $ */ /* $NetBSD: st.c,v 1.71 1997/02/21 23:03:49 thorpej Exp $ */ /* @@ -1382,7 +1382,6 @@ st_read(struct st_softc *st, char *buf, int size, int flags) xs = scsi_xs_get(st->sc_link, flags | SCSI_DATA_IN); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = READ; xs->cmdlen = sizeof(*cmd); xs->data = buf; xs->datalen = size; @@ -1390,6 +1389,7 @@ st_read(struct st_softc *st, char *buf, int size, int flags) xs->timeout = ST_IO_TIME; cmd = (struct scsi_rw_tape *)xs->cmd; + cmd->opcode = READ; if (st->flags & ST_FIXEDBLOCKS) { cmd->byte2 |= SRW_FIXED; _lto3b(size / (st->blksize ? st->blksize : DEF_FIXED_BSIZE), @@ -1421,12 +1421,14 @@ st_read_block_limits(struct st_softc *st, int flags) xs = scsi_xs_get(sc_link, flags | SCSI_DATA_IN); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = READ_BLOCK_LIMITS; xs->cmdlen = sizeof(*cmd); xs->data = (void *)&block_limits; xs->datalen = sizeof(block_limits); xs->timeout = ST_CTL_TIME; + cmd = (struct scsi_block_limits *)xs->cmd; + cmd->opcode = READ_BLOCK_LIMITS; + error = scsi_xs_sync(xs); scsi_xs_put(xs); @@ -1628,7 +1630,6 @@ st_erase(struct st_softc *st, int full, int flags) xs = scsi_xs_get(st->sc_link, flags); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = ERASE; xs->cmdlen = sizeof(*cmd); /* @@ -1637,6 +1638,7 @@ st_erase(struct st_softc *st, int full, int flags) * asking the drive to write an erase gap. */ cmd = (struct scsi_erase *)xs->cmd; + cmd->opcode = ERASE; if (full) { cmd->byte2 = SE_IMMED|SE_LONG; xs->timeout = ST_SPC_TIME; @@ -1731,9 +1733,9 @@ st_space(struct st_softc *st, int number, u_int what, int flags) st->media_blkno = -1; return (ENOMEM); } - xs->cmd->opcode = SPACE; cmd = (struct scsi_space *)xs->cmd; + cmd->opcode = SPACE; cmd->byte2 = what; _lto3b(number, cmd->number); xs->cmdlen = sizeof(*cmd); @@ -1789,7 +1791,6 @@ st_write_filemarks(struct st_softc *st, int number, int flags) st->media_blkno = -1; return (ENOMEM); } - xs->cmd->opcode = WRITE_FILEMARKS; xs->cmdlen = sizeof(*cmd); xs->timeout = ST_IO_TIME * 4; @@ -1809,6 +1810,7 @@ st_write_filemarks(struct st_softc *st, int number, int flags) } cmd = (struct scsi_write_filemarks *)xs->cmd; + cmd->opcode = WRITE_FILEMARKS; _lto3b(number, cmd->number); error = scsi_xs_sync(xs); @@ -1888,11 +1890,11 @@ st_load(struct st_softc *st, u_int type, int flags) xs = scsi_xs_get(st->sc_link, flags); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = LOAD; xs->cmdlen = sizeof(*cmd); xs->timeout = ST_SPC_TIME; cmd = (struct scsi_load *)xs->cmd; + cmd->opcode = LOAD; cmd->how = type; error = scsi_xs_sync(xs); @@ -1919,11 +1921,11 @@ st_rewind(struct st_softc *st, u_int immediate, int flags) xs = scsi_xs_get(st->sc_link, flags); if (xs == NULL) return (ENOMEM); - xs->cmd->opcode = REWIND; xs->cmdlen = sizeof(*cmd); xs->timeout = immediate ? ST_CTL_TIME : ST_SPC_TIME; cmd = (struct scsi_rewind *)xs->cmd; + cmd->opcode = REWIND; cmd->byte2 = immediate; error = scsi_xs_sync(xs); |