cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

scsi_priv.h (6622B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _SCSI_PRIV_H
      3#define _SCSI_PRIV_H
      4
      5#include <linux/device.h>
      6#include <scsi/scsi_device.h>
      7#include <linux/sbitmap.h>
      8
      9struct bsg_device;
     10struct request_queue;
     11struct request;
     12struct scsi_cmnd;
     13struct scsi_device;
     14struct scsi_target;
     15struct scsi_host_template;
     16struct Scsi_Host;
     17struct scsi_nl_hdr;
     18
     19#define SCSI_CMD_RETRIES_NO_LIMIT -1
     20
     21/*
     22 * Scsi Error Handler Flags
     23 */
     24#define SCSI_EH_ABORT_SCHEDULED	0x0002	/* Abort has been scheduled */
     25
     26#define SCSI_SENSE_VALID(scmd) \
     27	(((scmd)->sense_buffer[0] & 0x70) == 0x70)
     28
     29/* hosts.c */
     30extern int scsi_init_hosts(void);
     31extern void scsi_exit_hosts(void);
     32
     33/* scsi.c */
     34int scsi_init_sense_cache(struct Scsi_Host *shost);
     35void scsi_init_command(struct scsi_device *dev, struct scsi_cmnd *cmd);
     36#ifdef CONFIG_SCSI_LOGGING
     37void scsi_log_send(struct scsi_cmnd *cmd);
     38void scsi_log_completion(struct scsi_cmnd *cmd, int disposition);
     39#else
     40static inline void scsi_log_send(struct scsi_cmnd *cmd) 
     41	{ };
     42static inline void scsi_log_completion(struct scsi_cmnd *cmd, int disposition)
     43	{ };
     44#endif
     45
     46/* scsi_devinfo.c */
     47
     48/* list of keys for the lists */
     49enum scsi_devinfo_key {
     50	SCSI_DEVINFO_GLOBAL = 0,
     51	SCSI_DEVINFO_SPI,
     52};
     53
     54extern blist_flags_t scsi_get_device_flags(struct scsi_device *sdev,
     55					   const unsigned char *vendor,
     56					   const unsigned char *model);
     57extern blist_flags_t scsi_get_device_flags_keyed(struct scsi_device *sdev,
     58						 const unsigned char *vendor,
     59						 const unsigned char *model,
     60						 enum scsi_devinfo_key key);
     61extern int scsi_dev_info_list_add_keyed(int compatible, char *vendor,
     62					char *model, char *strflags,
     63					blist_flags_t flags,
     64					enum scsi_devinfo_key key);
     65extern int scsi_dev_info_list_del_keyed(char *vendor, char *model,
     66					enum scsi_devinfo_key key);
     67extern int scsi_dev_info_add_list(enum scsi_devinfo_key key, const char *name);
     68extern int scsi_dev_info_remove_list(enum scsi_devinfo_key key);
     69
     70extern int __init scsi_init_devinfo(void);
     71extern void scsi_exit_devinfo(void);
     72
     73/* scsi_error.c */
     74extern void scmd_eh_abort_handler(struct work_struct *work);
     75extern enum blk_eh_timer_return scsi_times_out(struct request *req);
     76extern int scsi_error_handler(void *host);
     77extern enum scsi_disposition scsi_decide_disposition(struct scsi_cmnd *cmd);
     78extern void scsi_eh_wakeup(struct Scsi_Host *shost);
     79extern void scsi_eh_scmd_add(struct scsi_cmnd *);
     80void scsi_eh_ready_devs(struct Scsi_Host *shost,
     81			struct list_head *work_q,
     82			struct list_head *done_q);
     83int scsi_eh_get_sense(struct list_head *work_q,
     84		      struct list_head *done_q);
     85int scsi_noretry_cmd(struct scsi_cmnd *scmd);
     86void scsi_eh_done(struct scsi_cmnd *scmd);
     87
     88/* scsi_lib.c */
     89extern int scsi_maybe_unblock_host(struct scsi_device *sdev);
     90extern void scsi_device_unbusy(struct scsi_device *sdev, struct scsi_cmnd *cmd);
     91extern void scsi_queue_insert(struct scsi_cmnd *cmd, int reason);
     92extern void scsi_io_completion(struct scsi_cmnd *, unsigned int);
     93extern void scsi_run_host_queues(struct Scsi_Host *shost);
     94extern void scsi_requeue_run_queue(struct work_struct *work);
     95extern void scsi_start_queue(struct scsi_device *sdev);
     96extern int scsi_mq_setup_tags(struct Scsi_Host *shost);
     97extern void scsi_mq_destroy_tags(struct Scsi_Host *shost);
     98extern void scsi_exit_queue(void);
     99extern void scsi_evt_thread(struct work_struct *work);
    100
    101/* scsi_proc.c */
    102#ifdef CONFIG_SCSI_PROC_FS
    103extern void scsi_proc_hostdir_add(struct scsi_host_template *);
    104extern void scsi_proc_hostdir_rm(struct scsi_host_template *);
    105extern void scsi_proc_host_add(struct Scsi_Host *);
    106extern void scsi_proc_host_rm(struct Scsi_Host *);
    107extern int scsi_init_procfs(void);
    108extern void scsi_exit_procfs(void);
    109#else
    110# define scsi_proc_hostdir_add(sht)	do { } while (0)
    111# define scsi_proc_hostdir_rm(sht)	do { } while (0)
    112# define scsi_proc_host_add(shost)	do { } while (0)
    113# define scsi_proc_host_rm(shost)	do { } while (0)
    114# define scsi_init_procfs()		(0)
    115# define scsi_exit_procfs()		do { } while (0)
    116#endif /* CONFIG_PROC_FS */
    117
    118/* scsi_scan.c */
    119void scsi_enable_async_suspend(struct device *dev);
    120extern int scsi_complete_async_scans(void);
    121extern int scsi_scan_host_selected(struct Scsi_Host *, unsigned int,
    122				   unsigned int, u64, enum scsi_scan_mode);
    123extern void scsi_forget_host(struct Scsi_Host *);
    124extern void scsi_rescan_device(struct device *);
    125
    126/* scsi_sysctl.c */
    127#ifdef CONFIG_SYSCTL
    128extern int scsi_init_sysctl(void);
    129extern void scsi_exit_sysctl(void);
    130#else
    131# define scsi_init_sysctl()		(0)
    132# define scsi_exit_sysctl()		do { } while (0)
    133#endif /* CONFIG_SYSCTL */
    134
    135/* scsi_sysfs.c */
    136extern int scsi_sysfs_add_sdev(struct scsi_device *);
    137extern int scsi_sysfs_add_host(struct Scsi_Host *);
    138extern int scsi_sysfs_register(void);
    139extern void scsi_sysfs_unregister(void);
    140extern void scsi_sysfs_device_initialize(struct scsi_device *);
    141extern int scsi_sysfs_target_initialize(struct scsi_device *);
    142extern struct scsi_transport_template blank_transport_template;
    143extern void __scsi_remove_device(struct scsi_device *);
    144
    145extern struct bus_type scsi_bus_type;
    146extern const struct attribute_group *scsi_shost_groups[];
    147
    148/* scsi_netlink.c */
    149#ifdef CONFIG_SCSI_NETLINK
    150extern void scsi_netlink_init(void);
    151extern void scsi_netlink_exit(void);
    152extern struct sock *scsi_nl_sock;
    153#else
    154static inline void scsi_netlink_init(void) {}
    155static inline void scsi_netlink_exit(void) {}
    156#endif
    157
    158/* scsi_pm.c */
    159#ifdef CONFIG_PM
    160extern const struct dev_pm_ops scsi_bus_pm_ops;
    161
    162extern void scsi_autopm_get_target(struct scsi_target *);
    163extern void scsi_autopm_put_target(struct scsi_target *);
    164extern int scsi_autopm_get_host(struct Scsi_Host *);
    165extern void scsi_autopm_put_host(struct Scsi_Host *);
    166#else
    167static inline void scsi_autopm_get_target(struct scsi_target *t) {}
    168static inline void scsi_autopm_put_target(struct scsi_target *t) {}
    169static inline int scsi_autopm_get_host(struct Scsi_Host *h) { return 0; }
    170static inline void scsi_autopm_put_host(struct Scsi_Host *h) {}
    171#endif /* CONFIG_PM */
    172
    173/* scsi_dh.c */
    174#ifdef CONFIG_SCSI_DH
    175void scsi_dh_add_device(struct scsi_device *sdev);
    176void scsi_dh_release_device(struct scsi_device *sdev);
    177#else
    178static inline void scsi_dh_add_device(struct scsi_device *sdev) { }
    179static inline void scsi_dh_release_device(struct scsi_device *sdev) { }
    180#endif
    181
    182struct bsg_device *scsi_bsg_register_queue(struct scsi_device *sdev);
    183
    184extern int scsi_device_max_queue_depth(struct scsi_device *sdev);
    185
    186/* 
    187 * internal scsi timeout functions: for use by mid-layer and transport
    188 * classes.
    189 */
    190
    191#define SCSI_DEVICE_BLOCK_MAX_TIMEOUT	600	/* units in seconds */
    192
    193#endif /* _SCSI_PRIV_H */