Home | History | Annotate | Download | only in IScsiDxe
      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