4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The header file of IScsiImpl.c.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2004 - 2010, 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 <Library/BaseMemoryLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/MemoryAllocationLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/NetLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PrintLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiRuntimeServicesTableLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Guid/EventGroup.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Guid/Acpi.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiCommon.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiDriver.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiInitiatorName.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "ComponentName.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiConfigNVDataStruc.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiExtScsiPassThru.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiProto.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiMisc.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiCHAP.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiConfig.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiDhcp.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiTcp4Io.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IScsiIbft.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_SESSION_SIGNATURE SIGNATURE_32 ('I', 'S', 'S', 'N')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _ISCSI_SESSION {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_SESSION_CONFIG_DATA ConfigData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_CHAP_AUTH_DATA AuthData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 InitiatorName[ISCSI_NAME_MAX_SIZE];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN InitiatorNameLength;
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 CHAPStep;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN PartialReqSent;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN PartialRspRcvd;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN TransitInitiated;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Cid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ExpStatSN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // queues...
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NET_BUF_QUEUE RspQue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TCP4_IO Tcp4Io;
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#define ISCSI_DRIVER_DATA_FROM_IDENTIFIER(Identifier) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CR ( \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Identifier, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_DRIVER_DATA, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IScsiIdentifier, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_DRIVER_DATA_SIGNATURE \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ISCSI_DRIVER_DATA_FROM_SESSION(s) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CR ( \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync s, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_DRIVER_DATA, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Session, \
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 EFI_HANDLE ChildHandle;
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
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISCSI_SESSION Session;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif