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
130 IN EFI_PXE_DHCP4_PROTOCOL
*This
,
131 IN EFI_PXE_DHCP4_DATA
*Data
139 IN EFI_PXE_DHCP4_PROTOCOL
*This
,
140 IN UINTN seconds_timeout
,
141 OUT UINTN
*offer_list_entries
,
142 OUT DHCP4_PACKET
**offer_list
150 IN EFI_PXE_DHCP4_PROTOCOL
*This
,
151 IN UINTN seconds_timeout
,
152 IN DHCP4_PACKET
*offer_list
160 IN EFI_PXE_DHCP4_PROTOCOL
*This
,
161 UINTN seconds_timeout
169 IN EFI_PXE_DHCP4_PROTOCOL
*This
,
170 UINTN seconds_timeout
178 IN EFI_PXE_DHCP4_PROTOCOL
*This
182 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
185 // Support function prototypes.
222 IN DHCP4_PACKET
*Packet
,
232 IN DHCP4_PACKET
*Packet
,
240 IN PXE_DHCP4_PRIVATE_DATA
*Private
,
241 IN OPTIONAL EFI_IP_ADDRESS
*station_ip
,
242 IN OPTIONAL EFI_IP_ADDRESS
*subnet_mask
249 IN PXE_DHCP4_PRIVATE_DATA
*Private
255 start_receive_events (
256 IN PXE_DHCP4_PRIVATE_DATA
*Private
,
257 IN UINTN seconds_timeout
263 stop_receive_events (
264 IN PXE_DHCP4_PRIVATE_DATA
*Private
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
,
283 IN PXE_DHCP4_PRIVATE_DATA
*Private
,
285 OUT UINTN
*BufferSize
,
286 IN OUT EFI_IP_ADDRESS
*dest_ip
,
287 IN OUT EFI_IP_ADDRESS
*src_ip
,
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
,
306 IN PXE_DHCP4_PRIVATE_DATA
*Private
,
307 IN DHCP4_PACKET
*tx_pkt
,
308 IN DHCP4_PACKET
*rx_pkt
,
311 IN UINTN seconds_timeout
315 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
318 // Global variable definitions.
320 extern EFI_COMPONENT_NAME_PROTOCOL gPxeDhcp4ComponentName
;
324 PxeDhcp4DriverEntryPoint (
325 IN EFI_HANDLE ImageHandle
,
326 IN EFI_SYSTEM_TABLE
*SystemTable
331 Register Driver Binding protocol for this driver.
334 (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
337 EFI_SUCCESS - Driver loaded.
338 other - Driver not loaded.
343 #ifdef EFI_SIZE_REDUCTION_APPLIED
344 #define COMPONENT_NAME_CODE(code)
345 #define COMPONENT_NAME NULL
347 #define COMPONENT_NAME_CODE(code) code
348 #define COMPONENT_NAME &gPxeDhcp4ComponentName
351 #endif /* _PXEDHCP4_H */
353 /* EOF - PxeDhcp4.h */