1 /** @file 2 The header file of IScsiImpl.c. 3 4 Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 **/ 14 15 #ifndef _ISCSI_IMPL_H_ 16 #define _ISCSI_IMPL_H_ 17 18 #include <Uefi.h> 19 20 #include <Library/BaseMemoryLib.h> 21 #include <Library/MemoryAllocationLib.h> 22 #include <Library/NetLib.h> 23 #include <Library/PrintLib.h> 24 #include <Library/UefiRuntimeServicesTableLib.h> 25 26 #include <Guid/EventGroup.h> 27 #include <Guid/Acpi.h> 28 29 #include "IScsiCommon.h" 30 #include "IScsiDriver.h" 31 #include "IScsiInitiatorName.h" 32 #include "ComponentName.h" 33 #include "IScsiConfigNVDataStruc.h" 34 #include "IScsiExtScsiPassThru.h" 35 #include "IScsiProto.h" 36 #include "IScsiMisc.h" 37 #include "IScsiCHAP.h" 38 #include "IScsiConfig.h" 39 #include "IScsiDhcp.h" 40 #include "IScsiTcp4Io.h" 41 #include "IScsiIbft.h" 42 43 44 #define ISCSI_SESSION_SIGNATURE SIGNATURE_32 ('I', 'S', 'S', 'N') 45 46 struct _ISCSI_SESSION { 47 UINT32 Signature; 48 49 ISCSI_SESSION_CONFIG_DATA ConfigData; 50 ISCSI_CHAP_AUTH_DATA AuthData; 51 52 CHAR8 InitiatorName[ISCSI_NAME_MAX_SIZE]; 53 UINTN InitiatorNameLength; 54 UINT8 State; 55 56 UINT8 Isid[6]; 57 UINT16 Tsih; 58 59 UINT32 CmdSN; 60 UINT32 ExpCmdSN; 61 UINT32 MaxCmdSN; 62 63 UINT32 InitiatorTaskTag; 64 UINT16 NextCid; 65 66 LIST_ENTRY Conns; 67 UINT32 NumConns; 68 69 LIST_ENTRY TcbList; 70 71 // 72 // session-wide parameters 73 // 74 UINT16 TargetPortalGroupTag; 75 UINT32 MaxConnections; 76 BOOLEAN InitialR2T; 77 BOOLEAN ImmediateData; 78 UINT32 MaxBurstLength; 79 UINT32 FirstBurstLength; 80 UINT32 DefaultTime2Wait; 81 UINT32 DefaultTime2Retain; 82 UINT16 MaxOutstandingR2T; 83 BOOLEAN DataPDUInOrder; 84 BOOLEAN DataSequenceInOrder; 85 UINT8 ErrorRecoveryLevel; 86 }; 87 88 #define ISCSI_CONNECTION_SIGNATURE SIGNATURE_32 ('I', 'S', 'C', 'N') 89 90 struct _ISCSI_CONNECTION { 91 UINT32 Signature; 92 LIST_ENTRY Link; 93 94 EFI_EVENT TimeoutEvent; 95 96 ISCSI_SESSION *Session; 97 98 UINT8 State; 99 UINT8 CurrentStage; 100 UINT8 NextStage; 101 102 UINT8 CHAPStep; 103 104 BOOLEAN PartialReqSent; 105 BOOLEAN PartialRspRcvd; 106 107 BOOLEAN TransitInitiated; 108 109 UINT16 Cid; 110 UINT32 ExpStatSN; 111 112 // 113 // queues... 114 // 115 NET_BUF_QUEUE RspQue; 116 117 TCP4_IO Tcp4Io; 118 119 // 120 // connection-only parameters 121 // 122 UINT32 MaxRecvDataSegmentLength; 123 ISCSI_DIGEST_TYPE HeaderDigest; 124 ISCSI_DIGEST_TYPE DataDigest; 125 }; 126 127 #define ISCSI_DRIVER_DATA_SIGNATURE SIGNATURE_32 ('I', 'S', 'D', 'A') 128 129 #define ISCSI_DRIVER_DATA_FROM_EXT_SCSI_PASS_THRU(PassThru) \ 130 CR ( \ 131 PassThru, \ 132 ISCSI_DRIVER_DATA, \ 133 IScsiExtScsiPassThru, \ 134 ISCSI_DRIVER_DATA_SIGNATURE \ 135 ) 136 #define ISCSI_DRIVER_DATA_FROM_IDENTIFIER(Identifier) \ 137 CR ( \ 138 Identifier, \ 139 ISCSI_DRIVER_DATA, \ 140 IScsiIdentifier, \ 141 ISCSI_DRIVER_DATA_SIGNATURE \ 142 ) 143 #define ISCSI_DRIVER_DATA_FROM_SESSION(s) \ 144 CR ( \ 145 s, \ 146 ISCSI_DRIVER_DATA, \ 147 Session, \ 148 ISCSI_DRIVER_DATA_SIGNATURE \ 149 ) 150 151 struct _ISCSI_DRIVER_DATA { 152 UINT32 Signature; 153 EFI_HANDLE Image; 154 EFI_HANDLE Controller; 155 ISCSI_PRIVATE_PROTOCOL IScsiIdentifier; 156 EFI_HANDLE ChildHandle; 157 EFI_EVENT ExitBootServiceEvent; 158 159 EFI_EXT_SCSI_PASS_THRU_PROTOCOL IScsiExtScsiPassThru; 160 EFI_EXT_SCSI_PASS_THRU_MODE ExtScsiPassThruMode; 161 EFI_HANDLE ExtScsiPassThruHandle; 162 EFI_DEVICE_PATH_PROTOCOL *DevicePath; 163 164 ISCSI_SESSION Session; 165 }; 166 167 #endif 168