Commit | Line | Data |
---|---|---|
8dcf07be BVA |
1 | #include <target/target_core_base.h> |
2 | ||
f94fd098 | 3 | #define XCOPY_HDR_LEN 16 |
cbf031f4 NB |
4 | #define XCOPY_TARGET_DESC_LEN 32 |
5 | #define XCOPY_SEGMENT_DESC_LEN 28 | |
6 | #define XCOPY_NAA_IEEE_REGEX_LEN 16 | |
7 | #define XCOPY_MAX_SECTORS 1024 | |
8 | ||
f184210b DD |
9 | /* |
10 | * SPC4r37 6.4.6.1 | |
11 | * Table 150 — CSCD descriptor ID values | |
12 | */ | |
13 | #define XCOPY_CSCD_DESC_ID_LIST_OFF_MAX 0x07FF | |
14 | ||
cbf031f4 NB |
15 | enum xcopy_origin_list { |
16 | XCOL_SOURCE_RECV_OP = 0x01, | |
17 | XCOL_DEST_RECV_OP = 0x02, | |
18 | }; | |
19 | ||
20 | struct xcopy_pt_cmd; | |
21 | ||
22 | struct xcopy_op { | |
23 | int op_origin; | |
24 | ||
25 | struct se_cmd *xop_se_cmd; | |
26 | struct se_device *src_dev; | |
27 | unsigned char src_tid_wwn[XCOPY_NAA_IEEE_REGEX_LEN]; | |
28 | struct se_device *dst_dev; | |
29 | unsigned char dst_tid_wwn[XCOPY_NAA_IEEE_REGEX_LEN]; | |
30 | unsigned char local_dev_wwn[XCOPY_NAA_IEEE_REGEX_LEN]; | |
31 | ||
32 | sector_t src_lba; | |
33 | sector_t dst_lba; | |
34 | unsigned short stdi; | |
35 | unsigned short dtdi; | |
36 | unsigned short nolb; | |
37 | unsigned int dbl; | |
38 | ||
39 | struct xcopy_pt_cmd *src_pt_cmd; | |
40 | struct xcopy_pt_cmd *dst_pt_cmd; | |
41 | ||
42 | u32 xop_data_nents; | |
43 | struct scatterlist *xop_data_sg; | |
44 | struct work_struct xop_work; | |
45 | }; | |
46 | ||
47 | /* | |
48 | * Receive Copy Results Sevice Actions | |
49 | */ | |
50 | #define RCR_SA_COPY_STATUS 0x00 | |
51 | #define RCR_SA_RECEIVE_DATA 0x01 | |
52 | #define RCR_SA_OPERATING_PARAMETERS 0x03 | |
53 | #define RCR_SA_FAILED_SEGMENT_DETAILS 0x04 | |
54 | ||
55 | /* | |
56 | * Receive Copy Results defs for Operating Parameters | |
57 | */ | |
58 | #define RCR_OP_MAX_TARGET_DESC_COUNT 0x2 | |
59 | #define RCR_OP_MAX_SG_DESC_COUNT 0x1 | |
60 | #define RCR_OP_MAX_DESC_LIST_LEN 1024 | |
61 | #define RCR_OP_MAX_SEGMENT_LEN 268435456 /* 256 MB */ | |
62 | #define RCR_OP_TOTAL_CONCURR_COPIES 0x1 /* Must be <= 16384 */ | |
63 | #define RCR_OP_MAX_CONCURR_COPIES 0x1 /* Must be <= 255 */ | |
64 | #define RCR_OP_DATA_SEG_GRAN_LOG2 9 /* 512 bytes in log 2 */ | |
65 | #define RCR_OP_INLINE_DATA_GRAN_LOG2 9 /* 512 bytes in log 2 */ | |
66 | #define RCR_OP_HELD_DATA_GRAN_LOG2 9 /* 512 bytes in log 2 */ | |
67 | ||
68 | extern int target_xcopy_setup_pt(void); | |
69 | extern void target_xcopy_release_pt(void); | |
70 | extern sense_reason_t target_do_xcopy(struct se_cmd *); | |
71 | extern sense_reason_t target_do_receive_copy_results(struct se_cmd *); |