4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The shared head file for iSCSI driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _ISCSI_IMPL_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _ISCSI_IMPL_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Uefi.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/ComponentName.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/ComponentName2.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/DriverBinding.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/DevicePath.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/HiiConfigAccess.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Dhcp4.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Dhcp6.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Tcp4.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Tcp6.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/AuthenticationInfo.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/IScsiInitiatorName.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/ScsiPassThruExt.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/HiiLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiHiiServicesLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DevicePathLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DebugLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseMemoryLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/MemoryAllocationLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PrintLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiBootServicesTableLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiRuntimeServicesTableLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DpcLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/NetLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/TcpIoLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseCryptLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Guid/MdeModuleHii.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Guid/EventGroup.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Guid/Acpi.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiConfigNVDataStruc.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiDriver.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiProto.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiCHAP.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiDhcp.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiDhcp6.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiIbft.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiMisc.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiConfig.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_AUTH_INITIAL 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SESSION_SIGNATURE SIGNATURE_32 ('I', 'S', 'S', 'N')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// 10 seconds
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_GET_MAPPING_TIMEOUT 100000000U
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// 3 seconds
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_WAIT_IPSEC_TIMEOUT 30000000U
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _ISCSI_SESSION {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_DRIVER_DATA *Private;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_ATTEMPT_CONFIG_NVDATA *ConfigData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 AuthType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync union {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_CHAP_AUTH_DATA CHAP;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } AuthData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 State;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Isid[6];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Tsih;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxCmdSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 InitiatorTaskTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 NextCid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY Conns;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 NumConns;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY TcbList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Session-wide parameters
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 TargetPortalGroupTag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxConnections;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN InitialR2T;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN ImmediateData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxBurstLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 FirstBurstLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DefaultTime2Wait;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DefaultTime2Retain;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 MaxOutstandingR2T;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN DataPDUInOrder;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN DataSequenceInOrder;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ErrorRecoveryLevel;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_CONNECTION_SIGNATURE SIGNATURE_32 ('I', 'S', 'C', 'N')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _ISCSI_CONNECTION {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY Link;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_EVENT TimeoutEvent;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_SESSION *Session;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 State;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 CurrentStage;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 NextStage;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 AuthStep;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN PartialReqSent;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN PartialRspRcvd;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN TransitInitiated;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN ParamNegotiated;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Cid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpStatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Queues...
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NET_BUF_QUEUE RspQue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN Ipv6Flag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TCP_IO TcpIo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Connection-only parameters.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 MaxRecvDataSegmentLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_DIGEST_TYPE HeaderDigest;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_DIGEST_TYPE DataDigest;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_DRIVER_DATA_SIGNATURE SIGNATURE_32 ('I', 'S', 'D', 'A')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_DRIVER_DATA_FROM_EXT_SCSI_PASS_THRU(PassThru) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CR ( \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PassThru, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_DRIVER_DATA, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IScsiExtScsiPassThru, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_DRIVER_DATA_SIGNATURE \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_DRIVER_DATA_FROM_IDENTIFIER(Identifier) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CR ( \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Identifier, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_DRIVER_DATA, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IScsiIdentifier, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_DRIVER_DATA_SIGNATURE \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _ISCSI_DRIVER_DATA {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Image;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Controller;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_PRIVATE_PROTOCOL IScsiIdentifier;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_EVENT ExitBootServiceEvent;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_EXT_SCSI_PASS_THRU_PROTOCOL IScsiExtScsiPassThru;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_EXT_SCSI_PASS_THRU_MODE ExtScsiPassThruMode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE ExtScsiPassThruHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *DevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE ChildHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_SESSION *Session;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif