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
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.
16 Common header for PxeDhcp4 protocol driver
26 #include <Protocol/PxeBaseCode.h>
27 #include <Protocol/SimpleNetwork.h>
28 #include <Protocol/PxeDhcp4.h>
29 #include <Protocol/PxeDhcp4CallBack.h>
31 #include <Library/DebugLib.h>
32 #include <Library/BaseMemoryLib.h>
33 #include <Library/MemoryAllocationLib.h>
34 #include <Library/UefiDriverEntryPoint.h>
35 #include <Library/UefiBootServicesTableLib.h>
36 #include <Library/UefiLib.h>
38 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
41 // PxeDhcp4 protocol instance data
45 // Signature field used to locate beginning of containment record.
49 #define PXE_DHCP4_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('p', 'x', 'D', '4')
51 // Device handle the protocol is bound to.
56 // Public PxeDhcp4 protocol interface.
58 EFI_PXE_DHCP4_PROTOCOL PxeDhcp4
;
61 // Consumed PxeBc, Snp and PxeDhcp4Callback protocol interfaces.
63 EFI_PXE_BASE_CODE_PROTOCOL
*PxeBc
;
64 EFI_SIMPLE_NETWORK_PROTOCOL
*Snp
;
65 EFI_PXE_DHCP4_CALLBACK_PROTOCOL
*callback
;
68 // PxeDhcp4 called function for PxeDhcp4Callback.
70 EFI_PXE_DHCP4_FUNCTION function
;
73 // Timeout event and flag for PxeDhcp4Callback.
75 EFI_EVENT TimeoutEvent
;
76 BOOLEAN TimeoutOccurred
;
79 // Periodic event and flag for PxeDhcp4Callback.
81 EFI_EVENT PeriodicEvent
;
82 BOOLEAN PeriodicOccurred
;
85 // DHCP server IP address.
90 // DHCP renewal and rebinding times, in seconds.
97 // Number of offers received & allocated offer list.
100 DHCP4_PACKET
*offer_list
;
107 } PXE_DHCP4_PRIVATE_DATA
;
109 #define PXE_DHCP4_PRIVATE_DATA_FROM_THIS(a) CR (a, PXE_DHCP4_PRIVATE_DATA, PxeDhcp4, PXE_DHCP4_PRIVATE_DATA_SIGNATURE)
111 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
114 // Protocol function prototypes.
120 IN EFI_PXE_DHCP4_PROTOCOL
*This
,
121 IN OPTIONAL UINTN OpLen
,
122 IN OPTIONAL VOID
*OpList
129 IN EFI_PXE_DHCP4_PROTOCOL
*This
,
130 IN EFI_PXE_DHCP4_DATA
*Data
137 IN EFI_PXE_DHCP4_PROTOCOL
*This
,
138 IN UINTN seconds_timeout
,
139 OUT UINTN
*offer_list_entries
,
140 OUT DHCP4_PACKET
**offer_list
147 IN EFI_PXE_DHCP4_PROTOCOL
*This
,
148 IN UINTN seconds_timeout
,
149 IN DHCP4_PACKET
*offer_list
156 IN EFI_PXE_DHCP4_PROTOCOL
*This
,
157 UINTN seconds_timeout
164 IN EFI_PXE_DHCP4_PROTOCOL
*This
,
165 UINTN seconds_timeout
172 IN EFI_PXE_DHCP4_PROTOCOL
*This
175 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
178 // Support function prototypes.
211 IN DHCP4_PACKET
*Packet
,
220 IN DHCP4_PACKET
*Packet
,
227 IN PXE_DHCP4_PRIVATE_DATA
*Private
,
228 IN OPTIONAL EFI_IP_ADDRESS
*station_ip
,
229 IN OPTIONAL EFI_IP_ADDRESS
*subnet_mask
235 IN PXE_DHCP4_PRIVATE_DATA
*Private
240 start_receive_events (
241 IN PXE_DHCP4_PRIVATE_DATA
*Private
,
242 IN UINTN seconds_timeout
247 stop_receive_events (
248 IN PXE_DHCP4_PRIVATE_DATA
*Private
254 IN PXE_DHCP4_PRIVATE_DATA
*Private
,
255 IN EFI_IP_ADDRESS
*dest_ip
,
256 IN OPTIONAL EFI_IP_ADDRESS
*gateway_ip
,
257 IN EFI_IP_ADDRESS
*src_ip
,
265 IN PXE_DHCP4_PRIVATE_DATA
*Private
,
267 OUT UINTN
*BufferSize
,
268 IN OUT EFI_IP_ADDRESS
*dest_ip
,
269 IN OUT EFI_IP_ADDRESS
*src_ip
,
276 IN PXE_DHCP4_PRIVATE_DATA
*Private
,
277 IN OUT EFI_IP_ADDRESS
*ServerIp
,
278 IN OPTIONAL EFI_IP_ADDRESS
*gateway_ip
,
279 IN OPTIONAL EFI_IP_ADDRESS
*client_ip
,
280 IN OPTIONAL EFI_IP_ADDRESS
*subnet_mask
,
281 IN DHCP4_PACKET
*tx_pkt
,
282 OUT DHCP4_PACKET
*rx_pkt
,
287 IN PXE_DHCP4_PRIVATE_DATA
*Private
,
288 IN DHCP4_PACKET
*tx_pkt
,
289 IN DHCP4_PACKET
*rx_pkt
,
292 IN UINTN seconds_timeout
295 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
298 // Global variable definitions.
300 extern EFI_COMPONENT_NAME_PROTOCOL gPxeDhcp4ComponentName
;
301 extern EFI_COMPONENT_NAME2_PROTOCOL gPxeDhcp4ComponentName2
;
305 PxeDhcp4DriverEntryPoint (
306 IN EFI_HANDLE ImageHandle
,
307 IN EFI_SYSTEM_TABLE
*SystemTable
312 Register Driver Binding protocol for this driver.
315 (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
318 EFI_SUCCESS - Driver loaded.
319 other - Driver not loaded.
324 #endif /* _PXEDHCP4_H */
326 /* EOF - PxeDhcp4.h */