Fix a bug about the iSCSI DHCP dependency issue.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / IScsiDxe / IScsiMisc.h
1 /** @file\r
2   Miscellaneous definitions for iSCSI driver.\r
3 \r
4 Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>\r
5 This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution.  The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9 \r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12 \r
13 **/\r
14 \r
15 #ifndef _ISCSI_MISC_H_\r
16 #define _ISCSI_MISC_H_\r
17 \r
18 #include <Library/BaseLib.h>\r
19 \r
20 typedef struct _ISCSI_SESSION_CONFIG_DATA ISCSI_SESSION_CONFIG_DATA;\r
21 \r
22 #pragma pack(1)\r
23 typedef struct {\r
24   BOOLEAN           Enabled;\r
25 \r
26   BOOLEAN           InitiatorInfoFromDhcp;\r
27   EFI_IPv4_ADDRESS  LocalIp;\r
28   EFI_IPv4_ADDRESS  SubnetMask;\r
29   EFI_IPv4_ADDRESS  Gateway;\r
30 \r
31   BOOLEAN           TargetInfoFromDhcp;\r
32   CHAR8             TargetName[ISCSI_NAME_MAX_SIZE];\r
33   EFI_IPv4_ADDRESS  TargetIp;\r
34   UINT16            TargetPort;\r
35   UINT8             BootLun[8];\r
36 \r
37   UINT8             IsId[6];\r
38 } ISCSI_SESSION_CONFIG_NVDATA;\r
39 #pragma pack()\r
40 \r
41 struct _ISCSI_SESSION_CONFIG_DATA {\r
42   ISCSI_SESSION_CONFIG_NVDATA NvData;\r
43 \r
44   EFI_IPv4_ADDRESS            PrimaryDns;\r
45   EFI_IPv4_ADDRESS            SecondaryDns;\r
46   EFI_IPv4_ADDRESS            DhcpServer;\r
47 };\r
48 \r
49 /**\r
50   Calculate the prefix length of the IPv4 subnet mask.\r
51 \r
52   @param[in]  SubnetMask The IPv4 subnet mask.\r
53 \r
54   @return The prefix length of the subnet mask.\r
55   @retval 0 Other errors as indicated.\r
56 **/\r
57 UINT8\r
58 IScsiGetSubnetMaskPrefixLength (\r
59   IN EFI_IPv4_ADDRESS  *SubnetMask\r
60   );\r
61 \r
62 /**\r
63   Convert the hexadecimal encoded LUN string into the 64-bit LUN. \r
64 \r
65   @param[in]   Str             The hexadecimal encoded LUN string.\r
66   @param[out]  Lun             Storage to return the 64-bit LUN.\r
67 \r
68   @retval EFI_SUCCESS           The 64-bit LUN is stored in Lun.\r
69   @retval EFI_INVALID_PARAMETER The string is malformatted.\r
70 **/\r
71 EFI_STATUS\r
72 IScsiAsciiStrToLun (\r
73   IN  CHAR8  *Str,\r
74   OUT UINT8  *Lun\r
75   );\r
76 \r
77 /**\r
78   Convert the 64-bit LUN into the hexadecimal encoded LUN string.\r
79 \r
80   @param[in]   Lun The 64-bit LUN.\r
81   @param[out]  Str The storage to return the hexadecimal encoded LUN string.\r
82 **/\r
83 VOID\r
84 IScsiLunToUnicodeStr (\r
85   IN UINT8    *Lun,\r
86   OUT CHAR16  *Str\r
87   );\r
88 \r
89 /**\r
90   Convert the ASCII string into a UNICODE string.\r
91 \r
92   @param[in]   Source      The ASCII string.\r
93   @param[out]  Destination The storage to return the UNICODE string.\r
94 \r
95   @return CHAR16 *         Pointer to the UNICODE string.\r
96 **/\r
97 CHAR16 *\r
98 IScsiAsciiStrToUnicodeStr (\r
99   IN  CHAR8   *Source,\r
100   OUT CHAR16  *Destination\r
101   );\r
102 \r
103 /**\r
104   Convert the UNICODE string into an ASCII string.\r
105 \r
106   @param[in]  Source       The UNICODE string.\r
107   @param[out] Destination  The storage to return the ASCII string.\r
108 \r
109   @return CHAR8 *          Pointer to the ASCII string.\r
110 **/\r
111 CHAR8 *\r
112 IScsiUnicodeStrToAsciiStr (\r
113   IN  CHAR16  *Source,\r
114   OUT CHAR8   *Destination\r
115   );\r
116 \r
117 /**\r
118   Convert the mac address into a hexadecimal encoded "-" seperated string.\r
119 \r
120   @param[in]  Mac     The mac address.\r
121   @param[in]  Len     Length in bytes of the mac address.\r
122   @param[in]  VlanId  VLAN ID of the network device.\r
123   @param[out] Str     The storage to return the mac string.\r
124 **/\r
125 VOID\r
126 IScsiMacAddrToStr (\r
127   IN  EFI_MAC_ADDRESS  *Mac,\r
128   IN  UINT32           Len,\r
129   IN  UINT16           VlanId,\r
130   OUT CHAR16           *Str\r
131   );\r
132 \r
133 /**\r
134   Convert the decimal dotted IPv4 address into the binary IPv4 address.\r
135 \r
136   @param[in]   Str             The UNICODE string.\r
137   @param[out]  Ip              The storage to return the ASCII string.\r
138 \r
139   @retval EFI_SUCCESS           The binary IP address is returned in Ip.\r
140   @retval EFI_INVALID_PARAMETER The IP string is malformatted.\r
141 **/\r
142 EFI_STATUS\r
143 IScsiAsciiStrToIp (\r
144   IN  CHAR8             *Str,\r
145   OUT EFI_IPv4_ADDRESS  *Ip\r
146   );\r
147 \r
148 /**\r
149   Convert the binary encoded buffer into a hexadecimal encoded string.\r
150 \r
151   @param[in]       BinBuffer   The buffer containing the binary data.\r
152   @param[in]       BinLength   Length of the binary buffer.\r
153   @param[in, out]  HexStr      Pointer to the string.\r
154   @param[in, out]  HexLength   The length of the string.\r
155 \r
156   @retval EFI_SUCCESS          The binary data is converted to the hexadecimal string \r
157                                and the length of the string is updated.\r
158   @retval EFI_BUFFER_TOO_SMALL The string is too small.\r
159   @retval EFI_INVALID_PARAMETER The IP string is malformatted.\r
160 **/\r
161 EFI_STATUS\r
162 IScsiBinToHex (\r
163   IN     UINT8  *BinBuffer,\r
164   IN     UINT32 BinLength,\r
165   IN OUT CHAR8  *HexStr,\r
166   IN OUT UINT32 *HexLength\r
167   );\r
168 \r
169 /**\r
170   Convert the hexadecimal string into a binary encoded buffer.\r
171 \r
172   @param[in, out]  BinBuffer   The binary buffer.\r
173   @param[in, out]  BinLength   Length of the binary buffer.\r
174   @param[in]       HexStr      The hexadecimal string.\r
175 \r
176   @retval EFI_SUCCESS          The hexadecimal string is converted into a binary\r
177                                encoded buffer.\r
178   @retval EFI_BUFFER_TOO_SMALL The binary buffer is too small to hold the converted data.\r
179 **/\r
180 EFI_STATUS\r
181 IScsiHexToBin (\r
182   IN OUT UINT8  *BinBuffer,\r
183   IN OUT UINT32 *BinLength,\r
184   IN     CHAR8  *HexStr\r
185   );\r
186 \r
187 /**\r
188   Generate random numbers.\r
189 \r
190   @param[in, out]  Rand       The buffer to contain random numbers.\r
191   @param[in]       RandLength The length of the Rand buffer.\r
192 **/\r
193 VOID\r
194 IScsiGenRandom (\r
195   IN OUT UINT8  *Rand,\r
196   IN     UINTN  RandLength\r
197   );\r
198 \r
199 /**\r
200   Create the iSCSI driver data..\r
201 \r
202   @param[in] Image      The handle of the driver image.\r
203   @param[in] Controller The handle of the controller.\r
204 \r
205   @return The iSCSI driver data created.\r
206   @retval NULL Other errors as indicated.\r
207 **/\r
208 ISCSI_DRIVER_DATA *\r
209 IScsiCreateDriverData (\r
210   IN EFI_HANDLE  Image,\r
211   IN EFI_HANDLE  Controller\r
212   );\r
213 \r
214 /**\r
215   Clean the iSCSI driver data.\r
216 \r
217   @param[in]  Private The iSCSI driver data.\r
218 **/\r
219 VOID\r
220 IScsiCleanDriverData (\r
221   IN ISCSI_DRIVER_DATA  *Private\r
222   );\r
223 \r
224 /**\r
225   Check wheather the Controller is configured to use DHCP protocol.\r
226 \r
227   @param[in]  Controller           The handle of the controller.\r
228   \r
229   @retval TRUE                     The handle of the controller need the Dhcp protocol.\r
230   @retval FALSE                    The handle of the controller does not need the Dhcp protocol.\r
231   \r
232 **/\r
233 BOOLEAN\r
234 IScsiDhcpIsConfigured (\r
235   IN EFI_HANDLE  Controller\r
236   );\r
237 \r
238 /**\r
239   Get the various configuration data of this iSCSI instance.\r
240 \r
241   @param[in]  Private   The iSCSI driver data.\r
242 \r
243   @retval EFI_SUCCESS   The configuration of this instance is got.\r
244   @retval EFI_ABORTED   The operation was aborted.\r
245   @retval Others        Other errors as indicated.\r
246 **/\r
247 EFI_STATUS\r
248 IScsiGetConfigData (\r
249   IN ISCSI_DRIVER_DATA  *Private\r
250   );\r
251 \r
252 /**\r
253   Get the device path of the iSCSI tcp connection and update it.\r
254 \r
255   @param[in]  Private The iSCSI driver data.\r
256 \r
257   @return The updated device path.\r
258   @retval NULL Other errors as indicated.\r
259 **/\r
260 EFI_DEVICE_PATH_PROTOCOL *\r
261 IScsiGetTcpConnDevicePath (\r
262   IN ISCSI_DRIVER_DATA  *Private\r
263   );\r
264 \r
265 /**\r
266   Abort the session when the transition from BS to RT is initiated.\r
267 \r
268   @param[in]   Event  The event signaled.\r
269   @param[in]  Context The iSCSI driver data.\r
270 **/\r
271 VOID\r
272 EFIAPI\r
273 IScsiOnExitBootService (\r
274   IN EFI_EVENT  Event,\r
275   IN VOID       *Context\r
276   );\r
277 \r
278 \r
279 \r
280 #endif\r