14c5a5e0cfecf23526493bf9a05c0530805bf10ectye/** @file
24c5a5e0cfecf23526493bf9a05c0530805bf10ectye  The header file of functions for configuring or getting the parameters
34c5a5e0cfecf23526493bf9a05c0530805bf10ectye  relating to iSCSI.
44c5a5e0cfecf23526493bf9a05c0530805bf10ectye
587ce4210f52c0a9cf3f97937ec03c7155398e190Ye TingCopyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
64c5a5e0cfecf23526493bf9a05c0530805bf10ectyeThis program and the accompanying materials
74c5a5e0cfecf23526493bf9a05c0530805bf10ectyeare licensed and made available under the terms and conditions of the BSD License
84c5a5e0cfecf23526493bf9a05c0530805bf10ectyewhich accompanies this distribution.  The full text of the license may be found at
94c5a5e0cfecf23526493bf9a05c0530805bf10ectyehttp://opensource.org/licenses/bsd-license.php
104c5a5e0cfecf23526493bf9a05c0530805bf10ectye
114c5a5e0cfecf23526493bf9a05c0530805bf10ectyeTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
124c5a5e0cfecf23526493bf9a05c0530805bf10ectyeWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
134c5a5e0cfecf23526493bf9a05c0530805bf10ectye
144c5a5e0cfecf23526493bf9a05c0530805bf10ectye**/
154c5a5e0cfecf23526493bf9a05c0530805bf10ectye
164c5a5e0cfecf23526493bf9a05c0530805bf10ectye#ifndef _ISCSI_CONFIG_H_
174c5a5e0cfecf23526493bf9a05c0530805bf10ectye#define _ISCSI_CONFIG_H_
184c5a5e0cfecf23526493bf9a05c0530805bf10ectye
194c5a5e0cfecf23526493bf9a05c0530805bf10ectye#include "IScsiConfigNVDataStruc.h"
204c5a5e0cfecf23526493bf9a05c0530805bf10ectye
214c5a5e0cfecf23526493bf9a05c0530805bf10ectyetypedef struct _ISCSI_FORM_CALLBACK_INFO ISCSI_FORM_CALLBACK_INFO;
224c5a5e0cfecf23526493bf9a05c0530805bf10ectye
234c5a5e0cfecf23526493bf9a05c0530805bf10ectyeextern UINT8                       IScsiConfigVfrBin[];
244c5a5e0cfecf23526493bf9a05c0530805bf10ectyeextern UINT8                       IScsiDxeStrings[];
254c5a5e0cfecf23526493bf9a05c0530805bf10ectyeextern ISCSI_FORM_CALLBACK_INFO    *mCallbackInfo;
264c5a5e0cfecf23526493bf9a05c0530805bf10ectye
274c5a5e0cfecf23526493bf9a05c0530805bf10ectye
284c5a5e0cfecf23526493bf9a05c0530805bf10ectye#define VAR_OFFSET(Field)    \
294c5a5e0cfecf23526493bf9a05c0530805bf10ectye  ((UINT16) ((UINTN) &(((ISCSI_CONFIG_IFR_NVDATA *) 0)->Field)))
304c5a5e0cfecf23526493bf9a05c0530805bf10ectye
314c5a5e0cfecf23526493bf9a05c0530805bf10ectye#define QUESTION_ID(Field)   \
324c5a5e0cfecf23526493bf9a05c0530805bf10ectye  ((UINT16) (VAR_OFFSET (Field) + CONFIG_OPTION_OFFSET))
334c5a5e0cfecf23526493bf9a05c0530805bf10ectye
344c5a5e0cfecf23526493bf9a05c0530805bf10ectye
354c5a5e0cfecf23526493bf9a05c0530805bf10ectye#define DYNAMIC_ONE_OF_VAR_OFFSET           VAR_OFFSET  (Enabled)
364c5a5e0cfecf23526493bf9a05c0530805bf10ectye#define DYNAMIC_ORDERED_LIST_QUESTION_ID    QUESTION_ID (DynamicOrderedList)
374c5a5e0cfecf23526493bf9a05c0530805bf10ectye#define DYNAMIC_ORDERED_LIST_VAR_OFFSET     VAR_OFFSET  (DynamicOrderedList)
384c5a5e0cfecf23526493bf9a05c0530805bf10ectye#define ATTEMPT_DEL_QUESTION_ID             QUESTION_ID (DeleteAttemptList)
394c5a5e0cfecf23526493bf9a05c0530805bf10ectye#define ATTEMPT_DEL_VAR_OFFSET              VAR_OFFSET  (DeleteAttemptList)
404c5a5e0cfecf23526493bf9a05c0530805bf10ectye
414c5a5e0cfecf23526493bf9a05c0530805bf10ectye//
424c5a5e0cfecf23526493bf9a05c0530805bf10ectye// sizeof (EFI_MAC_ADDRESS) * 3
434c5a5e0cfecf23526493bf9a05c0530805bf10ectye//
444c5a5e0cfecf23526493bf9a05c0530805bf10ectye#define ISCSI_MAX_MAC_STRING_LEN            96
454c5a5e0cfecf23526493bf9a05c0530805bf10ectye
464c5a5e0cfecf23526493bf9a05c0530805bf10ectye#define ISCSI_INITATOR_NAME_VAR_NAME        L"I_NAME"
474c5a5e0cfecf23526493bf9a05c0530805bf10ectye
484c5a5e0cfecf23526493bf9a05c0530805bf10ectye#define ISCSI_CONFIG_VAR_ATTR               (EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE)
494c5a5e0cfecf23526493bf9a05c0530805bf10ectye
504c5a5e0cfecf23526493bf9a05c0530805bf10ectye#define ISCSI_FORM_CALLBACK_INFO_SIGNATURE  SIGNATURE_32 ('I', 'f', 'c', 'i')
514c5a5e0cfecf23526493bf9a05c0530805bf10ectye
524c5a5e0cfecf23526493bf9a05c0530805bf10ectye#define ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK(Callback) \
534c5a5e0cfecf23526493bf9a05c0530805bf10ectye  CR ( \
544c5a5e0cfecf23526493bf9a05c0530805bf10ectye  Callback, \
554c5a5e0cfecf23526493bf9a05c0530805bf10ectye  ISCSI_FORM_CALLBACK_INFO, \
564c5a5e0cfecf23526493bf9a05c0530805bf10ectye  ConfigAccess, \
574c5a5e0cfecf23526493bf9a05c0530805bf10ectye  ISCSI_FORM_CALLBACK_INFO_SIGNATURE \
584c5a5e0cfecf23526493bf9a05c0530805bf10ectye  )
594c5a5e0cfecf23526493bf9a05c0530805bf10ectye
604c5a5e0cfecf23526493bf9a05c0530805bf10ectye#pragma pack(1)
614c5a5e0cfecf23526493bf9a05c0530805bf10ectyestruct _ISCSI_ATTEMPT_CONFIG_NVDATA {
624c5a5e0cfecf23526493bf9a05c0530805bf10ectye  LIST_ENTRY                       Link;
634c5a5e0cfecf23526493bf9a05c0530805bf10ectye  UINT8                            NicIndex;
644c5a5e0cfecf23526493bf9a05c0530805bf10ectye  UINT8                            AttemptConfigIndex;
654c5a5e0cfecf23526493bf9a05c0530805bf10ectye  BOOLEAN                          DhcpSuccess;
664c5a5e0cfecf23526493bf9a05c0530805bf10ectye  BOOLEAN                          ValidiBFTPath;
674c5a5e0cfecf23526493bf9a05c0530805bf10ectye  BOOLEAN                          ValidPath;
684c5a5e0cfecf23526493bf9a05c0530805bf10ectye  UINT8                            AutoConfigureMode;
694c5a5e0cfecf23526493bf9a05c0530805bf10ectye  EFI_STRING_ID                    AttemptTitleToken;
704c5a5e0cfecf23526493bf9a05c0530805bf10ectye  EFI_STRING_ID                    AttemptTitleHelpToken;
714c5a5e0cfecf23526493bf9a05c0530805bf10ectye  CHAR8                            AttemptName[ATTEMPT_NAME_MAX_SIZE];
724c5a5e0cfecf23526493bf9a05c0530805bf10ectye  CHAR8                            MacString[ISCSI_MAX_MAC_STRING_LEN];
734c5a5e0cfecf23526493bf9a05c0530805bf10ectye  EFI_IP_ADDRESS                   PrimaryDns;
744c5a5e0cfecf23526493bf9a05c0530805bf10ectye  EFI_IP_ADDRESS                   SecondaryDns;
754c5a5e0cfecf23526493bf9a05c0530805bf10ectye  EFI_IP_ADDRESS                   DhcpServer;
764c5a5e0cfecf23526493bf9a05c0530805bf10ectye  ISCSI_SESSION_CONFIG_NVDATA      SessionConfigData;
774c5a5e0cfecf23526493bf9a05c0530805bf10ectye  UINT8                            AuthenticationType;
784c5a5e0cfecf23526493bf9a05c0530805bf10ectye  union {
794c5a5e0cfecf23526493bf9a05c0530805bf10ectye    ISCSI_CHAP_AUTH_CONFIG_NVDATA  CHAP;
804c5a5e0cfecf23526493bf9a05c0530805bf10ectye  } AuthConfigData;
8187ce4210f52c0a9cf3f97937ec03c7155398e190Ye Ting  BOOLEAN                          AutoConfigureSuccess;
824c5a5e0cfecf23526493bf9a05c0530805bf10ectye};
834c5a5e0cfecf23526493bf9a05c0530805bf10ectye
844c5a5e0cfecf23526493bf9a05c0530805bf10ectye///
854c5a5e0cfecf23526493bf9a05c0530805bf10ectye/// HII specific Vendor Device Path definition.
864c5a5e0cfecf23526493bf9a05c0530805bf10ectye///
874c5a5e0cfecf23526493bf9a05c0530805bf10ectyetypedef struct {
884c5a5e0cfecf23526493bf9a05c0530805bf10ectye  VENDOR_DEVICE_PATH               VendorDevicePath;
894c5a5e0cfecf23526493bf9a05c0530805bf10ectye  EFI_DEVICE_PATH_PROTOCOL         End;
904c5a5e0cfecf23526493bf9a05c0530805bf10ectye} HII_VENDOR_DEVICE_PATH;
914c5a5e0cfecf23526493bf9a05c0530805bf10ectye
924c5a5e0cfecf23526493bf9a05c0530805bf10ectye#pragma pack()
934c5a5e0cfecf23526493bf9a05c0530805bf10ectye
944c5a5e0cfecf23526493bf9a05c0530805bf10ectyestruct _ISCSI_FORM_CALLBACK_INFO {
954c5a5e0cfecf23526493bf9a05c0530805bf10ectye  UINT32                           Signature;
964c5a5e0cfecf23526493bf9a05c0530805bf10ectye  EFI_HANDLE                       DriverHandle;
974c5a5e0cfecf23526493bf9a05c0530805bf10ectye  EFI_HII_CONFIG_ACCESS_PROTOCOL   ConfigAccess;
984c5a5e0cfecf23526493bf9a05c0530805bf10ectye  UINT16                           *KeyList;
994c5a5e0cfecf23526493bf9a05c0530805bf10ectye  VOID                             *FormBuffer;
1004c5a5e0cfecf23526493bf9a05c0530805bf10ectye  EFI_HII_HANDLE                   RegisteredHandle;
1014c5a5e0cfecf23526493bf9a05c0530805bf10ectye  ISCSI_ATTEMPT_CONFIG_NVDATA      *Current;
1024c5a5e0cfecf23526493bf9a05c0530805bf10ectye};
1034c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1044c5a5e0cfecf23526493bf9a05c0530805bf10ectye/**
1054c5a5e0cfecf23526493bf9a05c0530805bf10ectye  Initialize the iSCSI configuration form.
1064c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1074c5a5e0cfecf23526493bf9a05c0530805bf10ectye  @param[in]  DriverBindingHandle The iSCSI driverbinding handle.
1084c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1094c5a5e0cfecf23526493bf9a05c0530805bf10ectye  @retval EFI_SUCCESS             The iSCSI configuration form is initialized.
1104c5a5e0cfecf23526493bf9a05c0530805bf10ectye  @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
1114c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1124c5a5e0cfecf23526493bf9a05c0530805bf10ectye**/
1134c5a5e0cfecf23526493bf9a05c0530805bf10ectyeEFI_STATUS
1144c5a5e0cfecf23526493bf9a05c0530805bf10ectyeIScsiConfigFormInit (
1154c5a5e0cfecf23526493bf9a05c0530805bf10ectye  IN EFI_HANDLE  DriverBindingHandle
1164c5a5e0cfecf23526493bf9a05c0530805bf10ectye  );
1174c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1184c5a5e0cfecf23526493bf9a05c0530805bf10ectye/**
1194c5a5e0cfecf23526493bf9a05c0530805bf10ectye  Unload the iSCSI configuration form, this includes: delete all the iSCSI
1204c5a5e0cfecf23526493bf9a05c0530805bf10ectye  configuration entries, uninstall the form callback protocol, and
1214c5a5e0cfecf23526493bf9a05c0530805bf10ectye  free the resources used.
1224c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1234c5a5e0cfecf23526493bf9a05c0530805bf10ectye  @param[in]  DriverBindingHandle The iSCSI driverbinding handle.
1244c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1254c5a5e0cfecf23526493bf9a05c0530805bf10ectye  @retval EFI_SUCCESS             The iSCSI configuration form is unloaded.
1264c5a5e0cfecf23526493bf9a05c0530805bf10ectye  @retval Others                  Failed to unload the form.
1274c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1284c5a5e0cfecf23526493bf9a05c0530805bf10ectye**/
1294c5a5e0cfecf23526493bf9a05c0530805bf10ectyeEFI_STATUS
1304c5a5e0cfecf23526493bf9a05c0530805bf10ectyeIScsiConfigFormUnload (
1314c5a5e0cfecf23526493bf9a05c0530805bf10ectye  IN EFI_HANDLE  DriverBindingHandle
1324c5a5e0cfecf23526493bf9a05c0530805bf10ectye  );
1334c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1344c5a5e0cfecf23526493bf9a05c0530805bf10ectye/**
1354c5a5e0cfecf23526493bf9a05c0530805bf10ectye  Update the MAIN form to display the configured attempts.
1364c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1374c5a5e0cfecf23526493bf9a05c0530805bf10ectye**/
1384c5a5e0cfecf23526493bf9a05c0530805bf10ectyeVOID
1394c5a5e0cfecf23526493bf9a05c0530805bf10ectyeIScsiConfigUpdateAttempt (
1404c5a5e0cfecf23526493bf9a05c0530805bf10ectye  VOID
1414c5a5e0cfecf23526493bf9a05c0530805bf10ectye  );
1424c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1434c5a5e0cfecf23526493bf9a05c0530805bf10ectye/**
1444c5a5e0cfecf23526493bf9a05c0530805bf10ectye  Get the attempt config data from global structure by the ConfigIndex.
1454c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1464c5a5e0cfecf23526493bf9a05c0530805bf10ectye  @param[in]  AttemptConfigIndex     The unique index indicates the attempt.
1474c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1484c5a5e0cfecf23526493bf9a05c0530805bf10ectye  @return       Pointer to the attempt config data.
1494c5a5e0cfecf23526493bf9a05c0530805bf10ectye  @retval NULL  The attempt configuration data can not be found.
1504c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1514c5a5e0cfecf23526493bf9a05c0530805bf10ectye**/
1524c5a5e0cfecf23526493bf9a05c0530805bf10ectyeISCSI_ATTEMPT_CONFIG_NVDATA *
1534c5a5e0cfecf23526493bf9a05c0530805bf10ectyeIScsiConfigGetAttemptByConfigIndex (
1544c5a5e0cfecf23526493bf9a05c0530805bf10ectye  IN UINT8                     AttemptConfigIndex
1554c5a5e0cfecf23526493bf9a05c0530805bf10ectye  );
1564c5a5e0cfecf23526493bf9a05c0530805bf10ectye
1574c5a5e0cfecf23526493bf9a05c0530805bf10ectye#endif
158