diff options
Diffstat (limited to 'include/scsi')
| -rw-r--r-- | include/scsi/libfc.h | 2 | ||||
| -rw-r--r-- | include/scsi/libsas.h | 1 | ||||
| -rw-r--r-- | include/scsi/osd_initiator.h | 16 | ||||
| -rw-r--r-- | include/scsi/osd_protocol.h | 42 | ||||
| -rw-r--r-- | include/scsi/osd_types.h | 5 | ||||
| -rw-r--r-- | include/scsi/scsi.h | 8 | ||||
| -rw-r--r-- | include/scsi/scsi_device.h | 2 | ||||
| -rw-r--r-- | include/scsi/scsi_host.h | 7 | ||||
| -rw-r--r-- | include/scsi/scsi_tcq.h | 6 | ||||
| -rw-r--r-- | include/scsi/scsi_transport_fc.h | 3 | ||||
| -rw-r--r-- | include/scsi/srp.h | 38 |
11 files changed, 123 insertions, 7 deletions
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h index 14be49b44e84..f986ab7ffe6f 100644 --- a/include/scsi/libfc.h +++ b/include/scsi/libfc.h | |||
| @@ -721,7 +721,7 @@ struct libfc_function_template { | |||
| 721 | * struct fc_disc - Discovery context | 721 | * struct fc_disc - Discovery context |
| 722 | * @retry_count: Number of retries | 722 | * @retry_count: Number of retries |
| 723 | * @pending: 1 if discovery is pending, 0 if not | 723 | * @pending: 1 if discovery is pending, 0 if not |
| 724 | * @requesting: 1 if discovery has been requested, 0 if not | 724 | * @requested: 1 if discovery has been requested, 0 if not |
| 725 | * @seq_count: Number of sequences used for discovery | 725 | * @seq_count: Number of sequences used for discovery |
| 726 | * @buf_len: Length of the discovery buffer | 726 | * @buf_len: Length of the discovery buffer |
| 727 | * @disc_id: Discovery ID | 727 | * @disc_id: Discovery ID |
diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h index d06e13be717b..3dec1949f69c 100644 --- a/include/scsi/libsas.h +++ b/include/scsi/libsas.h | |||
| @@ -205,6 +205,7 @@ struct domain_device { | |||
| 205 | }; | 205 | }; |
| 206 | 206 | ||
| 207 | void *lldd_dev; | 207 | void *lldd_dev; |
| 208 | int gone; | ||
| 208 | }; | 209 | }; |
| 209 | 210 | ||
| 210 | struct sas_discovery_event { | 211 | struct sas_discovery_event { |
diff --git a/include/scsi/osd_initiator.h b/include/scsi/osd_initiator.h index a8f370126632..53a9e886612b 100644 --- a/include/scsi/osd_initiator.h +++ b/include/scsi/osd_initiator.h | |||
| @@ -137,7 +137,7 @@ struct osd_request { | |||
| 137 | void *buff; | 137 | void *buff; |
| 138 | unsigned alloc_size; /* 0 here means: don't call kfree */ | 138 | unsigned alloc_size; /* 0 here means: don't call kfree */ |
| 139 | unsigned total_bytes; | 139 | unsigned total_bytes; |
| 140 | } set_attr, enc_get_attr, get_attr; | 140 | } cdb_cont, set_attr, enc_get_attr, get_attr; |
| 141 | 141 | ||
| 142 | struct _osd_io_info { | 142 | struct _osd_io_info { |
| 143 | struct bio *bio; | 143 | struct bio *bio; |
| @@ -448,6 +448,20 @@ void osd_req_read(struct osd_request *or, | |||
| 448 | int osd_req_read_kern(struct osd_request *or, | 448 | int osd_req_read_kern(struct osd_request *or, |
| 449 | const struct osd_obj_id *obj, u64 offset, void *buff, u64 len); | 449 | const struct osd_obj_id *obj, u64 offset, void *buff, u64 len); |
| 450 | 450 | ||
| 451 | /* Scatter/Gather write/read commands */ | ||
| 452 | int osd_req_write_sg(struct osd_request *or, | ||
| 453 | const struct osd_obj_id *obj, struct bio *bio, | ||
| 454 | const struct osd_sg_entry *sglist, unsigned numentries); | ||
| 455 | int osd_req_read_sg(struct osd_request *or, | ||
| 456 | const struct osd_obj_id *obj, struct bio *bio, | ||
| 457 | const struct osd_sg_entry *sglist, unsigned numentries); | ||
| 458 | int osd_req_write_sg_kern(struct osd_request *or, | ||
| 459 | const struct osd_obj_id *obj, void **buff, | ||
| 460 | const struct osd_sg_entry *sglist, unsigned numentries); | ||
| 461 | int osd_req_read_sg_kern(struct osd_request *or, | ||
| 462 | const struct osd_obj_id *obj, void **buff, | ||
| 463 | const struct osd_sg_entry *sglist, unsigned numentries); | ||
| 464 | |||
| 451 | /* | 465 | /* |
| 452 | * Root/Partition/Collection/Object Attributes commands | 466 | * Root/Partition/Collection/Object Attributes commands |
| 453 | */ | 467 | */ |
diff --git a/include/scsi/osd_protocol.h b/include/scsi/osd_protocol.h index 685661283540..a6026da25f3e 100644 --- a/include/scsi/osd_protocol.h +++ b/include/scsi/osd_protocol.h | |||
| @@ -631,4 +631,46 @@ static inline void osd_sec_set_caps(struct osd_capability_head *cap, | |||
| 631 | put_unaligned_le16(bit_mask, &cap->permissions_bit_mask); | 631 | put_unaligned_le16(bit_mask, &cap->permissions_bit_mask); |
| 632 | } | 632 | } |
| 633 | 633 | ||
| 634 | /* osd2r05a sec 5.3: CDB continuation segment formats */ | ||
| 635 | enum osd_continuation_segment_format { | ||
| 636 | CDB_CONTINUATION_FORMAT_V2 = 0x01, | ||
| 637 | }; | ||
| 638 | |||
| 639 | struct osd_continuation_segment_header { | ||
| 640 | u8 format; | ||
| 641 | u8 reserved1; | ||
| 642 | __be16 service_action; | ||
| 643 | __be32 reserved2; | ||
| 644 | u8 integrity_check[OSDv2_CRYPTO_KEYID_SIZE]; | ||
| 645 | } __packed; | ||
| 646 | |||
| 647 | /* osd2r05a sec 5.4.1: CDB continuation descriptors */ | ||
| 648 | enum osd_continuation_descriptor_type { | ||
| 649 | NO_MORE_DESCRIPTORS = 0x0000, | ||
| 650 | SCATTER_GATHER_LIST = 0x0001, | ||
| 651 | QUERY_LIST = 0x0002, | ||
| 652 | USER_OBJECT = 0x0003, | ||
| 653 | COPY_USER_OBJECT_SOURCE = 0x0101, | ||
| 654 | EXTENSION_CAPABILITIES = 0xFFEE | ||
| 655 | }; | ||
| 656 | |||
| 657 | struct osd_continuation_descriptor_header { | ||
| 658 | __be16 type; | ||
| 659 | u8 reserved; | ||
| 660 | u8 pad_length; | ||
| 661 | __be32 length; | ||
| 662 | } __packed; | ||
| 663 | |||
| 664 | |||
| 665 | /* osd2r05a sec 5.4.2: Scatter/gather list */ | ||
| 666 | struct osd_sg_list_entry { | ||
| 667 | __be64 offset; | ||
| 668 | __be64 len; | ||
| 669 | }; | ||
| 670 | |||
| 671 | struct osd_sg_continuation_descriptor { | ||
| 672 | struct osd_continuation_descriptor_header hdr; | ||
| 673 | struct osd_sg_list_entry entries[]; | ||
| 674 | }; | ||
| 675 | |||
| 634 | #endif /* ndef __OSD_PROTOCOL_H__ */ | 676 | #endif /* ndef __OSD_PROTOCOL_H__ */ |
diff --git a/include/scsi/osd_types.h b/include/scsi/osd_types.h index 3f5e88cc75c0..bd0be7ed4bcf 100644 --- a/include/scsi/osd_types.h +++ b/include/scsi/osd_types.h | |||
| @@ -37,4 +37,9 @@ struct osd_attr { | |||
| 37 | void *val_ptr; /* in network order */ | 37 | void *val_ptr; /* in network order */ |
| 38 | }; | 38 | }; |
| 39 | 39 | ||
| 40 | struct osd_sg_entry { | ||
| 41 | u64 offset; | ||
| 42 | u64 len; | ||
| 43 | }; | ||
| 44 | |||
| 40 | #endif /* ndef __OSD_TYPES_H__ */ | 45 | #endif /* ndef __OSD_TYPES_H__ */ |
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index 8fcb6e0e9e72..216af8538cc9 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h | |||
| @@ -32,6 +32,12 @@ struct scsi_cmnd; | |||
| 32 | #endif | 32 | #endif |
| 33 | 33 | ||
| 34 | /* | 34 | /* |
| 35 | * DIX-capable adapters effectively support infinite chaining for the | ||
| 36 | * protection information scatterlist | ||
| 37 | */ | ||
| 38 | #define SCSI_MAX_PROT_SG_SEGMENTS 0xFFFF | ||
| 39 | |||
| 40 | /* | ||
| 35 | * Special value for scanning to specify scanning or rescanning of all | 41 | * Special value for scanning to specify scanning or rescanning of all |
| 36 | * possible channels, (target) ids, or luns on a given shost. | 42 | * possible channels, (target) ids, or luns on a given shost. |
| 37 | */ | 43 | */ |
| @@ -67,6 +73,7 @@ struct scsi_cmnd; | |||
| 67 | #define SEND_DIAGNOSTIC 0x1d | 73 | #define SEND_DIAGNOSTIC 0x1d |
| 68 | #define ALLOW_MEDIUM_REMOVAL 0x1e | 74 | #define ALLOW_MEDIUM_REMOVAL 0x1e |
| 69 | 75 | ||
| 76 | #define READ_FORMAT_CAPACITIES 0x23 | ||
| 70 | #define SET_WINDOW 0x24 | 77 | #define SET_WINDOW 0x24 |
| 71 | #define READ_CAPACITY 0x25 | 78 | #define READ_CAPACITY 0x25 |
| 72 | #define READ_10 0x28 | 79 | #define READ_10 0x28 |
| @@ -96,6 +103,7 @@ struct scsi_cmnd; | |||
| 96 | #define WRITE_SAME 0x41 | 103 | #define WRITE_SAME 0x41 |
| 97 | #define UNMAP 0x42 | 104 | #define UNMAP 0x42 |
| 98 | #define READ_TOC 0x43 | 105 | #define READ_TOC 0x43 |
| 106 | #define READ_HEADER 0x44 | ||
| 99 | #define LOG_SELECT 0x4c | 107 | #define LOG_SELECT 0x4c |
| 100 | #define LOG_SENSE 0x4d | 108 | #define LOG_SENSE 0x4d |
| 101 | #define XDWRITEREAD_10 0x53 | 109 | #define XDWRITEREAD_10 0x53 |
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 50cb34ffef11..85867dcde335 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
| @@ -148,6 +148,8 @@ struct scsi_device { | |||
| 148 | unsigned retry_hwerror:1; /* Retry HARDWARE_ERROR */ | 148 | unsigned retry_hwerror:1; /* Retry HARDWARE_ERROR */ |
| 149 | unsigned last_sector_bug:1; /* do not use multisector accesses on | 149 | unsigned last_sector_bug:1; /* do not use multisector accesses on |
| 150 | SD_LAST_BUGGY_SECTORS */ | 150 | SD_LAST_BUGGY_SECTORS */ |
| 151 | unsigned no_read_disc_info:1; /* Avoid READ_DISC_INFO cmds */ | ||
| 152 | unsigned no_read_capacity_16:1; /* Avoid READ_CAPACITY_16 cmds */ | ||
| 151 | unsigned is_visible:1; /* is the device visible in sysfs */ | 153 | unsigned is_visible:1; /* is the device visible in sysfs */ |
| 152 | 154 | ||
| 153 | DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */ | 155 | DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */ |
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index b7bdecb7b76e..d0a6a845f204 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h | |||
| @@ -388,6 +388,7 @@ struct scsi_host_template { | |||
| 388 | * of scatter-gather. | 388 | * of scatter-gather. |
| 389 | */ | 389 | */ |
| 390 | unsigned short sg_tablesize; | 390 | unsigned short sg_tablesize; |
| 391 | unsigned short sg_prot_tablesize; | ||
| 391 | 392 | ||
| 392 | /* | 393 | /* |
| 393 | * Set this if the host adapter has limitations beside segment count. | 394 | * Set this if the host adapter has limitations beside segment count. |
| @@ -599,6 +600,7 @@ struct Scsi_Host { | |||
| 599 | int can_queue; | 600 | int can_queue; |
| 600 | short cmd_per_lun; | 601 | short cmd_per_lun; |
| 601 | short unsigned int sg_tablesize; | 602 | short unsigned int sg_tablesize; |
| 603 | short unsigned int sg_prot_tablesize; | ||
| 602 | short unsigned int max_sectors; | 604 | short unsigned int max_sectors; |
| 603 | unsigned long dma_boundary; | 605 | unsigned long dma_boundary; |
| 604 | /* | 606 | /* |
| @@ -823,6 +825,11 @@ static inline unsigned int scsi_host_get_prot(struct Scsi_Host *shost) | |||
| 823 | return shost->prot_capabilities; | 825 | return shost->prot_capabilities; |
| 824 | } | 826 | } |
| 825 | 827 | ||
| 828 | static inline int scsi_host_prot_dma(struct Scsi_Host *shost) | ||
| 829 | { | ||
| 830 | return shost->prot_capabilities >= SHOST_DIX_TYPE0_PROTECTION; | ||
| 831 | } | ||
| 832 | |||
| 826 | static inline unsigned int scsi_host_dif_capable(struct Scsi_Host *shost, unsigned int target_type) | 833 | static inline unsigned int scsi_host_dif_capable(struct Scsi_Host *shost, unsigned int target_type) |
| 827 | { | 834 | { |
| 828 | static unsigned char cap[] = { 0, | 835 | static unsigned char cap[] = { 0, |
diff --git a/include/scsi/scsi_tcq.h b/include/scsi/scsi_tcq.h index 17231385cb37..d6e7994aa634 100644 --- a/include/scsi/scsi_tcq.h +++ b/include/scsi/scsi_tcq.h | |||
| @@ -97,13 +97,9 @@ static inline void scsi_deactivate_tcq(struct scsi_device *sdev, int depth) | |||
| 97 | static inline int scsi_populate_tag_msg(struct scsi_cmnd *cmd, char *msg) | 97 | static inline int scsi_populate_tag_msg(struct scsi_cmnd *cmd, char *msg) |
| 98 | { | 98 | { |
| 99 | struct request *req = cmd->request; | 99 | struct request *req = cmd->request; |
| 100 | struct scsi_device *sdev = cmd->device; | ||
| 101 | 100 | ||
| 102 | if (blk_rq_tagged(req)) { | 101 | if (blk_rq_tagged(req)) { |
| 103 | if (sdev->ordered_tags && req->cmd_flags & REQ_HARDBARRIER) | 102 | *msg++ = MSG_SIMPLE_TAG; |
| 104 | *msg++ = MSG_ORDERED_TAG; | ||
| 105 | else | ||
| 106 | *msg++ = MSG_SIMPLE_TAG; | ||
| 107 | *msg++ = req->tag; | 103 | *msg++ = req->tag; |
| 108 | return 2; | 104 | return 2; |
| 109 | } | 105 | } |
diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h index 87d81b3ce564..59816fe31e68 100644 --- a/include/scsi/scsi_transport_fc.h +++ b/include/scsi/scsi_transport_fc.h | |||
| @@ -496,6 +496,7 @@ struct fc_host_attrs { | |||
| 496 | u64 fabric_name; | 496 | u64 fabric_name; |
| 497 | char symbolic_name[FC_SYMBOLIC_NAME_SIZE]; | 497 | char symbolic_name[FC_SYMBOLIC_NAME_SIZE]; |
| 498 | char system_hostname[FC_SYMBOLIC_NAME_SIZE]; | 498 | char system_hostname[FC_SYMBOLIC_NAME_SIZE]; |
| 499 | u32 dev_loss_tmo; | ||
| 499 | 500 | ||
| 500 | /* Private (Transport-managed) Attributes */ | 501 | /* Private (Transport-managed) Attributes */ |
| 501 | enum fc_tgtid_binding_type tgtid_bind_type; | 502 | enum fc_tgtid_binding_type tgtid_bind_type; |
| @@ -580,6 +581,8 @@ struct fc_host_attrs { | |||
| 580 | (((struct fc_host_attrs *)(x)->shost_data)->devloss_work_q_name) | 581 | (((struct fc_host_attrs *)(x)->shost_data)->devloss_work_q_name) |
| 581 | #define fc_host_devloss_work_q(x) \ | 582 | #define fc_host_devloss_work_q(x) \ |
| 582 | (((struct fc_host_attrs *)(x)->shost_data)->devloss_work_q) | 583 | (((struct fc_host_attrs *)(x)->shost_data)->devloss_work_q) |
| 584 | #define fc_host_dev_loss_tmo(x) \ | ||
| 585 | (((struct fc_host_attrs *)(x)->shost_data)->dev_loss_tmo) | ||
| 583 | 586 | ||
| 584 | 587 | ||
| 585 | struct fc_bsg_buffer { | 588 | struct fc_bsg_buffer { |
diff --git a/include/scsi/srp.h b/include/scsi/srp.h index ad178fa78f66..1ae84db4c9fb 100644 --- a/include/scsi/srp.h +++ b/include/scsi/srp.h | |||
| @@ -239,4 +239,42 @@ struct srp_rsp { | |||
| 239 | u8 data[0]; | 239 | u8 data[0]; |
| 240 | } __attribute__((packed)); | 240 | } __attribute__((packed)); |
| 241 | 241 | ||
| 242 | struct srp_cred_req { | ||
| 243 | u8 opcode; | ||
| 244 | u8 sol_not; | ||
| 245 | u8 reserved[2]; | ||
| 246 | __be32 req_lim_delta; | ||
| 247 | u64 tag; | ||
| 248 | }; | ||
| 249 | |||
| 250 | struct srp_cred_rsp { | ||
| 251 | u8 opcode; | ||
| 252 | u8 reserved[7]; | ||
| 253 | u64 tag; | ||
| 254 | }; | ||
| 255 | |||
| 256 | /* | ||
| 257 | * The SRP spec defines the fixed portion of the AER_REQ structure to be | ||
| 258 | * 36 bytes, so it needs to be packed to avoid having it padded to 40 bytes | ||
| 259 | * on 64-bit architectures. | ||
| 260 | */ | ||
| 261 | struct srp_aer_req { | ||
| 262 | u8 opcode; | ||
| 263 | u8 sol_not; | ||
| 264 | u8 reserved[2]; | ||
| 265 | __be32 req_lim_delta; | ||
| 266 | u64 tag; | ||
| 267 | u32 reserved2; | ||
| 268 | __be64 lun; | ||
| 269 | __be32 sense_data_len; | ||
| 270 | u32 reserved3; | ||
| 271 | u8 sense_data[0]; | ||
| 272 | } __attribute__((packed)); | ||
| 273 | |||
| 274 | struct srp_aer_rsp { | ||
| 275 | u8 opcode; | ||
| 276 | u8 reserved[7]; | ||
| 277 | u64 tag; | ||
| 278 | }; | ||
| 279 | |||
| 242 | #endif /* SCSI_SRP_H */ | 280 | #endif /* SCSI_SRP_H */ |
