3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #include <Library/BaseMemoryLib.h>
17 #include <Library/DebugLib.h>
18 #include <Library/UefiRuntimeServicesTableLib.h>
19 #include <Library/UefiBootServicesTableLib.h>
21 #include <Protocol/SimpleNetwork.h>
22 #include <Protocol/PxeBaseCode.h>
25 BOOLEAN gUseIpv6
= FALSE
;
29 EblGetCurrentIpAddress (
30 IN OUT EFI_IP_ADDRESS
*Ip
34 EFI_PXE_BASE_CODE_PROTOCOL
*Pxe
;
36 Status
= gBS
->LocateProtocol (&gEfiPxeBaseCodeProtocolGuid
, NULL
, (VOID
**)&Pxe
);
37 if (EFI_ERROR(Status
)) {
41 Status
= Pxe
->Start (Pxe
, gUseIpv6
);
42 if (EFI_ERROR(Status
) && (Status
!= EFI_ALREADY_STARTED
)) {
46 CopyMem (Ip
, &Pxe
->Mode
->StationIp
, sizeof (EFI_IP_ADDRESS
));
54 EblGetCurrentMacAddress (
55 IN OUT EFI_MAC_ADDRESS
*Mac
59 EFI_SIMPLE_NETWORK_PROTOCOL
*SimpleNet
;
61 Status
= gBS
->LocateProtocol (&gEfiSimpleNetworkProtocolGuid
, NULL
, (VOID
**)&SimpleNet
);
62 if (EFI_ERROR(Status
)) {
66 CopyMem (Mac
, SimpleNet
->Mode
->CurrentAddress
.Addr
, sizeof (EFI_MAC_ADDRESS
));
73 EblLoadFileBootTypeString (
80 Status
= gBS
->HandleProtocol (Handle
, &gEfiPxeBaseCodeProtocolGuid
, &NullPtr
);
81 if (!EFI_ERROR (Status
)) {
82 return "EFI PXE Network Boot";
95 EFI_PXE_BASE_CODE_PROTOCOL
*Pxe
;
97 Status
= gBS
->LocateProtocol (&gEfiPxeBaseCodeProtocolGuid
, NULL
, (VOID
**)&Pxe
);
98 if (EFI_ERROR(Status
)) {
102 Status
= Pxe
->Start (Pxe
, gUseIpv6
);
103 if (EFI_ERROR(Status
) && (Status
!= EFI_ALREADY_STARTED
)) {
107 Status
= Pxe
->Dhcp(Pxe
, TRUE
);
115 IN EFI_IP_ADDRESS
*NewStationIp
, OPTIONAL
116 IN EFI_IP_ADDRESS
*NewSubnetMask OPTIONAL
120 EFI_PXE_BASE_CODE_PROTOCOL
*Pxe
;
122 Status
= gBS
->LocateProtocol (&gEfiPxeBaseCodeProtocolGuid
, NULL
, (VOID
**)&Pxe
);
123 if (EFI_ERROR(Status
)) {
127 Status
= Pxe
->Start (Pxe
, gUseIpv6
);
128 if (EFI_ERROR(Status
) && (Status
!= EFI_ALREADY_STARTED
)) {
132 Status
= Pxe
->SetStationIp (Pxe
, NewStationIp
, NewSubnetMask
);
140 IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation
,
141 IN OUT VOID
*BufferPtr OPTIONAL
,
142 IN BOOLEAN Overwrite
,
143 IN OUT UINT64
*BufferSize
,
144 IN UINTN
*BlockSize OPTIONAL
,
145 IN EFI_IP_ADDRESS
*ServerIp
,
146 IN UINT8
*Filename OPTIONAL
,
147 IN EFI_PXE_BASE_CODE_MTFTP_INFO
*Info OPTIONAL
,
148 IN BOOLEAN DontUseBuffer
152 EFI_PXE_BASE_CODE_PROTOCOL
*Pxe
;
154 Status
= gBS
->LocateProtocol (&gEfiPxeBaseCodeProtocolGuid
, NULL
, (VOID
**)&Pxe
);
155 if (EFI_ERROR(Status
)) {
159 Status
= Pxe
->Mtftp (