1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2c66ac9dbSNicholas Bellinger #ifndef TARGET_CORE_PSCSI_H
3c66ac9dbSNicholas Bellinger #define TARGET_CORE_PSCSI_H
4c66ac9dbSNicholas Bellinger 
5c66ac9dbSNicholas Bellinger #define PSCSI_VERSION		"v4.0"
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 
198dcf07beSBart Van Assche #include <linux/cache.h>             /* ___cacheline_aligned */
208dcf07beSBart Van Assche #include <target/target_core_base.h> /* struct se_device */
21c66ac9dbSNicholas Bellinger 
228dcf07beSBart Van Assche struct block_device;
23ba929992SBart Van Assche struct scsi_device;
248dcf07beSBart Van Assche struct Scsi_Host;
25ba929992SBart Van Assche 
26c66ac9dbSNicholas Bellinger #define PDF_HAS_CHANNEL_ID	0x01
27c66ac9dbSNicholas Bellinger #define PDF_HAS_TARGET_ID	0x02
28c66ac9dbSNicholas Bellinger #define PDF_HAS_LUN_ID		0x04
29c66ac9dbSNicholas Bellinger #define PDF_HAS_VPD_UNIT_SERIAL 0x08
30c66ac9dbSNicholas Bellinger #define PDF_HAS_VPD_DEV_IDENT	0x10
31c66ac9dbSNicholas Bellinger #define PDF_HAS_VIRT_HOST_ID	0x20
32c66ac9dbSNicholas Bellinger 
33c66ac9dbSNicholas Bellinger struct pscsi_dev_virt {
340fd97ccfSChristoph Hellwig 	struct se_device dev;
35c66ac9dbSNicholas Bellinger 	int	pdv_flags;
36c66ac9dbSNicholas Bellinger 	int	pdv_host_id;
37c66ac9dbSNicholas Bellinger 	int	pdv_channel_id;
38c66ac9dbSNicholas Bellinger 	int	pdv_target_id;
39c66ac9dbSNicholas Bellinger 	int	pdv_lun_id;
40c66ac9dbSNicholas Bellinger 	struct block_device *pdv_bd;
41c66ac9dbSNicholas Bellinger 	struct scsi_device *pdv_sd;
425a7125c6SAndy Grover 	struct Scsi_Host *pdv_lld_host;
43c66ac9dbSNicholas Bellinger } ____cacheline_aligned;
44c66ac9dbSNicholas Bellinger 
45c66ac9dbSNicholas Bellinger typedef enum phv_modes {
46e6a8a41aSStefan Hajnoczi 	PHV_VIRTUAL_HOST_ID,
47c66ac9dbSNicholas Bellinger 	PHV_LLD_SCSI_HOST_NO
48c66ac9dbSNicholas Bellinger } phv_modes_t;
49c66ac9dbSNicholas Bellinger 
50c66ac9dbSNicholas Bellinger struct pscsi_hba_virt {
51c66ac9dbSNicholas Bellinger 	int			phv_host_id;
52c66ac9dbSNicholas Bellinger 	phv_modes_t		phv_mode;
53c66ac9dbSNicholas Bellinger 	struct Scsi_Host	*phv_lld_host;
54c66ac9dbSNicholas Bellinger } ____cacheline_aligned;
55c66ac9dbSNicholas Bellinger 
56c66ac9dbSNicholas Bellinger #endif   /*** TARGET_CORE_PSCSI_H ***/
57