1c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#ifndef TARGET_CORE_PSCSI_H
2c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define TARGET_CORE_PSCSI_H
3c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger
4c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define PSCSI_VERSION		"v4.0"
5c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger
6c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger/* used in pscsi_find_alloc_len() */
7c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#ifndef INQUIRY_DATA_SIZE
8c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define INQUIRY_DATA_SIZE	0x24
9c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#endif
10c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger
11c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger/* used in pscsi_add_device_to_list() */
12c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define PSCSI_DEFAULT_QUEUEDEPTH	1
13c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger
14c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define PS_RETRY		5
15c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define PS_TIMEOUT_DISK		(15*HZ)
16c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define PS_TIMEOUT_OTHER	(500*HZ)
17c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger
18c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#include <linux/device.h>
19c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#include <scsi/scsi_driver.h>
20c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#include <scsi/scsi_device.h>
21c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#include <linux/kref.h>
22c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#include <linux/kobject.h>
23c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger
24c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellingerstruct pscsi_plugin_task {
25c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	unsigned char pscsi_sense[SCSI_SENSE_BUFFERSIZE];
26c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	int	pscsi_direction;
27c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	int	pscsi_result;
28c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	u32	pscsi_resid;
296708bb27bb2703da238f21f516034263348af5beAndy Grover	unsigned char pscsi_cdb[0];
30c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger} ____cacheline_aligned;
31c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger
32c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define PDF_HAS_CHANNEL_ID	0x01
33c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define PDF_HAS_TARGET_ID	0x02
34c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define PDF_HAS_LUN_ID		0x04
35c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define PDF_HAS_VPD_UNIT_SERIAL 0x08
36c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define PDF_HAS_VPD_DEV_IDENT	0x10
37c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#define PDF_HAS_VIRT_HOST_ID	0x20
38c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger
39c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellingerstruct pscsi_dev_virt {
400fd97ccf45be26fb01b3a412f1f6c6b5044b2f16Christoph Hellwig	struct se_device dev;
41c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	int	pdv_flags;
42c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	int	pdv_host_id;
43c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	int	pdv_channel_id;
44c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	int	pdv_target_id;
45c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	int	pdv_lun_id;
46c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	struct block_device *pdv_bd;
47c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	struct scsi_device *pdv_sd;
48c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger} ____cacheline_aligned;
49c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger
50c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellingertypedef enum phv_modes {
51e6a8a41a30489bcb775b505f75bced550aeaa4f1Stefan Hajnoczi	PHV_VIRTUAL_HOST_ID,
52c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	PHV_LLD_SCSI_HOST_NO
53c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger} phv_modes_t;
54c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger
55c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellingerstruct pscsi_hba_virt {
56c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	int			phv_host_id;
57c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	phv_modes_t		phv_mode;
58c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger	struct Scsi_Host	*phv_lld_host;
59c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger} ____cacheline_aligned;
60c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger
61c66ac9db8d4ad9994a02b3e933ea2ccc643e1fe5Nicholas Bellinger#endif   /*** TARGET_CORE_PSCSI_H ***/
62