Lines Matching +full:short +full:- +full:press +full:- +full:ms
2 * Copyright (c) 1997-2007 Kenneth D. Merry
209 {"devlist", CAM_CMD_DEVTREE, CAM_ARG_NONE, "-b"},
238 {"-?", CAM_CMD_USAGE, CAM_ARG_NONE, NULL},
239 {"-h", CAM_CMD_USAGE, CAM_ARG_NONE, NULL},
380 for (opts = table; (opts != NULL) && (opts->optname != NULL); in getoption()
382 if (strncmp(opts->optname, arg, strlen(arg)) == 0) { in getoption()
383 *cmdnum = opts->cmdnum; in getoption()
384 *argnum = opts->argnum; in getoption()
385 *subopt = opts->subopt; in getoption()
406 ccb->ccb_h.func_code = XPT_GDEVLIST; in getdevlist()
407 ccb->ccb_h.flags = CAM_DIR_NONE; in getdevlist()
408 ccb->ccb_h.retry_count = 1; in getdevlist()
409 ccb->cgdl.index = 0; in getdevlist()
410 ccb->cgdl.status = CAM_GDEVLIST_MORE_DEVS; in getdevlist()
411 while (ccb->cgdl.status == CAM_GDEVLIST_MORE_DEVS) { in getdevlist()
420 switch (ccb->cgdl.status) { in getdevlist()
437 ccb->cgdl.periph_name, in getdevlist()
438 ccb->cgdl.unit_number, in getdevlist()
439 ccb->cgdl.generation, in getdevlist()
440 ccb->cgdl.index, in getdevlist()
447 if (ccb->cgdl.status == CAM_GDEVLIST_LIST_CHANGED) in getdevlist()
448 ccb->cgdl.index = 0; in getdevlist()
468 while ((c = getopt(argc, argv, combinedopt)) != -1) { in getdevtree()
479 if ((fd = open(XPT_DEVICE, O_RDWR)) == -1) { in getdevtree()
513 if (ioctl(fd, CAMIOCOMMAND, &ccb) == -1) { in getdevtree()
550 bus_result->path_id, in getdevtree()
551 bus_result->dev_name, in getdevtree()
552 bus_result->unit_number, in getdevtree()
553 bus_result->bus_id, in getdevtree()
567 if ((dev_result->flags in getdevtree()
575 if (dev_result->protocol == PROTO_SCSI) { in getdevtree()
581 } else if (dev_result->protocol == PROTO_ATA || in getdevtree()
582 dev_result->protocol == PROTO_SATAPM) { in getdevtree()
588 } else if (dev_result->protocol == PROTO_MMCSD){ in getdevtree()
594 } else if (dev_result->protocol == PROTO_SEMB) { in getdevtree()
600 } else if (dev_result->protocol == PROTO_NVME) { in getdevtree()
614 fprintf(stdout, "%-33s at scbus%d " in getdevtree()
617 dev_result->path_id, in getdevtree()
618 dev_result->target_id, in getdevtree()
619 (uintmax_t)dev_result->target_lun); in getdevtree()
638 periph_result->periph_name, in getdevtree()
639 periph_result->unit_number); in getdevtree()
671 error = get_device_type(cam_dev, -1, 0, 0, &dt); in getdevtype()
685 cam_strvis(vendor, dev_result->inq_data.vendor, in print_dev_scsi()
686 sizeof(dev_result->inq_data.vendor), sizeof(vendor)); in print_dev_scsi()
687 cam_strvis(product, dev_result->inq_data.product, in print_dev_scsi()
688 sizeof(dev_result->inq_data.product), sizeof(product)); in print_dev_scsi()
689 cam_strvis(revision, dev_result->inq_data.revision, in print_dev_scsi()
690 sizeof(dev_result->inq_data.revision), sizeof(revision)); in print_dev_scsi()
701 cam_strvis(product, dev_result->ident_data.model, in print_dev_ata()
702 sizeof(dev_result->ident_data.model), sizeof(product)); in print_dev_ata()
703 cam_strvis(revision, dev_result->ident_data.revision, in print_dev_ata()
704 sizeof(dev_result->ident_data.revision), sizeof(revision)); in print_dev_ata()
716 sid = (struct sep_identify_data *)&dev_result->ident_data; in print_dev_semb()
717 cam_strvis(vendor, sid->vendor_id, in print_dev_semb()
718 sizeof(sid->vendor_id), sizeof(vendor)); in print_dev_semb()
719 cam_strvis(product, sid->product_id, in print_dev_semb()
720 sizeof(sid->product_id), sizeof(product)); in print_dev_semb()
721 cam_strvis(revision, sid->product_rev, in print_dev_semb()
722 sizeof(sid->product_rev), sizeof(revision)); in print_dev_semb()
723 cam_strvis(fw, sid->firmware_rev, in print_dev_semb()
724 sizeof(sid->firmware_rev), sizeof(fw)); in print_dev_semb()
738 dev = cam_open_btl(dev_result->path_id, dev_result->target_id, in print_dev_mmcsd()
739 dev_result->target_lun, O_RDWR, NULL); in print_dev_mmcsd()
752 advi = &ccb->cdai; in print_dev_mmcsd()
753 advi->ccb_h.flags = CAM_DIR_IN; in print_dev_mmcsd()
754 advi->ccb_h.func_code = XPT_DEV_ADVINFO; in print_dev_mmcsd()
755 advi->flags = CDAI_FLAG_NONE; in print_dev_mmcsd()
756 advi->buftype = CDAI_TYPE_MMC_PARAMS; in print_dev_mmcsd()
757 advi->bufsiz = sizeof(struct mmc_params); in print_dev_mmcsd()
758 advi->buf = (uint8_t *)&mmc_ident_data; in print_dev_mmcsd()
793 advi = &ccb->cdai; in nvme_get_cdata()
794 advi->ccb_h.flags = CAM_DIR_IN; in nvme_get_cdata()
795 advi->ccb_h.func_code = XPT_DEV_ADVINFO; in nvme_get_cdata()
796 advi->flags = CDAI_FLAG_NONE; in nvme_get_cdata()
797 advi->buftype = CDAI_TYPE_NVME_CNTRL; in nvme_get_cdata()
798 advi->bufsiz = sizeof(struct nvme_controller_data); in nvme_get_cdata()
799 advi->buf = (uint8_t *)cdata; in nvme_get_cdata()
807 if (advi->ccb_h.status != CAM_REQ_CMP) { in nvme_get_cdata()
808 warnx("got CAM error %#x", advi->ccb_h.status); in nvme_get_cdata()
824 dev = cam_open_btl(dev_result->path_id, dev_result->target_id, in print_dev_nvme()
825 dev_result->target_lun, O_RDWR, NULL); in print_dev_nvme()
854 while ((c = getopt(argc, argv, combinedopt)) != -1) { in requestsense()
874 CCB_CLEAR_ALL_EXCEPT_HDR(&ccb->csio); in requestsense()
878 scsi_request_sense(&ccb->csio, in requestsense()
890 cdb = (struct scsi_request_sense *)&ccb->csio.cdb_io.cdb_bytes; in requestsense()
891 cdb->byte2 |= SRS_DESC; in requestsense()
894 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in requestsense()
897 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in requestsense()
912 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in requestsense()
919 returned_bytes = ccb->csio.dxfer_len - ccb->csio.resid; in requestsense()
936 &device->inq_data, scsiio_cdb_ptr(&ccb->csio), in requestsense()
937 ccb->csio.cdb_len); in requestsense()
959 scsi_test_unit_ready(&ccb->csio, in testunitready()
967 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in testunitready()
970 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in testunitready()
979 if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) { in testunitready()
1011 * queueing is turned off, the tag action is a no-op. We override in scsistart()
1020 scsi_start_stop(&ccb->csio, in scsistart()
1031 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in scsistart()
1034 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in scsistart()
1042 if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) in scsistart()
1083 while ((c = getopt(argc, argv, combinedopt)) != -1) { in scsidoinquiry()
1152 * - The SCSI spec says that when a length field is only 1 byte, in scsiinquiry()
1158 * 0, and don't return any data. One Pioneer DVD-R drive in scsiinquiry()
1164 * - The second reason not to use the full inquiry data length is in scsiinquiry()
1171 * probe code. i.e., issue a short inquiry, and determine from in scsiinquiry()
1179 scsi_inquiry(&ccb->csio, in scsiinquiry()
1191 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in scsiinquiry()
1194 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in scsiinquiry()
1202 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in scsiinquiry()
1218 fprintf(stdout, "%s%d: ", device->device_name, in scsiinquiry()
1219 device->dev_unit_num); in scsiinquiry()
1252 scsi_inquiry(&ccb->csio, in scsiserial()
1264 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in scsiserial()
1267 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in scsiserial()
1276 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in scsiserial()
1292 bcopy(serial_buf->serial_num, serial_num, serial_buf->length); in scsiserial()
1293 serial_num[serial_buf->length] = '\0'; in scsiserial()
1298 device->device_name, device->dev_unit_num); in scsiserial()
1327 ccb->ccb_h.func_code = XPT_GET_TRAN_SETTINGS; in camxferrate()
1328 ccb->cts.type = CTS_TYPE_CURRENT_SETTINGS; in camxferrate()
1331 || ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP)) { in camxferrate()
1351 if (ccb->cts.transport == XPORT_SPI) { in camxferrate()
1353 &ccb->cts.xport_specific.spi; in camxferrate()
1355 if ((spi->valid & CTS_SPI_VALID_SYNC_RATE) != 0) { in camxferrate()
1356 freq = scsi_calc_syncsrate(spi->sync_period); in camxferrate()
1359 if ((spi->valid & CTS_SPI_VALID_BUS_WIDTH) != 0) { in camxferrate()
1360 speed *= (0x01 << spi->bus_width); in camxferrate()
1362 } else if (ccb->cts.transport == XPORT_FC) { in camxferrate()
1364 &ccb->cts.xport_specific.fc; in camxferrate()
1366 if (fc->valid & CTS_FC_VALID_SPEED) in camxferrate()
1367 speed = fc->bitrate; in camxferrate()
1368 } else if (ccb->cts.transport == XPORT_SAS) { in camxferrate()
1370 &ccb->cts.xport_specific.sas; in camxferrate()
1372 if (sas->valid & CTS_SAS_VALID_SPEED) in camxferrate()
1373 speed = sas->bitrate; in camxferrate()
1374 } else if (ccb->cts.transport == XPORT_ATA) { in camxferrate()
1376 &ccb->cts.xport_specific.ata; in camxferrate()
1378 if (pata->valid & CTS_ATA_VALID_MODE) in camxferrate()
1379 speed = ata_mode2speed(pata->mode); in camxferrate()
1380 } else if (ccb->cts.transport == XPORT_SATA) { in camxferrate()
1382 &ccb->cts.xport_specific.sata; in camxferrate()
1384 if (sata->valid & CTS_SATA_VALID_REVISION) in camxferrate()
1385 speed = ata_revision2speed(sata->revision); in camxferrate()
1391 device->device_name, device->dev_unit_num, in camxferrate()
1395 device->device_name, device->dev_unit_num, in camxferrate()
1399 if (ccb->cts.transport == XPORT_SPI) { in camxferrate()
1401 &ccb->cts.xport_specific.spi; in camxferrate()
1403 if (((spi->valid & CTS_SPI_VALID_SYNC_OFFSET) != 0) in camxferrate()
1404 && (spi->sync_offset != 0)) in camxferrate()
1406 freq % 1000, spi->sync_offset); in camxferrate()
1408 if (((spi->valid & CTS_SPI_VALID_BUS_WIDTH) != 0) in camxferrate()
1409 && (spi->bus_width > 0)) { in camxferrate()
1410 if (((spi->valid & CTS_SPI_VALID_SYNC_OFFSET) != 0) in camxferrate()
1411 && (spi->sync_offset != 0)) { in camxferrate()
1416 fprintf(stdout, "%dbit)", 8 * (0x01 << spi->bus_width)); in camxferrate()
1417 } else if (((spi->valid & CTS_SPI_VALID_SYNC_OFFSET) != 0) in camxferrate()
1418 && (spi->sync_offset != 0)) { in camxferrate()
1421 } else if (ccb->cts.transport == XPORT_ATA) { in camxferrate()
1423 &ccb->cts.xport_specific.ata; in camxferrate()
1426 if (pata->valid & CTS_ATA_VALID_MODE) in camxferrate()
1427 printf("%s, ", ata_mode2string(pata->mode)); in camxferrate()
1428 if ((pata->valid & CTS_ATA_VALID_ATAPI) && pata->atapi != 0) in camxferrate()
1429 printf("ATAPI %dbytes, ", pata->atapi); in camxferrate()
1430 if (pata->valid & CTS_ATA_VALID_BYTECOUNT) in camxferrate()
1431 printf("PIO %dbytes", pata->bytecount); in camxferrate()
1433 } else if (ccb->cts.transport == XPORT_SATA) { in camxferrate()
1435 &ccb->cts.xport_specific.sata; in camxferrate()
1438 if (sata->valid & CTS_SATA_VALID_REVISION) in camxferrate()
1439 printf("SATA %d.x, ", sata->revision); in camxferrate()
1442 if (sata->valid & CTS_SATA_VALID_MODE) in camxferrate()
1443 printf("%s, ", ata_mode2string(sata->mode)); in camxferrate()
1444 if ((sata->valid & CTS_SATA_VALID_ATAPI) && sata->atapi != 0) in camxferrate()
1445 printf("ATAPI %dbytes, ", sata->atapi); in camxferrate()
1446 if (sata->valid & CTS_SATA_VALID_BYTECOUNT) in camxferrate()
1447 printf("PIO %dbytes", sata->bytecount); in camxferrate()
1451 if (ccb->cts.protocol == PROTO_SCSI) { in camxferrate()
1453 &ccb->cts.proto_specific.scsi; in camxferrate()
1454 if (scsi->valid & CTS_SCSI_VALID_TQ) { in camxferrate()
1455 if (scsi->flags & CTS_SCSI_FLAGS_TAG_ENB) { in camxferrate()
1473 uint32_t lbasize = (uint32_t)parm->lba_size_1 | in atahpa_print()
1474 ((uint32_t)parm->lba_size_2 << 16); in atahpa_print()
1476 u_int64_t lbasize48 = ((u_int64_t)parm->lba_size48_1) | in atahpa_print()
1477 ((u_int64_t)parm->lba_size48_2 << 16) | in atahpa_print()
1478 ((u_int64_t)parm->lba_size48_3 << 32) | in atahpa_print()
1479 ((u_int64_t)parm->lba_size48_4 << 48); in atahpa_print()
1487 if (parm->support.command1 & ATA_SUPPORT_PROTECTED) { in atahpa_print()
1492 printf("HPA - Security "); in atahpa_print()
1493 if (parm->support.command2 & ATA_SUPPORT_MAXSECURITY) in atahpa_print()
1494 printf("yes %s\n", (parm->enabled.command2 & in atahpa_print()
1506 uint32_t lbasize = (uint32_t)parm->lba_size_1 | in ataama_print()
1507 ((uint32_t)parm->lba_size_2 << 16); in ataama_print()
1509 u_int64_t lbasize48 = ((u_int64_t)parm->lba_size48_1) | in ataama_print()
1510 ((u_int64_t)parm->lba_size48_2 << 16) | in ataama_print()
1511 ((u_int64_t)parm->lba_size48_3 << 32) | in ataama_print()
1512 ((u_int64_t)parm->lba_size48_4 << 48); in ataama_print()
1520 if (parm->support2 & ATA_SUPPORT_AMAX_ADDR) { in ataama_print()
1534 if (parm->satacapabilities != 0xffff && in atasata()
1535 parm->satacapabilities != 0x0000) in atasata()
1545 uint32_t lbasize = (uint32_t)parm->lba_size_1 | in atacapprint()
1546 ((uint32_t)parm->lba_size_2 << 16); in atacapprint()
1548 u_int64_t lbasize48 = ((u_int64_t)parm->lba_size48_1) | in atacapprint()
1549 ((u_int64_t)parm->lba_size48_2 << 16) | in atacapprint()
1550 ((u_int64_t)parm->lba_size48_3 << 32) | in atacapprint()
1551 ((u_int64_t)parm->lba_size48_4 << 48); in atacapprint()
1555 proto = (parm->config == ATA_PROTO_CFA) ? "CFA" : in atacapprint()
1556 (parm->config & ATA_PROTO_ATAPI) ? "ATAPI" : "ATA"; in atacapprint()
1557 if (ata_version(parm->version_major) == 0) { in atacapprint()
1559 } else if (ata_version(parm->version_major) <= 7) { in atacapprint()
1560 printf("%s-%d", proto, in atacapprint()
1561 ata_version(parm->version_major)); in atacapprint()
1562 } else if (ata_version(parm->version_major) == 8) { in atacapprint()
1563 printf("%s8-ACS", proto); in atacapprint()
1565 printf("ACS-%d %s", in atacapprint()
1566 ata_version(parm->version_major) - 7, proto); in atacapprint()
1568 if (parm->satacapabilities && parm->satacapabilities != 0xffff) { in atacapprint()
1569 if (parm->satacapabilities & ATA_SATA_GEN3) in atacapprint()
1571 else if (parm->satacapabilities & ATA_SATA_GEN2) in atacapprint()
1573 else if (parm->satacapabilities & ATA_SATA_GEN1) in atacapprint()
1580 printf("device model %.40s\n", parm->model); in atacapprint()
1581 printf("firmware revision %.8s\n", parm->revision); in atacapprint()
1582 printf("serial number %.20s\n", parm->serial); in atacapprint()
1583 if (parm->enabled.extension & ATA_SUPPORT_64BITWWN) { in atacapprint()
1585 parm->wwn[0], parm->wwn[1], parm->wwn[2], parm->wwn[3]); in atacapprint()
1587 printf("additional product id %.8s\n", parm->product_id); in atacapprint()
1588 if (parm->enabled.extension & ATA_SUPPORT_MEDIASN) { in atacapprint()
1590 parm->media_serial); in atacapprint()
1593 printf("cylinders %d\n", parm->cylinders); in atacapprint()
1594 printf("heads %d\n", parm->heads); in atacapprint()
1595 printf("sectors/track %d\n", parm->sectors); in atacapprint()
1601 if (parm->config == ATA_PROTO_CFA || in atacapprint()
1602 (parm->support.command2 & ATA_SUPPORT_CFA)) in atacapprint()
1606 parm->capabilities1 & ATA_SUPPORT_LBA ? " " : " not "); in atacapprint()
1613 parm->support.command2 & ATA_SUPPORT_ADDRESS48 ? " " : " not "); in atacapprint()
1636 if ((parm->capabilities1 & ATA_SUPPORT_IORDY) == 0) in atacapprint()
1641 parm->capabilities1 & ATA_SUPPORT_DMA ? " " : " not "); in atacapprint()
1642 if (parm->capabilities1 & ATA_SUPPORT_DMA) { in atacapprint()
1643 if (parm->mwdmamodes & 0xff) { in atacapprint()
1645 if (parm->mwdmamodes & 0x04) in atacapprint()
1647 else if (parm->mwdmamodes & 0x02) in atacapprint()
1649 else if (parm->mwdmamodes & 0x01) in atacapprint()
1653 if ((parm->atavalid & ATA_FLAG_88) && in atacapprint()
1654 (parm->udmamodes & 0xff)) { in atacapprint()
1656 if (parm->udmamodes & 0x40) in atacapprint()
1658 else if (parm->udmamodes & 0x20) in atacapprint()
1660 else if (parm->udmamodes & 0x10) in atacapprint()
1662 else if (parm->udmamodes & 0x08) in atacapprint()
1664 else if (parm->udmamodes & 0x04) in atacapprint()
1666 else if (parm->udmamodes & 0x02) in atacapprint()
1668 else if (parm->udmamodes & 0x01) in atacapprint()
1675 if (parm->media_rotation_rate == 1) { in atacapprint()
1676 printf("media RPM non-rotating\n"); in atacapprint()
1677 } else if (parm->media_rotation_rate >= 0x0401 && in atacapprint()
1678 parm->media_rotation_rate <= 0xFFFE) { in atacapprint()
1680 parm->media_rotation_rate); in atacapprint()
1683 printf("Zoned-Device Commands "); in atacapprint()
1684 switch (parm->support3 & ATA_SUPPORT_ZONE_MASK) { in atacapprint()
1698 parm->support.command1 & ATA_SUPPORT_LOOKAHEAD ? "yes" : "no", in atacapprint()
1699 parm->enabled.command1 & ATA_SUPPORT_LOOKAHEAD ? "yes" : "no"); in atacapprint()
1701 parm->support.command1 & ATA_SUPPORT_WRITECACHE ? "yes" : "no", in atacapprint()
1702 parm->enabled.command1 & ATA_SUPPORT_WRITECACHE ? "yes" : "no"); in atacapprint()
1704 parm->support.command2 & ATA_SUPPORT_FLUSHCACHE ? "yes" : "no", in atacapprint()
1705 parm->enabled.command2 & ATA_SUPPORT_FLUSHCACHE ? "yes" : "no"); in atacapprint()
1707 if (atasata(parm) && (parm->satacapabilities & ATA_SUPPORT_NCQ)) { in atacapprint()
1709 ATA_QUEUE_LEN(parm->queue) + 1); in atacapprint()
1711 parm->satacapabilities & ATA_SUPPORT_NCQ_PRIO ? in atacapprint()
1713 printf("NCQ Non-Data Command %s\n", in atacapprint()
1714 parm->satacapabilities2 & ATA_SUPPORT_NCQ_NON_DATA ? in atacapprint()
1717 parm->satacapabilities2 & ATA_SUPPORT_NCQ_STREAM ? in atacapprint()
1720 parm->satacapabilities2 & ATA_SUPPORT_RCVSND_FPDMA_QUEUED ? in atacapprint()
1723 parm->satasupport & ATA_SUPPORT_NCQ_AUTOSENSE ? in atacapprint()
1729 parm->support.command1 & ATA_SUPPORT_SMART ? "yes" : "no", in atacapprint()
1730 parm->enabled.command1 & ATA_SUPPORT_SMART ? "yes" : "no"); in atacapprint()
1732 parm->support.command1 & ATA_SUPPORT_SECURITY ? "yes" : "no", in atacapprint()
1733 parm->enabled.command1 & ATA_SUPPORT_SECURITY ? "yes" : "no"); in atacapprint()
1735 parm->support.command1 & ATA_SUPPORT_POWERMGT ? "yes" : "no", in atacapprint()
1736 parm->enabled.command1 & ATA_SUPPORT_POWERMGT ? "yes" : "no"); in atacapprint()
1738 parm->support.command2 & ATA_SUPPORT_MICROCODE ? "yes" : "no", in atacapprint()
1739 parm->enabled.command2 & ATA_SUPPORT_MICROCODE ? "yes" : "no"); in atacapprint()
1741 parm->support.command2 & ATA_SUPPORT_APM ? "yes" : "no", in atacapprint()
1742 parm->enabled.command2 & ATA_SUPPORT_APM ? "yes" : "no"); in atacapprint()
1743 if (parm->support.command2 & ATA_SUPPORT_APM) { in atacapprint()
1745 parm->apm_value & 0xff, parm->apm_value & 0xff); in atacapprint()
1749 parm->support.command2 & ATA_SUPPORT_AUTOACOUSTIC ? "yes" :"no", in atacapprint()
1750 parm->enabled.command2 & ATA_SUPPORT_AUTOACOUSTIC ? "yes" :"no"); in atacapprint()
1751 if (parm->support.command2 & ATA_SUPPORT_AUTOACOUSTIC) { in atacapprint()
1753 ATA_ACOUSTIC_CURRENT(parm->acoustic), in atacapprint()
1754 ATA_ACOUSTIC_CURRENT(parm->acoustic), in atacapprint()
1755 ATA_ACOUSTIC_VENDOR(parm->acoustic), in atacapprint()
1756 ATA_ACOUSTIC_VENDOR(parm->acoustic)); in atacapprint()
1760 parm->support.command2 & ATA_SUPPORT_NOTIFY ? "yes" : "no", in atacapprint()
1761 parm->enabled.command2 & ATA_SUPPORT_NOTIFY ? "yes" : "no"); in atacapprint()
1762 printf("power-up in Standby %s %s\n", in atacapprint()
1763 parm->support.command2 & ATA_SUPPORT_STANDBY ? "yes" : "no", in atacapprint()
1764 parm->enabled.command2 & ATA_SUPPORT_STANDBY ? "yes" : "no"); in atacapprint()
1765 printf("write-read-verify %s %s", in atacapprint()
1766 parm->support2 & ATA_SUPPORT_WRITEREADVERIFY ? "yes" : "no", in atacapprint()
1767 parm->enabled2 & ATA_SUPPORT_WRITEREADVERIFY ? "yes" : "no"); in atacapprint()
1768 if (parm->support2 & ATA_SUPPORT_WRITEREADVERIFY) { in atacapprint()
1770 parm->wrv_mode, parm->wrv_mode); in atacapprint()
1774 parm->support.extension & ATA_SUPPORT_UNLOAD ? "yes" : "no", in atacapprint()
1775 parm->enabled.extension & ATA_SUPPORT_UNLOAD ? "yes" : "no"); in atacapprint()
1777 parm->support.extension & ATA_SUPPORT_GENLOG ? "yes" : "no", in atacapprint()
1778 parm->enabled.extension & ATA_SUPPORT_GENLOG ? "yes" : "no"); in atacapprint()
1779 printf("free-fall %s %s\n", in atacapprint()
1780 parm->support2 & ATA_SUPPORT_FREEFALL ? "yes" : "no", in atacapprint()
1781 parm->enabled2 & ATA_SUPPORT_FREEFALL ? "yes" : "no"); in atacapprint()
1783 parm->support2 & ATA_SUPPORT_SENSE_REPORT ? "yes" : "no", in atacapprint()
1784 parm->enabled2 & ATA_SUPPORT_SENSE_REPORT ? "yes" : "no"); in atacapprint()
1786 parm->support2 & ATA_SUPPORT_EPC ? "yes" : "no", in atacapprint()
1787 parm->enabled2 & ATA_SUPPORT_EPC ? "yes" : "no"); in atacapprint()
1789 parm->support2 & ATA_SUPPORT_DSN ? "yes" : "no", in atacapprint()
1790 parm->enabled2 & ATA_SUPPORT_DSN ? "yes" : "no"); in atacapprint()
1792 if (parm->support_dsm & ATA_SUPPORT_DSM_TRIM) { in atacapprint()
1794 printf("DSM - max 512byte blocks "); in atacapprint()
1795 if (parm->max_dsm_blocks == 0x00) in atacapprint()
1799 parm->max_dsm_blocks); in atacapprint()
1801 printf("DSM - deterministic read "); in atacapprint()
1802 if (parm->support3 & ATA_SUPPORT_DRAT) { in atacapprint()
1803 if (parm->support3 & ATA_SUPPORT_RZAT) in atacapprint()
1814 ((parm->tcg & 0xc000) == 0x4000) && (parm->tcg & ATA_SUPPORT_TCG) ? in atacapprint()
1817 parm->support3 & ATA_ENCRYPTS_ALL_USER_DATA ? "yes" : "no"); in atacapprint()
1819 if (parm->multi & ATA_SUPPORT_SANITIZE) { in atacapprint()
1821 parm->multi & ATA_SUPPORT_BLOCK_ERASE_EXT ? "block, " : "", in atacapprint()
1822 parm->multi & ATA_SUPPORT_OVERWRITE_EXT ? "overwrite, " : "", in atacapprint()
1823 parm->multi & ATA_SUPPORT_CRYPTO_SCRAMBLE_EXT ? "crypto" : ""); in atacapprint()
1824 printf("Sanitize - commands allowed %s\n", in atacapprint()
1825 parm->multi & ATA_SUPPORT_SANITIZE_ALLOWED ? "yes" : "no"); in atacapprint()
1826 printf("Sanitize - antifreeze lock %s\n", in atacapprint()
1827 parm->multi & ATA_SUPPORT_ANTIFREEZE_LOCK_EXT ? "yes" : "no"); in atacapprint()
1839 ata_pass_16 = (struct ata_pass_16 *)ccb->csio.cdb_io.cdb_bytes; in scsi_cam_pass_16_send()
1840 ata_cmd.command = ata_pass_16->command; in scsi_cam_pass_16_send()
1841 ata_cmd.control = ata_pass_16->control; in scsi_cam_pass_16_send()
1842 ata_cmd.features = ata_pass_16->features; in scsi_cam_pass_16_send()
1847 ccb->csio.ccb_h.timeout); in scsi_cam_pass_16_send()
1851 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in scsi_cam_pass_16_send()
1854 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in scsi_cam_pass_16_send()
1862 * Consider any non-CAM_REQ_CMP status as error and report it here, in scsi_cam_pass_16_send()
1865 if (!(ata_pass_16->flags & AP_FLAG_CHK_COND) && in scsi_cam_pass_16_send()
1866 (ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in scsi_cam_pass_16_send()
1884 ata_op_string(&(ccb->ataio.cmd)), in ata_cam_send()
1885 ccb->ataio.ccb_h.timeout); in ata_cam_send()
1889 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in ata_cam_send()
1892 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in ata_cam_send()
1895 warn("error sending ATA %s", ata_op_string(&(ccb->ataio.cmd))); in ata_cam_send()
1900 * Consider any non-CAM_REQ_CMP status as error and report it here, in ata_cam_send()
1903 if (!(ccb->ataio.cmd.flags & CAM_ATAIO_NEEDRESULT) && in ata_cam_send()
1904 (ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in ata_cam_send()
1905 warnx("ATA %s failed", ata_op_string(&(ccb->ataio.cmd))); in ata_cam_send()
1932 CCB_CLEAR_ALL_EXCEPT_HDR(&ccb->csio); in ata_do_pass_16()
1934 scsi_ata_pass_16(&ccb->csio, in ata_do_pass_16()
1961 return (-1); in ata_try_pass_16()
1983 if (retval == -1) in ata_do_cmd()
1993 CCB_CLEAR_ALL_EXCEPT_HDR(&ccb->ataio); in ata_do_cmd()
1994 cam_fill_ataio(&ccb->ataio, in ata_do_cmd()
2004 ata_48bit_cmd(&ccb->ataio, command, features, lba, sector_count); in ata_do_cmd()
2006 ata_28bit_cmd(&ccb->ataio, command, features, lba, sector_count); in ata_do_cmd()
2009 ccb->ataio.cmd.flags |= CAM_ATAIO_NEEDRESULT; in ata_do_cmd()
2057 "last power-on or hardware reset"); in atahpa_proc_resp()
2082 is48bit = parm->support.command2 & ATA_SUPPORT_ADDRESS48; in ata_read_native_max()
2132 /* lba's are zero indexed so the max lba is requested max - 1 */ in atahpa_set_max()
2134 maxsize--; in atahpa_set_max()
2305 /* lba's are zero indexed so the max lba is requested max - 1 */ in ataama_set()
2307 maxsize--; in ataama_set()
2366 return (-1); in ata_do_identify()
2373 return (-1); in ata_do_identify()
2460 device->device_name, device->dev_unit_num); in ataidentify()
2464 if (ident_buf->support.command1 & ATA_SUPPORT_PROTECTED) { in ataidentify()
2468 if (ident_buf->support2 & ATA_SUPPORT_AMAX_ADDR) { in ataidentify()
2473 printf("%s%d: ", device->device_name, device->dev_unit_num); in ataidentify()
2505 return (-1); in identify()
2560 /* pwd->password may not be null terminated */ in atasecurity_notify()
2561 char pass[sizeof(pwd->password)+1]; in atasecurity_notify()
2563 strlcpy(pass, pwd->password, sizeof(pass)); in atasecurity_notify()
2566 (pwd->ctrl & ATA_SECURITY_PASSWORD_MASTER) ? in atasecurity_notify()
2571 (pwd->ctrl & ATA_SECURITY_LEVEL_MAXIMUM) ? in atasecurity_notify()
2664 " device:\n%s%d,%s%d: ", device->device_name, in atasecurity_erase_confirm()
2665 device->dev_unit_num, device->given_dev_name, in atasecurity_erase_confirm()
2666 device->given_unit_number); in atasecurity_erase_confirm()
2779 parm->security_status); in atasecurity_print()
2782 parm->security_status & ATA_SECURITY_SUPPORTED ? "yes" : "no"); in atasecurity_print()
2783 if (!(parm->security_status & ATA_SECURITY_SUPPORTED)) in atasecurity_print()
2786 parm->security_status & ATA_SECURITY_ENABLED ? "yes" : "no"); in atasecurity_print()
2788 parm->security_status & ATA_SECURITY_LOCKED ? "yes" : "no"); in atasecurity_print()
2790 parm->security_status & ATA_SECURITY_FROZEN ? "yes" : "no"); in atasecurity_print()
2792 parm->security_status & ATA_SECURITY_COUNT_EXP ? "yes" : "no"); in atasecurity_print()
2794 parm->security_status & ATA_SECURITY_LEVEL ? "maximum" : "high"); in atasecurity_print()
2796 parm->security_status & ATA_SECURITY_ENH_SUPP ? "yes" : "no"); in atasecurity_print()
2798 atasecurity_print_time(parm->erase_time); in atasecurity_print()
2801 atasecurity_print_time(parm->enhanced_erase_time); in atasecurity_print()
2804 parm->master_passwd_revision, in atasecurity_print()
2805 parm->master_passwd_revision == 0x0000 || in atasecurity_print()
2806 parm->master_passwd_revision == 0xFFFF ? " (unsupported)" : ""); in atasecurity_print()
2821 warnx("-%c password is too long", opt); in ata_getpwd()
2824 warnx("-%c password is missing", opt); in ata_getpwd()
2826 } else if (optarg[0] == '-'){ in ata_getpwd()
2827 warnx("-%c password starts with '-' (generic arg?)", opt); in ata_getpwd()
2830 warnx("-%c password conflicts with existing password from -%c", in ata_getpwd()
2858 device->device_name, device->dev_unit_num, in atahpa_set_confirm()
2859 device->given_dev_name, device->given_unit_number); in atahpa_set_confirm()
2907 while ((c = getopt(argc, argv, combinedopt)) != -1) { in atahpa()
2980 printf("%s%d: ", device->device_name, device->dev_unit_num); in atahpa()
2987 if (ident_buf->support.command1 & ATA_SUPPORT_PROTECTED) in atahpa()
2997 if (!(ident_buf->support.command1 & ATA_SUPPORT_PROTECTED)) { in atahpa()
3004 if (security && !(ident_buf->support.command2 & ATA_SUPPORT_MAXSECURITY)) { in atahpa()
3011 is48bit = ident_buf->support.command2 & ATA_SUPPORT_ADDRESS48; in atahpa()
3108 while ((c = getopt(argc, argv, combinedopt)) != -1) { in ataama()
3150 printf("%s%d: ", device->device_name, device->dev_unit_num); in ataama()
3157 if (ident_buf->support2 & ATA_SUPPORT_AMAX_ADDR) in ataama()
3167 if (!(ident_buf->support2 & ATA_SUPPORT_AMAX_ADDR)) { in ataama()
3237 while ((c = getopt(argc, argv, combinedopt)) != -1) { in atasecurity()
3252 warnx("-U argument '%s' is invalid (must be " in atasecurity()
3266 warnx("-l argument '%s' is unknown (must be " in atasecurity()
3344 printf("%s%d: ", device->device_name, device->dev_unit_num); in atasecurity()
3356 if ((ident_buf->support.command1 & ATA_SUPPORT_SECURITY) == 0) { in atasecurity()
3366 security_enabled = ident_buf->security_status & ATA_SECURITY_ENABLED; in atasecurity()
3381 pwd.revision = ident_buf->master_passwd_revision; in atasecurity()
3383 --pwd.revision == 0) { in atasecurity()
3405 if (ident_buf->security_status & ATA_SECURITY_LOCKED) { in atasecurity()
3421 if (ident_buf->security_status & ATA_SECURITY_LOCKED) { in atasecurity()
3447 ident_buf->erase_time); in atasecurity()
3460 if (ident_buf->security_status & ATA_SECURITY_ENH_SUPP) { in atasecurity()
3464 ident_buf->enhanced_erase_time); in atasecurity()
3504 sizeof(ccb.cgdl.periph_name), &ccb.cgdl.unit_number) == -1) { in parse_btl_name()
3514 if ((fd = open(XPT_DEVICE, O_RDWR)) == -1) { in parse_btl_name()
3518 if (ioctl(fd, CAMGETPASSTHRU, &ccb) == -1) { in parse_btl_name()
3532 entry ? entry->status_text : "Unknown", in parse_btl_name()
3649 int fd = -1, retval; in rescan_or_reset_bus()
3669 ccb->ccb_h.func_code = rescan ? XPT_SCAN_BUS : XPT_RESET_BUS; in rescan_or_reset_bus()
3670 ccb->ccb_h.path_id = bus; in rescan_or_reset_bus()
3671 ccb->ccb_h.target_id = CAM_TARGET_WILDCARD; in rescan_or_reset_bus()
3672 ccb->ccb_h.target_lun = CAM_LUN_WILDCARD; in rescan_or_reset_bus()
3673 ccb->crcn.flags = CAM_FLAG_NONE; in rescan_or_reset_bus()
3676 ccb->ccb_h.pinfo.priority = 5; in rescan_or_reset_bus()
3678 if (ioctl(fd, CAMIOCOMMAND, ccb) == -1) { in rescan_or_reset_bus()
3684 if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) { in rescan_or_reset_bus()
3686 rescan ? "Re-scan" : "Reset", bus); in rescan_or_reset_bus()
3689 rescan ? "Re-scan" : "Reset", bus, in rescan_or_reset_bus()
3690 ccb->ccb_h.status & CAM_STATUS_MASK); in rescan_or_reset_bus()
3703 * given bus is -1 (wildcard). We don't send a rescan or reset in rescan_or_reset_bus()
3705 * no-op, sending a rescan to the xpt bus would result in a status of in rescan_or_reset_bus()
3715 matchccb->ccb_h.func_code = XPT_DEV_MATCH; in rescan_or_reset_bus()
3716 matchccb->ccb_h.path_id = CAM_BUS_WILDCARD; in rescan_or_reset_bus()
3718 matchccb->cdm.match_buf_len = bufsize; in rescan_or_reset_bus()
3719 matchccb->cdm.matches=(struct dev_match_result *)malloc(bufsize); in rescan_or_reset_bus()
3720 if (matchccb->cdm.matches == NULL) { in rescan_or_reset_bus()
3725 matchccb->cdm.num_matches = 0; in rescan_or_reset_bus()
3727 matchccb->cdm.num_patterns = 1; in rescan_or_reset_bus()
3728 matchccb->cdm.pattern_buf_len = sizeof(struct dev_match_pattern); in rescan_or_reset_bus()
3730 matchccb->cdm.patterns = (struct dev_match_pattern *)malloc( in rescan_or_reset_bus()
3731 matchccb->cdm.pattern_buf_len); in rescan_or_reset_bus()
3732 if (matchccb->cdm.patterns == NULL) { in rescan_or_reset_bus()
3737 matchccb->cdm.patterns[0].type = DEV_MATCH_BUS; in rescan_or_reset_bus()
3738 matchccb->cdm.patterns[0].pattern.bus_pattern.flags = BUS_MATCH_ANY; in rescan_or_reset_bus()
3743 if (ioctl(fd, CAMIOCOMMAND, matchccb) == -1) { in rescan_or_reset_bus()
3749 if ((matchccb->ccb_h.status != CAM_REQ_CMP) in rescan_or_reset_bus()
3750 || ((matchccb->cdm.status != CAM_DEV_MATCH_LAST) in rescan_or_reset_bus()
3751 && (matchccb->cdm.status != CAM_DEV_MATCH_MORE))) { in rescan_or_reset_bus()
3753 matchccb->ccb_h.status, matchccb->cdm.status); in rescan_or_reset_bus()
3758 for (i = 0; i < matchccb->cdm.num_matches; i++) { in rescan_or_reset_bus()
3762 if (matchccb->cdm.matches[i].type != DEV_MATCH_BUS) in rescan_or_reset_bus()
3765 bus_result =&matchccb->cdm.matches[i].result.bus_result; in rescan_or_reset_bus()
3771 if (bus_result->path_id == CAM_XPT_PATH_ID) in rescan_or_reset_bus()
3774 ccb->ccb_h.func_code = rescan ? XPT_SCAN_BUS : in rescan_or_reset_bus()
3776 ccb->ccb_h.path_id = bus_result->path_id; in rescan_or_reset_bus()
3777 ccb->ccb_h.target_id = CAM_TARGET_WILDCARD; in rescan_or_reset_bus()
3778 ccb->ccb_h.target_lun = CAM_LUN_WILDCARD; in rescan_or_reset_bus()
3779 ccb->crcn.flags = CAM_FLAG_NONE; in rescan_or_reset_bus()
3782 ccb->ccb_h.pinfo.priority = 5; in rescan_or_reset_bus()
3784 if (ioctl(fd, CAMIOCOMMAND, ccb) == -1) { in rescan_or_reset_bus()
3790 if ((ccb->ccb_h.status & CAM_STATUS_MASK)==CAM_REQ_CMP){ in rescan_or_reset_bus()
3792 rescan? "Re-scan" : "Reset", in rescan_or_reset_bus()
3793 bus_result->path_id); in rescan_or_reset_bus()
3801 "%#x\n", rescan? "Re-scan" : "Reset", in rescan_or_reset_bus()
3802 bus_result->path_id, in rescan_or_reset_bus()
3803 ccb->ccb_h.status & CAM_STATUS_MASK); in rescan_or_reset_bus()
3807 } while ((matchccb->ccb_h.status == CAM_REQ_CMP) in rescan_or_reset_bus()
3808 && (matchccb->cdm.status == CAM_DEV_MATCH_MORE)); in rescan_or_reset_bus()
3812 if (fd != -1) in rescan_or_reset_bus()
3816 free(matchccb->cdm.patterns); in rescan_or_reset_bus()
3817 free(matchccb->cdm.matches); in rescan_or_reset_bus()
3849 fd = -1; in scanlun_or_reset_dev()
3904 scan? "Re-scan" : "Reset", bus, target, (uintmax_t)lun); in scanlun_or_reset_dev()
3908 scan? "Re-scan" : "Reset", bus, target, (uintmax_t)lun, in scanlun_or_reset_dev()
3947 while ((c = getopt(argc, argv, combinedopt)) != -1) { in readdefects()
3955 warnx("%s: -f specified twice", __func__); in readdefects()
4030 * 12-byte command, we're always changing to the 12-byte command and in readdefects()
4062 CCB_CLEAR_ALL_EXCEPT_HDR(&ccb->csio); in readdefects()
4064 scsi_read_defects(&ccb->csio, in readdefects()
4077 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in readdefects()
4085 valid_len = ccb->csio.dxfer_len - ccb->csio.resid; in readdefects()
4093 returned_length = scsi_2btoul(hdr10->length); in readdefects()
4094 returned_format = hdr10->format; in readdefects()
4105 returned_length = scsi_4btoul(hdr12->length); in readdefects()
4106 returned_format = hdr12->format; in readdefects()
4138 num_valid = min(returned_length, valid_len - hdr_size); in readdefects()
4144 if ((ccb->ccb_h.status & CAM_STATUS_MASK) == in readdefects()
4149 sense = &ccb->csio.sense_data; in readdefects()
4150 scsi_extract_sense_len(sense, ccb->csio.sense_len - in readdefects()
4151 ccb->csio.sense_resid, &error_code, &sense_key, in readdefects()
4187 * SBC-3 says that if the drive has more in readdefects()
4215 } else if ((ccb->ccb_h.status & CAM_STATUS_MASK) != in readdefects()
4242 * We always limit the list length to the 10-byte maximum in readdefects()
4257 if (((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_SCSI_STATUS_ERROR) in readdefects()
4258 && (ccb->csio.scsi_status == SCSI_STATUS_CHECK_COND) in readdefects()
4259 && ((ccb->ccb_h.status & CAM_AUTOSNS_VALID) != 0)) { in readdefects()
4263 sense = &ccb->csio.sense_data; in readdefects()
4264 scsi_extract_sense_len(sense, ccb->csio.sense_len - in readdefects()
4265 ccb->csio.sense_resid, &error_code, &sense_key, &asc, in readdefects()
4307 } else if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in readdefects()
4357 mads ? " - " : "\n"); in readdefects()
4363 mads ? " - " : "\n"); in readdefects()
4393 mads ? " - " : "\n"); in readdefects()
4399 mads ? " - " : "\n"); in readdefects()
4505 CCB_CLEAR_ALL_EXCEPT_HDR(&ccb->csio); in mode_sense()
4507 scsi_mode_sense_subpage(&ccb->csio, in mode_sense()
4520 if (llbaa && ccb->csio.cdb_len == 10) { in mode_sense()
4522 (struct scsi_mode_sense_10 *)ccb->csio.cdb_io.cdb_bytes; in mode_sense()
4523 cdb->byte2 |= SMS10_LLBAA; in mode_sense()
4527 *cdb_len = ccb->csio.cdb_len; in mode_sense()
4530 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in mode_sense()
4533 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in mode_sense()
4538 /* In case of ILLEGEL REQUEST try to fall back to 6-byte command. */ in mode_sense()
4540 ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INVALID || in mode_sense()
4547 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in mode_sense()
4572 scsi_mode_select_len(&ccb->csio, in mode_select()
4585 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in mode_select()
4588 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in mode_select()
4591 || ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP)) { in mode_select()
4614 int c, page = -1, subpage = 0, pc = 0, llbaa = 0; in modepage()
4617 while ((c = getopt(argc, argv, combinedopt)) != -1) { in modepage()
4661 if (desc && page == -1) in modepage()
4664 if (page == -1 && list == 0) in modepage()
4668 errx(1, "-d and -D are incompatible!"); in modepage()
4710 while ((c = getopt(argc, argv, combinedopt)) != -1) { in scsicmd()
4716 hook.argc = argc - optind; in scsicmd()
4738 hook.argc = argc - optind; in scsicmd()
4778 hook.argc = argc - optind; in scsicmd()
4784 * If the user supplied "-" instead of a format, he in scsicmd()
4788 && (datastr[0] == '-')) in scsicmd()
4814 hook.argc = argc - optind; in scsicmd()
4826 * If the user supplied "-" instead of a format, he in scsicmd()
4830 && (datastr[0] == '-')) in scsicmd()
4839 hook.argc = argc - optind; in scsicmd()
4843 if ((resstr != NULL) && (resstr[0] == '-')) in scsicmd()
4863 if (amt_read == -1) { in scsicmd()
4868 amt_to_read -= amt_read; in scsicmd()
4881 * This is taken from the SCSI-3 draft spec. in scsicmd()
4921 bcopy(cdb, &ccb->csio.cdb_io.cdb_bytes, cdb_len); in scsicmd()
4923 cam_fill_csio(&ccb->csio, in scsicmd()
4935 bcopy(atacmd, &ccb->ataio.cmd.command, atacmd_len); in scsicmd()
4937 ccb->ataio.cmd.flags |= CAM_ATAIO_NEEDRESULT; in scsicmd()
4939 ccb->ataio.cmd.flags |= CAM_ATAIO_DMA; in scsicmd()
4941 ccb->ataio.cmd.flags |= CAM_ATAIO_FPDMA; in scsicmd()
4943 cam_fill_ataio(&ccb->ataio, in scsicmd()
4954 || ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP)) { in scsicmd()
4973 buff_decode_visit(&ccb->ataio.res.status, 11, resstr, in scsicmd()
4979 ccb->ataio.res.status, in scsicmd()
4980 ccb->ataio.res.error, in scsicmd()
4981 ccb->ataio.res.lba_low, in scsicmd()
4982 ccb->ataio.res.lba_mid, in scsicmd()
4983 ccb->ataio.res.lba_high, in scsicmd()
4984 ccb->ataio.res.device, in scsicmd()
4985 ccb->ataio.res.lba_low_exp, in scsicmd()
4986 ccb->ataio.res.lba_mid_exp, in scsicmd()
4987 ccb->ataio.res.lba_high_exp, in scsicmd()
4988 ccb->ataio.res.sector_count, in scsicmd()
4989 ccb->ataio.res.sector_count_exp); in scsicmd()
4995 valid_bytes = ccb->csio.dxfer_len - ccb->csio.resid; in scsicmd()
4997 valid_bytes = ccb->ataio.dxfer_len - ccb->ataio.resid; in scsicmd()
4998 if (((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) in scsicmd()
5012 amt_to_write -= amt_written; in scsicmd()
5015 if (amt_written == -1) { in scsicmd()
5022 valid_bytes - amt_to_write, valid_bytes); in scsicmd()
5050 while ((c = getopt(argc, argv, combinedopt)) != -1) { in camdebug()
5085 argc -= optind; in camdebug()
5123 if (ioctl(fd, CAMIOCOMMAND, &ccb) == -1) { in camdebug()
5161 int numtags = -1; in tagcontrol()
5173 while ((c = getopt(argc, argv, combinedopt)) != -1) { in tagcontrol()
5194 ccb->ccb_h.func_code = XPT_REL_SIMQ; in tagcontrol()
5195 ccb->ccb_h.flags = CAM_DEV_QFREEZE; in tagcontrol()
5196 ccb->crs.release_flags = RELSIM_ADJUST_OPENINGS; in tagcontrol()
5197 ccb->crs.openings = numtags; in tagcontrol()
5206 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in tagcontrol()
5217 pathstr, ccb->crs.openings); in tagcontrol()
5220 CCB_CLEAR_ALL_EXCEPT_HDR(&ccb->cgds); in tagcontrol()
5222 ccb->ccb_h.func_code = XPT_GDEV_STATS; in tagcontrol()
5230 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in tagcontrol()
5240 fprintf(stdout, "dev_openings %d\n", ccb->cgds.dev_openings); in tagcontrol()
5242 fprintf(stdout, "dev_active %d\n", ccb->cgds.dev_active); in tagcontrol()
5244 fprintf(stdout, "allocated %d\n", ccb->cgds.allocated); in tagcontrol()
5246 fprintf(stdout, "queued %d\n", ccb->cgds.queued); in tagcontrol()
5248 fprintf(stdout, "held %d\n", ccb->cgds.held); in tagcontrol()
5250 fprintf(stdout, "mintags %d\n", ccb->cgds.mintags); in tagcontrol()
5252 fprintf(stdout, "maxtags %d\n", ccb->cgds.maxtags); in tagcontrol()
5258 fprintf(stdout, "%d\n", ccb->cgds.dev_openings + in tagcontrol()
5259 ccb->cgds.dev_active); in tagcontrol()
5275 if (cts->transport == XPORT_SPI) { in cts_print()
5277 &cts->xport_specific.spi; in cts_print()
5279 if ((spi->valid & CTS_SPI_VALID_SYNC_RATE) != 0) { in cts_print()
5282 spi->sync_period); in cts_print()
5284 if (spi->sync_offset != 0) { in cts_print()
5287 freq = scsi_calc_syncsrate(spi->sync_period); in cts_print()
5293 if (spi->valid & CTS_SPI_VALID_SYNC_OFFSET) { in cts_print()
5295 spi->sync_offset); in cts_print()
5298 if (spi->valid & CTS_SPI_VALID_BUS_WIDTH) { in cts_print()
5300 (0x01 << spi->bus_width) * 8); in cts_print()
5303 if (spi->valid & CTS_SPI_VALID_DISC) { in cts_print()
5305 (spi->flags & CTS_SPI_FLAGS_DISC_ENB) ? in cts_print()
5309 if (cts->transport == XPORT_FC) { in cts_print()
5311 &cts->xport_specific.fc; in cts_print()
5313 if (fc->valid & CTS_FC_VALID_WWNN) in cts_print()
5315 (long long) fc->wwnn); in cts_print()
5316 if (fc->valid & CTS_FC_VALID_WWPN) in cts_print()
5318 (long long) fc->wwpn); in cts_print()
5319 if (fc->valid & CTS_FC_VALID_PORT) in cts_print()
5320 fprintf(stdout, "%sPortID: 0x%x\n", pathstr, fc->port); in cts_print()
5321 if (fc->valid & CTS_FC_VALID_SPEED) in cts_print()
5323 pathstr, fc->bitrate / 1000, fc->bitrate % 1000); in cts_print()
5325 if (cts->transport == XPORT_SAS) { in cts_print()
5327 &cts->xport_specific.sas; in cts_print()
5329 if (sas->valid & CTS_SAS_VALID_SPEED) in cts_print()
5331 pathstr, sas->bitrate / 1000, sas->bitrate % 1000); in cts_print()
5333 if (cts->transport == XPORT_ATA) { in cts_print()
5335 &cts->xport_specific.ata; in cts_print()
5337 if ((pata->valid & CTS_ATA_VALID_MODE) != 0) { in cts_print()
5339 ata_mode2string(pata->mode)); in cts_print()
5341 if ((pata->valid & CTS_ATA_VALID_ATAPI) != 0) { in cts_print()
5343 pata->atapi); in cts_print()
5345 if ((pata->valid & CTS_ATA_VALID_BYTECOUNT) != 0) { in cts_print()
5347 pathstr, pata->bytecount); in cts_print()
5350 if (cts->transport == XPORT_SATA) { in cts_print()
5352 &cts->xport_specific.sata; in cts_print()
5354 if ((sata->valid & CTS_SATA_VALID_REVISION) != 0) { in cts_print()
5356 sata->revision); in cts_print()
5358 if ((sata->valid & CTS_SATA_VALID_MODE) != 0) { in cts_print()
5360 ata_mode2string(sata->mode)); in cts_print()
5362 if ((sata->valid & CTS_SATA_VALID_ATAPI) != 0) { in cts_print()
5364 sata->atapi); in cts_print()
5366 if ((sata->valid & CTS_SATA_VALID_BYTECOUNT) != 0) { in cts_print()
5368 pathstr, sata->bytecount); in cts_print()
5370 if ((sata->valid & CTS_SATA_VALID_PM) != 0) { in cts_print()
5372 sata->pm_present); in cts_print()
5374 if ((sata->valid & CTS_SATA_VALID_TAGS) != 0) { in cts_print()
5376 sata->tags); in cts_print()
5378 if ((sata->valid & CTS_SATA_VALID_CAPS) != 0) { in cts_print()
5380 sata->caps); in cts_print()
5383 if (cts->transport == XPORT_NVME) { in cts_print()
5385 &cts->xport_specific.nvme; in cts_print()
5387 if (nvme->valid & CTS_NVME_VALID_LINK) { in cts_print()
5389 nvme->lanes, nvme->max_lanes); in cts_print()
5391 nvme->speed, nvme->max_speed); in cts_print()
5394 if (cts->transport == XPORT_NVMF) { in cts_print()
5396 &cts->xport_specific.nvmf; in cts_print()
5398 if (nvmf->valid & CTS_NVMF_VALID_TRTYPE) { in cts_print()
5400 nvmf_transport_type(nvmf->trtype)); in cts_print()
5403 if (cts->transport == XPORT_UFSHCI) { in cts_print()
5405 &cts->xport_specific.ufshci; in cts_print()
5407 if (ufshci->valid & CTS_UFSHCI_VALID_LINK) { in cts_print()
5409 pathstr, ufshci->hs_gear, ufshci->max_hs_gear); in cts_print()
5411 ufshci->tx_lanes, ufshci->max_tx_lanes); in cts_print()
5413 ufshci->rx_lanes, ufshci->max_rx_lanes); in cts_print()
5416 if (cts->protocol == PROTO_ATA) { in cts_print()
5418 &cts->proto_specific.ata; in cts_print()
5420 if (ata->valid & CTS_ATA_VALID_TQ) { in cts_print()
5422 (ata->flags & CTS_ATA_FLAGS_TAG_ENB) ? in cts_print()
5426 if (cts->protocol == PROTO_SCSI) { in cts_print()
5428 &cts->proto_specific.scsi; in cts_print()
5430 if (scsi->valid & CTS_SCSI_VALID_TQ) { in cts_print()
5432 (scsi->flags & CTS_SCSI_FLAGS_TAG_ENB) ? in cts_print()
5436 if (cts->protocol == PROTO_NVME) { in cts_print()
5438 &cts->proto_specific.nvme; in cts_print()
5440 if (nvme->valid & CTS_NVME_VALID_SPEC) { in cts_print()
5442 NVME_MAJOR(nvme->spec), in cts_print()
5443 NVME_MINOR(nvme->spec)); in cts_print()
5462 ccb->ccb_h.func_code = XPT_PATH_INQ; in get_cpi()
5468 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in get_cpi()
5475 bcopy(&ccb->cpi, cpi, sizeof(struct ccb_pathinq)); in get_cpi()
5496 ccb->ccb_h.func_code = XPT_GDEV_TYPE; in get_cgd()
5502 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in get_cgd()
5509 bcopy(&ccb->cgd, cgd, sizeof(struct ccb_getdev)); in get_cgd()
5517 * Returns 1 if the device has the VPD page, 0 if it does not, and -1 on an
5532 retval = -1; in dev_has_vpd_page()
5538 scsi_inquiry(&ccb->csio, in dev_has_vpd_page()
5550 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in dev_has_vpd_page()
5553 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in dev_has_vpd_page()
5558 retval = -1; in dev_has_vpd_page()
5562 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in dev_has_vpd_page()
5566 retval = -1; in dev_has_vpd_page()
5585 * Returns 0 for success, non-zero for failure.
5621 if (retry_count == -1) { in get_device_type()
5623 * For a retry count of -1, used only the cached data to avoid in get_device_type()
5629 * non-zero implies SATL. in get_device_type()
5671 cam_fill_ataio(&ccb->ataio, in build_ata_cmd()
5680 ata_48bit_cmd(&ccb->ataio, command, features, lba, in build_ata_cmd()
5683 ata_28bit_cmd(&ccb->ataio, command, features, lba, in build_ata_cmd()
5687 ccb->ataio.ata_flags |= ATA_FLAG_AUX; in build_ata_cmd()
5688 ccb->ataio.aux = auxiliary; in build_ata_cmd()
5692 ccb->ataio.cmd.flags |= CAM_ATAIO_NEEDRESULT; in build_ata_cmd()
5695 ccb->ataio.cmd.flags |= CAM_ATAIO_DMA; in build_ata_cmd()
5697 ccb->ataio.cmd.flags |= CAM_ATAIO_FPDMA; in build_ata_cmd()
5702 retval = scsi_ata_pass(&ccb->csio, in build_ata_cmd()
5730 * Returns: 0 -- success, 1 -- error, 2 -- lba truncated,
5731 * 4 -- count truncated, 6 -- lba and count truncated.
5739 switch (ccb->ccb_h.func_code) { in get_ata_status()
5746 * In this case, we have SCSI ATA PASS-THROUGH command, 12 in get_ata_status()
5749 if (ccb->ccb_h.flags & CAM_CDB_POINTER) in get_ata_status()
5750 opcode = ccb->csio.cdb_io.cdb_ptr[0]; in get_ata_status()
5752 opcode = ccb->csio.cdb_io.cdb_bytes[0]; in get_ata_status()
5765 sense_len = ccb->csio.sense_len - ccb->csio.sense_resid; in get_ata_status()
5774 &ccb->csio.sense_data; in get_ata_status()
5785 *error = desc->error; in get_ata_status()
5786 *count = (desc->count_15_8 << 8) | in get_ata_status()
5787 desc->count_7_0; in get_ata_status()
5788 *lba = ((uint64_t)desc->lba_47_40 << 40) | in get_ata_status()
5789 ((uint64_t)desc->lba_39_32 << 32) | in get_ata_status()
5790 ((uint64_t)desc->lba_31_24 << 24) | in get_ata_status()
5791 (desc->lba_23_16 << 16) | in get_ata_status()
5792 (desc->lba_15_8 << 8) | in get_ata_status()
5793 desc->lba_7_0; in get_ata_status()
5794 *device = desc->device; in get_ata_status()
5795 *status = desc->status; in get_ata_status()
5799 * 12-byte ATA PASS-THROUGH command or a 16 or 32 byte in get_ata_status()
5801 * that the device is supposed to return 28-bit in get_ata_status()
5805 if ((desc->flags & SSD_DESC_ATA_FLAG_EXTEND) == 0){ in get_ata_status()
5816 * In my understanding of SAT-5 specification, saying: in get_ata_status()
5836 scsi_get_sense_info(&ccb->csio.sense_data, sense_len, in get_ata_status()
5844 scsi_get_sense_info(&ccb->csio.sense_data, sense_len, in get_ata_status()
5866 res = &ccb->ataio.res; in get_ata_status()
5867 *error = res->error; in get_ata_status()
5868 *status = res->status; in get_ata_status()
5869 *device = res->device; in get_ata_status()
5870 *count = res->sector_count; in get_ata_status()
5871 *lba = (res->lba_high << 16) | in get_ata_status()
5872 (res->lba_mid << 8) | in get_ata_status()
5873 (res->lba_low); in get_ata_status()
5874 if (ccb->ataio.cmd.flags & CAM_ATAIO_48BIT) { in get_ata_status()
5875 *count |= (res->sector_count_exp << 8); in get_ata_status()
5876 *lba |= ((uint64_t)res->lba_low_exp << 24) | in get_ata_status()
5877 ((uint64_t)res->lba_mid_exp << 32) | in get_ata_status()
5878 ((uint64_t)res->lba_high_exp << 40); in get_ata_status()
5880 *lba |= (res->device & 0xf) << 24; in get_ata_status()
5897 "%s%d:", cpi->dev_name, cpi->unit_number); in cpi_print()
5900 cpi->version_num); in cpi_print()
5905 if ((i & cpi->hba_inquiry) == 0) in cpi_print()
5945 if ((i & cpi->hba_misc) == 0) in cpi_print()
5971 str = "do not send 6-byte commands"; in cpi_print()
5992 if ((i & cpi->target_sprt) == 0) in cpi_print()
6023 cpi->hba_eng_cnt); in cpi_print()
6025 cpi->max_target); in cpi_print()
6027 cpi->max_lun); in cpi_print()
6029 adapter_str, cpi->hpath_id); in cpi_print()
6031 cpi->initiator_id); in cpi_print()
6032 fprintf(stdout, "%s SIM vendor: %s\n", adapter_str, cpi->sim_vid); in cpi_print()
6033 fprintf(stdout, "%s HBA vendor: %s\n", adapter_str, cpi->hba_vid); in cpi_print()
6035 adapter_str, cpi->hba_vendor); in cpi_print()
6037 adapter_str, cpi->hba_device); in cpi_print()
6039 adapter_str, cpi->hba_subvendor); in cpi_print()
6041 adapter_str, cpi->hba_subdevice); in cpi_print()
6042 fprintf(stdout, "%s bus ID: %d\n", adapter_str, cpi->bus_id); in cpi_print()
6044 if (cpi->base_transfer_speed > 1000) in cpi_print()
6046 cpi->base_transfer_speed / 1000, in cpi_print()
6047 cpi->base_transfer_speed % 1000); in cpi_print()
6050 (cpi->base_transfer_speed % 1000) * 1000); in cpi_print()
6052 adapter_str, cpi->maxio); in cpi_print()
6070 ccb->ccb_h.func_code = XPT_GET_TRAN_SETTINGS; in get_print_cts()
6073 ccb->cts.type = CTS_TYPE_CURRENT_SETTINGS; in get_print_cts()
6075 ccb->cts.type = CTS_TYPE_USER_SETTINGS; in get_print_cts()
6083 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in get_print_cts()
6093 cts_print(device, &ccb->cts); in get_print_cts()
6096 bcopy(&ccb->cts, cts, sizeof(struct ccb_trans_settings)); in get_print_cts()
6113 int disc_enable = -1, tag_enable = -1; in ratecontrol()
6114 int mode = -1; in ratecontrol()
6115 int offset = -1; in ratecontrol()
6116 double syncrate = -1; in ratecontrol()
6117 int bus_width = -1; in ratecontrol()
6127 while ((c = getopt(argc, argv, combinedopt)) != -1) { in ratecontrol()
6141 warnx("-D argument \"%s\" is unknown", optarg); in ratecontrol()
6183 warnx("-T argument \"%s\" is unknown", optarg); in ratecontrol()
6216 retval = get_print_cts(device, user_settings, quiet, &ccb->cts); in ratecontrol()
6231 if (ccb->cts.transport == XPORT_SPI) in ratecontrol()
6232 spi = &ccb->cts.xport_specific.spi; in ratecontrol()
6233 if (ccb->cts.transport == XPORT_ATA) in ratecontrol()
6234 pata = &ccb->cts.xport_specific.ata; in ratecontrol()
6235 if (ccb->cts.transport == XPORT_SATA) in ratecontrol()
6236 sata = &ccb->cts.xport_specific.sata; in ratecontrol()
6237 if (ccb->cts.protocol == PROTO_ATA) in ratecontrol()
6238 ata = &ccb->cts.proto_specific.ata; in ratecontrol()
6239 if (ccb->cts.protocol == PROTO_SCSI) in ratecontrol()
6240 scsi = &ccb->cts.proto_specific.scsi; in ratecontrol()
6241 ccb->cts.xport_specific.valid = 0; in ratecontrol()
6242 ccb->cts.proto_specific.valid = 0; in ratecontrol()
6243 if (spi && disc_enable != -1) { in ratecontrol()
6244 spi->valid |= CTS_SPI_VALID_DISC; in ratecontrol()
6246 spi->flags &= ~CTS_SPI_FLAGS_DISC_ENB; in ratecontrol()
6248 spi->flags |= CTS_SPI_FLAGS_DISC_ENB; in ratecontrol()
6251 if (tag_enable != -1) { in ratecontrol()
6259 ata->valid |= CTS_SCSI_VALID_TQ; in ratecontrol()
6261 ata->flags &= ~CTS_ATA_FLAGS_TAG_ENB; in ratecontrol()
6263 ata->flags |= CTS_ATA_FLAGS_TAG_ENB; in ratecontrol()
6266 scsi->valid |= CTS_SCSI_VALID_TQ; in ratecontrol()
6268 scsi->flags &= ~CTS_SCSI_FLAGS_TAG_ENB; in ratecontrol()
6270 scsi->flags |= CTS_SCSI_FLAGS_TAG_ENB; in ratecontrol()
6274 if (spi && offset != -1) { in ratecontrol()
6280 spi->valid |= CTS_SPI_VALID_SYNC_OFFSET; in ratecontrol()
6281 spi->sync_offset = offset; in ratecontrol()
6284 if (spi && syncrate != -1) { in ratecontrol()
6293 spi->valid |= CTS_SPI_VALID_SYNC_RATE; in ratecontrol()
6308 spi->sync_period = in ratecontrol()
6312 if (sata && syncrate != -1) { in ratecontrol()
6325 sata->revision = ata_speed2revision(syncrate * 100); in ratecontrol()
6326 if (sata->revision < 0) { in ratecontrol()
6331 sata->valid |= CTS_SATA_VALID_REVISION; in ratecontrol()
6334 if ((pata || sata) && mode != -1) { in ratecontrol()
6348 pata->mode = mode; in ratecontrol()
6349 pata->valid |= CTS_ATA_VALID_MODE; in ratecontrol()
6351 sata->mode = mode; in ratecontrol()
6352 sata->valid |= CTS_SATA_VALID_MODE; in ratecontrol()
6365 if (spi && bus_width != -1) { in ratecontrol()
6389 spi->valid |= CTS_SPI_VALID_BUS_WIDTH; in ratecontrol()
6390 spi->bus_width = bus_width >> 4; in ratecontrol()
6396 ccb->ccb_h.func_code = XPT_SET_TRAN_SETTINGS; in ratecontrol()
6402 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in ratecontrol()
6425 (ccb->cts.transport == XPORT_ATA || in ratecontrol()
6426 ccb->cts.transport == XPORT_SATA || send_tur)) { in ratecontrol()
6460 while ((c = getopt(argc, argv, combinedopt)) != -1) { in scsiformat()
6518 fprintf(stdout, "Enter new timeout in seconds or press\n" in scsiformat()
6554 scsi_format_unit(&ccb->csio, in scsiformat()
6566 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in scsiformat()
6569 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in scsiformat()
6573 && ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP))) { in scsiformat()
6590 * If we ran in non-immediate mode, we already checked for errors in scsiformat()
6606 CCB_CLEAR_ALL_EXCEPT_HDR(&ccb->csio); in scsiformat()
6613 scsi_test_unit_ready(&ccb->csio, in scsiformat()
6621 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in scsiformat()
6635 status = ccb->ccb_h.status & CAM_STATUS_MASK; in scsiformat()
6639 && ((ccb->ccb_h.status & CAM_AUTOSNS_VALID) != 0)) { in scsiformat()
6643 sense = &ccb->csio.sense_data; in scsiformat()
6644 scsi_extract_sense_len(sense, ccb->csio.sense_len - in scsiformat()
6645 ccb->csio.sense_resid, &error_code, &sense_key, in scsiformat()
6649 * According to the SCSI-2 and SCSI-3 specs, a in scsiformat()
6659 if ((scsi_get_sks(sense, ccb->csio.sense_len - in scsiformat()
6660 ccb->csio.sense_resid, sks) == 0) in scsiformat()
6682 scsi_sense_print(device, &ccb->csio, in scsiformat()
6708 } while((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP); in scsiformat()
6756 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in sanitize_wait_ata()
6757 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in sanitize_wait_ata()
6821 CCB_CLEAR_ALL_EXCEPT_HDR(&ccb->csio); in sanitize_wait_scsi()
6828 scsi_test_unit_ready(&ccb->csio, in sanitize_wait_scsi()
6836 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in sanitize_wait_scsi()
6849 status = ccb->ccb_h.status & CAM_STATUS_MASK; in sanitize_wait_scsi()
6851 ((ccb->ccb_h.status & CAM_AUTOSNS_VALID) != 0)) { in sanitize_wait_scsi()
6855 sense = &ccb->csio.sense_data; in sanitize_wait_scsi()
6856 scsi_extract_sense_len(sense, ccb->csio.sense_len - in sanitize_wait_scsi()
6857 ccb->csio.sense_resid, &error_code, &sense_key, in sanitize_wait_scsi()
6861 * According to the SCSI-3 spec, a drive that is in the in sanitize_wait_scsi()
6871 if ((scsi_get_sks(sense, ccb->csio.sense_len - in sanitize_wait_scsi()
6872 ccb->csio.sense_resid, sks) == 0) in sanitize_wait_scsi()
6886 scsi_sense_print(device, &ccb->csio, in sanitize_wait_scsi()
6909 } while ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP); in sanitize_wait_scsi()
6927 int fd = -1; in sanitize()
6940 error = get_device_type(device, -1, 0, 0, &dt); in sanitize()
6953 while ((c = getopt(argc, argv, combinedopt)) != -1) { in sanitize()
7018 warnx("overwrite action requires -P argument"); in sanitize()
7054 warnx("short pattern file read"); in sanitize()
7061 pl->byte1 = 1; in sanitize()
7063 pl->byte1 = passes; in sanitize()
7065 pl->byte1 |= SSZPL_INVERT; in sanitize()
7066 scsi_ulto2b(sz, pl->length); in sanitize()
7071 arg = "-c"; in sanitize()
7073 arg = "-I"; in sanitize()
7075 arg = "-P"; in sanitize()
7098 printf("%s%d: ", device->device_name, in sanitize()
7099 device->dev_unit_num); in sanitize()
7138 fprintf(stdout, "Enter new timeout in seconds or press\n" in sanitize()
7160 scsi_sanitize(&ccb->csio, in sanitize()
7171 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in sanitize()
7173 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in sanitize()
7226 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in sanitize()
7230 if ((ccb->ccb_h.status & CAM_STATUS_MASK) == in sanitize()
7232 sense = &ccb->csio.sense_data; in sanitize()
7233 scsi_extract_sense_len(sense, ccb->csio.sense_len - in sanitize()
7234 ccb->csio.sense_resid, &error_code, &sense_key, in sanitize()
7255 * If we ran in non-immediate mode, we already checked for errors in sanitize()
7312 while ((c = getopt(argc, argv, combinedopt)) != -1) { in scsireportluns()
7341 warnx("%s: you can only specify one of -c or -l", __func__); in scsireportluns()
7346 * According to SPC-4, the allocation length must be at least 16 in scsireportluns()
7347 * bytes -- enough for the header and one LUN. in scsireportluns()
7361 scsi_report_luns(&ccb->csio, in scsireportluns()
7372 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in scsireportluns()
7375 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in scsireportluns()
7383 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in scsireportluns()
7390 list_len = scsi_4btoul(lundata->length); in scsireportluns()
7394 * length was too short, reallocate and retry. in scsireportluns()
7397 && (list_len > (alloc_len - sizeof(*lundata)))) { in scsireportluns()
7414 for (j = 0; j < sizeof(lundata->luns[i].lundata); j += 2) { in scsireportluns()
7417 switch (lundata->luns[i].lundata[j] & in scsireportluns()
7420 if ((lundata->luns[i].lundata[j] & in scsireportluns()
7423 lundata->luns[i].lundata[j] & in scsireportluns()
7426 && ((lundata->luns[i].lundata[j+2] & in scsireportluns()
7431 lundata->luns[i].lundata[j+1]); in scsireportluns()
7435 tmplun[0] = lundata->luns[i].lundata[j] & in scsireportluns()
7437 tmplun[1] = lundata->luns[i].lundata[j+1]; in scsireportluns()
7445 (lundata->luns[i].lundata[j+1] & in scsireportluns()
7447 lundata->luns[i].lundata[j] & in scsireportluns()
7449 lundata->luns[i].lundata[j+1] & in scsireportluns()
7455 eam_code = lundata->luns[i].lundata[j] & in scsireportluns()
7457 field_len_code = (lundata->luns[i].lundata[j] & in scsireportluns()
7463 lundata->luns[i].lundata[j+1]); in scsireportluns()
7483 bcopy(&lundata->luns[i].lundata[j+1], in scsireportluns()
7484 &tmp_lun[1], sizeof(tmp_lun) - 1); in scsireportluns()
7499 "%#x\n", lundata->luns[i].lundata[0] & in scsireportluns()
7551 while ((c = getopt(argc, argv, combinedopt)) != -1) { in scsireadcapacity()
7583 warnx("%s: you can only specify one of -b or -N", __func__); in scsireadcapacity()
7590 warnx("%s: you can only specify one of -b or -s", __func__); in scsireadcapacity()
7597 warnx("%s: you can only specify one of -h/-H or -q", __func__); in scsireadcapacity()
7604 warnx("%s: you can only specify one of -h/-H or -b", __func__); in scsireadcapacity()
7612 scsi_read_capacity(&ccb->csio, in scsireadcapacity()
7621 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in scsireadcapacity()
7624 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in scsireadcapacity()
7632 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in scsireadcapacity()
7642 * A last block of 2^32-1 means that the true capacity is over 2TB, in scsireadcapacity()
7650 scsi_read_capacity_16(&ccb->csio, in scsireadcapacity()
7663 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in scsireadcapacity()
7666 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in scsireadcapacity()
7674 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in scsireadcapacity()
7699 if (ret == -1) { in scsireadcapacity()
7750 while ((c = getopt(argc, argv, combinedopt)) != -1) { in smpcmd()
7761 hook.argc = argc - optind; in smpcmd()
7767 * If the user supplied "-" instead of a format, he in smpcmd()
7771 && (datastr[0] == '-')) in smpcmd()
7790 hook.argc = argc - optind; in smpcmd()
7802 * If the user supplied "-" instead of a format, he in smpcmd()
7806 && (datastr[0] == '-')) in smpcmd()
7830 if (amt_read == -1) { in smpcmd()
7835 amt_to_read -= amt_read; in smpcmd()
7842 warnx("%s: need both the request (-r) and response (-R) " in smpcmd()
7850 cam_fill_smpio(&ccb->smpio, in smpcmd()
7860 ccb->smpio.flags = SMP_FLAG_NONE; in smpcmd()
7863 || ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP)) { in smpcmd()
7877 if (((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) in smpcmd()
7891 amt_to_write -= amt_written; in smpcmd()
7894 if (amt_written == -1) { in smpcmd()
7901 response_size - amt_to_write, in smpcmd()
7926 int32_t mmc_flags = -1; in mmcsdcmd()
7952 bzero(&(&ccb->ccb_h)[1], in mmcsdcmd()
7953 sizeof(union ccb) - sizeof(struct ccb_hdr)); in mmcsdcmd()
7955 while ((c = getopt(argc, argv, combinedopt)) != -1) { in mmcsdcmd()
8066 ccb->ccb_h.func_code = XPT_SET_TRAN_SETTINGS; in mmcsdcmd()
8067 ccb->ccb_h.flags = 0; in mmcsdcmd()
8068 cts = &ccb->cts.proto_specific.mmc; in mmcsdcmd()
8069 cts->ios.bus_width = is_bw_4 == 1 ? bus_width_4 : bus_width_1; in mmcsdcmd()
8070 cts->ios_valid = MMC_BW; in mmcsdcmd()
8072 || ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP)) { in mmcsdcmd()
8083 ccb->ccb_h.func_code = XPT_SET_TRAN_SETTINGS; in mmcsdcmd()
8084 ccb->ccb_h.flags = 0; in mmcsdcmd()
8085 cts = &ccb->cts.proto_specific.mmc; in mmcsdcmd()
8086 cts->ios.clock = mmc_frequency; in mmcsdcmd()
8087 cts->ios_valid = MMC_CLK; in mmcsdcmd()
8089 || ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP)) { in mmcsdcmd()
8101 ccb->ccb_h.func_code = XPT_SET_TRAN_SETTINGS; in mmcsdcmd()
8102 ccb->ccb_h.flags = 0; in mmcsdcmd()
8103 cts = &ccb->cts.proto_specific.mmc; in mmcsdcmd()
8104 cts->ios.timing = is_highspeed == 1 ? bus_timing_hs : bus_timing_normal; in mmcsdcmd()
8105 cts->ios_valid = MMC_BT; in mmcsdcmd()
8107 || ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP)) { in mmcsdcmd()
8118 ccb->ccb_h.func_code = XPT_GET_TRAN_SETTINGS; in mmcsdcmd()
8119 ccb->ccb_h.flags = 0; in mmcsdcmd()
8121 cts = &ccb->cts.proto_specific.mmc; in mmcsdcmd()
8123 || ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP)) { in mmcsdcmd()
8128 printf("Host OCR: 0x%x\n", cts->host_ocr); in mmcsdcmd()
8129 printf("Min frequency: %u KHz\n", cts->host_f_min / 1000); in mmcsdcmd()
8130 printf("Max frequency: %u MHz\n", cts->host_f_max / 1000000); in mmcsdcmd()
8132 if (cts->host_caps & MMC_CAP_4_BIT_DATA) in mmcsdcmd()
8134 if (cts->host_caps & MMC_CAP_8_BIT_DATA) in mmcsdcmd()
8138 if (cts->host_caps & MMC_CAP_HSPEED) in mmcsdcmd()
8140 if (cts->host_caps & MMC_CAP_UHS_SDR12) in mmcsdcmd()
8142 if (cts->host_caps & MMC_CAP_UHS_SDR25) in mmcsdcmd()
8144 if (cts->host_caps & MMC_CAP_UHS_SDR50) in mmcsdcmd()
8146 if (cts->host_caps & MMC_CAP_UHS_SDR104) in mmcsdcmd()
8148 if (cts->host_caps & MMC_CAP_UHS_DDR50) in mmcsdcmd()
8150 if (cts->host_caps & MMC_CAP_MMC_DDR52_120) in mmcsdcmd()
8152 if (cts->host_caps & MMC_CAP_MMC_DDR52_180) in mmcsdcmd()
8154 if (cts->host_caps & MMC_CAP_MMC_HS200_120) in mmcsdcmd()
8156 if (cts->host_caps & MMC_CAP_MMC_HS200_180) in mmcsdcmd()
8158 if (cts->host_caps & MMC_CAP_MMC_HS400_120) in mmcsdcmd()
8160 if (cts->host_caps & MMC_CAP_MMC_HS400_180) in mmcsdcmd()
8164 if (cts->host_caps & MMC_CAP_SIGNALING_120) in mmcsdcmd()
8166 if (cts->host_caps & MMC_CAP_SIGNALING_180) in mmcsdcmd()
8168 if (cts->host_caps & MMC_CAP_SIGNALING_330) in mmcsdcmd()
8173 switch (cts->ios.bus_width) { in mmcsdcmd()
8185 cts->ios.clock / 1000000, in mmcsdcmd()
8186 (cts->ios.clock / 1000) % 1000, in mmcsdcmd()
8187 cts->ios.timing == bus_timing_hs ? " (high-speed timing)" : ""); in mmcsdcmd()
8190 switch (cts->ios.vccq) { in mmcsdcmd()
8216 cam_fill_mmcio(&ccb->mmcio, in mmcsdcmd()
8227 || ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP)) { in mmcsdcmd()
8241 if (((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP)) { in mmcsdcmd()
8243 ccb->mmcio.cmd.error, ccb->mmcio.cmd.resp[0], in mmcsdcmd()
8244 ccb->mmcio.cmd.resp[1], in mmcsdcmd()
8245 ccb->mmcio.cmd.resp[2], in mmcsdcmd()
8246 ccb->mmcio.cmd.resp[3]); in mmcsdcmd()
8251 SD_R5_DATA(ccb->mmcio.cmd.resp), in mmcsdcmd()
8252 (ccb->mmcio.cmd.resp[0] >> 12) & 0x3); in mmcsdcmd()
8259 printf("SEND_RELATIVE_ADDR: published RCA %02x\n", ccb->mmcio.cmd.resp[0] >> 16); in mmcsdcmd()
8262 printf("No command-specific decoder for CMD %d\n", mmc_opcode); in mmcsdcmd()
8299 while ((c = getopt(argc, argv, combinedopt)) != -1) { in smpreportgeneral()
8325 smp_report_general(&ccb->smpio, in smpreportgeneral()
8336 || ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP)) { in smpreportgeneral()
8356 if ((response->long_response & SMP_RG_LONG_RESPONSE) in smpreportgeneral()
8358 ccb->ccb_h.status = CAM_REQ_INPROG; in smpreportgeneral()
8359 CCB_CLEAR_ALL_EXCEPT_HDR(&ccb->smpio); in smpreportgeneral()
8420 int phy = -1; in smpphycontrol()
8441 while ((c = getopt(argc, argv, combinedopt)) != -1) { in smpphycontrol()
8447 int enable = -1; in smpphycontrol()
8527 "(-o) allowed", __func__); in smpphycontrol()
8537 * future-proof it a bit, so options that are added in smpphycontrol()
8588 if (phy == -1) { in smpphycontrol()
8589 warnx("%s: a PHY (-p phy) argument is required",__func__); in smpphycontrol()
8598 warnx("%s: -d name and -o setdevname arguments both " in smpphycontrol()
8620 smp_phy_control(&ccb->smpio, in smpphycontrol()
8640 || ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP)) { in smpphycontrol()
8696 while ((c = getopt(argc, argv, combinedopt)) != -1) { in smpmaninfo()
8708 smp_report_manuf_info(&ccb->smpio, in smpmaninfo()
8719 || ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP)) { in smpmaninfo()
8769 dev = cam_open_btl(item->dev_match.path_id, in getdevid()
8770 item->dev_match.target_id, in getdevid()
8771 item->dev_match.target_lun, O_RDWR, NULL); in getdevid()
8779 item->device_id_len = 0; in getdevid()
8793 ccb->ccb_h.func_code = XPT_DEV_ADVINFO; in getdevid()
8794 ccb->ccb_h.flags = CAM_DIR_IN; in getdevid()
8795 ccb->cdai.flags = CDAI_FLAG_NONE; in getdevid()
8796 ccb->cdai.buftype = CDAI_TYPE_SCSI_DEVID; in getdevid()
8797 ccb->cdai.bufsiz = item->device_id_len; in getdevid()
8798 if (item->device_id_len != 0) in getdevid()
8799 ccb->cdai.buf = (uint8_t *)item->device_id; in getdevid()
8807 if (ccb->ccb_h.status != CAM_REQ_CMP) { in getdevid()
8808 warnx("%s: CAM status %#x", __func__, ccb->ccb_h.status); in getdevid()
8813 if (item->device_id_len == 0) { in getdevid()
8818 if (ccb->cdai.provsiz == 0) { in getdevid()
8824 item->device_id_len = ccb->cdai.provsiz; in getdevid()
8825 item->device_id = malloc(item->device_id_len); in getdevid()
8826 if (item->device_id == NULL) { in getdevid()
8828 item->device_id_len); in getdevid()
8832 ccb->ccb_h.status = CAM_REQ_INPROG; in getdevid()
8853 int bufsize, fd = -1; in buildbusdevlist()
8859 if ((fd = open(XPT_DEVICE, O_RDWR)) == -1) { in buildbusdevlist()
8896 patterns[0].pattern.device_pattern.path_id = devlist->path_id; in buildbusdevlist()
8899 patterns[1].pattern.periph_pattern.path_id = devlist->path_id; in buildbusdevlist()
8908 if (ioctl(fd, CAMIOCOMMAND, &ccb) == -1) { in buildbusdevlist()
8931 if (dev_result->flags & in buildbusdevlist()
8946 bcopy(dev_result, &item->dev_match, in buildbusdevlist()
8948 STAILQ_INSERT_TAIL(&devlist->dev_queue, item, in buildbusdevlist()
8965 item->num_periphs++; in buildbusdevlist()
8966 item->periph_matches = realloc( in buildbusdevlist()
8967 item->periph_matches, in buildbusdevlist()
8968 item->num_periphs * in buildbusdevlist()
8970 if (item->periph_matches == NULL) { in buildbusdevlist()
8976 bcopy(periph_result, &item->periph_matches[ in buildbusdevlist()
8977 item->num_periphs - 1], in buildbusdevlist()
8994 if (fd != -1) in buildbusdevlist()
9012 STAILQ_FOREACH_SAFE(item, &devlist->dev_queue, links, item2) { in freebusdevlist()
9013 STAILQ_REMOVE(&devlist->dev_queue, item, cam_devitem, in freebusdevlist()
9015 free(item->device_id); in freebusdevlist()
9016 free(item->periph_matches); in freebusdevlist()
9026 STAILQ_FOREACH(item, &devlist->dev_queue, links) { in findsasdevice()
9032 idd = scsi_get_devid(item->device_id, in findsasdevice()
9033 item->device_id_len, in findsasdevice()
9038 if (scsi_8btou64(idd->identifier) == sasaddr) in findsasdevice()
9089 while ((c = getopt(argc, argv, combinedopt)) != -1) { in smpphylist()
9102 smp_report_general(&ccb->smpio, in smpphylist()
9112 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in smpphylist()
9115 || ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP)) { in smpphylist()
9131 num_phys = rgresponse->num_phys; in smpphylist()
9140 devlist.path_id = device->path_id; in smpphylist()
9174 CCB_CLEAR_ALL_EXCEPT_HDR(&ccb->smpio); in smpphylist()
9176 ccb->ccb_h.status = CAM_REQ_INPROG; in smpphylist()
9177 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in smpphylist()
9179 smp_discover(&ccb->smpio, in smpphylist()
9192 || (((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) in smpphylist()
9193 && (disresponse->function_result != SMP_FR_PHY_VACANT))) { in smpphylist()
9209 if (disresponse->function_result == SMP_FR_PHY_VACANT) { in smpphylist()
9215 if (disresponse->attached_device == SMP_DIS_AD_TYPE_NONE) { in smpphylist()
9219 scsi_8btou64(disresponse->attached_sas_address)); in smpphylist()
9226 disresponse->attached_sas_address)); in smpphylist()
9234 dev_match = &item->dev_match; in smpphylist()
9236 if (dev_match->protocol == PROTO_SCSI) { in smpphylist()
9237 cam_strvis(vendor, dev_match->inq_data.vendor, in smpphylist()
9238 sizeof(dev_match->inq_data.vendor), in smpphylist()
9240 cam_strvis(product, dev_match->inq_data.product, in smpphylist()
9241 sizeof(dev_match->inq_data.product), in smpphylist()
9243 cam_strvis(revision, dev_match->inq_data.revision, in smpphylist()
9244 sizeof(dev_match->inq_data.revision), in smpphylist()
9248 } else if ((dev_match->protocol == PROTO_ATA) in smpphylist()
9249 || (dev_match->protocol == PROTO_SATAPM)) { in smpphylist()
9250 cam_strvis(product, dev_match->ident_data.model, in smpphylist()
9251 sizeof(dev_match->ident_data.model), in smpphylist()
9253 cam_strvis(revision, dev_match->ident_data.revision, in smpphylist()
9254 sizeof(dev_match->ident_data.revision), in smpphylist()
9260 fprintf(stdout, " %-33s ", tmpstr); in smpphylist()
9265 if (item->num_periphs == 0) { in smpphylist()
9271 for (j = 0; j < item->num_periphs; j++) { in smpphylist()
9276 item->periph_matches[j].periph_name, in smpphylist()
9277 item->periph_matches[j].unit_number); in smpphylist()
9324 printf("%s%d: ", device->device_name, device->dev_unit_num); in atapm_proc_resp()
9332 case 0x40: /* obsolete since ACS-3 */ in atapm_proc_resp()
9335 case 0x41: /* obsolete since ACS-3 */ in atapm_proc_resp()
9367 int t = -1; in atapm()
9379 while ((c = getopt(argc, argv, combinedopt)) != -1) { in atapm()
9389 if (t == -1) in atapm()
9394 if (t == -1) in atapm()
9401 t = -1; in atapm()
9404 t = -1; in atapm()
9415 sc = (t - 1) / (30 * 60) + 241; in atapm()
9448 int l = -1; in ataaxm()
9459 while ((c = getopt(argc, argv, combinedopt)) != -1) { in ataaxm()
9470 if (l == -1) in ataaxm()
9477 if (l == -1) in ataaxm()
9570 scsi_report_supported_opcodes(&ccb->csio, in scsigetopcodes()
9582 ccb->ccb_h.flags |= CAM_DEV_QFRZDIS; in scsigetopcodes()
9585 ccb->ccb_h.flags |= CAM_PASS_ERR_RECOVER; in scsigetopcodes()
9593 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in scsigetopcodes()
9601 valid_len = ccb->csio.dxfer_len - ccb->csio.resid; in scsigetopcodes()
9606 avail_len = scsi_4btoul(all_hdr->length) + sizeof(*all_hdr); in scsigetopcodes()
9612 cdb_length = scsi_2btoul(one->cdb_length); in scsigetopcodes()
9614 if (one->support & RSO_ONE_CTDP) { in scsigetopcodes()
9619 if (valid_len >= (avail_len + sizeof(td->length))) { in scsigetopcodes()
9620 avail_len += scsi_2btoul(td->length) + in scsigetopcodes()
9621 sizeof(td->length); in scsigetopcodes()
9674 op_desc = scsi_op_desc(req_opcode, &device->inq_data); in scsiprintoneopcode()
9682 switch (one->support & RSO_ONE_SUP_MASK) { in scsiprintoneopcode()
9695 printf("Command is supported, vendor-specific " in scsiprintoneopcode()
9700 one->support & RSO_ONE_SUP_MASK); in scsiprintoneopcode()
9712 cdb_len = scsi_2btoul(one->cdb_length); in scsiprintoneopcode()
9735 printf(" %02x", one->cdb_usage[i]); in scsiprintoneopcode()
9742 if ((one->support & RSO_ONE_CTDP) == 0) in scsiprintoneopcode()
9749 if (valid_len < (sizeof(*one) + cdb_len + sizeof(td->length))) in scsiprintoneopcode()
9754 td_len = scsi_2btoul(td->length); in scsiprintoneopcode()
9755 td_len += sizeof(td->length); in scsiprintoneopcode()
9771 printf("Command-specific: 0x%02x\n", td->cmd_specific); in scsiprintoneopcode()
9773 scsi_4btoul(td->nominal_time)); in scsiprintoneopcode()
9775 scsi_4btoul(td->recommended_time)); in scsiprintoneopcode()
9798 avail_len = scsi_4btoul(hdr->length); in scsiprintopcodes()
9799 avail_len += sizeof(hdr->length); in scsiprintopcodes()
9806 used_len = sizeof(hdr->length); in scsiprintopcodes()
9808 printf("%-6s %4s %8s ", in scsiprintopcodes()
9815 while ((avail_len - used_len) > sizeof(*desc)) { in scsiprintopcodes()
9823 op_desc = scsi_op_desc(desc->opcode, &device->inq_data); in scsiprintopcodes()
9827 printf("0x%02x %#4x %8u ", desc->opcode, in scsiprintopcodes()
9828 scsi_2btoul(desc->service_action), in scsiprintopcodes()
9829 scsi_2btoul(desc->cdb_length)); in scsiprintopcodes()
9833 if ((desc->flags & RSO_CTDP) == 0) { in scsiprintopcodes()
9842 if (avail_len - used_len < sizeof(*td)) { in scsiprintopcodes()
9849 td_len = scsi_2btoul(td->length); in scsiprintopcodes()
9850 td_len += sizeof(td->length); in scsiprintopcodes()
9862 printf(" 0x%02x %6u %6u %s\n", td->cmd_specific, in scsiprintopcodes()
9863 scsi_4btoul(td->nominal_time), in scsiprintopcodes()
9864 scsi_4btoul(td->recommended_time), op_desc); in scsiprintopcodes()
9884 while ((c = getopt(argc, argv, combinedopt)) != -1) { in scsiopcodes()
9931 warnx("You must specify an opcode with -o if a service " in scsiopcodes()
9971 ccb->ccb_h.func_code = XPT_REPROBE_LUN; in reprobe()
9979 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in reprobe()
9997 " camcontrol devlist [-b] [-v]\n" in usage()
9998 " camcontrol periphlist [dev_id][-n dev_name] [-u unit]\n" in usage()
10000 " camcontrol sense [dev_id][generic args][-D][-x]\n" in usage()
10001 " camcontrol inquiry [dev_id][generic args] [-D] [-S] [-R]\n" in usage()
10002 " camcontrol identify [dev_id][generic args] [-v]\n" in usage()
10003 " camcontrol reportluns [dev_id][generic args] [-c] [-l] [-r report]\n" in usage()
10004 " camcontrol readcap [dev_id][generic args] [-b] [-h] [-H] [-N]\n" in usage()
10005 " [-q] [-s] [-l]\n" in usage()
10013 " camcontrol defects [dev_id][generic args] <-f format> [-P][-G]\n" in usage()
10014 " [-q][-s][-S offset][-X]\n" in usage()
10015 " camcontrol modepage [dev_id][generic args] <-m page | -l>\n" in usage()
10016 " [-P pagectl][-e | -b][-d]\n" in usage()
10018 " <-a cmd [args] | -c cmd [args]>\n" in usage()
10019 " [-d] [-f] [-i len fmt|-o len fmt [args]] [-r fmt]\n" in usage()
10021 " <-r len fmt [args]> <-R len fmt [args]>\n" in usage()
10022 " camcontrol smprg [dev_id][generic args][-l]\n" in usage()
10023 " camcontrol smppc [dev_id][generic args] <-p phy> [-l]\n" in usage()
10024 " [-o operation][-d name][-m rate][-M rate]\n" in usage()
10025 " [-T pp_timeout][-a enable|disable]\n" in usage()
10026 " [-A enable|disable][-s enable|disable]\n" in usage()
10027 " [-S enable|disable]\n" in usage()
10028 " camcontrol smpphylist [dev_id][generic args][-l][-q]\n" in usage()
10029 " camcontrol smpmaninfo [dev_id][generic args][-l]\n" in usage()
10030 " camcontrol debug [-I][-P][-T][-S][-X][-c]\n" in usage()
10032 " camcontrol tags [dev_id][generic args] [-N tags] [-q] [-v]\n" in usage()
10033 " camcontrol negotiate [dev_id][generic args] [-a][-c]\n" in usage()
10034 " [-D <enable|disable>][-M mode][-O offset]\n" in usage()
10035 " [-q][-R syncrate][-v][-T <enable|disable>]\n" in usage()
10036 " [-U][-W bus_width]\n" in usage()
10037 " camcontrol format [dev_id][generic args][-q][-r][-w][-y]\n" in usage()
10039 " [-a overwrite|block|crypto|exitfailure]\n" in usage()
10040 " [-c passes][-I][-P pattern][-q][-U][-r][-w]\n" in usage()
10041 " [-y]\n" in usage()
10042 " camcontrol idle [dev_id][generic args][-t time]\n" in usage()
10043 " camcontrol standby [dev_id][generic args][-t time]\n" in usage()
10046 " camcontrol apm [dev_id][generic args][-l level]\n" in usage()
10047 " camcontrol aam [dev_id][generic args][-l level]\n" in usage()
10048 " camcontrol fwdownload [dev_id][generic args] <-f fw_image> [-q]\n" in usage()
10049 " [-s][-y]\n" in usage()
10051 " <-d pwd | -e pwd | -f | -h pwd | -k pwd>\n" in usage()
10052 " [-l <high|maximum>] [-q] [-s pwd] [-T timeout]\n" in usage()
10053 " [-U <user|master>] [-y]\n" in usage()
10054 " camcontrol hpa [dev_id][generic args] [-f] [-l] [-P] [-p pwd]\n" in usage()
10055 " [-q] [-s max_sectors] [-U pwd] [-y]\n" in usage()
10056 " camcontrol ama [dev_id][generic args] [-f] [-q] [-s max_sectors]\n" in usage()
10057 " camcontrol persist [dev_id][generic args] <-i action|-o action>\n" in usage()
10058 " [-a][-I tid][-k key][-K sa_key][-p][-R rtp]\n" in usage()
10059 " [-s scope][-S][-T type][-U]\n" in usage()
10060 " camcontrol attrib [dev_id][generic args] <-r action|-w attr>\n" in usage()
10061 " [-a attr_num][-c][-e elem][-F form1,form1]\n" in usage()
10062 " [-p part][-s start][-T type][-V vol]\n" in usage()
10063 " camcontrol opcodes [dev_id][generic args][-o opcode][-s SA]\n" in usage()
10064 " [-N][-T]\n" in usage()
10065 " camcontrol zone [dev_id][generic args]<-c cmd> [-a] [-l LBA]\n" in usage()
10066 " [-o rep_opts] [-P print_opts]\n" in usage()
10067 " camcontrol epc [dev_id][generic_args]<-c cmd> [-d] [-D] [-e]\n" in usage()
10068 " [-H] [-p power_cond] [-P] [-r rst_src] [-s]\n" in usage()
10069 " [-S power_src] [-T timer]\n" in usage()
10070 " camcontrol timestamp [dev_id][generic_args] <-r [-f format|-m|-U]>|\n" in usage()
10071 " <-s <-f format -T time | -U >>\n" in usage()
10073 " camcontrol depop [dev_id] [-d | -l | -r] [-e element] [-c capacity]\n" in usage()
10074 " camcontrol mmcsdcmd [dev_id] [[-c mmc_opcode] [-a mmc_arg]\n" in usage()
10075 " [-f mmc_flags] [-l data_len]\n" in usage()
10076 " [-W [-b data_byte]]] |\n" in usage()
10077 " [-F frequency] |\n" in usage()
10078 " [-I]\n" in usage()
10079 " [-1 | -4]\n" in usage()
10080 " [-S high|normal]\n" in usage()
10103 "modepage display or edit (-e) the given mode page\n" in usage()
10104 "cmd send the given SCSI command, may need -i or -o as well\n" in usage()
10105 "smpcmd send the given SMP command, requires -o and -i\n" in usage()
10107 "smppc send the SMP PHY Control command, requires -p\n" in usage()
10129 "mmcsdcmd send the given MMC command, needs -c and -a as well\n" in usage()
10136 "-v be verbose, print out sense information\n" in usage()
10137 "-t timeout command timeout in seconds, overrides default timeout\n" in usage()
10138 "-n dev_name specify device name, e.g. \"da\", \"cd\"\n" in usage()
10139 "-u unit specify unit number, e.g. \"0\", \"5\"\n" in usage()
10140 "-E have the kernel attempt to perform SCSI error recovery\n" in usage()
10141 "-C count specify the SCSI command retry count (needs -E to work)\n" in usage()
10142 "-Q task_attr specify ordered, simple or head tag type for SCSI cmds\n" in usage()
10144 "-l list all available mode pages\n" in usage()
10145 "-m page specify the mode page to view or edit\n" in usage()
10146 "-e edit the specified mode page\n" in usage()
10147 "-b force view to binary mode\n" in usage()
10148 "-d disable block descriptors for mode sense\n" in usage()
10149 "-P pgctl page control field 0-3\n" in usage()
10151 "-f format specify defect list format (block, bfi or phys)\n" in usage()
10152 "-G get the grown defect list\n" in usage()
10153 "-P get the permanent defect list\n" in usage()
10155 "-D request descriptor sense data\n" in usage()
10156 "-x do a hexdump of the sense data\n" in usage()
10158 "-D get the standard inquiry data\n" in usage()
10159 "-S get the serial number\n" in usage()
10160 "-R get the transfer rate, etc.\n" in usage()
10162 "-c only report a count of available LUNs\n" in usage()
10163 "-l only print out luns, and not a count\n" in usage()
10164 "-r <reporttype> specify \"default\", \"wellknown\" or \"all\"\n" in usage()
10166 "-b only report the blocksize\n" in usage()
10167 "-h human readable device size, base 2\n" in usage()
10168 "-H human readable device size, base 10\n" in usage()
10169 "-N print the number of blocks instead of last block\n" in usage()
10170 "-q quiet, print numbers only\n" in usage()
10171 "-s only report the last block/device size\n" in usage()
10173 "-c cdb [args] specify the SCSI CDB\n" in usage()
10174 "-i len fmt specify input data and input data format\n" in usage()
10175 "-o len fmt [args] specify output data and output data fmt\n" in usage()
10177 "-r len fmt [args] specify the SMP command to be sent\n" in usage()
10178 "-R len fmt [args] specify SMP response format\n" in usage()
10180 "-l specify the long response format\n" in usage()
10182 "-p phy specify the PHY to operate on\n" in usage()
10183 "-l specify the long request/response format\n" in usage()
10184 "-o operation specify the phy control operation\n" in usage()
10185 "-d name set the attached device name\n" in usage()
10186 "-m rate set the minimum physical link rate\n" in usage()
10187 "-M rate set the maximum physical link rate\n" in usage()
10188 "-T pp_timeout set the partial pathway timeout value\n" in usage()
10189 "-a enable|disable enable or disable SATA slumber\n" in usage()
10190 "-A enable|disable enable or disable SATA partial phy power\n" in usage()
10191 "-s enable|disable enable or disable SAS slumber\n" in usage()
10192 "-S enable|disable enable or disable SAS partial phy power\n" in usage()
10194 "-l specify the long response format\n" in usage()
10195 "-q only print phys with attached devices\n" in usage()
10197 "-l specify the long response format\n" in usage()
10199 "-I CAM_DEBUG_INFO -- scsi commands, errors, data\n" in usage()
10200 "-T CAM_DEBUG_TRACE -- routine flow tracking\n" in usage()
10201 "-S CAM_DEBUG_SUBTRACE -- internal routine command flow\n" in usage()
10202 "-c CAM_DEBUG_CDB -- print out SCSI CDBs only\n" in usage()
10204 "-N tags specify the number of tags to use for this device\n" in usage()
10205 "-q be quiet, don't report the number of tags\n" in usage()
10206 "-v report a number of tag-related parameters\n" in usage()
10208 "-a send a test unit ready after negotiation\n" in usage()
10209 "-c report/set current negotiation settings\n" in usage()
10210 "-D <arg> \"enable\" or \"disable\" disconnection\n" in usage()
10211 "-M mode set ATA mode\n" in usage()
10212 "-O offset set command delay offset\n" in usage()
10213 "-q be quiet, don't report anything\n" in usage()
10214 "-R syncrate synchronization rate in MHz\n" in usage()
10215 "-T <arg> \"enable\" or \"disable\" tagged queueing\n" in usage()
10216 "-U report/set user negotiation settings\n" in usage()
10217 "-W bus_width set the bus width in bits (8, 16 or 32)\n" in usage()
10218 "-v also print a Path Inquiry CCB for the controller\n" in usage()
10220 "-q be quiet, don't print status messages\n" in usage()
10221 "-r run in report only mode\n" in usage()
10222 "-w don't send immediate format command\n" in usage()
10223 "-y don't ask any questions\n" in usage()
10225 "-a operation operation mode: overwrite, block, crypto or exitfailure\n" in usage()
10226 "-c passes overwrite passes to perform (1 to 31)\n" in usage()
10227 "-I invert overwrite pattern after each pass\n" in usage()
10228 "-P pattern path to overwrite pattern file\n" in usage()
10229 "-q be quiet, don't print status messages\n" in usage()
10230 "-r run in report only mode\n" in usage()
10231 "-U run operation in unrestricted completion exit mode\n" in usage()
10232 "-w don't send immediate sanitize command\n" in usage()
10233 "-y don't ask any questions\n" in usage()
10235 "-t <arg> number of seconds before respective state.\n" in usage()
10237 "-f fw_image path to firmware image file\n" in usage()
10238 "-q don't print informational messages, only errors\n" in usage()
10239 "-s run in simulation mode\n" in usage()
10240 "-v print info for every firmware segment sent to device\n" in usage()
10241 "-y don't ask any questions\n" in usage()
10243 "-d pwd disable security using the given password for the selected\n" in usage()
10245 "-e pwd erase the device using the given pwd for the selected user\n" in usage()
10246 "-f freeze the security configuration of the specified device\n" in usage()
10247 "-h pwd enhanced erase the device using the given pwd for the\n" in usage()
10249 "-k pwd unlock the device using the given pwd for the selected\n" in usage()
10251 "-l <high|maximum> specifies which security level to set: high or maximum\n" in usage()
10252 "-q be quiet, do not print any status messages\n" in usage()
10253 "-s pwd password the device (enable security) using the given\n" in usage()
10255 "-T timeout overrides the timeout (seconds) used for erase operation\n" in usage()
10256 "-U <user|master> specifies which user to set: user or master\n" in usage()
10257 "-y don't ask any questions\n" in usage()
10259 "-f freeze the HPA configuration of the device\n" in usage()
10260 "-l lock the HPA configuration of the device\n" in usage()
10261 "-P make the HPA max sectors persist\n" in usage()
10262 "-p pwd Set the HPA configuration password required for unlock\n" in usage()
10264 "-q be quiet, do not print any status messages\n" in usage()
10265 "-s sectors configures the maximum user accessible sectors of the\n" in usage()
10267 "-U pwd unlock the HPA configuration of the device\n" in usage()
10268 "-y don't ask any questions\n" in usage()
10270 "-f freeze the AMA configuration of the device\n" in usage()
10271 "-q be quiet, do not print any status messages\n" in usage()
10272 "-s sectors configures the maximum user accessible sectors of the\n" in usage()
10275 "-i action specify read_keys, read_reservation, report_cap, or\n" in usage()
10277 "-o action specify register, register_ignore, reserve, release,\n" in usage()
10279 "-a set the All Target Ports (ALL_TG_PT) bit\n" in usage()
10280 "-I tid specify a Transport ID, e.g.: sas,0x1234567812345678\n" in usage()
10281 "-k key specify the Reservation Key\n" in usage()
10282 "-K sa_key specify the Service Action Reservation Key\n" in usage()
10283 "-p set the Activate Persist Through Power Loss bit\n" in usage()
10284 "-R rtp specify the Relative Target Port\n" in usage()
10285 "-s scope specify the scope: lun, extent, element or a number\n" in usage()
10286 "-S specify Transport ID for register, requires -I\n" in usage()
10287 "-T res_type specify the reservation type: read_shared, wr_ex, rd_ex,\n" in usage()
10289 "-U unregister the current initiator for register_move\n" in usage()
10291 "-r action specify attr_values, attr_list, lv_list, part_list, or\n" in usage()
10293 "-w attr specify an attribute to write, one -w argument per attr\n" in usage()
10294 "-a attr_num only display this attribute number\n" in usage()
10295 "-c get cached attributes\n" in usage()
10296 "-e elem_addr request attributes for the given element in a changer\n" in usage()
10297 "-F form1,form2 output format, comma separated list: text_esc, text_raw,\n" in usage()
10300 "-p partition request attributes for the given partition\n" in usage()
10301 "-s start_attr request attributes starting at the given number\n" in usage()
10302 "-T elem_type specify the element type (used with -e)\n" in usage()
10303 "-V logical_vol specify the logical volume ID\n" in usage()
10305 "-o opcode specify the individual opcode to list\n" in usage()
10306 "-s service_action specify the service action for the opcode\n" in usage()
10307 "-N do not return SCSI error for unsupported SA\n" in usage()
10308 "-T request nominal and recommended timeout values\n" in usage()
10310 "-c cmd required: rz, open, close, finish, or rwp\n" in usage()
10311 "-a apply the action to all zones\n" in usage()
10312 "-l LBA specify the zone starting LBA\n" in usage()
10313 "-o rep_opts report zones options: all, empty, imp_open, exp_open,\n" in usage()
10315 "-P print_opt report zones printing: normal, summary, script\n" in usage()
10317 "-c cmd required: restore, goto, timer, state, enable, disable,\n" in usage()
10319 "-d disable power mode (timer, state)\n" in usage()
10320 "-D delayed entry (goto)\n" in usage()
10321 "-e enable power mode (timer, state)\n" in usage()
10322 "-H hold power mode (goto)\n" in usage()
10323 "-p power_cond Idle_a, Idle_b, Idle_c, Standby_y, Standby_z (timer,\n" in usage()
10325 "-P only display power mode (status)\n" in usage()
10326 "-r rst_src restore settings from: default, saved (restore)\n" in usage()
10327 "-s save mode (timer, state, restore)\n" in usage()
10328 "-S power_src set power source: battery, nonbattery (source)\n" in usage()
10329 "-T timer set timer, seconds, .1 sec resolution (timer)\n" in usage()
10331 "-r report the timestamp of the device\n" in usage()
10332 "-f format report the timestamp of the device with the given\n" in usage()
10334 "-m report the timestamp of the device as milliseconds since\n" in usage()
10336 "-U report the time with UTC instead of the local time zone\n" in usage()
10337 "-s set the timestamp of the device\n" in usage()
10338 "-f format the format of the time string passed into strptime(3)\n" in usage()
10339 "-T time the time value passed into strptime(3)\n" in usage()
10340 "-U set the timestamp of the device to UTC time\n" in usage()
10342 "-d remove an element from service\n" in usage()
10343 "-l list status of all elements of drive\n" in usage()
10344 "-r restore all elements to service\n" in usage()
10345 "-e elm element to remove\n" in usage()
10346 "-c capacity requested new capacity\n" in usage()
10348 "-c mmc_cmd MMC command to send to the card\n" in usage()
10349 "-a mmc_arg Argument for the MMC command\n" in usage()
10350 "-f mmc_flag Flags to set for the MMC command\n" in usage()
10351 "-l data_len Expect data_len bytes of data in reply and display them\n" in usage()
10352 "-W Fill the data buffer before invoking the MMC command\n" in usage()
10353 "-b data_byte One byte of data to fill the data buffer with\n" in usage()
10354 "-F frequency Operating frequency to set on the controller\n" in usage()
10355 "-4 Set bus width to 4 bit\n" in usage()
10356 "-1 Set bus width to 8 bit\n" in usage()
10357 "-S high | std Set high-speed or standard timing\n" in usage()
10358 "-I Display various card and host controller information\n" in usage()
10445 * (non-GPL!) command line parsing interface than getopt. I in main()
10470 && (argc > 2 && argv[2][0] != '-')) { in main()
10489 == -1) in main()
10508 while ((c = getopt(argc, argv, combinedopt))!= -1){ in main()
10565 /* Convert the timeout from seconds to ms */ in main()