aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/target/target_core_backend.h3
-rw-r--r--include/target/target_core_base.h44
2 files changed, 47 insertions, 0 deletions
diff --git a/include/target/target_core_backend.h b/include/target/target_core_backend.h
index 39e0114d70c5..0dc2745b9b18 100644
--- a/include/target/target_core_backend.h
+++ b/include/target/target_core_backend.h
@@ -41,6 +41,9 @@ struct se_subsystem_api {
41 unsigned int (*get_io_opt)(struct se_device *); 41 unsigned int (*get_io_opt)(struct se_device *);
42 unsigned char *(*get_sense_buffer)(struct se_cmd *); 42 unsigned char *(*get_sense_buffer)(struct se_cmd *);
43 bool (*get_write_cache)(struct se_device *); 43 bool (*get_write_cache)(struct se_device *);
44 int (*init_prot)(struct se_device *);
45 int (*format_prot)(struct se_device *);
46 void (*free_prot)(struct se_device *);
44}; 47};
45 48
46struct sbc_ops { 49struct sbc_ops {
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
index dd87ab46ce21..d98048b97fe3 100644
--- a/include/target/target_core_base.h
+++ b/include/target/target_core_base.h
@@ -435,6 +435,34 @@ struct se_tmr_req {
435 struct list_head tmr_list; 435 struct list_head tmr_list;
436}; 436};
437 437
438enum target_prot_op {
439 TARGET_PROT_NORMAL = 0,
440 TARGET_PROT_DIN_INSERT,
441 TARGET_PROT_DOUT_INSERT,
442 TARGET_PROT_DIN_STRIP,
443 TARGET_PROT_DOUT_STRIP,
444 TARGET_PROT_DIN_PASS,
445 TARGET_PROT_DOUT_PASS,
446};
447
448enum target_prot_ho {
449 PROT_SEPERATED,
450 PROT_INTERLEAVED,
451};
452
453enum target_prot_type {
454 TARGET_DIF_TYPE0_PROT,
455 TARGET_DIF_TYPE1_PROT,
456 TARGET_DIF_TYPE2_PROT,
457 TARGET_DIF_TYPE3_PROT,
458};
459
460struct se_dif_v1_tuple {
461 __be16 guard_tag;
462 __be16 app_tag;
463 __be32 ref_tag;
464};
465
438struct se_cmd { 466struct se_cmd {
439 /* SAM response code being sent to initiator */ 467 /* SAM response code being sent to initiator */
440 u8 scsi_status; 468 u8 scsi_status;
@@ -519,6 +547,17 @@ struct se_cmd {
519 547
520 /* Used for lun->lun_ref counting */ 548 /* Used for lun->lun_ref counting */
521 bool lun_ref_active; 549 bool lun_ref_active;
550
551 /* DIF related members */
552 enum target_prot_op prot_op;
553 enum target_prot_type prot_type;
554 u32 prot_length;
555 u32 reftag_seed;
556 struct scatterlist *t_prot_sg;
557 unsigned int t_prot_nents;
558 enum target_prot_ho prot_handover;
559 sense_reason_t pi_err;
560 u32 block_num;
522}; 561};
523 562
524struct se_ua { 563struct se_ua {
@@ -629,6 +668,9 @@ struct se_dev_attrib {
629 int emulate_tpws; 668 int emulate_tpws;
630 int emulate_caw; 669 int emulate_caw;
631 int emulate_3pc; 670 int emulate_3pc;
671 int pi_prot_format;
672 enum target_prot_type pi_prot_type;
673 enum target_prot_type hw_pi_prot_type;
632 int enforce_pr_isids; 674 int enforce_pr_isids;
633 int is_nonrot; 675 int is_nonrot;
634 int emulate_rest_reord; 676 int emulate_rest_reord;
@@ -759,6 +801,8 @@ struct se_device {
759 /* Linked list for struct se_hba struct se_device list */ 801 /* Linked list for struct se_hba struct se_device list */
760 struct list_head dev_list; 802 struct list_head dev_list;
761 struct se_lun xcopy_lun; 803 struct se_lun xcopy_lun;
804 /* Protection Information */
805 int prot_length;
762}; 806};
763 807
764struct se_hba { 808struct se_hba {