Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/linux-arm-soc
[pandora-kernel.git] / include / scsi / iscsi_proto.h
index dd0a52c..988ba06 100644 (file)
 /* default iSCSI listen port for incoming connections */
 #define ISCSI_LISTEN_PORT      3260
 
+/* iSCSI header length */
+#define ISCSI_HDR_LEN          48
+
+/* iSCSI CRC32C length */
+#define ISCSI_CRC_LEN          4
+
 /* Padding word length */
 #define ISCSI_PAD_LEN          4
 
+/*
+ * Serial Number Arithmetic, 32 bits, RFC1982
+ */
+
+static inline int iscsi_sna_lt(u32 n1, u32 n2)
+{
+       return (s32)(n1 - n2) < 0;
+}
+
+static inline int iscsi_sna_lte(u32 n1, u32 n2)
+{
+       return (s32)(n1 - n2) <= 0;
+}
+
+static inline int iscsi_sna_gt(u32 n1, u32 n2)
+{
+       return (s32)(n1 - n2) > 0;
+}
+
+static inline int iscsi_sna_gte(u32 n1, u32 n2)
+{
+       return (s32)(n1 - n2) >= 0;
+}
+
 /*
  * useful common(control and data pathes) macro
  */
@@ -60,7 +90,7 @@ struct iscsi_hdr {
        uint8_t         rsvd2[2];
        uint8_t         hlength;        /* AHSs total length */
        uint8_t         dlength[3];     /* Data length */
-       uint8_t         lun[8];
+       struct scsi_lun lun;
        itt_t           itt;            /* Initiator Task Tag, opaque for target */
        __be32          ttt;            /* Target Task Tag */
        __be32          statsn;
@@ -116,13 +146,13 @@ struct iscsi_ahs_hdr {
 #define ISCSI_CDB_SIZE                 16
 
 /* iSCSI PDU Header */
-struct iscsi_cmd {
+struct iscsi_scsi_req {
        uint8_t opcode;
        uint8_t flags;
        __be16 rsvd2;
        uint8_t hlength;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        itt_t    itt;   /* Initiator Task Tag */
        __be32 data_length;
        __be32 cmdsn;
@@ -161,7 +191,7 @@ struct iscsi_ecdb_ahdr {
 };
 
 /* SCSI Response Header */
-struct iscsi_cmd_rsp {
+struct iscsi_scsi_rsp {
        uint8_t opcode;
        uint8_t flags;
        uint8_t response;
@@ -198,7 +228,7 @@ struct iscsi_async {
        uint8_t rsvd2[2];
        uint8_t rsvd3;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        uint8_t rsvd4[8];
        __be32  statsn;
        __be32  exp_cmdsn;
@@ -226,7 +256,7 @@ struct iscsi_nopout {
        __be16  rsvd2;
        uint8_t rsvd3;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        itt_t    itt;   /* Initiator Task Tag */
        __be32  ttt;    /* Target Transfer Tag */
        __be32  cmdsn;
@@ -241,7 +271,7 @@ struct iscsi_nopin {
        __be16  rsvd2;
        uint8_t rsvd3;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        itt_t    itt;   /* Initiator Task Tag */
        __be32  ttt;    /* Target Transfer Tag */
        __be32  statsn;
@@ -257,7 +287,7 @@ struct iscsi_tm {
        uint8_t rsvd1[2];
        uint8_t hlength;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        itt_t    itt;   /* Initiator Task Tag */
        itt_t    rtt;   /* Reference Task Tag */
        __be32  cmdsn;
@@ -315,7 +345,7 @@ struct iscsi_r2t_rsp {
        uint8_t rsvd2[2];
        uint8_t hlength;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        itt_t    itt;   /* Initiator Task Tag */
        __be32  ttt;    /* Target Transfer Tag */
        __be32  statsn;
@@ -333,7 +363,7 @@ struct iscsi_data {
        uint8_t rsvd2[2];
        uint8_t rsvd3;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        itt_t    itt;
        __be32  ttt;
        __be32  rsvd4;
@@ -353,7 +383,7 @@ struct iscsi_data_rsp {
        uint8_t cmd_status;
        uint8_t hlength;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        itt_t    itt;
        __be32  ttt;
        __be32  statsn;
@@ -406,7 +436,7 @@ struct iscsi_text_rsp {
 };
 
 /* Login Header */
-struct iscsi_login {
+struct iscsi_login_req {
        uint8_t opcode;
        uint8_t flags;
        uint8_t max_version;    /* Max. version supported */
@@ -427,7 +457,13 @@ struct iscsi_login {
 #define ISCSI_FLAG_LOGIN_TRANSIT               0x80
 #define ISCSI_FLAG_LOGIN_CONTINUE              0x40
 #define ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK    0x0C    /* 2 bits */
+#define ISCSI_FLAG_LOGIN_CURRENT_STAGE1                0x04
+#define ISCSI_FLAG_LOGIN_CURRENT_STAGE2                0x08
+#define ISCSI_FLAG_LOGIN_CURRENT_STAGE3                0x0C
 #define ISCSI_FLAG_LOGIN_NEXT_STAGE_MASK       0x03    /* 2 bits */
+#define ISCSI_FLAG_LOGIN_NEXT_STAGE1           0x01
+#define ISCSI_FLAG_LOGIN_NEXT_STAGE2           0x02
+#define ISCSI_FLAG_LOGIN_NEXT_STAGE3           0x03
 
 #define ISCSI_LOGIN_CURRENT_STAGE(flags) \
        ((flags & ISCSI_FLAG_LOGIN_CURRENT_STAGE_MASK) >> 2)
@@ -550,17 +586,25 @@ struct iscsi_logout_rsp {
 struct iscsi_snack {
        uint8_t opcode;
        uint8_t flags;
-       uint8_t rsvd2[14];
+       uint8_t rsvd2[2];
+       uint8_t hlength;
+       uint8_t dlength[3];
+       uint8_t lun[8];
        itt_t    itt;
+       __be32  ttt;
+       uint8_t rsvd3[4];
+       __be32  exp_statsn;
+       uint8_t rsvd4[8];
        __be32  begrun;
        __be32  runlength;
-       __be32  exp_statsn;
-       __be32  rsvd3;
-       __be32  exp_datasn;
-       uint8_t rsvd6[8];
 };
 
 /* SNACK PDU flags */
+#define ISCSI_FLAG_SNACK_TYPE_DATA             0
+#define ISCSI_FLAG_SNACK_TYPE_R2T              0
+#define ISCSI_FLAG_SNACK_TYPE_STATUS           1
+#define ISCSI_FLAG_SNACK_TYPE_DATA_ACK         2
+#define ISCSI_FLAG_SNACK_TYPE_RDATA            3
 #define ISCSI_FLAG_SNACK_TYPE_MASK     0x0F    /* 4 bits */
 
 /* Reject Message Header */