## @file
#  This module produces EFI Preboot Execution Environment (PXE) Base Code Protocol.
#
#  This module produces EFI PXE Base Code Protocol upon EFI MMP Protocl and IPv4
#  network stack, used to control PXE-compatible devices. It produces EFI Load File
#  Protocol to provide one clean way to otain control from the boot manager if the
#  boot patch is from the remote device.
#
#  Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
#  This program and the accompanying materials
#  are licensed and made available under the terms and conditions of the BSD License
#  which accompanies this distribution. The full text of the license may be found at
#  http://opensource.org/licenses/bsd-license.php
#
#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#
##


[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = UefiPxe4BcDxe
  MODULE_UNI_FILE                = UefiPxe4BcDxe.uni
  FILE_GUID                      = 3B1DEAB5-C75D-442e-9238-8E2FFB62B0BB
  MODULE_TYPE                    = UEFI_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = PxeBcDriverEntryPoint
  UNLOAD_IMAGE                   = NetLibDefaultUnload

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64
#
#  DRIVER_BINDING                =  gPxeBcDriverBinding
#  COMPONENT_NAME                =  gPxeBcComponentName
#  COMPONENT_NAME2               =  gPxeBcComponentName2
#

[Sources]
  PxeBcMtftp.c
  PxeBcSupport.h
  PxeBcSupport.c
  PxeBcDriver.c
  PxeBcDhcp.h
  ComponentName.c
  PxeBcImpl.c
  PxeBcImpl.h
  PxeBcDhcp.c
  PxeBcMtftp.h
  PxeBcDriver.h


[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  BaseLib
  UefiLib
  UefiBootServicesTableLib
  UefiDriverEntryPoint
  BaseMemoryLib
  MemoryAllocationLib
  DebugLib
  NetLib
  DpcLib
  PcdLib

[Protocols]
  gEfiPxeBaseCodeCallbackProtocolGuid              ## SOMETIMES_PRODUCES
  gEfiPxeBaseCodeProtocolGuid                      ## BY_START
  gEfiLoadFileProtocolGuid                         ## BY_START
  gEfiNetworkInterfaceIdentifierProtocolGuid_31    ## SOMETIMES_CONSUMES
  gEfiArpServiceBindingProtocolGuid                ## TO_START
  gEfiArpProtocolGuid                              ## TO_START
  gEfiMtftp4ServiceBindingProtocolGuid             ## TO_START
  gEfiMtftp4ProtocolGuid                           ## TO_START
  gEfiUdp4ServiceBindingProtocolGuid               ## TO_START
  gEfiUdp4ProtocolGuid                             ## TO_START
  gEfiDhcp4ServiceBindingProtocolGuid              ## TO_START
  gEfiDhcp4ProtocolGuid                            ## TO_START
  gEfiIp4ServiceBindingProtocolGuid                ## TO_START
  gEfiIp4ProtocolGuid                              ## TO_START
  gEfiIp4Config2ProtocolGuid                       ## TO_START

[Pcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdTftpBlockSize  ## SOMETIMES_CONSUMES

[UserExtensions.TianoCore."ExtraFiles"]
  UefiPxe4BcDxeExtra.uni
