• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2   The shared head file for iSCSI driver.
3 
4 Copyright (c) 2004 - 2015, 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 <Protocol/ComponentName.h>
21 #include <Protocol/ComponentName2.h>
22 #include <Protocol/DriverBinding.h>
23 #include <Protocol/DevicePath.h>
24 #include <Protocol/HiiConfigAccess.h>
25 
26 #include <Protocol/Ip6.h>
27 #include <Protocol/Dhcp4.h>
28 #include <Protocol/Dhcp6.h>
29 #include <Protocol/Tcp4.h>
30 #include <Protocol/Tcp6.h>
31 
32 #include <Protocol/AuthenticationInfo.h>
33 #include <Protocol/IScsiInitiatorName.h>
34 #include <Protocol/ScsiPassThruExt.h>
35 #include <Protocol/AdapterInformation.h>
36 
37 #include <Library/HiiLib.h>
38 #include <Library/UefiHiiServicesLib.h>
39 #include <Library/DevicePathLib.h>
40 #include <Library/DebugLib.h>
41 #include <Library/BaseLib.h>
42 #include <Library/BaseMemoryLib.h>
43 #include <Library/MemoryAllocationLib.h>
44 #include <Library/PrintLib.h>
45 #include <Library/UefiBootServicesTableLib.h>
46 #include <Library/UefiRuntimeServicesTableLib.h>
47 #include <Library/UefiLib.h>
48 #include <Library/DpcLib.h>
49 #include <Library/NetLib.h>
50 #include <Library/TcpIoLib.h>
51 #include <Library/BaseCryptLib.h>
52 
53 #include <Guid/MdeModuleHii.h>
54 #include <Guid/EventGroup.h>
55 #include <Guid/Acpi.h>
56 
57 #include "IScsiConfigNVDataStruc.h"
58 #include "IScsiDriver.h"
59 #include "IScsiProto.h"
60 #include "IScsiCHAP.h"
61 #include "IScsiDhcp.h"
62 #include "IScsiDhcp6.h"
63 #include "IScsiIbft.h"
64 #include "IScsiMisc.h"
65 #include "IScsiConfig.h"
66 
67 #define ISCSI_AUTH_INITIAL        0
68 
69 #define ISCSI_SESSION_SIGNATURE   SIGNATURE_32 ('I', 'S', 'S', 'N')
70 ///
71 /// 10 seconds
72 ///
73 #define ISCSI_GET_MAPPING_TIMEOUT 100000000U
74 ///
75 /// 3 seconds
76 ///
77 #define ISCSI_WAIT_IPSEC_TIMEOUT  30000000U
78 
79 struct _ISCSI_SESSION {
80   UINT32                      Signature;
81 
82   ISCSI_DRIVER_DATA           *Private;
83   ISCSI_ATTEMPT_CONFIG_NVDATA *ConfigData;
84 
85   UINT8                       AuthType;
86   union {
87     ISCSI_CHAP_AUTH_DATA      CHAP;
88   } AuthData;
89 
90   UINT8                       State;
91 
92   UINT8                       Isid[6];
93   UINT16                      Tsih;
94 
95   UINT32                      CmdSN;
96   UINT32                      ExpCmdSN;
97   UINT32                      MaxCmdSN;
98 
99   UINT32                      InitiatorTaskTag;
100   UINT16                      NextCid;
101 
102   LIST_ENTRY                  Conns;
103   UINT32                      NumConns;
104 
105   LIST_ENTRY                  TcbList;
106 
107   //
108   // Session-wide parameters
109   //
110   UINT16                      TargetPortalGroupTag;
111   UINT32                      MaxConnections;
112   BOOLEAN                     InitialR2T;
113   BOOLEAN                     ImmediateData;
114   UINT32                      MaxBurstLength;
115   UINT32                      FirstBurstLength;
116   UINT32                      DefaultTime2Wait;
117   UINT32                      DefaultTime2Retain;
118   UINT16                      MaxOutstandingR2T;
119   BOOLEAN                     DataPDUInOrder;
120   BOOLEAN                     DataSequenceInOrder;
121   UINT8                       ErrorRecoveryLevel;
122 };
123 
124 #define ISCSI_CONNECTION_SIGNATURE  SIGNATURE_32 ('I', 'S', 'C', 'N')
125 
126 struct _ISCSI_CONNECTION {
127   UINT32            Signature;
128   LIST_ENTRY        Link;
129 
130   EFI_EVENT         TimeoutEvent;
131 
132   ISCSI_SESSION     *Session;
133 
134   UINT8             State;
135   UINT8             CurrentStage;
136   UINT8             NextStage;
137 
138   UINT8             AuthStep;
139 
140   BOOLEAN           PartialReqSent;
141   BOOLEAN           PartialRspRcvd;
142 
143   BOOLEAN           TransitInitiated;
144   BOOLEAN           ParamNegotiated;
145 
146   UINT16            Cid;
147   UINT32            ExpStatSN;
148 
149   //
150   // Queues...
151   //
152   NET_BUF_QUEUE     RspQue;
153 
154   BOOLEAN           Ipv6Flag;
155   TCP_IO            TcpIo;
156 
157   //
158   // Connection-only parameters.
159   //
160   UINT32            MaxRecvDataSegmentLength;
161   ISCSI_DIGEST_TYPE HeaderDigest;
162   ISCSI_DIGEST_TYPE DataDigest;
163 };
164 
165 #define ISCSI_DRIVER_DATA_SIGNATURE SIGNATURE_32 ('I', 'S', 'D', 'A')
166 
167 #define ISCSI_DRIVER_DATA_FROM_EXT_SCSI_PASS_THRU(PassThru) \
168   CR ( \
169   PassThru, \
170   ISCSI_DRIVER_DATA, \
171   IScsiExtScsiPassThru, \
172   ISCSI_DRIVER_DATA_SIGNATURE \
173   )
174 
175 #define ISCSI_DRIVER_DATA_FROM_IDENTIFIER(Identifier) \
176   CR ( \
177   Identifier, \
178   ISCSI_DRIVER_DATA, \
179   IScsiIdentifier, \
180   ISCSI_DRIVER_DATA_SIGNATURE \
181   )
182 
183 struct _ISCSI_DRIVER_DATA {
184   UINT32                          Signature;
185   EFI_HANDLE                      Image;
186   EFI_HANDLE                      Controller;
187   ISCSI_PRIVATE_PROTOCOL          IScsiIdentifier;
188 
189   EFI_EVENT                       ExitBootServiceEvent;
190 
191   EFI_EXT_SCSI_PASS_THRU_PROTOCOL IScsiExtScsiPassThru;
192   EFI_EXT_SCSI_PASS_THRU_MODE     ExtScsiPassThruMode;
193   EFI_HANDLE                      ExtScsiPassThruHandle;
194   EFI_DEVICE_PATH_PROTOCOL        *DevicePath;
195   EFI_HANDLE                      ChildHandle;
196   ISCSI_SESSION                   *Session;
197 };
198 
199 #endif
200