11a59d1b8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 21da177e4SLinus Torvalds /* ------------------------------------------------------------ 31da177e4SLinus Torvalds * ibmvscsi.h 41da177e4SLinus Torvalds * (C) Copyright IBM Corporation 1994, 2003 51da177e4SLinus Torvalds * Authors: Colin DeVilbiss (devilbis@us.ibm.com) 61da177e4SLinus Torvalds * Santiago Leon (santil@us.ibm.com) 71da177e4SLinus Torvalds * Dave Boutcher (sleddog@us.ibm.com) 81da177e4SLinus Torvalds * 91da177e4SLinus Torvalds * ------------------------------------------------------------ 101da177e4SLinus Torvalds * Emulation of a SCSI host adapter for Virtual I/O devices 111da177e4SLinus Torvalds * 121da177e4SLinus Torvalds * This driver allows the Linux SCSI peripheral drivers to directly 131da177e4SLinus Torvalds * access devices in the hosting partition, either on an iSeries 141da177e4SLinus Torvalds * hypervisor system or a converged hypervisor system. 151da177e4SLinus Torvalds */ 161da177e4SLinus Torvalds #ifndef IBMVSCSI_H 171da177e4SLinus Torvalds #define IBMVSCSI_H 181da177e4SLinus Torvalds #include <linux/types.h> 191da177e4SLinus Torvalds #include <linux/list.h> 201da177e4SLinus Torvalds #include <linux/completion.h> 211da177e4SLinus Torvalds #include <linux/interrupt.h> 2288a678bbSBryant G. Ly #include <scsi/viosrp.h> 231da177e4SLinus Torvalds 241da177e4SLinus Torvalds struct scsi_cmnd; 251da177e4SLinus Torvalds struct Scsi_Host; 261da177e4SLinus Torvalds 271da177e4SLinus Torvalds /* Number of indirect bufs...the list of these has to fit in the 281da177e4SLinus Torvalds * additional data of the srp_cmd struct along with the indirect 291da177e4SLinus Torvalds * descriptor 301da177e4SLinus Torvalds */ 311da177e4SLinus Torvalds #define MAX_INDIRECT_BUFS 10 321da177e4SLinus Torvalds 33a897ff2aSRobert Jennings #define IBMVSCSI_MAX_REQUESTS_DEFAULT 100 347912a0acSRobert Jennings #define IBMVSCSI_CMDS_PER_LUN_DEFAULT 16 357912a0acSRobert Jennings #define IBMVSCSI_MAX_SECTORS_DEFAULT 256 /* 32 * 8 = default max I/O 32 pages */ 36742d25b8SBrian King #define IBMVSCSI_MAX_CMDS_PER_LUN 64 373467a146SLaurent Vivier #define IBMVSCSI_MAX_LUN 32 38a897ff2aSRobert Jennings 391da177e4SLinus Torvalds /* ------------------------------------------------------------ 401da177e4SLinus Torvalds * Data Structures 411da177e4SLinus Torvalds */ 421da177e4SLinus Torvalds /* an RPA command/response transport queue */ 431da177e4SLinus Torvalds struct crq_queue { 441da177e4SLinus Torvalds struct viosrp_crq *msgs; 451da177e4SLinus Torvalds int size, cur; 461da177e4SLinus Torvalds dma_addr_t msg_token; 471da177e4SLinus Torvalds spinlock_t lock; 481da177e4SLinus Torvalds }; 491da177e4SLinus Torvalds 501da177e4SLinus Torvalds /* a unit of work for the hosting partition */ 511da177e4SLinus Torvalds struct srp_event_struct { 521da177e4SLinus Torvalds union viosrp_iu *xfer_iu; 531da177e4SLinus Torvalds struct scsi_cmnd *cmnd; 541da177e4SLinus Torvalds struct list_head list; 551da177e4SLinus Torvalds void (*done) (struct srp_event_struct *); 561da177e4SLinus Torvalds struct viosrp_crq crq; 571da177e4SLinus Torvalds struct ibmvscsi_host_data *hostdata; 581da177e4SLinus Torvalds atomic_t free; 591da177e4SLinus Torvalds union viosrp_iu iu; 601da177e4SLinus Torvalds void (*cmnd_done) (struct scsi_cmnd *); 611da177e4SLinus Torvalds struct completion comp; 623d0e91f7SBrian King struct timer_list timer; 631da177e4SLinus Torvalds union viosrp_iu *sync_srp; 64ef265673SFUJITA Tomonori struct srp_direct_buf *ext_list; 654dddbc26SJames Bottomley dma_addr_t ext_list_token; 661da177e4SLinus Torvalds }; 671da177e4SLinus Torvalds 681da177e4SLinus Torvalds /* a pool of event structs for use */ 691da177e4SLinus Torvalds struct event_pool { 701da177e4SLinus Torvalds struct srp_event_struct *events; 711da177e4SLinus Torvalds u32 size; 721da177e4SLinus Torvalds int next; 731da177e4SLinus Torvalds union viosrp_iu *iu_storage; 741da177e4SLinus Torvalds dma_addr_t iu_token; 751da177e4SLinus Torvalds }; 761da177e4SLinus Torvalds 776e40de8bSTyrel Datwyler enum ibmvscsi_host_action { 786e40de8bSTyrel Datwyler IBMVSCSI_HOST_ACTION_NONE = 0, 796e40de8bSTyrel Datwyler IBMVSCSI_HOST_ACTION_RESET, 806e40de8bSTyrel Datwyler IBMVSCSI_HOST_ACTION_REENABLE, 81*aa343c69STyrel Datwyler IBMVSCSI_HOST_ACTION_UNBLOCK, 826e40de8bSTyrel Datwyler }; 836e40de8bSTyrel Datwyler 841da177e4SLinus Torvalds /* all driver data associated with a host adapter */ 851da177e4SLinus Torvalds struct ibmvscsi_host_data { 8632d6e4b6STyrel Datwyler struct list_head host_list; 871da177e4SLinus Torvalds atomic_t request_limit; 88126c5cc3SBrian King int client_migrated; 896e40de8bSTyrel Datwyler enum ibmvscsi_host_action action; 901da177e4SLinus Torvalds struct device *dev; 911da177e4SLinus Torvalds struct event_pool pool; 921da177e4SLinus Torvalds struct crq_queue queue; 931da177e4SLinus Torvalds struct tasklet_struct srp_task; 941da177e4SLinus Torvalds struct list_head sent; 951da177e4SLinus Torvalds struct Scsi_Host *host; 960f33ece5SBrian King struct task_struct *work_thread; 970f33ece5SBrian King wait_queue_head_t work_wait_q; 981da177e4SLinus Torvalds struct mad_adapter_info_data madapter_info; 99126c5cc3SBrian King struct capabilities caps; 100126c5cc3SBrian King dma_addr_t caps_addr; 101126c5cc3SBrian King dma_addr_t adapter_info_addr; 1021da177e4SLinus Torvalds }; 1031da177e4SLinus Torvalds 1041da177e4SLinus Torvalds #endif /* IBMVSCSI_H */ 105