772db4bb |
1 | /** @file |
2 | |
3 | Copyright (c) 2004 - 2007, Intel Corporation |
4 | All rights reserved. This program and the accompanying materials |
5 | are licensed and made available under the terms and conditions of the BSD License |
6 | which accompanies this distribution. The full text of the license may be found at |
7 | http://opensource.org/licenses/bsd-license.php |
8 | |
9 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, |
10 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. |
11 | |
12 | Module Name: |
13 | PxeDhcp4.h |
14 | |
15 | Abstract: |
16 | Common header for PxeDhcp4 protocol driver |
17 | |
18 | |
19 | **/ |
20 | #ifndef _PXEDHCP4_H |
21 | #define _PXEDHCP4_H |
22 | |
23 | \r |
24 | #include <PiDxe.h>\r |
25 | \r |
26 | #include <Protocol/PxeBaseCode.h>\r |
27 | #include <Protocol/SimpleNetwork.h> |
28 | #include <Protocol/PxeDhcp4.h> |
29 | #include <Protocol/PxeDhcp4Callback.h>\r |
30 | \r |
31 | #include <Library/DebugLib.h>\r |
32 | #include <Library/BaseMemoryLib.h> |
33 | #include <Library/MemoryAllocationLib.h>\r |
34 | #include <Library/UefiDriverEntryPoint.h>\r |
35 | #include <Library/UefiBootServicesTableLib.h>\r |
36 | #include <Library/UefiLib.h> |
37 | |
38 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ |
39 | |
40 | // |
41 | // PxeDhcp4 protocol instance data |
42 | // |
43 | typedef struct { |
44 | // |
45 | // Signature field used to locate beginning of containment record. |
46 | // |
47 | UINTN Signature; |
48 | |
49 | #define PXE_DHCP4_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('p', 'x', 'D', '4') |
50 | // |
51 | // Device handle the protocol is bound to. |
52 | // |
53 | EFI_HANDLE Handle; |
54 | |
55 | // |
56 | // Public PxeDhcp4 protocol interface. |
57 | // |
58 | EFI_PXE_DHCP4_PROTOCOL PxeDhcp4; |
59 | |
60 | // |
61 | // Consumed PxeBc, Snp and PxeDhcp4Callback protocol interfaces. |
62 | // |
63 | EFI_PXE_BASE_CODE_PROTOCOL *PxeBc; |
64 | EFI_SIMPLE_NETWORK_PROTOCOL *Snp; |
65 | EFI_PXE_DHCP4_CALLBACK_PROTOCOL *callback; |
66 | |
67 | // |
68 | // PxeDhcp4 called function for PxeDhcp4Callback. |
69 | // |
70 | EFI_PXE_DHCP4_FUNCTION function; |
71 | |
72 | // |
73 | // Timeout event and flag for PxeDhcp4Callback. |
74 | // |
75 | EFI_EVENT TimeoutEvent; |
76 | BOOLEAN TimeoutOccurred; |
77 | |
78 | // |
79 | // Periodic event and flag for PxeDhcp4Callback. |
80 | // |
81 | EFI_EVENT PeriodicEvent; |
82 | BOOLEAN PeriodicOccurred; |
83 | |
84 | // |
85 | // DHCP server IP address. |
86 | // |
87 | UINT32 ServerIp; |
88 | |
89 | // |
90 | // DHCP renewal and rebinding times, in seconds. |
91 | // |
92 | UINT32 RenewTime; |
93 | UINT32 RebindTime; |
94 | UINT32 LeaseTime; |
95 | |
96 | // |
97 | // Number of offers received & allocated offer list. |
98 | // |
99 | UINTN offers; |
100 | DHCP4_PACKET *offer_list; |
101 | |
102 | // |
103 | // |
104 | // |
105 | BOOLEAN StopPxeBc; |
106 | |
107 | } PXE_DHCP4_PRIVATE_DATA; |
108 | |
109 | #define PXE_DHCP4_PRIVATE_DATA_FROM_THIS(a) CR (a, PXE_DHCP4_PRIVATE_DATA, PxeDhcp4, PXE_DHCP4_PRIVATE_DATA_SIGNATURE) |
110 | |
111 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ |
112 | |
113 | // |
114 | // Protocol function prototypes. |
115 | // |
116 | extern |
117 | EFI_STATUS |
118 | EFIAPI |
119 | PxeDhcp4Run ( |
120 | IN EFI_PXE_DHCP4_PROTOCOL *This, |
121 | IN OPTIONAL UINTN OpLen, |
122 | IN OPTIONAL VOID *OpList |
123 | ) |
124 | ; |
125 | |
126 | extern |
127 | EFI_STATUS |
128 | EFIAPI |
129 | PxeDhcp4Setup ( |
130 | IN EFI_PXE_DHCP4_PROTOCOL *This, |
131 | IN EFI_PXE_DHCP4_DATA *Data |
132 | ) |
133 | ; |
134 | |
135 | extern |
136 | EFI_STATUS |
137 | EFIAPI |
138 | PxeDhcp4Init ( |
139 | IN EFI_PXE_DHCP4_PROTOCOL *This, |
140 | IN UINTN seconds_timeout, |
141 | OUT UINTN *offer_list_entries, |
142 | OUT DHCP4_PACKET **offer_list |
143 | ) |
144 | ; |
145 | |
146 | extern |
147 | EFI_STATUS |
148 | EFIAPI |
149 | PxeDhcp4Select ( |
150 | IN EFI_PXE_DHCP4_PROTOCOL *This, |
151 | IN UINTN seconds_timeout, |
152 | IN DHCP4_PACKET *offer_list |
153 | ) |
154 | ; |
155 | |
156 | extern |
157 | EFI_STATUS |
158 | EFIAPI |
159 | PxeDhcp4Renew ( |
160 | IN EFI_PXE_DHCP4_PROTOCOL *This, |
161 | UINTN seconds_timeout |
162 | ) |
163 | ; |
164 | |
165 | extern |
166 | EFI_STATUS |
167 | EFIAPI |
168 | PxeDhcp4Rebind ( |
169 | IN EFI_PXE_DHCP4_PROTOCOL *This, |
170 | UINTN seconds_timeout |
171 | ) |
172 | ; |
173 | |
174 | extern |
175 | EFI_STATUS |
176 | EFIAPI |
177 | PxeDhcp4Release ( |
178 | IN EFI_PXE_DHCP4_PROTOCOL *This |
179 | ) |
180 | ; |
181 | |
182 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ |
183 | |
184 | // |
185 | // Support function prototypes. |
186 | // |
187 | extern |
188 | UINT16 |
189 | htons ( |
190 | UINTN n |
191 | ) |
192 | ; |
193 | |
194 | extern |
195 | UINT32 |
196 | htonl ( |
197 | UINTN n |
198 | ) |
199 | ; |
200 | |
201 | extern |
202 | VOID |
203 | EFIAPI |
204 | timeout_notify ( |
205 | IN EFI_EVENT Event, |
206 | IN VOID *Context |
207 | ) |
208 | ; |
209 | |
210 | extern |
211 | VOID |
212 | EFIAPI |
213 | periodic_notify ( |
214 | IN EFI_EVENT Event, |
215 | IN VOID *Context |
216 | ) |
217 | ; |
218 | |
219 | extern |
220 | EFI_STATUS |
221 | find_opt ( |
222 | IN DHCP4_PACKET *Packet, |
223 | IN UINT8 OpCode, |
224 | IN UINTN Skip, |
225 | OUT DHCP4_OP **OpPtr |
226 | ) |
227 | ; |
228 | |
229 | extern |
230 | EFI_STATUS |
231 | add_opt ( |
232 | IN DHCP4_PACKET *Packet, |
233 | IN DHCP4_OP *OpPtr |
234 | ) |
235 | ; |
236 | |
237 | extern |
238 | EFI_STATUS |
239 | start_udp ( |
240 | IN PXE_DHCP4_PRIVATE_DATA *Private, |
241 | IN OPTIONAL EFI_IP_ADDRESS *station_ip, |
242 | IN OPTIONAL EFI_IP_ADDRESS *subnet_mask |
243 | ) |
244 | ; |
245 | |
246 | extern |
247 | VOID |
248 | stop_udp ( |
249 | IN PXE_DHCP4_PRIVATE_DATA *Private |
250 | ) |
251 | ; |
252 | |
253 | extern |
254 | EFI_STATUS |
255 | start_receive_events ( |
256 | IN PXE_DHCP4_PRIVATE_DATA *Private, |
257 | IN UINTN seconds_timeout |
258 | ) |
259 | ; |
260 | |
261 | extern |
262 | VOID |
263 | stop_receive_events ( |
264 | IN PXE_DHCP4_PRIVATE_DATA *Private |
265 | ) |
266 | ; |
267 | |
268 | extern |
269 | EFI_STATUS |
270 | tx_udp ( |
271 | IN PXE_DHCP4_PRIVATE_DATA *Private, |
272 | IN EFI_IP_ADDRESS *dest_ip, |
273 | IN OPTIONAL EFI_IP_ADDRESS *gateway_ip, |
274 | IN EFI_IP_ADDRESS *src_ip, |
275 | IN VOID *buffer, |
276 | IN UINTN BufferSize |
277 | ) |
278 | ; |
279 | |
280 | extern |
281 | EFI_STATUS |
282 | rx_udp ( |
283 | IN PXE_DHCP4_PRIVATE_DATA *Private, |
284 | OUT VOID *buffer, |
285 | OUT UINTN *BufferSize, |
286 | IN OUT EFI_IP_ADDRESS *dest_ip, |
287 | IN OUT EFI_IP_ADDRESS *src_ip, |
288 | IN UINT16 op_flags |
289 | ) |
290 | ; |
291 | |
292 | extern |
293 | EFI_STATUS |
294 | tx_rx_udp ( |
295 | IN PXE_DHCP4_PRIVATE_DATA *Private, |
296 | IN OUT EFI_IP_ADDRESS *ServerIp, |
297 | IN OPTIONAL EFI_IP_ADDRESS *gateway_ip, |
298 | IN OPTIONAL EFI_IP_ADDRESS *client_ip, |
299 | IN OPTIONAL EFI_IP_ADDRESS *subnet_mask, |
300 | IN DHCP4_PACKET *tx_pkt, |
301 | OUT DHCP4_PACKET *rx_pkt, |
302 | IN INTN |
303 | ( |
304 | *rx_vfy) |
305 | ( |
306 | IN PXE_DHCP4_PRIVATE_DATA *Private, |
307 | IN DHCP4_PACKET *tx_pkt, |
308 | IN DHCP4_PACKET *rx_pkt, |
309 | IN UINTN rx_pkt_size |
310 | ), |
311 | IN UINTN seconds_timeout |
312 | ) |
313 | ; |
314 | |
315 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ |
316 | |
317 | // |
318 | // Global variable definitions. |
319 | // |
320 | extern EFI_COMPONENT_NAME_PROTOCOL gPxeDhcp4ComponentName; |
321 | |
322 | EFI_STATUS |
323 | EFIAPI |
324 | PxeDhcp4DriverEntryPoint ( |
325 | IN EFI_HANDLE ImageHandle, |
326 | IN EFI_SYSTEM_TABLE *SystemTable |
327 | ) |
328 | /*++ |
329 | |
330 | Routine Description: |
331 | Register Driver Binding protocol for this driver. |
332 | |
333 | Arguments: |
334 | (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT) |
335 | |
336 | Returns: |
337 | EFI_SUCCESS - Driver loaded. |
338 | other - Driver not loaded. |
339 | |
340 | --*/ |
341 | ; |
342 | |
343 | #ifdef EFI_SIZE_REDUCTION_APPLIED |
344 | #define COMPONENT_NAME_CODE(code) |
345 | #define COMPONENT_NAME NULL |
346 | #else |
347 | #define COMPONENT_NAME_CODE(code) code |
348 | #define COMPONENT_NAME &gPxeDhcp4ComponentName |
349 | #endif |
350 | |
351 | #endif /* _PXEDHCP4_H */ |
352 | |
353 | /* EOF - PxeDhcp4.h */ |