Deleted Added
full compact
umass.c (225350) umass.c (225950)
1#include <sys/cdefs.h>
1#include <sys/cdefs.h>
2__FBSDID("$FreeBSD: head/sys/dev/usb/storage/umass.c 225350 2011-09-02 18:50:44Z hselasky $");
2__FBSDID("$FreeBSD: head/sys/dev/usb/storage/umass.c 225950 2011-10-03 20:32:55Z ken $");
3
4/*-
5 * Copyright (c) 1999 MAEKAWA Masahide <bishop@rr.iij4u.or.jp>,
6 * Nick Hibma <n_hibma@FreeBSD.org>
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions

--- 11 unchanged lines hidden (view full) ---

22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
3
4/*-
5 * Copyright (c) 1999 MAEKAWA Masahide <bishop@rr.iij4u.or.jp>,
6 * Nick Hibma <n_hibma@FreeBSD.org>
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions

--- 11 unchanged lines hidden (view full) ---

22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 * $FreeBSD: head/sys/dev/usb/storage/umass.c 225350 2011-09-02 18:50:44Z hselasky $
30 * $FreeBSD: head/sys/dev/usb/storage/umass.c 225950 2011-10-03 20:32:55Z ken $
31 * $NetBSD: umass.c,v 1.28 2000/04/02 23:46:53 augustss Exp $
32 */
33
34/* Also already merged from NetBSD:
35 * $NetBSD: umass.c,v 1.67 2001/11/25 19:05:22 augustss Exp $
36 * $NetBSD: umass.c,v 1.90 2002/11/04 19:17:33 pooka Exp $
37 * $NetBSD: umass.c,v 1.108 2003/11/07 17:03:25 wiz Exp $
38 * $NetBSD: umass.c,v 1.109 2003/12/04 13:57:31 keihan Exp $

--- 2300 unchanged lines hidden (view full) ---

2339 }
2340
2341 /*
2342 * Handle EVPD inquiry for broken devices first
2343 * NO_INQUIRY also implies NO_INQUIRY_EVPD
2344 */
2345 if ((sc->sc_quirks & (NO_INQUIRY_EVPD | NO_INQUIRY)) &&
2346 (sc->sc_transfer.cmd_data[1] & SI_EVPD)) {
31 * $NetBSD: umass.c,v 1.28 2000/04/02 23:46:53 augustss Exp $
32 */
33
34/* Also already merged from NetBSD:
35 * $NetBSD: umass.c,v 1.67 2001/11/25 19:05:22 augustss Exp $
36 * $NetBSD: umass.c,v 1.90 2002/11/04 19:17:33 pooka Exp $
37 * $NetBSD: umass.c,v 1.108 2003/11/07 17:03:25 wiz Exp $
38 * $NetBSD: umass.c,v 1.109 2003/12/04 13:57:31 keihan Exp $

--- 2300 unchanged lines hidden (view full) ---

2339 }
2340
2341 /*
2342 * Handle EVPD inquiry for broken devices first
2343 * NO_INQUIRY also implies NO_INQUIRY_EVPD
2344 */
2345 if ((sc->sc_quirks & (NO_INQUIRY_EVPD | NO_INQUIRY)) &&
2346 (sc->sc_transfer.cmd_data[1] & SI_EVPD)) {
2347 struct scsi_sense_data *sense;
2348
2347
2349 sense = &ccb->csio.sense_data;
2350 bzero(sense, sizeof(*sense));
2351 sense->error_code = SSD_CURRENT_ERROR;
2352 sense->flags = SSD_KEY_ILLEGAL_REQUEST;
2353 sense->add_sense_code = 0x24;
2354 sense->extra_len = 10;
2348 scsi_set_sense_data(&ccb->csio.sense_data,
2349 /*sense_format*/ SSD_TYPE_NONE,
2350 /*current_error*/ 1,
2351 /*sense_key*/ SSD_KEY_ILLEGAL_REQUEST,
2352 /*asc*/ 0x24,
2353 /*ascq*/ 0x00,
2354 /*extra args*/ SSD_ELEM_NONE);
2355 ccb->csio.scsi_status = SCSI_STATUS_CHECK_COND;
2356 ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR |
2357 CAM_AUTOSNS_VALID;
2358 xpt_done(ccb);
2359 goto done;
2360 }
2361 /*
2362 * Return fake inquiry data for

--- 263 unchanged lines hidden (view full) ---

2626/*
2627 * Finalise a completed autosense operation
2628 */
2629static void
2630umass_cam_sense_cb(struct umass_softc *sc, union ccb *ccb, uint32_t residue,
2631 uint8_t status)
2632{
2633 uint8_t *cmd;
2355 ccb->csio.scsi_status = SCSI_STATUS_CHECK_COND;
2356 ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR |
2357 CAM_AUTOSNS_VALID;
2358 xpt_done(ccb);
2359 goto done;
2360 }
2361 /*
2362 * Return fake inquiry data for

--- 263 unchanged lines hidden (view full) ---

2626/*
2627 * Finalise a completed autosense operation
2628 */
2629static void
2630umass_cam_sense_cb(struct umass_softc *sc, union ccb *ccb, uint32_t residue,
2631 uint8_t status)
2632{
2633 uint8_t *cmd;
2634 uint8_t key;
2635
2636 switch (status) {
2637 case STATUS_CMD_OK:
2638 case STATUS_CMD_UNKNOWN:
2634
2635 switch (status) {
2636 case STATUS_CMD_OK:
2637 case STATUS_CMD_UNKNOWN:
2639 case STATUS_CMD_FAILED:
2638 case STATUS_CMD_FAILED: {
2639 int key, sense_len;
2640
2640
2641 ccb->csio.sense_resid = residue;
2642 sense_len = ccb->csio.sense_len - ccb->csio.sense_resid;
2643 key = scsi_get_sense_key(&ccb->csio.sense_data, sense_len,
2644 /*show_errors*/ 1);
2645
2641 if (ccb->csio.ccb_h.flags & CAM_CDB_POINTER) {
2642 cmd = (uint8_t *)(ccb->csio.cdb_io.cdb_ptr);
2643 } else {
2644 cmd = (uint8_t *)(ccb->csio.cdb_io.cdb_bytes);
2645 }
2646
2646 if (ccb->csio.ccb_h.flags & CAM_CDB_POINTER) {
2647 cmd = (uint8_t *)(ccb->csio.cdb_io.cdb_ptr);
2648 } else {
2649 cmd = (uint8_t *)(ccb->csio.cdb_io.cdb_bytes);
2650 }
2651
2647 key = (ccb->csio.sense_data.flags & SSD_KEY);
2648
2649 /*
2650 * Getting sense data always succeeds (apart from wire
2651 * failures):
2652 */
2653 if ((sc->sc_quirks & RS_NO_CLEAR_UA) &&
2654 (cmd[0] == INQUIRY) &&
2655 (key == SSD_KEY_UNIT_ATTENTION)) {
2656 /*

--- 42 unchanged lines hidden (view full) ---

2699 break;
2700 } else {
2701 ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR
2702 | CAM_AUTOSNS_VALID;
2703 ccb->csio.scsi_status = SCSI_STATUS_CHECK_COND;
2704 }
2705 xpt_done(ccb);
2706 break;
2652 /*
2653 * Getting sense data always succeeds (apart from wire
2654 * failures):
2655 */
2656 if ((sc->sc_quirks & RS_NO_CLEAR_UA) &&
2657 (cmd[0] == INQUIRY) &&
2658 (key == SSD_KEY_UNIT_ATTENTION)) {
2659 /*

--- 42 unchanged lines hidden (view full) ---

2702 break;
2703 } else {
2704 ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR
2705 | CAM_AUTOSNS_VALID;
2706 ccb->csio.scsi_status = SCSI_STATUS_CHECK_COND;
2707 }
2708 xpt_done(ccb);
2709 break;
2707
2710 }
2708 default:
2709 DPRINTF(sc, UDMASS_SCSI, "Autosense failed, "
2710 "status %d\n", status);
2711 ccb->ccb_h.status = CAM_AUTOSENSE_FAIL;
2712 xpt_done(ccb);
2713 }
2714}
2715

--- 395 unchanged lines hidden ---
2711 default:
2712 DPRINTF(sc, UDMASS_SCSI, "Autosense failed, "
2713 "status %d\n", status);
2714 ccb->ccb_h.status = CAM_AUTOSENSE_FAIL;
2715 xpt_done(ccb);
2716 }
2717}
2718

--- 395 unchanged lines hidden ---