IScsiImpl.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. /** @file
  2. The shared head file for iSCSI driver.
  3. Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #ifndef _ISCSI_IMPL_H_
  7. #define _ISCSI_IMPL_H_
  8. #include <Uefi.h>
  9. #include <IndustryStandard/Dhcp.h>
  10. #include <Protocol/ComponentName.h>
  11. #include <Protocol/ComponentName2.h>
  12. #include <Protocol/DriverBinding.h>
  13. #include <Protocol/DevicePath.h>
  14. #include <Protocol/HiiConfigAccess.h>
  15. #include <Protocol/Ip6.h>
  16. #include <Protocol/Dhcp4.h>
  17. #include <Protocol/Dhcp6.h>
  18. #include <Protocol/Dns4.h>
  19. #include <Protocol/Dns6.h>
  20. #include <Protocol/Tcp4.h>
  21. #include <Protocol/Tcp6.h>
  22. #include <Protocol/Ip4Config2.h>
  23. #include <Protocol/Ip6Config.h>
  24. #include <Protocol/AuthenticationInfo.h>
  25. #include <Protocol/IScsiInitiatorName.h>
  26. #include <Protocol/ScsiPassThruExt.h>
  27. #include <Protocol/AdapterInformation.h>
  28. #include <Protocol/NetworkInterfaceIdentifier.h>
  29. #include <Library/BaseCryptLib.h>
  30. #include <Library/BaseLib.h>
  31. #include <Library/BaseMemoryLib.h>
  32. #include <Library/DebugLib.h>
  33. #include <Library/DevicePathLib.h>
  34. #include <Library/HiiLib.h>
  35. #include <Library/MemoryAllocationLib.h>
  36. #include <Library/NetLib.h>
  37. #include <Library/PrintLib.h>
  38. #include <Library/SafeIntLib.h>
  39. #include <Library/TcpIoLib.h>
  40. #include <Library/UefiBootServicesTableLib.h>
  41. #include <Library/UefiHiiServicesLib.h>
  42. #include <Library/UefiLib.h>
  43. #include <Library/UefiRuntimeServicesTableLib.h>
  44. #include <Guid/MdeModuleHii.h>
  45. #include <Guid/EventGroup.h>
  46. #include <Guid/Acpi.h>
  47. #include "IScsiConfigNVDataStruc.h"
  48. #include "IScsiDriver.h"
  49. #include "IScsiProto.h"
  50. #include "IScsiCHAP.h"
  51. #include "IScsiDhcp.h"
  52. #include "IScsiDhcp6.h"
  53. #include "IScsiIbft.h"
  54. #include "IScsiMisc.h"
  55. #include "IScsiDns.h"
  56. #include "IScsiConfig.h"
  57. #define ISCSI_AUTH_INITIAL 0
  58. #define ISCSI_SESSION_SIGNATURE SIGNATURE_32 ('I', 'S', 'S', 'N')
  59. ///
  60. /// 10 seconds
  61. ///
  62. #define ISCSI_GET_MAPPING_TIMEOUT 100000000U
  63. ///
  64. /// 3 seconds
  65. ///
  66. #define ISCSI_WAIT_IPSEC_TIMEOUT 30000000U
  67. struct _ISCSI_SESSION {
  68. UINT32 Signature;
  69. ISCSI_DRIVER_DATA *Private;
  70. ISCSI_ATTEMPT_CONFIG_NVDATA *ConfigData;
  71. UINT8 AuthType;
  72. union {
  73. ISCSI_CHAP_AUTH_DATA CHAP;
  74. } AuthData;
  75. UINT8 State;
  76. UINT8 Isid[6];
  77. UINT16 Tsih;
  78. UINT32 CmdSN;
  79. UINT32 ExpCmdSN;
  80. UINT32 MaxCmdSN;
  81. UINT32 InitiatorTaskTag;
  82. UINT16 NextCid;
  83. LIST_ENTRY Conns;
  84. UINT32 NumConns;
  85. LIST_ENTRY TcbList;
  86. //
  87. // Session-wide parameters
  88. //
  89. UINT16 TargetPortalGroupTag;
  90. UINT32 MaxConnections;
  91. BOOLEAN InitialR2T;
  92. BOOLEAN ImmediateData;
  93. UINT32 MaxBurstLength;
  94. UINT32 FirstBurstLength;
  95. UINT32 DefaultTime2Wait;
  96. UINT32 DefaultTime2Retain;
  97. UINT16 MaxOutstandingR2T;
  98. BOOLEAN DataPDUInOrder;
  99. BOOLEAN DataSequenceInOrder;
  100. UINT8 ErrorRecoveryLevel;
  101. };
  102. #define ISCSI_CONNECTION_SIGNATURE SIGNATURE_32 ('I', 'S', 'C', 'N')
  103. struct _ISCSI_CONNECTION {
  104. UINT32 Signature;
  105. LIST_ENTRY Link;
  106. EFI_EVENT TimeoutEvent;
  107. ISCSI_SESSION *Session;
  108. UINT8 State;
  109. UINT8 CurrentStage;
  110. UINT8 NextStage;
  111. UINT8 AuthStep;
  112. BOOLEAN PartialReqSent;
  113. BOOLEAN PartialRspRcvd;
  114. BOOLEAN TransitInitiated;
  115. BOOLEAN ParamNegotiated;
  116. UINT16 Cid;
  117. UINT32 ExpStatSN;
  118. //
  119. // Queues...
  120. //
  121. NET_BUF_QUEUE RspQue;
  122. BOOLEAN Ipv6Flag;
  123. TCP_IO TcpIo;
  124. //
  125. // Connection-only parameters.
  126. //
  127. UINT32 MaxRecvDataSegmentLength;
  128. ISCSI_DIGEST_TYPE HeaderDigest;
  129. ISCSI_DIGEST_TYPE DataDigest;
  130. };
  131. #define ISCSI_DRIVER_DATA_SIGNATURE SIGNATURE_32 ('I', 'S', 'D', 'A')
  132. #define ISCSI_DRIVER_DATA_FROM_EXT_SCSI_PASS_THRU(PassThru) \
  133. CR ( \
  134. PassThru, \
  135. ISCSI_DRIVER_DATA, \
  136. IScsiExtScsiPassThru, \
  137. ISCSI_DRIVER_DATA_SIGNATURE \
  138. )
  139. #define ISCSI_DRIVER_DATA_FROM_IDENTIFIER(Identifier) \
  140. CR ( \
  141. Identifier, \
  142. ISCSI_DRIVER_DATA, \
  143. IScsiIdentifier, \
  144. ISCSI_DRIVER_DATA_SIGNATURE \
  145. )
  146. struct _ISCSI_DRIVER_DATA {
  147. UINT32 Signature;
  148. EFI_HANDLE Image;
  149. EFI_HANDLE Controller;
  150. ISCSI_PRIVATE_PROTOCOL IScsiIdentifier;
  151. EFI_EVENT ExitBootServiceEvent;
  152. EFI_EXT_SCSI_PASS_THRU_PROTOCOL IScsiExtScsiPassThru;
  153. EFI_EXT_SCSI_PASS_THRU_MODE ExtScsiPassThruMode;
  154. EFI_HANDLE ExtScsiPassThruHandle;
  155. EFI_DEVICE_PATH_PROTOCOL *DevicePath;
  156. EFI_HANDLE ChildHandle;
  157. ISCSI_SESSION *Session;
  158. };
  159. #endif