diff options
Diffstat (limited to 'drivers/scsi/iscsi_tcp.h')
| -rw-r--r-- | drivers/scsi/iscsi_tcp.h | 88 |
1 files changed, 10 insertions, 78 deletions
diff --git a/drivers/scsi/iscsi_tcp.h b/drivers/scsi/iscsi_tcp.h index 498d8ca39848..ca6b7bc64de0 100644 --- a/drivers/scsi/iscsi_tcp.h +++ b/drivers/scsi/iscsi_tcp.h | |||
| @@ -19,67 +19,27 @@ | |||
| 19 | * See the file COPYING included with this distribution for more details. | 19 | * See the file COPYING included with this distribution for more details. |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #ifndef ISCSI_TCP_H | 22 | #ifndef ISCSI_SW_TCP_H |
| 23 | #define ISCSI_TCP_H | 23 | #define ISCSI_SW_TCP_H |
| 24 | 24 | ||
| 25 | #include <scsi/libiscsi.h> | 25 | #include <scsi/libiscsi.h> |
| 26 | #include <scsi/libiscsi_tcp.h> | ||
| 26 | 27 | ||
| 27 | struct crypto_hash; | ||
| 28 | struct socket; | 28 | struct socket; |
| 29 | struct iscsi_tcp_conn; | 29 | struct iscsi_tcp_conn; |
| 30 | struct iscsi_segment; | ||
| 31 | |||
| 32 | typedef int iscsi_segment_done_fn_t(struct iscsi_tcp_conn *, | ||
| 33 | struct iscsi_segment *); | ||
| 34 | |||
| 35 | struct iscsi_segment { | ||
| 36 | unsigned char *data; | ||
| 37 | unsigned int size; | ||
| 38 | unsigned int copied; | ||
| 39 | unsigned int total_size; | ||
| 40 | unsigned int total_copied; | ||
| 41 | |||
| 42 | struct hash_desc *hash; | ||
| 43 | unsigned char recv_digest[ISCSI_DIGEST_SIZE]; | ||
| 44 | unsigned char digest[ISCSI_DIGEST_SIZE]; | ||
| 45 | unsigned int digest_len; | ||
| 46 | |||
| 47 | struct scatterlist *sg; | ||
| 48 | void *sg_mapped; | ||
| 49 | unsigned int sg_offset; | ||
| 50 | |||
| 51 | iscsi_segment_done_fn_t *done; | ||
| 52 | }; | ||
| 53 | |||
| 54 | /* Socket connection recieve helper */ | ||
| 55 | struct iscsi_tcp_recv { | ||
| 56 | struct iscsi_hdr *hdr; | ||
| 57 | struct iscsi_segment segment; | ||
| 58 | |||
| 59 | /* Allocate buffer for BHS + AHS */ | ||
| 60 | uint32_t hdr_buf[64]; | ||
| 61 | |||
| 62 | /* copied and flipped values */ | ||
| 63 | int datalen; | ||
| 64 | }; | ||
| 65 | 30 | ||
| 66 | /* Socket connection send helper */ | 31 | /* Socket connection send helper */ |
| 67 | struct iscsi_tcp_send { | 32 | struct iscsi_sw_tcp_send { |
| 68 | struct iscsi_hdr *hdr; | 33 | struct iscsi_hdr *hdr; |
| 69 | struct iscsi_segment segment; | 34 | struct iscsi_segment segment; |
| 70 | struct iscsi_segment data_segment; | 35 | struct iscsi_segment data_segment; |
| 71 | }; | 36 | }; |
| 72 | 37 | ||
| 73 | struct iscsi_tcp_conn { | 38 | struct iscsi_sw_tcp_conn { |
| 74 | struct iscsi_conn *iscsi_conn; | 39 | struct iscsi_conn *iscsi_conn; |
| 75 | struct socket *sock; | 40 | struct socket *sock; |
| 76 | int stop_stage; /* conn_stop() flag: * | ||
| 77 | * stop to recover, * | ||
| 78 | * stop to terminate */ | ||
| 79 | /* control data */ | ||
| 80 | struct iscsi_tcp_recv in; /* TCP receive context */ | ||
| 81 | struct iscsi_tcp_send out; /* TCP send context */ | ||
| 82 | 41 | ||
| 42 | struct iscsi_sw_tcp_send out; | ||
| 83 | /* old values for socket callbacks */ | 43 | /* old values for socket callbacks */ |
| 84 | void (*old_data_ready)(struct sock *, int); | 44 | void (*old_data_ready)(struct sock *, int); |
| 85 | void (*old_state_change)(struct sock *); | 45 | void (*old_state_change)(struct sock *); |
| @@ -93,41 +53,13 @@ struct iscsi_tcp_conn { | |||
| 93 | uint32_t sendpage_failures_cnt; | 53 | uint32_t sendpage_failures_cnt; |
| 94 | uint32_t discontiguous_hdr_cnt; | 54 | uint32_t discontiguous_hdr_cnt; |
| 95 | 55 | ||
| 96 | int error; | ||
| 97 | |||
| 98 | ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int); | 56 | ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int); |
| 99 | }; | 57 | }; |
| 100 | 58 | ||
| 101 | struct iscsi_data_task { | 59 | struct iscsi_sw_tcp_hdrbuf { |
| 102 | struct iscsi_data hdr; /* PDU */ | 60 | struct iscsi_hdr hdrbuf; |
| 103 | char hdrext[ISCSI_DIGEST_SIZE];/* Header-Digest */ | 61 | char hdrextbuf[ISCSI_MAX_AHS_SIZE + |
| 104 | }; | ||
| 105 | |||
| 106 | struct iscsi_r2t_info { | ||
| 107 | __be32 ttt; /* copied from R2T */ | ||
| 108 | __be32 exp_statsn; /* copied from R2T */ | ||
| 109 | uint32_t data_length; /* copied from R2T */ | ||
| 110 | uint32_t data_offset; /* copied from R2T */ | ||
| 111 | int sent; /* R2T sequence progress */ | ||
| 112 | int data_count; /* DATA-Out payload progress */ | ||
| 113 | int solicit_datasn; | ||
| 114 | struct iscsi_data_task dtask; /* Data-Out header buf */ | ||
| 115 | }; | ||
| 116 | |||
| 117 | struct iscsi_tcp_task { | ||
| 118 | struct iscsi_hdr_buff { | ||
| 119 | struct iscsi_cmd cmd_hdr; | ||
| 120 | char hdrextbuf[ISCSI_MAX_AHS_SIZE + | ||
| 121 | ISCSI_DIGEST_SIZE]; | 62 | ISCSI_DIGEST_SIZE]; |
| 122 | } hdr; | ||
| 123 | |||
| 124 | int sent; | ||
| 125 | uint32_t exp_datasn; /* expected target's R2TSN/DataSN */ | ||
| 126 | int data_offset; | ||
| 127 | struct iscsi_r2t_info *r2t; /* in progress R2T */ | ||
| 128 | struct iscsi_pool r2tpool; | ||
| 129 | struct kfifo *r2tqueue; | ||
| 130 | struct iscsi_data_task unsol_dtask; /* Data-Out header buf */ | ||
| 131 | }; | 63 | }; |
| 132 | 64 | ||
| 133 | #endif /* ISCSI_H */ | 65 | #endif /* ISCSI_SW_TCP_H */ |
