linux/drivers/scsi/ibmvscsi/ibmvscsi.h
<<
>>
Prefs
   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
  24struct scsi_cmnd;
  25struct 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 */
  43struct 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 */
  51struct 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 */
  69struct 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
  77enum 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 */
  85struct 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 */
 105