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