From nobody Mon Jan 26 06:47:08 2026 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 4dzzbx1rYvz6Pnkp for ; Mon, 26 Jan 2026 06:47:09 +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 "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dzzbw63bMz3wwS for ; Mon, 26 Jan 2026 06:47:08 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1769410028; 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=Bd07z/s0MNAOHLYysDw+GpDEY7PCUdTQ0k/b0pg0Bcw=; b=h+20uG+X6dPhJmcgeUce8eKeGpmCXlgIbYQpF5BnO5mWEmizkbdeQyjBnXwrUkh0pHDaSW ERz9JIE+R+X/jgQVsVFN6j/ezDVZc2vRqMKrUePHgjHYGrjVJzRUiLaB4yO9jvr34IUbUA CatrjDBcJLx0lJv6eDq08jrNjeryTpqTnLCJ/jThz1j85GPzcEqwIjjsKEXtLUgPv6sNlU 53aoFcjNB58m6L2v/4q5VNnyahs+0Ar7VOmFN4H/E//29dh0prrGQWkQMtFz55Zws0iV+6 Kp5fRf5zsZoGSfDGbFrkSw2iJZ49Bd6rtPk3bVl46NXZcbdiuUHLf91GntQhJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1769410028; 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=Bd07z/s0MNAOHLYysDw+GpDEY7PCUdTQ0k/b0pg0Bcw=; b=ZyozD0XCl0Pr/N4krbU+9PRcLxiJz4cKd0nVLwLrFE3zSP0cYlDdLJYb46VCICjDezZa3X FGSfgdtBMTgud1OpVgILBXJVgw+q3YdVPTU0uV/JL7jW/XkMuDgYMsoC6B28bFDN8prqOA olbb4wjO8Gjf8lZTPXoy4DS3Dha6T7RRm8ph159lCea/pq9BxV5RzHXSmxYrXp8uRgMx/Y hyToOUq6uUevoO03My3DE4B6MPQHcFNqePD1XOhiiUZLrueb+t2hvpBsW6wFmC/LmGUfyi WX7NA4HStY7N4ZS8C2c+EWbTXZUiB7UXqqPZHCLdWK4w05ioAnTur1bWhjt+Pw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1769410028; a=rsa-sha256; cv=none; b=bhgTGPYgrYgqPhBCnyU7PafZY7Z48KX/7AkmleAIPckOeaFzCvMup6v7Iuh6gsILPKGVpJ fYtEvbZyqM1x9UAaqltC3tDOGotKrf5+PcAI6eOY4/4lK8d9yIScMucoTnMRLdObwQhCxs Htq0q5CW4QkIE/OEe7SRDWRWs/DpFUHFUkrEyQu8gzERUNNsZV/nLevAyPpwg0H29s+1uv Ry7Xf6vFzkt4mQS4cyQP3fyXj59bvLZa+9M2etB3lYS17hqxFz+EmAN9Fqq1rMBzsDfdYI l+0IonD3TyO6tsXsUGG47DrajWy7Xjhjyg2ojiE+/ZVxizss1J/E6NHgJDv4WQ== 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 4dzzbw573Lz18V6 for ; Mon, 26 Jan 2026 06:47:08 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id b919 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 26 Jan 2026 06:47:08 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Jaeyoon Choi Subject: git: 8ef8c6abfadf - main - cam/scsi: Restore scsi_start_stop() and add scsi_start_stop_pc() 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: jaeyoon X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8ef8c6abfadfc9eb0465ce57c6b09ca310415bdd Auto-Submitted: auto-generated Date: Mon, 26 Jan 2026 06:47:08 +0000 Message-Id: <69770dec.b919.7cea33f8@gitrepo.freebsd.org> The branch main has been updated by jaeyoon: URL: https://cgit.FreeBSD.org/src/commit/?id=8ef8c6abfadfc9eb0465ce57c6b09ca310415bdd commit 8ef8c6abfadfc9eb0465ce57c6b09ca310415bdd Author: Jaeyoon Choi AuthorDate: 2026-01-26 06:29:28 +0000 Commit: Jaeyoon Choi CommitDate: 2026-01-26 06:35:31 +0000 cam/scsi: Restore scsi_start_stop() and add scsi_start_stop_pc() Revert the argument change that broke libcam in 8c35de49 and move power_condition support to scsi_start_stop_pc(). Reported by: imp Reviewed By: #cam, imp (mentor) Sponsored by: Samsung Electronics Differential Revision: https://reviews.freebsd.org/D54822 --- sbin/camcontrol/camcontrol.c | 1 - sys/cam/cam_periph.c | 1 - sys/cam/scsi/scsi_all.c | 34 ++++++++++++++++++++++++++++++++++ sys/cam/scsi/scsi_all.h | 4 ++++ sys/cam/scsi/scsi_cd.c | 2 -- sys/dev/mpr/mpr_sas_lsi.c | 1 - sys/dev/mps/mps_sas_lsi.c | 1 - sys/dev/ufshci/ufshci_sim.c | 2 +- 8 files changed, 39 insertions(+), 7 deletions(-) diff --git a/sbin/camcontrol/camcontrol.c b/sbin/camcontrol/camcontrol.c index 8da0c97b02a9..15a5d42a2ba5 100644 --- a/sbin/camcontrol/camcontrol.c +++ b/sbin/camcontrol/camcontrol.c @@ -1024,7 +1024,6 @@ scsistart(struct cam_device *device, int startstop, int loadeject, /* start/stop */ startstop, /* load_eject */ loadeject, /* immediate */ 0, - /* power_condition */ SSS_PC_START_VALID, /* sense_len */ SSD_FULL_SIZE, /* timeout */ timeout ? timeout : 120000); diff --git a/sys/cam/cam_periph.c b/sys/cam/cam_periph.c index 7f6855a5d51d..91ec7a71f612 100644 --- a/sys/cam/cam_periph.c +++ b/sys/cam/cam_periph.c @@ -1791,7 +1791,6 @@ camperiphscsisenseerror(union ccb *ccb, union ccb **orig, /*start*/TRUE, /*load/eject*/le, /*immediate*/FALSE, - /*power_condition*/SSS_PC_START_VALID, SSD_FULL_SIZE, /*timeout*/50000); break; diff --git a/sys/cam/scsi/scsi_all.c b/sys/cam/scsi/scsi_all.c index d8bba97e79bc..76fcd3fee188 100644 --- a/sys/cam/scsi/scsi_all.c +++ b/sys/cam/scsi/scsi_all.c @@ -9007,6 +9007,40 @@ scsi_write_buffer(struct ccb_scsiio *csio, uint32_t retries, void scsi_start_stop(struct ccb_scsiio *csio, uint32_t retries, + void (*cbfcnp)(struct cam_periph *, union ccb *), + uint8_t tag_action, int start, int load_eject, + int immediate, uint8_t sense_len, uint32_t timeout) +{ + struct scsi_start_stop_unit *scsi_cmd; + int extra_flags = 0; + + scsi_cmd = (struct scsi_start_stop_unit *)&csio->cdb_io.cdb_bytes; + bzero(scsi_cmd, sizeof(*scsi_cmd)); + scsi_cmd->opcode = START_STOP_UNIT; + if (start != 0) { + scsi_cmd->how |= SSS_START; + /* it takes a lot of power to start a drive */ + extra_flags |= CAM_HIGH_POWER; + } + if (load_eject != 0) + scsi_cmd->how |= SSS_LOEJ; + if (immediate != 0) + scsi_cmd->byte2 |= SSS_IMMED; + + cam_fill_csio(csio, + retries, + cbfcnp, + /*flags*/CAM_DIR_NONE | extra_flags, + tag_action, + /*data_ptr*/NULL, + /*dxfer_len*/0, + sense_len, + sizeof(*scsi_cmd), + timeout); +} + +void +scsi_start_stop_pc(struct ccb_scsiio *csio, uint32_t retries, void (*cbfcnp)(struct cam_periph *, union ccb *), uint8_t tag_action, int start, int load_eject, int immediate, uint8_t power_condition, uint8_t sense_len, diff --git a/sys/cam/scsi/scsi_all.h b/sys/cam/scsi/scsi_all.h index cadf2d1f2835..8aa87abce370 100644 --- a/sys/cam/scsi/scsi_all.h +++ b/sys/cam/scsi/scsi_all.h @@ -4348,6 +4348,10 @@ void scsi_unmap(struct ccb_scsiio *csio, uint32_t retries, uint8_t sense_len, uint32_t timeout); void scsi_start_stop(struct ccb_scsiio *csio, uint32_t retries, + void (*cbfcnp)(struct cam_periph *, union ccb *), + uint8_t tag_action, int start, int load_eject, + int immediate, uint8_t sense_len, uint32_t timeout); +void scsi_start_stop_pc(struct ccb_scsiio *csio, uint32_t retries, void (*cbfcnp)(struct cam_periph *, union ccb *), uint8_t tag_action, int start, int load_eject, int immediate, uint8_t power_condition, uint8_t sense_len, diff --git a/sys/cam/scsi/scsi_cd.c b/sys/cam/scsi/scsi_cd.c index bc4634562dc6..e622a96ec77e 100644 --- a/sys/cam/scsi/scsi_cd.c +++ b/sys/cam/scsi/scsi_cd.c @@ -3406,7 +3406,6 @@ cdstartunit(struct cam_periph *periph, int load) /* start */ TRUE, /* load_eject */ load, /* immediate */ FALSE, - /* power_condition */ SSS_PC_START_VALID, /* sense_len */ SSD_FULL_SIZE, /* timeout */ 50000); @@ -3435,7 +3434,6 @@ cdstopunit(struct cam_periph *periph, uint32_t eject) /* start */ FALSE, /* load_eject */ eject, /* immediate */ FALSE, - /* power_condition */ SSS_PC_START_VALID, /* sense_len */ SSD_FULL_SIZE, /* timeout */ 50000); diff --git a/sys/dev/mpr/mpr_sas_lsi.c b/sys/dev/mpr/mpr_sas_lsi.c index 6529b38cc5f1..f88dd6e2532f 100644 --- a/sys/dev/mpr/mpr_sas_lsi.c +++ b/sys/dev/mpr/mpr_sas_lsi.c @@ -1516,7 +1516,6 @@ mprsas_SSU_to_SATA_devices(struct mpr_softc *sc, int howto) /*start*/FALSE, /*load/eject*/0, /*immediate*/FALSE, - /*power_condition*/SSS_PC_START_VALID, MPR_SENSE_LEN, /*timeout*/10000); xpt_action(ccb); diff --git a/sys/dev/mps/mps_sas_lsi.c b/sys/dev/mps/mps_sas_lsi.c index c48c8e15d4a4..bcde5d69a021 100644 --- a/sys/dev/mps/mps_sas_lsi.c +++ b/sys/dev/mps/mps_sas_lsi.c @@ -1152,7 +1152,6 @@ mpssas_SSU_to_SATA_devices(struct mps_softc *sc, int howto) /*start*/FALSE, /*load/eject*/0, /*immediate*/FALSE, - /*power_condition*/SSS_PC_START_VALID, MPS_SENSE_LEN, /*timeout*/10000); xpt_action(ccb); diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c index bee1fff858ff..404f3e99d1e2 100644 --- a/sys/dev/ufshci/ufshci_sim.c +++ b/sys/dev/ufshci/ufshci_sim.c @@ -494,7 +494,7 @@ ufshci_sim_send_ssu(struct ufshci_controller *ctrlr, bool start, return ENOMEM; } - scsi_start_stop(&ccb->csio, + scsi_start_stop_pc(&ccb->csio, /*retries*/ 4, /*cbfcnp*/ NULL, /*tag_action*/ MSG_SIMPLE_Q_TAG,