]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - include/linux/libata.h
bpf: fix missing header inclusion
[karo-tx-linux.git] / include / linux / libata.h
index 2c4ebef79d0c61b596efed901eb834d8a436492d..d15c19e331d1273036ddf436e8de3e7bd7c6a3e9 100644 (file)
@@ -180,6 +180,8 @@ enum {
        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_ZAC           = (1 << 30), /* ZAC device */
 
        ATA_DEV_UNKNOWN         = 0,    /* unknown device */
        ATA_DEV_ATA             = 1,    /* ATA device */
@@ -191,7 +193,8 @@ enum {
        ATA_DEV_SEMB            = 7,    /* SEMB */
        ATA_DEV_SEMB_UNSUP      = 8,    /* SEMB (unsupported) */
        ATA_DEV_ZAC             = 9,    /* ZAC device */
-       ATA_DEV_NONE            = 10,   /* no device */
+       ATA_DEV_ZAC_UNSUP       = 10,   /* ZAC device (unsupported) */
+       ATA_DEV_NONE            = 11,   /* no device */
 
        /* struct ata_link flags */
        ATA_LFLAG_NO_HRST       = (1 << 1), /* avoid hardreset */
@@ -727,6 +730,13 @@ struct ata_device {
 
        /* NCQ send and receive log subcommand support */
        u8                      ncq_send_recv_cmds[ATA_LOG_NCQ_SEND_RECV_SIZE];
+       u8                      ncq_non_data_cmds[ATA_LOG_NCQ_NON_DATA_SIZE];
+
+       /* ZAC zone configuration */
+       u32                     zac_zoned_cap;
+       u32                     zac_zones_optimal_open;
+       u32                     zac_zones_optimal_nonseq;
+       u32                     zac_zones_max_open;
 
        /* error history */
        int                     spdn_cnt;
@@ -1523,7 +1533,8 @@ static inline unsigned int ata_class_enabled(unsigned int class)
 static inline unsigned int ata_class_disabled(unsigned int class)
 {
        return class == ATA_DEV_ATA_UNSUP || class == ATA_DEV_ATAPI_UNSUP ||
-               class == ATA_DEV_PMP_UNSUP || class == ATA_DEV_SEMB_UNSUP;
+               class == ATA_DEV_PMP_UNSUP || class == ATA_DEV_SEMB_UNSUP ||
+               class == ATA_DEV_ZAC_UNSUP;
 }
 
 static inline unsigned int ata_class_absent(unsigned int class)
@@ -1641,6 +1652,26 @@ static inline bool ata_fpdma_dsm_supported(struct ata_device *dev)
                 ATA_LOG_NCQ_SEND_RECV_DSM_TRIM);
 }
 
+static inline bool ata_fpdma_read_log_supported(struct ata_device *dev)
+{
+       return (dev->flags & ATA_DFLAG_NCQ_SEND_RECV) &&
+               (dev->ncq_send_recv_cmds[ATA_LOG_NCQ_SEND_RECV_RD_LOG_OFFSET] &
+                ATA_LOG_NCQ_SEND_RECV_RD_LOG_SUPPORTED);
+}
+
+static inline bool ata_fpdma_zac_mgmt_in_supported(struct ata_device *dev)
+{
+       return (dev->flags & ATA_DFLAG_NCQ_SEND_RECV) &&
+               (dev->ncq_send_recv_cmds[ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OFFSET] &
+               ATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_IN_SUPPORTED);
+}
+
+static inline bool ata_fpdma_zac_mgmt_out_supported(struct ata_device *dev)
+{
+       return (dev->ncq_non_data_cmds[ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OFFSET] &
+               ATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OUT);
+}
+
 static inline void ata_qc_set_polling(struct ata_queued_cmd *qc)
 {
        qc->tf.ctl |= ATA_NIEN;