-/** @file
-
-Copyright (c) 2004 - 2007, Intel Corporation
-All rights reserved. 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.
-
-Module Name:
- bc.h
-
-Abstract:
-
-
-**/
-
-#ifndef _BC_H
-#define _BC_H
-
+/** @file\r
+\r
+Copyright (c) 2004 - 2007, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+Module Name:\r
+ bc.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _BC_H\r
+#define _BC_H\r
+\r
#include <PiDxe.h>\r
\r
#include <Guid/SmBios.h>\r
+#include <IndustryStandard/Smbios.h>\r
#include <Protocol/Bis.h>\r
#include <Protocol/PxeBaseCode.h>\r
#include <Protocol/PxeBaseCodeCallBack.h>\r
#include <Protocol/NetworkInterfaceIdentifier.h>\r
#include <Protocol/SimpleNetwork.h>\r
#include <Protocol/LoadFile.h>\r
-#include <Protocol/DevicePath.h>
+#include <Protocol/DevicePath.h>\r
#include <Protocol/Tcp.h>\r
\r
#include <Library/DebugLib.h>\r
-#include <Library/BaseMemoryLib.h>
+#include <Library/BaseMemoryLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
#include <Library/UefiDriverEntryPoint.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
#include <Library/BaseLib.h>\r
-#include <Library/UefiLib.h>
-
-#define CALLBACK_INTERVAL 100 // ten times a second
-#define FILTER_BITS (EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP | \
- EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST | \
- EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS | \
- EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST \
- )
-
-#define WAIT_TX_TIMEOUT 1000
-
-#define SUPPORT_IPV6 0
-
-#define PXE_BASECODE_DEVICE_SIGNATURE 'pxed'
-
-//
-// Determine the classes of IPv4 address
-//
-#define IS_CLASSA_IPADDR(x) ((((EFI_IP_ADDRESS*)x)->v4.Addr[0] & 0x80) == 0x00)
-#define IS_CLASSB_IPADDR(x) ((((EFI_IP_ADDRESS*)x)->v4.Addr[0] & 0xc0) == 0x80)
-#define IS_CLASSC_IPADDR(x) ((((EFI_IP_ADDRESS*)x)->v4.Addr[0] & 0xe0) == 0xc0)
-#define IS_INADDR_UNICAST(x) ((IS_CLASSA_IPADDR(x) || IS_CLASSB_IPADDR(x) || IS_CLASSC_IPADDR(x)) && (((EFI_IP_ADDRESS*)x)->Addr[0] != 0) )
-
-//
-// Definitions for internet group management protocol version 2 message
-// structure
-// Per RFC 2236, November 1997
-//
-#pragma pack(1)
-
-typedef struct {
- UINT8 Type;
- UINT8 MaxRespTime; // in tenths of a second
- UINT16 Checksum; // ones complement of ones complement sum of
- // 16 bit words of message
- UINT32 GroupAddress; // for general query, all systems group,
- // for group specific, the group
-} IGMPV2_MESSAGE;
-
-#define IGMP_TYPE_QUERY 0x11
-#define IGMP_TYPE_REPORT 0x16
-#define IGMP_TYPE_V1REPORT 0x12
-#define IGMP_TYPE_LEAVE_GROUP 0x17
-
-#define IGMP_DEFAULT_MAX_RESPONSE_TIME 10 // 10 second default
-#pragma pack()
-
-#define MAX_MCAST_GROUPS 8 // most we allow ourselves to join at once
-#define MAX_OFFERS 16
-
-typedef struct {
- UINTN Signature;
- EFI_LOCK Lock;
- BOOLEAN ShowErrorMessages;
- EFI_TCP_PROTOCOL Tcp;
- EFI_PXE_BASE_CODE_PROTOCOL EfiBc;
- EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL *CallbackProtocolPtr;
- EFI_HANDLE Handle;
-
- EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL *NiiPtr;
- EFI_SIMPLE_NETWORK_PROTOCOL *SimpleNetwork;
- UINT8 *TransmitBufferPtr;
- UINT8 *ReceiveBufferPtr;
- EFI_PXE_BASE_CODE_FUNCTION Function;
-
- UINTN OldestArpEntry;
- UINTN MCastGroupCount;
- EFI_EVENT Igmpv1TimeoutEvent;
- BOOLEAN UseIgmpv1Reporting;
- EFI_EVENT IgmpGroupEvent[MAX_MCAST_GROUPS];
- UINT16 RandomPort;
-
-#if SUPPORT_IPV6
- //
- // TBD
- //
-#else
- UINT32 MCastGroup[MAX_MCAST_GROUPS];
-#endif
-
- BOOLEAN GoodStationIp;
- BOOLEAN DidTransmit;
- UINTN IpLength;
- VOID *DhcpPacketBuffer;
- UINTN FileSize;
- VOID *BootServerReceiveBuffer;
- EFI_IP_ADDRESS ServerIp;
-
- //
- // work area
- // for dhcp
- //
- VOID *ReceiveBuffers;
- VOID *TransmitBuffer;
- UINTN NumOffersReceived;
- UINT16 TotalSeconds;
-
- //
- // arrays for different types of offers
- //
- UINT8 ServerCount[4];
- UINT8 OfferCount[4][MAX_OFFERS];
- UINT8 GotBootp;
- UINT8 GotProxy[4];
- UINT8 BinlProxies[MAX_OFFERS];
-
- UINT8 *ArpBuffer;
- UINT8 *TftpAckBuffer;
- UINT8 *TftpErrorBuffer;
- IGMPV2_MESSAGE IgmpMessage;
- BOOLEAN BigBlkNumFlag;
- UINT8 Timeout;
- UINT16 RandomSeed;
-} PXE_BASECODE_DEVICE;
-
-//
-// type index
-//
-#define DHCP_ONLY_IX 0
-#define PXE10_IX 1
-#define WfM11a_IX 2
-#define BINL_IX 3
-
-#define PXE_RND_PORT_LOW 2070
-
-//
-//
-//
-#define LOADFILE_DEVICE_SIGNATURE 'pxel'
-
-typedef struct {
- UINTN Signature;
- EFI_LOCK Lock;
- EFI_LOAD_FILE_PROTOCOL LoadFile;
- PXE_BASECODE_DEVICE *Private;
-} LOADFILE_DEVICE;
-
-#define EFI_BASE_CODE_DEV_FROM_THIS(a) CR (a, PXE_BASECODE_DEVICE, efi_bc, PXE_BASECODE_DEVICE_SIGNATURE);
-
-#define EFI_BASE_CODE_DEV_FROM_TCP(a) CR (a, PXE_BASECODE_DEVICE, Tcp, PXE_BASECODE_DEVICE_SIGNATURE);
-
-#define EFI_LOAD_FILE_DEV_FROM_THIS(a) CR (a, LOADFILE_DEVICE, LoadFile, LOADFILE_DEVICE_SIGNATURE)
-
-EFI_BIS_PROTOCOL *
-PxebcBisStart (
- PXE_BASECODE_DEVICE *Private,
- BIS_APPLICATION_HANDLE *BisAppHandle,
- EFI_BIS_DATA **BisDataSigInfo
- )
-;
-
-VOID
-PxebcBisStop (
- EFI_BIS_PROTOCOL *Bis,
- BIS_APPLICATION_HANDLE BisAppHandle,
- EFI_BIS_DATA *BisDataSigInfo
- )
-;
-
-BOOLEAN
-PxebcBisVerify (
- PXE_BASECODE_DEVICE *Private,
- VOID *FileBuffer,
- UINTN FileBufferLength,
- VOID *CredentialBuffer,
- UINTN CredentialBufferLength
- )
-;
-
-BOOLEAN
-PxebcBisDetect (
- PXE_BASECODE_DEVICE *Private
- )
-;
-
-//
-// Global Variables
-//
-extern EFI_COMPONENT_NAME_PROTOCOL gPxeBcComponentName;
-
-//
-// //////////////////////////////////////////////////////////
-//
-// prototypes
-//
-
-/**
- Initialize the base code drivers and install the driver binding
-
- Standard EFI Image Entry
-
- @retval EFI_SUCCESS This driver was successfully bound
-
-**/
-EFI_STATUS
-EFIAPI
-InitializeBCDriver (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-;
-
-EFI_STATUS
-EFIAPI
-BcStart (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN BOOLEAN UseIpv6
- )
-;
-
-EFI_STATUS
-EFIAPI
-BcStop (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This
- )
-;
-
-EFI_STATUS
-EFIAPI
-BcDhcp (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN BOOLEAN SortOffers
- )
-;
-
-EFI_STATUS
-EFIAPI
-BcDiscover (
- IN EFI_PXE_BASE_CODE_PROTOCOL * This,
- IN UINT16 Type,
- IN UINT16 *Layer,
- IN BOOLEAN UseBis,
- IN EFI_PXE_BASE_CODE_DISCOVER_INFO * Info OPTIONAL
- )
-;
-
-EFI_STATUS
-EFIAPI
-BcMtftp (
- IN EFI_PXE_BASE_CODE_PROTOCOL * This,
- IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,
- IN OUT VOID *BufferPtr,
- IN BOOLEAN Overwrite,
- IN OUT UINT64 *BufferSize,
- IN UINTN *BlockSize OPTIONAL,
- IN EFI_IP_ADDRESS * ServerIp,
- IN UINT8 *Filename,
- IN EFI_PXE_BASE_CODE_MTFTP_INFO * Info OPTIONAL,
- IN BOOLEAN DontUseBuffer
- )
-;
-
-EFI_STATUS
-EFIAPI
-BcUdpWrite (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN UINT16 OpFlags,
- IN EFI_IP_ADDRESS *DestIp,
- IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort,
- IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL
- IN EFI_IP_ADDRESS *SrcIp, OPTIONAL
- IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL
- IN UINTN *HeaderSize, OPTIONAL
- IN VOID *HeaderPtr, OPTIONAL
- IN UINTN *BufferSize,
- IN VOID *BufferPtr
- )
-;
-
-EFI_STATUS
-EFIAPI
-BcUdpRead (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN UINT16 OpFlags,
- IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL
- IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort, OPTIONAL
- IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL
- IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL
- IN UINTN *HeaderSize, OPTIONAL
- IN VOID *HeaderPtr, OPTIONAL
- IN OUT UINTN *BufferSize,
- IN VOID *BufferPtr
- )
-;
-
-EFI_STATUS
-EFIAPI
-BcTcpWrite (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN UINT16 OpFlags,
- IN UINT16 *UrgentPointer,
- IN UINT32 *SequenceNumber,
- IN UINT32 *AckNumber,
- IN UINT16 *HlenResCode,
- IN UINT16 *Window,
- IN EFI_IP_ADDRESS *DestIp,
- IN EFI_PXE_BASE_CODE_TCP_PORT *DestPort,
- IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL
- IN EFI_IP_ADDRESS *SrcIp, OPTIONAL
- IN OUT EFI_PXE_BASE_CODE_TCP_PORT *SrcPort, OPTIONAL
- IN UINTN *HeaderSize, OPTIONAL
- IN VOID *HeaderPtr, OPTIONAL
- IN UINTN *BufferSize,
- IN VOID *BufferPtr
- )
-;
-
-EFI_STATUS
-EFIAPI
-BcTcpRead (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN UINT16 OpFlags,
- IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL
- IN OUT EFI_PXE_BASE_CODE_TCP_PORT *DestPort, OPTIONAL
- IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL
- IN OUT EFI_PXE_BASE_CODE_TCP_PORT *SrcPort, OPTIONAL
- IN UINTN *HeaderSize, OPTIONAL
- IN VOID *HeaderPtr, OPTIONAL
- IN OUT UINTN *BufferSize,
- IN VOID *BufferPtr
- )
-;
-
-EFI_STATUS
-EFIAPI
-BcArp (
- IN EFI_PXE_BASE_CODE_PROTOCOL * This,
- IN EFI_IP_ADDRESS * IpAddr,
- IN EFI_MAC_ADDRESS * MacAddr OPTIONAL
- )
-;
-
-EFI_STATUS
-EFIAPI
-BcIpFilter (
- IN EFI_PXE_BASE_CODE_PROTOCOL *This,
- IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter
- )
-;
-
-EFI_STATUS
-EFIAPI
-BcSetParameters (
- IN EFI_PXE_BASE_CODE_PROTOCOL * This,
- IN BOOLEAN *NewAutoArp, OPTIONAL
- IN BOOLEAN *NewSendGUID, OPTIONAL
- IN UINT8 *NewTTL, OPTIONAL
- IN UINT8 *NewToS, OPTIONAL
- IN BOOLEAN *NewMakeCallback OPTIONAL
- )
-;
-
-EFI_STATUS
-EFIAPI
-BcSetStationIP (
- IN EFI_PXE_BASE_CODE_PROTOCOL * This,
- IN EFI_IP_ADDRESS * NewStationIp, OPTIONAL
- IN EFI_IP_ADDRESS * NewSubnetMask OPTIONAL
- )
-;
-
-EFI_STATUS
-EFIAPI
-BcSetPackets (
- IN EFI_PXE_BASE_CODE_PROTOCOL * This,
- BOOLEAN *NewDhcpDiscoverValid, OPTIONAL
- BOOLEAN *NewDhcpAckReceived, OPTIONAL
- BOOLEAN *NewProxyOfferReceived, OPTIONAL
- BOOLEAN *NewPxeDiscoverValid, OPTIONAL
- BOOLEAN *NewPxeReplyReceived, OPTIONAL
- BOOLEAN *NewPxeBisReplyReceived, OPTIONAL
- IN EFI_PXE_BASE_CODE_PACKET * NewDhcpDiscover, OPTIONAL
- IN EFI_PXE_BASE_CODE_PACKET * NewDhcpAck, OPTIONAL
- IN EFI_PXE_BASE_CODE_PACKET * NewProxyOffer, OPTIONAL
- IN EFI_PXE_BASE_CODE_PACKET * NewPxeDiscover, OPTIONAL
- IN EFI_PXE_BASE_CODE_PACKET * NewPxeReply, OPTIONAL
- IN EFI_PXE_BASE_CODE_PACKET * NewPxeBisReply OPTIONAL
- )
-;
-
-EFI_STATUS
-EFIAPI
-LoadFile (
- IN EFI_LOAD_FILE_PROTOCOL *This,
- IN EFI_DEVICE_PATH_PROTOCOL *FilePath,
- IN BOOLEAN BootPolicy,
- IN OUT UINTN *BufferSize,
- IN VOID *Buffer
- )
-;
-
-EFI_STATUS
-PxeBcLibGetSmbiosSystemGuidAndSerialNumber (
- IN EFI_GUID *SystemGuid,
- OUT CHAR8 **SystemSerialNumber
- )
-;
-
-#ifdef EFI_SIZE_REDUCTION_APPLIED
- #define COMPONENT_NAME_CODE(code)
- #define COMPONENT_NAME NULL
-#else
- #define COMPONENT_NAME_CODE(code) code
- #define COMPONENT_NAME &gPxeBcComponentName
-#endif
-
-
-//
-// Define SMBIOS tables.
-//
-#pragma pack(1)
-typedef struct {
- UINT8 AnchorString[4];
- UINT8 EntryPointStructureChecksum;
- UINT8 EntryPointLength;
- UINT8 MajorVersion;
- UINT8 MinorVersion;
- UINT16 MaxStructureSize;
- UINT8 EntryPointRevision;
- UINT8 FormattedArea[5];
- UINT8 IntermediateAnchorString[5];
- UINT8 IntermediateChecksum;
- UINT16 TableLength;
- UINT32 TableAddress;
- UINT16 NumberOfSmbiosStructures;
- UINT8 SmbiosBcdRevision;
-} SMBIOS_STRUCTURE_TABLE;
-
-//
-// Please note that SMBIOS structures can be odd byte aligned since the
-// unformated section of each record is a set of arbitrary size strings.
-//
-typedef struct {
- UINT8 Type;
- UINT8 Length;
- UINT8 Handle[2];
-} SMBIOS_HEADER;
-
-typedef UINT8 SMBIOS_STRING;
-
-typedef struct {
- SMBIOS_HEADER Hdr;
- SMBIOS_STRING Vendor;
- SMBIOS_STRING BiosVersion;
- UINT8 BiosSegment[2];
- SMBIOS_STRING BiosReleaseDate;
- UINT8 BiosSize;
- UINT8 BiosCharacteristics[8];
-} SMBIOS_TYPE0;
-
-typedef struct {
- SMBIOS_HEADER Hdr;
- SMBIOS_STRING Manufacturer;
- SMBIOS_STRING ProductName;
- SMBIOS_STRING Version;
- SMBIOS_STRING SerialNumber;
-
- //
- // always byte copy this data to prevent alignment faults!
- //
- EFI_GUID Uuid;
-
- UINT8 WakeUpType;
-} SMBIOS_TYPE1;
-
-typedef struct {
- SMBIOS_HEADER Hdr;
- SMBIOS_STRING Manufacturer;
- SMBIOS_STRING ProductName;
- SMBIOS_STRING Version;
- SMBIOS_STRING SerialNumber;
-} SMBIOS_TYPE2;
-
-typedef struct {
- SMBIOS_HEADER Hdr;
- SMBIOS_STRING Manufacturer;
- UINT8 Type;
- SMBIOS_STRING Version;
- SMBIOS_STRING SerialNumber;
- SMBIOS_STRING AssetTag;
- UINT8 BootupState;
- UINT8 PowerSupplyState;
- UINT8 ThermalState;
- UINT8 SecurityStatus;
- UINT8 OemDefined[4];
-} SMBIOS_TYPE3;
-
-typedef struct {
- SMBIOS_HEADER Hdr;
- UINT8 Socket;
- UINT8 ProcessorType;
- UINT8 ProcessorFamily;
- SMBIOS_STRING ProcessorManufacture;
- UINT8 ProcessorId[8];
- SMBIOS_STRING ProcessorVersion;
- UINT8 Voltage;
- UINT8 ExternalClock[2];
- UINT8 MaxSpeed[2];
- UINT8 CurrentSpeed[2];
- UINT8 Status;
- UINT8 ProcessorUpgrade;
- UINT8 L1CacheHandle[2];
- UINT8 L2CacheHandle[2];
- UINT8 L3CacheHandle[2];
-} SMBIOS_TYPE4;
-
-typedef union {
- SMBIOS_HEADER *Hdr;
- SMBIOS_TYPE0 *Type0;
- SMBIOS_TYPE1 *Type1;
- SMBIOS_TYPE2 *Type2;
- SMBIOS_TYPE3 *Type3;
- SMBIOS_TYPE4 *Type4;
- UINT8 *Raw;
-} SMBIOS_STRUCTURE_POINTER;
-#pragma pack()
-
-#include "ip.h"
-#include "dhcp.h"
-#include "tftp.h"
-
-#endif /* _BC_H */
-
-/* EOF - bc.h */
+#include <Library/UefiLib.h>\r
+\r
+#define CALLBACK_INTERVAL 100 // ten times a second\r
+#define FILTER_BITS (EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP | \\r
+ EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST | \\r
+ EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS | \\r
+ EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST \\r
+ )\r
+\r
+#define WAIT_TX_TIMEOUT 1000\r
+\r
+#define SUPPORT_IPV6 0\r
+\r
+#define PXE_BASECODE_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('p', 'x', 'e', 'd')\r
+\r
+//\r
+// Determine the classes of IPv4 address\r
+//\r
+#define IS_CLASSA_IPADDR(x) ((((EFI_IP_ADDRESS*)x)->v4.Addr[0] & 0x80) == 0x00)\r
+#define IS_CLASSB_IPADDR(x) ((((EFI_IP_ADDRESS*)x)->v4.Addr[0] & 0xc0) == 0x80)\r
+#define IS_CLASSC_IPADDR(x) ((((EFI_IP_ADDRESS*)x)->v4.Addr[0] & 0xe0) == 0xc0)\r
+#define IS_INADDR_UNICAST(x) ((IS_CLASSA_IPADDR(x) || IS_CLASSB_IPADDR(x) || IS_CLASSC_IPADDR(x)) && (((EFI_IP_ADDRESS*)x)->Addr[0] != 0) )\r
+\r
+//\r
+// Definitions for internet group management protocol version 2 message\r
+// structure\r
+// Per RFC 2236, November 1997\r
+//\r
+#pragma pack(1)\r
+\r
+typedef struct {\r
+ UINT8 Type;\r
+ UINT8 MaxRespTime; // in tenths of a second\r
+ UINT16 Checksum; // ones complement of ones complement sum of\r
+ // 16 bit words of message\r
+ UINT32 GroupAddress; // for general query, all systems group,\r
+ // for group specific, the group\r
+} IGMPV2_MESSAGE;\r
+\r
+#define IGMP_TYPE_QUERY 0x11\r
+#define IGMP_TYPE_REPORT 0x16\r
+#define IGMP_TYPE_V1REPORT 0x12\r
+#define IGMP_TYPE_LEAVE_GROUP 0x17\r
+\r
+#define IGMP_DEFAULT_MAX_RESPONSE_TIME 10 // 10 second default\r
+#pragma pack()\r
+\r
+#define MAX_MCAST_GROUPS 8 // most we allow ourselves to join at once\r
+#define MAX_OFFERS 16\r
+\r
+typedef struct {\r
+ UINTN Signature;\r
+ EFI_LOCK Lock;\r
+ BOOLEAN ShowErrorMessages;\r
+ EFI_TCP_PROTOCOL Tcp;\r
+ EFI_PXE_BASE_CODE_PROTOCOL EfiBc;\r
+ EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL *CallbackProtocolPtr;\r
+ EFI_HANDLE Handle;\r
+\r
+ EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL *NiiPtr;\r
+ EFI_SIMPLE_NETWORK_PROTOCOL *SimpleNetwork;\r
+ UINT8 *TransmitBufferPtr;\r
+ UINT8 *ReceiveBufferPtr;\r
+ EFI_PXE_BASE_CODE_FUNCTION Function;\r
+\r
+ UINTN OldestArpEntry;\r
+ UINTN MCastGroupCount;\r
+ EFI_EVENT Igmpv1TimeoutEvent;\r
+ BOOLEAN UseIgmpv1Reporting;\r
+ EFI_EVENT IgmpGroupEvent[MAX_MCAST_GROUPS];\r
+ UINT16 RandomPort;\r
+\r
+#if SUPPORT_IPV6\r
+ //\r
+ // TBD\r
+ //\r
+#else\r
+ UINT32 MCastGroup[MAX_MCAST_GROUPS];\r
+#endif\r
+\r
+ BOOLEAN GoodStationIp;\r
+ BOOLEAN DidTransmit;\r
+ UINTN IpLength;\r
+ VOID *DhcpPacketBuffer;\r
+ UINTN FileSize;\r
+ VOID *BootServerReceiveBuffer;\r
+ EFI_IP_ADDRESS ServerIp;\r
+\r
+ //\r
+ // work area\r
+ // for dhcp\r
+ //\r
+ VOID *ReceiveBuffers;\r
+ VOID *TransmitBuffer;\r
+ UINTN NumOffersReceived;\r
+ UINT16 TotalSeconds;\r
+\r
+ //\r
+ // arrays for different types of offers\r
+ //\r
+ UINT8 ServerCount[4];\r
+ UINT8 OfferCount[4][MAX_OFFERS];\r
+ UINT8 GotBootp;\r
+ UINT8 GotProxy[4];\r
+ UINT8 BinlProxies[MAX_OFFERS];\r
+\r
+ UINT8 *ArpBuffer;\r
+ UINT8 *TftpAckBuffer;\r
+ UINT8 *TftpErrorBuffer;\r
+ IGMPV2_MESSAGE IgmpMessage;\r
+ BOOLEAN BigBlkNumFlag;\r
+ UINT8 Timeout;\r
+ UINT16 RandomSeed;\r
+} PXE_BASECODE_DEVICE;\r
+\r
+//\r
+// type index\r
+//\r
+#define DHCP_ONLY_IX 0\r
+#define PXE10_IX 1\r
+#define WfM11a_IX 2\r
+#define BINL_IX 3\r
+\r
+#define PXE_RND_PORT_LOW 2070\r
+\r
+//\r
+//\r
+//\r
+#define LOADFILE_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('p', 'x', 'e', 'l')\r
+\r
+typedef struct {\r
+ UINTN Signature;\r
+ EFI_LOCK Lock;\r
+ EFI_LOAD_FILE_PROTOCOL LoadFile;\r
+ PXE_BASECODE_DEVICE *Private;\r
+} LOADFILE_DEVICE;\r
+\r
+#define EFI_BASE_CODE_DEV_FROM_THIS(a) CR (a, PXE_BASECODE_DEVICE, efi_bc, PXE_BASECODE_DEVICE_SIGNATURE);\r
+\r
+#define EFI_BASE_CODE_DEV_FROM_TCP(a) CR (a, PXE_BASECODE_DEVICE, Tcp, PXE_BASECODE_DEVICE_SIGNATURE);\r
+\r
+#define EFI_LOAD_FILE_DEV_FROM_THIS(a) CR (a, LOADFILE_DEVICE, LoadFile, LOADFILE_DEVICE_SIGNATURE)\r
+\r
+EFI_BIS_PROTOCOL *\r
+PxebcBisStart (\r
+ PXE_BASECODE_DEVICE *Private,\r
+ BIS_APPLICATION_HANDLE *BisAppHandle,\r
+ EFI_BIS_DATA **BisDataSigInfo\r
+ )\r
+;\r
+\r
+VOID\r
+PxebcBisStop (\r
+ EFI_BIS_PROTOCOL *Bis,\r
+ BIS_APPLICATION_HANDLE BisAppHandle,\r
+ EFI_BIS_DATA *BisDataSigInfo\r
+ )\r
+;\r
+\r
+BOOLEAN\r
+PxebcBisVerify (\r
+ PXE_BASECODE_DEVICE *Private,\r
+ VOID *FileBuffer,\r
+ UINTN FileBufferLength,\r
+ VOID *CredentialBuffer,\r
+ UINTN CredentialBufferLength\r
+ )\r
+;\r
+\r
+BOOLEAN\r
+PxebcBisDetect (\r
+ PXE_BASECODE_DEVICE *Private\r
+ )\r
+;\r
+\r
+//\r
+// Global Variables\r
+//\r
+extern EFI_COMPONENT_NAME_PROTOCOL gPxeBcComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gPxeBcComponentName2;\r
+\r
+//\r
+// //////////////////////////////////////////////////////////\r
+//\r
+// prototypes\r
+//\r
+\r
+/**\r
+ Initialize the base code drivers and install the driver binding\r
+\r
+ Standard EFI Image Entry\r
+\r
+ @retval EFI_SUCCESS This driver was successfully bound\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+InitializeBCDriver (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+BcStart (\r
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
+ IN BOOLEAN UseIpv6\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+BcStop (\r
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+BcDhcp (\r
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
+ IN BOOLEAN SortOffers\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+BcDiscover (\r
+ IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
+ IN UINT16 Type,\r
+ IN UINT16 *Layer,\r
+ IN BOOLEAN UseBis,\r
+ IN EFI_PXE_BASE_CODE_DISCOVER_INFO * Info OPTIONAL\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+BcMtftp (\r
+ IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
+ IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,\r
+ IN OUT VOID *BufferPtr,\r
+ IN BOOLEAN Overwrite,\r
+ IN OUT UINT64 *BufferSize,\r
+ IN UINTN *BlockSize OPTIONAL,\r
+ IN EFI_IP_ADDRESS * ServerIp,\r
+ IN UINT8 *Filename,\r
+ IN EFI_PXE_BASE_CODE_MTFTP_INFO * Info OPTIONAL,\r
+ IN BOOLEAN DontUseBuffer\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+BcUdpWrite (\r
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
+ IN UINT16 OpFlags,\r
+ IN EFI_IP_ADDRESS *DestIp,\r
+ IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort,\r
+ IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL\r
+ IN EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
+ IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL\r
+ IN UINTN *HeaderSize, OPTIONAL\r
+ IN VOID *HeaderPtr, OPTIONAL\r
+ IN UINTN *BufferSize,\r
+ IN VOID *BufferPtr\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+BcUdpRead (\r
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
+ IN UINT16 OpFlags,\r
+ IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL\r
+ IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort, OPTIONAL\r
+ IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
+ IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL\r
+ IN UINTN *HeaderSize, OPTIONAL\r
+ IN VOID *HeaderPtr, OPTIONAL\r
+ IN OUT UINTN *BufferSize,\r
+ IN VOID *BufferPtr\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+BcTcpWrite (\r
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
+ IN UINT16 OpFlags,\r
+ IN UINT16 *UrgentPointer,\r
+ IN UINT32 *SequenceNumber,\r
+ IN UINT32 *AckNumber,\r
+ IN UINT16 *HlenResCode,\r
+ IN UINT16 *Window,\r
+ IN EFI_IP_ADDRESS *DestIp,\r
+ IN EFI_PXE_BASE_CODE_TCP_PORT *DestPort,\r
+ IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL\r
+ IN EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
+ IN OUT EFI_PXE_BASE_CODE_TCP_PORT *SrcPort, OPTIONAL\r
+ IN UINTN *HeaderSize, OPTIONAL\r
+ IN VOID *HeaderPtr, OPTIONAL\r
+ IN UINTN *BufferSize,\r
+ IN VOID *BufferPtr\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+BcTcpRead (\r
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
+ IN UINT16 OpFlags,\r
+ IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL\r
+ IN OUT EFI_PXE_BASE_CODE_TCP_PORT *DestPort, OPTIONAL\r
+ IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL\r
+ IN OUT EFI_PXE_BASE_CODE_TCP_PORT *SrcPort, OPTIONAL\r
+ IN UINTN *HeaderSize, OPTIONAL\r
+ IN VOID *HeaderPtr, OPTIONAL\r
+ IN OUT UINTN *BufferSize,\r
+ IN VOID *BufferPtr\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+BcArp (\r
+ IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
+ IN EFI_IP_ADDRESS * IpAddr,\r
+ IN EFI_MAC_ADDRESS * MacAddr OPTIONAL\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+BcIpFilter (\r
+ IN EFI_PXE_BASE_CODE_PROTOCOL *This,\r
+ IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+BcSetParameters (\r
+ IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
+ IN BOOLEAN *NewAutoArp, OPTIONAL\r
+ IN BOOLEAN *NewSendGUID, OPTIONAL\r
+ IN UINT8 *NewTTL, OPTIONAL\r
+ IN UINT8 *NewToS, OPTIONAL\r
+ IN BOOLEAN *NewMakeCallback OPTIONAL\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+BcSetStationIP (\r
+ IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
+ IN EFI_IP_ADDRESS * NewStationIp, OPTIONAL\r
+ IN EFI_IP_ADDRESS * NewSubnetMask OPTIONAL\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+BcSetPackets (\r
+ IN EFI_PXE_BASE_CODE_PROTOCOL * This,\r
+ BOOLEAN *NewDhcpDiscoverValid, OPTIONAL\r
+ BOOLEAN *NewDhcpAckReceived, OPTIONAL\r
+ BOOLEAN *NewProxyOfferReceived, OPTIONAL\r
+ BOOLEAN *NewPxeDiscoverValid, OPTIONAL\r
+ BOOLEAN *NewPxeReplyReceived, OPTIONAL\r
+ BOOLEAN *NewPxeBisReplyReceived, OPTIONAL\r
+ IN EFI_PXE_BASE_CODE_PACKET * NewDhcpDiscover, OPTIONAL\r
+ IN EFI_PXE_BASE_CODE_PACKET * NewDhcpAck, OPTIONAL\r
+ IN EFI_PXE_BASE_CODE_PACKET * NewProxyOffer, OPTIONAL\r
+ IN EFI_PXE_BASE_CODE_PACKET * NewPxeDiscover, OPTIONAL\r
+ IN EFI_PXE_BASE_CODE_PACKET * NewPxeReply, OPTIONAL\r
+ IN EFI_PXE_BASE_CODE_PACKET * NewPxeBisReply OPTIONAL\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+LoadFile (\r
+ IN EFI_LOAD_FILE_PROTOCOL *This,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *FilePath,\r
+ IN BOOLEAN BootPolicy,\r
+ IN OUT UINTN *BufferSize,\r
+ IN VOID *Buffer\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+PxeBcLibGetSmbiosSystemGuidAndSerialNumber (\r
+ IN EFI_GUID *SystemGuid,\r
+ OUT CHAR8 **SystemSerialNumber\r
+ )\r
+;\r
+\r
+#include "ip.h"\r
+#include "dhcp.h"\r
+#include "tftp.h"\r
+\r
+#endif /* _BC_H */\r
+\r
+/* EOF - bc.h */\r