From nobody Wed Dec 10 21:41:51 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4dRTh00CsWz6JjmN for ; Wed, 10 Dec 2025 21:41:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dRTgz5stzz4NWX for ; Wed, 10 Dec 2025 21:41:51 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1765402911; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=kNQp7apwmQ1BOFub0SzYxqN0Ub8AzZzuOPIaibcFS/s=; b=Ykv3mkDm/KHZDELMhDSNEoWNTdtkQkKc81j0w7biud4GA5DIjxBM6ql5Z3MrHxjhp/TS1D XEobqmeHuMJoqgU9CXqtg5j7KAqUbae09dTn+5mJCYL8SryVv4tKuWbC9c/9+5remI7KwB Su/O34nfAM6/57rGiPug9br3nGGFLUcRJHfsfgrBF6dNTtRwoU5NXqfGJgvHG4/GBlVxqD glV+pH3L6uDuDB1NPxWWV8C8eGKzSSK5txMuVsm20ZdF953e6XQk54c936qu4Ipzxq4Yv9 hi7kLa5GMCKcH0y9tHm9koUBUxTJvNwkjZS/dKybTaGkLNjTtFHLIkyolj+f1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1765402911; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=kNQp7apwmQ1BOFub0SzYxqN0Ub8AzZzuOPIaibcFS/s=; b=ajyQ7px2mhU4RA9lxqvmuYVxVqruIuWnY7vH0J9dH50jWvj96euF6L063JYsf296v5tRBp wOF3rSxFiKqoaDvGxbAWWViBChkFwVvWd14jnXQ5XCL+jFFrIxHsYogiNiDYblnSiduEP1 u4JjQiPxO1qHvTfseMohoSFhpAZhN0Iaz6aLuVQIMCbph3RWx5r4hGefQb6zwxMmyJaMz9 2LO+c2+3JxEdF90W+pFiz1t4M0zBcKoo7MlF9jQ7irdeeTUHv2C8bi5VRrxLhj6kfFiYsw QZg7ZhxkDRNFDw1Nz5l3XqU8q3IUJt4bkP5woDwKtSQ9B8Q4g9ycGFaGTnP01w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1765402911; a=rsa-sha256; cv=none; b=QqX6VweW/Ks9YUBg3qNu53lxFYdiVBE29hyFrFgZzQbvTUzEjFkmDc2Qci59epsknZ584A AASbaOqH7KR83hUGZrlzT8R/SMyEI9Rgh963X9R/p57Mgo1MYeLMlnQSvrp/ZNSwToHaFR XCKFH/yHLvJ6i6rqO4d77qrENZn6TFPTgKIwYUG1l+uNkpFY2xgLijzfiG1ADbzxFj5NiQ lpnttyVr224slNzvSVWD3qCRtXtW9Vp+DStCgJwUl4fwakUonOSFpN+Nw0X0hyFtHsK/dX gyei2CpTRe3lPSFGqwKM27SzelwPtaVS4b34hXv8Y9Gas26QlqL6OsluuLDWyQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dRTgz5K30z12cJ for ; Wed, 10 Dec 2025 21:41:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 34414 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 10 Dec 2025 21:41:51 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: d3e79182960a - main - cam: decode and print direct accecss block device sense data List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d3e79182960ae56f52b5b3fbbfa6f4c2bbc53246 Auto-Submitted: auto-generated Date: Wed, 10 Dec 2025 21:41:51 +0000 Message-Id: <6939e91f.34414.82ccf2c@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=d3e79182960ae56f52b5b3fbbfa6f4c2bbc53246 commit d3e79182960ae56f52b5b3fbbfa6f4c2bbc53246 Author: Warner Losh AuthorDate: 2025-12-07 11:07:21 +0000 Commit: Warner Losh CommitDate: 2025-12-10 21:37:40 +0000 cam: decode and print direct accecss block device sense data A more efficient way to include multiple bits of data in a sense decriptor was defined in SBC4 in 2020. Decode and print it. Sponsored by: Netflix --- sys/cam/scsi/scsi_all.c | 47 +++++++++++++++++++++++++++++++++++++++++++++-- sys/cam/scsi/scsi_all.h | 23 +++++++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/sys/cam/scsi/scsi_all.c b/sys/cam/scsi/scsi_all.c index 6cfc390ed187..4ea2ab7d4acd 100644 --- a/sys/cam/scsi/scsi_all.c +++ b/sys/cam/scsi/scsi_all.c @@ -4789,6 +4789,32 @@ scsi_sense_forwarded_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, sense_key_desc, asc, ascq, asc_desc); } +void +scsi_sense_dabd_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, + u_int sense_len, uint8_t *cdb, int cdb_len, + struct scsi_inquiry_data *inq_data, + struct scsi_sense_desc_header *header) +{ + struct scsi_sense_direct_access_block_device *dabd; + int error_code, sense_key, asc, ascq; + + dabd = (struct scsi_sense_direct_access_block_device *)header; + + sbuf_printf(sb, "Direct Access Block Device: fru: %d ", + dabd->fru); + if (dabd->sks_byte & SSD_DESC_DABD_SKS_VALID) { + scsi_extract_sense_len(sense, sense_len, &error_code, &sense_key, + &asc, &ascq, /*show_errors*/ 1); + scsi_sks_sbuf(sb, sense_key, dabd->data); + } + if (dabd->byte2 & SSD_DESC_DABD_VALID) { + scsi_info_sbuf(sb, cdb, cdb_len, inq_data, + scsi_8btou64(dabd->info)); + scsi_command_sbuf(sb, cdb, cdb_len, inq_data, + scsi_8btou64(dabd->command_info)); + } +} + /* * Generic sense descriptor printing routine. This is used when we have * not yet implemented a specific printing routine for this descriptor. @@ -4837,7 +4863,8 @@ struct scsi_sense_desc_printer { {SSD_DESC_BLOCK, scsi_sense_block_sbuf}, {SSD_DESC_ATA, scsi_sense_ata_sbuf}, {SSD_DESC_PROGRESS, scsi_sense_progress_sbuf}, - {SSD_DESC_FORWARDED, scsi_sense_forwarded_sbuf} + {SSD_DESC_DABD, scsi_sense_dabd_sbuf}, + {SSD_DESC_FORWARDED, scsi_sense_forwarded_sbuf}, }; void @@ -9507,7 +9534,7 @@ scsi_format_sense_devd(struct ccb_scsiio *csio, struct sbuf *sb) struct scsi_sense_fru *fru; fru = (struct scsi_sense_fru *)hdr; - sbuf_printf(sb, "fru=%ju ", (uintmax_t)fru->fru); + sbuf_printf(sb, "fru=%u ", fru->fru); break; } case SSD_DESC_ATA: @@ -9536,6 +9563,22 @@ scsi_format_sense_devd(struct ccb_scsiio *csio, struct sbuf *sb) sbuf_printf(sb, "count=%d lba=0x%jx ", count, (uintmax_t)lba); break; } + case SSD_DESC_DABD: + { + struct scsi_sense_direct_access_block_device *dabd; + + dabd = (struct scsi_sense_direct_access_block_device *)hdr; + + if (dabd->sks_byte & SSD_DESC_DABD_SKS_VALID) + decode_sks(sb, sk, dabd->data); + sbuf_printf(sb, "fru=%u ", dabd->fru); + if (dabd->byte2 & SSD_DESC_DABD_VALID) { + sbuf_printf(sb, "info=0x%jx ", + scsi_8btou64(dabd->info)); + sbuf_printf(sb, "cmd_info=0x%jx ", + scsi_8btou64(dabd->command_info)); + } + } default: { uint8_t *cp; diff --git a/sys/cam/scsi/scsi_all.h b/sys/cam/scsi/scsi_all.h index 045fbca2de80..cadf2d1f2835 100644 --- a/sys/cam/scsi/scsi_all.h +++ b/sys/cam/scsi/scsi_all.h @@ -3653,6 +3653,25 @@ struct scsi_sense_forwarded uint8_t sense_data[]; }; +/* + * Direct Access Block Specific Sense Data + */ +struct scsi_sense_direct_access_block_device +{ + uint8_t desc_type; +#define SSD_DESC_DABD 0x0d + uint8_t length; + uint8_t byte2; +#define SSD_DESC_DABD_VALID 0x80 + uint8_t reserved3; + uint8_t sks_byte; +#define SSD_DESC_DABD_SKS_VALID 0x80 + uint8_t data[2]; /* Same as SSD_DESC_SKS extra data */ + uint8_t fru; + uint8_t info[8]; /* if SSD_DESC_DA_VALID */ + uint8_t command_info[8]; +}; + /* * Vendor-specific sense descriptor. The desc_type field will be in the * range between MIN and MAX inclusive. @@ -3889,6 +3908,10 @@ void scsi_sense_forwarded_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, u_int sense_len, uint8_t *cdb, int cdb_len, struct scsi_inquiry_data *inq_data, struct scsi_sense_desc_header *header); +void scsi_sense_dabd_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, + u_int sense_len, uint8_t *cdb, int cdb_len, + struct scsi_inquiry_data *inq_data, + struct scsi_sense_desc_header *header); void scsi_sense_generic_sbuf(struct sbuf *sb, struct scsi_sense_data *sense, u_int sense_len, uint8_t *cdb, int cdb_len, struct scsi_inquiry_data *inq_data,