]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.h
MdeModulePkg: Delete IScsiDxe in MdeModulePkg.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / IScsiDxe / IScsiProto.h
diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.h b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.h
deleted file mode 100644 (file)
index 6469df0..0000000
+++ /dev/null
@@ -1,1005 +0,0 @@
-/** @file\r
-  The header file of iSCSI Protocol that defines many specific data structures.\r
-\r
-Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#ifndef _ISCSI_PROTO_H_\r
-#define _ISCSI_PROTO_H_\r
-\r
-#include <Protocol/ScsiPassThruExt.h>\r
-\r
-//\r
-// RFC 1982 Serial Number Arithmetic, SERIAL_BITS = 32\r
-//\r
-#define ISCSI_SEQ_EQ(s1, s2)  ((s1) == (s2))\r
-#define ISCSI_SEQ_LT(s1, s2) \\r
-    ( \\r
-      (((INT32) (s1) < (INT32) (s2)) && (s2 - s1) < ((UINT32) 1 << 31)) || \\r
-      (((INT32) (s1) > (INT32) (s2)) && (s1 - s2) > ((UINT32) 1 << 31)) \\r
-    )\r
-#define ISCSI_SEQ_GT(s1, s2) \\r
-    ( \\r
-      (((INT32) (s1) < (INT32) (s2)) && (s2 - s1) > ((UINT32) 1 << 31)) || \\r
-      (((INT32) (s1) > (INT32) (s2)) && (s1 - s2) < ((UINT32) 1 << 31)) \\r
-    )\r
-\r
-#define ISCSI_WELL_KNOWN_PORT                   3260\r
-#define ISCSI_MAX_CONNS_PER_SESSION             1\r
-\r
-#define DEFAULT_MAX_RECV_DATA_SEG_LEN           8192\r
-#define MAX_RECV_DATA_SEG_LEN_IN_FFP            65536\r
-#define DEFAULT_MAX_OUTSTANDING_R2T             1\r
-\r
-#define ISCSI_VERSION_MAX                       0x00\r
-#define ISCSI_VERSION_MIN                       0x00\r
-\r
-#define ISCSI_CHECK_MEDIA_LOGIN_WAITING_TIME          EFI_TIMER_PERIOD_SECONDS(20)\r
-#define ISCSI_CHECK_MEDIA_GET_DHCP_WAITING_TIME       EFI_TIMER_PERIOD_SECONDS(20)\r
-\r
-#define ISCSI_KEY_AUTH_METHOD                   "AuthMethod"\r
-#define ISCSI_KEY_HEADER_DIGEST                 "HeaderDigest"\r
-#define ISCSI_KEY_DATA_DIGEST                   "DataDigest"\r
-#define ISCSI_KEY_MAX_CONNECTIONS               "MaxConnections"\r
-#define ISCSI_KEY_TARGET_NAME                   "TargetName"\r
-#define ISCSI_KEY_INITIATOR_NAME                "InitiatorName"\r
-#define ISCSI_KEY_TARGET_ALIAS                  "TargetAlias"\r
-#define ISCSI_KEY_INITIATOR_ALIAS               "InitiatorAlias"\r
-#define ISCSI_KEY_TARGET_ADDRESS                "TargetAddress"\r
-#define ISCSI_KEY_INITIAL_R2T                   "InitialR2T"\r
-#define ISCSI_KEY_IMMEDIATE_DATA                "ImmediateData"\r
-#define ISCSI_KEY_TARGET_PORTAL_GROUP_TAG       "TargetPortalGroupTag"\r
-#define ISCSI_KEY_MAX_BURST_LENGTH              "MaxBurstLength"\r
-#define ISCSI_KEY_FIRST_BURST_LENGTH            "FirstBurstLength"\r
-#define ISCSI_KEY_DEFAULT_TIME2WAIT             "DefaultTime2Wait"\r
-#define ISCSI_KEY_DEFAULT_TIME2RETAIN           "DefaultTime2Retain"\r
-#define ISCSI_KEY_MAX_OUTSTANDING_R2T           "MaxOutstandingR2T"\r
-#define ISCSI_KEY_DATA_PDU_IN_ORDER             "DataPDUInOrder"\r
-#define ISCSI_KEY_DATA_SEQUENCE_IN_ORDER        "DataSequenceInOrder"\r
-#define ISCSI_KEY_ERROR_RECOVERY_LEVEL          "ErrorRecoveryLevel"\r
-#define ISCSI_KEY_SESSION_TYPE                  "SessionType"\r
-#define ISCSI_KEY_MAX_RECV_DATA_SEGMENT_LENGTH  "MaxRecvDataSegmentLength"\r
-\r
-#define ISCSI_KEY_VALUE_NONE                    "None"\r
-\r
-///\r
-/// connection state for initiator\r
-///\r
-\r
-#define CONN_STATE_FREE                         0\r
-#define CONN_STATE_XPT_WAIT                     1\r
-#define CONN_STATE_IN_LOGIN                     2\r
-#define CONN_STATE_LOGGED_IN                    3\r
-#define CONN_STATE_IN_LOGOUT                    4\r
-#define CONN_STATE_LOGOUT_REQUESTED             5\r
-#define CONN_STATE_CLEANUP_WAIT                 6\r
-#define CONN_STATE_IN_CLEANUP                   7\r
-\r
-///\r
-/// session state for initiator\r
-///\r
-#define SESSION_STATE_FREE                      0\r
-#define SESSION_STATE_LOGGED_IN                 1\r
-#define SESSION_STATE_FAILED                    2\r
-\r
-typedef enum {\r
-  DataIn  = 0,\r
-  DataOut = 1,\r
-  DataBi  = 2\r
-} DATA_DIRECTION;\r
-\r
-#define ISCSI_RESERVED_TAG                  0xffffffff\r
-\r
-#define ISCSI_REQ_IMMEDIATE                 0x40\r
-#define ISCSI_OPCODE_MASK                   0x3F\r
-\r
-#define ISCSI_SET_OPCODE(PduHdr, Op, Flgs)  ((((ISCSI_BASIC_HEADER *) (PduHdr))->OpCode) = ((Op) | (Flgs)))\r
-#define ISCSI_GET_OPCODE(PduHdr)            ((((ISCSI_BASIC_HEADER *) (PduHdr))->OpCode) & ISCSI_OPCODE_MASK)\r
-#define ISCSI_CHECK_OPCODE(PduHdr, Op)      ((((PduHdr)->OpCode) & ISCSI_OPCODE_MASK) == (Op))\r
-#define ISCSI_IMMEDIATE_ON(PduHdr)          ((PduHdr)->OpCode & ISCSI_REQ_IMMEDIATE)\r
-#define ISCSI_SET_FLAG(PduHdr, Flag)        (((ISCSI_BASIC_HEADER *) (PduHdr))->Flags |= (BOOLEAN)(Flag))\r
-#define ISCSI_CLEAR_FLAG(PduHdr, Flag)      (((ISCSI_BASIC_HEADER *) (PduHdr))->Flags &= ~(Flag))\r
-#define ISCSI_FLAG_ON(PduHdr, Flag)         ((((ISCSI_BASIC_HEADER *) (PduHdr))->Flags & (Flag)) == (Flag))\r
-#define ISCSI_SET_STAGES(PduHdr, Cur, Nxt)  ((PduHdr)->Flags = (UINT8) ((PduHdr)->Flags | ((Cur) << 2 | (Nxt))))\r
-#define ISCSI_GET_CURRENT_STAGE(PduHdr)     (((PduHdr)->Flags >> 2) & 0x3)\r
-#define ISCSI_GET_NEXT_STAGE(PduHdr)        (((PduHdr)->Flags) & 0x3)\r
-\r
-#define ISCSI_GET_PAD_LEN(DataLen)          ((~(DataLen) + 1) & 0x3)\r
-#define ISCSI_ROUNDUP(DataLen)              (((DataLen) + 3) &~(0x3))\r
-\r
-#define HTON24(Dst, Src) \\r
-  do { \\r
-    (Dst)[0]  = (UINT8) (((Src) >> 16) & 0xFF); \\r
-    (Dst)[1]  = (UINT8) (((Src) >> 8) & 0xFF); \\r
-    (Dst)[2]  = (UINT8) ((Src) & 0xFF); \\r
-  } while (0);\r
-\r
-#define NTOH24(src)                         (((src)[0] << 16) | ((src)[1] << 8) | ((src)[2]))\r
-\r
-#define ISCSI_GET_DATASEG_LEN(PduHdr)       NTOH24 (((ISCSI_BASIC_HEADER *) (PduHdr))->DataSegmentLength)\r
-#define ISCSI_SET_DATASEG_LEN(PduHdr, Len)  HTON24 (((ISCSI_BASIC_HEADER *) (PduHdr))->DataSegmentLength, (Len))\r
-\r
-//\r
-// initiator opcodes\r
-//\r
-#define ISCSI_OPCODE_NOP_OUT        0x00\r
-#define ISCSI_OPCODE_SCSI_CMD       0x01\r
-#define ISCSI_OPCODE_SCSI_TMF_REQ   0x02\r
-#define ISCSI_OPCODE_LOGIN_REQ      0x03\r
-#define ISCSI_OPCODE_TEXT_REQ       0x04\r
-#define ISCSI_OPCODE_SCSI_DATA_OUT  0x05\r
-#define ISCSI_OPCODE_LOGOUT_REQ     0x06\r
-#define ISCSI_OPCODE_SNACK_REQ      0x10\r
-#define ISCSI_OPCODE_VENDOR_I0      0x1c\r
-#define ISCSI_OPCODE_VENDOR_I1      0x1d\r
-#define ISCSI_OPCODE_VENDOR_I2      0x1e\r
-\r
-//\r
-// target opcodes\r
-//\r
-#define ISCSI_OPCODE_NOP_IN       0x20\r
-#define ISCSI_OPCODE_SCSI_RSP     0x21\r
-#define ISCSI_OPCODE_SCSI_TMF_RSP 0x22\r
-#define ISCSI_OPCODE_LOGIN_RSP    0x23\r
-#define ISCSI_OPCODE_TEXT_RSP     0x24\r
-#define ISCSI_OPCODE_SCSI_DATA_IN 0x25\r
-#define ISCSI_OPCODE_LOGOUT_RSP   0x26\r
-#define ISCSI_OPCODE_R2T          0x31\r
-#define ISCSI_OPCODE_ASYNC_MSG    0x32\r
-#define ISCSI_OPCODE_VENDOR_T0    0x3c\r
-#define ISCSI_OPCODE_VENDOR_T1    0x3d\r
-#define ISCSI_OPCODE_VENDOR_T2    0x3e\r
-#define ISCSI_OPCODE_REJECT       0x3f\r
-\r
-#define ISCSI_BHS_FLAG_FINAL      0x80\r
-\r
-///\r
-/// iSCSI Basic Header Segment\r
-///\r
-typedef struct _ISCSI_BASIC_HEADER {\r
-  UINT8   OpCode;\r
-  UINT8   Flags;\r
-  UINT16  OpCodeSpecific1;\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT8   Lun[8];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  OpCodeSpecific2[7];\r
-} ISCSI_BASIC_HEADER;\r
-\r
-//\r
-// Defined AHS types, others are reserved.\r
-//\r
-#define ISCSI_AHS_TYPE_EXT_CDB              0x1\r
-#define ISCSI_AHS_TYPE_BI_EXP_READ_DATA_LEN 0x2\r
-\r
-typedef struct _ISCSI_ADDTIONAL_HEADER {\r
-  UINT16  Length;\r
-  UINT8   Type;\r
-  UINT8   TypeSpecific[1];\r
-} ISCSI_ADDITIONAL_HEADER;\r
-\r
-typedef struct _ISCSI_BI_EXP_READ_DATA_LEN_AHS {\r
-  UINT16  Length;\r
-  UINT8   Type;\r
-  UINT8   Reserved;\r
-  UINT32  ExpReadDataLength;\r
-} ISCSI_BI_EXP_READ_DATA_LEN_AHS;\r
-\r
-#define SCSI_CMD_PDU_FLAG_READ        0x40\r
-#define SCSI_CMD_PDU_FLAG_WRITE       0x20\r
-\r
-#define ISCSI_CMD_PDU_TASK_ATTR_MASK  0x07\r
-\r
-//\r
-// task attributes\r
-//\r
-#define ISCSI_TASK_ATTR_UNTAGGED  0x00\r
-#define ISCSI_TASK_ATTR_SIMPLE    0x01\r
-#define ISCSI_TASK_ATTR_ORDERD    0x02\r
-#define ISCSI_TASK_ATTR_HOQ       0x03\r
-#define ISCSI_TASK_ATTR_ACA       0x04\r
-\r
-///\r
-/// SCSI Command\r
-///\r
-typedef struct _SCSI_COMMAND {\r
-  UINT8   OpCode;\r
-  UINT8   Flags;\r
-  UINT16  Reserved;\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT8   Lun[8];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  ExpDataXferLength;\r
-  UINT32  CmdSN;\r
-  UINT32  ExpStatSN;\r
-  UINT8   Cdb[16];\r
-} SCSI_COMMAND;\r
-\r
-//\r
-// flag bit definitions in SCSI response\r
-//\r
-#define SCSI_RSP_PDU_FLAG_BI_READ_OVERFLOW  0x10\r
-#define SCSI_RSP_PDU_FLAG_BI_READ_UNDERFLOW 0x08\r
-#define SCSI_RSP_PDU_FLAG_OVERFLOW          0x04\r
-#define SCSI_RSP_PDU_FLAG_UNDERFLOW         0x02\r
-\r
-//\r
-// iSCSI service response codes\r
-//\r
-#define ISCSI_SERVICE_RSP_COMMAND_COMPLETE_AT_TARGET  0x00\r
-#define ISCSI_SERVICE_RSP_TARGET_FAILURE              0x01\r
-\r
-///\r
-/// SCSI Response\r
-///\r
-typedef struct _SCSI_RESPONSE {\r
-  UINT8   OpCode;\r
-  UINT8   Flags;\r
-  UINT8   Response;\r
-  UINT8   Status;\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT8   Reserved[8];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  SNACKTag;\r
-  UINT32  StatSN;\r
-  UINT32  ExpCmdSN;\r
-  UINT32  MaxCmdSN;\r
-  UINT32  ExpDataSN;\r
-  UINT32  BiReadResidualCount;\r
-  UINT32  ResidualCount;\r
-} SCSI_RESPONSE;\r
-\r
-typedef struct _ISCSI_SENSE_DATA {\r
-  UINT16  Length;\r
-  UINT8   Data[2];\r
-} ISCSI_SENSE_DATA;\r
-\r
-///\r
-/// iSCSI Task Managment Function Request\r
-///\r
-typedef struct _ISCSI_TMF_REQUEST {\r
-  UINT8   OpCode;\r
-  UINT8   Fuction;\r
-  UINT16  Reserved1;\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT8   Lun[8];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  ReferencedTaskTag;\r
-  UINT32  CmdSN;\r
-  UINT32  ExpStatSN;\r
-  UINT32  RefCmdSN;\r
-  UINT32  ExpDataSN;\r
-  UINT32  Reserved2[2];\r
-} ISCSI_TMF_REQUEST;\r
-\r
-#define ISCSI_TMF_RSP_PDU_RSP_FUNCTION_COMPLETE           0\r
-#define ISCSI_TMF_RSP_PDU_RSP_TASK_NOT_EXIST              1\r
-#define ISCSI_TMF_RSP_PDU_RSP_LUN_NOT_EXIST               2\r
-#define ISCSI_TMF_RSP_PDU_RSP_TASK_STILL_ALLEGIANT        3\r
-#define ISCSI_TMF_RSP_PDU_RSP_TASK_REASSGIN_NOT_SUPPORTED 4\r
-#define ISCSI_TMF_RSP_PDU_RSP_NOT_SUPPORTED               5\r
-#define ISCSI_TMF_RSP_PDU_RSP_FUNCTION_AHTH_FAILED        6\r
-#define ISCSI_TMF_RSP_PDU_RSP_FUNCTION_REJECTED           255\r
-\r
-///\r
-/// iSCSI Task Management Function Response\r
-///\r
-typedef struct _ISCSI_TMF_RESPONSE {\r
-  UINT8   OpCode;\r
-  UINT8   Reserved1;\r
-  UINT8   Response;\r
-  UINT8   Reserved2;\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT32  Reserver3[2];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  Reserved4;\r
-  UINT32  StatSN;\r
-  UINT32  ExpCmdSN;\r
-  UINT32  MaxCmdSN;\r
-  UINT32  Reserved[3];\r
-} ISCSI_TMF_RESPONSE;\r
-\r
-///\r
-/// SCSI Data-Out\r
-///\r
-typedef struct _ISCSI_SCSI_DATA_OUT {\r
-  UINT8   OpCode;\r
-  UINT8   Reserved1[3];\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT8   Lun[8];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  TargetTransferTag;\r
-  UINT32  Reserved2;\r
-  UINT32  ExpStatSN;\r
-  UINT32  Reserved3;\r
-  UINT32  DataSN;\r
-  UINT32  BufferOffset;\r
-  UINT32  Reserved4;\r
-} ISCSI_SCSI_DATA_OUT;\r
-\r
-#define SCSI_DATA_IN_PDU_FLAG_ACKKNOWLEDGE  0x40\r
-#define SCSI_DATA_IN_PDU_FLAG_OVERFLOW      SCSI_RSP_PDU_FLAG_OVERFLOW\r
-#define SCSI_DATA_IN_PDU_FLAG_UNDERFLOW     SCSI_RSP_PDU_FLAG_UNDERFLOW\r
-#define SCSI_DATA_IN_PDU_FLAG_STATUS_VALID  0x01\r
-\r
-///\r
-/// SCSI Data-In\r
-///\r
-typedef struct _ISCSI_SCSI_DATA_IN {\r
-  UINT8   OpCode;\r
-  UINT8   Flags;\r
-  UINT8   Reserved1;\r
-  UINT8   Status;\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT8   Lun[8];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  TargetTransferTag;\r
-  UINT32  StatSN;\r
-  UINT32  ExpCmdSN;\r
-  UINT32  MaxCmdSN;\r
-  UINT32  DataSN;\r
-  UINT32  BufferOffset;\r
-  UINT32  ResidualCount;\r
-} ISCSI_SCSI_DATA_IN;\r
-\r
-#define ISCSI_GET_BUFFER_OFFSET(PduHdr) NTOHL (((ISCSI_SCSI_DATA_IN *) (PduHdr))->BufferOffset)\r
-\r
-///\r
-/// Ready To Transfer\r
-///\r
-typedef struct _ISCSI_READY_TO_TRANSFER {\r
-  UINT8   OpCode;\r
-  UINT8   Reserved1[3];\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT8   Lun[8];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  TargetTransferTag;\r
-  UINT32  StatSN;\r
-  UINT32  ExpCmdSN;\r
-  UINT32  MaxCmdSN;\r
-  UINT32  R2TSeqNum;\r
-  UINT32  BufferOffset;\r
-  UINT32  DesiredDataTransferLength;\r
-} ISCSI_READY_TO_TRANSFER;\r
-\r
-typedef struct _ISCSI_ASYNC_MESSAGE {\r
-  UINT8   OpCode;\r
-  UINT8   Reserved1[8];\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT8   Lun[8];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  Reserved2;\r
-  UINT32  StatSN;\r
-  UINT32  ExpCmdSN;\r
-  UINT32  MaxCmdSN;\r
-  UINT8   AsyncEvent;\r
-  UINT8   AsyncVCode;\r
-  UINT16  Parameter1;\r
-  UINT16  Parameter2;\r
-  UINT16  Parameter3;\r
-  UINT32  Reserved3;\r
-} ISCSI_ASYNC_MESSAGE;\r
-\r
-#define ISCSI_LOGIN_REQ_PDU_FLAG_TRANSIT  0x80\r
-#define ISCSI_LOGIN_REQ_PDU_FLAG_CONTINUE 0x40\r
-\r
-///\r
-/// Login Request\r
-///\r
-typedef struct _ISCSI_LOGIN_REQUEST {\r
-  UINT8   OpCode;\r
-  UINT8   Flags;\r
-  UINT8   VersionMax;\r
-  UINT8   VersionMin;\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT8   Isid[6];\r
-  UINT16  Tsih;\r
-  UINT32  InitiatorTaskTag;\r
-  UINT16  Cid;\r
-  UINT16  Reserved1;\r
-  UINT32  CmdSN;\r
-  UINT32  ExpStatSN;\r
-  UINT32  Reserved2[4];\r
-} ISCSI_LOGIN_REQUEST;\r
-\r
-#define ISCSI_LOGIN_RSP_PDU_FLAG_TRANSIT    ISCSI_LOGIN_REQ_PDU_FLAG_TRANSIT\r
-#define ISCSI_LOGIN_RSP_PDU_FLAG_CONTINUE   ISCSI_LOGIN_REQ_PDU_FLAG_CONTINUE\r
-\r
-#define ISCSI_LOGIN_STATUS_SUCCESS          0\r
-#define ISCSI_LOGIN_STATUS_REDIRECTION      1\r
-#define ISCSI_LOGIN_STATUS_INITIATOR_ERROR  2\r
-#define ISCSI_LOGIN_STATUS_TARGET_ERROR     3\r
-\r
-///\r
-/// Login Response\r
-///\r
-typedef struct _ISCSI_LOGIN_RESPONSE {\r
-  UINT8   OpCode;\r
-  UINT8   Flags;\r
-  UINT8   VersionMax;\r
-  UINT8   VersionActive;\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT8   Isid[6];\r
-  UINT16  Tsih;\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  Reserved1;\r
-  UINT32  StatSN;\r
-  UINT32  ExpCmdSN;\r
-  UINT32  MaxCmdSN;\r
-  UINT8   StatusClass;\r
-  UINT8   StatusDetail;\r
-  UINT8   Reserved2[10];\r
-} ISCSI_LOGIN_RESPONSE;\r
-\r
-#define ISCSI_LOGOUT_REASON_CLOSE_SESSION                   0\r
-#define ISCSI_LOGOUT_REASON_CLOSE_CONNECTION                1\r
-#define ISCSI_LOGOUT_REASON_REMOVE_CONNECTION_FOR_RECOVERY  2\r
-\r
-///\r
-/// Logout Request\r
-///\r
-typedef struct _ISCSI_LOGOUT_REQUEST {\r
-  UINT8   OpCode;\r
-  UINT8   ReasonCode;\r
-  UINT16  Reserved1;\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT32  Reserved2[2];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT16  Cid;\r
-  UINT16  Reserved3;\r
-  UINT32  CmdSN;\r
-  UINT32  ExpStatSN;\r
-  UINT32  Reserved4[4];\r
-} ISCSI_LOGOUT_REQUEST;\r
-\r
-#define ISCSI_LOGOUT_RESPONSE_SESSION_CLOSED_SUCCESS  0\r
-#define ISCSI_LOGOUT_RESPONSE_CID_NOT_FOUND           1\r
-#define ISCSI_LOGOUT_RESPONSE_RECOVERY_NOT_SUPPORTED  2\r
-#define ISCSI_LOGOUT_RESPONSE_CLEANUP_FAILED          3\r
-\r
-///\r
-/// Logout Response\r
-///\r
-typedef struct _ISCSI_LOGOUT_RESPONSE {\r
-  UINT8   OpCode;\r
-  UINT8   Reserved1;\r
-  UINT8   Response;\r
-  UINT8   Reserved2;\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT32  Reserved3[2];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  Reserved4;\r
-  UINT32  StatSN;\r
-  UINT32  ExpCmdSN;\r
-  UINT32  MaxCmdSN;\r
-  UINT32  Reserved5;\r
-  UINT16  Time2Wait;\r
-  UINT16  Time2Retain;\r
-  UINT32  Reserved6;\r
-} ISCSI_LOGOUT_RESPONSE;\r
-\r
-#define ISCSI_SNACK_REQUEST_TYPE_DATA_OR_R2T  0\r
-#define ISCSI_SNACK_REQUEST_TYPE_STATUS       1\r
-#define ISCSI_SNACK_REQUEST_TYPE_DATA_ACK     2\r
-#define ISCSI_SNACK_REQUEST_TYPE_RDATA        3\r
-\r
-///\r
-/// SNACK Request\r
-///\r
-typedef struct _ISCSI_SNACK_REQUEST {\r
-  UINT8   OpCode;\r
-  UINT8   Type;\r
-  UINT16  Reserved1;\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT8   Lun[8];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  TargetTransferTag;\r
-  UINT32  Reserved2;\r
-  UINT32  ExpStatSN;\r
-  UINT32  Reserved[2];\r
-  UINT32  BegRun;\r
-  UINT32  RunLength;\r
-} ISCSI_SNACK_REQUEST;\r
-\r
-///\r
-/// Reject\r
-///\r
-typedef struct _ISCSI_REJECT {\r
-  UINT8   OpCode;\r
-  UINT8   Reserved1;\r
-  UINT8   Reason;\r
-  UINT8   Reserved2;\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT32  Reserved3[2];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  Reserved4;\r
-  UINT32  StatSN;\r
-  UINT32  ExpCmdSN;\r
-  UINT32  MaxCmdSN;\r
-  UINT32  DataSN;\r
-  UINT32  Reserved5[2];\r
-} ISCSI_REJECT;\r
-\r
-///\r
-/// NOP-Out\r
-///\r
-typedef struct _ISCSI_NOP_OUT {\r
-  UINT8   OpCode;\r
-  UINT8   Reserved1[3];\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT8   Lun[8];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  TargetTransferTag;\r
-  UINT32  CmdSN;\r
-  UINT32  ExpStatSN;\r
-  UINT32  Reserved2[4];\r
-} ISCSI_NOP_OUT;\r
-\r
-///\r
-/// NOP-In\r
-///\r
-typedef struct _ISCSI_NOP_IN {\r
-  UINT8   OpCode;\r
-  UINT8   Reserved1[3];\r
-  UINT8   TotalAHSLength;\r
-  UINT8   DataSegmentLength[3];\r
-  UINT8   Lun[8];\r
-  UINT32  InitiatorTaskTag;\r
-  UINT32  TargetTransferTag;\r
-  UINT32  StatSN;\r
-  UINT32  ExpCmdSN;\r
-  UINT32  MaxCmdSN;\r
-  UINT32  Reserved2[3];\r
-} ISCSI_NOP_IN;\r
-\r
-#define ISCSI_SECURITY_NEGOTIATION          0\r
-#define ISCSI_LOGIN_OPERATIONAL_NEGOTIATION 1\r
-#define ISCSI_FULL_FEATURE_PHASE            3\r
-\r
-typedef enum {\r
-  IScsiDigestNone,\r
-  IScsiDigestCRC32\r
-} ISCSI_DIGEST_TYPE;\r
-\r
-typedef struct _ISCSI_XFER_CONTEXT {\r
-  UINT32  TargetTransferTag;\r
-  UINT32  Offset;\r
-  UINT32  DesiredLength;\r
-  UINT32  ExpDataSN;\r
-} ISCSI_XFER_CONTEXT;\r
-\r
-typedef struct _ISCSI_IN_BUFFER_CONTEXT {\r
-  UINT8   *InData;\r
-  UINT32  InDataLen;\r
-} ISCSI_IN_BUFFER_CONTEXT;\r
-\r
-typedef struct _ISCSI_TCB {\r
-  LIST_ENTRY          Link;\r
-\r
-  BOOLEAN             SoFarInOrder;\r
-  UINT32              ExpDataSN;\r
-  BOOLEAN             FbitReceived;\r
-  BOOLEAN             StatusXferd;\r
-  UINT32              ActiveR2Ts;\r
-  UINT32              Response;\r
-  CHAR8               *Reason;\r
-  UINT32              InitiatorTaskTag;\r
-  UINT32              CmdSN;\r
-  UINT32              SNACKTag;\r
-\r
-  ISCSI_XFER_CONTEXT  XferContext;\r
-\r
-  ISCSI_CONNECTION    *Conn;\r
-} ISCSI_TCB;\r
-\r
-typedef struct _ISCSI_KEY_VALUE_PAIR {\r
-  LIST_ENTRY      List;\r
-\r
-  CHAR8           *Key;\r
-  CHAR8           *Value;\r
-} ISCSI_KEY_VALUE_PAIR;\r
-\r
-/**\r
-  Attach the iSCSI connection to the iSCSI session.\r
-\r
-  @param[in, out]  Session The iSCSI session.\r
-  @param[in, out]  Conn    The iSCSI connection.\r
-**/\r
-VOID\r
-IScsiAttatchConnection (\r
-  IN OUT ISCSI_SESSION     *Session,\r
-  IN OUT ISCSI_CONNECTION  *Conn\r
-  );\r
-\r
-/**\r
-  Detach the iSCSI connection from the session it belongs to.\r
-\r
-  @param[in, out]  Conn The iSCSI connection.\r
-**/\r
-VOID\r
-IScsiDetatchConnection (\r
-  IN OUT ISCSI_CONNECTION  *Conn\r
-  );\r
-\r
-/**\r
-  This function does the iSCSI connection login.\r
-\r
-  @param[in, out]  Conn      The iSCSI connection to login.\r
-\r
-  @retval EFI_SUCCESS        The iSCSI connection is logged into the iSCSI target.\r
-  @retval EFI_TIMEOUT        Timeout happened during the login procedure.\r
-  @retval Others             Other errors as indicated.\r
-**/\r
-EFI_STATUS\r
-IScsiConnLogin (\r
-  IN OUT ISCSI_CONNECTION  *Conn\r
-  );\r
-\r
-/**\r
-  Create a TCP connection for the iSCSI session.\r
-\r
-  @param[in]  Private The iSCSI driver data.\r
-  @param[in]  Session Maximum CmdSN from the target.\r
-\r
-  @return The newly created iSCSI connection.\r
-**/\r
-ISCSI_CONNECTION *\r
-IScsiCreateConnection (\r
-  IN ISCSI_DRIVER_DATA  *Private,\r
-  IN ISCSI_SESSION      *Session\r
-  );\r
-\r
-/**\r
-  Destroy an iSCSI connection.\r
-\r
-  @param[in]  Conn The connection to destroy.\r
-**/\r
-VOID\r
-IScsiDestroyConnection (\r
-  IN ISCSI_CONNECTION  *Conn\r
-  );\r
-\r
-/**\r
-  Login the iSCSI session.\r
-\r
-  @param[in]  Private          The iSCSI driver data.\r
-\r
-  @retval EFI_SUCCESS          The iSCSI session login procedure finished.\r
-  @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.\r
-  @retval EFI_NO_MEDIA         There was a media error.\r
-  @retval Others               Other errors as indicated.\r
-\r
-**/\r
-EFI_STATUS\r
-IScsiSessionLogin (\r
-  IN ISCSI_DRIVER_DATA  *Private\r
-  );\r
-\r
-/**\r
-  Build and send the iSCSI login request to the iSCSI target according to\r
-  the current login stage.\r
-\r
-  @param[in]  Conn             The connection in the iSCSI login phase.\r
-\r
-  @retval EFI_SUCCESS          The iSCSI login request PDU is built and sent on this\r
-                               connection.\r
-  @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.\r
-  @retval EFI_DEVICE_ERROR     Some kind of device error happened.\r
-**/\r
-EFI_STATUS\r
-IScsiSendLoginReq (\r
-  IN ISCSI_CONNECTION  *Conn\r
-  );\r
-\r
-/**\r
-  Receive and process the iSCSI login response.\r
-\r
-  @param[in]  Conn             The connection in the iSCSI login phase.\r
-\r
-  @retval EFI_SUCCESS          The iSCSI login response PDU is received and processed.\r
-  @retval Others               Other errors as indicated.\r
-**/\r
-EFI_STATUS\r
-IScsiReceiveLoginRsp (\r
-  IN ISCSI_CONNECTION  *Conn\r
-  );\r
-\r
-/**\r
-  Add an iSCSI key-value pair as a string into the data segment of the Login Request PDU.\r
-  The DataSegmentLength and the actual size of the net buffer containing this PDU will be\r
-  updated.\r
-\r
-  @param[in, out]  Pdu         The iSCSI PDU whose data segment the key-value pair will\r
-                               be added to.\r
-  @param[in]       Key         The key name string.\r
-  @param[in]       Value       The value string.\r
-\r
-  @retval EFI_SUCCESS          The key-valu pair is added to the PDU's datasegment and\r
-                               the correspondence length fields are updated.\r
-  @retval EFI_OUT_OF_RESOURCES There is not enough space in the PDU to add the key-value\r
-                               pair.\r
-**/\r
-EFI_STATUS\r
-IScsiAddKeyValuePair (\r
-  IN OUT NET_BUF      *Pdu,\r
-  IN CHAR8            *Key,\r
-  IN CHAR8            *Value\r
-  );\r
-\r
-/**\r
-  Prepare the iSCSI login request to be sent according to the current login status.\r
-\r
-  @param[in, out]  Conn The connection in the iSCSI login phase.\r
-\r
-  @return The pointer to the net buffer containing the iSCSI login request built.\r
-  @retval Others    Other errors as indicated.\r
-**/\r
-NET_BUF *\r
-IScsiPrepareLoginReq (\r
-  IN OUT ISCSI_CONNECTION  *Conn\r
-  );\r
-\r
-/**\r
-  Process the iSCSI Login Response.\r
-\r
-  @param[in, out]  Conn The connection on which the iSCSI login response is received.\r
-  @param[in, out]  Pdu  The iSCSI login response PDU.\r
-\r
-  @retval EFI_SUCCESS        The iSCSI login response PDU is processed and all check are passed.\r
-  @retval EFI_PROTOCOL_ERROR Some kind of iSCSI protocol error happened.\r
-  @retval EFI_MEDIA_CHANGED  Target is redirected.\r
-  @retval Others             Other errors as indicated.\r
-**/\r
-EFI_STATUS\r
-IScsiProcessLoginRsp (\r
-  IN OUT ISCSI_CONNECTION  *Conn,\r
-  IN OUT NET_BUF           *Pdu\r
-  );\r
-\r
-/**\r
-  Updated the target information according the data received in the iSCSI\r
-  login response with an target redirection status.\r
-\r
-  @param[in, out] Session      The iSCSI session.\r
-  @param[in]      Data         The data segment which should contain the\r
-                               TargetAddress key-value list.\r
-  @param[in]      Len          Length of the data.\r
-\r
-  @retval EFI_SUCCESS          The target address is updated.\r
-  @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.\r
-  @retval EFI_NOT_FOUND        The TargetAddress key is not found.\r
-  @retval Others               Other errors as indicated.\r
-**/\r
-EFI_STATUS\r
-IScsiUpdateTargetAddress (\r
-  IN OUT ISCSI_SESSION  *Session,\r
-  IN CHAR8              *Data,\r
-  IN UINT32             Len\r
-  );\r
-\r
-/**\r
-  The callback function to free the net buffer list.\r
-\r
-  @param[in]  Arg The opaque parameter.\r
-**/\r
-VOID\r
-EFIAPI\r
-IScsiFreeNbufList (\r
-  VOID *Arg\r
-  );\r
-\r
-/**\r
-  Receive an iSCSI response PDU. An iSCSI response PDU contains an iSCSI PDU header and\r
-  an optional data segment. The two parts will be put into two blocks of buffers in the\r
-  net buffer. The digest check will be conducted in this function if needed and the digests\r
-  will be trimmed from the PDU buffer.\r
-\r
-  @param[in]   Conn        The iSCSI connection to receive data from.\r
-  @param[out]  Pdu         The received iSCSI pdu.\r
-  @param[in]   Context     The context used to describe information on the caller provided\r
-                           buffer to receive data segment of the iSCSI pdu, it's optional.\r
-  @param[in]  HeaderDigest Whether there will be header digest received.\r
-  @param[in]  DataDigest   Whether there will be data digest.\r
-  @param[in]  TimeoutEvent The timeout event, it's optional.\r
-\r
-  @retval EFI_SUCCESS          An iSCSI pdu is received.\r
-  @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.\r
-  @retval EFI_PROTOCOL_ERROR   Some kind of iSCSI protocol error happened.\r
-  @retval Others               Other errors as indicated.\r
-**/\r
-EFI_STATUS\r
-IScsiReceivePdu (\r
-  IN ISCSI_CONNECTION                      *Conn,\r
-  OUT NET_BUF                              **Pdu,\r
-  IN ISCSI_IN_BUFFER_CONTEXT               *Context, OPTIONAL\r
-  IN BOOLEAN                               HeaderDigest,\r
-  IN BOOLEAN                               DataDigest,\r
-  IN EFI_EVENT                             TimeoutEvent OPTIONAL\r
-  );\r
-\r
-/**\r
-  Check and get the result of the prameter negotiation.\r
-\r
-  @param[in, out]  Conn          The connection in iSCSI login.\r
-\r
-  @retval EFI_SUCCESS          The parmeter check is passed and negotiation is finished.\r
-  @retval EFI_PROTOCOL_ERROR   Some kind of iSCSI protocol error happened.\r
-  @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.\r
-**/\r
-EFI_STATUS\r
-IScsiCheckOpParams (\r
-  IN OUT ISCSI_CONNECTION  *Conn\r
-  );\r
-\r
-/**\r
-  Fill the oprational prameters.\r
-\r
-  @param[in]       Conn        The connection in iSCSI login.\r
-  @param[in, out]  Pdu         The iSCSI login request PDU to fill the parameters.\r
-\r
-  @retval EFI_SUCCESS          The parmeters are filled into the iSCSI login request PDU.\r
-**/\r
-EFI_STATUS\r
-IScsiFillOpParams (\r
-  IN ISCSI_CONNECTION  *Conn,\r
-  IN OUT NET_BUF       *Pdu\r
-  );\r
-\r
-/**\r
-  Pad the iSCSI AHS or data segment to an integer number of 4 byte words.\r
-\r
-  @param[in, out]  Pdu         The iSCSI pdu which contains segments to pad.\r
-  @param[in]       Len         The length of the last semgnet in the PDU.\r
-\r
-  @retval EFI_SUCCESS          The segment is padded or no need to pad it.\r
-  @retval EFI_OUT_OF_RESOURCES There is not enough remaining free space to add the\r
-                               padding bytes.\r
-**/\r
-EFI_STATUS\r
-IScsiPadSegment (\r
-  IN OUT NET_BUF  *Pdu,\r
-  IN UINT32       Len\r
-  );\r
-\r
-/**\r
-  Build a key-value list from the data segment.\r
-\r
-  @param[in]  Data The data segment containing the key-value pairs.\r
-  @param[in]  Len  Length of the data segment.\r
-\r
-  @return The key-value list.\r
-  @retval NULL Other errors as indicated.\r
-**/\r
-LIST_ENTRY *\r
-IScsiBuildKeyValueList (\r
-  IN CHAR8  *Data,\r
-  IN UINT32 Len\r
-  );\r
-\r
-/**\r
-  Get the value string by the key name from the key-value list. If found,\r
-  the key-value entry will be removed from the list.\r
-\r
-  @param[in, out]  KeyValueList  The key-value list.\r
-  @param[in]       Key           The key name to find.\r
-\r
-  @return The value string.\r
-**/\r
-CHAR8 *\r
-IScsiGetValueByKeyFromList (\r
-  IN OUT LIST_ENTRY  *KeyValueList,\r
-  IN CHAR8           *Key\r
-  );\r
-\r
-/**\r
-  Free the key-value list.\r
-\r
-  @param[in]  KeyValueList The key-value list.\r
-**/\r
-VOID\r
-IScsiFreeKeyValueList (\r
-  IN LIST_ENTRY      *KeyValueList\r
-  );\r
-\r
-/**\r
-  Normalize the iSCSI name according to RFC.\r
-\r
-  @param[in, out]  Name       The iSCSI name.\r
-  @param[in]       Len        length of the iSCSI name.\r
-\r
-  @retval EFI_SUCCESS        The iSCSI name is valid and normalized.\r
-  @retval EFI_PROTOCOL_ERROR The iSCSI name is mal-formatted or not in the IQN format.\r
-**/\r
-EFI_STATUS\r
-IScsiNormalizeName (\r
-  IN OUT CHAR8  *Name,\r
-  IN UINTN      Len\r
-  );\r
-\r
-/**\r
-  Execute the SCSI command issued through the EXT SCSI PASS THRU protocol.\r
-\r
-  @param[in]       PassThru  The EXT SCSI PASS THRU protocol.\r
-  @param[in]       Target    The target ID.\r
-  @param[in]       Lun       The LUN.\r
-  @param[in, out]  Packet    The request packet containing IO request, SCSI command\r
-                             buffer and buffers to read/write.\r
-\r
-  @retval EFI_SUCCES           The SCSI command is executed and the result is updated to\r
-                               the Packet.\r
-  @retval EFI_DEVICE_ERROR     Session state was not as required.\r
-  @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.\r
-  @retval EFI_NOT_READY        The target can not accept new commands.\r
-  @retval Others               Other errors as indicated.\r
-**/\r
-EFI_STATUS\r
-IScsiExecuteScsiCommand (\r
-  IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL                 *PassThru,\r
-  IN UINT8                                           *Target,\r
-  IN UINT64                                          Lun,\r
-  IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET  *Packet\r
-  );\r
-\r
-/**\r
-  Reinstate the session on some error.\r
-\r
-  @param[in, out]  Private The iSCSI driver data.\r
-\r
-  @retval EFI_SUCCES  The session is reinstated from some error.\r
-  @retval Other       Reinstatement failed.\r
-**/\r
-EFI_STATUS\r
-IScsiSessionReinstatement (\r
-  IN OUT ISCSI_DRIVER_DATA  *Private\r
-  );\r
-\r
-/**\r
-  Initialize some session parameters before login.\r
-\r
-  @param[in, out]  Session  The iSCSI session.\r
-  @param[in]       Recovery Whether the request is from a fresh new start or recovery.\r
-**/\r
-VOID\r
-IScsiSessionInit (\r
-  IN OUT ISCSI_SESSION  *Session,\r
-  IN BOOLEAN            Recovery\r
-  );\r
-\r
-/**\r
-  Abort the iSCSI session, that is, reset all the connection and free the\r
-  resources.\r
-\r
-  @param[in, out]  Session The iSCSI session.\r
-\r
-  @retval EFI_SUCCES  The session is aborted.\r
-**/\r
-EFI_STATUS\r
-IScsiSessionAbort (\r
-  IN OUT ISCSI_SESSION  *Session\r
-  );\r
-\r
-#endif\r