Deleted Added
full compact
sbp.c (255871) sbp.c (257381)
1/*-
2 * Copyright (c) 2003 Hidetoshi Shimokawa
3 * Copyright (c) 1998-2002 Katsushi Kobayashi and Hidetoshi Shimokawa
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

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

26 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
27 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
30 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *
1/*-
2 * Copyright (c) 2003 Hidetoshi Shimokawa
3 * Copyright (c) 1998-2002 Katsushi Kobayashi and Hidetoshi Shimokawa
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

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

26 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
27 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
30 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *
34 * $FreeBSD: head/sys/dev/firewire/sbp.c 255871 2013-09-25 17:16:21Z scottl $
34 * $FreeBSD: head/sys/dev/firewire/sbp.c 257381 2013-10-30 14:04:47Z nwhitehorn $
35 *
36 */
37
38#include <sys/param.h>
39#include <sys/systm.h>
40#include <sys/module.h>
41#include <sys/bus.h>
42#include <sys/kernel.h>

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

1488}
1489
1490static void
1491sbp_print_scsi_cmd(struct sbp_ocb *ocb)
1492{
1493 struct ccb_scsiio *csio;
1494
1495 csio = &ocb->ccb->csio;
35 *
36 */
37
38#include <sys/param.h>
39#include <sys/systm.h>
40#include <sys/module.h>
41#include <sys/bus.h>
42#include <sys/kernel.h>

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

1488}
1489
1490static void
1491sbp_print_scsi_cmd(struct sbp_ocb *ocb)
1492{
1493 struct ccb_scsiio *csio;
1494
1495 csio = &ocb->ccb->csio;
1496 printf("%s:%d:%d XPT_SCSI_IO: "
1496 printf("%s:%d:%jx XPT_SCSI_IO: "
1497 "cmd: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x"
1498 ", flags: 0x%02x, "
1499 "%db cmd/%db data/%db sense\n",
1500 device_get_nameunit(ocb->sdev->target->sbp->fd.dev),
1497 "cmd: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x"
1498 ", flags: 0x%02x, "
1499 "%db cmd/%db data/%db sense\n",
1500 device_get_nameunit(ocb->sdev->target->sbp->fd.dev),
1501 ocb->ccb->ccb_h.target_id, ocb->ccb->ccb_h.target_lun,
1501 ocb->ccb->ccb_h.target_id,
1502 (uintmax_t)ocb->ccb->ccb_h.target_lun,
1502 csio->cdb_io.cdb_bytes[0],
1503 csio->cdb_io.cdb_bytes[1],
1504 csio->cdb_io.cdb_bytes[2],
1505 csio->cdb_io.cdb_bytes[3],
1506 csio->cdb_io.cdb_bytes[4],
1507 csio->cdb_io.cdb_bytes[5],
1508 csio->cdb_io.cdb_bytes[6],
1509 csio->cdb_io.cdb_bytes[7],

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

2349 if (sdev != NULL && sdev->status != SBP_DEV_ATTACHED &&
2350 sdev->status != SBP_DEV_PROBE)
2351 sdev = NULL;
2352 }
2353 }
2354
2355SBP_DEBUG(1)
2356 if (sdev == NULL)
1503 csio->cdb_io.cdb_bytes[0],
1504 csio->cdb_io.cdb_bytes[1],
1505 csio->cdb_io.cdb_bytes[2],
1506 csio->cdb_io.cdb_bytes[3],
1507 csio->cdb_io.cdb_bytes[4],
1508 csio->cdb_io.cdb_bytes[5],
1509 csio->cdb_io.cdb_bytes[6],
1510 csio->cdb_io.cdb_bytes[7],

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

2350 if (sdev != NULL && sdev->status != SBP_DEV_ATTACHED &&
2351 sdev->status != SBP_DEV_PROBE)
2352 sdev = NULL;
2353 }
2354 }
2355
2356SBP_DEBUG(1)
2357 if (sdev == NULL)
2357 printf("invalid target %d lun %d\n",
2358 ccb->ccb_h.target_id, ccb->ccb_h.target_lun);
2358 printf("invalid target %d lun %jx\n",
2359 ccb->ccb_h.target_id, (uintmax_t)ccb->ccb_h.target_lun);
2359END_DEBUG
2360
2361 switch (ccb->ccb_h.func_code) {
2362 case XPT_SCSI_IO:
2363 case XPT_RESET_DEV:
2364 case XPT_GET_TRAN_SETTINGS:
2365 case XPT_SET_TRAN_SETTINGS:
2366 case XPT_CALC_GEOMETRY:
2367 if (sdev == NULL) {
2368SBP_DEBUG(1)
2360END_DEBUG
2361
2362 switch (ccb->ccb_h.func_code) {
2363 case XPT_SCSI_IO:
2364 case XPT_RESET_DEV:
2365 case XPT_GET_TRAN_SETTINGS:
2366 case XPT_SET_TRAN_SETTINGS:
2367 case XPT_CALC_GEOMETRY:
2368 if (sdev == NULL) {
2369SBP_DEBUG(1)
2369 printf("%s:%d:%d:func_code 0x%04x: "
2370 printf("%s:%d:%jx:func_code 0x%04x: "
2370 "Invalid target (target needed)\n",
2371 device_get_nameunit(sbp->fd.dev),
2371 "Invalid target (target needed)\n",
2372 device_get_nameunit(sbp->fd.dev),
2372 ccb->ccb_h.target_id, ccb->ccb_h.target_lun,
2373 ccb->ccb_h.target_id,
2374 (uintmax_t)ccb->ccb_h.target_lun,
2373 ccb->ccb_h.func_code);
2374END_DEBUG
2375
2376 ccb->ccb_h.status = CAM_DEV_NOT_THERE;
2377 xpt_done(ccb);
2378 return;
2379 }
2380 break;
2381 case XPT_PATH_INQ:
2382 case XPT_NOOP:
2383 /* The opcodes sometimes aimed at a target (sc is valid),
2384 * sometimes aimed at the SIM (sc is invalid and target is
2385 * CAM_TARGET_WILDCARD)
2386 */
2387 if (sbp == NULL &&
2388 ccb->ccb_h.target_id != CAM_TARGET_WILDCARD) {
2389SBP_DEBUG(0)
2375 ccb->ccb_h.func_code);
2376END_DEBUG
2377
2378 ccb->ccb_h.status = CAM_DEV_NOT_THERE;
2379 xpt_done(ccb);
2380 return;
2381 }
2382 break;
2383 case XPT_PATH_INQ:
2384 case XPT_NOOP:
2385 /* The opcodes sometimes aimed at a target (sc is valid),
2386 * sometimes aimed at the SIM (sc is invalid and target is
2387 * CAM_TARGET_WILDCARD)
2388 */
2389 if (sbp == NULL &&
2390 ccb->ccb_h.target_id != CAM_TARGET_WILDCARD) {
2391SBP_DEBUG(0)
2390 printf("%s:%d:%d func_code 0x%04x: "
2392 printf("%s:%d:%jx func_code 0x%04x: "
2391 "Invalid target (no wildcard)\n",
2392 device_get_nameunit(sbp->fd.dev),
2393 "Invalid target (no wildcard)\n",
2394 device_get_nameunit(sbp->fd.dev),
2393 ccb->ccb_h.target_id, ccb->ccb_h.target_lun,
2395 ccb->ccb_h.target_id,
2396 (uintmax_t)ccb->ccb_h.target_lun,
2394 ccb->ccb_h.func_code);
2395END_DEBUG
2396 ccb->ccb_h.status = CAM_DEV_NOT_THERE;
2397 xpt_done(ccb);
2398 return;
2399 }
2400 break;
2401 default:

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

2410 struct sbp_ocb *ocb;
2411 int speed;
2412 void *cdb;
2413
2414 csio = &ccb->csio;
2415 mtx_assert(sim->mtx, MA_OWNED);
2416
2417SBP_DEBUG(2)
2397 ccb->ccb_h.func_code);
2398END_DEBUG
2399 ccb->ccb_h.status = CAM_DEV_NOT_THERE;
2400 xpt_done(ccb);
2401 return;
2402 }
2403 break;
2404 default:

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

2413 struct sbp_ocb *ocb;
2414 int speed;
2415 void *cdb;
2416
2417 csio = &ccb->csio;
2418 mtx_assert(sim->mtx, MA_OWNED);
2419
2420SBP_DEBUG(2)
2418 printf("%s:%d:%d XPT_SCSI_IO: "
2421 printf("%s:%d:%jx XPT_SCSI_IO: "
2419 "cmd: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x"
2420 ", flags: 0x%02x, "
2421 "%db cmd/%db data/%db sense\n",
2422 device_get_nameunit(sbp->fd.dev),
2422 "cmd: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x"
2423 ", flags: 0x%02x, "
2424 "%db cmd/%db data/%db sense\n",
2425 device_get_nameunit(sbp->fd.dev),
2423 ccb->ccb_h.target_id, ccb->ccb_h.target_lun,
2426 ccb->ccb_h.target_id, (uintmax_t)ccb->ccb_h.target_lun,
2424 csio->cdb_io.cdb_bytes[0],
2425 csio->cdb_io.cdb_bytes[1],
2426 csio->cdb_io.cdb_bytes[2],
2427 csio->cdb_io.cdb_bytes[3],
2428 csio->cdb_io.cdb_bytes[4],
2429 csio->cdb_io.cdb_bytes[5],
2430 csio->cdb_io.cdb_bytes[6],
2431 csio->cdb_io.cdb_bytes[7],

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

2516 ccg = &ccb->ccg;
2517 if (ccg->block_size == 0) {
2518 printf("sbp_action1: block_size is 0.\n");
2519 ccb->ccb_h.status = CAM_REQ_INVALID;
2520 xpt_done(ccb);
2521 break;
2522 }
2523SBP_DEBUG(1)
2427 csio->cdb_io.cdb_bytes[0],
2428 csio->cdb_io.cdb_bytes[1],
2429 csio->cdb_io.cdb_bytes[2],
2430 csio->cdb_io.cdb_bytes[3],
2431 csio->cdb_io.cdb_bytes[4],
2432 csio->cdb_io.cdb_bytes[5],
2433 csio->cdb_io.cdb_bytes[6],
2434 csio->cdb_io.cdb_bytes[7],

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

2519 ccg = &ccb->ccg;
2520 if (ccg->block_size == 0) {
2521 printf("sbp_action1: block_size is 0.\n");
2522 ccb->ccb_h.status = CAM_REQ_INVALID;
2523 xpt_done(ccb);
2524 break;
2525 }
2526SBP_DEBUG(1)
2524 printf("%s:%d:%d:%d:XPT_CALC_GEOMETRY: "
2527 printf("%s:%d:%d:%jx:XPT_CALC_GEOMETRY: "
2525#if defined(__DragonFly__) || __FreeBSD_version < 500000
2526 "Volume size = %d\n",
2527#else
2528 "Volume size = %jd\n",
2529#endif
2530 device_get_nameunit(sbp->fd.dev),
2531 cam_sim_path(sbp->sim),
2528#if defined(__DragonFly__) || __FreeBSD_version < 500000
2529 "Volume size = %d\n",
2530#else
2531 "Volume size = %jd\n",
2532#endif
2533 device_get_nameunit(sbp->fd.dev),
2534 cam_sim_path(sbp->sim),
2532 ccb->ccb_h.target_id, ccb->ccb_h.target_lun,
2535 ccb->ccb_h.target_id, (uintmax_t)ccb->ccb_h.target_lun,
2533#if defined(__FreeBSD__) && __FreeBSD_version >= 500000
2534 (uintmax_t)
2535#endif
2536 ccg->volume_size);
2537END_DEBUG
2538
2539#if defined(__DragonFly__) || __FreeBSD_version < 501100
2540 size_mb = ccg->volume_size

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

2568 xpt_done(ccb);
2569 break;
2570 }
2571 case XPT_PATH_INQ: /* Path routing inquiry */
2572 {
2573 struct ccb_pathinq *cpi = &ccb->cpi;
2574
2575SBP_DEBUG(1)
2536#if defined(__FreeBSD__) && __FreeBSD_version >= 500000
2537 (uintmax_t)
2538#endif
2539 ccg->volume_size);
2540END_DEBUG
2541
2542#if defined(__DragonFly__) || __FreeBSD_version < 501100
2543 size_mb = ccg->volume_size

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

2571 xpt_done(ccb);
2572 break;
2573 }
2574 case XPT_PATH_INQ: /* Path routing inquiry */
2575 {
2576 struct ccb_pathinq *cpi = &ccb->cpi;
2577
2578SBP_DEBUG(1)
2576 printf("%s:%d:%d XPT_PATH_INQ:.\n",
2579 printf("%s:%d:%jx XPT_PATH_INQ:.\n",
2577 device_get_nameunit(sbp->fd.dev),
2580 device_get_nameunit(sbp->fd.dev),
2578 ccb->ccb_h.target_id, ccb->ccb_h.target_lun);
2581 ccb->ccb_h.target_id, (uintmax_t)ccb->ccb_h.target_lun);
2579END_DEBUG
2580 cpi->version_num = 1; /* XXX??? */
2581 cpi->hba_inquiry = PI_TAG_ABLE;
2582 cpi->target_sprt = 0;
2583 cpi->hba_misc = PIM_NOBUSRESET | PIM_NO_6_BYTE;
2584 cpi->hba_eng_cnt = 0;
2585 cpi->max_target = SBP_NUM_TARGETS - 1;
2586 cpi->max_lun = SBP_NUM_LUNS - 1;

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

2612 cts->protocol_version = SCSI_REV_2;
2613 cts->transport = XPORT_SPI; /* should have a FireWire */
2614 cts->transport_version = 2;
2615 spi->valid = CTS_SPI_VALID_DISC;
2616 spi->flags = CTS_SPI_FLAGS_DISC_ENB;
2617 scsi->valid = CTS_SCSI_VALID_TQ;
2618 scsi->flags = CTS_SCSI_FLAGS_TAG_ENB;
2619SBP_DEBUG(1)
2582END_DEBUG
2583 cpi->version_num = 1; /* XXX??? */
2584 cpi->hba_inquiry = PI_TAG_ABLE;
2585 cpi->target_sprt = 0;
2586 cpi->hba_misc = PIM_NOBUSRESET | PIM_NO_6_BYTE;
2587 cpi->hba_eng_cnt = 0;
2588 cpi->max_target = SBP_NUM_TARGETS - 1;
2589 cpi->max_lun = SBP_NUM_LUNS - 1;

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

2615 cts->protocol_version = SCSI_REV_2;
2616 cts->transport = XPORT_SPI; /* should have a FireWire */
2617 cts->transport_version = 2;
2618 spi->valid = CTS_SPI_VALID_DISC;
2619 spi->flags = CTS_SPI_FLAGS_DISC_ENB;
2620 scsi->valid = CTS_SCSI_VALID_TQ;
2621 scsi->flags = CTS_SCSI_FLAGS_TAG_ENB;
2622SBP_DEBUG(1)
2620 printf("%s:%d:%d XPT_GET_TRAN_SETTINGS:.\n",
2623 printf("%s:%d:%jx XPT_GET_TRAN_SETTINGS:.\n",
2621 device_get_nameunit(sbp->fd.dev),
2624 device_get_nameunit(sbp->fd.dev),
2622 ccb->ccb_h.target_id, ccb->ccb_h.target_lun);
2625 ccb->ccb_h.target_id, (uintmax_t)ccb->ccb_h.target_lun);
2623END_DEBUG
2624 cts->ccb_h.status = CAM_REQ_CMP;
2625 xpt_done(ccb);
2626 break;
2627 }
2628 case XPT_ABORT:
2629 ccb->ccb_h.status = CAM_UA_ABORT;
2630 xpt_done(ccb);

--- 365 unchanged lines hidden ---
2626END_DEBUG
2627 cts->ccb_h.status = CAM_REQ_CMP;
2628 xpt_done(ccb);
2629 break;
2630 }
2631 case XPT_ABORT:
2632 ccb->ccb_h.status = CAM_UA_ABORT;
2633 xpt_done(ccb);

--- 365 unchanged lines hidden ---