1 /** @file 2 The header file of functions for configuring or getting the parameters 3 relating to iSCSI. 4 5 Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR> 6 SPDX-License-Identifier: BSD-2-Clause-Patent 7 8 **/ 9 10 #ifndef _ISCSI_CONFIG_H_ 11 #define _ISCSI_CONFIG_H_ 12 13 #include "IScsiConfigNVDataStruc.h" 14 15 typedef struct _ISCSI_FORM_CALLBACK_INFO ISCSI_FORM_CALLBACK_INFO; 16 17 extern UINT8 IScsiConfigVfrBin[]; 18 extern UINT8 IScsiDxeStrings[]; 19 extern ISCSI_FORM_CALLBACK_INFO *mCallbackInfo; 20 21 22 #define VAR_OFFSET(Field) \ 23 ((UINT16) ((UINTN) &(((ISCSI_CONFIG_IFR_NVDATA *) 0)->Field))) 24 25 #define QUESTION_ID(Field) \ 26 ((UINT16) (VAR_OFFSET (Field) + CONFIG_OPTION_OFFSET)) 27 28 #define DYNAMIC_ONE_OF_VAR_OFFSET VAR_OFFSET (Enabled) 29 #define DYNAMIC_ORDERED_LIST_QUESTION_ID QUESTION_ID (DynamicOrderedList) 30 #define DYNAMIC_ORDERED_LIST_VAR_OFFSET VAR_OFFSET (DynamicOrderedList) 31 #define ATTEMPT_DEL_QUESTION_ID QUESTION_ID (DeleteAttemptList) 32 #define ATTEMPT_DEL_VAR_OFFSET VAR_OFFSET (DeleteAttemptList) 33 #define ATTEMPT_ADD_QUESTION_ID QUESTION_ID (AddAttemptList) 34 #define ATTEMPT_ADD_VAR_OFFSET VAR_OFFSET (AddAttemptList) 35 36 // 37 // Define QuestionId and OffSet for Keywords. 38 // 39 #define ATTEMPT_MAC_ADDR_VAR_OFFSET VAR_OFFSET (ISCSIMacAddr) 40 #define ATTEMPT_ATTEMPT_NAME_QUESTION_ID QUESTION_ID (ISCSIAttemptName) 41 #define ATTEMPT_ATTEMPT_NAME_VAR_OFFSET VAR_OFFSET (ISCSIAttemptName) 42 #define ATTEMPT_BOOTENABLE_QUESTION_ID QUESTION_ID (ISCSIBootEnableList) 43 #define ATTEMPT_BOOTENABLE_VAR_OFFSET VAR_OFFSET (ISCSIBootEnableList) 44 #define ATTEMPT_ADDRESS_TYPE_QUESTION_ID QUESTION_ID (ISCSIIpAddressTypeList) 45 #define ATTEMPT_ADDRESS_TYPE_VAR_OFFSET VAR_OFFSET (ISCSIIpAddressTypeList) 46 #define ATTEMPT_CONNECT_RETRY_QUESTION_ID QUESTION_ID (ISCSIConnectRetry) 47 #define ATTEMPT_CONNECT_RETRY_VAR_OFFSET VAR_OFFSET (ISCSIConnectRetry) 48 #define ATTEMPT_CONNECT_TIMEOUT_QUESTION_ID QUESTION_ID (ISCSIConnectTimeout) 49 #define ATTEMPT_CONNECT_TIMEOUT_VAR_OFFSET VAR_OFFSET (ISCSIConnectTimeout) 50 #define ATTEMPT_ISID_QUESTION_ID QUESTION_ID (Keyword->ISCSIIsId) 51 #define ATTEMPT_ISID_VAR_OFFSET VAR_OFFSET (Keyword->ISCSIIsId) 52 #define ATTEMPT_INITIATOR_VIA_DHCP_QUESTION_ID QUESTION_ID (ISCSIInitiatorInfoViaDHCP) 53 #define ATTEMPT_INITIATOR_VIA_DHCP_VAR_OFFSET VAR_OFFSET (ISCSIInitiatorInfoViaDHCP) 54 #define ATTEMPT_INITIATOR_IP_ADDRESS_QUESTION_ID QUESTION_ID (Keyword->ISCSIInitiatorIpAddress) 55 #define ATTEMPT_INITIATOR_IP_ADDRESS_VAR_OFFSET VAR_OFFSET (Keyword->ISCSIInitiatorIpAddress) 56 #define ATTEMPT_INITIATOR_NET_MASK_QUESTION_ID QUESTION_ID (Keyword->ISCSIInitiatorNetmask) 57 #define ATTEMPT_INITIATOR_NET_MASK_VAR_OFFSET VAR_OFFSET (Keyword->ISCSIInitiatorNetmask) 58 #define ATTEMPT_INITIATOR_GATE_WAY_QUESTION_ID QUESTION_ID (Keyword->ISCSIInitiatorGateway) 59 #define ATTEMPT_INITIATOR_GATE_WAY_VAR_OFFSET VAR_OFFSET (Keyword->ISCSIInitiatorGateway) 60 #define ATTEMPT_TARGET_VIA_DHCP_QUESTION_ID QUESTION_ID (ISCSITargetInfoViaDHCP) 61 #define ATTEMPT_TARGET_VIA_DHCP_VAR_OFFSET VAR_OFFSET (ISCSITargetInfoViaDHCP) 62 #define ATTEMPT_TARGET_NAME_QUESTION_ID QUESTION_ID (Keyword->ISCSITargetName) 63 #define ATTEMPT_TARGET_NAME_VAR_OFFSET VAR_OFFSET (Keyword->ISCSITargetName) 64 #define ATTEMPT_TARGET_IP_ADDRESS_QUESTION_ID QUESTION_ID (Keyword->ISCSITargetIpAddress) 65 #define ATTEMPT_TARGET_IP_ADDRESS_VAR_OFFSET VAR_OFFSET (Keyword->ISCSITargetIpAddress) 66 #define ATTEMPT_TARGET_TCP_PORT_QUESTION_ID QUESTION_ID (ISCSITargetTcpPort) 67 #define ATTEMPT_TARGET_TCP_PORT_VAR_OFFSET VAR_OFFSET (ISCSITargetTcpPort) 68 #define ATTEMPT_LUN_QUESTION_ID QUESTION_ID (Keyword->ISCSILun) 69 #define ATTEMPT_LUN_VAR_OFFSET VAR_OFFSET (Keyword->ISCSILun) 70 #define ATTEMPT_AUTHENTICATION_METHOD_QUESTION_ID QUESTION_ID (ISCSIAuthenticationMethod) 71 #define ATTEMPT_AUTHENTICATION_METHOD_VAR_OFFSET VAR_OFFSET (ISCSIAuthenticationMethod) 72 #define ATTEMPT_CHARTYPE_QUESTION_ID QUESTION_ID (ISCSIChapType) 73 #define ATTEMPT_CHARTYPE_VAR_OFFSET VAR_OFFSET (ISCSIChapType) 74 #define ATTEMPT_CHAR_USER_NAME_QUESTION_ID QUESTION_ID (Keyword->ISCSIChapUsername) 75 #define ATTEMPT_CHAR_USER_NAME_VAR_OFFSET VAR_OFFSET (Keyword->ISCSIChapUsername) 76 #define ATTEMPT_CHAR_SECRET_QUESTION_ID QUESTION_ID (Keyword->ISCSIChapSecret) 77 #define ATTEMPT_CHAR_SECRET_VAR_OFFSET VAR_OFFSET (Keyword->ISCSIChapSecret) 78 #define ATTEMPT_CHAR_REVERSE_USER_NAME_QUESTION_ID QUESTION_ID (Keyword->ISCSIReverseChapUsername) 79 #define ATTEMPT_CHAR_REVERSE_USER_NAME_VAR_OFFSET VAR_OFFSET (Keyword->ISCSIReverseChapUsername) 80 #define ATTEMPT_CHAR_REVERSE_SECRET_QUESTION_ID QUESTION_ID (Keyword->ISCSIReverseChapSecret) 81 #define ATTEMPT_CHAR_REVERSE_SECRET_VAR_OFFSET VAR_OFFSET (Keyword->ISCSIReverseChapSecret) 82 83 84 #define ISCSI_INITATOR_NAME_VAR_NAME L"I_NAME" 85 86 #define ISCSI_CONFIG_VAR_ATTR (EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE) 87 88 #define ISCSI_FORM_CALLBACK_INFO_SIGNATURE SIGNATURE_32 ('I', 'f', 'c', 'i') 89 90 #define ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK(Callback) \ 91 CR ( \ 92 Callback, \ 93 ISCSI_FORM_CALLBACK_INFO, \ 94 ConfigAccess, \ 95 ISCSI_FORM_CALLBACK_INFO_SIGNATURE \ 96 ) 97 98 #pragma pack(1) 99 struct _ISCSI_ATTEMPT_CONFIG_NVDATA { 100 LIST_ENTRY Link; 101 UINT8 NicIndex; 102 UINT8 AttemptConfigIndex; 103 BOOLEAN DhcpSuccess; 104 BOOLEAN ValidiBFTPath; 105 BOOLEAN ValidPath; 106 UINT8 AutoConfigureMode; 107 EFI_STRING_ID AttemptTitleToken; 108 EFI_STRING_ID AttemptTitleHelpToken; 109 CHAR8 AttemptName[ATTEMPT_NAME_SIZE]; 110 CHAR8 MacString[ISCSI_MAX_MAC_STRING_LEN]; 111 EFI_IP_ADDRESS PrimaryDns; 112 EFI_IP_ADDRESS SecondaryDns; 113 EFI_IP_ADDRESS DhcpServer; 114 ISCSI_SESSION_CONFIG_NVDATA SessionConfigData; 115 UINT8 AuthenticationType; 116 union { 117 ISCSI_CHAP_AUTH_CONFIG_NVDATA CHAP; 118 } AuthConfigData; 119 BOOLEAN AutoConfigureSuccess; 120 UINT8 Actived; 121 }; 122 123 /// 124 /// HII specific Vendor Device Path definition. 125 /// 126 typedef struct { 127 VENDOR_DEVICE_PATH VendorDevicePath; 128 EFI_DEVICE_PATH_PROTOCOL End; 129 } HII_VENDOR_DEVICE_PATH; 130 131 #pragma pack() 132 133 struct _ISCSI_FORM_CALLBACK_INFO { 134 UINT32 Signature; 135 EFI_HANDLE DriverHandle; 136 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess; 137 UINT16 *KeyList; 138 VOID *FormBuffer; 139 EFI_HII_HANDLE RegisteredHandle; 140 ISCSI_ATTEMPT_CONFIG_NVDATA *Current; 141 }; 142 143 /** 144 Create Hii Extend Label OpCode as the start opcode and end opcode. It is 145 a help function. 146 147 @param[in] StartLabelNumber The number of start label. 148 @param[out] StartOpCodeHandle Points to the start opcode handle. 149 @param[out] StartLabel Points to the created start opcode. 150 @param[out] EndOpCodeHandle Points to the end opcode handle. 151 @param[out] EndLabel Points to the created end opcode. 152 153 @retval EFI_OUT_OF_RESOURCES Do not have sufficient resource to finish this 154 operation. 155 @retval EFI_INVALID_PARAMETER Any input parameter is invalid. 156 @retval EFI_SUCCESS The operation is completed successfully. 157 158 **/ 159 EFI_STATUS 160 IScsiCreateOpCode ( 161 IN UINT16 StartLabelNumber, 162 OUT VOID **StartOpCodeHandle, 163 OUT EFI_IFR_GUID_LABEL **StartLabel, 164 OUT VOID **EndOpCodeHandle, 165 OUT EFI_IFR_GUID_LABEL **EndLabel 166 ); 167 168 /** 169 Initialize the iSCSI configuration form. 170 171 @param[in] DriverBindingHandle The iSCSI driverbinding handle. 172 173 @retval EFI_SUCCESS The iSCSI configuration form is initialized. 174 @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. 175 176 **/ 177 EFI_STATUS 178 IScsiConfigFormInit ( 179 IN EFI_HANDLE DriverBindingHandle 180 ); 181 182 /** 183 Unload the iSCSI configuration form, this includes: delete all the iSCSI 184 configuration entries, uninstall the form callback protocol, and 185 free the resources used. 186 187 @param[in] DriverBindingHandle The iSCSI driverbinding handle. 188 189 @retval EFI_SUCCESS The iSCSI configuration form is unloaded. 190 @retval Others Failed to unload the form. 191 192 **/ 193 EFI_STATUS 194 IScsiConfigFormUnload ( 195 IN EFI_HANDLE DriverBindingHandle 196 ); 197 198 /** 199 Update the MAIN form to display the configured attempts. 200 201 **/ 202 VOID 203 IScsiConfigUpdateAttempt ( 204 VOID 205 ); 206 207 /** 208 Get the attempt config data from global structure by the ConfigIndex. 209 210 @param[in] AttemptConfigIndex The unique index indicates the attempt. 211 212 @return Pointer to the attempt config data. 213 @retval NULL The attempt configuration data can not be found. 214 215 **/ 216 ISCSI_ATTEMPT_CONFIG_NVDATA * 217 IScsiConfigGetAttemptByConfigIndex ( 218 IN UINT8 AttemptConfigIndex 219 ); 220 221 #endif 222