2019-05-27 08:55:05 +02:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2005-04-16 15:20:36 -07:00
/* ------------------------------------------------------------
* ibmvscsi . h
* ( C ) Copyright IBM Corporation 1994 , 2003
* Authors : Colin DeVilbiss ( devilbis @ us . ibm . com )
* Santiago Leon ( santil @ us . ibm . com )
* Dave Boutcher ( sleddog @ us . ibm . com )
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Emulation of a SCSI host adapter for Virtual I / O devices
*
* This driver allows the Linux SCSI peripheral drivers to directly
* access devices in the hosting partition , either on an iSeries
* hypervisor system or a converged hypervisor system .
*/
# ifndef IBMVSCSI_H
# define IBMVSCSI_H
# include <linux/types.h>
# include <linux/list.h>
# include <linux/completion.h>
# include <linux/interrupt.h>
2016-06-28 17:05:35 -05:00
# include <scsi/viosrp.h>
2005-04-16 15:20:36 -07:00
struct scsi_cmnd ;
struct Scsi_Host ;
/* Number of indirect bufs...the list of these has to fit in the
* additional data of the srp_cmd struct along with the indirect
* descriptor
*/
# define MAX_INDIRECT_BUFS 10
2007-03-28 12:45:46 -05:00
# define IBMVSCSI_MAX_REQUESTS_DEFAULT 100
2008-07-24 04:35:27 +10:00
# define IBMVSCSI_CMDS_PER_LUN_DEFAULT 16
# define IBMVSCSI_MAX_SECTORS_DEFAULT 256 /* 32 * 8 = default max I/O 32 pages */
2007-05-29 15:46:14 -05:00
# define IBMVSCSI_MAX_CMDS_PER_LUN 64
2015-11-09 17:49:09 +01:00
# define IBMVSCSI_MAX_LUN 32
2007-03-28 12:45:46 -05:00
2005-04-16 15:20:36 -07:00
/* ------------------------------------------------------------
* Data Structures
*/
/* an RPA command/response transport queue */
struct crq_queue {
struct viosrp_crq * msgs ;
int size , cur ;
dma_addr_t msg_token ;
spinlock_t lock ;
} ;
/* a unit of work for the hosting partition */
struct srp_event_struct {
union viosrp_iu * xfer_iu ;
struct scsi_cmnd * cmnd ;
struct list_head list ;
void ( * done ) ( struct srp_event_struct * ) ;
struct viosrp_crq crq ;
struct ibmvscsi_host_data * hostdata ;
atomic_t free ;
union viosrp_iu iu ;
void ( * cmnd_done ) ( struct scsi_cmnd * ) ;
struct completion comp ;
2007-06-13 17:12:26 -05:00
struct timer_list timer ;
2005-04-16 15:20:36 -07:00
union viosrp_iu * sync_srp ;
2006-03-26 03:57:14 +09:00
struct srp_direct_buf * ext_list ;
2005-09-06 17:11:54 -05:00
dma_addr_t ext_list_token ;
2005-04-16 15:20:36 -07:00
} ;
/* a pool of event structs for use */
struct event_pool {
struct srp_event_struct * events ;
u32 size ;
int next ;
union viosrp_iu * iu_storage ;
dma_addr_t iu_token ;
} ;
2019-05-02 19:50:57 -05:00
enum ibmvscsi_host_action {
IBMVSCSI_HOST_ACTION_NONE = 0 ,
IBMVSCSI_HOST_ACTION_RESET ,
IBMVSCSI_HOST_ACTION_REENABLE ,
2019-05-02 19:50:58 -05:00
IBMVSCSI_HOST_ACTION_UNBLOCK ,
2019-05-02 19:50:57 -05:00
} ;
2005-04-16 15:20:36 -07:00
/* all driver data associated with a host adapter */
struct ibmvscsi_host_data {
2016-12-07 16:04:35 -06:00
struct list_head host_list ;
2005-04-16 15:20:36 -07:00
atomic_t request_limit ;
2009-06-08 16:19:08 -05:00
int client_migrated ;
2019-05-02 19:50:57 -05:00
enum ibmvscsi_host_action action ;
2005-04-16 15:20:36 -07:00
struct device * dev ;
struct event_pool pool ;
struct crq_queue queue ;
struct tasklet_struct srp_task ;
struct list_head sent ;
struct Scsi_Host * host ;
2010-06-17 13:56:00 -05:00
struct task_struct * work_thread ;
wait_queue_head_t work_wait_q ;
2005-04-16 15:20:36 -07:00
struct mad_adapter_info_data madapter_info ;
2009-06-08 16:19:08 -05:00
struct capabilities caps ;
dma_addr_t caps_addr ;
dma_addr_t adapter_info_addr ;
2005-04-16 15:20:36 -07:00
} ;
# endif /* IBMVSCSI_H */