Bug
        
                          [В начало]
Ошибка # 124
Показать/спрятать трассу ошибок|            Error trace     
         {    20     typedef unsigned char __u8;    23     typedef unsigned short __u16;    25     typedef int __s32;    26     typedef unsigned int __u32;    30     typedef unsigned long long __u64;    15     typedef signed char s8;    16     typedef unsigned char u8;    19     typedef unsigned short u16;    21     typedef int s32;    22     typedef unsigned int u32;    24     typedef long long s64;    25     typedef unsigned long long u64;    14     typedef long __kernel_long_t;    15     typedef unsigned long __kernel_ulong_t;    27     typedef int __kernel_pid_t;    48     typedef unsigned int __kernel_uid32_t;    49     typedef unsigned int __kernel_gid32_t;    71     typedef __kernel_ulong_t __kernel_size_t;    72     typedef __kernel_long_t __kernel_ssize_t;    87     typedef long long __kernel_loff_t;    88     typedef __kernel_long_t __kernel_time_t;    89     typedef __kernel_long_t __kernel_clock_t;    90     typedef int __kernel_timer_t;    91     typedef int __kernel_clockid_t;    12     typedef __u32 __kernel_dev_t;    15     typedef __kernel_dev_t dev_t;    18     typedef unsigned short umode_t;    21     typedef __kernel_pid_t pid_t;    26     typedef __kernel_clockid_t clockid_t;    29     typedef _Bool bool;    31     typedef __kernel_uid32_t uid_t;    32     typedef __kernel_gid32_t gid_t;    45     typedef __kernel_loff_t loff_t;    54     typedef __kernel_size_t size_t;    59     typedef __kernel_ssize_t ssize_t;    69     typedef __kernel_time_t time_t;   102     typedef __s32 int32_t;   108     typedef __u32 uint32_t;   133     typedef unsigned long sector_t;   134     typedef unsigned long blkcnt_t;   152     typedef u64 dma_addr_t;   157     typedef unsigned int gfp_t;   158     typedef unsigned int fmode_t;   159     typedef unsigned int oom_flags_t;   162     typedef u64 phys_addr_t;   167     typedef phys_addr_t resource_size_t;   177     struct __anonstruct_atomic_t_6 {   int counter; } ;   177     typedef struct __anonstruct_atomic_t_6 atomic_t;   182     struct __anonstruct_atomic64_t_7 {   long counter; } ;   182     typedef struct __anonstruct_atomic64_t_7 atomic64_t;   183     struct list_head {   struct list_head *next;   struct list_head *prev; } ;   188     struct hlist_node ;   188     struct hlist_head {   struct hlist_node *first; } ;   192     struct hlist_node {   struct hlist_node *next;   struct hlist_node **pprev; } ;   203     struct callback_head {   struct callback_head *next;   void (*func)(struct callback_head *); } ;   234     enum dma_data_direction {   DMA_BIDIRECTIONAL = 0,   DMA_TO_DEVICE = 1,   DMA_FROM_DEVICE = 2,   DMA_NONE = 3 } ;     5     struct device ;     5     struct page ;     7     struct dma_attrs ;    13     typedef unsigned long kernel_ulong_t;    14     struct pci_device_id {   __u32 vendor;   __u32 device;   __u32 subvendor;   __u32 subdevice;   __u32 class;   __u32 class_mask;   kernel_ulong_t driver_data; } ;   186     struct acpi_device_id {   __u8 id[9U];   kernel_ulong_t driver_data;   __u32 cls;   __u32 cls_msk; } ;   229     struct of_device_id {   char name[32U];   char type[32U];   char compatible[128U];   const void *data; } ;   131     typedef void (*ctor_fn_t)();   148     struct resource {   resource_size_t start;   resource_size_t end;   const char *name;   unsigned long flags;   struct resource *parent;   struct resource *sibling;   struct resource *child; } ;   250     struct kernel_symbol {   unsigned long value;   const char *name; } ;    33     struct module ;    72     struct pt_regs {   unsigned long r15;   unsigned long r14;   unsigned long r13;   unsigned long r12;   unsigned long bp;   unsigned long bx;   unsigned long r11;   unsigned long r10;   unsigned long r9;   unsigned long r8;   unsigned long ax;   unsigned long cx;   unsigned long dx;   unsigned long si;   unsigned long di;   unsigned long orig_ax;   unsigned long ip;   unsigned long cs;   unsigned long flags;   unsigned long sp;   unsigned long ss; } ;    66     struct __anonstruct____missing_field_name_12 {   unsigned int a;   unsigned int b; } ;    66     struct __anonstruct____missing_field_name_13 {   u16 limit0;   u16 base0;   unsigned char base1;   unsigned char type;   unsigned char s;   unsigned char dpl;   unsigned char p;   unsigned char limit;   unsigned char avl;   unsigned char l;   unsigned char d;   unsigned char g;   unsigned char base2; } ;    66     union __anonunion____missing_field_name_11 {   struct __anonstruct____missing_field_name_12 __annonCompField4;   struct __anonstruct____missing_field_name_13 __annonCompField5; } ;    66     struct desc_struct {   union __anonunion____missing_field_name_11 __annonCompField6; } ;    12     typedef unsigned long pteval_t;    13     typedef unsigned long pmdval_t;    15     typedef unsigned long pgdval_t;    16     typedef unsigned long pgprotval_t;    18     struct __anonstruct_pte_t_14 {   pteval_t pte; } ;    18     typedef struct __anonstruct_pte_t_14 pte_t;    20     struct pgprot {   pgprotval_t pgprot; } ;   221     typedef struct pgprot pgprot_t;   223     struct __anonstruct_pgd_t_15 {   pgdval_t pgd; } ;   223     typedef struct __anonstruct_pgd_t_15 pgd_t;   262     struct __anonstruct_pmd_t_17 {   pmdval_t pmd; } ;   262     typedef struct __anonstruct_pmd_t_17 pmd_t;   390     typedef struct page *pgtable_t;   401     struct file ;   414     struct seq_file ;   452     struct thread_struct ;   454     struct mm_struct ;   455     struct task_struct ;   456     struct cpumask ;    20     struct qspinlock {   atomic_t val; } ;    33     typedef struct qspinlock arch_spinlock_t;    34     struct qrwlock {   atomic_t cnts;   arch_spinlock_t wait_lock; } ;    14     typedef struct qrwlock arch_rwlock_t;   683     struct cpuinfo_x86 ;   234     struct _ddebug {   const char *modname;   const char *function;   const char *filename;   const char *format;   unsigned int lineno;   unsigned char flags; } ;   420     struct file_operations ;   432     struct completion ;    27     union __anonunion___u_19 {   struct list_head *__val;   char __c[1U]; } ;    17     struct lockdep_map ;    26     union __anonunion___u_35 {   int __val;   char __c[1U]; } ;    38     union __anonunion___u_37 {   int __val;   char __c[1U]; } ;    23     typedef atomic64_t atomic_long_t;   186     struct bug_entry {   int bug_addr_disp;   int file_disp;   unsigned short line;   unsigned short flags; } ;    55     struct stack_trace {   unsigned int nr_entries;   unsigned int max_entries;   unsigned long *entries;   int skip; } ;    28     struct lockdep_subclass_key {   char __one_byte; } ;    53     struct lock_class_key {   struct lockdep_subclass_key subkeys[8U]; } ;    59     struct lock_class {   struct list_head hash_entry;   struct list_head lock_entry;   struct lockdep_subclass_key *key;   unsigned int subclass;   unsigned int dep_gen_id;   unsigned long usage_mask;   struct stack_trace usage_traces[13U];   struct list_head locks_after;   struct list_head locks_before;   unsigned int version;   unsigned long ops;   const char *name;   int name_version;   unsigned long contention_point[4U];   unsigned long contending_point[4U]; } ;   144     struct lockdep_map {   struct lock_class_key *key;   struct lock_class *class_cache[2U];   const char *name;   int cpu;   unsigned long ip; } ;   205     struct held_lock {   u64 prev_chain_key;   unsigned long acquire_ip;   struct lockdep_map *instance;   struct lockdep_map *nest_lock;   u64 waittime_stamp;   u64 holdtime_stamp;   unsigned short class_idx;   unsigned char irq_context;   unsigned char trylock;   unsigned char read;   unsigned char check;   unsigned char hardirqs_off;   unsigned short references;   unsigned int pin_count; } ;   546     struct raw_spinlock {   arch_spinlock_t raw_lock;   unsigned int magic;   unsigned int owner_cpu;   void *owner;   struct lockdep_map dep_map; } ;    32     typedef struct raw_spinlock raw_spinlock_t;    33     struct __anonstruct____missing_field_name_47 {   u8 __padding[24U];   struct lockdep_map dep_map; } ;    33     union __anonunion____missing_field_name_46 {   struct raw_spinlock rlock;   struct __anonstruct____missing_field_name_47 __annonCompField7; } ;    33     struct spinlock {   union __anonunion____missing_field_name_46 __annonCompField8; } ;    76     typedef struct spinlock spinlock_t;    23     struct __anonstruct_rwlock_t_48 {   arch_rwlock_t raw_lock;   unsigned int magic;   unsigned int owner_cpu;   void *owner;   struct lockdep_map dep_map; } ;    23     typedef struct __anonstruct_rwlock_t_48 rwlock_t;    24     struct math_emu_info {   long ___orig_eip;   struct pt_regs *regs; } ;    14     struct __anonstruct_pfn_t_52 {   unsigned long val; } ;    14     typedef struct __anonstruct_pfn_t_52 pfn_t;   328     struct cpumask {   unsigned long bits[128U]; } ;    15     typedef struct cpumask cpumask_t;   656     typedef struct cpumask *cpumask_var_t;    82     struct static_key {   atomic_t enabled; } ;   264     struct tracepoint_func {   void *func;   void *data;   int prio; } ;    18     struct tracepoint {   const char *name;   struct static_key key;   void (*regfunc)();   void (*unregfunc)();   struct tracepoint_func *funcs; } ;   260     struct fregs_state {   u32 cwd;   u32 swd;   u32 twd;   u32 fip;   u32 fcs;   u32 foo;   u32 fos;   u32 st_space[20U];   u32 status; } ;    26     struct __anonstruct____missing_field_name_61 {   u64 rip;   u64 rdp; } ;    26     struct __anonstruct____missing_field_name_62 {   u32 fip;   u32 fcs;   u32 foo;   u32 fos; } ;    26     union __anonunion____missing_field_name_60 {   struct __anonstruct____missing_field_name_61 __annonCompField14;   struct __anonstruct____missing_field_name_62 __annonCompField15; } ;    26     union __anonunion____missing_field_name_63 {   u32 padding1[12U];   u32 sw_reserved[12U]; } ;    26     struct fxregs_state {   u16 cwd;   u16 swd;   u16 twd;   u16 fop;   union __anonunion____missing_field_name_60 __annonCompField16;   u32 mxcsr;   u32 mxcsr_mask;   u32 st_space[32U];   u32 xmm_space[64U];   u32 padding[12U];   union __anonunion____missing_field_name_63 __annonCompField17; } ;    66     struct swregs_state {   u32 cwd;   u32 swd;   u32 twd;   u32 fip;   u32 fcs;   u32 foo;   u32 fos;   u32 st_space[20U];   u8 ftop;   u8 changed;   u8 lookahead;   u8 no_update;   u8 rm;   u8 alimit;   struct math_emu_info *info;   u32 entry_eip; } ;   214     struct xstate_header {   u64 xfeatures;   u64 xcomp_bv;   u64 reserved[6U]; } ;   220     struct xregs_state {   struct fxregs_state i387;   struct xstate_header header;   u8 extended_state_area[0U]; } ;   235     union fpregs_state {   struct fregs_state fsave;   struct fxregs_state fxsave;   struct swregs_state soft;   struct xregs_state xsave;   u8 __padding[4096U]; } ;   252     struct fpu {   unsigned int last_cpu;   unsigned char fpstate_active;   unsigned char fpregs_active;   unsigned char counter;   union fpregs_state state; } ;    81     struct cpuinfo_x86 {   __u8 x86;   __u8 x86_vendor;   __u8 x86_model;   __u8 x86_mask;   int x86_tlbsize;   __u8 x86_virt_bits;   __u8 x86_phys_bits;   __u8 x86_coreid_bits;   __u32 extended_cpuid_level;   int cpuid_level;   __u32 x86_capability[17U];   char x86_vendor_id[16U];   char x86_model_id[64U];   int x86_cache_size;   int x86_cache_alignment;   int x86_cache_max_rmid;   int x86_cache_occ_scale;   int x86_power;   unsigned long loops_per_jiffy;   u16 x86_max_cores;   u16 apicid;   u16 initial_apicid;   u16 x86_clflush_size;   u16 booted_cores;   u16 phys_proc_id;   u16 cpu_core_id;   u8 compute_unit_id;   u16 cpu_index;   u32 microcode; } ;   170     struct seq_operations ;   369     struct perf_event ;   370     struct thread_struct {   struct desc_struct tls_array[3U];   unsigned long sp0;   unsigned long sp;   unsigned short es;   unsigned short ds;   unsigned short fsindex;   unsigned short gsindex;   unsigned long fs;   unsigned long gs;   struct perf_event *ptrace_bps[4U];   unsigned long debugreg6;   unsigned long ptrace_dr7;   unsigned long cr2;   unsigned long trap_nr;   unsigned long error_code;   unsigned long *io_bitmap_ptr;   unsigned long iopl;   unsigned int io_bitmap_max;   struct fpu fpu; } ;    13     struct optimistic_spin_queue {   atomic_t tail; } ;    39     struct mutex {   atomic_t count;   spinlock_t wait_lock;   struct list_head wait_list;   struct task_struct *owner;   void *magic;   struct lockdep_map dep_map; } ;    67     struct mutex_waiter {   struct list_head list;   struct task_struct *task;   void *magic; } ;   177     struct timespec ;   178     struct compat_timespec ;   179     struct __anonstruct_futex_77 {   u32 *uaddr;   u32 val;   u32 flags;   u32 bitset;   u64 time;   u32 *uaddr2; } ;   179     struct __anonstruct_nanosleep_78 {   clockid_t clockid;   struct timespec *rmtp;   struct compat_timespec *compat_rmtp;   u64 expires; } ;   179     struct pollfd ;   179     struct __anonstruct_poll_79 {   struct pollfd *ufds;   int nfds;   int has_timeout;   unsigned long tv_sec;   unsigned long tv_nsec; } ;   179     union __anonunion____missing_field_name_76 {   struct __anonstruct_futex_77 futex;   struct __anonstruct_nanosleep_78 nanosleep;   struct __anonstruct_poll_79 poll; } ;   179     struct restart_block {   long int (*fn)(struct restart_block *);   union __anonunion____missing_field_name_76 __annonCompField20; } ;   416     struct seqcount {   unsigned int sequence;   struct lockdep_map dep_map; } ;    52     typedef struct seqcount seqcount_t;   404     struct __anonstruct_seqlock_t_92 {   struct seqcount seqcount;   spinlock_t lock; } ;   404     typedef struct __anonstruct_seqlock_t_92 seqlock_t;    12     struct __wait_queue ;    12     typedef struct __wait_queue wait_queue_t;    15     struct __wait_queue {   unsigned int flags;   void *private;   int (*func)(wait_queue_t *, unsigned int, int, void *);   struct list_head task_list; } ;    38     struct __wait_queue_head {   spinlock_t lock;   struct list_head task_list; } ;    43     typedef struct __wait_queue_head wait_queue_head_t;  1221     struct completion {   unsigned int done;   wait_queue_head_t wait; } ;   105     struct timespec {   __kernel_time_t tv_sec;   long tv_nsec; } ;   446     union ktime {   s64 tv64; } ;    41     typedef union ktime ktime_t;  1147     union __anonunion____missing_field_name_93 {   unsigned long bitmap[4U];   struct callback_head callback_head; } ;  1147     struct idr_layer {   int prefix;   int layer;   struct idr_layer *ary[256U];   int count;   union __anonunion____missing_field_name_93 __annonCompField21; } ;    41     struct idr {   struct idr_layer *hint;   struct idr_layer *top;   int layers;   int cur;   spinlock_t lock;   int id_free_cnt;   struct idr_layer *id_free; } ;   124     struct ida_bitmap {   long nr_busy;   unsigned long bitmap[15U]; } ;   167     struct ida {   struct idr idr;   struct ida_bitmap *free_bitmap; } ;   199     struct rb_node {   unsigned long __rb_parent_color;   struct rb_node *rb_right;   struct rb_node *rb_left; } ;    41     struct rb_root {   struct rb_node *rb_node; } ;    98     struct dentry ;    99     struct iattr ;   100     struct vm_area_struct ;   101     struct super_block ;   102     struct file_system_type ;   103     struct kernfs_open_node ;   104     struct kernfs_iattrs ;   127     struct kernfs_root ;   127     struct kernfs_elem_dir {   unsigned long subdirs;   struct rb_root children;   struct kernfs_root *root; } ;    85     struct kernfs_node ;    85     struct kernfs_elem_symlink {   struct kernfs_node *target_kn; } ;    89     struct kernfs_ops ;    89     struct kernfs_elem_attr {   const struct kernfs_ops *ops;   struct kernfs_open_node *open;   loff_t size;   struct kernfs_node *notify_next; } ;    96     union __anonunion____missing_field_name_100 {   struct kernfs_elem_dir dir;   struct kernfs_elem_symlink symlink;   struct kernfs_elem_attr attr; } ;    96     struct kernfs_node {   atomic_t count;   atomic_t active;   struct lockdep_map dep_map;   struct kernfs_node *parent;   const char *name;   struct rb_node rb;   const void *ns;   unsigned int hash;   union __anonunion____missing_field_name_100 __annonCompField22;   void *priv;   unsigned short flags;   umode_t mode;   unsigned int ino;   struct kernfs_iattrs *iattr; } ;   138     struct kernfs_syscall_ops {   int (*remount_fs)(struct kernfs_root *, int *, char *);   int (*show_options)(struct seq_file *, struct kernfs_root *);   int (*mkdir)(struct kernfs_node *, const char *, umode_t );   int (*rmdir)(struct kernfs_node *);   int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *); } ;   155     struct kernfs_root {   struct kernfs_node *kn;   unsigned int flags;   struct ida ino_ida;   struct kernfs_syscall_ops *syscall_ops;   struct list_head supers;   wait_queue_head_t deactivate_waitq; } ;   171     struct vm_operations_struct ;   171     struct kernfs_open_file {   struct kernfs_node *kn;   struct file *file;   void *priv;   struct mutex mutex;   int event;   struct list_head list;   char *prealloc_buf;   size_t atomic_write_len;   bool mmapped;   const struct vm_operations_struct *vm_ops; } ;   188     struct kernfs_ops {   int (*seq_show)(struct seq_file *, void *);   void * (*seq_start)(struct seq_file *, loff_t *);   void * (*seq_next)(struct seq_file *, void *, loff_t *);   void (*seq_stop)(struct seq_file *, void *);   ssize_t  (*read)(struct kernfs_open_file *, char *, size_t , loff_t );   size_t atomic_write_len;   bool prealloc;   ssize_t  (*write)(struct kernfs_open_file *, char *, size_t , loff_t );   int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *);   struct lock_class_key lockdep_key; } ;   284     struct inode ;   493     struct sock ;   494     struct kobject ;   495     enum kobj_ns_type {   KOBJ_NS_TYPE_NONE = 0,   KOBJ_NS_TYPE_NET = 1,   KOBJ_NS_TYPES = 2 } ;   501     struct kobj_ns_type_operations {   enum kobj_ns_type type;   bool  (*current_may_mount)();   void * (*grab_current_ns)();   const void * (*netlink_ns)(struct sock *);   const void * (*initial_ns)();   void (*drop_ns)(void *); } ;    83     struct user_namespace ;    22     struct __anonstruct_kuid_t_103 {   uid_t val; } ;    22     typedef struct __anonstruct_kuid_t_103 kuid_t;    27     struct __anonstruct_kgid_t_104 {   gid_t val; } ;    27     typedef struct __anonstruct_kgid_t_104 kgid_t;   139     struct kstat {   u64 ino;   dev_t dev;   umode_t mode;   unsigned int nlink;   kuid_t uid;   kgid_t gid;   dev_t rdev;   loff_t size;   struct timespec atime;   struct timespec mtime;   struct timespec ctime;   unsigned long blksize;   unsigned long long blocks; } ;    36     struct bin_attribute ;    37     struct attribute {   const char *name;   umode_t mode;   bool ignore_lockdep;   struct lock_class_key *key;   struct lock_class_key skey; } ;    37     struct attribute_group {   const char *name;   umode_t  (*is_visible)(struct kobject *, struct attribute *, int);   umode_t  (*is_bin_visible)(struct kobject *, struct bin_attribute *, int);   struct attribute **attrs;   struct bin_attribute **bin_attrs; } ;    92     struct bin_attribute {   struct attribute attr;   size_t size;   void *private;   ssize_t  (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t , size_t );   ssize_t  (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t , size_t );   int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *); } ;   165     struct sysfs_ops {   ssize_t  (*show)(struct kobject *, struct attribute *, char *);   ssize_t  (*store)(struct kobject *, struct attribute *, const char *, size_t ); } ;   530     struct kref {   atomic_t refcount; } ;   139     struct timer_list {   struct hlist_node entry;   unsigned long expires;   void (*function)(unsigned long);   unsigned long data;   u32 flags;   int slack;   int start_pid;   void *start_site;   char start_comm[16U];   struct lockdep_map lockdep_map; } ;   238     struct hrtimer ;   239     enum hrtimer_restart ;   838     struct nsproxy ;   259     struct workqueue_struct ;   260     struct work_struct ;    54     struct work_struct {   atomic_long_t data;   struct list_head entry;   void (*func)(struct work_struct *);   struct lockdep_map lockdep_map; } ;   107     struct delayed_work {   struct work_struct work;   struct timer_list timer;   struct workqueue_struct *wq;   int cpu; } ;    52     struct kset ;    52     struct kobj_type ;    52     struct kobject {   const char *name;   struct list_head entry;   struct kobject *parent;   struct kset *kset;   struct kobj_type *ktype;   struct kernfs_node *sd;   struct kref kref;   struct delayed_work release;   unsigned char state_initialized;   unsigned char state_in_sysfs;   unsigned char state_add_uevent_sent;   unsigned char state_remove_uevent_sent;   unsigned char uevent_suppress; } ;   115     struct kobj_type {   void (*release)(struct kobject *);   const struct sysfs_ops *sysfs_ops;   struct attribute **default_attrs;   const struct kobj_ns_type_operations * (*child_ns_type)(struct kobject *);   const void * (*namespace)(struct kobject *); } ;   123     struct kobj_uevent_env {   char *argv[3U];   char *envp[32U];   int envp_idx;   char buf[2048U];   int buflen; } ;   131     struct kset_uevent_ops {   const int (*filter)(struct kset *, struct kobject *);   const const char * (*name)(struct kset *, struct kobject *);   const int (*uevent)(struct kset *, struct kobject *, struct kobj_uevent_env *); } ;   148     struct kset {   struct list_head list;   spinlock_t list_lock;   struct kobject kobj;   const struct kset_uevent_ops *uevent_ops; } ;   223     struct klist_node ;    37     struct klist_node {   void *n_klist;   struct list_head n_node;   struct kref n_ref; } ;    95     struct __anonstruct_nodemask_t_107 {   unsigned long bits[16U]; } ;    95     typedef struct __anonstruct_nodemask_t_107 nodemask_t;   357     enum node_states {   N_POSSIBLE = 0,   N_ONLINE = 1,   N_NORMAL_MEMORY = 2,   N_HIGH_MEMORY = 2,   N_MEMORY = 3,   N_CPU = 4,   NR_NODE_STATES = 5 } ;   520     struct path ;   521     struct seq_file {   char *buf;   size_t size;   size_t from;   size_t count;   size_t pad_until;   loff_t index;   loff_t read_pos;   u64 version;   struct mutex lock;   const struct seq_operations *op;   int poll_event;   struct user_namespace *user_ns;   void *private; } ;    35     struct seq_operations {   void * (*start)(struct seq_file *, loff_t *);   void (*stop)(struct seq_file *, void *);   void * (*next)(struct seq_file *, void *, loff_t *);   int (*show)(struct seq_file *, void *); } ;   227     struct pinctrl ;   228     struct pinctrl_state ;   194     struct dev_pin_info {   struct pinctrl *p;   struct pinctrl_state *default_state;   struct pinctrl_state *init_state;   struct pinctrl_state *sleep_state;   struct pinctrl_state *idle_state; } ;    58     struct pm_message {   int event; } ;    64     typedef struct pm_message pm_message_t;    65     struct dev_pm_ops {   int (*prepare)(struct device *);   void (*complete)(struct device *);   int (*suspend)(struct device *);   int (*resume)(struct device *);   int (*freeze)(struct device *);   int (*thaw)(struct device *);   int (*poweroff)(struct device *);   int (*restore)(struct device *);   int (*suspend_late)(struct device *);   int (*resume_early)(struct device *);   int (*freeze_late)(struct device *);   int (*thaw_early)(struct device *);   int (*poweroff_late)(struct device *);   int (*restore_early)(struct device *);   int (*suspend_noirq)(struct device *);   int (*resume_noirq)(struct device *);   int (*freeze_noirq)(struct device *);   int (*thaw_noirq)(struct device *);   int (*poweroff_noirq)(struct device *);   int (*restore_noirq)(struct device *);   int (*runtime_suspend)(struct device *);   int (*runtime_resume)(struct device *);   int (*runtime_idle)(struct device *); } ;   320     enum rpm_status {   RPM_ACTIVE = 0,   RPM_RESUMING = 1,   RPM_SUSPENDED = 2,   RPM_SUSPENDING = 3 } ;   327     enum rpm_request {   RPM_REQ_NONE = 0,   RPM_REQ_IDLE = 1,   RPM_REQ_SUSPEND = 2,   RPM_REQ_AUTOSUSPEND = 3,   RPM_REQ_RESUME = 4 } ;   335     struct wakeup_source ;   336     struct wake_irq ;   337     struct pm_domain_data ;   338     struct pm_subsys_data {   spinlock_t lock;   unsigned int refcount;   struct list_head clock_list;   struct pm_domain_data *domain_data; } ;   556     struct dev_pm_qos ;   556     struct dev_pm_info {   pm_message_t power_state;   unsigned char can_wakeup;   unsigned char async_suspend;   bool is_prepared;   bool is_suspended;   bool is_noirq_suspended;   bool is_late_suspended;   bool ignore_children;   bool early_init;   bool direct_complete;   spinlock_t lock;   struct list_head entry;   struct completion completion;   struct wakeup_source *wakeup;   bool wakeup_path;   bool syscore;   bool no_pm_callbacks;   struct timer_list suspend_timer;   unsigned long timer_expires;   struct work_struct work;   wait_queue_head_t wait_queue;   struct wake_irq *wakeirq;   atomic_t usage_count;   atomic_t child_count;   unsigned char disable_depth;   unsigned char idle_notification;   unsigned char request_pending;   unsigned char deferred_resume;   unsigned char run_wake;   unsigned char runtime_auto;   unsigned char no_callbacks;   unsigned char irq_safe;   unsigned char use_autosuspend;   unsigned char timer_autosuspends;   unsigned char memalloc_noio;   enum rpm_request request;   enum rpm_status runtime_status;   int runtime_error;   int autosuspend_delay;   unsigned long last_busy;   unsigned long active_jiffies;   unsigned long suspended_jiffies;   unsigned long accounting_timestamp;   struct pm_subsys_data *subsys_data;   void (*set_latency_tolerance)(struct device *, s32 );   struct dev_pm_qos *qos; } ;   616     struct dev_pm_domain {   struct dev_pm_ops ops;   void (*detach)(struct device *, bool );   int (*activate)(struct device *);   void (*sync)(struct device *);   void (*dismiss)(struct device *); } ;   726     struct rw_semaphore ;   727     struct rw_semaphore {   long count;   struct list_head wait_list;   raw_spinlock_t wait_lock;   struct optimistic_spin_queue osq;   struct task_struct *owner;   struct lockdep_map dep_map; } ;   169     struct pci_dev ;   133     struct pci_bus ;    25     struct ldt_struct ;    25     struct __anonstruct_mm_context_t_172 {   struct ldt_struct *ldt;   unsigned short ia32_compat;   struct mutex lock;   void *vdso;   atomic_t perf_rdpmc_allowed; } ;    25     typedef struct __anonstruct_mm_context_t_172 mm_context_t;    22     struct bio_vec ;  1211     struct llist_node ;    64     struct llist_node {   struct llist_node *next; } ;    17     struct call_single_data {   struct llist_node llist;   void (*func)(void *);   void *info;   unsigned int flags; } ;   559     struct dma_map_ops ;   559     struct dev_archdata {   struct dma_map_ops *dma_ops;   void *iommu; } ;    24     struct device_private ;    25     struct device_driver ;    26     struct driver_private ;    27     struct class ;    28     struct subsys_private ;    29     struct bus_type ;    30     struct device_node ;    31     struct fwnode_handle ;    32     struct iommu_ops ;    33     struct iommu_group ;    61     struct device_attribute ;    61     struct bus_type {   const char *name;   const char *dev_name;   struct device *dev_root;   struct device_attribute *dev_attrs;   const struct attribute_group **bus_groups;   const struct attribute_group **dev_groups;   const struct attribute_group **drv_groups;   int (*match)(struct device *, struct device_driver *);   int (*uevent)(struct device *, struct kobj_uevent_env *);   int (*probe)(struct device *);   int (*remove)(struct device *);   void (*shutdown)(struct device *);   int (*online)(struct device *);   int (*offline)(struct device *);   int (*suspend)(struct device *, pm_message_t );   int (*resume)(struct device *);   const struct dev_pm_ops *pm;   const struct iommu_ops *iommu_ops;   struct subsys_private *p;   struct lock_class_key lock_key; } ;   139     struct device_type ;   198     enum probe_type {   PROBE_DEFAULT_STRATEGY = 0,   PROBE_PREFER_ASYNCHRONOUS = 1,   PROBE_FORCE_SYNCHRONOUS = 2 } ;   204     struct device_driver {   const char *name;   struct bus_type *bus;   struct module *owner;   const char *mod_name;   bool suppress_bind_attrs;   enum probe_type probe_type;   const struct of_device_id *of_match_table;   const struct acpi_device_id *acpi_match_table;   int (*probe)(struct device *);   int (*remove)(struct device *);   void (*shutdown)(struct device *);   int (*suspend)(struct device *, pm_message_t );   int (*resume)(struct device *);   const struct attribute_group **groups;   const struct dev_pm_ops *pm;   struct driver_private *p; } ;   354     struct class_attribute ;   354     struct class {   const char *name;   struct module *owner;   struct class_attribute *class_attrs;   const struct attribute_group **dev_groups;   struct kobject *dev_kobj;   int (*dev_uevent)(struct device *, struct kobj_uevent_env *);   char * (*devnode)(struct device *, umode_t *);   void (*class_release)(struct class *);   void (*dev_release)(struct device *);   int (*suspend)(struct device *, pm_message_t );   int (*resume)(struct device *);   const struct kobj_ns_type_operations *ns_type;   const void * (*namespace)(struct device *);   const struct dev_pm_ops *pm;   struct subsys_private *p; } ;   447     struct class_attribute {   struct attribute attr;   ssize_t  (*show)(struct class *, struct class_attribute *, char *);   ssize_t  (*store)(struct class *, struct class_attribute *, const char *, size_t ); } ;   515     struct device_type {   const char *name;   const struct attribute_group **groups;   int (*uevent)(struct device *, struct kobj_uevent_env *);   char * (*devnode)(struct device *, umode_t *, kuid_t *, kgid_t *);   void (*release)(struct device *);   const struct dev_pm_ops *pm; } ;   543     struct device_attribute {   struct attribute attr;   ssize_t  (*show)(struct device *, struct device_attribute *, char *);   ssize_t  (*store)(struct device *, struct device_attribute *, const char *, size_t ); } ;   684     struct device_dma_parameters {   unsigned int max_segment_size;   unsigned long segment_boundary_mask; } ;   693     struct irq_domain ;   693     struct dma_coherent_mem ;   693     struct cma ;   693     struct device {   struct device *parent;   struct device_private *p;   struct kobject kobj;   const char *init_name;   const struct device_type *type;   struct mutex mutex;   struct bus_type *bus;   struct device_driver *driver;   void *platform_data;   void *driver_data;   struct dev_pm_info power;   struct dev_pm_domain *pm_domain;   struct irq_domain *msi_domain;   struct dev_pin_info *pins;   struct list_head msi_list;   int numa_node;   u64 *dma_mask;   u64 coherent_dma_mask;   unsigned long dma_pfn_offset;   struct device_dma_parameters *dma_parms;   struct list_head dma_pools;   struct dma_coherent_mem *dma_mem;   struct cma *cma_area;   struct dev_archdata archdata;   struct device_node *of_node;   struct fwnode_handle *fwnode;   dev_t devt;   u32 id;   spinlock_t devres_lock;   struct list_head devres_head;   struct klist_node knode_class;   struct class *class;   const struct attribute_group **groups;   void (*release)(struct device *);   struct iommu_group *iommu_group;   bool offline_disabled;   bool offline; } ;   847     struct wakeup_source {   const char *name;   struct list_head entry;   spinlock_t lock;   struct wake_irq *wakeirq;   struct timer_list timer;   unsigned long timer_expires;   ktime_t total_time;   ktime_t max_time;   ktime_t last_time;   ktime_t start_prevent_time;   ktime_t prevent_sleep_time;   unsigned long event_count;   unsigned long active_count;   unsigned long relax_count;   unsigned long expire_count;   unsigned long wakeup_count;   bool active;   bool autosleep_enabled; } ;    60     struct kmem_cache ;    58     struct arch_uprobe_task {   unsigned long saved_scratch_register;   unsigned int saved_trap_nr;   unsigned int saved_tf; } ;    66     enum uprobe_task_state {   UTASK_RUNNING = 0,   UTASK_SSTEP = 1,   UTASK_SSTEP_ACK = 2,   UTASK_SSTEP_TRAPPED = 3 } ;    73     struct __anonstruct____missing_field_name_207 {   struct arch_uprobe_task autask;   unsigned long vaddr; } ;    73     struct __anonstruct____missing_field_name_208 {   struct callback_head dup_xol_work;   unsigned long dup_xol_addr; } ;    73     union __anonunion____missing_field_name_206 {   struct __anonstruct____missing_field_name_207 __annonCompField37;   struct __anonstruct____missing_field_name_208 __annonCompField38; } ;    73     struct uprobe ;    73     struct return_instance ;    73     struct uprobe_task {   enum uprobe_task_state state;   union __anonunion____missing_field_name_206 __annonCompField39;   struct uprobe *active_uprobe;   unsigned long xol_vaddr;   struct return_instance *return_instances;   unsigned int depth; } ;    94     struct return_instance {   struct uprobe *uprobe;   unsigned long func;   unsigned long stack;   unsigned long orig_ret_vaddr;   bool chained;   struct return_instance *next; } ;   110     struct xol_area ;   111     struct uprobes_state {   struct xol_area *xol_area; } ;   150     struct address_space ;   151     struct mem_cgroup ;   152     union __anonunion____missing_field_name_209 {   struct address_space *mapping;   void *s_mem;   atomic_t compound_mapcount; } ;   152     union __anonunion____missing_field_name_211 {   unsigned long index;   void *freelist; } ;   152     struct __anonstruct____missing_field_name_215 {   unsigned short inuse;   unsigned short objects;   unsigned char frozen; } ;   152     union __anonunion____missing_field_name_214 {   atomic_t _mapcount;   struct __anonstruct____missing_field_name_215 __annonCompField42;   int units; } ;   152     struct __anonstruct____missing_field_name_213 {   union __anonunion____missing_field_name_214 __annonCompField43;   atomic_t _count; } ;   152     union __anonunion____missing_field_name_212 {   unsigned long counters;   struct __anonstruct____missing_field_name_213 __annonCompField44;   unsigned int active; } ;   152     struct __anonstruct____missing_field_name_210 {   union __anonunion____missing_field_name_211 __annonCompField41;   union __anonunion____missing_field_name_212 __annonCompField45; } ;   152     struct dev_pagemap ;   152     struct __anonstruct____missing_field_name_217 {   struct page *next;   int pages;   int pobjects; } ;   152     struct __anonstruct____missing_field_name_218 {   unsigned long compound_head;   unsigned int compound_dtor;   unsigned int compound_order; } ;   152     struct __anonstruct____missing_field_name_219 {   unsigned long __pad;   pgtable_t pmd_huge_pte; } ;   152     union __anonunion____missing_field_name_216 {   struct list_head lru;   struct dev_pagemap *pgmap;   struct __anonstruct____missing_field_name_217 __annonCompField47;   struct callback_head callback_head;   struct __anonstruct____missing_field_name_218 __annonCompField48;   struct __anonstruct____missing_field_name_219 __annonCompField49; } ;   152     union __anonunion____missing_field_name_220 {   unsigned long private;   spinlock_t *ptl;   struct kmem_cache *slab_cache; } ;   152     struct page {   unsigned long flags;   union __anonunion____missing_field_name_209 __annonCompField40;   struct __anonstruct____missing_field_name_210 __annonCompField46;   union __anonunion____missing_field_name_216 __annonCompField50;   union __anonunion____missing_field_name_220 __annonCompField51;   struct mem_cgroup *mem_cgroup; } ;   191     struct page_frag {   struct page *page;   __u32 offset;   __u32 size; } ;   276     struct userfaultfd_ctx ;   276     struct vm_userfaultfd_ctx {   struct userfaultfd_ctx *ctx; } ;   283     struct __anonstruct_shared_221 {   struct rb_node rb;   unsigned long rb_subtree_last; } ;   283     struct anon_vma ;   283     struct mempolicy ;   283     struct vm_area_struct {   unsigned long vm_start;   unsigned long vm_end;   struct vm_area_struct *vm_next;   struct vm_area_struct *vm_prev;   struct rb_node vm_rb;   unsigned long rb_subtree_gap;   struct mm_struct *vm_mm;   pgprot_t vm_page_prot;   unsigned long vm_flags;   struct __anonstruct_shared_221 shared;   struct list_head anon_vma_chain;   struct anon_vma *anon_vma;   const struct vm_operations_struct *vm_ops;   unsigned long vm_pgoff;   struct file *vm_file;   void *vm_private_data;   struct mempolicy *vm_policy;   struct vm_userfaultfd_ctx vm_userfaultfd_ctx; } ;   356     struct core_thread {   struct task_struct *task;   struct core_thread *next; } ;   361     struct core_state {   atomic_t nr_threads;   struct core_thread dumper;   struct completion startup; } ;   375     struct task_rss_stat {   int events;   int count[4U]; } ;   383     struct mm_rss_stat {   atomic_long_t count[4U]; } ;   388     struct kioctx_table ;   389     struct linux_binfmt ;   389     struct mmu_notifier_mm ;   389     struct mm_struct {   struct vm_area_struct *mmap;   struct rb_root mm_rb;   u32 vmacache_seqnum;   unsigned long int (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);   unsigned long mmap_base;   unsigned long mmap_legacy_base;   unsigned long task_size;   unsigned long highest_vm_end;   pgd_t *pgd;   atomic_t mm_users;   atomic_t mm_count;   atomic_long_t nr_ptes;   atomic_long_t nr_pmds;   int map_count;   spinlock_t page_table_lock;   struct rw_semaphore mmap_sem;   struct list_head mmlist;   unsigned long hiwater_rss;   unsigned long hiwater_vm;   unsigned long total_vm;   unsigned long locked_vm;   unsigned long pinned_vm;   unsigned long data_vm;   unsigned long exec_vm;   unsigned long stack_vm;   unsigned long def_flags;   unsigned long start_code;   unsigned long end_code;   unsigned long start_data;   unsigned long end_data;   unsigned long start_brk;   unsigned long brk;   unsigned long start_stack;   unsigned long arg_start;   unsigned long arg_end;   unsigned long env_start;   unsigned long env_end;   unsigned long saved_auxv[46U];   struct mm_rss_stat rss_stat;   struct linux_binfmt *binfmt;   cpumask_var_t cpu_vm_mask_var;   mm_context_t context;   unsigned long flags;   struct core_state *core_state;   spinlock_t ioctx_lock;   struct kioctx_table *ioctx_table;   struct task_struct *owner;   struct file *exe_file;   struct mmu_notifier_mm *mmu_notifier_mm;   struct cpumask cpumask_allocation;   unsigned long numa_next_scan;   unsigned long numa_scan_offset;   int numa_scan_seq;   bool tlb_flush_pending;   struct uprobes_state uprobes_state;   void *bd_addr;   atomic_long_t hugetlb_usage; } ;    22     struct kernel_cap_struct {   __u32 cap[2U]; } ;    25     typedef struct kernel_cap_struct kernel_cap_t;    84     struct plist_node {   int prio;   struct list_head prio_list;   struct list_head node_list; } ;     4     typedef unsigned long cputime_t;    25     struct sem_undo_list ;    25     struct sysv_sem {   struct sem_undo_list *undo_list; } ;    78     struct user_struct ;    26     struct sysv_shm {   struct list_head shm_clist; } ;    24     struct __anonstruct_sigset_t_224 {   unsigned long sig[1U]; } ;    24     typedef struct __anonstruct_sigset_t_224 sigset_t;    25     struct siginfo ;    17     typedef void __signalfn_t(int);    18     typedef __signalfn_t *__sighandler_t;    20     typedef void __restorefn_t();    21     typedef __restorefn_t *__sigrestore_t;    34     union sigval {   int sival_int;   void *sival_ptr; } ;    10     typedef union sigval sigval_t;    11     struct __anonstruct__kill_226 {   __kernel_pid_t _pid;   __kernel_uid32_t _uid; } ;    11     struct __anonstruct__timer_227 {   __kernel_timer_t _tid;   int _overrun;   char _pad[0U];   sigval_t _sigval;   int _sys_private; } ;    11     struct __anonstruct__rt_228 {   __kernel_pid_t _pid;   __kernel_uid32_t _uid;   sigval_t _sigval; } ;    11     struct __anonstruct__sigchld_229 {   __kernel_pid_t _pid;   __kernel_uid32_t _uid;   int _status;   __kernel_clock_t _utime;   __kernel_clock_t _stime; } ;    11     struct __anonstruct__addr_bnd_231 {   void *_lower;   void *_upper; } ;    11     struct __anonstruct__sigfault_230 {   void *_addr;   short _addr_lsb;   struct __anonstruct__addr_bnd_231 _addr_bnd; } ;    11     struct __anonstruct__sigpoll_232 {   long _band;   int _fd; } ;    11     struct __anonstruct__sigsys_233 {   void *_call_addr;   int _syscall;   unsigned int _arch; } ;    11     union __anonunion__sifields_225 {   int _pad[28U];   struct __anonstruct__kill_226 _kill;   struct __anonstruct__timer_227 _timer;   struct __anonstruct__rt_228 _rt;   struct __anonstruct__sigchld_229 _sigchld;   struct __anonstruct__sigfault_230 _sigfault;   struct __anonstruct__sigpoll_232 _sigpoll;   struct __anonstruct__sigsys_233 _sigsys; } ;    11     struct siginfo {   int si_signo;   int si_errno;   int si_code;   union __anonunion__sifields_225 _sifields; } ;   113     typedef struct siginfo siginfo_t;    22     struct sigpending {   struct list_head list;   sigset_t signal; } ;   242     struct sigaction {   __sighandler_t sa_handler;   unsigned long sa_flags;   __sigrestore_t sa_restorer;   sigset_t sa_mask; } ;   256     struct k_sigaction {   struct sigaction sa; } ;   442     enum pid_type {   PIDTYPE_PID = 0,   PIDTYPE_PGID = 1,   PIDTYPE_SID = 2,   PIDTYPE_MAX = 3 } ;   449     struct pid_namespace ;   449     struct upid {   int nr;   struct pid_namespace *ns;   struct hlist_node pid_chain; } ;    56     struct pid {   atomic_t count;   unsigned int level;   struct hlist_head tasks[3U];   struct callback_head rcu;   struct upid numbers[1U]; } ;    68     struct pid_link {   struct hlist_node node;   struct pid *pid; } ;   174     struct percpu_counter {   raw_spinlock_t lock;   s64 count;   struct list_head list;   s32 *counters; } ;    53     struct seccomp_filter ;    54     struct seccomp {   int mode;   struct seccomp_filter *filter; } ;    40     struct rt_mutex_waiter ;    41     struct rlimit {   __kernel_ulong_t rlim_cur;   __kernel_ulong_t rlim_max; } ;    11     struct timerqueue_node {   struct rb_node node;   ktime_t expires; } ;    12     struct timerqueue_head {   struct rb_root head;   struct timerqueue_node *next; } ;    50     struct hrtimer_clock_base ;    51     struct hrtimer_cpu_base ;    60     enum hrtimer_restart {   HRTIMER_NORESTART = 0,   HRTIMER_RESTART = 1 } ;    65     struct hrtimer {   struct timerqueue_node node;   ktime_t _softexpires;   enum hrtimer_restart  (*function)(struct hrtimer *);   struct hrtimer_clock_base *base;   unsigned long state;   int start_pid;   void *start_site;   char start_comm[16U]; } ;   123     struct hrtimer_clock_base {   struct hrtimer_cpu_base *cpu_base;   int index;   clockid_t clockid;   struct timerqueue_head active;   ktime_t  (*get_time)();   ktime_t offset; } ;   156     struct hrtimer_cpu_base {   raw_spinlock_t lock;   seqcount_t seq;   struct hrtimer *running;   unsigned int cpu;   unsigned int active_bases;   unsigned int clock_was_set_seq;   bool migration_enabled;   bool nohz_active;   unsigned char in_hrtirq;   unsigned char hres_active;   unsigned char hang_detected;   ktime_t expires_next;   struct hrtimer *next_timer;   unsigned int nr_events;   unsigned int nr_retries;   unsigned int nr_hangs;   unsigned int max_hang_time;   struct hrtimer_clock_base clock_base[4U]; } ;   466     struct task_io_accounting {   u64 rchar;   u64 wchar;   u64 syscr;   u64 syscw;   u64 read_bytes;   u64 write_bytes;   u64 cancelled_write_bytes; } ;    45     struct latency_record {   unsigned long backtrace[12U];   unsigned int count;   unsigned long time;   unsigned long max; } ;    39     struct assoc_array_ptr ;    39     struct assoc_array {   struct assoc_array_ptr *root;   unsigned long nr_leaves_on_tree; } ;    31     typedef int32_t key_serial_t;    34     typedef uint32_t key_perm_t;    35     struct key ;    36     struct signal_struct ;    37     struct cred ;    38     struct key_type ;    42     struct keyring_index_key {   struct key_type *type;   const char *description;   size_t desc_len; } ;    91     union key_payload {   void *rcu_data0;   void *data[4U]; } ;   128     union __anonunion____missing_field_name_252 {   struct list_head graveyard_link;   struct rb_node serial_node; } ;   128     struct key_user ;   128     union __anonunion____missing_field_name_253 {   time_t expiry;   time_t revoked_at; } ;   128     struct __anonstruct____missing_field_name_255 {   struct key_type *type;   char *description; } ;   128     union __anonunion____missing_field_name_254 {   struct keyring_index_key index_key;   struct __anonstruct____missing_field_name_255 __annonCompField54; } ;   128     struct __anonstruct____missing_field_name_257 {   struct list_head name_link;   struct assoc_array keys; } ;   128     union __anonunion____missing_field_name_256 {   union key_payload payload;   struct __anonstruct____missing_field_name_257 __annonCompField56;   int reject_error; } ;   128     struct key {   atomic_t usage;   key_serial_t serial;   union __anonunion____missing_field_name_252 __annonCompField52;   struct rw_semaphore sem;   struct key_user *user;   void *security;   union __anonunion____missing_field_name_253 __annonCompField53;   time_t last_used_at;   kuid_t uid;   kgid_t gid;   key_perm_t perm;   unsigned short quotalen;   unsigned short datalen;   unsigned long flags;   union __anonunion____missing_field_name_254 __annonCompField55;   union __anonunion____missing_field_name_256 __annonCompField57; } ;   354     struct audit_context ;    27     struct group_info {   atomic_t usage;   int ngroups;   int nblocks;   kgid_t small_block[32U];   kgid_t *blocks[0U]; } ;    90     struct cred {   atomic_t usage;   atomic_t subscribers;   void *put_addr;   unsigned int magic;   kuid_t uid;   kgid_t gid;   kuid_t suid;   kgid_t sgid;   kuid_t euid;   kgid_t egid;   kuid_t fsuid;   kgid_t fsgid;   unsigned int securebits;   kernel_cap_t cap_inheritable;   kernel_cap_t cap_permitted;   kernel_cap_t cap_effective;   kernel_cap_t cap_bset;   kernel_cap_t cap_ambient;   unsigned char jit_keyring;   struct key *session_keyring;   struct key *process_keyring;   struct key *thread_keyring;   struct key *request_key_auth;   void *security;   struct user_struct *user;   struct user_namespace *user_ns;   struct group_info *group_info;   struct callback_head rcu; } ;   377     struct percpu_ref ;    55     typedef void percpu_ref_func_t(struct percpu_ref *);    68     struct percpu_ref {   atomic_long_t count;   unsigned long percpu_count_ptr;   percpu_ref_func_t *release;   percpu_ref_func_t *confirm_switch;   bool force_atomic;   struct callback_head rcu; } ;   327     enum rcu_sync_type {   RCU_SYNC = 0,   RCU_SCHED_SYNC = 1,   RCU_BH_SYNC = 2 } ;   333     struct rcu_sync {   int gp_state;   int gp_count;   wait_queue_head_t gp_wait;   int cb_state;   struct callback_head cb_head;   enum rcu_sync_type gp_type; } ;    65     struct percpu_rw_semaphore {   struct rcu_sync rss;   unsigned int *fast_read_ctr;   struct rw_semaphore rw_sem;   atomic_t slow_read_ctr;   wait_queue_head_t write_waitq; } ;    54     struct cgroup ;    55     struct cgroup_root ;    56     struct cgroup_subsys ;    57     struct cgroup_taskset ;   100     struct cgroup_file {   struct kernfs_node *kn; } ;    89     struct cgroup_subsys_state {   struct cgroup *cgroup;   struct cgroup_subsys *ss;   struct percpu_ref refcnt;   struct cgroup_subsys_state *parent;   struct list_head sibling;   struct list_head children;   int id;   unsigned int flags;   u64 serial_nr;   struct callback_head callback_head;   struct work_struct destroy_work; } ;   134     struct css_set {   atomic_t refcount;   struct hlist_node hlist;   struct list_head tasks;   struct list_head mg_tasks;   struct list_head cgrp_links;   struct cgroup *dfl_cgrp;   struct cgroup_subsys_state *subsys[13U];   struct list_head mg_preload_node;   struct list_head mg_node;   struct cgroup *mg_src_cgrp;   struct css_set *mg_dst_cset;   struct list_head e_cset_node[13U];   struct list_head task_iters;   struct callback_head callback_head; } ;   210     struct cgroup {   struct cgroup_subsys_state self;   unsigned long flags;   int id;   int level;   int populated_cnt;   struct kernfs_node *kn;   struct cgroup_file procs_file;   struct cgroup_file events_file;   unsigned int subtree_control;   unsigned int child_subsys_mask;   struct cgroup_subsys_state *subsys[13U];   struct cgroup_root *root;   struct list_head cset_links;   struct list_head e_csets[13U];   struct list_head pidlists;   struct mutex pidlist_mutex;   wait_queue_head_t offline_waitq;   struct work_struct release_agent_work;   int ancestor_ids[]; } ;   294     struct cgroup_root {   struct kernfs_root *kf_root;   unsigned int subsys_mask;   int hierarchy_id;   struct cgroup cgrp;   int cgrp_ancestor_id_storage;   atomic_t nr_cgrps;   struct list_head root_list;   unsigned int flags;   struct idr cgroup_idr;   char release_agent_path[4096U];   char name[64U]; } ;   333     struct cftype {   char name[64U];   unsigned long private;   size_t max_write_len;   unsigned int flags;   unsigned int file_offset;   struct cgroup_subsys *ss;   struct list_head node;   struct kernfs_ops *kf_ops;   u64  (*read_u64)(struct cgroup_subsys_state *, struct cftype *);   s64  (*read_s64)(struct cgroup_subsys_state *, struct cftype *);   int (*seq_show)(struct seq_file *, void *);   void * (*seq_start)(struct seq_file *, loff_t *);   void * (*seq_next)(struct seq_file *, void *, loff_t *);   void (*seq_stop)(struct seq_file *, void *);   int (*write_u64)(struct cgroup_subsys_state *, struct cftype *, u64 );   int (*write_s64)(struct cgroup_subsys_state *, struct cftype *, s64 );   ssize_t  (*write)(struct kernfs_open_file *, char *, size_t , loff_t );   struct lock_class_key lockdep_key; } ;   418     struct cgroup_subsys {   struct cgroup_subsys_state * (*css_alloc)(struct cgroup_subsys_state *);   int (*css_online)(struct cgroup_subsys_state *);   void (*css_offline)(struct cgroup_subsys_state *);   void (*css_released)(struct cgroup_subsys_state *);   void (*css_free)(struct cgroup_subsys_state *);   void (*css_reset)(struct cgroup_subsys_state *);   void (*css_e_css_changed)(struct cgroup_subsys_state *);   int (*can_attach)(struct cgroup_taskset *);   void (*cancel_attach)(struct cgroup_taskset *);   void (*attach)(struct cgroup_taskset *);   int (*can_fork)(struct task_struct *);   void (*cancel_fork)(struct task_struct *);   void (*fork)(struct task_struct *);   void (*exit)(struct task_struct *);   void (*free)(struct task_struct *);   void (*bind)(struct cgroup_subsys_state *);   int early_init;   bool broken_hierarchy;   bool warned_broken_hierarchy;   int id;   const char *name;   const char *legacy_name;   struct cgroup_root *root;   struct idr css_idr;   struct list_head cfts;   struct cftype *dfl_cftypes;   struct cftype *legacy_cftypes;   unsigned int depends_on; } ;   128     struct futex_pi_state ;   129     struct robust_list_head ;   130     struct bio_list ;   131     struct fs_struct ;   132     struct perf_event_context ;   133     struct blk_plug ;   135     struct nameidata ;   188     struct cfs_rq ;   189     struct task_group ;   482     struct sighand_struct {   atomic_t count;   struct k_sigaction action[64U];   spinlock_t siglock;   wait_queue_head_t signalfd_wqh; } ;   523     struct pacct_struct {   int ac_flag;   long ac_exitcode;   unsigned long ac_mem;   cputime_t ac_utime;   cputime_t ac_stime;   unsigned long ac_minflt;   unsigned long ac_majflt; } ;   531     struct cpu_itimer {   cputime_t expires;   cputime_t incr;   u32 error;   u32 incr_error; } ;   538     struct prev_cputime {   cputime_t utime;   cputime_t stime;   raw_spinlock_t lock; } ;   563     struct task_cputime {   cputime_t utime;   cputime_t stime;   unsigned long long sum_exec_runtime; } ;   579     struct task_cputime_atomic {   atomic64_t utime;   atomic64_t stime;   atomic64_t sum_exec_runtime; } ;   601     struct thread_group_cputimer {   struct task_cputime_atomic cputime_atomic;   bool running;   bool checking_timer; } ;   646     struct autogroup ;   647     struct tty_struct ;   647     struct taskstats ;   647     struct tty_audit_buf ;   647     struct signal_struct {   atomic_t sigcnt;   atomic_t live;   int nr_threads;   struct list_head thread_head;   wait_queue_head_t wait_chldexit;   struct task_struct *curr_target;   struct sigpending shared_pending;   int group_exit_code;   int notify_count;   struct task_struct *group_exit_task;   int group_stop_count;   unsigned int flags;   unsigned char is_child_subreaper;   unsigned char has_child_subreaper;   int posix_timer_id;   struct list_head posix_timers;   struct hrtimer real_timer;   struct pid *leader_pid;   ktime_t it_real_incr;   struct cpu_itimer it[2U];   struct thread_group_cputimer cputimer;   struct task_cputime cputime_expires;   struct list_head cpu_timers[3U];   struct pid *tty_old_pgrp;   int leader;   struct tty_struct *tty;   struct autogroup *autogroup;   seqlock_t stats_lock;   cputime_t utime;   cputime_t stime;   cputime_t cutime;   cputime_t cstime;   cputime_t gtime;   cputime_t cgtime;   struct prev_cputime prev_cputime;   unsigned long nvcsw;   unsigned long nivcsw;   unsigned long cnvcsw;   unsigned long cnivcsw;   unsigned long min_flt;   unsigned long maj_flt;   unsigned long cmin_flt;   unsigned long cmaj_flt;   unsigned long inblock;   unsigned long oublock;   unsigned long cinblock;   unsigned long coublock;   unsigned long maxrss;   unsigned long cmaxrss;   struct task_io_accounting ioac;   unsigned long long sum_sched_runtime;   struct rlimit rlim[16U];   struct pacct_struct pacct;   struct taskstats *stats;   unsigned int audit_tty;   unsigned int audit_tty_log_passwd;   struct tty_audit_buf *tty_audit_buf;   oom_flags_t oom_flags;   short oom_score_adj;   short oom_score_adj_min;   struct mutex cred_guard_mutex; } ;   814     struct user_struct {   atomic_t __count;   atomic_t processes;   atomic_t sigpending;   atomic_t inotify_watches;   atomic_t inotify_devs;   atomic_t fanotify_listeners;   atomic_long_t epoll_watches;   unsigned long mq_bytes;   unsigned long locked_shm;   unsigned long unix_inflight;   atomic_long_t pipe_bufs;   struct key *uid_keyring;   struct key *session_keyring;   struct hlist_node uidhash_node;   kuid_t uid;   atomic_long_t locked_vm; } ;   859     struct backing_dev_info ;   860     struct reclaim_state ;   861     struct sched_info {   unsigned long pcount;   unsigned long long run_delay;   unsigned long long last_arrival;   unsigned long long last_queued; } ;   875     struct task_delay_info {   spinlock_t lock;   unsigned int flags;   u64 blkio_start;   u64 blkio_delay;   u64 swapin_delay;   u32 blkio_count;   u32 swapin_count;   u64 freepages_start;   u64 freepages_delay;   u32 freepages_count; } ;   923     struct wake_q_node {   struct wake_q_node *next; } ;  1150     struct io_context ;  1184     struct pipe_inode_info ;  1186     struct load_weight {   unsigned long weight;   u32 inv_weight; } ;  1193     struct sched_avg {   u64 last_update_time;   u64 load_sum;   u32 util_sum;   u32 period_contrib;   unsigned long load_avg;   unsigned long util_avg; } ;  1213     struct sched_statistics {   u64 wait_start;   u64 wait_max;   u64 wait_count;   u64 wait_sum;   u64 iowait_count;   u64 iowait_sum;   u64 sleep_start;   u64 sleep_max;   s64 sum_sleep_runtime;   u64 block_start;   u64 block_max;   u64 exec_max;   u64 slice_max;   u64 nr_migrations_cold;   u64 nr_failed_migrations_affine;   u64 nr_failed_migrations_running;   u64 nr_failed_migrations_hot;   u64 nr_forced_migrations;   u64 nr_wakeups;   u64 nr_wakeups_sync;   u64 nr_wakeups_migrate;   u64 nr_wakeups_local;   u64 nr_wakeups_remote;   u64 nr_wakeups_affine;   u64 nr_wakeups_affine_attempts;   u64 nr_wakeups_passive;   u64 nr_wakeups_idle; } ;  1248     struct sched_entity {   struct load_weight load;   struct rb_node run_node;   struct list_head group_node;   unsigned int on_rq;   u64 exec_start;   u64 sum_exec_runtime;   u64 vruntime;   u64 prev_sum_exec_runtime;   u64 nr_migrations;   struct sched_statistics statistics;   int depth;   struct sched_entity *parent;   struct cfs_rq *cfs_rq;   struct cfs_rq *my_q;   struct sched_avg avg; } ;  1285     struct rt_rq ;  1285     struct sched_rt_entity {   struct list_head run_list;   unsigned long timeout;   unsigned long watchdog_stamp;   unsigned int time_slice;   struct sched_rt_entity *back;   struct sched_rt_entity *parent;   struct rt_rq *rt_rq;   struct rt_rq *my_q; } ;  1301     struct sched_dl_entity {   struct rb_node rb_node;   u64 dl_runtime;   u64 dl_deadline;   u64 dl_period;   u64 dl_bw;   s64 runtime;   u64 deadline;   unsigned int flags;   int dl_throttled;   int dl_new;   int dl_boosted;   int dl_yielded;   struct hrtimer dl_timer; } ;  1369     struct tlbflush_unmap_batch {   struct cpumask cpumask;   bool flush_required;   bool writable; } ;  1388     struct sched_class ;  1388     struct files_struct ;  1388     struct compat_robust_list_head ;  1388     struct numa_group ;  1388     struct task_struct {   volatile long state;   void *stack;   atomic_t usage;   unsigned int flags;   unsigned int ptrace;   struct llist_node wake_entry;   int on_cpu;   unsigned int wakee_flips;   unsigned long wakee_flip_decay_ts;   struct task_struct *last_wakee;   int wake_cpu;   int on_rq;   int prio;   int static_prio;   int normal_prio;   unsigned int rt_priority;   const struct sched_class *sched_class;   struct sched_entity se;   struct sched_rt_entity rt;   struct task_group *sched_task_group;   struct sched_dl_entity dl;   struct hlist_head preempt_notifiers;   unsigned int policy;   int nr_cpus_allowed;   cpumask_t cpus_allowed;   unsigned long rcu_tasks_nvcsw;   bool rcu_tasks_holdout;   struct list_head rcu_tasks_holdout_list;   int rcu_tasks_idle_cpu;   struct sched_info sched_info;   struct list_head tasks;   struct plist_node pushable_tasks;   struct rb_node pushable_dl_tasks;   struct mm_struct *mm;   struct mm_struct *active_mm;   u32 vmacache_seqnum;   struct vm_area_struct *vmacache[4U];   struct task_rss_stat rss_stat;   int exit_state;   int exit_code;   int exit_signal;   int pdeath_signal;   unsigned long jobctl;   unsigned int personality;   unsigned char sched_reset_on_fork;   unsigned char sched_contributes_to_load;   unsigned char sched_migrated;   unsigned char;   unsigned char in_execve;   unsigned char in_iowait;   unsigned char memcg_may_oom;   unsigned char memcg_kmem_skip_account;   unsigned char brk_randomized;   unsigned long atomic_flags;   struct restart_block restart_block;   pid_t pid;   pid_t tgid;   struct task_struct *real_parent;   struct task_struct *parent;   struct list_head children;   struct list_head sibling;   struct task_struct *group_leader;   struct list_head ptraced;   struct list_head ptrace_entry;   struct pid_link pids[3U];   struct list_head thread_group;   struct list_head thread_node;   struct completion *vfork_done;   int *set_child_tid;   int *clear_child_tid;   cputime_t utime;   cputime_t stime;   cputime_t utimescaled;   cputime_t stimescaled;   cputime_t gtime;   struct prev_cputime prev_cputime;   unsigned long nvcsw;   unsigned long nivcsw;   u64 start_time;   u64 real_start_time;   unsigned long min_flt;   unsigned long maj_flt;   struct task_cputime cputime_expires;   struct list_head cpu_timers[3U];   const struct cred *real_cred;   const struct cred *cred;   char comm[16U];   struct nameidata *nameidata;   struct sysv_sem sysvsem;   struct sysv_shm sysvshm;   unsigned long last_switch_count;   struct fs_struct *fs;   struct files_struct *files;   struct nsproxy *nsproxy;   struct signal_struct *signal;   struct sighand_struct *sighand;   sigset_t blocked;   sigset_t real_blocked;   sigset_t saved_sigmask;   struct sigpending pending;   unsigned long sas_ss_sp;   size_t sas_ss_size;   struct callback_head *task_works;   struct audit_context *audit_context;   kuid_t loginuid;   unsigned int sessionid;   struct seccomp seccomp;   u32 parent_exec_id;   u32 self_exec_id;   spinlock_t alloc_lock;   raw_spinlock_t pi_lock;   struct wake_q_node wake_q;   struct rb_root pi_waiters;   struct rb_node *pi_waiters_leftmost;   struct rt_mutex_waiter *pi_blocked_on;   struct mutex_waiter *blocked_on;   unsigned int irq_events;   unsigned long hardirq_enable_ip;   unsigned long hardirq_disable_ip;   unsigned int hardirq_enable_event;   unsigned int hardirq_disable_event;   int hardirqs_enabled;   int hardirq_context;   unsigned long softirq_disable_ip;   unsigned long softirq_enable_ip;   unsigned int softirq_disable_event;   unsigned int softirq_enable_event;   int softirqs_enabled;   int softirq_context;   u64 curr_chain_key;   int lockdep_depth;   unsigned int lockdep_recursion;   struct held_lock held_locks[48U];   gfp_t lockdep_reclaim_gfp;   unsigned int in_ubsan;   void *journal_info;   struct bio_list *bio_list;   struct blk_plug *plug;   struct reclaim_state *reclaim_state;   struct backing_dev_info *backing_dev_info;   struct io_context *io_context;   unsigned long ptrace_message;   siginfo_t *last_siginfo;   struct task_io_accounting ioac;   u64 acct_rss_mem1;   u64 acct_vm_mem1;   cputime_t acct_timexpd;   nodemask_t mems_allowed;   seqcount_t mems_allowed_seq;   int cpuset_mem_spread_rotor;   int cpuset_slab_spread_rotor;   struct css_set *cgroups;   struct list_head cg_list;   struct robust_list_head *robust_list;   struct compat_robust_list_head *compat_robust_list;   struct list_head pi_state_list;   struct futex_pi_state *pi_state_cache;   struct perf_event_context *perf_event_ctxp[2U];   struct mutex perf_event_mutex;   struct list_head perf_event_list;   struct mempolicy *mempolicy;   short il_next;   short pref_node_fork;   int numa_scan_seq;   unsigned int numa_scan_period;   unsigned int numa_scan_period_max;   int numa_preferred_nid;   unsigned long numa_migrate_retry;   u64 node_stamp;   u64 last_task_numa_placement;   u64 last_sum_exec_runtime;   struct callback_head numa_work;   struct list_head numa_entry;   struct numa_group *numa_group;   unsigned long *numa_faults;   unsigned long total_numa_faults;   unsigned long numa_faults_locality[3U];   unsigned long numa_pages_migrated;   struct tlbflush_unmap_batch tlb_ubc;   struct callback_head rcu;   struct pipe_inode_info *splice_pipe;   struct page_frag task_frag;   struct task_delay_info *delays;   int make_it_fail;   int nr_dirtied;   int nr_dirtied_pause;   unsigned long dirty_paused_when;   int latency_record_count;   struct latency_record latency_record[32U];   unsigned long timer_slack_ns;   unsigned long default_timer_slack_ns;   unsigned int kasan_depth;   unsigned long trace;   unsigned long trace_recursion;   struct mem_cgroup *memcg_in_oom;   gfp_t memcg_oom_gfp_mask;   int memcg_oom_order;   unsigned int memcg_nr_pages_over_high;   struct uprobe_task *utask;   unsigned int sequential_io;   unsigned int sequential_io_avg;   unsigned long task_state_change;   int pagefault_disabled;   struct thread_struct thread; } ;    70     struct hotplug_slot ;    70     struct pci_slot {   struct pci_bus *bus;   struct list_head list;   struct hotplug_slot *hotplug;   unsigned char number;   struct kobject kobj; } ;   110     typedef int pci_power_t;   137     typedef unsigned int pci_channel_state_t;   138     enum pci_channel_state {   pci_channel_io_normal = 1,   pci_channel_io_frozen = 2,   pci_channel_io_perm_failure = 3 } ;   163     typedef unsigned short pci_dev_flags_t;   192     typedef unsigned short pci_bus_flags_t;   249     struct pcie_link_state ;   250     struct pci_vpd ;   251     struct pci_sriov ;   253     struct proc_dir_entry ;   253     struct pci_driver ;   253     union __anonunion____missing_field_name_282 {   struct pci_sriov *sriov;   struct pci_dev *physfn; } ;   253     struct pci_dev {   struct list_head bus_list;   struct pci_bus *bus;   struct pci_bus *subordinate;   void *sysdata;   struct proc_dir_entry *procent;   struct pci_slot *slot;   unsigned int devfn;   unsigned short vendor;   unsigned short device;   unsigned short subsystem_vendor;   unsigned short subsystem_device;   unsigned int class;   u8 revision;   u8 hdr_type;   u8 pcie_cap;   u8 msi_cap;   u8 msix_cap;   unsigned char pcie_mpss;   u8 rom_base_reg;   u8 pin;   u16 pcie_flags_reg;   u8 dma_alias_devfn;   struct pci_driver *driver;   u64 dma_mask;   struct device_dma_parameters dma_parms;   pci_power_t current_state;   u8 pm_cap;   unsigned char pme_support;   unsigned char pme_interrupt;   unsigned char pme_poll;   unsigned char d1_support;   unsigned char d2_support;   unsigned char no_d1d2;   unsigned char no_d3cold;   unsigned char d3cold_allowed;   unsigned char mmio_always_on;   unsigned char wakeup_prepared;   unsigned char runtime_d3cold;   unsigned char ignore_hotplug;   unsigned int d3_delay;   unsigned int d3cold_delay;   struct pcie_link_state *link_state;   pci_channel_state_t error_state;   struct device dev;   int cfg_size;   unsigned int irq;   struct resource resource[17U];   bool match_driver;   unsigned char transparent;   unsigned char multifunction;   unsigned char is_added;   unsigned char is_busmaster;   unsigned char no_msi;   unsigned char no_64bit_msi;   unsigned char block_cfg_access;   unsigned char broken_parity_status;   unsigned char irq_reroute_variant;   unsigned char msi_enabled;   unsigned char msix_enabled;   unsigned char ari_enabled;   unsigned char ats_enabled;   unsigned char is_managed;   unsigned char needs_freset;   unsigned char state_saved;   unsigned char is_physfn;   unsigned char is_virtfn;   unsigned char reset_fn;   unsigned char is_hotplug_bridge;   unsigned char __aer_firmware_first_valid;   unsigned char __aer_firmware_first;   unsigned char broken_intx_masking;   unsigned char io_window_1k;   unsigned char irq_managed;   unsigned char has_secondary_link;   pci_dev_flags_t dev_flags;   atomic_t enable_cnt;   u32 saved_config_space[16U];   struct hlist_head saved_cap_space;   struct bin_attribute *rom_attr;   int rom_attr_enabled;   struct bin_attribute *res_attr[17U];   struct bin_attribute *res_attr_wc[17U];   const struct attribute_group **msi_irq_groups;   struct pci_vpd *vpd;   union __anonunion____missing_field_name_282 __annonCompField63;   u16 ats_cap;   u8 ats_stu;   atomic_t ats_ref_cnt;   phys_addr_t rom;   size_t romlen;   char *driver_override; } ;   453     struct pci_ops ;   453     struct msi_controller ;   453     struct pci_bus {   struct list_head node;   struct pci_bus *parent;   struct list_head children;   struct list_head devices;   struct pci_dev *self;   struct list_head slots;   struct resource *resource[4U];   struct list_head resources;   struct resource busn_res;   struct pci_ops *ops;   struct msi_controller *msi;   void *sysdata;   struct proc_dir_entry *procdir;   unsigned char number;   unsigned char primary;   unsigned char max_bus_speed;   unsigned char cur_bus_speed;   char name[48U];   unsigned short bridge_ctl;   pci_bus_flags_t bus_flags;   struct device *bridge;   struct device dev;   struct bin_attribute *legacy_io;   struct bin_attribute *legacy_mem;   unsigned char is_added; } ;   577     struct pci_ops {   void * (*map_bus)(struct pci_bus *, unsigned int, int);   int (*read)(struct pci_bus *, unsigned int, int, int, u32 *);   int (*write)(struct pci_bus *, unsigned int, int, int, u32 ); } ;   605     struct pci_dynids {   spinlock_t lock;   struct list_head list; } ;   619     typedef unsigned int pci_ers_result_t;   629     struct pci_error_handlers {   pci_ers_result_t  (*error_detected)(struct pci_dev *, enum pci_channel_state );   pci_ers_result_t  (*mmio_enabled)(struct pci_dev *);   pci_ers_result_t  (*link_reset)(struct pci_dev *);   pci_ers_result_t  (*slot_reset)(struct pci_dev *);   void (*reset_notify)(struct pci_dev *, bool );   void (*resume)(struct pci_dev *); } ;   662     struct pci_driver {   struct list_head node;   const char *name;   const struct pci_device_id *id_table;   int (*probe)(struct pci_dev *, const struct pci_device_id *);   void (*remove)(struct pci_dev *);   int (*suspend)(struct pci_dev *, pm_message_t );   int (*suspend_late)(struct pci_dev *, pm_message_t );   int (*resume_early)(struct pci_dev *);   int (*resume)(struct pci_dev *);   void (*shutdown)(struct pci_dev *);   int (*sriov_configure)(struct pci_dev *, int);   const struct pci_error_handlers *err_handler;   struct device_driver driver;   struct pci_dynids dynids; } ;    93     struct shrink_control {   gfp_t gfp_mask;   unsigned long nr_to_scan;   int nid;   struct mem_cgroup *memcg; } ;    27     struct shrinker {   unsigned long int (*count_objects)(struct shrinker *, struct shrink_control *);   unsigned long int (*scan_objects)(struct shrinker *, struct shrink_control *);   int seeks;   long batch;   unsigned long flags;   struct list_head list;   atomic_long_t *nr_deferred; } ;    68     struct file_ra_state ;    69     struct writeback_control ;    70     struct bdi_writeback ;   226     struct vm_fault {   unsigned int flags;   gfp_t gfp_mask;   unsigned long pgoff;   void *virtual_address;   struct page *cow_page;   struct page *page;   unsigned long max_pgoff;   pte_t *pte; } ;   262     struct vm_operations_struct {   void (*open)(struct vm_area_struct *);   void (*close)(struct vm_area_struct *);   int (*mremap)(struct vm_area_struct *);   int (*fault)(struct vm_area_struct *, struct vm_fault *);   int (*pmd_fault)(struct vm_area_struct *, unsigned long, pmd_t *, unsigned int);   void (*map_pages)(struct vm_area_struct *, struct vm_fault *);   int (*page_mkwrite)(struct vm_area_struct *, struct vm_fault *);   int (*pfn_mkwrite)(struct vm_area_struct *, struct vm_fault *);   int (*access)(struct vm_area_struct *, unsigned long, void *, int, int);   const char * (*name)(struct vm_area_struct *);   int (*set_policy)(struct vm_area_struct *, struct mempolicy *);   struct mempolicy * (*get_policy)(struct vm_area_struct *, unsigned long);   struct page * (*find_special_page)(struct vm_area_struct *, unsigned long); } ;  1285     struct kvec ;  2365     struct scatterlist {   unsigned long sg_magic;   unsigned long page_link;   unsigned int offset;   unsigned int length;   dma_addr_t dma_address;   unsigned int dma_length; } ;    21     struct sg_table {   struct scatterlist *sgl;   unsigned int nents;   unsigned int orig_nents; } ;  1405     struct acpi_device ;  1405     struct pci_sysdata {   int domain;   int node;   struct acpi_device *companion;   void *iommu; } ;    34     struct dma_attrs {   unsigned long flags[1U]; } ;   158     struct dma_map_ops {   void * (*alloc)(struct device *, size_t , dma_addr_t *, gfp_t , struct dma_attrs *);   void (*free)(struct device *, size_t , void *, dma_addr_t , struct dma_attrs *);   int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t , size_t , struct dma_attrs *);   int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t , size_t , struct dma_attrs *);   dma_addr_t  (*map_page)(struct device *, struct page *, unsigned long, size_t , enum dma_data_direction , struct dma_attrs *);   void (*unmap_page)(struct device *, dma_addr_t , size_t , enum dma_data_direction , struct dma_attrs *);   int (*map_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction , struct dma_attrs *);   void (*unmap_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction , struct dma_attrs *);   void (*sync_single_for_cpu)(struct device *, dma_addr_t , size_t , enum dma_data_direction );   void (*sync_single_for_device)(struct device *, dma_addr_t , size_t , enum dma_data_direction );   void (*sync_sg_for_cpu)(struct device *, struct scatterlist *, int, enum dma_data_direction );   void (*sync_sg_for_device)(struct device *, struct scatterlist *, int, enum dma_data_direction );   int (*mapping_error)(struct device *, dma_addr_t );   int (*dma_supported)(struct device *, u64 );   int (*set_dma_mask)(struct device *, u64 );   int is_phys; } ;  1992     enum irqreturn {   IRQ_NONE = 0,   IRQ_HANDLED = 1,   IRQ_WAKE_THREAD = 2 } ;    16     typedef enum irqreturn irqreturn_t;    62     struct exception_table_entry {   int insn;   int fixup; } ;    54     struct __anonstruct_b_300 {   unsigned char data;   unsigned char error_feature;   unsigned char sector;   unsigned char nsector;   unsigned char lcyl;   unsigned char hcyl;   unsigned char select;   unsigned char status_command;   unsigned char data_hob;   unsigned char error_feature_hob;   unsigned char sector_hob;   unsigned char nsector_hob;   unsigned char lcyl_hob;   unsigned char hcyl_hob;   unsigned char select_hob;   unsigned char control_hob; } ;    54     union ide_reg_valid_s {   unsigned short all;   struct __anonstruct_b_300 b; } ;    57     typedef union ide_reg_valid_s ide_reg_valid_t;    58     struct ide_task_request_s {   __u8 io_ports[8U];   __u8 hob_ports[8U];   ide_reg_valid_t out_flags;   ide_reg_valid_t in_flags;   int data_phase;   int req_cmd;   unsigned long out_size;   unsigned long in_size; } ;    68     typedef struct ide_task_request_s ide_task_request_t;    82     struct hd_geometry {   unsigned char heads;   unsigned char sectors;   unsigned short cylinders;   unsigned long start; } ;   129     struct iovec {   void *iov_base;   __kernel_size_t iov_len; } ;    21     struct kvec {   void *iov_base;   size_t iov_len; } ;    27     union __anonunion____missing_field_name_301 {   const struct iovec *iov;   const struct kvec *kvec;   const struct bio_vec *bvec; } ;    27     struct iov_iter {   int type;   size_t iov_offset;   size_t count;   union __anonunion____missing_field_name_301 __annonCompField72;   unsigned long nr_segs; } ;    38     struct kiocb ;    81     struct hlist_bl_node ;    81     struct hlist_bl_head {   struct hlist_bl_node *first; } ;    36     struct hlist_bl_node {   struct hlist_bl_node *next;   struct hlist_bl_node **pprev; } ;   114     struct __anonstruct____missing_field_name_322 {   spinlock_t lock;   int count; } ;   114     union __anonunion____missing_field_name_321 {   struct __anonstruct____missing_field_name_322 __annonCompField73; } ;   114     struct lockref {   union __anonunion____missing_field_name_321 __annonCompField74; } ;    50     struct vfsmount ;    51     struct __anonstruct____missing_field_name_324 {   u32 hash;   u32 len; } ;    51     union __anonunion____missing_field_name_323 {   struct __anonstruct____missing_field_name_324 __annonCompField75;   u64 hash_len; } ;    51     struct qstr {   union __anonunion____missing_field_name_323 __annonCompField76;   const unsigned char *name; } ;    90     struct dentry_operations ;    90     union __anonunion_d_u_325 {   struct hlist_node d_alias;   struct callback_head d_rcu; } ;    90     struct dentry {   unsigned int d_flags;   seqcount_t d_seq;   struct hlist_bl_node d_hash;   struct dentry *d_parent;   struct qstr d_name;   struct inode *d_inode;   unsigned char d_iname[32U];   struct lockref d_lockref;   const struct dentry_operations *d_op;   struct super_block *d_sb;   unsigned long d_time;   void *d_fsdata;   struct list_head d_lru;   struct list_head d_child;   struct list_head d_subdirs;   union __anonunion_d_u_325 d_u; } ;   142     struct dentry_operations {   int (*d_revalidate)(struct dentry *, unsigned int);   int (*d_weak_revalidate)(struct dentry *, unsigned int);   int (*d_hash)(const struct dentry *, struct qstr *);   int (*d_compare)(const struct dentry *, const struct dentry *, unsigned int, const char *, const struct qstr *);   int (*d_delete)(const struct dentry *);   void (*d_release)(struct dentry *);   void (*d_prune)(struct dentry *);   void (*d_iput)(struct dentry *, struct inode *);   char * (*d_dname)(struct dentry *, char *, int);   struct vfsmount * (*d_automount)(struct path *);   int (*d_manage)(struct dentry *, bool );   struct inode * (*d_select_inode)(struct dentry *, unsigned int); } ;   586     struct path {   struct vfsmount *mnt;   struct dentry *dentry; } ;    27     struct list_lru_one {   struct list_head list;   long nr_items; } ;    32     struct list_lru_memcg {   struct list_lru_one *lru[0U]; } ;    37     struct list_lru_node {   spinlock_t lock;   struct list_lru_one lru;   struct list_lru_memcg *memcg_lrus; } ;    47     struct list_lru {   struct list_lru_node *node;   struct list_head list; } ;    67     struct __anonstruct____missing_field_name_329 {   struct radix_tree_node *parent;   void *private_data; } ;    67     union __anonunion____missing_field_name_328 {   struct __anonstruct____missing_field_name_329 __annonCompField77;   struct callback_head callback_head; } ;    67     struct radix_tree_node {   unsigned int path;   unsigned int count;   union __anonunion____missing_field_name_328 __annonCompField78;   struct list_head private_list;   void *slots[64U];   unsigned long tags[3U][1U]; } ;   114     struct radix_tree_root {   unsigned int height;   gfp_t gfp_mask;   struct radix_tree_node *rnode; } ;   437     struct semaphore {   raw_spinlock_t lock;   unsigned int count;   struct list_head wait_list; } ;    45     struct fiemap_extent {   __u64 fe_logical;   __u64 fe_physical;   __u64 fe_length;   __u64 fe_reserved64[2U];   __u32 fe_flags;   __u32 fe_reserved[3U]; } ;    38     enum migrate_mode {   MIGRATE_ASYNC = 0,   MIGRATE_SYNC_LIGHT = 1,   MIGRATE_SYNC = 2 } ;    44     struct bio_set ;    45     struct bio ;    46     struct bio_integrity_payload ;    47     struct block_device ;    17     typedef void bio_end_io_t(struct bio *);    19     struct bio_vec {   struct page *bv_page;   unsigned int bv_len;   unsigned int bv_offset; } ;    28     struct bvec_iter {   sector_t bi_sector;   unsigned int bi_size;   unsigned int bi_idx;   unsigned int bi_bvec_done; } ;    40     union __anonunion____missing_field_name_334 {   struct bio_integrity_payload *bi_integrity; } ;    40     struct bio {   struct bio *bi_next;   struct block_device *bi_bdev;   unsigned int bi_flags;   int bi_error;   unsigned long bi_rw;   struct bvec_iter bi_iter;   unsigned int bi_phys_segments;   unsigned int bi_seg_front_size;   unsigned int bi_seg_back_size;   atomic_t __bi_remaining;   bio_end_io_t *bi_end_io;   void *bi_private;   struct io_context *bi_ioc;   struct cgroup_subsys_state *bi_css;   union __anonunion____missing_field_name_334 __annonCompField79;   unsigned short bi_vcnt;   unsigned short bi_max_vecs;   atomic_t __bi_cnt;   struct bio_vec *bi_io_vec;   struct bio_set *bi_pool;   struct bio_vec bi_inline_vecs[0U]; } ;   245     typedef unsigned int blk_qc_t;   268     struct delayed_call {   void (*fn)(void *);   void *arg; } ;   162     struct export_operations ;   163     struct poll_table_struct ;   164     struct kstatfs ;   165     struct swap_info_struct ;    76     struct iattr {   unsigned int ia_valid;   umode_t ia_mode;   kuid_t ia_uid;   kgid_t ia_gid;   loff_t ia_size;   struct timespec ia_atime;   struct timespec ia_mtime;   struct timespec ia_ctime;   struct file *ia_file; } ;   212     struct dquot ;    19     typedef __kernel_uid32_t projid_t;    23     struct __anonstruct_kprojid_t_335 {   projid_t val; } ;    23     typedef struct __anonstruct_kprojid_t_335 kprojid_t;   166     enum quota_type {   USRQUOTA = 0,   GRPQUOTA = 1,   PRJQUOTA = 2 } ;    66     typedef long long qsize_t;    67     union __anonunion____missing_field_name_336 {   kuid_t uid;   kgid_t gid;   kprojid_t projid; } ;    67     struct kqid {   union __anonunion____missing_field_name_336 __annonCompField80;   enum quota_type type; } ;   184     struct mem_dqblk {   qsize_t dqb_bhardlimit;   qsize_t dqb_bsoftlimit;   qsize_t dqb_curspace;   qsize_t dqb_rsvspace;   qsize_t dqb_ihardlimit;   qsize_t dqb_isoftlimit;   qsize_t dqb_curinodes;   time_t dqb_btime;   time_t dqb_itime; } ;   206     struct quota_format_type ;   207     struct mem_dqinfo {   struct quota_format_type *dqi_format;   int dqi_fmt_id;   struct list_head dqi_dirty_list;   unsigned long dqi_flags;   unsigned int dqi_bgrace;   unsigned int dqi_igrace;   qsize_t dqi_max_spc_limit;   qsize_t dqi_max_ino_limit;   void *dqi_priv; } ;   272     struct dquot {   struct hlist_node dq_hash;   struct list_head dq_inuse;   struct list_head dq_free;   struct list_head dq_dirty;   struct mutex dq_lock;   atomic_t dq_count;   wait_queue_head_t dq_wait_unused;   struct super_block *dq_sb;   struct kqid dq_id;   loff_t dq_off;   unsigned long dq_flags;   struct mem_dqblk dq_dqb; } ;   299     struct quota_format_ops {   int (*check_quota_file)(struct super_block *, int);   int (*read_file_info)(struct super_block *, int);   int (*write_file_info)(struct super_block *, int);   int (*free_file_info)(struct super_block *, int);   int (*read_dqblk)(struct dquot *);   int (*commit_dqblk)(struct dquot *);   int (*release_dqblk)(struct dquot *); } ;   310     struct dquot_operations {   int (*write_dquot)(struct dquot *);   struct dquot * (*alloc_dquot)(struct super_block *, int);   void (*destroy_dquot)(struct dquot *);   int (*acquire_dquot)(struct dquot *);   int (*release_dquot)(struct dquot *);   int (*mark_dirty)(struct dquot *);   int (*write_info)(struct super_block *, int);   qsize_t * (*get_reserved_space)(struct inode *);   int (*get_projid)(struct inode *, kprojid_t *); } ;   325     struct qc_dqblk {   int d_fieldmask;   u64 d_spc_hardlimit;   u64 d_spc_softlimit;   u64 d_ino_hardlimit;   u64 d_ino_softlimit;   u64 d_space;   u64 d_ino_count;   s64 d_ino_timer;   s64 d_spc_timer;   int d_ino_warns;   int d_spc_warns;   u64 d_rt_spc_hardlimit;   u64 d_rt_spc_softlimit;   u64 d_rt_space;   s64 d_rt_spc_timer;   int d_rt_spc_warns; } ;   348     struct qc_type_state {   unsigned int flags;   unsigned int spc_timelimit;   unsigned int ino_timelimit;   unsigned int rt_spc_timelimit;   unsigned int spc_warnlimit;   unsigned int ino_warnlimit;   unsigned int rt_spc_warnlimit;   unsigned long long ino;   blkcnt_t blocks;   blkcnt_t nextents; } ;   394     struct qc_state {   unsigned int s_incoredqs;   struct qc_type_state s_state[3U]; } ;   405     struct qc_info {   int i_fieldmask;   unsigned int i_flags;   unsigned int i_spc_timelimit;   unsigned int i_ino_timelimit;   unsigned int i_rt_spc_timelimit;   unsigned int i_spc_warnlimit;   unsigned int i_ino_warnlimit;   unsigned int i_rt_spc_warnlimit; } ;   418     struct quotactl_ops {   int (*quota_on)(struct super_block *, int, int, struct path *);   int (*quota_off)(struct super_block *, int);   int (*quota_enable)(struct super_block *, unsigned int);   int (*quota_disable)(struct super_block *, unsigned int);   int (*quota_sync)(struct super_block *, int);   int (*set_info)(struct super_block *, int, struct qc_info *);   int (*get_dqblk)(struct super_block *, struct kqid , struct qc_dqblk *);   int (*set_dqblk)(struct super_block *, struct kqid , struct qc_dqblk *);   int (*get_state)(struct super_block *, struct qc_state *);   int (*rm_xquota)(struct super_block *, unsigned int); } ;   432     struct quota_format_type {   int qf_fmt_id;   const struct quota_format_ops *qf_ops;   struct module *qf_owner;   struct quota_format_type *qf_next; } ;   496     struct quota_info {   unsigned int flags;   struct mutex dqio_mutex;   struct mutex dqonoff_mutex;   struct inode *files[3U];   struct mem_dqinfo info[3U];   const struct quota_format_ops *ops[3U]; } ;   526     struct kiocb {   struct file *ki_filp;   loff_t ki_pos;   void (*ki_complete)(struct kiocb *, long, long);   void *private;   int ki_flags; } ;   367     struct address_space_operations {   int (*writepage)(struct page *, struct writeback_control *);   int (*readpage)(struct file *, struct page *);   int (*writepages)(struct address_space *, struct writeback_control *);   int (*set_page_dirty)(struct page *);   int (*readpages)(struct file *, struct address_space *, struct list_head *, unsigned int);   int (*write_begin)(struct file *, struct address_space *, loff_t , unsigned int, unsigned int, struct page **, void **);   int (*write_end)(struct file *, struct address_space *, loff_t , unsigned int, unsigned int, struct page *, void *);   sector_t  (*bmap)(struct address_space *, sector_t );   void (*invalidatepage)(struct page *, unsigned int, unsigned int);   int (*releasepage)(struct page *, gfp_t );   void (*freepage)(struct page *);   ssize_t  (*direct_IO)(struct kiocb *, struct iov_iter *, loff_t );   int (*migratepage)(struct address_space *, struct page *, struct page *, enum migrate_mode );   int (*launder_page)(struct page *);   int (*is_partially_uptodate)(struct page *, unsigned long, unsigned long);   void (*is_dirty_writeback)(struct page *, bool *, bool *);   int (*error_remove_page)(struct address_space *, struct page *);   int (*swap_activate)(struct swap_info_struct *, struct file *, sector_t *);   void (*swap_deactivate)(struct file *); } ;   424     struct address_space {   struct inode *host;   struct radix_tree_root page_tree;   spinlock_t tree_lock;   atomic_t i_mmap_writable;   struct rb_root i_mmap;   struct rw_semaphore i_mmap_rwsem;   unsigned long nrpages;   unsigned long nrexceptional;   unsigned long writeback_index;   const struct address_space_operations *a_ops;   unsigned long flags;   spinlock_t private_lock;   struct list_head private_list;   void *private_data; } ;   445     struct request_queue ;   446     struct hd_struct ;   446     struct gendisk ;   446     struct block_device {   dev_t bd_dev;   int bd_openers;   struct inode *bd_inode;   struct super_block *bd_super;   struct mutex bd_mutex;   struct list_head bd_inodes;   void *bd_claiming;   void *bd_holder;   int bd_holders;   bool bd_write_holder;   struct list_head bd_holder_disks;   struct block_device *bd_contains;   unsigned int bd_block_size;   struct hd_struct *bd_part;   unsigned int bd_part_count;   int bd_invalidated;   struct gendisk *bd_disk;   struct request_queue *bd_queue;   struct list_head bd_list;   unsigned long bd_private;   int bd_fsfreeze_count;   struct mutex bd_fsfreeze_mutex;   int bd_map_count; } ;   565     struct posix_acl ;   566     struct inode_operations ;   566     union __anonunion____missing_field_name_341 {   const unsigned int i_nlink;   unsigned int __i_nlink; } ;   566     union __anonunion____missing_field_name_342 {   struct hlist_head i_dentry;   struct callback_head i_rcu; } ;   566     struct file_lock_context ;   566     struct cdev ;   566     union __anonunion____missing_field_name_343 {   struct pipe_inode_info *i_pipe;   struct block_device *i_bdev;   struct cdev *i_cdev;   char *i_link; } ;   566     struct inode {   umode_t i_mode;   unsigned short i_opflags;   kuid_t i_uid;   kgid_t i_gid;   unsigned int i_flags;   struct posix_acl *i_acl;   struct posix_acl *i_default_acl;   const struct inode_operations *i_op;   struct super_block *i_sb;   struct address_space *i_mapping;   void *i_security;   unsigned long i_ino;   union __anonunion____missing_field_name_341 __annonCompField81;   dev_t i_rdev;   loff_t i_size;   struct timespec i_atime;   struct timespec i_mtime;   struct timespec i_ctime;   spinlock_t i_lock;   unsigned short i_bytes;   unsigned int i_blkbits;   blkcnt_t i_blocks;   unsigned long i_state;   struct mutex i_mutex;   unsigned long dirtied_when;   unsigned long dirtied_time_when;   struct hlist_node i_hash;   struct list_head i_io_list;   struct bdi_writeback *i_wb;   int i_wb_frn_winner;   u16 i_wb_frn_avg_time;   u16 i_wb_frn_history;   struct list_head i_lru;   struct list_head i_sb_list;   union __anonunion____missing_field_name_342 __annonCompField82;   u64 i_version;   atomic_t i_count;   atomic_t i_dio_count;   atomic_t i_writecount;   atomic_t i_readcount;   const struct file_operations *i_fop;   struct file_lock_context *i_flctx;   struct address_space i_data;   struct list_head i_devices;   union __anonunion____missing_field_name_343 __annonCompField83;   __u32 i_generation;   __u32 i_fsnotify_mask;   struct hlist_head i_fsnotify_marks;   void *i_private; } ;   837     struct fown_struct {   rwlock_t lock;   struct pid *pid;   enum pid_type pid_type;   kuid_t uid;   kuid_t euid;   int signum; } ;   845     struct file_ra_state {   unsigned long start;   unsigned int size;   unsigned int async_size;   unsigned int ra_pages;   unsigned int mmap_miss;   loff_t prev_pos; } ;   868     union __anonunion_f_u_344 {   struct llist_node fu_llist;   struct callback_head fu_rcuhead; } ;   868     struct file {   union __anonunion_f_u_344 f_u;   struct path f_path;   struct inode *f_inode;   const struct file_operations *f_op;   spinlock_t f_lock;   atomic_long_t f_count;   unsigned int f_flags;   fmode_t f_mode;   struct mutex f_pos_lock;   loff_t f_pos;   struct fown_struct f_owner;   const struct cred *f_cred;   struct file_ra_state f_ra;   u64 f_version;   void *f_security;   void *private_data;   struct list_head f_ep_links;   struct list_head f_tfile_llink;   struct address_space *f_mapping; } ;   953     typedef void *fl_owner_t;   954     struct file_lock ;   955     struct file_lock_operations {   void (*fl_copy_lock)(struct file_lock *, struct file_lock *);   void (*fl_release_private)(struct file_lock *); } ;   961     struct lock_manager_operations {   int (*lm_compare_owner)(struct file_lock *, struct file_lock *);   unsigned long int (*lm_owner_key)(struct file_lock *);   fl_owner_t  (*lm_get_owner)(fl_owner_t );   void (*lm_put_owner)(fl_owner_t );   void (*lm_notify)(struct file_lock *);   int (*lm_grant)(struct file_lock *, int);   bool  (*lm_break)(struct file_lock *);   int (*lm_change)(struct file_lock *, int, struct list_head *);   void (*lm_setup)(struct file_lock *, void **); } ;   988     struct nlm_lockowner ;   989     struct nfs_lock_info {   u32 state;   struct nlm_lockowner *owner;   struct list_head list; } ;    14     struct nfs4_lock_state ;    15     struct nfs4_lock_info {   struct nfs4_lock_state *owner; } ;    19     struct fasync_struct ;    19     struct __anonstruct_afs_346 {   struct list_head link;   int state; } ;    19     union __anonunion_fl_u_345 {   struct nfs_lock_info nfs_fl;   struct nfs4_lock_info nfs4_fl;   struct __anonstruct_afs_346 afs; } ;    19     struct file_lock {   struct file_lock *fl_next;   struct list_head fl_list;   struct hlist_node fl_link;   struct list_head fl_block;   fl_owner_t fl_owner;   unsigned int fl_flags;   unsigned char fl_type;   unsigned int fl_pid;   int fl_link_cpu;   struct pid *fl_nspid;   wait_queue_head_t fl_wait;   struct file *fl_file;   loff_t fl_start;   loff_t fl_end;   struct fasync_struct *fl_fasync;   unsigned long fl_break_time;   unsigned long fl_downgrade_time;   const struct file_lock_operations *fl_ops;   const struct lock_manager_operations *fl_lmops;   union __anonunion_fl_u_345 fl_u; } ;  1041     struct file_lock_context {   spinlock_t flc_lock;   struct list_head flc_flock;   struct list_head flc_posix;   struct list_head flc_lease; } ;  1244     struct fasync_struct {   spinlock_t fa_lock;   int magic;   int fa_fd;   struct fasync_struct *fa_next;   struct file *fa_file;   struct callback_head fa_rcu; } ;  1279     struct sb_writers {   int frozen;   wait_queue_head_t wait_unfrozen;   struct percpu_rw_semaphore rw_sem[3U]; } ;  1305     struct super_operations ;  1305     struct xattr_handler ;  1305     struct mtd_info ;  1305     struct super_block {   struct list_head s_list;   dev_t s_dev;   unsigned char s_blocksize_bits;   unsigned long s_blocksize;   loff_t s_maxbytes;   struct file_system_type *s_type;   const struct super_operations *s_op;   const struct dquot_operations *dq_op;   const struct quotactl_ops *s_qcop;   const struct export_operations *s_export_op;   unsigned long s_flags;   unsigned long s_iflags;   unsigned long s_magic;   struct dentry *s_root;   struct rw_semaphore s_umount;   int s_count;   atomic_t s_active;   void *s_security;   const struct xattr_handler **s_xattr;   struct hlist_bl_head s_anon;   struct list_head s_mounts;   struct block_device *s_bdev;   struct backing_dev_info *s_bdi;   struct mtd_info *s_mtd;   struct hlist_node s_instances;   unsigned int s_quota_types;   struct quota_info s_dquot;   struct sb_writers s_writers;   char s_id[32U];   u8 s_uuid[16U];   void *s_fs_info;   unsigned int s_max_links;   fmode_t s_mode;   u32 s_time_gran;   struct mutex s_vfs_rename_mutex;   char *s_subtype;   char *s_options;   const struct dentry_operations *s_d_op;   int cleancache_poolid;   struct shrinker s_shrink;   atomic_long_t s_remove_count;   int s_readonly_remount;   struct workqueue_struct *s_dio_done_wq;   struct hlist_head s_pins;   struct list_lru s_dentry_lru;   struct list_lru s_inode_lru;   struct callback_head rcu;   struct work_struct destroy_work;   struct mutex s_sync_lock;   int s_stack_depth;   spinlock_t s_inode_list_lock;   struct list_head s_inodes; } ;  1554     struct fiemap_extent_info {   unsigned int fi_flags;   unsigned int fi_extents_mapped;   unsigned int fi_extents_max;   struct fiemap_extent *fi_extents_start; } ;  1568     struct dir_context ;  1593     struct dir_context {   int (*actor)(struct dir_context *, const char *, int, loff_t , u64 , unsigned int);   loff_t pos; } ;  1599     struct block_device_operations ;  1600     struct file_operations {   struct module *owner;   loff_t  (*llseek)(struct file *, loff_t , int);   ssize_t  (*read)(struct file *, char *, size_t , loff_t *);   ssize_t  (*write)(struct file *, const char *, size_t , loff_t *);   ssize_t  (*read_iter)(struct kiocb *, struct iov_iter *);   ssize_t  (*write_iter)(struct kiocb *, struct iov_iter *);   int (*iterate)(struct file *, struct dir_context *);   unsigned int (*poll)(struct file *, struct poll_table_struct *);   long int (*unlocked_ioctl)(struct file *, unsigned int, unsigned long);   long int (*compat_ioctl)(struct file *, unsigned int, unsigned long);   int (*mmap)(struct file *, struct vm_area_struct *);   int (*open)(struct inode *, struct file *);   int (*flush)(struct file *, fl_owner_t );   int (*release)(struct inode *, struct file *);   int (*fsync)(struct file *, loff_t , loff_t , int);   int (*aio_fsync)(struct kiocb *, int);   int (*fasync)(int, struct file *, int);   int (*lock)(struct file *, int, struct file_lock *);   ssize_t  (*sendpage)(struct file *, struct page *, int, size_t , loff_t *, int);   unsigned long int (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);   int (*check_flags)(int);   int (*flock)(struct file *, int, struct file_lock *);   ssize_t  (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t , unsigned int);   ssize_t  (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t , unsigned int);   int (*setlease)(struct file *, long, struct file_lock **, void **);   long int (*fallocate)(struct file *, int, loff_t , loff_t );   void (*show_fdinfo)(struct seq_file *, struct file *);   ssize_t  (*copy_file_range)(struct file *, loff_t , struct file *, loff_t , size_t , unsigned int);   int (*clone_file_range)(struct file *, loff_t , struct file *, loff_t , u64 );   ssize_t  (*dedupe_file_range)(struct file *, u64 , u64 , struct file *, u64 ); } ;  1668     struct inode_operations {   struct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int);   const char * (*get_link)(struct dentry *, struct inode *, struct delayed_call *);   int (*permission)(struct inode *, int);   struct posix_acl * (*get_acl)(struct inode *, int);   int (*readlink)(struct dentry *, char *, int);   int (*create)(struct inode *, struct dentry *, umode_t , bool );   int (*link)(struct dentry *, struct inode *, struct dentry *);   int (*unlink)(struct inode *, struct dentry *);   int (*symlink)(struct inode *, struct dentry *, const char *);   int (*mkdir)(struct inode *, struct dentry *, umode_t );   int (*rmdir)(struct inode *, struct dentry *);   int (*mknod)(struct inode *, struct dentry *, umode_t , dev_t );   int (*rename)(struct inode *, struct dentry *, struct inode *, struct dentry *);   int (*rename2)(struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);   int (*setattr)(struct dentry *, struct iattr *);   int (*getattr)(struct vfsmount *, struct dentry *, struct kstat *);   int (*setxattr)(struct dentry *, const char *, const void *, size_t , int);   ssize_t  (*getxattr)(struct dentry *, const char *, void *, size_t );   ssize_t  (*listxattr)(struct dentry *, char *, size_t );   int (*removexattr)(struct dentry *, const char *);   int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 , u64 );   int (*update_time)(struct inode *, struct timespec *, int);   int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned int, umode_t , int *);   int (*tmpfile)(struct inode *, struct dentry *, umode_t );   int (*set_acl)(struct inode *, struct posix_acl *, int); } ;  1723     struct super_operations {   struct inode * (*alloc_inode)(struct super_block *);   void (*destroy_inode)(struct inode *);   void (*dirty_inode)(struct inode *, int);   int (*write_inode)(struct inode *, struct writeback_control *);   int (*drop_inode)(struct inode *);   void (*evict_inode)(struct inode *);   void (*put_super)(struct super_block *);   int (*sync_fs)(struct super_block *, int);   int (*freeze_super)(struct super_block *);   int (*freeze_fs)(struct super_block *);   int (*thaw_super)(struct super_block *);   int (*unfreeze_fs)(struct super_block *);   int (*statfs)(struct dentry *, struct kstatfs *);   int (*remount_fs)(struct super_block *, int *, char *);   void (*umount_begin)(struct super_block *);   int (*show_options)(struct seq_file *, struct dentry *);   int (*show_devname)(struct seq_file *, struct dentry *);   int (*show_path)(struct seq_file *, struct dentry *);   int (*show_stats)(struct seq_file *, struct dentry *);   ssize_t  (*quota_read)(struct super_block *, int, char *, size_t , loff_t );   ssize_t  (*quota_write)(struct super_block *, int, const char *, size_t , loff_t );   struct dquot ** (*get_dquots)(struct inode *);   int (*bdev_try_to_free_page)(struct super_block *, struct page *, gfp_t );   long int (*nr_cached_objects)(struct super_block *, struct shrink_control *);   long int (*free_cached_objects)(struct super_block *, struct shrink_control *); } ;  1962     struct file_system_type {   const char *name;   int fs_flags;   struct dentry * (*mount)(struct file_system_type *, int, const char *, void *);   void (*kill_sb)(struct super_block *);   struct module *owner;   struct file_system_type *next;   struct hlist_head fs_supers;   struct lock_class_key s_lock_key;   struct lock_class_key s_umount_key;   struct lock_class_key s_vfs_rename_key;   struct lock_class_key s_writers_key[3U];   struct lock_class_key i_lock_key;   struct lock_class_key i_mutex_key;   struct lock_class_key i_mutex_dir_key; } ;    18     typedef s32 compat_time_t;    39     typedef s32 compat_long_t;    42     typedef u32 compat_ulong_t;    44     typedef u32 compat_uptr_t;    45     struct compat_timespec {   compat_time_t tv_sec;   s32 tv_nsec; } ;   276     struct compat_robust_list {   compat_uptr_t next; } ;   280     struct compat_robust_list_head {   struct compat_robust_list list;   compat_long_t futex_offset;   compat_uptr_t list_op_pending; } ;    15     typedef __u64 Elf64_Addr;    16     typedef __u16 Elf64_Half;    20     typedef __u32 Elf64_Word;    21     typedef __u64 Elf64_Xword;   190     struct elf64_sym {   Elf64_Word st_name;   unsigned char st_info;   unsigned char st_other;   Elf64_Half st_shndx;   Elf64_Addr st_value;   Elf64_Xword st_size; } ;   198     typedef struct elf64_sym Elf64_Sym;    53     struct kernel_param ;    58     struct kernel_param_ops {   unsigned int flags;   int (*set)(const char *, const struct kernel_param *);   int (*get)(char *, const struct kernel_param *);   void (*free)(void *); } ;    62     struct kparam_string ;    62     struct kparam_array ;    62     union __anonunion____missing_field_name_365 {   void *arg;   const struct kparam_string *str;   const struct kparam_array *arr; } ;    62     struct kernel_param {   const char *name;   struct module *mod;   const struct kernel_param_ops *ops;   const u16 perm;   s8 level;   u8 flags;   union __anonunion____missing_field_name_365 __annonCompField84; } ;    83     struct kparam_string {   unsigned int maxlen;   char *string; } ;    89     struct kparam_array {   unsigned int max;   unsigned int elemsize;   unsigned int *num;   const struct kernel_param_ops *ops;   void *elem; } ;   470     struct latch_tree_node {   struct rb_node node[2U]; } ;   211     struct mod_arch_specific { } ;    38     struct module_param_attrs ;    38     struct module_kobject {   struct kobject kobj;   struct module *mod;   struct kobject *drivers_dir;   struct module_param_attrs *mp;   struct completion *kobj_completion; } ;    48     struct module_attribute {   struct attribute attr;   ssize_t  (*show)(struct module_attribute *, struct module_kobject *, char *);   ssize_t  (*store)(struct module_attribute *, struct module_kobject *, const char *, size_t );   void (*setup)(struct module *, const char *);   int (*test)(struct module *);   void (*free)(struct module *); } ;   290     enum module_state {   MODULE_STATE_LIVE = 0,   MODULE_STATE_COMING = 1,   MODULE_STATE_GOING = 2,   MODULE_STATE_UNFORMED = 3 } ;   297     struct mod_tree_node {   struct module *mod;   struct latch_tree_node node; } ;   304     struct module_layout {   void *base;   unsigned int size;   unsigned int text_size;   unsigned int ro_size;   struct mod_tree_node mtn; } ;   318     struct module_sect_attrs ;   318     struct module_notes_attrs ;   318     struct trace_event_call ;   318     struct trace_enum_map ;   318     struct module {   enum module_state state;   struct list_head list;   char name[56U];   struct module_kobject mkobj;   struct module_attribute *modinfo_attrs;   const char *version;   const char *srcversion;   struct kobject *holders_dir;   const struct kernel_symbol *syms;   const unsigned long *crcs;   unsigned int num_syms;   struct mutex param_lock;   struct kernel_param *kp;   unsigned int num_kp;   unsigned int num_gpl_syms;   const struct kernel_symbol *gpl_syms;   const unsigned long *gpl_crcs;   const struct kernel_symbol *unused_syms;   const unsigned long *unused_crcs;   unsigned int num_unused_syms;   unsigned int num_unused_gpl_syms;   const struct kernel_symbol *unused_gpl_syms;   const unsigned long *unused_gpl_crcs;   bool sig_ok;   bool async_probe_requested;   const struct kernel_symbol *gpl_future_syms;   const unsigned long *gpl_future_crcs;   unsigned int num_gpl_future_syms;   unsigned int num_exentries;   struct exception_table_entry *extable;   int (*init)();   struct module_layout core_layout;   struct module_layout init_layout;   struct mod_arch_specific arch;   unsigned int taints;   unsigned int num_bugs;   struct list_head bug_list;   struct bug_entry *bug_table;   Elf64_Sym *symtab;   Elf64_Sym *core_symtab;   unsigned int num_symtab;   unsigned int core_num_syms;   char *strtab;   char *core_strtab;   struct module_sect_attrs *sect_attrs;   struct module_notes_attrs *notes_attrs;   char *args;   void *percpu;   unsigned int percpu_size;   unsigned int num_tracepoints;   const struct tracepoint **tracepoints_ptrs;   unsigned int num_trace_bprintk_fmt;   const char **trace_bprintk_fmt_start;   struct trace_event_call **trace_events;   unsigned int num_trace_events;   struct trace_enum_map **trace_enums;   unsigned int num_trace_enums;   bool klp_alive;   struct list_head source_list;   struct list_head target_list;   void (*exit)();   atomic_t refcnt;   ctor_fn_t  (**ctors)();   unsigned int num_ctors; } ;    81     struct disk_stats {   unsigned long sectors[2U];   unsigned long ios[2U];   unsigned long merges[2U];   unsigned long ticks[2U];   unsigned long io_ticks;   unsigned long time_in_queue; } ;    90     struct partition_meta_info {   char uuid[37U];   u8 volname[64U]; } ;   102     struct hd_struct {   sector_t start_sect;   sector_t nr_sects;   seqcount_t nr_sects_seq;   sector_t alignment_offset;   unsigned int discard_alignment;   struct device __dev;   struct kobject *holder_dir;   int policy;   int partno;   struct partition_meta_info *info;   int make_it_fail;   unsigned long stamp;   atomic_t in_flight[2U];   struct disk_stats *dkstats;   struct percpu_ref ref;   struct callback_head callback_head; } ;   156     struct disk_part_tbl {   struct callback_head callback_head;   int len;   struct hd_struct *last_lookup;   struct hd_struct *part[]; } ;   163     struct disk_events ;   164     struct badblocks ;   165     struct blk_integrity_profile ;   165     struct blk_integrity {   struct blk_integrity_profile *profile;   unsigned char flags;   unsigned char tuple_size;   unsigned char interval_exp;   unsigned char tag_size; } ;   176     struct timer_rand_state ;   176     struct gendisk {   int major;   int first_minor;   int minors;   char disk_name[32U];   char * (*devnode)(struct gendisk *, umode_t *);   unsigned int events;   unsigned int async_events;   struct disk_part_tbl *part_tbl;   struct hd_struct part0;   const struct block_device_operations *fops;   struct request_queue *queue;   void *private_data;   int flags;   struct device *driverfs_dev;   struct kobject *slave_dir;   struct timer_rand_state *random;   atomic_t sync_io;   struct disk_events *ev;   struct kobject integrity_kobj;   int node_id;   struct badblocks *bb; } ;    72     struct fprop_local_percpu {   struct percpu_counter events;   unsigned int period;   raw_spinlock_t lock; } ;    32     typedef int congested_fn(void *, int);    41     struct bdi_writeback_congested {   unsigned long state;   atomic_t refcnt;   struct backing_dev_info *bdi;   int blkcg_id;   struct rb_node rb_node; } ;    60     union __anonunion____missing_field_name_372 {   struct work_struct release_work;   struct callback_head rcu; } ;    60     struct bdi_writeback {   struct backing_dev_info *bdi;   unsigned long state;   unsigned long last_old_flush;   struct list_head b_dirty;   struct list_head b_io;   struct list_head b_more_io;   struct list_head b_dirty_time;   spinlock_t list_lock;   struct percpu_counter stat[4U];   struct bdi_writeback_congested *congested;   unsigned long bw_time_stamp;   unsigned long dirtied_stamp;   unsigned long written_stamp;   unsigned long write_bandwidth;   unsigned long avg_write_bandwidth;   unsigned long dirty_ratelimit;   unsigned long balanced_dirty_ratelimit;   struct fprop_local_percpu completions;   int dirty_exceeded;   spinlock_t work_lock;   struct list_head work_list;   struct delayed_work dwork;   struct list_head bdi_node;   struct percpu_ref refcnt;   struct fprop_local_percpu memcg_completions;   struct cgroup_subsys_state *memcg_css;   struct cgroup_subsys_state *blkcg_css;   struct list_head memcg_node;   struct list_head blkcg_node;   union __anonunion____missing_field_name_372 __annonCompField85; } ;   134     struct backing_dev_info {   struct list_head bdi_list;   unsigned long ra_pages;   unsigned int capabilities;   congested_fn *congested_fn;   void *congested_data;   char *name;   unsigned int min_ratio;   unsigned int max_ratio;   unsigned int max_prop_frac;   atomic_long_t tot_write_bandwidth;   struct bdi_writeback wb;   struct list_head wb_list;   struct radix_tree_root cgwb_tree;   struct rb_root cgwb_congested_tree;   atomic_t usage_cnt;   wait_queue_head_t wb_waitq;   struct device *dev;   struct timer_list laptop_mode_wb_timer;   struct dentry *debug_dir;   struct dentry *debug_stats; } ;    11     typedef void * mempool_alloc_t(gfp_t , void *);    12     typedef void mempool_free_t(void *, void *);    13     struct mempool_s {   spinlock_t lock;   int min_nr;   int curr_nr;   void **elements;   void *pool_data;   mempool_alloc_t *alloc;   mempool_free_t *free;   wait_queue_head_t wait; } ;    24     typedef struct mempool_s mempool_t;    78     union __anonunion____missing_field_name_373 {   struct list_head q_node;   struct kmem_cache *__rcu_icq_cache; } ;    78     union __anonunion____missing_field_name_374 {   struct hlist_node ioc_node;   struct callback_head __rcu_head; } ;    78     struct io_cq {   struct request_queue *q;   struct io_context *ioc;   union __anonunion____missing_field_name_373 __annonCompField86;   union __anonunion____missing_field_name_374 __annonCompField87;   unsigned int flags; } ;    92     struct io_context {   atomic_long_t refcount;   atomic_t active_ref;   atomic_t nr_tasks;   spinlock_t lock;   unsigned short ioprio;   int nr_batch_requests;   unsigned long last_waited;   struct radix_tree_root icq_tree;   struct io_cq *icq_hint;   struct hlist_head icq_list;   struct work_struct release_work; } ;   320     struct bio_integrity_payload {   struct bio *bip_bio;   struct bvec_iter bip_iter;   bio_end_io_t *bip_end_io;   unsigned short bip_slab;   unsigned short bip_vcnt;   unsigned short bip_max_vcnt;   unsigned short bip_flags;   struct work_struct bip_work;   struct bio_vec *bip_vec;   struct bio_vec bip_inline_vecs[0U]; } ;   551     struct bio_list {   struct bio *head;   struct bio *tail; } ;   672     struct bio_set {   struct kmem_cache *bio_slab;   unsigned int front_pad;   mempool_t *bio_pool;   mempool_t *bvec_pool;   mempool_t *bio_integrity_pool;   mempool_t *bvec_integrity_pool;   spinlock_t rescue_lock;   struct bio_list rescue_list;   struct work_struct rescue_work;   struct workqueue_struct *rescue_workqueue; } ;    64     struct bsg_class_device {   struct device *class_dev;   struct device *parent;   int minor;   struct request_queue *queue;   struct kref ref;   void (*release)(struct device *); } ;    22     struct elevator_queue ;    24     struct request ;    26     struct bsg_job ;    27     struct blkcg_gq ;    28     struct blk_flush_queue ;    29     struct pr_ops ;    51     typedef void rq_end_io_fn(struct request *, int);    52     struct request_list {   struct request_queue *q;   struct blkcg_gq *blkg;   int count[2U];   int starved[2U];   mempool_t *rq_pool;   wait_queue_head_t wait[2U];   unsigned int flags; } ;    77     union __anonunion____missing_field_name_375 {   struct call_single_data csd;   unsigned long fifo_time; } ;    77     struct blk_mq_ctx ;    77     union __anonunion____missing_field_name_376 {   struct hlist_node hash;   struct list_head ipi_list; } ;    77     union __anonunion____missing_field_name_377 {   struct rb_node rb_node;   void *completion_data; } ;    77     struct __anonstruct_elv_379 {   struct io_cq *icq;   void *priv[2U]; } ;    77     struct __anonstruct_flush_380 {   unsigned int seq;   struct list_head list;   rq_end_io_fn *saved_end_io; } ;    77     union __anonunion____missing_field_name_378 {   struct __anonstruct_elv_379 elv;   struct __anonstruct_flush_380 flush; } ;    77     struct request {   struct list_head queuelist;   union __anonunion____missing_field_name_375 __annonCompField88;   struct request_queue *q;   struct blk_mq_ctx *mq_ctx;   u64 cmd_flags;   unsigned int cmd_type;   unsigned long atomic_flags;   int cpu;   unsigned int __data_len;   sector_t __sector;   struct bio *bio;   struct bio *biotail;   union __anonunion____missing_field_name_376 __annonCompField89;   union __anonunion____missing_field_name_377 __annonCompField90;   union __anonunion____missing_field_name_378 __annonCompField91;   struct gendisk *rq_disk;   struct hd_struct *part;   unsigned long start_time;   struct request_list *rl;   unsigned long long start_time_ns;   unsigned long long io_start_time_ns;   unsigned short nr_phys_segments;   unsigned short nr_integrity_segments;   unsigned short ioprio;   void *special;   int tag;   int errors;   unsigned char __cmd[16U];   unsigned char *cmd;   unsigned short cmd_len;   unsigned int extra_len;   unsigned int sense_len;   unsigned int resid_len;   void *sense;   unsigned long deadline;   struct list_head timeout_list;   unsigned int timeout;   int retries;   rq_end_io_fn *end_io;   void *end_io_data;   struct request *next_rq; } ;   117     struct elevator_type ;    12     typedef int elevator_merge_fn(struct request_queue *, struct request **, struct bio *);    15     typedef void elevator_merge_req_fn(struct request_queue *, struct request *, struct request *);    17     typedef void elevator_merged_fn(struct request_queue *, struct request *, int);    19     typedef int elevator_allow_merge_fn(struct request_queue *, struct request *, struct bio *);    21     typedef void elevator_bio_merged_fn(struct request_queue *, struct request *, struct bio *);    24     typedef int elevator_dispatch_fn(struct request_queue *, int);    26     typedef void elevator_add_req_fn(struct request_queue *, struct request *);    27     typedef struct request * elevator_request_list_fn(struct request_queue *, struct request *);    28     typedef void elevator_completed_req_fn(struct request_queue *, struct request *);    29     typedef int elevator_may_queue_fn(struct request_queue *, int);    31     typedef void elevator_init_icq_fn(struct io_cq *);    32     typedef void elevator_exit_icq_fn(struct io_cq *);    33     typedef int elevator_set_req_fn(struct request_queue *, struct request *, struct bio *, gfp_t );    35     typedef void elevator_put_req_fn(struct request *);    36     typedef void elevator_activate_req_fn(struct request_queue *, struct request *);    37     typedef void elevator_deactivate_req_fn(struct request_queue *, struct request *);    39     typedef int elevator_init_fn(struct request_queue *, struct elevator_type *);    41     typedef void elevator_exit_fn(struct elevator_queue *);    42     typedef void elevator_registered_fn(struct request_queue *);    43     struct elevator_ops {   elevator_merge_fn *elevator_merge_fn;   elevator_merged_fn *elevator_merged_fn;   elevator_merge_req_fn *elevator_merge_req_fn;   elevator_allow_merge_fn *elevator_allow_merge_fn;   elevator_bio_merged_fn *elevator_bio_merged_fn;   elevator_dispatch_fn *elevator_dispatch_fn;   elevator_add_req_fn *elevator_add_req_fn;   elevator_activate_req_fn *elevator_activate_req_fn;   elevator_deactivate_req_fn *elevator_deactivate_req_fn;   elevator_completed_req_fn *elevator_completed_req_fn;   elevator_request_list_fn *elevator_former_req_fn;   elevator_request_list_fn *elevator_latter_req_fn;   elevator_init_icq_fn *elevator_init_icq_fn;   elevator_exit_icq_fn *elevator_exit_icq_fn;   elevator_set_req_fn *elevator_set_req_fn;   elevator_put_req_fn *elevator_put_req_fn;   elevator_may_queue_fn *elevator_may_queue_fn;   elevator_init_fn *elevator_init_fn;   elevator_exit_fn *elevator_exit_fn;   elevator_registered_fn *elevator_registered_fn; } ;    74     struct elv_fs_entry {   struct attribute attr;   ssize_t  (*show)(struct elevator_queue *, char *);   ssize_t  (*store)(struct elevator_queue *, const char *, size_t ); } ;    82     struct elevator_type {   struct kmem_cache *icq_cache;   struct elevator_ops ops;   size_t icq_size;   size_t icq_align;   struct elv_fs_entry *elevator_attrs;   char elevator_name[16U];   struct module *elevator_owner;   char icq_cache_name[21U];   struct list_head list; } ;   103     struct elevator_queue {   struct elevator_type *type;   void *elevator_data;   struct kobject kobj;   struct mutex sysfs_lock;   unsigned char registered;   struct hlist_head hash[64U]; } ;   212     typedef void request_fn_proc(struct request_queue *);   213     typedef blk_qc_t  make_request_fn(struct request_queue *, struct bio *);   214     typedef int prep_rq_fn(struct request_queue *, struct request *);   215     typedef void unprep_rq_fn(struct request_queue *, struct request *);   218     typedef void softirq_done_fn(struct request *);   219     typedef int dma_drain_needed_fn(struct request *);   220     typedef int lld_busy_fn(struct request_queue *);   221     typedef int bsg_job_fn(struct bsg_job *);   222     enum blk_eh_timer_return {   BLK_EH_NOT_HANDLED = 0,   BLK_EH_HANDLED = 1,   BLK_EH_RESET_TIMER = 2 } ;   229     typedef enum blk_eh_timer_return  rq_timed_out_fn(struct request *);   235     struct blk_queue_tag {   struct request **tag_index;   unsigned long *tag_map;   int busy;   int max_depth;   int real_max_depth;   atomic_t refcnt;   int alloc_policy;   int next_tag; } ;   246     struct queue_limits {   unsigned long bounce_pfn;   unsigned long seg_boundary_mask;   unsigned long virt_boundary_mask;   unsigned int max_hw_sectors;   unsigned int max_dev_sectors;   unsigned int chunk_sectors;   unsigned int max_sectors;   unsigned int max_segment_size;   unsigned int physical_block_size;   unsigned int alignment_offset;   unsigned int io_min;   unsigned int io_opt;   unsigned int max_discard_sectors;   unsigned int max_hw_discard_sectors;   unsigned int max_write_same_sectors;   unsigned int discard_granularity;   unsigned int discard_alignment;   unsigned short logical_block_size;   unsigned short max_segments;   unsigned short max_integrity_segments;   unsigned char misaligned;   unsigned char discard_misaligned;   unsigned char cluster;   unsigned char discard_zeroes_data;   unsigned char raid_partial_stripes_expensive; } ;   282     struct blk_mq_ops ;   282     struct blk_mq_hw_ctx ;   282     struct throtl_data ;   282     struct blk_mq_tag_set ;   282     struct request_queue {   struct list_head queue_head;   struct request *last_merge;   struct elevator_queue *elevator;   int nr_rqs[2U];   int nr_rqs_elvpriv;   struct request_list root_rl;   request_fn_proc *request_fn;   make_request_fn *make_request_fn;   prep_rq_fn *prep_rq_fn;   unprep_rq_fn *unprep_rq_fn;   softirq_done_fn *softirq_done_fn;   rq_timed_out_fn *rq_timed_out_fn;   dma_drain_needed_fn *dma_drain_needed;   lld_busy_fn *lld_busy_fn;   struct blk_mq_ops *mq_ops;   unsigned int *mq_map;   struct blk_mq_ctx *queue_ctx;   unsigned int nr_queues;   struct blk_mq_hw_ctx **queue_hw_ctx;   unsigned int nr_hw_queues;   sector_t end_sector;   struct request *boundary_rq;   struct delayed_work delay_work;   struct backing_dev_info backing_dev_info;   void *queuedata;   unsigned long queue_flags;   int id;   gfp_t bounce_gfp;   spinlock_t __queue_lock;   spinlock_t *queue_lock;   struct kobject kobj;   struct kobject mq_kobj;   struct blk_integrity integrity;   struct device *dev;   int rpm_status;   unsigned int nr_pending;   unsigned long nr_requests;   unsigned int nr_congestion_on;   unsigned int nr_congestion_off;   unsigned int nr_batching;   unsigned int dma_drain_size;   void *dma_drain_buffer;   unsigned int dma_pad_mask;   unsigned int dma_alignment;   struct blk_queue_tag *queue_tags;   struct list_head tag_busy_list;   unsigned int nr_sorted;   unsigned int in_flight[2U];   unsigned int request_fn_active;   unsigned int rq_timeout;   struct timer_list timeout;   struct work_struct timeout_work;   struct list_head timeout_list;   struct list_head icq_list;   unsigned long blkcg_pols[1U];   struct blkcg_gq *root_blkg;   struct list_head blkg_list;   struct queue_limits limits;   unsigned int sg_timeout;   unsigned int sg_reserved_size;   int node;   unsigned int flush_flags;   unsigned char flush_not_queueable;   struct blk_flush_queue *fq;   struct list_head requeue_list;   spinlock_t requeue_lock;   struct work_struct requeue_work;   struct mutex sysfs_lock;   int bypass_depth;   atomic_t mq_freeze_depth;   bsg_job_fn *bsg_job_fn;   int bsg_job_size;   struct bsg_class_device bsg_dev;   struct throtl_data *td;   struct callback_head callback_head;   wait_queue_head_t mq_freeze_wq;   struct percpu_ref q_usage_counter;   struct list_head all_q_node;   struct blk_mq_tag_set *tag_set;   struct list_head tag_set_list;   struct bio_set *bio_split;   bool mq_sysfs_init_done; } ;  1029     struct blk_plug {   struct list_head list;   struct list_head mq_list;   struct list_head cb_list; } ;  1446     struct blk_integrity_iter {   void *prot_buf;   void *data_buf;   sector_t seed;   unsigned int data_size;   unsigned short interval;   const char *disk_name; } ;  1475     typedef int integrity_processing_fn(struct blk_integrity_iter *);  1476     struct blk_integrity_profile {   integrity_processing_fn *generate_fn;   integrity_processing_fn *verify_fn;   const char *name; } ;  1635     struct block_device_operations {   int (*open)(struct block_device *, fmode_t );   void (*release)(struct gendisk *, fmode_t );   int (*rw_page)(struct block_device *, sector_t , struct page *, int);   int (*ioctl)(struct block_device *, fmode_t , unsigned int, unsigned long);   int (*compat_ioctl)(struct block_device *, fmode_t , unsigned int, unsigned long);   long int (*direct_access)(struct block_device *, sector_t , void **, pfn_t *);   unsigned int (*check_events)(struct gendisk *, unsigned int);   int (*media_changed)(struct gendisk *);   void (*unlock_native_capacity)(struct gendisk *);   int (*revalidate_disk)(struct gendisk *);   int (*getgeo)(struct block_device *, struct hd_geometry *);   void (*swap_slot_free_notify)(struct block_device *, unsigned long);   struct module *owner;   const struct pr_ops *pr_ops; } ;  1663     struct blk_mq_tags ;  1664     struct blk_mq_cpu_notifier {   struct list_head list;   void *data;   int (*notify)(void *, unsigned long, unsigned int); } ;    14     struct blk_align_bitmap ;    14     struct blk_mq_ctxmap {   unsigned int size;   unsigned int bits_per_word;   struct blk_align_bitmap *map; } ;    20     struct __anonstruct____missing_field_name_382 {   spinlock_t lock;   struct list_head dispatch; } ;    20     struct blk_mq_hw_ctx {   struct __anonstruct____missing_field_name_382 __annonCompField92;   unsigned long state;   struct delayed_work run_work;   struct delayed_work delay_work;   cpumask_var_t cpumask;   int next_cpu;   int next_cpu_batch;   unsigned long flags;   struct request_queue *queue;   struct blk_flush_queue *fq;   void *driver_data;   struct blk_mq_ctxmap ctx_map;   unsigned int nr_ctx;   struct blk_mq_ctx **ctxs;   atomic_t wait_index;   struct blk_mq_tags *tags;   unsigned long queued;   unsigned long run;   unsigned long dispatched[10U];   unsigned int numa_node;   unsigned int queue_num;   atomic_t nr_active;   struct blk_mq_cpu_notifier cpu_notifier;   struct kobject kobj;   unsigned long poll_invoked;   unsigned long poll_success; } ;    66     struct blk_mq_tag_set {   struct blk_mq_ops *ops;   unsigned int nr_hw_queues;   unsigned int queue_depth;   unsigned int reserved_tags;   unsigned int cmd_size;   int numa_node;   unsigned int timeout;   unsigned int flags;   void *driver_data;   struct blk_mq_tags **tags;   struct mutex tag_list_lock;   struct list_head tag_list; } ;    83     struct blk_mq_queue_data {   struct request *rq;   struct list_head *list;   bool last; } ;    90     typedef int queue_rq_fn(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);    91     typedef struct blk_mq_hw_ctx * map_queue_fn(struct request_queue *, const int);    92     typedef enum blk_eh_timer_return  timeout_fn(struct request *, bool );    93     typedef int init_hctx_fn(struct blk_mq_hw_ctx *, void *, unsigned int);    94     typedef void exit_hctx_fn(struct blk_mq_hw_ctx *, unsigned int);    95     typedef int init_request_fn(void *, struct request *, unsigned int, unsigned int, unsigned int);    97     typedef void exit_request_fn(void *, struct request *, unsigned int, unsigned int);   103     typedef int poll_fn(struct blk_mq_hw_ctx *, unsigned int);   104     struct blk_mq_ops {   queue_rq_fn *queue_rq;   map_queue_fn *map_queue;   timeout_fn *timeout;   poll_fn *poll;   softirq_done_fn *complete;   init_hctx_fn *init_hctx;   exit_hctx_fn *exit_hctx;   init_request_fn *init_request;   exit_request_fn *exit_request; } ;   933     enum fwnode_type {   FWNODE_INVALID = 0,   FWNODE_OF = 1,   FWNODE_ACPI = 2,   FWNODE_ACPI_DATA = 3,   FWNODE_PDATA = 4,   FWNODE_IRQCHIP = 5 } ;   942     struct fwnode_handle {   enum fwnode_type type;   struct fwnode_handle *secondary; } ;   162     typedef u64 acpi_io_address;   450     typedef void *acpi_handle;   644     typedef u32 acpi_object_type;   901     struct __anonstruct_integer_389 {   acpi_object_type type;   u64 value; } ;   901     struct __anonstruct_string_390 {   acpi_object_type type;   u32 length;   char *pointer; } ;   901     struct __anonstruct_buffer_391 {   acpi_object_type type;   u32 length;   u8 *pointer; } ;   901     struct __anonstruct_package_392 {   acpi_object_type type;   u32 count;   union acpi_object *elements; } ;   901     struct __anonstruct_reference_393 {   acpi_object_type type;   acpi_object_type actual_type;   acpi_handle handle; } ;   901     struct __anonstruct_processor_394 {   acpi_object_type type;   u32 proc_id;   acpi_io_address pblk_address;   u32 pblk_length; } ;   901     struct __anonstruct_power_resource_395 {   acpi_object_type type;   u32 system_level;   u32 resource_order; } ;   901     union acpi_object {   acpi_object_type type;   struct __anonstruct_integer_389 integer;   struct __anonstruct_string_390 string;   struct __anonstruct_buffer_391 buffer;   struct __anonstruct_package_392 package;   struct __anonstruct_reference_393 reference;   struct __anonstruct_processor_394 processor;   struct __anonstruct_power_resource_395 power_resource; } ;   108     struct acpi_driver ;   109     struct acpi_hotplug_profile {   struct kobject kobj;   int (*scan_dependent)(struct acpi_device *);   void (*notify_online)(struct acpi_device *);   bool enabled;   bool demand_offline; } ;   131     struct acpi_scan_handler {   const struct acpi_device_id *ids;   struct list_head list_node;   bool  (*match)(const char *, const struct acpi_device_id **);   int (*attach)(struct acpi_device *, const struct acpi_device_id *);   void (*detach)(struct acpi_device *);   void (*bind)(struct device *);   void (*unbind)(struct device *);   struct acpi_hotplug_profile hotplug; } ;   141     struct acpi_hotplug_context {   struct acpi_device *self;   int (*notify)(struct acpi_device *, u32 );   void (*uevent)(struct acpi_device *, u32 );   void (*fixup)(struct acpi_device *); } ;   162     struct acpi_device_ops {   int (*add)(struct acpi_device *);   int (*remove)(struct acpi_device *);   void (*notify)(struct acpi_device *, u32 ); } ;   168     struct acpi_driver {   char name[80U];   char class[80U];   const struct acpi_device_id *ids;   unsigned int flags;   struct acpi_device_ops ops;   struct device_driver drv;   struct module *owner; } ;   180     struct acpi_device_status {   unsigned char present;   unsigned char enabled;   unsigned char show_in_ui;   unsigned char functional;   unsigned char battery_present;   unsigned int reserved; } ;   196     struct acpi_device_flags {   unsigned char dynamic_status;   unsigned char removable;   unsigned char ejectable;   unsigned char power_manageable;   unsigned char match_driver;   unsigned char initialized;   unsigned char visited;   unsigned char hotplug_notify;   unsigned char is_dock_station;   unsigned char of_compatible_ok;   unsigned char coherent_dma;   unsigned char cca_seen;   unsigned int reserved; } ;   214     struct acpi_device_dir {   struct proc_dir_entry *entry; } ;   225     typedef char acpi_bus_id[8U];   226     typedef unsigned long acpi_bus_address;   227     typedef char acpi_device_name[40U];   228     typedef char acpi_device_class[20U];   234     struct acpi_pnp_type {   unsigned char hardware_id;   unsigned char bus_address;   unsigned char platform_id;   unsigned int reserved; } ;   241     struct acpi_device_pnp {   acpi_bus_id bus_id;   struct acpi_pnp_type type;   acpi_bus_address bus_address;   char *unique_id;   struct list_head ids;   acpi_device_name device_name;   acpi_device_class device_class;   union acpi_object *str_obj; } ;   256     struct acpi_device_power_flags {   unsigned char explicit_get;   unsigned char power_resources;   unsigned char inrush_current;   unsigned char power_removed;   unsigned char ignore_parent;   unsigned char dsw_present;   unsigned int reserved; } ;   271     struct __anonstruct_flags_396 {   unsigned char valid;   unsigned char explicit_set;   unsigned char reserved; } ;   271     struct acpi_device_power_state {   struct __anonstruct_flags_396 flags;   int power;   int latency;   struct list_head resources; } ;   282     struct acpi_device_power {   int state;   struct acpi_device_power_flags flags;   struct acpi_device_power_state states[5U]; } ;   288     struct acpi_device_perf_flags {   u8 reserved; } ;   294     struct __anonstruct_flags_397 {   unsigned char valid;   unsigned char reserved; } ;   294     struct acpi_device_perf_state {   struct __anonstruct_flags_397 flags;   u8 power;   u8 performance;   int latency; } ;   304     struct acpi_device_perf {   int state;   struct acpi_device_perf_flags flags;   int state_count;   struct acpi_device_perf_state *states; } ;   311     struct acpi_device_wakeup_flags {   unsigned char valid;   unsigned char run_wake;   unsigned char notifier_present;   unsigned char enabled; } ;   319     struct acpi_device_wakeup_context {   struct work_struct work;   struct device *dev; } ;   324     struct acpi_device_wakeup {   acpi_handle gpe_device;   u64 gpe_number;   u64 sleep_state;   struct list_head resources;   struct acpi_device_wakeup_flags flags;   struct acpi_device_wakeup_context context;   struct wakeup_source *ws;   int prepare_count; } ;   342     struct acpi_device_data {   const union acpi_object *pointer;   const union acpi_object *properties;   const union acpi_object *of_compatible;   struct list_head subnodes; } ;   350     struct acpi_gpio_mapping ;   351     struct acpi_device {   int device_type;   acpi_handle handle;   struct fwnode_handle fwnode;   struct acpi_device *parent;   struct list_head children;   struct list_head node;   struct list_head wakeup_list;   struct list_head del_list;   struct acpi_device_status status;   struct acpi_device_flags flags;   struct acpi_device_pnp pnp;   struct acpi_device_power power;   struct acpi_device_wakeup wakeup;   struct acpi_device_perf performance;   struct acpi_device_dir dir;   struct acpi_device_data data;   struct acpi_scan_handler *handler;   struct acpi_hotplug_context *hp;   struct acpi_driver *driver;   const struct acpi_gpio_mapping *driver_gpios;   void *driver_data;   struct device dev;   unsigned int physical_node_count;   unsigned int dep_unmet;   struct list_head physical_node_list;   struct mutex physical_node_lock;   void (*remove)(struct acpi_device *); } ;   769     struct acpi_gpio_params {   unsigned int crs_entry_index;   unsigned int line_index;   bool active_low; } ;   822     struct acpi_gpio_mapping {   const char *name;   const struct acpi_gpio_params *data;   unsigned int size; } ;    32     typedef u32 phandle;    34     struct property {   char *name;   int length;   void *value;   struct property *next;   unsigned long _flags;   unsigned int unique_id;   struct bin_attribute attr; } ;    44     struct device_node {   const char *name;   const char *type;   phandle phandle;   const char *full_name;   struct fwnode_handle fwnode;   struct property *properties;   struct property *deadprops;   struct device_node *parent;   struct device_node *child;   struct device_node *sibling;   struct kobject kobj;   unsigned long _flags;   void *data; } ;    77     struct smart_attr {   u8 attr_id;   u16 flags;   u8 cur;   u8 worst;   u32 data;   u8 res[3U]; } ;   173     struct mtip_work {   struct work_struct work;   void *port;   int cpu_binding;   u32 completed; } ;   180     struct mtip_trim_entry {   u32 lba;   u16 rsvd;   u16 range; } ;   202     union __anonunion____missing_field_name_407 {   unsigned char lba_low;   unsigned char sector; } ;   202     union __anonunion____missing_field_name_408 {   unsigned char lba_mid;   unsigned char cyl_low; } ;   202     union __anonunion____missing_field_name_409 {   unsigned char lba_hi;   unsigned char cyl_hi; } ;   202     union __anonunion____missing_field_name_410 {   unsigned char device;   unsigned char head; } ;   202     union __anonunion____missing_field_name_411 {   unsigned char lba_low_ex;   unsigned char sector_ex; } ;   202     union __anonunion____missing_field_name_412 {   unsigned char lba_mid_ex;   unsigned char cyl_low_ex; } ;   202     union __anonunion____missing_field_name_413 {   unsigned char lba_hi_ex;   unsigned char cyl_hi_ex; } ;   202     struct host_to_dev_fis {   unsigned char type;   unsigned char opts;   unsigned char command;   unsigned char features;   union __anonunion____missing_field_name_407 __annonCompField97;   union __anonunion____missing_field_name_408 __annonCompField98;   union __anonunion____missing_field_name_409 __annonCompField99;   union __anonunion____missing_field_name_410 __annonCompField100;   union __anonunion____missing_field_name_411 __annonCompField101;   union __anonunion____missing_field_name_412 __annonCompField102;   union __anonunion____missing_field_name_413 __annonCompField103;   unsigned char features_ex;   unsigned char sect_count;   unsigned char sect_cnt_ex;   unsigned char res2;   unsigned char control;   unsigned int res3; } ;   259     union __anonunion____missing_field_name_414 {   unsigned int byte_count;   unsigned int status; } ;   259     struct mtip_cmd_hdr {   unsigned int opts;   union __anonunion____missing_field_name_414 __annonCompField104;   unsigned int ctba;   unsigned int ctbau;   unsigned int res[4U]; } ;   290     struct mtip_cmd_sg {   unsigned int dba;   unsigned int dba_upper;   unsigned int reserved;   unsigned int info; } ;   314     struct mtip_port ;   315     struct mtip_cmd {   struct mtip_cmd_hdr *command_header;   dma_addr_t command_header_dma;   void *command;   dma_addr_t command_dma;   void *comp_data;   void (*comp_func)(struct mtip_port *, int, struct mtip_cmd *, int);   int scatter_ents;   int unaligned;   struct scatterlist sg[504U];   int retries;   int direction; } ;   347     struct driver_data ;   347     struct mtip_port {   struct driver_data *dd;   unsigned long identify_valid;   void *mmio;   void *s_active[8U];   void *completed[8U];   void *cmd_issue[8U];   void *command_list;   dma_addr_t command_list_dma;   void *rxfis;   dma_addr_t rxfis_dma;   void *block1;   dma_addr_t block1_dma;   u16 *identify;   dma_addr_t identify_dma;   u16 *sector_buffer;   dma_addr_t sector_buffer_dma;   u16 *log_buf;   dma_addr_t log_buf_dma;   u8 *smart_buf;   dma_addr_t smart_buf_dma;   unsigned long cmds_to_issue[4U];   wait_queue_head_t svc_wait;   unsigned long flags;   unsigned long ic_pause_timer;   struct semaphore cmd_slot_unal;   spinlock_t cmd_issue_lock[8U]; } ;   443     struct driver_data {   void *mmio;   int major;   int instance;   struct gendisk *disk;   struct pci_dev *pdev;   struct request_queue *queue;   struct blk_mq_tag_set tags;   struct mtip_port *port;   unsigned int product_type;   unsigned int slot_groups;   unsigned long index;   unsigned long dd_flag;   struct task_struct *mtip_svc_handler;   struct dentry *dfs_node;   bool trim_supp;   bool sr;   int numa_node;   char workq_name[32U];   struct workqueue_struct *isr_workq;   atomic_t irq_workers_active;   struct mtip_work work[8U];   int isr_binding;   struct block_device *bdev;   struct list_head online_list;   struct list_head remove_list;   int unal_qdepth; } ;   126     struct mtip_compat_ide_task_request_s {   __u8 io_ports[8U];   __u8 hob_ports[8U];   ide_reg_valid_t out_flags;   ide_reg_valid_t in_flags;   int data_phase;   int req_cmd;   compat_ulong_t out_size;   compat_ulong_t in_size; } ;    38     typedef int Set;     1     long int __builtin_expect(long, long);     1     void __builtin_prefetch(const void *, ...);     1     void * __builtin_memcpy(void *, const void *, unsigned long);     1     unsigned long int __builtin_object_size(void *, int);   216     void __read_once_size(const volatile void *p, void *res, int size);   241     void __write_once_size(volatile void *p, void *res, int size);     7     dma_addr_t  ldv_dma_map_single_attrs(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir, struct dma_attrs *attrs);    12     void * memdup_user(const void *, size_t );    31     void * __memcpy(void *, const void *, size_t );    56     void * __memset(void *, int, size_t );    60     void * __memmove(void *, const void *, size_t );    63     size_t  strlen(const char *);    27     size_t  strlcpy(char *, const char *, size_t );    33     extern struct module __this_module;    72     void set_bit(long nr, volatile unsigned long *addr);   110     void clear_bit(long nr, volatile unsigned long *addr);   308     int constant_test_bit(long nr, const volatile unsigned long *addr);   314     int variable_test_bit(long nr, const volatile unsigned long *addr);    14     unsigned long int find_next_bit(const unsigned long *, unsigned long, unsigned long);    42     unsigned long int find_first_bit(const unsigned long *, unsigned long);    46     __u16  __fswab16(__u16 val);   154     __u16  __swab16p(const __u16 *p);   223     void __swab16s(__u16 *p);   142     int printk(const char *, ...);    53     void __dynamic_dev_dbg(struct _ddebug *, const struct device *, const char *, ...);   178     void __might_sleep(const char *, int, int);   248     void __might_fault(const char *, int);   403     int sprintf(char *, const char *, ...);   406     int snprintf(char *, size_t , const char *, ...);    25     void INIT_LIST_HEAD(struct list_head *list);    48     void __list_add(struct list_head *, struct list_head *, struct list_head *);    61     void list_add(struct list_head *new, struct list_head *head);   112     void __list_del_entry(struct list_head *);   154     void list_del_init(struct list_head *entry);    28     long int PTR_ERR(const void *ptr);    33     bool  IS_ERR(const void *ptr);    38     bool  IS_ERR_OR_NULL(const void *ptr);    87     void __bad_percpu_size();   295     void __bad_size_call_parameter();    18     extern unsigned long __per_cpu_offset[8192U];    15     void __xadd_wrong_size();    24     int atomic_read(const atomic_t *v);    36     void atomic_set(atomic_t *v, int i);   154     int atomic_add_return(int i, atomic_t *v);   166     int atomic_sub_return(int i, atomic_t *v);    71     void warn_slowpath_null(const char *, const int);   280     void lockdep_init_map(struct lockdep_map *, const char *, struct lock_class_key *, int);   112     int __bitmap_weight(const unsigned long *, unsigned int);   282     int bitmap_empty(const unsigned long *src, unsigned int nbits);   298     int bitmap_weight(const unsigned long *src, unsigned int nbits);    37     extern int nr_cpu_ids;    90     extern struct cpumask __cpu_present_mask;   118     unsigned int cpumask_check(unsigned int cpu);   176     unsigned int cpumask_first(const struct cpumask *srcp);   188     unsigned int cpumask_next(int n, const struct cpumask *srcp);   460     bool  cpumask_empty(const struct cpumask *srcp);   478     unsigned int cpumask_weight(const struct cpumask *srcp);   793     extern const unsigned long cpu_bit_bitmap[65U][128U];   795     const struct cpumask * get_cpu_mask(unsigned int cpu);   163     extern struct cpuinfo_x86 cpu_info;    93     void __raw_spin_lock_init(raw_spinlock_t *, const char *, struct lock_class_key *);    22     void _raw_spin_lock(raw_spinlock_t *);    34     unsigned long int _raw_spin_lock_irqsave(raw_spinlock_t *);    41     void _raw_spin_unlock(raw_spinlock_t *);    45     void _raw_spin_unlock_irqrestore(raw_spinlock_t *, unsigned long);   289     raw_spinlock_t * spinlock_check(spinlock_t *lock);   300     void spin_lock(spinlock_t *lock);   345     void spin_unlock(spinlock_t *lock);   360     void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags);    72     void __init_waitqueue_head(wait_queue_head_t *, const char *, struct lock_class_key *);   200     void __wake_up(wait_queue_head_t *, unsigned int, int, void *);   977     long int prepare_to_wait_event(wait_queue_head_t *, wait_queue_t *, int);   978     void finish_wait(wait_queue_head_t *, wait_queue_t *);    73     void init_completion(struct completion *x);    99     long int wait_for_completion_interruptible_timeout(struct completion *, unsigned long);   106     void complete(struct completion *);    78     extern volatile unsigned long jiffies;   284     unsigned int jiffies_to_msecs(const unsigned long);   292     unsigned long int __msecs_to_jiffies(const unsigned int);   354     unsigned long int msecs_to_jiffies(const unsigned int m);   176     int ida_pre_get(struct ida *, gfp_t );   177     int ida_get_new_above(struct ida *, int, int *);   178     void ida_remove(struct ida *, int);   193     int ida_get_new(struct ida *ida, int *p_id);   228     int sysfs_create_file_ns(struct kobject *, const struct attribute *, const void *);   235     void sysfs_remove_file_ns(struct kobject *, const struct attribute *, const void *);   491     int sysfs_create_file(struct kobject *kobj, const struct attribute *attr);   497     void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr);   181     void __init_work(struct work_struct *, int);   361     struct workqueue_struct * __alloc_workqueue_key(const char *, unsigned int, int, struct lock_class_key *, const char *, ...);   421     void destroy_workqueue(struct workqueue_struct *);   429     bool  queue_work_on(int, struct workqueue_struct *, struct work_struct *);   436     void flush_workqueue(struct workqueue_struct *);    87     const char * kobject_name(const struct kobject *kobj);   110     struct kobject * kobject_get(struct kobject *);   111     void kobject_put(struct kobject *);   251     int __first_node(const nodemask_t *srcp);   257     int __next_node(int n, const nodemask_t *srcp);   395     extern nodemask_t node_states[5U];   398     int node_state(int node, enum node_states state);   423     int next_online_node(int nid);    57     int __cpu_to_node(int);    76     const struct cpumask * cpumask_of_node(int);    58     unsigned int readl(const volatile void *addr);    66     void writel(unsigned int val, volatile void *addr);    29     extern int cpu_number;   850     const char * dev_name(const struct device *dev);   863     int dev_to_node(struct device *dev);   897     void * dev_get_drvdata(const struct device *dev);   902     void dev_set_drvdata(struct device *dev, void *data);  1099     const char * dev_driver_string(const struct device *);  1120     void dev_err(const struct device *, const char *, ...);  1122     void dev_warn(const struct device *, const char *, ...);  1126     void _dev_info(const struct device *, const char *, ...);   209     bool  capable(int);   430     void schedule();  2470     int wake_up_process(struct task_struct *);   148     void kfree(const void *);   312     void * __kmalloc(size_t , gfp_t );   327     void * __kmalloc_node(size_t , gfp_t , int);   451     void * kmalloc(size_t size, gfp_t flags);   491     void * kmalloc_node(size_t size, gfp_t flags, int node);   605     void * kzalloc(size_t size, gfp_t flags);   616     void * kzalloc_node(size_t size, gfp_t flags, int node);   858     int pci_find_capability(struct pci_dev *, int);   884     int pci_bus_read_config_word(struct pci_bus *, unsigned int, int, u16 *);   890     int pci_bus_write_config_word(struct pci_bus *, unsigned int, int, u16 );   910     int pci_read_config_word(const struct pci_dev *dev, int where, u16 *val);   923     int pci_write_config_word(const struct pci_dev *dev, int where, u16 val);   978     int pcim_enable_device(struct pci_dev *);  1008     void pci_disable_device(struct pci_dev *);  1011     void pci_set_master(struct pci_dev *);  1066     int pci_save_state(struct pci_dev *);  1067     void pci_restore_state(struct pci_dev *);  1080     int pci_set_power_state(struct pci_dev *, pci_power_t );  1182     int __pci_register_driver(struct pci_driver *, struct module *, const char *);  1191     void pci_unregister_driver(struct pci_driver *);   926     void * lowmem_page_address(const struct page *page);   120     struct page * sg_page(struct scatterlist *sg);   239     void * sg_virt(struct scatterlist *sg);   246     struct scatterlist * sg_next(struct scatterlist *);   248     void sg_init_table(struct scatterlist *, unsigned int);  1263     void pci_disable_msi(struct pci_dev *);  1270     int pci_enable_msi_range(struct pci_dev *, int, int);  1271     int pci_enable_msi_exact(struct pci_dev *dev, int nvec);    44     void debug_dma_unmap_page(struct device *, dma_addr_t , size_t , int, bool );    47     void debug_dma_map_sg(struct device *, struct scatterlist *, int, int, int);    50     void debug_dma_unmap_sg(struct device *, struct scatterlist *, int, int);   131     void kmemcheck_mark_initialized(void *address, unsigned int n);    77     int valid_dma_direction(int dma_direction);    29     extern struct dma_map_ops *dma_ops;    31     struct dma_map_ops * get_dma_ops(struct device *dev);    47     int dma_supported(struct device *, u64 );   143     dma_addr_t  ldv_dma_map_single_attrs_1(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir, struct dma_attrs *attrs);   144     void dma_unmap_single_attrs(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir, struct dma_attrs *attrs);   161     int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, struct dma_attrs *attrs);   179     void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, struct dma_attrs *attrs);   458     int dma_set_mask(struct device *dev, u64 mask);   482     int dma_set_coherent_mask(struct device *dev, u64 mask);   617     void * dmam_alloc_coherent(struct device *, size_t , dma_addr_t *, gfp_t );   619     void dmam_free_coherent(struct device *, size_t , void *, dma_addr_t );    32     dma_addr_t  pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction);    38     void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, size_t size, int direction);   107     int pci_set_dma_mask(struct pci_dev *dev, u64 mask);   112     int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask);   116     int __pcibus_to_node(const struct pci_bus *bus);  1535     void * pci_get_drvdata(struct pci_dev *pdev);  1540     void pci_set_drvdata(struct pci_dev *pdev, void *data);  1684     const void ** pcim_iomap_table(struct pci_dev *);  1685     int pcim_iomap_regions(struct pci_dev *, int, const char *);  1688     void pcim_iounmap_regions(struct pci_dev *, int);   667     unsigned long int _copy_from_user(void *, const void *, unsigned int);   669     unsigned long int _copy_to_user(void *, const void *, unsigned int);   689     void __copy_from_user_overflow();   694     void __copy_to_user_overflow();   710     unsigned long int copy_from_user(void *to, const void *from, unsigned long n);   745     unsigned long int copy_to_user(void *to, const void *from, unsigned long n);    11     void synchronize_irq(unsigned int);   154     int devm_request_threaded_irq(struct device *, unsigned int, irqreturn_t  (*)(int, void *), irqreturn_t  (*)(int, void *), unsigned long, const char *, void *);   160     int devm_request_irq(struct device *dev, unsigned int irq, irqreturn_t  (*handler)(int, void *), unsigned long irqflags, const char *devname, void *dev_id);   172     void devm_free_irq(struct device *, unsigned int, void *);   266     int irq_set_affinity_hint(unsigned int, const struct cpumask *);    10     void __const_udelay(unsigned long);    46     void msleep(unsigned int);    50     void ssleep(unsigned int seconds);    32     void sema_init(struct semaphore *sem, int val);    42     int down_trylock(struct semaphore *);    44     void up(struct semaphore *);  2297     int register_blkdev(unsigned int, const char *);  2298     void unregister_blkdev(unsigned int, const char *);  2303     void bdput(struct block_device *);  2709     loff_t  no_llseek(struct file *, loff_t , int);  2849     int simple_open(struct inode *, struct file *);   434     void add_disk(struct gendisk *);   435     void del_gendisk(struct gendisk *);   437     struct block_device * bdget_disk(struct gendisk *, int);   464     void set_capacity(struct gendisk *disk, sector_t size);   633     struct gendisk * alloc_disk_node(int, int);   636     void put_disk(struct gendisk *);   770     void blk_put_request(struct request *);   838     sector_t  blk_rq_pos(const struct request *rq);   843     unsigned int blk_rq_bytes(const struct request *rq);   855     unsigned int blk_rq_sectors(const struct request *rq);   963     void blk_cleanup_queue(struct request_queue *);   965     void blk_queue_bounce_limit(struct request_queue *, u64 );   966     void blk_queue_max_hw_sectors(struct request_queue *, unsigned int);   968     void blk_queue_max_segments(struct request_queue *, unsigned short);   969     void blk_queue_max_segment_size(struct request_queue *, unsigned int);   970     void blk_queue_max_discard_sectors(struct request_queue *, unsigned int);   975     void blk_queue_physical_block_size(struct request_queue *, unsigned int);   979     void blk_queue_io_min(struct request_queue *, unsigned int);  1006     void blk_queue_flush(struct request_queue *, unsigned int);  1010     int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *);   176     struct request_queue * blk_mq_init_queue(struct blk_mq_tag_set *);   182     int blk_mq_alloc_tag_set(struct blk_mq_tag_set *);   183     void blk_mq_free_tag_set(struct blk_mq_tag_set *);   197     struct request * blk_mq_alloc_request(struct request_queue *, int, unsigned int);   199     struct request * blk_mq_tag_to_rq(struct blk_mq_tags *, unsigned int);   219     struct blk_mq_hw_ctx * blk_mq_map_queue(struct request_queue *, const int);   223     void blk_mq_start_request(struct request *);   224     void blk_mq_end_request(struct request *, int);   236     void blk_mq_stop_hw_queues(struct request_queue *);   238     void blk_mq_start_stopped_hw_queues(struct request_queue *, bool );   251     struct request * blk_mq_rq_from_pdu(void *pdu);   255     void * blk_mq_rq_to_pdu(struct request *rq);     8     struct task_struct * kthread_create_on_node(int (*)(void *), void *, int, const char *, ...);    42     int kthread_stop(struct task_struct *);    43     bool  kthread_should_stop();    49     struct dentry * debugfs_create_file(const char *, umode_t , struct dentry *, void *, const struct file_operations *);    58     struct dentry * debugfs_create_dir(const char *, struct dentry *);    68     void debugfs_remove(struct dentry *);    69     void debugfs_remove_recursive(struct dentry *);   106     int instance = 0;   108     struct list_head online_list = {  };   109     struct list_head removing_list = {  };   110     struct spinlock dev_lock = {  };   116     int mtip_major = 0;   117     struct dentry *dfs_parent = 0;   118     struct dentry *dfs_device_status = 0;   120     u32 cpu_use[8192U] = {  };   122     struct spinlock rssd_index_lock = { { { { { 0 } }, 3735899821U, 4294967295U, (void *)-1, { 0, { 0, 0 }, "rssd_index_lock", 0, 0UL } } } };   123     struct ida rssd_index_ida = { { 0, 0, 0, 0, { { { { { 0 } }, 3735899821U, 4294967295U, (void *)-1, { 0, { 0, 0 }, "(rssd_index_ida).idr.lock", 0, 0UL } } } }, 0, 0 }, (struct ida_bitmap *)0 };   125     int mtip_block_initialize(struct driver_data *dd);   150     bool  mtip_check_surprise_removal(struct pci_dev *pdev);   173     struct mtip_cmd * mtip_get_int_command(struct driver_data *dd);   181     void mtip_put_int_command(struct driver_data *dd, struct mtip_cmd *cmd);   189     struct request * mtip_rq_from_tag(struct driver_data *dd, unsigned int tag);   197     struct mtip_cmd * mtip_cmd_from_tag(struct driver_data *dd, unsigned int tag);   223     void mtip_async_complete(struct mtip_port *port, int tag, struct mtip_cmd *cmd, int status);   257     int mtip_hba_reset(struct driver_data *dd);   298     void mtip_issue_ncq_command(struct mtip_port *port, int tag);   320     int mtip_enable_fis(struct mtip_port *port, int enable);   346     int mtip_enable_engine(struct mtip_port *port, int enable);   367     void mtip_start_port(struct mtip_port *port);   385     void mtip_deinit_port(struct mtip_port *port);   410     void mtip_init_port(struct mtip_port *port);   453     void mtip_restart_port(struct mtip_port *port);   523     int mtip_device_reset(struct driver_data *dd);   546     void print_tags(struct driver_data *dd, char *msg, unsigned long *tagbits, int cnt);   577     void mtip_completion(struct mtip_port *port, int tag, struct mtip_cmd *command, int status);   588     void mtip_null_completion(struct mtip_port *port, int tag, struct mtip_cmd *command, int status);   593     int mtip_read_log_page(struct mtip_port *port, u8 page, u16 *buffer, dma_addr_t buffer_dma, unsigned int sectors);   595     int mtip_get_smart_attr(struct mtip_port *port, unsigned int id, struct smart_attr *attrib);   605     void mtip_handle_tfe(struct driver_data *dd);   785     void mtip_workq_sdbfx(struct mtip_port *port, int group, u32 completed);   833     void mtip_process_legacy(struct driver_data *dd, u32 port_stat);   853     void mtip_process_errors(struct driver_data *dd, u32 port_stat);   881     irqreturn_t  mtip_handle_irq(struct driver_data *data);   973     irqreturn_t  mtip_irq_handler(int irq, void *instance___0);   980     void mtip_issue_non_ncq_command(struct mtip_port *port, int tag);   986     bool  mtip_pause_ncq(struct mtip_port *port, struct host_to_dev_fis *fis);  1030     int mtip_quiesce_io(struct mtip_port *port, unsigned long timeout);  1089     int mtip_exec_internal_command(struct mtip_port *port, struct host_to_dev_fis *fis, int fis_len, dma_addr_t buffer, int buf_len, u32 opts, gfp_t atomic, unsigned long timeout);  1276     void ata_swap_string(u16 *buf, unsigned int len);  1283     void mtip_set_timeout(struct driver_data *dd, struct host_to_dev_fis *fis, unsigned int *timeout, u8 erasemode);  1333     int mtip_get_identify(struct mtip_port *port, void *user_buffer);  1424     int mtip_standby_immediate(struct mtip_port *port);  1506     int mtip_get_smart_data(struct mtip_port *port, u8 *buffer, dma_addr_t buffer_dma);  1599     int mtip_send_trim(struct driver_data *dd, unsigned int lba, unsigned int len);  1673     bool  mtip_hw_get_capacity(struct driver_data *dd, sector_t *sectors);  1694     void mtip_dump_identify(struct mtip_port *port);  1749     void fill_command_sg(struct driver_data *dd, struct mtip_cmd *command, int nents);  1782     int exec_drive_task(struct mtip_port *port, u8 *command);  1852     int exec_drive_command(struct mtip_port *port, u8 *command, void *user_buffer);  1962     unsigned int implicit_sector(unsigned char command, unsigned char features);  2001     int exec_drive_taskfile(struct driver_data *dd, void *buf, ide_task_request_t *req_task, int outtotal);  2259     int mtip_hw_ioctl(struct driver_data *dd, unsigned int cmd, unsigned long arg);  2363     void mtip_hw_submit_io(struct driver_data *dd, struct request *rq, struct mtip_cmd *command, int nents, struct blk_mq_hw_ctx *hctx);  2451     ssize_t  mtip_hw_show_status(struct device *dev, struct device_attribute *attr, char *buf);  2468     struct device_attribute dev_attr_status = { { "status", 292U, (_Bool)0, 0, { { { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } } } }, &mtip_hw_show_status, (ssize_t  (*)(struct device *, struct device_attribute *, const char *, size_t ))0 };  2472     ssize_t  show_device_status(struct device_driver *drv, char *buf);  2545     ssize_t  mtip_hw_read_device_status(struct file *f, char *ubuf, size_t len, loff_t *offset);  2574     ssize_t  mtip_hw_read_registers(struct file *f, char *ubuf, size_t len, loff_t *offset);  2641     ssize_t  mtip_hw_read_flags(struct file *f, char *ubuf, size_t len, loff_t *offset);  2673     const struct file_operations mtip_device_status_fops = { &__this_module, &no_llseek, &mtip_hw_read_device_status, 0, 0, 0, 0, 0, 0, 0, 0, &simple_open, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };  2680     const struct file_operations mtip_regs_fops = { &__this_module, &no_llseek, &mtip_hw_read_registers, 0, 0, 0, 0, 0, 0, 0, 0, &simple_open, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };  2687     const struct file_operations mtip_flags_fops = { &__this_module, &no_llseek, &mtip_hw_read_flags, 0, 0, 0, 0, 0, 0, 0, 0, &simple_open, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };  2704     int mtip_hw_sysfs_init(struct driver_data *dd, struct kobject *kobj);  2725     int mtip_hw_sysfs_exit(struct driver_data *dd, struct kobject *kobj);  2735     int mtip_hw_debugfs_init(struct driver_data *dd);  2757     void mtip_hw_debugfs_exit(struct driver_data *dd);  2771     void hba_setup(struct driver_data *dd);  2783     int mtip_device_unaligned_constrained(struct driver_data *dd);  2798     void mtip_detect_product(struct driver_data *dd);  2848     int mtip_ftl_rebuild_poll(struct driver_data *dd);  2903     int mtip_service_thread(void *data);  2994     void mtip_dma_free(struct driver_data *dd);  3016     int mtip_dma_alloc(struct driver_data *dd);  3054     int mtip_hw_get_identify(struct driver_data *dd);  3118     int mtip_hw_init(struct driver_data *dd);  3267     void mtip_standby_drive(struct driver_data *dd);  3291     int mtip_hw_exit(struct driver_data *dd);  3332     int mtip_hw_shutdown(struct driver_data *dd);  3356     int mtip_hw_suspend(struct driver_data *dd);  3388     int mtip_hw_resume(struct driver_data *dd);  3418     int rssd_disk_name_format(char *prefix, int index, char *buf, int buflen);  3458     int mtip_block_ioctl(struct block_device *dev, fmode_t mode, unsigned int cmd, unsigned long arg);  3496     int mtip_block_compat_ioctl(struct block_device *dev, fmode_t mode, unsigned int cmd, unsigned long arg);  3578     int mtip_block_getgeo(struct block_device *dev, struct hd_geometry *geo);  3606     const struct block_device_operations mtip_block_ops = { 0, 0, 0, &mtip_block_ioctl, &mtip_block_compat_ioctl, 0, 0, 0, 0, 0, &mtip_block_getgeo, 0, &__this_module, 0 };  3615     bool  is_se_active(struct driver_data *dd);  3646     int mtip_submit_request(struct blk_mq_hw_ctx *hctx, struct request *rq);  3690     bool  mtip_check_unal_depth(struct blk_mq_hw_ctx *hctx, struct request *rq);  3714     int mtip_queue_rq(struct blk_mq_hw_ctx *hctx, const struct blk_mq_queue_data *bd);  3733     void mtip_free_cmd(void *data, struct request *rq, unsigned int hctx_idx, unsigned int request_idx);  3746     int mtip_init_cmd(void *data, struct request *rq, unsigned int hctx_idx, unsigned int request_idx, unsigned int numa_node___0);  3783     struct blk_mq_ops mtip_mq_ops = { &mtip_queue_rq, &blk_mq_map_queue, 0, 0, 0, 0, 0, &mtip_init_cmd, &mtip_free_cmd };  4008     int mtip_block_remove(struct driver_data *dd);  4076     int mtip_block_shutdown(struct driver_data *dd);  4101     int mtip_block_suspend(struct driver_data *dd);  4109     int mtip_block_resume(struct driver_data *dd);  4117     void drop_cpu(int cpu);  4122     int get_least_used_cpu_on_node(int node);  4143     int mtip_get_next_rr_node();  4158     void mtip_workq_sdbf0(struct work_struct *work);  4159     void mtip_workq_sdbf1(struct work_struct *work);  4160     void mtip_workq_sdbf2(struct work_struct *work);  4161     void mtip_workq_sdbf3(struct work_struct *work);  4162     void mtip_workq_sdbf4(struct work_struct *work);  4163     void mtip_workq_sdbf5(struct work_struct *work);  4164     void mtip_workq_sdbf6(struct work_struct *work);  4165     void mtip_workq_sdbf7(struct work_struct *work);  4167     void mtip_disable_link_opts(struct driver_data *dd, struct pci_dev *pdev);  4191     void mtip_fix_ero_nosnoop(struct driver_data *dd, struct pci_dev *pdev);  4227     int mtip_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent);  4425     void mtip_pci_remove(struct pci_dev *pdev);  4483     int mtip_pci_suspend(struct pci_dev *pdev, pm_message_t mesg);  4524     int mtip_pci_resume(struct pci_dev *pdev);  4571     void mtip_pci_shutdown(struct pci_dev *pdev);  4579     const struct pci_device_id mtip_pci_tbl[8U] = { { 4932U, 20816U, 4294967295U, 4294967295U, 0U, 0U, 0UL }, { 4932U, 20817U, 4294967295U, 4294967295U, 0U, 0U, 0UL }, { 4932U, 20818U, 4294967295U, 4294967295U, 0U, 0U, 0UL }, { 4932U, 20819U, 4294967295U, 4294967295U, 0U, 0U, 0UL }, { 4932U, 20832U, 4294967295U, 4294967295U, 0U, 0U, 0UL }, { 4932U, 20833U, 4294967295U, 4294967295U, 0U, 0U, 0UL }, { 4932U, 20835U, 4294967295U, 4294967295U, 0U, 0U, 0UL }, { 0U, 0U, 0U, 0U, 0U, 0U, 0UL } };  4591     struct pci_driver mtip_pci_driver = { { 0, 0 }, "mtip32xx", (const struct pci_device_id *)(&mtip_pci_tbl), &mtip_pci_probe, &mtip_pci_remove, &mtip_pci_suspend, 0, 0, &mtip_pci_resume, &mtip_pci_shutdown, 0, 0, { 0, 0, 0, 0, (_Bool)0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { { { { { 0 } }, 0U, 0U, 0, { 0, { 0, 0 }, 0, 0, 0UL } } } }, { 0, 0 } } };  4601     const struct pci_device_id __mod_pci__mtip_pci_tbl_device_table[8U] = {  };  4613     int mtip_init();  4668     void mtip_exit();  4703     void ldv_check_final_state();  4706     void ldv_check_return_value(int);  4709     void ldv_check_return_value_probe(int);  4712     void ldv_initialize();  4715     void ldv_handler_precall();  4718     int nondet_int();  4721     int LDV_IN_INTERRUPT = 0;  4724     void ldv_main0_sequence_infinite_withcheck_stateful();    10     void ldv_error();    25     int ldv_undef_int();    26     void * ldv_undef_ptr();     8     int LDV_DMA_MAP_CALLS = 0;    11     dma_addr_t  ldv_dma_map_page(struct device *dev, struct page *page, size_t offset, size_t size, enum dma_data_direction dir);    25     int ldv_dma_mapping_error(struct device *dev, dma_addr_t dma_addr);    41     dma_addr_t  ldv_dma_map_single(struct device *dev, void *cpu_addr, size_t size, enum dma_data_direction dir);           return ;         }        {      4726     struct file *var_group1;  4727     char *var_mtip_hw_read_device_status_47_p1;  4728     unsigned long var_mtip_hw_read_device_status_47_p2;  4729     loff_t *var_mtip_hw_read_device_status_47_p3;  4730     long res_mtip_hw_read_device_status_47;  4731     char *var_mtip_hw_read_registers_48_p1;  4732     unsigned long var_mtip_hw_read_registers_48_p2;  4733     loff_t *var_mtip_hw_read_registers_48_p3;  4734     long res_mtip_hw_read_registers_48;  4735     char *var_mtip_hw_read_flags_49_p1;  4736     unsigned long var_mtip_hw_read_flags_49_p2;  4737     loff_t *var_mtip_hw_read_flags_49_p3;  4738     long res_mtip_hw_read_flags_49;  4739     struct block_device *var_group2;  4740     unsigned int var_mtip_block_ioctl_69_p1;  4741     unsigned int var_mtip_block_ioctl_69_p2;  4742     unsigned long var_mtip_block_ioctl_69_p3;  4743     unsigned int var_mtip_block_compat_ioctl_70_p1;  4744     unsigned int var_mtip_block_compat_ioctl_70_p2;  4745     unsigned long var_mtip_block_compat_ioctl_70_p3;  4746     struct hd_geometry *var_group3;  4747     struct blk_mq_hw_ctx *var_group4;  4748     const struct blk_mq_queue_data *var_mtip_queue_rq_75_p1;  4749     void *var_mtip_init_cmd_77_p0;  4750     struct request *var_group5;  4751     unsigned int var_mtip_init_cmd_77_p2;  4752     unsigned int var_mtip_init_cmd_77_p3;  4753     unsigned int var_mtip_init_cmd_77_p4;  4754     void *var_mtip_free_cmd_76_p0;  4755     unsigned int var_mtip_free_cmd_76_p2;  4756     unsigned int var_mtip_free_cmd_76_p3;  4757     struct pci_dev *var_group6;  4758     const struct pci_device_id *var_mtip_pci_probe_88_p1;  4759     int res_mtip_pci_probe_88;  4760     struct pm_message var_mtip_pci_suspend_90_p1;  4761     int var_mtip_irq_handler_23_p0;  4762     void *var_mtip_irq_handler_23_p1;  4763     int ldv_s_mtip_device_status_fops_file_operations;  4764     int ldv_s_mtip_regs_fops_file_operations;  4765     int ldv_s_mtip_flags_fops_file_operations;  4766     int ldv_s_mtip_pci_driver_pci_driver;  4767     int tmp;  4768     int tmp___0;  4769     int tmp___1;  5782     ldv_s_mtip_device_status_fops_file_operations = 0;  5784     ldv_s_mtip_regs_fops_file_operations = 0;  5786     ldv_s_mtip_flags_fops_file_operations = 0;  5792     ldv_s_mtip_pci_driver_pci_driver = 0;  5708     LDV_IN_INTERRUPT = 1;  5779     ldv_handler_precall() { /* Function call is skipped due to function is undefined */}           {  4615       int error;  4616       struct lock_class_key __key;  4617       _Bool tmp;  4618       _Bool tmp___0;  4617       printk("\016mtip32xx Version 1.3.1\n") { /* Function call is skipped due to function is undefined */}  4619       __raw_spin_lock_init(&(dev_lock.__annonCompField8.rlock), "&(&dev_lock)->rlock", &__key) { /* Function call is skipped due to function is undefined */}             {    27         union __anonunion___u_19 __u;    27         __u.__val = list;    28         list->prev = list;             }            {    27         union __anonunion___u_19 __u;    27         __u.__val = list;    28         list->prev = list;             } 4625       error = register_blkdev(0U, "mtip32xx") { /* Function call is skipped due to function is undefined */}  4631       mtip_major = error;  4633       dfs_parent = debugfs_create_dir("rssd", (struct dentry *)0) { /* Function call is skipped due to function is undefined */}             {    40         long tmp;    41         long tmp___0;    42         int tmp___1;    40         tmp = __builtin_expect(((unsigned long)ptr) == ((unsigned long)((const void *)0)), 0L) { /* Function call is skipped due to function is undefined */}    40         tmp___1 = 1;             } 4635       printk("\fError creating debugfs parent\n") { /* Function call is skipped due to function is undefined */}  4636       dfs_parent = (struct dentry *)0;  4649       error = __pci_register_driver(&mtip_pci_driver, &__this_module, "mtip32xx") { /* Function call is skipped due to function is undefined */}           } 5798     goto ldv_48047;  5798     tmp___1 = nondet_int() { /* Function call is skipped due to function is undefined */}  5804     goto ldv_48046;  5799     ldv_48046:;  5805     tmp___0 = nondet_int() { /* Function call is skipped due to function is undefined */}  5805     switch (tmp___0);  6177     ldv_handler_precall() { /* Function call is skipped due to function is undefined */}  6178     -mtip_block_compat_ioctl(var_group2, var_mtip_block_compat_ioctl_70_p1, var_mtip_block_compat_ioctl_70_p2, var_mtip_block_compat_ioctl_70_p3)           {         } 3499       struct driver_data *dd;  3500       _Bool tmp;  3501       int tmp___0;  3502       int tmp___1;  3503       long tmp___2;  3504       struct mtip_compat_ide_task_request_s *compat_req_task;  3505       struct ide_task_request_s req_task;  3506       int compat_tasksize;  3507       int outtotal;  3508       int ret;  3509       unsigned long tmp___3;  3510       int __ret_gu;  3511       unsigned long __val_gu;  3512       long tmp___4;  3513       int __ret_gu___0;  3514       unsigned long __val_gu___0;  3515       long tmp___5;  3516       unsigned long tmp___6;  3517       int __ret_pu;  3518       unsigned int __pu_val;  3519       long tmp___7;  3520       int __ret_pu___0;  3521       unsigned int __pu_val___0;  3522       long tmp___8;  3523       int tmp___9;  3501       struct driver_data *__CPAchecker_TMP_0 = (struct driver_data *)(dev->bd_disk->private_data);  3501       dd = __CPAchecker_TMP_0;  3503       tmp = capable(21) { /* Function call is skipped due to function is undefined */}  3503       tmp___0 = 0;             {   310         return ((int)(((unsigned long)(*(addr + ((unsigned long)(nr >> 6))))) >> (((int)nr) & 63))) & 1;;             } 3509       tmp___2 = __builtin_expect(tmp___1 != 0, 0L) { /* Function call is skipped due to function is undefined */}  3512       switch (cmd);  3520       compat_tasksize = 40;  3523       compat_req_task = (struct mtip_compat_ide_task_request_s *)arg;  3526       -copy_from_user((void *)(&req_task), (const void *)arg, ((unsigned long)compat_tasksize) - 8UL)             {   712         int sz;   713         unsigned long tmp;   714         long tmp___0;   715         long tmp___1;   712         tmp = __builtin_object_size((const void *)to, 0) { /* Function call is skipped due to function is undefined */}   712         sz = (int)tmp;   714         __might_fault("./arch/x86/include/asm/uaccess.h", 714) { /* Function call is skipped due to function is undefined */}   734         tmp___0 = __builtin_expect(sz < 0, 1L) { /* Function call is skipped due to function is undefined */}   734         assume(tmp___0 != 0L);   735         n = _copy_from_user(to, from, (unsigned int)n) { /* Function call is skipped due to function is undefined */}   741         return n;;             } 3530       __might_fault("/home/cluser/ldv/ref_launch/work/current--X--drivers--X--defaultlinux-4.5-rc1.tar.xz--X--331_1a--X--cpachecker/linux-4.5-rc1.tar.xz/csd_deg_dscv/11248/dscv_tempdir/dscv/ri/331_1a/drivers/block/mtip32xx/mtip32xx.c", 3530) { /* Function call is skipped due to function is undefined */}  3530       Ignored inline assembler code 3530       req_task.out_size = (unsigned long)((unsigned int)__val_gu);  3530       tmp___4 = __builtin_expect((long)__ret_gu, 0L) { /* Function call is skipped due to function is undefined */}  3533       __might_fault("/home/cluser/ldv/ref_launch/work/current--X--drivers--X--defaultlinux-4.5-rc1.tar.xz--X--331_1a--X--cpachecker/linux-4.5-rc1.tar.xz/csd_deg_dscv/11248/dscv_tempdir/dscv/ri/331_1a/drivers/block/mtip32xx/mtip32xx.c", 3533) { /* Function call is skipped due to function is undefined */}  3533       Ignored inline assembler code 3533       req_task.in_size = (unsigned long)((unsigned int)__val_gu___0);  3533       tmp___5 = __builtin_expect((long)__ret_gu___0, 0L) { /* Function call is skipped due to function is undefined */}  3536       outtotal = 40;             {           } 2004         struct host_to_dev_fis fis;  2005         struct host_to_dev_fis *reply;  2006         u8 *outbuf;  2007         u8 *inbuf;  2008         unsigned long long outbuf_dma;  2009         unsigned long long inbuf_dma;  2010         unsigned long long dma_buffer;  2011         int err;  2012         unsigned int taskin;  2013         unsigned int taskout;  2014         unsigned char nsect;  2015         unsigned int timeout;  2016         unsigned int force_single_sector;  2017         unsigned int transfer_size;  2018         unsigned long task_file_data;  2019         int intotal;  2020         int erasemode;  2021         void *tmp;  2022         long tmp___0;  2023         _Bool tmp___1;  2024         void *tmp___2;  2025         long tmp___3;  2026         _Bool tmp___4;  2027         int tmp___5;  2028         unsigned int tmp___6;  2029         unsigned long tmp___7;  2030         unsigned long tmp___8;  2008         outbuf = (u8 *)0U;  2009         inbuf = (u8 *)0U;  2010         outbuf_dma = 0ULL;  2011         inbuf_dma = 0ULL;  2012         dma_buffer = 0ULL;  2013         err = 0;  2014         taskin = 0U;  2015         taskout = 0U;  2016         nsect = 0U;  2021         unsigned int __CPAchecker_TMP_0 = (unsigned int)(req_task->out_size);  2021         intotal = (int)(__CPAchecker_TMP_0 + ((unsigned int)outtotal));  2022         erasemode = 0;  2024         unsigned int __CPAchecker_TMP_1 = (unsigned int)(req_task->out_size);  2024         taskout = __CPAchecker_TMP_1;  2025         unsigned int __CPAchecker_TMP_2 = (unsigned int)(req_task->in_size);  2025         taskin = __CPAchecker_TMP_2;  2033         tmp = memdup_user(((const void *)buf) + ((unsigned long)outtotal), (size_t )taskout) { /* Function call is skipped due to function is undefined */}  2033         outbuf = (u8 *)tmp;               {    35           long tmp;    35           tmp = __builtin_expect(((unsigned long)ptr) > 18446744073709547520UL, 0L) { /* Function call is skipped due to function is undefined */}               }              {    35           unsigned long long tmp;    34           struct device *__CPAchecker_TMP_0;    34           __CPAchecker_TMP_0 = &(hwdev->dev);    34           -ldv_dma_map_single_attrs_1(__CPAchecker_TMP_0, ptr, size, (enum dma_data_direction )direction, (struct dma_attrs *)0)                 {               }   14             unsigned long long tmp;                   {                 }   58               unsigned long long nonedetermined;    59               void *tmp;    58               tmp = ldv_undef_ptr() { /* Function call is skipped due to function is undefined */}    58               nonedetermined = (dma_addr_t )tmp;    63               LDV_DMA_MAP_CALLS = LDV_DMA_MAP_CALLS + 1;                   } 2047         dma_buffer = outbuf_dma;  2051         tmp___2 = memdup_user(((const void *)buf) + ((unsigned long)intotal), (size_t )taskin) { /* Function call is skipped due to function is undefined */}  2051         inbuf = (u8 *)tmp___2;               {    35           long tmp;    35           tmp = __builtin_expect(((unsigned long)ptr) > 18446744073709547520UL, 0L) { /* Function call is skipped due to function is undefined */}               }              {             }   35           unsigned long long tmp;    34           struct device *__CPAchecker_TMP_0;    34           __CPAchecker_TMP_0 = &(hwdev->dev);    34           -ldv_dma_map_single_attrs_1(__CPAchecker_TMP_0, ptr, size, (enum dma_data_direction )direction, (struct dma_attrs *)0)                 {               }   14             unsigned long long tmp;                   {                 }   58               unsigned long long nonedetermined;    59               void *tmp;    58               tmp = ldv_undef_ptr() { /* Function call is skipped due to function is undefined */}    58               nonedetermined = (dma_addr_t )tmp;                   } |              Source code         
     1 #ifndef _ASM_X86_BITOPS_H
    2 #define _ASM_X86_BITOPS_H
    3 
    4 /*
    5  * Copyright 1992, Linus Torvalds.
    6  *
    7  * Note: inlines with more than a single statement should be marked
    8  * __always_inline to avoid problems with older gcc's inlining heuristics.
    9  */
   10 
   11 #ifndef _LINUX_BITOPS_H
   12 #error only <linux/bitops.h> can be included directly
   13 #endif
   14 
   15 #include <linux/compiler.h>
   16 #include <asm/alternative.h>
   17 #include <asm/rmwcc.h>
   18 #include <asm/barrier.h>
   19 
   20 #if BITS_PER_LONG == 32
   21 # define _BITOPS_LONG_SHIFT 5
   22 #elif BITS_PER_LONG == 64
   23 # define _BITOPS_LONG_SHIFT 6
   24 #else
   25 # error "Unexpected BITS_PER_LONG"
   26 #endif
   27 
   28 #define BIT_64(n)			(U64_C(1) << (n))
   29 
   30 /*
   31  * These have to be done with inline assembly: that way the bit-setting
   32  * is guaranteed to be atomic. All bit operations return 0 if the bit
   33  * was cleared before the operation and != 0 if it was not.
   34  *
   35  * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1).
   36  */
   37 
   38 #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
   39 /* Technically wrong, but this avoids compilation errors on some gcc
   40    versions. */
   41 #define BITOP_ADDR(x) "=m" (*(volatile long *) (x))
   42 #else
   43 #define BITOP_ADDR(x) "+m" (*(volatile long *) (x))
   44 #endif
   45 
   46 #define ADDR				BITOP_ADDR(addr)
   47 
   48 /*
   49  * We do the locked ops that don't return the old value as
   50  * a mask operation on a byte.
   51  */
   52 #define IS_IMMEDIATE(nr)		(__builtin_constant_p(nr))
   53 #define CONST_MASK_ADDR(nr, addr)	BITOP_ADDR((void *)(addr) + ((nr)>>3))
   54 #define CONST_MASK(nr)			(1 << ((nr) & 7))
   55 
   56 /**
   57  * set_bit - Atomically set a bit in memory
   58  * @nr: the bit to set
   59  * @addr: the address to start counting from
   60  *
   61  * This function is atomic and may not be reordered.  See __set_bit()
   62  * if you do not require the atomic guarantees.
   63  *
   64  * Note: there are no guarantees that this function will not be reordered
   65  * on non x86 architectures, so if you are writing portable code,
   66  * make sure not to rely on its reordering guarantees.
   67  *
   68  * Note that @nr may be almost arbitrarily large; this function is not
   69  * restricted to acting on a single-word quantity.
   70  */
   71 static __always_inline void
   72 set_bit(long nr, volatile unsigned long *addr)
   73 {
   74 	if (IS_IMMEDIATE(nr)) {
   75 		asm volatile(LOCK_PREFIX "orb %1,%0"
   76 			: CONST_MASK_ADDR(nr, addr)
   77 			: "iq" ((u8)CONST_MASK(nr))
   78 			: "memory");
   79 	} else {
   80 		asm volatile(LOCK_PREFIX "bts %1,%0"
   81 			: BITOP_ADDR(addr) : "Ir" (nr) : "memory");
   82 	}
   83 }
   84 
   85 /**
   86  * __set_bit - Set a bit in memory
   87  * @nr: the bit to set
   88  * @addr: the address to start counting from
   89  *
   90  * Unlike set_bit(), this function is non-atomic and may be reordered.
   91  * If it's called on the same region of memory simultaneously, the effect
   92  * may be that only one operation succeeds.
   93  */
   94 static inline void __set_bit(long nr, volatile unsigned long *addr)
   95 {
   96 	asm volatile("bts %1,%0" : ADDR : "Ir" (nr) : "memory");
   97 }
   98 
   99 /**
  100  * clear_bit - Clears a bit in memory
  101  * @nr: Bit to clear
  102  * @addr: Address to start counting from
  103  *
  104  * clear_bit() is atomic and may not be reordered.  However, it does
  105  * not contain a memory barrier, so if it is used for locking purposes,
  106  * you should call smp_mb__before_atomic() and/or smp_mb__after_atomic()
  107  * in order to ensure changes are visible on other processors.
  108  */
  109 static __always_inline void
  110 clear_bit(long nr, volatile unsigned long *addr)
  111 {
  112 	if (IS_IMMEDIATE(nr)) {
  113 		asm volatile(LOCK_PREFIX "andb %1,%0"
  114 			: CONST_MASK_ADDR(nr, addr)
  115 			: "iq" ((u8)~CONST_MASK(nr)));
  116 	} else {
  117 		asm volatile(LOCK_PREFIX "btr %1,%0"
  118 			: BITOP_ADDR(addr)
  119 			: "Ir" (nr));
  120 	}
  121 }
  122 
  123 /*
  124  * clear_bit_unlock - Clears a bit in memory
  125  * @nr: Bit to clear
  126  * @addr: Address to start counting from
  127  *
  128  * clear_bit() is atomic and implies release semantics before the memory
  129  * operation. It can be used for an unlock.
  130  */
  131 static inline void clear_bit_unlock(long nr, volatile unsigned long *addr)
  132 {
  133 	barrier();
  134 	clear_bit(nr, addr);
  135 }
  136 
  137 static inline void __clear_bit(long nr, volatile unsigned long *addr)
  138 {
  139 	asm volatile("btr %1,%0" : ADDR : "Ir" (nr));
  140 }
  141 
  142 /*
  143  * __clear_bit_unlock - Clears a bit in memory
  144  * @nr: Bit to clear
  145  * @addr: Address to start counting from
  146  *
  147  * __clear_bit() is non-atomic and implies release semantics before the memory
  148  * operation. It can be used for an unlock if no other CPUs can concurrently
  149  * modify other bits in the word.
  150  *
  151  * No memory barrier is required here, because x86 cannot reorder stores past
  152  * older loads. Same principle as spin_unlock.
  153  */
  154 static inline void __clear_bit_unlock(long nr, volatile unsigned long *addr)
  155 {
  156 	barrier();
  157 	__clear_bit(nr, addr);
  158 }
  159 
  160 /**
  161  * __change_bit - Toggle a bit in memory
  162  * @nr: the bit to change
  163  * @addr: the address to start counting from
  164  *
  165  * Unlike change_bit(), this function is non-atomic and may be reordered.
  166  * If it's called on the same region of memory simultaneously, the effect
  167  * may be that only one operation succeeds.
  168  */
  169 static inline void __change_bit(long nr, volatile unsigned long *addr)
  170 {
  171 	asm volatile("btc %1,%0" : ADDR : "Ir" (nr));
  172 }
  173 
  174 /**
  175  * change_bit - Toggle a bit in memory
  176  * @nr: Bit to change
  177  * @addr: Address to start counting from
  178  *
  179  * change_bit() is atomic and may not be reordered.
  180  * Note that @nr may be almost arbitrarily large; this function is not
  181  * restricted to acting on a single-word quantity.
  182  */
  183 static inline void change_bit(long nr, volatile unsigned long *addr)
  184 {
  185 	if (IS_IMMEDIATE(nr)) {
  186 		asm volatile(LOCK_PREFIX "xorb %1,%0"
  187 			: CONST_MASK_ADDR(nr, addr)
  188 			: "iq" ((u8)CONST_MASK(nr)));
  189 	} else {
  190 		asm volatile(LOCK_PREFIX "btc %1,%0"
  191 			: BITOP_ADDR(addr)
  192 			: "Ir" (nr));
  193 	}
  194 }
  195 
  196 /**
  197  * test_and_set_bit - Set a bit and return its old value
  198  * @nr: Bit to set
  199  * @addr: Address to count from
  200  *
  201  * This operation is atomic and cannot be reordered.
  202  * It also implies a memory barrier.
  203  */
  204 static inline int test_and_set_bit(long nr, volatile unsigned long *addr)
  205 {
  206 	GEN_BINARY_RMWcc(LOCK_PREFIX "bts", *addr, "Ir", nr, "%0", "c");
  207 }
  208 
  209 /**
  210  * test_and_set_bit_lock - Set a bit and return its old value for lock
  211  * @nr: Bit to set
  212  * @addr: Address to count from
  213  *
  214  * This is the same as test_and_set_bit on x86.
  215  */
  216 static __always_inline int
  217 test_and_set_bit_lock(long nr, volatile unsigned long *addr)
  218 {
  219 	return test_and_set_bit(nr, addr);
  220 }
  221 
  222 /**
  223  * __test_and_set_bit - Set a bit and return its old value
  224  * @nr: Bit to set
  225  * @addr: Address to count from
  226  *
  227  * This operation is non-atomic and can be reordered.
  228  * If two examples of this operation race, one can appear to succeed
  229  * but actually fail.  You must protect multiple accesses with a lock.
  230  */
  231 static inline int __test_and_set_bit(long nr, volatile unsigned long *addr)
  232 {
  233 	int oldbit;
  234 
  235 	asm("bts %2,%1\n\t"
  236 	    "sbb %0,%0"
  237 	    : "=r" (oldbit), ADDR
  238 	    : "Ir" (nr));
  239 	return oldbit;
  240 }
  241 
  242 /**
  243  * test_and_clear_bit - Clear a bit and return its old value
  244  * @nr: Bit to clear
  245  * @addr: Address to count from
  246  *
  247  * This operation is atomic and cannot be reordered.
  248  * It also implies a memory barrier.
  249  */
  250 static inline int test_and_clear_bit(long nr, volatile unsigned long *addr)
  251 {
  252 	GEN_BINARY_RMWcc(LOCK_PREFIX "btr", *addr, "Ir", nr, "%0", "c");
  253 }
  254 
  255 /**
  256  * __test_and_clear_bit - Clear a bit and return its old value
  257  * @nr: Bit to clear
  258  * @addr: Address to count from
  259  *
  260  * This operation is non-atomic and can be reordered.
  261  * If two examples of this operation race, one can appear to succeed
  262  * but actually fail.  You must protect multiple accesses with a lock.
  263  *
  264  * Note: the operation is performed atomically with respect to
  265  * the local CPU, but not other CPUs. Portable code should not
  266  * rely on this behaviour.
  267  * KVM relies on this behaviour on x86 for modifying memory that is also
  268  * accessed from a hypervisor on the same CPU if running in a VM: don't change
  269  * this without also updating arch/x86/kernel/kvm.c
  270  */
  271 static inline int __test_and_clear_bit(long nr, volatile unsigned long *addr)
  272 {
  273 	int oldbit;
  274 
  275 	asm volatile("btr %2,%1\n\t"
  276 		     "sbb %0,%0"
  277 		     : "=r" (oldbit), ADDR
  278 		     : "Ir" (nr));
  279 	return oldbit;
  280 }
  281 
  282 /* WARNING: non atomic and it can be reordered! */
  283 static inline int __test_and_change_bit(long nr, volatile unsigned long *addr)
  284 {
  285 	int oldbit;
  286 
  287 	asm volatile("btc %2,%1\n\t"
  288 		     "sbb %0,%0"
  289 		     : "=r" (oldbit), ADDR
  290 		     : "Ir" (nr) : "memory");
  291 
  292 	return oldbit;
  293 }
  294 
  295 /**
  296  * test_and_change_bit - Change a bit and return its old value
  297  * @nr: Bit to change
  298  * @addr: Address to count from
  299  *
  300  * This operation is atomic and cannot be reordered.
  301  * It also implies a memory barrier.
  302  */
  303 static inline int test_and_change_bit(long nr, volatile unsigned long *addr)
  304 {
  305 	GEN_BINARY_RMWcc(LOCK_PREFIX "btc", *addr, "Ir", nr, "%0", "c");
  306 }
  307 
  308 static __always_inline int constant_test_bit(long nr, const volatile unsigned long *addr)
  309 {
  310 	return ((1UL << (nr & (BITS_PER_LONG-1))) &
  311 		(addr[nr >> _BITOPS_LONG_SHIFT])) != 0;
  312 }
  313 
  314 static inline int variable_test_bit(long nr, volatile const unsigned long *addr)
  315 {
  316 	int oldbit;
  317 
  318 	asm volatile("bt %2,%1\n\t"
  319 		     "sbb %0,%0"
  320 		     : "=r" (oldbit)
  321 		     : "m" (*(unsigned long *)addr), "Ir" (nr));
  322 
  323 	return oldbit;
  324 }
  325 
  326 #if 0 /* Fool kernel-doc since it doesn't do macros yet */
  327 /**
  328  * test_bit - Determine whether a bit is set
  329  * @nr: bit number to test
  330  * @addr: Address to start counting from
  331  */
  332 static int test_bit(int nr, const volatile unsigned long *addr);
  333 #endif
  334 
  335 #define test_bit(nr, addr)			\
  336 	(__builtin_constant_p((nr))		\
  337 	 ? constant_test_bit((nr), (addr))	\
  338 	 : variable_test_bit((nr), (addr)))
  339 
  340 /**
  341  * __ffs - find first set bit in word
  342  * @word: The word to search
  343  *
  344  * Undefined if no bit exists, so code should check against 0 first.
  345  */
  346 static inline unsigned long __ffs(unsigned long word)
  347 {
  348 	asm("rep; bsf %1,%0"
  349 		: "=r" (word)
  350 		: "rm" (word));
  351 	return word;
  352 }
  353 
  354 /**
  355  * ffz - find first zero bit in word
  356  * @word: The word to search
  357  *
  358  * Undefined if no zero exists, so code should check against ~0UL first.
  359  */
  360 static inline unsigned long ffz(unsigned long word)
  361 {
  362 	asm("rep; bsf %1,%0"
  363 		: "=r" (word)
  364 		: "r" (~word));
  365 	return word;
  366 }
  367 
  368 /*
  369  * __fls: find last set bit in word
  370  * @word: The word to search
  371  *
  372  * Undefined if no set bit exists, so code should check against 0 first.
  373  */
  374 static inline unsigned long __fls(unsigned long word)
  375 {
  376 	asm("bsr %1,%0"
  377 	    : "=r" (word)
  378 	    : "rm" (word));
  379 	return word;
  380 }
  381 
  382 #undef ADDR
  383 
  384 #ifdef __KERNEL__
  385 /**
  386  * ffs - find first set bit in word
  387  * @x: the word to search
  388  *
  389  * This is defined the same way as the libc and compiler builtin ffs
  390  * routines, therefore differs in spirit from the other bitops.
  391  *
  392  * ffs(value) returns 0 if value is 0 or the position of the first
  393  * set bit if value is nonzero. The first (least significant) bit
  394  * is at position 1.
  395  */
  396 static inline int ffs(int x)
  397 {
  398 	int r;
  399 
  400 #ifdef CONFIG_X86_64
  401 	/*
  402 	 * AMD64 says BSFL won't clobber the dest reg if x==0; Intel64 says the
  403 	 * dest reg is undefined if x==0, but their CPU architect says its
  404 	 * value is written to set it to the same as before, except that the
  405 	 * top 32 bits will be cleared.
  406 	 *
  407 	 * We cannot do this on 32 bits because at the very least some
  408 	 * 486 CPUs did not behave this way.
  409 	 */
  410 	asm("bsfl %1,%0"
  411 	    : "=r" (r)
  412 	    : "rm" (x), "0" (-1));
  413 #elif defined(CONFIG_X86_CMOV)
  414 	asm("bsfl %1,%0\n\t"
  415 	    "cmovzl %2,%0"
  416 	    : "=&r" (r) : "rm" (x), "r" (-1));
  417 #else
  418 	asm("bsfl %1,%0\n\t"
  419 	    "jnz 1f\n\t"
  420 	    "movl $-1,%0\n"
  421 	    "1:" : "=r" (r) : "rm" (x));
  422 #endif
  423 	return r + 1;
  424 }
  425 
  426 /**
  427  * fls - find last set bit in word
  428  * @x: the word to search
  429  *
  430  * This is defined in a similar way as the libc and compiler builtin
  431  * ffs, but returns the position of the most significant set bit.
  432  *
  433  * fls(value) returns 0 if value is 0 or the position of the last
  434  * set bit if value is nonzero. The last (most significant) bit is
  435  * at position 32.
  436  */
  437 static inline int fls(int x)
  438 {
  439 	int r;
  440 
  441 #ifdef CONFIG_X86_64
  442 	/*
  443 	 * AMD64 says BSRL won't clobber the dest reg if x==0; Intel64 says the
  444 	 * dest reg is undefined if x==0, but their CPU architect says its
  445 	 * value is written to set it to the same as before, except that the
  446 	 * top 32 bits will be cleared.
  447 	 *
  448 	 * We cannot do this on 32 bits because at the very least some
  449 	 * 486 CPUs did not behave this way.
  450 	 */
  451 	asm("bsrl %1,%0"
  452 	    : "=r" (r)
  453 	    : "rm" (x), "0" (-1));
  454 #elif defined(CONFIG_X86_CMOV)
  455 	asm("bsrl %1,%0\n\t"
  456 	    "cmovzl %2,%0"
  457 	    : "=&r" (r) : "rm" (x), "rm" (-1));
  458 #else
  459 	asm("bsrl %1,%0\n\t"
  460 	    "jnz 1f\n\t"
  461 	    "movl $-1,%0\n"
  462 	    "1:" : "=r" (r) : "rm" (x));
  463 #endif
  464 	return r + 1;
  465 }
  466 
  467 /**
  468  * fls64 - find last set bit in a 64-bit word
  469  * @x: the word to search
  470  *
  471  * This is defined in a similar way as the libc and compiler builtin
  472  * ffsll, but returns the position of the most significant set bit.
  473  *
  474  * fls64(value) returns 0 if value is 0 or the position of the last
  475  * set bit if value is nonzero. The last (most significant) bit is
  476  * at position 64.
  477  */
  478 #ifdef CONFIG_X86_64
  479 static __always_inline int fls64(__u64 x)
  480 {
  481 	int bitpos = -1;
  482 	/*
  483 	 * AMD64 says BSRQ won't clobber the dest reg if x==0; Intel64 says the
  484 	 * dest reg is undefined if x==0, but their CPU architect says its
  485 	 * value is written to set it to the same as before.
  486 	 */
  487 	asm("bsrq %1,%q0"
  488 	    : "+r" (bitpos)
  489 	    : "rm" (x));
  490 	return bitpos + 1;
  491 }
  492 #else
  493 #include <asm-generic/bitops/fls64.h>
  494 #endif
  495 
  496 #include <asm-generic/bitops/find.h>
  497 
  498 #include <asm-generic/bitops/sched.h>
  499 
  500 #include <asm/arch_hweight.h>
  501 
  502 #include <asm-generic/bitops/const_hweight.h>
  503 
  504 #include <asm-generic/bitops/le.h>
  505 
  506 #include <asm-generic/bitops/ext2-atomic-setbit.h>
  507 
  508 #endif /* __KERNEL__ */
  509 #endif /* _ASM_X86_BITOPS_H */                 1 #ifndef _ASM_X86_UACCESS_H
    2 #define _ASM_X86_UACCESS_H
    3 /*
    4  * User space memory access functions
    5  */
    6 #include <linux/errno.h>
    7 #include <linux/compiler.h>
    8 #include <linux/thread_info.h>
    9 #include <linux/string.h>
   10 #include <asm/asm.h>
   11 #include <asm/page.h>
   12 #include <asm/smap.h>
   13 
   14 #define VERIFY_READ 0
   15 #define VERIFY_WRITE 1
   16 
   17 /*
   18  * The fs value determines whether argument validity checking should be
   19  * performed or not.  If get_fs() == USER_DS, checking is performed, with
   20  * get_fs() == KERNEL_DS, checking is bypassed.
   21  *
   22  * For historical reasons, these macros are grossly misnamed.
   23  */
   24 
   25 #define MAKE_MM_SEG(s)	((mm_segment_t) { (s) })
   26 
   27 #define KERNEL_DS	MAKE_MM_SEG(-1UL)
   28 #define USER_DS 	MAKE_MM_SEG(TASK_SIZE_MAX)
   29 
   30 #define get_ds()	(KERNEL_DS)
   31 #define get_fs()	(current_thread_info()->addr_limit)
   32 #define set_fs(x)	(current_thread_info()->addr_limit = (x))
   33 
   34 #define segment_eq(a, b)	((a).seg == (b).seg)
   35 
   36 #define user_addr_max() (current_thread_info()->addr_limit.seg)
   37 #define __addr_ok(addr) 	\
   38 	((unsigned long __force)(addr) < user_addr_max())
   39 
   40 /*
   41  * Test whether a block of memory is a valid user space address.
   42  * Returns 0 if the range is valid, nonzero otherwise.
   43  */
   44 static inline bool __chk_range_not_ok(unsigned long addr, unsigned long size, unsigned long limit)
   45 {
   46 	/*
   47 	 * If we have used "sizeof()" for the size,
   48 	 * we know it won't overflow the limit (but
   49 	 * it might overflow the 'addr', so it's
   50 	 * important to subtract the size from the
   51 	 * limit, not add it to the address).
   52 	 */
   53 	if (__builtin_constant_p(size))
   54 		return unlikely(addr > limit - size);
   55 
   56 	/* Arbitrary sizes? Be careful about overflow */
   57 	addr += size;
   58 	if (unlikely(addr < size))
   59 		return true;
   60 	return unlikely(addr > limit);
   61 }
   62 
   63 #define __range_not_ok(addr, size, limit)				\
   64 ({									\
   65 	__chk_user_ptr(addr);						\
   66 	__chk_range_not_ok((unsigned long __force)(addr), size, limit); \
   67 })
   68 
   69 /**
   70  * access_ok: - Checks if a user space pointer is valid
   71  * @type: Type of access: %VERIFY_READ or %VERIFY_WRITE.  Note that
   72  *        %VERIFY_WRITE is a superset of %VERIFY_READ - if it is safe
   73  *        to write to a block, it is always safe to read from it.
   74  * @addr: User space pointer to start of block to check
   75  * @size: Size of block to check
   76  *
   77  * Context: User context only. This function may sleep if pagefaults are
   78  *          enabled.
   79  *
   80  * Checks if a pointer to a block of memory in user space is valid.
   81  *
   82  * Returns true (nonzero) if the memory block may be valid, false (zero)
   83  * if it is definitely invalid.
   84  *
   85  * Note that, depending on architecture, this function probably just
   86  * checks that the pointer is in the user space range - after calling
   87  * this function, memory access functions may still return -EFAULT.
   88  */
   89 #define access_ok(type, addr, size) \
   90 	likely(!__range_not_ok(addr, size, user_addr_max()))
   91 
   92 /*
   93  * The exception table consists of pairs of addresses relative to the
   94  * exception table enty itself: the first is the address of an
   95  * instruction that is allowed to fault, and the second is the address
   96  * at which the program should continue.  No registers are modified,
   97  * so it is entirely up to the continuation code to figure out what to
   98  * do.
   99  *
  100  * All the routines below use bits of fixup code that are out of line
  101  * with the main instruction path.  This means when everything is well,
  102  * we don't even have to jump over them.  Further, they do not intrude
  103  * on our cache or tlb entries.
  104  */
  105 
  106 struct exception_table_entry {
  107 	int insn, fixup;
  108 };
  109 /* This is not the generic standard exception_table_entry format */
  110 #define ARCH_HAS_SORT_EXTABLE
  111 #define ARCH_HAS_SEARCH_EXTABLE
  112 
  113 extern int fixup_exception(struct pt_regs *regs);
  114 extern int early_fixup_exception(unsigned long *ip);
  115 
  116 /*
  117  * These are the main single-value transfer routines.  They automatically
  118  * use the right size if we just have the right pointer type.
  119  *
  120  * This gets kind of ugly. We want to return _two_ values in "get_user()"
  121  * and yet we don't want to do any pointers, because that is too much
  122  * of a performance impact. Thus we have a few rather ugly macros here,
  123  * and hide all the ugliness from the user.
  124  *
  125  * The "__xxx" versions of the user access functions are versions that
  126  * do not verify the address space, that must have been done previously
  127  * with a separate "access_ok()" call (this is used when we do multiple
  128  * accesses to the same area of user memory).
  129  */
  130 
  131 extern int __get_user_1(void);
  132 extern int __get_user_2(void);
  133 extern int __get_user_4(void);
  134 extern int __get_user_8(void);
  135 extern int __get_user_bad(void);
  136 
  137 #define __uaccess_begin() stac()
  138 #define __uaccess_end()   clac()
  139 
  140 /*
  141  * This is a type: either unsigned long, if the argument fits into
  142  * that type, or otherwise unsigned long long.
  143  */
  144 #define __inttype(x) \
  145 __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
  146 
  147 /**
  148  * get_user: - Get a simple variable from user space.
  149  * @x:   Variable to store result.
  150  * @ptr: Source address, in user space.
  151  *
  152  * Context: User context only. This function may sleep if pagefaults are
  153  *          enabled.
  154  *
  155  * This macro copies a single simple variable from user space to kernel
  156  * space.  It supports simple types like char and int, but not larger
  157  * data types like structures or arrays.
  158  *
  159  * @ptr must have pointer-to-simple-variable type, and the result of
  160  * dereferencing @ptr must be assignable to @x without a cast.
  161  *
  162  * Returns zero on success, or -EFAULT on error.
  163  * On error, the variable @x is set to zero.
  164  */
  165 /*
  166  * Careful: we have to cast the result to the type of the pointer
  167  * for sign reasons.
  168  *
  169  * The use of _ASM_DX as the register specifier is a bit of a
  170  * simplification, as gcc only cares about it as the starting point
  171  * and not size: for a 64-bit value it will use %ecx:%edx on 32 bits
  172  * (%ecx being the next register in gcc's x86 register sequence), and
  173  * %rdx on 64 bits.
  174  *
  175  * Clang/LLVM cares about the size of the register, but still wants
  176  * the base register for something that ends up being a pair.
  177  */
  178 #define get_user(x, ptr)						\
  179 ({									\
  180 	int __ret_gu;							\
  181 	register __inttype(*(ptr)) __val_gu asm("%"_ASM_DX);		\
  182 	__chk_user_ptr(ptr);						\
  183 	might_fault();							\
  184 	asm volatile("call __get_user_%P3"				\
  185 		     : "=a" (__ret_gu), "=r" (__val_gu)			\
  186 		     : "0" (ptr), "i" (sizeof(*(ptr))));		\
  187 	(x) = (__force __typeof__(*(ptr))) __val_gu;			\
  188 	__builtin_expect(__ret_gu, 0);					\
  189 })
  190 
  191 #define __put_user_x(size, x, ptr, __ret_pu)			\
  192 	asm volatile("call __put_user_" #size : "=a" (__ret_pu)	\
  193 		     : "0" ((typeof(*(ptr)))(x)), "c" (ptr) : "ebx")
  194 
  195 
  196 
  197 #ifdef CONFIG_X86_32
  198 #define __put_user_asm_u64(x, addr, err, errret)			\
  199 	asm volatile("\n"						\
  200 		     "1:	movl %%eax,0(%2)\n"			\
  201 		     "2:	movl %%edx,4(%2)\n"			\
  202 		     "3:"						\
  203 		     ".section .fixup,\"ax\"\n"				\
  204 		     "4:	movl %3,%0\n"				\
  205 		     "	jmp 3b\n"					\
  206 		     ".previous\n"					\
  207 		     _ASM_EXTABLE(1b, 4b)				\
  208 		     _ASM_EXTABLE(2b, 4b)				\
  209 		     : "=r" (err)					\
  210 		     : "A" (x), "r" (addr), "i" (errret), "0" (err))
  211 
  212 #define __put_user_asm_ex_u64(x, addr)					\
  213 	asm volatile("\n"						\
  214 		     "1:	movl %%eax,0(%1)\n"			\
  215 		     "2:	movl %%edx,4(%1)\n"			\
  216 		     "3:"						\
  217 		     _ASM_EXTABLE_EX(1b, 2b)				\
  218 		     _ASM_EXTABLE_EX(2b, 3b)				\
  219 		     : : "A" (x), "r" (addr))
  220 
  221 #define __put_user_x8(x, ptr, __ret_pu)				\
  222 	asm volatile("call __put_user_8" : "=a" (__ret_pu)	\
  223 		     : "A" ((typeof(*(ptr)))(x)), "c" (ptr) : "ebx")
  224 #else
  225 #define __put_user_asm_u64(x, ptr, retval, errret) \
  226 	__put_user_asm(x, ptr, retval, "q", "", "er", errret)
  227 #define __put_user_asm_ex_u64(x, addr)	\
  228 	__put_user_asm_ex(x, addr, "q", "", "er")
  229 #define __put_user_x8(x, ptr, __ret_pu) __put_user_x(8, x, ptr, __ret_pu)
  230 #endif
  231 
  232 extern void __put_user_bad(void);
  233 
  234 /*
  235  * Strange magic calling convention: pointer in %ecx,
  236  * value in %eax(:%edx), return value in %eax. clobbers %rbx
  237  */
  238 extern void __put_user_1(void);
  239 extern void __put_user_2(void);
  240 extern void __put_user_4(void);
  241 extern void __put_user_8(void);
  242 
  243 /**
  244  * put_user: - Write a simple value into user space.
  245  * @x:   Value to copy to user space.
  246  * @ptr: Destination address, in user space.
  247  *
  248  * Context: User context only. This function may sleep if pagefaults are
  249  *          enabled.
  250  *
  251  * This macro copies a single simple value from kernel space to user
  252  * space.  It supports simple types like char and int, but not larger
  253  * data types like structures or arrays.
  254  *
  255  * @ptr must have pointer-to-simple-variable type, and @x must be assignable
  256  * to the result of dereferencing @ptr.
  257  *
  258  * Returns zero on success, or -EFAULT on error.
  259  */
  260 #define put_user(x, ptr)					\
  261 ({								\
  262 	int __ret_pu;						\
  263 	__typeof__(*(ptr)) __pu_val;				\
  264 	__chk_user_ptr(ptr);					\
  265 	might_fault();						\
  266 	__pu_val = x;						\
  267 	switch (sizeof(*(ptr))) {				\
  268 	case 1:							\
  269 		__put_user_x(1, __pu_val, ptr, __ret_pu);	\
  270 		break;						\
  271 	case 2:							\
  272 		__put_user_x(2, __pu_val, ptr, __ret_pu);	\
  273 		break;						\
  274 	case 4:							\
  275 		__put_user_x(4, __pu_val, ptr, __ret_pu);	\
  276 		break;						\
  277 	case 8:							\
  278 		__put_user_x8(__pu_val, ptr, __ret_pu);		\
  279 		break;						\
  280 	default:						\
  281 		__put_user_x(X, __pu_val, ptr, __ret_pu);	\
  282 		break;						\
  283 	}							\
  284 	__builtin_expect(__ret_pu, 0);				\
  285 })
  286 
  287 #define __put_user_size(x, ptr, size, retval, errret)			\
  288 do {									\
  289 	retval = 0;							\
  290 	__chk_user_ptr(ptr);						\
  291 	switch (size) {							\
  292 	case 1:								\
  293 		__put_user_asm(x, ptr, retval, "b", "b", "iq", errret);	\
  294 		break;							\
  295 	case 2:								\
  296 		__put_user_asm(x, ptr, retval, "w", "w", "ir", errret);	\
  297 		break;							\
  298 	case 4:								\
  299 		__put_user_asm(x, ptr, retval, "l", "k", "ir", errret);	\
  300 		break;							\
  301 	case 8:								\
  302 		__put_user_asm_u64((__typeof__(*ptr))(x), ptr, retval,	\
  303 				   errret);				\
  304 		break;							\
  305 	default:							\
  306 		__put_user_bad();					\
  307 	}								\
  308 } while (0)
  309 
  310 /*
  311  * This doesn't do __uaccess_begin/end - the exception handling
  312  * around it must do that.
  313  */
  314 #define __put_user_size_ex(x, ptr, size)				\
  315 do {									\
  316 	__chk_user_ptr(ptr);						\
  317 	switch (size) {							\
  318 	case 1:								\
  319 		__put_user_asm_ex(x, ptr, "b", "b", "iq");		\
  320 		break;							\
  321 	case 2:								\
  322 		__put_user_asm_ex(x, ptr, "w", "w", "ir");		\
  323 		break;							\
  324 	case 4:								\
  325 		__put_user_asm_ex(x, ptr, "l", "k", "ir");		\
  326 		break;							\
  327 	case 8:								\
  328 		__put_user_asm_ex_u64((__typeof__(*ptr))(x), ptr);	\
  329 		break;							\
  330 	default:							\
  331 		__put_user_bad();					\
  332 	}								\
  333 } while (0)
  334 
  335 #ifdef CONFIG_X86_32
  336 #define __get_user_asm_u64(x, ptr, retval, errret)	(x) = __get_user_bad()
  337 #define __get_user_asm_ex_u64(x, ptr)			(x) = __get_user_bad()
  338 #else
  339 #define __get_user_asm_u64(x, ptr, retval, errret) \
  340 	 __get_user_asm(x, ptr, retval, "q", "", "=r", errret)
  341 #define __get_user_asm_ex_u64(x, ptr) \
  342 	 __get_user_asm_ex(x, ptr, "q", "", "=r")
  343 #endif
  344 
  345 #define __get_user_size(x, ptr, size, retval, errret)			\
  346 do {									\
  347 	retval = 0;							\
  348 	__chk_user_ptr(ptr);						\
  349 	switch (size) {							\
  350 	case 1:								\
  351 		__get_user_asm(x, ptr, retval, "b", "b", "=q", errret);	\
  352 		break;							\
  353 	case 2:								\
  354 		__get_user_asm(x, ptr, retval, "w", "w", "=r", errret);	\
  355 		break;							\
  356 	case 4:								\
  357 		__get_user_asm(x, ptr, retval, "l", "k", "=r", errret);	\
  358 		break;							\
  359 	case 8:								\
  360 		__get_user_asm_u64(x, ptr, retval, errret);		\
  361 		break;							\
  362 	default:							\
  363 		(x) = __get_user_bad();					\
  364 	}								\
  365 } while (0)
  366 
  367 #define __get_user_asm(x, addr, err, itype, rtype, ltype, errret)	\
  368 	asm volatile("\n"						\
  369 		     "1:	mov"itype" %2,%"rtype"1\n"		\
  370 		     "2:\n"						\
  371 		     ".section .fixup,\"ax\"\n"				\
  372 		     "3:	mov %3,%0\n"				\
  373 		     "	xor"itype" %"rtype"1,%"rtype"1\n"		\
  374 		     "	jmp 2b\n"					\
  375 		     ".previous\n"					\
  376 		     _ASM_EXTABLE(1b, 3b)				\
  377 		     : "=r" (err), ltype(x)				\
  378 		     : "m" (__m(addr)), "i" (errret), "0" (err))
  379 
  380 /*
  381  * This doesn't do __uaccess_begin/end - the exception handling
  382  * around it must do that.
  383  */
  384 #define __get_user_size_ex(x, ptr, size)				\
  385 do {									\
  386 	__chk_user_ptr(ptr);						\
  387 	switch (size) {							\
  388 	case 1:								\
  389 		__get_user_asm_ex(x, ptr, "b", "b", "=q");		\
  390 		break;							\
  391 	case 2:								\
  392 		__get_user_asm_ex(x, ptr, "w", "w", "=r");		\
  393 		break;							\
  394 	case 4:								\
  395 		__get_user_asm_ex(x, ptr, "l", "k", "=r");		\
  396 		break;							\
  397 	case 8:								\
  398 		__get_user_asm_ex_u64(x, ptr);				\
  399 		break;							\
  400 	default:							\
  401 		(x) = __get_user_bad();					\
  402 	}								\
  403 } while (0)
  404 
  405 #define __get_user_asm_ex(x, addr, itype, rtype, ltype)			\
  406 	asm volatile("1:	mov"itype" %1,%"rtype"0\n"		\
  407 		     "2:\n"						\
  408 		     _ASM_EXTABLE_EX(1b, 2b)				\
  409 		     : ltype(x) : "m" (__m(addr)))
  410 
  411 #define __put_user_nocheck(x, ptr, size)			\
  412 ({								\
  413 	int __pu_err;						\
  414 	__uaccess_begin();					\
  415 	__put_user_size((x), (ptr), (size), __pu_err, -EFAULT);	\
  416 	__uaccess_end();					\
  417 	__builtin_expect(__pu_err, 0);				\
  418 })
  419 
  420 #define __get_user_nocheck(x, ptr, size)				\
  421 ({									\
  422 	int __gu_err;							\
  423 	unsigned long __gu_val;						\
  424 	__uaccess_begin();						\
  425 	__get_user_size(__gu_val, (ptr), (size), __gu_err, -EFAULT);	\
  426 	__uaccess_end();						\
  427 	(x) = (__force __typeof__(*(ptr)))__gu_val;			\
  428 	__builtin_expect(__gu_err, 0);					\
  429 })
  430 
  431 /* FIXME: this hack is definitely wrong -AK */
  432 struct __large_struct { unsigned long buf[100]; };
  433 #define __m(x) (*(struct __large_struct __user *)(x))
  434 
  435 /*
  436  * Tell gcc we read from memory instead of writing: this is because
  437  * we do not write to any memory gcc knows about, so there are no
  438  * aliasing issues.
  439  */
  440 #define __put_user_asm(x, addr, err, itype, rtype, ltype, errret)	\
  441 	asm volatile("\n"						\
  442 		     "1:	mov"itype" %"rtype"1,%2\n"		\
  443 		     "2:\n"						\
  444 		     ".section .fixup,\"ax\"\n"				\
  445 		     "3:	mov %3,%0\n"				\
  446 		     "	jmp 2b\n"					\
  447 		     ".previous\n"					\
  448 		     _ASM_EXTABLE(1b, 3b)				\
  449 		     : "=r"(err)					\
  450 		     : ltype(x), "m" (__m(addr)), "i" (errret), "0" (err))
  451 
  452 #define __put_user_asm_ex(x, addr, itype, rtype, ltype)			\
  453 	asm volatile("1:	mov"itype" %"rtype"0,%1\n"		\
  454 		     "2:\n"						\
  455 		     _ASM_EXTABLE_EX(1b, 2b)				\
  456 		     : : ltype(x), "m" (__m(addr)))
  457 
  458 /*
  459  * uaccess_try and catch
  460  */
  461 #define uaccess_try	do {						\
  462 	current_thread_info()->uaccess_err = 0;				\
  463 	__uaccess_begin();						\
  464 	barrier();
  465 
  466 #define uaccess_catch(err)						\
  467 	__uaccess_end();						\
  468 	(err) |= (current_thread_info()->uaccess_err ? -EFAULT : 0);	\
  469 } while (0)
  470 
  471 /**
  472  * __get_user: - Get a simple variable from user space, with less checking.
  473  * @x:   Variable to store result.
  474  * @ptr: Source address, in user space.
  475  *
  476  * Context: User context only. This function may sleep if pagefaults are
  477  *          enabled.
  478  *
  479  * This macro copies a single simple variable from user space to kernel
  480  * space.  It supports simple types like char and int, but not larger
  481  * data types like structures or arrays.
  482  *
  483  * @ptr must have pointer-to-simple-variable type, and the result of
  484  * dereferencing @ptr must be assignable to @x without a cast.
  485  *
  486  * Caller must check the pointer with access_ok() before calling this
  487  * function.
  488  *
  489  * Returns zero on success, or -EFAULT on error.
  490  * On error, the variable @x is set to zero.
  491  */
  492 
  493 #define __get_user(x, ptr)						\
  494 	__get_user_nocheck((x), (ptr), sizeof(*(ptr)))
  495 
  496 /**
  497  * __put_user: - Write a simple value into user space, with less checking.
  498  * @x:   Value to copy to user space.
  499  * @ptr: Destination address, in user space.
  500  *
  501  * Context: User context only. This function may sleep if pagefaults are
  502  *          enabled.
  503  *
  504  * This macro copies a single simple value from kernel space to user
  505  * space.  It supports simple types like char and int, but not larger
  506  * data types like structures or arrays.
  507  *
  508  * @ptr must have pointer-to-simple-variable type, and @x must be assignable
  509  * to the result of dereferencing @ptr.
  510  *
  511  * Caller must check the pointer with access_ok() before calling this
  512  * function.
  513  *
  514  * Returns zero on success, or -EFAULT on error.
  515  */
  516 
  517 #define __put_user(x, ptr)						\
  518 	__put_user_nocheck((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)))
  519 
  520 #define __get_user_unaligned __get_user
  521 #define __put_user_unaligned __put_user
  522 
  523 /*
  524  * {get|put}_user_try and catch
  525  *
  526  * get_user_try {
  527  *	get_user_ex(...);
  528  * } get_user_catch(err)
  529  */
  530 #define get_user_try		uaccess_try
  531 #define get_user_catch(err)	uaccess_catch(err)
  532 
  533 #define get_user_ex(x, ptr)	do {					\
  534 	unsigned long __gue_val;					\
  535 	__get_user_size_ex((__gue_val), (ptr), (sizeof(*(ptr))));	\
  536 	(x) = (__force __typeof__(*(ptr)))__gue_val;			\
  537 } while (0)
  538 
  539 #define put_user_try		uaccess_try
  540 #define put_user_catch(err)	uaccess_catch(err)
  541 
  542 #define put_user_ex(x, ptr)						\
  543 	__put_user_size_ex((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)))
  544 
  545 extern unsigned long
  546 copy_from_user_nmi(void *to, const void __user *from, unsigned long n);
  547 extern __must_check long
  548 strncpy_from_user(char *dst, const char __user *src, long count);
  549 
  550 extern __must_check long strlen_user(const char __user *str);
  551 extern __must_check long strnlen_user(const char __user *str, long n);
  552 
  553 unsigned long __must_check clear_user(void __user *mem, unsigned long len);
  554 unsigned long __must_check __clear_user(void __user *mem, unsigned long len);
  555 
  556 extern void __cmpxchg_wrong_size(void)
  557 	__compiletime_error("Bad argument size for cmpxchg");
  558 
  559 #define __user_atomic_cmpxchg_inatomic(uval, ptr, old, new, size)	\
  560 ({									\
  561 	int __ret = 0;							\
  562 	__typeof__(ptr) __uval = (uval);				\
  563 	__typeof__(*(ptr)) __old = (old);				\
  564 	__typeof__(*(ptr)) __new = (new);				\
  565 	__uaccess_begin();						\
  566 	switch (size) {							\
  567 	case 1:								\
  568 	{								\
  569 		asm volatile("\n"					\
  570 			"1:\t" LOCK_PREFIX "cmpxchgb %4, %2\n"		\
  571 			"2:\n"						\
  572 			"\t.section .fixup, \"ax\"\n"			\
  573 			"3:\tmov     %3, %0\n"				\
  574 			"\tjmp     2b\n"				\
  575 			"\t.previous\n"					\
  576 			_ASM_EXTABLE(1b, 3b)				\
  577 			: "+r" (__ret), "=a" (__old), "+m" (*(ptr))	\
  578 			: "i" (-EFAULT), "q" (__new), "1" (__old)	\
  579 			: "memory"					\
  580 		);							\
  581 		break;							\
  582 	}								\
  583 	case 2:								\
  584 	{								\
  585 		asm volatile("\n"					\
  586 			"1:\t" LOCK_PREFIX "cmpxchgw %4, %2\n"		\
  587 			"2:\n"						\
  588 			"\t.section .fixup, \"ax\"\n"			\
  589 			"3:\tmov     %3, %0\n"				\
  590 			"\tjmp     2b\n"				\
  591 			"\t.previous\n"					\
  592 			_ASM_EXTABLE(1b, 3b)				\
  593 			: "+r" (__ret), "=a" (__old), "+m" (*(ptr))	\
  594 			: "i" (-EFAULT), "r" (__new), "1" (__old)	\
  595 			: "memory"					\
  596 		);							\
  597 		break;							\
  598 	}								\
  599 	case 4:								\
  600 	{								\
  601 		asm volatile("\n"					\
  602 			"1:\t" LOCK_PREFIX "cmpxchgl %4, %2\n"		\
  603 			"2:\n"						\
  604 			"\t.section .fixup, \"ax\"\n"			\
  605 			"3:\tmov     %3, %0\n"				\
  606 			"\tjmp     2b\n"				\
  607 			"\t.previous\n"					\
  608 			_ASM_EXTABLE(1b, 3b)				\
  609 			: "+r" (__ret), "=a" (__old), "+m" (*(ptr))	\
  610 			: "i" (-EFAULT), "r" (__new), "1" (__old)	\
  611 			: "memory"					\
  612 		);							\
  613 		break;							\
  614 	}								\
  615 	case 8:								\
  616 	{								\
  617 		if (!IS_ENABLED(CONFIG_X86_64))				\
  618 			__cmpxchg_wrong_size();				\
  619 									\
  620 		asm volatile("\n"					\
  621 			"1:\t" LOCK_PREFIX "cmpxchgq %4, %2\n"		\
  622 			"2:\n"						\
  623 			"\t.section .fixup, \"ax\"\n"			\
  624 			"3:\tmov     %3, %0\n"				\
  625 			"\tjmp     2b\n"				\
  626 			"\t.previous\n"					\
  627 			_ASM_EXTABLE(1b, 3b)				\
  628 			: "+r" (__ret), "=a" (__old), "+m" (*(ptr))	\
  629 			: "i" (-EFAULT), "r" (__new), "1" (__old)	\
  630 			: "memory"					\
  631 		);							\
  632 		break;							\
  633 	}								\
  634 	default:							\
  635 		__cmpxchg_wrong_size();					\
  636 	}								\
  637 	__uaccess_end();						\
  638 	*__uval = __old;						\
  639 	__ret;								\
  640 })
  641 
  642 #define user_atomic_cmpxchg_inatomic(uval, ptr, old, new)		\
  643 ({									\
  644 	access_ok(VERIFY_WRITE, (ptr), sizeof(*(ptr))) ?		\
  645 		__user_atomic_cmpxchg_inatomic((uval), (ptr),		\
  646 				(old), (new), sizeof(*(ptr))) :		\
  647 		-EFAULT;						\
  648 })
  649 
  650 /*
  651  * movsl can be slow when source and dest are not both 8-byte aligned
  652  */
  653 #ifdef CONFIG_X86_INTEL_USERCOPY
  654 extern struct movsl_mask {
  655 	int mask;
  656 } ____cacheline_aligned_in_smp movsl_mask;
  657 #endif
  658 
  659 #define ARCH_HAS_NOCACHE_UACCESS 1
  660 
  661 #ifdef CONFIG_X86_32
  662 # include <asm/uaccess_32.h>
  663 #else
  664 # include <asm/uaccess_64.h>
  665 #endif
  666 
  667 unsigned long __must_check _copy_from_user(void *to, const void __user *from,
  668 					   unsigned n);
  669 unsigned long __must_check _copy_to_user(void __user *to, const void *from,
  670 					 unsigned n);
  671 
  672 #ifdef CONFIG_DEBUG_STRICT_USER_COPY_CHECKS
  673 # define copy_user_diag __compiletime_error
  674 #else
  675 # define copy_user_diag __compiletime_warning
  676 #endif
  677 
  678 extern void copy_user_diag("copy_from_user() buffer size is too small")
  679 copy_from_user_overflow(void);
  680 extern void copy_user_diag("copy_to_user() buffer size is too small")
  681 copy_to_user_overflow(void) __asm__("copy_from_user_overflow");
  682 
  683 #undef copy_user_diag
  684 
  685 #ifdef CONFIG_DEBUG_STRICT_USER_COPY_CHECKS
  686 
  687 extern void
  688 __compiletime_warning("copy_from_user() buffer size is not provably correct")
  689 __copy_from_user_overflow(void) __asm__("copy_from_user_overflow");
  690 #define __copy_from_user_overflow(size, count) __copy_from_user_overflow()
  691 
  692 extern void
  693 __compiletime_warning("copy_to_user() buffer size is not provably correct")
  694 __copy_to_user_overflow(void) __asm__("copy_from_user_overflow");
  695 #define __copy_to_user_overflow(size, count) __copy_to_user_overflow()
  696 
  697 #else
  698 
  699 static inline void
  700 __copy_from_user_overflow(int size, unsigned long count)
  701 {
  702 	WARN(1, "Buffer overflow detected (%d < %lu)!\n", size, count);
  703 }
  704 
  705 #define __copy_to_user_overflow __copy_from_user_overflow
  706 
  707 #endif
  708 
  709 static inline unsigned long __must_check
  710 copy_from_user(void *to, const void __user *from, unsigned long n)
  711 {
  712 	int sz = __compiletime_object_size(to);
  713 
  714 	might_fault();
  715 
  716 	/*
  717 	 * While we would like to have the compiler do the checking for us
  718 	 * even in the non-constant size case, any false positives there are
  719 	 * a problem (especially when DEBUG_STRICT_USER_COPY_CHECKS, but even
  720 	 * without - the [hopefully] dangerous looking nature of the warning
  721 	 * would make people go look at the respecitive call sites over and
  722 	 * over again just to find that there's no problem).
  723 	 *
  724 	 * And there are cases where it's just not realistic for the compiler
  725 	 * to prove the count to be in range. For example when multiple call
  726 	 * sites of a helper function - perhaps in different source files -
  727 	 * all doing proper range checking, yet the helper function not doing
  728 	 * so again.
  729 	 *
  730 	 * Therefore limit the compile time checking to the constant size
  731 	 * case, and do only runtime checking for non-constant sizes.
  732 	 */
  733 
  734 	if (likely(sz < 0 || sz >= n))
  735 		n = _copy_from_user(to, from, n);
  736 	else if(__builtin_constant_p(n))
  737 		copy_from_user_overflow();
  738 	else
  739 		__copy_from_user_overflow(sz, n);
  740 
  741 	return n;
  742 }
  743 
  744 static inline unsigned long __must_check
  745 copy_to_user(void __user *to, const void *from, unsigned long n)
  746 {
  747 	int sz = __compiletime_object_size(from);
  748 
  749 	might_fault();
  750 
  751 	/* See the comment in copy_from_user() above. */
  752 	if (likely(sz < 0 || sz >= n))
  753 		n = _copy_to_user(to, from, n);
  754 	else if(__builtin_constant_p(n))
  755 		copy_to_user_overflow();
  756 	else
  757 		__copy_to_user_overflow(sz, n);
  758 
  759 	return n;
  760 }
  761 
  762 #undef __copy_from_user_overflow
  763 #undef __copy_to_user_overflow
  764 
  765 /*
  766  * We rely on the nested NMI work to allow atomic faults from the NMI path; the
  767  * nested NMI paths are careful to preserve CR2.
  768  *
  769  * Caller must use pagefault_enable/disable, or run in interrupt context,
  770  * and also do a uaccess_ok() check
  771  */
  772 #define __copy_from_user_nmi __copy_from_user_inatomic
  773 
  774 /*
  775  * The "unsafe" user accesses aren't really "unsafe", but the naming
  776  * is a big fat warning: you have to not only do the access_ok()
  777  * checking before using them, but you have to surround them with the
  778  * user_access_begin/end() pair.
  779  */
  780 #define user_access_begin()	__uaccess_begin()
  781 #define user_access_end()	__uaccess_end()
  782 
  783 #define unsafe_put_user(x, ptr)						\
  784 ({										\
  785 	int __pu_err;								\
  786 	__put_user_size((x), (ptr), sizeof(*(ptr)), __pu_err, -EFAULT);		\
  787 	__builtin_expect(__pu_err, 0);						\
  788 })
  789 
  790 #define unsafe_get_user(x, ptr)						\
  791 ({										\
  792 	int __gu_err;								\
  793 	unsigned long __gu_val;							\
  794 	__get_user_size(__gu_val, (ptr), sizeof(*(ptr)), __gu_err, -EFAULT);	\
  795 	(x) = (__force __typeof__(*(ptr)))__gu_val;				\
  796 	__builtin_expect(__gu_err, 0);						\
  797 })
  798 
  799 #endif /* _ASM_X86_UACCESS_H */                 1 
    2 /*
    3  * Driver for the Micron P320 SSD
    4  *   Copyright (C) 2011 Micron Technology, Inc.
    5  *
    6  * Portions of this code were derived from works subjected to the
    7  * following copyright:
    8  *    Copyright (C) 2009 Integrated Device Technology, Inc.
    9  *
   10  * This program is free software; you can redistribute it and/or modify
   11  * it under the terms of the GNU General Public License as published by
   12  * the Free Software Foundation; either version 2 of the License, or
   13  * (at your option) any later version.
   14  *
   15  * This program is distributed in the hope that it will be useful,
   16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   18  * GNU General Public License for more details.
   19  *
   20  */
   21 
   22 #include <linux/pci.h>
   23 #include <linux/interrupt.h>
   24 #include <linux/ata.h>
   25 #include <linux/delay.h>
   26 #include <linux/hdreg.h>
   27 #include <linux/uaccess.h>
   28 #include <linux/random.h>
   29 #include <linux/smp.h>
   30 #include <linux/compat.h>
   31 #include <linux/fs.h>
   32 #include <linux/module.h>
   33 #include <linux/genhd.h>
   34 #include <linux/blkdev.h>
   35 #include <linux/blk-mq.h>
   36 #include <linux/bio.h>
   37 #include <linux/dma-mapping.h>
   38 #include <linux/idr.h>
   39 #include <linux/kthread.h>
   40 #include <../drivers/ata/ahci.h>
   41 #include <linux/export.h>
   42 #include <linux/debugfs.h>
   43 #include <linux/prefetch.h>
   44 #include "mtip32xx.h"
   45 
   46 #define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
   47 
   48 /* DMA region containing RX Fis, Identify, RLE10, and SMART buffers */
   49 #define AHCI_RX_FIS_SZ          0x100
   50 #define AHCI_RX_FIS_OFFSET      0x0
   51 #define AHCI_IDFY_SZ            ATA_SECT_SIZE
   52 #define AHCI_IDFY_OFFSET        0x400
   53 #define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
   54 #define AHCI_SECTBUF_OFFSET     0x800
   55 #define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
   56 #define AHCI_SMARTBUF_OFFSET    0xC00
   57 /* 0x100 + 0x200 + 0x200 + 0x200 is smaller than 4k but we pad it out */
   58 #define BLOCK_DMA_ALLOC_SZ      4096
   59 
   60 /* DMA region containing command table (should be 8192 bytes) */
   61 #define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
   62 #define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
   63 #define AHCI_CMD_TBL_OFFSET     0x0
   64 
   65 /* DMA region per command (contains header and SGL) */
   66 #define AHCI_CMD_TBL_HDR_SZ     0x80
   67 #define AHCI_CMD_TBL_HDR_OFFSET 0x0
   68 #define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
   69 #define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
   70 #define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
   71 
   72 
   73 #define HOST_CAP_NZDMA		(1 << 19)
   74 #define HOST_HSORG		0xFC
   75 #define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
   76 #define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
   77 #define HSORG_HWREV		0xFF00
   78 #define HSORG_STYLE		0x8
   79 #define HSORG_SLOTGROUPS	0x7
   80 
   81 #define PORT_COMMAND_ISSUE	0x38
   82 #define PORT_SDBV		0x7C
   83 
   84 #define PORT_OFFSET		0x100
   85 #define PORT_MEM_SIZE		0x80
   86 
   87 #define PORT_IRQ_ERR \
   88 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
   89 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
   90 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
   91 	 PORT_IRQ_OVERFLOW)
   92 #define PORT_IRQ_LEGACY \
   93 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
   94 #define PORT_IRQ_HANDLED \
   95 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
   96 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
   97 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
   98 #define DEF_PORT_IRQ \
   99 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
  100 
  101 /* product numbers */
  102 #define MTIP_PRODUCT_UNKNOWN	0x00
  103 #define MTIP_PRODUCT_ASICFPGA	0x11
  104 
  105 /* Device instance number, incremented each time a device is probed. */
  106 static int instance;
  107 
  108 static struct list_head online_list;
  109 static struct list_head removing_list;
  110 static spinlock_t dev_lock;
  111 
  112 /*
  113  * Global variable used to hold the major block device number
  114  * allocated in mtip_init().
  115  */
  116 static int mtip_major;
  117 static struct dentry *dfs_parent;
  118 static struct dentry *dfs_device_status;
  119 
  120 static u32 cpu_use[NR_CPUS];
  121 
  122 static DEFINE_SPINLOCK(rssd_index_lock);
  123 static DEFINE_IDA(rssd_index_ida);
  124 
  125 static int mtip_block_initialize(struct driver_data *dd);
  126 
  127 #ifdef CONFIG_COMPAT
  128 struct mtip_compat_ide_task_request_s {
  129 	__u8		io_ports[8];
  130 	__u8		hob_ports[8];
  131 	ide_reg_valid_t	out_flags;
  132 	ide_reg_valid_t	in_flags;
  133 	int		data_phase;
  134 	int		req_cmd;
  135 	compat_ulong_t	out_size;
  136 	compat_ulong_t	in_size;
  137 };
  138 #endif
  139 
  140 /*
  141  * This function check_for_surprise_removal is called
  142  * while card is removed from the system and it will
  143  * read the vendor id from the configration space
  144  *
  145  * @pdev Pointer to the pci_dev structure.
  146  *
  147  * return value
  148  *	 true if device removed, else false
  149  */
  150 static bool mtip_check_surprise_removal(struct pci_dev *pdev)
  151 {
  152 	u16 vendor_id = 0;
  153 	struct driver_data *dd = pci_get_drvdata(pdev);
  154 
  155 	if (dd->sr)
  156 		return true;
  157 
  158        /* Read the vendorID from the configuration space */
  159 	pci_read_config_word(pdev, 0x00, &vendor_id);
  160 	if (vendor_id == 0xFFFF) {
  161 		dd->sr = true;
  162 		if (dd->queue)
  163 			set_bit(QUEUE_FLAG_DEAD, &dd->queue->queue_flags);
  164 		else
  165 			dev_warn(&dd->pdev->dev,
  166 				"%s: dd->queue is NULL\n", __func__);
  167 		return true; /* device removed */
  168 	}
  169 
  170 	return false; /* device present */
  171 }
  172 
  173 static struct mtip_cmd *mtip_get_int_command(struct driver_data *dd)
  174 {
  175 	struct request *rq;
  176 
  177 	rq = blk_mq_alloc_request(dd->queue, 0, BLK_MQ_REQ_RESERVED);
  178 	return blk_mq_rq_to_pdu(rq);
  179 }
  180 
  181 static void mtip_put_int_command(struct driver_data *dd, struct mtip_cmd *cmd)
  182 {
  183 	blk_put_request(blk_mq_rq_from_pdu(cmd));
  184 }
  185 
  186 /*
  187  * Once we add support for one hctx per mtip group, this will change a bit
  188  */
  189 static struct request *mtip_rq_from_tag(struct driver_data *dd,
  190 					unsigned int tag)
  191 {
  192 	struct blk_mq_hw_ctx *hctx = dd->queue->queue_hw_ctx[0];
  193 
  194 	return blk_mq_tag_to_rq(hctx->tags, tag);
  195 }
  196 
  197 static struct mtip_cmd *mtip_cmd_from_tag(struct driver_data *dd,
  198 					  unsigned int tag)
  199 {
  200 	struct request *rq = mtip_rq_from_tag(dd, tag);
  201 
  202 	return blk_mq_rq_to_pdu(rq);
  203 }
  204 
  205 /*
  206  * IO completion function.
  207  *
  208  * This completion function is called by the driver ISR when a
  209  * command that was issued by the kernel completes. It first calls the
  210  * asynchronous completion function which normally calls back into the block
  211  * layer passing the asynchronous callback data, then unmaps the
  212  * scatter list associated with the completed command, and finally
  213  * clears the allocated bit associated with the completed command.
  214  *
  215  * @port   Pointer to the port data structure.
  216  * @tag    Tag of the command.
  217  * @data   Pointer to driver_data.
  218  * @status Completion status.
  219  *
  220  * return value
  221  *	None
  222  */
  223 static void mtip_async_complete(struct mtip_port *port,
  224 				int tag, struct mtip_cmd *cmd, int status)
  225 {
  226 	struct driver_data *dd = port->dd;
  227 	struct request *rq;
  228 
  229 	if (unlikely(!dd) || unlikely(!port))
  230 		return;
  231 
  232 	if (unlikely(status == PORT_IRQ_TF_ERR)) {
  233 		dev_warn(&port->dd->pdev->dev,
  234 			"Command tag %d failed due to TFE\n", tag);
  235 	}
  236 
  237 	/* Unmap the DMA scatter list entries */
  238 	dma_unmap_sg(&dd->pdev->dev, cmd->sg, cmd->scatter_ents, cmd->direction);
  239 
  240 	rq = mtip_rq_from_tag(dd, tag);
  241 
  242 	if (unlikely(cmd->unaligned))
  243 		up(&port->cmd_slot_unal);
  244 
  245 	blk_mq_end_request(rq, status ? -EIO : 0);
  246 }
  247 
  248 /*
  249  * Reset the HBA (without sleeping)
  250  *
  251  * @dd Pointer to the driver data structure.
  252  *
  253  * return value
  254  *	0	The reset was successful.
  255  *	-1	The HBA Reset bit did not clear.
  256  */
  257 static int mtip_hba_reset(struct driver_data *dd)
  258 {
  259 	unsigned long timeout;
  260 
  261 	/* Set the reset bit */
  262 	writel(HOST_RESET, dd->mmio + HOST_CTL);
  263 
  264 	/* Flush */
  265 	readl(dd->mmio + HOST_CTL);
  266 
  267 	/*
  268 	 * Spin for up to 10 seconds waiting for reset acknowledgement. Spec
  269 	 * is 1 sec but in LUN failure conditions, up to 10 secs are required
  270 	 */
  271 	timeout = jiffies + msecs_to_jiffies(10000);
  272 	do {
  273 		mdelay(10);
  274 		if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &dd->dd_flag))
  275 			return -1;
  276 
  277 	} while ((readl(dd->mmio + HOST_CTL) & HOST_RESET)
  278 		 && time_before(jiffies, timeout));
  279 
  280 	if (readl(dd->mmio + HOST_CTL) & HOST_RESET)
  281 		return -1;
  282 
  283 	return 0;
  284 }
  285 
  286 /*
  287  * Issue a command to the hardware.
  288  *
  289  * Set the appropriate bit in the s_active and Command Issue hardware
  290  * registers, causing hardware command processing to begin.
  291  *
  292  * @port Pointer to the port structure.
  293  * @tag  The tag of the command to be issued.
  294  *
  295  * return value
  296  *      None
  297  */
  298 static inline void mtip_issue_ncq_command(struct mtip_port *port, int tag)
  299 {
  300 	int group = tag >> 5;
  301 
  302 	/* guard SACT and CI registers */
  303 	spin_lock(&port->cmd_issue_lock[group]);
  304 	writel((1 << MTIP_TAG_BIT(tag)),
  305 			port->s_active[MTIP_TAG_INDEX(tag)]);
  306 	writel((1 << MTIP_TAG_BIT(tag)),
  307 			port->cmd_issue[MTIP_TAG_INDEX(tag)]);
  308 	spin_unlock(&port->cmd_issue_lock[group]);
  309 }
  310 
  311 /*
  312  * Enable/disable the reception of FIS
  313  *
  314  * @port   Pointer to the port data structure
  315  * @enable 1 to enable, 0 to disable
  316  *
  317  * return value
  318  *	Previous state: 1 enabled, 0 disabled
  319  */
  320 static int mtip_enable_fis(struct mtip_port *port, int enable)
  321 {
  322 	u32 tmp;
  323 
  324 	/* enable FIS reception */
  325 	tmp = readl(port->mmio + PORT_CMD);
  326 	if (enable)
  327 		writel(tmp | PORT_CMD_FIS_RX, port->mmio + PORT_CMD);
  328 	else
  329 		writel(tmp & ~PORT_CMD_FIS_RX, port->mmio + PORT_CMD);
  330 
  331 	/* Flush */
  332 	readl(port->mmio + PORT_CMD);
  333 
  334 	return (((tmp & PORT_CMD_FIS_RX) == PORT_CMD_FIS_RX));
  335 }
  336 
  337 /*
  338  * Enable/disable the DMA engine
  339  *
  340  * @port   Pointer to the port data structure
  341  * @enable 1 to enable, 0 to disable
  342  *
  343  * return value
  344  *	Previous state: 1 enabled, 0 disabled.
  345  */
  346 static int mtip_enable_engine(struct mtip_port *port, int enable)
  347 {
  348 	u32 tmp;
  349 
  350 	/* enable FIS reception */
  351 	tmp = readl(port->mmio + PORT_CMD);
  352 	if (enable)
  353 		writel(tmp | PORT_CMD_START, port->mmio + PORT_CMD);
  354 	else
  355 		writel(tmp & ~PORT_CMD_START, port->mmio + PORT_CMD);
  356 
  357 	readl(port->mmio + PORT_CMD);
  358 	return (((tmp & PORT_CMD_START) == PORT_CMD_START));
  359 }
  360 
  361 /*
  362  * Enables the port DMA engine and FIS reception.
  363  *
  364  * return value
  365  *	None
  366  */
  367 static inline void mtip_start_port(struct mtip_port *port)
  368 {
  369 	/* Enable FIS reception */
  370 	mtip_enable_fis(port, 1);
  371 
  372 	/* Enable the DMA engine */
  373 	mtip_enable_engine(port, 1);
  374 }
  375 
  376 /*
  377  * Deinitialize a port by disabling port interrupts, the DMA engine,
  378  * and FIS reception.
  379  *
  380  * @port Pointer to the port structure
  381  *
  382  * return value
  383  *	None
  384  */
  385 static inline void mtip_deinit_port(struct mtip_port *port)
  386 {
  387 	/* Disable interrupts on this port */
  388 	writel(0, port->mmio + PORT_IRQ_MASK);
  389 
  390 	/* Disable the DMA engine */
  391 	mtip_enable_engine(port, 0);
  392 
  393 	/* Disable FIS reception */
  394 	mtip_enable_fis(port, 0);
  395 }
  396 
  397 /*
  398  * Initialize a port.
  399  *
  400  * This function deinitializes the port by calling mtip_deinit_port() and
  401  * then initializes it by setting the command header and RX FIS addresses,
  402  * clearing the SError register and any pending port interrupts before
  403  * re-enabling the default set of port interrupts.
  404  *
  405  * @port Pointer to the port structure.
  406  *
  407  * return value
  408  *	None
  409  */
  410 static void mtip_init_port(struct mtip_port *port)
  411 {
  412 	int i;
  413 	mtip_deinit_port(port);
  414 
  415 	/* Program the command list base and FIS base addresses */
  416 	if (readl(port->dd->mmio + HOST_CAP) & HOST_CAP_64) {
  417 		writel((port->command_list_dma >> 16) >> 16,
  418 			 port->mmio + PORT_LST_ADDR_HI);
  419 		writel((port->rxfis_dma >> 16) >> 16,
  420 			 port->mmio + PORT_FIS_ADDR_HI);
  421 	}
  422 
  423 	writel(port->command_list_dma & 0xFFFFFFFF,
  424 			port->mmio + PORT_LST_ADDR);
  425 	writel(port->rxfis_dma & 0xFFFFFFFF, port->mmio + PORT_FIS_ADDR);
  426 
  427 	/* Clear SError */
  428 	writel(readl(port->mmio + PORT_SCR_ERR), port->mmio + PORT_SCR_ERR);
  429 
  430 	/* reset the completed registers.*/
  431 	for (i = 0; i < port->dd->slot_groups; i++)
  432 		writel(0xFFFFFFFF, port->completed[i]);
  433 
  434 	/* Clear any pending interrupts for this port */
  435 	writel(readl(port->mmio + PORT_IRQ_STAT), port->mmio + PORT_IRQ_STAT);
  436 
  437 	/* Clear any pending interrupts on the HBA. */
  438 	writel(readl(port->dd->mmio + HOST_IRQ_STAT),
  439 					port->dd->mmio + HOST_IRQ_STAT);
  440 
  441 	/* Enable port interrupts */
  442 	writel(DEF_PORT_IRQ, port->mmio + PORT_IRQ_MASK);
  443 }
  444 
  445 /*
  446  * Restart a port
  447  *
  448  * @port Pointer to the port data structure.
  449  *
  450  * return value
  451  *	None
  452  */
  453 static void mtip_restart_port(struct mtip_port *port)
  454 {
  455 	unsigned long timeout;
  456 
  457 	/* Disable the DMA engine */
  458 	mtip_enable_engine(port, 0);
  459 
  460 	/* Chip quirk: wait up to 500ms for PxCMD.CR == 0 */
  461 	timeout = jiffies + msecs_to_jiffies(500);
  462 	while ((readl(port->mmio + PORT_CMD) & PORT_CMD_LIST_ON)
  463 		 && time_before(jiffies, timeout))
  464 		;
  465 
  466 	if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &port->dd->dd_flag))
  467 		return;
  468 
  469 	/*
  470 	 * Chip quirk: escalate to hba reset if
  471 	 * PxCMD.CR not clear after 500 ms
  472 	 */
  473 	if (readl(port->mmio + PORT_CMD) & PORT_CMD_LIST_ON) {
  474 		dev_warn(&port->dd->pdev->dev,
  475 			"PxCMD.CR not clear, escalating reset\n");
  476 
  477 		if (mtip_hba_reset(port->dd))
  478 			dev_err(&port->dd->pdev->dev,
  479 				"HBA reset escalation failed.\n");
  480 
  481 		/* 30 ms delay before com reset to quiesce chip */
  482 		mdelay(30);
  483 	}
  484 
  485 	dev_warn(&port->dd->pdev->dev, "Issuing COM reset\n");
  486 
  487 	/* Set PxSCTL.DET */
  488 	writel(readl(port->mmio + PORT_SCR_CTL) |
  489 			 1, port->mmio + PORT_SCR_CTL);
  490 	readl(port->mmio + PORT_SCR_CTL);
  491 
  492 	/* Wait 1 ms to quiesce chip function */
  493 	timeout = jiffies + msecs_to_jiffies(1);
  494 	while (time_before(jiffies, timeout))
  495 		;
  496 
  497 	if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &port->dd->dd_flag))
  498 		return;
  499 
  500 	/* Clear PxSCTL.DET */
  501 	writel(readl(port->mmio + PORT_SCR_CTL) & ~1,
  502 			 port->mmio + PORT_SCR_CTL);
  503 	readl(port->mmio + PORT_SCR_CTL);
  504 
  505 	/* Wait 500 ms for bit 0 of PORT_SCR_STS to be set */
  506 	timeout = jiffies + msecs_to_jiffies(500);
  507 	while (((readl(port->mmio + PORT_SCR_STAT) & 0x01) == 0)
  508 			 && time_before(jiffies, timeout))
  509 		;
  510 
  511 	if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &port->dd->dd_flag))
  512 		return;
  513 
  514 	if ((readl(port->mmio + PORT_SCR_STAT) & 0x01) == 0)
  515 		dev_warn(&port->dd->pdev->dev,
  516 			"COM reset failed\n");
  517 
  518 	mtip_init_port(port);
  519 	mtip_start_port(port);
  520 
  521 }
  522 
  523 static int mtip_device_reset(struct driver_data *dd)
  524 {
  525 	int rv = 0;
  526 
  527 	if (mtip_check_surprise_removal(dd->pdev))
  528 		return 0;
  529 
  530 	if (mtip_hba_reset(dd) < 0)
  531 		rv = -EFAULT;
  532 
  533 	mdelay(1);
  534 	mtip_init_port(dd->port);
  535 	mtip_start_port(dd->port);
  536 
  537 	/* Enable interrupts on the HBA. */
  538 	writel(readl(dd->mmio + HOST_CTL) | HOST_IRQ_EN,
  539 					dd->mmio + HOST_CTL);
  540 	return rv;
  541 }
  542 
  543 /*
  544  * Helper function for tag logging
  545  */
  546 static void print_tags(struct driver_data *dd,
  547 			char *msg,
  548 			unsigned long *tagbits,
  549 			int cnt)
  550 {
  551 	unsigned char tagmap[128];
  552 	int group, tagmap_len = 0;
  553 
  554 	memset(tagmap, 0, sizeof(tagmap));
  555 	for (group = SLOTBITS_IN_LONGS; group > 0; group--)
  556 		tagmap_len += sprintf(tagmap + tagmap_len, "%016lX ",
  557 						tagbits[group-1]);
  558 	dev_warn(&dd->pdev->dev,
  559 			"%d command(s) %s: tagmap [%s]", cnt, msg, tagmap);
  560 }
  561 
  562 /*
  563  * Internal command completion callback function.
  564  *
  565  * This function is normally called by the driver ISR when an internal
  566  * command completed. This function signals the command completion by
  567  * calling complete().
  568  *
  569  * @port   Pointer to the port data structure.
  570  * @tag    Tag of the command that has completed.
  571  * @data   Pointer to a completion structure.
  572  * @status Completion status.
  573  *
  574  * return value
  575  *	None
  576  */
  577 static void mtip_completion(struct mtip_port *port,
  578 			    int tag, struct mtip_cmd *command, int status)
  579 {
  580 	struct completion *waiting = command->comp_data;
  581 	if (unlikely(status == PORT_IRQ_TF_ERR))
  582 		dev_warn(&port->dd->pdev->dev,
  583 			"Internal command %d completed with TFE\n", tag);
  584 
  585 	complete(waiting);
  586 }
  587 
  588 static void mtip_null_completion(struct mtip_port *port,
  589 			    int tag, struct mtip_cmd *command, int status)
  590 {
  591 }
  592 
  593 static int mtip_read_log_page(struct mtip_port *port, u8 page, u16 *buffer,
  594 				dma_addr_t buffer_dma, unsigned int sectors);
  595 static int mtip_get_smart_attr(struct mtip_port *port, unsigned int id,
  596 						struct smart_attr *attrib);
  597 /*
  598  * Handle an error.
  599  *
  600  * @dd Pointer to the DRIVER_DATA structure.
  601  *
  602  * return value
  603  *	None
  604  */
  605 static void mtip_handle_tfe(struct driver_data *dd)
  606 {
  607 	int group, tag, bit, reissue, rv;
  608 	struct mtip_port *port;
  609 	struct mtip_cmd  *cmd;
  610 	u32 completed;
  611 	struct host_to_dev_fis *fis;
  612 	unsigned long tagaccum[SLOTBITS_IN_LONGS];
  613 	unsigned int cmd_cnt = 0;
  614 	unsigned char *buf;
  615 	char *fail_reason = NULL;
  616 	int fail_all_ncq_write = 0, fail_all_ncq_cmds = 0;
  617 
  618 	dev_warn(&dd->pdev->dev, "Taskfile error\n");
  619 
  620 	port = dd->port;
  621 
  622 	set_bit(MTIP_PF_EH_ACTIVE_BIT, &port->flags);
  623 
  624 	if (test_bit(MTIP_PF_IC_ACTIVE_BIT, &port->flags)) {
  625 		cmd = mtip_cmd_from_tag(dd, MTIP_TAG_INTERNAL);
  626 		dbg_printk(MTIP_DRV_NAME " TFE for the internal command\n");
  627 
  628 		if (cmd->comp_data && cmd->comp_func) {
  629 			cmd->comp_func(port, MTIP_TAG_INTERNAL,
  630 					cmd, PORT_IRQ_TF_ERR);
  631 		}
  632 		goto handle_tfe_exit;
  633 	}
  634 
  635 	/* clear the tag accumulator */
  636 	memset(tagaccum, 0, SLOTBITS_IN_LONGS * sizeof(long));
  637 
  638 	/* Loop through all the groups */
  639 	for (group = 0; group < dd->slot_groups; group++) {
  640 		completed = readl(port->completed[group]);
  641 
  642 		dev_warn(&dd->pdev->dev, "g=%u, comp=%x\n", group, completed);
  643 
  644 		/* clear completed status register in the hardware.*/
  645 		writel(completed, port->completed[group]);
  646 
  647 		/* Process successfully completed commands */
  648 		for (bit = 0; bit < 32 && completed; bit++) {
  649 			if (!(completed & (1<<bit)))
  650 				continue;
  651 			tag = (group << 5) + bit;
  652 
  653 			/* Skip the internal command slot */
  654 			if (tag == MTIP_TAG_INTERNAL)
  655 				continue;
  656 
  657 			cmd = mtip_cmd_from_tag(dd, tag);
  658 			if (likely(cmd->comp_func)) {
  659 				set_bit(tag, tagaccum);
  660 				cmd_cnt++;
  661 				cmd->comp_func(port, tag, cmd, 0);
  662 			} else {
  663 				dev_err(&port->dd->pdev->dev,
  664 					"Missing completion func for tag %d",
  665 					tag);
  666 				if (mtip_check_surprise_removal(dd->pdev)) {
  667 					/* don't proceed further */
  668 					return;
  669 				}
  670 			}
  671 		}
  672 	}
  673 
  674 	print_tags(dd, "completed (TFE)", tagaccum, cmd_cnt);
  675 
  676 	/* Restart the port */
  677 	mdelay(20);
  678 	mtip_restart_port(port);
  679 
  680 	/* Trying to determine the cause of the error */
  681 	rv = mtip_read_log_page(dd->port, ATA_LOG_SATA_NCQ,
  682 				dd->port->log_buf,
  683 				dd->port->log_buf_dma, 1);
  684 	if (rv) {
  685 		dev_warn(&dd->pdev->dev,
  686 			"Error in READ LOG EXT (10h) command\n");
  687 		/* non-critical error, don't fail the load */
  688 	} else {
  689 		buf = (unsigned char *)dd->port->log_buf;
  690 		if (buf[259] & 0x1) {
  691 			dev_info(&dd->pdev->dev,
  692 				"Write protect bit is set.\n");
  693 			set_bit(MTIP_DDF_WRITE_PROTECT_BIT, &dd->dd_flag);
  694 			fail_all_ncq_write = 1;
  695 			fail_reason = "write protect";
  696 		}
  697 		if (buf[288] == 0xF7) {
  698 			dev_info(&dd->pdev->dev,
  699 				"Exceeded Tmax, drive in thermal shutdown.\n");
  700 			set_bit(MTIP_DDF_OVER_TEMP_BIT, &dd->dd_flag);
  701 			fail_all_ncq_cmds = 1;
  702 			fail_reason = "thermal shutdown";
  703 		}
  704 		if (buf[288] == 0xBF) {
  705 			set_bit(MTIP_DDF_SEC_LOCK_BIT, &dd->dd_flag);
  706 			dev_info(&dd->pdev->dev,
  707 				"Drive indicates rebuild has failed. Secure erase required.\n");
  708 			fail_all_ncq_cmds = 1;
  709 			fail_reason = "rebuild failed";
  710 		}
  711 	}
  712 
  713 	/* clear the tag accumulator */
  714 	memset(tagaccum, 0, SLOTBITS_IN_LONGS * sizeof(long));
  715 
  716 	/* Loop through all the groups */
  717 	for (group = 0; group < dd->slot_groups; group++) {
  718 		for (bit = 0; bit < 32; bit++) {
  719 			reissue = 1;
  720 			tag = (group << 5) + bit;
  721 			cmd = mtip_cmd_from_tag(dd, tag);
  722 
  723 			fis = (struct host_to_dev_fis *)cmd->command;
  724 
  725 			/* Should re-issue? */
  726 			if (tag == MTIP_TAG_INTERNAL ||
  727 			    fis->command == ATA_CMD_SET_FEATURES)
  728 				reissue = 0;
  729 			else {
  730 				if (fail_all_ncq_cmds ||
  731 					(fail_all_ncq_write &&
  732 					fis->command == ATA_CMD_FPDMA_WRITE)) {
  733 					dev_warn(&dd->pdev->dev,
  734 					"  Fail: %s w/tag %d [%s].\n",
  735 					fis->command == ATA_CMD_FPDMA_WRITE ?
  736 						"write" : "read",
  737 					tag,
  738 					fail_reason != NULL ?
  739 						fail_reason : "unknown");
  740 					if (cmd->comp_func) {
  741 						cmd->comp_func(port, tag,
  742 							cmd, -ENODATA);
  743 					}
  744 					continue;
  745 				}
  746 			}
  747 
  748 			/*
  749 			 * First check if this command has
  750 			 *  exceeded its retries.
  751 			 */
  752 			if (reissue && (cmd->retries-- > 0)) {
  753 
  754 				set_bit(tag, tagaccum);
  755 
  756 				/* Re-issue the command. */
  757 				mtip_issue_ncq_command(port, tag);
  758 
  759 				continue;
  760 			}
  761 
  762 			/* Retire a command that will not be reissued */
  763 			dev_warn(&port->dd->pdev->dev,
  764 				"retiring tag %d\n", tag);
  765 
  766 			if (cmd->comp_func)
  767 				cmd->comp_func(port, tag, cmd, PORT_IRQ_TF_ERR);
  768 			else
  769 				dev_warn(&port->dd->pdev->dev,
  770 					"Bad completion for tag %d\n",
  771 					tag);
  772 		}
  773 	}
  774 	print_tags(dd, "reissued (TFE)", tagaccum, cmd_cnt);
  775 
  776 handle_tfe_exit:
  777 	/* clear eh_active */
  778 	clear_bit(MTIP_PF_EH_ACTIVE_BIT, &port->flags);
  779 	wake_up_interruptible(&port->svc_wait);
  780 }
  781 
  782 /*
  783  * Handle a set device bits interrupt
  784  */
  785 static inline void mtip_workq_sdbfx(struct mtip_port *port, int group,
  786 							u32 completed)
  787 {
  788 	struct driver_data *dd = port->dd;
  789 	int tag, bit;
  790 	struct mtip_cmd *command;
  791 
  792 	if (!completed) {
  793 		WARN_ON_ONCE(!completed);
  794 		return;
  795 	}
  796 	/* clear completed status register in the hardware.*/
  797 	writel(completed, port->completed[group]);
  798 
  799 	/* Process completed commands. */
  800 	for (bit = 0; (bit < 32) && completed; bit++) {
  801 		if (completed & 0x01) {
  802 			tag = (group << 5) | bit;
  803 
  804 			/* skip internal command slot. */
  805 			if (unlikely(tag == MTIP_TAG_INTERNAL))
  806 				continue;
  807 
  808 			command = mtip_cmd_from_tag(dd, tag);
  809 			if (likely(command->comp_func))
  810 				command->comp_func(port, tag, command, 0);
  811 			else {
  812 				dev_dbg(&dd->pdev->dev,
  813 					"Null completion for tag %d",
  814 					tag);
  815 
  816 				if (mtip_check_surprise_removal(
  817 					dd->pdev)) {
  818 					return;
  819 				}
  820 			}
  821 		}
  822 		completed >>= 1;
  823 	}
  824 
  825 	/* If last, re-enable interrupts */
  826 	if (atomic_dec_return(&dd->irq_workers_active) == 0)
  827 		writel(0xffffffff, dd->mmio + HOST_IRQ_STAT);
  828 }
  829 
  830 /*
  831  * Process legacy pio and d2h interrupts
  832  */
  833 static inline void mtip_process_legacy(struct driver_data *dd, u32 port_stat)
  834 {
  835 	struct mtip_port *port = dd->port;
  836 	struct mtip_cmd *cmd = mtip_cmd_from_tag(dd, MTIP_TAG_INTERNAL);
  837 
  838 	if (test_bit(MTIP_PF_IC_ACTIVE_BIT, &port->flags) &&
  839 	    (cmd != NULL) && !(readl(port->cmd_issue[MTIP_TAG_INTERNAL])
  840 		& (1 << MTIP_TAG_INTERNAL))) {
  841 		if (cmd->comp_func) {
  842 			cmd->comp_func(port, MTIP_TAG_INTERNAL, cmd, 0);
  843 			return;
  844 		}
  845 	}
  846 
  847 	return;
  848 }
  849 
  850 /*
  851  * Demux and handle errors
  852  */
  853 static inline void mtip_process_errors(struct driver_data *dd, u32 port_stat)
  854 {
  855 
  856 	if (unlikely(port_stat & PORT_IRQ_CONNECT)) {
  857 		dev_warn(&dd->pdev->dev,
  858 			"Clearing PxSERR.DIAG.x\n");
  859 		writel((1 << 26), dd->port->mmio + PORT_SCR_ERR);
  860 	}
  861 
  862 	if (unlikely(port_stat & PORT_IRQ_PHYRDY)) {
  863 		dev_warn(&dd->pdev->dev,
  864 			"Clearing PxSERR.DIAG.n\n");
  865 		writel((1 << 16), dd->port->mmio + PORT_SCR_ERR);
  866 	}
  867 
  868 	if (unlikely(port_stat & ~PORT_IRQ_HANDLED)) {
  869 		dev_warn(&dd->pdev->dev,
  870 			"Port stat errors %x unhandled\n",
  871 			(port_stat & ~PORT_IRQ_HANDLED));
  872 		if (mtip_check_surprise_removal(dd->pdev))
  873 			return;
  874 	}
  875 	if (likely(port_stat & (PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR))) {
  876 		set_bit(MTIP_PF_EH_ACTIVE_BIT, &dd->port->flags);
  877 		wake_up_interruptible(&dd->port->svc_wait);
  878 	}
  879 }
  880 
  881 static inline irqreturn_t mtip_handle_irq(struct driver_data *data)
  882 {
  883 	struct driver_data *dd = (struct driver_data *) data;
  884 	struct mtip_port *port = dd->port;
  885 	u32 hba_stat, port_stat;
  886 	int rv = IRQ_NONE;
  887 	int do_irq_enable = 1, i, workers;
  888 	struct mtip_work *twork;
  889 
  890 	hba_stat = readl(dd->mmio + HOST_IRQ_STAT);
  891 	if (hba_stat) {
  892 		rv = IRQ_HANDLED;
  893 
  894 		/* Acknowledge the interrupt status on the port.*/
  895 		port_stat = readl(port->mmio + PORT_IRQ_STAT);
  896 		if (unlikely(port_stat == 0xFFFFFFFF)) {
  897 			mtip_check_surprise_removal(dd->pdev);
  898 			return IRQ_HANDLED;
  899 		}
  900 		writel(port_stat, port->mmio + PORT_IRQ_STAT);
  901 
  902 		/* Demux port status */
  903 		if (likely(port_stat & PORT_IRQ_SDB_FIS)) {
  904 			do_irq_enable = 0;
  905 			WARN_ON_ONCE(atomic_read(&dd->irq_workers_active) != 0);
  906 
  907 			/* Start at 1: group zero is always local? */
  908 			for (i = 0, workers = 0; i < MTIP_MAX_SLOT_GROUPS;
  909 									i++) {
  910 				twork = &dd->work[i];
  911 				twork->completed = readl(port->completed[i]);
  912 				if (twork->completed)
  913 					workers++;
  914 			}
  915 
  916 			atomic_set(&dd->irq_workers_active, workers);
  917 			if (workers) {
  918 				for (i = 1; i < MTIP_MAX_SLOT_GROUPS; i++) {
  919 					twork = &dd->work[i];
  920 					if (twork->completed)
  921 						queue_work_on(
  922 							twork->cpu_binding,
  923 							dd->isr_workq,
  924 							&twork->work);
  925 				}
  926 
  927 				if (likely(dd->work[0].completed))
  928 					mtip_workq_sdbfx(port, 0,
  929 							dd->work[0].completed);
  930 
  931 			} else {
  932 				/*
  933 				 * Chip quirk: SDB interrupt but nothing
  934 				 * to complete
  935 				 */
  936 				do_irq_enable = 1;
  937 			}
  938 		}
  939 
  940 		if (unlikely(port_stat & PORT_IRQ_ERR)) {
  941 			if (unlikely(mtip_check_surprise_removal(dd->pdev))) {
  942 				/* don't proceed further */
  943 				return IRQ_HANDLED;
  944 			}
  945 			if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT,
  946 							&dd->dd_flag))
  947 				return rv;
  948 
  949 			mtip_process_errors(dd, port_stat & PORT_IRQ_ERR);
  950 		}
  951 
  952 		if (unlikely(port_stat & PORT_IRQ_LEGACY))
  953 			mtip_process_legacy(dd, port_stat & PORT_IRQ_LEGACY);
  954 	}
  955 
  956 	/* acknowledge interrupt */
  957 	if (unlikely(do_irq_enable))
  958 		writel(hba_stat, dd->mmio + HOST_IRQ_STAT);
  959 
  960 	return rv;
  961 }
  962 
  963 /*
  964  * HBA interrupt subroutine.
  965  *
  966  * @irq		IRQ number.
  967  * @instance	Pointer to the driver data structure.
  968  *
  969  * return value
  970  *	IRQ_HANDLED	A HBA interrupt was pending and handled.
  971  *	IRQ_NONE	This interrupt was not for the HBA.
  972  */
  973 static irqreturn_t mtip_irq_handler(int irq, void *instance)
  974 {
  975 	struct driver_data *dd = instance;
  976 
  977 	return mtip_handle_irq(dd);
  978 }
  979 
  980 static void mtip_issue_non_ncq_command(struct mtip_port *port, int tag)
  981 {
  982 	writel(1 << MTIP_TAG_BIT(tag),
  983 		port->cmd_issue[MTIP_TAG_INDEX(tag)]);
  984 }
  985 
  986 static bool mtip_pause_ncq(struct mtip_port *port,
  987 				struct host_to_dev_fis *fis)
  988 {
  989 	struct host_to_dev_fis *reply;
  990 	unsigned long task_file_data;
  991 
  992 	reply = port->rxfis + RX_FIS_D2H_REG;
  993 	task_file_data = readl(port->mmio+PORT_TFDATA);
  994 
  995 	if ((task_file_data & 1))
  996 		return false;
  997 
  998 	if (fis->command == ATA_CMD_SEC_ERASE_PREP) {
  999 		port->ic_pause_timer = jiffies;
 1000 		return true;
 1001 	} else if ((fis->command == ATA_CMD_DOWNLOAD_MICRO) &&
 1002 					(fis->features == 0x03)) {
 1003 		set_bit(MTIP_PF_DM_ACTIVE_BIT, &port->flags);
 1004 		port->ic_pause_timer = jiffies;
 1005 		return true;
 1006 	} else if ((fis->command == ATA_CMD_SEC_ERASE_UNIT) ||
 1007 		((fis->command == 0xFC) &&
 1008 			(fis->features == 0x27 || fis->features == 0x72 ||
 1009 			 fis->features == 0x62 || fis->features == 0x26))) {
 1010 		clear_bit(MTIP_DDF_SEC_LOCK_BIT, &port->dd->dd_flag);
 1011 		/* Com reset after secure erase or lowlevel format */
 1012 		mtip_restart_port(port);
 1013 		clear_bit(MTIP_PF_SE_ACTIVE_BIT, &port->flags);
 1014 		return false;
 1015 	}
 1016 
 1017 	return false;
 1018 }
 1019 
 1020 /*
 1021  * Wait for port to quiesce
 1022  *
 1023  * @port    Pointer to port data structure
 1024  * @timeout Max duration to wait (ms)
 1025  *
 1026  * return value
 1027  *	0	Success
 1028  *	-EBUSY  Commands still active
 1029  */
 1030 static int mtip_quiesce_io(struct mtip_port *port, unsigned long timeout)
 1031 {
 1032 	unsigned long to;
 1033 	unsigned int n;
 1034 	unsigned int active = 1;
 1035 
 1036 	blk_mq_stop_hw_queues(port->dd->queue);
 1037 
 1038 	to = jiffies + msecs_to_jiffies(timeout);
 1039 	do {
 1040 		if (test_bit(MTIP_PF_SVC_THD_ACTIVE_BIT, &port->flags) &&
 1041 			test_bit(MTIP_PF_ISSUE_CMDS_BIT, &port->flags)) {
 1042 			msleep(20);
 1043 			continue; /* svc thd is actively issuing commands */
 1044 		}
 1045 
 1046 		msleep(100);
 1047 		if (mtip_check_surprise_removal(port->dd->pdev))
 1048 			goto err_fault;
 1049 		if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &port->dd->dd_flag))
 1050 			goto err_fault;
 1051 
 1052 		/*
 1053 		 * Ignore s_active bit 0 of array element 0.
 1054 		 * This bit will always be set
 1055 		 */
 1056 		active = readl(port->s_active[0]) & 0xFFFFFFFE;
 1057 		for (n = 1; n < port->dd->slot_groups; n++)
 1058 			active |= readl(port->s_active[n]);
 1059 
 1060 		if (!active)
 1061 			break;
 1062 	} while (time_before(jiffies, to));
 1063 
 1064 	blk_mq_start_stopped_hw_queues(port->dd->queue, true);
 1065 	return active ? -EBUSY : 0;
 1066 err_fault:
 1067 	blk_mq_start_stopped_hw_queues(port->dd->queue, true);
 1068 	return -EFAULT;
 1069 }
 1070 
 1071 /*
 1072  * Execute an internal command and wait for the completion.
 1073  *
 1074  * @port    Pointer to the port data structure.
 1075  * @fis     Pointer to the FIS that describes the command.
 1076  * @fis_len  Length in WORDS of the FIS.
 1077  * @buffer  DMA accessible for command data.
 1078  * @buf_len  Length, in bytes, of the data buffer.
 1079  * @opts    Command header options, excluding the FIS length
 1080  *             and the number of PRD entries.
 1081  * @timeout Time in ms to wait for the command to complete.
 1082  *
 1083  * return value
 1084  *	0	 Command completed successfully.
 1085  *	-EFAULT  The buffer address is not correctly aligned.
 1086  *	-EBUSY   Internal command or other IO in progress.
 1087  *	-EAGAIN  Time out waiting for command to complete.
 1088  */
 1089 static int mtip_exec_internal_command(struct mtip_port *port,
 1090 					struct host_to_dev_fis *fis,
 1091 					int fis_len,
 1092 					dma_addr_t buffer,
 1093 					int buf_len,
 1094 					u32 opts,
 1095 					gfp_t atomic,
 1096 					unsigned long timeout)
 1097 {
 1098 	struct mtip_cmd_sg *command_sg;
 1099 	DECLARE_COMPLETION_ONSTACK(wait);
 1100 	struct mtip_cmd *int_cmd;
 1101 	struct driver_data *dd = port->dd;
 1102 	int rv = 0;
 1103 
 1104 	/* Make sure the buffer is 8 byte aligned. This is asic specific. */
 1105 	if (buffer & 0x00000007) {
 1106 		dev_err(&dd->pdev->dev, "SG buffer is not 8 byte aligned\n");
 1107 		return -EFAULT;
 1108 	}
 1109 
 1110 	int_cmd = mtip_get_int_command(dd);
 1111 
 1112 	set_bit(MTIP_PF_IC_ACTIVE_BIT, &port->flags);
 1113 
 1114 	if (fis->command == ATA_CMD_SEC_ERASE_PREP)
 1115 		set_bit(MTIP_PF_SE_ACTIVE_BIT, &port->flags);
 1116 
 1117 	clear_bit(MTIP_PF_DM_ACTIVE_BIT, &port->flags);
 1118 
 1119 	if (atomic == GFP_KERNEL) {
 1120 		if (fis->command != ATA_CMD_STANDBYNOW1) {
 1121 			/* wait for io to complete if non atomic */
 1122 			if (mtip_quiesce_io(port,
 1123 					MTIP_QUIESCE_IO_TIMEOUT_MS) < 0) {
 1124 				dev_warn(&dd->pdev->dev,
 1125 					"Failed to quiesce IO\n");
 1126 				mtip_put_int_command(dd, int_cmd);
 1127 				clear_bit(MTIP_PF_IC_ACTIVE_BIT, &port->flags);
 1128 				wake_up_interruptible(&port->svc_wait);
 1129 				return -EBUSY;
 1130 			}
 1131 		}
 1132 
 1133 		/* Set the completion function and data for the command. */
 1134 		int_cmd->comp_data = &wait;
 1135 		int_cmd->comp_func = mtip_completion;
 1136 
 1137 	} else {
 1138 		/* Clear completion - we're going to poll */
 1139 		int_cmd->comp_data = NULL;
 1140 		int_cmd->comp_func = mtip_null_completion;
 1141 	}
 1142 
 1143 	/* Copy the command to the command table */
 1144 	memcpy(int_cmd->command, fis, fis_len*4);
 1145 
 1146 	/* Populate the SG list */
 1147 	int_cmd->command_header->opts =
 1148 		 __force_bit2int cpu_to_le32(opts | fis_len);
 1149 	if (buf_len) {
 1150 		command_sg = int_cmd->command + AHCI_CMD_TBL_HDR_SZ;
 1151 
 1152 		command_sg->info =
 1153 			__force_bit2int cpu_to_le32((buf_len-1) & 0x3FFFFF);
 1154 		command_sg->dba	=
 1155 			__force_bit2int cpu_to_le32(buffer & 0xFFFFFFFF);
 1156 		command_sg->dba_upper =
 1157 			__force_bit2int cpu_to_le32((buffer >> 16) >> 16);
 1158 
 1159 		int_cmd->command_header->opts |=
 1160 			__force_bit2int cpu_to_le32((1 << 16));
 1161 	}
 1162 
 1163 	/* Populate the command header */
 1164 	int_cmd->command_header->byte_count = 0;
 1165 
 1166 	/* Issue the command to the hardware */
 1167 	mtip_issue_non_ncq_command(port, MTIP_TAG_INTERNAL);
 1168 
 1169 	if (atomic == GFP_KERNEL) {
 1170 		/* Wait for the command to complete or timeout. */
 1171 		if ((rv = wait_for_completion_interruptible_timeout(
 1172 				&wait,
 1173 				msecs_to_jiffies(timeout))) <= 0) {
 1174 			if (rv == -ERESTARTSYS) { /* interrupted */
 1175 				dev_err(&dd->pdev->dev,
 1176 					"Internal command [%02X] was interrupted after %lu ms\n",
 1177 					fis->command, timeout);
 1178 				rv = -EINTR;
 1179 				goto exec_ic_exit;
 1180 			} else if (rv == 0) /* timeout */
 1181 				dev_err(&dd->pdev->dev,
 1182 					"Internal command did not complete [%02X] within timeout of  %lu ms\n",
 1183 					fis->command, timeout);
 1184 			else
 1185 				dev_err(&dd->pdev->dev,
 1186 					"Internal command [%02X] wait returned code [%d] after %lu ms - unhandled\n",
 1187 					fis->command, rv, timeout);
 1188 
 1189 			if (mtip_check_surprise_removal(dd->pdev) ||
 1190 				test_bit(MTIP_DDF_REMOVE_PENDING_BIT,
 1191 						&dd->dd_flag)) {
 1192 				dev_err(&dd->pdev->dev,
 1193 					"Internal command [%02X] wait returned due to SR\n",
 1194 					fis->command);
 1195 				rv = -ENXIO;
 1196 				goto exec_ic_exit;
 1197 			}
 1198 			mtip_device_reset(dd); /* recover from timeout issue */
 1199 			rv = -EAGAIN;
 1200 			goto exec_ic_exit;
 1201 		}
 1202 	} else {
 1203 		u32 hba_stat, port_stat;
 1204 
 1205 		/* Spin for <timeout> checking if command still outstanding */
 1206 		timeout = jiffies + msecs_to_jiffies(timeout);
 1207 		while ((readl(port->cmd_issue[MTIP_TAG_INTERNAL])
 1208 				& (1 << MTIP_TAG_INTERNAL))
 1209 				&& time_before(jiffies, timeout)) {
 1210 			if (mtip_check_surprise_removal(dd->pdev)) {
 1211 				rv = -ENXIO;
 1212 				goto exec_ic_exit;
 1213 			}
 1214 			if ((fis->command != ATA_CMD_STANDBYNOW1) &&
 1215 				test_bit(MTIP_DDF_REMOVE_PENDING_BIT,
 1216 						&dd->dd_flag)) {
 1217 				rv = -ENXIO;
 1218 				goto exec_ic_exit;
 1219 			}
 1220 			port_stat = readl(port->mmio + PORT_IRQ_STAT);
 1221 			if (!port_stat)
 1222 				continue;
 1223 
 1224 			if (port_stat & PORT_IRQ_ERR) {
 1225 				dev_err(&dd->pdev->dev,
 1226 					"Internal command [%02X] failed\n",
 1227 					fis->command);
 1228 				mtip_device_reset(dd);
 1229 				rv = -EIO;
 1230 				goto exec_ic_exit;
 1231 			} else {
 1232 				writel(port_stat, port->mmio + PORT_IRQ_STAT);
 1233 				hba_stat = readl(dd->mmio + HOST_IRQ_STAT);
 1234 				if (hba_stat)
 1235 					writel(hba_stat,
 1236 						dd->mmio + HOST_IRQ_STAT);
 1237 			}
 1238 			break;
 1239 		}
 1240 	}
 1241 
 1242 	if (readl(port->cmd_issue[MTIP_TAG_INTERNAL])
 1243 			& (1 << MTIP_TAG_INTERNAL)) {
 1244 		rv = -ENXIO;
 1245 		if (!test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &dd->dd_flag)) {
 1246 			mtip_device_reset(dd);
 1247 			rv = -EAGAIN;
 1248 		}
 1249 	}
 1250 exec_ic_exit:
 1251 	/* Clear the allocated and active bits for the internal command. */
 1252 	mtip_put_int_command(dd, int_cmd);
 1253 	clear_bit(MTIP_PF_IC_ACTIVE_BIT, &port->flags);
 1254 	if (rv >= 0 && mtip_pause_ncq(port, fis)) {
 1255 		/* NCQ paused */
 1256 		return rv;
 1257 	}
 1258 	wake_up_interruptible(&port->svc_wait);
 1259 
 1260 	return rv;
 1261 }
 1262 
 1263 /*
 1264  * Byte-swap ATA ID strings.
 1265  *
 1266  * ATA identify data contains strings in byte-swapped 16-bit words.
 1267  * They must be swapped (on all architectures) to be usable as C strings.
 1268  * This function swaps bytes in-place.
 1269  *
 1270  * @buf The buffer location of the string
 1271  * @len The number of bytes to swap
 1272  *
 1273  * return value
 1274  *	None
 1275  */
 1276 static inline void ata_swap_string(u16 *buf, unsigned int len)
 1277 {
 1278 	int i;
 1279 	for (i = 0; i < (len/2); i++)
 1280 		be16_to_cpus(&buf[i]);
 1281 }
 1282 
 1283 static void mtip_set_timeout(struct driver_data *dd,
 1284 					struct host_to_dev_fis *fis,
 1285 					unsigned int *timeout, u8 erasemode)
 1286 {
 1287 	switch (fis->command) {
 1288 	case ATA_CMD_DOWNLOAD_MICRO:
 1289 		*timeout = 120000; /* 2 minutes */
 1290 		break;
 1291 	case ATA_CMD_SEC_ERASE_UNIT:
 1292 	case 0xFC:
 1293 		if (erasemode)
 1294 			*timeout = ((*(dd->port->identify + 90) * 2) * 60000);
 1295 		else
 1296 			*timeout = ((*(dd->port->identify + 89) * 2) * 60000);
 1297 		break;
 1298 	case ATA_CMD_STANDBYNOW1:
 1299 		*timeout = 120000;  /* 2 minutes */
 1300 		break;
 1301 	case 0xF7:
 1302 	case 0xFA:
 1303 		*timeout = 60000;  /* 60 seconds */
 1304 		break;
 1305 	case ATA_CMD_SMART:
 1306 		*timeout = 15000;  /* 15 seconds */
 1307 		break;
 1308 	default:
 1309 		*timeout = MTIP_IOCTL_CMD_TIMEOUT_MS;
 1310 		break;
 1311 	}
 1312 }
 1313 
 1314 /*
 1315  * Request the device identity information.
 1316  *
 1317  * If a user space buffer is not specified, i.e. is NULL, the
 1318  * identify information is still read from the drive and placed
 1319  * into the identify data buffer (@e port->identify) in the
 1320  * port data structure.
 1321  * When the identify buffer contains valid identify information @e
 1322  * port->identify_valid is non-zero.
 1323  *
 1324  * @port	 Pointer to the port structure.
 1325  * @user_buffer  A user space buffer where the identify data should be
 1326  *                    copied.
 1327  *
 1328  * return value
 1329  *	0	Command completed successfully.
 1330  *	-EFAULT An error occurred while coping data to the user buffer.
 1331  *	-1	Command failed.
 1332  */
 1333 static int mtip_get_identify(struct mtip_port *port, void __user *user_buffer)
 1334 {
 1335 	int rv = 0;
 1336 	struct host_to_dev_fis fis;
 1337 
 1338 	if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &port->dd->dd_flag))
 1339 		return -EFAULT;
 1340 
 1341 	/* Build the FIS. */
 1342 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 1343 	fis.type	= 0x27;
 1344 	fis.opts	= 1 << 7;
 1345 	fis.command	= ATA_CMD_ID_ATA;
 1346 
 1347 	/* Set the identify information as invalid. */
 1348 	port->identify_valid = 0;
 1349 
 1350 	/* Clear the identify information. */
 1351 	memset(port->identify, 0, sizeof(u16) * ATA_ID_WORDS);
 1352 
 1353 	/* Execute the command. */
 1354 	if (mtip_exec_internal_command(port,
 1355 				&fis,
 1356 				5,
 1357 				port->identify_dma,
 1358 				sizeof(u16) * ATA_ID_WORDS,
 1359 				0,
 1360 				GFP_KERNEL,
 1361 				MTIP_INT_CMD_TIMEOUT_MS)
 1362 				< 0) {
 1363 		rv = -1;
 1364 		goto out;
 1365 	}
 1366 
 1367 	/*
 1368 	 * Perform any necessary byte-swapping.  Yes, the kernel does in fact
 1369 	 * perform field-sensitive swapping on the string fields.
 1370 	 * See the kernel use of ata_id_string() for proof of this.
 1371 	 */
 1372 #ifdef __LITTLE_ENDIAN
 1373 	ata_swap_string(port->identify + 27, 40);  /* model string*/
 1374 	ata_swap_string(port->identify + 23, 8);   /* firmware string*/
 1375 	ata_swap_string(port->identify + 10, 20);  /* serial# string*/
 1376 #else
 1377 	{
 1378 		int i;
 1379 		for (i = 0; i < ATA_ID_WORDS; i++)
 1380 			port->identify[i] = le16_to_cpu(port->identify[i]);
 1381 	}
 1382 #endif
 1383 
 1384 	/* Check security locked state */
 1385 	if (port->identify[128] & 0x4)
 1386 		set_bit(MTIP_DDF_SEC_LOCK_BIT, &port->dd->dd_flag);
 1387 	else
 1388 		clear_bit(MTIP_DDF_SEC_LOCK_BIT, &port->dd->dd_flag);
 1389 
 1390 #ifdef MTIP_TRIM /* Disabling TRIM support temporarily */
 1391 	/* Demux ID.DRAT & ID.RZAT to determine trim support */
 1392 	if (port->identify[69] & (1 << 14) && port->identify[69] & (1 << 5))
 1393 		port->dd->trim_supp = true;
 1394 	else
 1395 #endif
 1396 		port->dd->trim_supp = false;
 1397 
 1398 	/* Set the identify buffer as valid. */
 1399 	port->identify_valid = 1;
 1400 
 1401 	if (user_buffer) {
 1402 		if (copy_to_user(
 1403 			user_buffer,
 1404 			port->identify,
 1405 			ATA_ID_WORDS * sizeof(u16))) {
 1406 			rv = -EFAULT;
 1407 			goto out;
 1408 		}
 1409 	}
 1410 
 1411 out:
 1412 	return rv;
 1413 }
 1414 
 1415 /*
 1416  * Issue a standby immediate command to the device.
 1417  *
 1418  * @port Pointer to the port structure.
 1419  *
 1420  * return value
 1421  *	0	Command was executed successfully.
 1422  *	-1	An error occurred while executing the command.
 1423  */
 1424 static int mtip_standby_immediate(struct mtip_port *port)
 1425 {
 1426 	int rv;
 1427 	struct host_to_dev_fis	fis;
 1428 	unsigned long start;
 1429 	unsigned int timeout;
 1430 
 1431 	/* Build the FIS. */
 1432 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 1433 	fis.type	= 0x27;
 1434 	fis.opts	= 1 << 7;
 1435 	fis.command	= ATA_CMD_STANDBYNOW1;
 1436 
 1437 	mtip_set_timeout(port->dd, &fis, &timeout, 0);
 1438 
 1439 	start = jiffies;
 1440 	rv = mtip_exec_internal_command(port,
 1441 					&fis,
 1442 					5,
 1443 					0,
 1444 					0,
 1445 					0,
 1446 					GFP_ATOMIC,
 1447 					timeout);
 1448 	dbg_printk(MTIP_DRV_NAME "Time taken to complete standby cmd: %d ms\n",
 1449 			jiffies_to_msecs(jiffies - start));
 1450 	if (rv)
 1451 		dev_warn(&port->dd->pdev->dev,
 1452 			"STANDBY IMMEDIATE command failed.\n");
 1453 
 1454 	return rv;
 1455 }
 1456 
 1457 /*
 1458  * Issue a READ LOG EXT command to the device.
 1459  *
 1460  * @port	pointer to the port structure.
 1461  * @page	page number to fetch
 1462  * @buffer	pointer to buffer
 1463  * @buffer_dma	dma address corresponding to @buffer
 1464  * @sectors	page length to fetch, in sectors
 1465  *
 1466  * return value
 1467  *	@rv	return value from mtip_exec_internal_command()
 1468  */
 1469 static int mtip_read_log_page(struct mtip_port *port, u8 page, u16 *buffer,
 1470 				dma_addr_t buffer_dma, unsigned int sectors)
 1471 {
 1472 	struct host_to_dev_fis fis;
 1473 
 1474 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 1475 	fis.type	= 0x27;
 1476 	fis.opts	= 1 << 7;
 1477 	fis.command	= ATA_CMD_READ_LOG_EXT;
 1478 	fis.sect_count	= sectors & 0xFF;
 1479 	fis.sect_cnt_ex	= (sectors >> 8) & 0xFF;
 1480 	fis.lba_low	= page;
 1481 	fis.lba_mid	= 0;
 1482 	fis.device	= ATA_DEVICE_OBS;
 1483 
 1484 	memset(buffer, 0, sectors * ATA_SECT_SIZE);
 1485 
 1486 	return mtip_exec_internal_command(port,
 1487 					&fis,
 1488 					5,
 1489 					buffer_dma,
 1490 					sectors * ATA_SECT_SIZE,
 1491 					0,
 1492 					GFP_ATOMIC,
 1493 					MTIP_INT_CMD_TIMEOUT_MS);
 1494 }
 1495 
 1496 /*
 1497  * Issue a SMART READ DATA command to the device.
 1498  *
 1499  * @port	pointer to the port structure.
 1500  * @buffer	pointer to buffer
 1501  * @buffer_dma	dma address corresponding to @buffer
 1502  *
 1503  * return value
 1504  *	@rv	return value from mtip_exec_internal_command()
 1505  */
 1506 static int mtip_get_smart_data(struct mtip_port *port, u8 *buffer,
 1507 					dma_addr_t buffer_dma)
 1508 {
 1509 	struct host_to_dev_fis fis;
 1510 
 1511 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 1512 	fis.type	= 0x27;
 1513 	fis.opts	= 1 << 7;
 1514 	fis.command	= ATA_CMD_SMART;
 1515 	fis.features	= 0xD0;
 1516 	fis.sect_count	= 1;
 1517 	fis.lba_mid	= 0x4F;
 1518 	fis.lba_hi	= 0xC2;
 1519 	fis.device	= ATA_DEVICE_OBS;
 1520 
 1521 	return mtip_exec_internal_command(port,
 1522 					&fis,
 1523 					5,
 1524 					buffer_dma,
 1525 					ATA_SECT_SIZE,
 1526 					0,
 1527 					GFP_ATOMIC,
 1528 					15000);
 1529 }
 1530 
 1531 /*
 1532  * Get the value of a smart attribute
 1533  *
 1534  * @port	pointer to the port structure
 1535  * @id		attribute number
 1536  * @attrib	pointer to return attrib information corresponding to @id
 1537  *
 1538  * return value
 1539  *	-EINVAL	NULL buffer passed or unsupported attribute @id.
 1540  *	-EPERM	Identify data not valid, SMART not supported or not enabled
 1541  */
 1542 static int mtip_get_smart_attr(struct mtip_port *port, unsigned int id,
 1543 						struct smart_attr *attrib)
 1544 {
 1545 	int rv, i;
 1546 	struct smart_attr *pattr;
 1547 
 1548 	if (!attrib)
 1549 		return -EINVAL;
 1550 
 1551 	if (!port->identify_valid) {
 1552 		dev_warn(&port->dd->pdev->dev, "IDENTIFY DATA not valid\n");
 1553 		return -EPERM;
 1554 	}
 1555 	if (!(port->identify[82] & 0x1)) {
 1556 		dev_warn(&port->dd->pdev->dev, "SMART not supported\n");
 1557 		return -EPERM;
 1558 	}
 1559 	if (!(port->identify[85] & 0x1)) {
 1560 		dev_warn(&port->dd->pdev->dev, "SMART not enabled\n");
 1561 		return -EPERM;
 1562 	}
 1563 
 1564 	memset(port->smart_buf, 0, ATA_SECT_SIZE);
 1565 	rv = mtip_get_smart_data(port, port->smart_buf, port->smart_buf_dma);
 1566 	if (rv) {
 1567 		dev_warn(&port->dd->pdev->dev, "Failed to ge SMART data\n");
 1568 		return rv;
 1569 	}
 1570 
 1571 	pattr = (struct smart_attr *)(port->smart_buf + 2);
 1572 	for (i = 0; i < 29; i++, pattr++)
 1573 		if (pattr->attr_id == id) {
 1574 			memcpy(attrib, pattr, sizeof(struct smart_attr));
 1575 			break;
 1576 		}
 1577 
 1578 	if (i == 29) {
 1579 		dev_warn(&port->dd->pdev->dev,
 1580 			"Query for invalid SMART attribute ID\n");
 1581 		rv = -EINVAL;
 1582 	}
 1583 
 1584 	return rv;
 1585 }
 1586 
 1587 /*
 1588  * Trim unused sectors
 1589  *
 1590  * @dd		pointer to driver_data structure
 1591  * @lba		starting lba
 1592  * @len		# of 512b sectors to trim
 1593  *
 1594  * return value
 1595  *      -ENOMEM		Out of dma memory
 1596  *      -EINVAL		Invalid parameters passed in, trim not supported
 1597  *      -EIO		Error submitting trim request to hw
 1598  */
 1599 static int mtip_send_trim(struct driver_data *dd, unsigned int lba,
 1600 				unsigned int len)
 1601 {
 1602 	int i, rv = 0;
 1603 	u64 tlba, tlen, sect_left;
 1604 	struct mtip_trim_entry *buf;
 1605 	dma_addr_t dma_addr;
 1606 	struct host_to_dev_fis fis;
 1607 
 1608 	if (!len || dd->trim_supp == false)
 1609 		return -EINVAL;
 1610 
 1611 	/* Trim request too big */
 1612 	WARN_ON(len > (MTIP_MAX_TRIM_ENTRY_LEN * MTIP_MAX_TRIM_ENTRIES));
 1613 
 1614 	/* Trim request not aligned on 4k boundary */
 1615 	WARN_ON(len % 8 != 0);
 1616 
 1617 	/* Warn if vu_trim structure is too big */
 1618 	WARN_ON(sizeof(struct mtip_trim) > ATA_SECT_SIZE);
 1619 
 1620 	/* Allocate a DMA buffer for the trim structure */
 1621 	buf = dmam_alloc_coherent(&dd->pdev->dev, ATA_SECT_SIZE, &dma_addr,
 1622 								GFP_KERNEL);
 1623 	if (!buf)
 1624 		return -ENOMEM;
 1625 	memset(buf, 0, ATA_SECT_SIZE);
 1626 
 1627 	for (i = 0, sect_left = len, tlba = lba;
 1628 			i < MTIP_MAX_TRIM_ENTRIES && sect_left;
 1629 			i++) {
 1630 		tlen = (sect_left >= MTIP_MAX_TRIM_ENTRY_LEN ?
 1631 					MTIP_MAX_TRIM_ENTRY_LEN :
 1632 					sect_left);
 1633 		buf[i].lba = __force_bit2int cpu_to_le32(tlba);
 1634 		buf[i].range = __force_bit2int cpu_to_le16(tlen);
 1635 		tlba += tlen;
 1636 		sect_left -= tlen;
 1637 	}
 1638 	WARN_ON(sect_left != 0);
 1639 
 1640 	/* Build the fis */
 1641 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 1642 	fis.type       = 0x27;
 1643 	fis.opts       = 1 << 7;
 1644 	fis.command    = 0xfb;
 1645 	fis.features   = 0x60;
 1646 	fis.sect_count = 1;
 1647 	fis.device     = ATA_DEVICE_OBS;
 1648 
 1649 	if (mtip_exec_internal_command(dd->port,
 1650 					&fis,
 1651 					5,
 1652 					dma_addr,
 1653 					ATA_SECT_SIZE,
 1654 					0,
 1655 					GFP_KERNEL,
 1656 					MTIP_TRIM_TIMEOUT_MS) < 0)
 1657 		rv = -EIO;
 1658 
 1659 	dmam_free_coherent(&dd->pdev->dev, ATA_SECT_SIZE, buf, dma_addr);
 1660 	return rv;
 1661 }
 1662 
 1663 /*
 1664  * Get the drive capacity.
 1665  *
 1666  * @dd      Pointer to the device data structure.
 1667  * @sectors Pointer to the variable that will receive the sector count.
 1668  *
 1669  * return value
 1670  *	1 Capacity was returned successfully.
 1671  *	0 The identify information is invalid.
 1672  */
 1673 static bool mtip_hw_get_capacity(struct driver_data *dd, sector_t *sectors)
 1674 {
 1675 	struct mtip_port *port = dd->port;
 1676 	u64 total, raw0, raw1, raw2, raw3;
 1677 	raw0 = port->identify[100];
 1678 	raw1 = port->identify[101];
 1679 	raw2 = port->identify[102];
 1680 	raw3 = port->identify[103];
 1681 	total = raw0 | raw1<<16 | raw2<<32 | raw3<<48;
 1682 	*sectors = total;
 1683 	return (bool) !!port->identify_valid;
 1684 }
 1685 
 1686 /*
 1687  * Display the identify command data.
 1688  *
 1689  * @port Pointer to the port data structure.
 1690  *
 1691  * return value
 1692  *	None
 1693  */
 1694 static void mtip_dump_identify(struct mtip_port *port)
 1695 {
 1696 	sector_t sectors;
 1697 	unsigned short revid;
 1698 	char cbuf[42];
 1699 
 1700 	if (!port->identify_valid)
 1701 		return;
 1702 
 1703 	strlcpy(cbuf, (char *)(port->identify+10), 21);
 1704 	dev_info(&port->dd->pdev->dev,
 1705 		"Serial No.: %s\n", cbuf);
 1706 
 1707 	strlcpy(cbuf, (char *)(port->identify+23), 9);
 1708 	dev_info(&port->dd->pdev->dev,
 1709 		"Firmware Ver.: %s\n", cbuf);
 1710 
 1711 	strlcpy(cbuf, (char *)(port->identify+27), 41);
 1712 	dev_info(&port->dd->pdev->dev, "Model: %s\n", cbuf);
 1713 
 1714 	dev_info(&port->dd->pdev->dev, "Security: %04x %s\n",
 1715 		port->identify[128],
 1716 		port->identify[128] & 0x4 ? "(LOCKED)" : "");
 1717 
 1718 	if (mtip_hw_get_capacity(port->dd, §ors))
 1719 		dev_info(&port->dd->pdev->dev,
 1720 			"Capacity: %llu sectors (%llu MB)\n",
 1721 			 (u64)sectors,
 1722 			 ((u64)sectors) * ATA_SECT_SIZE >> 20);
 1723 
 1724 	pci_read_config_word(port->dd->pdev, PCI_REVISION_ID, &revid);
 1725 	switch (revid & 0xFF) {
 1726 	case 0x1:
 1727 		strlcpy(cbuf, "A0", 3);
 1728 		break;
 1729 	case 0x3:
 1730 		strlcpy(cbuf, "A2", 3);
 1731 		break;
 1732 	default:
 1733 		strlcpy(cbuf, "?", 2);
 1734 		break;
 1735 	}
 1736 	dev_info(&port->dd->pdev->dev,
 1737 		"Card Type: %s\n", cbuf);
 1738 }
 1739 
 1740 /*
 1741  * Map the commands scatter list into the command table.
 1742  *
 1743  * @command Pointer to the command.
 1744  * @nents Number of scatter list entries.
 1745  *
 1746  * return value
 1747  *	None
 1748  */
 1749 static inline void fill_command_sg(struct driver_data *dd,
 1750 				struct mtip_cmd *command,
 1751 				int nents)
 1752 {
 1753 	int n;
 1754 	unsigned int dma_len;
 1755 	struct mtip_cmd_sg *command_sg;
 1756 	struct scatterlist *sg = command->sg;
 1757 
 1758 	command_sg = command->command + AHCI_CMD_TBL_HDR_SZ;
 1759 
 1760 	for (n = 0; n < nents; n++) {
 1761 		dma_len = sg_dma_len(sg);
 1762 		if (dma_len > 0x400000)
 1763 			dev_err(&dd->pdev->dev,
 1764 				"DMA segment length truncated\n");
 1765 		command_sg->info = __force_bit2int
 1766 			cpu_to_le32((dma_len-1) & 0x3FFFFF);
 1767 		command_sg->dba	= __force_bit2int
 1768 			cpu_to_le32(sg_dma_address(sg));
 1769 		command_sg->dba_upper = __force_bit2int
 1770 			cpu_to_le32((sg_dma_address(sg) >> 16) >> 16);
 1771 		command_sg++;
 1772 		sg++;
 1773 	}
 1774 }
 1775 
 1776 /*
 1777  * @brief Execute a drive command.
 1778  *
 1779  * return value 0 The command completed successfully.
 1780  * return value -1 An error occurred while executing the command.
 1781  */
 1782 static int exec_drive_task(struct mtip_port *port, u8 *command)
 1783 {
 1784 	struct host_to_dev_fis	fis;
 1785 	struct host_to_dev_fis *reply = (port->rxfis + RX_FIS_D2H_REG);
 1786 	unsigned int to;
 1787 
 1788 	/* Build the FIS. */
 1789 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 1790 	fis.type	= 0x27;
 1791 	fis.opts	= 1 << 7;
 1792 	fis.command	= command[0];
 1793 	fis.features	= command[1];
 1794 	fis.sect_count	= command[2];
 1795 	fis.sector	= command[3];
 1796 	fis.cyl_low	= command[4];
 1797 	fis.cyl_hi	= command[5];
 1798 	fis.device	= command[6] & ~0x10; /* Clear the dev bit*/
 1799 
 1800 	mtip_set_timeout(port->dd, &fis, &to, 0);
 1801 
 1802 	dbg_printk(MTIP_DRV_NAME " %s: User Command: cmd %x, feat %x, nsect %x, sect %x, lcyl %x, hcyl %x, sel %x\n",
 1803 		__func__,
 1804 		command[0],
 1805 		command[1],
 1806 		command[2],
 1807 		command[3],
 1808 		command[4],
 1809 		command[5],
 1810 		command[6]);
 1811 
 1812 	/* Execute the command. */
 1813 	if (mtip_exec_internal_command(port,
 1814 				 &fis,
 1815 				 5,
 1816 				 0,
 1817 				 0,
 1818 				 0,
 1819 				 GFP_KERNEL,
 1820 				 to) < 0) {
 1821 		return -1;
 1822 	}
 1823 
 1824 	command[0] = reply->command; /* Status*/
 1825 	command[1] = reply->features; /* Error*/
 1826 	command[4] = reply->cyl_low;
 1827 	command[5] = reply->cyl_hi;
 1828 
 1829 	dbg_printk(MTIP_DRV_NAME " %s: Completion Status: stat %x, err %x , cyl_lo %x cyl_hi %x\n",
 1830 		__func__,
 1831 		command[0],
 1832 		command[1],
 1833 		command[4],
 1834 		command[5]);
 1835 
 1836 	return 0;
 1837 }
 1838 
 1839 /*
 1840  * @brief Execute a drive command.
 1841  *
 1842  * @param port Pointer to the port data structure.
 1843  * @param command Pointer to the user specified command parameters.
 1844  * @param user_buffer Pointer to the user space buffer where read sector
 1845  *                   data should be copied.
 1846  *
 1847  * return value 0 The command completed successfully.
 1848  * return value -EFAULT An error occurred while copying the completion
 1849  *                 data to the user space buffer.
 1850  * return value -1 An error occurred while executing the command.
 1851  */
 1852 static int exec_drive_command(struct mtip_port *port, u8 *command,
 1853 				void __user *user_buffer)
 1854 {
 1855 	struct host_to_dev_fis	fis;
 1856 	struct host_to_dev_fis *reply;
 1857 	u8 *buf = NULL;
 1858 	dma_addr_t dma_addr = 0;
 1859 	int rv = 0, xfer_sz = command[3];
 1860 	unsigned int to;
 1861 
 1862 	if (xfer_sz) {
 1863 		if (!user_buffer)
 1864 			return -EFAULT;
 1865 
 1866 		buf = dmam_alloc_coherent(&port->dd->pdev->dev,
 1867 				ATA_SECT_SIZE * xfer_sz,
 1868 				&dma_addr,
 1869 				GFP_KERNEL);
 1870 		if (!buf) {
 1871 			dev_err(&port->dd->pdev->dev,
 1872 				"Memory allocation failed (%d bytes)\n",
 1873 				ATA_SECT_SIZE * xfer_sz);
 1874 			return -ENOMEM;
 1875 		}
 1876 		memset(buf, 0, ATA_SECT_SIZE * xfer_sz);
 1877 	}
 1878 
 1879 	/* Build the FIS. */
 1880 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 1881 	fis.type	= 0x27;
 1882 	fis.opts	= 1 << 7;
 1883 	fis.command	= command[0];
 1884 	fis.features	= command[2];
 1885 	fis.sect_count	= command[3];
 1886 	if (fis.command == ATA_CMD_SMART) {
 1887 		fis.sector	= command[1];
 1888 		fis.cyl_low	= 0x4F;
 1889 		fis.cyl_hi	= 0xC2;
 1890 	}
 1891 
 1892 	mtip_set_timeout(port->dd, &fis, &to, 0);
 1893 
 1894 	if (xfer_sz)
 1895 		reply = (port->rxfis + RX_FIS_PIO_SETUP);
 1896 	else
 1897 		reply = (port->rxfis + RX_FIS_D2H_REG);
 1898 
 1899 	dbg_printk(MTIP_DRV_NAME
 1900 		" %s: User Command: cmd %x, sect %x, "
 1901 		"feat %x, sectcnt %x\n",
 1902 		__func__,
 1903 		command[0],
 1904 		command[1],
 1905 		command[2],
 1906 		command[3]);
 1907 
 1908 	/* Execute the command. */
 1909 	if (mtip_exec_internal_command(port,
 1910 				&fis,
 1911 				 5,
 1912 				 (xfer_sz ? dma_addr : 0),
 1913 				 (xfer_sz ? ATA_SECT_SIZE * xfer_sz : 0),
 1914 				 0,
 1915 				 GFP_KERNEL,
 1916 				 to)
 1917 				 < 0) {
 1918 		rv = -EFAULT;
 1919 		goto exit_drive_command;
 1920 	}
 1921 
 1922 	/* Collect the completion status. */
 1923 	command[0] = reply->command; /* Status*/
 1924 	command[1] = reply->features; /* Error*/
 1925 	command[2] = reply->sect_count;
 1926 
 1927 	dbg_printk(MTIP_DRV_NAME
 1928 		" %s: Completion Status: stat %x, "
 1929 		"err %x, nsect %x\n",
 1930 		__func__,
 1931 		command[0],
 1932 		command[1],
 1933 		command[2]);
 1934 
 1935 	if (xfer_sz) {
 1936 		if (copy_to_user(user_buffer,
 1937 				 buf,
 1938 				 ATA_SECT_SIZE * command[3])) {
 1939 			rv = -EFAULT;
 1940 			goto exit_drive_command;
 1941 		}
 1942 	}
 1943 exit_drive_command:
 1944 	if (buf)
 1945 		dmam_free_coherent(&port->dd->pdev->dev,
 1946 				ATA_SECT_SIZE * xfer_sz, buf, dma_addr);
 1947 	return rv;
 1948 }
 1949 
 1950 /*
 1951  *  Indicates whether a command has a single sector payload.
 1952  *
 1953  *  @command passed to the device to perform the certain event.
 1954  *  @features passed to the device to perform the certain event.
 1955  *
 1956  *  return value
 1957  *	1	command is one that always has a single sector payload,
 1958  *		regardless of the value in the Sector Count field.
 1959  *      0       otherwise
 1960  *
 1961  */
 1962 static unsigned int implicit_sector(unsigned char command,
 1963 				    unsigned char features)
 1964 {
 1965 	unsigned int rv = 0;
 1966 
 1967 	/* list of commands that have an implicit sector count of 1 */
 1968 	switch (command) {
 1969 	case ATA_CMD_SEC_SET_PASS:
 1970 	case ATA_CMD_SEC_UNLOCK:
 1971 	case ATA_CMD_SEC_ERASE_PREP:
 1972 	case ATA_CMD_SEC_ERASE_UNIT:
 1973 	case ATA_CMD_SEC_FREEZE_LOCK:
 1974 	case ATA_CMD_SEC_DISABLE_PASS:
 1975 	case ATA_CMD_PMP_READ:
 1976 	case ATA_CMD_PMP_WRITE:
 1977 		rv = 1;
 1978 		break;
 1979 	case ATA_CMD_SET_MAX:
 1980 		if (features == ATA_SET_MAX_UNLOCK)
 1981 			rv = 1;
 1982 		break;
 1983 	case ATA_CMD_SMART:
 1984 		if ((features == ATA_SMART_READ_VALUES) ||
 1985 				(features == ATA_SMART_READ_THRESHOLDS))
 1986 			rv = 1;
 1987 		break;
 1988 	case ATA_CMD_CONF_OVERLAY:
 1989 		if ((features == ATA_DCO_IDENTIFY) ||
 1990 				(features == ATA_DCO_SET))
 1991 			rv = 1;
 1992 		break;
 1993 	}
 1994 	return rv;
 1995 }
 1996 
 1997 /*
 1998  * Executes a taskfile
 1999  * See ide_taskfile_ioctl() for derivation
 2000  */
 2001 static int exec_drive_taskfile(struct driver_data *dd,
 2002 			       void __user *buf,
 2003 			       ide_task_request_t *req_task,
 2004 			       int outtotal)
 2005 {
 2006 	struct host_to_dev_fis	fis;
 2007 	struct host_to_dev_fis *reply;
 2008 	u8 *outbuf = NULL;
 2009 	u8 *inbuf = NULL;
 2010 	dma_addr_t outbuf_dma = 0;
 2011 	dma_addr_t inbuf_dma = 0;
 2012 	dma_addr_t dma_buffer = 0;
 2013 	int err = 0;
 2014 	unsigned int taskin = 0;
 2015 	unsigned int taskout = 0;
 2016 	u8 nsect = 0;
 2017 	unsigned int timeout;
 2018 	unsigned int force_single_sector;
 2019 	unsigned int transfer_size;
 2020 	unsigned long task_file_data;
 2021 	int intotal = outtotal + req_task->out_size;
 2022 	int erasemode = 0;
 2023 
 2024 	taskout = req_task->out_size;
 2025 	taskin = req_task->in_size;
 2026 	/* 130560 = 512 * 0xFF*/
 2027 	if (taskin > 130560 || taskout > 130560) {
 2028 		err = -EINVAL;
 2029 		goto abort;
 2030 	}
 2031 
 2032 	if (taskout) {
 2033 		outbuf = memdup_user(buf + outtotal, taskout);
 2034 		if (IS_ERR(outbuf)) {
 2035 			err = PTR_ERR(outbuf);
 2036 			outbuf = NULL;
 2037 			goto abort;
 2038 		}
 2039 		outbuf_dma = pci_map_single(dd->pdev,
 2040 					 outbuf,
 2041 					 taskout,
 2042 					 DMA_TO_DEVICE);
 2043 		if (outbuf_dma == 0) {
 2044 			err = -ENOMEM;
 2045 			goto abort;
 2046 		}
 2047 		dma_buffer = outbuf_dma;
 2048 	}
 2049 
 2050 	if (taskin) {
 2051 		inbuf = memdup_user(buf + intotal, taskin);
 2052 		if (IS_ERR(inbuf)) {
 2053 			err = PTR_ERR(inbuf);
 2054 			inbuf = NULL;
 2055 			goto abort;
 2056 		}
 2057 		inbuf_dma = pci_map_single(dd->pdev,
 2058 					 inbuf,
 2059 					 taskin, DMA_FROM_DEVICE);
 2060 		if (inbuf_dma == 0) {
 2061 			err = -ENOMEM;
 2062 			goto abort;
 2063 		}
 2064 		dma_buffer = inbuf_dma;
 2065 	}
 2066 
 2067 	/* only supports PIO and non-data commands from this ioctl. */
 2068 	switch (req_task->data_phase) {
 2069 	case TASKFILE_OUT:
 2070 		nsect = taskout / ATA_SECT_SIZE;
 2071 		reply = (dd->port->rxfis + RX_FIS_PIO_SETUP);
 2072 		break;
 2073 	case TASKFILE_IN:
 2074 		reply = (dd->port->rxfis + RX_FIS_PIO_SETUP);
 2075 		break;
 2076 	case TASKFILE_NO_DATA:
 2077 		reply = (dd->port->rxfis + RX_FIS_D2H_REG);
 2078 		break;
 2079 	default:
 2080 		err = -EINVAL;
 2081 		goto abort;
 2082 	}
 2083 
 2084 	/* Build the FIS. */
 2085 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 2086 
 2087 	fis.type	= 0x27;
 2088 	fis.opts	= 1 << 7;
 2089 	fis.command	= req_task->io_ports[7];
 2090 	fis.features	= req_task->io_ports[1];
 2091 	fis.sect_count	= req_task->io_ports[2];
 2092 	fis.lba_low	= req_task->io_ports[3];
 2093 	fis.lba_mid	= req_task->io_ports[4];
 2094 	fis.lba_hi	= req_task->io_ports[5];
 2095 	 /* Clear the dev bit*/
 2096 	fis.device	= req_task->io_ports[6] & ~0x10;
 2097 
 2098 	if ((req_task->in_flags.all == 0) && (req_task->out_flags.all & 1)) {
 2099 		req_task->in_flags.all	=
 2100 			IDE_TASKFILE_STD_IN_FLAGS |
 2101 			(IDE_HOB_STD_IN_FLAGS << 8);
 2102 		fis.lba_low_ex		= req_task->hob_ports[3];
 2103 		fis.lba_mid_ex		= req_task->hob_ports[4];
 2104 		fis.lba_hi_ex		= req_task->hob_ports[5];
 2105 		fis.features_ex		= req_task->hob_ports[1];
 2106 		fis.sect_cnt_ex		= req_task->hob_ports[2];
 2107 
 2108 	} else {
 2109 		req_task->in_flags.all = IDE_TASKFILE_STD_IN_FLAGS;
 2110 	}
 2111 
 2112 	force_single_sector = implicit_sector(fis.command, fis.features);
 2113 
 2114 	if ((taskin || taskout) && (!fis.sect_count)) {
 2115 		if (nsect)
 2116 			fis.sect_count = nsect;
 2117 		else {
 2118 			if (!force_single_sector) {
 2119 				dev_warn(&dd->pdev->dev,
 2120 					"data movement but "
 2121 					"sect_count is 0\n");
 2122 					err = -EINVAL;
 2123 					goto abort;
 2124 			}
 2125 		}
 2126 	}
 2127 
 2128 	dbg_printk(MTIP_DRV_NAME
 2129 		" %s: cmd %x, feat %x, nsect %x,"
 2130 		" sect/lbal %x, lcyl/lbam %x, hcyl/lbah %x,"
 2131 		" head/dev %x\n",
 2132 		__func__,
 2133 		fis.command,
 2134 		fis.features,
 2135 		fis.sect_count,
 2136 		fis.lba_low,
 2137 		fis.lba_mid,
 2138 		fis.lba_hi,
 2139 		fis.device);
 2140 
 2141 	/* check for erase mode support during secure erase.*/
 2142 	if ((fis.command == ATA_CMD_SEC_ERASE_UNIT) && outbuf &&
 2143 					(outbuf[0] & MTIP_SEC_ERASE_MODE)) {
 2144 		erasemode = 1;
 2145 	}
 2146 
 2147 	mtip_set_timeout(dd, &fis, &timeout, erasemode);
 2148 
 2149 	/* Determine the correct transfer size.*/
 2150 	if (force_single_sector)
 2151 		transfer_size = ATA_SECT_SIZE;
 2152 	else
 2153 		transfer_size = ATA_SECT_SIZE * fis.sect_count;
 2154 
 2155 	/* Execute the command.*/
 2156 	if (mtip_exec_internal_command(dd->port,
 2157 				 &fis,
 2158 				 5,
 2159 				 dma_buffer,
 2160 				 transfer_size,
 2161 				 0,
 2162 				 GFP_KERNEL,
 2163 				 timeout) < 0) {
 2164 		err = -EIO;
 2165 		goto abort;
 2166 	}
 2167 
 2168 	task_file_data = readl(dd->port->mmio+PORT_TFDATA);
 2169 
 2170 	if ((req_task->data_phase == TASKFILE_IN) && !(task_file_data & 1)) {
 2171 		reply = dd->port->rxfis + RX_FIS_PIO_SETUP;
 2172 		req_task->io_ports[7] = reply->control;
 2173 	} else {
 2174 		reply = dd->port->rxfis + RX_FIS_D2H_REG;
 2175 		req_task->io_ports[7] = reply->command;
 2176 	}
 2177 
 2178 	/* reclaim the DMA buffers.*/
 2179 	if (inbuf_dma)
 2180 		pci_unmap_single(dd->pdev, inbuf_dma,
 2181 			taskin, DMA_FROM_DEVICE);
 2182 	if (outbuf_dma)
 2183 		pci_unmap_single(dd->pdev, outbuf_dma,
 2184 			taskout, DMA_TO_DEVICE);
 2185 	inbuf_dma  = 0;
 2186 	outbuf_dma = 0;
 2187 
 2188 	/* return the ATA registers to the caller.*/
 2189 	req_task->io_ports[1] = reply->features;
 2190 	req_task->io_ports[2] = reply->sect_count;
 2191 	req_task->io_ports[3] = reply->lba_low;
 2192 	req_task->io_ports[4] = reply->lba_mid;
 2193 	req_task->io_ports[5] = reply->lba_hi;
 2194 	req_task->io_ports[6] = reply->device;
 2195 
 2196 	if (req_task->out_flags.all & 1)  {
 2197 
 2198 		req_task->hob_ports[3] = reply->lba_low_ex;
 2199 		req_task->hob_ports[4] = reply->lba_mid_ex;
 2200 		req_task->hob_ports[5] = reply->lba_hi_ex;
 2201 		req_task->hob_ports[1] = reply->features_ex;
 2202 		req_task->hob_ports[2] = reply->sect_cnt_ex;
 2203 	}
 2204 	dbg_printk(MTIP_DRV_NAME
 2205 		" %s: Completion: stat %x,"
 2206 		"err %x, sect_cnt %x, lbalo %x,"
 2207 		"lbamid %x, lbahi %x, dev %x\n",
 2208 		__func__,
 2209 		req_task->io_ports[7],
 2210 		req_task->io_ports[1],
 2211 		req_task->io_ports[2],
 2212 		req_task->io_ports[3],
 2213 		req_task->io_ports[4],
 2214 		req_task->io_ports[5],
 2215 		req_task->io_ports[6]);
 2216 
 2217 	if (taskout) {
 2218 		if (copy_to_user(buf + outtotal, outbuf, taskout)) {
 2219 			err = -EFAULT;
 2220 			goto abort;
 2221 		}
 2222 	}
 2223 	if (taskin) {
 2224 		if (copy_to_user(buf + intotal, inbuf, taskin)) {
 2225 			err = -EFAULT;
 2226 			goto abort;
 2227 		}
 2228 	}
 2229 abort:
 2230 	if (inbuf_dma)
 2231 		pci_unmap_single(dd->pdev, inbuf_dma,
 2232 					taskin, DMA_FROM_DEVICE);
 2233 	if (outbuf_dma)
 2234 		pci_unmap_single(dd->pdev, outbuf_dma,
 2235 					taskout, DMA_TO_DEVICE);
 2236 	kfree(outbuf);
 2237 	kfree(inbuf);
 2238 
 2239 	return err;
 2240 }
 2241 
 2242 /*
 2243  * Handle IOCTL calls from the Block Layer.
 2244  *
 2245  * This function is called by the Block Layer when it receives an IOCTL
 2246  * command that it does not understand. If the IOCTL command is not supported
 2247  * this function returns -ENOTTY.
 2248  *
 2249  * @dd  Pointer to the driver data structure.
 2250  * @cmd IOCTL command passed from the Block Layer.
 2251  * @arg IOCTL argument passed from the Block Layer.
 2252  *
 2253  * return value
 2254  *	0	The IOCTL completed successfully.
 2255  *	-ENOTTY The specified command is not supported.
 2256  *	-EFAULT An error occurred copying data to a user space buffer.
 2257  *	-EIO	An error occurred while executing the command.
 2258  */
 2259 static int mtip_hw_ioctl(struct driver_data *dd, unsigned int cmd,
 2260 			 unsigned long arg)
 2261 {
 2262 	switch (cmd) {
 2263 	case HDIO_GET_IDENTITY:
 2264 	{
 2265 		if (copy_to_user((void __user *)arg, dd->port->identify,
 2266 						sizeof(u16) * ATA_ID_WORDS))
 2267 			return -EFAULT;
 2268 		break;
 2269 	}
 2270 	case HDIO_DRIVE_CMD:
 2271 	{
 2272 		u8 drive_command[4];
 2273 
 2274 		/* Copy the user command info to our buffer. */
 2275 		if (copy_from_user(drive_command,
 2276 					 (void __user *) arg,
 2277 					 sizeof(drive_command)))
 2278 			return -EFAULT;
 2279 
 2280 		/* Execute the drive command. */
 2281 		if (exec_drive_command(dd->port,
 2282 					 drive_command,
 2283 					 (void __user *) (arg+4)))
 2284 			return -EIO;
 2285 
 2286 		/* Copy the status back to the users buffer. */
 2287 		if (copy_to_user((void __user *) arg,
 2288 					 drive_command,
 2289 					 sizeof(drive_command)))
 2290 			return -EFAULT;
 2291 
 2292 		break;
 2293 	}
 2294 	case HDIO_DRIVE_TASK:
 2295 	{
 2296 		u8 drive_command[7];
 2297 
 2298 		/* Copy the user command info to our buffer. */
 2299 		if (copy_from_user(drive_command,
 2300 					 (void __user *) arg,
 2301 					 sizeof(drive_command)))
 2302 			return -EFAULT;
 2303 
 2304 		/* Execute the drive command. */
 2305 		if (exec_drive_task(dd->port, drive_command))
 2306 			return -EIO;
 2307 
 2308 		/* Copy the status back to the users buffer. */
 2309 		if (copy_to_user((void __user *) arg,
 2310 					 drive_command,
 2311 					 sizeof(drive_command)))
 2312 			return -EFAULT;
 2313 
 2314 		break;
 2315 	}
 2316 	case HDIO_DRIVE_TASKFILE: {
 2317 		ide_task_request_t req_task;
 2318 		int ret, outtotal;
 2319 
 2320 		if (copy_from_user(&req_task, (void __user *) arg,
 2321 					sizeof(req_task)))
 2322 			return -EFAULT;
 2323 
 2324 		outtotal = sizeof(req_task);
 2325 
 2326 		ret = exec_drive_taskfile(dd, (void __user *) arg,
 2327 						&req_task, outtotal);
 2328 
 2329 		if (copy_to_user((void __user *) arg, &req_task,
 2330 							sizeof(req_task)))
 2331 			return -EFAULT;
 2332 
 2333 		return ret;
 2334 	}
 2335 
 2336 	default:
 2337 		return -EINVAL;
 2338 	}
 2339 	return 0;
 2340 }
 2341 
 2342 /*
 2343  * Submit an IO to the hw
 2344  *
 2345  * This function is called by the block layer to issue an io
 2346  * to the device. Upon completion, the callback function will
 2347  * be called with the data parameter passed as the callback data.
 2348  *
 2349  * @dd       Pointer to the driver data structure.
 2350  * @start    First sector to read.
 2351  * @nsect    Number of sectors to read.
 2352  * @nents    Number of entries in scatter list for the read command.
 2353  * @tag      The tag of this read command.
 2354  * @callback Pointer to the function that should be called
 2355  *	     when the read completes.
 2356  * @data     Callback data passed to the callback function
 2357  *	     when the read completes.
 2358  * @dir      Direction (read or write)
 2359  *
 2360  * return value
 2361  *	None
 2362  */
 2363 static void mtip_hw_submit_io(struct driver_data *dd, struct request *rq,
 2364 			      struct mtip_cmd *command, int nents,
 2365 			      struct blk_mq_hw_ctx *hctx)
 2366 {
 2367 	struct host_to_dev_fis	*fis;
 2368 	struct mtip_port *port = dd->port;
 2369 	int dma_dir = rq_data_dir(rq) == READ ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
 2370 	u64 start = blk_rq_pos(rq);
 2371 	unsigned int nsect = blk_rq_sectors(rq);
 2372 
 2373 	/* Map the scatter list for DMA access */
 2374 	nents = dma_map_sg(&dd->pdev->dev, command->sg, nents, dma_dir);
 2375 
 2376 	prefetch(&port->flags);
 2377 
 2378 	command->scatter_ents = nents;
 2379 
 2380 	/*
 2381 	 * The number of retries for this command before it is
 2382 	 * reported as a failure to the upper layers.
 2383 	 */
 2384 	command->retries = MTIP_MAX_RETRIES;
 2385 
 2386 	/* Fill out fis */
 2387 	fis = command->command;
 2388 	fis->type        = 0x27;
 2389 	fis->opts        = 1 << 7;
 2390 	if (dma_dir == DMA_FROM_DEVICE)
 2391 		fis->command = ATA_CMD_FPDMA_READ;
 2392 	else
 2393 		fis->command = ATA_CMD_FPDMA_WRITE;
 2394 	fis->lba_low     = start & 0xFF;
 2395 	fis->lba_mid     = (start >> 8) & 0xFF;
 2396 	fis->lba_hi      = (start >> 16) & 0xFF;
 2397 	fis->lba_low_ex  = (start >> 24) & 0xFF;
 2398 	fis->lba_mid_ex  = (start >> 32) & 0xFF;
 2399 	fis->lba_hi_ex   = (start >> 40) & 0xFF;
 2400 	fis->device	 = 1 << 6;
 2401 	fis->features    = nsect & 0xFF;
 2402 	fis->features_ex = (nsect >> 8) & 0xFF;
 2403 	fis->sect_count  = ((rq->tag << 3) | (rq->tag >> 5));
 2404 	fis->sect_cnt_ex = 0;
 2405 	fis->control     = 0;
 2406 	fis->res2        = 0;
 2407 	fis->res3        = 0;
 2408 	fill_command_sg(dd, command, nents);
 2409 
 2410 	if (unlikely(command->unaligned))
 2411 		fis->device |= 1 << 7;
 2412 
 2413 	/* Populate the command header */
 2414 	command->command_header->opts =
 2415 			__force_bit2int cpu_to_le32(
 2416 				(nents << 16) | 5 | AHCI_CMD_PREFETCH);
 2417 	command->command_header->byte_count = 0;
 2418 
 2419 	/*
 2420 	 * Set the completion function and data for the command
 2421 	 * within this layer.
 2422 	 */
 2423 	command->comp_data = dd;
 2424 	command->comp_func = mtip_async_complete;
 2425 	command->direction = dma_dir;
 2426 
 2427 	/*
 2428 	 * To prevent this command from being issued
 2429 	 * if an internal command is in progress or error handling is active.
 2430 	 */
 2431 	if (unlikely(port->flags & MTIP_PF_PAUSE_IO)) {
 2432 		set_bit(rq->tag, port->cmds_to_issue);
 2433 		set_bit(MTIP_PF_ISSUE_CMDS_BIT, &port->flags);
 2434 		return;
 2435 	}
 2436 
 2437 	/* Issue the command to the hardware */
 2438 	mtip_issue_ncq_command(port, rq->tag);
 2439 }
 2440 
 2441 /*
 2442  * Sysfs status dump.
 2443  *
 2444  * @dev  Pointer to the device structure, passed by the kernrel.
 2445  * @attr Pointer to the device_attribute structure passed by the kernel.
 2446  * @buf  Pointer to the char buffer that will receive the stats info.
 2447  *
 2448  * return value
 2449  *	The size, in bytes, of the data copied into buf.
 2450  */
 2451 static ssize_t mtip_hw_show_status(struct device *dev,
 2452 				struct device_attribute *attr,
 2453 				char *buf)
 2454 {
 2455 	struct driver_data *dd = dev_to_disk(dev)->private_data;
 2456 	int size = 0;
 2457 
 2458 	if (test_bit(MTIP_DDF_OVER_TEMP_BIT, &dd->dd_flag))
 2459 		size += sprintf(buf, "%s", "thermal_shutdown\n");
 2460 	else if (test_bit(MTIP_DDF_WRITE_PROTECT_BIT, &dd->dd_flag))
 2461 		size += sprintf(buf, "%s", "write_protect\n");
 2462 	else
 2463 		size += sprintf(buf, "%s", "online\n");
 2464 
 2465 	return size;
 2466 }
 2467 
 2468 static DEVICE_ATTR(status, S_IRUGO, mtip_hw_show_status, NULL);
 2469 
 2470 /* debugsfs entries */
 2471 
 2472 static ssize_t show_device_status(struct device_driver *drv, char *buf)
 2473 {
 2474 	int size = 0;
 2475 	struct driver_data *dd, *tmp;
 2476 	unsigned long flags;
 2477 	char id_buf[42];
 2478 	u16 status = 0;
 2479 
 2480 	spin_lock_irqsave(&dev_lock, flags);
 2481 	size += sprintf(&buf[size], "Devices Present:\n");
 2482 	list_for_each_entry_safe(dd, tmp, &online_list, online_list) {
 2483 		if (dd->pdev) {
 2484 			if (dd->port &&
 2485 			    dd->port->identify &&
 2486 			    dd->port->identify_valid) {
 2487 				strlcpy(id_buf,
 2488 					(char *) (dd->port->identify + 10), 21);
 2489 				status = *(dd->port->identify + 141);
 2490 			} else {
 2491 				memset(id_buf, 0, 42);
 2492 				status = 0;
 2493 			}
 2494 
 2495 			if (dd->port &&
 2496 			    test_bit(MTIP_PF_REBUILD_BIT, &dd->port->flags)) {
 2497 				size += sprintf(&buf[size],
 2498 					" device %s %s (ftl rebuild %d %%)\n",
 2499 					dev_name(&dd->pdev->dev),
 2500 					id_buf,
 2501 					status);
 2502 			} else {
 2503 				size += sprintf(&buf[size],
 2504 					" device %s %s\n",
 2505 					dev_name(&dd->pdev->dev),
 2506 					id_buf);
 2507 			}
 2508 		}
 2509 	}
 2510 
 2511 	size += sprintf(&buf[size], "Devices Being Removed:\n");
 2512 	list_for_each_entry_safe(dd, tmp, &removing_list, remove_list) {
 2513 		if (dd->pdev) {
 2514 			if (dd->port &&
 2515 			    dd->port->identify &&
 2516 			    dd->port->identify_valid) {
 2517 				strlcpy(id_buf,
 2518 					(char *) (dd->port->identify+10), 21);
 2519 				status = *(dd->port->identify + 141);
 2520 			} else {
 2521 				memset(id_buf, 0, 42);
 2522 				status = 0;
 2523 			}
 2524 
 2525 			if (dd->port &&
 2526 			    test_bit(MTIP_PF_REBUILD_BIT, &dd->port->flags)) {
 2527 				size += sprintf(&buf[size],
 2528 					" device %s %s (ftl rebuild %d %%)\n",
 2529 					dev_name(&dd->pdev->dev),
 2530 					id_buf,
 2531 					status);
 2532 			} else {
 2533 				size += sprintf(&buf[size],
 2534 					" device %s %s\n",
 2535 					dev_name(&dd->pdev->dev),
 2536 					id_buf);
 2537 			}
 2538 		}
 2539 	}
 2540 	spin_unlock_irqrestore(&dev_lock, flags);
 2541 
 2542 	return size;
 2543 }
 2544 
 2545 static ssize_t mtip_hw_read_device_status(struct file *f, char __user *ubuf,
 2546 						size_t len, loff_t *offset)
 2547 {
 2548 	struct driver_data *dd =  (struct driver_data *)f->private_data;
 2549 	int size = *offset;
 2550 	char *buf;
 2551 	int rv = 0;
 2552 
 2553 	if (!len || *offset)
 2554 		return 0;
 2555 
 2556 	buf = kzalloc(MTIP_DFS_MAX_BUF_SIZE, GFP_KERNEL);
 2557 	if (!buf) {
 2558 		dev_err(&dd->pdev->dev,
 2559 			"Memory allocation: status buffer\n");
 2560 		return -ENOMEM;
 2561 	}
 2562 
 2563 	size += show_device_status(NULL, buf);
 2564 
 2565 	*offset = size <= len ? size : len;
 2566 	size = copy_to_user(ubuf, buf, *offset);
 2567 	if (size)
 2568 		rv = -EFAULT;
 2569 
 2570 	kfree(buf);
 2571 	return rv ? rv : *offset;
 2572 }
 2573 
 2574 static ssize_t mtip_hw_read_registers(struct file *f, char __user *ubuf,
 2575 				  size_t len, loff_t *offset)
 2576 {
 2577 	struct driver_data *dd =  (struct driver_data *)f->private_data;
 2578 	char *buf;
 2579 	u32 group_allocated;
 2580 	int size = *offset;
 2581 	int n, rv = 0;
 2582 
 2583 	if (!len || size)
 2584 		return 0;
 2585 
 2586 	buf = kzalloc(MTIP_DFS_MAX_BUF_SIZE, GFP_KERNEL);
 2587 	if (!buf) {
 2588 		dev_err(&dd->pdev->dev,
 2589 			"Memory allocation: register buffer\n");
 2590 		return -ENOMEM;
 2591 	}
 2592 
 2593 	size += sprintf(&buf[size], "H/ S ACTive      : [ 0x");
 2594 
 2595 	for (n = dd->slot_groups-1; n >= 0; n--)
 2596 		size += sprintf(&buf[size], "%08X ",
 2597 					 readl(dd->port->s_active[n]));
 2598 
 2599 	size += sprintf(&buf[size], "]\n");
 2600 	size += sprintf(&buf[size], "H/ Command Issue : [ 0x");
 2601 
 2602 	for (n = dd->slot_groups-1; n >= 0; n--)
 2603 		size += sprintf(&buf[size], "%08X ",
 2604 					readl(dd->port->cmd_issue[n]));
 2605 
 2606 	size += sprintf(&buf[size], "]\n");
 2607 	size += sprintf(&buf[size], "H/ Completed     : [ 0x");
 2608 
 2609 	for (n = dd->slot_groups-1; n >= 0; n--)
 2610 		size += sprintf(&buf[size], "%08X ",
 2611 				readl(dd->port->completed[n]));
 2612 
 2613 	size += sprintf(&buf[size], "]\n");
 2614 	size += sprintf(&buf[size], "H/ PORT IRQ STAT : [ 0x%08X ]\n",
 2615 				readl(dd->port->mmio + PORT_IRQ_STAT));
 2616 	size += sprintf(&buf[size], "H/ HOST IRQ STAT : [ 0x%08X ]\n",
 2617 				readl(dd->mmio + HOST_IRQ_STAT));
 2618 	size += sprintf(&buf[size], "\n");
 2619 
 2620 	size += sprintf(&buf[size], "L/ Commands in Q : [ 0x");
 2621 
 2622 	for (n = dd->slot_groups-1; n >= 0; n--) {
 2623 		if (sizeof(long) > sizeof(u32))
 2624 			group_allocated =
 2625 				dd->port->cmds_to_issue[n/2] >> (32*(n&1));
 2626 		else
 2627 			group_allocated = dd->port->cmds_to_issue[n];
 2628 		size += sprintf(&buf[size], "%08X ", group_allocated);
 2629 	}
 2630 	size += sprintf(&buf[size], "]\n");
 2631 
 2632 	*offset = size <= len ? size : len;
 2633 	size = copy_to_user(ubuf, buf, *offset);
 2634 	if (size)
 2635 		rv = -EFAULT;
 2636 
 2637 	kfree(buf);
 2638 	return rv ? rv : *offset;
 2639 }
 2640 
 2641 static ssize_t mtip_hw_read_flags(struct file *f, char __user *ubuf,
 2642 				  size_t len, loff_t *offset)
 2643 {
 2644 	struct driver_data *dd =  (struct driver_data *)f->private_data;
 2645 	char *buf;
 2646 	int size = *offset;
 2647 	int rv = 0;
 2648 
 2649 	if (!len || size)
 2650 		return 0;
 2651 
 2652 	buf = kzalloc(MTIP_DFS_MAX_BUF_SIZE, GFP_KERNEL);
 2653 	if (!buf) {
 2654 		dev_err(&dd->pdev->dev,
 2655 			"Memory allocation: flag buffer\n");
 2656 		return -ENOMEM;
 2657 	}
 2658 
 2659 	size += sprintf(&buf[size], "Flag-port : [ %08lX ]\n",
 2660 							dd->port->flags);
 2661 	size += sprintf(&buf[size], "Flag-dd   : [ %08lX ]\n",
 2662 							dd->dd_flag);
 2663 
 2664 	*offset = size <= len ? size : len;
 2665 	size = copy_to_user(ubuf, buf, *offset);
 2666 	if (size)
 2667 		rv = -EFAULT;
 2668 
 2669 	kfree(buf);
 2670 	return rv ? rv : *offset;
 2671 }
 2672 
 2673 static const struct file_operations mtip_device_status_fops = {
 2674 	.owner  = THIS_MODULE,
 2675 	.open   = simple_open,
 2676 	.read   = mtip_hw_read_device_status,
 2677 	.llseek = no_llseek,
 2678 };
 2679 
 2680 static const struct file_operations mtip_regs_fops = {
 2681 	.owner  = THIS_MODULE,
 2682 	.open   = simple_open,
 2683 	.read   = mtip_hw_read_registers,
 2684 	.llseek = no_llseek,
 2685 };
 2686 
 2687 static const struct file_operations mtip_flags_fops = {
 2688 	.owner  = THIS_MODULE,
 2689 	.open   = simple_open,
 2690 	.read   = mtip_hw_read_flags,
 2691 	.llseek = no_llseek,
 2692 };
 2693 
 2694 /*
 2695  * Create the sysfs related attributes.
 2696  *
 2697  * @dd   Pointer to the driver data structure.
 2698  * @kobj Pointer to the kobj for the block device.
 2699  *
 2700  * return value
 2701  *	0	Operation completed successfully.
 2702  *	-EINVAL Invalid parameter.
 2703  */
 2704 static int mtip_hw_sysfs_init(struct driver_data *dd, struct kobject *kobj)
 2705 {
 2706 	if (!kobj || !dd)
 2707 		return -EINVAL;
 2708 
 2709 	if (sysfs_create_file(kobj, &dev_attr_status.attr))
 2710 		dev_warn(&dd->pdev->dev,
 2711 			"Error creating 'status' sysfs entry\n");
 2712 	return 0;
 2713 }
 2714 
 2715 /*
 2716  * Remove the sysfs related attributes.
 2717  *
 2718  * @dd   Pointer to the driver data structure.
 2719  * @kobj Pointer to the kobj for the block device.
 2720  *
 2721  * return value
 2722  *	0	Operation completed successfully.
 2723  *	-EINVAL Invalid parameter.
 2724  */
 2725 static int mtip_hw_sysfs_exit(struct driver_data *dd, struct kobject *kobj)
 2726 {
 2727 	if (!kobj || !dd)
 2728 		return -EINVAL;
 2729 
 2730 	sysfs_remove_file(kobj, &dev_attr_status.attr);
 2731 
 2732 	return 0;
 2733 }
 2734 
 2735 static int mtip_hw_debugfs_init(struct driver_data *dd)
 2736 {
 2737 	if (!dfs_parent)
 2738 		return -1;
 2739 
 2740 	dd->dfs_node = debugfs_create_dir(dd->disk->disk_name, dfs_parent);
 2741 	if (IS_ERR_OR_NULL(dd->dfs_node)) {
 2742 		dev_warn(&dd->pdev->dev,
 2743 			"Error creating node %s under debugfs\n",
 2744 						dd->disk->disk_name);
 2745 		dd->dfs_node = NULL;
 2746 		return -1;
 2747 	}
 2748 
 2749 	debugfs_create_file("flags", S_IRUGO, dd->dfs_node, dd,
 2750 							&mtip_flags_fops);
 2751 	debugfs_create_file("registers", S_IRUGO, dd->dfs_node, dd,
 2752 							&mtip_regs_fops);
 2753 
 2754 	return 0;
 2755 }
 2756 
 2757 static void mtip_hw_debugfs_exit(struct driver_data *dd)
 2758 {
 2759 	if (dd->dfs_node)
 2760 		debugfs_remove_recursive(dd->dfs_node);
 2761 }
 2762 
 2763 /*
 2764  * Perform any init/resume time hardware setup
 2765  *
 2766  * @dd Pointer to the driver data structure.
 2767  *
 2768  * return value
 2769  *	None
 2770  */
 2771 static inline void hba_setup(struct driver_data *dd)
 2772 {
 2773 	u32 hwdata;
 2774 	hwdata = readl(dd->mmio + HOST_HSORG);
 2775 
 2776 	/* interrupt bug workaround: use only 1 IS bit.*/
 2777 	writel(hwdata |
 2778 		HSORG_DISABLE_SLOTGRP_INTR |
 2779 		HSORG_DISABLE_SLOTGRP_PXIS,
 2780 		dd->mmio + HOST_HSORG);
 2781 }
 2782 
 2783 static int mtip_device_unaligned_constrained(struct driver_data *dd)
 2784 {
 2785 	return (dd->pdev->device == P420M_DEVICE_ID ? 1 : 0);
 2786 }
 2787 
 2788 /*
 2789  * Detect the details of the product, and store anything needed
 2790  * into the driver data structure.  This includes product type and
 2791  * version and number of slot groups.
 2792  *
 2793  * @dd Pointer to the driver data structure.
 2794  *
 2795  * return value
 2796  *	None
 2797  */
 2798 static void mtip_detect_product(struct driver_data *dd)
 2799 {
 2800 	u32 hwdata;
 2801 	unsigned int rev, slotgroups;
 2802 
 2803 	/*
 2804 	 * HBA base + 0xFC [15:0] - vendor-specific hardware interface
 2805 	 * info register:
 2806 	 * [15:8] hardware/software interface rev#
 2807 	 * [   3] asic-style interface
 2808 	 * [ 2:0] number of slot groups, minus 1 (only valid for asic-style).
 2809 	 */
 2810 	hwdata = readl(dd->mmio + HOST_HSORG);
 2811 
 2812 	dd->product_type = MTIP_PRODUCT_UNKNOWN;
 2813 	dd->slot_groups = 1;
 2814 
 2815 	if (hwdata & 0x8) {
 2816 		dd->product_type = MTIP_PRODUCT_ASICFPGA;
 2817 		rev = (hwdata & HSORG_HWREV) >> 8;
 2818 		slotgroups = (hwdata & HSORG_SLOTGROUPS) + 1;
 2819 		dev_info(&dd->pdev->dev,
 2820 			"ASIC-FPGA design, HS rev 0x%x, "
 2821 			"%i slot groups [%i slots]\n",
 2822 			 rev,
 2823 			 slotgroups,
 2824 			 slotgroups * 32);
 2825 
 2826 		if (slotgroups > MTIP_MAX_SLOT_GROUPS) {
 2827 			dev_warn(&dd->pdev->dev,
 2828 				"Warning: driver only supports "
 2829 				"%i slot groups.\n", MTIP_MAX_SLOT_GROUPS);
 2830 			slotgroups = MTIP_MAX_SLOT_GROUPS;
 2831 		}
 2832 		dd->slot_groups = slotgroups;
 2833 		return;
 2834 	}
 2835 
 2836 	dev_warn(&dd->pdev->dev, "Unrecognized product id\n");
 2837 }
 2838 
 2839 /*
 2840  * Blocking wait for FTL rebuild to complete
 2841  *
 2842  * @dd Pointer to the DRIVER_DATA structure.
 2843  *
 2844  * return value
 2845  *	0	FTL rebuild completed successfully
 2846  *	-EFAULT FTL rebuild error/timeout/interruption
 2847  */
 2848 static int mtip_ftl_rebuild_poll(struct driver_data *dd)
 2849 {
 2850 	unsigned long timeout, cnt = 0, start;
 2851 
 2852 	dev_warn(&dd->pdev->dev,
 2853 		"FTL rebuild in progress. Polling for completion.\n");
 2854 
 2855 	start = jiffies;
 2856 	timeout = jiffies + msecs_to_jiffies(MTIP_FTL_REBUILD_TIMEOUT_MS);
 2857 
 2858 	do {
 2859 		if (unlikely(test_bit(MTIP_DDF_REMOVE_PENDING_BIT,
 2860 				&dd->dd_flag)))
 2861 			return -EFAULT;
 2862 		if (mtip_check_surprise_removal(dd->pdev))
 2863 			return -EFAULT;
 2864 
 2865 		if (mtip_get_identify(dd->port, NULL) < 0)
 2866 			return -EFAULT;
 2867 
 2868 		if (*(dd->port->identify + MTIP_FTL_REBUILD_OFFSET) ==
 2869 			MTIP_FTL_REBUILD_MAGIC) {
 2870 			ssleep(1);
 2871 			/* Print message every 3 minutes */
 2872 			if (cnt++ >= 180) {
 2873 				dev_warn(&dd->pdev->dev,
 2874 				"FTL rebuild in progress (%d secs).\n",
 2875 				jiffies_to_msecs(jiffies - start) / 1000);
 2876 				cnt = 0;
 2877 			}
 2878 		} else {
 2879 			dev_warn(&dd->pdev->dev,
 2880 				"FTL rebuild complete (%d secs).\n",
 2881 			jiffies_to_msecs(jiffies - start) / 1000);
 2882 			mtip_block_initialize(dd);
 2883 			return 0;
 2884 		}
 2885 	} while (time_before(jiffies, timeout));
 2886 
 2887 	/* Check for timeout */
 2888 	dev_err(&dd->pdev->dev,
 2889 		"Timed out waiting for FTL rebuild to complete (%d secs).\n",
 2890 		jiffies_to_msecs(jiffies - start) / 1000);
 2891 	return -EFAULT;
 2892 }
 2893 
 2894 /*
 2895  * service thread to issue queued commands
 2896  *
 2897  * @data Pointer to the driver data structure.
 2898  *
 2899  * return value
 2900  *	0
 2901  */
 2902 
 2903 static int mtip_service_thread(void *data)
 2904 {
 2905 	struct driver_data *dd = (struct driver_data *)data;
 2906 	unsigned long slot, slot_start, slot_wrap;
 2907 	unsigned int num_cmd_slots = dd->slot_groups * 32;
 2908 	struct mtip_port *port = dd->port;
 2909 
 2910 	while (1) {
 2911 		if (kthread_should_stop() ||
 2912 			test_bit(MTIP_PF_SVC_THD_STOP_BIT, &port->flags))
 2913 			goto st_out;
 2914 		clear_bit(MTIP_PF_SVC_THD_ACTIVE_BIT, &port->flags);
 2915 
 2916 		/*
 2917 		 * the condition is to check neither an internal command is
 2918 		 * is in progress nor error handling is active
 2919 		 */
 2920 		wait_event_interruptible(port->svc_wait, (port->flags) &&
 2921 			!(port->flags & MTIP_PF_PAUSE_IO));
 2922 
 2923 		set_bit(MTIP_PF_SVC_THD_ACTIVE_BIT, &port->flags);
 2924 
 2925 		if (kthread_should_stop() ||
 2926 			test_bit(MTIP_PF_SVC_THD_STOP_BIT, &port->flags))
 2927 			goto st_out;
 2928 
 2929 		if (unlikely(test_bit(MTIP_DDF_REMOVE_PENDING_BIT,
 2930 				&dd->dd_flag)))
 2931 			goto st_out;
 2932 
 2933 restart_eh:
 2934 		/* Demux bits: start with error handling */
 2935 		if (test_bit(MTIP_PF_EH_ACTIVE_BIT, &port->flags)) {
 2936 			mtip_handle_tfe(dd);
 2937 			clear_bit(MTIP_PF_EH_ACTIVE_BIT, &port->flags);
 2938 		}
 2939 
 2940 		if (test_bit(MTIP_PF_EH_ACTIVE_BIT, &port->flags))
 2941 			goto restart_eh;
 2942 
 2943 		if (test_bit(MTIP_PF_ISSUE_CMDS_BIT, &port->flags)) {
 2944 			slot = 1;
 2945 			/* used to restrict the loop to one iteration */
 2946 			slot_start = num_cmd_slots;
 2947 			slot_wrap = 0;
 2948 			while (1) {
 2949 				slot = find_next_bit(port->cmds_to_issue,
 2950 						num_cmd_slots, slot);
 2951 				if (slot_wrap == 1) {
 2952 					if ((slot_start >= slot) ||
 2953 						(slot >= num_cmd_slots))
 2954 						break;
 2955 				}
 2956 				if (unlikely(slot_start == num_cmd_slots))
 2957 					slot_start = slot;
 2958 
 2959 				if (unlikely(slot == num_cmd_slots)) {
 2960 					slot = 1;
 2961 					slot_wrap = 1;
 2962 					continue;
 2963 				}
 2964 
 2965 				/* Issue the command to the hardware */
 2966 				mtip_issue_ncq_command(port, slot);
 2967 
 2968 				clear_bit(slot, port->cmds_to_issue);
 2969 			}
 2970 
 2971 			clear_bit(MTIP_PF_ISSUE_CMDS_BIT, &port->flags);
 2972 		}
 2973 
 2974 		if (test_bit(MTIP_PF_REBUILD_BIT, &port->flags)) {
 2975 			if (mtip_ftl_rebuild_poll(dd) < 0)
 2976 				set_bit(MTIP_DDF_REBUILD_FAILED_BIT,
 2977 							&dd->dd_flag);
 2978 			clear_bit(MTIP_PF_REBUILD_BIT, &port->flags);
 2979 		}
 2980 	}
 2981 
 2982 st_out:
 2983 	return 0;
 2984 }
 2985 
 2986 /*
 2987  * DMA region teardown
 2988  *
 2989  * @dd Pointer to driver_data structure
 2990  *
 2991  * return value
 2992  *      None
 2993  */
 2994 static void mtip_dma_free(struct driver_data *dd)
 2995 {
 2996 	struct mtip_port *port = dd->port;
 2997 
 2998 	if (port->block1)
 2999 		dmam_free_coherent(&dd->pdev->dev, BLOCK_DMA_ALLOC_SZ,
 3000 					port->block1, port->block1_dma);
 3001 
 3002 	if (port->command_list) {
 3003 		dmam_free_coherent(&dd->pdev->dev, AHCI_CMD_TBL_SZ,
 3004 				port->command_list, port->command_list_dma);
 3005 	}
 3006 }
 3007 
 3008 /*
 3009  * DMA region setup
 3010  *
 3011  * @dd Pointer to driver_data structure
 3012  *
 3013  * return value
 3014  *      -ENOMEM Not enough free DMA region space to initialize driver
 3015  */
 3016 static int mtip_dma_alloc(struct driver_data *dd)
 3017 {
 3018 	struct mtip_port *port = dd->port;
 3019 
 3020 	/* Allocate dma memory for RX Fis, Identify, and Sector Bufffer */
 3021 	port->block1 =
 3022 		dmam_alloc_coherent(&dd->pdev->dev, BLOCK_DMA_ALLOC_SZ,
 3023 					&port->block1_dma, GFP_KERNEL);
 3024 	if (!port->block1)
 3025 		return -ENOMEM;
 3026 	memset(port->block1, 0, BLOCK_DMA_ALLOC_SZ);
 3027 
 3028 	/* Allocate dma memory for command list */
 3029 	port->command_list =
 3030 		dmam_alloc_coherent(&dd->pdev->dev, AHCI_CMD_TBL_SZ,
 3031 					&port->command_list_dma, GFP_KERNEL);
 3032 	if (!port->command_list) {
 3033 		dmam_free_coherent(&dd->pdev->dev, BLOCK_DMA_ALLOC_SZ,
 3034 					port->block1, port->block1_dma);
 3035 		port->block1 = NULL;
 3036 		port->block1_dma = 0;
 3037 		return -ENOMEM;
 3038 	}
 3039 	memset(port->command_list, 0, AHCI_CMD_TBL_SZ);
 3040 
 3041 	/* Setup all pointers into first DMA region */
 3042 	port->rxfis         = port->block1 + AHCI_RX_FIS_OFFSET;
 3043 	port->rxfis_dma     = port->block1_dma + AHCI_RX_FIS_OFFSET;
 3044 	port->identify      = port->block1 + AHCI_IDFY_OFFSET;
 3045 	port->identify_dma  = port->block1_dma + AHCI_IDFY_OFFSET;
 3046 	port->log_buf       = port->block1 + AHCI_SECTBUF_OFFSET;
 3047 	port->log_buf_dma   = port->block1_dma + AHCI_SECTBUF_OFFSET;
 3048 	port->smart_buf     = port->block1 + AHCI_SMARTBUF_OFFSET;
 3049 	port->smart_buf_dma = port->block1_dma + AHCI_SMARTBUF_OFFSET;
 3050 
 3051 	return 0;
 3052 }
 3053 
 3054 static int mtip_hw_get_identify(struct driver_data *dd)
 3055 {
 3056 	struct smart_attr attr242;
 3057 	unsigned char *buf;
 3058 	int rv;
 3059 
 3060 	if (mtip_get_identify(dd->port, NULL) < 0)
 3061 		return -EFAULT;
 3062 
 3063 	if (*(dd->port->identify + MTIP_FTL_REBUILD_OFFSET) ==
 3064 		MTIP_FTL_REBUILD_MAGIC) {
 3065 		set_bit(MTIP_PF_REBUILD_BIT, &dd->port->flags);
 3066 		return MTIP_FTL_REBUILD_MAGIC;
 3067 	}
 3068 	mtip_dump_identify(dd->port);
 3069 
 3070 	/* check write protect, over temp and rebuild statuses */
 3071 	rv = mtip_read_log_page(dd->port, ATA_LOG_SATA_NCQ,
 3072 				dd->port->log_buf,
 3073 				dd->port->log_buf_dma, 1);
 3074 	if (rv) {
 3075 		dev_warn(&dd->pdev->dev,
 3076 			"Error in READ LOG EXT (10h) command\n");
 3077 		/* non-critical error, don't fail the load */
 3078 	} else {
 3079 		buf = (unsigned char *)dd->port->log_buf;
 3080 		if (buf[259] & 0x1) {
 3081 			dev_info(&dd->pdev->dev,
 3082 				"Write protect bit is set.\n");
 3083 			set_bit(MTIP_DDF_WRITE_PROTECT_BIT, &dd->dd_flag);
 3084 		}
 3085 		if (buf[288] == 0xF7) {
 3086 			dev_info(&dd->pdev->dev,
 3087 				"Exceeded Tmax, drive in thermal shutdown.\n");
 3088 			set_bit(MTIP_DDF_OVER_TEMP_BIT, &dd->dd_flag);
 3089 		}
 3090 		if (buf[288] == 0xBF) {
 3091 			dev_info(&dd->pdev->dev,
 3092 				"Drive indicates rebuild has failed.\n");
 3093 			/* TODO */
 3094 		}
 3095 	}
 3096 
 3097 	/* get write protect progess */
 3098 	memset(&attr242, 0, sizeof(struct smart_attr));
 3099 	if (mtip_get_smart_attr(dd->port, 242, &attr242))
 3100 		dev_warn(&dd->pdev->dev,
 3101 				"Unable to check write protect progress\n");
 3102 	else
 3103 		dev_info(&dd->pdev->dev,
 3104 				"Write protect progress: %u%% (%u blocks)\n",
 3105 				attr242.cur, le32_to_cpu(attr242.data));
 3106 
 3107 	return rv;
 3108 }
 3109 
 3110 /*
 3111  * Called once for each card.
 3112  *
 3113  * @dd Pointer to the driver data structure.
 3114  *
 3115  * return value
 3116  *	0 on success, else an error code.
 3117  */
 3118 static int mtip_hw_init(struct driver_data *dd)
 3119 {
 3120 	int i;
 3121 	int rv;
 3122 	unsigned int num_command_slots;
 3123 	unsigned long timeout, timetaken;
 3124 
 3125 	dd->mmio = pcim_iomap_table(dd->pdev)[MTIP_ABAR];
 3126 
 3127 	mtip_detect_product(dd);
 3128 	if (dd->product_type == MTIP_PRODUCT_UNKNOWN) {
 3129 		rv = -EIO;
 3130 		goto out1;
 3131 	}
 3132 	num_command_slots = dd->slot_groups * 32;
 3133 
 3134 	hba_setup(dd);
 3135 
 3136 	dd->port = kzalloc_node(sizeof(struct mtip_port), GFP_KERNEL,
 3137 				dd->numa_node);
 3138 	if (!dd->port) {
 3139 		dev_err(&dd->pdev->dev,
 3140 			"Memory allocation: port structure\n");
 3141 		return -ENOMEM;
 3142 	}
 3143 
 3144 	/* Continue workqueue setup */
 3145 	for (i = 0; i < MTIP_MAX_SLOT_GROUPS; i++)
 3146 		dd->work[i].port = dd->port;
 3147 
 3148 	/* Enable unaligned IO constraints for some devices */
 3149 	if (mtip_device_unaligned_constrained(dd))
 3150 		dd->unal_qdepth = MTIP_MAX_UNALIGNED_SLOTS;
 3151 	else
 3152 		dd->unal_qdepth = 0;
 3153 
 3154 	sema_init(&dd->port->cmd_slot_unal, dd->unal_qdepth);
 3155 
 3156 	/* Spinlock to prevent concurrent issue */
 3157 	for (i = 0; i < MTIP_MAX_SLOT_GROUPS; i++)
 3158 		spin_lock_init(&dd->port->cmd_issue_lock[i]);
 3159 
 3160 	/* Set the port mmio base address. */
 3161 	dd->port->mmio	= dd->mmio + PORT_OFFSET;
 3162 	dd->port->dd	= dd;
 3163 
 3164 	/* DMA allocations */
 3165 	rv = mtip_dma_alloc(dd);
 3166 	if (rv < 0)
 3167 		goto out1;
 3168 
 3169 	/* Setup the pointers to the extended s_active and CI registers. */
 3170 	for (i = 0; i < dd->slot_groups; i++) {
 3171 		dd->port->s_active[i] =
 3172 			dd->port->mmio + i*0x80 + PORT_SCR_ACT;
 3173 		dd->port->cmd_issue[i] =
 3174 			dd->port->mmio + i*0x80 + PORT_COMMAND_ISSUE;
 3175 		dd->port->completed[i] =
 3176 			dd->port->mmio + i*0x80 + PORT_SDBV;
 3177 	}
 3178 
 3179 	timetaken = jiffies;
 3180 	timeout = jiffies + msecs_to_jiffies(30000);
 3181 	while (((readl(dd->port->mmio + PORT_SCR_STAT) & 0x0F) != 0x03) &&
 3182 		 time_before(jiffies, timeout)) {
 3183 		mdelay(100);
 3184 	}
 3185 	if (unlikely(mtip_check_surprise_removal(dd->pdev))) {
 3186 		timetaken = jiffies - timetaken;
 3187 		dev_warn(&dd->pdev->dev,
 3188 			"Surprise removal detected at %u ms\n",
 3189 			jiffies_to_msecs(timetaken));
 3190 		rv = -ENODEV;
 3191 		goto out2 ;
 3192 	}
 3193 	if (unlikely(test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &dd->dd_flag))) {
 3194 		timetaken = jiffies - timetaken;
 3195 		dev_warn(&dd->pdev->dev,
 3196 			"Removal detected at %u ms\n",
 3197 			jiffies_to_msecs(timetaken));
 3198 		rv = -EFAULT;
 3199 		goto out2;
 3200 	}
 3201 
 3202 	/* Conditionally reset the HBA. */
 3203 	if (!(readl(dd->mmio + HOST_CAP) & HOST_CAP_NZDMA)) {
 3204 		if (mtip_hba_reset(dd) < 0) {
 3205 			dev_err(&dd->pdev->dev,
 3206 				"Card did not reset within timeout\n");
 3207 			rv = -EIO;
 3208 			goto out2;
 3209 		}
 3210 	} else {
 3211 		/* Clear any pending interrupts on the HBA */
 3212 		writel(readl(dd->mmio + HOST_IRQ_STAT),
 3213 			dd->mmio + HOST_IRQ_STAT);
 3214 	}
 3215 
 3216 	mtip_init_port(dd->port);
 3217 	mtip_start_port(dd->port);
 3218 
 3219 	/* Setup the ISR and enable interrupts. */
 3220 	rv = devm_request_irq(&dd->pdev->dev,
 3221 				dd->pdev->irq,
 3222 				mtip_irq_handler,
 3223 				IRQF_SHARED,
 3224 				dev_driver_string(&dd->pdev->dev),
 3225 				dd);
 3226 
 3227 	if (rv) {
 3228 		dev_err(&dd->pdev->dev,
 3229 			"Unable to allocate IRQ %d\n", dd->pdev->irq);
 3230 		goto out2;
 3231 	}
 3232 	irq_set_affinity_hint(dd->pdev->irq, get_cpu_mask(dd->isr_binding));
 3233 
 3234 	/* Enable interrupts on the HBA. */
 3235 	writel(readl(dd->mmio + HOST_CTL) | HOST_IRQ_EN,
 3236 					dd->mmio + HOST_CTL);
 3237 
 3238 	init_waitqueue_head(&dd->port->svc_wait);
 3239 
 3240 	if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &dd->dd_flag)) {
 3241 		rv = -EFAULT;
 3242 		goto out3;
 3243 	}
 3244 
 3245 	return rv;
 3246 
 3247 out3:
 3248 	/* Disable interrupts on the HBA. */
 3249 	writel(readl(dd->mmio + HOST_CTL) & ~HOST_IRQ_EN,
 3250 			dd->mmio + HOST_CTL);
 3251 
 3252 	/* Release the IRQ. */
 3253 	irq_set_affinity_hint(dd->pdev->irq, NULL);
 3254 	devm_free_irq(&dd->pdev->dev, dd->pdev->irq, dd);
 3255 
 3256 out2:
 3257 	mtip_deinit_port(dd->port);
 3258 	mtip_dma_free(dd);
 3259 
 3260 out1:
 3261 	/* Free the memory allocated for the for structure. */
 3262 	kfree(dd->port);
 3263 
 3264 	return rv;
 3265 }
 3266 
 3267 static void mtip_standby_drive(struct driver_data *dd)
 3268 {
 3269 	if (dd->sr)
 3270 		return;
 3271 
 3272 	/*
 3273 	 * Send standby immediate (E0h) to the drive so that it
 3274 	 * saves its state.
 3275 	 */
 3276 	if (!test_bit(MTIP_PF_REBUILD_BIT, &dd->port->flags) &&
 3277 	    !test_bit(MTIP_DDF_SEC_LOCK_BIT, &dd->dd_flag))
 3278 		if (mtip_standby_immediate(dd->port))
 3279 			dev_warn(&dd->pdev->dev,
 3280 				"STANDBY IMMEDIATE failed\n");
 3281 }
 3282 
 3283 /*
 3284  * Called to deinitialize an interface.
 3285  *
 3286  * @dd Pointer to the driver data structure.
 3287  *
 3288  * return value
 3289  *	0
 3290  */
 3291 static int mtip_hw_exit(struct driver_data *dd)
 3292 {
 3293 	/*
 3294 	 * Send standby immediate (E0h) to the drive so that it
 3295 	 * saves its state.
 3296 	 */
 3297 	if (!dd->sr) {
 3298 		/* de-initialize the port. */
 3299 		mtip_deinit_port(dd->port);
 3300 
 3301 		/* Disable interrupts on the HBA. */
 3302 		writel(readl(dd->mmio + HOST_CTL) & ~HOST_IRQ_EN,
 3303 				dd->mmio + HOST_CTL);
 3304 	}
 3305 
 3306 	/* Release the IRQ. */
 3307 	irq_set_affinity_hint(dd->pdev->irq, NULL);
 3308 	devm_free_irq(&dd->pdev->dev, dd->pdev->irq, dd);
 3309 	msleep(1000);
 3310 
 3311 	/* Free dma regions */
 3312 	mtip_dma_free(dd);
 3313 
 3314 	/* Free the memory allocated for the for structure. */
 3315 	kfree(dd->port);
 3316 	dd->port = NULL;
 3317 
 3318 	return 0;
 3319 }
 3320 
 3321 /*
 3322  * Issue a Standby Immediate command to the device.
 3323  *
 3324  * This function is called by the Block Layer just before the
 3325  * system powers off during a shutdown.
 3326  *
 3327  * @dd Pointer to the driver data structure.
 3328  *
 3329  * return value
 3330  *	0
 3331  */
 3332 static int mtip_hw_shutdown(struct driver_data *dd)
 3333 {
 3334 	/*
 3335 	 * Send standby immediate (E0h) to the drive so that it
 3336 	 * saves its state.
 3337 	 */
 3338 	if (!dd->sr && dd->port)
 3339 		mtip_standby_immediate(dd->port);
 3340 
 3341 	return 0;
 3342 }
 3343 
 3344 /*
 3345  * Suspend function
 3346  *
 3347  * This function is called by the Block Layer just before the
 3348  * system hibernates.
 3349  *
 3350  * @dd Pointer to the driver data structure.
 3351  *
 3352  * return value
 3353  *	0	Suspend was successful
 3354  *	-EFAULT Suspend was not successful
 3355  */
 3356 static int mtip_hw_suspend(struct driver_data *dd)
 3357 {
 3358 	/*
 3359 	 * Send standby immediate (E0h) to the drive
 3360 	 * so that it saves its state.
 3361 	 */
 3362 	if (mtip_standby_immediate(dd->port) != 0) {
 3363 		dev_err(&dd->pdev->dev,
 3364 			"Failed standby-immediate command\n");
 3365 		return -EFAULT;
 3366 	}
 3367 
 3368 	/* Disable interrupts on the HBA.*/
 3369 	writel(readl(dd->mmio + HOST_CTL) & ~HOST_IRQ_EN,
 3370 			dd->mmio + HOST_CTL);
 3371 	mtip_deinit_port(dd->port);
 3372 
 3373 	return 0;
 3374 }
 3375 
 3376 /*
 3377  * Resume function
 3378  *
 3379  * This function is called by the Block Layer as the
 3380  * system resumes.
 3381  *
 3382  * @dd Pointer to the driver data structure.
 3383  *
 3384  * return value
 3385  *	0	Resume was successful
 3386  *      -EFAULT Resume was not successful
 3387  */
 3388 static int mtip_hw_resume(struct driver_data *dd)
 3389 {
 3390 	/* Perform any needed hardware setup steps */
 3391 	hba_setup(dd);
 3392 
 3393 	/* Reset the HBA */
 3394 	if (mtip_hba_reset(dd) != 0) {
 3395 		dev_err(&dd->pdev->dev,
 3396 			"Unable to reset the HBA\n");
 3397 		return -EFAULT;
 3398 	}
 3399 
 3400 	/*
 3401 	 * Enable the port, DMA engine, and FIS reception specific
 3402 	 * h/w in controller.
 3403 	 */
 3404 	mtip_init_port(dd->port);
 3405 	mtip_start_port(dd->port);
 3406 
 3407 	/* Enable interrupts on the HBA.*/
 3408 	writel(readl(dd->mmio + HOST_CTL) | HOST_IRQ_EN,
 3409 			dd->mmio + HOST_CTL);
 3410 
 3411 	return 0;
 3412 }
 3413 
 3414 /*
 3415  * Helper function for reusing disk name
 3416  * upon hot insertion.
 3417  */
 3418 static int rssd_disk_name_format(char *prefix,
 3419 				 int index,
 3420 				 char *buf,
 3421 				 int buflen)
 3422 {
 3423 	const int base = 'z' - 'a' + 1;
 3424 	char *begin = buf + strlen(prefix);
 3425 	char *end = buf + buflen;
 3426 	char *p;
 3427 	int unit;
 3428 
 3429 	p = end - 1;
 3430 	*p = '\0';
 3431 	unit = base;
 3432 	do {
 3433 		if (p == begin)
 3434 			return -EINVAL;
 3435 		*--p = 'a' + (index % unit);
 3436 		index = (index / unit) - 1;
 3437 	} while (index >= 0);
 3438 
 3439 	memmove(begin, p, end - p);
 3440 	memcpy(buf, prefix, strlen(prefix));
 3441 
 3442 	return 0;
 3443 }
 3444 
 3445 /*
 3446  * Block layer IOCTL handler.
 3447  *
 3448  * @dev Pointer to the block_device structure.
 3449  * @mode ignored
 3450  * @cmd IOCTL command passed from the user application.
 3451  * @arg Argument passed from the user application.
 3452  *
 3453  * return value
 3454  *	0        IOCTL completed successfully.
 3455  *	-ENOTTY  IOCTL not supported or invalid driver data
 3456  *                 structure pointer.
 3457  */
 3458 static int mtip_block_ioctl(struct block_device *dev,
 3459 			    fmode_t mode,
 3460 			    unsigned cmd,
 3461 			    unsigned long arg)
 3462 {
 3463 	struct driver_data *dd = dev->bd_disk->private_data;
 3464 
 3465 	if (!capable(CAP_SYS_ADMIN))
 3466 		return -EACCES;
 3467 
 3468 	if (!dd)
 3469 		return -ENOTTY;
 3470 
 3471 	if (unlikely(test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &dd->dd_flag)))
 3472 		return -ENOTTY;
 3473 
 3474 	switch (cmd) {
 3475 	case BLKFLSBUF:
 3476 		return -ENOTTY;
 3477 	default:
 3478 		return mtip_hw_ioctl(dd, cmd, arg);
 3479 	}
 3480 }
 3481 
 3482 #ifdef CONFIG_COMPAT
 3483 /*
 3484  * Block layer compat IOCTL handler.
 3485  *
 3486  * @dev Pointer to the block_device structure.
 3487  * @mode ignored
 3488  * @cmd IOCTL command passed from the user application.
 3489  * @arg Argument passed from the user application.
 3490  *
 3491  * return value
 3492  *	0        IOCTL completed successfully.
 3493  *	-ENOTTY  IOCTL not supported or invalid driver data
 3494  *                 structure pointer.
 3495  */
 3496 static int mtip_block_compat_ioctl(struct block_device *dev,
 3497 			    fmode_t mode,
 3498 			    unsigned cmd,
 3499 			    unsigned long arg)
 3500 {
 3501 	struct driver_data *dd = dev->bd_disk->private_data;
 3502 
 3503 	if (!capable(CAP_SYS_ADMIN))
 3504 		return -EACCES;
 3505 
 3506 	if (!dd)
 3507 		return -ENOTTY;
 3508 
 3509 	if (unlikely(test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &dd->dd_flag)))
 3510 		return -ENOTTY;
 3511 
 3512 	switch (cmd) {
 3513 	case BLKFLSBUF:
 3514 		return -ENOTTY;
 3515 	case HDIO_DRIVE_TASKFILE: {
 3516 		struct mtip_compat_ide_task_request_s __user *compat_req_task;
 3517 		ide_task_request_t req_task;
 3518 		int compat_tasksize, outtotal, ret;
 3519 
 3520 		compat_tasksize =
 3521 			sizeof(struct mtip_compat_ide_task_request_s);
 3522 
 3523 		compat_req_task =
 3524 			(struct mtip_compat_ide_task_request_s __user *) arg;
 3525 
 3526 		if (copy_from_user(&req_task, (void __user *) arg,
 3527 			compat_tasksize - (2 * sizeof(compat_long_t))))
 3528 			return -EFAULT;
 3529 
 3530 		if (get_user(req_task.out_size, &compat_req_task->out_size))
 3531 			return -EFAULT;
 3532 
 3533 		if (get_user(req_task.in_size, &compat_req_task->in_size))
 3534 			return -EFAULT;
 3535 
 3536 		outtotal = sizeof(struct mtip_compat_ide_task_request_s);
 3537 
 3538 		ret = exec_drive_taskfile(dd, (void __user *) arg,
 3539 						&req_task, outtotal);
 3540 
 3541 		if (copy_to_user((void __user *) arg, &req_task,
 3542 				compat_tasksize -
 3543 				(2 * sizeof(compat_long_t))))
 3544 			return -EFAULT;
 3545 
 3546 		if (put_user(req_task.out_size, &compat_req_task->out_size))
 3547 			return -EFAULT;
 3548 
 3549 		if (put_user(req_task.in_size, &compat_req_task->in_size))
 3550 			return -EFAULT;
 3551 
 3552 		return ret;
 3553 	}
 3554 	default:
 3555 		return mtip_hw_ioctl(dd, cmd, arg);
 3556 	}
 3557 }
 3558 #endif
 3559 
 3560 /*
 3561  * Obtain the geometry of the device.
 3562  *
 3563  * You may think that this function is obsolete, but some applications,
 3564  * fdisk for example still used CHS values. This function describes the
 3565  * device as having 224 heads and 56 sectors per cylinder. These values are
 3566  * chosen so that each cylinder is aligned on a 4KB boundary. Since a
 3567  * partition is described in terms of a start and end cylinder this means
 3568  * that each partition is also 4KB aligned. Non-aligned partitions adversely
 3569  * affects performance.
 3570  *
 3571  * @dev Pointer to the block_device strucutre.
 3572  * @geo Pointer to a hd_geometry structure.
 3573  *
 3574  * return value
 3575  *	0       Operation completed successfully.
 3576  *	-ENOTTY An error occurred while reading the drive capacity.
 3577  */
 3578 static int mtip_block_getgeo(struct block_device *dev,
 3579 				struct hd_geometry *geo)
 3580 {
 3581 	struct driver_data *dd = dev->bd_disk->private_data;
 3582 	sector_t capacity;
 3583 
 3584 	if (!dd)
 3585 		return -ENOTTY;
 3586 
 3587 	if (!(mtip_hw_get_capacity(dd, &capacity))) {
 3588 		dev_warn(&dd->pdev->dev,
 3589 			"Could not get drive capacity.\n");
 3590 		return -ENOTTY;
 3591 	}
 3592 
 3593 	geo->heads = 224;
 3594 	geo->sectors = 56;
 3595 	sector_div(capacity, (geo->heads * geo->sectors));
 3596 	geo->cylinders = capacity;
 3597 	return 0;
 3598 }
 3599 
 3600 /*
 3601  * Block device operation function.
 3602  *
 3603  * This structure contains pointers to the functions required by the block
 3604  * layer.
 3605  */
 3606 static const struct block_device_operations mtip_block_ops = {
 3607 	.ioctl		= mtip_block_ioctl,
 3608 #ifdef CONFIG_COMPAT
 3609 	.compat_ioctl	= mtip_block_compat_ioctl,
 3610 #endif
 3611 	.getgeo		= mtip_block_getgeo,
 3612 	.owner		= THIS_MODULE
 3613 };
 3614 
 3615 static inline bool is_se_active(struct driver_data *dd)
 3616 {
 3617 	if (unlikely(test_bit(MTIP_PF_SE_ACTIVE_BIT, &dd->port->flags))) {
 3618 		if (dd->port->ic_pause_timer) {
 3619 			unsigned long to = dd->port->ic_pause_timer +
 3620 							msecs_to_jiffies(1000);
 3621 			if (time_after(jiffies, to)) {
 3622 				clear_bit(MTIP_PF_SE_ACTIVE_BIT,
 3623 							&dd->port->flags);
 3624 				clear_bit(MTIP_DDF_SEC_LOCK_BIT, &dd->dd_flag);
 3625 				dd->port->ic_pause_timer = 0;
 3626 				wake_up_interruptible(&dd->port->svc_wait);
 3627 				return false;
 3628 			}
 3629 		}
 3630 		return true;
 3631 	}
 3632 	return false;
 3633 }
 3634 
 3635 /*
 3636  * Block layer make request function.
 3637  *
 3638  * This function is called by the kernel to process a BIO for
 3639  * the P320 device.
 3640  *
 3641  * @queue Pointer to the request queue. Unused other than to obtain
 3642  *              the driver data structure.
 3643  * @rq    Pointer to the request.
 3644  *
 3645  */
 3646 static int mtip_submit_request(struct blk_mq_hw_ctx *hctx, struct request *rq)
 3647 {
 3648 	struct driver_data *dd = hctx->queue->queuedata;
 3649 	struct mtip_cmd *cmd = blk_mq_rq_to_pdu(rq);
 3650 	unsigned int nents;
 3651 
 3652 	if (is_se_active(dd))
 3653 		return -ENODATA;
 3654 
 3655 	if (unlikely(dd->dd_flag & MTIP_DDF_STOP_IO)) {
 3656 		if (unlikely(test_bit(MTIP_DDF_REMOVE_PENDING_BIT,
 3657 							&dd->dd_flag))) {
 3658 			return -ENXIO;
 3659 		}
 3660 		if (unlikely(test_bit(MTIP_DDF_OVER_TEMP_BIT, &dd->dd_flag))) {
 3661 			return -ENODATA;
 3662 		}
 3663 		if (unlikely(test_bit(MTIP_DDF_WRITE_PROTECT_BIT,
 3664 							&dd->dd_flag) &&
 3665 				rq_data_dir(rq))) {
 3666 			return -ENODATA;
 3667 		}
 3668 		if (unlikely(test_bit(MTIP_DDF_SEC_LOCK_BIT, &dd->dd_flag)))
 3669 			return -ENODATA;
 3670 		if (test_bit(MTIP_DDF_REBUILD_FAILED_BIT, &dd->dd_flag))
 3671 			return -ENXIO;
 3672 	}
 3673 
 3674 	if (rq->cmd_flags & REQ_DISCARD) {
 3675 		int err;
 3676 
 3677 		err = mtip_send_trim(dd, blk_rq_pos(rq), blk_rq_sectors(rq));
 3678 		blk_mq_end_request(rq, err);
 3679 		return 0;
 3680 	}
 3681 
 3682 	/* Create the scatter list for this request. */
 3683 	nents = blk_rq_map_sg(hctx->queue, rq, cmd->sg);
 3684 
 3685 	/* Issue the read/write. */
 3686 	mtip_hw_submit_io(dd, rq, cmd, nents, hctx);
 3687 	return 0;
 3688 }
 3689 
 3690 static bool mtip_check_unal_depth(struct blk_mq_hw_ctx *hctx,
 3691 				  struct request *rq)
 3692 {
 3693 	struct driver_data *dd = hctx->queue->queuedata;
 3694 	struct mtip_cmd *cmd = blk_mq_rq_to_pdu(rq);
 3695 
 3696 	if (rq_data_dir(rq) == READ || !dd->unal_qdepth)
 3697 		return false;
 3698 
 3699 	/*
 3700 	 * If unaligned depth must be limited on this controller, mark it
 3701 	 * as unaligned if the IO isn't on a 4k boundary (start of length).
 3702 	 */
 3703 	if (blk_rq_sectors(rq) <= 64) {
 3704 		if ((blk_rq_pos(rq) & 7) || (blk_rq_sectors(rq) & 7))
 3705 			cmd->unaligned = 1;
 3706 	}
 3707 
 3708 	if (cmd->unaligned && down_trylock(&dd->port->cmd_slot_unal))
 3709 		return true;
 3710 
 3711 	return false;
 3712 }
 3713 
 3714 static int mtip_queue_rq(struct blk_mq_hw_ctx *hctx,
 3715 			 const struct blk_mq_queue_data *bd)
 3716 {
 3717 	struct request *rq = bd->rq;
 3718 	int ret;
 3719 
 3720 	if (unlikely(mtip_check_unal_depth(hctx, rq)))
 3721 		return BLK_MQ_RQ_QUEUE_BUSY;
 3722 
 3723 	blk_mq_start_request(rq);
 3724 
 3725 	ret = mtip_submit_request(hctx, rq);
 3726 	if (likely(!ret))
 3727 		return BLK_MQ_RQ_QUEUE_OK;
 3728 
 3729 	rq->errors = ret;
 3730 	return BLK_MQ_RQ_QUEUE_ERROR;
 3731 }
 3732 
 3733 static void mtip_free_cmd(void *data, struct request *rq,
 3734 			  unsigned int hctx_idx, unsigned int request_idx)
 3735 {
 3736 	struct driver_data *dd = data;
 3737 	struct mtip_cmd *cmd = blk_mq_rq_to_pdu(rq);
 3738 
 3739 	if (!cmd->command)
 3740 		return;
 3741 
 3742 	dmam_free_coherent(&dd->pdev->dev, CMD_DMA_ALLOC_SZ,
 3743 				cmd->command, cmd->command_dma);
 3744 }
 3745 
 3746 static int mtip_init_cmd(void *data, struct request *rq, unsigned int hctx_idx,
 3747 			 unsigned int request_idx, unsigned int numa_node)
 3748 {
 3749 	struct driver_data *dd = data;
 3750 	struct mtip_cmd *cmd = blk_mq_rq_to_pdu(rq);
 3751 	u32 host_cap_64 = readl(dd->mmio + HOST_CAP) & HOST_CAP_64;
 3752 
 3753 	/*
 3754 	 * For flush requests, request_idx starts at the end of the
 3755 	 * tag space.  Since we don't support FLUSH/FUA, simply return
 3756 	 * 0 as there's nothing to be done.
 3757 	 */
 3758 	if (request_idx >= MTIP_MAX_COMMAND_SLOTS)
 3759 		return 0;
 3760 
 3761 	cmd->command = dmam_alloc_coherent(&dd->pdev->dev, CMD_DMA_ALLOC_SZ,
 3762 			&cmd->command_dma, GFP_KERNEL);
 3763 	if (!cmd->command)
 3764 		return -ENOMEM;
 3765 
 3766 	memset(cmd->command, 0, CMD_DMA_ALLOC_SZ);
 3767 
 3768 	/* Point the command headers at the command tables. */
 3769 	cmd->command_header = dd->port->command_list +
 3770 				(sizeof(struct mtip_cmd_hdr) * request_idx);
 3771 	cmd->command_header_dma = dd->port->command_list_dma +
 3772 				(sizeof(struct mtip_cmd_hdr) * request_idx);
 3773 
 3774 	if (host_cap_64)
 3775 		cmd->command_header->ctbau = __force_bit2int cpu_to_le32((cmd->command_dma >> 16) >> 16);
 3776 
 3777 	cmd->command_header->ctba = __force_bit2int cpu_to_le32(cmd->command_dma & 0xFFFFFFFF);
 3778 
 3779 	sg_init_table(cmd->sg, MTIP_MAX_SG);
 3780 	return 0;
 3781 }
 3782 
 3783 static struct blk_mq_ops mtip_mq_ops = {
 3784 	.queue_rq	= mtip_queue_rq,
 3785 	.map_queue	= blk_mq_map_queue,
 3786 	.init_request	= mtip_init_cmd,
 3787 	.exit_request	= mtip_free_cmd,
 3788 };
 3789 
 3790 /*
 3791  * Block layer initialization function.
 3792  *
 3793  * This function is called once by the PCI layer for each P320
 3794  * device that is connected to the system.
 3795  *
 3796  * @dd Pointer to the driver data structure.
 3797  *
 3798  * return value
 3799  *	0 on success else an error code.
 3800  */
 3801 static int mtip_block_initialize(struct driver_data *dd)
 3802 {
 3803 	int rv = 0, wait_for_rebuild = 0;
 3804 	sector_t capacity;
 3805 	unsigned int index = 0;
 3806 	struct kobject *kobj;
 3807 
 3808 	if (dd->disk)
 3809 		goto skip_create_disk; /* hw init done, before rebuild */
 3810 
 3811 	if (mtip_hw_init(dd)) {
 3812 		rv = -EINVAL;
 3813 		goto protocol_init_error;
 3814 	}
 3815 
 3816 	dd->disk = alloc_disk_node(MTIP_MAX_MINORS, dd->numa_node);
 3817 	if (dd->disk  == NULL) {
 3818 		dev_err(&dd->pdev->dev,
 3819 			"Unable to allocate gendisk structure\n");
 3820 		rv = -EINVAL;
 3821 		goto alloc_disk_error;
 3822 	}
 3823 
 3824 	/* Generate the disk name, implemented same as in sd.c */
 3825 	do {
 3826 		if (!ida_pre_get(&rssd_index_ida, GFP_KERNEL))
 3827 			goto ida_get_error;
 3828 
 3829 		spin_lock(&rssd_index_lock);
 3830 		rv = ida_get_new(&rssd_index_ida, &index);
 3831 		spin_unlock(&rssd_index_lock);
 3832 	} while (rv == -EAGAIN);
 3833 
 3834 	if (rv)
 3835 		goto ida_get_error;
 3836 
 3837 	rv = rssd_disk_name_format("rssd",
 3838 				index,
 3839 				dd->disk->disk_name,
 3840 				DISK_NAME_LEN);
 3841 	if (rv)
 3842 		goto disk_index_error;
 3843 
 3844 	dd->disk->driverfs_dev	= &dd->pdev->dev;
 3845 	dd->disk->major		= dd->major;
 3846 	dd->disk->first_minor	= index * MTIP_MAX_MINORS;
 3847 	dd->disk->minors 	= MTIP_MAX_MINORS;
 3848 	dd->disk->fops		= &mtip_block_ops;
 3849 	dd->disk->private_data	= dd;
 3850 	dd->index		= index;
 3851 
 3852 	mtip_hw_debugfs_init(dd);
 3853 
 3854 skip_create_disk:
 3855 	memset(&dd->tags, 0, sizeof(dd->tags));
 3856 	dd->tags.ops = &mtip_mq_ops;
 3857 	dd->tags.nr_hw_queues = 1;
 3858 	dd->tags.queue_depth = MTIP_MAX_COMMAND_SLOTS;
 3859 	dd->tags.reserved_tags = 1;
 3860 	dd->tags.cmd_size = sizeof(struct mtip_cmd);
 3861 	dd->tags.numa_node = dd->numa_node;
 3862 	dd->tags.flags = BLK_MQ_F_SHOULD_MERGE;
 3863 	dd->tags.driver_data = dd;
 3864 
 3865 	rv = blk_mq_alloc_tag_set(&dd->tags);
 3866 	if (rv) {
 3867 		dev_err(&dd->pdev->dev,
 3868 			"Unable to allocate request queue\n");
 3869 		goto block_queue_alloc_init_error;
 3870 	}
 3871 
 3872 	/* Allocate the request queue. */
 3873 	dd->queue = blk_mq_init_queue(&dd->tags);
 3874 	if (IS_ERR(dd->queue)) {
 3875 		dev_err(&dd->pdev->dev,
 3876 			"Unable to allocate request queue\n");
 3877 		rv = -ENOMEM;
 3878 		goto block_queue_alloc_init_error;
 3879 	}
 3880 
 3881 	dd->disk->queue		= dd->queue;
 3882 	dd->queue->queuedata	= dd;
 3883 
 3884 	/* Initialize the protocol layer. */
 3885 	wait_for_rebuild = mtip_hw_get_identify(dd);
 3886 	if (wait_for_rebuild < 0) {
 3887 		dev_err(&dd->pdev->dev,
 3888 			"Protocol layer initialization failed\n");
 3889 		rv = -EINVAL;
 3890 		goto init_hw_cmds_error;
 3891 	}
 3892 
 3893 	/*
 3894 	 * if rebuild pending, start the service thread, and delay the block
 3895 	 * queue creation and add_disk()
 3896 	 */
 3897 	if (wait_for_rebuild == MTIP_FTL_REBUILD_MAGIC)
 3898 		goto start_service_thread;
 3899 
 3900 	/* Set device limits. */
 3901 	set_bit(QUEUE_FLAG_NONROT, &dd->queue->queue_flags);
 3902 	clear_bit(QUEUE_FLAG_ADD_RANDOM, &dd->queue->queue_flags);
 3903 	blk_queue_max_segments(dd->queue, MTIP_MAX_SG);
 3904 	blk_queue_physical_block_size(dd->queue, 4096);
 3905 	blk_queue_max_hw_sectors(dd->queue, 0xffff);
 3906 	blk_queue_max_segment_size(dd->queue, 0x400000);
 3907 	blk_queue_io_min(dd->queue, 4096);
 3908 	blk_queue_bounce_limit(dd->queue, dd->pdev->dma_mask);
 3909 
 3910 	/*
 3911 	 * write back cache is not supported in the device. FUA depends on
 3912 	 * write back cache support, hence setting flush support to zero.
 3913 	 */
 3914 	blk_queue_flush(dd->queue, 0);
 3915 
 3916 	/* Signal trim support */
 3917 	if (dd->trim_supp == true) {
 3918 		set_bit(QUEUE_FLAG_DISCARD, &dd->queue->queue_flags);
 3919 		dd->queue->limits.discard_granularity = 4096;
 3920 		blk_queue_max_discard_sectors(dd->queue,
 3921 			MTIP_MAX_TRIM_ENTRY_LEN * MTIP_MAX_TRIM_ENTRIES);
 3922 		dd->queue->limits.discard_zeroes_data = 0;
 3923 	}
 3924 
 3925 	/* Set the capacity of the device in 512 byte sectors. */
 3926 	if (!(mtip_hw_get_capacity(dd, &capacity))) {
 3927 		dev_warn(&dd->pdev->dev,
 3928 			"Could not read drive capacity\n");
 3929 		rv = -EIO;
 3930 		goto read_capacity_error;
 3931 	}
 3932 	set_capacity(dd->disk, capacity);
 3933 
 3934 	/* Enable the block device and add it to /dev */
 3935 	add_disk(dd->disk);
 3936 
 3937 	dd->bdev = bdget_disk(dd->disk, 0);
 3938 	/*
 3939 	 * Now that the disk is active, initialize any sysfs attributes
 3940 	 * managed by the protocol layer.
 3941 	 */
 3942 	kobj = kobject_get(&disk_to_dev(dd->disk)->kobj);
 3943 	if (kobj) {
 3944 		mtip_hw_sysfs_init(dd, kobj);
 3945 		kobject_put(kobj);
 3946 	}
 3947 
 3948 	if (dd->mtip_svc_handler) {
 3949 		set_bit(MTIP_DDF_INIT_DONE_BIT, &dd->dd_flag);
 3950 		return rv; /* service thread created for handling rebuild */
 3951 	}
 3952 
 3953 start_service_thread:
 3954 	dd->mtip_svc_handler = kthread_create_on_node(mtip_service_thread,
 3955 						dd, dd->numa_node,
 3956 						"mtip_svc_thd_%02d", index);
 3957 
 3958 	if (IS_ERR(dd->mtip_svc_handler)) {
 3959 		dev_err(&dd->pdev->dev, "service thread failed to start\n");
 3960 		dd->mtip_svc_handler = NULL;
 3961 		rv = -EFAULT;
 3962 		goto kthread_run_error;
 3963 	}
 3964 	wake_up_process(dd->mtip_svc_handler);
 3965 	if (wait_for_rebuild == MTIP_FTL_REBUILD_MAGIC)
 3966 		rv = wait_for_rebuild;
 3967 
 3968 	return rv;
 3969 
 3970 kthread_run_error:
 3971 	bdput(dd->bdev);
 3972 	dd->bdev = NULL;
 3973 
 3974 	/* Delete our gendisk. This also removes the device from /dev */
 3975 	del_gendisk(dd->disk);
 3976 
 3977 read_capacity_error:
 3978 init_hw_cmds_error:
 3979 	blk_cleanup_queue(dd->queue);
 3980 	blk_mq_free_tag_set(&dd->tags);
 3981 block_queue_alloc_init_error:
 3982 	mtip_hw_debugfs_exit(dd);
 3983 disk_index_error:
 3984 	spin_lock(&rssd_index_lock);
 3985 	ida_remove(&rssd_index_ida, index);
 3986 	spin_unlock(&rssd_index_lock);
 3987 
 3988 ida_get_error:
 3989 	put_disk(dd->disk);
 3990 
 3991 alloc_disk_error:
 3992 	mtip_hw_exit(dd); /* De-initialize the protocol layer. */
 3993 
 3994 protocol_init_error:
 3995 	return rv;
 3996 }
 3997 
 3998 /*
 3999  * Block layer deinitialization function.
 4000  *
 4001  * Called by the PCI layer as each P320 device is removed.
 4002  *
 4003  * @dd Pointer to the driver data structure.
 4004  *
 4005  * return value
 4006  *	0
 4007  */
 4008 static int mtip_block_remove(struct driver_data *dd)
 4009 {
 4010 	struct kobject *kobj;
 4011 
 4012 	mtip_hw_debugfs_exit(dd);
 4013 
 4014 	if (dd->mtip_svc_handler) {
 4015 		set_bit(MTIP_PF_SVC_THD_STOP_BIT, &dd->port->flags);
 4016 		wake_up_interruptible(&dd->port->svc_wait);
 4017 		kthread_stop(dd->mtip_svc_handler);
 4018 	}
 4019 
 4020 	/* Clean up the sysfs attributes, if created */
 4021 	if (test_bit(MTIP_DDF_INIT_DONE_BIT, &dd->dd_flag)) {
 4022 		kobj = kobject_get(&disk_to_dev(dd->disk)->kobj);
 4023 		if (kobj) {
 4024 			mtip_hw_sysfs_exit(dd, kobj);
 4025 			kobject_put(kobj);
 4026 		}
 4027 	}
 4028 
 4029 	if (!dd->sr)
 4030 		mtip_standby_drive(dd);
 4031 	else
 4032 		dev_info(&dd->pdev->dev, "device %s surprise removal\n",
 4033 						dd->disk->disk_name);
 4034 
 4035 	/*
 4036 	 * Delete our gendisk structure. This also removes the device
 4037 	 * from /dev
 4038 	 */
 4039 	if (dd->bdev) {
 4040 		bdput(dd->bdev);
 4041 		dd->bdev = NULL;
 4042 	}
 4043 	if (dd->disk) {
 4044 		del_gendisk(dd->disk);
 4045 		if (dd->disk->queue) {
 4046 			blk_cleanup_queue(dd->queue);
 4047 			blk_mq_free_tag_set(&dd->tags);
 4048 			dd->queue = NULL;
 4049 		}
 4050 		put_disk(dd->disk);
 4051 	}
 4052 	dd->disk  = NULL;
 4053 
 4054 	spin_lock(&rssd_index_lock);
 4055 	ida_remove(&rssd_index_ida, dd->index);
 4056 	spin_unlock(&rssd_index_lock);
 4057 
 4058 	/* De-initialize the protocol layer. */
 4059 	mtip_hw_exit(dd);
 4060 
 4061 	return 0;
 4062 }
 4063 
 4064 /*
 4065  * Function called by the PCI layer when just before the
 4066  * machine shuts down.
 4067  *
 4068  * If a protocol layer shutdown function is present it will be called
 4069  * by this function.
 4070  *
 4071  * @dd Pointer to the driver data structure.
 4072  *
 4073  * return value
 4074  *	0
 4075  */
 4076 static int mtip_block_shutdown(struct driver_data *dd)
 4077 {
 4078 	mtip_hw_shutdown(dd);
 4079 
 4080 	/* Delete our gendisk structure, and cleanup the blk queue. */
 4081 	if (dd->disk) {
 4082 		dev_info(&dd->pdev->dev,
 4083 			"Shutting down %s ...\n", dd->disk->disk_name);
 4084 
 4085 		del_gendisk(dd->disk);
 4086 		if (dd->disk->queue) {
 4087 			blk_cleanup_queue(dd->queue);
 4088 			blk_mq_free_tag_set(&dd->tags);
 4089 		}
 4090 		put_disk(dd->disk);
 4091 		dd->disk  = NULL;
 4092 		dd->queue = NULL;
 4093 	}
 4094 
 4095 	spin_lock(&rssd_index_lock);
 4096 	ida_remove(&rssd_index_ida, dd->index);
 4097 	spin_unlock(&rssd_index_lock);
 4098 	return 0;
 4099 }
 4100 
 4101 static int mtip_block_suspend(struct driver_data *dd)
 4102 {
 4103 	dev_info(&dd->pdev->dev,
 4104 		"Suspending %s ...\n", dd->disk->disk_name);
 4105 	mtip_hw_suspend(dd);
 4106 	return 0;
 4107 }
 4108 
 4109 static int mtip_block_resume(struct driver_data *dd)
 4110 {
 4111 	dev_info(&dd->pdev->dev, "Resuming %s ...\n",
 4112 		dd->disk->disk_name);
 4113 	mtip_hw_resume(dd);
 4114 	return 0;
 4115 }
 4116 
 4117 static void drop_cpu(int cpu)
 4118 {
 4119 	cpu_use[cpu]--;
 4120 }
 4121 
 4122 static int get_least_used_cpu_on_node(int node)
 4123 {
 4124 	int cpu, least_used_cpu, least_cnt;
 4125 	const struct cpumask *node_mask;
 4126 
 4127 	node_mask = cpumask_of_node(node);
 4128 	least_used_cpu = cpumask_first(node_mask);
 4129 	least_cnt = cpu_use[least_used_cpu];
 4130 	cpu = least_used_cpu;
 4131 
 4132 	for_each_cpu(cpu, node_mask) {
 4133 		if (cpu_use[cpu] < least_cnt) {
 4134 			least_used_cpu = cpu;
 4135 			least_cnt = cpu_use[cpu];
 4136 		}
 4137 	}
 4138 	cpu_use[least_used_cpu]++;
 4139 	return least_used_cpu;
 4140 }
 4141 
 4142 /* Helper for selecting a node in round robin mode */
 4143 static inline int mtip_get_next_rr_node(void)
 4144 {
 4145 	static int next_node = -1;
 4146 
 4147 	if (next_node == -1) {
 4148 		next_node = first_online_node;
 4149 		return next_node;
 4150 	}
 4151 
 4152 	next_node = next_online_node(next_node);
 4153 	if (next_node == MAX_NUMNODES)
 4154 		next_node = first_online_node;
 4155 	return next_node;
 4156 }
 4157 
 4158 static DEFINE_HANDLER(0);
 4159 static DEFINE_HANDLER(1);
 4160 static DEFINE_HANDLER(2);
 4161 static DEFINE_HANDLER(3);
 4162 static DEFINE_HANDLER(4);
 4163 static DEFINE_HANDLER(5);
 4164 static DEFINE_HANDLER(6);
 4165 static DEFINE_HANDLER(7);
 4166 
 4167 static void mtip_disable_link_opts(struct driver_data *dd, struct pci_dev *pdev)
 4168 {
 4169 	int pos;
 4170 	unsigned short pcie_dev_ctrl;
 4171 
 4172 	pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
 4173 	if (pos) {
 4174 		pci_read_config_word(pdev,
 4175 			pos + PCI_EXP_DEVCTL,
 4176 			&pcie_dev_ctrl);
 4177 		if (pcie_dev_ctrl & (1 << 11) ||
 4178 		    pcie_dev_ctrl & (1 << 4)) {
 4179 			dev_info(&dd->pdev->dev,
 4180 				"Disabling ERO/No-Snoop on bridge device %04x:%04x\n",
 4181 					pdev->vendor, pdev->device);
 4182 			pcie_dev_ctrl &= ~(PCI_EXP_DEVCTL_NOSNOOP_EN |
 4183 						PCI_EXP_DEVCTL_RELAX_EN);
 4184 			pci_write_config_word(pdev,
 4185 				pos + PCI_EXP_DEVCTL,
 4186 				pcie_dev_ctrl);
 4187 		}
 4188 	}
 4189 }
 4190 
 4191 static void mtip_fix_ero_nosnoop(struct driver_data *dd, struct pci_dev *pdev)
 4192 {
 4193 	/*
 4194 	 * This workaround is specific to AMD/ATI chipset with a PCI upstream
 4195 	 * device with device id 0x5aXX
 4196 	 */
 4197 	if (pdev->bus && pdev->bus->self) {
 4198 		if (pdev->bus->self->vendor == PCI_VENDOR_ID_ATI &&
 4199 		    ((pdev->bus->self->device & 0xff00) == 0x5a00)) {
 4200 			mtip_disable_link_opts(dd, pdev->bus->self);
 4201 		} else {
 4202 			/* Check further up the topology */
 4203 			struct pci_dev *parent_dev = pdev->bus->self;
 4204 			if (parent_dev->bus &&
 4205 				parent_dev->bus->parent &&
 4206 				parent_dev->bus->parent->self &&
 4207 				parent_dev->bus->parent->self->vendor ==
 4208 					 PCI_VENDOR_ID_ATI &&
 4209 				(parent_dev->bus->parent->self->device &
 4210 					0xff00) == 0x5a00) {
 4211 				mtip_disable_link_opts(dd,
 4212 					parent_dev->bus->parent->self);
 4213 			}
 4214 		}
 4215 	}
 4216 }
 4217 
 4218 /*
 4219  * Called for each supported PCI device detected.
 4220  *
 4221  * This function allocates the private data structure, enables the
 4222  * PCI device and then calls the block layer initialization function.
 4223  *
 4224  * return value
 4225  *	0 on success else an error code.
 4226  */
 4227 static int mtip_pci_probe(struct pci_dev *pdev,
 4228 			const struct pci_device_id *ent)
 4229 {
 4230 	int rv = 0;
 4231 	struct driver_data *dd = NULL;
 4232 	char cpu_list[256];
 4233 	const struct cpumask *node_mask;
 4234 	int cpu, i = 0, j = 0;
 4235 	int my_node = NUMA_NO_NODE;
 4236 	unsigned long flags;
 4237 
 4238 	/* Allocate memory for this devices private data. */
 4239 	my_node = pcibus_to_node(pdev->bus);
 4240 	if (my_node != NUMA_NO_NODE) {
 4241 		if (!node_online(my_node))
 4242 			my_node = mtip_get_next_rr_node();
 4243 	} else {
 4244 		dev_info(&pdev->dev, "Kernel not reporting proximity, choosing a node\n");
 4245 		my_node = mtip_get_next_rr_node();
 4246 	}
 4247 	dev_info(&pdev->dev, "NUMA node %d (closest: %d,%d, probe on %d:%d)\n",
 4248 		my_node, pcibus_to_node(pdev->bus), dev_to_node(&pdev->dev),
 4249 		cpu_to_node(raw_smp_processor_id()), raw_smp_processor_id());
 4250 
 4251 	dd = kzalloc_node(sizeof(struct driver_data), GFP_KERNEL, my_node);
 4252 	if (dd == NULL) {
 4253 		dev_err(&pdev->dev,
 4254 			"Unable to allocate memory for driver data\n");
 4255 		return -ENOMEM;
 4256 	}
 4257 
 4258 	/* Attach the private data to this PCI device.  */
 4259 	pci_set_drvdata(pdev, dd);
 4260 
 4261 	rv = pcim_enable_device(pdev);
 4262 	if (rv < 0) {
 4263 		dev_err(&pdev->dev, "Unable to enable device\n");
 4264 		goto iomap_err;
 4265 	}
 4266 
 4267 	/* Map BAR5 to memory. */
 4268 	rv = pcim_iomap_regions(pdev, 1 << MTIP_ABAR, MTIP_DRV_NAME);
 4269 	if (rv < 0) {
 4270 		dev_err(&pdev->dev, "Unable to map regions\n");
 4271 		goto iomap_err;
 4272 	}
 4273 
 4274 	if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
 4275 		rv = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
 4276 
 4277 		if (rv) {
 4278 			rv = pci_set_consistent_dma_mask(pdev,
 4279 						DMA_BIT_MASK(32));
 4280 			if (rv) {
 4281 				dev_warn(&pdev->dev,
 4282 					"64-bit DMA enable failed\n");
 4283 				goto setmask_err;
 4284 			}
 4285 		}
 4286 	}
 4287 
 4288 	/* Copy the info we may need later into the private data structure. */
 4289 	dd->major	= mtip_major;
 4290 	dd->instance	= instance;
 4291 	dd->pdev	= pdev;
 4292 	dd->numa_node	= my_node;
 4293 
 4294 	INIT_LIST_HEAD(&dd->online_list);
 4295 	INIT_LIST_HEAD(&dd->remove_list);
 4296 
 4297 	memset(dd->workq_name, 0, 32);
 4298 	snprintf(dd->workq_name, 31, "mtipq%d", dd->instance);
 4299 
 4300 	dd->isr_workq = create_workqueue(dd->workq_name);
 4301 	if (!dd->isr_workq) {
 4302 		dev_warn(&pdev->dev, "Can't create wq %d\n", dd->instance);
 4303 		rv = -ENOMEM;
 4304 		goto block_initialize_err;
 4305 	}
 4306 
 4307 	memset(cpu_list, 0, sizeof(cpu_list));
 4308 
 4309 	node_mask = cpumask_of_node(dd->numa_node);
 4310 	if (!cpumask_empty(node_mask)) {
 4311 		for_each_cpu(cpu, node_mask)
 4312 		{
 4313 			snprintf(&cpu_list[j], 256 - j, "%d ", cpu);
 4314 			j = strlen(cpu_list);
 4315 		}
 4316 
 4317 		dev_info(&pdev->dev, "Node %d on package %d has %d cpu(s): %s\n",
 4318 			dd->numa_node,
 4319 			topology_physical_package_id(cpumask_first(node_mask)),
 4320 			nr_cpus_node(dd->numa_node),
 4321 			cpu_list);
 4322 	} else
 4323 		dev_dbg(&pdev->dev, "mtip32xx: node_mask empty\n");
 4324 
 4325 	dd->isr_binding = get_least_used_cpu_on_node(dd->numa_node);
 4326 	dev_info(&pdev->dev, "Initial IRQ binding node:cpu %d:%d\n",
 4327 		cpu_to_node(dd->isr_binding), dd->isr_binding);
 4328 
 4329 	/* first worker context always runs in ISR */
 4330 	dd->work[0].cpu_binding = dd->isr_binding;
 4331 	dd->work[1].cpu_binding = get_least_used_cpu_on_node(dd->numa_node);
 4332 	dd->work[2].cpu_binding = get_least_used_cpu_on_node(dd->numa_node);
 4333 	dd->work[3].cpu_binding = dd->work[0].cpu_binding;
 4334 	dd->work[4].cpu_binding = dd->work[1].cpu_binding;
 4335 	dd->work[5].cpu_binding = dd->work[2].cpu_binding;
 4336 	dd->work[6].cpu_binding = dd->work[2].cpu_binding;
 4337 	dd->work[7].cpu_binding = dd->work[1].cpu_binding;
 4338 
 4339 	/* Log the bindings */
 4340 	for_each_present_cpu(cpu) {
 4341 		memset(cpu_list, 0, sizeof(cpu_list));
 4342 		for (i = 0, j = 0; i < MTIP_MAX_SLOT_GROUPS; i++) {
 4343 			if (dd->work[i].cpu_binding == cpu) {
 4344 				snprintf(&cpu_list[j], 256 - j, "%d ", i);
 4345 				j = strlen(cpu_list);
 4346 			}
 4347 		}
 4348 		if (j)
 4349 			dev_info(&pdev->dev, "CPU %d: WQs %s\n", cpu, cpu_list);
 4350 	}
 4351 
 4352 	INIT_WORK(&dd->work[0].work, mtip_workq_sdbf0);
 4353 	INIT_WORK(&dd->work[1].work, mtip_workq_sdbf1);
 4354 	INIT_WORK(&dd->work[2].work, mtip_workq_sdbf2);
 4355 	INIT_WORK(&dd->work[3].work, mtip_workq_sdbf3);
 4356 	INIT_WORK(&dd->work[4].work, mtip_workq_sdbf4);
 4357 	INIT_WORK(&dd->work[5].work, mtip_workq_sdbf5);
 4358 	INIT_WORK(&dd->work[6].work, mtip_workq_sdbf6);
 4359 	INIT_WORK(&dd->work[7].work, mtip_workq_sdbf7);
 4360 
 4361 	pci_set_master(pdev);
 4362 	rv = pci_enable_msi(pdev);
 4363 	if (rv) {
 4364 		dev_warn(&pdev->dev,
 4365 			"Unable to enable MSI interrupt.\n");
 4366 		goto msi_initialize_err;
 4367 	}
 4368 
 4369 	mtip_fix_ero_nosnoop(dd, pdev);
 4370 
 4371 	/* Initialize the block layer. */
 4372 	rv = mtip_block_initialize(dd);
 4373 	if (rv < 0) {
 4374 		dev_err(&pdev->dev,
 4375 			"Unable to initialize block layer\n");
 4376 		goto block_initialize_err;
 4377 	}
 4378 
 4379 	/*
 4380 	 * Increment the instance count so that each device has a unique
 4381 	 * instance number.
 4382 	 */
 4383 	instance++;
 4384 	if (rv != MTIP_FTL_REBUILD_MAGIC)
 4385 		set_bit(MTIP_DDF_INIT_DONE_BIT, &dd->dd_flag);
 4386 	else
 4387 		rv = 0; /* device in rebuild state, return 0 from probe */
 4388 
 4389 	/* Add to online list even if in ftl rebuild */
 4390 	spin_lock_irqsave(&dev_lock, flags);
 4391 	list_add(&dd->online_list, &online_list);
 4392 	spin_unlock_irqrestore(&dev_lock, flags);
 4393 
 4394 	goto done;
 4395 
 4396 block_initialize_err:
 4397 	pci_disable_msi(pdev);
 4398 
 4399 msi_initialize_err:
 4400 	if (dd->isr_workq) {
 4401 		flush_workqueue(dd->isr_workq);
 4402 		destroy_workqueue(dd->isr_workq);
 4403 		drop_cpu(dd->work[0].cpu_binding);
 4404 		drop_cpu(dd->work[1].cpu_binding);
 4405 		drop_cpu(dd->work[2].cpu_binding);
 4406 	}
 4407 setmask_err:
 4408 	pcim_iounmap_regions(pdev, 1 << MTIP_ABAR);
 4409 
 4410 iomap_err:
 4411 	kfree(dd);
 4412 	pci_set_drvdata(pdev, NULL);
 4413 	return rv;
 4414 done:
 4415 	return rv;
 4416 }
 4417 
 4418 /*
 4419  * Called for each probed device when the device is removed or the
 4420  * driver is unloaded.
 4421  *
 4422  * return value
 4423  *	None
 4424  */
 4425 static void mtip_pci_remove(struct pci_dev *pdev)
 4426 {
 4427 	struct driver_data *dd = pci_get_drvdata(pdev);
 4428 	unsigned long flags, to;
 4429 
 4430 	set_bit(MTIP_DDF_REMOVE_PENDING_BIT, &dd->dd_flag);
 4431 
 4432 	spin_lock_irqsave(&dev_lock, flags);
 4433 	list_del_init(&dd->online_list);
 4434 	list_add(&dd->remove_list, &removing_list);
 4435 	spin_unlock_irqrestore(&dev_lock, flags);
 4436 
 4437 	mtip_check_surprise_removal(pdev);
 4438 	synchronize_irq(dd->pdev->irq);
 4439 
 4440 	/* Spin until workers are done */
 4441 	to = jiffies + msecs_to_jiffies(4000);
 4442 	do {
 4443 		msleep(20);
 4444 	} while (atomic_read(&dd->irq_workers_active) != 0 &&
 4445 		time_before(jiffies, to));
 4446 
 4447 	if (atomic_read(&dd->irq_workers_active) != 0) {
 4448 		dev_warn(&dd->pdev->dev,
 4449 			"Completion workers still active!\n");
 4450 	}
 4451 
 4452 	blk_mq_stop_hw_queues(dd->queue);
 4453 	/* Clean up the block layer. */
 4454 	mtip_block_remove(dd);
 4455 
 4456 	if (dd->isr_workq) {
 4457 		flush_workqueue(dd->isr_workq);
 4458 		destroy_workqueue(dd->isr_workq);
 4459 		drop_cpu(dd->work[0].cpu_binding);
 4460 		drop_cpu(dd->work[1].cpu_binding);
 4461 		drop_cpu(dd->work[2].cpu_binding);
 4462 	}
 4463 
 4464 	pci_disable_msi(pdev);
 4465 
 4466 	spin_lock_irqsave(&dev_lock, flags);
 4467 	list_del_init(&dd->remove_list);
 4468 	spin_unlock_irqrestore(&dev_lock, flags);
 4469 
 4470 	kfree(dd);
 4471 
 4472 	pcim_iounmap_regions(pdev, 1 << MTIP_ABAR);
 4473 	pci_set_drvdata(pdev, NULL);
 4474 }
 4475 
 4476 /*
 4477  * Called for each probed device when the device is suspended.
 4478  *
 4479  * return value
 4480  *	0  Success
 4481  *	<0 Error
 4482  */
 4483 static int mtip_pci_suspend(struct pci_dev *pdev, pm_message_t mesg)
 4484 {
 4485 	int rv = 0;
 4486 	struct driver_data *dd = pci_get_drvdata(pdev);
 4487 
 4488 	if (!dd) {
 4489 		dev_err(&pdev->dev,
 4490 			"Driver private datastructure is NULL\n");
 4491 		return -EFAULT;
 4492 	}
 4493 
 4494 	set_bit(MTIP_DDF_RESUME_BIT, &dd->dd_flag);
 4495 
 4496 	/* Disable ports & interrupts then send standby immediate */
 4497 	rv = mtip_block_suspend(dd);
 4498 	if (rv < 0) {
 4499 		dev_err(&pdev->dev,
 4500 			"Failed to suspend controller\n");
 4501 		return rv;
 4502 	}
 4503 
 4504 	/*
 4505 	 * Save the pci config space to pdev structure &
 4506 	 * disable the device
 4507 	 */
 4508 	pci_save_state(pdev);
 4509 	pci_disable_device(pdev);
 4510 
 4511 	/* Move to Low power state*/
 4512 	pci_set_power_state(pdev, PCI_D3hot);
 4513 
 4514 	return rv;
 4515 }
 4516 
 4517 /*
 4518  * Called for each probed device when the device is resumed.
 4519  *
 4520  * return value
 4521  *      0  Success
 4522  *      <0 Error
 4523  */
 4524 static int mtip_pci_resume(struct pci_dev *pdev)
 4525 {
 4526 	int rv = 0;
 4527 	struct driver_data *dd;
 4528 
 4529 	dd = pci_get_drvdata(pdev);
 4530 	if (!dd) {
 4531 		dev_err(&pdev->dev,
 4532 			"Driver private datastructure is NULL\n");
 4533 		return -EFAULT;
 4534 	}
 4535 
 4536 	/* Move the device to active State */
 4537 	pci_set_power_state(pdev, PCI_D0);
 4538 
 4539 	/* Restore PCI configuration space */
 4540 	pci_restore_state(pdev);
 4541 
 4542 	/* Enable the PCI device*/
 4543 	rv = pcim_enable_device(pdev);
 4544 	if (rv < 0) {
 4545 		dev_err(&pdev->dev,
 4546 			"Failed to enable card during resume\n");
 4547 		goto err;
 4548 	}
 4549 	pci_set_master(pdev);
 4550 
 4551 	/*
 4552 	 * Calls hbaReset, initPort, & startPort function
 4553 	 * then enables interrupts
 4554 	 */
 4555 	rv = mtip_block_resume(dd);
 4556 	if (rv < 0)
 4557 		dev_err(&pdev->dev, "Unable to resume\n");
 4558 
 4559 err:
 4560 	clear_bit(MTIP_DDF_RESUME_BIT, &dd->dd_flag);
 4561 
 4562 	return rv;
 4563 }
 4564 
 4565 /*
 4566  * Shutdown routine
 4567  *
 4568  * return value
 4569  *      None
 4570  */
 4571 static void mtip_pci_shutdown(struct pci_dev *pdev)
 4572 {
 4573 	struct driver_data *dd = pci_get_drvdata(pdev);
 4574 	if (dd)
 4575 		mtip_block_shutdown(dd);
 4576 }
 4577 
 4578 /* Table of device ids supported by this driver. */
 4579 static const struct pci_device_id mtip_pci_tbl[] = {
 4580 	{ PCI_DEVICE(PCI_VENDOR_ID_MICRON, P320H_DEVICE_ID) },
 4581 	{ PCI_DEVICE(PCI_VENDOR_ID_MICRON, P320M_DEVICE_ID) },
 4582 	{ PCI_DEVICE(PCI_VENDOR_ID_MICRON, P320S_DEVICE_ID) },
 4583 	{ PCI_DEVICE(PCI_VENDOR_ID_MICRON, P325M_DEVICE_ID) },
 4584 	{ PCI_DEVICE(PCI_VENDOR_ID_MICRON, P420H_DEVICE_ID) },
 4585 	{ PCI_DEVICE(PCI_VENDOR_ID_MICRON, P420M_DEVICE_ID) },
 4586 	{ PCI_DEVICE(PCI_VENDOR_ID_MICRON, P425M_DEVICE_ID) },
 4587 	{ 0 }
 4588 };
 4589 
 4590 /* Structure that describes the PCI driver functions. */
 4591 static struct pci_driver mtip_pci_driver = {
 4592 	.name			= MTIP_DRV_NAME,
 4593 	.id_table		= mtip_pci_tbl,
 4594 	.probe			= mtip_pci_probe,
 4595 	.remove			= mtip_pci_remove,
 4596 	.suspend		= mtip_pci_suspend,
 4597 	.resume			= mtip_pci_resume,
 4598 	.shutdown		= mtip_pci_shutdown,
 4599 };
 4600 
 4601 MODULE_DEVICE_TABLE(pci, mtip_pci_tbl);
 4602 
 4603 /*
 4604  * Module initialization function.
 4605  *
 4606  * Called once when the module is loaded. This function allocates a major
 4607  * block device number to the Cyclone devices and registers the PCI layer
 4608  * of the driver.
 4609  *
 4610  * Return value
 4611  *      0 on success else error code.
 4612  */
 4613 static int __init mtip_init(void)
 4614 {
 4615 	int error;
 4616 
 4617 	pr_info(MTIP_DRV_NAME " Version " MTIP_DRV_VERSION "\n");
 4618 
 4619 	spin_lock_init(&dev_lock);
 4620 
 4621 	INIT_LIST_HEAD(&online_list);
 4622 	INIT_LIST_HEAD(&removing_list);
 4623 
 4624 	/* Allocate a major block device number to use with this driver. */
 4625 	error = register_blkdev(0, MTIP_DRV_NAME);
 4626 	if (error <= 0) {
 4627 		pr_err("Unable to register block device (%d)\n",
 4628 		error);
 4629 		return -EBUSY;
 4630 	}
 4631 	mtip_major = error;
 4632 
 4633 	dfs_parent = debugfs_create_dir("rssd", NULL);
 4634 	if (IS_ERR_OR_NULL(dfs_parent)) {
 4635 		pr_warn("Error creating debugfs parent\n");
 4636 		dfs_parent = NULL;
 4637 	}
 4638 	if (dfs_parent) {
 4639 		dfs_device_status = debugfs_create_file("device_status",
 4640 					S_IRUGO, dfs_parent, NULL,
 4641 					&mtip_device_status_fops);
 4642 		if (IS_ERR_OR_NULL(dfs_device_status)) {
 4643 			pr_err("Error creating device_status node\n");
 4644 			dfs_device_status = NULL;
 4645 		}
 4646 	}
 4647 
 4648 	/* Register our PCI operations. */
 4649 	error = pci_register_driver(&mtip_pci_driver);
 4650 	if (error) {
 4651 		debugfs_remove(dfs_parent);
 4652 		unregister_blkdev(mtip_major, MTIP_DRV_NAME);
 4653 	}
 4654 
 4655 	return error;
 4656 }
 4657 
 4658 /*
 4659  * Module de-initialization function.
 4660  *
 4661  * Called once when the module is unloaded. This function deallocates
 4662  * the major block device number allocated by mtip_init() and
 4663  * unregisters the PCI layer of the driver.
 4664  *
 4665  * Return value
 4666  *      none
 4667  */
 4668 static void __exit mtip_exit(void)
 4669 {
 4670 	/* Release the allocated major block device number. */
 4671 	unregister_blkdev(mtip_major, MTIP_DRV_NAME);
 4672 
 4673 	/* Unregister the PCI driver. */
 4674 	pci_unregister_driver(&mtip_pci_driver);
 4675 
 4676 	debugfs_remove_recursive(dfs_parent);
 4677 }
 4678 
 4679 MODULE_AUTHOR("Micron Technology, Inc");
 4680 MODULE_DESCRIPTION("Micron RealSSD PCIe Block Driver");
 4681 MODULE_LICENSE("GPL");
 4682 MODULE_VERSION(MTIP_DRV_VERSION);
 4683 
 4684 module_init(mtip_init);
 4685 module_exit(mtip_exit);
 4686 
 4687 
 4688 
 4689 
 4690 
 4691 /* LDV_COMMENT_BEGIN_MAIN */
 4692 #ifdef LDV_MAIN0_sequence_infinite_withcheck_stateful
 4693 
 4694 /*###########################################################################*/
 4695 
 4696 /*############## Driver Environment Generator 0.2 output ####################*/
 4697 
 4698 /*###########################################################################*/
 4699 
 4700 
 4701 
 4702 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test if all kernel resources are correctly released by driver before driver will be unloaded. */
 4703 void ldv_check_final_state(void);
 4704 
 4705 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result. */
 4706 void ldv_check_return_value(int res);
 4707 
 4708 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result of probe() function. */
 4709 void ldv_check_return_value_probe(int res);
 4710 
 4711 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Initializes the model. */
 4712 void ldv_initialize(void);
 4713 
 4714 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Reinitializes the model between distinct model function calls. */
 4715 void ldv_handler_precall(void);
 4716 
 4717 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Returns arbitrary interger value. */
 4718 int nondet_int(void);
 4719 
 4720 /* LDV_COMMENT_VAR_DECLARE_LDV Special variable for LDV verifier. */
 4721 int LDV_IN_INTERRUPT;
 4722 
 4723 /* LDV_COMMENT_FUNCTION_MAIN Main function for LDV verifier. */
 4724 void ldv_main0_sequence_infinite_withcheck_stateful(void) {
 4725 
 4726 
 4727 
 4728 	/* LDV_COMMENT_BEGIN_VARIABLE_DECLARATION_PART */
 4729 	/*============================= VARIABLE DECLARATION PART   =============================*/
 4730 	/** STRUCT: struct type: file_operations, struct name: mtip_device_status_fops **/
 4731 	/* content: static ssize_t mtip_hw_read_device_status(struct file *f, char __user *ubuf, size_t len, loff_t *offset)*/
 4732 	/* LDV_COMMENT_BEGIN_PREP */
 4733 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 4734 	#define AHCI_RX_FIS_SZ          0x100
 4735 	#define AHCI_RX_FIS_OFFSET      0x0
 4736 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 4737 	#define AHCI_IDFY_OFFSET        0x400
 4738 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 4739 	#define AHCI_SECTBUF_OFFSET     0x800
 4740 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 4741 	#define AHCI_SMARTBUF_OFFSET    0xC00
 4742 	#define BLOCK_DMA_ALLOC_SZ      4096
 4743 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 4744 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 4745 	#define AHCI_CMD_TBL_OFFSET     0x0
 4746 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 4747 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 4748 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 4749 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 4750 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 4751 	#define HOST_CAP_NZDMA		(1 << 19)
 4752 	#define HOST_HSORG		0xFC
 4753 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 4754 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 4755 	#define HSORG_HWREV		0xFF00
 4756 	#define HSORG_STYLE		0x8
 4757 	#define HSORG_SLOTGROUPS	0x7
 4758 	#define PORT_COMMAND_ISSUE	0x38
 4759 	#define PORT_SDBV		0x7C
 4760 	#define PORT_OFFSET		0x100
 4761 	#define PORT_MEM_SIZE		0x80
 4762 	#define PORT_IRQ_ERR \
 4763 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 4764 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 4765 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 4766 	 PORT_IRQ_OVERFLOW)
 4767 	#define PORT_IRQ_LEGACY \
 4768 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 4769 	#define PORT_IRQ_HANDLED \
 4770 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 4771 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 4772 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 4773 	#define DEF_PORT_IRQ \
 4774 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 4775 	#define MTIP_PRODUCT_UNKNOWN	0x00
 4776 	#define MTIP_PRODUCT_ASICFPGA	0x11
 4777 	#ifdef CONFIG_COMPAT
 4778 	#endif
 4779 	#ifdef __LITTLE_ENDIAN
 4780 	#else
 4781 	#endif
 4782 	#ifdef MTIP_TRIM 
 4783 	#endif
 4784 	/* LDV_COMMENT_END_PREP */
 4785 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_hw_read_device_status" */
 4786 	struct file * var_group1;
 4787 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_hw_read_device_status" */
 4788 	char __user * var_mtip_hw_read_device_status_47_p1;
 4789 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_hw_read_device_status" */
 4790 	size_t  var_mtip_hw_read_device_status_47_p2;
 4791 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_hw_read_device_status" */
 4792 	loff_t * var_mtip_hw_read_device_status_47_p3;
 4793 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "mtip_hw_read_device_status" */
 4794 	static ssize_t res_mtip_hw_read_device_status_47;
 4795 	/* LDV_COMMENT_BEGIN_PREP */
 4796 	#ifdef CONFIG_COMPAT
 4797 	#endif
 4798 	#ifdef CONFIG_COMPAT
 4799 	#endif
 4800 	/* LDV_COMMENT_END_PREP */
 4801 
 4802 	/** STRUCT: struct type: file_operations, struct name: mtip_regs_fops **/
 4803 	/* content: static ssize_t mtip_hw_read_registers(struct file *f, char __user *ubuf, size_t len, loff_t *offset)*/
 4804 	/* LDV_COMMENT_BEGIN_PREP */
 4805 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 4806 	#define AHCI_RX_FIS_SZ          0x100
 4807 	#define AHCI_RX_FIS_OFFSET      0x0
 4808 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 4809 	#define AHCI_IDFY_OFFSET        0x400
 4810 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 4811 	#define AHCI_SECTBUF_OFFSET     0x800
 4812 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 4813 	#define AHCI_SMARTBUF_OFFSET    0xC00
 4814 	#define BLOCK_DMA_ALLOC_SZ      4096
 4815 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 4816 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 4817 	#define AHCI_CMD_TBL_OFFSET     0x0
 4818 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 4819 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 4820 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 4821 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 4822 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 4823 	#define HOST_CAP_NZDMA		(1 << 19)
 4824 	#define HOST_HSORG		0xFC
 4825 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 4826 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 4827 	#define HSORG_HWREV		0xFF00
 4828 	#define HSORG_STYLE		0x8
 4829 	#define HSORG_SLOTGROUPS	0x7
 4830 	#define PORT_COMMAND_ISSUE	0x38
 4831 	#define PORT_SDBV		0x7C
 4832 	#define PORT_OFFSET		0x100
 4833 	#define PORT_MEM_SIZE		0x80
 4834 	#define PORT_IRQ_ERR \
 4835 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 4836 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 4837 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 4838 	 PORT_IRQ_OVERFLOW)
 4839 	#define PORT_IRQ_LEGACY \
 4840 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 4841 	#define PORT_IRQ_HANDLED \
 4842 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 4843 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 4844 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 4845 	#define DEF_PORT_IRQ \
 4846 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 4847 	#define MTIP_PRODUCT_UNKNOWN	0x00
 4848 	#define MTIP_PRODUCT_ASICFPGA	0x11
 4849 	#ifdef CONFIG_COMPAT
 4850 	#endif
 4851 	#ifdef __LITTLE_ENDIAN
 4852 	#else
 4853 	#endif
 4854 	#ifdef MTIP_TRIM 
 4855 	#endif
 4856 	/* LDV_COMMENT_END_PREP */
 4857 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_hw_read_registers" */
 4858 	char __user * var_mtip_hw_read_registers_48_p1;
 4859 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_hw_read_registers" */
 4860 	size_t  var_mtip_hw_read_registers_48_p2;
 4861 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_hw_read_registers" */
 4862 	loff_t * var_mtip_hw_read_registers_48_p3;
 4863 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "mtip_hw_read_registers" */
 4864 	static ssize_t res_mtip_hw_read_registers_48;
 4865 	/* LDV_COMMENT_BEGIN_PREP */
 4866 	#ifdef CONFIG_COMPAT
 4867 	#endif
 4868 	#ifdef CONFIG_COMPAT
 4869 	#endif
 4870 	/* LDV_COMMENT_END_PREP */
 4871 
 4872 	/** STRUCT: struct type: file_operations, struct name: mtip_flags_fops **/
 4873 	/* content: static ssize_t mtip_hw_read_flags(struct file *f, char __user *ubuf, size_t len, loff_t *offset)*/
 4874 	/* LDV_COMMENT_BEGIN_PREP */
 4875 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 4876 	#define AHCI_RX_FIS_SZ          0x100
 4877 	#define AHCI_RX_FIS_OFFSET      0x0
 4878 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 4879 	#define AHCI_IDFY_OFFSET        0x400
 4880 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 4881 	#define AHCI_SECTBUF_OFFSET     0x800
 4882 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 4883 	#define AHCI_SMARTBUF_OFFSET    0xC00
 4884 	#define BLOCK_DMA_ALLOC_SZ      4096
 4885 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 4886 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 4887 	#define AHCI_CMD_TBL_OFFSET     0x0
 4888 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 4889 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 4890 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 4891 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 4892 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 4893 	#define HOST_CAP_NZDMA		(1 << 19)
 4894 	#define HOST_HSORG		0xFC
 4895 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 4896 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 4897 	#define HSORG_HWREV		0xFF00
 4898 	#define HSORG_STYLE		0x8
 4899 	#define HSORG_SLOTGROUPS	0x7
 4900 	#define PORT_COMMAND_ISSUE	0x38
 4901 	#define PORT_SDBV		0x7C
 4902 	#define PORT_OFFSET		0x100
 4903 	#define PORT_MEM_SIZE		0x80
 4904 	#define PORT_IRQ_ERR \
 4905 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 4906 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 4907 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 4908 	 PORT_IRQ_OVERFLOW)
 4909 	#define PORT_IRQ_LEGACY \
 4910 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 4911 	#define PORT_IRQ_HANDLED \
 4912 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 4913 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 4914 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 4915 	#define DEF_PORT_IRQ \
 4916 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 4917 	#define MTIP_PRODUCT_UNKNOWN	0x00
 4918 	#define MTIP_PRODUCT_ASICFPGA	0x11
 4919 	#ifdef CONFIG_COMPAT
 4920 	#endif
 4921 	#ifdef __LITTLE_ENDIAN
 4922 	#else
 4923 	#endif
 4924 	#ifdef MTIP_TRIM 
 4925 	#endif
 4926 	/* LDV_COMMENT_END_PREP */
 4927 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_hw_read_flags" */
 4928 	char __user * var_mtip_hw_read_flags_49_p1;
 4929 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_hw_read_flags" */
 4930 	size_t  var_mtip_hw_read_flags_49_p2;
 4931 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_hw_read_flags" */
 4932 	loff_t * var_mtip_hw_read_flags_49_p3;
 4933 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "mtip_hw_read_flags" */
 4934 	static ssize_t res_mtip_hw_read_flags_49;
 4935 	/* LDV_COMMENT_BEGIN_PREP */
 4936 	#ifdef CONFIG_COMPAT
 4937 	#endif
 4938 	#ifdef CONFIG_COMPAT
 4939 	#endif
 4940 	/* LDV_COMMENT_END_PREP */
 4941 
 4942 	/** STRUCT: struct type: block_device_operations, struct name: mtip_block_ops **/
 4943 	/* content: static int mtip_block_ioctl(struct block_device *dev, fmode_t mode, unsigned cmd, unsigned long arg)*/
 4944 	/* LDV_COMMENT_BEGIN_PREP */
 4945 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 4946 	#define AHCI_RX_FIS_SZ          0x100
 4947 	#define AHCI_RX_FIS_OFFSET      0x0
 4948 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 4949 	#define AHCI_IDFY_OFFSET        0x400
 4950 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 4951 	#define AHCI_SECTBUF_OFFSET     0x800
 4952 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 4953 	#define AHCI_SMARTBUF_OFFSET    0xC00
 4954 	#define BLOCK_DMA_ALLOC_SZ      4096
 4955 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 4956 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 4957 	#define AHCI_CMD_TBL_OFFSET     0x0
 4958 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 4959 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 4960 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 4961 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 4962 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 4963 	#define HOST_CAP_NZDMA		(1 << 19)
 4964 	#define HOST_HSORG		0xFC
 4965 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 4966 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 4967 	#define HSORG_HWREV		0xFF00
 4968 	#define HSORG_STYLE		0x8
 4969 	#define HSORG_SLOTGROUPS	0x7
 4970 	#define PORT_COMMAND_ISSUE	0x38
 4971 	#define PORT_SDBV		0x7C
 4972 	#define PORT_OFFSET		0x100
 4973 	#define PORT_MEM_SIZE		0x80
 4974 	#define PORT_IRQ_ERR \
 4975 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 4976 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 4977 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 4978 	 PORT_IRQ_OVERFLOW)
 4979 	#define PORT_IRQ_LEGACY \
 4980 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 4981 	#define PORT_IRQ_HANDLED \
 4982 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 4983 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 4984 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 4985 	#define DEF_PORT_IRQ \
 4986 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 4987 	#define MTIP_PRODUCT_UNKNOWN	0x00
 4988 	#define MTIP_PRODUCT_ASICFPGA	0x11
 4989 	#ifdef CONFIG_COMPAT
 4990 	#endif
 4991 	#ifdef __LITTLE_ENDIAN
 4992 	#else
 4993 	#endif
 4994 	#ifdef MTIP_TRIM 
 4995 	#endif
 4996 	/* LDV_COMMENT_END_PREP */
 4997 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_block_ioctl" */
 4998 	struct block_device * var_group2;
 4999 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_block_ioctl" */
 5000 	fmode_t  var_mtip_block_ioctl_69_p1;
 5001 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_block_ioctl" */
 5002 	unsigned  var_mtip_block_ioctl_69_p2;
 5003 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_block_ioctl" */
 5004 	unsigned long  var_mtip_block_ioctl_69_p3;
 5005 	/* LDV_COMMENT_BEGIN_PREP */
 5006 	#ifdef CONFIG_COMPAT
 5007 	#endif
 5008 	#ifdef CONFIG_COMPAT
 5009 	#endif
 5010 	/* LDV_COMMENT_END_PREP */
 5011 	/* content: static int mtip_block_compat_ioctl(struct block_device *dev, fmode_t mode, unsigned cmd, unsigned long arg)*/
 5012 	/* LDV_COMMENT_BEGIN_PREP */
 5013 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5014 	#define AHCI_RX_FIS_SZ          0x100
 5015 	#define AHCI_RX_FIS_OFFSET      0x0
 5016 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5017 	#define AHCI_IDFY_OFFSET        0x400
 5018 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5019 	#define AHCI_SECTBUF_OFFSET     0x800
 5020 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5021 	#define AHCI_SMARTBUF_OFFSET    0xC00
 5022 	#define BLOCK_DMA_ALLOC_SZ      4096
 5023 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5024 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5025 	#define AHCI_CMD_TBL_OFFSET     0x0
 5026 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 5027 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5028 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5029 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5030 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5031 	#define HOST_CAP_NZDMA		(1 << 19)
 5032 	#define HOST_HSORG		0xFC
 5033 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5034 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5035 	#define HSORG_HWREV		0xFF00
 5036 	#define HSORG_STYLE		0x8
 5037 	#define HSORG_SLOTGROUPS	0x7
 5038 	#define PORT_COMMAND_ISSUE	0x38
 5039 	#define PORT_SDBV		0x7C
 5040 	#define PORT_OFFSET		0x100
 5041 	#define PORT_MEM_SIZE		0x80
 5042 	#define PORT_IRQ_ERR \
 5043 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 5044 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 5045 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 5046 	 PORT_IRQ_OVERFLOW)
 5047 	#define PORT_IRQ_LEGACY \
 5048 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 5049 	#define PORT_IRQ_HANDLED \
 5050 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 5051 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 5052 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 5053 	#define DEF_PORT_IRQ \
 5054 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 5055 	#define MTIP_PRODUCT_UNKNOWN	0x00
 5056 	#define MTIP_PRODUCT_ASICFPGA	0x11
 5057 	#ifdef CONFIG_COMPAT
 5058 	#endif
 5059 	#ifdef __LITTLE_ENDIAN
 5060 	#else
 5061 	#endif
 5062 	#ifdef MTIP_TRIM 
 5063 	#endif
 5064 	#ifdef CONFIG_COMPAT
 5065 	/* LDV_COMMENT_END_PREP */
 5066 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_block_compat_ioctl" */
 5067 	fmode_t  var_mtip_block_compat_ioctl_70_p1;
 5068 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_block_compat_ioctl" */
 5069 	unsigned  var_mtip_block_compat_ioctl_70_p2;
 5070 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_block_compat_ioctl" */
 5071 	unsigned long  var_mtip_block_compat_ioctl_70_p3;
 5072 	/* LDV_COMMENT_BEGIN_PREP */
 5073 	#endif
 5074 	#ifdef CONFIG_COMPAT
 5075 	#endif
 5076 	/* LDV_COMMENT_END_PREP */
 5077 	/* content: static int mtip_block_getgeo(struct block_device *dev, struct hd_geometry *geo)*/
 5078 	/* LDV_COMMENT_BEGIN_PREP */
 5079 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5080 	#define AHCI_RX_FIS_SZ          0x100
 5081 	#define AHCI_RX_FIS_OFFSET      0x0
 5082 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5083 	#define AHCI_IDFY_OFFSET        0x400
 5084 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5085 	#define AHCI_SECTBUF_OFFSET     0x800
 5086 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5087 	#define AHCI_SMARTBUF_OFFSET    0xC00
 5088 	#define BLOCK_DMA_ALLOC_SZ      4096
 5089 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5090 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5091 	#define AHCI_CMD_TBL_OFFSET     0x0
 5092 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 5093 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5094 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5095 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5096 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5097 	#define HOST_CAP_NZDMA		(1 << 19)
 5098 	#define HOST_HSORG		0xFC
 5099 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5100 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5101 	#define HSORG_HWREV		0xFF00
 5102 	#define HSORG_STYLE		0x8
 5103 	#define HSORG_SLOTGROUPS	0x7
 5104 	#define PORT_COMMAND_ISSUE	0x38
 5105 	#define PORT_SDBV		0x7C
 5106 	#define PORT_OFFSET		0x100
 5107 	#define PORT_MEM_SIZE		0x80
 5108 	#define PORT_IRQ_ERR \
 5109 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 5110 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 5111 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 5112 	 PORT_IRQ_OVERFLOW)
 5113 	#define PORT_IRQ_LEGACY \
 5114 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 5115 	#define PORT_IRQ_HANDLED \
 5116 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 5117 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 5118 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 5119 	#define DEF_PORT_IRQ \
 5120 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 5121 	#define MTIP_PRODUCT_UNKNOWN	0x00
 5122 	#define MTIP_PRODUCT_ASICFPGA	0x11
 5123 	#ifdef CONFIG_COMPAT
 5124 	#endif
 5125 	#ifdef __LITTLE_ENDIAN
 5126 	#else
 5127 	#endif
 5128 	#ifdef MTIP_TRIM 
 5129 	#endif
 5130 	#ifdef CONFIG_COMPAT
 5131 	#endif
 5132 	/* LDV_COMMENT_END_PREP */
 5133 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_block_getgeo" */
 5134 	struct hd_geometry * var_group3;
 5135 	/* LDV_COMMENT_BEGIN_PREP */
 5136 	#ifdef CONFIG_COMPAT
 5137 	#endif
 5138 	/* LDV_COMMENT_END_PREP */
 5139 
 5140 	/** STRUCT: struct type: blk_mq_ops, struct name: mtip_mq_ops **/
 5141 	/* content: static int mtip_queue_rq(struct blk_mq_hw_ctx *hctx, const struct blk_mq_queue_data *bd)*/
 5142 	/* LDV_COMMENT_BEGIN_PREP */
 5143 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5144 	#define AHCI_RX_FIS_SZ          0x100
 5145 	#define AHCI_RX_FIS_OFFSET      0x0
 5146 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5147 	#define AHCI_IDFY_OFFSET        0x400
 5148 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5149 	#define AHCI_SECTBUF_OFFSET     0x800
 5150 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5151 	#define AHCI_SMARTBUF_OFFSET    0xC00
 5152 	#define BLOCK_DMA_ALLOC_SZ      4096
 5153 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5154 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5155 	#define AHCI_CMD_TBL_OFFSET     0x0
 5156 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 5157 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5158 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5159 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5160 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5161 	#define HOST_CAP_NZDMA		(1 << 19)
 5162 	#define HOST_HSORG		0xFC
 5163 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5164 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5165 	#define HSORG_HWREV		0xFF00
 5166 	#define HSORG_STYLE		0x8
 5167 	#define HSORG_SLOTGROUPS	0x7
 5168 	#define PORT_COMMAND_ISSUE	0x38
 5169 	#define PORT_SDBV		0x7C
 5170 	#define PORT_OFFSET		0x100
 5171 	#define PORT_MEM_SIZE		0x80
 5172 	#define PORT_IRQ_ERR \
 5173 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 5174 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 5175 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 5176 	 PORT_IRQ_OVERFLOW)
 5177 	#define PORT_IRQ_LEGACY \
 5178 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 5179 	#define PORT_IRQ_HANDLED \
 5180 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 5181 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 5182 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 5183 	#define DEF_PORT_IRQ \
 5184 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 5185 	#define MTIP_PRODUCT_UNKNOWN	0x00
 5186 	#define MTIP_PRODUCT_ASICFPGA	0x11
 5187 	#ifdef CONFIG_COMPAT
 5188 	#endif
 5189 	#ifdef __LITTLE_ENDIAN
 5190 	#else
 5191 	#endif
 5192 	#ifdef MTIP_TRIM 
 5193 	#endif
 5194 	#ifdef CONFIG_COMPAT
 5195 	#endif
 5196 	#ifdef CONFIG_COMPAT
 5197 	#endif
 5198 	/* LDV_COMMENT_END_PREP */
 5199 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_queue_rq" */
 5200 	struct blk_mq_hw_ctx * var_group4;
 5201 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_queue_rq" */
 5202 	const struct blk_mq_queue_data * var_mtip_queue_rq_75_p1;
 5203 	/* content: static int mtip_init_cmd(void *data, struct request *rq, unsigned int hctx_idx, unsigned int request_idx, unsigned int numa_node)*/
 5204 	/* LDV_COMMENT_BEGIN_PREP */
 5205 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5206 	#define AHCI_RX_FIS_SZ          0x100
 5207 	#define AHCI_RX_FIS_OFFSET      0x0
 5208 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5209 	#define AHCI_IDFY_OFFSET        0x400
 5210 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5211 	#define AHCI_SECTBUF_OFFSET     0x800
 5212 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5213 	#define AHCI_SMARTBUF_OFFSET    0xC00
 5214 	#define BLOCK_DMA_ALLOC_SZ      4096
 5215 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5216 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5217 	#define AHCI_CMD_TBL_OFFSET     0x0
 5218 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 5219 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5220 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5221 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5222 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5223 	#define HOST_CAP_NZDMA		(1 << 19)
 5224 	#define HOST_HSORG		0xFC
 5225 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5226 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5227 	#define HSORG_HWREV		0xFF00
 5228 	#define HSORG_STYLE		0x8
 5229 	#define HSORG_SLOTGROUPS	0x7
 5230 	#define PORT_COMMAND_ISSUE	0x38
 5231 	#define PORT_SDBV		0x7C
 5232 	#define PORT_OFFSET		0x100
 5233 	#define PORT_MEM_SIZE		0x80
 5234 	#define PORT_IRQ_ERR \
 5235 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 5236 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 5237 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 5238 	 PORT_IRQ_OVERFLOW)
 5239 	#define PORT_IRQ_LEGACY \
 5240 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 5241 	#define PORT_IRQ_HANDLED \
 5242 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 5243 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 5244 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 5245 	#define DEF_PORT_IRQ \
 5246 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 5247 	#define MTIP_PRODUCT_UNKNOWN	0x00
 5248 	#define MTIP_PRODUCT_ASICFPGA	0x11
 5249 	#ifdef CONFIG_COMPAT
 5250 	#endif
 5251 	#ifdef __LITTLE_ENDIAN
 5252 	#else
 5253 	#endif
 5254 	#ifdef MTIP_TRIM 
 5255 	#endif
 5256 	#ifdef CONFIG_COMPAT
 5257 	#endif
 5258 	#ifdef CONFIG_COMPAT
 5259 	#endif
 5260 	/* LDV_COMMENT_END_PREP */
 5261 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_init_cmd" */
 5262 	void * var_mtip_init_cmd_77_p0;
 5263 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_init_cmd" */
 5264 	struct request * var_group5;
 5265 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_init_cmd" */
 5266 	unsigned int  var_mtip_init_cmd_77_p2;
 5267 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_init_cmd" */
 5268 	unsigned int  var_mtip_init_cmd_77_p3;
 5269 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_init_cmd" */
 5270 	unsigned int  var_mtip_init_cmd_77_p4;
 5271 	/* content: static void mtip_free_cmd(void *data, struct request *rq, unsigned int hctx_idx, unsigned int request_idx)*/
 5272 	/* LDV_COMMENT_BEGIN_PREP */
 5273 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5274 	#define AHCI_RX_FIS_SZ          0x100
 5275 	#define AHCI_RX_FIS_OFFSET      0x0
 5276 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5277 	#define AHCI_IDFY_OFFSET        0x400
 5278 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5279 	#define AHCI_SECTBUF_OFFSET     0x800
 5280 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5281 	#define AHCI_SMARTBUF_OFFSET    0xC00
 5282 	#define BLOCK_DMA_ALLOC_SZ      4096
 5283 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5284 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5285 	#define AHCI_CMD_TBL_OFFSET     0x0
 5286 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 5287 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5288 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5289 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5290 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5291 	#define HOST_CAP_NZDMA		(1 << 19)
 5292 	#define HOST_HSORG		0xFC
 5293 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5294 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5295 	#define HSORG_HWREV		0xFF00
 5296 	#define HSORG_STYLE		0x8
 5297 	#define HSORG_SLOTGROUPS	0x7
 5298 	#define PORT_COMMAND_ISSUE	0x38
 5299 	#define PORT_SDBV		0x7C
 5300 	#define PORT_OFFSET		0x100
 5301 	#define PORT_MEM_SIZE		0x80
 5302 	#define PORT_IRQ_ERR \
 5303 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 5304 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 5305 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 5306 	 PORT_IRQ_OVERFLOW)
 5307 	#define PORT_IRQ_LEGACY \
 5308 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 5309 	#define PORT_IRQ_HANDLED \
 5310 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 5311 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 5312 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 5313 	#define DEF_PORT_IRQ \
 5314 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 5315 	#define MTIP_PRODUCT_UNKNOWN	0x00
 5316 	#define MTIP_PRODUCT_ASICFPGA	0x11
 5317 	#ifdef CONFIG_COMPAT
 5318 	#endif
 5319 	#ifdef __LITTLE_ENDIAN
 5320 	#else
 5321 	#endif
 5322 	#ifdef MTIP_TRIM 
 5323 	#endif
 5324 	#ifdef CONFIG_COMPAT
 5325 	#endif
 5326 	#ifdef CONFIG_COMPAT
 5327 	#endif
 5328 	/* LDV_COMMENT_END_PREP */
 5329 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_free_cmd" */
 5330 	void * var_mtip_free_cmd_76_p0;
 5331 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_free_cmd" */
 5332 	unsigned int  var_mtip_free_cmd_76_p2;
 5333 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_free_cmd" */
 5334 	unsigned int  var_mtip_free_cmd_76_p3;
 5335 
 5336 	/** STRUCT: struct type: pci_driver, struct name: mtip_pci_driver **/
 5337 	/* content: static int mtip_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)*/
 5338 	/* LDV_COMMENT_BEGIN_PREP */
 5339 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5340 	#define AHCI_RX_FIS_SZ          0x100
 5341 	#define AHCI_RX_FIS_OFFSET      0x0
 5342 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5343 	#define AHCI_IDFY_OFFSET        0x400
 5344 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5345 	#define AHCI_SECTBUF_OFFSET     0x800
 5346 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5347 	#define AHCI_SMARTBUF_OFFSET    0xC00
 5348 	#define BLOCK_DMA_ALLOC_SZ      4096
 5349 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5350 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5351 	#define AHCI_CMD_TBL_OFFSET     0x0
 5352 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 5353 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5354 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5355 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5356 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5357 	#define HOST_CAP_NZDMA		(1 << 19)
 5358 	#define HOST_HSORG		0xFC
 5359 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5360 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5361 	#define HSORG_HWREV		0xFF00
 5362 	#define HSORG_STYLE		0x8
 5363 	#define HSORG_SLOTGROUPS	0x7
 5364 	#define PORT_COMMAND_ISSUE	0x38
 5365 	#define PORT_SDBV		0x7C
 5366 	#define PORT_OFFSET		0x100
 5367 	#define PORT_MEM_SIZE		0x80
 5368 	#define PORT_IRQ_ERR \
 5369 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 5370 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 5371 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 5372 	 PORT_IRQ_OVERFLOW)
 5373 	#define PORT_IRQ_LEGACY \
 5374 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 5375 	#define PORT_IRQ_HANDLED \
 5376 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 5377 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 5378 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 5379 	#define DEF_PORT_IRQ \
 5380 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 5381 	#define MTIP_PRODUCT_UNKNOWN	0x00
 5382 	#define MTIP_PRODUCT_ASICFPGA	0x11
 5383 	#ifdef CONFIG_COMPAT
 5384 	#endif
 5385 	#ifdef __LITTLE_ENDIAN
 5386 	#else
 5387 	#endif
 5388 	#ifdef MTIP_TRIM 
 5389 	#endif
 5390 	#ifdef CONFIG_COMPAT
 5391 	#endif
 5392 	#ifdef CONFIG_COMPAT
 5393 	#endif
 5394 	/* LDV_COMMENT_END_PREP */
 5395 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_pci_probe" */
 5396 	struct pci_dev * var_group6;
 5397 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_pci_probe" */
 5398 	const struct pci_device_id * var_mtip_pci_probe_88_p1;
 5399 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "mtip_pci_probe" */
 5400 	static int res_mtip_pci_probe_88;
 5401 	/* content: static void mtip_pci_remove(struct pci_dev *pdev)*/
 5402 	/* LDV_COMMENT_BEGIN_PREP */
 5403 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5404 	#define AHCI_RX_FIS_SZ          0x100
 5405 	#define AHCI_RX_FIS_OFFSET      0x0
 5406 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5407 	#define AHCI_IDFY_OFFSET        0x400
 5408 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5409 	#define AHCI_SECTBUF_OFFSET     0x800
 5410 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5411 	#define AHCI_SMARTBUF_OFFSET    0xC00
 5412 	#define BLOCK_DMA_ALLOC_SZ      4096
 5413 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5414 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5415 	#define AHCI_CMD_TBL_OFFSET     0x0
 5416 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 5417 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5418 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5419 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5420 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5421 	#define HOST_CAP_NZDMA		(1 << 19)
 5422 	#define HOST_HSORG		0xFC
 5423 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5424 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5425 	#define HSORG_HWREV		0xFF00
 5426 	#define HSORG_STYLE		0x8
 5427 	#define HSORG_SLOTGROUPS	0x7
 5428 	#define PORT_COMMAND_ISSUE	0x38
 5429 	#define PORT_SDBV		0x7C
 5430 	#define PORT_OFFSET		0x100
 5431 	#define PORT_MEM_SIZE		0x80
 5432 	#define PORT_IRQ_ERR \
 5433 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 5434 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 5435 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 5436 	 PORT_IRQ_OVERFLOW)
 5437 	#define PORT_IRQ_LEGACY \
 5438 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 5439 	#define PORT_IRQ_HANDLED \
 5440 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 5441 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 5442 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 5443 	#define DEF_PORT_IRQ \
 5444 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 5445 	#define MTIP_PRODUCT_UNKNOWN	0x00
 5446 	#define MTIP_PRODUCT_ASICFPGA	0x11
 5447 	#ifdef CONFIG_COMPAT
 5448 	#endif
 5449 	#ifdef __LITTLE_ENDIAN
 5450 	#else
 5451 	#endif
 5452 	#ifdef MTIP_TRIM 
 5453 	#endif
 5454 	#ifdef CONFIG_COMPAT
 5455 	#endif
 5456 	#ifdef CONFIG_COMPAT
 5457 	#endif
 5458 	/* LDV_COMMENT_END_PREP */
 5459 	/* content: static int mtip_pci_suspend(struct pci_dev *pdev, pm_message_t mesg)*/
 5460 	/* LDV_COMMENT_BEGIN_PREP */
 5461 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5462 	#define AHCI_RX_FIS_SZ          0x100
 5463 	#define AHCI_RX_FIS_OFFSET      0x0
 5464 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5465 	#define AHCI_IDFY_OFFSET        0x400
 5466 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5467 	#define AHCI_SECTBUF_OFFSET     0x800
 5468 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5469 	#define AHCI_SMARTBUF_OFFSET    0xC00
 5470 	#define BLOCK_DMA_ALLOC_SZ      4096
 5471 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5472 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5473 	#define AHCI_CMD_TBL_OFFSET     0x0
 5474 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 5475 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5476 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5477 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5478 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5479 	#define HOST_CAP_NZDMA		(1 << 19)
 5480 	#define HOST_HSORG		0xFC
 5481 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5482 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5483 	#define HSORG_HWREV		0xFF00
 5484 	#define HSORG_STYLE		0x8
 5485 	#define HSORG_SLOTGROUPS	0x7
 5486 	#define PORT_COMMAND_ISSUE	0x38
 5487 	#define PORT_SDBV		0x7C
 5488 	#define PORT_OFFSET		0x100
 5489 	#define PORT_MEM_SIZE		0x80
 5490 	#define PORT_IRQ_ERR \
 5491 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 5492 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 5493 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 5494 	 PORT_IRQ_OVERFLOW)
 5495 	#define PORT_IRQ_LEGACY \
 5496 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 5497 	#define PORT_IRQ_HANDLED \
 5498 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 5499 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 5500 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 5501 	#define DEF_PORT_IRQ \
 5502 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 5503 	#define MTIP_PRODUCT_UNKNOWN	0x00
 5504 	#define MTIP_PRODUCT_ASICFPGA	0x11
 5505 	#ifdef CONFIG_COMPAT
 5506 	#endif
 5507 	#ifdef __LITTLE_ENDIAN
 5508 	#else
 5509 	#endif
 5510 	#ifdef MTIP_TRIM 
 5511 	#endif
 5512 	#ifdef CONFIG_COMPAT
 5513 	#endif
 5514 	#ifdef CONFIG_COMPAT
 5515 	#endif
 5516 	/* LDV_COMMENT_END_PREP */
 5517 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_pci_suspend" */
 5518 	pm_message_t  var_mtip_pci_suspend_90_p1;
 5519 	/* content: static int mtip_pci_resume(struct pci_dev *pdev)*/
 5520 	/* LDV_COMMENT_BEGIN_PREP */
 5521 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5522 	#define AHCI_RX_FIS_SZ          0x100
 5523 	#define AHCI_RX_FIS_OFFSET      0x0
 5524 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5525 	#define AHCI_IDFY_OFFSET        0x400
 5526 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5527 	#define AHCI_SECTBUF_OFFSET     0x800
 5528 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5529 	#define AHCI_SMARTBUF_OFFSET    0xC00
 5530 	#define BLOCK_DMA_ALLOC_SZ      4096
 5531 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5532 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5533 	#define AHCI_CMD_TBL_OFFSET     0x0
 5534 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 5535 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5536 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5537 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5538 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5539 	#define HOST_CAP_NZDMA		(1 << 19)
 5540 	#define HOST_HSORG		0xFC
 5541 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5542 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5543 	#define HSORG_HWREV		0xFF00
 5544 	#define HSORG_STYLE		0x8
 5545 	#define HSORG_SLOTGROUPS	0x7
 5546 	#define PORT_COMMAND_ISSUE	0x38
 5547 	#define PORT_SDBV		0x7C
 5548 	#define PORT_OFFSET		0x100
 5549 	#define PORT_MEM_SIZE		0x80
 5550 	#define PORT_IRQ_ERR \
 5551 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 5552 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 5553 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 5554 	 PORT_IRQ_OVERFLOW)
 5555 	#define PORT_IRQ_LEGACY \
 5556 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 5557 	#define PORT_IRQ_HANDLED \
 5558 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 5559 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 5560 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 5561 	#define DEF_PORT_IRQ \
 5562 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 5563 	#define MTIP_PRODUCT_UNKNOWN	0x00
 5564 	#define MTIP_PRODUCT_ASICFPGA	0x11
 5565 	#ifdef CONFIG_COMPAT
 5566 	#endif
 5567 	#ifdef __LITTLE_ENDIAN
 5568 	#else
 5569 	#endif
 5570 	#ifdef MTIP_TRIM 
 5571 	#endif
 5572 	#ifdef CONFIG_COMPAT
 5573 	#endif
 5574 	#ifdef CONFIG_COMPAT
 5575 	#endif
 5576 	/* LDV_COMMENT_END_PREP */
 5577 	/* content: static void mtip_pci_shutdown(struct pci_dev *pdev)*/
 5578 	/* LDV_COMMENT_BEGIN_PREP */
 5579 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5580 	#define AHCI_RX_FIS_SZ          0x100
 5581 	#define AHCI_RX_FIS_OFFSET      0x0
 5582 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5583 	#define AHCI_IDFY_OFFSET        0x400
 5584 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5585 	#define AHCI_SECTBUF_OFFSET     0x800
 5586 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5587 	#define AHCI_SMARTBUF_OFFSET    0xC00
 5588 	#define BLOCK_DMA_ALLOC_SZ      4096
 5589 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5590 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5591 	#define AHCI_CMD_TBL_OFFSET     0x0
 5592 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 5593 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5594 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5595 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5596 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5597 	#define HOST_CAP_NZDMA		(1 << 19)
 5598 	#define HOST_HSORG		0xFC
 5599 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5600 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5601 	#define HSORG_HWREV		0xFF00
 5602 	#define HSORG_STYLE		0x8
 5603 	#define HSORG_SLOTGROUPS	0x7
 5604 	#define PORT_COMMAND_ISSUE	0x38
 5605 	#define PORT_SDBV		0x7C
 5606 	#define PORT_OFFSET		0x100
 5607 	#define PORT_MEM_SIZE		0x80
 5608 	#define PORT_IRQ_ERR \
 5609 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 5610 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 5611 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 5612 	 PORT_IRQ_OVERFLOW)
 5613 	#define PORT_IRQ_LEGACY \
 5614 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 5615 	#define PORT_IRQ_HANDLED \
 5616 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 5617 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 5618 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 5619 	#define DEF_PORT_IRQ \
 5620 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 5621 	#define MTIP_PRODUCT_UNKNOWN	0x00
 5622 	#define MTIP_PRODUCT_ASICFPGA	0x11
 5623 	#ifdef CONFIG_COMPAT
 5624 	#endif
 5625 	#ifdef __LITTLE_ENDIAN
 5626 	#else
 5627 	#endif
 5628 	#ifdef MTIP_TRIM 
 5629 	#endif
 5630 	#ifdef CONFIG_COMPAT
 5631 	#endif
 5632 	#ifdef CONFIG_COMPAT
 5633 	#endif
 5634 	/* LDV_COMMENT_END_PREP */
 5635 
 5636 	/** CALLBACK SECTION request_irq **/
 5637 	/* content: static irqreturn_t mtip_irq_handler(int irq, void *instance)*/
 5638 	/* LDV_COMMENT_BEGIN_PREP */
 5639 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5640 	#define AHCI_RX_FIS_SZ          0x100
 5641 	#define AHCI_RX_FIS_OFFSET      0x0
 5642 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5643 	#define AHCI_IDFY_OFFSET        0x400
 5644 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5645 	#define AHCI_SECTBUF_OFFSET     0x800
 5646 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5647 	#define AHCI_SMARTBUF_OFFSET    0xC00
 5648 	#define BLOCK_DMA_ALLOC_SZ      4096
 5649 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5650 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5651 	#define AHCI_CMD_TBL_OFFSET     0x0
 5652 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 5653 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5654 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5655 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5656 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5657 	#define HOST_CAP_NZDMA		(1 << 19)
 5658 	#define HOST_HSORG		0xFC
 5659 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5660 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5661 	#define HSORG_HWREV		0xFF00
 5662 	#define HSORG_STYLE		0x8
 5663 	#define HSORG_SLOTGROUPS	0x7
 5664 	#define PORT_COMMAND_ISSUE	0x38
 5665 	#define PORT_SDBV		0x7C
 5666 	#define PORT_OFFSET		0x100
 5667 	#define PORT_MEM_SIZE		0x80
 5668 	#define PORT_IRQ_ERR \
 5669 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 5670 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 5671 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 5672 	 PORT_IRQ_OVERFLOW)
 5673 	#define PORT_IRQ_LEGACY \
 5674 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 5675 	#define PORT_IRQ_HANDLED \
 5676 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 5677 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 5678 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 5679 	#define DEF_PORT_IRQ \
 5680 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 5681 	#define MTIP_PRODUCT_UNKNOWN	0x00
 5682 	#define MTIP_PRODUCT_ASICFPGA	0x11
 5683 	#ifdef CONFIG_COMPAT
 5684 	#endif
 5685 	/* LDV_COMMENT_END_PREP */
 5686 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_irq_handler" */
 5687 	int  var_mtip_irq_handler_23_p0;
 5688 	/* LDV_COMMENT_VAR_DECLARE Variable declaration for function "mtip_irq_handler" */
 5689 	void * var_mtip_irq_handler_23_p1;
 5690 	/* LDV_COMMENT_BEGIN_PREP */
 5691 	#ifdef __LITTLE_ENDIAN
 5692 	#else
 5693 	#endif
 5694 	#ifdef MTIP_TRIM 
 5695 	#endif
 5696 	#ifdef CONFIG_COMPAT
 5697 	#endif
 5698 	#ifdef CONFIG_COMPAT
 5699 	#endif
 5700 	/* LDV_COMMENT_END_PREP */
 5701 
 5702 
 5703 
 5704 
 5705 	/* LDV_COMMENT_END_VARIABLE_DECLARATION_PART */
 5706 	/* LDV_COMMENT_BEGIN_VARIABLE_INITIALIZING_PART */
 5707 	/*============================= VARIABLE INITIALIZING PART  =============================*/
 5708 	LDV_IN_INTERRUPT=1;
 5709 
 5710 
 5711 
 5712 
 5713 	/* LDV_COMMENT_END_VARIABLE_INITIALIZING_PART */
 5714 	/* LDV_COMMENT_BEGIN_FUNCTION_CALL_SECTION */
 5715 	/*============================= FUNCTION CALL SECTION       =============================*/
 5716 	/* LDV_COMMENT_FUNCTION_CALL Initialize LDV model. */
 5717 	ldv_initialize();
 5718 
 5719 	/** INIT: init_type: ST_MODULE_INIT **/
 5720 	/* content: static int __init mtip_init(void)*/
 5721 	/* LDV_COMMENT_BEGIN_PREP */
 5722 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5723 	#define AHCI_RX_FIS_SZ          0x100
 5724 	#define AHCI_RX_FIS_OFFSET      0x0
 5725 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5726 	#define AHCI_IDFY_OFFSET        0x400
 5727 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5728 	#define AHCI_SECTBUF_OFFSET     0x800
 5729 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5730 	#define AHCI_SMARTBUF_OFFSET    0xC00
 5731 	#define BLOCK_DMA_ALLOC_SZ      4096
 5732 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5733 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5734 	#define AHCI_CMD_TBL_OFFSET     0x0
 5735 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 5736 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5737 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5738 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5739 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5740 	#define HOST_CAP_NZDMA		(1 << 19)
 5741 	#define HOST_HSORG		0xFC
 5742 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5743 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5744 	#define HSORG_HWREV		0xFF00
 5745 	#define HSORG_STYLE		0x8
 5746 	#define HSORG_SLOTGROUPS	0x7
 5747 	#define PORT_COMMAND_ISSUE	0x38
 5748 	#define PORT_SDBV		0x7C
 5749 	#define PORT_OFFSET		0x100
 5750 	#define PORT_MEM_SIZE		0x80
 5751 	#define PORT_IRQ_ERR \
 5752 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 5753 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 5754 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 5755 	 PORT_IRQ_OVERFLOW)
 5756 	#define PORT_IRQ_LEGACY \
 5757 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 5758 	#define PORT_IRQ_HANDLED \
 5759 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 5760 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 5761 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 5762 	#define DEF_PORT_IRQ \
 5763 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 5764 	#define MTIP_PRODUCT_UNKNOWN	0x00
 5765 	#define MTIP_PRODUCT_ASICFPGA	0x11
 5766 	#ifdef CONFIG_COMPAT
 5767 	#endif
 5768 	#ifdef __LITTLE_ENDIAN
 5769 	#else
 5770 	#endif
 5771 	#ifdef MTIP_TRIM 
 5772 	#endif
 5773 	#ifdef CONFIG_COMPAT
 5774 	#endif
 5775 	#ifdef CONFIG_COMPAT
 5776 	#endif
 5777 	/* LDV_COMMENT_END_PREP */
 5778 	/* LDV_COMMENT_FUNCTION_CALL Kernel calls driver init function after driver loading to kernel. This function declared as "MODULE_INIT(function name)". */
 5779 	ldv_handler_precall();
 5780 	 if(mtip_init()) 
 5781 		goto ldv_final;
 5782 	int ldv_s_mtip_device_status_fops_file_operations = 0;
 5783 
 5784 	int ldv_s_mtip_regs_fops_file_operations = 0;
 5785 
 5786 	int ldv_s_mtip_flags_fops_file_operations = 0;
 5787 
 5788 	
 5789 
 5790 	
 5791 
 5792 	int ldv_s_mtip_pci_driver_pci_driver = 0;
 5793 	
 5794 
 5795 	
 5796 
 5797 
 5798 	while(  nondet_int()
 5799 		|| !(ldv_s_mtip_device_status_fops_file_operations == 0)
 5800 		|| !(ldv_s_mtip_regs_fops_file_operations == 0)
 5801 		|| !(ldv_s_mtip_flags_fops_file_operations == 0)
 5802 		|| !(ldv_s_mtip_pci_driver_pci_driver == 0)
 5803 	) {
 5804 
 5805 		switch(nondet_int()) {
 5806 
 5807 			case 0: {
 5808 
 5809 				/** STRUCT: struct type: file_operations, struct name: mtip_device_status_fops **/
 5810 				if(ldv_s_mtip_device_status_fops_file_operations==0) {
 5811 
 5812 				/* content: static ssize_t mtip_hw_read_device_status(struct file *f, char __user *ubuf, size_t len, loff_t *offset)*/
 5813 				/* LDV_COMMENT_BEGIN_PREP */
 5814 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5815 				#define AHCI_RX_FIS_SZ          0x100
 5816 				#define AHCI_RX_FIS_OFFSET      0x0
 5817 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5818 				#define AHCI_IDFY_OFFSET        0x400
 5819 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5820 				#define AHCI_SECTBUF_OFFSET     0x800
 5821 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5822 				#define AHCI_SMARTBUF_OFFSET    0xC00
 5823 				#define BLOCK_DMA_ALLOC_SZ      4096
 5824 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5825 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5826 				#define AHCI_CMD_TBL_OFFSET     0x0
 5827 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 5828 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5829 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5830 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5831 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5832 				#define HOST_CAP_NZDMA		(1 << 19)
 5833 				#define HOST_HSORG		0xFC
 5834 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5835 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5836 				#define HSORG_HWREV		0xFF00
 5837 				#define HSORG_STYLE		0x8
 5838 				#define HSORG_SLOTGROUPS	0x7
 5839 				#define PORT_COMMAND_ISSUE	0x38
 5840 				#define PORT_SDBV		0x7C
 5841 				#define PORT_OFFSET		0x100
 5842 				#define PORT_MEM_SIZE		0x80
 5843 				#define PORT_IRQ_ERR \
 5844 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 5845 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 5846 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 5847 	 PORT_IRQ_OVERFLOW)
 5848 				#define PORT_IRQ_LEGACY \
 5849 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 5850 				#define PORT_IRQ_HANDLED \
 5851 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 5852 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 5853 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 5854 				#define DEF_PORT_IRQ \
 5855 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 5856 				#define MTIP_PRODUCT_UNKNOWN	0x00
 5857 				#define MTIP_PRODUCT_ASICFPGA	0x11
 5858 				#ifdef CONFIG_COMPAT
 5859 				#endif
 5860 				#ifdef __LITTLE_ENDIAN
 5861 				#else
 5862 				#endif
 5863 				#ifdef MTIP_TRIM 
 5864 				#endif
 5865 				/* LDV_COMMENT_END_PREP */
 5866 				/* LDV_COMMENT_FUNCTION_CALL Function from field "read" from driver structure with callbacks "mtip_device_status_fops". Standart function test for correct return result. */
 5867 				ldv_handler_precall();
 5868 				res_mtip_hw_read_device_status_47 = mtip_hw_read_device_status( var_group1, var_mtip_hw_read_device_status_47_p1, var_mtip_hw_read_device_status_47_p2, var_mtip_hw_read_device_status_47_p3);
 5869 				 ldv_check_return_value(res_mtip_hw_read_device_status_47);
 5870 				 if(res_mtip_hw_read_device_status_47 < 0) 
 5871 					goto ldv_module_exit;
 5872 				/* LDV_COMMENT_BEGIN_PREP */
 5873 				#ifdef CONFIG_COMPAT
 5874 				#endif
 5875 				#ifdef CONFIG_COMPAT
 5876 				#endif
 5877 				/* LDV_COMMENT_END_PREP */
 5878 				ldv_s_mtip_device_status_fops_file_operations=0;
 5879 
 5880 				}
 5881 
 5882 			}
 5883 
 5884 			break;
 5885 			case 1: {
 5886 
 5887 				/** STRUCT: struct type: file_operations, struct name: mtip_regs_fops **/
 5888 				if(ldv_s_mtip_regs_fops_file_operations==0) {
 5889 
 5890 				/* content: static ssize_t mtip_hw_read_registers(struct file *f, char __user *ubuf, size_t len, loff_t *offset)*/
 5891 				/* LDV_COMMENT_BEGIN_PREP */
 5892 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5893 				#define AHCI_RX_FIS_SZ          0x100
 5894 				#define AHCI_RX_FIS_OFFSET      0x0
 5895 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5896 				#define AHCI_IDFY_OFFSET        0x400
 5897 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5898 				#define AHCI_SECTBUF_OFFSET     0x800
 5899 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5900 				#define AHCI_SMARTBUF_OFFSET    0xC00
 5901 				#define BLOCK_DMA_ALLOC_SZ      4096
 5902 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5903 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5904 				#define AHCI_CMD_TBL_OFFSET     0x0
 5905 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 5906 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5907 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5908 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5909 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5910 				#define HOST_CAP_NZDMA		(1 << 19)
 5911 				#define HOST_HSORG		0xFC
 5912 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5913 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5914 				#define HSORG_HWREV		0xFF00
 5915 				#define HSORG_STYLE		0x8
 5916 				#define HSORG_SLOTGROUPS	0x7
 5917 				#define PORT_COMMAND_ISSUE	0x38
 5918 				#define PORT_SDBV		0x7C
 5919 				#define PORT_OFFSET		0x100
 5920 				#define PORT_MEM_SIZE		0x80
 5921 				#define PORT_IRQ_ERR \
 5922 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 5923 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 5924 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 5925 	 PORT_IRQ_OVERFLOW)
 5926 				#define PORT_IRQ_LEGACY \
 5927 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 5928 				#define PORT_IRQ_HANDLED \
 5929 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 5930 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 5931 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 5932 				#define DEF_PORT_IRQ \
 5933 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 5934 				#define MTIP_PRODUCT_UNKNOWN	0x00
 5935 				#define MTIP_PRODUCT_ASICFPGA	0x11
 5936 				#ifdef CONFIG_COMPAT
 5937 				#endif
 5938 				#ifdef __LITTLE_ENDIAN
 5939 				#else
 5940 				#endif
 5941 				#ifdef MTIP_TRIM 
 5942 				#endif
 5943 				/* LDV_COMMENT_END_PREP */
 5944 				/* LDV_COMMENT_FUNCTION_CALL Function from field "read" from driver structure with callbacks "mtip_regs_fops". Standart function test for correct return result. */
 5945 				ldv_handler_precall();
 5946 				res_mtip_hw_read_registers_48 = mtip_hw_read_registers( var_group1, var_mtip_hw_read_registers_48_p1, var_mtip_hw_read_registers_48_p2, var_mtip_hw_read_registers_48_p3);
 5947 				 ldv_check_return_value(res_mtip_hw_read_registers_48);
 5948 				 if(res_mtip_hw_read_registers_48 < 0) 
 5949 					goto ldv_module_exit;
 5950 				/* LDV_COMMENT_BEGIN_PREP */
 5951 				#ifdef CONFIG_COMPAT
 5952 				#endif
 5953 				#ifdef CONFIG_COMPAT
 5954 				#endif
 5955 				/* LDV_COMMENT_END_PREP */
 5956 				ldv_s_mtip_regs_fops_file_operations=0;
 5957 
 5958 				}
 5959 
 5960 			}
 5961 
 5962 			break;
 5963 			case 2: {
 5964 
 5965 				/** STRUCT: struct type: file_operations, struct name: mtip_flags_fops **/
 5966 				if(ldv_s_mtip_flags_fops_file_operations==0) {
 5967 
 5968 				/* content: static ssize_t mtip_hw_read_flags(struct file *f, char __user *ubuf, size_t len, loff_t *offset)*/
 5969 				/* LDV_COMMENT_BEGIN_PREP */
 5970 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 5971 				#define AHCI_RX_FIS_SZ          0x100
 5972 				#define AHCI_RX_FIS_OFFSET      0x0
 5973 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 5974 				#define AHCI_IDFY_OFFSET        0x400
 5975 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 5976 				#define AHCI_SECTBUF_OFFSET     0x800
 5977 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 5978 				#define AHCI_SMARTBUF_OFFSET    0xC00
 5979 				#define BLOCK_DMA_ALLOC_SZ      4096
 5980 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 5981 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 5982 				#define AHCI_CMD_TBL_OFFSET     0x0
 5983 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 5984 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 5985 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 5986 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 5987 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 5988 				#define HOST_CAP_NZDMA		(1 << 19)
 5989 				#define HOST_HSORG		0xFC
 5990 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 5991 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 5992 				#define HSORG_HWREV		0xFF00
 5993 				#define HSORG_STYLE		0x8
 5994 				#define HSORG_SLOTGROUPS	0x7
 5995 				#define PORT_COMMAND_ISSUE	0x38
 5996 				#define PORT_SDBV		0x7C
 5997 				#define PORT_OFFSET		0x100
 5998 				#define PORT_MEM_SIZE		0x80
 5999 				#define PORT_IRQ_ERR \
 6000 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 6001 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 6002 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 6003 	 PORT_IRQ_OVERFLOW)
 6004 				#define PORT_IRQ_LEGACY \
 6005 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 6006 				#define PORT_IRQ_HANDLED \
 6007 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 6008 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 6009 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 6010 				#define DEF_PORT_IRQ \
 6011 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 6012 				#define MTIP_PRODUCT_UNKNOWN	0x00
 6013 				#define MTIP_PRODUCT_ASICFPGA	0x11
 6014 				#ifdef CONFIG_COMPAT
 6015 				#endif
 6016 				#ifdef __LITTLE_ENDIAN
 6017 				#else
 6018 				#endif
 6019 				#ifdef MTIP_TRIM 
 6020 				#endif
 6021 				/* LDV_COMMENT_END_PREP */
 6022 				/* LDV_COMMENT_FUNCTION_CALL Function from field "read" from driver structure with callbacks "mtip_flags_fops". Standart function test for correct return result. */
 6023 				ldv_handler_precall();
 6024 				res_mtip_hw_read_flags_49 = mtip_hw_read_flags( var_group1, var_mtip_hw_read_flags_49_p1, var_mtip_hw_read_flags_49_p2, var_mtip_hw_read_flags_49_p3);
 6025 				 ldv_check_return_value(res_mtip_hw_read_flags_49);
 6026 				 if(res_mtip_hw_read_flags_49 < 0) 
 6027 					goto ldv_module_exit;
 6028 				/* LDV_COMMENT_BEGIN_PREP */
 6029 				#ifdef CONFIG_COMPAT
 6030 				#endif
 6031 				#ifdef CONFIG_COMPAT
 6032 				#endif
 6033 				/* LDV_COMMENT_END_PREP */
 6034 				ldv_s_mtip_flags_fops_file_operations=0;
 6035 
 6036 				}
 6037 
 6038 			}
 6039 
 6040 			break;
 6041 			case 3: {
 6042 
 6043 				/** STRUCT: struct type: block_device_operations, struct name: mtip_block_ops **/
 6044 				
 6045 
 6046 				/* content: static int mtip_block_ioctl(struct block_device *dev, fmode_t mode, unsigned cmd, unsigned long arg)*/
 6047 				/* LDV_COMMENT_BEGIN_PREP */
 6048 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 6049 				#define AHCI_RX_FIS_SZ          0x100
 6050 				#define AHCI_RX_FIS_OFFSET      0x0
 6051 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 6052 				#define AHCI_IDFY_OFFSET        0x400
 6053 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 6054 				#define AHCI_SECTBUF_OFFSET     0x800
 6055 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 6056 				#define AHCI_SMARTBUF_OFFSET    0xC00
 6057 				#define BLOCK_DMA_ALLOC_SZ      4096
 6058 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 6059 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 6060 				#define AHCI_CMD_TBL_OFFSET     0x0
 6061 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 6062 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 6063 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 6064 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 6065 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 6066 				#define HOST_CAP_NZDMA		(1 << 19)
 6067 				#define HOST_HSORG		0xFC
 6068 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 6069 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 6070 				#define HSORG_HWREV		0xFF00
 6071 				#define HSORG_STYLE		0x8
 6072 				#define HSORG_SLOTGROUPS	0x7
 6073 				#define PORT_COMMAND_ISSUE	0x38
 6074 				#define PORT_SDBV		0x7C
 6075 				#define PORT_OFFSET		0x100
 6076 				#define PORT_MEM_SIZE		0x80
 6077 				#define PORT_IRQ_ERR \
 6078 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 6079 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 6080 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 6081 	 PORT_IRQ_OVERFLOW)
 6082 				#define PORT_IRQ_LEGACY \
 6083 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 6084 				#define PORT_IRQ_HANDLED \
 6085 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 6086 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 6087 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 6088 				#define DEF_PORT_IRQ \
 6089 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 6090 				#define MTIP_PRODUCT_UNKNOWN	0x00
 6091 				#define MTIP_PRODUCT_ASICFPGA	0x11
 6092 				#ifdef CONFIG_COMPAT
 6093 				#endif
 6094 				#ifdef __LITTLE_ENDIAN
 6095 				#else
 6096 				#endif
 6097 				#ifdef MTIP_TRIM 
 6098 				#endif
 6099 				/* LDV_COMMENT_END_PREP */
 6100 				/* LDV_COMMENT_FUNCTION_CALL Function from field "ioctl" from driver structure with callbacks "mtip_block_ops" */
 6101 				ldv_handler_precall();
 6102 				mtip_block_ioctl( var_group2, var_mtip_block_ioctl_69_p1, var_mtip_block_ioctl_69_p2, var_mtip_block_ioctl_69_p3);
 6103 				/* LDV_COMMENT_BEGIN_PREP */
 6104 				#ifdef CONFIG_COMPAT
 6105 				#endif
 6106 				#ifdef CONFIG_COMPAT
 6107 				#endif
 6108 				/* LDV_COMMENT_END_PREP */
 6109 				
 6110 
 6111 				
 6112 
 6113 			}
 6114 
 6115 			break;
 6116 			case 4: {
 6117 
 6118 				/** STRUCT: struct type: block_device_operations, struct name: mtip_block_ops **/
 6119 				
 6120 
 6121 				/* content: static int mtip_block_compat_ioctl(struct block_device *dev, fmode_t mode, unsigned cmd, unsigned long arg)*/
 6122 				/* LDV_COMMENT_BEGIN_PREP */
 6123 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 6124 				#define AHCI_RX_FIS_SZ          0x100
 6125 				#define AHCI_RX_FIS_OFFSET      0x0
 6126 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 6127 				#define AHCI_IDFY_OFFSET        0x400
 6128 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 6129 				#define AHCI_SECTBUF_OFFSET     0x800
 6130 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 6131 				#define AHCI_SMARTBUF_OFFSET    0xC00
 6132 				#define BLOCK_DMA_ALLOC_SZ      4096
 6133 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 6134 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 6135 				#define AHCI_CMD_TBL_OFFSET     0x0
 6136 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 6137 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 6138 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 6139 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 6140 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 6141 				#define HOST_CAP_NZDMA		(1 << 19)
 6142 				#define HOST_HSORG		0xFC
 6143 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 6144 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 6145 				#define HSORG_HWREV		0xFF00
 6146 				#define HSORG_STYLE		0x8
 6147 				#define HSORG_SLOTGROUPS	0x7
 6148 				#define PORT_COMMAND_ISSUE	0x38
 6149 				#define PORT_SDBV		0x7C
 6150 				#define PORT_OFFSET		0x100
 6151 				#define PORT_MEM_SIZE		0x80
 6152 				#define PORT_IRQ_ERR \
 6153 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 6154 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 6155 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 6156 	 PORT_IRQ_OVERFLOW)
 6157 				#define PORT_IRQ_LEGACY \
 6158 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 6159 				#define PORT_IRQ_HANDLED \
 6160 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 6161 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 6162 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 6163 				#define DEF_PORT_IRQ \
 6164 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 6165 				#define MTIP_PRODUCT_UNKNOWN	0x00
 6166 				#define MTIP_PRODUCT_ASICFPGA	0x11
 6167 				#ifdef CONFIG_COMPAT
 6168 				#endif
 6169 				#ifdef __LITTLE_ENDIAN
 6170 				#else
 6171 				#endif
 6172 				#ifdef MTIP_TRIM 
 6173 				#endif
 6174 				#ifdef CONFIG_COMPAT
 6175 				/* LDV_COMMENT_END_PREP */
 6176 				/* LDV_COMMENT_FUNCTION_CALL Function from field "compat_ioctl" from driver structure with callbacks "mtip_block_ops" */
 6177 				ldv_handler_precall();
 6178 				mtip_block_compat_ioctl( var_group2, var_mtip_block_compat_ioctl_70_p1, var_mtip_block_compat_ioctl_70_p2, var_mtip_block_compat_ioctl_70_p3);
 6179 				/* LDV_COMMENT_BEGIN_PREP */
 6180 				#endif
 6181 				#ifdef CONFIG_COMPAT
 6182 				#endif
 6183 				/* LDV_COMMENT_END_PREP */
 6184 				
 6185 
 6186 				
 6187 
 6188 			}
 6189 
 6190 			break;
 6191 			case 5: {
 6192 
 6193 				/** STRUCT: struct type: block_device_operations, struct name: mtip_block_ops **/
 6194 				
 6195 
 6196 				/* content: static int mtip_block_getgeo(struct block_device *dev, struct hd_geometry *geo)*/
 6197 				/* LDV_COMMENT_BEGIN_PREP */
 6198 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 6199 				#define AHCI_RX_FIS_SZ          0x100
 6200 				#define AHCI_RX_FIS_OFFSET      0x0
 6201 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 6202 				#define AHCI_IDFY_OFFSET        0x400
 6203 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 6204 				#define AHCI_SECTBUF_OFFSET     0x800
 6205 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 6206 				#define AHCI_SMARTBUF_OFFSET    0xC00
 6207 				#define BLOCK_DMA_ALLOC_SZ      4096
 6208 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 6209 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 6210 				#define AHCI_CMD_TBL_OFFSET     0x0
 6211 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 6212 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 6213 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 6214 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 6215 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 6216 				#define HOST_CAP_NZDMA		(1 << 19)
 6217 				#define HOST_HSORG		0xFC
 6218 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 6219 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 6220 				#define HSORG_HWREV		0xFF00
 6221 				#define HSORG_STYLE		0x8
 6222 				#define HSORG_SLOTGROUPS	0x7
 6223 				#define PORT_COMMAND_ISSUE	0x38
 6224 				#define PORT_SDBV		0x7C
 6225 				#define PORT_OFFSET		0x100
 6226 				#define PORT_MEM_SIZE		0x80
 6227 				#define PORT_IRQ_ERR \
 6228 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 6229 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 6230 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 6231 	 PORT_IRQ_OVERFLOW)
 6232 				#define PORT_IRQ_LEGACY \
 6233 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 6234 				#define PORT_IRQ_HANDLED \
 6235 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 6236 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 6237 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 6238 				#define DEF_PORT_IRQ \
 6239 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 6240 				#define MTIP_PRODUCT_UNKNOWN	0x00
 6241 				#define MTIP_PRODUCT_ASICFPGA	0x11
 6242 				#ifdef CONFIG_COMPAT
 6243 				#endif
 6244 				#ifdef __LITTLE_ENDIAN
 6245 				#else
 6246 				#endif
 6247 				#ifdef MTIP_TRIM 
 6248 				#endif
 6249 				#ifdef CONFIG_COMPAT
 6250 				#endif
 6251 				/* LDV_COMMENT_END_PREP */
 6252 				/* LDV_COMMENT_FUNCTION_CALL Function from field "getgeo" from driver structure with callbacks "mtip_block_ops" */
 6253 				ldv_handler_precall();
 6254 				mtip_block_getgeo( var_group2, var_group3);
 6255 				/* LDV_COMMENT_BEGIN_PREP */
 6256 				#ifdef CONFIG_COMPAT
 6257 				#endif
 6258 				/* LDV_COMMENT_END_PREP */
 6259 				
 6260 
 6261 				
 6262 
 6263 			}
 6264 
 6265 			break;
 6266 			case 6: {
 6267 
 6268 				/** STRUCT: struct type: blk_mq_ops, struct name: mtip_mq_ops **/
 6269 				
 6270 
 6271 				/* content: static int mtip_queue_rq(struct blk_mq_hw_ctx *hctx, const struct blk_mq_queue_data *bd)*/
 6272 				/* LDV_COMMENT_BEGIN_PREP */
 6273 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 6274 				#define AHCI_RX_FIS_SZ          0x100
 6275 				#define AHCI_RX_FIS_OFFSET      0x0
 6276 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 6277 				#define AHCI_IDFY_OFFSET        0x400
 6278 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 6279 				#define AHCI_SECTBUF_OFFSET     0x800
 6280 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 6281 				#define AHCI_SMARTBUF_OFFSET    0xC00
 6282 				#define BLOCK_DMA_ALLOC_SZ      4096
 6283 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 6284 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 6285 				#define AHCI_CMD_TBL_OFFSET     0x0
 6286 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 6287 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 6288 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 6289 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 6290 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 6291 				#define HOST_CAP_NZDMA		(1 << 19)
 6292 				#define HOST_HSORG		0xFC
 6293 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 6294 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 6295 				#define HSORG_HWREV		0xFF00
 6296 				#define HSORG_STYLE		0x8
 6297 				#define HSORG_SLOTGROUPS	0x7
 6298 				#define PORT_COMMAND_ISSUE	0x38
 6299 				#define PORT_SDBV		0x7C
 6300 				#define PORT_OFFSET		0x100
 6301 				#define PORT_MEM_SIZE		0x80
 6302 				#define PORT_IRQ_ERR \
 6303 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 6304 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 6305 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 6306 	 PORT_IRQ_OVERFLOW)
 6307 				#define PORT_IRQ_LEGACY \
 6308 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 6309 				#define PORT_IRQ_HANDLED \
 6310 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 6311 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 6312 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 6313 				#define DEF_PORT_IRQ \
 6314 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 6315 				#define MTIP_PRODUCT_UNKNOWN	0x00
 6316 				#define MTIP_PRODUCT_ASICFPGA	0x11
 6317 				#ifdef CONFIG_COMPAT
 6318 				#endif
 6319 				#ifdef __LITTLE_ENDIAN
 6320 				#else
 6321 				#endif
 6322 				#ifdef MTIP_TRIM 
 6323 				#endif
 6324 				#ifdef CONFIG_COMPAT
 6325 				#endif
 6326 				#ifdef CONFIG_COMPAT
 6327 				#endif
 6328 				/* LDV_COMMENT_END_PREP */
 6329 				/* LDV_COMMENT_FUNCTION_CALL Function from field "queue_rq" from driver structure with callbacks "mtip_mq_ops" */
 6330 				ldv_handler_precall();
 6331 				mtip_queue_rq( var_group4, var_mtip_queue_rq_75_p1);
 6332 				
 6333 
 6334 				
 6335 
 6336 			}
 6337 
 6338 			break;
 6339 			case 7: {
 6340 
 6341 				/** STRUCT: struct type: blk_mq_ops, struct name: mtip_mq_ops **/
 6342 				
 6343 
 6344 				/* content: static int mtip_init_cmd(void *data, struct request *rq, unsigned int hctx_idx, unsigned int request_idx, unsigned int numa_node)*/
 6345 				/* LDV_COMMENT_BEGIN_PREP */
 6346 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 6347 				#define AHCI_RX_FIS_SZ          0x100
 6348 				#define AHCI_RX_FIS_OFFSET      0x0
 6349 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 6350 				#define AHCI_IDFY_OFFSET        0x400
 6351 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 6352 				#define AHCI_SECTBUF_OFFSET     0x800
 6353 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 6354 				#define AHCI_SMARTBUF_OFFSET    0xC00
 6355 				#define BLOCK_DMA_ALLOC_SZ      4096
 6356 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 6357 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 6358 				#define AHCI_CMD_TBL_OFFSET     0x0
 6359 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 6360 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 6361 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 6362 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 6363 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 6364 				#define HOST_CAP_NZDMA		(1 << 19)
 6365 				#define HOST_HSORG		0xFC
 6366 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 6367 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 6368 				#define HSORG_HWREV		0xFF00
 6369 				#define HSORG_STYLE		0x8
 6370 				#define HSORG_SLOTGROUPS	0x7
 6371 				#define PORT_COMMAND_ISSUE	0x38
 6372 				#define PORT_SDBV		0x7C
 6373 				#define PORT_OFFSET		0x100
 6374 				#define PORT_MEM_SIZE		0x80
 6375 				#define PORT_IRQ_ERR \
 6376 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 6377 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 6378 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 6379 	 PORT_IRQ_OVERFLOW)
 6380 				#define PORT_IRQ_LEGACY \
 6381 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 6382 				#define PORT_IRQ_HANDLED \
 6383 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 6384 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 6385 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 6386 				#define DEF_PORT_IRQ \
 6387 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 6388 				#define MTIP_PRODUCT_UNKNOWN	0x00
 6389 				#define MTIP_PRODUCT_ASICFPGA	0x11
 6390 				#ifdef CONFIG_COMPAT
 6391 				#endif
 6392 				#ifdef __LITTLE_ENDIAN
 6393 				#else
 6394 				#endif
 6395 				#ifdef MTIP_TRIM 
 6396 				#endif
 6397 				#ifdef CONFIG_COMPAT
 6398 				#endif
 6399 				#ifdef CONFIG_COMPAT
 6400 				#endif
 6401 				/* LDV_COMMENT_END_PREP */
 6402 				/* LDV_COMMENT_FUNCTION_CALL Function from field "init_request" from driver structure with callbacks "mtip_mq_ops" */
 6403 				ldv_handler_precall();
 6404 				mtip_init_cmd( var_mtip_init_cmd_77_p0, var_group5, var_mtip_init_cmd_77_p2, var_mtip_init_cmd_77_p3, var_mtip_init_cmd_77_p4);
 6405 				
 6406 
 6407 				
 6408 
 6409 			}
 6410 
 6411 			break;
 6412 			case 8: {
 6413 
 6414 				/** STRUCT: struct type: blk_mq_ops, struct name: mtip_mq_ops **/
 6415 				
 6416 
 6417 				/* content: static void mtip_free_cmd(void *data, struct request *rq, unsigned int hctx_idx, unsigned int request_idx)*/
 6418 				/* LDV_COMMENT_BEGIN_PREP */
 6419 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 6420 				#define AHCI_RX_FIS_SZ          0x100
 6421 				#define AHCI_RX_FIS_OFFSET      0x0
 6422 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 6423 				#define AHCI_IDFY_OFFSET        0x400
 6424 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 6425 				#define AHCI_SECTBUF_OFFSET     0x800
 6426 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 6427 				#define AHCI_SMARTBUF_OFFSET    0xC00
 6428 				#define BLOCK_DMA_ALLOC_SZ      4096
 6429 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 6430 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 6431 				#define AHCI_CMD_TBL_OFFSET     0x0
 6432 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 6433 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 6434 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 6435 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 6436 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 6437 				#define HOST_CAP_NZDMA		(1 << 19)
 6438 				#define HOST_HSORG		0xFC
 6439 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 6440 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 6441 				#define HSORG_HWREV		0xFF00
 6442 				#define HSORG_STYLE		0x8
 6443 				#define HSORG_SLOTGROUPS	0x7
 6444 				#define PORT_COMMAND_ISSUE	0x38
 6445 				#define PORT_SDBV		0x7C
 6446 				#define PORT_OFFSET		0x100
 6447 				#define PORT_MEM_SIZE		0x80
 6448 				#define PORT_IRQ_ERR \
 6449 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 6450 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 6451 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 6452 	 PORT_IRQ_OVERFLOW)
 6453 				#define PORT_IRQ_LEGACY \
 6454 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 6455 				#define PORT_IRQ_HANDLED \
 6456 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 6457 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 6458 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 6459 				#define DEF_PORT_IRQ \
 6460 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 6461 				#define MTIP_PRODUCT_UNKNOWN	0x00
 6462 				#define MTIP_PRODUCT_ASICFPGA	0x11
 6463 				#ifdef CONFIG_COMPAT
 6464 				#endif
 6465 				#ifdef __LITTLE_ENDIAN
 6466 				#else
 6467 				#endif
 6468 				#ifdef MTIP_TRIM 
 6469 				#endif
 6470 				#ifdef CONFIG_COMPAT
 6471 				#endif
 6472 				#ifdef CONFIG_COMPAT
 6473 				#endif
 6474 				/* LDV_COMMENT_END_PREP */
 6475 				/* LDV_COMMENT_FUNCTION_CALL Function from field "exit_request" from driver structure with callbacks "mtip_mq_ops" */
 6476 				ldv_handler_precall();
 6477 				mtip_free_cmd( var_mtip_free_cmd_76_p0, var_group5, var_mtip_free_cmd_76_p2, var_mtip_free_cmd_76_p3);
 6478 				
 6479 
 6480 				
 6481 
 6482 			}
 6483 
 6484 			break;
 6485 			case 9: {
 6486 
 6487 				/** STRUCT: struct type: pci_driver, struct name: mtip_pci_driver **/
 6488 				if(ldv_s_mtip_pci_driver_pci_driver==0) {
 6489 
 6490 				/* content: static int mtip_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)*/
 6491 				/* LDV_COMMENT_BEGIN_PREP */
 6492 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 6493 				#define AHCI_RX_FIS_SZ          0x100
 6494 				#define AHCI_RX_FIS_OFFSET      0x0
 6495 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 6496 				#define AHCI_IDFY_OFFSET        0x400
 6497 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 6498 				#define AHCI_SECTBUF_OFFSET     0x800
 6499 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 6500 				#define AHCI_SMARTBUF_OFFSET    0xC00
 6501 				#define BLOCK_DMA_ALLOC_SZ      4096
 6502 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 6503 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 6504 				#define AHCI_CMD_TBL_OFFSET     0x0
 6505 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 6506 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 6507 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 6508 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 6509 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 6510 				#define HOST_CAP_NZDMA		(1 << 19)
 6511 				#define HOST_HSORG		0xFC
 6512 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 6513 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 6514 				#define HSORG_HWREV		0xFF00
 6515 				#define HSORG_STYLE		0x8
 6516 				#define HSORG_SLOTGROUPS	0x7
 6517 				#define PORT_COMMAND_ISSUE	0x38
 6518 				#define PORT_SDBV		0x7C
 6519 				#define PORT_OFFSET		0x100
 6520 				#define PORT_MEM_SIZE		0x80
 6521 				#define PORT_IRQ_ERR \
 6522 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 6523 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 6524 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 6525 	 PORT_IRQ_OVERFLOW)
 6526 				#define PORT_IRQ_LEGACY \
 6527 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 6528 				#define PORT_IRQ_HANDLED \
 6529 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 6530 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 6531 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 6532 				#define DEF_PORT_IRQ \
 6533 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 6534 				#define MTIP_PRODUCT_UNKNOWN	0x00
 6535 				#define MTIP_PRODUCT_ASICFPGA	0x11
 6536 				#ifdef CONFIG_COMPAT
 6537 				#endif
 6538 				#ifdef __LITTLE_ENDIAN
 6539 				#else
 6540 				#endif
 6541 				#ifdef MTIP_TRIM 
 6542 				#endif
 6543 				#ifdef CONFIG_COMPAT
 6544 				#endif
 6545 				#ifdef CONFIG_COMPAT
 6546 				#endif
 6547 				/* LDV_COMMENT_END_PREP */
 6548 				/* LDV_COMMENT_FUNCTION_CALL Function from field "probe" from driver structure with callbacks "mtip_pci_driver". Standart function test for correct return result. */
 6549 				res_mtip_pci_probe_88 = mtip_pci_probe( var_group6, var_mtip_pci_probe_88_p1);
 6550 				 ldv_check_return_value(res_mtip_pci_probe_88);
 6551 				 ldv_check_return_value_probe(res_mtip_pci_probe_88);
 6552 				 if(res_mtip_pci_probe_88) 
 6553 					goto ldv_module_exit;
 6554 				ldv_s_mtip_pci_driver_pci_driver++;
 6555 
 6556 				}
 6557 
 6558 			}
 6559 
 6560 			break;
 6561 			case 10: {
 6562 
 6563 				/** STRUCT: struct type: pci_driver, struct name: mtip_pci_driver **/
 6564 				if(ldv_s_mtip_pci_driver_pci_driver==1) {
 6565 
 6566 				/* content: static void mtip_pci_remove(struct pci_dev *pdev)*/
 6567 				/* LDV_COMMENT_BEGIN_PREP */
 6568 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 6569 				#define AHCI_RX_FIS_SZ          0x100
 6570 				#define AHCI_RX_FIS_OFFSET      0x0
 6571 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 6572 				#define AHCI_IDFY_OFFSET        0x400
 6573 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 6574 				#define AHCI_SECTBUF_OFFSET     0x800
 6575 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 6576 				#define AHCI_SMARTBUF_OFFSET    0xC00
 6577 				#define BLOCK_DMA_ALLOC_SZ      4096
 6578 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 6579 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 6580 				#define AHCI_CMD_TBL_OFFSET     0x0
 6581 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 6582 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 6583 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 6584 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 6585 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 6586 				#define HOST_CAP_NZDMA		(1 << 19)
 6587 				#define HOST_HSORG		0xFC
 6588 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 6589 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 6590 				#define HSORG_HWREV		0xFF00
 6591 				#define HSORG_STYLE		0x8
 6592 				#define HSORG_SLOTGROUPS	0x7
 6593 				#define PORT_COMMAND_ISSUE	0x38
 6594 				#define PORT_SDBV		0x7C
 6595 				#define PORT_OFFSET		0x100
 6596 				#define PORT_MEM_SIZE		0x80
 6597 				#define PORT_IRQ_ERR \
 6598 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 6599 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 6600 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 6601 	 PORT_IRQ_OVERFLOW)
 6602 				#define PORT_IRQ_LEGACY \
 6603 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 6604 				#define PORT_IRQ_HANDLED \
 6605 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 6606 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 6607 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 6608 				#define DEF_PORT_IRQ \
 6609 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 6610 				#define MTIP_PRODUCT_UNKNOWN	0x00
 6611 				#define MTIP_PRODUCT_ASICFPGA	0x11
 6612 				#ifdef CONFIG_COMPAT
 6613 				#endif
 6614 				#ifdef __LITTLE_ENDIAN
 6615 				#else
 6616 				#endif
 6617 				#ifdef MTIP_TRIM 
 6618 				#endif
 6619 				#ifdef CONFIG_COMPAT
 6620 				#endif
 6621 				#ifdef CONFIG_COMPAT
 6622 				#endif
 6623 				/* LDV_COMMENT_END_PREP */
 6624 				/* LDV_COMMENT_FUNCTION_CALL Function from field "remove" from driver structure with callbacks "mtip_pci_driver" */
 6625 				ldv_handler_precall();
 6626 				mtip_pci_remove( var_group6);
 6627 				ldv_s_mtip_pci_driver_pci_driver=0;
 6628 
 6629 				}
 6630 
 6631 			}
 6632 
 6633 			break;
 6634 			case 11: {
 6635 
 6636 				/** STRUCT: struct type: pci_driver, struct name: mtip_pci_driver **/
 6637 				
 6638 
 6639 				/* content: static int mtip_pci_suspend(struct pci_dev *pdev, pm_message_t mesg)*/
 6640 				/* LDV_COMMENT_BEGIN_PREP */
 6641 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 6642 				#define AHCI_RX_FIS_SZ          0x100
 6643 				#define AHCI_RX_FIS_OFFSET      0x0
 6644 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 6645 				#define AHCI_IDFY_OFFSET        0x400
 6646 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 6647 				#define AHCI_SECTBUF_OFFSET     0x800
 6648 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 6649 				#define AHCI_SMARTBUF_OFFSET    0xC00
 6650 				#define BLOCK_DMA_ALLOC_SZ      4096
 6651 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 6652 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 6653 				#define AHCI_CMD_TBL_OFFSET     0x0
 6654 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 6655 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 6656 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 6657 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 6658 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 6659 				#define HOST_CAP_NZDMA		(1 << 19)
 6660 				#define HOST_HSORG		0xFC
 6661 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 6662 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 6663 				#define HSORG_HWREV		0xFF00
 6664 				#define HSORG_STYLE		0x8
 6665 				#define HSORG_SLOTGROUPS	0x7
 6666 				#define PORT_COMMAND_ISSUE	0x38
 6667 				#define PORT_SDBV		0x7C
 6668 				#define PORT_OFFSET		0x100
 6669 				#define PORT_MEM_SIZE		0x80
 6670 				#define PORT_IRQ_ERR \
 6671 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 6672 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 6673 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 6674 	 PORT_IRQ_OVERFLOW)
 6675 				#define PORT_IRQ_LEGACY \
 6676 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 6677 				#define PORT_IRQ_HANDLED \
 6678 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 6679 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 6680 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 6681 				#define DEF_PORT_IRQ \
 6682 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 6683 				#define MTIP_PRODUCT_UNKNOWN	0x00
 6684 				#define MTIP_PRODUCT_ASICFPGA	0x11
 6685 				#ifdef CONFIG_COMPAT
 6686 				#endif
 6687 				#ifdef __LITTLE_ENDIAN
 6688 				#else
 6689 				#endif
 6690 				#ifdef MTIP_TRIM 
 6691 				#endif
 6692 				#ifdef CONFIG_COMPAT
 6693 				#endif
 6694 				#ifdef CONFIG_COMPAT
 6695 				#endif
 6696 				/* LDV_COMMENT_END_PREP */
 6697 				/* LDV_COMMENT_FUNCTION_CALL Function from field "suspend" from driver structure with callbacks "mtip_pci_driver" */
 6698 				ldv_handler_precall();
 6699 				mtip_pci_suspend( var_group6, var_mtip_pci_suspend_90_p1);
 6700 				
 6701 
 6702 				
 6703 
 6704 			}
 6705 
 6706 			break;
 6707 			case 12: {
 6708 
 6709 				/** STRUCT: struct type: pci_driver, struct name: mtip_pci_driver **/
 6710 				
 6711 
 6712 				/* content: static int mtip_pci_resume(struct pci_dev *pdev)*/
 6713 				/* LDV_COMMENT_BEGIN_PREP */
 6714 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 6715 				#define AHCI_RX_FIS_SZ          0x100
 6716 				#define AHCI_RX_FIS_OFFSET      0x0
 6717 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 6718 				#define AHCI_IDFY_OFFSET        0x400
 6719 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 6720 				#define AHCI_SECTBUF_OFFSET     0x800
 6721 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 6722 				#define AHCI_SMARTBUF_OFFSET    0xC00
 6723 				#define BLOCK_DMA_ALLOC_SZ      4096
 6724 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 6725 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 6726 				#define AHCI_CMD_TBL_OFFSET     0x0
 6727 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 6728 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 6729 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 6730 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 6731 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 6732 				#define HOST_CAP_NZDMA		(1 << 19)
 6733 				#define HOST_HSORG		0xFC
 6734 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 6735 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 6736 				#define HSORG_HWREV		0xFF00
 6737 				#define HSORG_STYLE		0x8
 6738 				#define HSORG_SLOTGROUPS	0x7
 6739 				#define PORT_COMMAND_ISSUE	0x38
 6740 				#define PORT_SDBV		0x7C
 6741 				#define PORT_OFFSET		0x100
 6742 				#define PORT_MEM_SIZE		0x80
 6743 				#define PORT_IRQ_ERR \
 6744 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 6745 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 6746 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 6747 	 PORT_IRQ_OVERFLOW)
 6748 				#define PORT_IRQ_LEGACY \
 6749 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 6750 				#define PORT_IRQ_HANDLED \
 6751 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 6752 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 6753 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 6754 				#define DEF_PORT_IRQ \
 6755 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 6756 				#define MTIP_PRODUCT_UNKNOWN	0x00
 6757 				#define MTIP_PRODUCT_ASICFPGA	0x11
 6758 				#ifdef CONFIG_COMPAT
 6759 				#endif
 6760 				#ifdef __LITTLE_ENDIAN
 6761 				#else
 6762 				#endif
 6763 				#ifdef MTIP_TRIM 
 6764 				#endif
 6765 				#ifdef CONFIG_COMPAT
 6766 				#endif
 6767 				#ifdef CONFIG_COMPAT
 6768 				#endif
 6769 				/* LDV_COMMENT_END_PREP */
 6770 				/* LDV_COMMENT_FUNCTION_CALL Function from field "resume" from driver structure with callbacks "mtip_pci_driver" */
 6771 				ldv_handler_precall();
 6772 				mtip_pci_resume( var_group6);
 6773 				
 6774 
 6775 				
 6776 
 6777 			}
 6778 
 6779 			break;
 6780 			case 13: {
 6781 
 6782 				/** STRUCT: struct type: pci_driver, struct name: mtip_pci_driver **/
 6783 				
 6784 
 6785 				/* content: static void mtip_pci_shutdown(struct pci_dev *pdev)*/
 6786 				/* LDV_COMMENT_BEGIN_PREP */
 6787 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 6788 				#define AHCI_RX_FIS_SZ          0x100
 6789 				#define AHCI_RX_FIS_OFFSET      0x0
 6790 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 6791 				#define AHCI_IDFY_OFFSET        0x400
 6792 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 6793 				#define AHCI_SECTBUF_OFFSET     0x800
 6794 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 6795 				#define AHCI_SMARTBUF_OFFSET    0xC00
 6796 				#define BLOCK_DMA_ALLOC_SZ      4096
 6797 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 6798 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 6799 				#define AHCI_CMD_TBL_OFFSET     0x0
 6800 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 6801 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 6802 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 6803 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 6804 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 6805 				#define HOST_CAP_NZDMA		(1 << 19)
 6806 				#define HOST_HSORG		0xFC
 6807 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 6808 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 6809 				#define HSORG_HWREV		0xFF00
 6810 				#define HSORG_STYLE		0x8
 6811 				#define HSORG_SLOTGROUPS	0x7
 6812 				#define PORT_COMMAND_ISSUE	0x38
 6813 				#define PORT_SDBV		0x7C
 6814 				#define PORT_OFFSET		0x100
 6815 				#define PORT_MEM_SIZE		0x80
 6816 				#define PORT_IRQ_ERR \
 6817 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 6818 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 6819 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 6820 	 PORT_IRQ_OVERFLOW)
 6821 				#define PORT_IRQ_LEGACY \
 6822 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 6823 				#define PORT_IRQ_HANDLED \
 6824 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 6825 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 6826 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 6827 				#define DEF_PORT_IRQ \
 6828 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 6829 				#define MTIP_PRODUCT_UNKNOWN	0x00
 6830 				#define MTIP_PRODUCT_ASICFPGA	0x11
 6831 				#ifdef CONFIG_COMPAT
 6832 				#endif
 6833 				#ifdef __LITTLE_ENDIAN
 6834 				#else
 6835 				#endif
 6836 				#ifdef MTIP_TRIM 
 6837 				#endif
 6838 				#ifdef CONFIG_COMPAT
 6839 				#endif
 6840 				#ifdef CONFIG_COMPAT
 6841 				#endif
 6842 				/* LDV_COMMENT_END_PREP */
 6843 				/* LDV_COMMENT_FUNCTION_CALL Function from field "shutdown" from driver structure with callbacks "mtip_pci_driver" */
 6844 				ldv_handler_precall();
 6845 				mtip_pci_shutdown( var_group6);
 6846 				
 6847 
 6848 				
 6849 
 6850 			}
 6851 
 6852 			break;
 6853 			case 14: {
 6854 
 6855 				/** CALLBACK SECTION request_irq **/
 6856 				LDV_IN_INTERRUPT=2;
 6857 
 6858 				/* content: static irqreturn_t mtip_irq_handler(int irq, void *instance)*/
 6859 				/* LDV_COMMENT_BEGIN_PREP */
 6860 				#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 6861 				#define AHCI_RX_FIS_SZ          0x100
 6862 				#define AHCI_RX_FIS_OFFSET      0x0
 6863 				#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 6864 				#define AHCI_IDFY_OFFSET        0x400
 6865 				#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 6866 				#define AHCI_SECTBUF_OFFSET     0x800
 6867 				#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 6868 				#define AHCI_SMARTBUF_OFFSET    0xC00
 6869 				#define BLOCK_DMA_ALLOC_SZ      4096
 6870 				#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 6871 				#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 6872 				#define AHCI_CMD_TBL_OFFSET     0x0
 6873 				#define AHCI_CMD_TBL_HDR_SZ     0x80
 6874 				#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 6875 				#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 6876 				#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 6877 				#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 6878 				#define HOST_CAP_NZDMA		(1 << 19)
 6879 				#define HOST_HSORG		0xFC
 6880 				#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 6881 				#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 6882 				#define HSORG_HWREV		0xFF00
 6883 				#define HSORG_STYLE		0x8
 6884 				#define HSORG_SLOTGROUPS	0x7
 6885 				#define PORT_COMMAND_ISSUE	0x38
 6886 				#define PORT_SDBV		0x7C
 6887 				#define PORT_OFFSET		0x100
 6888 				#define PORT_MEM_SIZE		0x80
 6889 				#define PORT_IRQ_ERR \
 6890 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 6891 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 6892 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 6893 	 PORT_IRQ_OVERFLOW)
 6894 				#define PORT_IRQ_LEGACY \
 6895 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 6896 				#define PORT_IRQ_HANDLED \
 6897 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 6898 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 6899 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 6900 				#define DEF_PORT_IRQ \
 6901 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 6902 				#define MTIP_PRODUCT_UNKNOWN	0x00
 6903 				#define MTIP_PRODUCT_ASICFPGA	0x11
 6904 				#ifdef CONFIG_COMPAT
 6905 				#endif
 6906 				/* LDV_COMMENT_END_PREP */
 6907 				/* LDV_COMMENT_FUNCTION_CALL */
 6908 				ldv_handler_precall();
 6909 				mtip_irq_handler( var_mtip_irq_handler_23_p0, var_mtip_irq_handler_23_p1);
 6910 				/* LDV_COMMENT_BEGIN_PREP */
 6911 				#ifdef __LITTLE_ENDIAN
 6912 				#else
 6913 				#endif
 6914 				#ifdef MTIP_TRIM 
 6915 				#endif
 6916 				#ifdef CONFIG_COMPAT
 6917 				#endif
 6918 				#ifdef CONFIG_COMPAT
 6919 				#endif
 6920 				/* LDV_COMMENT_END_PREP */
 6921 				LDV_IN_INTERRUPT=1;
 6922 
 6923 				
 6924 
 6925 			}
 6926 
 6927 			break;
 6928 			default: break;
 6929 
 6930 		}
 6931 
 6932 	}
 6933 
 6934 	ldv_module_exit: 
 6935 
 6936 	/** INIT: init_type: ST_MODULE_EXIT **/
 6937 	/* content: static void __exit mtip_exit(void)*/
 6938 	/* LDV_COMMENT_BEGIN_PREP */
 6939 	#define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
 6940 	#define AHCI_RX_FIS_SZ          0x100
 6941 	#define AHCI_RX_FIS_OFFSET      0x0
 6942 	#define AHCI_IDFY_SZ            ATA_SECT_SIZE
 6943 	#define AHCI_IDFY_OFFSET        0x400
 6944 	#define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
 6945 	#define AHCI_SECTBUF_OFFSET     0x800
 6946 	#define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
 6947 	#define AHCI_SMARTBUF_OFFSET    0xC00
 6948 	#define BLOCK_DMA_ALLOC_SZ      4096
 6949 	#define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
 6950 	#define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
 6951 	#define AHCI_CMD_TBL_OFFSET     0x0
 6952 	#define AHCI_CMD_TBL_HDR_SZ     0x80
 6953 	#define AHCI_CMD_TBL_HDR_OFFSET 0x0
 6954 	#define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
 6955 	#define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
 6956 	#define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
 6957 	#define HOST_CAP_NZDMA		(1 << 19)
 6958 	#define HOST_HSORG		0xFC
 6959 	#define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
 6960 	#define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
 6961 	#define HSORG_HWREV		0xFF00
 6962 	#define HSORG_STYLE		0x8
 6963 	#define HSORG_SLOTGROUPS	0x7
 6964 	#define PORT_COMMAND_ISSUE	0x38
 6965 	#define PORT_SDBV		0x7C
 6966 	#define PORT_OFFSET		0x100
 6967 	#define PORT_MEM_SIZE		0x80
 6968 	#define PORT_IRQ_ERR \
 6969 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
 6970 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
 6971 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
 6972 	 PORT_IRQ_OVERFLOW)
 6973 	#define PORT_IRQ_LEGACY \
 6974 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
 6975 	#define PORT_IRQ_HANDLED \
 6976 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
 6977 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
 6978 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
 6979 	#define DEF_PORT_IRQ \
 6980 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
 6981 	#define MTIP_PRODUCT_UNKNOWN	0x00
 6982 	#define MTIP_PRODUCT_ASICFPGA	0x11
 6983 	#ifdef CONFIG_COMPAT
 6984 	#endif
 6985 	#ifdef __LITTLE_ENDIAN
 6986 	#else
 6987 	#endif
 6988 	#ifdef MTIP_TRIM 
 6989 	#endif
 6990 	#ifdef CONFIG_COMPAT
 6991 	#endif
 6992 	#ifdef CONFIG_COMPAT
 6993 	#endif
 6994 	/* LDV_COMMENT_END_PREP */
 6995 	/* LDV_COMMENT_FUNCTION_CALL Kernel calls driver release function before driver will be uploaded from kernel. This function declared as "MODULE_EXIT(function name)". */
 6996 	ldv_handler_precall();
 6997 	mtip_exit();
 6998 
 6999 	/* LDV_COMMENT_FUNCTION_CALL Checks that all resources and locks are correctly released before the driver will be unloaded. */
 7000 	ldv_final: ldv_check_final_state();
 7001 
 7002 	/* LDV_COMMENT_END_FUNCTION_CALL_SECTION */
 7003 	return;
 7004 
 7005 }
 7006 #endif
 7007 
 7008 /* LDV_COMMENT_END_MAIN */                 1 
    2  #include <linux/types.h>
    3  #include <linux/dma-direction.h>
    4 
    5  extern dma_addr_t ldv_dma_map_page(struct device *dev, struct page *page, size_t offset, size_t size, enum dma_data_direction dir);
    6  extern dma_addr_t ldv_dma_map_single(struct device *dev, void *cpu_addr, size_t size, enum dma_data_direction dir);
    7  extern dma_addr_t ldv_dma_map_single_attrs(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir, struct dma_attrs *attrs);
    8  extern int ldv_dma_mapping_error(struct device *dev, dma_addr_t dma_addr);
    9 #line 1 "/home/cluser/ldv/ref_launch/work/current--X--drivers--X--defaultlinux-4.5-rc1.tar.xz--X--331_1a--X--cpachecker/linux-4.5-rc1.tar.xz/csd_deg_dscv/11248/dscv_tempdir/dscv/ri/331_1a/drivers/block/mtip32xx/mtip32xx.c"
   10 
   11 /*
   12  * Driver for the Micron P320 SSD
   13  *   Copyright (C) 2011 Micron Technology, Inc.
   14  *
   15  * Portions of this code were derived from works subjected to the
   16  * following copyright:
   17  *    Copyright (C) 2009 Integrated Device Technology, Inc.
   18  *
   19  * This program is free software; you can redistribute it and/or modify
   20  * it under the terms of the GNU General Public License as published by
   21  * the Free Software Foundation; either version 2 of the License, or
   22  * (at your option) any later version.
   23  *
   24  * This program is distributed in the hope that it will be useful,
   25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   27  * GNU General Public License for more details.
   28  *
   29  */
   30 
   31 #include <linux/pci.h>
   32 #include <linux/interrupt.h>
   33 #include <linux/ata.h>
   34 #include <linux/delay.h>
   35 #include <linux/hdreg.h>
   36 #include <linux/uaccess.h>
   37 #include <linux/random.h>
   38 #include <linux/smp.h>
   39 #include <linux/compat.h>
   40 #include <linux/fs.h>
   41 #include <linux/module.h>
   42 #include <linux/genhd.h>
   43 #include <linux/blkdev.h>
   44 #include <linux/blk-mq.h>
   45 #include <linux/bio.h>
   46 #include <linux/dma-mapping.h>
   47 #include <linux/idr.h>
   48 #include <linux/kthread.h>
   49 #include <../drivers/ata/ahci.h>
   50 #include <linux/export.h>
   51 #include <linux/debugfs.h>
   52 #include <linux/prefetch.h>
   53 #include "mtip32xx.h"
   54 
   55 #define HW_CMD_SLOT_SZ		(MTIP_MAX_COMMAND_SLOTS * 32)
   56 
   57 /* DMA region containing RX Fis, Identify, RLE10, and SMART buffers */
   58 #define AHCI_RX_FIS_SZ          0x100
   59 #define AHCI_RX_FIS_OFFSET      0x0
   60 #define AHCI_IDFY_SZ            ATA_SECT_SIZE
   61 #define AHCI_IDFY_OFFSET        0x400
   62 #define AHCI_SECTBUF_SZ         ATA_SECT_SIZE
   63 #define AHCI_SECTBUF_OFFSET     0x800
   64 #define AHCI_SMARTBUF_SZ        ATA_SECT_SIZE
   65 #define AHCI_SMARTBUF_OFFSET    0xC00
   66 /* 0x100 + 0x200 + 0x200 + 0x200 is smaller than 4k but we pad it out */
   67 #define BLOCK_DMA_ALLOC_SZ      4096
   68 
   69 /* DMA region containing command table (should be 8192 bytes) */
   70 #define AHCI_CMD_SLOT_SZ        sizeof(struct mtip_cmd_hdr)
   71 #define AHCI_CMD_TBL_SZ         (MTIP_MAX_COMMAND_SLOTS * AHCI_CMD_SLOT_SZ)
   72 #define AHCI_CMD_TBL_OFFSET     0x0
   73 
   74 /* DMA region per command (contains header and SGL) */
   75 #define AHCI_CMD_TBL_HDR_SZ     0x80
   76 #define AHCI_CMD_TBL_HDR_OFFSET 0x0
   77 #define AHCI_CMD_TBL_SGL_SZ     (MTIP_MAX_SG * sizeof(struct mtip_cmd_sg))
   78 #define AHCI_CMD_TBL_SGL_OFFSET AHCI_CMD_TBL_HDR_SZ
   79 #define CMD_DMA_ALLOC_SZ        (AHCI_CMD_TBL_SGL_SZ + AHCI_CMD_TBL_HDR_SZ)
   80 
   81 
   82 #define HOST_CAP_NZDMA		(1 << 19)
   83 #define HOST_HSORG		0xFC
   84 #define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
   85 #define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
   86 #define HSORG_HWREV		0xFF00
   87 #define HSORG_STYLE		0x8
   88 #define HSORG_SLOTGROUPS	0x7
   89 
   90 #define PORT_COMMAND_ISSUE	0x38
   91 #define PORT_SDBV		0x7C
   92 
   93 #define PORT_OFFSET		0x100
   94 #define PORT_MEM_SIZE		0x80
   95 
   96 #define PORT_IRQ_ERR \
   97 	(PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
   98 	 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
   99 	 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
  100 	 PORT_IRQ_OVERFLOW)
  101 #define PORT_IRQ_LEGACY \
  102 	(PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
  103 #define PORT_IRQ_HANDLED \
  104 	(PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
  105 	 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
  106 	 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
  107 #define DEF_PORT_IRQ \
  108 	(PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
  109 
  110 /* product numbers */
  111 #define MTIP_PRODUCT_UNKNOWN	0x00
  112 #define MTIP_PRODUCT_ASICFPGA	0x11
  113 
  114 /* Device instance number, incremented each time a device is probed. */
  115 static int instance;
  116 
  117 static struct list_head online_list;
  118 static struct list_head removing_list;
  119 static spinlock_t dev_lock;
  120 
  121 /*
  122  * Global variable used to hold the major block device number
  123  * allocated in mtip_init().
  124  */
  125 static int mtip_major;
  126 static struct dentry *dfs_parent;
  127 static struct dentry *dfs_device_status;
  128 
  129 static u32 cpu_use[NR_CPUS];
  130 
  131 static DEFINE_SPINLOCK(rssd_index_lock);
  132 static DEFINE_IDA(rssd_index_ida);
  133 
  134 static int mtip_block_initialize(struct driver_data *dd);
  135 
  136 #ifdef CONFIG_COMPAT
  137 struct mtip_compat_ide_task_request_s {
  138 	__u8		io_ports[8];
  139 	__u8		hob_ports[8];
  140 	ide_reg_valid_t	out_flags;
  141 	ide_reg_valid_t	in_flags;
  142 	int		data_phase;
  143 	int		req_cmd;
  144 	compat_ulong_t	out_size;
  145 	compat_ulong_t	in_size;
  146 };
  147 #endif
  148 
  149 /*
  150  * This function check_for_surprise_removal is called
  151  * while card is removed from the system and it will
  152  * read the vendor id from the configration space
  153  *
  154  * @pdev Pointer to the pci_dev structure.
  155  *
  156  * return value
  157  *	 true if device removed, else false
  158  */
  159 static bool mtip_check_surprise_removal(struct pci_dev *pdev)
  160 {
  161 	u16 vendor_id = 0;
  162 	struct driver_data *dd = pci_get_drvdata(pdev);
  163 
  164 	if (dd->sr)
  165 		return true;
  166 
  167        /* Read the vendorID from the configuration space */
  168 	pci_read_config_word(pdev, 0x00, &vendor_id);
  169 	if (vendor_id == 0xFFFF) {
  170 		dd->sr = true;
  171 		if (dd->queue)
  172 			set_bit(QUEUE_FLAG_DEAD, &dd->queue->queue_flags);
  173 		else
  174 			dev_warn(&dd->pdev->dev,
  175 				"%s: dd->queue is NULL\n", __func__);
  176 		return true; /* device removed */
  177 	}
  178 
  179 	return false; /* device present */
  180 }
  181 
  182 static struct mtip_cmd *mtip_get_int_command(struct driver_data *dd)
  183 {
  184 	struct request *rq;
  185 
  186 	rq = blk_mq_alloc_request(dd->queue, 0, BLK_MQ_REQ_RESERVED);
  187 	return blk_mq_rq_to_pdu(rq);
  188 }
  189 
  190 static void mtip_put_int_command(struct driver_data *dd, struct mtip_cmd *cmd)
  191 {
  192 	blk_put_request(blk_mq_rq_from_pdu(cmd));
  193 }
  194 
  195 /*
  196  * Once we add support for one hctx per mtip group, this will change a bit
  197  */
  198 static struct request *mtip_rq_from_tag(struct driver_data *dd,
  199 					unsigned int tag)
  200 {
  201 	struct blk_mq_hw_ctx *hctx = dd->queue->queue_hw_ctx[0];
  202 
  203 	return blk_mq_tag_to_rq(hctx->tags, tag);
  204 }
  205 
  206 static struct mtip_cmd *mtip_cmd_from_tag(struct driver_data *dd,
  207 					  unsigned int tag)
  208 {
  209 	struct request *rq = mtip_rq_from_tag(dd, tag);
  210 
  211 	return blk_mq_rq_to_pdu(rq);
  212 }
  213 
  214 /*
  215  * IO completion function.
  216  *
  217  * This completion function is called by the driver ISR when a
  218  * command that was issued by the kernel completes. It first calls the
  219  * asynchronous completion function which normally calls back into the block
  220  * layer passing the asynchronous callback data, then unmaps the
  221  * scatter list associated with the completed command, and finally
  222  * clears the allocated bit associated with the completed command.
  223  *
  224  * @port   Pointer to the port data structure.
  225  * @tag    Tag of the command.
  226  * @data   Pointer to driver_data.
  227  * @status Completion status.
  228  *
  229  * return value
  230  *	None
  231  */
  232 static void mtip_async_complete(struct mtip_port *port,
  233 				int tag, struct mtip_cmd *cmd, int status)
  234 {
  235 	struct driver_data *dd = port->dd;
  236 	struct request *rq;
  237 
  238 	if (unlikely(!dd) || unlikely(!port))
  239 		return;
  240 
  241 	if (unlikely(status == PORT_IRQ_TF_ERR)) {
  242 		dev_warn(&port->dd->pdev->dev,
  243 			"Command tag %d failed due to TFE\n", tag);
  244 	}
  245 
  246 	/* Unmap the DMA scatter list entries */
  247 	dma_unmap_sg(&dd->pdev->dev, cmd->sg, cmd->scatter_ents, cmd->direction);
  248 
  249 	rq = mtip_rq_from_tag(dd, tag);
  250 
  251 	if (unlikely(cmd->unaligned))
  252 		up(&port->cmd_slot_unal);
  253 
  254 	blk_mq_end_request(rq, status ? -EIO : 0);
  255 }
  256 
  257 /*
  258  * Reset the HBA (without sleeping)
  259  *
  260  * @dd Pointer to the driver data structure.
  261  *
  262  * return value
  263  *	0	The reset was successful.
  264  *	-1	The HBA Reset bit did not clear.
  265  */
  266 static int mtip_hba_reset(struct driver_data *dd)
  267 {
  268 	unsigned long timeout;
  269 
  270 	/* Set the reset bit */
  271 	writel(HOST_RESET, dd->mmio + HOST_CTL);
  272 
  273 	/* Flush */
  274 	readl(dd->mmio + HOST_CTL);
  275 
  276 	/*
  277 	 * Spin for up to 10 seconds waiting for reset acknowledgement. Spec
  278 	 * is 1 sec but in LUN failure conditions, up to 10 secs are required
  279 	 */
  280 	timeout = jiffies + msecs_to_jiffies(10000);
  281 	do {
  282 		mdelay(10);
  283 		if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &dd->dd_flag))
  284 			return -1;
  285 
  286 	} while ((readl(dd->mmio + HOST_CTL) & HOST_RESET)
  287 		 && time_before(jiffies, timeout));
  288 
  289 	if (readl(dd->mmio + HOST_CTL) & HOST_RESET)
  290 		return -1;
  291 
  292 	return 0;
  293 }
  294 
  295 /*
  296  * Issue a command to the hardware.
  297  *
  298  * Set the appropriate bit in the s_active and Command Issue hardware
  299  * registers, causing hardware command processing to begin.
  300  *
  301  * @port Pointer to the port structure.
  302  * @tag  The tag of the command to be issued.
  303  *
  304  * return value
  305  *      None
  306  */
  307 static inline void mtip_issue_ncq_command(struct mtip_port *port, int tag)
  308 {
  309 	int group = tag >> 5;
  310 
  311 	/* guard SACT and CI registers */
  312 	spin_lock(&port->cmd_issue_lock[group]);
  313 	writel((1 << MTIP_TAG_BIT(tag)),
  314 			port->s_active[MTIP_TAG_INDEX(tag)]);
  315 	writel((1 << MTIP_TAG_BIT(tag)),
  316 			port->cmd_issue[MTIP_TAG_INDEX(tag)]);
  317 	spin_unlock(&port->cmd_issue_lock[group]);
  318 }
  319 
  320 /*
  321  * Enable/disable the reception of FIS
  322  *
  323  * @port   Pointer to the port data structure
  324  * @enable 1 to enable, 0 to disable
  325  *
  326  * return value
  327  *	Previous state: 1 enabled, 0 disabled
  328  */
  329 static int mtip_enable_fis(struct mtip_port *port, int enable)
  330 {
  331 	u32 tmp;
  332 
  333 	/* enable FIS reception */
  334 	tmp = readl(port->mmio + PORT_CMD);
  335 	if (enable)
  336 		writel(tmp | PORT_CMD_FIS_RX, port->mmio + PORT_CMD);
  337 	else
  338 		writel(tmp & ~PORT_CMD_FIS_RX, port->mmio + PORT_CMD);
  339 
  340 	/* Flush */
  341 	readl(port->mmio + PORT_CMD);
  342 
  343 	return (((tmp & PORT_CMD_FIS_RX) == PORT_CMD_FIS_RX));
  344 }
  345 
  346 /*
  347  * Enable/disable the DMA engine
  348  *
  349  * @port   Pointer to the port data structure
  350  * @enable 1 to enable, 0 to disable
  351  *
  352  * return value
  353  *	Previous state: 1 enabled, 0 disabled.
  354  */
  355 static int mtip_enable_engine(struct mtip_port *port, int enable)
  356 {
  357 	u32 tmp;
  358 
  359 	/* enable FIS reception */
  360 	tmp = readl(port->mmio + PORT_CMD);
  361 	if (enable)
  362 		writel(tmp | PORT_CMD_START, port->mmio + PORT_CMD);
  363 	else
  364 		writel(tmp & ~PORT_CMD_START, port->mmio + PORT_CMD);
  365 
  366 	readl(port->mmio + PORT_CMD);
  367 	return (((tmp & PORT_CMD_START) == PORT_CMD_START));
  368 }
  369 
  370 /*
  371  * Enables the port DMA engine and FIS reception.
  372  *
  373  * return value
  374  *	None
  375  */
  376 static inline void mtip_start_port(struct mtip_port *port)
  377 {
  378 	/* Enable FIS reception */
  379 	mtip_enable_fis(port, 1);
  380 
  381 	/* Enable the DMA engine */
  382 	mtip_enable_engine(port, 1);
  383 }
  384 
  385 /*
  386  * Deinitialize a port by disabling port interrupts, the DMA engine,
  387  * and FIS reception.
  388  *
  389  * @port Pointer to the port structure
  390  *
  391  * return value
  392  *	None
  393  */
  394 static inline void mtip_deinit_port(struct mtip_port *port)
  395 {
  396 	/* Disable interrupts on this port */
  397 	writel(0, port->mmio + PORT_IRQ_MASK);
  398 
  399 	/* Disable the DMA engine */
  400 	mtip_enable_engine(port, 0);
  401 
  402 	/* Disable FIS reception */
  403 	mtip_enable_fis(port, 0);
  404 }
  405 
  406 /*
  407  * Initialize a port.
  408  *
  409  * This function deinitializes the port by calling mtip_deinit_port() and
  410  * then initializes it by setting the command header and RX FIS addresses,
  411  * clearing the SError register and any pending port interrupts before
  412  * re-enabling the default set of port interrupts.
  413  *
  414  * @port Pointer to the port structure.
  415  *
  416  * return value
  417  *	None
  418  */
  419 static void mtip_init_port(struct mtip_port *port)
  420 {
  421 	int i;
  422 	mtip_deinit_port(port);
  423 
  424 	/* Program the command list base and FIS base addresses */
  425 	if (readl(port->dd->mmio + HOST_CAP) & HOST_CAP_64) {
  426 		writel((port->command_list_dma >> 16) >> 16,
  427 			 port->mmio + PORT_LST_ADDR_HI);
  428 		writel((port->rxfis_dma >> 16) >> 16,
  429 			 port->mmio + PORT_FIS_ADDR_HI);
  430 	}
  431 
  432 	writel(port->command_list_dma & 0xFFFFFFFF,
  433 			port->mmio + PORT_LST_ADDR);
  434 	writel(port->rxfis_dma & 0xFFFFFFFF, port->mmio + PORT_FIS_ADDR);
  435 
  436 	/* Clear SError */
  437 	writel(readl(port->mmio + PORT_SCR_ERR), port->mmio + PORT_SCR_ERR);
  438 
  439 	/* reset the completed registers.*/
  440 	for (i = 0; i < port->dd->slot_groups; i++)
  441 		writel(0xFFFFFFFF, port->completed[i]);
  442 
  443 	/* Clear any pending interrupts for this port */
  444 	writel(readl(port->mmio + PORT_IRQ_STAT), port->mmio + PORT_IRQ_STAT);
  445 
  446 	/* Clear any pending interrupts on the HBA. */
  447 	writel(readl(port->dd->mmio + HOST_IRQ_STAT),
  448 					port->dd->mmio + HOST_IRQ_STAT);
  449 
  450 	/* Enable port interrupts */
  451 	writel(DEF_PORT_IRQ, port->mmio + PORT_IRQ_MASK);
  452 }
  453 
  454 /*
  455  * Restart a port
  456  *
  457  * @port Pointer to the port data structure.
  458  *
  459  * return value
  460  *	None
  461  */
  462 static void mtip_restart_port(struct mtip_port *port)
  463 {
  464 	unsigned long timeout;
  465 
  466 	/* Disable the DMA engine */
  467 	mtip_enable_engine(port, 0);
  468 
  469 	/* Chip quirk: wait up to 500ms for PxCMD.CR == 0 */
  470 	timeout = jiffies + msecs_to_jiffies(500);
  471 	while ((readl(port->mmio + PORT_CMD) & PORT_CMD_LIST_ON)
  472 		 && time_before(jiffies, timeout))
  473 		;
  474 
  475 	if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &port->dd->dd_flag))
  476 		return;
  477 
  478 	/*
  479 	 * Chip quirk: escalate to hba reset if
  480 	 * PxCMD.CR not clear after 500 ms
  481 	 */
  482 	if (readl(port->mmio + PORT_CMD) & PORT_CMD_LIST_ON) {
  483 		dev_warn(&port->dd->pdev->dev,
  484 			"PxCMD.CR not clear, escalating reset\n");
  485 
  486 		if (mtip_hba_reset(port->dd))
  487 			dev_err(&port->dd->pdev->dev,
  488 				"HBA reset escalation failed.\n");
  489 
  490 		/* 30 ms delay before com reset to quiesce chip */
  491 		mdelay(30);
  492 	}
  493 
  494 	dev_warn(&port->dd->pdev->dev, "Issuing COM reset\n");
  495 
  496 	/* Set PxSCTL.DET */
  497 	writel(readl(port->mmio + PORT_SCR_CTL) |
  498 			 1, port->mmio + PORT_SCR_CTL);
  499 	readl(port->mmio + PORT_SCR_CTL);
  500 
  501 	/* Wait 1 ms to quiesce chip function */
  502 	timeout = jiffies + msecs_to_jiffies(1);
  503 	while (time_before(jiffies, timeout))
  504 		;
  505 
  506 	if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &port->dd->dd_flag))
  507 		return;
  508 
  509 	/* Clear PxSCTL.DET */
  510 	writel(readl(port->mmio + PORT_SCR_CTL) & ~1,
  511 			 port->mmio + PORT_SCR_CTL);
  512 	readl(port->mmio + PORT_SCR_CTL);
  513 
  514 	/* Wait 500 ms for bit 0 of PORT_SCR_STS to be set */
  515 	timeout = jiffies + msecs_to_jiffies(500);
  516 	while (((readl(port->mmio + PORT_SCR_STAT) & 0x01) == 0)
  517 			 && time_before(jiffies, timeout))
  518 		;
  519 
  520 	if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &port->dd->dd_flag))
  521 		return;
  522 
  523 	if ((readl(port->mmio + PORT_SCR_STAT) & 0x01) == 0)
  524 		dev_warn(&port->dd->pdev->dev,
  525 			"COM reset failed\n");
  526 
  527 	mtip_init_port(port);
  528 	mtip_start_port(port);
  529 
  530 }
  531 
  532 static int mtip_device_reset(struct driver_data *dd)
  533 {
  534 	int rv = 0;
  535 
  536 	if (mtip_check_surprise_removal(dd->pdev))
  537 		return 0;
  538 
  539 	if (mtip_hba_reset(dd) < 0)
  540 		rv = -EFAULT;
  541 
  542 	mdelay(1);
  543 	mtip_init_port(dd->port);
  544 	mtip_start_port(dd->port);
  545 
  546 	/* Enable interrupts on the HBA. */
  547 	writel(readl(dd->mmio + HOST_CTL) | HOST_IRQ_EN,
  548 					dd->mmio + HOST_CTL);
  549 	return rv;
  550 }
  551 
  552 /*
  553  * Helper function for tag logging
  554  */
  555 static void print_tags(struct driver_data *dd,
  556 			char *msg,
  557 			unsigned long *tagbits,
  558 			int cnt)
  559 {
  560 	unsigned char tagmap[128];
  561 	int group, tagmap_len = 0;
  562 
  563 	memset(tagmap, 0, sizeof(tagmap));
  564 	for (group = SLOTBITS_IN_LONGS; group > 0; group--)
  565 		tagmap_len += sprintf(tagmap + tagmap_len, "%016lX ",
  566 						tagbits[group-1]);
  567 	dev_warn(&dd->pdev->dev,
  568 			"%d command(s) %s: tagmap [%s]", cnt, msg, tagmap);
  569 }
  570 
  571 /*
  572  * Internal command completion callback function.
  573  *
  574  * This function is normally called by the driver ISR when an internal
  575  * command completed. This function signals the command completion by
  576  * calling complete().
  577  *
  578  * @port   Pointer to the port data structure.
  579  * @tag    Tag of the command that has completed.
  580  * @data   Pointer to a completion structure.
  581  * @status Completion status.
  582  *
  583  * return value
  584  *	None
  585  */
  586 static void mtip_completion(struct mtip_port *port,
  587 			    int tag, struct mtip_cmd *command, int status)
  588 {
  589 	struct completion *waiting = command->comp_data;
  590 	if (unlikely(status == PORT_IRQ_TF_ERR))
  591 		dev_warn(&port->dd->pdev->dev,
  592 			"Internal command %d completed with TFE\n", tag);
  593 
  594 	complete(waiting);
  595 }
  596 
  597 static void mtip_null_completion(struct mtip_port *port,
  598 			    int tag, struct mtip_cmd *command, int status)
  599 {
  600 }
  601 
  602 static int mtip_read_log_page(struct mtip_port *port, u8 page, u16 *buffer,
  603 				dma_addr_t buffer_dma, unsigned int sectors);
  604 static int mtip_get_smart_attr(struct mtip_port *port, unsigned int id,
  605 						struct smart_attr *attrib);
  606 /*
  607  * Handle an error.
  608  *
  609  * @dd Pointer to the DRIVER_DATA structure.
  610  *
  611  * return value
  612  *	None
  613  */
  614 static void mtip_handle_tfe(struct driver_data *dd)
  615 {
  616 	int group, tag, bit, reissue, rv;
  617 	struct mtip_port *port;
  618 	struct mtip_cmd  *cmd;
  619 	u32 completed;
  620 	struct host_to_dev_fis *fis;
  621 	unsigned long tagaccum[SLOTBITS_IN_LONGS];
  622 	unsigned int cmd_cnt = 0;
  623 	unsigned char *buf;
  624 	char *fail_reason = NULL;
  625 	int fail_all_ncq_write = 0, fail_all_ncq_cmds = 0;
  626 
  627 	dev_warn(&dd->pdev->dev, "Taskfile error\n");
  628 
  629 	port = dd->port;
  630 
  631 	set_bit(MTIP_PF_EH_ACTIVE_BIT, &port->flags);
  632 
  633 	if (test_bit(MTIP_PF_IC_ACTIVE_BIT, &port->flags)) {
  634 		cmd = mtip_cmd_from_tag(dd, MTIP_TAG_INTERNAL);
  635 		dbg_printk(MTIP_DRV_NAME " TFE for the internal command\n");
  636 
  637 		if (cmd->comp_data && cmd->comp_func) {
  638 			cmd->comp_func(port, MTIP_TAG_INTERNAL,
  639 					cmd, PORT_IRQ_TF_ERR);
  640 		}
  641 		goto handle_tfe_exit;
  642 	}
  643 
  644 	/* clear the tag accumulator */
  645 	memset(tagaccum, 0, SLOTBITS_IN_LONGS * sizeof(long));
  646 
  647 	/* Loop through all the groups */
  648 	for (group = 0; group < dd->slot_groups; group++) {
  649 		completed = readl(port->completed[group]);
  650 
  651 		dev_warn(&dd->pdev->dev, "g=%u, comp=%x\n", group, completed);
  652 
  653 		/* clear completed status register in the hardware.*/
  654 		writel(completed, port->completed[group]);
  655 
  656 		/* Process successfully completed commands */
  657 		for (bit = 0; bit < 32 && completed; bit++) {
  658 			if (!(completed & (1<<bit)))
  659 				continue;
  660 			tag = (group << 5) + bit;
  661 
  662 			/* Skip the internal command slot */
  663 			if (tag == MTIP_TAG_INTERNAL)
  664 				continue;
  665 
  666 			cmd = mtip_cmd_from_tag(dd, tag);
  667 			if (likely(cmd->comp_func)) {
  668 				set_bit(tag, tagaccum);
  669 				cmd_cnt++;
  670 				cmd->comp_func(port, tag, cmd, 0);
  671 			} else {
  672 				dev_err(&port->dd->pdev->dev,
  673 					"Missing completion func for tag %d",
  674 					tag);
  675 				if (mtip_check_surprise_removal(dd->pdev)) {
  676 					/* don't proceed further */
  677 					return;
  678 				}
  679 			}
  680 		}
  681 	}
  682 
  683 	print_tags(dd, "completed (TFE)", tagaccum, cmd_cnt);
  684 
  685 	/* Restart the port */
  686 	mdelay(20);
  687 	mtip_restart_port(port);
  688 
  689 	/* Trying to determine the cause of the error */
  690 	rv = mtip_read_log_page(dd->port, ATA_LOG_SATA_NCQ,
  691 				dd->port->log_buf,
  692 				dd->port->log_buf_dma, 1);
  693 	if (rv) {
  694 		dev_warn(&dd->pdev->dev,
  695 			"Error in READ LOG EXT (10h) command\n");
  696 		/* non-critical error, don't fail the load */
  697 	} else {
  698 		buf = (unsigned char *)dd->port->log_buf;
  699 		if (buf[259] & 0x1) {
  700 			dev_info(&dd->pdev->dev,
  701 				"Write protect bit is set.\n");
  702 			set_bit(MTIP_DDF_WRITE_PROTECT_BIT, &dd->dd_flag);
  703 			fail_all_ncq_write = 1;
  704 			fail_reason = "write protect";
  705 		}
  706 		if (buf[288] == 0xF7) {
  707 			dev_info(&dd->pdev->dev,
  708 				"Exceeded Tmax, drive in thermal shutdown.\n");
  709 			set_bit(MTIP_DDF_OVER_TEMP_BIT, &dd->dd_flag);
  710 			fail_all_ncq_cmds = 1;
  711 			fail_reason = "thermal shutdown";
  712 		}
  713 		if (buf[288] == 0xBF) {
  714 			set_bit(MTIP_DDF_SEC_LOCK_BIT, &dd->dd_flag);
  715 			dev_info(&dd->pdev->dev,
  716 				"Drive indicates rebuild has failed. Secure erase required.\n");
  717 			fail_all_ncq_cmds = 1;
  718 			fail_reason = "rebuild failed";
  719 		}
  720 	}
  721 
  722 	/* clear the tag accumulator */
  723 	memset(tagaccum, 0, SLOTBITS_IN_LONGS * sizeof(long));
  724 
  725 	/* Loop through all the groups */
  726 	for (group = 0; group < dd->slot_groups; group++) {
  727 		for (bit = 0; bit < 32; bit++) {
  728 			reissue = 1;
  729 			tag = (group << 5) + bit;
  730 			cmd = mtip_cmd_from_tag(dd, tag);
  731 
  732 			fis = (struct host_to_dev_fis *)cmd->command;
  733 
  734 			/* Should re-issue? */
  735 			if (tag == MTIP_TAG_INTERNAL ||
  736 			    fis->command == ATA_CMD_SET_FEATURES)
  737 				reissue = 0;
  738 			else {
  739 				if (fail_all_ncq_cmds ||
  740 					(fail_all_ncq_write &&
  741 					fis->command == ATA_CMD_FPDMA_WRITE)) {
  742 					dev_warn(&dd->pdev->dev,
  743 					"  Fail: %s w/tag %d [%s].\n",
  744 					fis->command == ATA_CMD_FPDMA_WRITE ?
  745 						"write" : "read",
  746 					tag,
  747 					fail_reason != NULL ?
  748 						fail_reason : "unknown");
  749 					if (cmd->comp_func) {
  750 						cmd->comp_func(port, tag,
  751 							cmd, -ENODATA);
  752 					}
  753 					continue;
  754 				}
  755 			}
  756 
  757 			/*
  758 			 * First check if this command has
  759 			 *  exceeded its retries.
  760 			 */
  761 			if (reissue && (cmd->retries-- > 0)) {
  762 
  763 				set_bit(tag, tagaccum);
  764 
  765 				/* Re-issue the command. */
  766 				mtip_issue_ncq_command(port, tag);
  767 
  768 				continue;
  769 			}
  770 
  771 			/* Retire a command that will not be reissued */
  772 			dev_warn(&port->dd->pdev->dev,
  773 				"retiring tag %d\n", tag);
  774 
  775 			if (cmd->comp_func)
  776 				cmd->comp_func(port, tag, cmd, PORT_IRQ_TF_ERR);
  777 			else
  778 				dev_warn(&port->dd->pdev->dev,
  779 					"Bad completion for tag %d\n",
  780 					tag);
  781 		}
  782 	}
  783 	print_tags(dd, "reissued (TFE)", tagaccum, cmd_cnt);
  784 
  785 handle_tfe_exit:
  786 	/* clear eh_active */
  787 	clear_bit(MTIP_PF_EH_ACTIVE_BIT, &port->flags);
  788 	wake_up_interruptible(&port->svc_wait);
  789 }
  790 
  791 /*
  792  * Handle a set device bits interrupt
  793  */
  794 static inline void mtip_workq_sdbfx(struct mtip_port *port, int group,
  795 							u32 completed)
  796 {
  797 	struct driver_data *dd = port->dd;
  798 	int tag, bit;
  799 	struct mtip_cmd *command;
  800 
  801 	if (!completed) {
  802 		WARN_ON_ONCE(!completed);
  803 		return;
  804 	}
  805 	/* clear completed status register in the hardware.*/
  806 	writel(completed, port->completed[group]);
  807 
  808 	/* Process completed commands. */
  809 	for (bit = 0; (bit < 32) && completed; bit++) {
  810 		if (completed & 0x01) {
  811 			tag = (group << 5) | bit;
  812 
  813 			/* skip internal command slot. */
  814 			if (unlikely(tag == MTIP_TAG_INTERNAL))
  815 				continue;
  816 
  817 			command = mtip_cmd_from_tag(dd, tag);
  818 			if (likely(command->comp_func))
  819 				command->comp_func(port, tag, command, 0);
  820 			else {
  821 				dev_dbg(&dd->pdev->dev,
  822 					"Null completion for tag %d",
  823 					tag);
  824 
  825 				if (mtip_check_surprise_removal(
  826 					dd->pdev)) {
  827 					return;
  828 				}
  829 			}
  830 		}
  831 		completed >>= 1;
  832 	}
  833 
  834 	/* If last, re-enable interrupts */
  835 	if (atomic_dec_return(&dd->irq_workers_active) == 0)
  836 		writel(0xffffffff, dd->mmio + HOST_IRQ_STAT);
  837 }
  838 
  839 /*
  840  * Process legacy pio and d2h interrupts
  841  */
  842 static inline void mtip_process_legacy(struct driver_data *dd, u32 port_stat)
  843 {
  844 	struct mtip_port *port = dd->port;
  845 	struct mtip_cmd *cmd = mtip_cmd_from_tag(dd, MTIP_TAG_INTERNAL);
  846 
  847 	if (test_bit(MTIP_PF_IC_ACTIVE_BIT, &port->flags) &&
  848 	    (cmd != NULL) && !(readl(port->cmd_issue[MTIP_TAG_INTERNAL])
  849 		& (1 << MTIP_TAG_INTERNAL))) {
  850 		if (cmd->comp_func) {
  851 			cmd->comp_func(port, MTIP_TAG_INTERNAL, cmd, 0);
  852 			return;
  853 		}
  854 	}
  855 
  856 	return;
  857 }
  858 
  859 /*
  860  * Demux and handle errors
  861  */
  862 static inline void mtip_process_errors(struct driver_data *dd, u32 port_stat)
  863 {
  864 
  865 	if (unlikely(port_stat & PORT_IRQ_CONNECT)) {
  866 		dev_warn(&dd->pdev->dev,
  867 			"Clearing PxSERR.DIAG.x\n");
  868 		writel((1 << 26), dd->port->mmio + PORT_SCR_ERR);
  869 	}
  870 
  871 	if (unlikely(port_stat & PORT_IRQ_PHYRDY)) {
  872 		dev_warn(&dd->pdev->dev,
  873 			"Clearing PxSERR.DIAG.n\n");
  874 		writel((1 << 16), dd->port->mmio + PORT_SCR_ERR);
  875 	}
  876 
  877 	if (unlikely(port_stat & ~PORT_IRQ_HANDLED)) {
  878 		dev_warn(&dd->pdev->dev,
  879 			"Port stat errors %x unhandled\n",
  880 			(port_stat & ~PORT_IRQ_HANDLED));
  881 		if (mtip_check_surprise_removal(dd->pdev))
  882 			return;
  883 	}
  884 	if (likely(port_stat & (PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR))) {
  885 		set_bit(MTIP_PF_EH_ACTIVE_BIT, &dd->port->flags);
  886 		wake_up_interruptible(&dd->port->svc_wait);
  887 	}
  888 }
  889 
  890 static inline irqreturn_t mtip_handle_irq(struct driver_data *data)
  891 {
  892 	struct driver_data *dd = (struct driver_data *) data;
  893 	struct mtip_port *port = dd->port;
  894 	u32 hba_stat, port_stat;
  895 	int rv = IRQ_NONE;
  896 	int do_irq_enable = 1, i, workers;
  897 	struct mtip_work *twork;
  898 
  899 	hba_stat = readl(dd->mmio + HOST_IRQ_STAT);
  900 	if (hba_stat) {
  901 		rv = IRQ_HANDLED;
  902 
  903 		/* Acknowledge the interrupt status on the port.*/
  904 		port_stat = readl(port->mmio + PORT_IRQ_STAT);
  905 		if (unlikely(port_stat == 0xFFFFFFFF)) {
  906 			mtip_check_surprise_removal(dd->pdev);
  907 			return IRQ_HANDLED;
  908 		}
  909 		writel(port_stat, port->mmio + PORT_IRQ_STAT);
  910 
  911 		/* Demux port status */
  912 		if (likely(port_stat & PORT_IRQ_SDB_FIS)) {
  913 			do_irq_enable = 0;
  914 			WARN_ON_ONCE(atomic_read(&dd->irq_workers_active) != 0);
  915 
  916 			/* Start at 1: group zero is always local? */
  917 			for (i = 0, workers = 0; i < MTIP_MAX_SLOT_GROUPS;
  918 									i++) {
  919 				twork = &dd->work[i];
  920 				twork->completed = readl(port->completed[i]);
  921 				if (twork->completed)
  922 					workers++;
  923 			}
  924 
  925 			atomic_set(&dd->irq_workers_active, workers);
  926 			if (workers) {
  927 				for (i = 1; i < MTIP_MAX_SLOT_GROUPS; i++) {
  928 					twork = &dd->work[i];
  929 					if (twork->completed)
  930 						queue_work_on(
  931 							twork->cpu_binding,
  932 							dd->isr_workq,
  933 							&twork->work);
  934 				}
  935 
  936 				if (likely(dd->work[0].completed))
  937 					mtip_workq_sdbfx(port, 0,
  938 							dd->work[0].completed);
  939 
  940 			} else {
  941 				/*
  942 				 * Chip quirk: SDB interrupt but nothing
  943 				 * to complete
  944 				 */
  945 				do_irq_enable = 1;
  946 			}
  947 		}
  948 
  949 		if (unlikely(port_stat & PORT_IRQ_ERR)) {
  950 			if (unlikely(mtip_check_surprise_removal(dd->pdev))) {
  951 				/* don't proceed further */
  952 				return IRQ_HANDLED;
  953 			}
  954 			if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT,
  955 							&dd->dd_flag))
  956 				return rv;
  957 
  958 			mtip_process_errors(dd, port_stat & PORT_IRQ_ERR);
  959 		}
  960 
  961 		if (unlikely(port_stat & PORT_IRQ_LEGACY))
  962 			mtip_process_legacy(dd, port_stat & PORT_IRQ_LEGACY);
  963 	}
  964 
  965 	/* acknowledge interrupt */
  966 	if (unlikely(do_irq_enable))
  967 		writel(hba_stat, dd->mmio + HOST_IRQ_STAT);
  968 
  969 	return rv;
  970 }
  971 
  972 /*
  973  * HBA interrupt subroutine.
  974  *
  975  * @irq		IRQ number.
  976  * @instance	Pointer to the driver data structure.
  977  *
  978  * return value
  979  *	IRQ_HANDLED	A HBA interrupt was pending and handled.
  980  *	IRQ_NONE	This interrupt was not for the HBA.
  981  */
  982 static irqreturn_t mtip_irq_handler(int irq, void *instance)
  983 {
  984 	struct driver_data *dd = instance;
  985 
  986 	return mtip_handle_irq(dd);
  987 }
  988 
  989 static void mtip_issue_non_ncq_command(struct mtip_port *port, int tag)
  990 {
  991 	writel(1 << MTIP_TAG_BIT(tag),
  992 		port->cmd_issue[MTIP_TAG_INDEX(tag)]);
  993 }
  994 
  995 static bool mtip_pause_ncq(struct mtip_port *port,
  996 				struct host_to_dev_fis *fis)
  997 {
  998 	struct host_to_dev_fis *reply;
  999 	unsigned long task_file_data;
 1000 
 1001 	reply = port->rxfis + RX_FIS_D2H_REG;
 1002 	task_file_data = readl(port->mmio+PORT_TFDATA);
 1003 
 1004 	if ((task_file_data & 1))
 1005 		return false;
 1006 
 1007 	if (fis->command == ATA_CMD_SEC_ERASE_PREP) {
 1008 		port->ic_pause_timer = jiffies;
 1009 		return true;
 1010 	} else if ((fis->command == ATA_CMD_DOWNLOAD_MICRO) &&
 1011 					(fis->features == 0x03)) {
 1012 		set_bit(MTIP_PF_DM_ACTIVE_BIT, &port->flags);
 1013 		port->ic_pause_timer = jiffies;
 1014 		return true;
 1015 	} else if ((fis->command == ATA_CMD_SEC_ERASE_UNIT) ||
 1016 		((fis->command == 0xFC) &&
 1017 			(fis->features == 0x27 || fis->features == 0x72 ||
 1018 			 fis->features == 0x62 || fis->features == 0x26))) {
 1019 		clear_bit(MTIP_DDF_SEC_LOCK_BIT, &port->dd->dd_flag);
 1020 		/* Com reset after secure erase or lowlevel format */
 1021 		mtip_restart_port(port);
 1022 		clear_bit(MTIP_PF_SE_ACTIVE_BIT, &port->flags);
 1023 		return false;
 1024 	}
 1025 
 1026 	return false;
 1027 }
 1028 
 1029 /*
 1030  * Wait for port to quiesce
 1031  *
 1032  * @port    Pointer to port data structure
 1033  * @timeout Max duration to wait (ms)
 1034  *
 1035  * return value
 1036  *	0	Success
 1037  *	-EBUSY  Commands still active
 1038  */
 1039 static int mtip_quiesce_io(struct mtip_port *port, unsigned long timeout)
 1040 {
 1041 	unsigned long to;
 1042 	unsigned int n;
 1043 	unsigned int active = 1;
 1044 
 1045 	blk_mq_stop_hw_queues(port->dd->queue);
 1046 
 1047 	to = jiffies + msecs_to_jiffies(timeout);
 1048 	do {
 1049 		if (test_bit(MTIP_PF_SVC_THD_ACTIVE_BIT, &port->flags) &&
 1050 			test_bit(MTIP_PF_ISSUE_CMDS_BIT, &port->flags)) {
 1051 			msleep(20);
 1052 			continue; /* svc thd is actively issuing commands */
 1053 		}
 1054 
 1055 		msleep(100);
 1056 		if (mtip_check_surprise_removal(port->dd->pdev))
 1057 			goto err_fault;
 1058 		if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &port->dd->dd_flag))
 1059 			goto err_fault;
 1060 
 1061 		/*
 1062 		 * Ignore s_active bit 0 of array element 0.
 1063 		 * This bit will always be set
 1064 		 */
 1065 		active = readl(port->s_active[0]) & 0xFFFFFFFE;
 1066 		for (n = 1; n < port->dd->slot_groups; n++)
 1067 			active |= readl(port->s_active[n]);
 1068 
 1069 		if (!active)
 1070 			break;
 1071 	} while (time_before(jiffies, to));
 1072 
 1073 	blk_mq_start_stopped_hw_queues(port->dd->queue, true);
 1074 	return active ? -EBUSY : 0;
 1075 err_fault:
 1076 	blk_mq_start_stopped_hw_queues(port->dd->queue, true);
 1077 	return -EFAULT;
 1078 }
 1079 
 1080 /*
 1081  * Execute an internal command and wait for the completion.
 1082  *
 1083  * @port    Pointer to the port data structure.
 1084  * @fis     Pointer to the FIS that describes the command.
 1085  * @fis_len  Length in WORDS of the FIS.
 1086  * @buffer  DMA accessible for command data.
 1087  * @buf_len  Length, in bytes, of the data buffer.
 1088  * @opts    Command header options, excluding the FIS length
 1089  *             and the number of PRD entries.
 1090  * @timeout Time in ms to wait for the command to complete.
 1091  *
 1092  * return value
 1093  *	0	 Command completed successfully.
 1094  *	-EFAULT  The buffer address is not correctly aligned.
 1095  *	-EBUSY   Internal command or other IO in progress.
 1096  *	-EAGAIN  Time out waiting for command to complete.
 1097  */
 1098 static int mtip_exec_internal_command(struct mtip_port *port,
 1099 					struct host_to_dev_fis *fis,
 1100 					int fis_len,
 1101 					dma_addr_t buffer,
 1102 					int buf_len,
 1103 					u32 opts,
 1104 					gfp_t atomic,
 1105 					unsigned long timeout)
 1106 {
 1107 	struct mtip_cmd_sg *command_sg;
 1108 	DECLARE_COMPLETION_ONSTACK(wait);
 1109 	struct mtip_cmd *int_cmd;
 1110 	struct driver_data *dd = port->dd;
 1111 	int rv = 0;
 1112 
 1113 	/* Make sure the buffer is 8 byte aligned. This is asic specific. */
 1114 	if (buffer & 0x00000007) {
 1115 		dev_err(&dd->pdev->dev, "SG buffer is not 8 byte aligned\n");
 1116 		return -EFAULT;
 1117 	}
 1118 
 1119 	int_cmd = mtip_get_int_command(dd);
 1120 
 1121 	set_bit(MTIP_PF_IC_ACTIVE_BIT, &port->flags);
 1122 
 1123 	if (fis->command == ATA_CMD_SEC_ERASE_PREP)
 1124 		set_bit(MTIP_PF_SE_ACTIVE_BIT, &port->flags);
 1125 
 1126 	clear_bit(MTIP_PF_DM_ACTIVE_BIT, &port->flags);
 1127 
 1128 	if (atomic == GFP_KERNEL) {
 1129 		if (fis->command != ATA_CMD_STANDBYNOW1) {
 1130 			/* wait for io to complete if non atomic */
 1131 			if (mtip_quiesce_io(port,
 1132 					MTIP_QUIESCE_IO_TIMEOUT_MS) < 0) {
 1133 				dev_warn(&dd->pdev->dev,
 1134 					"Failed to quiesce IO\n");
 1135 				mtip_put_int_command(dd, int_cmd);
 1136 				clear_bit(MTIP_PF_IC_ACTIVE_BIT, &port->flags);
 1137 				wake_up_interruptible(&port->svc_wait);
 1138 				return -EBUSY;
 1139 			}
 1140 		}
 1141 
 1142 		/* Set the completion function and data for the command. */
 1143 		int_cmd->comp_data = &wait;
 1144 		int_cmd->comp_func = mtip_completion;
 1145 
 1146 	} else {
 1147 		/* Clear completion - we're going to poll */
 1148 		int_cmd->comp_data = NULL;
 1149 		int_cmd->comp_func = mtip_null_completion;
 1150 	}
 1151 
 1152 	/* Copy the command to the command table */
 1153 	memcpy(int_cmd->command, fis, fis_len*4);
 1154 
 1155 	/* Populate the SG list */
 1156 	int_cmd->command_header->opts =
 1157 		 __force_bit2int cpu_to_le32(opts | fis_len);
 1158 	if (buf_len) {
 1159 		command_sg = int_cmd->command + AHCI_CMD_TBL_HDR_SZ;
 1160 
 1161 		command_sg->info =
 1162 			__force_bit2int cpu_to_le32((buf_len-1) & 0x3FFFFF);
 1163 		command_sg->dba	=
 1164 			__force_bit2int cpu_to_le32(buffer & 0xFFFFFFFF);
 1165 		command_sg->dba_upper =
 1166 			__force_bit2int cpu_to_le32((buffer >> 16) >> 16);
 1167 
 1168 		int_cmd->command_header->opts |=
 1169 			__force_bit2int cpu_to_le32((1 << 16));
 1170 	}
 1171 
 1172 	/* Populate the command header */
 1173 	int_cmd->command_header->byte_count = 0;
 1174 
 1175 	/* Issue the command to the hardware */
 1176 	mtip_issue_non_ncq_command(port, MTIP_TAG_INTERNAL);
 1177 
 1178 	if (atomic == GFP_KERNEL) {
 1179 		/* Wait for the command to complete or timeout. */
 1180 		if ((rv = wait_for_completion_interruptible_timeout(
 1181 				&wait,
 1182 				msecs_to_jiffies(timeout))) <= 0) {
 1183 			if (rv == -ERESTARTSYS) { /* interrupted */
 1184 				dev_err(&dd->pdev->dev,
 1185 					"Internal command [%02X] was interrupted after %lu ms\n",
 1186 					fis->command, timeout);
 1187 				rv = -EINTR;
 1188 				goto exec_ic_exit;
 1189 			} else if (rv == 0) /* timeout */
 1190 				dev_err(&dd->pdev->dev,
 1191 					"Internal command did not complete [%02X] within timeout of  %lu ms\n",
 1192 					fis->command, timeout);
 1193 			else
 1194 				dev_err(&dd->pdev->dev,
 1195 					"Internal command [%02X] wait returned code [%d] after %lu ms - unhandled\n",
 1196 					fis->command, rv, timeout);
 1197 
 1198 			if (mtip_check_surprise_removal(dd->pdev) ||
 1199 				test_bit(MTIP_DDF_REMOVE_PENDING_BIT,
 1200 						&dd->dd_flag)) {
 1201 				dev_err(&dd->pdev->dev,
 1202 					"Internal command [%02X] wait returned due to SR\n",
 1203 					fis->command);
 1204 				rv = -ENXIO;
 1205 				goto exec_ic_exit;
 1206 			}
 1207 			mtip_device_reset(dd); /* recover from timeout issue */
 1208 			rv = -EAGAIN;
 1209 			goto exec_ic_exit;
 1210 		}
 1211 	} else {
 1212 		u32 hba_stat, port_stat;
 1213 
 1214 		/* Spin for <timeout> checking if command still outstanding */
 1215 		timeout = jiffies + msecs_to_jiffies(timeout);
 1216 		while ((readl(port->cmd_issue[MTIP_TAG_INTERNAL])
 1217 				& (1 << MTIP_TAG_INTERNAL))
 1218 				&& time_before(jiffies, timeout)) {
 1219 			if (mtip_check_surprise_removal(dd->pdev)) {
 1220 				rv = -ENXIO;
 1221 				goto exec_ic_exit;
 1222 			}
 1223 			if ((fis->command != ATA_CMD_STANDBYNOW1) &&
 1224 				test_bit(MTIP_DDF_REMOVE_PENDING_BIT,
 1225 						&dd->dd_flag)) {
 1226 				rv = -ENXIO;
 1227 				goto exec_ic_exit;
 1228 			}
 1229 			port_stat = readl(port->mmio + PORT_IRQ_STAT);
 1230 			if (!port_stat)
 1231 				continue;
 1232 
 1233 			if (port_stat & PORT_IRQ_ERR) {
 1234 				dev_err(&dd->pdev->dev,
 1235 					"Internal command [%02X] failed\n",
 1236 					fis->command);
 1237 				mtip_device_reset(dd);
 1238 				rv = -EIO;
 1239 				goto exec_ic_exit;
 1240 			} else {
 1241 				writel(port_stat, port->mmio + PORT_IRQ_STAT);
 1242 				hba_stat = readl(dd->mmio + HOST_IRQ_STAT);
 1243 				if (hba_stat)
 1244 					writel(hba_stat,
 1245 						dd->mmio + HOST_IRQ_STAT);
 1246 			}
 1247 			break;
 1248 		}
 1249 	}
 1250 
 1251 	if (readl(port->cmd_issue[MTIP_TAG_INTERNAL])
 1252 			& (1 << MTIP_TAG_INTERNAL)) {
 1253 		rv = -ENXIO;
 1254 		if (!test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &dd->dd_flag)) {
 1255 			mtip_device_reset(dd);
 1256 			rv = -EAGAIN;
 1257 		}
 1258 	}
 1259 exec_ic_exit:
 1260 	/* Clear the allocated and active bits for the internal command. */
 1261 	mtip_put_int_command(dd, int_cmd);
 1262 	clear_bit(MTIP_PF_IC_ACTIVE_BIT, &port->flags);
 1263 	if (rv >= 0 && mtip_pause_ncq(port, fis)) {
 1264 		/* NCQ paused */
 1265 		return rv;
 1266 	}
 1267 	wake_up_interruptible(&port->svc_wait);
 1268 
 1269 	return rv;
 1270 }
 1271 
 1272 /*
 1273  * Byte-swap ATA ID strings.
 1274  *
 1275  * ATA identify data contains strings in byte-swapped 16-bit words.
 1276  * They must be swapped (on all architectures) to be usable as C strings.
 1277  * This function swaps bytes in-place.
 1278  *
 1279  * @buf The buffer location of the string
 1280  * @len The number of bytes to swap
 1281  *
 1282  * return value
 1283  *	None
 1284  */
 1285 static inline void ata_swap_string(u16 *buf, unsigned int len)
 1286 {
 1287 	int i;
 1288 	for (i = 0; i < (len/2); i++)
 1289 		be16_to_cpus(&buf[i]);
 1290 }
 1291 
 1292 static void mtip_set_timeout(struct driver_data *dd,
 1293 					struct host_to_dev_fis *fis,
 1294 					unsigned int *timeout, u8 erasemode)
 1295 {
 1296 	switch (fis->command) {
 1297 	case ATA_CMD_DOWNLOAD_MICRO:
 1298 		*timeout = 120000; /* 2 minutes */
 1299 		break;
 1300 	case ATA_CMD_SEC_ERASE_UNIT:
 1301 	case 0xFC:
 1302 		if (erasemode)
 1303 			*timeout = ((*(dd->port->identify + 90) * 2) * 60000);
 1304 		else
 1305 			*timeout = ((*(dd->port->identify + 89) * 2) * 60000);
 1306 		break;
 1307 	case ATA_CMD_STANDBYNOW1:
 1308 		*timeout = 120000;  /* 2 minutes */
 1309 		break;
 1310 	case 0xF7:
 1311 	case 0xFA:
 1312 		*timeout = 60000;  /* 60 seconds */
 1313 		break;
 1314 	case ATA_CMD_SMART:
 1315 		*timeout = 15000;  /* 15 seconds */
 1316 		break;
 1317 	default:
 1318 		*timeout = MTIP_IOCTL_CMD_TIMEOUT_MS;
 1319 		break;
 1320 	}
 1321 }
 1322 
 1323 /*
 1324  * Request the device identity information.
 1325  *
 1326  * If a user space buffer is not specified, i.e. is NULL, the
 1327  * identify information is still read from the drive and placed
 1328  * into the identify data buffer (@e port->identify) in the
 1329  * port data structure.
 1330  * When the identify buffer contains valid identify information @e
 1331  * port->identify_valid is non-zero.
 1332  *
 1333  * @port	 Pointer to the port structure.
 1334  * @user_buffer  A user space buffer where the identify data should be
 1335  *                    copied.
 1336  *
 1337  * return value
 1338  *	0	Command completed successfully.
 1339  *	-EFAULT An error occurred while coping data to the user buffer.
 1340  *	-1	Command failed.
 1341  */
 1342 static int mtip_get_identify(struct mtip_port *port, void __user *user_buffer)
 1343 {
 1344 	int rv = 0;
 1345 	struct host_to_dev_fis fis;
 1346 
 1347 	if (test_bit(MTIP_DDF_REMOVE_PENDING_BIT, &port->dd->dd_flag))
 1348 		return -EFAULT;
 1349 
 1350 	/* Build the FIS. */
 1351 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 1352 	fis.type	= 0x27;
 1353 	fis.opts	= 1 << 7;
 1354 	fis.command	= ATA_CMD_ID_ATA;
 1355 
 1356 	/* Set the identify information as invalid. */
 1357 	port->identify_valid = 0;
 1358 
 1359 	/* Clear the identify information. */
 1360 	memset(port->identify, 0, sizeof(u16) * ATA_ID_WORDS);
 1361 
 1362 	/* Execute the command. */
 1363 	if (mtip_exec_internal_command(port,
 1364 				&fis,
 1365 				5,
 1366 				port->identify_dma,
 1367 				sizeof(u16) * ATA_ID_WORDS,
 1368 				0,
 1369 				GFP_KERNEL,
 1370 				MTIP_INT_CMD_TIMEOUT_MS)
 1371 				< 0) {
 1372 		rv = -1;
 1373 		goto out;
 1374 	}
 1375 
 1376 	/*
 1377 	 * Perform any necessary byte-swapping.  Yes, the kernel does in fact
 1378 	 * perform field-sensitive swapping on the string fields.
 1379 	 * See the kernel use of ata_id_string() for proof of this.
 1380 	 */
 1381 #ifdef __LITTLE_ENDIAN
 1382 	ata_swap_string(port->identify + 27, 40);  /* model string*/
 1383 	ata_swap_string(port->identify + 23, 8);   /* firmware string*/
 1384 	ata_swap_string(port->identify + 10, 20);  /* serial# string*/
 1385 #else
 1386 	{
 1387 		int i;
 1388 		for (i = 0; i < ATA_ID_WORDS; i++)
 1389 			port->identify[i] = le16_to_cpu(port->identify[i]);
 1390 	}
 1391 #endif
 1392 
 1393 	/* Check security locked state */
 1394 	if (port->identify[128] & 0x4)
 1395 		set_bit(MTIP_DDF_SEC_LOCK_BIT, &port->dd->dd_flag);
 1396 	else
 1397 		clear_bit(MTIP_DDF_SEC_LOCK_BIT, &port->dd->dd_flag);
 1398 
 1399 #ifdef MTIP_TRIM /* Disabling TRIM support temporarily */
 1400 	/* Demux ID.DRAT & ID.RZAT to determine trim support */
 1401 	if (port->identify[69] & (1 << 14) && port->identify[69] & (1 << 5))
 1402 		port->dd->trim_supp = true;
 1403 	else
 1404 #endif
 1405 		port->dd->trim_supp = false;
 1406 
 1407 	/* Set the identify buffer as valid. */
 1408 	port->identify_valid = 1;
 1409 
 1410 	if (user_buffer) {
 1411 		if (copy_to_user(
 1412 			user_buffer,
 1413 			port->identify,
 1414 			ATA_ID_WORDS * sizeof(u16))) {
 1415 			rv = -EFAULT;
 1416 			goto out;
 1417 		}
 1418 	}
 1419 
 1420 out:
 1421 	return rv;
 1422 }
 1423 
 1424 /*
 1425  * Issue a standby immediate command to the device.
 1426  *
 1427  * @port Pointer to the port structure.
 1428  *
 1429  * return value
 1430  *	0	Command was executed successfully.
 1431  *	-1	An error occurred while executing the command.
 1432  */
 1433 static int mtip_standby_immediate(struct mtip_port *port)
 1434 {
 1435 	int rv;
 1436 	struct host_to_dev_fis	fis;
 1437 	unsigned long start;
 1438 	unsigned int timeout;
 1439 
 1440 	/* Build the FIS. */
 1441 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 1442 	fis.type	= 0x27;
 1443 	fis.opts	= 1 << 7;
 1444 	fis.command	= ATA_CMD_STANDBYNOW1;
 1445 
 1446 	mtip_set_timeout(port->dd, &fis, &timeout, 0);
 1447 
 1448 	start = jiffies;
 1449 	rv = mtip_exec_internal_command(port,
 1450 					&fis,
 1451 					5,
 1452 					0,
 1453 					0,
 1454 					0,
 1455 					GFP_ATOMIC,
 1456 					timeout);
 1457 	dbg_printk(MTIP_DRV_NAME "Time taken to complete standby cmd: %d ms\n",
 1458 			jiffies_to_msecs(jiffies - start));
 1459 	if (rv)
 1460 		dev_warn(&port->dd->pdev->dev,
 1461 			"STANDBY IMMEDIATE command failed.\n");
 1462 
 1463 	return rv;
 1464 }
 1465 
 1466 /*
 1467  * Issue a READ LOG EXT command to the device.
 1468  *
 1469  * @port	pointer to the port structure.
 1470  * @page	page number to fetch
 1471  * @buffer	pointer to buffer
 1472  * @buffer_dma	dma address corresponding to @buffer
 1473  * @sectors	page length to fetch, in sectors
 1474  *
 1475  * return value
 1476  *	@rv	return value from mtip_exec_internal_command()
 1477  */
 1478 static int mtip_read_log_page(struct mtip_port *port, u8 page, u16 *buffer,
 1479 				dma_addr_t buffer_dma, unsigned int sectors)
 1480 {
 1481 	struct host_to_dev_fis fis;
 1482 
 1483 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 1484 	fis.type	= 0x27;
 1485 	fis.opts	= 1 << 7;
 1486 	fis.command	= ATA_CMD_READ_LOG_EXT;
 1487 	fis.sect_count	= sectors & 0xFF;
 1488 	fis.sect_cnt_ex	= (sectors >> 8) & 0xFF;
 1489 	fis.lba_low	= page;
 1490 	fis.lba_mid	= 0;
 1491 	fis.device	= ATA_DEVICE_OBS;
 1492 
 1493 	memset(buffer, 0, sectors * ATA_SECT_SIZE);
 1494 
 1495 	return mtip_exec_internal_command(port,
 1496 					&fis,
 1497 					5,
 1498 					buffer_dma,
 1499 					sectors * ATA_SECT_SIZE,
 1500 					0,
 1501 					GFP_ATOMIC,
 1502 					MTIP_INT_CMD_TIMEOUT_MS);
 1503 }
 1504 
 1505 /*
 1506  * Issue a SMART READ DATA command to the device.
 1507  *
 1508  * @port	pointer to the port structure.
 1509  * @buffer	pointer to buffer
 1510  * @buffer_dma	dma address corresponding to @buffer
 1511  *
 1512  * return value
 1513  *	@rv	return value from mtip_exec_internal_command()
 1514  */
 1515 static int mtip_get_smart_data(struct mtip_port *port, u8 *buffer,
 1516 					dma_addr_t buffer_dma)
 1517 {
 1518 	struct host_to_dev_fis fis;
 1519 
 1520 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 1521 	fis.type	= 0x27;
 1522 	fis.opts	= 1 << 7;
 1523 	fis.command	= ATA_CMD_SMART;
 1524 	fis.features	= 0xD0;
 1525 	fis.sect_count	= 1;
 1526 	fis.lba_mid	= 0x4F;
 1527 	fis.lba_hi	= 0xC2;
 1528 	fis.device	= ATA_DEVICE_OBS;
 1529 
 1530 	return mtip_exec_internal_command(port,
 1531 					&fis,
 1532 					5,
 1533 					buffer_dma,
 1534 					ATA_SECT_SIZE,
 1535 					0,
 1536 					GFP_ATOMIC,
 1537 					15000);
 1538 }
 1539 
 1540 /*
 1541  * Get the value of a smart attribute
 1542  *
 1543  * @port	pointer to the port structure
 1544  * @id		attribute number
 1545  * @attrib	pointer to return attrib information corresponding to @id
 1546  *
 1547  * return value
 1548  *	-EINVAL	NULL buffer passed or unsupported attribute @id.
 1549  *	-EPERM	Identify data not valid, SMART not supported or not enabled
 1550  */
 1551 static int mtip_get_smart_attr(struct mtip_port *port, unsigned int id,
 1552 						struct smart_attr *attrib)
 1553 {
 1554 	int rv, i;
 1555 	struct smart_attr *pattr;
 1556 
 1557 	if (!attrib)
 1558 		return -EINVAL;
 1559 
 1560 	if (!port->identify_valid) {
 1561 		dev_warn(&port->dd->pdev->dev, "IDENTIFY DATA not valid\n");
 1562 		return -EPERM;
 1563 	}
 1564 	if (!(port->identify[82] & 0x1)) {
 1565 		dev_warn(&port->dd->pdev->dev, "SMART not supported\n");
 1566 		return -EPERM;
 1567 	}
 1568 	if (!(port->identify[85] & 0x1)) {
 1569 		dev_warn(&port->dd->pdev->dev, "SMART not enabled\n");
 1570 		return -EPERM;
 1571 	}
 1572 
 1573 	memset(port->smart_buf, 0, ATA_SECT_SIZE);
 1574 	rv = mtip_get_smart_data(port, port->smart_buf, port->smart_buf_dma);
 1575 	if (rv) {
 1576 		dev_warn(&port->dd->pdev->dev, "Failed to ge SMART data\n");
 1577 		return rv;
 1578 	}
 1579 
 1580 	pattr = (struct smart_attr *)(port->smart_buf + 2);
 1581 	for (i = 0; i < 29; i++, pattr++)
 1582 		if (pattr->attr_id == id) {
 1583 			memcpy(attrib, pattr, sizeof(struct smart_attr));
 1584 			break;
 1585 		}
 1586 
 1587 	if (i == 29) {
 1588 		dev_warn(&port->dd->pdev->dev,
 1589 			"Query for invalid SMART attribute ID\n");
 1590 		rv = -EINVAL;
 1591 	}
 1592 
 1593 	return rv;
 1594 }
 1595 
 1596 /*
 1597  * Trim unused sectors
 1598  *
 1599  * @dd		pointer to driver_data structure
 1600  * @lba		starting lba
 1601  * @len		# of 512b sectors to trim
 1602  *
 1603  * return value
 1604  *      -ENOMEM		Out of dma memory
 1605  *      -EINVAL		Invalid parameters passed in, trim not supported
 1606  *      -EIO		Error submitting trim request to hw
 1607  */
 1608 static int mtip_send_trim(struct driver_data *dd, unsigned int lba,
 1609 				unsigned int len)
 1610 {
 1611 	int i, rv = 0;
 1612 	u64 tlba, tlen, sect_left;
 1613 	struct mtip_trim_entry *buf;
 1614 	dma_addr_t dma_addr;
 1615 	struct host_to_dev_fis fis;
 1616 
 1617 	if (!len || dd->trim_supp == false)
 1618 		return -EINVAL;
 1619 
 1620 	/* Trim request too big */
 1621 	WARN_ON(len > (MTIP_MAX_TRIM_ENTRY_LEN * MTIP_MAX_TRIM_ENTRIES));
 1622 
 1623 	/* Trim request not aligned on 4k boundary */
 1624 	WARN_ON(len % 8 != 0);
 1625 
 1626 	/* Warn if vu_trim structure is too big */
 1627 	WARN_ON(sizeof(struct mtip_trim) > ATA_SECT_SIZE);
 1628 
 1629 	/* Allocate a DMA buffer for the trim structure */
 1630 	buf = dmam_alloc_coherent(&dd->pdev->dev, ATA_SECT_SIZE, &dma_addr,
 1631 								GFP_KERNEL);
 1632 	if (!buf)
 1633 		return -ENOMEM;
 1634 	memset(buf, 0, ATA_SECT_SIZE);
 1635 
 1636 	for (i = 0, sect_left = len, tlba = lba;
 1637 			i < MTIP_MAX_TRIM_ENTRIES && sect_left;
 1638 			i++) {
 1639 		tlen = (sect_left >= MTIP_MAX_TRIM_ENTRY_LEN ?
 1640 					MTIP_MAX_TRIM_ENTRY_LEN :
 1641 					sect_left);
 1642 		buf[i].lba = __force_bit2int cpu_to_le32(tlba);
 1643 		buf[i].range = __force_bit2int cpu_to_le16(tlen);
 1644 		tlba += tlen;
 1645 		sect_left -= tlen;
 1646 	}
 1647 	WARN_ON(sect_left != 0);
 1648 
 1649 	/* Build the fis */
 1650 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 1651 	fis.type       = 0x27;
 1652 	fis.opts       = 1 << 7;
 1653 	fis.command    = 0xfb;
 1654 	fis.features   = 0x60;
 1655 	fis.sect_count = 1;
 1656 	fis.device     = ATA_DEVICE_OBS;
 1657 
 1658 	if (mtip_exec_internal_command(dd->port,
 1659 					&fis,
 1660 					5,
 1661 					dma_addr,
 1662 					ATA_SECT_SIZE,
 1663 					0,
 1664 					GFP_KERNEL,
 1665 					MTIP_TRIM_TIMEOUT_MS) < 0)
 1666 		rv = -EIO;
 1667 
 1668 	dmam_free_coherent(&dd->pdev->dev, ATA_SECT_SIZE, buf, dma_addr);
 1669 	return rv;
 1670 }
 1671 
 1672 /*
 1673  * Get the drive capacity.
 1674  *
 1675  * @dd      Pointer to the device data structure.
 1676  * @sectors Pointer to the variable that will receive the sector count.
 1677  *
 1678  * return value
 1679  *	1 Capacity was returned successfully.
 1680  *	0 The identify information is invalid.
 1681  */
 1682 static bool mtip_hw_get_capacity(struct driver_data *dd, sector_t *sectors)
 1683 {
 1684 	struct mtip_port *port = dd->port;
 1685 	u64 total, raw0, raw1, raw2, raw3;
 1686 	raw0 = port->identify[100];
 1687 	raw1 = port->identify[101];
 1688 	raw2 = port->identify[102];
 1689 	raw3 = port->identify[103];
 1690 	total = raw0 | raw1<<16 | raw2<<32 | raw3<<48;
 1691 	*sectors = total;
 1692 	return (bool) !!port->identify_valid;
 1693 }
 1694 
 1695 /*
 1696  * Display the identify command data.
 1697  *
 1698  * @port Pointer to the port data structure.
 1699  *
 1700  * return value
 1701  *	None
 1702  */
 1703 static void mtip_dump_identify(struct mtip_port *port)
 1704 {
 1705 	sector_t sectors;
 1706 	unsigned short revid;
 1707 	char cbuf[42];
 1708 
 1709 	if (!port->identify_valid)
 1710 		return;
 1711 
 1712 	strlcpy(cbuf, (char *)(port->identify+10), 21);
 1713 	dev_info(&port->dd->pdev->dev,
 1714 		"Serial No.: %s\n", cbuf);
 1715 
 1716 	strlcpy(cbuf, (char *)(port->identify+23), 9);
 1717 	dev_info(&port->dd->pdev->dev,
 1718 		"Firmware Ver.: %s\n", cbuf);
 1719 
 1720 	strlcpy(cbuf, (char *)(port->identify+27), 41);
 1721 	dev_info(&port->dd->pdev->dev, "Model: %s\n", cbuf);
 1722 
 1723 	dev_info(&port->dd->pdev->dev, "Security: %04x %s\n",
 1724 		port->identify[128],
 1725 		port->identify[128] & 0x4 ? "(LOCKED)" : "");
 1726 
 1727 	if (mtip_hw_get_capacity(port->dd, §ors))
 1728 		dev_info(&port->dd->pdev->dev,
 1729 			"Capacity: %llu sectors (%llu MB)\n",
 1730 			 (u64)sectors,
 1731 			 ((u64)sectors) * ATA_SECT_SIZE >> 20);
 1732 
 1733 	pci_read_config_word(port->dd->pdev, PCI_REVISION_ID, &revid);
 1734 	switch (revid & 0xFF) {
 1735 	case 0x1:
 1736 		strlcpy(cbuf, "A0", 3);
 1737 		break;
 1738 	case 0x3:
 1739 		strlcpy(cbuf, "A2", 3);
 1740 		break;
 1741 	default:
 1742 		strlcpy(cbuf, "?", 2);
 1743 		break;
 1744 	}
 1745 	dev_info(&port->dd->pdev->dev,
 1746 		"Card Type: %s\n", cbuf);
 1747 }
 1748 
 1749 /*
 1750  * Map the commands scatter list into the command table.
 1751  *
 1752  * @command Pointer to the command.
 1753  * @nents Number of scatter list entries.
 1754  *
 1755  * return value
 1756  *	None
 1757  */
 1758 static inline void fill_command_sg(struct driver_data *dd,
 1759 				struct mtip_cmd *command,
 1760 				int nents)
 1761 {
 1762 	int n;
 1763 	unsigned int dma_len;
 1764 	struct mtip_cmd_sg *command_sg;
 1765 	struct scatterlist *sg = command->sg;
 1766 
 1767 	command_sg = command->command + AHCI_CMD_TBL_HDR_SZ;
 1768 
 1769 	for (n = 0; n < nents; n++) {
 1770 		dma_len = sg_dma_len(sg);
 1771 		if (dma_len > 0x400000)
 1772 			dev_err(&dd->pdev->dev,
 1773 				"DMA segment length truncated\n");
 1774 		command_sg->info = __force_bit2int
 1775 			cpu_to_le32((dma_len-1) & 0x3FFFFF);
 1776 		command_sg->dba	= __force_bit2int
 1777 			cpu_to_le32(sg_dma_address(sg));
 1778 		command_sg->dba_upper = __force_bit2int
 1779 			cpu_to_le32((sg_dma_address(sg) >> 16) >> 16);
 1780 		command_sg++;
 1781 		sg++;
 1782 	}
 1783 }
 1784 
 1785 /*
 1786  * @brief Execute a drive command.
 1787  *
 1788  * return value 0 The command completed successfully.
 1789  * return value -1 An error occurred while executing the command.
 1790  */
 1791 static int exec_drive_task(struct mtip_port *port, u8 *command)
 1792 {
 1793 	struct host_to_dev_fis	fis;
 1794 	struct host_to_dev_fis *reply = (port->rxfis + RX_FIS_D2H_REG);
 1795 	unsigned int to;
 1796 
 1797 	/* Build the FIS. */
 1798 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 1799 	fis.type	= 0x27;
 1800 	fis.opts	= 1 << 7;
 1801 	fis.command	= command[0];
 1802 	fis.features	= command[1];
 1803 	fis.sect_count	= command[2];
 1804 	fis.sector	= command[3];
 1805 	fis.cyl_low	= command[4];
 1806 	fis.cyl_hi	= command[5];
 1807 	fis.device	= command[6] & ~0x10; /* Clear the dev bit*/
 1808 
 1809 	mtip_set_timeout(port->dd, &fis, &to, 0);
 1810 
 1811 	dbg_printk(MTIP_DRV_NAME " %s: User Command: cmd %x, feat %x, nsect %x, sect %x, lcyl %x, hcyl %x, sel %x\n",
 1812 		__func__,
 1813 		command[0],
 1814 		command[1],
 1815 		command[2],
 1816 		command[3],
 1817 		command[4],
 1818 		command[5],
 1819 		command[6]);
 1820 
 1821 	/* Execute the command. */
 1822 	if (mtip_exec_internal_command(port,
 1823 				 &fis,
 1824 				 5,
 1825 				 0,
 1826 				 0,
 1827 				 0,
 1828 				 GFP_KERNEL,
 1829 				 to) < 0) {
 1830 		return -1;
 1831 	}
 1832 
 1833 	command[0] = reply->command; /* Status*/
 1834 	command[1] = reply->features; /* Error*/
 1835 	command[4] = reply->cyl_low;
 1836 	command[5] = reply->cyl_hi;
 1837 
 1838 	dbg_printk(MTIP_DRV_NAME " %s: Completion Status: stat %x, err %x , cyl_lo %x cyl_hi %x\n",
 1839 		__func__,
 1840 		command[0],
 1841 		command[1],
 1842 		command[4],
 1843 		command[5]);
 1844 
 1845 	return 0;
 1846 }
 1847 
 1848 /*
 1849  * @brief Execute a drive command.
 1850  *
 1851  * @param port Pointer to the port data structure.
 1852  * @param command Pointer to the user specified command parameters.
 1853  * @param user_buffer Pointer to the user space buffer where read sector
 1854  *                   data should be copied.
 1855  *
 1856  * return value 0 The command completed successfully.
 1857  * return value -EFAULT An error occurred while copying the completion
 1858  *                 data to the user space buffer.
 1859  * return value -1 An error occurred while executing the command.
 1860  */
 1861 static int exec_drive_command(struct mtip_port *port, u8 *command,
 1862 				void __user *user_buffer)
 1863 {
 1864 	struct host_to_dev_fis	fis;
 1865 	struct host_to_dev_fis *reply;
 1866 	u8 *buf = NULL;
 1867 	dma_addr_t dma_addr = 0;
 1868 	int rv = 0, xfer_sz = command[3];
 1869 	unsigned int to;
 1870 
 1871 	if (xfer_sz) {
 1872 		if (!user_buffer)
 1873 			return -EFAULT;
 1874 
 1875 		buf = dmam_alloc_coherent(&port->dd->pdev->dev,
 1876 				ATA_SECT_SIZE * xfer_sz,
 1877 				&dma_addr,
 1878 				GFP_KERNEL);
 1879 		if (!buf) {
 1880 			dev_err(&port->dd->pdev->dev,
 1881 				"Memory allocation failed (%d bytes)\n",
 1882 				ATA_SECT_SIZE * xfer_sz);
 1883 			return -ENOMEM;
 1884 		}
 1885 		memset(buf, 0, ATA_SECT_SIZE * xfer_sz);
 1886 	}
 1887 
 1888 	/* Build the FIS. */
 1889 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 1890 	fis.type	= 0x27;
 1891 	fis.opts	= 1 << 7;
 1892 	fis.command	= command[0];
 1893 	fis.features	= command[2];
 1894 	fis.sect_count	= command[3];
 1895 	if (fis.command == ATA_CMD_SMART) {
 1896 		fis.sector	= command[1];
 1897 		fis.cyl_low	= 0x4F;
 1898 		fis.cyl_hi	= 0xC2;
 1899 	}
 1900 
 1901 	mtip_set_timeout(port->dd, &fis, &to, 0);
 1902 
 1903 	if (xfer_sz)
 1904 		reply = (port->rxfis + RX_FIS_PIO_SETUP);
 1905 	else
 1906 		reply = (port->rxfis + RX_FIS_D2H_REG);
 1907 
 1908 	dbg_printk(MTIP_DRV_NAME
 1909 		" %s: User Command: cmd %x, sect %x, "
 1910 		"feat %x, sectcnt %x\n",
 1911 		__func__,
 1912 		command[0],
 1913 		command[1],
 1914 		command[2],
 1915 		command[3]);
 1916 
 1917 	/* Execute the command. */
 1918 	if (mtip_exec_internal_command(port,
 1919 				&fis,
 1920 				 5,
 1921 				 (xfer_sz ? dma_addr : 0),
 1922 				 (xfer_sz ? ATA_SECT_SIZE * xfer_sz : 0),
 1923 				 0,
 1924 				 GFP_KERNEL,
 1925 				 to)
 1926 				 < 0) {
 1927 		rv = -EFAULT;
 1928 		goto exit_drive_command;
 1929 	}
 1930 
 1931 	/* Collect the completion status. */
 1932 	command[0] = reply->command; /* Status*/
 1933 	command[1] = reply->features; /* Error*/
 1934 	command[2] = reply->sect_count;
 1935 
 1936 	dbg_printk(MTIP_DRV_NAME
 1937 		" %s: Completion Status: stat %x, "
 1938 		"err %x, nsect %x\n",
 1939 		__func__,
 1940 		command[0],
 1941 		command[1],
 1942 		command[2]);
 1943 
 1944 	if (xfer_sz) {
 1945 		if (copy_to_user(user_buffer,
 1946 				 buf,
 1947 				 ATA_SECT_SIZE * command[3])) {
 1948 			rv = -EFAULT;
 1949 			goto exit_drive_command;
 1950 		}
 1951 	}
 1952 exit_drive_command:
 1953 	if (buf)
 1954 		dmam_free_coherent(&port->dd->pdev->dev,
 1955 				ATA_SECT_SIZE * xfer_sz, buf, dma_addr);
 1956 	return rv;
 1957 }
 1958 
 1959 /*
 1960  *  Indicates whether a command has a single sector payload.
 1961  *
 1962  *  @command passed to the device to perform the certain event.
 1963  *  @features passed to the device to perform the certain event.
 1964  *
 1965  *  return value
 1966  *	1	command is one that always has a single sector payload,
 1967  *		regardless of the value in the Sector Count field.
 1968  *      0       otherwise
 1969  *
 1970  */
 1971 static unsigned int implicit_sector(unsigned char command,
 1972 				    unsigned char features)
 1973 {
 1974 	unsigned int rv = 0;
 1975 
 1976 	/* list of commands that have an implicit sector count of 1 */
 1977 	switch (command) {
 1978 	case ATA_CMD_SEC_SET_PASS:
 1979 	case ATA_CMD_SEC_UNLOCK:
 1980 	case ATA_CMD_SEC_ERASE_PREP:
 1981 	case ATA_CMD_SEC_ERASE_UNIT:
 1982 	case ATA_CMD_SEC_FREEZE_LOCK:
 1983 	case ATA_CMD_SEC_DISABLE_PASS:
 1984 	case ATA_CMD_PMP_READ:
 1985 	case ATA_CMD_PMP_WRITE:
 1986 		rv = 1;
 1987 		break;
 1988 	case ATA_CMD_SET_MAX:
 1989 		if (features == ATA_SET_MAX_UNLOCK)
 1990 			rv = 1;
 1991 		break;
 1992 	case ATA_CMD_SMART:
 1993 		if ((features == ATA_SMART_READ_VALUES) ||
 1994 				(features == ATA_SMART_READ_THRESHOLDS))
 1995 			rv = 1;
 1996 		break;
 1997 	case ATA_CMD_CONF_OVERLAY:
 1998 		if ((features == ATA_DCO_IDENTIFY) ||
 1999 				(features == ATA_DCO_SET))
 2000 			rv = 1;
 2001 		break;
 2002 	}
 2003 	return rv;
 2004 }
 2005 
 2006 /*
 2007  * Executes a taskfile
 2008  * See ide_taskfile_ioctl() for derivation
 2009  */
 2010 static int exec_drive_taskfile(struct driver_data *dd,
 2011 			       void __user *buf,
 2012 			       ide_task_request_t *req_task,
 2013 			       int outtotal)
 2014 {
 2015 	struct host_to_dev_fis	fis;
 2016 	struct host_to_dev_fis *reply;
 2017 	u8 *outbuf = NULL;
 2018 	u8 *inbuf = NULL;
 2019 	dma_addr_t outbuf_dma = 0;
 2020 	dma_addr_t inbuf_dma = 0;
 2021 	dma_addr_t dma_buffer = 0;
 2022 	int err = 0;
 2023 	unsigned int taskin = 0;
 2024 	unsigned int taskout = 0;
 2025 	u8 nsect = 0;
 2026 	unsigned int timeout;
 2027 	unsigned int force_single_sector;
 2028 	unsigned int transfer_size;
 2029 	unsigned long task_file_data;
 2030 	int intotal = outtotal + req_task->out_size;
 2031 	int erasemode = 0;
 2032 
 2033 	taskout = req_task->out_size;
 2034 	taskin = req_task->in_size;
 2035 	/* 130560 = 512 * 0xFF*/
 2036 	if (taskin > 130560 || taskout > 130560) {
 2037 		err = -EINVAL;
 2038 		goto abort;
 2039 	}
 2040 
 2041 	if (taskout) {
 2042 		outbuf = memdup_user(buf + outtotal, taskout);
 2043 		if (IS_ERR(outbuf)) {
 2044 			err = PTR_ERR(outbuf);
 2045 			outbuf = NULL;
 2046 			goto abort;
 2047 		}
 2048 		outbuf_dma = pci_map_single(dd->pdev,
 2049 					 outbuf,
 2050 					 taskout,
 2051 					 DMA_TO_DEVICE);
 2052 		if (outbuf_dma == 0) {
 2053 			err = -ENOMEM;
 2054 			goto abort;
 2055 		}
 2056 		dma_buffer = outbuf_dma;
 2057 	}
 2058 
 2059 	if (taskin) {
 2060 		inbuf = memdup_user(buf + intotal, taskin);
 2061 		if (IS_ERR(inbuf)) {
 2062 			err = PTR_ERR(inbuf);
 2063 			inbuf = NULL;
 2064 			goto abort;
 2065 		}
 2066 		inbuf_dma = pci_map_single(dd->pdev,
 2067 					 inbuf,
 2068 					 taskin, DMA_FROM_DEVICE);
 2069 		if (inbuf_dma == 0) {
 2070 			err = -ENOMEM;
 2071 			goto abort;
 2072 		}
 2073 		dma_buffer = inbuf_dma;
 2074 	}
 2075 
 2076 	/* only supports PIO and non-data commands from this ioctl. */
 2077 	switch (req_task->data_phase) {
 2078 	case TASKFILE_OUT:
 2079 		nsect = taskout / ATA_SECT_SIZE;
 2080 		reply = (dd->port->rxfis + RX_FIS_PIO_SETUP);
 2081 		break;
 2082 	case TASKFILE_IN:
 2083 		reply = (dd->port->rxfis + RX_FIS_PIO_SETUP);
 2084 		break;
 2085 	case TASKFILE_NO_DATA:
 2086 		reply = (dd->port->rxfis + RX_FIS_D2H_REG);
 2087 		break;
 2088 	default:
 2089 		err = -EINVAL;
 2090 		goto abort;
 2091 	}
 2092 
 2093 	/* Build the FIS. */
 2094 	memset(&fis, 0, sizeof(struct host_to_dev_fis));
 2095 
 2096 	fis.type	= 0x27;
 2097 	fis.opts	= 1 << 7;
 2098 	fis.command	= req_task->io_ports[7];
 2099 	fis.features	= req_task->io_ports[1];
 2100 	fis.sect_count	= req_task->io_ports[2];
 2101 	fis.lba_low	= req_task->io_ports[3];
 2102 	fis.lba_mid	= req_task->io_ports[4];
 2103 	fis.lba_hi	= req_task->io_ports[5];
 2104 	 /* Clear the dev bit*/
 2105 	fis.device	= req_task->io_ports[6] & ~0x10;
 2106 
 2107 	if ((req_task->in_flags.all == 0) && (req_task->out_flags.all & 1)) {
 2108 		req_task->in_flags.all	=
 2109 			IDE_TASKFILE_STD_IN_FLAGS |
 2110 			(IDE_HOB_STD_IN_FLAGS << 8);
 2111 		fis.lba_low_ex		= req_task->hob_ports[3];
 2112 		fis.lba_mid_ex		= req_task->hob_ports[4];
 2113 		fis.lba_hi_ex		= req_task->hob_ports[5];
 2114 		fis.features_ex		= req_task->hob_ports[1];
 2115 		fis.sect_cnt_ex		= req_task->hob_ports[2];
 2116 
 2117 	} else {
 2118 		req_task->in_flags.all = IDE_TASKFILE_STD_IN_FLAGS;
 2119 	}
 2120 
 2121 	force_single_sector = implicit_sector(fis.command, fis.features);
 2122 
 2123 	if ((taskin || taskout) && (!fis.sect_count)) {
 2124 		if (nsect)
 2125 			fis.sect_count = nsect;
 2126 		else {
 2127 			if (!force_single_sector) {
 2128 				dev_warn(&dd->pdev->dev,
 2129 					"data movement but "
 2130 					"sect_count is 0\n");
 2131 					err = -EINVAL;
 2132 					goto abort;
 2133 			}
 2134 		}
 2135 	}
 2136 
 2137 	dbg_printk(MTIP_DRV_NAME
 2138 		" %s: cmd %x, feat %x, nsect %x,"
 2139 		" sect/lbal %x, lcyl/lbam %x, hcyl/lbah %x,"
 2140 		" head/dev %x\n",
 2141 		__func__,
 2142 		fis.command,
 2143 		fis.features,
 2144 		fis.sect_count,
 2145 		fis.lba_low,
 2146 		fis.lba_mid,
 2147 		fis.lba_hi,
 2148 		fis.device);
 2149 
 2150 	/* check for erase mode support during secure erase.*/
 2151 	if ((fis.command == ATA_CMD_SEC_ERASE_UNIT) && outbuf &&
 2152 					(outbuf[0] & MTIP_SEC_ERASE_MODE)) {
 2153 		erasemode = 1;
 2154 	}
 2155 
 2156 	mtip_set_timeout(dd, &fis, &timeout, erasemode);
 2157 
 2158 	/* Determine the correct transfer size.*/
 2159 	if (force_single_sector)
 2160 		transfer_size = ATA_SECT_SIZE;
 2161 	else
 2162 		transfer_size = ATA_SECT_SIZE * fis.sect_count;
 2163 
 2164 	/* Execute the command.*/
 2165 	if (mtip_exec_internal_command(dd->port,
 2166 				 &fis,
 2167 				 5,
 2168 				 dma_buffer,
 2169 				 transfer_size,
 2170 				 0,
 2171 				 GFP_KERNEL,
 2172 				 timeout) < 0) {
 2173 		err = -EIO;
 2174 		goto abort;
 2175 	}
 2176 
 2177 	task_file_data = readl(dd->port->mmio+PORT_TFDATA);
 2178 
 2179 	if ((req_task->data_phase == TASKFILE_IN) && !(task_file_data & 1)) {
 2180 		reply = dd->port->rxfis + RX_FIS_PIO_SETUP;
 2181 		req_task->io_ports[7] = reply->control;
 2182 	} else {
 2183 		reply = dd->port->rxfis + RX_FIS_D2H_REG;
 2184 		req_task->io_ports[7] = reply->command;
 2185 	}
 2186 
 2187 	/* reclaim the DMA buffers.*/
 2188 	if (inbuf_dma)
 2189 		pci_unmap_single(dd->pdev, inbuf_dma,
 2190 			taskin, DMA_FROM_DEVICE);
 2191 	if (outbuf_dma)
 2192 		pci_unmap_single(dd->pdev, outbuf_dma,
 2193 			taskout, DMA_TO_DEVICE);
 2194 	inbuf_dma  = 0;
 2195 	outbuf_dma = 0;
 2196 
 2197 	/* return the ATA registers to the caller.*/
 2198 	req_task->io_ports[1] = reply->features;
 2199 	req_task->io_ports[2] = reply->sect_count;
 2200 	req_task->io_ports[3] = reply->lba_low;
 2201 	req_task->io_ports[4] = reply->lba_mid;
 2202 	req_task->io_ports[5] = reply->lba_hi;
 2203 	req_task->io_ports[6] = reply->device;
 2204 
 2205 	if (req_task->out_flags.all & 1)  {
 2206 
 2207 		req_task->hob_ports[3] = reply->lba_low_ex;
 2208 		req_task->hob_ports[4] = reply->lba_mid_ex;
 2209 		req_task->hob_ports[5] = reply->lba_hi_ex;
 2210 		req_task->hob_ports[1] = reply->features_ex;
 2211 		req_task->hob_ports[2] = reply->sect_cnt_ex;
 2212 	}
 2213 	dbg_printk(MTIP_DRV_NAME
 2214 		" %s: Completion: stat %x,"
 2215 		"err %x, sect_cnt %x, lbalo %x,"
 2216 		"lbamid %x, lbahi %x, dev %x\n",
 2217 		__func__,
 2218 		req_task->io_ports[7],
 2219 		req_task->io_ports[1],
 2220 		req_task->io_ports[2],
 2221 		req_task->io_ports[3],
 2222 		req_task->io_ports[4],
 2223 		req_task->io_ports[5],
 2224 		req_task->io_ports[6]);
 2225 
 2226 	if (taskout) {
 2227 		if (copy_to_user(buf + outtotal, outbuf, taskout)) {
 2228 			err = -EFAULT;
 2229 			goto abort;
 2230 		}
 2231 	}
 2232 	if (taskin) {
 2233 		if (copy_to_user(buf + intotal, inbuf, taskin)) {
 2234 			err = -EFAULT;
 2235 			goto abort;
 2236 		}
 2237 	}
 2238 abort:
 2239 	if (inbuf_dma)
 2240 		pci_unmap_single(dd->pdev, inbuf_dma,
 2241 					taskin, DMA_FROM_DEVICE);
 2242 	if (outbuf_dma)
 2243 		pci_unmap_single(dd->pdev, outbuf_dma,
 2244 					taskout, DMA_TO_DEVICE);
 2245 	kfree(outbuf);
 2246 	kfree(inbuf);
 2247 
 2248 	return err;
 2249 }
 2250 
 2251 /*
 2252  * Handle IOCTL calls from the Block Layer.
 2253  *
 2254  * This function is called by the Block Layer when it receives an IOCTL
 2255  * command that it does not understand. If the IOCTL command is not supported
 2256  * this function returns -ENOTTY.
 2257  *
 2258  * @dd  Pointer to the driver data structure.
 2259  * @cmd IOCTL command passed from the Block Layer.
 2260  * @arg IOCTL argument passed from the Block Layer.
 2261  *
 2262  * return value
 2263  *	0	The IOCTL completed successfully.
 2264  *	-ENOTTY The specified command is not supported.
 2265  *	-EFAULT An error occurred copying data to a user space buffer.
 2266  *	-EIO	An error occurred while executing the command.
 2267  */
 2268 static int mtip_hw_ioctl(struct driver_data *dd, unsigned int cmd,
 2269 			 unsigned long arg)
 2270 {
 2271 	switch (cmd) {
 2272 	case HDIO_GET_IDENTITY:
 2273 	{
 2274 		if (copy_to_user((void __user *)arg, dd->port->identify,
 2275 						sizeof(u16) * ATA_ID_WORDS))
 2276 			return -EFAULT;
 2277 		break;
 2278 	}
 2279 	case HDIO_DRIVE_CMD:
 2280 	{
 2281 		u8 drive_command[4];
 2282 
 2283 		/* Copy the user command info to our buffer. */
 2284 		if (copy_from_user(drive_command,
 2285 					 (void __user *) arg,
 2286 					 sizeof(drive_command)))
 2287 			return -EFAULT;
 2288 
 2289 		/* Execute the drive command. */
 2290 		if (exec_drive_command(dd->port,
 2291 					 drive_command,
 2292 					 (void __user *) (arg+4)))
 2293 			return -EIO;
 2294 
 2295 		/* Copy the status back to the users buffer. */
 2296 		if (copy_to_user((void __user *) arg,
 2297 					 drive_command,
 2298 					 sizeof(drive_command)))
 2299 			return -EFAULT;
 2300 
 2301 		break;
 2302 	}
 2303 	case HDIO_DRIVE_TASK:
 2304 	{
 2305 		u8 drive_command[7];
 2306 
 2307 		/* Copy the user command info to our buffer. */
 2308 		if (copy_from_user(drive_command,
 2309 					 (void __user *) arg,
 2310 					 sizeof(drive_command)))
 2311 			return -EFAULT;
 2312 
 2313 		/* Execute the drive command. */
 2314 		if (exec_drive_task(dd->port, drive_command))
 2315 			return -EIO;
 2316 
 2317 		/* Copy the status back to the users buffer. */
 2318 		if (copy_to_user((void __user *) arg,
 2319 					 drive_command,
 2320 					 sizeof(drive_command)))
 2321 			return -EFAULT;
 2322 
 2323 		break;
 2324 	}
 2325 	case HDIO_DRIVE_TASKFILE: {
 2326 		ide_task_request_t req_task;
 2327 		int ret, outtotal;
 2328 
 2329 		if (copy_from_user(&req_task, (void __user *) arg,
 2330 					sizeof(req_task)))
 2331 			return -EFAULT;
 2332 
 2333 		outtotal = sizeof(req_task);
 2334 
 2335 		ret = exec_drive_taskfile(dd, (void __user *) arg,
 2336 						&req_task, outtotal);
 2337 
 2338 		if (copy_to_user((void __user *) arg, &req_task,
 2339 							sizeof(req_task)))
 2340 			return -EFAULT;
 2341 
 2342 		return ret;
 2343 	}
 2344 
 2345 	default:
 2346 		return -EINVAL;
 2347 	}
 2348 	return 0;
 2349 }
 2350 
 2351 /*
 2352  * Submit an IO to the hw
 2353  *
 2354  * This function is called by the block layer to issue an io
 2355  * to the device. Upon completion, the callback function will
 2356  * be called with the data parameter passed as the callback data.
 2357  *
 2358  * @dd       Pointer to the driver data structure.
 2359  * @start    First sector to read.
 2360  * @nsect    Number of sectors to read.
 2361  * @nents    Number of entries in scatter list for the read command.
 2362  * @tag      The tag of this read command.
 2363  * @callback Pointer to the function that should be called
 2364  *	     when the read completes.
 2365  * @data     Callback data passed to the callback function
 2366  *	     when the read completes.
 2367  * @dir      Direction (read or write)
 2368  *
 2369  * return value
 2370  *	None
 2371  */
 2372 static void mtip_hw_submit_io(struct driver_data *dd, struct request *rq,
 2373 			      struct mtip_cmd *command, int nents,
 2374 			      struct blk_mq_hw_ctx *hctx)
 2375 {
 2376 	struct host_to_dev_fis	*fis;
 2377 	struct mtip_port *port = dd->port;
 2378 	int dma_dir = rq_data_dir(rq) == READ ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
 2379 	u64 start = blk_rq_pos(rq);
 2380 	unsigned int nsect = blk_rq_sectors(rq);
 2381 
 2382 	/* Map the scatter list for DMA access */
 2383 	nents = dma_map_sg(&dd->pdev->dev, command->sg, nents, dma_dir);
 2384 
 2385 	prefetch(&port->flags);
 2386 
 2387 	command->scatter_ents = nents;
 2388 
 2389 	/*
 2390 	 * The number of retries for this command before it is
 2391 	 * reported as a failure to the upper layers.
 2392 	 */
 2393 	command->retries = MTIP_MAX_RETRIES;
 2394 
 2395 	/* Fill out fis */
 2396 	fis = command->command;
 2397 	fis->type        = 0x27;
 2398 	fis->opts        = 1 << 7;
 2399 	if (dma_dir == DMA_FROM_DEVICE)
 2400 		fis->command = ATA_CMD_FPDMA_READ;
 2401 	else
 2402 		fis->command = ATA_CMD_FPDMA_WRITE;
 2403 	fis->lba_low     = start & 0xFF;
 2404 	fis->lba_mid     = (start >> 8) & 0xFF;
 2405 	fis->lba_hi      = (start >> 16) & 0xFF;
 2406 	fis->lba_low_ex  = (start >> 24) & 0xFF;
 2407 	fis->lba_mid_ex  = (start >> 32) & 0xFF;
 2408 	fis->lba_hi_ex   = (start >> 40) & 0xFF;
 2409 	fis->device	 = 1 << 6;
 2410 	fis->features    = nsect & 0xFF;
 2411 	fis->features_ex = (nsect >> 8) & 0xFF;
 2412 	fis->sect_count  = ((rq->tag << 3) | (rq->tag >> 5));
 2413 	fis->sect_cnt_ex = 0;
 2414 	fis->control     = 0;
 2415 	fis->res2        = 0;
 2416 	fis->res3        = 0;
 2417 	fill_command_sg(dd, command, nents);
 2418 
 2419 	if (unlikely(command->unaligned))
 2420 		fis->device |= 1 << 7;
 2421 
 2422 	/* Populate the command header */
 2423 	command->command_header->opts =
 2424 			__force_bit2int cpu_to_le32(
 2425 				(nents << 16) | 5 | AHCI_CMD_PREFETCH);
 2426 	command->command_header->byte_count = 0;
 2427 
 2428 	/*
 2429 	 * Set the completion function and data for the command
 2430 	 * within this layer.
 2431 	 */
 2432 	command->comp_data = dd;
 2433 	command->comp_func = mtip_async_complete;
 2434 	command->direction = dma_dir;
 2435 
 2436 	/*
 2437 	 * To prevent this command from being issued
 2438 	 * if an internal command is in progress or error handling is active.
 2439 	 */
 2440 	if (unlikely(port->flags & MTIP_PF_PAUSE_IO)) {
 2441 		set_bit(rq->tag, port->cmds_to_issue);
 2442 		set_bit(MTIP_PF_ISSUE_CMDS_BIT, &port->flags);
 2443 		return;
 2444 	}
 2445 
 2446 	/* Issue the command to the hardware */
 2447 	mtip_issue_ncq_command(port, rq->tag);
 2448 }
 2449 
 2450 /*
 2451  * Sysfs status dump.
 2452  *
 2453  * @dev  Pointer to the device structure, passed by the kernrel.
 2454  * @attr Pointer to the device_attribute structure passed by the kernel.
 2455  * @buf  Pointer to the char buffer that will receive the stats info.
 2456  *
 2457  * return value
 2458  *	The size, in bytes, of the data copied into buf.
 2459  */
 2460 static ssize_t mtip_hw_show_status(struct device *dev,
 2461 				struct device_attribute *attr,
 2462 				char *buf)
 2463 {
 2464 	struct driver_data *dd = dev_to_disk(dev)->private_data;
 2465 	int size = 0;
 2466 
 2467 	if (test_bit(MTIP_DDF_OVER_TEMP_BIT, &dd->dd_flag))
 2468 		size += sprintf(buf, "%s", "thermal_shutdown\n");
 2469 	else if (test_bit(MTIP_DDF_WRITE_PROTECT_BIT, &dd->dd_flag))
 2470 		size += sprintf(buf, "%s", "write_protect\n");
 2471 	else
 2472 		size += sprintf(buf, "%s", "online\n");
 2473 
 2474 	return size;
 2475 }
 2476 
 2477 static DEVICE_ATTR(status, S_IRUGO, mtip_hw_show_status, NULL);
 2478 
 2479 /* debugsfs entries */
 2480 
 2481 static ssize_t show_device_status(struct device_driver *drv, char *buf)
 2482 {
 2483 	int size = 0;
 2484 	struct driver_data *dd, *tmp;
 2485 	unsigned long flags;
 2486 	char id_buf[42];
 2487 	u16 status = 0;
 2488 
 2489 	spin_lock_irqsave(&dev_lock, flags);
 2490 	size += sprintf(&buf[size], "Devices Present:\n");
 2491 	list_for_each_entry_safe(dd, tmp, &online_list, online_list) {
 2492 		if (dd->pdev) {
 2493 			if (dd->port &&
 2494 			    dd->port->identify &&
 2495 			    dd->port->identify_valid) {
 2496 				strlcpy(id_buf,
 2497 					(char *) (dd->port->identify + 10), 21);
 2498 				status = *(dd->port->identify + 141);
 2499 			} else {
 2500 				memset(id_buf, 0, 42);
 2501 				status = 0;
 2502 			}
 2503 
 2504 			if (dd->port &&
 2505 			    test_bit(MTIP_PF_REBUILD_BIT, &dd->port->flags)) {
 2506 				size += sprintf(&buf[size],
 2507 					" device %s %s (ftl rebuild %d %%)\n",
 2508 					dev_name(&dd->pdev->dev),
 2509 					id_buf,
 2510 					status);
 2511 			} else {
 2512 				size += sprintf(&buf[size],
 2513 					" device %s %s\n",
 2514 					dev_name(&dd->pdev->dev),
 2515 					id_buf);
 2516 			}
 2517 		}
 2518 	}
 2519 
 2520 	size += sprintf(&buf[size], "Devices Being Removed:\n");
 2521 	list_for_each_entry_safe(dd, tmp, &removing_list, remove_list) {
 2522 		if (dd->pdev) {
 2523 			if (dd->port &&
 2524 			    dd->port->identify &&
 2525 			    dd->port->identify_valid) {
 2526 				strlcpy(id_buf,
 2527 					(char *) (dd->port->identify+10), 21);
 2528 				status = *(dd->port->identify + 141);
 2529 			} else {
 2530 				memset(id_buf, 0, 42);
 2531 				status = 0;
 2532 			}
 2533 
 2534 			if (dd->port &&
 2535 			    test_bit(MTIP_PF_REBUILD_BIT, &dd->port->flags)) {
 2536 				size += sprintf(&buf[size],
 2537 					" device %s %s (ftl rebuild %d %%)\n",
 2538 					dev_name(&dd->pdev->dev),
 2539 					id_buf,
 2540 					status);
 2541 			} else {
 2542 				size += sprintf(&buf[size],
 2543 					" device %s %s\n",
 2544 					dev_name(&dd->pdev->dev),
 2545 					id_buf);
 2546 			}
 2547 		}
 2548 	}
 2549 	spin_unlock_irqrestore(&dev_lock, flags);
 2550 
 2551 	return size;
 2552 }
 2553 
 2554 static ssize_t mtip_hw_read_device_status(struct file *f, char __user *ubuf,
 2555 						size_t len, loff_t *offset)
 2556 {
 2557 	struct driver_data *dd =  (struct driver_data *)f->private_data;
 2558 	int size = *offset;
 2559 	char *buf;
 2560 	int rv = 0;
 2561 
 2562 	if (!len || *offset)
 2563 		return 0;
 2564 
 2565 	buf = kzalloc(MTIP_DFS_MAX_BUF_SIZE, GFP_KERNEL);
 2566 	if (!buf) {
 2567 		dev_err(&dd->pdev->dev,
 2568 			"Memory allocation: status buffer\n");
 2569 		return -ENOMEM;
 2570 	}
 2571 
 2572 	size += show_device_status(NULL, buf);
 2573 
 2574 	*offset = size <= len ? size : len;
 2575 	size = copy_to_user(ubuf, buf, *offset);
 2576 	if (size)
 2577 		rv = -EFAULT;
 2578 
 2579 	kfree(buf);
 2580 	return rv ? rv : *offset;
 2581 }
 2582 
 2583 static ssize_t mtip_hw_read_registers(struct file *f, char __user *ubuf,
 2584 				  size_t len, loff_t *offset)
 2585 {
 2586 	struct driver_data *dd =  (struct driver_data *)f->private_data;
 2587 	char *buf;
 2588 	u32 group_allocated;
 2589 	int size = *offset;
 2590 	int n, rv = 0;
 2591 
 2592 	if (!len || size)
 2593 		return 0;
 2594 
 2595 	buf = kzalloc(MTIP_DFS_MAX_BUF_SIZE, GFP_KERNEL);
 2596 	if (!buf) {
 2597 		dev_err(&dd->pdev->dev,
 2598 			"Memory allocation: register buffer\n");
 2599 		return -ENOMEM;
 2600 	}
 2601 
 2602 	size += sprintf(&buf[size], "H/ S ACTive      : [ 0x");
 2603 
 2604 	for (n = dd->slot_groups-1; n >= 0; n--)
 2605 		size += sprintf(&buf[size], "%08X ",
 2606 					 readl(dd->port->s_active[n]));
 2607 
 2608 	size += sprintf(&buf[size], "]\n");
 2609 	size += sprintf(&buf[size], "H/ Command Issue : [ 0x");
 2610 
 2611 	for (n = dd->slot_groups-1; n >= 0; n--)
 2612 		size += sprintf(&buf[size], "%08X ",
 2613 					readl(dd->port->cmd_issue[n]));
 2614 
 2615 	size += sprintf(&buf[size], "]\n");
 2616 	size += sprintf(&buf[size], "H/ Completed     : [ 0x");
 2617 
 2618 	for (n = dd->slot_groups-1; n >= 0; n--)
 2619 		size += sprintf(&buf[size], "%08X ",
 2620 				readl(dd->port->completed[n]));
 2621 
 2622 	size += sprintf(&buf[size], "]\n");
 2623 	size += sprintf(&buf[size], "H/ PORT IRQ STAT : [ 0x%08X ]\n",
 2624 				readl(dd->port->mmio + PORT_IRQ_STAT));
 2625 	size += sprintf(&buf[size], "H/ HOST IRQ STAT : [ 0x%08X ]\n",
 2626 				readl(dd->mmio + HOST_IRQ_STAT));
 2627 	size += sprintf(&buf[size], "\n");
 2628 
 2629 	size += sprintf(&buf[size], "L/ Commands in Q : [ 0x");
 2630 
 2631 	for (n = dd->slot_groups-1; n >= 0; n--) {
 2632 		if (sizeof(long) > sizeof(u32))
 2633 			group_allocated =
 2634 				dd->port->cmds_to_issue[n/2] >> (32*(n&1));
 2635 		else
 2636 			group_allocated = dd->port->cmds_to_issue[n];
 2637 		size += sprintf(&buf[size], "%08X ", group_allocated);
 2638 	}
 2639 	size += sprintf(&buf[size], "]\n");
 2640 
 2641 	*offset = size <= len ? size : len;
 2642 	size = copy_to_user(ubuf, buf, *offset);
 2643 	if (size)
 2644 		rv = -EFAULT;
 2645 
 2646 	kfree(buf);
 2647 	return rv ? rv : *offset;
 2648 }
 2649 
 2650 static ssize_t mtip_hw_read_flags(struct file *f, char __user *ubuf,
 2651 				  size_t len, loff_t *offset)
 2652 {
 2653 	struct driver_data *dd =  (struct driver_data *)f->private_data;
 2654 	char *buf;
 2655 	int size = *offset;
 2656 	int rv = 0;
 2657 
 2658 	if (!len || size)
 2659 		return 0;
 2660 
 2661 	buf = kzalloc(MTIP_DFS_MAX_BUF_SIZE, GFP_KERNEL);
 2662 	if (!buf) {
 2663 		dev_err(&dd->pdev->dev,
 2664 			"Memory allocation: flag buffer\n");
 2665 		return -ENOMEM;
 2666 	}
 2667 
 2668 	size += sprintf(&buf[size], "Flag-port : [ %08lX ]\n",
 2669 							dd->port->flags);
 2670 	size += sprintf(&buf[size], "Flag-dd   : [ %08lX ]\n",
 2671 							dd->dd_flag);
 2672 
 2673 	*offset = size <= len ? size : len;
 2674 	size = copy_to_user(ubuf, buf, *offset);
 2675 	if (size)
 2676 		rv = -EFAULT;
 2677 
 2678 	kfree(buf);
 2679 	return rv ? rv : *offset;
 2680 }
 2681 
 2682 static const struct file_operations mtip_device_status_fops = {
 2683 	.owner  = THIS_MODULE,
 2684 	.open   = simple_open,
 2685 	.read   = mtip_hw_read_device_status,
 2686 	.llseek = no_llseek,
 2687 };
 2688 
 2689 static const struct file_operations mtip_regs_fops = {
 2690 	.owner  = THIS_MODULE,
 2691 	.open   = simple_open,
 2692 	.read   = mtip_hw_read_registers,
 2693 	.llseek = no_llseek,
 2694 };
 2695 
 2696 static const struct file_operations mtip_flags_fops = {
 2697 	.owner  = THIS_MODULE,
 2698 	.open   = simple_open,
 2699 	.read   = mtip_hw_read_flags,
 2700 	.llseek = no_llseek,
 2701 };
 2702 
 2703 /*
 2704  * Create the sysfs related attributes.
 2705  *
 2706  * @dd   Pointer to the driver data structure.
 2707  * @kobj Pointer to the kobj for the block device.
 2708  *
 2709  * return value
 2710  *	0	Operation completed successfully.
 2711  *	-EINVAL Invalid parameter.
 2712  */
 2713 static int mtip_hw_sysfs_init(struct driver_data *dd, struct kobject *kobj)
 2714 {
 2715 	if (!kobj || !dd)
 2716 		return -EINVAL;
 2717 
 2718 	if (sysfs_create_file(kobj, &dev_attr_status.attr))
 2719 		dev_warn(&dd->pdev->dev,
 2720 			"Error creating 'status' sysfs entry\n");
 2721 	return 0;
 2722 }
 2723 
 2724 /*
 2725  * Remove the sysfs related attributes.
 2726  *
 2727  * @dd   Pointer to the driver data structure.
 2728  * @kobj Pointer to the kobj for the block device.
 2729  *
 2730  * return value
 2731  *	0	Operation completed successfully.
 2732  *	-EINVAL Invalid parameter.
 2733  */
 2734 static int mtip_hw_sysfs_exit(struct driver_data *dd, struct kobject *kobj)
 2735 {
 2736 	if (!kobj || !dd)
 2737 		return -EINVAL;
 2738 
 2739 	sysfs_remove_file(kobj, &dev_attr_status.attr);
 2740 
 2741 	return 0;
 2742 }
 2743 
 2744 static int mtip_hw_debugfs_init(struct driver_data *dd)
 2745 {
 2746 	if (!dfs_parent)
 2747 		return -1;
 2748 
 2749 	dd->dfs_node = debugfs_create_dir(dd->disk->disk_name, dfs_parent);
 2750 	if (IS_ERR_OR_NULL(dd->dfs_node)) {
 2751 		dev_warn(&dd->pdev->dev,
 2752 			"Error creating node %s under debugfs\n",
 2753 						dd->disk->disk_name);
 2754 		dd->dfs_node = NULL;
 2755 		return -1;
 2756 	}
 2757 
 2758 	debugfs_create_file("flags", S_IRUGO, dd->dfs_node, dd,
 2759 							&mtip_flags_fops);
 2760 	debugfs_create_file("registers", S_IRUGO, dd->dfs_node, dd,
 2761 							&mtip_regs_fops);
 2762 
 2763 	return 0;
 2764 }
 2765 
 2766 static void mtip_hw_debugfs_exit(struct driver_data *dd)
 2767 {
 2768 	if (dd->dfs_node)
 2769 		debugfs_remove_recursive(dd->dfs_node);
 2770 }
 2771 
 2772 /*
 2773  * Perform any init/resume time hardware setup
 2774  *
 2775  * @dd Pointer to the driver data structure.
 2776  *
 2777  * return value
 2778  *	None
 2779  */
 2780 static inline void hba_setup(struct driver_data *dd)
 2781 {
 2782 	u32 hwdata;
 2783 	hwdata = readl(dd->mmio + HOST_HSORG);
 2784 
 2785 	/* interrupt bug workaround: use only 1 IS bit.*/
 2786 	writel(hwdata |
 2787 		HSORG_DISABLE_SLOTGRP_INTR |
 2788 		HSORG_DISABLE_SLOTGRP_PXIS,
 2789 		dd->mmio + HOST_HSORG);
 2790 }
 2791 
 2792 static int mtip_device_unaligned_constrained(struct driver_data *dd)
 2793 {
 2794 	return (dd->pdev->device == P420M_DEVICE_ID ? 1 : 0);
 2795 }
 2796 
 2797 /*
 2798  * Detect the details of the product, and store anything needed
 2799  * into the driver data structure.  This includes product type and
 2800  * version and number of slot groups.
 2801  *
 2802  * @dd Pointer to the driver data structure.
 2803  *
 2804  * return value
 2805  *	None
 2806  */
 2807 static void mtip_detect_product(struct driver_data *dd)
 2808 {
 2809 	u32 hwdata;
 2810 	unsigned int rev, slotgroups;
 2811 
 2812 	/*
 2813 	 * HBA base + 0xFC [15:0] - vendor-specific hardware interface
 2814 	 * info register:
 2815 	 * [15:8] hardware/software interface rev#
 2816 	 * [   3] asic-style interface
 2817 	 * [ 2:0] number of slot groups, minus 1 (only valid for asic-style).
 2818 	 */
 2819 	hwdata = readl(dd->mmio + HOST_HSORG);
 2820 
 2821 	dd->product_type = MTIP_PRODUCT_UNKNOWN;
 2822 	dd->slot_groups = 1;
 2823 
 2824 	if (hwdata & 0x8) {
 2825 		dd->product_type = MTIP_PRODUCT_ASICFPGA;
 2826 		rev = (hwdata & HSORG_HWREV) >> 8;
 2827 		slotgroups = (hwdata & HSORG_SLOTGROUPS) + 1;
 2828 		dev_info(&dd->pdev->dev,
 2829 			"ASIC-FPGA design, HS rev 0x%x, "
 2830 			"%i slot groups [%i slots]\n",
 2831 			 rev,
 2832 			 slotgroups,
 2833 			 slotgroups * 32);
 2834 
 2835 		if (slotgroups > MTIP_MAX_SLOT_GROUPS) {
 2836 			dev_warn(&dd->pdev->dev,
 2837 				"Warning: driver only supports "
 2838 				"%i slot groups.\n", MTIP_MAX_SLOT_GROUPS);
 2839 			slotgroups = MTIP_MAX_SLOT_GROUPS;
 2840 		}
 2841 		dd->slot_groups = slotgroups;
 2842 		return;
 2843 	}
 2844 
 2845 	dev_warn(&dd->pdev->dev, "Unrecognized product id\n");
 2846 }
 2847 
 2848 /*
 2849  * Blocking wait for FTL rebuild to complete
 2850  *
 2851  * @dd Pointer to the DRIVER_DATA structure.
 2852  *
 2853  * return value
 2854  *	0	FTL rebuild completed successfully
 2855  *	-EFAULT FTL rebuild error/timeout/interruption
 2856  */
 2857 static int mtip_ftl_rebuild_poll(struct driver_data *dd)
 2858 {
 2859 	unsigned long timeout, cnt = 0, start;
 2860 
 2861 	dev_warn(&dd->pdev->dev,
 2862 		
			 
    
 КомментарийReported: 19 Mar 2016 [В начало] »     |