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