LCOV - code coverage report
Current view: top level - drivers/ata - libata.h (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 2 0.0 %
Date: 2022-04-01 14:17:54 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: GPL-2.0-or-later */
       2                 :            : /*
       3                 :            :  *  libata.h - helper library for ATA
       4                 :            :  *
       5                 :            :  *  Copyright 2003-2004 Red Hat, Inc.  All rights reserved.
       6                 :            :  *  Copyright 2003-2004 Jeff Garzik
       7                 :            :  *
       8                 :            :  *  libata documentation is available via 'make {ps|pdf}docs',
       9                 :            :  *  as Documentation/driver-api/libata.rst
      10                 :            :  */
      11                 :            : 
      12                 :            : #ifndef __LIBATA_H__
      13                 :            : #define __LIBATA_H__
      14                 :            : 
      15                 :            : #define DRV_NAME        "libata"
      16                 :            : #define DRV_VERSION     "3.00"        /* must be exactly four chars */
      17                 :            : 
      18                 :            : /* libata-core.c */
      19                 :            : enum {
      20                 :            :         /* flags for ata_dev_read_id() */
      21                 :            :         ATA_READID_POSTRESET    = (1 << 0), /* reading ID after reset */
      22                 :            : 
      23                 :            :         /* selector for ata_down_xfermask_limit() */
      24                 :            :         ATA_DNXFER_PIO          = 0,    /* speed down PIO */
      25                 :            :         ATA_DNXFER_DMA          = 1,    /* speed down DMA */
      26                 :            :         ATA_DNXFER_40C          = 2,    /* apply 40c cable limit */
      27                 :            :         ATA_DNXFER_FORCE_PIO    = 3,    /* force PIO */
      28                 :            :         ATA_DNXFER_FORCE_PIO0   = 4,    /* force PIO0 */
      29                 :            : 
      30                 :            :         ATA_DNXFER_QUIET        = (1 << 31),
      31                 :            : };
      32                 :            : 
      33                 :            : extern atomic_t ata_print_id;
      34                 :            : extern int atapi_passthru16;
      35                 :            : extern int libata_fua;
      36                 :            : extern int libata_noacpi;
      37                 :            : extern int libata_allow_tpm;
      38                 :            : extern const struct device_type ata_port_type;
      39                 :            : extern struct ata_link *ata_dev_phys_link(struct ata_device *dev);
      40                 :            : extern void ata_force_cbl(struct ata_port *ap);
      41                 :            : extern u64 ata_tf_to_lba(const struct ata_taskfile *tf);
      42                 :            : extern u64 ata_tf_to_lba48(const struct ata_taskfile *tf);
      43                 :            : extern struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev, int tag);
      44                 :            : extern int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
      45                 :            :                            u64 block, u32 n_block, unsigned int tf_flags,
      46                 :            :                            unsigned int tag, int class);
      47                 :            : extern u64 ata_tf_read_block(const struct ata_taskfile *tf,
      48                 :            :                              struct ata_device *dev);
      49                 :            : extern unsigned ata_exec_internal(struct ata_device *dev,
      50                 :            :                                   struct ata_taskfile *tf, const u8 *cdb,
      51                 :            :                                   int dma_dir, void *buf, unsigned int buflen,
      52                 :            :                                   unsigned long timeout);
      53                 :            : extern unsigned ata_exec_internal_sg(struct ata_device *dev,
      54                 :            :                                      struct ata_taskfile *tf, const u8 *cdb,
      55                 :            :                                      int dma_dir, struct scatterlist *sg,
      56                 :            :                                      unsigned int n_elem, unsigned long timeout);
      57                 :            : extern int ata_wait_ready(struct ata_link *link, unsigned long deadline,
      58                 :            :                           int (*check_ready)(struct ata_link *link));
      59                 :            : extern int ata_dev_read_id(struct ata_device *dev, unsigned int *p_class,
      60                 :            :                            unsigned int flags, u16 *id);
      61                 :            : extern int ata_dev_reread_id(struct ata_device *dev, unsigned int readid_flags);
      62                 :            : extern int ata_dev_revalidate(struct ata_device *dev, unsigned int new_class,
      63                 :            :                               unsigned int readid_flags);
      64                 :            : extern int ata_dev_configure(struct ata_device *dev);
      65                 :            : extern int sata_down_spd_limit(struct ata_link *link, u32 spd_limit);
      66                 :            : extern int ata_down_xfermask_limit(struct ata_device *dev, unsigned int sel);
      67                 :            : extern unsigned int ata_dev_set_feature(struct ata_device *dev,
      68                 :            :                                         u8 enable, u8 feature);
      69                 :            : extern void ata_qc_free(struct ata_queued_cmd *qc);
      70                 :            : extern void ata_qc_issue(struct ata_queued_cmd *qc);
      71                 :            : extern void __ata_qc_complete(struct ata_queued_cmd *qc);
      72                 :            : extern int atapi_check_dma(struct ata_queued_cmd *qc);
      73                 :            : extern void swap_buf_le16(u16 *buf, unsigned int buf_words);
      74                 :            : extern bool ata_phys_link_online(struct ata_link *link);
      75                 :            : extern bool ata_phys_link_offline(struct ata_link *link);
      76                 :            : extern void ata_dev_init(struct ata_device *dev);
      77                 :            : extern void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp);
      78                 :            : extern int sata_link_init_spd(struct ata_link *link);
      79                 :            : extern int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg);
      80                 :            : extern int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg);
      81                 :            : extern struct ata_port *ata_port_alloc(struct ata_host *host);
      82                 :            : extern const char *sata_spd_string(unsigned int spd);
      83                 :            : extern int ata_port_probe(struct ata_port *ap);
      84                 :            : extern void __ata_port_probe(struct ata_port *ap);
      85                 :            : extern unsigned int ata_read_log_page(struct ata_device *dev, u8 log,
      86                 :            :                                       u8 page, void *buf, unsigned int sectors);
      87                 :            : 
      88                 :            : #define to_ata_port(d) container_of(d, struct ata_port, tdev)
      89                 :            : 
      90                 :            : /* libata-acpi.c */
      91                 :            : #ifdef CONFIG_ATA_ACPI
      92                 :            : extern unsigned int ata_acpi_gtf_filter;
      93                 :            : extern void ata_acpi_dissociate(struct ata_host *host);
      94                 :            : extern int ata_acpi_on_suspend(struct ata_port *ap);
      95                 :            : extern void ata_acpi_on_resume(struct ata_port *ap);
      96                 :            : extern int ata_acpi_on_devcfg(struct ata_device *dev);
      97                 :            : extern void ata_acpi_on_disable(struct ata_device *dev);
      98                 :            : extern void ata_acpi_set_state(struct ata_port *ap, pm_message_t state);
      99                 :            : extern void ata_acpi_bind_port(struct ata_port *ap);
     100                 :            : extern void ata_acpi_bind_dev(struct ata_device *dev);
     101                 :            : extern acpi_handle ata_dev_acpi_handle(struct ata_device *dev);
     102                 :            : #else
     103                 :            : static inline void ata_acpi_dissociate(struct ata_host *host) { }
     104                 :            : static inline int ata_acpi_on_suspend(struct ata_port *ap) { return 0; }
     105                 :            : static inline void ata_acpi_on_resume(struct ata_port *ap) { }
     106                 :            : static inline int ata_acpi_on_devcfg(struct ata_device *dev) { return 0; }
     107                 :            : static inline void ata_acpi_on_disable(struct ata_device *dev) { }
     108                 :            : static inline void ata_acpi_set_state(struct ata_port *ap,
     109                 :            :                                       pm_message_t state) { }
     110                 :            : static inline void ata_acpi_bind_port(struct ata_port *ap) {}
     111                 :            : static inline void ata_acpi_bind_dev(struct ata_device *dev) {}
     112                 :            : #endif
     113                 :            : 
     114                 :            : /* libata-scsi.c */
     115                 :            : extern int ata_scsi_add_hosts(struct ata_host *host,
     116                 :            :                               struct scsi_host_template *sht);
     117                 :            : extern void ata_scsi_scan_host(struct ata_port *ap, int sync);
     118                 :            : extern int ata_scsi_offline_dev(struct ata_device *dev);
     119                 :            : extern void ata_scsi_set_sense(struct ata_device *dev,
     120                 :            :                                struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq);
     121                 :            : extern void ata_scsi_set_sense_information(struct ata_device *dev,
     122                 :            :                                            struct scsi_cmnd *cmd,
     123                 :            :                                            const struct ata_taskfile *tf);
     124                 :            : extern void ata_scsi_media_change_notify(struct ata_device *dev);
     125                 :            : extern void ata_scsi_hotplug(struct work_struct *work);
     126                 :            : extern void ata_schedule_scsi_eh(struct Scsi_Host *shost);
     127                 :            : extern void ata_scsi_dev_rescan(struct work_struct *work);
     128                 :            : extern int ata_bus_probe(struct ata_port *ap);
     129                 :            : extern int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel,
     130                 :            :                               unsigned int id, u64 lun);
     131                 :            : int ata_sas_allocate_tag(struct ata_port *ap);
     132                 :            : void ata_sas_free_tag(unsigned int tag, struct ata_port *ap);
     133                 :            : 
     134                 :            : 
     135                 :            : /* libata-eh.c */
     136                 :            : extern unsigned long ata_internal_cmd_timeout(struct ata_device *dev, u8 cmd);
     137                 :            : extern void ata_internal_cmd_timed_out(struct ata_device *dev, u8 cmd);
     138                 :            : extern void ata_eh_acquire(struct ata_port *ap);
     139                 :            : extern void ata_eh_release(struct ata_port *ap);
     140                 :            : extern void ata_scsi_error(struct Scsi_Host *host);
     141                 :            : extern void ata_eh_fastdrain_timerfn(struct timer_list *t);
     142                 :            : extern void ata_qc_schedule_eh(struct ata_queued_cmd *qc);
     143                 :            : extern void ata_dev_disable(struct ata_device *dev);
     144                 :            : extern void ata_eh_detach_dev(struct ata_device *dev);
     145                 :            : extern void ata_eh_about_to_do(struct ata_link *link, struct ata_device *dev,
     146                 :            :                                unsigned int action);
     147                 :            : extern void ata_eh_done(struct ata_link *link, struct ata_device *dev,
     148                 :            :                         unsigned int action);
     149                 :            : extern void ata_eh_autopsy(struct ata_port *ap);
     150                 :            : const char *ata_get_cmd_descript(u8 command);
     151                 :            : extern void ata_eh_report(struct ata_port *ap);
     152                 :            : extern int ata_eh_reset(struct ata_link *link, int classify,
     153                 :            :                         ata_prereset_fn_t prereset, ata_reset_fn_t softreset,
     154                 :            :                         ata_reset_fn_t hardreset, ata_postreset_fn_t postreset);
     155                 :            : extern int ata_set_mode(struct ata_link *link, struct ata_device **r_failed_dev);
     156                 :            : extern int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
     157                 :            :                           ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
     158                 :            :                           ata_postreset_fn_t postreset,
     159                 :            :                           struct ata_link **r_failed_disk);
     160                 :            : extern void ata_eh_finish(struct ata_port *ap);
     161                 :            : extern int ata_ering_map(struct ata_ering *ering,
     162                 :            :                          int (*map_fn)(struct ata_ering_entry *, void *),
     163                 :            :                          void *arg);
     164                 :            : extern unsigned int atapi_eh_tur(struct ata_device *dev, u8 *r_sense_key);
     165                 :            : extern unsigned int atapi_eh_request_sense(struct ata_device *dev,
     166                 :            :                                            u8 *sense_buf, u8 dfl_sense_key);
     167                 :            : 
     168                 :            : /* libata-pmp.c */
     169                 :            : #ifdef CONFIG_SATA_PMP
     170                 :            : extern int sata_pmp_scr_read(struct ata_link *link, int reg, u32 *val);
     171                 :            : extern int sata_pmp_scr_write(struct ata_link *link, int reg, u32 val);
     172                 :            : extern int sata_pmp_set_lpm(struct ata_link *link, enum ata_lpm_policy policy,
     173                 :            :                             unsigned hints);
     174                 :            : extern int sata_pmp_attach(struct ata_device *dev);
     175                 :            : #else /* CONFIG_SATA_PMP */
     176                 :            : static inline int sata_pmp_scr_read(struct ata_link *link, int reg, u32 *val)
     177                 :            : {
     178                 :            :         return -EINVAL;
     179                 :            : }
     180                 :            : 
     181                 :            : static inline int sata_pmp_scr_write(struct ata_link *link, int reg, u32 val)
     182                 :            : {
     183                 :            :         return -EINVAL;
     184                 :            : }
     185                 :            : 
     186                 :            : static inline int sata_pmp_set_lpm(struct ata_link *link,
     187                 :            :                                    enum ata_lpm_policy policy, unsigned hints)
     188                 :            : {
     189                 :            :         return -EINVAL;
     190                 :            : }
     191                 :            : 
     192                 :            : static inline int sata_pmp_attach(struct ata_device *dev)
     193                 :            : {
     194                 :            :         return -EINVAL;
     195                 :            : }
     196                 :            : #endif /* CONFIG_SATA_PMP */
     197                 :            : 
     198                 :            : /* libata-sff.c */
     199                 :            : #ifdef CONFIG_ATA_SFF
     200                 :            : extern void ata_sff_flush_pio_task(struct ata_port *ap);
     201                 :            : extern void ata_sff_port_init(struct ata_port *ap);
     202                 :            : extern int ata_sff_init(void);
     203                 :            : extern void ata_sff_exit(void);
     204                 :            : #else /* CONFIG_ATA_SFF */
     205                 :            : static inline void ata_sff_flush_pio_task(struct ata_port *ap)
     206                 :            : { }
     207                 :            : static inline void ata_sff_port_init(struct ata_port *ap)
     208                 :            : { }
     209                 :            : static inline int ata_sff_init(void)
     210                 :            : { return 0; }
     211                 :            : static inline void ata_sff_exit(void)
     212                 :            : { }
     213                 :            : #endif /* CONFIG_ATA_SFF */
     214                 :            : 
     215                 :            : /* libata-zpodd.c */
     216                 :            : #ifdef CONFIG_SATA_ZPODD
     217                 :            : void zpodd_init(struct ata_device *dev);
     218                 :            : void zpodd_exit(struct ata_device *dev);
     219                 :            : static inline bool zpodd_dev_enabled(struct ata_device *dev)
     220                 :            : {
     221                 :            :         return dev->zpodd != NULL;
     222                 :            : }
     223                 :            : void zpodd_on_suspend(struct ata_device *dev);
     224                 :            : bool zpodd_zpready(struct ata_device *dev);
     225                 :            : void zpodd_enable_run_wake(struct ata_device *dev);
     226                 :            : void zpodd_disable_run_wake(struct ata_device *dev);
     227                 :            : void zpodd_post_poweron(struct ata_device *dev);
     228                 :            : #else /* CONFIG_SATA_ZPODD */
     229                 :          0 : static inline void zpodd_init(struct ata_device *dev) {}
     230                 :            : static inline void zpodd_exit(struct ata_device *dev) {}
     231                 :          0 : static inline bool zpodd_dev_enabled(struct ata_device *dev) { return false; }
     232                 :            : static inline void zpodd_on_suspend(struct ata_device *dev) {}
     233                 :            : static inline bool zpodd_zpready(struct ata_device *dev) { return false; }
     234                 :            : static inline void zpodd_enable_run_wake(struct ata_device *dev) {}
     235                 :            : static inline void zpodd_disable_run_wake(struct ata_device *dev) {}
     236                 :            : static inline void zpodd_post_poweron(struct ata_device *dev) {}
     237                 :            : #endif /* CONFIG_SATA_ZPODD */
     238                 :            : 
     239                 :            : #endif /* __LIBATA_H__ */

Generated by: LCOV version 1.14