0001
0002 #ifndef ISCSI_SEQ_AND_PDU_LIST_H
0003 #define ISCSI_SEQ_AND_PDU_LIST_H
0004
0005 #include <linux/types.h>
0006 #include <linux/cache.h>
0007
0008
0009 #define DATAOUT_PDU_SENT 1
0010
0011
0012 #define SEQTYPE_IMMEDIATE 1
0013 #define SEQTYPE_UNSOLICITED 2
0014 #define SEQTYPE_NORMAL 3
0015
0016
0017 #define DATAOUT_SEQUENCE_GOT_R2T 1
0018 #define DATAOUT_SEQUENCE_WITHIN_COMMAND_RECOVERY 2
0019 #define DATAOUT_SEQUENCE_COMPLETE 3
0020
0021
0022 #define PDULIST_NORMAL 1
0023 #define PDULIST_IMMEDIATE 2
0024 #define PDULIST_UNSOLICITED 3
0025 #define PDULIST_IMMEDIATE_AND_UNSOLICITED 4
0026
0027
0028 #define PDUTYPE_IMMEDIATE 1
0029 #define PDUTYPE_UNSOLICITED 2
0030 #define PDUTYPE_NORMAL 3
0031
0032
0033 #define ISCSI_PDU_NOT_RECEIVED 0
0034 #define ISCSI_PDU_RECEIVED_OK 1
0035 #define ISCSI_PDU_CRC_FAILED 2
0036 #define ISCSI_PDU_TIMED_OUT 3
0037
0038
0039 #define RANDOM_DATAIN_PDU_OFFSETS 0x01
0040 #define RANDOM_DATAIN_SEQ_OFFSETS 0x02
0041 #define RANDOM_DATAOUT_PDU_OFFSETS 0x04
0042 #define RANDOM_R2T_OFFSETS 0x08
0043
0044
0045 #define ISCSI_PDU_READ 0x01
0046 #define ISCSI_PDU_WRITE 0x02
0047
0048 struct iscsi_build_list {
0049 int data_direction;
0050 int randomize;
0051 int type;
0052 int immediate_data_length;
0053 };
0054
0055 struct iscsi_pdu {
0056 int status;
0057 int type;
0058 u8 flags;
0059 u32 data_sn;
0060 u32 length;
0061 u32 offset;
0062 u32 pdu_send_order;
0063 u32 seq_no;
0064 } ____cacheline_aligned;
0065
0066 struct iscsi_seq {
0067 int sent;
0068 int status;
0069 int type;
0070 u32 data_sn;
0071 u32 first_datasn;
0072 u32 last_datasn;
0073 u32 next_burst_len;
0074 u32 pdu_start;
0075 u32 pdu_count;
0076 u32 offset;
0077 u32 orig_offset;
0078 u32 pdu_send_order;
0079 u32 r2t_sn;
0080 u32 seq_send_order;
0081 u32 seq_no;
0082 u32 xfer_len;
0083 } ____cacheline_aligned;
0084
0085 struct iscsit_cmd;
0086
0087 extern int iscsit_build_pdu_and_seq_lists(struct iscsit_cmd *, u32);
0088 extern struct iscsi_pdu *iscsit_get_pdu_holder(struct iscsit_cmd *, u32, u32);
0089 extern struct iscsi_pdu *iscsit_get_pdu_holder_for_seq(struct iscsit_cmd *, struct iscsi_seq *);
0090 extern struct iscsi_seq *iscsit_get_seq_holder(struct iscsit_cmd *, u32, u32);
0091
0092 #endif