aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/scsi/iscsi_proto.h10
-rw-r--r--include/scsi/libiscsi.h33
2 files changed, 40 insertions, 3 deletions
diff --git a/include/scsi/iscsi_proto.h b/include/scsi/iscsi_proto.h
index 751c81eaa7f3..6947082eee6d 100644
--- a/include/scsi/iscsi_proto.h
+++ b/include/scsi/iscsi_proto.h
@@ -27,7 +27,7 @@
27#define ISCSI_LISTEN_PORT 3260 27#define ISCSI_LISTEN_PORT 3260
28 28
29/* Padding word length */ 29/* Padding word length */
30#define PAD_WORD_LEN 4 30#define ISCSI_PAD_LEN 4
31 31
32/* 32/*
33 * useful common(control and data pathes) macro 33 * useful common(control and data pathes) macro
@@ -147,6 +147,14 @@ struct iscsi_rlength_ahdr {
147 __be32 read_length; 147 __be32 read_length;
148}; 148};
149 149
150/* Extended CDB AHS */
151struct iscsi_ecdb_ahdr {
152 __be16 ahslength; /* CDB length - 15, including reserved byte */
153 uint8_t ahstype;
154 uint8_t reserved;
155 uint8_t ecdb[260 - 16]; /* 4-byte aligned extended CDB spillover */
156};
157
150/* SCSI Response Header */ 158/* SCSI Response Header */
151struct iscsi_cmd_rsp { 159struct iscsi_cmd_rsp {
152 uint8_t opcode; 160 uint8_t opcode;
diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h
index e1fb3d0927b0..a9a9e869188d 100644
--- a/include/scsi/libiscsi.h
+++ b/include/scsi/libiscsi.h
@@ -78,6 +78,9 @@ enum {
78#define ISCSI_ADDRESS_BUF_LEN 64 78#define ISCSI_ADDRESS_BUF_LEN 64
79 79
80enum { 80enum {
81 /* this is the maximum possible storage for AHSs */
82 ISCSI_MAX_AHS_SIZE = sizeof(struct iscsi_ecdb_ahdr) +
83 sizeof(struct iscsi_rlength_ahdr),
81 ISCSI_DIGEST_SIZE = sizeof(__u32), 84 ISCSI_DIGEST_SIZE = sizeof(__u32),
82}; 85};
83 86
@@ -102,10 +105,13 @@ enum {
102 105
103struct iscsi_cmd_task { 106struct iscsi_cmd_task {
104 /* 107 /*
105 * Becuae LLDs allocate their hdr differently, this is a pointer to 108 * Because LLDs allocate their hdr differently, this is a pointer
106 * that storage. It must be setup at session creation time. 109 * and length to that storage. It must be setup at session
110 * creation time.
107 */ 111 */
108 struct iscsi_cmd *hdr; 112 struct iscsi_cmd *hdr;
113 unsigned short hdr_max;
114 unsigned short hdr_len; /* accumulated size of hdr used */
109 int itt; /* this ITT */ 115 int itt; /* this ITT */
110 116
111 uint32_t unsol_datasn; 117 uint32_t unsol_datasn;
@@ -124,6 +130,11 @@ struct iscsi_cmd_task {
124 void *dd_data; /* driver/transport data */ 130 void *dd_data; /* driver/transport data */
125}; 131};
126 132
133static inline void* iscsi_next_hdr(struct iscsi_cmd_task *ctask)
134{
135 return (void*)ctask->hdr + ctask->hdr_len;
136}
137
127struct iscsi_conn { 138struct iscsi_conn {
128 struct iscsi_cls_conn *cls_conn; /* ptr to class connection */ 139 struct iscsi_cls_conn *cls_conn; /* ptr to class connection */
129 void *dd_data; /* iscsi_transport data */ 140 void *dd_data; /* iscsi_transport data */
@@ -342,4 +353,22 @@ extern void iscsi_requeue_ctask(struct iscsi_cmd_task *ctask);
342extern void iscsi_pool_free(struct iscsi_queue *, void **); 353extern void iscsi_pool_free(struct iscsi_queue *, void **);
343extern int iscsi_pool_init(struct iscsi_queue *, int, void ***, int); 354extern int iscsi_pool_init(struct iscsi_queue *, int, void ***, int);
344 355
356/*
357 * inline functions to deal with padding.
358 */
359static inline unsigned int
360iscsi_padded(unsigned int len)
361{
362 return (len + ISCSI_PAD_LEN - 1) & ~(ISCSI_PAD_LEN - 1);
363}
364
365static inline unsigned int
366iscsi_padding(unsigned int len)
367{
368 len &= (ISCSI_PAD_LEN - 1);
369 if (len)
370 len = ISCSI_PAD_LEN - len;
371 return len;
372}
373
345#endif 374#endif