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