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 --- |