summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2026-08-19 12:31:50 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2026-08-19 12:31:50 -0700
commitfaabe2db712e8310dbe38fb81d33e5313ff0f059 (patch)
tree8f917cb0126f652d041e8b2ed03f5aa6fa5a1e54 /include/linux
parent59e6295fac26b8e85c1ea859cdd89fa1e47519d7 (diff)
parent73b6bf3c314ad34a9fd389f84de6e8dbfc204880 (diff)
Merge tag 'ata-7.3' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux
Pull ata updates from Damien Le Moal: - Some code cleanups to rename the function used to identify ZAC devices and declare some local functions static (me) - Refactoring and improvement of the translation of the SCSI REPORT SUPPORTED OPCODES command to allow users access to the entire list of supported commands (me) - Fix the translation of the WRITE SAME command with UNMAP bit set (DSM TRIM) for devices with a sector size larger than 2K and devices that support multiple TRIM segments (Niklas) - Add support detecting support for and translating the SCSI commands related to the storage elements depopulation feature (GET PHYSICAL ELEMENT STATUS, REMOVE ELEMENT AND TRUCATE, REMOVE ELEMENT AND MODIFY ZONES and RESTORE ELEMENTS AND REBUILD) (me) - Improvements to the sata_mv driver probe code (clocks and IRQ initialization) (Rosen) - Improve resource initialization in the pata_rb532_cf, pata_pxa, sata_highbank and ahci_da850 drivers (Rosen) - Improve PIO data-in command completions to better hndle slow devices, e.g. CF cards (Richard) - Improve the DMA channel management using device resources in the pata_pxa driver (Rosen) - Fix the pata_ep93xx driver to correctly fallback to PIO mode if DMA initialization fails (Rosen) - Use named initializers to define the match tables of the ahci_xgene, ahci_qoriq and ahci_platform drivers (Pawel) * tag 'ata-7.3' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux: (28 commits) ata: use named initializers for acpi_device_id ata: pata_ep93xx: fix PIO fallback when DMA init fails ata: pata_pxa: use devres for DMA channel management ata: libata-sff: don't busy-wait for PIO data-in command completion ata: ahci_da850: use devm_platform_ioremap_resource() ata: sata_highbank: use devm_platform_ioremap_resource ata: pata_pxa: use devm_platform_ioremap_resource ata: pata_rb532_cf: use devm_platform_ioremap_resource() ata: sata_mv: use devm clock helpers ata: sata_mv: Use platform_get_irq() to get interrupt ata: pata_mpc52xx: Remove redundant dev_err() ata: libata-eh: make ata_eh_qc_complete() and ata_eh_qc_retry() static ata: libata-scsi: add support for the REMOVE ELEMENT AND MODIFY ZONES command ata: libata-scsi: add support for the RESTORE ELEMENTS AND REBUILD command ata: libata-scsi: add support for the REMOVE ELEMENT AND TRUNCATE command ata: libata-scsi: add support for the GET PHYSICAL ELEMENT STATUS command ata: libata-core: detect support for depopulation capabilities ata: libata-scsi: improve ata_get_xlat_func ata: libata: improve the definition of device flags scsi: define depopulation capabilities related service actions ...
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/ata.h17
-rw-r--r--include/linux/libata.h93
2 files changed, 67 insertions, 43 deletions
diff --git a/include/linux/ata.h b/include/linux/ata.h
index 7daad4cad985..c4fac5f8d480 100644
--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -75,6 +75,7 @@ enum {
ATA_ID_HW_CONFIG = 93,
ATA_ID_SPG = 98,
ATA_ID_LBA_CAPACITY_2 = 100,
+ ATA_ID_MAX_PAGES_PER_DSM = 105,
ATA_ID_SECTOR_SIZE = 106,
ATA_ID_WWN = 108,
ATA_ID_LOGICAL_SECTOR_SIZE = 117, /* and 118 */
@@ -288,6 +289,10 @@ enum {
ATA_CMD_SANITIZE_DEVICE = 0xB4,
ATA_CMD_ZAC_MGMT_IN = 0x4A,
ATA_CMD_ZAC_MGMT_OUT = 0x9F,
+ ATA_CMD_GET_PHYS_ELEMENT_STATUS = 0x12,
+ ATA_CMD_REMOVE_ELEMENT_AND_TRUNCATE = 0x7c,
+ ATA_CMD_RESTORE_ELEMENTS_AND_REBUILD = 0x7d,
+ ATA_CMD_REMOVE_ELEMENT_AND_MODIFY_ZONES = 0x7e,
/* marked obsolete in the ATA/ATAPI-7 spec */
ATA_CMD_RESTORE = 0x10,
@@ -928,6 +933,18 @@ static inline bool ata_id_has_trim(const u16 *id)
return false;
}
+static inline u16 ata_id_dsm_max_pages(const u16 *id)
+{
+ /*
+ * IDENTIFY DEVICE word 105: MAX PAGES PER DSM COMMAND. Maximum number
+ * of 512-byte pages of LBA Range Entries the device accepts in a
+ * single DATA SET MANAGEMENT command. Zero means the device does not
+ * specify a limit. The field is reserved unless TRIM is supported, so
+ * callers must gate on ata_id_has_trim().
+ */
+ return id[ATA_ID_MAX_PAGES_PER_DSM];
+}
+
static inline bool ata_id_has_zero_after_trim(const u16 *id)
{
/* DSM supported, deterministic read, and read zero after trim set */
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 1827502b9cf2..313e96173b19 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -121,6 +121,55 @@ enum {
ATA_QUIRK_NO_FUA = BIT_ULL(__ATA_QUIRK_NO_FUA),
};
+/*
+ * struct ata_device flags
+ */
+enum {
+ ATA_DFLAG_LBA = (1UL << 0), /* device supports LBA */
+ ATA_DFLAG_LBA48 = (1UL << 1), /* device supports LBA48 */
+ ATA_DFLAG_CDB_INTR = (1UL << 2), /* device asserts INTRQ when ready for CDB */
+ ATA_DFLAG_NCQ = (1UL << 3), /* device supports NCQ */
+ ATA_DFLAG_FLUSH_EXT = (1UL << 4), /* do FLUSH_EXT instead of FLUSH */
+ ATA_DFLAG_ACPI_PENDING = (1UL << 5), /* ACPI resume action pending */
+ ATA_DFLAG_ACPI_FAILED = (1UL << 6), /* ACPI on devcfg has failed */
+ ATA_DFLAG_AN = (1UL << 7), /* AN configured */
+ ATA_DFLAG_TRUSTED = (1UL << 8), /* device supports trusted send/recv */
+ ATA_DFLAG_FUA = (1UL << 9), /* device supports FUA */
+ ATA_DFLAG_DMADIR = (1UL << 10), /* device requires DMADIR */
+ ATA_DFLAG_NCQ_SEND_RECV = (1UL << 11), /* device supports NCQ SEND and RECV */
+ ATA_DFLAG_NCQ_PRIO = (1UL << 12), /* device supports NCQ priority */
+ ATA_DFLAG_CDL = (1UL << 13), /* supports cmd duration limits */
+ ATA_DFLAG_DEPOP = (1UL << 14), /* supports depopulation capability */
+ ATA_DFLAG_DEPOP_RESTORE = (1UL << 15), /* supports depopulation restoration */
+ ATA_DFLAG_DEPOP_MODIFY = (1UL << 16), /* supports zoned depopulation */
+ ATA_DFLAG_CFG_MASK = (1UL << 17) - 1,
+
+ ATA_DFLAG_PIO = (1UL << 17), /* device limited to PIO mode */
+ ATA_DFLAG_NCQ_OFF = (1UL << 18), /* device limited to non-NCQ mode */
+ ATA_DFLAG_SLEEPING = (1UL << 19), /* device is sleeping */
+ ATA_DFLAG_DUBIOUS_XFER = (1UL << 20), /* data transfer not verified */
+ ATA_DFLAG_NO_UNLOAD = (1UL << 21), /* device doesn't support unload */
+ ATA_DFLAG_UNLOCK_HPA = (1UL << 22), /* unlock HPA */
+ ATA_DFLAG_INIT_MASK = (1UL << 23) - 1,
+
+ ATA_DFLAG_NCQ_PRIO_ENABLED = (1UL << 23), /* Priority cmds sent to dev */
+ ATA_DFLAG_CDL_ENABLED = (1UL << 24), /* cmd duration limits is enabled */
+ ATA_DFLAG_RESUMING = (1UL << 25), /* Device is resuming */
+ ATA_DFLAG_DETACH = (1UL << 26),
+ ATA_DFLAG_DETACHED = (1UL << 27),
+ ATA_DFLAG_DA = (1UL << 28), /* device supports Device Attention */
+ ATA_DFLAG_DEVSLP = (1UL << 29), /* device supports Device Sleep */
+ ATA_DFLAG_ACPI_DISABLED = (1UL << 30), /* ACPI for the device is disabled */
+ ATA_DFLAG_D_SENSE = (1UL << 31), /* Descriptor sense requested */
+
+ ATA_DFLAG_FEATURES_MASK = (ATA_DFLAG_TRUSTED | ATA_DFLAG_DA | \
+ ATA_DFLAG_DEVSLP | ATA_DFLAG_NCQ_SEND_RECV | \
+ ATA_DFLAG_NCQ_PRIO | ATA_DFLAG_FUA | \
+ ATA_DFLAG_CDL | ATA_DFLAG_DEPOP | \
+ ATA_DFLAG_DEPOP_RESTORE |
+ ATA_DFLAG_DEPOP_MODIFY)
+};
+
enum {
/* various global constants */
LIBATA_MAX_PRD = ATA_MAX_PRD / 2,
@@ -146,46 +195,7 @@ enum {
ATA_TFLAG_FUA = (1 << 5), /* enable FUA */
ATA_TFLAG_POLLING = (1 << 6), /* set nIEN to 1 and use polling */
- /* struct ata_device stuff */
- ATA_DFLAG_LBA = (1 << 0), /* device supports LBA */
- ATA_DFLAG_LBA48 = (1 << 1), /* device supports LBA48 */
- ATA_DFLAG_CDB_INTR = (1 << 2), /* device asserts INTRQ when ready for CDB */
- ATA_DFLAG_NCQ = (1 << 3), /* device supports NCQ */
- ATA_DFLAG_FLUSH_EXT = (1 << 4), /* do FLUSH_EXT instead of FLUSH */
- ATA_DFLAG_ACPI_PENDING = (1 << 5), /* ACPI resume action pending */
- ATA_DFLAG_ACPI_FAILED = (1 << 6), /* ACPI on devcfg has failed */
- ATA_DFLAG_AN = (1 << 7), /* AN configured */
- ATA_DFLAG_TRUSTED = (1 << 8), /* device supports trusted send/recv */
- ATA_DFLAG_FUA = (1 << 9), /* device supports FUA */
- ATA_DFLAG_DMADIR = (1 << 10), /* device requires DMADIR */
- ATA_DFLAG_NCQ_SEND_RECV = (1 << 11), /* device supports NCQ SEND and RECV */
- ATA_DFLAG_NCQ_PRIO = (1 << 12), /* device supports NCQ priority */
- ATA_DFLAG_CDL = (1 << 13), /* supports cmd duration limits */
- ATA_DFLAG_CFG_MASK = (1 << 14) - 1,
-
- ATA_DFLAG_PIO = (1 << 14), /* device limited to PIO mode */
- ATA_DFLAG_NCQ_OFF = (1 << 15), /* device limited to non-NCQ mode */
- ATA_DFLAG_SLEEPING = (1 << 16), /* device is sleeping */
- ATA_DFLAG_DUBIOUS_XFER = (1 << 17), /* data transfer not verified */
- ATA_DFLAG_NO_UNLOAD = (1 << 18), /* device doesn't support unload */
- ATA_DFLAG_UNLOCK_HPA = (1 << 19), /* unlock HPA */
- ATA_DFLAG_INIT_MASK = (1 << 20) - 1,
-
- ATA_DFLAG_NCQ_PRIO_ENABLED = (1 << 20), /* Priority cmds sent to dev */
- ATA_DFLAG_CDL_ENABLED = (1 << 21), /* cmd duration limits is enabled */
- ATA_DFLAG_RESUMING = (1 << 22), /* Device is resuming */
- ATA_DFLAG_DETACH = (1 << 24),
- ATA_DFLAG_DETACHED = (1 << 25),
- ATA_DFLAG_DA = (1 << 26), /* device supports Device Attention */
- ATA_DFLAG_DEVSLP = (1 << 27), /* device supports Device Sleep */
- ATA_DFLAG_ACPI_DISABLED = (1 << 28), /* ACPI for the device is disabled */
- ATA_DFLAG_D_SENSE = (1 << 29), /* Descriptor sense requested */
-
- ATA_DFLAG_FEATURES_MASK = (ATA_DFLAG_TRUSTED | ATA_DFLAG_DA | \
- ATA_DFLAG_DEVSLP | ATA_DFLAG_NCQ_SEND_RECV | \
- ATA_DFLAG_NCQ_PRIO | ATA_DFLAG_FUA | \
- ATA_DFLAG_CDL),
-
+ /* sturct ata_device class. */
ATA_DEV_UNKNOWN = 0, /* unknown device */
ATA_DEV_ATA = 1, /* ATA device */
ATA_DEV_ATA_UNSUP = 2, /* ATA device (unsupported) */
@@ -1421,9 +1431,6 @@ extern int ata_port_freeze(struct ata_port *ap);
extern void ata_eh_freeze_port(struct ata_port *ap);
extern void ata_eh_thaw_port(struct ata_port *ap);
-extern void ata_eh_qc_complete(struct ata_queued_cmd *qc);
-extern void ata_eh_qc_retry(struct ata_queued_cmd *qc);
-
extern void ata_std_error_handler(struct ata_port *ap)
__must_hold(&ap->host->eh_mutex);
extern void ata_std_sched_eh(struct ata_port *ap);