root/drivers/scsi/ibmvscsi/ibmvscsi.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /* ------------------------------------------------------------
   3  * ibmvscsi.h
   4  * (C) Copyright IBM Corporation 1994, 2003
   5  * Authors: Colin DeVilbiss (devilbis@us.ibm.com)
   6  *          Santiago Leon (santil@us.ibm.com)
   7  *          Dave Boutcher (sleddog@us.ibm.com)
   8  *
   9  * ------------------------------------------------------------
  10  * Emulation of a SCSI host adapter for Virtual I/O devices
  11  *
  12  * This driver allows the Linux SCSI peripheral drivers to directly
  13  * access devices in the hosting partition, either on an iSeries
  14  * hypervisor system or a converged hypervisor system.
  15  */
  16 #ifndef IBMVSCSI_H
  17 #define IBMVSCSI_H
  18 #include <linux/types.h>
  19 #include <linux/list.h>
  20 #include <linux/completion.h>
  21 #include <linux/interrupt.h>
  22 #include <scsi/viosrp.h>
  23 
  24 struct scsi_cmnd;
  25 struct Scsi_Host;
  26 
  27 /* Number of indirect bufs...the list of these has to fit in the
  28  * additional data of the srp_cmd struct along with the indirect
  29  * descriptor
  30  */
  31 #define MAX_INDIRECT_BUFS 10
  32 
  33 #define IBMVSCSI_MAX_REQUESTS_DEFAULT 100
  34 #define IBMVSCSI_CMDS_PER_LUN_DEFAULT 16
  35 #define IBMVSCSI_MAX_SECTORS_DEFAULT 256 /* 32 * 8 = default max I/O 32 pages */
  36 #define IBMVSCSI_MAX_CMDS_PER_LUN 64
  37 #define IBMVSCSI_MAX_LUN 32
  38 
  39 /* ------------------------------------------------------------
  40  * Data Structures
  41  */
  42 /* an RPA command/response transport queue */
  43 struct crq_queue {
  44         struct viosrp_crq *msgs;
  45         int size, cur;
  46         dma_addr_t msg_token;
  47         spinlock_t lock;
  48 };
  49 
  50 /* a unit of work for the hosting partition */
  51 struct srp_event_struct {
  52         union viosrp_iu *xfer_iu;
  53         struct scsi_cmnd *cmnd;
  54         struct list_head list;
  55         void (*done) (struct srp_event_struct *);
  56         struct viosrp_crq crq;
  57         struct ibmvscsi_host_data *hostdata;
  58         atomic_t free;
  59         union viosrp_iu iu;
  60         void (*cmnd_done) (struct scsi_cmnd *);
  61         struct completion comp;
  62         struct timer_list timer;
  63         union viosrp_iu *sync_srp;
  64         struct srp_direct_buf *ext_list;
  65         dma_addr_t ext_list_token;
  66 };
  67 
  68 /* a pool of event structs for use */
  69 struct event_pool {
  70         struct srp_event_struct *events;
  71         u32 size;
  72         int next;
  73         union viosrp_iu *iu_storage;
  74         dma_addr_t iu_token;
  75 };
  76 
  77 enum ibmvscsi_host_action {
  78         IBMVSCSI_HOST_ACTION_NONE = 0,
  79         IBMVSCSI_HOST_ACTION_RESET,
  80         IBMVSCSI_HOST_ACTION_REENABLE,
  81         IBMVSCSI_HOST_ACTION_UNBLOCK,
  82 };
  83 
  84 /* all driver data associated with a host adapter */
  85 struct ibmvscsi_host_data {
  86         struct list_head host_list;
  87         atomic_t request_limit;
  88         int client_migrated;
  89         enum ibmvscsi_host_action action;
  90         struct device *dev;
  91         struct event_pool pool;
  92         struct crq_queue queue;
  93         struct tasklet_struct srp_task;
  94         struct list_head sent;
  95         struct Scsi_Host *host;
  96         struct task_struct *work_thread;
  97         wait_queue_head_t work_wait_q;
  98         struct mad_adapter_info_data madapter_info;
  99         struct capabilities caps;
 100         dma_addr_t caps_addr;
 101         dma_addr_t adapter_info_addr;
 102 };
 103 
 104 #endif                          /* IBMVSCSI_H */

/* [<][>][^][v][top][bottom][index][help] */