mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
88a678bbc3
This driver is a pick up of the old IBM VIO scsi Target Driver that was started by Nick and Fujita 2-4 years ago. http://comments.gmane.org/gmane.linux.scsi/90119 The driver provides a virtual SCSI device on IBM Power Servers. This patch contains the fifth version for an initial merge of the tcm ibmvscsis driver. More information on this driver and config can be found: https://github.com/powervm/ibmvscsis/wiki/Configuration http://www.linux-iscsi.org/wiki/IBM_vSCSI (Drop extra libsrp review breakage + Fix kconfig typo - nab) Signed-off-by: Steven Royer <seroyer@linux.vnet.ibm.com> Signed-off-by: Tyrel Datwyler <tyreld@linux.vnet.ibm.com> Signed-off-by: Michael Cyr <mikecyr@linux.vnet.ibm.com> Signed-off-by: Bryant G. Ly <bryantly@linux.vnet.ibm.com> Cc: FUJITA Tomonori <tomof@acm.org> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
112 lines
3.3 KiB
C
112 lines
3.3 KiB
C
/* ------------------------------------------------------------
|
|
* 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)
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
* USA
|
|
*
|
|
* ------------------------------------------------------------
|
|
* 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>
|
|
#include <scsi/viosrp.h>
|
|
|
|
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
|
|
|
|
#define IBMVSCSI_MAX_REQUESTS_DEFAULT 100
|
|
#define IBMVSCSI_CMDS_PER_LUN_DEFAULT 16
|
|
#define IBMVSCSI_MAX_SECTORS_DEFAULT 256 /* 32 * 8 = default max I/O 32 pages */
|
|
#define IBMVSCSI_MAX_CMDS_PER_LUN 64
|
|
#define IBMVSCSI_MAX_LUN 32
|
|
|
|
/* ------------------------------------------------------------
|
|
* 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;
|
|
struct timer_list timer;
|
|
union viosrp_iu *sync_srp;
|
|
struct srp_direct_buf *ext_list;
|
|
dma_addr_t ext_list_token;
|
|
};
|
|
|
|
/* 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;
|
|
};
|
|
|
|
/* all driver data associated with a host adapter */
|
|
struct ibmvscsi_host_data {
|
|
atomic_t request_limit;
|
|
int client_migrated;
|
|
int reset_crq;
|
|
int reenable_crq;
|
|
struct device *dev;
|
|
struct event_pool pool;
|
|
struct crq_queue queue;
|
|
struct tasklet_struct srp_task;
|
|
struct list_head sent;
|
|
struct Scsi_Host *host;
|
|
struct task_struct *work_thread;
|
|
wait_queue_head_t work_wait_q;
|
|
struct mad_adapter_info_data madapter_info;
|
|
struct capabilities caps;
|
|
dma_addr_t caps_addr;
|
|
dma_addr_t adapter_info_addr;
|
|
};
|
|
|
|
#endif /* IBMVSCSI_H */
|