+++ /dev/null
-/*++\r
-\r
-Copyright (c) 2006 - 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
-#ifndef _BC_H\r
-#define _BC_H\r
-\r
-#ifndef EFI_MIN\r
-#define EFI_MIN(_a, _b) ((_a) < (_b) ? (_a) : (_b))\r
-#endif\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_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
- UINT32 MCastGroup[MAX_MCAST_GROUPS];\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
-#define PXE_MAX_PRINT_BUFFER 128\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_LOAD_FILE_DEV_FROM_THIS(a) CR (a, LOADFILE_DEVICE, LoadFile, LOADFILE_DEVICE_SIGNATURE)\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-PxeBcDriverSupported (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-PxeBcDriverStart (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-PxeBcDriverStop (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN UINTN NumberOfChildren,\r
- IN EFI_HANDLE *ChildHandleBuffer\r
- );\r
-\r
-//\r
-// EFI Component Name Functions\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-PxeBcComponentNameGetDriverName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **DriverName\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-PxeBcComponentNameGetControllerName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN EFI_HANDLE ChildHandle OPTIONAL,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **ControllerName\r
- );\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_DRIVER_BINDING_PROTOCOL gPxeBcDriverBinding;\r
-extern EFI_COMPONENT_NAME_PROTOCOL gPxeBcComponentName;\r
-\r
-//\r
-// //////////////////////////////////////////////////////////\r
-//\r
-// prototypes\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
-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
-//\r
-// Define SMBIOS tables.\r
-//\r
-#pragma pack(1)\r
-typedef struct {\r
- UINT8 AnchorString[4];\r
- UINT8 EntryPointStructureChecksum;\r
- UINT8 EntryPointLength;\r
- UINT8 MajorVersion;\r
- UINT8 MinorVersion;\r
- UINT16 MaxStructureSize;\r
- UINT8 EntryPointRevision;\r
- UINT8 FormattedArea[5];\r
- UINT8 IntermediateAnchorString[5];\r
- UINT8 IntermediateChecksum;\r
- UINT16 TableLength;\r
- UINT32 TableAddress;\r
- UINT16 NumberOfSmbiosStructures;\r
- UINT8 SmbiosBcdRevision;\r
-} SMBIOS_STRUCTURE_TABLE;\r
-\r
-//\r
-// Please note that SMBIOS structures can be odd byte aligned since the\r
-// unformated section of each record is a set of arbitrary size strings.\r
-//\r
-typedef struct {\r
- UINT8 Type;\r
- UINT8 Length;\r
- UINT8 Handle[2];\r
-} SMBIOS_HEADER;\r
-\r
-typedef UINT8 SMBIOS_STRING;\r
-\r
-typedef struct {\r
- SMBIOS_HEADER Hdr;\r
- SMBIOS_STRING Vendor;\r
- SMBIOS_STRING BiosVersion;\r
- UINT8 BiosSegment[2];\r
- SMBIOS_STRING BiosReleaseDate;\r
- UINT8 BiosSize;\r
- UINT8 BiosCharacteristics[8];\r
-} SMBIOS_TYPE0;\r
-\r
-typedef struct {\r
- SMBIOS_HEADER Hdr;\r
- SMBIOS_STRING Manufacturer;\r
- SMBIOS_STRING ProductName;\r
- SMBIOS_STRING Version;\r
- SMBIOS_STRING SerialNumber;\r
-\r
- //\r
- // always byte copy this data to prevent alignment faults!\r
- //\r
- EFI_GUID Uuid;\r
-\r
- UINT8 WakeUpType;\r
-} SMBIOS_TYPE1;\r
-\r
-typedef struct {\r
- SMBIOS_HEADER Hdr;\r
- SMBIOS_STRING Manufacturer;\r
- SMBIOS_STRING ProductName;\r
- SMBIOS_STRING Version;\r
- SMBIOS_STRING SerialNumber;\r
-} SMBIOS_TYPE2;\r
-\r
-typedef struct {\r
- SMBIOS_HEADER Hdr;\r
- SMBIOS_STRING Manufacturer;\r
- UINT8 Type;\r
- SMBIOS_STRING Version;\r
- SMBIOS_STRING SerialNumber;\r
- SMBIOS_STRING AssetTag;\r
- UINT8 BootupState;\r
- UINT8 PowerSupplyState;\r
- UINT8 ThermalState;\r
- UINT8 SecurityStatus;\r
- UINT8 OemDefined[4];\r
-} SMBIOS_TYPE3;\r
-\r
-typedef struct {\r
- SMBIOS_HEADER Hdr;\r
- UINT8 Socket;\r
- UINT8 ProcessorType;\r
- UINT8 ProcessorFamily;\r
- SMBIOS_STRING ProcessorManufacture;\r
- UINT8 ProcessorId[8];\r
- SMBIOS_STRING ProcessorVersion;\r
- UINT8 Voltage;\r
- UINT8 ExternalClock[2];\r
- UINT8 MaxSpeed[2];\r
- UINT8 CurrentSpeed[2];\r
- UINT8 Status;\r
- UINT8 ProcessorUpgrade;\r
- UINT8 L1CacheHandle[2];\r
- UINT8 L2CacheHandle[2];\r
- UINT8 L3CacheHandle[2];\r
-} SMBIOS_TYPE4;\r
-\r
-typedef union {\r
- SMBIOS_HEADER *Hdr;\r
- SMBIOS_TYPE0 *Type0;\r
- SMBIOS_TYPE1 *Type1;\r
- SMBIOS_TYPE2 *Type2;\r
- SMBIOS_TYPE3 *Type3;\r
- SMBIOS_TYPE4 *Type4;\r
- UINT8 *Raw;\r
-} SMBIOS_STRUCTURE_POINTER;\r
-#pragma pack()\r
-\r
-#include "ip.h"\r
-#include "dhcp.h"\r
-#include "tftp.h"\r
-\r
-VOID\r
-InitArpHeader (\r
- VOID\r
- )\r
-/*++\r
-Routine description:\r
- Initialize ARP packet header.\r
-\r
-Parameters:\r
- none\r
-\r
-Returns:\r
- none\r
-\r
---*/\r
-;\r
-\r
-#endif /* _BC_H */\r
-\r
-/* EOF - bc.h */\r