diff options
author | Mike Christie <michaelc@cs.wisc.edu> | 2008-12-02 01:32:13 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-12-29 12:24:22 -0500 |
commit | 262ef63627977acb7d8dd38c4f0f290bf49fbbfd (patch) | |
tree | fc8e01280968470f2d3d122614508fe5e402e0a2 /include/scsi | |
parent | 38e1a8f5479d7d75a68d797c7159f5b7e2ef44e4 (diff) |
[SCSI] libiscsi: allow drivers to modify the itt sent to the target
bnx2i and cxgb3i need to encode LLD info in the itt so that
the firmware/hardware can process the pdu. This patch allows
the LLDs to encode info in the task->hdr->itt that they
setup in the alloc_pdu callout (any resources that are allocated
can be freed with the pdu in the cleanup_task callout). If
the LLD encodes info in the itt they should implement a
parse_pdu_itt callout. If parse_pdu_itt is not implemented
libiscsi will do the right thing for the LLD.
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'include/scsi')
-rw-r--r-- | include/scsi/libiscsi.h | 5 | ||||
-rw-r--r-- | include/scsi/scsi_transport_iscsi.h | 3 |
2 files changed, 6 insertions, 2 deletions
diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h index 51500573c0b8..7360e1916e75 100644 --- a/include/scsi/libiscsi.h +++ b/include/scsi/libiscsi.h | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/workqueue.h> | 30 | #include <linux/workqueue.h> |
31 | #include <scsi/iscsi_proto.h> | 31 | #include <scsi/iscsi_proto.h> |
32 | #include <scsi/iscsi_if.h> | 32 | #include <scsi/iscsi_if.h> |
33 | #include <scsi/scsi_transport_iscsi.h> | ||
33 | 34 | ||
34 | struct scsi_transport_template; | 35 | struct scsi_transport_template; |
35 | struct scsi_host_template; | 36 | struct scsi_host_template; |
@@ -70,12 +71,12 @@ enum { | |||
70 | /* Connection suspend "bit" */ | 71 | /* Connection suspend "bit" */ |
71 | #define ISCSI_SUSPEND_BIT 1 | 72 | #define ISCSI_SUSPEND_BIT 1 |
72 | 73 | ||
73 | #define ISCSI_ITT_MASK (0x1fff) | 74 | #define ISCSI_ITT_MASK 0x1fff |
74 | #define ISCSI_TOTAL_CMDS_MAX 4096 | 75 | #define ISCSI_TOTAL_CMDS_MAX 4096 |
75 | /* this must be a power of two greater than ISCSI_MGMT_CMDS_MAX */ | 76 | /* this must be a power of two greater than ISCSI_MGMT_CMDS_MAX */ |
76 | #define ISCSI_TOTAL_CMDS_MIN 16 | 77 | #define ISCSI_TOTAL_CMDS_MIN 16 |
77 | #define ISCSI_AGE_SHIFT 28 | 78 | #define ISCSI_AGE_SHIFT 28 |
78 | #define ISCSI_AGE_MASK (0xf << ISCSI_AGE_SHIFT) | 79 | #define ISCSI_AGE_MASK 0xf |
79 | 80 | ||
80 | #define ISCSI_ADDRESS_BUF_LEN 64 | 81 | #define ISCSI_ADDRESS_BUF_LEN 64 |
81 | 82 | ||
diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h index c928234c018f..e13cb20f1eae 100644 --- a/include/scsi/scsi_transport_iscsi.h +++ b/include/scsi/scsi_transport_iscsi.h | |||
@@ -122,6 +122,9 @@ struct iscsi_transport { | |||
122 | int (*xmit_pdu) (struct iscsi_task *task); | 122 | int (*xmit_pdu) (struct iscsi_task *task); |
123 | int (*init_pdu) (struct iscsi_task *task, unsigned int offset, | 123 | int (*init_pdu) (struct iscsi_task *task, unsigned int offset, |
124 | unsigned int count); | 124 | unsigned int count); |
125 | void (*parse_pdu_itt) (struct iscsi_conn *conn, itt_t itt, | ||
126 | int *index, int *age); | ||
127 | |||
125 | void (*session_recovery_timedout) (struct iscsi_cls_session *session); | 128 | void (*session_recovery_timedout) (struct iscsi_cls_session *session); |
126 | struct iscsi_endpoint *(*ep_connect) (struct sockaddr *dst_addr, | 129 | struct iscsi_endpoint *(*ep_connect) (struct sockaddr *dst_addr, |
127 | int non_blocking); | 130 | int non_blocking); |