-/** @file
-
-Copyright (c) 2006, 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:
-
- ArpDebug.h
-
-Abstract:
-
-
-**/
-
-#ifndef _ARP_DEBUG_H_
-#define _ARP_DEBUG_H_
-
-
-#define ARP_DEBUG_TRACE(PrintArg) NET_DEBUG_TRACE ("Arp", PrintArg)
-#define ARP_DEBUG_WARN(PrintArg) NET_DEBUG_WARNING ("Arp", PrintArg)
-#define ARP_DEBUG_ERROR(PrintArg) NET_DEBUG_ERROR ("Arp", PrintArg)
-
-#endif
-
+/** @file\r
+\r
+Copyright (c) 2006, 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
+\r
+ ArpDebug.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _ARP_DEBUG_H_\r
+#define _ARP_DEBUG_H_\r
+\r
+\r
+#define ARP_DEBUG_TRACE(PrintArg) NET_DEBUG_TRACE ("Arp", PrintArg)\r
+#define ARP_DEBUG_WARN(PrintArg) NET_DEBUG_WARNING ("Arp", PrintArg)\r
+#define ARP_DEBUG_ERROR(PrintArg) NET_DEBUG_ERROR ("Arp", PrintArg)\r
+\r
+#endif\r
+\r
\r
--*/\r
{\r
- return EfiLibInstallAllDriverProtocols (\r
+ return EfiLibInstallDriverBindingComponentName2 (\r
ImageHandle,\r
SystemTable,\r
&gArpDriverBinding,\r
ImageHandle,\r
&gArpComponentName,\r
- NULL,\r
- NULL\r
+ &gArpComponentName2\r
);\r
}\r
\r
-/** @file
-
-Copyright (c) 2006 - 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:
-
- ArpDriver.c
-
-Abstract:
-
-
-**/
-
-#ifndef _ARP_DRIVER_H_
-#define _ARP_DRIVER_H_
-
+/** @file\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
+\r
+ ArpDriver.c\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _ARP_DRIVER_H_\r
+#define _ARP_DRIVER_H_\r
+\r
\r
#include <PiDxe.h>\r
\r
#include <Protocol/Arp.h>\r
-#include <Protocol/ManagedNetwork.h>
+#include <Protocol/ManagedNetwork.h>\r
#include <Protocol/ServiceBinding.h>\r
\r
#include <Library/DebugLib.h>\r
#include <Library/UefiDriverEntryPoint.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
-#include <Library/UefiLib.h>
-
-#include "ArpDebug.h"
-
-//
-// Global variables
-//
-extern EFI_DRIVER_BINDING_PROTOCOL gArpDriverBinding;
-extern EFI_COMPONENT_NAME_PROTOCOL gArpComponentName;
-
-EFI_STATUS
-EFIAPI
-ArpDriverBindingSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-ArpDriverBindingStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-ArpDriverBindingStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- );
-
-EFI_STATUS
-EFIAPI
-ArpServiceBindingCreateChild (
- IN EFI_SERVICE_BINDING_PROTOCOL *This,
- IN EFI_HANDLE *ChildHandle
- );
-
-EFI_STATUS
-EFIAPI
-ArpServiceBindingDestroyChild (
- IN EFI_SERVICE_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ChildHandle
- );
-
-#endif
-
+#include <Library/UefiLib.h>\r
+\r
+#include "ArpDebug.h"\r
+\r
+//\r
+// Global variables\r
+//\r
+extern EFI_DRIVER_BINDING_PROTOCOL gArpDriverBinding;\r
+extern EFI_COMPONENT_NAME_PROTOCOL gArpComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gArpComponentName2;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpDriverBindingSupported (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpDriverBindingStart (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpDriverBindingStop (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpServiceBindingCreateChild (\r
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE *ChildHandle\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpServiceBindingDestroyChild (\r
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ChildHandle\r
+ );\r
+\r
+#endif\r
+\r
-/** @file
-
-Copyright (c) 2006 - 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:
-
- ArpImpl.h
-
-Abstract:
-
-
-**/
-
-#ifndef _ARP_IMPL_H_
-#define _ARP_IMPL_H_
-
+/** @file\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
+\r
+ ArpImpl.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _ARP_IMPL_H_\r
+#define _ARP_IMPL_H_\r
+\r
\r
#include <PiDxe.h>\r
\r
#include <Protocol/Arp.h>\r
-#include <Protocol/ManagedNetwork.h>
+#include <Protocol/ManagedNetwork.h>\r
#include <Protocol/ServiceBinding.h>\r
\r
#include <Library/DebugLib.h>\r
#include <Library/UefiDriverEntryPoint.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
-#include <Library/UefiLib.h>
-#include <Library/NetLib.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/MemoryAllocationLib.h>
-
-#include "ArpDebug.h"
-
-#define ARP_ETHER_PROTO_TYPE 0x0806
-#define IPv4_ETHER_PROTO_TYPE 0x0800
-#define IPv6_ETHER_PROTO_TYPE 0x86DD
-
-#define ARP_OPCODE_REQUEST 0x0001
-#define ARP_OPCODE_REPLY 0x0002
-
-#define ARP_DEFAULT_TIMEOUT_VALUE (400 * TICKS_PER_SECOND)
-#define ARP_DEFAULT_RETRY_COUNT 2
-#define ARP_DEFAULT_RETRY_INTERVAL (5 * TICKS_PER_MS)
-#define ARP_PERIODIC_TIMER_INTERVAL (500 * TICKS_PER_MS)
-
-#pragma pack(1)
-typedef struct _ARP_HEAD {
- UINT16 HwType;
- UINT16 ProtoType;
- UINT8 HwAddrLen;
- UINT8 ProtoAddrLen;
- UINT16 OpCode;
-} ARP_HEAD;
-#pragma pack()
-
-typedef struct _ARP_ADDRESS {
- UINT8 *SenderHwAddr;
- UINT8 *SenderProtoAddr;
- UINT8 *TargetHwAddr;
- UINT8 *TargetProtoAddr;
-} ARP_ADDRESS;
-
-#define MATCH_SW_ADDRESS 0x1
-#define MATCH_HW_ADDRESS 0x2
-
-typedef enum {
- ByNone = 0,
- ByProtoAddress = MATCH_SW_ADDRESS,
- ByHwAddress = MATCH_HW_ADDRESS,
- ByBoth = MATCH_SW_ADDRESS | MATCH_HW_ADDRESS
-} FIND_OPTYPE;
-
-#define ARP_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32('A', 'R', 'P', 'I')
-
-#define ARP_INSTANCE_DATA_FROM_THIS(a) \
- CR ( \
- (a), \
- ARP_INSTANCE_DATA, \
- ArpProto, \
- ARP_INSTANCE_DATA_SIGNATURE \
- )
-
-typedef struct _ARP_SERVICE_DATA ARP_SERVICE_DATA;
-
-typedef struct _ARP_INSTANCE_DATA {
- UINT32 Signature;
- ARP_SERVICE_DATA *ArpService;
- EFI_HANDLE Handle;
- EFI_ARP_PROTOCOL ArpProto;
- NET_LIST_ENTRY List;
- EFI_ARP_CONFIG_DATA ConfigData;
- BOOLEAN Configured;
- BOOLEAN Destroyed;
-} ARP_INSTANCE_DATA;
-
-#define ARP_SERVICE_DATA_SIGNATURE EFI_SIGNATURE_32('A', 'R', 'P', 'S')
-
-#define ARP_SERVICE_DATA_FROM_THIS(a) \
- CR ( \
- (a), \
- ARP_SERVICE_DATA, \
- ServiceBinding, \
- ARP_SERVICE_DATA_SIGNATURE \
- )
-
-struct _ARP_SERVICE_DATA {
- UINT32 Signature;
- EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;
-
- EFI_HANDLE MnpChildHandle;
- EFI_HANDLE ImageHandle;
- EFI_HANDLE ControllerHandle;
-
- EFI_MANAGED_NETWORK_PROTOCOL *Mnp;
- EFI_MANAGED_NETWORK_CONFIG_DATA MnpConfigData;
- EFI_MANAGED_NETWORK_COMPLETION_TOKEN RxToken;
-
- EFI_SIMPLE_NETWORK_MODE SnpMode;
-
- NET_LOCK Lock;
-
- UINTN ChildrenNumber;
- NET_LIST_ENTRY ChildrenList;
-
- NET_LIST_ENTRY PendingRequestTable;
- NET_LIST_ENTRY DeniedCacheTable;
- NET_LIST_ENTRY ResolvedCacheTable;
-
- EFI_EVENT PeriodicTimer;
-};
-
-typedef struct _USER_REQUEST_CONTEXT {
- NET_LIST_ENTRY List;
- ARP_INSTANCE_DATA *Instance;
- EFI_EVENT UserRequestEvent;
- VOID *UserHwAddrBuffer;
-} USER_REQUEST_CONTEXT;
-
-#define ARP_MAX_PROTOCOL_ADDRESS_LEN sizeof(EFI_IP_ADDRESS)
-#define ARP_MAX_HARDWARE_ADDRESS_LEN sizeof(EFI_MAC_ADDRESS)
-
-typedef struct _NET_ARP_ADDRESS {
- UINT16 Type;
- UINT8 Length;
- UINT8 *AddressPtr;
- union {
- UINT8 ProtoAddress[ARP_MAX_PROTOCOL_ADDRESS_LEN];
- UINT8 HwAddress[ARP_MAX_HARDWARE_ADDRESS_LEN];
- } Buffer;
-} NET_ARP_ADDRESS;
-
-typedef enum {
- Hardware,
- Protocol
-} ARP_ADDRESS_TYPE;
-
-typedef struct _ARP_CACHE_ENTRY {
- NET_LIST_ENTRY List;
-
- UINT32 RetryCount;
- UINT32 DefaultDecayTime;
- UINT32 DecayTime;
- UINT32 NextRetryTime;
-
- NET_ARP_ADDRESS Addresses[2];
-
- NET_LIST_ENTRY UserRequestList;
-} ARP_CACHE_ENTRY;
-
-EFI_STATUS
-EFIAPI
-ArpConfigure (
- IN EFI_ARP_PROTOCOL *This,
- IN EFI_ARP_CONFIG_DATA *ConfigData OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-ArpAdd (
- IN EFI_ARP_PROTOCOL *This,
- IN BOOLEAN DenyFlag,
- IN VOID *TargetSwAddress OPTIONAL,
- IN VOID *TargetHwAddress OPTIONAL,
- IN UINT32 TimeoutValue,
- IN BOOLEAN Overwrite
- );
-
-EFI_STATUS
-EFIAPI
-ArpFind (
- IN EFI_ARP_PROTOCOL *This,
- IN BOOLEAN BySwAddress,
- IN VOID *AddressBuffer OPTIONAL,
- OUT UINT32 *EntryLength OPTIONAL,
- OUT UINT32 *EntryCount OPTIONAL,
- OUT EFI_ARP_FIND_DATA **Entries OPTIONAL,
- IN BOOLEAN Refresh
- );
-
-EFI_STATUS
-EFIAPI
-ArpDelete (
- IN EFI_ARP_PROTOCOL *This,
- IN BOOLEAN BySwAddress,
- IN VOID *AddressBuffer OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-ArpFlush (
- IN EFI_ARP_PROTOCOL *This
- );
-
-EFI_STATUS
-EFIAPI
-ArpRequest (
- IN EFI_ARP_PROTOCOL *This,
- IN VOID *TargetSwAddress OPTIONAL,
- IN EFI_EVENT ResolvedEvent OPTIONAL,
- OUT VOID *TargetHwAddress
- );
-
-EFI_STATUS
-EFIAPI
-ArpCancel (
- IN EFI_ARP_PROTOCOL *This,
- IN VOID *TargetSwAddress OPTIONAL,
- IN EFI_EVENT ResolvedEvent OPTIONAL
- );
-
-EFI_STATUS
-ArpConfigureInstance (
- IN ARP_INSTANCE_DATA *Instance,
- IN EFI_ARP_CONFIG_DATA *ConfigData OPTIONAL
- );
-
-ARP_CACHE_ENTRY *
-ArpFindDeniedCacheEntry (
- IN ARP_SERVICE_DATA *ArpService,
- IN NET_ARP_ADDRESS *ProtocolAddress OPTIONAL,
- IN NET_ARP_ADDRESS *HardwareAddress OPTIONAL
- );
-
-ARP_CACHE_ENTRY *
-ArpFindNextCacheEntryInTable (
- IN NET_LIST_ENTRY *CacheTable,
- IN NET_LIST_ENTRY *StartEntry,
- IN FIND_OPTYPE FindOpType,
- IN NET_ARP_ADDRESS *ProtocolAddress OPTIONAL,
- IN NET_ARP_ADDRESS *HardwareAddress OPTIONAL
- );
-
-ARP_CACHE_ENTRY *
-ArpAllocCacheEntry (
- IN ARP_INSTANCE_DATA *Instance
- );
-
-VOID
-ArpFillAddressInCacheEntry (
- IN ARP_CACHE_ENTRY *CacheEntry,
- IN NET_ARP_ADDRESS *HwAddr OPTIONAL,
- IN NET_ARP_ADDRESS *SwAddr OPTIONAL
- );
-
-UINTN
-ArpAddressResolved (
- IN ARP_CACHE_ENTRY *CacheEntry,
- IN ARP_INSTANCE_DATA *Instance OPTIONAL,
- IN EFI_EVENT UserEvent OPTIONAL
- );
-
-UINTN
-ArpDeleteCacheEntry (
- IN ARP_INSTANCE_DATA *Instance,
- IN BOOLEAN BySwAddress,
- IN UINT8 *AddressBuffer OPTIONAL,
- IN BOOLEAN Force
- );
-
-VOID
-ArpSendFrame (
- IN ARP_INSTANCE_DATA *Instance,
- IN ARP_CACHE_ENTRY *CacheEntry,
- IN UINT16 ArpOpCode
- );
-
-VOID
-ArpInitInstance (
- IN ARP_SERVICE_DATA *ArpService,
- IN ARP_INSTANCE_DATA *Instance
- );
-
-VOID
-EFIAPI
-ArpOnFrameRcvd (
- IN EFI_EVENT Event,
- IN VOID *Context
- );
-
-VOID
-EFIAPI
-ArpOnFrameSent (
- IN EFI_EVENT Event,
- IN VOID *Context
- );
-
-VOID
-EFIAPI
-ArpTimerHandler (
- IN EFI_EVENT Event,
- IN VOID *Context
- );
-
-UINTN
-ArpCancelRequest (
- IN ARP_INSTANCE_DATA *Instance,
- IN VOID *TargetSwAddress OPTIONAL,
- IN EFI_EVENT UserEvent OPTIONAL
- );
-
-EFI_STATUS
-ArpFindCacheEntry (
- IN ARP_INSTANCE_DATA *Instance,
- IN BOOLEAN BySwAddress,
- IN VOID *AddressBuffer OPTIONAL,
- OUT UINT32 *EntryLength OPTIONAL,
- OUT UINT32 *EntryCount OPTIONAL,
- OUT EFI_ARP_FIND_DATA **Entries OPTIONAL,
- IN BOOLEAN Refresh
- );
-
-#endif
-
+#include <Library/UefiLib.h>\r
+#include <Library/NetLib.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+#include "ArpDebug.h"\r
+\r
+#define ARP_ETHER_PROTO_TYPE 0x0806\r
+#define IPv4_ETHER_PROTO_TYPE 0x0800\r
+#define IPv6_ETHER_PROTO_TYPE 0x86DD\r
+\r
+#define ARP_OPCODE_REQUEST 0x0001\r
+#define ARP_OPCODE_REPLY 0x0002\r
+\r
+#define ARP_DEFAULT_TIMEOUT_VALUE (400 * TICKS_PER_SECOND)\r
+#define ARP_DEFAULT_RETRY_COUNT 2\r
+#define ARP_DEFAULT_RETRY_INTERVAL (5 * TICKS_PER_MS)\r
+#define ARP_PERIODIC_TIMER_INTERVAL (500 * TICKS_PER_MS)\r
+\r
+#pragma pack(1)\r
+typedef struct _ARP_HEAD {\r
+ UINT16 HwType;\r
+ UINT16 ProtoType;\r
+ UINT8 HwAddrLen;\r
+ UINT8 ProtoAddrLen;\r
+ UINT16 OpCode;\r
+} ARP_HEAD;\r
+#pragma pack()\r
+\r
+typedef struct _ARP_ADDRESS {\r
+ UINT8 *SenderHwAddr;\r
+ UINT8 *SenderProtoAddr;\r
+ UINT8 *TargetHwAddr;\r
+ UINT8 *TargetProtoAddr;\r
+} ARP_ADDRESS;\r
+\r
+#define MATCH_SW_ADDRESS 0x1\r
+#define MATCH_HW_ADDRESS 0x2\r
+\r
+typedef enum {\r
+ ByNone = 0,\r
+ ByProtoAddress = MATCH_SW_ADDRESS,\r
+ ByHwAddress = MATCH_HW_ADDRESS,\r
+ ByBoth = MATCH_SW_ADDRESS | MATCH_HW_ADDRESS\r
+} FIND_OPTYPE;\r
+\r
+#define ARP_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32('A', 'R', 'P', 'I')\r
+\r
+#define ARP_INSTANCE_DATA_FROM_THIS(a) \\r
+ CR ( \\r
+ (a), \\r
+ ARP_INSTANCE_DATA, \\r
+ ArpProto, \\r
+ ARP_INSTANCE_DATA_SIGNATURE \\r
+ )\r
+\r
+typedef struct _ARP_SERVICE_DATA ARP_SERVICE_DATA;\r
+\r
+typedef struct _ARP_INSTANCE_DATA {\r
+ UINT32 Signature;\r
+ ARP_SERVICE_DATA *ArpService;\r
+ EFI_HANDLE Handle;\r
+ EFI_ARP_PROTOCOL ArpProto;\r
+ NET_LIST_ENTRY List;\r
+ EFI_ARP_CONFIG_DATA ConfigData;\r
+ BOOLEAN Configured;\r
+ BOOLEAN Destroyed;\r
+} ARP_INSTANCE_DATA;\r
+\r
+#define ARP_SERVICE_DATA_SIGNATURE EFI_SIGNATURE_32('A', 'R', 'P', 'S')\r
+\r
+#define ARP_SERVICE_DATA_FROM_THIS(a) \\r
+ CR ( \\r
+ (a), \\r
+ ARP_SERVICE_DATA, \\r
+ ServiceBinding, \\r
+ ARP_SERVICE_DATA_SIGNATURE \\r
+ )\r
+\r
+struct _ARP_SERVICE_DATA {\r
+ UINT32 Signature;\r
+ EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;\r
+\r
+ EFI_HANDLE MnpChildHandle;\r
+ EFI_HANDLE ImageHandle;\r
+ EFI_HANDLE ControllerHandle;\r
+\r
+ EFI_MANAGED_NETWORK_PROTOCOL *Mnp;\r
+ EFI_MANAGED_NETWORK_CONFIG_DATA MnpConfigData;\r
+ EFI_MANAGED_NETWORK_COMPLETION_TOKEN RxToken;\r
+\r
+ EFI_SIMPLE_NETWORK_MODE SnpMode;\r
+\r
+ NET_LOCK Lock;\r
+\r
+ UINTN ChildrenNumber;\r
+ NET_LIST_ENTRY ChildrenList;\r
+\r
+ NET_LIST_ENTRY PendingRequestTable;\r
+ NET_LIST_ENTRY DeniedCacheTable;\r
+ NET_LIST_ENTRY ResolvedCacheTable;\r
+\r
+ EFI_EVENT PeriodicTimer;\r
+};\r
+\r
+typedef struct _USER_REQUEST_CONTEXT {\r
+ NET_LIST_ENTRY List;\r
+ ARP_INSTANCE_DATA *Instance;\r
+ EFI_EVENT UserRequestEvent;\r
+ VOID *UserHwAddrBuffer;\r
+} USER_REQUEST_CONTEXT;\r
+\r
+#define ARP_MAX_PROTOCOL_ADDRESS_LEN sizeof(EFI_IP_ADDRESS)\r
+#define ARP_MAX_HARDWARE_ADDRESS_LEN sizeof(EFI_MAC_ADDRESS)\r
+\r
+typedef struct _NET_ARP_ADDRESS {\r
+ UINT16 Type;\r
+ UINT8 Length;\r
+ UINT8 *AddressPtr;\r
+ union {\r
+ UINT8 ProtoAddress[ARP_MAX_PROTOCOL_ADDRESS_LEN];\r
+ UINT8 HwAddress[ARP_MAX_HARDWARE_ADDRESS_LEN];\r
+ } Buffer;\r
+} NET_ARP_ADDRESS;\r
+\r
+typedef enum {\r
+ Hardware,\r
+ Protocol\r
+} ARP_ADDRESS_TYPE;\r
+\r
+typedef struct _ARP_CACHE_ENTRY {\r
+ NET_LIST_ENTRY List;\r
+\r
+ UINT32 RetryCount;\r
+ UINT32 DefaultDecayTime;\r
+ UINT32 DecayTime;\r
+ UINT32 NextRetryTime;\r
+\r
+ NET_ARP_ADDRESS Addresses[2];\r
+\r
+ NET_LIST_ENTRY UserRequestList;\r
+} ARP_CACHE_ENTRY;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpConfigure (\r
+ IN EFI_ARP_PROTOCOL *This,\r
+ IN EFI_ARP_CONFIG_DATA *ConfigData OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpAdd (\r
+ IN EFI_ARP_PROTOCOL *This,\r
+ IN BOOLEAN DenyFlag,\r
+ IN VOID *TargetSwAddress OPTIONAL,\r
+ IN VOID *TargetHwAddress OPTIONAL,\r
+ IN UINT32 TimeoutValue,\r
+ IN BOOLEAN Overwrite\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpFind (\r
+ IN EFI_ARP_PROTOCOL *This,\r
+ IN BOOLEAN BySwAddress,\r
+ IN VOID *AddressBuffer OPTIONAL,\r
+ OUT UINT32 *EntryLength OPTIONAL,\r
+ OUT UINT32 *EntryCount OPTIONAL,\r
+ OUT EFI_ARP_FIND_DATA **Entries OPTIONAL,\r
+ IN BOOLEAN Refresh\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpDelete (\r
+ IN EFI_ARP_PROTOCOL *This,\r
+ IN BOOLEAN BySwAddress,\r
+ IN VOID *AddressBuffer OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpFlush (\r
+ IN EFI_ARP_PROTOCOL *This\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpRequest (\r
+ IN EFI_ARP_PROTOCOL *This,\r
+ IN VOID *TargetSwAddress OPTIONAL,\r
+ IN EFI_EVENT ResolvedEvent OPTIONAL,\r
+ OUT VOID *TargetHwAddress\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpCancel (\r
+ IN EFI_ARP_PROTOCOL *This,\r
+ IN VOID *TargetSwAddress OPTIONAL,\r
+ IN EFI_EVENT ResolvedEvent OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+ArpConfigureInstance (\r
+ IN ARP_INSTANCE_DATA *Instance,\r
+ IN EFI_ARP_CONFIG_DATA *ConfigData OPTIONAL\r
+ );\r
+\r
+ARP_CACHE_ENTRY *\r
+ArpFindDeniedCacheEntry (\r
+ IN ARP_SERVICE_DATA *ArpService,\r
+ IN NET_ARP_ADDRESS *ProtocolAddress OPTIONAL,\r
+ IN NET_ARP_ADDRESS *HardwareAddress OPTIONAL\r
+ );\r
+\r
+ARP_CACHE_ENTRY *\r
+ArpFindNextCacheEntryInTable (\r
+ IN NET_LIST_ENTRY *CacheTable,\r
+ IN NET_LIST_ENTRY *StartEntry,\r
+ IN FIND_OPTYPE FindOpType,\r
+ IN NET_ARP_ADDRESS *ProtocolAddress OPTIONAL,\r
+ IN NET_ARP_ADDRESS *HardwareAddress OPTIONAL\r
+ );\r
+\r
+ARP_CACHE_ENTRY *\r
+ArpAllocCacheEntry (\r
+ IN ARP_INSTANCE_DATA *Instance\r
+ );\r
+\r
+VOID\r
+ArpFillAddressInCacheEntry (\r
+ IN ARP_CACHE_ENTRY *CacheEntry,\r
+ IN NET_ARP_ADDRESS *HwAddr OPTIONAL,\r
+ IN NET_ARP_ADDRESS *SwAddr OPTIONAL\r
+ );\r
+\r
+UINTN\r
+ArpAddressResolved (\r
+ IN ARP_CACHE_ENTRY *CacheEntry,\r
+ IN ARP_INSTANCE_DATA *Instance OPTIONAL,\r
+ IN EFI_EVENT UserEvent OPTIONAL\r
+ );\r
+\r
+UINTN\r
+ArpDeleteCacheEntry (\r
+ IN ARP_INSTANCE_DATA *Instance,\r
+ IN BOOLEAN BySwAddress,\r
+ IN UINT8 *AddressBuffer OPTIONAL,\r
+ IN BOOLEAN Force\r
+ );\r
+\r
+VOID\r
+ArpSendFrame (\r
+ IN ARP_INSTANCE_DATA *Instance,\r
+ IN ARP_CACHE_ENTRY *CacheEntry,\r
+ IN UINT16 ArpOpCode\r
+ );\r
+\r
+VOID\r
+ArpInitInstance (\r
+ IN ARP_SERVICE_DATA *ArpService,\r
+ IN ARP_INSTANCE_DATA *Instance\r
+ );\r
+\r
+VOID\r
+EFIAPI\r
+ArpOnFrameRcvd (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ );\r
+\r
+VOID\r
+EFIAPI\r
+ArpOnFrameSent (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ );\r
+\r
+VOID\r
+EFIAPI\r
+ArpTimerHandler (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ );\r
+\r
+UINTN\r
+ArpCancelRequest (\r
+ IN ARP_INSTANCE_DATA *Instance,\r
+ IN VOID *TargetSwAddress OPTIONAL,\r
+ IN EFI_EVENT UserEvent OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+ArpFindCacheEntry (\r
+ IN ARP_INSTANCE_DATA *Instance,\r
+ IN BOOLEAN BySwAddress,\r
+ IN VOID *AddressBuffer OPTIONAL,\r
+ OUT UINT32 *EntryLength OPTIONAL,\r
+ OUT UINT32 *EntryCount OPTIONAL,\r
+ OUT EFI_ARP_FIND_DATA **Entries OPTIONAL,\r
+ IN BOOLEAN Refresh\r
+ );\r
+\r
+#endif\r
+\r
//\r
// EFI Component Name Functions\r
//\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
ArpComponentNameGetDriverName (\r
OUT CHAR16 **DriverName\r
);\r
\r
+\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
ArpComponentNameGetControllerName (\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
+ 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
+\r
//\r
// EFI Component Name Protocol\r
//\r
ArpComponentNameGetDriverName,\r
ArpComponentNameGetControllerName,\r
"eng"\r
-};\r
+ };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gArpComponentName2 = {\r
+ (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) ArpComponentNameGetDriverName,\r
+ (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) ArpComponentNameGetControllerName,\r
+ "en"\r
+ };\r
+\r
\r
STATIC EFI_UNICODE_STRING_TABLE mArpDriverNameTable[] = {\r
- { "eng", L"ARP Network Service Driver" },\r
+ { "eng;en", L"ARP Network Service Driver" },\r
{ NULL, NULL }\r
};\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
ArpComponentNameGetDriverName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **DriverName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- Language - A pointer to a three character ISO 639-2 language identifier.\r
- This is the language of the driver name that that the caller\r
- is requesting, and it must match one of the languages specified\r
- in SupportedLanguages. The number of languages supported by a\r
- driver is up to the driver writer.\r
- DriverName - A pointer to the Unicode string to return. This Unicode string\r
- is the name of the driver specified by This in the language\r
- specified by Language.\r
-\r
- Returns:\r
- EFI_SUCCES - The Unicode string for the Driver specified by This\r
- and the language specified by Language was returned\r
- in DriverName.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - DriverName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
- return LookupUnicodeString (\r
+ return LookupUnicodeString2 (\r
Language,\r
- gArpComponentName.SupportedLanguages,\r
+ This->SupportedLanguages,\r
mArpDriverNameTable,\r
- DriverName\r
+ DriverName,\r
+ (BOOLEAN)(This == &gArpComponentName)\r
);\r
}\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
ArpComponentNameGetControllerName (\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
+ 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
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the controller\r
- that is being managed by an EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- ControllerHandle - The handle of a controller that the driver specified by\r
- This is managing. This handle specifies the controller\r
- whose name is to be returned.\r
- ChildHandle - The handle of the child controller to retrieve the name\r
- of. This is an optional parameter that may be NULL. It\r
- will be NULL for device drivers. It will also be NULL\r
- for a bus drivers that wish to retrieve the name of the\r
- bus controller. It will not be NULL for a bus driver\r
- that wishes to retrieve the name of a child controller.\r
- Language - A pointer to a three character ISO 639-2 language\r
- identifier. This is the language of the controller name\r
- that that the caller is requesting, and it must match one\r
- of the languages specified in SupportedLanguages. The\r
- number of languages supported by a driver is up to the\r
- driver writer.\r
- ControllerName - A pointer to the Unicode string to return. This Unicode\r
- string is the name of the controller specified by\r
- ControllerHandle and ChildHandle in the language specified\r
- by Language from the point of view of the driver specified\r
- by This.\r
-\r
- Returns:\r
- EFI_SUCCESS - The Unicode string for the user readable name in the\r
- language specified by Language for the driver\r
- specified by This was returned in DriverName.\r
- EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - ControllerName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This is not currently managing\r
- the controller specified by ControllerHandle and\r
- ChildHandle.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
return EFI_UNSUPPORTED;\r
}\r
//\r
// EFI Component Name Functions\r
//\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
DhcpComponentNameGetDriverName (\r
OUT CHAR16 **DriverName\r
);\r
\r
+\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
DhcpComponentNameGetControllerName (\r
OUT CHAR16 **ControllerName\r
);\r
\r
+\r
//\r
// EFI Component Name Protocol\r
//\r
-EFI_COMPONENT_NAME_PROTOCOL gDhcp4ComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL gDhcp4ComponentName = {\r
DhcpComponentNameGetDriverName,\r
DhcpComponentNameGetControllerName,\r
"eng"\r
-};\r
+ };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gDhcp4ComponentName2 = {\r
+ (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) DhcpComponentNameGetDriverName,\r
+ (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) DhcpComponentNameGetControllerName,\r
+ "en"\r
+ };\r
+\r
\r
static EFI_UNICODE_STRING_TABLE mDhcpDriverNameTable[] = {\r
{\r
- "eng",\r
+ "eng;en",\r
L"DHCP Protocol Driver"\r
},\r
{\r
}\r
};\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
DhcpComponentNameGetDriverName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **DriverName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- Language - A pointer to a three character ISO 639-2 language identifier.\r
- This is the language of the driver name that that the caller\r
- is requesting, and it must match one of the languages specified\r
- in SupportedLanguages. The number of languages supported by a\r
- driver is up to the driver writer.\r
- DriverName - A pointer to the Unicode string to return. This Unicode string\r
- is the name of the driver specified by This in the language\r
- specified by Language.\r
-\r
- Returns:\r
- EFI_SUCCES - The Unicode string for the Driver specified by This\r
- and the language specified by Language was returned\r
- in DriverName.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - DriverName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
- return LookupUnicodeString (\r
- Language,\r
- gDhcp4ComponentName.SupportedLanguages,\r
- mDhcpDriverNameTable,\r
- DriverName\r
- );\r
+ return LookupUnicodeString2 (\r
+ Language,\r
+ This->SupportedLanguages,\r
+ mDhcpDriverNameTable,\r
+ DriverName,\r
+ (BOOLEAN)(This == &gDhcp4ComponentName)\r
+ );\r
}\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
DhcpComponentNameGetControllerName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **ControllerName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the controller\r
- that is being managed by an EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- ControllerHandle - The handle of a controller that the driver specified by\r
- This is managing. This handle specifies the controller\r
- whose name is to be returned.\r
- ChildHandle - The handle of the child controller to retrieve the name\r
- of. This is an optional parameter that may be NULL. It\r
- will be NULL for device drivers. It will also be NULL\r
- for a bus drivers that wish to retrieve the name of the\r
- bus controller. It will not be NULL for a bus driver\r
- that wishes to retrieve the name of a child controller.\r
- Language - A pointer to a three character ISO 639-2 language\r
- identifier. This is the language of the controller name\r
- that that the caller is requesting, and it must match one\r
- of the languages specified in SupportedLanguages. The\r
- number of languages supported by a driver is up to the\r
- driver writer.\r
- ControllerName - A pointer to the Unicode string to return. This Unicode\r
- string is the name of the controller specified by\r
- ControllerHandle and ChildHandle in the language\r
- specified by Language from the point of view of the\r
- driver specified by This.\r
-\r
- Returns:\r
- EFI_SUCCESS - The Unicode string for the user readable name in the\r
- language specified by Language for the driver\r
- specified by This was returned in DriverName.\r
- EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - ChildHandle isn't NULL and isn't a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - ControllerName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This is not currently\r
- managing the controller specified by\r
- ControllerHandle and ChildHandle.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
return EFI_UNSUPPORTED;\r
}\r
\r
--*/\r
{\r
- return EfiLibInstallAllDriverProtocols (\r
+ return EfiLibInstallDriverBindingComponentName2 (\r
ImageHandle,\r
SystemTable,\r
&gDhcp4DriverBinding,\r
ImageHandle,\r
&gDhcp4ComponentName,\r
- NULL,\r
- NULL\r
+ &gDhcp4ComponentName2\r
);\r
}\r
\r
-/** @file
-
-Copyright (c) 2006 - 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:
-
- Dhcp4Driver.h
-
-Abstract:
-
- Header for the DHCP4 driver
-
-
-**/
-
-#ifndef __EFI_DHCP4_DRIVER_H__
-#define __EFI_DHCP4_DRIVER_H__
-
-extern EFI_COMPONENT_NAME_PROTOCOL gDhcp4ComponentName;
-
-EFI_STATUS
-EFIAPI
-Dhcp4DriverBindingSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-Dhcp4DriverBindingStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-Dhcp4DriverBindingStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- );
-
-EFI_STATUS
-EFIAPI
-Dhcp4ServiceBindingCreateChild (
- IN EFI_SERVICE_BINDING_PROTOCOL *This,
- IN EFI_HANDLE *ChildHandle
- );
-
-EFI_STATUS
-EFIAPI
-Dhcp4ServiceBindingDestroyChild (
- IN EFI_SERVICE_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ChildHandle
- );
-
-#endif
+/** @file\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
+\r
+ Dhcp4Driver.h\r
+\r
+Abstract:\r
+\r
+ Header for the DHCP4 driver\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_DHCP4_DRIVER_H__\r
+#define __EFI_DHCP4_DRIVER_H__\r
+\r
+extern EFI_COMPONENT_NAME_PROTOCOL gDhcp4ComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gDhcp4ComponentName2;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Dhcp4DriverBindingSupported (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Dhcp4DriverBindingStart (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Dhcp4DriverBindingStop (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Dhcp4ServiceBindingCreateChild (\r
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE *ChildHandle\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Dhcp4ServiceBindingDestroyChild (\r
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ChildHandle\r
+ );\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2006, 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:
-
- Dhcp4Impl.h
-
-Abstract:
-
- EFI DHCP protocol implementation
- RFCs supported are:
- RFC 2131: Dynamic Host Configuration Protocol
- RFC 2132: DHCP Options and BOOTP Vendor Extensions
- RFC 1534: Interoperation Between DHCP and BOOTP
- RFC 3396: Encoding Long Options in DHCP
-
-
-**/
-
-#ifndef __EFI_DHCP4_IMPL_H__
-#define __EFI_DHCP4_IMPL_H__
-
-
+/** @file\r
+\r
+Copyright (c) 2006, 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
+\r
+ Dhcp4Impl.h\r
+\r
+Abstract:\r
+\r
+ EFI DHCP protocol implementation\r
+ RFCs supported are:\r
+ RFC 2131: Dynamic Host Configuration Protocol\r
+ RFC 2132: DHCP Options and BOOTP Vendor Extensions\r
+ RFC 1534: Interoperation Between DHCP and BOOTP\r
+ RFC 3396: Encoding Long Options in DHCP\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_DHCP4_IMPL_H__\r
+#define __EFI_DHCP4_IMPL_H__\r
+\r
+\r
\r
#include <PiDxe.h>\r
\r
#include <Library/UefiDriverEntryPoint.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
#include <Library/UefiLib.h>\r
-#include <Library/BaseLib.h>
-#include <Library/NetLib.h>
-
-typedef struct _DHCP_SERVICE DHCP_SERVICE;
-typedef struct _DHCP_PROTOCOL DHCP_PROTOCOL;
-
-#include "Dhcp4Option.h"
-#include "Dhcp4Io.h"
-
-enum {
- DHCP_SERVICE_SIGNATURE = EFI_SIGNATURE_32 ('D', 'H', 'C', 'P'),
- DHCP_PROTOCOL_SIGNATURE = EFI_SIGNATURE_32 ('d', 'h', 'c', 'p'),
-
- //
- // The state of the DHCP service. It starts as UNCONFIGED. If
- // and active child configures the service successfully, it
- // goes to CONFIGED. If the active child configures NULL, it
- // goes back to UNCONFIGED. It becomes DESTORY if it is (partly)
- // destoried.
- //
- DHCP_UNCONFIGED = 0,
- DHCP_CONFIGED,
- DHCP_DESTORY
-};
-
-struct _DHCP_PROTOCOL {
- UINT32 Signature;
- EFI_DHCP4_PROTOCOL Dhcp4Protocol;
- NET_LIST_ENTRY Link;
- EFI_HANDLE Handle;
- DHCP_SERVICE *Service;
-
- BOOLEAN InDestory;
-
- EFI_EVENT CompletionEvent;
- EFI_EVENT RenewRebindEvent;
-
- EFI_DHCP4_TRANSMIT_RECEIVE_TOKEN *Token;
-};
-
-//
-// DHCP driver is specical in that it is a singleton. Although it
-// has a service binding, there can be only one active child.
-//
-struct _DHCP_SERVICE {
- UINT32 Signature;
- EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;
-
- INTN ServiceState; // CONFIGED, UNCONFIGED, and DESTORY
- BOOLEAN InDestory;
-
- EFI_HANDLE Controller;
- EFI_HANDLE Image;
-
- NET_LIST_ENTRY Children;
- UINTN NumChildren;
-
- INTN DhcpState;
- EFI_STATUS IoStatus; // the result of last user operation
- UINT32 Xid;
-
- IP4_ADDR ClientAddr; // lease IP or configured client address
- IP4_ADDR Netmask;
- IP4_ADDR ServerAddr;
-
- EFI_DHCP4_PACKET *LastOffer; // The last received offer
- EFI_DHCP4_PACKET *Selected;
- DHCP_PARAMETER *Para;
-
- UINT32 Lease;
- UINT32 T1;
- UINT32 T2;
- INTN ExtraRefresh; // This refresh is reqested by user
-
- UDP_IO_PORT *UdpIo; // Udp child receiving all DHCP message
- UDP_IO_PORT *LeaseIoPort; // Udp child with lease IP
- NET_BUF *LastPacket; // The last sent packet for retransmission
- EFI_MAC_ADDRESS Mac;
- UINT8 HwType;
- UINT8 HwLen;
-
- DHCP_PROTOCOL *ActiveChild;
- EFI_DHCP4_CONFIG_DATA ActiveConfig;
- UINT32 UserOptionLen;
-
- //
- // Timer event and various timer
- //
- EFI_EVENT Timer;
-
- UINT32 PacketToLive; // Retransmission timer for our packets
- INTN CurRetry;
- INTN MaxRetries;
-
- UINT32 WaitOffer; // Time to collect the offers
- UINT32 LeaseLife;
-};
-
-typedef struct {
- EFI_DHCP4_PACKET_OPTION **Option;
- UINT32 OptionCount;
- UINT32 Index;
-} DHCP_PARSE_CONTEXT;
-
-#define DHCP_INSTANCE_FROM_THIS(Proto) \
- CR ((Proto), DHCP_PROTOCOL, Dhcp4Protocol, DHCP_PROTOCOL_SIGNATURE)
-
-#define DHCP_SERVICE_FROM_THIS(Sb) \
- CR ((Sb), DHCP_SERVICE, ServiceBinding, DHCP_SERVICE_SIGNATURE)
-
-extern EFI_DHCP4_PROTOCOL mDhcp4ProtocolTemplate;
-
-VOID
-DhcpYieldControl (
- IN DHCP_SERVICE *DhcpSb
- );
-
-#endif
+#include <Library/BaseLib.h>\r
+#include <Library/NetLib.h>\r
+\r
+typedef struct _DHCP_SERVICE DHCP_SERVICE;\r
+typedef struct _DHCP_PROTOCOL DHCP_PROTOCOL;\r
+\r
+#include "Dhcp4Option.h"\r
+#include "Dhcp4Io.h"\r
+\r
+enum {\r
+ DHCP_SERVICE_SIGNATURE = EFI_SIGNATURE_32 ('D', 'H', 'C', 'P'),\r
+ DHCP_PROTOCOL_SIGNATURE = EFI_SIGNATURE_32 ('d', 'h', 'c', 'p'),\r
+\r
+ //\r
+ // The state of the DHCP service. It starts as UNCONFIGED. If\r
+ // and active child configures the service successfully, it\r
+ // goes to CONFIGED. If the active child configures NULL, it\r
+ // goes back to UNCONFIGED. It becomes DESTORY if it is (partly)\r
+ // destoried.\r
+ //\r
+ DHCP_UNCONFIGED = 0,\r
+ DHCP_CONFIGED,\r
+ DHCP_DESTORY\r
+};\r
+\r
+struct _DHCP_PROTOCOL {\r
+ UINT32 Signature;\r
+ EFI_DHCP4_PROTOCOL Dhcp4Protocol;\r
+ NET_LIST_ENTRY Link;\r
+ EFI_HANDLE Handle;\r
+ DHCP_SERVICE *Service;\r
+\r
+ BOOLEAN InDestory;\r
+\r
+ EFI_EVENT CompletionEvent;\r
+ EFI_EVENT RenewRebindEvent;\r
+\r
+ EFI_DHCP4_TRANSMIT_RECEIVE_TOKEN *Token;\r
+};\r
+\r
+//\r
+// DHCP driver is specical in that it is a singleton. Although it\r
+// has a service binding, there can be only one active child.\r
+//\r
+struct _DHCP_SERVICE {\r
+ UINT32 Signature;\r
+ EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;\r
+\r
+ INTN ServiceState; // CONFIGED, UNCONFIGED, and DESTORY\r
+ BOOLEAN InDestory;\r
+\r
+ EFI_HANDLE Controller;\r
+ EFI_HANDLE Image;\r
+\r
+ NET_LIST_ENTRY Children;\r
+ UINTN NumChildren;\r
+\r
+ INTN DhcpState;\r
+ EFI_STATUS IoStatus; // the result of last user operation\r
+ UINT32 Xid;\r
+\r
+ IP4_ADDR ClientAddr; // lease IP or configured client address\r
+ IP4_ADDR Netmask;\r
+ IP4_ADDR ServerAddr;\r
+\r
+ EFI_DHCP4_PACKET *LastOffer; // The last received offer\r
+ EFI_DHCP4_PACKET *Selected;\r
+ DHCP_PARAMETER *Para;\r
+\r
+ UINT32 Lease;\r
+ UINT32 T1;\r
+ UINT32 T2;\r
+ INTN ExtraRefresh; // This refresh is reqested by user\r
+\r
+ UDP_IO_PORT *UdpIo; // Udp child receiving all DHCP message\r
+ UDP_IO_PORT *LeaseIoPort; // Udp child with lease IP\r
+ NET_BUF *LastPacket; // The last sent packet for retransmission\r
+ EFI_MAC_ADDRESS Mac;\r
+ UINT8 HwType;\r
+ UINT8 HwLen;\r
+\r
+ DHCP_PROTOCOL *ActiveChild;\r
+ EFI_DHCP4_CONFIG_DATA ActiveConfig;\r
+ UINT32 UserOptionLen;\r
+\r
+ //\r
+ // Timer event and various timer\r
+ //\r
+ EFI_EVENT Timer;\r
+\r
+ UINT32 PacketToLive; // Retransmission timer for our packets\r
+ INTN CurRetry;\r
+ INTN MaxRetries;\r
+\r
+ UINT32 WaitOffer; // Time to collect the offers\r
+ UINT32 LeaseLife;\r
+};\r
+\r
+typedef struct {\r
+ EFI_DHCP4_PACKET_OPTION **Option;\r
+ UINT32 OptionCount;\r
+ UINT32 Index;\r
+} DHCP_PARSE_CONTEXT;\r
+\r
+#define DHCP_INSTANCE_FROM_THIS(Proto) \\r
+ CR ((Proto), DHCP_PROTOCOL, Dhcp4Protocol, DHCP_PROTOCOL_SIGNATURE)\r
+\r
+#define DHCP_SERVICE_FROM_THIS(Sb) \\r
+ CR ((Sb), DHCP_SERVICE, ServiceBinding, DHCP_SERVICE_SIGNATURE)\r
+\r
+extern EFI_DHCP4_PROTOCOL mDhcp4ProtocolTemplate;\r
+\r
+VOID\r
+DhcpYieldControl (\r
+ IN DHCP_SERVICE *DhcpSb\r
+ );\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2006, 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:
-
- Dhcp4Io.h
-
-Abstract:
-
- The DHCP4 protocol implementation.
-
-
-**/
-
-#ifndef __EFI_DHCP4_IO_H__
-#define __EFI_DHCP4_IO_H__
-
-#include <PiDxe.h>
-
-#include <Protocol/ServiceBinding.h>
-
-#include <Library/NetLib.h>
-#include <Library/UdpIoLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/MemoryAllocationLib.h>
-
-
-enum {
- DHCP_WAIT_OFFER = 3, // Time to wait the offers
- DHCP_DEFAULT_LEASE = 7 *24 *60 *60, // Seven days as default.
- DHCP_SERVER_PORT = 67,
- DHCP_CLIENT_PORT = 68,
-
- //
- // BOOTP header "op" field
- //
- BOOTP_REQUEST = 1,
- BOOTP_REPLY = 2,
-
- //
- // DHCP message types
- //
- DHCP_MSG_DISCOVER = 1,
- DHCP_MSG_OFFER = 2,
- DHCP_MSG_REQUEST = 3,
- DHCP_MSG_DECLINE = 4,
- DHCP_MSG_ACK = 5,
- DHCP_MSG_NAK = 6,
- DHCP_MSG_RELEASE = 7,
- DHCP_MSG_INFORM = 8,
-
- //
- // DHCP notify user type
- //
- DHCP_NOTIFY_COMPLETION = 1,
- DHCP_NOTIFY_RENEWREBIND,
- DHCP_NOTIFY_ALL
-};
-
-#define DHCP_IS_BOOTP(Parameter) (((Parameter) == NULL) || ((Parameter)->DhcpType == 0))
-
-#define DHCP_CONNECTED(State) \
- (((State) == Dhcp4Bound) || ((State) == (Dhcp4Renewing)) || ((State) == Dhcp4Rebinding))
-
-EFI_STATUS
-DhcpSetState (
- IN DHCP_SERVICE *DhcpSb,
- IN INTN State,
- IN BOOLEAN CallUser
- );
-
-EFI_STATUS
-DhcpSendMessage (
- IN DHCP_SERVICE *DhcpSb,
- IN EFI_DHCP4_PACKET *Seed,
- IN DHCP_PARAMETER *Para,
- IN UINT8 Type,
- IN UINT8 *Msg
- );
-
-VOID
-EFIAPI
-DhcpOnTimerTick (
- IN EFI_EVENT Event,
- IN VOID *Context
- );
-
-VOID
-DhcpInput (
- NET_BUF *UdpPacket,
- UDP_POINTS *Points,
- EFI_STATUS IoStatus,
- VOID *Context
- );
-
-EFI_STATUS
-DhcpInitRequest (
- IN DHCP_SERVICE *DhcpSb
- );
-
-VOID
-DhcpCleanLease (
- IN DHCP_SERVICE *DhcpSb
- );
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2006, 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
+\r
+Module Name:\r
+\r
+ Dhcp4Io.h\r
+\r
+Abstract:\r
+\r
+ The DHCP4 protocol implementation.\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_DHCP4_IO_H__\r
+#define __EFI_DHCP4_IO_H__\r
+\r
+#include <PiDxe.h>\r
+\r
+#include <Protocol/ServiceBinding.h>\r
+\r
+#include <Library/NetLib.h>\r
+#include <Library/UdpIoLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+\r
+enum {\r
+ DHCP_WAIT_OFFER = 3, // Time to wait the offers\r
+ DHCP_DEFAULT_LEASE = 7 *24 *60 *60, // Seven days as default.\r
+ DHCP_SERVER_PORT = 67,\r
+ DHCP_CLIENT_PORT = 68,\r
+\r
+ //\r
+ // BOOTP header "op" field\r
+ //\r
+ BOOTP_REQUEST = 1,\r
+ BOOTP_REPLY = 2,\r
+\r
+ //\r
+ // DHCP message types\r
+ //\r
+ DHCP_MSG_DISCOVER = 1,\r
+ DHCP_MSG_OFFER = 2,\r
+ DHCP_MSG_REQUEST = 3,\r
+ DHCP_MSG_DECLINE = 4,\r
+ DHCP_MSG_ACK = 5,\r
+ DHCP_MSG_NAK = 6,\r
+ DHCP_MSG_RELEASE = 7,\r
+ DHCP_MSG_INFORM = 8,\r
+\r
+ //\r
+ // DHCP notify user type\r
+ //\r
+ DHCP_NOTIFY_COMPLETION = 1,\r
+ DHCP_NOTIFY_RENEWREBIND,\r
+ DHCP_NOTIFY_ALL\r
+};\r
+\r
+#define DHCP_IS_BOOTP(Parameter) (((Parameter) == NULL) || ((Parameter)->DhcpType == 0))\r
+\r
+#define DHCP_CONNECTED(State) \\r
+ (((State) == Dhcp4Bound) || ((State) == (Dhcp4Renewing)) || ((State) == Dhcp4Rebinding))\r
+\r
+EFI_STATUS\r
+DhcpSetState (\r
+ IN DHCP_SERVICE *DhcpSb,\r
+ IN INTN State,\r
+ IN BOOLEAN CallUser\r
+ );\r
+\r
+EFI_STATUS\r
+DhcpSendMessage (\r
+ IN DHCP_SERVICE *DhcpSb,\r
+ IN EFI_DHCP4_PACKET *Seed,\r
+ IN DHCP_PARAMETER *Para,\r
+ IN UINT8 Type,\r
+ IN UINT8 *Msg\r
+ );\r
+\r
+VOID\r
+EFIAPI\r
+DhcpOnTimerTick (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ );\r
+\r
+VOID\r
+DhcpInput (\r
+ NET_BUF *UdpPacket,\r
+ UDP_POINTS *Points,\r
+ EFI_STATUS IoStatus,\r
+ VOID *Context\r
+ );\r
+\r
+EFI_STATUS\r
+DhcpInitRequest (\r
+ IN DHCP_SERVICE *DhcpSb\r
+ );\r
+\r
+VOID\r
+DhcpCleanLease (\r
+ IN DHCP_SERVICE *DhcpSb\r
+ );\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2006, 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:
-
- Dhcp4Option.h
-
-Abstract:
-
- To validate, parse and process the DHCP options
-
-
-**/
-
-#ifndef __EFI_DHCP4_OPTION_H__
-#define __EFI_DHCP4_OPTION_H__
-
-//
-// DHCP option tags (types)
-//
-enum {
- //
- // RFC1497 vendor extensions
- //
- DHCP_TAG_PAD = 0, // Pad Option
- DHCP_TAG_EOP = 255, // End Option
- DHCP_TAG_NETMASK = 1, // Subnet Mask
- DHCP_TAG_TIME_OFFSET = 2, // Time Offset from UTC
- DHCP_TAG_ROUTER = 3, // Router option,
- DHCP_TAG_TIME_SERVER = 4, // Time Server
- DHCP_TAG_NAME_SERVER = 5, // Name Server
- DHCP_TAG_DNS_SERVER = 6, // Domain Name Server
- DHCP_TAG_LOG_SERVER = 7, // Log Server
- DHCP_TAG_COOKIE_SERVER = 8, // Cookie Server
- DHCP_TAG_LPR_SERVER = 9, // LPR Print Server
- DHCP_TAG_IMPRESS_SERVER = 10, // Impress Server
- DHCP_TAG_RL_SERVER = 11, // Resource Location Server
- DHCP_TAG_HOSTNAME = 12, // Host Name
- DHCP_TAG_BOOTFILE_LEN = 13, // Boot File Size
- DHCP_TAG_DUMP = 14, // Merit Dump File
- DHCP_TAG_DOMAINNAME = 15, // Domain Name
- DHCP_TAG_SWAP_SERVER = 16, // Swap Server
- DHCP_TAG_ROOTPATH = 17, // Root path
- DHCP_TAG_EXTEND_PATH = 18, // Extensions Path
-
- //
- // IP Layer Parameters per Host
- //
- DHCP_TAG_IPFORWARD = 19, // IP Forwarding Enable/Disable
- DHCP_TAG_NONLOCAL_SRR = 20, // on-Local Source Routing Enable/Disable
- DHCP_TAG_POLICY_SRR = 21, // Policy Filter
- DHCP_TAG_EMTU = 22, // Maximum Datagram Reassembly Size
- DHCP_TAG_TTL = 23, // Default IP Time-to-live
- DHCP_TAG_PATHMTU_AGE = 24, // Path MTU Aging Timeout
- DHCP_TAG_PATHMTU_PLATEAU = 25, // Path MTU Plateau Table
-
- //
- // IP Layer Parameters per Interface
- //
- DHCP_TAG_IFMTU = 26, // Interface MTU
- DHCP_TAG_SUBNET_LOCAL = 27, // All Subnets are Local
- DHCP_TAG_BROADCAST = 28, // Broadcast Address
- DHCP_TAG_DISCOVER_MASK = 29, // Perform Mask Discovery
- DHCP_TAG_SUPPLY_MASK = 30, // Mask Supplier
- DHCP_TAG_DISCOVER_ROUTE = 31, // Perform Router Discovery
- DHCP_TAG_ROUTER_SOLICIT = 32, // Router Solicitation Address
- DHCP_TAG_STATIC_ROUTE = 33, // Static Route
-
- //
- // Link Layer Parameters per Interface
- //
- DHCP_TAG_TRAILER = 34, // Trailer Encapsulation
- DHCP_TAG_ARPAGE = 35, // ARP Cache Timeout
- DHCP_TAG_ETHER_ENCAP = 36, // Ethernet Encapsulation
-
- //
- // TCP Parameters
- //
- DHCP_TAG_TCP_TTL = 37, // TCP Default TTL
- DHCP_TAG_KEEP_INTERVAL = 38, // TCP Keepalive Interval
- DHCP_TAG_KEEP_GARBAGE = 39, // TCP Keepalive Garbage
-
- //
- // Application and Service Parameters
- //
- DHCP_TAG_NIS_DOMAIN = 40, // Network Information Service Domain
- DHCP_TAG_NIS_SERVER = 41, // Network Information Servers
- DHCP_TAG_NTP_SERVER = 42, // Network Time Protocol Servers
- DHCP_TAG_VENDOR = 43, // Vendor Specific Information
- DHCP_TAG_NBNS = 44, // NetBIOS over TCP/IP Name Server
- DHCP_TAG_NBDD = 45, // NetBIOS Datagram Distribution Server
- DHCP_TAG_NBTYPE = 46, // NetBIOS over TCP/IP Node Type
- DHCP_TAG_NBSCOPE = 47, // NetBIOS over TCP/IP Scope
- DHCP_TAG_XFONT = 48, // X Window System Font Server
- DHCP_TAG_XDM = 49, // X Window System Display Manager
- DHCP_TAG_NISPLUS = 64, // Network Information Service+ Domain
- DHCP_TAG_NISPLUS_SERVER = 65, // Network Information Service+ Servers
- DHCP_TAG_MOBILEIP = 68, // Mobile IP Home Agent
- DHCP_TAG_SMTP = 69, // Simple Mail Transport Protocol Server
- DHCP_TAG_POP3 = 70, // Post Office Protocol (POP3) Server
- DHCP_TAG_NNTP = 71, // Network News Transport Protocol Server
- DHCP_TAG_WWW = 72, // Default World Wide Web (WWW) Server
- DHCP_TAG_FINGER = 73, // Default Finger Server
- DHCP_TAG_IRC = 74, // Default Internet Relay Chat (IRC) Server
- DHCP_TAG_STTALK = 75, // StreetTalk Server
- DHCP_TAG_STDA = 76, // StreetTalk Directory Assistance Server
- DHCP_TAG_CLASSLESS_ROUTE = 121, // Classless Route
-
- //
- // DHCP Extensions
- //
- DHCP_TAG_REQUEST_IP = 50, // Requested IP Address
- DHCP_TAG_LEASE = 51, // IP Address Lease Time
- DHCP_TAG_OVERLOAD = 52, // Option Overload
- DHCP_TAG_TFTP = 66, // TFTP server name
- DHCP_TAG_BOOTFILE = 67, // Bootfile name
- DHCP_TAG_TYPE = 53, // DHCP Message Type
- DHCP_TAG_SERVER_ID = 54, // Server Identifier
- DHCP_TAG_PARA_LIST = 55, // Parameter Request List
- DHCP_TAG_MESSAGE = 56, // Message
- DHCP_TAG_MAXMSG = 57, // Maximum DHCP Message Size
- DHCP_TAG_T1 = 58, // Renewal (T1) Time Value
- DHCP_TAG_T2 = 59, // Rebinding (T2) Time Value
- DHCP_TAG_VENDOR_CLASS = 60, // Vendor class identifier
- DHCP_TAG_CLIENT_ID = 61 // Client-identifier
-};
-
-enum {
- DHCP_OPTION_MAGIC = 0x63538263, // Network byte order
- DHCP_MAX_OPTIONS = 256,
-
- //
- // DHCP option types, this is used to validate the DHCP options.
- //
- DHCP_OPTION_SWITCH = 1,
- DHCP_OPTION_INT8,
- DHCP_OPTION_INT16,
- DHCP_OPTION_INT32,
- DHCP_OPTION_IP,
- DHCP_OPTION_IPPAIR,
-
- //
- // Value of DHCP overload option
- //
- DHCP_OVERLOAD_FILENAME = 1,
- DHCP_OVERLOAD_SVRNAME = 2,
- DHCP_OVERLOAD_BOTH = 3
-};
-
-//
-// The DHCP option structure. This structure extends the EFI_DHCP_OPTION
-// structure to support options longer than 255 bytes, such as classless route.
-//
-typedef struct {
- UINT8 Tag;
- UINT16 Len;
- UINT8 *Data;
-} DHCP_OPTION;
-
-//
-// Structures used to parse the DHCP options with RFC3396 support.
-//
-typedef struct {
- UINT8 Index;
- UINT16 Offset;
-} DHCP_OPTION_COUNT;
-
-typedef struct {
- DHCP_OPTION_COUNT *OpCount;
- DHCP_OPTION *Options;
- UINT8 *Buf;
-} DHCP_OPTION_CONTEXT;
-
-//
-// The options that matters to DHCP driver itself. The user of
-// DHCP clients may be interested in other options, such as
-// classless route, who can parse the DHCP offer to get them.
-//
-typedef struct {
- IP4_ADDR NetMask; // DHCP_TAG_NETMASK
- IP4_ADDR Router; // DHCP_TAG_ROUTER, only the first router is used
-
- //
- // DHCP specific options
- //
- UINT8 DhcpType; // DHCP_TAG_TYPE
- UINT8 Overload; // DHCP_TAG_OVERLOAD
- IP4_ADDR ServerId; // DHCP_TAG_SERVER_ID
- UINT32 Lease; // DHCP_TAG_LEASE
- UINT32 T1; // DHCP_TAG_T1
- UINT32 T2; // DHCP_TAG_T2
-} DHCP_PARAMETER;
-
-//
-// Structure used to describe and validate the format of DHCP options.
-// Type is the options' data type, such as DHCP_OPTION_INT8. MinOccur
-// is the minium occurance of this data type. MaxOccur is defined
-// similarly. If MaxOccur is -1, it means that there is no limit on the
-// maximum occurance. Alert tells whether DHCP client should further
-// inspect the option to parse DHCP_PARAMETER.
-//
-typedef struct {
- UINT8 Tag;
- INTN Type;
- INTN MinOccur;
- INTN MaxOccur;
- BOOLEAN Alert;
-} DHCP_OPTION_FORMAT;
-
-typedef
-EFI_STATUS
-(*DHCP_CHECK_OPTION) (
- IN UINT8 Tag,
- IN UINT8 Len,
- IN UINT8 *Data,
- IN VOID *Context
- );
-
-EFI_STATUS
-DhcpIterateOptions (
- IN EFI_DHCP4_PACKET *Packet,
- IN DHCP_CHECK_OPTION Check, OPTIONAL
- IN VOID *Context
- );
-
-EFI_STATUS
-DhcpValidateOptions (
- IN EFI_DHCP4_PACKET *Packet,
- OUT DHCP_PARAMETER **Para OPTIONAL
- );
-
-EFI_STATUS
-DhcpParseOption (
- IN EFI_DHCP4_PACKET *Packet,
- OUT INTN *Count,
- OUT DHCP_OPTION **OptionPoint
- );
-
-UINT8 *
-DhcpAppendOption (
- IN UINT8 *Buf,
- IN UINT8 Tag,
- IN UINT16 DataLen,
- IN UINT8 *Data
- );
-
-EFI_STATUS
-DhcpBuild (
- IN EFI_DHCP4_PACKET *SeedPacket,
- IN UINT32 DeleteCount,
- IN UINT8 *DeleteList OPTIONAL,
- IN UINT32 AppendCount,
- IN EFI_DHCP4_PACKET_OPTION *AppendList[] OPTIONAL,
- OUT EFI_DHCP4_PACKET **NewPacket
- );
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2006, 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
+\r
+Module Name:\r
+\r
+ Dhcp4Option.h\r
+\r
+Abstract:\r
+\r
+ To validate, parse and process the DHCP options\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_DHCP4_OPTION_H__\r
+#define __EFI_DHCP4_OPTION_H__\r
+\r
+//\r
+// DHCP option tags (types)\r
+//\r
+enum {\r
+ //\r
+ // RFC1497 vendor extensions\r
+ //\r
+ DHCP_TAG_PAD = 0, // Pad Option\r
+ DHCP_TAG_EOP = 255, // End Option\r
+ DHCP_TAG_NETMASK = 1, // Subnet Mask\r
+ DHCP_TAG_TIME_OFFSET = 2, // Time Offset from UTC\r
+ DHCP_TAG_ROUTER = 3, // Router option,\r
+ DHCP_TAG_TIME_SERVER = 4, // Time Server\r
+ DHCP_TAG_NAME_SERVER = 5, // Name Server\r
+ DHCP_TAG_DNS_SERVER = 6, // Domain Name Server\r
+ DHCP_TAG_LOG_SERVER = 7, // Log Server\r
+ DHCP_TAG_COOKIE_SERVER = 8, // Cookie Server\r
+ DHCP_TAG_LPR_SERVER = 9, // LPR Print Server\r
+ DHCP_TAG_IMPRESS_SERVER = 10, // Impress Server\r
+ DHCP_TAG_RL_SERVER = 11, // Resource Location Server\r
+ DHCP_TAG_HOSTNAME = 12, // Host Name\r
+ DHCP_TAG_BOOTFILE_LEN = 13, // Boot File Size\r
+ DHCP_TAG_DUMP = 14, // Merit Dump File\r
+ DHCP_TAG_DOMAINNAME = 15, // Domain Name\r
+ DHCP_TAG_SWAP_SERVER = 16, // Swap Server\r
+ DHCP_TAG_ROOTPATH = 17, // Root path\r
+ DHCP_TAG_EXTEND_PATH = 18, // Extensions Path\r
+\r
+ //\r
+ // IP Layer Parameters per Host\r
+ //\r
+ DHCP_TAG_IPFORWARD = 19, // IP Forwarding Enable/Disable\r
+ DHCP_TAG_NONLOCAL_SRR = 20, // on-Local Source Routing Enable/Disable\r
+ DHCP_TAG_POLICY_SRR = 21, // Policy Filter\r
+ DHCP_TAG_EMTU = 22, // Maximum Datagram Reassembly Size\r
+ DHCP_TAG_TTL = 23, // Default IP Time-to-live\r
+ DHCP_TAG_PATHMTU_AGE = 24, // Path MTU Aging Timeout\r
+ DHCP_TAG_PATHMTU_PLATEAU = 25, // Path MTU Plateau Table\r
+\r
+ //\r
+ // IP Layer Parameters per Interface\r
+ //\r
+ DHCP_TAG_IFMTU = 26, // Interface MTU\r
+ DHCP_TAG_SUBNET_LOCAL = 27, // All Subnets are Local\r
+ DHCP_TAG_BROADCAST = 28, // Broadcast Address\r
+ DHCP_TAG_DISCOVER_MASK = 29, // Perform Mask Discovery\r
+ DHCP_TAG_SUPPLY_MASK = 30, // Mask Supplier\r
+ DHCP_TAG_DISCOVER_ROUTE = 31, // Perform Router Discovery\r
+ DHCP_TAG_ROUTER_SOLICIT = 32, // Router Solicitation Address\r
+ DHCP_TAG_STATIC_ROUTE = 33, // Static Route\r
+\r
+ //\r
+ // Link Layer Parameters per Interface\r
+ //\r
+ DHCP_TAG_TRAILER = 34, // Trailer Encapsulation\r
+ DHCP_TAG_ARPAGE = 35, // ARP Cache Timeout\r
+ DHCP_TAG_ETHER_ENCAP = 36, // Ethernet Encapsulation\r
+\r
+ //\r
+ // TCP Parameters\r
+ //\r
+ DHCP_TAG_TCP_TTL = 37, // TCP Default TTL\r
+ DHCP_TAG_KEEP_INTERVAL = 38, // TCP Keepalive Interval\r
+ DHCP_TAG_KEEP_GARBAGE = 39, // TCP Keepalive Garbage\r
+\r
+ //\r
+ // Application and Service Parameters\r
+ //\r
+ DHCP_TAG_NIS_DOMAIN = 40, // Network Information Service Domain\r
+ DHCP_TAG_NIS_SERVER = 41, // Network Information Servers\r
+ DHCP_TAG_NTP_SERVER = 42, // Network Time Protocol Servers\r
+ DHCP_TAG_VENDOR = 43, // Vendor Specific Information\r
+ DHCP_TAG_NBNS = 44, // NetBIOS over TCP/IP Name Server\r
+ DHCP_TAG_NBDD = 45, // NetBIOS Datagram Distribution Server\r
+ DHCP_TAG_NBTYPE = 46, // NetBIOS over TCP/IP Node Type\r
+ DHCP_TAG_NBSCOPE = 47, // NetBIOS over TCP/IP Scope\r
+ DHCP_TAG_XFONT = 48, // X Window System Font Server\r
+ DHCP_TAG_XDM = 49, // X Window System Display Manager\r
+ DHCP_TAG_NISPLUS = 64, // Network Information Service+ Domain\r
+ DHCP_TAG_NISPLUS_SERVER = 65, // Network Information Service+ Servers\r
+ DHCP_TAG_MOBILEIP = 68, // Mobile IP Home Agent\r
+ DHCP_TAG_SMTP = 69, // Simple Mail Transport Protocol Server\r
+ DHCP_TAG_POP3 = 70, // Post Office Protocol (POP3) Server\r
+ DHCP_TAG_NNTP = 71, // Network News Transport Protocol Server\r
+ DHCP_TAG_WWW = 72, // Default World Wide Web (WWW) Server\r
+ DHCP_TAG_FINGER = 73, // Default Finger Server\r
+ DHCP_TAG_IRC = 74, // Default Internet Relay Chat (IRC) Server\r
+ DHCP_TAG_STTALK = 75, // StreetTalk Server\r
+ DHCP_TAG_STDA = 76, // StreetTalk Directory Assistance Server\r
+ DHCP_TAG_CLASSLESS_ROUTE = 121, // Classless Route\r
+\r
+ //\r
+ // DHCP Extensions\r
+ //\r
+ DHCP_TAG_REQUEST_IP = 50, // Requested IP Address\r
+ DHCP_TAG_LEASE = 51, // IP Address Lease Time\r
+ DHCP_TAG_OVERLOAD = 52, // Option Overload\r
+ DHCP_TAG_TFTP = 66, // TFTP server name\r
+ DHCP_TAG_BOOTFILE = 67, // Bootfile name\r
+ DHCP_TAG_TYPE = 53, // DHCP Message Type\r
+ DHCP_TAG_SERVER_ID = 54, // Server Identifier\r
+ DHCP_TAG_PARA_LIST = 55, // Parameter Request List\r
+ DHCP_TAG_MESSAGE = 56, // Message\r
+ DHCP_TAG_MAXMSG = 57, // Maximum DHCP Message Size\r
+ DHCP_TAG_T1 = 58, // Renewal (T1) Time Value\r
+ DHCP_TAG_T2 = 59, // Rebinding (T2) Time Value\r
+ DHCP_TAG_VENDOR_CLASS = 60, // Vendor class identifier\r
+ DHCP_TAG_CLIENT_ID = 61 // Client-identifier\r
+};\r
+\r
+enum {\r
+ DHCP_OPTION_MAGIC = 0x63538263, // Network byte order\r
+ DHCP_MAX_OPTIONS = 256,\r
+\r
+ //\r
+ // DHCP option types, this is used to validate the DHCP options.\r
+ //\r
+ DHCP_OPTION_SWITCH = 1,\r
+ DHCP_OPTION_INT8,\r
+ DHCP_OPTION_INT16,\r
+ DHCP_OPTION_INT32,\r
+ DHCP_OPTION_IP,\r
+ DHCP_OPTION_IPPAIR,\r
+\r
+ //\r
+ // Value of DHCP overload option\r
+ //\r
+ DHCP_OVERLOAD_FILENAME = 1,\r
+ DHCP_OVERLOAD_SVRNAME = 2,\r
+ DHCP_OVERLOAD_BOTH = 3\r
+};\r
+\r
+//\r
+// The DHCP option structure. This structure extends the EFI_DHCP_OPTION\r
+// structure to support options longer than 255 bytes, such as classless route.\r
+//\r
+typedef struct {\r
+ UINT8 Tag;\r
+ UINT16 Len;\r
+ UINT8 *Data;\r
+} DHCP_OPTION;\r
+\r
+//\r
+// Structures used to parse the DHCP options with RFC3396 support.\r
+//\r
+typedef struct {\r
+ UINT8 Index;\r
+ UINT16 Offset;\r
+} DHCP_OPTION_COUNT;\r
+\r
+typedef struct {\r
+ DHCP_OPTION_COUNT *OpCount;\r
+ DHCP_OPTION *Options;\r
+ UINT8 *Buf;\r
+} DHCP_OPTION_CONTEXT;\r
+\r
+//\r
+// The options that matters to DHCP driver itself. The user of\r
+// DHCP clients may be interested in other options, such as\r
+// classless route, who can parse the DHCP offer to get them.\r
+//\r
+typedef struct {\r
+ IP4_ADDR NetMask; // DHCP_TAG_NETMASK\r
+ IP4_ADDR Router; // DHCP_TAG_ROUTER, only the first router is used\r
+\r
+ //\r
+ // DHCP specific options\r
+ //\r
+ UINT8 DhcpType; // DHCP_TAG_TYPE\r
+ UINT8 Overload; // DHCP_TAG_OVERLOAD\r
+ IP4_ADDR ServerId; // DHCP_TAG_SERVER_ID\r
+ UINT32 Lease; // DHCP_TAG_LEASE\r
+ UINT32 T1; // DHCP_TAG_T1\r
+ UINT32 T2; // DHCP_TAG_T2\r
+} DHCP_PARAMETER;\r
+\r
+//\r
+// Structure used to describe and validate the format of DHCP options.\r
+// Type is the options' data type, such as DHCP_OPTION_INT8. MinOccur\r
+// is the minium occurance of this data type. MaxOccur is defined\r
+// similarly. If MaxOccur is -1, it means that there is no limit on the\r
+// maximum occurance. Alert tells whether DHCP client should further\r
+// inspect the option to parse DHCP_PARAMETER.\r
+//\r
+typedef struct {\r
+ UINT8 Tag;\r
+ INTN Type;\r
+ INTN MinOccur;\r
+ INTN MaxOccur;\r
+ BOOLEAN Alert;\r
+} DHCP_OPTION_FORMAT;\r
+\r
+typedef\r
+EFI_STATUS\r
+(*DHCP_CHECK_OPTION) (\r
+ IN UINT8 Tag,\r
+ IN UINT8 Len,\r
+ IN UINT8 *Data,\r
+ IN VOID *Context\r
+ );\r
+\r
+EFI_STATUS\r
+DhcpIterateOptions (\r
+ IN EFI_DHCP4_PACKET *Packet,\r
+ IN DHCP_CHECK_OPTION Check, OPTIONAL\r
+ IN VOID *Context\r
+ );\r
+\r
+EFI_STATUS\r
+DhcpValidateOptions (\r
+ IN EFI_DHCP4_PACKET *Packet,\r
+ OUT DHCP_PARAMETER **Para OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+DhcpParseOption (\r
+ IN EFI_DHCP4_PACKET *Packet,\r
+ OUT INTN *Count,\r
+ OUT DHCP_OPTION **OptionPoint\r
+ );\r
+\r
+UINT8 *\r
+DhcpAppendOption (\r
+ IN UINT8 *Buf,\r
+ IN UINT8 Tag,\r
+ IN UINT16 DataLen,\r
+ IN UINT8 *Data\r
+ );\r
+\r
+EFI_STATUS\r
+DhcpBuild (\r
+ IN EFI_DHCP4_PACKET *SeedPacket,\r
+ IN UINT32 DeleteCount,\r
+ IN UINT8 *DeleteList OPTIONAL,\r
+ IN UINT32 AppendCount,\r
+ IN EFI_DHCP4_PACKET_OPTION *AppendList[] OPTIONAL,\r
+ OUT EFI_DHCP4_PACKET **NewPacket\r
+ );\r
+\r
+#endif\r
//\r
// EFI Component Name Functions\r
//\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
Ip4ConfigComponentNameGetDriverName (\r
OUT CHAR16 **DriverName\r
);\r
\r
+\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
Ip4ConfigComponentNameGetControllerName (\r
OUT CHAR16 **ControllerName\r
);\r
\r
+\r
//\r
// EFI Component Name Protocol\r
//\r
-EFI_COMPONENT_NAME_PROTOCOL gIp4ConfigComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL gIp4ConfigComponentName = {\r
Ip4ConfigComponentNameGetDriverName,\r
Ip4ConfigComponentNameGetControllerName,\r
"eng"\r
-};\r
+ };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gIp4ConfigComponentName2 = {\r
+ (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) Ip4ConfigComponentNameGetDriverName,\r
+ (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) Ip4ConfigComponentNameGetControllerName,\r
+ "en"\r
+ };\r
+\r
\r
STATIC\r
EFI_UNICODE_STRING_TABLE mIp4ConfigDriverNameTable[] = {\r
- {"eng", L"IP4 CONFIG Network Service Driver"},\r
+ {"eng;en", L"IP4 CONFIG Network Service Driver"},\r
{NULL, NULL}\r
};\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
Ip4ConfigComponentNameGetDriverName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **DriverName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- Language - A pointer to a three character ISO 639-2 language identifier.\r
- This is the language of the driver name that that the caller\r
- is requesting, and it must match one of the languages specified\r
- in SupportedLanguages. The number of languages supported by a\r
- driver is up to the driver writer.\r
- DriverName - A pointer to the Unicode string to return. This Unicode string\r
- is the name of the driver specified by This in the language\r
- specified by Language.\r
-\r
- Returns:\r
- EFI_SUCCES - The Unicode string for the Driver specified by This\r
- and the language specified by Language was returned\r
- in DriverName.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - DriverName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
- return LookupUnicodeString (\r
+ return LookupUnicodeString2 (\r
Language,\r
- gIp4ConfigComponentName.SupportedLanguages,\r
+ This->SupportedLanguages,\r
mIp4ConfigDriverNameTable,\r
- DriverName\r
+ DriverName,\r
+ (BOOLEAN)(This == &gIp4ConfigComponentName)\r
);\r
}\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
Ip4ConfigComponentNameGetControllerName (\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
+ 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
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the controller\r
- that is being managed by an EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- ControllerHandle - The handle of a controller that the driver specified by\r
- This is managing. This handle specifies the controller\r
- whose name is to be returned.\r
- ChildHandle - The handle of the child controller to retrieve the name\r
- of. This is an optional parameter that may be NULL. It\r
- will be NULL for device drivers. It will also be NULL\r
- for a bus drivers that wish to retrieve the name of the\r
- bus controller. It will not be NULL for a bus driver\r
- that wishes to retrieve the name of a child controller.\r
- Language - A pointer to a three character ISO 639-2 language\r
- identifier. This is the language of the controller name\r
- that that the caller is requesting, and it must match one\r
- of the languages specified in SupportedLanguages. The\r
- number of languages supported by a driver is up to the\r
- driver writer.\r
- ControllerName - A pointer to the Unicode string to return. This Unicode\r
- string is the name of the controller specified by\r
- ControllerHandle and ChildHandle in the language specified\r
- by Language from the point of view of the driver specified\r
- by This.\r
-\r
- Returns:\r
- EFI_SUCCESS - The Unicode string for the user readable name in the\r
- language specified by Language for the driver\r
- specified by This was returned in DriverName.\r
- EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - ControllerName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This is not currently managing\r
- the controller specified by ControllerHandle and\r
- ChildHandle.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
return EFI_UNSUPPORTED;\r
}\r
-/** @file
-
-Copyright (c) 2006 - 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:
-
- Ip4Config.h
-
-Abstract:
-
- Header file for IP4Config driver.
-
-
-**/
-
-#ifndef __EFI_IP4CONFIG_H__
-#define __EFI_IP4CONFIG_H__
-
+/** @file\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
+\r
+ Ip4Config.h\r
+\r
+Abstract:\r
+\r
+ Header file for IP4Config driver.\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_IP4CONFIG_H__\r
+#define __EFI_IP4CONFIG_H__\r
+\r
#include <PiDxe.h>\r
\r
#include <Protocol/Dhcp4.h>\r
#include <Library/UefiLib.h>\r
#include <Library/NetLib.h>\r
#include <Library/BaseMemoryLib.h>\r
-#include <Library/MemoryAllocationLib.h>
-
-#include "NicIp4Variable.h"
-
-typedef struct _IP4_CONFIG_INSTANCE IP4_CONFIG_INSTANCE;
-
-enum {
- IP4_CONFIG_STATE_IDLE = 0,
- IP4_CONFIG_STATE_STARTED,
- IP4_CONFIG_STATE_CONFIGURED,
-
- IP4_PROTO_ICMP = 0x01,
- IP4_CONFIG_INSTANCE_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', '4', 'C'),
-
- DHCP_TAG_PARA_LIST = 55,
- DHCP_TAG_NETMASK = 1,
- DHCP_TAG_ROUTER = 3
-};
-
-//
-// Configure the DHCP to request the routers and netmask
-// from server. The DHCP_TAG_NETMASK is included in Head.
-//
-#pragma pack(1)
-typedef struct {
- EFI_DHCP4_PACKET_OPTION Head;
- UINT8 Route;
-} IP4_CONFIG_DHCP4_OPTION;
-#pragma pack()
-
-struct _IP4_CONFIG_INSTANCE {
- UINT32 Signature;
- EFI_HANDLE Controller;
- EFI_HANDLE Image;
-
- EFI_IP4_CONFIG_PROTOCOL Ip4ConfigProtocol;
- EFI_NIC_IP4_CONFIG_PROTOCOL NicIp4Protocol;
-
- //
- // NicConfig's state, such as IP4_CONFIG_STATE_IDLE
- //
- INTN State;
-
- //
- // Mnp child to keep the connection with MNP.
- //
- EFI_MANAGED_NETWORK_PROTOCOL *Mnp;
- EFI_HANDLE MnpHandle;
-
- //
- // User's requests data
- //
- EFI_EVENT DoneEvent;
- EFI_EVENT ReconfigEvent;
- EFI_STATUS Result;
-
- //
- // Identity of this interface and some configuration info.
- //
- NIC_ADDR NicAddr;
- UINT16 NicName[IP4_NIC_NAME_LENGTH];
- UINT32 NicIndex;
- NIC_IP4_CONFIG_INFO *NicConfig;
-
- //
- // DHCP handles to access DHCP
- //
- EFI_DHCP4_PROTOCOL *Dhcp4;
- EFI_HANDLE Dhcp4Handle;
- EFI_EVENT Dhcp4Event;
-};
-
-#define IP4_CONFIG_INSTANCE_FROM_IP4CONFIG(this) \
- CR (this, IP4_CONFIG_INSTANCE, Ip4ConfigProtocol, IP4_CONFIG_INSTANCE_SIGNATURE)
-
-#define IP4_CONFIG_INSTANCE_FROM_NIC_IP4CONFIG(this) \
- CR (this, IP4_CONFIG_INSTANCE, NicIp4Protocol, IP4_CONFIG_INSTANCE_SIGNATURE)
-
-extern EFI_DRIVER_BINDING_PROTOCOL gIp4ConfigDriverBinding;
-extern EFI_COMPONENT_NAME_PROTOCOL gIp4ConfigComponentName;
-extern IP4_CONFIG_INSTANCE *mIp4ConfigNicList[MAX_IP4_CONFIG_IN_VARIABLE];
-extern EFI_IP4_CONFIG_PROTOCOL mIp4ConfigProtocolTemplate;
-extern EFI_NIC_IP4_CONFIG_PROTOCOL mNicIp4ConfigProtocolTemplate;
-
-VOID
-Ip4ConfigCleanDhcp4 (
- IN IP4_CONFIG_INSTANCE *This
- );
-
-VOID
-Ip4ConfigCleanConfig (
- IN IP4_CONFIG_INSTANCE *Instance
- );
-#endif
+#include <Library/MemoryAllocationLib.h>\r
+\r
+#include "NicIp4Variable.h"\r
+\r
+typedef struct _IP4_CONFIG_INSTANCE IP4_CONFIG_INSTANCE;\r
+\r
+enum {\r
+ IP4_CONFIG_STATE_IDLE = 0,\r
+ IP4_CONFIG_STATE_STARTED,\r
+ IP4_CONFIG_STATE_CONFIGURED,\r
+\r
+ IP4_PROTO_ICMP = 0x01,\r
+ IP4_CONFIG_INSTANCE_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', '4', 'C'),\r
+\r
+ DHCP_TAG_PARA_LIST = 55,\r
+ DHCP_TAG_NETMASK = 1,\r
+ DHCP_TAG_ROUTER = 3\r
+};\r
+\r
+//\r
+// Configure the DHCP to request the routers and netmask\r
+// from server. The DHCP_TAG_NETMASK is included in Head.\r
+//\r
+#pragma pack(1)\r
+typedef struct {\r
+ EFI_DHCP4_PACKET_OPTION Head;\r
+ UINT8 Route;\r
+} IP4_CONFIG_DHCP4_OPTION;\r
+#pragma pack()\r
+\r
+struct _IP4_CONFIG_INSTANCE {\r
+ UINT32 Signature;\r
+ EFI_HANDLE Controller;\r
+ EFI_HANDLE Image;\r
+\r
+ EFI_IP4_CONFIG_PROTOCOL Ip4ConfigProtocol;\r
+ EFI_NIC_IP4_CONFIG_PROTOCOL NicIp4Protocol;\r
+\r
+ //\r
+ // NicConfig's state, such as IP4_CONFIG_STATE_IDLE\r
+ //\r
+ INTN State;\r
+\r
+ //\r
+ // Mnp child to keep the connection with MNP.\r
+ //\r
+ EFI_MANAGED_NETWORK_PROTOCOL *Mnp;\r
+ EFI_HANDLE MnpHandle;\r
+\r
+ //\r
+ // User's requests data\r
+ //\r
+ EFI_EVENT DoneEvent;\r
+ EFI_EVENT ReconfigEvent;\r
+ EFI_STATUS Result;\r
+\r
+ //\r
+ // Identity of this interface and some configuration info.\r
+ //\r
+ NIC_ADDR NicAddr;\r
+ UINT16 NicName[IP4_NIC_NAME_LENGTH];\r
+ UINT32 NicIndex;\r
+ NIC_IP4_CONFIG_INFO *NicConfig;\r
+\r
+ //\r
+ // DHCP handles to access DHCP\r
+ //\r
+ EFI_DHCP4_PROTOCOL *Dhcp4;\r
+ EFI_HANDLE Dhcp4Handle;\r
+ EFI_EVENT Dhcp4Event;\r
+};\r
+\r
+#define IP4_CONFIG_INSTANCE_FROM_IP4CONFIG(this) \\r
+ CR (this, IP4_CONFIG_INSTANCE, Ip4ConfigProtocol, IP4_CONFIG_INSTANCE_SIGNATURE)\r
+\r
+#define IP4_CONFIG_INSTANCE_FROM_NIC_IP4CONFIG(this) \\r
+ CR (this, IP4_CONFIG_INSTANCE, NicIp4Protocol, IP4_CONFIG_INSTANCE_SIGNATURE)\r
+\r
+extern EFI_DRIVER_BINDING_PROTOCOL gIp4ConfigDriverBinding;\r
+extern EFI_COMPONENT_NAME_PROTOCOL gIp4ConfigComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gIp4ConfigComponentName2;\r
+extern IP4_CONFIG_INSTANCE *mIp4ConfigNicList[MAX_IP4_CONFIG_IN_VARIABLE];\r
+extern EFI_IP4_CONFIG_PROTOCOL mIp4ConfigProtocolTemplate;\r
+extern EFI_NIC_IP4_CONFIG_PROTOCOL mNicIp4ConfigProtocolTemplate;\r
+\r
+VOID\r
+Ip4ConfigCleanDhcp4 (\r
+ IN IP4_CONFIG_INSTANCE *This\r
+ );\r
+\r
+VOID\r
+Ip4ConfigCleanConfig (\r
+ IN IP4_CONFIG_INSTANCE *Instance\r
+ );\r
+#endif\r
\r
--*/\r
{\r
- return EfiLibInstallAllDriverProtocols (\r
+ return EfiLibInstallDriverBindingComponentName2 (\r
ImageHandle,\r
SystemTable,\r
&gIp4ConfigDriverBinding,\r
ImageHandle,\r
&gIp4ConfigComponentName,\r
- NULL,\r
- NULL\r
+ &gIp4ConfigComponentName2\r
);\r
}\r
\r
-/** @file
-
-Copyright (c) 2006, 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:
-
- NicIp4Variable.h
-
-Abstract:
-
- Routines used to operate the Ip4 configure variable
-
-
-**/
-
-#ifndef _NIC_IP4_VARIABLE_H_
-#define _NIC_IP4_VARIABLE_H_
-
-
-#include <Protocol/NicIp4Config.h>
-
-//
-// Return the size of NIC_IP4_CONFIG_INFO and EFI_IP4_IPCONFIG_DATA.
-// They are of variable size
-//
-#define SIZEOF_IP4_CONFIG_INFO(Ip4Config) \
- (sizeof (EFI_IP4_IPCONFIG_DATA) + \
- sizeof (EFI_IP4_ROUTE_TABLE) * (NET_MAX (1, (Ip4Config)->RouteTableSize) - 1))
-
-#define SIZEOF_NIC_IP4_CONFIG_INFO(NicConfig) \
- (sizeof (NIC_IP4_CONFIG_INFO) + \
- sizeof (EFI_IP4_ROUTE_TABLE) * (NET_MAX (1, (NicConfig)->Ip4Info.RouteTableSize) - 1))
-
-//
-// Compare whether two NIC address are equal includes their type and length.
-//
-#define NIC_ADDR_EQUAL(Nic1, Nic2) \
- (((Nic1)->Type == (Nic2)->Type) && ((Nic1)->Len == (Nic2)->Len) && \
- NET_MAC_EQUAL (&(Nic1)->MacAddr, &(Nic2)->MacAddr, (Nic1)->Len))
-
-BOOLEAN
-Ip4ConfigIsValid (
- IN NIC_IP4_CONFIG_INFO *NicConfig
- );
-
-IP4_CONFIG_VARIABLE *
-Ip4ConfigReadVariable (
- VOID
- );
-
-EFI_STATUS
-Ip4ConfigWriteVariable (
- IN IP4_CONFIG_VARIABLE *Config OPTIONAL
- );
-
-NIC_IP4_CONFIG_INFO *
-Ip4ConfigFindNicVariable (
- IN IP4_CONFIG_VARIABLE *Variable,
- IN NIC_ADDR *NicAddr
- );
-
-IP4_CONFIG_VARIABLE *
-Ip4ConfigModifyVariable (
- IN IP4_CONFIG_VARIABLE *Variable, OPTIONAL
- IN NIC_ADDR *NicAddr,
- IN NIC_IP4_CONFIG_INFO *Config OPTIONAL
- );
-#endif
+/** @file\r
+\r
+Copyright (c) 2006, 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
+\r
+ NicIp4Variable.h\r
+\r
+Abstract:\r
+\r
+ Routines used to operate the Ip4 configure variable\r
+\r
+\r
+**/\r
+\r
+#ifndef _NIC_IP4_VARIABLE_H_\r
+#define _NIC_IP4_VARIABLE_H_\r
+\r
+\r
+#include <Protocol/NicIp4Config.h>\r
+\r
+//\r
+// Return the size of NIC_IP4_CONFIG_INFO and EFI_IP4_IPCONFIG_DATA.\r
+// They are of variable size\r
+//\r
+#define SIZEOF_IP4_CONFIG_INFO(Ip4Config) \\r
+ (sizeof (EFI_IP4_IPCONFIG_DATA) + \\r
+ sizeof (EFI_IP4_ROUTE_TABLE) * (NET_MAX (1, (Ip4Config)->RouteTableSize) - 1))\r
+\r
+#define SIZEOF_NIC_IP4_CONFIG_INFO(NicConfig) \\r
+ (sizeof (NIC_IP4_CONFIG_INFO) + \\r
+ sizeof (EFI_IP4_ROUTE_TABLE) * (NET_MAX (1, (NicConfig)->Ip4Info.RouteTableSize) - 1))\r
+\r
+//\r
+// Compare whether two NIC address are equal includes their type and length.\r
+//\r
+#define NIC_ADDR_EQUAL(Nic1, Nic2) \\r
+ (((Nic1)->Type == (Nic2)->Type) && ((Nic1)->Len == (Nic2)->Len) && \\r
+ NET_MAC_EQUAL (&(Nic1)->MacAddr, &(Nic2)->MacAddr, (Nic1)->Len))\r
+\r
+BOOLEAN\r
+Ip4ConfigIsValid (\r
+ IN NIC_IP4_CONFIG_INFO *NicConfig\r
+ );\r
+\r
+IP4_CONFIG_VARIABLE *\r
+Ip4ConfigReadVariable (\r
+ VOID\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4ConfigWriteVariable (\r
+ IN IP4_CONFIG_VARIABLE *Config OPTIONAL\r
+ );\r
+\r
+NIC_IP4_CONFIG_INFO *\r
+Ip4ConfigFindNicVariable (\r
+ IN IP4_CONFIG_VARIABLE *Variable,\r
+ IN NIC_ADDR *NicAddr\r
+ );\r
+\r
+IP4_CONFIG_VARIABLE *\r
+Ip4ConfigModifyVariable (\r
+ IN IP4_CONFIG_VARIABLE *Variable, OPTIONAL\r
+ IN NIC_ADDR *NicAddr,\r
+ IN NIC_IP4_CONFIG_INFO *Config OPTIONAL\r
+ );\r
+#endif\r
//\r
// EFI Component Name Functions\r
//\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
Ip4ComponentNameGetDriverName (\r
OUT CHAR16 **DriverName\r
);\r
\r
+\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
Ip4ComponentNameGetControllerName (\r
OUT CHAR16 **ControllerName\r
);\r
\r
+\r
//\r
// EFI Component Name Protocol\r
//\r
-EFI_COMPONENT_NAME_PROTOCOL gIp4ComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL gIp4ComponentName = {\r
Ip4ComponentNameGetDriverName,\r
Ip4ComponentNameGetControllerName,\r
"eng"\r
-};\r
+ };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gIp4ComponentName2 = {\r
+ (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) Ip4ComponentNameGetDriverName,\r
+ (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) Ip4ComponentNameGetControllerName,\r
+ "en"\r
+ };\r
+\r
\r
static EFI_UNICODE_STRING_TABLE mIp4DriverNameTable[] = {\r
{\r
- "eng",\r
+ "eng;en",\r
L"IP4 Network Service Driver"\r
},\r
{\r
}\r
};\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
Ip4ComponentNameGetDriverName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **DriverName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable\r
- name of the EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- Language - A pointer to a three character ISO 639-2 language\r
- identifier. This is the language of the driver name\r
- that that the caller is requesting, and it must match\r
- one of the languages specified in SupportedLanguages.\r
- The number of languages supported by a driver is up to\r
- the driver writer.\r
- DriverName - A pointer to the Unicode string to return. This Unicode\r
- string is the name of the driver specified by This in the\r
- language specified by Language.\r
-\r
- Returns:\r
- EFI_SUCCES - The Unicode string for the Driver specified by This\r
- and the language specified by Language was returned\r
- in DriverName.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - DriverName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
- return LookupUnicodeString (\r
- Language,\r
- gIp4ComponentName.SupportedLanguages,\r
- mIp4DriverNameTable,\r
- DriverName\r
- );\r
+ return LookupUnicodeString2 (\r
+ Language,\r
+ This->SupportedLanguages,\r
+ mIp4DriverNameTable,\r
+ DriverName,\r
+ (BOOLEAN)(This == &gIp4ComponentName)\r
+ );\r
\r
}\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
Ip4ComponentNameGetControllerName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **ControllerName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of\r
- the controller that is being managed by an EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- ControllerHandle - The handle of a controller that the driver specified by\r
- This is managing. This handle specifies the controller\r
- whose name is to be returned.\r
- ChildHandle - The handle of the child controller to retrieve the name\r
- of. This is an optional parameter that may be NULL. It\r
- will be NULL for device drivers. It will also be NULL\r
- for a bus drivers that wish to retrieve the name of the\r
- bus controller. It will not be NULL for a bus driver\r
- that wishes to retrieve the name of a child controller.\r
- Language - A pointer to a three character ISO 639-2 language\r
- identifier. This is the language of the controller name\r
- that that the caller is requesting, and it must match one\r
- of the languages specified in SupportedLanguages. The\r
- number of languages supported by a driver is up to the\r
- driver writer.\r
- ControllerName - A pointer to the Unicode string to return. This Unicode\r
- string is the name of the controller specified by\r
- ControllerHandle and ChildHandle in the language\r
- specified by Language from the point of view of the\r
- driver specified by This.\r
-\r
- Returns:\r
- EFI_SUCCESS - The Unicode string for the user readable name in the\r
- language specified by Language for the driver\r
- specified by This was returned in DriverName.\r
- EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not\r
- a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - ControllerName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This is not currently\r
- managing the controller specified by\r
- ControllerHandle and ChildHandle.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
return EFI_UNSUPPORTED;\r
}\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Ip4Common.h
-
-Abstract:
-
- Common definition for IP4.
-
-
-**/
-
-#ifndef __EFI_IP4_COMMON_H__
-#define __EFI_IP4_COMMON_H__
-
-typedef struct _IP4_INTERFACE IP4_INTERFACE;
-typedef struct _IP4_PROTOCOL IP4_PROTOCOL;
-typedef struct _IP4_SERVICE IP4_SERVICE;
-
-
-enum {
- IP4_ETHER_PROTO = 0x0800,
-
- IP4_PROTO_ICMP = 0x01,
- IP4_PROTO_IGMP = 0x02,
-
- //
- // The packet is received as link level broadcast/multicast/promiscuous.
- //
- IP4_LINK_BROADCAST = 0x00000001,
- IP4_LINK_MULTICAST = 0x00000002,
- IP4_LINK_PROMISC = 0x00000004,
-
- //
- // IP4 address cast type classfication. Keep it true that any
- // type bigger than or equal to LOCAL_BROADCAST is broadcast.
- //
- IP4_PROMISCUOUS = 1,
- IP4_LOCAL_HOST,
- IP4_MULTICAST,
- IP4_LOCAL_BROADCAST, // Destination is 255.255.255.255
- IP4_SUBNET_BROADCAST,
- IP4_NET_BROADCAST,
-
- //
- // IP4 header flags
- //
- IP4_HEAD_DF_MASK = 0x4000,
- IP4_HEAD_MF_MASK = 0x2000,
- IP4_HEAD_OFFSET_MASK = 0x1fff
-};
-
-#define IP4_ALLZERO_ADDRESS 0x00000000u
-#define IP4_ALLONE_ADDRESS 0xFFFFFFFFu
-#define IP4_ALLSYSTEM_ADDRESS 0xE0000001u
-#define IP4_ALLROUTER_ADDRESS 0xE0000002u
-
-//
-// Compose the fragment field to be used in the IP4 header.
-//
-#define IP4_HEAD_FRAGMENT_FIELD(Df, Mf, Offset) \
- ((UINT16)(((Df) ? 0x4000 : 0) | ((Mf) ? 0x2000 : 0) | (((Offset) >> 3) & 0x1fff)))
-
-#define IP4_LAST_FRAGMENT(FragmentField) \
- (((FragmentField) & IP4_HEAD_MF_MASK) == 0)
-
-#define IP4_FIRST_FRAGMENT(FragmentField) \
- ((BOOLEAN)(((FragmentField) & IP4_HEAD_OFFSET_MASK) == 0))
-
-#define IP4_IS_BROADCAST(CastType) ((CastType) >= IP4_LOCAL_BROADCAST)
-
-//
-// Conver the Microsecond to second. IP transmit/receive time is
-// in the unit of microsecond. IP ticks once per second.
-//
-#define IP4_US_TO_SEC(Us) (((Us) + 999999) / 1000000)
-
-INTN
-Ip4GetNetCast (
- IN IP4_ADDR IpAddr,
- IN IP4_INTERFACE *IpIf
- );
-
-INTN
-Ip4GetHostCast (
- IN IP4_SERVICE *IpSb,
- IN IP4_ADDR Dst,
- IN IP4_ADDR Src
- );
-
-IP4_INTERFACE *
-Ip4FindInterface (
- IN IP4_SERVICE *IpService,
- IN IP4_ADDR Addr
- );
-
-IP4_INTERFACE *
-Ip4FindNet (
- IN IP4_SERVICE *IpService,
- IN IP4_ADDR Addr
- );
-
-IP4_INTERFACE *
-Ip4FindStationAddress (
- IN IP4_SERVICE *IpSb,
- IN IP4_ADDR Ip,
- IN IP4_ADDR Netmask
- );
-
-EFI_STATUS
-Ip4GetMulticastMac (
- IN EFI_MANAGED_NETWORK_PROTOCOL *Mnp,
- IN IP4_ADDR Multicast,
- OUT EFI_MAC_ADDRESS *Mac
- );
-
-IP4_HEAD *
-Ip4NtohHead (
- IN IP4_HEAD *Head
- );
-
-EFI_STATUS
-Ip4SetVariableData (
- IN IP4_SERVICE *IpSb
- );
-
-VOID
-Ip4ClearVariableData (
- IN IP4_SERVICE *IpSb
- );
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+Module Name:\r
+\r
+ Ip4Common.h\r
+\r
+Abstract:\r
+\r
+ Common definition for IP4.\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_IP4_COMMON_H__\r
+#define __EFI_IP4_COMMON_H__\r
+\r
+typedef struct _IP4_INTERFACE IP4_INTERFACE;\r
+typedef struct _IP4_PROTOCOL IP4_PROTOCOL;\r
+typedef struct _IP4_SERVICE IP4_SERVICE;\r
+\r
+\r
+enum {\r
+ IP4_ETHER_PROTO = 0x0800,\r
+\r
+ IP4_PROTO_ICMP = 0x01,\r
+ IP4_PROTO_IGMP = 0x02,\r
+\r
+ //\r
+ // The packet is received as link level broadcast/multicast/promiscuous.\r
+ //\r
+ IP4_LINK_BROADCAST = 0x00000001,\r
+ IP4_LINK_MULTICAST = 0x00000002,\r
+ IP4_LINK_PROMISC = 0x00000004,\r
+\r
+ //\r
+ // IP4 address cast type classfication. Keep it true that any\r
+ // type bigger than or equal to LOCAL_BROADCAST is broadcast.\r
+ //\r
+ IP4_PROMISCUOUS = 1,\r
+ IP4_LOCAL_HOST,\r
+ IP4_MULTICAST,\r
+ IP4_LOCAL_BROADCAST, // Destination is 255.255.255.255\r
+ IP4_SUBNET_BROADCAST,\r
+ IP4_NET_BROADCAST,\r
+\r
+ //\r
+ // IP4 header flags\r
+ //\r
+ IP4_HEAD_DF_MASK = 0x4000,\r
+ IP4_HEAD_MF_MASK = 0x2000,\r
+ IP4_HEAD_OFFSET_MASK = 0x1fff\r
+};\r
+\r
+#define IP4_ALLZERO_ADDRESS 0x00000000u\r
+#define IP4_ALLONE_ADDRESS 0xFFFFFFFFu\r
+#define IP4_ALLSYSTEM_ADDRESS 0xE0000001u\r
+#define IP4_ALLROUTER_ADDRESS 0xE0000002u\r
+\r
+//\r
+// Compose the fragment field to be used in the IP4 header.\r
+//\r
+#define IP4_HEAD_FRAGMENT_FIELD(Df, Mf, Offset) \\r
+ ((UINT16)(((Df) ? 0x4000 : 0) | ((Mf) ? 0x2000 : 0) | (((Offset) >> 3) & 0x1fff)))\r
+\r
+#define IP4_LAST_FRAGMENT(FragmentField) \\r
+ (((FragmentField) & IP4_HEAD_MF_MASK) == 0)\r
+\r
+#define IP4_FIRST_FRAGMENT(FragmentField) \\r
+ ((BOOLEAN)(((FragmentField) & IP4_HEAD_OFFSET_MASK) == 0))\r
+\r
+#define IP4_IS_BROADCAST(CastType) ((CastType) >= IP4_LOCAL_BROADCAST)\r
+\r
+//\r
+// Conver the Microsecond to second. IP transmit/receive time is\r
+// in the unit of microsecond. IP ticks once per second.\r
+//\r
+#define IP4_US_TO_SEC(Us) (((Us) + 999999) / 1000000)\r
+\r
+INTN\r
+Ip4GetNetCast (\r
+ IN IP4_ADDR IpAddr,\r
+ IN IP4_INTERFACE *IpIf\r
+ );\r
+\r
+INTN\r
+Ip4GetHostCast (\r
+ IN IP4_SERVICE *IpSb,\r
+ IN IP4_ADDR Dst,\r
+ IN IP4_ADDR Src\r
+ );\r
+\r
+IP4_INTERFACE *\r
+Ip4FindInterface (\r
+ IN IP4_SERVICE *IpService,\r
+ IN IP4_ADDR Addr\r
+ );\r
+\r
+IP4_INTERFACE *\r
+Ip4FindNet (\r
+ IN IP4_SERVICE *IpService,\r
+ IN IP4_ADDR Addr\r
+ );\r
+\r
+IP4_INTERFACE *\r
+Ip4FindStationAddress (\r
+ IN IP4_SERVICE *IpSb,\r
+ IN IP4_ADDR Ip,\r
+ IN IP4_ADDR Netmask\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4GetMulticastMac (\r
+ IN EFI_MANAGED_NETWORK_PROTOCOL *Mnp,\r
+ IN IP4_ADDR Multicast,\r
+ OUT EFI_MAC_ADDRESS *Mac\r
+ );\r
+\r
+IP4_HEAD *\r
+Ip4NtohHead (\r
+ IN IP4_HEAD *Head\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4SetVariableData (\r
+ IN IP4_SERVICE *IpSb\r
+ );\r
+\r
+VOID\r
+Ip4ClearVariableData (\r
+ IN IP4_SERVICE *IpSb\r
+ );\r
+\r
+#endif\r
\r
--*/\r
{\r
- return EfiLibInstallAllDriverProtocols (\r
+ return EfiLibInstallDriverBindingComponentName2 (\r
ImageHandle,\r
SystemTable,\r
&gIp4DriverBinding,\r
ImageHandle,\r
&gIp4ComponentName,\r
- NULL,\r
- NULL\r
+ &gIp4ComponentName2\r
);\r
}\r
\r
-/** @file
-
-Copyright (c) 2005 - 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:
-
- Ip4Driver.h
-
-Abstract:
-
-
-**/
-
-#ifndef __EFI_IP4_DRIVER_H__
-#define __EFI_IP4_DRIVER_H__
-
-#include <Protocol/ServiceBinding.h>
-
-extern EFI_DRIVER_BINDING_PROTOCOL gIp4DriverBinding;
-extern EFI_COMPONENT_NAME_PROTOCOL gIp4ComponentName;
-
-//
-// Function prototype for the driver's entry point
-//
-EFI_STATUS
-EFIAPI
-Ip4DriverEntryPoint (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- );
-
-//
-// Function prototypes for the Drivr Binding Protocol
-//
-EFI_STATUS
-EFIAPI
-Ip4DriverBindingSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-Ip4DriverBindingStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-Ip4DriverBindingStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- );
-
-//
-// Function ptototypes for the ServiceBinding Prococol
-//
-EFI_STATUS
-EFIAPI
-Ip4ServiceBindingCreateChild (
- IN EFI_SERVICE_BINDING_PROTOCOL *This,
- IN EFI_HANDLE *ChildHandle
- );
-
-EFI_STATUS
-EFIAPI
-Ip4ServiceBindingDestroyChild (
- IN EFI_SERVICE_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ChildHandle
- );
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 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
+\r
+Module Name:\r
+\r
+ Ip4Driver.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_IP4_DRIVER_H__\r
+#define __EFI_IP4_DRIVER_H__\r
+\r
+#include <Protocol/ServiceBinding.h>\r
+\r
+extern EFI_DRIVER_BINDING_PROTOCOL gIp4DriverBinding;\r
+extern EFI_COMPONENT_NAME_PROTOCOL gIp4ComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gIp4ComponentName2;\r
+\r
+//\r
+// Function prototype for the driver's entry point\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Ip4DriverEntryPoint (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ );\r
+\r
+//\r
+// Function prototypes for the Drivr Binding Protocol\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Ip4DriverBindingSupported (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Ip4DriverBindingStart (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Ip4DriverBindingStop (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
+ );\r
+\r
+//\r
+// Function ptototypes for the ServiceBinding Prococol\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Ip4ServiceBindingCreateChild (\r
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE *ChildHandle\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Ip4ServiceBindingDestroyChild (\r
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ChildHandle\r
+ );\r
+#endif\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Ip4Icmp.h
-
-Abstract:
-
- Header file for ICMP protocol.
-
-
-**/
-
-#ifndef __EFI_IP4_ICMP_H__
-#define __EFI_IP4_ICMP_H__
-
-enum {
- //
- // ICMP type definations
- //
- ICMP_ECHO_REPLY = 0,
- ICMP_DEST_UNREACHABLE = 3,
- ICMP_SOURCE_QUENCH = 4,
- ICMP_REDIRECT = 5,
- ICMP_ECHO_REQUEST = 8,
- ICMP_TIME_EXCEEDED = 11,
- ICMP_PARAMETER_PROBLEM = 12,
- ICMP_TIMESTAMP = 13,
- ICMP_INFO_REQUEST = 15,
- ICMP_INFO_REPLY = 16,
- ICMP_TYPE_MAX = ICMP_INFO_REPLY,
-
- ICMP_DEFAULT_CODE = 0,
-
- //
- // ICMP code definations for ICMP_DEST_UNREACHABLE
- //
- ICMP_NET_UNREACHABLE = 0,
- ICMP_HOST_UNREACHABLE = 1,
- ICMP_PROTO_UNREACHABLE = 2, // Host may generate
- ICMP_PORT_UNREACHABLE = 3, // Host may generate
- ICMP_FRAGMENT_FAILED = 4,
- ICMP_SOURCEROUTE_FAILED = 5, // Host may generate
- ICMP_NET_UNKNOWN = 6,
- ICMP_HOST_UNKNOWN = 7,
- ICMP_SOURCE_ISOLATED = 8,
- ICMP_NET_PROHIBITED = 9,
- ICMP_HOST_PROHIBITED = 10,
- ICMP_NET_UNREACHABLE_TOS = 11,
- ICMP_HOST_UNREACHABLE_TOS = 12,
-
- //
- // ICMP code definations for ICMP_TIME_EXCEEDED
- //
- ICMP_TIMEOUT_IN_TRANSIT = 0,
- ICMp_TIMEOUT_REASSEMBLE = 1, // Host may generate
-
- //
- // ICMP code definations for ICMP_TIME_EXCEEDED
- //
- ICMP_NET_REDIRECT = 0,
- ICMP_HOST_REDIRECT = 1,
- ICMP_NET_TOS_REDIRECT = 2,
- ICMP_HOST_TOS_REDIRECT = 3,
-
- //
- // ICMP message classes, each class of ICMP message shares
- // a common message format. INVALID_MESSAGE is only a flag.
- //
- ICMP_INVALID_MESSAGE = 0,
- ICMP_ERROR_MESSAGE = 1,
- ICMP_QUERY_MESSAGE = 2
-};
-
-typedef struct {
- UINT8 IcmpType;
- UINT8 IcmpClass;
-} IP4_ICMP_CLASS;
-
-extern IP4_ICMP_CLASS mIcmpClass[];
-extern EFI_IP4_ICMP_TYPE mIp4SupportedIcmp[];
-
-EFI_STATUS
-Ip4IcmpHandle (
- IN IP4_SERVICE *IpSb,
- IN IP4_HEAD *Header,
- IN NET_BUF *Packet
- );
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+Module Name:\r
+\r
+ Ip4Icmp.h\r
+\r
+Abstract:\r
+\r
+ Header file for ICMP protocol.\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_IP4_ICMP_H__\r
+#define __EFI_IP4_ICMP_H__\r
+\r
+enum {\r
+ //\r
+ // ICMP type definations\r
+ //\r
+ ICMP_ECHO_REPLY = 0,\r
+ ICMP_DEST_UNREACHABLE = 3,\r
+ ICMP_SOURCE_QUENCH = 4,\r
+ ICMP_REDIRECT = 5,\r
+ ICMP_ECHO_REQUEST = 8,\r
+ ICMP_TIME_EXCEEDED = 11,\r
+ ICMP_PARAMETER_PROBLEM = 12,\r
+ ICMP_TIMESTAMP = 13,\r
+ ICMP_INFO_REQUEST = 15,\r
+ ICMP_INFO_REPLY = 16,\r
+ ICMP_TYPE_MAX = ICMP_INFO_REPLY,\r
+\r
+ ICMP_DEFAULT_CODE = 0,\r
+\r
+ //\r
+ // ICMP code definations for ICMP_DEST_UNREACHABLE\r
+ //\r
+ ICMP_NET_UNREACHABLE = 0,\r
+ ICMP_HOST_UNREACHABLE = 1,\r
+ ICMP_PROTO_UNREACHABLE = 2, // Host may generate\r
+ ICMP_PORT_UNREACHABLE = 3, // Host may generate\r
+ ICMP_FRAGMENT_FAILED = 4,\r
+ ICMP_SOURCEROUTE_FAILED = 5, // Host may generate\r
+ ICMP_NET_UNKNOWN = 6,\r
+ ICMP_HOST_UNKNOWN = 7,\r
+ ICMP_SOURCE_ISOLATED = 8,\r
+ ICMP_NET_PROHIBITED = 9,\r
+ ICMP_HOST_PROHIBITED = 10,\r
+ ICMP_NET_UNREACHABLE_TOS = 11,\r
+ ICMP_HOST_UNREACHABLE_TOS = 12,\r
+\r
+ //\r
+ // ICMP code definations for ICMP_TIME_EXCEEDED\r
+ //\r
+ ICMP_TIMEOUT_IN_TRANSIT = 0,\r
+ ICMp_TIMEOUT_REASSEMBLE = 1, // Host may generate\r
+\r
+ //\r
+ // ICMP code definations for ICMP_TIME_EXCEEDED\r
+ //\r
+ ICMP_NET_REDIRECT = 0,\r
+ ICMP_HOST_REDIRECT = 1,\r
+ ICMP_NET_TOS_REDIRECT = 2,\r
+ ICMP_HOST_TOS_REDIRECT = 3,\r
+\r
+ //\r
+ // ICMP message classes, each class of ICMP message shares\r
+ // a common message format. INVALID_MESSAGE is only a flag.\r
+ //\r
+ ICMP_INVALID_MESSAGE = 0,\r
+ ICMP_ERROR_MESSAGE = 1,\r
+ ICMP_QUERY_MESSAGE = 2\r
+};\r
+\r
+typedef struct {\r
+ UINT8 IcmpType;\r
+ UINT8 IcmpClass;\r
+} IP4_ICMP_CLASS;\r
+\r
+extern IP4_ICMP_CLASS mIcmpClass[];\r
+extern EFI_IP4_ICMP_TYPE mIp4SupportedIcmp[];\r
+\r
+EFI_STATUS\r
+Ip4IcmpHandle (\r
+ IN IP4_SERVICE *IpSb,\r
+ IN IP4_HEAD *Header,\r
+ IN NET_BUF *Packet\r
+ );\r
+#endif\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Ip4If.h
-
-Abstract:
-
- Definition for IP4 pesudo interface structure.
-
-
-**/
-
-#ifndef __EFI_IP4_IF_H__
-#define __EFI_IP4_IF_H__
-
-enum {
- IP4_FRAME_RX_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', 'F', 'R'),
- IP4_FRAME_TX_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', 'F', 'T'),
- IP4_FRAME_ARP_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', 'F', 'A'),
- IP4_INTERFACE_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', 'I', 'F')
-};
-
-//
-// This prototype is used by both receive and transmission.
-// When receiving Netbuf is allocated by IP4_INTERFACE, and
-// released by IP4. Flag shows whether the frame is received
-// as link broadcast/multicast...
-//
-// When transmitting, the Netbuf is from IP4, and provided
-// to the callback as a reference. Flag isn't used.
-//
-// IpInstance can be NULL which means that it is the IP4 driver
-// itself sending the packets. IP4 driver may send packets that
-// don't belong to any instance, such as ICMP errors, ICMP echo
-// responses, or IGMP packets. IpInstance is used as a tag in
-// this module.
-//
-typedef
-VOID
-(*IP4_FRAME_CALLBACK) (
- IP4_PROTOCOL *IpInstance, OPTIONAL
- NET_BUF *Packet,
- EFI_STATUS IoStatus,
- UINT32 LinkFlag,
- VOID *Context
- );
-
-//
-// Each receive request is wrapped in an IP4_LINK_RX_TOKEN.
-// Upon completion, the Callback will be called. Only one
-// receive request is send to MNP. IpInstance is always NULL.
-// Reference MNP's spec for information.
-//
-typedef struct {
- UINT32 Signature;
- IP4_INTERFACE *Interface;
-
- IP4_PROTOCOL *IpInstance;
- IP4_FRAME_CALLBACK CallBack;
- VOID *Context;
-
- EFI_MANAGED_NETWORK_COMPLETION_TOKEN MnpToken;
-} IP4_LINK_RX_TOKEN;
-
-//
-// Each transmit request is wrapped in an IP4_LINK_TX_TOKEN.
-// Upon completion, the Callback will be called.
-//
-typedef struct {
- UINT32 Signature;
- NET_LIST_ENTRY Link;
-
- IP4_INTERFACE *Interface;
-
- IP4_PROTOCOL *IpInstance;
- IP4_FRAME_CALLBACK CallBack;
- NET_BUF *Packet;
- VOID *Context;
-
- EFI_MAC_ADDRESS DstMac;
- EFI_MAC_ADDRESS SrcMac;
-
- EFI_MANAGED_NETWORK_COMPLETION_TOKEN MnpToken;
- EFI_MANAGED_NETWORK_TRANSMIT_DATA MnpTxData;
-} IP4_LINK_TX_TOKEN;
-
-//
-// Only one ARP request is requested for all the frames in
-// a time. It is started for the first frames to the Ip. Any
-// subsequent transmission frame will be linked to Frames, and
-// be sent all at once the ARP requests succeed.
-//
-typedef struct {
- UINT32 Signature;
- NET_LIST_ENTRY Link;
-
- NET_LIST_ENTRY Frames;
- IP4_INTERFACE *Interface;
-
- //
- // ARP requesting staffs
- //
- EFI_EVENT OnResolved;
- IP4_ADDR Ip;
- EFI_MAC_ADDRESS Mac;
-} IP4_ARP_QUE;
-
-//
-// Callback to select which frame to cancel. Caller can cancel a
-// single frame, or all the frame from an IP instance.
-//
-typedef
-BOOLEAN
-(*IP4_FRAME_TO_CANCEL) (
- IP4_LINK_TX_TOKEN *Frame,
- VOID *Context
- );
-
-//
-// Each IP4 instance has its own station address. All the instances
-// with the same station address share a single interface structure.
-// Each interface has its own ARP child, and shares one MNP child.
-// Notice the special cases that DHCP can configure the interface
-// with 0.0.0.0/0.0.0.0.
-//
-struct _IP4_INTERFACE {
- UINT32 Signature;
- NET_LIST_ENTRY Link;
- INTN RefCnt;
-
- //
- // IP address and subnet mask of the interface. It also contains
- // the subnet/net broadcast address for quick access. The fileds
- // are invalid if (Configured == FALSE)
- //
- IP4_ADDR Ip;
- IP4_ADDR SubnetMask;
- IP4_ADDR SubnetBrdcast;
- IP4_ADDR NetBrdcast;
- BOOLEAN Configured;
-
- //
- // Handle used to create/destory ARP child. All the IP children
- // share one MNP which is owned by IP service binding.
- //
- EFI_HANDLE Controller;
- EFI_HANDLE Image;
-
- EFI_MANAGED_NETWORK_PROTOCOL *Mnp;
- EFI_ARP_PROTOCOL *Arp;
- EFI_HANDLE ArpHandle;
-
- //
- // Queues to keep the frames sent and waiting ARP request.
- //
- NET_LIST_ENTRY ArpQues;
- NET_LIST_ENTRY SentFrames;
- IP4_LINK_RX_TOKEN *RecvRequest;
-
- //
- // The interface's MAC and broadcast MAC address.
- //
- EFI_MAC_ADDRESS Mac;
- EFI_MAC_ADDRESS BroadcastMac;
- UINT32 HwaddrLen;
-
- //
- // All the IP instances that have the same IP/SubnetMask are linked
- // together through IpInstances. If any of the instance enables
- // promiscuous receive, PromiscRecv is true.
- //
- NET_LIST_ENTRY IpInstances;
- BOOLEAN PromiscRecv;
-};
-
-IP4_INTERFACE *
-Ip4CreateInterface (
- IN EFI_MANAGED_NETWORK_PROTOCOL *Mnp,
- IN EFI_HANDLE Controller,
- IN EFI_HANDLE ImageHandle
- );
-
-EFI_STATUS
-Ip4SetAddress (
- IN IP4_INTERFACE *Interface,
- IN IP4_ADDR IpAddr,
- IN IP4_ADDR SubnetMask
- );
-
-EFI_STATUS
-Ip4FreeInterface (
- IN IP4_INTERFACE *Interface,
- IN IP4_PROTOCOL *IpInstance OPTIONAL
- );
-
-EFI_STATUS
-Ip4SendFrame (
- IN IP4_INTERFACE *Interface,
- IN IP4_PROTOCOL *IpInstance, OPTIONAL
- IN NET_BUF *Packet,
- IN IP4_ADDR NextHop,
- IN IP4_FRAME_CALLBACK CallBack,
- IN VOID *Context
- );
-
-VOID
-Ip4CancelFrames (
- IN IP4_INTERFACE *Interface,
- IN EFI_STATUS IoStatus,
- IN IP4_FRAME_TO_CANCEL FrameToCancel, OPTIONAL
- IN VOID *Context
- );
-
-VOID
-Ip4CancelReceive (
- IN IP4_INTERFACE *Interface
- );
-
-EFI_STATUS
-Ip4ReceiveFrame (
- IN IP4_INTERFACE *Interface,
- IN IP4_PROTOCOL *IpInstance, OPTIONAL
- IN IP4_FRAME_CALLBACK CallBack,
- IN VOID *Context
- );
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+Module Name:\r
+\r
+ Ip4If.h\r
+\r
+Abstract:\r
+\r
+ Definition for IP4 pesudo interface structure.\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_IP4_IF_H__\r
+#define __EFI_IP4_IF_H__\r
+\r
+enum {\r
+ IP4_FRAME_RX_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', 'F', 'R'),\r
+ IP4_FRAME_TX_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', 'F', 'T'),\r
+ IP4_FRAME_ARP_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', 'F', 'A'),\r
+ IP4_INTERFACE_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', 'I', 'F')\r
+};\r
+\r
+//\r
+// This prototype is used by both receive and transmission.\r
+// When receiving Netbuf is allocated by IP4_INTERFACE, and\r
+// released by IP4. Flag shows whether the frame is received\r
+// as link broadcast/multicast...\r
+//\r
+// When transmitting, the Netbuf is from IP4, and provided\r
+// to the callback as a reference. Flag isn't used.\r
+//\r
+// IpInstance can be NULL which means that it is the IP4 driver\r
+// itself sending the packets. IP4 driver may send packets that\r
+// don't belong to any instance, such as ICMP errors, ICMP echo\r
+// responses, or IGMP packets. IpInstance is used as a tag in\r
+// this module.\r
+//\r
+typedef\r
+VOID\r
+(*IP4_FRAME_CALLBACK) (\r
+ IP4_PROTOCOL *IpInstance, OPTIONAL\r
+ NET_BUF *Packet,\r
+ EFI_STATUS IoStatus,\r
+ UINT32 LinkFlag,\r
+ VOID *Context\r
+ );\r
+\r
+//\r
+// Each receive request is wrapped in an IP4_LINK_RX_TOKEN.\r
+// Upon completion, the Callback will be called. Only one\r
+// receive request is send to MNP. IpInstance is always NULL.\r
+// Reference MNP's spec for information.\r
+//\r
+typedef struct {\r
+ UINT32 Signature;\r
+ IP4_INTERFACE *Interface;\r
+\r
+ IP4_PROTOCOL *IpInstance;\r
+ IP4_FRAME_CALLBACK CallBack;\r
+ VOID *Context;\r
+\r
+ EFI_MANAGED_NETWORK_COMPLETION_TOKEN MnpToken;\r
+} IP4_LINK_RX_TOKEN;\r
+\r
+//\r
+// Each transmit request is wrapped in an IP4_LINK_TX_TOKEN.\r
+// Upon completion, the Callback will be called.\r
+//\r
+typedef struct {\r
+ UINT32 Signature;\r
+ NET_LIST_ENTRY Link;\r
+\r
+ IP4_INTERFACE *Interface;\r
+\r
+ IP4_PROTOCOL *IpInstance;\r
+ IP4_FRAME_CALLBACK CallBack;\r
+ NET_BUF *Packet;\r
+ VOID *Context;\r
+\r
+ EFI_MAC_ADDRESS DstMac;\r
+ EFI_MAC_ADDRESS SrcMac;\r
+\r
+ EFI_MANAGED_NETWORK_COMPLETION_TOKEN MnpToken;\r
+ EFI_MANAGED_NETWORK_TRANSMIT_DATA MnpTxData;\r
+} IP4_LINK_TX_TOKEN;\r
+\r
+//\r
+// Only one ARP request is requested for all the frames in\r
+// a time. It is started for the first frames to the Ip. Any\r
+// subsequent transmission frame will be linked to Frames, and\r
+// be sent all at once the ARP requests succeed.\r
+//\r
+typedef struct {\r
+ UINT32 Signature;\r
+ NET_LIST_ENTRY Link;\r
+\r
+ NET_LIST_ENTRY Frames;\r
+ IP4_INTERFACE *Interface;\r
+\r
+ //\r
+ // ARP requesting staffs\r
+ //\r
+ EFI_EVENT OnResolved;\r
+ IP4_ADDR Ip;\r
+ EFI_MAC_ADDRESS Mac;\r
+} IP4_ARP_QUE;\r
+\r
+//\r
+// Callback to select which frame to cancel. Caller can cancel a\r
+// single frame, or all the frame from an IP instance.\r
+//\r
+typedef\r
+BOOLEAN\r
+(*IP4_FRAME_TO_CANCEL) (\r
+ IP4_LINK_TX_TOKEN *Frame,\r
+ VOID *Context\r
+ );\r
+\r
+//\r
+// Each IP4 instance has its own station address. All the instances\r
+// with the same station address share a single interface structure.\r
+// Each interface has its own ARP child, and shares one MNP child.\r
+// Notice the special cases that DHCP can configure the interface\r
+// with 0.0.0.0/0.0.0.0.\r
+//\r
+struct _IP4_INTERFACE {\r
+ UINT32 Signature;\r
+ NET_LIST_ENTRY Link;\r
+ INTN RefCnt;\r
+\r
+ //\r
+ // IP address and subnet mask of the interface. It also contains\r
+ // the subnet/net broadcast address for quick access. The fileds\r
+ // are invalid if (Configured == FALSE)\r
+ //\r
+ IP4_ADDR Ip;\r
+ IP4_ADDR SubnetMask;\r
+ IP4_ADDR SubnetBrdcast;\r
+ IP4_ADDR NetBrdcast;\r
+ BOOLEAN Configured;\r
+\r
+ //\r
+ // Handle used to create/destory ARP child. All the IP children\r
+ // share one MNP which is owned by IP service binding.\r
+ //\r
+ EFI_HANDLE Controller;\r
+ EFI_HANDLE Image;\r
+\r
+ EFI_MANAGED_NETWORK_PROTOCOL *Mnp;\r
+ EFI_ARP_PROTOCOL *Arp;\r
+ EFI_HANDLE ArpHandle;\r
+\r
+ //\r
+ // Queues to keep the frames sent and waiting ARP request.\r
+ //\r
+ NET_LIST_ENTRY ArpQues;\r
+ NET_LIST_ENTRY SentFrames;\r
+ IP4_LINK_RX_TOKEN *RecvRequest;\r
+\r
+ //\r
+ // The interface's MAC and broadcast MAC address.\r
+ //\r
+ EFI_MAC_ADDRESS Mac;\r
+ EFI_MAC_ADDRESS BroadcastMac;\r
+ UINT32 HwaddrLen;\r
+\r
+ //\r
+ // All the IP instances that have the same IP/SubnetMask are linked\r
+ // together through IpInstances. If any of the instance enables\r
+ // promiscuous receive, PromiscRecv is true.\r
+ //\r
+ NET_LIST_ENTRY IpInstances;\r
+ BOOLEAN PromiscRecv;\r
+};\r
+\r
+IP4_INTERFACE *\r
+Ip4CreateInterface (\r
+ IN EFI_MANAGED_NETWORK_PROTOCOL *Mnp,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_HANDLE ImageHandle\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4SetAddress (\r
+ IN IP4_INTERFACE *Interface,\r
+ IN IP4_ADDR IpAddr,\r
+ IN IP4_ADDR SubnetMask\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4FreeInterface (\r
+ IN IP4_INTERFACE *Interface,\r
+ IN IP4_PROTOCOL *IpInstance OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4SendFrame (\r
+ IN IP4_INTERFACE *Interface,\r
+ IN IP4_PROTOCOL *IpInstance, OPTIONAL\r
+ IN NET_BUF *Packet,\r
+ IN IP4_ADDR NextHop,\r
+ IN IP4_FRAME_CALLBACK CallBack,\r
+ IN VOID *Context\r
+ );\r
+\r
+VOID\r
+Ip4CancelFrames (\r
+ IN IP4_INTERFACE *Interface,\r
+ IN EFI_STATUS IoStatus,\r
+ IN IP4_FRAME_TO_CANCEL FrameToCancel, OPTIONAL\r
+ IN VOID *Context\r
+ );\r
+\r
+VOID\r
+Ip4CancelReceive (\r
+ IN IP4_INTERFACE *Interface\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4ReceiveFrame (\r
+ IN IP4_INTERFACE *Interface,\r
+ IN IP4_PROTOCOL *IpInstance, OPTIONAL\r
+ IN IP4_FRAME_CALLBACK CallBack,\r
+ IN VOID *Context\r
+ );\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Ip4Igmp.h
-
-Abstract:
-
-
-**/
-
-#ifndef __EFI_IP4_IGMP_H__
-#define __EFI_IP4_IGMP_H__
-
-#pragma pack(1)
-typedef struct {
- UINT8 Type;
- UINT8 MaxRespTime;
- UINT16 Checksum;
- IP4_ADDR Group;
-} IGMP_HEAD;
-#pragma pack()
-
-//
-// The status of multicast group. It isn't necessary to maintain
-// explicit state of host state diagram. A group with non-zero
-// DelayTime is in "delaying member" state. otherwise, it is in
-// "idle member" state.
-//
-typedef struct {
- NET_LIST_ENTRY Link;
- INTN RefCnt;
- IP4_ADDR Address;
- INTN DelayTime;
- BOOLEAN ReportByUs;
- EFI_MAC_ADDRESS Mac;
-} IGMP_GROUP;
-
-//
-// The IGMP status. Each IP4 service instance has a IGMP_SERVICE_DATA
-// attached. The Igmpv1QuerySeen remember whether the server on this
-// connected network is v1 or v2.
-//
-typedef struct {
- INTN Igmpv1QuerySeen;
- NET_LIST_ENTRY Groups;
-} IGMP_SERVICE_DATA;
-
-enum {
- //
- // IGMP message type
- //
- IGMP_MEMBERSHIP_QUERY = 0x11,
- IGMP_V1_MEMBERSHIP_REPORT = 0x12,
- IGMP_V2_MEMBERSHIP_REPORT = 0x16,
- IGMP_LEAVE_GROUP = 0x17,
-
- IGMP_V1ROUTER_PRESENT = 400,
- IGMP_UNSOLICIATED_REPORT = 10
-};
-
-EFI_STATUS
-Ip4InitIgmp (
- IN IP4_SERVICE *IpService
- );
-
-EFI_STATUS
-Ip4JoinGroup (
- IN IP4_PROTOCOL *IpInstance,
- IN IP4_ADDR Address
- );
-
-EFI_STATUS
-Ip4LeaveGroup (
- IN IP4_PROTOCOL *IpInstance,
- IN IP4_ADDR Address
- );
-
-EFI_STATUS
-Ip4IgmpHandle (
- IN IP4_SERVICE *IpService,
- IN IP4_HEAD *Head,
- IN NET_BUF *Packet
- );
-
-VOID
-Ip4IgmpTicking (
- IN IP4_SERVICE *IpService
- );
-
-IP4_ADDR *
-Ip4CombineGroups (
- IN IP4_ADDR *SourceGroups,
- IN UINT32 Count,
- IN IP4_ADDR Addr
- );
-
-INTN
-Ip4RemoveGroupAddr (
- IN IP4_ADDR *Group,
- IN UINT32 GroupCnt,
- IN IP4_ADDR Addr
- );
-
-IGMP_GROUP *
-Ip4FindGroup (
- IN IGMP_SERVICE_DATA *IgmpCtrl,
- IN IP4_ADDR Address
- );
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+Module Name:\r
+\r
+ Ip4Igmp.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_IP4_IGMP_H__\r
+#define __EFI_IP4_IGMP_H__\r
+\r
+#pragma pack(1)\r
+typedef struct {\r
+ UINT8 Type;\r
+ UINT8 MaxRespTime;\r
+ UINT16 Checksum;\r
+ IP4_ADDR Group;\r
+} IGMP_HEAD;\r
+#pragma pack()\r
+\r
+//\r
+// The status of multicast group. It isn't necessary to maintain\r
+// explicit state of host state diagram. A group with non-zero\r
+// DelayTime is in "delaying member" state. otherwise, it is in\r
+// "idle member" state.\r
+//\r
+typedef struct {\r
+ NET_LIST_ENTRY Link;\r
+ INTN RefCnt;\r
+ IP4_ADDR Address;\r
+ INTN DelayTime;\r
+ BOOLEAN ReportByUs;\r
+ EFI_MAC_ADDRESS Mac;\r
+} IGMP_GROUP;\r
+\r
+//\r
+// The IGMP status. Each IP4 service instance has a IGMP_SERVICE_DATA\r
+// attached. The Igmpv1QuerySeen remember whether the server on this\r
+// connected network is v1 or v2.\r
+//\r
+typedef struct {\r
+ INTN Igmpv1QuerySeen;\r
+ NET_LIST_ENTRY Groups;\r
+} IGMP_SERVICE_DATA;\r
+\r
+enum {\r
+ //\r
+ // IGMP message type\r
+ //\r
+ IGMP_MEMBERSHIP_QUERY = 0x11,\r
+ IGMP_V1_MEMBERSHIP_REPORT = 0x12,\r
+ IGMP_V2_MEMBERSHIP_REPORT = 0x16,\r
+ IGMP_LEAVE_GROUP = 0x17,\r
+\r
+ IGMP_V1ROUTER_PRESENT = 400,\r
+ IGMP_UNSOLICIATED_REPORT = 10\r
+};\r
+\r
+EFI_STATUS\r
+Ip4InitIgmp (\r
+ IN IP4_SERVICE *IpService\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4JoinGroup (\r
+ IN IP4_PROTOCOL *IpInstance,\r
+ IN IP4_ADDR Address\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4LeaveGroup (\r
+ IN IP4_PROTOCOL *IpInstance,\r
+ IN IP4_ADDR Address\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4IgmpHandle (\r
+ IN IP4_SERVICE *IpService,\r
+ IN IP4_HEAD *Head,\r
+ IN NET_BUF *Packet\r
+ );\r
+\r
+VOID\r
+Ip4IgmpTicking (\r
+ IN IP4_SERVICE *IpService\r
+ );\r
+\r
+IP4_ADDR *\r
+Ip4CombineGroups (\r
+ IN IP4_ADDR *SourceGroups,\r
+ IN UINT32 Count,\r
+ IN IP4_ADDR Addr\r
+ );\r
+\r
+INTN\r
+Ip4RemoveGroupAddr (\r
+ IN IP4_ADDR *Group,\r
+ IN UINT32 GroupCnt,\r
+ IN IP4_ADDR Addr\r
+ );\r
+\r
+IGMP_GROUP *\r
+Ip4FindGroup (\r
+ IN IGMP_SERVICE_DATA *IgmpCtrl,\r
+ IN IP4_ADDR Address\r
+ );\r
+#endif\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Ip4Impl.h
-
-Abstract:
-
- Ip4 internal functions and type defintions.
-
-
-**/
-
-#ifndef __EFI_IP4_IMPL_H__
-#define __EFI_IP4_IMPL_H__
-
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+ Ip4Impl.h\r
+\r
+Abstract:\r
+\r
+ Ip4 internal functions and type defintions.\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_IP4_IMPL_H__\r
+#define __EFI_IP4_IMPL_H__\r
+\r
#include <PiDxe.h>\r
\r
#include <Protocol/IP4.h>\r
#include <Library/UefiDriverEntryPoint.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
#include <Library/BaseLib.h>\r
-#include <Library/UefiLib.h>
-#include <Library/NetLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/MemoryAllocationLib.h>
-
-#include "Ip4Common.h"
-#include "Ip4Driver.h"
-#include "Ip4If.h"
-#include "Ip4Icmp.h"
-#include "Ip4Option.h"
-#include "Ip4Igmp.h"
-#include "Ip4Route.h"
-#include "Ip4Input.h"
-#include "Ip4Output.h"
-
-enum {
- IP4_PROTOCOL_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', '4', 'P'),
- IP4_SERVICE_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', '4', 'S'),
-
- //
- // The state of IP4 protocol. It starts from UNCONFIGED. if it is
- // successfully configured, it goes to CONFIGED. if configure NULL
- // is called, it becomes UNCONFIGED again. If (partly) destoried, it
- // becomes DESTORY.
- //
- IP4_STATE_UNCONFIGED = 0,
- IP4_STATE_CONFIGED,
- IP4_STATE_DESTORY,
-
- //
- // The state of IP4 service. It starts from UNSTARTED. It transits
- // to STARTED if autoconfigure is started. If default address is
- // configured, it becomes CONFIGED. and if partly destoried, it goes
- // to DESTORY.
- //
- IP4_SERVICE_UNSTARTED = 0,
- IP4_SERVICE_STARTED,
- IP4_SERVICE_CONFIGED,
- IP4_SERVICE_DESTORY
-};
-
-//
-// IP4_TXTOKEN_WRAP wraps the upper layer's transmit token.
-// The user's data is kept in the Packet. When fragment is
-// needed, each fragment of the Packet has a reference to the
-// Packet, no data is actually copied. The Packet will be
-// released when all the fragments of it have been recycled by
-// MNP. Upon then, the IP4_TXTOKEN_WRAP will be released, and
-// user's event signalled.
-//
-typedef struct {
- IP4_PROTOCOL *IpInstance;
- EFI_IP4_COMPLETION_TOKEN *Token;
- NET_BUF *Packet;
- BOOLEAN Sent;
- INTN Life;
-} IP4_TXTOKEN_WRAP;
-
-//
-// IP4_RXDATA_WRAP wraps the data IP4 child delivers to the
-// upper layers. The received packet is kept in the Packet.
-// The Packet itself may be constructured from some fragments.
-// All the fragments of the Packet is organized by a
-// IP4_ASSEMBLE_ENTRY structure. If the Packet is recycled by
-// the upper layer, the assemble entry and its associated
-// fragments will be freed at last.
-//
-typedef struct {
- NET_LIST_ENTRY Link;
- IP4_PROTOCOL *IpInstance;
- NET_BUF *Packet;
- EFI_IP4_RECEIVE_DATA RxData;
-} IP4_RXDATA_WRAP;
-
-struct _IP4_PROTOCOL {
- UINT32 Signature;
-
- EFI_IP4_PROTOCOL Ip4Proto;
- EFI_HANDLE Handle;
- INTN State;
-
- IP4_SERVICE *Service;
- NET_LIST_ENTRY Link; // Link to all the IP protocol from the service
-
- //
- // User's transmit/receive tokens, and received/deliverd packets
- //
- NET_MAP RxTokens;
- NET_MAP TxTokens; // map between (User's Token, IP4_TXTOKE_WRAP)
- NET_LIST_ENTRY Received; // Received but not delivered packet
- NET_LIST_ENTRY Delivered; // Delivered and to be recycled packets
- EFI_LOCK RecycleLock;
-
- //
- // Instance's address and route tables. There are two route tables.
- // RouteTable is used by the IP4 driver to route packet. EfiRouteTable
- // is used to communicate the current route info to the upper layer.
- //
- IP4_INTERFACE *Interface;
- NET_LIST_ENTRY AddrLink; // Ip instances with the same IP address.
- IP4_ROUTE_TABLE *RouteTable;
-
- EFI_IP4_ROUTE_TABLE *EfiRouteTable;
- UINT32 EfiRouteCount;
-
- //
- // IGMP data for this instance
- //
- IP4_ADDR *Groups; // stored in network byte order
- UINT32 GroupCount;
-
- EFI_IP4_CONFIG_DATA ConfigData;
-
-};
-
-struct _IP4_SERVICE {
- UINT32 Signature;
- EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;
- INTN State;
- BOOLEAN InDestory;
-
- //
- // List of all the IP instances and interfaces, and default
- // interface and route table and caches.
- //
- UINTN NumChildren;
- NET_LIST_ENTRY Children;
-
- NET_LIST_ENTRY Interfaces;
-
- IP4_INTERFACE *DefaultInterface;
- IP4_ROUTE_TABLE *DefaultRouteTable;
-
- //
- // Ip reassemble utilities, and IGMP data
- //
- IP4_ASSEMBLE_TABLE Assemble;
- IGMP_SERVICE_DATA IgmpCtrl;
-
- //
- // Low level protocol used by this service instance
- //
- EFI_HANDLE Image;
- EFI_HANDLE Controller;
-
- EFI_HANDLE MnpChildHandle;
- EFI_MANAGED_NETWORK_PROTOCOL *Mnp;
-
- EFI_MANAGED_NETWORK_CONFIG_DATA MnpConfigData;
- EFI_SIMPLE_NETWORK_MODE SnpMode;
-
- EFI_EVENT Timer;
-
- //
- // Auto configure staff
- //
- EFI_IP4_CONFIG_PROTOCOL *Ip4Config;
- EFI_EVENT DoneEvent;
- EFI_EVENT ReconfigEvent;
-
- //
- // The string representation of the current mac address of the
- // NIC this IP4_SERVICE works on.
- //
- CHAR16 *MacString;
-};
-
-#define IP4_INSTANCE_FROM_PROTOCOL(Ip4) \
- CR ((Ip4), IP4_PROTOCOL, Ip4Proto, IP4_PROTOCOL_SIGNATURE)
-
-#define IP4_SERVICE_FROM_PROTOCOL(Sb) \
- CR ((Sb), IP4_SERVICE, ServiceBinding, IP4_SERVICE_SIGNATURE)
-
-#define IP4_NO_MAPPING(IpInstance) (!(IpInstance)->Interface->Configured)
-
-extern EFI_IP4_PROTOCOL mEfiIp4ProtocolTemplete;
-
-EFI_STATUS
-Ip4ServiceConfigMnp (
- IN IP4_SERVICE *IpSb,
- IN BOOLEAN Force
- );
-
-VOID
-Ip4InitProtocol (
- IN IP4_SERVICE *IpSb,
- IN IP4_PROTOCOL *IpInstance
- );
-
-EFI_STATUS
-Ip4CleanProtocol (
- IN IP4_PROTOCOL *IpInstance
- );
-
-EFI_STATUS
-Ip4Cancel (
- IN IP4_PROTOCOL *IpInstance,
- IN EFI_IP4_COMPLETION_TOKEN *Token
- );
-
-EFI_STATUS
-Ip4Groups (
- IN IP4_PROTOCOL *IpInstance,
- IN BOOLEAN JoinFlag,
- IN EFI_IPv4_ADDRESS *GroupAddress
- );
-
-VOID
-EFIAPI
-Ip4TimerTicking (
- IN EFI_EVENT Event,
- IN VOID *Context
- );
-
-EFI_STATUS
-Ip4SentPacketTicking (
- IN NET_MAP *Map,
- IN NET_MAP_ITEM *Item,
- IN VOID *Context
- );
-#endif
+#include <Library/UefiLib.h>\r
+#include <Library/NetLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+#include "Ip4Common.h"\r
+#include "Ip4Driver.h"\r
+#include "Ip4If.h"\r
+#include "Ip4Icmp.h"\r
+#include "Ip4Option.h"\r
+#include "Ip4Igmp.h"\r
+#include "Ip4Route.h"\r
+#include "Ip4Input.h"\r
+#include "Ip4Output.h"\r
+\r
+enum {\r
+ IP4_PROTOCOL_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', '4', 'P'),\r
+ IP4_SERVICE_SIGNATURE = EFI_SIGNATURE_32 ('I', 'P', '4', 'S'),\r
+\r
+ //\r
+ // The state of IP4 protocol. It starts from UNCONFIGED. if it is\r
+ // successfully configured, it goes to CONFIGED. if configure NULL\r
+ // is called, it becomes UNCONFIGED again. If (partly) destoried, it\r
+ // becomes DESTORY.\r
+ //\r
+ IP4_STATE_UNCONFIGED = 0,\r
+ IP4_STATE_CONFIGED,\r
+ IP4_STATE_DESTORY,\r
+\r
+ //\r
+ // The state of IP4 service. It starts from UNSTARTED. It transits\r
+ // to STARTED if autoconfigure is started. If default address is\r
+ // configured, it becomes CONFIGED. and if partly destoried, it goes\r
+ // to DESTORY.\r
+ //\r
+ IP4_SERVICE_UNSTARTED = 0,\r
+ IP4_SERVICE_STARTED,\r
+ IP4_SERVICE_CONFIGED,\r
+ IP4_SERVICE_DESTORY\r
+};\r
+\r
+//\r
+// IP4_TXTOKEN_WRAP wraps the upper layer's transmit token.\r
+// The user's data is kept in the Packet. When fragment is\r
+// needed, each fragment of the Packet has a reference to the\r
+// Packet, no data is actually copied. The Packet will be\r
+// released when all the fragments of it have been recycled by\r
+// MNP. Upon then, the IP4_TXTOKEN_WRAP will be released, and\r
+// user's event signalled.\r
+//\r
+typedef struct {\r
+ IP4_PROTOCOL *IpInstance;\r
+ EFI_IP4_COMPLETION_TOKEN *Token;\r
+ NET_BUF *Packet;\r
+ BOOLEAN Sent;\r
+ INTN Life;\r
+} IP4_TXTOKEN_WRAP;\r
+\r
+//\r
+// IP4_RXDATA_WRAP wraps the data IP4 child delivers to the\r
+// upper layers. The received packet is kept in the Packet.\r
+// The Packet itself may be constructured from some fragments.\r
+// All the fragments of the Packet is organized by a\r
+// IP4_ASSEMBLE_ENTRY structure. If the Packet is recycled by\r
+// the upper layer, the assemble entry and its associated\r
+// fragments will be freed at last.\r
+//\r
+typedef struct {\r
+ NET_LIST_ENTRY Link;\r
+ IP4_PROTOCOL *IpInstance;\r
+ NET_BUF *Packet;\r
+ EFI_IP4_RECEIVE_DATA RxData;\r
+} IP4_RXDATA_WRAP;\r
+\r
+struct _IP4_PROTOCOL {\r
+ UINT32 Signature;\r
+\r
+ EFI_IP4_PROTOCOL Ip4Proto;\r
+ EFI_HANDLE Handle;\r
+ INTN State;\r
+\r
+ IP4_SERVICE *Service;\r
+ NET_LIST_ENTRY Link; // Link to all the IP protocol from the service\r
+\r
+ //\r
+ // User's transmit/receive tokens, and received/deliverd packets\r
+ //\r
+ NET_MAP RxTokens;\r
+ NET_MAP TxTokens; // map between (User's Token, IP4_TXTOKE_WRAP)\r
+ NET_LIST_ENTRY Received; // Received but not delivered packet\r
+ NET_LIST_ENTRY Delivered; // Delivered and to be recycled packets\r
+ EFI_LOCK RecycleLock;\r
+\r
+ //\r
+ // Instance's address and route tables. There are two route tables.\r
+ // RouteTable is used by the IP4 driver to route packet. EfiRouteTable\r
+ // is used to communicate the current route info to the upper layer.\r
+ //\r
+ IP4_INTERFACE *Interface;\r
+ NET_LIST_ENTRY AddrLink; // Ip instances with the same IP address.\r
+ IP4_ROUTE_TABLE *RouteTable;\r
+\r
+ EFI_IP4_ROUTE_TABLE *EfiRouteTable;\r
+ UINT32 EfiRouteCount;\r
+\r
+ //\r
+ // IGMP data for this instance\r
+ //\r
+ IP4_ADDR *Groups; // stored in network byte order\r
+ UINT32 GroupCount;\r
+\r
+ EFI_IP4_CONFIG_DATA ConfigData;\r
+\r
+};\r
+\r
+struct _IP4_SERVICE {\r
+ UINT32 Signature;\r
+ EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;\r
+ INTN State;\r
+ BOOLEAN InDestory;\r
+\r
+ //\r
+ // List of all the IP instances and interfaces, and default\r
+ // interface and route table and caches.\r
+ //\r
+ UINTN NumChildren;\r
+ NET_LIST_ENTRY Children;\r
+\r
+ NET_LIST_ENTRY Interfaces;\r
+\r
+ IP4_INTERFACE *DefaultInterface;\r
+ IP4_ROUTE_TABLE *DefaultRouteTable;\r
+\r
+ //\r
+ // Ip reassemble utilities, and IGMP data\r
+ //\r
+ IP4_ASSEMBLE_TABLE Assemble;\r
+ IGMP_SERVICE_DATA IgmpCtrl;\r
+\r
+ //\r
+ // Low level protocol used by this service instance\r
+ //\r
+ EFI_HANDLE Image;\r
+ EFI_HANDLE Controller;\r
+\r
+ EFI_HANDLE MnpChildHandle;\r
+ EFI_MANAGED_NETWORK_PROTOCOL *Mnp;\r
+\r
+ EFI_MANAGED_NETWORK_CONFIG_DATA MnpConfigData;\r
+ EFI_SIMPLE_NETWORK_MODE SnpMode;\r
+\r
+ EFI_EVENT Timer;\r
+\r
+ //\r
+ // Auto configure staff\r
+ //\r
+ EFI_IP4_CONFIG_PROTOCOL *Ip4Config;\r
+ EFI_EVENT DoneEvent;\r
+ EFI_EVENT ReconfigEvent;\r
+\r
+ //\r
+ // The string representation of the current mac address of the\r
+ // NIC this IP4_SERVICE works on.\r
+ //\r
+ CHAR16 *MacString;\r
+};\r
+\r
+#define IP4_INSTANCE_FROM_PROTOCOL(Ip4) \\r
+ CR ((Ip4), IP4_PROTOCOL, Ip4Proto, IP4_PROTOCOL_SIGNATURE)\r
+\r
+#define IP4_SERVICE_FROM_PROTOCOL(Sb) \\r
+ CR ((Sb), IP4_SERVICE, ServiceBinding, IP4_SERVICE_SIGNATURE)\r
+\r
+#define IP4_NO_MAPPING(IpInstance) (!(IpInstance)->Interface->Configured)\r
+\r
+extern EFI_IP4_PROTOCOL mEfiIp4ProtocolTemplete;\r
+\r
+EFI_STATUS\r
+Ip4ServiceConfigMnp (\r
+ IN IP4_SERVICE *IpSb,\r
+ IN BOOLEAN Force\r
+ );\r
+\r
+VOID\r
+Ip4InitProtocol (\r
+ IN IP4_SERVICE *IpSb,\r
+ IN IP4_PROTOCOL *IpInstance\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4CleanProtocol (\r
+ IN IP4_PROTOCOL *IpInstance\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4Cancel (\r
+ IN IP4_PROTOCOL *IpInstance,\r
+ IN EFI_IP4_COMPLETION_TOKEN *Token\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4Groups (\r
+ IN IP4_PROTOCOL *IpInstance,\r
+ IN BOOLEAN JoinFlag,\r
+ IN EFI_IPv4_ADDRESS *GroupAddress\r
+ );\r
+\r
+VOID\r
+EFIAPI\r
+Ip4TimerTicking (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4SentPacketTicking (\r
+ IN NET_MAP *Map,\r
+ IN NET_MAP_ITEM *Item,\r
+ IN VOID *Context\r
+ );\r
+#endif\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Ip4Input.h
-
-Abstract:
-
-
-**/
-
-#ifndef __EFI_IP4_INPUT_H__
-#define __EFI_IP4_INPUT_H__
-
-enum {
- IP4_MIN_HEADLEN = 20,
- IP4_MAX_HEADLEN = 60,
-
- IP4_ASSEMLE_HASH_SIZE = 31,
- IP4_FRAGMENT_LIFE = 120,
- IP4_MAX_PACKET_SIZE = 65535
-};
-
-//
-// Per packet information for input process. LinkFlag specifies whether
-// the packet is received as Link layer unicast, multicast or broadcast.
-// The CastType is the IP layer cast type, such as IP multicast or unicast.
-// Start, End and Length are staffs used to assemble the packets. Start
-// is the sequence number of the first byte of data in the packet. Length
-// is the number of bytes of data. End = Start + Length, that is, the
-// sequence number of last byte + 1. Each assembled packet has a count down
-// life. If it isn't consumed before Life reaches zero, the packet is released.
-//
-typedef struct {
- UINTN LinkFlag;
- INTN CastType;
- INTN Start;
- INTN End;
- INTN Length;
- UINT32 Life;
- EFI_STATUS Status;
-} IP4_CLIP_INFO;
-
-//
-// Structure used to assemble IP packets.
-//
-typedef struct {
- NET_LIST_ENTRY Link;
-
- //
- // Identity of one IP4 packet. Each fragment of a packet has
- // the same (Dst, Src, Id, Protocol).
- //
- IP4_ADDR Dst;
- IP4_ADDR Src;
- UINT16 Id;
- UINT8 Protocol;
-
- INTN TotalLen;
- INTN CurLen;
- NET_LIST_ENTRY Fragments; // List of all the fragments of this packet
-
- IP4_HEAD *Head; // IP head of the first fragment
- IP4_CLIP_INFO *Info; // Per packet info of the first fragment
- INTN Life; // Count down life for the packet.
-} IP4_ASSEMBLE_ENTRY;
-
-//
-// Each Ip service instance has an assemble table to reassemble
-// the packets before delivery to its children. It is organized
-// as hash table.
-//
-typedef struct {
- NET_LIST_ENTRY Bucket[IP4_ASSEMLE_HASH_SIZE];
-} IP4_ASSEMBLE_TABLE;
-
-#define IP4_GET_CLIP_INFO(Packet) ((IP4_CLIP_INFO *) ((Packet)->ProtoData))
-
-#define IP4_ASSEMBLE_HASH(Dst, Src, Id, Proto) \
- (((Dst) + (Src) + ((Id) << 16) + (Proto)) % IP4_ASSEMLE_HASH_SIZE)
-
-#define IP4_RXDATA_WRAP_SIZE(NumFrag) \
- (sizeof (IP4_RXDATA_WRAP) + sizeof (EFI_IP4_FRAGMENT_DATA) * ((NumFrag) - 1))
-
-VOID
-Ip4InitAssembleTable (
- IN IP4_ASSEMBLE_TABLE *Table
- );
-
-VOID
-Ip4CleanAssembleTable (
- IN IP4_ASSEMBLE_TABLE *Table
- );
-
-VOID
-Ip4AccpetFrame (
- IN IP4_PROTOCOL *Ip4Instance,
- IN NET_BUF *Packet,
- IN EFI_STATUS IoStatus,
- IN UINT32 Flag,
- IN VOID *Context
- );
-
-EFI_STATUS
-Ip4Demultiplex (
- IN IP4_SERVICE *SbInstance,
- IN IP4_HEAD *Head,
- IN NET_BUF *Packet
- );
-
-INTN
-Ip4InterfaceEnquePacket (
- IN IP4_SERVICE *SbInstance,
- IN IP4_HEAD *Head,
- IN NET_BUF *Packet,
- IN IP4_INTERFACE *Interface
- );
-
-EFI_STATUS
-Ip4InstanceDeliverPacket (
- IN IP4_PROTOCOL *Ip4Instance
- );
-
-VOID
-Ip4PacketTimerTicking (
- IN IP4_SERVICE *IpSb
- );
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+ Ip4Input.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_IP4_INPUT_H__\r
+#define __EFI_IP4_INPUT_H__\r
+\r
+enum {\r
+ IP4_MIN_HEADLEN = 20,\r
+ IP4_MAX_HEADLEN = 60,\r
+\r
+ IP4_ASSEMLE_HASH_SIZE = 31,\r
+ IP4_FRAGMENT_LIFE = 120,\r
+ IP4_MAX_PACKET_SIZE = 65535\r
+};\r
+\r
+//\r
+// Per packet information for input process. LinkFlag specifies whether\r
+// the packet is received as Link layer unicast, multicast or broadcast.\r
+// The CastType is the IP layer cast type, such as IP multicast or unicast.\r
+// Start, End and Length are staffs used to assemble the packets. Start\r
+// is the sequence number of the first byte of data in the packet. Length\r
+// is the number of bytes of data. End = Start + Length, that is, the\r
+// sequence number of last byte + 1. Each assembled packet has a count down\r
+// life. If it isn't consumed before Life reaches zero, the packet is released.\r
+//\r
+typedef struct {\r
+ UINTN LinkFlag;\r
+ INTN CastType;\r
+ INTN Start;\r
+ INTN End;\r
+ INTN Length;\r
+ UINT32 Life;\r
+ EFI_STATUS Status;\r
+} IP4_CLIP_INFO;\r
+\r
+//\r
+// Structure used to assemble IP packets.\r
+//\r
+typedef struct {\r
+ NET_LIST_ENTRY Link;\r
+\r
+ //\r
+ // Identity of one IP4 packet. Each fragment of a packet has\r
+ // the same (Dst, Src, Id, Protocol).\r
+ //\r
+ IP4_ADDR Dst;\r
+ IP4_ADDR Src;\r
+ UINT16 Id;\r
+ UINT8 Protocol;\r
+\r
+ INTN TotalLen;\r
+ INTN CurLen;\r
+ NET_LIST_ENTRY Fragments; // List of all the fragments of this packet\r
+\r
+ IP4_HEAD *Head; // IP head of the first fragment\r
+ IP4_CLIP_INFO *Info; // Per packet info of the first fragment\r
+ INTN Life; // Count down life for the packet.\r
+} IP4_ASSEMBLE_ENTRY;\r
+\r
+//\r
+// Each Ip service instance has an assemble table to reassemble\r
+// the packets before delivery to its children. It is organized\r
+// as hash table.\r
+//\r
+typedef struct {\r
+ NET_LIST_ENTRY Bucket[IP4_ASSEMLE_HASH_SIZE];\r
+} IP4_ASSEMBLE_TABLE;\r
+\r
+#define IP4_GET_CLIP_INFO(Packet) ((IP4_CLIP_INFO *) ((Packet)->ProtoData))\r
+\r
+#define IP4_ASSEMBLE_HASH(Dst, Src, Id, Proto) \\r
+ (((Dst) + (Src) + ((Id) << 16) + (Proto)) % IP4_ASSEMLE_HASH_SIZE)\r
+\r
+#define IP4_RXDATA_WRAP_SIZE(NumFrag) \\r
+ (sizeof (IP4_RXDATA_WRAP) + sizeof (EFI_IP4_FRAGMENT_DATA) * ((NumFrag) - 1))\r
+\r
+VOID\r
+Ip4InitAssembleTable (\r
+ IN IP4_ASSEMBLE_TABLE *Table\r
+ );\r
+\r
+VOID\r
+Ip4CleanAssembleTable (\r
+ IN IP4_ASSEMBLE_TABLE *Table\r
+ );\r
+\r
+VOID\r
+Ip4AccpetFrame (\r
+ IN IP4_PROTOCOL *Ip4Instance,\r
+ IN NET_BUF *Packet,\r
+ IN EFI_STATUS IoStatus,\r
+ IN UINT32 Flag,\r
+ IN VOID *Context\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4Demultiplex (\r
+ IN IP4_SERVICE *SbInstance,\r
+ IN IP4_HEAD *Head,\r
+ IN NET_BUF *Packet\r
+ );\r
+\r
+INTN\r
+Ip4InterfaceEnquePacket (\r
+ IN IP4_SERVICE *SbInstance,\r
+ IN IP4_HEAD *Head,\r
+ IN NET_BUF *Packet,\r
+ IN IP4_INTERFACE *Interface\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4InstanceDeliverPacket (\r
+ IN IP4_PROTOCOL *Ip4Instance\r
+ );\r
+\r
+VOID\r
+Ip4PacketTimerTicking (\r
+ IN IP4_SERVICE *IpSb\r
+ );\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Ip4Option.h
-
-Abstract:
-
- IP4 option support routines.
-
-
-**/
-
-#ifndef __EFI_IP4_OPTION_H__
-#define __EFI_IP4_OPTION_H__
-
-enum {
- IP4_OPTION_EOP = 0,
- IP4_OPTION_NOP = 1,
- IP4_OPTION_LSRR = 131, // Loss source and record routing, 10000011
- IP4_OPTION_SSRR = 137, // Strict source and record routing, 10001001
- IP4_OPTION_RR = 7, // Record routing, 00000111
-
- IP4_OPTION_COPY_MASK = 0x80
-};
-
-BOOLEAN
-Ip4OptionIsValid (
- IN UINT8 *Option,
- IN UINT32 OptLen,
- IN BOOLEAN Rcvd
- );
-
-EFI_STATUS
-Ip4CopyOption (
- IN UINT8 *Option,
- IN UINT32 OptLen,
- IN BOOLEAN Fragment,
- IN UINT8 *Buf, OPTIONAL
- IN OUT UINT32 *BufLen
- );
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+Module Name:\r
+\r
+ Ip4Option.h\r
+\r
+Abstract:\r
+\r
+ IP4 option support routines.\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_IP4_OPTION_H__\r
+#define __EFI_IP4_OPTION_H__\r
+\r
+enum {\r
+ IP4_OPTION_EOP = 0,\r
+ IP4_OPTION_NOP = 1,\r
+ IP4_OPTION_LSRR = 131, // Loss source and record routing, 10000011\r
+ IP4_OPTION_SSRR = 137, // Strict source and record routing, 10001001\r
+ IP4_OPTION_RR = 7, // Record routing, 00000111\r
+\r
+ IP4_OPTION_COPY_MASK = 0x80\r
+};\r
+\r
+BOOLEAN\r
+Ip4OptionIsValid (\r
+ IN UINT8 *Option,\r
+ IN UINT32 OptLen,\r
+ IN BOOLEAN Rcvd\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4CopyOption (\r
+ IN UINT8 *Option,\r
+ IN UINT32 OptLen,\r
+ IN BOOLEAN Fragment,\r
+ IN UINT8 *Buf, OPTIONAL\r
+ IN OUT UINT32 *BufLen\r
+ );\r
+#endif\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Ip4Output.h
-
-Abstract:
-
-
-**/
-
-#ifndef __EFI_IP4_OUTPUT_H__
-#define __EFI_IP4_OUTPUT_H__
-
-VOID
-Ip4SysPacketSent (
- IP4_PROTOCOL *Ip4Instance,
- NET_BUF *Packet,
- EFI_STATUS IoStatus,
- UINT32 Flag,
- VOID *Context
- );
-
-EFI_STATUS
-Ip4Output (
- IN IP4_SERVICE *IpSb,
- IN IP4_PROTOCOL *IpInstance, OPTIONAL
- IN NET_BUF *Data,
- IN IP4_HEAD *Head,
- IN UINT8 *Option,
- IN UINT32 OptLen,
- IN IP4_ADDR GateWay,
- IN IP4_FRAME_CALLBACK Callback,
- IN VOID *Context
- );
-
-VOID
-Ip4CancelPacket (
- IN IP4_INTERFACE *IpIf,
- IN NET_BUF *Packet,
- IN EFI_STATUS IoStatus
- );
-
-extern UINT16 mIp4Id;
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+ Ip4Output.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_IP4_OUTPUT_H__\r
+#define __EFI_IP4_OUTPUT_H__\r
+\r
+VOID\r
+Ip4SysPacketSent (\r
+ IP4_PROTOCOL *Ip4Instance,\r
+ NET_BUF *Packet,\r
+ EFI_STATUS IoStatus,\r
+ UINT32 Flag,\r
+ VOID *Context\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4Output (\r
+ IN IP4_SERVICE *IpSb,\r
+ IN IP4_PROTOCOL *IpInstance, OPTIONAL\r
+ IN NET_BUF *Data,\r
+ IN IP4_HEAD *Head,\r
+ IN UINT8 *Option,\r
+ IN UINT32 OptLen,\r
+ IN IP4_ADDR GateWay,\r
+ IN IP4_FRAME_CALLBACK Callback,\r
+ IN VOID *Context\r
+ );\r
+\r
+VOID\r
+Ip4CancelPacket (\r
+ IN IP4_INTERFACE *IpIf,\r
+ IN NET_BUF *Packet,\r
+ IN EFI_STATUS IoStatus\r
+ );\r
+\r
+extern UINT16 mIp4Id;\r
+#endif\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Ip4Route.h
-
-Abstract:
-
- EFI IP4 route table and route cache table defintions.
-
-
-**/
-
-#ifndef __EFI_IP4_ROUTE_H__
-#define __EFI_IP4_ROUTE_H__
-
-#include "IP4Common.h"
-
-enum {
- IP4_DIRECT_ROUTE = 0x00000001,
-
- IP4_ROUTE_CACHE_HASH = 31,
- IP4_ROUTE_CACHE_MAX = 64 // Max NO. of cache entry per hash bucket
-};
-
-#define IP4_ROUTE_CACHE_HASH(Dst, Src) (((Dst) ^ (Src)) % IP4_ROUTE_CACHE_HASH)
-
-//
-// The route entry in the route table. Dest/Netmask is the destion
-// network. The nexthop is the gateway to send the packet to in
-// order to reach the Dest/Netmask. If the Flag has IP4_DIRECT_ROUTE
-// on, the gateway is the destination of the IP packet itself. Route
-// enties of the connected network have the flag on.
-//
-typedef struct {
- NET_LIST_ENTRY Link;
- INTN RefCnt;
- IP4_ADDR Dest;
- IP4_ADDR Netmask;
- IP4_ADDR NextHop;
- UINT32 Flag;
-} IP4_ROUTE_ENTRY;
-
-//
-// The route cache entry. The route cache entry is optional.
-// But it is necessary to support the ICMP redirect message.
-// Check Ip4ProcessIcmpRedirect for information.
-//
-// The cache entry field Tag is used to tag all the route
-// cache entry spawned from a route table entry. This makes
-// it simple to delete all the route cache entries from a
-// to-be-deleted route entry.
-//
-typedef struct {
- NET_LIST_ENTRY Link;
- INTN RefCnt;
- IP4_ADDR Dest;
- IP4_ADDR Src;
- IP4_ADDR NextHop;
- UINTN Tag;
-} IP4_ROUTE_CACHE_ENTRY;
-
-//
-// The route cache table is organized as a hash table. Each
-// IP4 route table has a embedded route cache. For now the
-// route cache and route table are binded togehter. But keep
-// the route cache a seperated structure in case we want to
-// detach them later.
-//
-typedef struct {
- NET_LIST_ENTRY CacheBucket[IP4_ROUTE_CACHE_HASH];
-} IP4_ROUTE_CACHE;
-
-//
-// Each IP4 instance has its own route table. Each ServiceBinding
-// instance has a default route table and default address.
-//
-// All the route table entries with the same mask are linked
-// together in one route area. For example, RouteArea[0] contains
-// the default routes. A route table also contains a route cache.
-//
-typedef struct _IP4_ROUTE_TABLE IP4_ROUTE_TABLE;
-
-struct _IP4_ROUTE_TABLE {
- INTN RefCnt;
- UINT32 TotalNum;
- NET_LIST_ENTRY RouteArea[IP4_MASK_NUM];
- IP4_ROUTE_TABLE *Next;
- IP4_ROUTE_CACHE Cache;
-};
-
-IP4_ROUTE_TABLE*
-Ip4CreateRouteTable (
- VOID
- );
-
-VOID
-Ip4FreeRouteTable (
- IN IP4_ROUTE_TABLE *RouteTable
- );
-
-EFI_STATUS
-Ip4AddRoute (
- IN IP4_ROUTE_TABLE *RtTable,
- IN IP4_ADDR Dest,
- IN IP4_ADDR Netmask,
- IN IP4_ADDR Gateway
- );
-
-EFI_STATUS
-Ip4DelRoute (
- IN IP4_ROUTE_TABLE *RtTable,
- IN IP4_ADDR Dest,
- IN IP4_ADDR Netmask,
- IN IP4_ADDR Gateway
- );
-
-IP4_ROUTE_CACHE_ENTRY *
-Ip4FindRouteCache (
- IN IP4_ROUTE_TABLE *RtTable,
- IN IP4_ADDR Dest,
- IN IP4_ADDR Src
- );
-
-VOID
-Ip4FreeRouteCacheEntry (
- IN IP4_ROUTE_CACHE_ENTRY *RtCacheEntry
- );
-
-IP4_ROUTE_CACHE_ENTRY *
-Ip4Route (
- IN IP4_ROUTE_TABLE *RtTable,
- IN IP4_ADDR Dest,
- IN IP4_ADDR Src
- );
-
-EFI_STATUS
-Ip4BuildEfiRouteTable (
- IN IP4_PROTOCOL *IpInstance
- );
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+Module Name:\r
+\r
+ Ip4Route.h\r
+\r
+Abstract:\r
+\r
+ EFI IP4 route table and route cache table defintions.\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_IP4_ROUTE_H__\r
+#define __EFI_IP4_ROUTE_H__\r
+\r
+#include "IP4Common.h"\r
+\r
+enum {\r
+ IP4_DIRECT_ROUTE = 0x00000001,\r
+\r
+ IP4_ROUTE_CACHE_HASH = 31,\r
+ IP4_ROUTE_CACHE_MAX = 64 // Max NO. of cache entry per hash bucket\r
+};\r
+\r
+#define IP4_ROUTE_CACHE_HASH(Dst, Src) (((Dst) ^ (Src)) % IP4_ROUTE_CACHE_HASH)\r
+\r
+//\r
+// The route entry in the route table. Dest/Netmask is the destion\r
+// network. The nexthop is the gateway to send the packet to in\r
+// order to reach the Dest/Netmask. If the Flag has IP4_DIRECT_ROUTE\r
+// on, the gateway is the destination of the IP packet itself. Route\r
+// enties of the connected network have the flag on.\r
+//\r
+typedef struct {\r
+ NET_LIST_ENTRY Link;\r
+ INTN RefCnt;\r
+ IP4_ADDR Dest;\r
+ IP4_ADDR Netmask;\r
+ IP4_ADDR NextHop;\r
+ UINT32 Flag;\r
+} IP4_ROUTE_ENTRY;\r
+\r
+//\r
+// The route cache entry. The route cache entry is optional.\r
+// But it is necessary to support the ICMP redirect message.\r
+// Check Ip4ProcessIcmpRedirect for information.\r
+//\r
+// The cache entry field Tag is used to tag all the route\r
+// cache entry spawned from a route table entry. This makes\r
+// it simple to delete all the route cache entries from a\r
+// to-be-deleted route entry.\r
+//\r
+typedef struct {\r
+ NET_LIST_ENTRY Link;\r
+ INTN RefCnt;\r
+ IP4_ADDR Dest;\r
+ IP4_ADDR Src;\r
+ IP4_ADDR NextHop;\r
+ UINTN Tag;\r
+} IP4_ROUTE_CACHE_ENTRY;\r
+\r
+//\r
+// The route cache table is organized as a hash table. Each\r
+// IP4 route table has a embedded route cache. For now the\r
+// route cache and route table are binded togehter. But keep\r
+// the route cache a seperated structure in case we want to\r
+// detach them later.\r
+//\r
+typedef struct {\r
+ NET_LIST_ENTRY CacheBucket[IP4_ROUTE_CACHE_HASH];\r
+} IP4_ROUTE_CACHE;\r
+\r
+//\r
+// Each IP4 instance has its own route table. Each ServiceBinding\r
+// instance has a default route table and default address.\r
+//\r
+// All the route table entries with the same mask are linked\r
+// together in one route area. For example, RouteArea[0] contains\r
+// the default routes. A route table also contains a route cache.\r
+//\r
+typedef struct _IP4_ROUTE_TABLE IP4_ROUTE_TABLE;\r
+\r
+struct _IP4_ROUTE_TABLE {\r
+ INTN RefCnt;\r
+ UINT32 TotalNum;\r
+ NET_LIST_ENTRY RouteArea[IP4_MASK_NUM];\r
+ IP4_ROUTE_TABLE *Next;\r
+ IP4_ROUTE_CACHE Cache;\r
+};\r
+\r
+IP4_ROUTE_TABLE*\r
+Ip4CreateRouteTable (\r
+ VOID\r
+ );\r
+\r
+VOID\r
+Ip4FreeRouteTable (\r
+ IN IP4_ROUTE_TABLE *RouteTable\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4AddRoute (\r
+ IN IP4_ROUTE_TABLE *RtTable,\r
+ IN IP4_ADDR Dest,\r
+ IN IP4_ADDR Netmask,\r
+ IN IP4_ADDR Gateway\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4DelRoute (\r
+ IN IP4_ROUTE_TABLE *RtTable,\r
+ IN IP4_ADDR Dest,\r
+ IN IP4_ADDR Netmask,\r
+ IN IP4_ADDR Gateway\r
+ );\r
+\r
+IP4_ROUTE_CACHE_ENTRY *\r
+Ip4FindRouteCache (\r
+ IN IP4_ROUTE_TABLE *RtTable,\r
+ IN IP4_ADDR Dest,\r
+ IN IP4_ADDR Src\r
+ );\r
+\r
+VOID\r
+Ip4FreeRouteCacheEntry (\r
+ IN IP4_ROUTE_CACHE_ENTRY *RtCacheEntry\r
+ );\r
+\r
+IP4_ROUTE_CACHE_ENTRY *\r
+Ip4Route (\r
+ IN IP4_ROUTE_TABLE *RtTable,\r
+ IN IP4_ADDR Dest,\r
+ IN IP4_ADDR Src\r
+ );\r
+\r
+EFI_STATUS\r
+Ip4BuildEfiRouteTable (\r
+ IN IP4_PROTOCOL *IpInstance\r
+ );\r
+#endif\r
//\r
// EFI Component Name Functions\r
//\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
MnpComponentNameGetDriverName (\r
OUT CHAR16 **DriverName\r
);\r
\r
+\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
MnpComponentNameGetControllerName (\r
OUT CHAR16 **ControllerName\r
);\r
\r
+\r
//\r
// EFI Component Name Protocol\r
//\r
-EFI_COMPONENT_NAME_PROTOCOL gMnpComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL gMnpComponentName = {\r
MnpComponentNameGetDriverName,\r
MnpComponentNameGetControllerName,\r
"eng"\r
-};\r
+ };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gMnpComponentName2 = {\r
+ (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) MnpComponentNameGetDriverName,\r
+ (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) MnpComponentNameGetControllerName,\r
+ "en"\r
+ };\r
+\r
\r
STATIC EFI_UNICODE_STRING_TABLE mMnpDriverNameTable[] = {\r
{\r
- "eng",\r
+ "eng;en",\r
L"MNP Network Service Driver"\r
},\r
{\r
}\r
};\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
MnpComponentNameGetDriverName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **DriverName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- Language - A pointer to a three character ISO 639-2 language identifier.\r
- This is the language of the driver name that that the caller\r
- is requesting, and it must match one of the languages specified\r
- in SupportedLanguages. The number of languages supported by a\r
- driver is up to the driver writer.\r
- DriverName - A pointer to the Unicode string to return. This Unicode string\r
- is the name of the driver specified by This in the language\r
- specified by Language.\r
-\r
- Returns:\r
- EFI_SUCCES - The Unicode string for the Driver specified by This\r
- and the language specified by Language was returned\r
- in DriverName.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - DriverName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
- return LookupUnicodeString (\r
- Language,\r
- gMnpComponentName.SupportedLanguages,\r
- mMnpDriverNameTable,\r
- DriverName\r
- );\r
+ return LookupUnicodeString2 (\r
+ Language,\r
+ This->SupportedLanguages,\r
+ mMnpDriverNameTable,\r
+ DriverName,\r
+ (BOOLEAN)(This == &gMnpComponentName)\r
+ );\r
}\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
MnpComponentNameGetControllerName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **ControllerName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the controller\r
- that is being managed by an EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- ControllerHandle - The handle of a controller that the driver specified by\r
- This is managing. This handle specifies the controller\r
- whose name is to be returned.\r
- ChildHandle - The handle of the child controller to retrieve the name\r
- of. This is an optional parameter that may be NULL. It\r
- will be NULL for device drivers. It will also be NULL\r
- for a bus drivers that wish to retrieve the name of the\r
- bus controller. It will not be NULL for a bus driver\r
- that wishes to retrieve the name of a child controller.\r
- Language - A pointer to a three character ISO 639-2 language\r
- identifier. This is the language of the controller name\r
- that that the caller is requesting, and it must match one\r
- of the languages specified in SupportedLanguages. The\r
- number of languages supported by a driver is up to the\r
- driver writer.\r
- ControllerName - A pointer to the Unicode string to return. This Unicode\r
- string is the name of the controller specified by\r
- ControllerHandle and ChildHandle in the language specified\r
- by Language from the point of view of the driver specified\r
- by This.\r
-\r
- Returns:\r
- EFI_SUCCESS - The Unicode string for the user readable name in the\r
- language specified by Language for the driver\r
- specified by This was returned in DriverName.\r
- EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - ControllerName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This is not currently managing\r
- the controller specified by ControllerHandle and\r
- ChildHandle.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
return EFI_UNSUPPORTED;\r
}\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- MnpDebug.h
-
-Abstract:
-
-
-**/
-
-#ifndef _MNP_DEBUG_H_
-#define _MNP_DEBUG_H_
-
-#define MNP_DEBUG_TRACE(PrintArg) NET_DEBUG_TRACE ("Mnp", PrintArg)
-#define MNP_DEBUG_WARN(PrintArg) NET_DEBUG_WARNING ("Mnp", PrintArg)
-#define MNP_DEBUG_ERROR(PrintArg) NET_DEBUG_ERROR ("Mnp", PrintArg)
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+ MnpDebug.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _MNP_DEBUG_H_\r
+#define _MNP_DEBUG_H_\r
+\r
+#define MNP_DEBUG_TRACE(PrintArg) NET_DEBUG_TRACE ("Mnp", PrintArg)\r
+#define MNP_DEBUG_WARN(PrintArg) NET_DEBUG_WARNING ("Mnp", PrintArg)\r
+#define MNP_DEBUG_ERROR(PrintArg) NET_DEBUG_ERROR ("Mnp", PrintArg)\r
+\r
+#endif\r
\r
--*/\r
{\r
- return EfiLibInstallAllDriverProtocols (\r
+ return EfiLibInstallDriverBindingComponentName2 (\r
ImageHandle,\r
SystemTable,\r
&gMnpDriverBinding,\r
ImageHandle,\r
&gMnpComponentName,\r
- NULL,\r
- NULL\r
+ &gMnpComponentName2\r
);\r
}\r
-/** @file
-
-Copyright (c) 2005 - 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:
-
- MnpDriver.h
-
-Abstract:
-
-
-**/
-
-#ifndef _MNP_DRIVER_H_
-#define _MNP_DRIVER_H_
+/** @file\r
+\r
+Copyright (c) 2005 - 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
+\r
+ MnpDriver.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _MNP_DRIVER_H_\r
+#define _MNP_DRIVER_H_\r
#include <PiDxe.h>\r
\r
#include <Protocol/ManagedNetwork.h>\r
-#include <Protocol/SimpleNetwork.h>
+#include <Protocol/SimpleNetwork.h>\r
#include <Protocol/ServiceBinding.h>\r
\r
#include <Library/DebugLib.h>\r
#include <Library/UefiDriverEntryPoint.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
-#include <Library/UefiLib.h>
-#include <Library/NetLib.h>
+#include <Library/UefiLib.h>\r
+#include <Library/NetLib.h>\r
#include <Library/BaseLib.h>\r
-#include <Library/MemoryAllocationLib.h>
-#include <Library/BaseMemoryLib.h>
-
-#include "MnpDebug.h"
-
-//
-// Required Global Variables
-//
-extern EFI_DRIVER_BINDING_PROTOCOL gMnpDriverBinding;
-extern EFI_COMPONENT_NAME_PROTOCOL gMnpComponentName;
-
-#define MNP_SERVICE_DATA_SIGNATURE EFI_SIGNATURE_32 ('M', 'n', 'p', 'S')
-
-typedef struct _MNP_SERVICE_DATA {
- UINT32 Signature;
-
- EFI_HANDLE ControllerHandle;
-
- EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;
- EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
-
- UINT32 Mtu;
-
- NET_LIST_ENTRY ChildrenList;
- UINTN ChildrenNumber;
- UINTN ConfiguredChildrenNumber;
-
- NET_LIST_ENTRY GroupAddressList;
- UINT32 GroupAddressCount;
-
- EFI_EVENT TxTimeoutEvent;
-
- NET_BUF_QUEUE FreeNbufQue;
- INTN NbufCnt;
-
- EFI_EVENT PollTimer;
- BOOLEAN EnableSystemPoll;
-
- EFI_EVENT TimeoutCheckTimer;
-
- UINT32 UnicastCount;
- UINT32 BroadcastCount;
- UINT32 MulticastCount;
- UINT32 PromiscuousCount;
-
- //
- // The size of the data buffer in the MNP_PACKET_BUFFER used to
- // store a packet.
- //
- UINT32 BufferLength;
- UINT32 PaddingSize;
- NET_BUF *RxNbufCache;
- UINT8 *TxBuf;
-} MNP_SERVICE_DATA;
-
-#define MNP_SERVICE_DATA_FROM_THIS(a) \
- CR ( \
- (a), \
- MNP_SERVICE_DATA, \
- ServiceBinding, \
- MNP_SERVICE_DATA_SIGNATURE \
- )
-
-EFI_STATUS
-EFIAPI
-MnpDriverBindingSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL * This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-MnpDriverBindingStart (
- IN EFI_DRIVER_BINDING_PROTOCOL * This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-MnpDriverBindingStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- );
-
-EFI_STATUS
-EFIAPI
-MnpServiceBindingCreateChild (
- IN EFI_SERVICE_BINDING_PROTOCOL *This,
- IN EFI_HANDLE *ChildHandle
- );
-
-EFI_STATUS
-EFIAPI
-MnpServiceBindingDestroyChild (
- IN EFI_SERVICE_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ChildHandle
- );
-
-#endif
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+\r
+#include "MnpDebug.h"\r
+\r
+//\r
+// Required Global Variables\r
+//\r
+extern EFI_DRIVER_BINDING_PROTOCOL gMnpDriverBinding;\r
+extern EFI_COMPONENT_NAME_PROTOCOL gMnpComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gMnpComponentName2;\r
+\r
+#define MNP_SERVICE_DATA_SIGNATURE EFI_SIGNATURE_32 ('M', 'n', 'p', 'S')\r
+\r
+typedef struct _MNP_SERVICE_DATA {\r
+ UINT32 Signature;\r
+\r
+ EFI_HANDLE ControllerHandle;\r
+\r
+ EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;\r
+ EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
+\r
+ UINT32 Mtu;\r
+\r
+ NET_LIST_ENTRY ChildrenList;\r
+ UINTN ChildrenNumber;\r
+ UINTN ConfiguredChildrenNumber;\r
+\r
+ NET_LIST_ENTRY GroupAddressList;\r
+ UINT32 GroupAddressCount;\r
+\r
+ EFI_EVENT TxTimeoutEvent;\r
+\r
+ NET_BUF_QUEUE FreeNbufQue;\r
+ INTN NbufCnt;\r
+\r
+ EFI_EVENT PollTimer;\r
+ BOOLEAN EnableSystemPoll;\r
+\r
+ EFI_EVENT TimeoutCheckTimer;\r
+\r
+ UINT32 UnicastCount;\r
+ UINT32 BroadcastCount;\r
+ UINT32 MulticastCount;\r
+ UINT32 PromiscuousCount;\r
+\r
+ //\r
+ // The size of the data buffer in the MNP_PACKET_BUFFER used to\r
+ // store a packet.\r
+ //\r
+ UINT32 BufferLength;\r
+ UINT32 PaddingSize;\r
+ NET_BUF *RxNbufCache;\r
+ UINT8 *TxBuf;\r
+} MNP_SERVICE_DATA;\r
+\r
+#define MNP_SERVICE_DATA_FROM_THIS(a) \\r
+ CR ( \\r
+ (a), \\r
+ MNP_SERVICE_DATA, \\r
+ ServiceBinding, \\r
+ MNP_SERVICE_DATA_SIGNATURE \\r
+ )\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+MnpDriverBindingSupported (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL * This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+MnpDriverBindingStart (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL * This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+MnpDriverBindingStop (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+MnpServiceBindingCreateChild (\r
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE *ChildHandle\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+MnpServiceBindingDestroyChild (\r
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ChildHandle\r
+ );\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2005 - 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:
-
- MnpImpl.h
-
-Abstract:
-
-
-**/
-
-#ifndef _MNP_IMPL_H_
-#define _MNP_IMPL_H_
-
-#include "MnpDriver.h"
-#include "MnpDebug.h"
-
-#define NET_ETHER_FCS_SIZE 4
-
-#define MNP_SYS_POLL_INTERVAL (2 * TICKS_PER_MS) // 2 milliseconds
-#define MNP_TIMEOUT_CHECK_INTERVAL (50 * TICKS_PER_MS) // 50 milliseconds
-#define MNP_TX_TIMEOUT_TIME (500 * TICKS_PER_MS) // 500 milliseconds
-#define MNP_INIT_NET_BUFFER_NUM 512
-#define MNP_NET_BUFFER_INCREASEMENT 64
-#define MNP_MAX_NET_BUFFER_NUM 65536
-
-#define MNP_MAX_RCVD_PACKET_QUE_SIZE 256
-
-#define MNP_RECEIVE_UNICAST 0x01
-#define MNP_RECEIVE_BROADCAST 0x02
-
-#define UNICAST_PACKET MNP_RECEIVE_UNICAST
-#define BROADCAST_PACKET MNP_RECEIVE_BROADCAST
-
-#define MNP_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32 ('M', 'n', 'p', 'I')
-
-#define MNP_INSTANCE_DATA_FROM_THIS(a) \
- CR ( \
- (a), \
- MNP_INSTANCE_DATA, \
- ManagedNetwork, \
- MNP_INSTANCE_DATA_SIGNATURE \
- )
-
-typedef struct _MNP_INSTANCE_DATA {
- UINT32 Signature;
-
- MNP_SERVICE_DATA *MnpServiceData;
-
- EFI_HANDLE Handle;
-
- NET_LIST_ENTRY InstEntry;
-
- EFI_MANAGED_NETWORK_PROTOCOL ManagedNetwork;
-
- BOOLEAN Configured;
- BOOLEAN Destroyed;
-
- NET_LIST_ENTRY GroupCtrlBlkList;
-
- NET_MAP RxTokenMap;
-
- NET_LIST_ENTRY RxDeliveredPacketQueue;
- NET_LIST_ENTRY RcvdPacketQueue;
- UINTN RcvdPacketQueueSize;
-
- EFI_MANAGED_NETWORK_CONFIG_DATA ConfigData;
-
- UINT8 ReceiveFilter;
-} MNP_INSTANCE_DATA;
-
-typedef struct _MNP_GROUP_ADDRESS {
- NET_LIST_ENTRY AddrEntry;
- EFI_MAC_ADDRESS Address;
- INTN RefCnt;
-} MNP_GROUP_ADDRESS;
-
-typedef struct _MNP_GROUP_CONTROL_BLOCK {
- NET_LIST_ENTRY CtrlBlkEntry;
- MNP_GROUP_ADDRESS *GroupAddress;
-} MNP_GROUP_CONTROL_BLOCK;
-
-typedef struct _MNP_RXDATA_WRAP {
- NET_LIST_ENTRY WrapEntry;
- MNP_INSTANCE_DATA *Instance;
- EFI_MANAGED_NETWORK_RECEIVE_DATA RxData;
- NET_BUF *Nbuf;
- UINT64 TimeoutTick;
-} MNP_RXDATA_WRAP;
-
-EFI_STATUS
-MnpInitializeServiceData (
- IN MNP_SERVICE_DATA *MnpServiceData,
- IN EFI_HANDLE ImageHandle,
- IN EFI_HANDLE ControllerHandle
- );
-
-VOID
-MnpFlushServiceData (
- MNP_SERVICE_DATA *MnpServiceData
- );
-
-VOID
-MnpInitializeInstanceData (
- IN MNP_SERVICE_DATA *MnpServiceData,
- IN MNP_INSTANCE_DATA *Instance
- );
-
-EFI_STATUS
-MnpTokenExist (
- IN NET_MAP *Map,
- IN NET_MAP_ITEM *Item,
- IN VOID *Arg
- );
-
-EFI_STATUS
-MnpCancelTokens (
- IN NET_MAP *Map,
- IN NET_MAP_ITEM *Item,
- IN VOID *Arg
- );
-
-VOID
-MnpFlushRcvdDataQueue (
- IN MNP_INSTANCE_DATA *Instance
- );
-
-EFI_STATUS
-MnpConfigureInstance (
- IN MNP_INSTANCE_DATA *Instance,
- IN EFI_MANAGED_NETWORK_CONFIG_DATA *ConfigData OPTIONAL
- );
-
-EFI_STATUS
-MnpGroupOp (
- IN MNP_INSTANCE_DATA *Instance,
- IN BOOLEAN JoinFlag,
- IN EFI_MAC_ADDRESS *MacAddr OPTIONAL,
- IN MNP_GROUP_CONTROL_BLOCK *CtrlBlk OPTIONAL
- );
-
-BOOLEAN
-MnpIsValidTxToken (
- IN MNP_INSTANCE_DATA *Instance,
- IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token
- );
-
-VOID
-MnpBuildTxPacket (
- IN MNP_SERVICE_DATA *MnpServiceData,
- IN EFI_MANAGED_NETWORK_TRANSMIT_DATA *TxData,
- OUT UINT8 **PktBuf,
- OUT UINT32 *PktLen
- );
-
-EFI_STATUS
-MnpSyncSendPacket (
- IN MNP_SERVICE_DATA *MnpServiceData,
- IN UINT8 *Packet,
- IN UINT32 Length,
- IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token
- );
-
-EFI_STATUS
-MnpInstanceDeliverPacket (
- IN MNP_INSTANCE_DATA *Instance
- );
-
-VOID
-EFIAPI
-MnpRecycleRxData (
- IN EFI_EVENT Event,
- IN VOID *Context
- );
-
-EFI_STATUS
-MnpReceivePacket (
- IN MNP_SERVICE_DATA *MnpServiceData
- );
-
-NET_BUF *
-MnpAllocNbuf (
- IN MNP_SERVICE_DATA *MnpServiceData
- );
-
-VOID
-MnpFreeNbuf (
- IN MNP_SERVICE_DATA *MnpServiceData,
- IN NET_BUF *Nbuf
- );
-
-VOID
-EFIAPI
-MnpCheckPacketTimeout (
- IN EFI_EVENT Event,
- IN VOID *Context
- );
-
-VOID
-EFIAPI
-MnpSystemPoll (
- IN EFI_EVENT Event,
- IN VOID *Context
- );
-
-EFI_STATUS
-EFIAPI
-MnpGetModeData (
- IN EFI_MANAGED_NETWORK_PROTOCOL *This,
- OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
- OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-MnpConfigure (
- IN EFI_MANAGED_NETWORK_PROTOCOL *This,
- IN EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-MnpMcastIpToMac (
- IN EFI_MANAGED_NETWORK_PROTOCOL *This,
- IN BOOLEAN Ipv6Flag,
- IN EFI_IP_ADDRESS *IpAddress,
- OUT EFI_MAC_ADDRESS *MacAddress
- );
-
-EFI_STATUS
-EFIAPI
-MnpGroups (
- IN EFI_MANAGED_NETWORK_PROTOCOL *This,
- IN BOOLEAN JoinFlag,
- IN EFI_MAC_ADDRESS *MacAddress OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-MnpTransmit (
- IN EFI_MANAGED_NETWORK_PROTOCOL *This,
- IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token
- );
-
-EFI_STATUS
-EFIAPI
-MnpCancel (
- IN EFI_MANAGED_NETWORK_PROTOCOL *This,
- IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-MnpReceive (
- IN EFI_MANAGED_NETWORK_PROTOCOL *This,
- IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token
- );
-
-EFI_STATUS
-EFIAPI
-MnpPoll (
- IN EFI_MANAGED_NETWORK_PROTOCOL *This
- );
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 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
+\r
+ MnpImpl.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _MNP_IMPL_H_\r
+#define _MNP_IMPL_H_\r
+\r
+#include "MnpDriver.h"\r
+#include "MnpDebug.h"\r
+\r
+#define NET_ETHER_FCS_SIZE 4\r
+\r
+#define MNP_SYS_POLL_INTERVAL (2 * TICKS_PER_MS) // 2 milliseconds\r
+#define MNP_TIMEOUT_CHECK_INTERVAL (50 * TICKS_PER_MS) // 50 milliseconds\r
+#define MNP_TX_TIMEOUT_TIME (500 * TICKS_PER_MS) // 500 milliseconds\r
+#define MNP_INIT_NET_BUFFER_NUM 512\r
+#define MNP_NET_BUFFER_INCREASEMENT 64\r
+#define MNP_MAX_NET_BUFFER_NUM 65536\r
+\r
+#define MNP_MAX_RCVD_PACKET_QUE_SIZE 256\r
+\r
+#define MNP_RECEIVE_UNICAST 0x01\r
+#define MNP_RECEIVE_BROADCAST 0x02\r
+\r
+#define UNICAST_PACKET MNP_RECEIVE_UNICAST\r
+#define BROADCAST_PACKET MNP_RECEIVE_BROADCAST\r
+\r
+#define MNP_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32 ('M', 'n', 'p', 'I')\r
+\r
+#define MNP_INSTANCE_DATA_FROM_THIS(a) \\r
+ CR ( \\r
+ (a), \\r
+ MNP_INSTANCE_DATA, \\r
+ ManagedNetwork, \\r
+ MNP_INSTANCE_DATA_SIGNATURE \\r
+ )\r
+\r
+typedef struct _MNP_INSTANCE_DATA {\r
+ UINT32 Signature;\r
+\r
+ MNP_SERVICE_DATA *MnpServiceData;\r
+\r
+ EFI_HANDLE Handle;\r
+\r
+ NET_LIST_ENTRY InstEntry;\r
+\r
+ EFI_MANAGED_NETWORK_PROTOCOL ManagedNetwork;\r
+\r
+ BOOLEAN Configured;\r
+ BOOLEAN Destroyed;\r
+\r
+ NET_LIST_ENTRY GroupCtrlBlkList;\r
+\r
+ NET_MAP RxTokenMap;\r
+\r
+ NET_LIST_ENTRY RxDeliveredPacketQueue;\r
+ NET_LIST_ENTRY RcvdPacketQueue;\r
+ UINTN RcvdPacketQueueSize;\r
+\r
+ EFI_MANAGED_NETWORK_CONFIG_DATA ConfigData;\r
+\r
+ UINT8 ReceiveFilter;\r
+} MNP_INSTANCE_DATA;\r
+\r
+typedef struct _MNP_GROUP_ADDRESS {\r
+ NET_LIST_ENTRY AddrEntry;\r
+ EFI_MAC_ADDRESS Address;\r
+ INTN RefCnt;\r
+} MNP_GROUP_ADDRESS;\r
+\r
+typedef struct _MNP_GROUP_CONTROL_BLOCK {\r
+ NET_LIST_ENTRY CtrlBlkEntry;\r
+ MNP_GROUP_ADDRESS *GroupAddress;\r
+} MNP_GROUP_CONTROL_BLOCK;\r
+\r
+typedef struct _MNP_RXDATA_WRAP {\r
+ NET_LIST_ENTRY WrapEntry;\r
+ MNP_INSTANCE_DATA *Instance;\r
+ EFI_MANAGED_NETWORK_RECEIVE_DATA RxData;\r
+ NET_BUF *Nbuf;\r
+ UINT64 TimeoutTick;\r
+} MNP_RXDATA_WRAP;\r
+\r
+EFI_STATUS\r
+MnpInitializeServiceData (\r
+ IN MNP_SERVICE_DATA *MnpServiceData,\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_HANDLE ControllerHandle\r
+ );\r
+\r
+VOID\r
+MnpFlushServiceData (\r
+ MNP_SERVICE_DATA *MnpServiceData\r
+ );\r
+\r
+VOID\r
+MnpInitializeInstanceData (\r
+ IN MNP_SERVICE_DATA *MnpServiceData,\r
+ IN MNP_INSTANCE_DATA *Instance\r
+ );\r
+\r
+EFI_STATUS\r
+MnpTokenExist (\r
+ IN NET_MAP *Map,\r
+ IN NET_MAP_ITEM *Item,\r
+ IN VOID *Arg\r
+ );\r
+\r
+EFI_STATUS\r
+MnpCancelTokens (\r
+ IN NET_MAP *Map,\r
+ IN NET_MAP_ITEM *Item,\r
+ IN VOID *Arg\r
+ );\r
+\r
+VOID\r
+MnpFlushRcvdDataQueue (\r
+ IN MNP_INSTANCE_DATA *Instance\r
+ );\r
+\r
+EFI_STATUS\r
+MnpConfigureInstance (\r
+ IN MNP_INSTANCE_DATA *Instance,\r
+ IN EFI_MANAGED_NETWORK_CONFIG_DATA *ConfigData OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+MnpGroupOp (\r
+ IN MNP_INSTANCE_DATA *Instance,\r
+ IN BOOLEAN JoinFlag,\r
+ IN EFI_MAC_ADDRESS *MacAddr OPTIONAL,\r
+ IN MNP_GROUP_CONTROL_BLOCK *CtrlBlk OPTIONAL\r
+ );\r
+\r
+BOOLEAN\r
+MnpIsValidTxToken (\r
+ IN MNP_INSTANCE_DATA *Instance,\r
+ IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token\r
+ );\r
+\r
+VOID\r
+MnpBuildTxPacket (\r
+ IN MNP_SERVICE_DATA *MnpServiceData,\r
+ IN EFI_MANAGED_NETWORK_TRANSMIT_DATA *TxData,\r
+ OUT UINT8 **PktBuf,\r
+ OUT UINT32 *PktLen\r
+ );\r
+\r
+EFI_STATUS\r
+MnpSyncSendPacket (\r
+ IN MNP_SERVICE_DATA *MnpServiceData,\r
+ IN UINT8 *Packet,\r
+ IN UINT32 Length,\r
+ IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token\r
+ );\r
+\r
+EFI_STATUS\r
+MnpInstanceDeliverPacket (\r
+ IN MNP_INSTANCE_DATA *Instance\r
+ );\r
+\r
+VOID\r
+EFIAPI\r
+MnpRecycleRxData (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ );\r
+\r
+EFI_STATUS\r
+MnpReceivePacket (\r
+ IN MNP_SERVICE_DATA *MnpServiceData\r
+ );\r
+\r
+NET_BUF *\r
+MnpAllocNbuf (\r
+ IN MNP_SERVICE_DATA *MnpServiceData\r
+ );\r
+\r
+VOID\r
+MnpFreeNbuf (\r
+ IN MNP_SERVICE_DATA *MnpServiceData,\r
+ IN NET_BUF *Nbuf\r
+ );\r
+\r
+VOID\r
+EFIAPI\r
+MnpCheckPacketTimeout (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ );\r
+\r
+VOID\r
+EFIAPI\r
+MnpSystemPoll (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+MnpGetModeData (\r
+ IN EFI_MANAGED_NETWORK_PROTOCOL *This,\r
+ OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,\r
+ OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+MnpConfigure (\r
+ IN EFI_MANAGED_NETWORK_PROTOCOL *This,\r
+ IN EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+MnpMcastIpToMac (\r
+ IN EFI_MANAGED_NETWORK_PROTOCOL *This,\r
+ IN BOOLEAN Ipv6Flag,\r
+ IN EFI_IP_ADDRESS *IpAddress,\r
+ OUT EFI_MAC_ADDRESS *MacAddress\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+MnpGroups (\r
+ IN EFI_MANAGED_NETWORK_PROTOCOL *This,\r
+ IN BOOLEAN JoinFlag,\r
+ IN EFI_MAC_ADDRESS *MacAddress OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+MnpTransmit (\r
+ IN EFI_MANAGED_NETWORK_PROTOCOL *This,\r
+ IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+MnpCancel (\r
+ IN EFI_MANAGED_NETWORK_PROTOCOL *This,\r
+ IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+MnpReceive (\r
+ IN EFI_MANAGED_NETWORK_PROTOCOL *This,\r
+ IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+MnpPoll (\r
+ IN EFI_MANAGED_NETWORK_PROTOCOL *This\r
+ );\r
+\r
+#endif\r
//\r
// EFI Component Name Functions\r
//\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
Mtftp4ComponentNameGetDriverName (\r
OUT CHAR16 **DriverName\r
);\r
\r
+\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
Mtftp4ComponentNameGetControllerName (\r
OUT CHAR16 **ControllerName\r
);\r
\r
+\r
//\r
// EFI Component Name Protocol\r
//\r
-EFI_COMPONENT_NAME_PROTOCOL gMtftp4ComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL gMtftp4ComponentName = {\r
Mtftp4ComponentNameGetDriverName,\r
Mtftp4ComponentNameGetControllerName,\r
"eng"\r
-};\r
+ };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gMtftp4ComponentName2 = {\r
+ (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) Mtftp4ComponentNameGetDriverName,\r
+ (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) Mtftp4ComponentNameGetControllerName,\r
+ "en"\r
+ };\r
+\r
\r
static EFI_UNICODE_STRING_TABLE mMtftp4DriverNameTable[] = {\r
{\r
- "eng",\r
+ "eng;en",\r
L"MTFTP4 Network Service"\r
},\r
{\r
}\r
};\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
Mtftp4ComponentNameGetDriverName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **DriverName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
-\r
- Arguments:\r
- This : A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- Language : A pointer to a three character ISO 639-2 language identifier.\r
- This is the language of the driver name that that the caller\r
- is requesting, and it must match one of the languages specified\r
- in SupportedLanguages. The number of languages supported by a\r
- driver is up to the driver writer.\r
- DriverName : A pointer to the Unicode string to return. This Unicode string\r
- is the name of the driver specified by This in the language\r
- specified by Language.\r
-\r
- Returns:\r
- EFI_SUCCES : The Unicode string for the Driver specified by This\r
- and the language specified by Language was returned\r
- in DriverName.\r
- EFI_INVALID_PARAMETER : Language is NULL.\r
- EFI_INVALID_PARAMETER : DriverName is NULL.\r
- EFI_UNSUPPORTED : The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
- return LookupUnicodeString (\r
- Language,\r
- gMtftp4ComponentName.SupportedLanguages,\r
- mMtftp4DriverNameTable,\r
- DriverName\r
- );\r
+ return LookupUnicodeString2 (\r
+ Language,\r
+ This->SupportedLanguages,\r
+ mMtftp4DriverNameTable,\r
+ DriverName,\r
+ (BOOLEAN)(This == &gMtftp4ComponentName)\r
+ );\r
}\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
Mtftp4ComponentNameGetControllerName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **ControllerName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the controller\r
- that is being managed by an EFI Driver.\r
-\r
- Arguments:\r
- This : A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- ControllerHandle :The handle of a controller that the driver specified by\r
- This is managing. This handle specifies the controller\r
- whose name is to be returned.\r
- ChildHandle :The handle of the child controller to retrieve the name\r
- of. This is an optional parameter that may be NULL. It\r
- will be NULL for device drivers. It will also be NULL\r
- for a bus drivers that wish to retrieve the name of the\r
- bus controller. It will not be NULL for a bus driver\r
- that wishes to retrieve the name of a child controller.\r
- Language : A pointer to a three character ISO 639-2 language\r
- identifier. This is the language of the controller name\r
- that that the caller is requesting, and it must match one\r
- of the languages specified in SupportedLanguages. The\r
- number of languages supported by a driver is up to the\r
- driver writer.\r
- ControllerName : A pointer to the Unicode string to return. This Unicode\r
- string is the name of the controller specified by\r
- ControllerHandle and ChildHandle in the language specified\r
- by Language from the point of view of the driver specified\r
- by This.\r
-\r
- Returns:\r
- EFI_SUCCESS :The Unicode string for the user readable name in the\r
- language specified by Language for the driver\r
- specified by This was returned in DriverName.\r
- EFI_INVALID_PARAMETER : ControllerHandle is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER : ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER : Language is NULL.\r
- EFI_INVALID_PARAMETER : ControllerName is NULL.\r
- EFI_UNSUPPORTED : The driver specified by This is not currently managing\r
- the controller specified by ControllerHandle and\r
- ChildHandle.\r
- EFI_UNSUPPORTED :The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
return EFI_UNSUPPORTED;\r
}\r
\r
--*/\r
{\r
- return EfiLibInstallAllDriverProtocols (\r
+ return EfiLibInstallDriverBindingComponentName2 (\r
ImageHandle,\r
SystemTable,\r
&gMtftp4DriverBinding,\r
ImageHandle,\r
&gMtftp4ComponentName,\r
- NULL,\r
- NULL\r
+ &gMtftp4ComponentName2\r
);\r
}\r
\r
-/** @file
-
-Copyright (c) 2006 - 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:
-
- Mtftp4Driver.h
-
-Abstract:
-
-
-**/
-
-#ifndef __EFI_MTFTP4_DRIVER_H__
-#define __EFI_MTFTP4_DRIVER_H__
-
-#include <PiDxe.h>
-
-#include <Protocol/ServiceBinding.h>
-
-#include <Library/NetLib.h>
-#include <Library/UefiLib.h>
-
-
-EFI_STATUS
-Mtftp4DriverBindingSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- );
-
-EFI_STATUS
-Mtftp4DriverBindingStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- );
-
-EFI_STATUS
-Mtftp4DriverBindingStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- );
-
-EFI_STATUS
-Mtftp4ServiceBindingCreateChild (
- IN EFI_SERVICE_BINDING_PROTOCOL *This,
- IN OUT EFI_HANDLE *ChildHandle
- );
-
-EFI_STATUS
-Mtftp4ServiceBindingDestroyChild (
- IN EFI_SERVICE_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ChildHandle
- );
-
-extern EFI_COMPONENT_NAME_PROTOCOL gMtftp4ComponentName;
-extern EFI_DRIVER_BINDING_PROTOCOL gMtftp4DriverBinding;
-
-#endif
+/** @file\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
+\r
+ Mtftp4Driver.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_MTFTP4_DRIVER_H__\r
+#define __EFI_MTFTP4_DRIVER_H__\r
+\r
+#include <PiDxe.h>\r
+\r
+#include <Protocol/ServiceBinding.h>\r
+\r
+#include <Library/NetLib.h>\r
+#include <Library/UefiLib.h>\r
+\r
+\r
+EFI_STATUS\r
+Mtftp4DriverBindingSupported (\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
+Mtftp4DriverBindingStart (\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
+Mtftp4DriverBindingStop (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
+ );\r
+\r
+EFI_STATUS\r
+Mtftp4ServiceBindingCreateChild (\r
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,\r
+ IN OUT EFI_HANDLE *ChildHandle\r
+ );\r
+\r
+EFI_STATUS\r
+Mtftp4ServiceBindingDestroyChild (\r
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ChildHandle\r
+ );\r
+\r
+extern EFI_COMPONENT_NAME_PROTOCOL gMtftp4ComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gMtftp4ComponentName2;\r
+extern EFI_DRIVER_BINDING_PROTOCOL gMtftp4DriverBinding;\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2006 - 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:
-
- Mtftp4Impl.h
-
-Abstract:
-
- Mtftp4 Implementation, it supports the following RFCs:
- RFC1350 - THE TFTP PROTOCOL (REVISION 2)
- RFC2090 - TFTP Multicast Option
- RFC2347 - TFTP Option Extension
- RFC2348 - TFTP Blocksize Option
- RFC2349 - TFTP Timeout Interval and Transfer Size Options
-
-
-**/
-
-#ifndef __EFI_MTFTP4_IMPL_H__
-#define __EFI_MTFTP4_IMPL_H__
-
+/** @file\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
+\r
+ Mtftp4Impl.h\r
+\r
+Abstract:\r
+\r
+ Mtftp4 Implementation, it supports the following RFCs:\r
+ RFC1350 - THE TFTP PROTOCOL (REVISION 2)\r
+ RFC2090 - TFTP Multicast Option\r
+ RFC2347 - TFTP Option Extension\r
+ RFC2348 - TFTP Blocksize Option\r
+ RFC2349 - TFTP Timeout Interval and Transfer Size Options\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_MTFTP4_IMPL_H__\r
+#define __EFI_MTFTP4_IMPL_H__\r
+\r
#include <PiDxe.h>\r
\r
#include <Protocol/Udp4.h>\r
#include <Library/UefiDriverEntryPoint.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
#include <Library/UefiLib.h>\r
-#include <Library/BaseLib.h>
-#include <Library/UdpIoLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/BaseMemoryLib.h>
-
-typedef struct _MTFTP4_SERVICE MTFTP4_SERVICE;
-typedef struct _MTFTP4_PROTOCOL MTFTP4_PROTOCOL;
-
-#include "Mtftp4Driver.h"
-#include "Mtftp4Option.h"
-#include "Mtftp4Support.h"
-
-enum {
- MTFTP4_SERVICE_SIGNATURE = EFI_SIGNATURE_32 ('T', 'F', 'T', 'P'),
- MTFTP4_PROTOCOL_SIGNATURE = EFI_SIGNATURE_32 ('t', 'f', 't', 'p'),
-
- MTFTP4_DEFAULT_SERVER_PORT = 69,
- MTFTP4_DEFAULT_TIMEOUT = 3,
- MTFTP4_DEFAULT_RETRY = 5,
- MTFTP4_DEFAULT_BLKSIZE = 512,
- MTFTP4_TIME_TO_GETMAP = 5,
-
- MTFTP4_STATE_UNCONFIGED = 0,
- MTFTP4_STATE_CONFIGED,
- MTFTP4_STATE_DESTORY
-};
-
-struct _MTFTP4_SERVICE {
- UINT32 Signature;
- EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;
-
- BOOLEAN InDestory;
-
- UINT16 ChildrenNum;
- NET_LIST_ENTRY Children;
-
- EFI_EVENT Timer; // Ticking timer for all the MTFTP clients
- EFI_EVENT TimerToGetMap;
-
- EFI_HANDLE Controller;
- EFI_HANDLE Image;
-
- //
- // This UDP child is used to keep the connection between the UDP
- // and MTFTP, so MTFTP will be notified when UDP is uninstalled.
- //
- UDP_IO_PORT *ConnectUdp;
-};
-
-typedef struct {
- EFI_MTFTP4_PACKET **Packet;
- UINT32 *PacketLen;
- EFI_STATUS Status;
-} MTFTP4_GETINFO_STATE;
-
-struct _MTFTP4_PROTOCOL {
- UINT32 Signature;
- NET_LIST_ENTRY Link;
- EFI_MTFTP4_PROTOCOL Mtftp4;
-
- INTN State;
- BOOLEAN Indestory;
-
- MTFTP4_SERVICE *Service;
- EFI_HANDLE Handle;
-
- EFI_MTFTP4_CONFIG_DATA Config;
-
- //
- // Operation parameters: token and requested options.
- //
- EFI_MTFTP4_TOKEN *Token;
- MTFTP4_OPTION RequestOption;
- UINT16 Operation;
-
- //
- // Blocks is a list of MTFTP4_BLOCK_RANGE which contains
- // holes in the file
- //
- UINT16 BlkSize;
- UINT16 LastBlock;
- NET_LIST_ENTRY Blocks;
-
- //
- // The server's communication end point: IP and two ports. one for
- // initial request, one for its selected port.
- //
- IP4_ADDR ServerIp;
- UINT16 ListeningPort;
- UINT16 ConnectedPort;
- IP4_ADDR Gateway;
- UDP_IO_PORT *UnicastPort;
-
- //
- // Timeout and retransmit status
- //
- NET_BUF *LastPacket;
- UINT32 PacketToLive;
- UINT32 CurRetry;
- UINT32 MaxRetry;
- UINT32 Timeout;
-
- //
- // Parameter used by RRQ's multicast download.
- //
- IP4_ADDR McastIp;
- UINT16 McastPort;
- BOOLEAN Master;
- UDP_IO_PORT *McastUdpPort;
-
- MTFTP4_GETINFO_STATE GetInfoState;
-};
-
-VOID
-Mtftp4CleanOperation (
- IN MTFTP4_PROTOCOL *Instance,
- IN EFI_STATUS Result
- );
-
-EFI_STATUS
-Mtftp4WrqStart (
- IN MTFTP4_PROTOCOL *Instance,
- IN UINT16 Operation
- );
-
-EFI_STATUS
-Mtftp4RrqStart (
- IN MTFTP4_PROTOCOL *Instance,
- IN UINT16 Operation
- );
-
-#define MTFTP4_SERVICE_FROM_THIS(a) \
- CR (a, MTFTP4_SERVICE, ServiceBinding, MTFTP4_SERVICE_SIGNATURE)
-
-#define MTFTP4_PROTOCOL_FROM_THIS(a) \
- CR (a, MTFTP4_PROTOCOL, Mtftp4, MTFTP4_PROTOCOL_SIGNATURE)
-
-extern EFI_MTFTP4_PROTOCOL gMtftp4ProtocolTemplate;
-#endif
+#include <Library/BaseLib.h>\r
+#include <Library/UdpIoLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+\r
+typedef struct _MTFTP4_SERVICE MTFTP4_SERVICE;\r
+typedef struct _MTFTP4_PROTOCOL MTFTP4_PROTOCOL;\r
+\r
+#include "Mtftp4Driver.h"\r
+#include "Mtftp4Option.h"\r
+#include "Mtftp4Support.h"\r
+\r
+enum {\r
+ MTFTP4_SERVICE_SIGNATURE = EFI_SIGNATURE_32 ('T', 'F', 'T', 'P'),\r
+ MTFTP4_PROTOCOL_SIGNATURE = EFI_SIGNATURE_32 ('t', 'f', 't', 'p'),\r
+\r
+ MTFTP4_DEFAULT_SERVER_PORT = 69,\r
+ MTFTP4_DEFAULT_TIMEOUT = 3,\r
+ MTFTP4_DEFAULT_RETRY = 5,\r
+ MTFTP4_DEFAULT_BLKSIZE = 512,\r
+ MTFTP4_TIME_TO_GETMAP = 5,\r
+\r
+ MTFTP4_STATE_UNCONFIGED = 0,\r
+ MTFTP4_STATE_CONFIGED,\r
+ MTFTP4_STATE_DESTORY\r
+};\r
+\r
+struct _MTFTP4_SERVICE {\r
+ UINT32 Signature;\r
+ EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;\r
+\r
+ BOOLEAN InDestory;\r
+\r
+ UINT16 ChildrenNum;\r
+ NET_LIST_ENTRY Children;\r
+\r
+ EFI_EVENT Timer; // Ticking timer for all the MTFTP clients\r
+ EFI_EVENT TimerToGetMap;\r
+\r
+ EFI_HANDLE Controller;\r
+ EFI_HANDLE Image;\r
+\r
+ //\r
+ // This UDP child is used to keep the connection between the UDP\r
+ // and MTFTP, so MTFTP will be notified when UDP is uninstalled.\r
+ //\r
+ UDP_IO_PORT *ConnectUdp;\r
+};\r
+\r
+typedef struct {\r
+ EFI_MTFTP4_PACKET **Packet;\r
+ UINT32 *PacketLen;\r
+ EFI_STATUS Status;\r
+} MTFTP4_GETINFO_STATE;\r
+\r
+struct _MTFTP4_PROTOCOL {\r
+ UINT32 Signature;\r
+ NET_LIST_ENTRY Link;\r
+ EFI_MTFTP4_PROTOCOL Mtftp4;\r
+\r
+ INTN State;\r
+ BOOLEAN Indestory;\r
+\r
+ MTFTP4_SERVICE *Service;\r
+ EFI_HANDLE Handle;\r
+\r
+ EFI_MTFTP4_CONFIG_DATA Config;\r
+\r
+ //\r
+ // Operation parameters: token and requested options.\r
+ //\r
+ EFI_MTFTP4_TOKEN *Token;\r
+ MTFTP4_OPTION RequestOption;\r
+ UINT16 Operation;\r
+\r
+ //\r
+ // Blocks is a list of MTFTP4_BLOCK_RANGE which contains\r
+ // holes in the file\r
+ //\r
+ UINT16 BlkSize;\r
+ UINT16 LastBlock;\r
+ NET_LIST_ENTRY Blocks;\r
+\r
+ //\r
+ // The server's communication end point: IP and two ports. one for\r
+ // initial request, one for its selected port.\r
+ //\r
+ IP4_ADDR ServerIp;\r
+ UINT16 ListeningPort;\r
+ UINT16 ConnectedPort;\r
+ IP4_ADDR Gateway;\r
+ UDP_IO_PORT *UnicastPort;\r
+\r
+ //\r
+ // Timeout and retransmit status\r
+ //\r
+ NET_BUF *LastPacket;\r
+ UINT32 PacketToLive;\r
+ UINT32 CurRetry;\r
+ UINT32 MaxRetry;\r
+ UINT32 Timeout;\r
+\r
+ //\r
+ // Parameter used by RRQ's multicast download.\r
+ //\r
+ IP4_ADDR McastIp;\r
+ UINT16 McastPort;\r
+ BOOLEAN Master;\r
+ UDP_IO_PORT *McastUdpPort;\r
+\r
+ MTFTP4_GETINFO_STATE GetInfoState;\r
+};\r
+\r
+VOID\r
+Mtftp4CleanOperation (\r
+ IN MTFTP4_PROTOCOL *Instance,\r
+ IN EFI_STATUS Result\r
+ );\r
+\r
+EFI_STATUS\r
+Mtftp4WrqStart (\r
+ IN MTFTP4_PROTOCOL *Instance,\r
+ IN UINT16 Operation\r
+ );\r
+\r
+EFI_STATUS\r
+Mtftp4RrqStart (\r
+ IN MTFTP4_PROTOCOL *Instance,\r
+ IN UINT16 Operation\r
+ );\r
+\r
+#define MTFTP4_SERVICE_FROM_THIS(a) \\r
+ CR (a, MTFTP4_SERVICE, ServiceBinding, MTFTP4_SERVICE_SIGNATURE)\r
+\r
+#define MTFTP4_PROTOCOL_FROM_THIS(a) \\r
+ CR (a, MTFTP4_PROTOCOL, Mtftp4, MTFTP4_PROTOCOL_SIGNATURE)\r
+\r
+extern EFI_MTFTP4_PROTOCOL gMtftp4ProtocolTemplate;\r
+#endif\r
-/** @file
-
-Copyright (c) 2006, 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:
-
- Mtftp4Option.h
-
-Abstract:
-
- Mtftp4 option process routines.
-
-
-**/
-
-#ifndef __EFI_MTFTP4_OPTION_H__
-#define __EFI_MTFTP4_OPTION_H__
-
-enum {
- MTFTP4_SUPPORTED_OPTIONS = 4,
- MTFTP4_OPCODE_LEN = 2,
- MTFTP4_ERRCODE_LEN = 2,
- MTFTP4_BLKNO_LEN = 2,
- MTFTP4_DATA_HEAD_LEN = 4,
-
- MTFTP4_BLKSIZE_EXIST = 0x01,
- MTFTP4_TIMEOUT_EXIST = 0x02,
- MTFTP4_TSIZE_EXIST = 0x04,
- MTFTP4_MCAST_EXIST = 0x08
-};
-
-typedef struct {
- UINT16 BlkSize;
- UINT8 Timeout;
- UINT32 Tsize;
- IP4_ADDR McastIp;
- UINT16 McastPort;
- BOOLEAN Master;
- UINT32 Exist;
-} MTFTP4_OPTION;
-
-EFI_STATUS
-Mtftp4ExtractOptions (
- IN EFI_MTFTP4_PACKET *Packet,
- IN UINT32 PacketLen,
- IN OUT UINT32 *OptionCount,
- OUT EFI_MTFTP4_OPTION **OptionList OPTIONAL
- );
-
-EFI_STATUS
-Mtftp4ParseOption (
- IN EFI_MTFTP4_OPTION *OptionList,
- IN UINT32 Count,
- IN BOOLEAN Request,
- OUT MTFTP4_OPTION *Option
- );
-
-EFI_STATUS
-Mtftp4ParseOptionOack (
- IN EFI_MTFTP4_PACKET *Packet,
- IN UINT32 PacketLen,
- OUT MTFTP4_OPTION *Option
- );
-
-extern UINT8 *mMtftp4SupportedOptions[MTFTP4_SUPPORTED_OPTIONS];
-#endif
+/** @file\r
+\r
+Copyright (c) 2006, 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
+\r
+ Mtftp4Option.h\r
+\r
+Abstract:\r
+\r
+ Mtftp4 option process routines.\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_MTFTP4_OPTION_H__\r
+#define __EFI_MTFTP4_OPTION_H__\r
+\r
+enum {\r
+ MTFTP4_SUPPORTED_OPTIONS = 4,\r
+ MTFTP4_OPCODE_LEN = 2,\r
+ MTFTP4_ERRCODE_LEN = 2,\r
+ MTFTP4_BLKNO_LEN = 2,\r
+ MTFTP4_DATA_HEAD_LEN = 4,\r
+\r
+ MTFTP4_BLKSIZE_EXIST = 0x01,\r
+ MTFTP4_TIMEOUT_EXIST = 0x02,\r
+ MTFTP4_TSIZE_EXIST = 0x04,\r
+ MTFTP4_MCAST_EXIST = 0x08\r
+};\r
+\r
+typedef struct {\r
+ UINT16 BlkSize;\r
+ UINT8 Timeout;\r
+ UINT32 Tsize;\r
+ IP4_ADDR McastIp;\r
+ UINT16 McastPort;\r
+ BOOLEAN Master;\r
+ UINT32 Exist;\r
+} MTFTP4_OPTION;\r
+\r
+EFI_STATUS\r
+Mtftp4ExtractOptions (\r
+ IN EFI_MTFTP4_PACKET *Packet,\r
+ IN UINT32 PacketLen,\r
+ IN OUT UINT32 *OptionCount,\r
+ OUT EFI_MTFTP4_OPTION **OptionList OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+Mtftp4ParseOption (\r
+ IN EFI_MTFTP4_OPTION *OptionList,\r
+ IN UINT32 Count,\r
+ IN BOOLEAN Request,\r
+ OUT MTFTP4_OPTION *Option\r
+ );\r
+\r
+EFI_STATUS\r
+Mtftp4ParseOptionOack (\r
+ IN EFI_MTFTP4_PACKET *Packet,\r
+ IN UINT32 PacketLen,\r
+ OUT MTFTP4_OPTION *Option\r
+ );\r
+\r
+extern UINT8 *mMtftp4SupportedOptions[MTFTP4_SUPPORTED_OPTIONS];\r
+#endif\r
-/** @file
-
-Copyright (c) 2006, 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:
-
- Mtftp4Support.h
-
-Abstract:
-
- Support routines for MTFTP
-
-
-**/
-
-#ifndef __EFI_MTFTP4_SUPPORT_H__
-#define __EFI_MTFTP4_SUPPORT_H__
-
-//
-// The structure representing a range of block numbers, [Start, End].
-// It is used to remember the holes in the MTFTP block space. If all
-// the holes are filled in, then the download or upload has completed.
-//
-typedef struct {
- NET_LIST_ENTRY Link;
- INTN Start;
- INTN End;
-} MTFTP4_BLOCK_RANGE;
-
-
-EFI_STATUS
-Mtftp4InitBlockRange (
- IN NET_LIST_ENTRY *Head,
- IN UINT16 Start,
- IN UINT16 End
- );
-
-INTN
-Mtftp4GetNextBlockNum (
- IN NET_LIST_ENTRY *Head
- );
-
-VOID
-Mtftp4SetLastBlockNum (
- IN NET_LIST_ENTRY *Head,
- IN UINT16 Last
- );
-
-EFI_STATUS
-Mtftp4RemoveBlockNum (
- IN NET_LIST_ENTRY *Head,
- IN UINT16 Num
- );
-
-VOID
-Mtftp4SetTimeout (
- IN MTFTP4_PROTOCOL *Instance
- );
-
-EFI_STATUS
-Mtftp4SendPacket (
- IN MTFTP4_PROTOCOL *Instance,
- IN NET_BUF *Packet
- );
-
-EFI_STATUS
-Mtftp4SendRequest (
- IN MTFTP4_PROTOCOL *Instance
- );
-
-EFI_STATUS
-Mtftp4SendError (
- IN MTFTP4_PROTOCOL *Instance,
- IN UINT16 ErrCode,
- IN UINT8* ErrInfo
- );
-
-EFI_STATUS
-Mtftp4Retransmit (
- IN MTFTP4_PROTOCOL *Instance
- );
-
-VOID
-EFIAPI
-Mtftp4OnTimerTick (
- IN EFI_EVENT Event,
- IN VOID *Context
- );
-#endif
+/** @file\r
+\r
+Copyright (c) 2006, 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
+\r
+ Mtftp4Support.h\r
+\r
+Abstract:\r
+\r
+ Support routines for MTFTP\r
+\r
+\r
+**/\r
+\r
+#ifndef __EFI_MTFTP4_SUPPORT_H__\r
+#define __EFI_MTFTP4_SUPPORT_H__\r
+\r
+//\r
+// The structure representing a range of block numbers, [Start, End].\r
+// It is used to remember the holes in the MTFTP block space. If all\r
+// the holes are filled in, then the download or upload has completed.\r
+//\r
+typedef struct {\r
+ NET_LIST_ENTRY Link;\r
+ INTN Start;\r
+ INTN End;\r
+} MTFTP4_BLOCK_RANGE;\r
+\r
+\r
+EFI_STATUS\r
+Mtftp4InitBlockRange (\r
+ IN NET_LIST_ENTRY *Head,\r
+ IN UINT16 Start,\r
+ IN UINT16 End\r
+ );\r
+\r
+INTN\r
+Mtftp4GetNextBlockNum (\r
+ IN NET_LIST_ENTRY *Head\r
+ );\r
+\r
+VOID\r
+Mtftp4SetLastBlockNum (\r
+ IN NET_LIST_ENTRY *Head,\r
+ IN UINT16 Last\r
+ );\r
+\r
+EFI_STATUS\r
+Mtftp4RemoveBlockNum (\r
+ IN NET_LIST_ENTRY *Head,\r
+ IN UINT16 Num\r
+ );\r
+\r
+VOID\r
+Mtftp4SetTimeout (\r
+ IN MTFTP4_PROTOCOL *Instance\r
+ );\r
+\r
+EFI_STATUS\r
+Mtftp4SendPacket (\r
+ IN MTFTP4_PROTOCOL *Instance,\r
+ IN NET_BUF *Packet\r
+ );\r
+\r
+EFI_STATUS\r
+Mtftp4SendRequest (\r
+ IN MTFTP4_PROTOCOL *Instance\r
+ );\r
+\r
+EFI_STATUS\r
+Mtftp4SendError (\r
+ IN MTFTP4_PROTOCOL *Instance,\r
+ IN UINT16 ErrCode,\r
+ IN UINT8* ErrInfo\r
+ );\r
+\r
+EFI_STATUS\r
+Mtftp4Retransmit (\r
+ IN MTFTP4_PROTOCOL *Instance\r
+ );\r
+\r
+VOID\r
+EFIAPI\r
+Mtftp4OnTimerTick (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ );\r
+#endif\r
//\r
// Initialize EFI library\r
//\r
- Status = EfiLibInstallAllDriverProtocols (\r
- ImageHandle,\r
- SystemTable,\r
- &mPxeBcDriverBinding,\r
- NULL,\r
- &gPxeBcComponentName,\r
- NULL,\r
- NULL\r
- );\r
+ Status = EfiLibInstallDriverBindingComponentName2 (\r
+ ImageHandle,\r
+ SystemTable,\r
+ &mPxeBcDriverBinding,\r
+ NULL,\r
+ &gPxeBcComponentName,\r
+ &gPxeBcComponentName2\r
+ );\r
\r
InitArpHeader ();\r
OptionsStrucInit ();\r
-/** @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 <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 EFI_SIGNATURE_32 ('p', 'x', 'e', 'd')
-
-//
-// 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 EFI_SIGNATURE_32 ('p', 'x', 'e', 'l')
-
-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
- )
-;
-
-
-//
-// 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
+\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
+#endif /* _BC_H */\r
+\r
+/* EOF - bc.h */\r
//\r
// EFI Component Name Functions\r
//\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
PxeBcComponentNameGetDriverName (\r
OUT CHAR16 **DriverName\r
);\r
\r
+\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
PxeBcComponentNameGetControllerName (\r
OUT CHAR16 **ControllerName\r
);\r
\r
+\r
//\r
// EFI Component Name Protocol\r
//\r
-EFI_COMPONENT_NAME_PROTOCOL gPxeBcComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL gPxeBcComponentName = {\r
PxeBcComponentNameGetDriverName,\r
PxeBcComponentNameGetControllerName,\r
"eng"\r
-};\r
+ };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gPxeBcComponentName2 = {\r
+ (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) PxeBcComponentNameGetDriverName,\r
+ (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) PxeBcComponentNameGetControllerName,\r
+ "en"\r
+ };\r
+\r
\r
static EFI_UNICODE_STRING_TABLE mPxeBcDriverNameTable[] = {\r
{\r
- "eng",\r
+ "eng;en",\r
L"PXE Base Code Driver"\r
},\r
{\r
}\r
};\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
PxeBcComponentNameGetDriverName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **DriverName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- Language - A pointer to a three character ISO 639-2 language identifier.\r
- This is the language of the driver name that that the caller\r
- is requesting, and it must match one of the languages specified\r
- in SupportedLanguages. The number of languages supported by a\r
- driver is up to the driver writer.\r
- DriverName - A pointer to the Unicode string to return. This Unicode string\r
- is the name of the driver specified by This in the language\r
- specified by Language.\r
-\r
- Returns:\r
- EFI_SUCCESS - The Unicode string for the Driver specified by This\r
- and the language specified by Language was returned\r
- in DriverName.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - DriverName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
- return LookupUnicodeString (\r
- Language,\r
- gPxeBcComponentName.SupportedLanguages,\r
- mPxeBcDriverNameTable,\r
- DriverName\r
- );\r
+ return LookupUnicodeString2 (\r
+ Language,\r
+ This->SupportedLanguages,\r
+ mPxeBcDriverNameTable,\r
+ DriverName,\r
+ (BOOLEAN)(This == &gPxeBcComponentName)\r
+ );\r
}\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
PxeBcComponentNameGetControllerName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **ControllerName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the controller\r
- that is being managed by an EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- ControllerHandle - The handle of a controller that the driver specified by\r
- This is managing. This handle specifies the controller\r
- whose name is to be returned.\r
- ChildHandle - The handle of the child controller to retrieve the name\r
- of. This is an optional parameter that may be NULL. It\r
- will be NULL for device drivers. It will also be NULL\r
- for a bus drivers that wish to retrieve the name of the\r
- bus controller. It will not be NULL for a bus driver\r
- that wishes to retrieve the name of a child controller.\r
- Language - A pointer to a three character ISO 639-2 language\r
- identifier. This is the language of the controller name\r
- that that the caller is requesting, and it must match one\r
- of the languages specified in SupportedLanguages. The\r
- number of languages supported by a driver is up to the\r
- driver writer.\r
- ControllerName - A pointer to the Unicode string to return. This Unicode\r
- string is the name of the controller specified by\r
- ControllerHandle and ChildHandle in the language specified\r
- by Language from the point of view of the driver specified\r
- by This.\r
-\r
- Returns:\r
- EFI_SUCCESS - The Unicode string for the user readable name in the\r
- language specified by Language for the driver\r
- specified by This was returned in DriverName.\r
- EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - ControllerName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This is not currently managing\r
- the controller specified by ControllerHandle and\r
- ChildHandle.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
return EFI_UNSUPPORTED;\r
}\r
-/** @file
-
-Copyright (c) 2004, 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.
-
-
-**/
-
-#ifndef _DHCP_H
-#define _DHCP_H
-
-//
-// Definitions for DHCP version 4 UDP packet.
-// The field names in this structure are defined and described in RFC 2131.
-//
-#pragma pack(1)
-
-typedef struct {
- UINT8 op;
-#define BOOTP_REQUEST 1
-#define BOOTP_REPLY 2
-
- UINT8 htype;
- UINT8 hlen;
- UINT8 hops;
- UINT32 xid;
- UINT16 secs;
- UINT16 flags;
-#define DHCP_BROADCAST_FLAG 0x8000
-
- UINT32 ciaddr;
- UINT32 yiaddr;
- UINT32 siaddr;
- UINT32 giaddr;
- UINT8 chaddr[16];
- UINT8 sname[64];
- UINT8 file[128];
- UINT8 options[312];
-#define OP_PAD 0
-#define OP_END 255
-#define OP_SUBNET_MASK 1
-#define OP_TIME_OFFSET 2
-#define OP_ROUTER_LIST 3
-#define OP_TIME_SERVERS 4
-#define OP_NAME_SERVERS 5
-#define OP_DNS_SERVERS 6
-#define OP_LOG_SERVERS 7
-#define OP_COOKIE_SERVERS 8
-#define OP_LPR_SREVERS 9
-#define OP_IMPRESS_SERVERS 10
-#define OP_RES_LOC_SERVERS 11
-#define OP_HOST_NAME 12
-#define OP_BOOT_FILE_SZ 13
-#define OP_DUMP_FILE 14
-#define OP_DOMAIN_NAME 15
-#define OP_SWAP_SERVER 16
-#define OP_ROOT_PATH 17
-#define OP_EXTENSION_PATH 18
-#define OP_IP_FORWARDING 19
-#define OP_NON_LOCAL_SRC_RTE 20
-#define OP_POLICY_FILTER 21
-#define OP_MAX_DATAGRAM_SZ 22
-#define OP_DEFAULT_TTL 23
-#define OP_MTU_AGING_TIMEOUT 24
-#define OP_MTU_SIZES 25
-#define OP_MTU_TO_USE 26
-#define OP_ALL_SUBNETS_LOCAL 27
-#define OP_BROADCAST_ADD 28
-#define OP_PERFORM_MASK_DISCOVERY 29
-#define OP_RESPOND_TO_MASK_REQ 30
-#define OP_PERFORM_ROUTER_DISCOVERY 31
-#define OP_ROUTER_SOLICIT_ADDRESS 32
-#define OP_STATIC_ROUTER_LIST 33
-#define OP_USE_ARP_TRAILERS 34
-#define OP_ARP_CACHE_TIMEOUT 35
-#define OP_ETHERNET_ENCAPSULATION 36
-#define OP_TCP_DEFAULT_TTL 37
-#define OP_TCP_KEEP_ALIVE_INT 38
-#define OP_KEEP_ALIVE_GARBAGE 39
-#define OP_NIS_DOMAIN_NAME 40
-#define OP_NIS_SERVERS 41
-#define OP_NTP_SERVERS 42
-#define OP_VENDOR_SPECIFIC 43
-#define VEND_PXE_MTFTP_IP 1
-#define VEND_PXE_MTFTP_CPORT 2
-#define VEND_PXE_MTFTP_SPORT 3
-#define VEND_PXE_MTFTP_TMOUT 4
-#define VEND_PXE_MTFTP_DELAY 5
-#define VEND_PXE_DISCOVERY_CONTROL 6
-#define PXE_DISABLE_BROADCAST_DISCOVERY (1 << 0)
-#define PXE_DISABLE_MULTICAST_DISCOVERY (1 << 1)
-#define PXE_ACCEPT_ONLY_PXE_BOOT_SERVERS (1 << 2)
-#define PXE_DO_NOT_PROMPT (1 << 3)
-#define VEND_PXE_DISCOVERY_MCAST_ADDR 7
-#define VEND_PXE_BOOT_SERVERS 8
-#define VEND_PXE_BOOT_MENU 9
-#define VEND_PXE_BOOT_PROMPT 10
-#define VEND_PXE_MCAST_ADDRS_ALLOC 11
-#define VEND_PXE_CREDENTIAL_TYPES 12
-#define VEND_PXE_BOOT_ITEM 71
-#define OP_NBNS_SERVERS 44
-#define OP_NBDD_SERVERS 45
-#define OP_NETBIOS_NODE_TYPE 46
-#define OP_NETBIOS_SCOPE 47
-#define OP_XWINDOW_SYSTEM_FONT_SERVERS 48
-#define OP_XWINDOW_SYSTEM_DISPLAY_MANAGERS 49
-#define OP_DHCP_REQ_IP_ADD 50
-#define OP_DHCP_LEASE_TIME 51
-#define OP_DHCP_OPTION_OVERLOAD 52
-#define OVLD_FILE 1
-#define OVLD_SRVR_NAME 2
-#define OP_DHCP_MESSAGE_TYPE 53
-#define DHCPDISCOVER 1
-#define DHCPOFFER 2
-#define DHCPREQUEST 3
-#define DHCPDECLINE 4
-#define DHCPACK 5
-#define DHCPNAK 6
-#define DHCPRELEASE 7
-#define DHCPINFORM 8
-#define OP_DHCP_SERVER_IP 54
-#define OP_DHCP_PARM_REQ_LIST 55
-#define OP_DHCP_ERROR_MESSAGE 56
-#define OP_DHCP_MAX_MESSAGE_SZ 57
-#define OP_DHCP_RENEWAL_TIME 58
-#define OP_DHCP_REBINDING_TIME 59
-#define OP_DHCP_CLASS_IDENTIFIER 60
-#define OP_DHCP_CLIENT_IDENTIFIER 61
-#define OP_NISPLUS_DOMAIN_NAME 64
-#define OP_NISPLUS_SERVERS 65
-#define OP_DHCP_TFTP_SERVER_NAME 66
-#define OP_DHCP_BOOTFILE 67
-#define OP_MOBILE_IP_HOME_AGENTS 68
-#define OP_SMPT_SERVERS 69
-#define OP_POP3_SERVERS 70
-#define OP_NNTP_SERVERS 71
-#define OP_WWW_SERVERS 72
-#define OP_FINGER_SERVERS 73
-#define OP_IRC_SERVERS 74
-#define OP_STREET_TALK_SERVERS 75
-#define OP_STREET_TALK_DIR_ASSIST_SERVERS 76
-#define OP_NDS_SERVERS 85
-#define OP_NDS_TREE_NAME 86
-#define OP_NDS_CONTEXT 87
-#define OP_DHCP_SYSTEM_ARCH 93
-#define OP_DHCP_NETWORK_ARCH 94
-#define OP_DHCP_PLATFORM_ID 97
-} DHCPV4_STRUCT;
-
-//
-// DHCPv4 option header
-//
-typedef struct {
- UINT8 OpCode;
- UINT8 Length;
- //
- // followed by Data[]
- //
-} DHCPV4_OP_HEADER;
-
-//
-// Generic DHCPv4 option (header followed by data)
-//
-typedef struct {
- DHCPV4_OP_HEADER Header;
- UINT8 Data[1];
-} DHCPV4_OP_STRUCT;
-
-//
-// Maximum DHCP packet size on ethernet
-//
-#define MAX_DHCP_MSG_SZ (MAX_ENET_DATA_SIZE - sizeof (IPV4_HEADER) - sizeof (UDPV4_HEADER))
-
-//
-// Macros used in pxe_bc_dhcp.c and pxe_loadfile.c
-//
-#define DHCPV4_TRANSMIT_BUFFER (*(DHCPV4_STRUCT *) (Private->TransmitBuffer))
-#define DHCPV4_OPTIONS_BUFFER (*(struct optionsstr *) DHCPV4_TRANSMIT_BUFFER.options)
-
-#define DHCPV4_ACK_INDEX 0
-#define PXE_BINL_INDEX 1
-#define PXE_OFFER_INDEX 1
-#define PXE_ACK_INDEX 2
-#define PXE_BIS_INDEX 3
-
-#define DHCPV4_ACK_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[DHCPV4_ACK_INDEX]
-#define PXE_BINL_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_BINL_INDEX]
-#define PXE_OFFER_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_OFFER_INDEX]
-#define PXE_ACK_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_ACK_INDEX]
-#define PXE_BIS_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_BIS_INDEX]
-
-#define DHCPV4_ACK_PACKET DHCPV4_ACK_BUFFER.u.Dhcpv4
-#define PXE_BINL_PACKET PXE_BINL_BUFFER.u.Dhcpv4
-#define PXE_OFFER_PACKET PXE_OFFER_BUFFER.u.Dhcpv4
-#define PXE_ACK_PACKET PXE_ACK_BUFFER.u.Dhcpv4
-#define PXE_BIS_PACKET PXE_BIS_BUFFER.u.Dhcpv4
-
-//
-// network structure definitions
-//
-//
-// some option definitions
-//
-#define DHCPV4_OPTION_LENGTH(type) (sizeof (type) - sizeof (DHCPV4_OP_HEADER))
-
-typedef struct {
- DHCPV4_OP_HEADER Header;
- UINT8 Type;
-} DHCPV4_OP_MESSAGE_TYPE;
-
-typedef struct {
- DHCPV4_OP_HEADER Header;
- UINT8 Overload;
-} DHCPV4_OP_OVERLOAD;
-
-//
-// boot server list structure
-// one or more contained in a pxe boot servers structure
-//
-typedef struct {
- UINT8 IpCount;
- EFI_IPv4_ADDRESS IpList[1]; // IP count of IPs
-} PXEV4_SERVER_LIST;
-
-typedef struct {
- UINT8 IpCount;
- EFI_IPv6_ADDRESS IpList[1]; // IP count of IPs
-} PXEV6_SERVER_LIST;
-
-typedef union {
- PXEV4_SERVER_LIST Ipv4List;
- PXEV6_SERVER_LIST Ipv6List;
-} PXE_SERVER_LISTS;
-
-typedef struct {
- UINT16 Type;
- PXE_SERVER_LISTS u;
-} PXE_SERVER_LIST;
-
-//
-// pxe boot servers structure
-//
-typedef struct {
- DHCPV4_OP_HEADER Header;
- PXE_SERVER_LIST ServerList[1]; // one or more
-} PXE_OP_SERVER_LIST;
-
-//
-// pxe boot item structure
-//
-typedef struct {
- DHCPV4_OP_HEADER Header;
- UINT16 Type;
- UINT16 Layer;
-} PXE_OP_BOOT_ITEM;
-
-//
-// pxe boot menu item structure
-//
-typedef struct {
- UINT16 Type;
- UINT8 DataLen;
- UINT8 Data[1];
-} PXE_BOOT_MENU_ENTRY;
-
-//
-// pxe boot menu structure
-//
-typedef struct {
- DHCPV4_OP_HEADER Header;
- PXE_BOOT_MENU_ENTRY MenuItem[1];
-} PXE_OP_BOOT_MENU;
-
-//
-// pxe boot prompt structure
-//
-typedef struct {
- DHCPV4_OP_HEADER Header;
- UINT8 Timeout;
- UINT8 Prompt[1];
-} PXE_OP_BOOT_PROMPT;
-
-#define PXE_BOOT_PROMPT_AUTO_SELECT 0
-#define PXE_BOOT_PROMPT_NO_TIMEOUT 255
-
-typedef struct {
- DHCPV4_OP_HEADER Header;
- UINT8 Class[1];
-} DHCPV4_OP_CLASS;
-
-typedef struct {
- DHCPV4_OP_HEADER Header;
- UINT8 File[1];
-} DHCPV4_OP_BOOTFILE;
-
-typedef struct {
- DHCPV4_OP_HEADER Header;
- UINT8 VendorOptions[1];
-} DHCPV4_OP_VENDOR_OPTIONS;
-
-typedef struct {
- DHCPV4_OP_HEADER Header;
- UINT8 MaxSize[2];
-} DHCPV4_OP_MAX_MESSAGE_SIZE;
-
-typedef struct {
- UINT8 _OP_SUBNET_MASK; /* 1 */
- UINT8 _OP_TIME_OFFSET; /* 2 */
- UINT8 _OP_ROUTER_LIST; /* 3 */
- UINT8 _OP_TIME_SERVERS; /* 4 */
- UINT8 _OP_NAME_SERVERS; /* 5 */
- UINT8 _OP_DNS_SERVERS; /* 6 */
- UINT8 _OP_HOST_NAME; /* 12 */
- UINT8 _OP_BOOT_FILE_SZ; /* 13 */
- UINT8 _OP_DOMAIN_NAME; /* 15 */
- UINT8 _OP_ROOT_PATH; /* 17 */
- UINT8 _OP_EXTENSION_PATH; /* 18 */
- UINT8 _OP_MAX_DATAGRAM_SZ; /* 22 */
- UINT8 _OP_DEFAULT_TTL; /* 23 */
- UINT8 _OP_BROADCAST_ADD; /* 28 */
- UINT8 _OP_NIS_DOMAIN_NAME; /* 40 */
- UINT8 _OP_NIS_SERVERS; /* 41 */
- UINT8 _OP_NTP_SERVERS; /* 42 */
- UINT8 _OP_VENDOR_SPECIFIC; /* 43 */
- UINT8 _OP_DHCP_REQ_IP_ADD; /* 50 */
- UINT8 _OP_DHCP_LEASE_TIME; /* 51 */
- UINT8 _OP_DHCP_SERVER_IP; /* 54 */
- UINT8 _OP_DHCP_RENEWAL_TIME; /* 58 */
- UINT8 _OP_DHCP_REBINDING_TIME; /* 59 */
- UINT8 _OP_DHCP_CLASS_IDENTIFIER; /* 60 */
- UINT8 _OP_DHCP_TFTP_SERVER_NAME; /* 66 */
- UINT8 _OP_DHCP_BOOTFILE; /* 67 */
- UINT8 _OP_DHCP_PLATFORM_ID; /* 97 */
- UINT8 VendorOption128; // vendor option 128
- UINT8 VendorOption129; // vendor option 129
- UINT8 VendorOption130; // vendor option 130
- UINT8 VendorOption131; // vendor option 131
- UINT8 VendorOption132; // vendor option 132
- UINT8 VendorOption133; // vendor option 133
- UINT8 VendorOption134; // vendor option 134
- UINT8 VendorOption135; // vendor option 135
-} DHCPV4_REQUESTED_OPTIONS_DATA;
-
-typedef struct {
- DHCPV4_OP_HEADER Header;
- DHCPV4_REQUESTED_OPTIONS_DATA Data;
-} DHCPV4_OP_REQUESTED_OPTIONS;
-
-typedef struct opipstr {
- DHCPV4_OP_HEADER Header;
- EFI_IPv4_ADDRESS Ip;
-} DHCPV4_OP_IP_ADDRESS;
-
-//
-// ip list structure - e.g. router list
-//
-typedef struct {
- DHCPV4_OP_HEADER Header;
- EFI_IPv4_ADDRESS IpList[1];
-} DHCPV4_OP_IP_LIST;
-
-typedef struct {
- DHCPV4_OP_HEADER Header;
- UINT8 Type;
- UINT8 Guid[sizeof (EFI_GUID)];
-} DHCPV4_OP_CLIENT_ID;
-
-//
-// special options start - someday obsolete ???
-//
-#define DHCPV4_OP_PLATFORM_ID DHCPV4_OP_CLIENT_ID
-
-typedef struct {
- DHCPV4_OP_HEADER Header;
- UINT8 Type; // SNP = 2
- UINT8 MajorVersion;
- UINT8 MinorVersion;
-} DHCPV4_OP_NETWORK_INTERFACE;
-
-#define UNDI_TYPE 1
-#define SNP_TYPE 2
-
-typedef struct {
- DHCPV4_OP_HEADER Header;
- UINT16 Type;
-} DHCPV4_OP_ARCHITECTURE_TYPE;
-//
-// special options end - someday obsolete ???
-//
-typedef struct {
- UINT8 ClassIdentifier[10]; // PXEClient:
- UINT8 Lit2[5]; // Arch:
- UINT8 ArchitectureType[5]; // 00000 - 65536
- UINT8 Lit3[1]; // :
- UINT8 InterfaceName[4]; // e.g. UNDI
- UINT8 Lit4[1]; // :
- UINT8 UndiMajor[3]; // 000 - 255
- UINT8 UndiMinor[3]; // 000 - 255
-} DHCPV4_CLASS_ID_DATA;
-
-typedef struct {
- DHCPV4_OP_HEADER Header;
- DHCPV4_CLASS_ID_DATA Data;
-} DHCPV4_OP_CLASS_ID;
-
-typedef struct {
- DHCPV4_OP_HEADER Header;
- EFI_IPv4_ADDRESS Ip;
-} DHCPV4_OP_REQUESTED_IP;
-
-typedef struct {
- DHCPV4_OP_HEADER Header;
- EFI_IPv4_ADDRESS Ip;
-} DHCPV4_OP_SERVER_IP;
-
-typedef struct {
- DHCPV4_OP_HEADER Header;
- EFI_IPv4_ADDRESS Ip;
-} DHCPV4_OP_SUBNET_MASK;
-
-typedef struct { // oppxedisctlstr {
- DHCPV4_OP_HEADER Header;
- UINT8 ControlBits;
-} PXE_OP_DISCOVERY_CONTROL;
-
-#define DISABLE_BCAST (1 << 0)
-#define DISABLE_MCAST (1 << 1)
-#define USE_ACCEPT_LIST (1 << 2)
-#define USE_BOOTFILE (1 << 3)
-
-#pragma pack()
-//
-// definitions of indices to populate option interest array
-//
-#define VEND_PXE_MTFTP_IP_IX 1 // multicast IP address of bootfile for MTFTP listen
-#define VEND_PXE_MTFTP_CPORT_IX 2 // UDP Port to monitor for MTFTP responses - Intel order
-#define VEND_PXE_MTFTP_SPORT_IX 3 // Server UDP Port for MTFTP open - Intel order
-#define VEND_PXE_MTFTP_TMOUT_IX 4 // Listen timeout - secs
-#define VEND_PXE_MTFTP_DELAY_IX 5 // Transmission timeout - secs
-#define VEND_PXE_DISCOVERY_CONTROL_IX 6 // bit field
-#define VEND_PXE_DISCOVERY_MCAST_ADDR_IX 7 // boot server discovery multicast address
-#define VEND_PXE_BOOT_SERVERS_IX 8 // list of boot servers of form tp(2) cnt(1) ips[cnt]
-#define VEND_PXE_BOOT_MENU_IX 9
-#define VEND_PXE_BOOT_PROMPT_IX 10
-#define VEND_PXE_MCAST_ADDRS_ALLOC_IX 0 // not used by PXE client
-#define VEND_PXE_CREDENTIAL_TYPES_IX 11
-#define VEND_13_IX 0 // not used by PXE client
-#define VEND_14_IX 0 // not used by PXE client
-#define VEND_15_IX 0 // not used by PXE client
-#define VEND_16_IX 0 // not used by PXE client
-#define VEND_17_IX 0 // not used by PXE client
-#define VEND_18_IX 0 // not used by PXE client
-#define VEND_19_IX 0 // not used by PXE client
-#define VEND_20_IX 0 // not used by PXE client
-#define VEND_21_IX 0 // not used by PXE client
-#define VEND_22_IX 0 // not used by PXE client
-#define VEND_23_IX 0 // not used by PXE client
-#define VEND_24_IX 0 // not used by PXE client
-#define VEND_25_IX 0 // not used by PXE client
-#define VEND_26_IX 0 // not used by PXE client
-#define VEND_27_IX 0 // not used by PXE client
-#define VEND_28_IX 0 // not used by PXE client
-#define VEND_29_IX 0 // not used by PXE client
-#define VEND_30_IX 0 // not used by PXE client
-#define VEND_31_IX 0 // not used by PXE client
-#define VEND_32_IX 0 // not used by PXE client
-#define VEND_33_IX 0 // not used by PXE client
-#define VEND_34_IX 0 // not used by PXE client
-#define VEND_35_IX 0 // not used by PXE client
-#define VEND_36_IX 0 // not used by PXE client
-#define VEND_37_IX 0 // not used by PXE client
-#define VEND_38_IX 0 // not used by PXE client
-#define VEND_39_IX 0 // not used by PXE client
-#define VEND_40_IX 0 // not used by PXE client
-#define VEND_41_IX 0 // not used by PXE client
-#define VEND_42_IX 0 // not used by PXE client
-#define VEND_43_IX 0 // not used by PXE client
-#define VEND_44_IX 0 // not used by PXE client
-#define VEND_45_IX 0 // not used by PXE client
-#define VEND_46_IX 0 // not used by PXE client
-#define VEND_47_IX 0 // not used by PXE client
-#define VEND_48_IX 0 // not used by PXE client
-#define VEND_49_IX 0 // not used by PXE client
-#define VEND_50_IX 0 // not used by PXE client
-#define VEND_51_IX 0 // not used by PXE client
-#define VEND_52_IX 0 // not used by PXE client
-#define VEND_53_IX 0 // not used by PXE client
-#define VEND_54_IX 0 // not used by PXE client
-#define VEND_55_IX 0 // not used by PXE client
-#define VEND_56_IX 0 // not used by PXE client
-#define VEND_57_IX 0 // not used by PXE client
-#define VEND_58_IX 0 // not used by PXE client
-#define VEND_59_IX 0 // not used by PXE client
-#define VEND_60_IX 0 // not used by PXE client
-#define VEND_61_IX 0 // not used by PXE client
-#define VEND_62_IX 0 // not used by PXE client
-#define VEND_63_IX 0 // not used by PXE client
-#define VEND_64_IX 0 // not used by PXE client
-#define VEND_65_IX 0 // not used by PXE client
-#define VEND_66_IX 0 // not used by PXE client
-#define VEND_67_IX 0 // not used by PXE client
-#define VEND_68_IX 0 // not used by PXE client
-#define VEND_69_IX 0 // not used by PXE client
-#define VEND_70_IX 0 // not used by PXE client
-#define VEND_PXE_BOOT_ITEM_IX 12
-
-#define MAX_OUR_PXE_OPT VEND_PXE_BOOT_ITEM // largest PXE option in which we are interested
-#define MAX_OUR_PXE_IX VEND_PXE_BOOT_ITEM_IX // largest PXE option index
-//
-// define various types by options that are sent
-//
-#define WfM11a_OPTS ((1<<VEND_PXE_MTFTP_IP_IX) | \
- (1<<VEND_PXE_MTFTP_CPORT_IX) | \
- (1<<VEND_PXE_MTFTP_SPORT_IX) | \
- (1<<VEND_PXE_MTFTP_TMOUT_IX) | \
- (1<<VEND_PXE_MTFTP_DELAY_IX))
-
-#define DISCOVER_OPTS ((1<<VEND_PXE_DISCOVERY_CONTROL_IX) | \
- (1<<VEND_PXE_DISCOVERY_MCAST_ADDR_IX) | \
- (1<<VEND_PXE_BOOT_SERVERS_IX) | \
- (1<<VEND_PXE_BOOT_MENU_IX) | \
- (1<<VEND_PXE_BOOT_PROMPT_IX) | \
- (1<<VEND_PXE_BOOT_ITEM_IX))
-
-#define CREDENTIALS_OPT (1 << VEND_PXE_CREDENTIAL_TYPES_IX)
-
-//
-// definitions of indices to populate option interest array
-//
-#define OP_SUBNET_MASK_IX 1
-#define OP_TIME_OFFSET_IX 0 // not used by PXE client
-#define OP_ROUTER_LIST_IX 2
-#define OP_TIME_SERVERS_IX 0 // not used by PXE client
-#define OP_NAME_SERVERS_IX 0 // not used by PXE client
-#define OP_DNS_SERVERS_IX 0 // not used by PXE client
-#define OP_LOG_SERVERS_IX 0 // not used by PXE client
-#define OP_COOKIE_SERVERS_IX 0 // not used by PXE client
-#define OP_LPR_SREVERS_IX 0 // not used by PXE client
-#define OP_IMPRESS_SERVERS_IX 0 // not used by PXE client
-#define OP_RES_LOC_SERVERS_IX 0 // not used by PXE client
-#define OP_HOST_NAME_IX 0 // not used by PXE client
-#define OP_BOOT_FILE_SZ_IX 9
-#define OP_DUMP_FILE_IX 0 // not used by PXE client
-#define OP_DOMAIN_NAME_IX 0 // not used by PXE client
-#define OP_SWAP_SERVER_IX 0 // not used by PXE client
-#define OP_ROOT_PATH_IX 0 // not used by PXE client
-#define OP_EXTENSION_PATH_IX 0 // not used by PXE client
-#define OP_IP_FORWARDING_IX 0 // not used by PXE client
-#define OP_NON_LOCAL_SRC_RTE_IX 0 // not used by PXE client
-#define OP_POLICY_FILTER_IX 0 // not used by PXE client
-#define OP_MAX_DATAGRAM_SZ_IX 0 // not used by PXE client
-#define OP_DEFAULT_TTL_IX 0 // not used by PXE client
-#define OP_MTU_AGING_TIMEOUT_IX 0 // not used by PXE client
-#define OP_MTU_SIZES_IX 0 // not used by PXE client
-#define OP_MTU_TO_USE_IX 0 // not used by PXE client
-#define OP_ALL_SUBNETS_LOCAL_IX 0 // not used by PXE client
-#define OP_BROADCAST_ADD_IX 0 // not used by PXE client
-#define OP_PERFORM_MASK_DISCOVERY_IX 0 // not used by PXE client
-#define OP_RESPOND_TO_MASK_REQ_IX 0 // not used by PXE client
-#define OP_PERFORM_ROUTER_DISCOVERY_IX 0 // not used by PXE client
-#define OP_ROUTER_SOLICIT_ADDRESS_IX 0 // not used by PXE client
-#define OP_STATIC_ROUTER_LIST_IX 0 // not used by PXE client
-#define OP_USE_ARP_TRAILERS_IX 0 // not used by PXE client
-#define OP_ARP_CACHE_TIMEOUT_IX 0 // not used by PXE client
-#define OP_ETHERNET_ENCAPSULATION_IX 0 // not used by PXE client
-#define OP_TCP_DEFAULT_TTL_IX 0 // not used by PXE client
-#define OP_TCP_KEEP_ALIVE_INT_IX 0 // not used by PXE client
-#define OP_KEEP_ALIVE_GARBAGE_IX 0 // not used by PXE client
-#define OP_NIS_DOMAIN_NAME_IX 0 // not used by PXE client
-#define OP_NIS_SERVERS_IX 0 // not used by PXE client
-#define OP_NTP_SERVERS_IX 0 // not used by PXE client
-#define OP_VENDOR_SPECIFIC_IX 3
-#define OP_NBNS_SERVERS_IX 0 // not used by PXE client
-#define OP_NBDD_SERVERS_IX 0 // not used by PXE client
-#define OP_NETBIOS_NODE_TYPE_IX 0 // not used by PXE client
-#define OP_NETBIOS_SCOPE_IX 0 // not used by PXE client
-#define OP_XWINDOW_SYSTEM_FONT_SERVERS_IX 0 // not used by PXE client
-#define OP_XWINDOW_SYSTEM_DISPLAY_MANAGERS_IX 0 // not used by PXE client
-// DHCP option indices
-//
-#define OP_DHCP_REQ_IP_ADD_IX 0 // not used by PXE client
-#define OP_DHCP_LEASE_TIME_IX 0 // not used by PXE client
-#define OP_DHCP_OPTION_OVERLOAD_IX 4
-#define OP_DHCP_MESSAGE_TYPE_IX 5
-#define OP_DHCP_SERVER_IP_IX 6
-#define OP_DHCP_PARM_REQ_LIST_IX 0 // not used by PXE client
-#define OP_DHCP_ERROR_MESSAGE_IX 0 // not used by PXE client
-#define OP_DHCP_MAX_MESSAGE_SZ_IX 0 // not used by PXE client
-#define OP_DHCP_RENEWAL_TIME_IX 0 // not used by PXE client
-#define OP_DHCP_REBINDING_TIME_IX 0 // not used by PXE client
-#define OP_DHCP_CLASS_IDENTIFIER_IX 7
-#define OP_DHCP_CLIENT_IDENTIFIER_IX 0 // not used by PXE client
-#define OP_RESERVED62_IX 0 // not used by PXE client
-#define OP_RESERVED63_IX 0 // not used by PXE client
-#define OP_NISPLUS_DOMAIN_NAME_IX 0 // not used by PXE client
-#define OP_NISPLUS_SERVERS_IX 0 // not used by PXE client
-#define OP_DHCP_TFTP_SERVER_NAME_IX 0 // not used by PXE client
-#define OP_DHCP_BOOTFILE_IX 8
-
-#define MAX_OUR_OPT OP_DHCP_BOOTFILE // largest option in which we are interested
-#define MAX_OUR_IX OP_BOOT_FILE_SZ_IX
-
-typedef struct {
- DHCPV4_OP_STRUCT *PktOptAdds[MAX_OUR_IX];
- DHCPV4_OP_STRUCT *PxeOptAdds[MAX_OUR_PXE_IX];
- UINT8 Status;
-} OPTION_POINTERS;
-
-typedef struct DhcpReceiveBufferStruct {
- union {
- UINT8 ReceiveBuffer[MAX_DHCP_MSG_SZ];
- DHCPV4_STRUCT Dhcpv4;
- } u;
-
- OPTION_POINTERS OpAdds;
-} DHCP_RECEIVE_BUFFER;
-
-#define PXE_TYPE (1 << 0)
-#define WfM11a_TYPE (1 << 1)
-#define DISCOVER_TYPE (1 << 2)
-#define CREDENTIALS_TYPE (1 << 3)
-#define USE_THREE_BYTE (1 << 4)
-
-#endif // _DHCP_H
-
-/* EOF - dhcp.h */
+/** @file\r
+\r
+Copyright (c) 2004, 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
+\r
+**/\r
+\r
+#ifndef _DHCP_H\r
+#define _DHCP_H\r
+\r
+//\r
+// Definitions for DHCP version 4 UDP packet.\r
+// The field names in this structure are defined and described in RFC 2131.\r
+//\r
+#pragma pack(1)\r
+\r
+typedef struct {\r
+ UINT8 op;\r
+#define BOOTP_REQUEST 1\r
+#define BOOTP_REPLY 2\r
+\r
+ UINT8 htype;\r
+ UINT8 hlen;\r
+ UINT8 hops;\r
+ UINT32 xid;\r
+ UINT16 secs;\r
+ UINT16 flags;\r
+#define DHCP_BROADCAST_FLAG 0x8000\r
+\r
+ UINT32 ciaddr;\r
+ UINT32 yiaddr;\r
+ UINT32 siaddr;\r
+ UINT32 giaddr;\r
+ UINT8 chaddr[16];\r
+ UINT8 sname[64];\r
+ UINT8 file[128];\r
+ UINT8 options[312];\r
+#define OP_PAD 0\r
+#define OP_END 255\r
+#define OP_SUBNET_MASK 1\r
+#define OP_TIME_OFFSET 2\r
+#define OP_ROUTER_LIST 3\r
+#define OP_TIME_SERVERS 4\r
+#define OP_NAME_SERVERS 5\r
+#define OP_DNS_SERVERS 6\r
+#define OP_LOG_SERVERS 7\r
+#define OP_COOKIE_SERVERS 8\r
+#define OP_LPR_SREVERS 9\r
+#define OP_IMPRESS_SERVERS 10\r
+#define OP_RES_LOC_SERVERS 11\r
+#define OP_HOST_NAME 12\r
+#define OP_BOOT_FILE_SZ 13\r
+#define OP_DUMP_FILE 14\r
+#define OP_DOMAIN_NAME 15\r
+#define OP_SWAP_SERVER 16\r
+#define OP_ROOT_PATH 17\r
+#define OP_EXTENSION_PATH 18\r
+#define OP_IP_FORWARDING 19\r
+#define OP_NON_LOCAL_SRC_RTE 20\r
+#define OP_POLICY_FILTER 21\r
+#define OP_MAX_DATAGRAM_SZ 22\r
+#define OP_DEFAULT_TTL 23\r
+#define OP_MTU_AGING_TIMEOUT 24\r
+#define OP_MTU_SIZES 25\r
+#define OP_MTU_TO_USE 26\r
+#define OP_ALL_SUBNETS_LOCAL 27\r
+#define OP_BROADCAST_ADD 28\r
+#define OP_PERFORM_MASK_DISCOVERY 29\r
+#define OP_RESPOND_TO_MASK_REQ 30\r
+#define OP_PERFORM_ROUTER_DISCOVERY 31\r
+#define OP_ROUTER_SOLICIT_ADDRESS 32\r
+#define OP_STATIC_ROUTER_LIST 33\r
+#define OP_USE_ARP_TRAILERS 34\r
+#define OP_ARP_CACHE_TIMEOUT 35\r
+#define OP_ETHERNET_ENCAPSULATION 36\r
+#define OP_TCP_DEFAULT_TTL 37\r
+#define OP_TCP_KEEP_ALIVE_INT 38\r
+#define OP_KEEP_ALIVE_GARBAGE 39\r
+#define OP_NIS_DOMAIN_NAME 40\r
+#define OP_NIS_SERVERS 41\r
+#define OP_NTP_SERVERS 42\r
+#define OP_VENDOR_SPECIFIC 43\r
+#define VEND_PXE_MTFTP_IP 1\r
+#define VEND_PXE_MTFTP_CPORT 2\r
+#define VEND_PXE_MTFTP_SPORT 3\r
+#define VEND_PXE_MTFTP_TMOUT 4\r
+#define VEND_PXE_MTFTP_DELAY 5\r
+#define VEND_PXE_DISCOVERY_CONTROL 6\r
+#define PXE_DISABLE_BROADCAST_DISCOVERY (1 << 0)\r
+#define PXE_DISABLE_MULTICAST_DISCOVERY (1 << 1)\r
+#define PXE_ACCEPT_ONLY_PXE_BOOT_SERVERS (1 << 2)\r
+#define PXE_DO_NOT_PROMPT (1 << 3)\r
+#define VEND_PXE_DISCOVERY_MCAST_ADDR 7\r
+#define VEND_PXE_BOOT_SERVERS 8\r
+#define VEND_PXE_BOOT_MENU 9\r
+#define VEND_PXE_BOOT_PROMPT 10\r
+#define VEND_PXE_MCAST_ADDRS_ALLOC 11\r
+#define VEND_PXE_CREDENTIAL_TYPES 12\r
+#define VEND_PXE_BOOT_ITEM 71\r
+#define OP_NBNS_SERVERS 44\r
+#define OP_NBDD_SERVERS 45\r
+#define OP_NETBIOS_NODE_TYPE 46\r
+#define OP_NETBIOS_SCOPE 47\r
+#define OP_XWINDOW_SYSTEM_FONT_SERVERS 48\r
+#define OP_XWINDOW_SYSTEM_DISPLAY_MANAGERS 49\r
+#define OP_DHCP_REQ_IP_ADD 50\r
+#define OP_DHCP_LEASE_TIME 51\r
+#define OP_DHCP_OPTION_OVERLOAD 52\r
+#define OVLD_FILE 1\r
+#define OVLD_SRVR_NAME 2\r
+#define OP_DHCP_MESSAGE_TYPE 53\r
+#define DHCPDISCOVER 1\r
+#define DHCPOFFER 2\r
+#define DHCPREQUEST 3\r
+#define DHCPDECLINE 4\r
+#define DHCPACK 5\r
+#define DHCPNAK 6\r
+#define DHCPRELEASE 7\r
+#define DHCPINFORM 8\r
+#define OP_DHCP_SERVER_IP 54\r
+#define OP_DHCP_PARM_REQ_LIST 55\r
+#define OP_DHCP_ERROR_MESSAGE 56\r
+#define OP_DHCP_MAX_MESSAGE_SZ 57\r
+#define OP_DHCP_RENEWAL_TIME 58\r
+#define OP_DHCP_REBINDING_TIME 59\r
+#define OP_DHCP_CLASS_IDENTIFIER 60\r
+#define OP_DHCP_CLIENT_IDENTIFIER 61\r
+#define OP_NISPLUS_DOMAIN_NAME 64\r
+#define OP_NISPLUS_SERVERS 65\r
+#define OP_DHCP_TFTP_SERVER_NAME 66\r
+#define OP_DHCP_BOOTFILE 67\r
+#define OP_MOBILE_IP_HOME_AGENTS 68\r
+#define OP_SMPT_SERVERS 69\r
+#define OP_POP3_SERVERS 70\r
+#define OP_NNTP_SERVERS 71\r
+#define OP_WWW_SERVERS 72\r
+#define OP_FINGER_SERVERS 73\r
+#define OP_IRC_SERVERS 74\r
+#define OP_STREET_TALK_SERVERS 75\r
+#define OP_STREET_TALK_DIR_ASSIST_SERVERS 76\r
+#define OP_NDS_SERVERS 85\r
+#define OP_NDS_TREE_NAME 86\r
+#define OP_NDS_CONTEXT 87\r
+#define OP_DHCP_SYSTEM_ARCH 93\r
+#define OP_DHCP_NETWORK_ARCH 94\r
+#define OP_DHCP_PLATFORM_ID 97\r
+} DHCPV4_STRUCT;\r
+\r
+//\r
+// DHCPv4 option header\r
+//\r
+typedef struct {\r
+ UINT8 OpCode;\r
+ UINT8 Length;\r
+ //\r
+ // followed by Data[]\r
+ //\r
+} DHCPV4_OP_HEADER;\r
+\r
+//\r
+// Generic DHCPv4 option (header followed by data)\r
+//\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ UINT8 Data[1];\r
+} DHCPV4_OP_STRUCT;\r
+\r
+//\r
+// Maximum DHCP packet size on ethernet\r
+//\r
+#define MAX_DHCP_MSG_SZ (MAX_ENET_DATA_SIZE - sizeof (IPV4_HEADER) - sizeof (UDPV4_HEADER))\r
+\r
+//\r
+// Macros used in pxe_bc_dhcp.c and pxe_loadfile.c\r
+//\r
+#define DHCPV4_TRANSMIT_BUFFER (*(DHCPV4_STRUCT *) (Private->TransmitBuffer))\r
+#define DHCPV4_OPTIONS_BUFFER (*(struct optionsstr *) DHCPV4_TRANSMIT_BUFFER.options)\r
+\r
+#define DHCPV4_ACK_INDEX 0\r
+#define PXE_BINL_INDEX 1\r
+#define PXE_OFFER_INDEX 1\r
+#define PXE_ACK_INDEX 2\r
+#define PXE_BIS_INDEX 3\r
+\r
+#define DHCPV4_ACK_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[DHCPV4_ACK_INDEX]\r
+#define PXE_BINL_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_BINL_INDEX]\r
+#define PXE_OFFER_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_OFFER_INDEX]\r
+#define PXE_ACK_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_ACK_INDEX]\r
+#define PXE_BIS_BUFFER ((struct DhcpReceiveBufferStruct *) Private->DhcpPacketBuffer)[PXE_BIS_INDEX]\r
+\r
+#define DHCPV4_ACK_PACKET DHCPV4_ACK_BUFFER.u.Dhcpv4\r
+#define PXE_BINL_PACKET PXE_BINL_BUFFER.u.Dhcpv4\r
+#define PXE_OFFER_PACKET PXE_OFFER_BUFFER.u.Dhcpv4\r
+#define PXE_ACK_PACKET PXE_ACK_BUFFER.u.Dhcpv4\r
+#define PXE_BIS_PACKET PXE_BIS_BUFFER.u.Dhcpv4\r
+\r
+//\r
+// network structure definitions\r
+//\r
+//\r
+// some option definitions\r
+//\r
+#define DHCPV4_OPTION_LENGTH(type) (sizeof (type) - sizeof (DHCPV4_OP_HEADER))\r
+\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ UINT8 Type;\r
+} DHCPV4_OP_MESSAGE_TYPE;\r
+\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ UINT8 Overload;\r
+} DHCPV4_OP_OVERLOAD;\r
+\r
+//\r
+// boot server list structure\r
+// one or more contained in a pxe boot servers structure\r
+//\r
+typedef struct {\r
+ UINT8 IpCount;\r
+ EFI_IPv4_ADDRESS IpList[1]; // IP count of IPs\r
+} PXEV4_SERVER_LIST;\r
+\r
+typedef struct {\r
+ UINT8 IpCount;\r
+ EFI_IPv6_ADDRESS IpList[1]; // IP count of IPs\r
+} PXEV6_SERVER_LIST;\r
+\r
+typedef union {\r
+ PXEV4_SERVER_LIST Ipv4List;\r
+ PXEV6_SERVER_LIST Ipv6List;\r
+} PXE_SERVER_LISTS;\r
+\r
+typedef struct {\r
+ UINT16 Type;\r
+ PXE_SERVER_LISTS u;\r
+} PXE_SERVER_LIST;\r
+\r
+//\r
+// pxe boot servers structure\r
+//\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ PXE_SERVER_LIST ServerList[1]; // one or more\r
+} PXE_OP_SERVER_LIST;\r
+\r
+//\r
+// pxe boot item structure\r
+//\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ UINT16 Type;\r
+ UINT16 Layer;\r
+} PXE_OP_BOOT_ITEM;\r
+\r
+//\r
+// pxe boot menu item structure\r
+//\r
+typedef struct {\r
+ UINT16 Type;\r
+ UINT8 DataLen;\r
+ UINT8 Data[1];\r
+} PXE_BOOT_MENU_ENTRY;\r
+\r
+//\r
+// pxe boot menu structure\r
+//\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ PXE_BOOT_MENU_ENTRY MenuItem[1];\r
+} PXE_OP_BOOT_MENU;\r
+\r
+//\r
+// pxe boot prompt structure\r
+//\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ UINT8 Timeout;\r
+ UINT8 Prompt[1];\r
+} PXE_OP_BOOT_PROMPT;\r
+\r
+#define PXE_BOOT_PROMPT_AUTO_SELECT 0\r
+#define PXE_BOOT_PROMPT_NO_TIMEOUT 255\r
+\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ UINT8 Class[1];\r
+} DHCPV4_OP_CLASS;\r
+\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ UINT8 File[1];\r
+} DHCPV4_OP_BOOTFILE;\r
+\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ UINT8 VendorOptions[1];\r
+} DHCPV4_OP_VENDOR_OPTIONS;\r
+\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ UINT8 MaxSize[2];\r
+} DHCPV4_OP_MAX_MESSAGE_SIZE;\r
+\r
+typedef struct {\r
+ UINT8 _OP_SUBNET_MASK; /* 1 */\r
+ UINT8 _OP_TIME_OFFSET; /* 2 */\r
+ UINT8 _OP_ROUTER_LIST; /* 3 */\r
+ UINT8 _OP_TIME_SERVERS; /* 4 */\r
+ UINT8 _OP_NAME_SERVERS; /* 5 */\r
+ UINT8 _OP_DNS_SERVERS; /* 6 */\r
+ UINT8 _OP_HOST_NAME; /* 12 */\r
+ UINT8 _OP_BOOT_FILE_SZ; /* 13 */\r
+ UINT8 _OP_DOMAIN_NAME; /* 15 */\r
+ UINT8 _OP_ROOT_PATH; /* 17 */\r
+ UINT8 _OP_EXTENSION_PATH; /* 18 */\r
+ UINT8 _OP_MAX_DATAGRAM_SZ; /* 22 */\r
+ UINT8 _OP_DEFAULT_TTL; /* 23 */\r
+ UINT8 _OP_BROADCAST_ADD; /* 28 */\r
+ UINT8 _OP_NIS_DOMAIN_NAME; /* 40 */\r
+ UINT8 _OP_NIS_SERVERS; /* 41 */\r
+ UINT8 _OP_NTP_SERVERS; /* 42 */\r
+ UINT8 _OP_VENDOR_SPECIFIC; /* 43 */\r
+ UINT8 _OP_DHCP_REQ_IP_ADD; /* 50 */\r
+ UINT8 _OP_DHCP_LEASE_TIME; /* 51 */\r
+ UINT8 _OP_DHCP_SERVER_IP; /* 54 */\r
+ UINT8 _OP_DHCP_RENEWAL_TIME; /* 58 */\r
+ UINT8 _OP_DHCP_REBINDING_TIME; /* 59 */\r
+ UINT8 _OP_DHCP_CLASS_IDENTIFIER; /* 60 */\r
+ UINT8 _OP_DHCP_TFTP_SERVER_NAME; /* 66 */\r
+ UINT8 _OP_DHCP_BOOTFILE; /* 67 */\r
+ UINT8 _OP_DHCP_PLATFORM_ID; /* 97 */\r
+ UINT8 VendorOption128; // vendor option 128\r
+ UINT8 VendorOption129; // vendor option 129\r
+ UINT8 VendorOption130; // vendor option 130\r
+ UINT8 VendorOption131; // vendor option 131\r
+ UINT8 VendorOption132; // vendor option 132\r
+ UINT8 VendorOption133; // vendor option 133\r
+ UINT8 VendorOption134; // vendor option 134\r
+ UINT8 VendorOption135; // vendor option 135\r
+} DHCPV4_REQUESTED_OPTIONS_DATA;\r
+\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ DHCPV4_REQUESTED_OPTIONS_DATA Data;\r
+} DHCPV4_OP_REQUESTED_OPTIONS;\r
+\r
+typedef struct opipstr {\r
+ DHCPV4_OP_HEADER Header;\r
+ EFI_IPv4_ADDRESS Ip;\r
+} DHCPV4_OP_IP_ADDRESS;\r
+\r
+//\r
+// ip list structure - e.g. router list\r
+//\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ EFI_IPv4_ADDRESS IpList[1];\r
+} DHCPV4_OP_IP_LIST;\r
+\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ UINT8 Type;\r
+ UINT8 Guid[sizeof (EFI_GUID)];\r
+} DHCPV4_OP_CLIENT_ID;\r
+\r
+//\r
+// special options start - someday obsolete ???\r
+//\r
+#define DHCPV4_OP_PLATFORM_ID DHCPV4_OP_CLIENT_ID\r
+\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ UINT8 Type; // SNP = 2\r
+ UINT8 MajorVersion;\r
+ UINT8 MinorVersion;\r
+} DHCPV4_OP_NETWORK_INTERFACE;\r
+\r
+#define UNDI_TYPE 1\r
+#define SNP_TYPE 2\r
+\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ UINT16 Type;\r
+} DHCPV4_OP_ARCHITECTURE_TYPE;\r
+//\r
+// special options end - someday obsolete ???\r
+//\r
+typedef struct {\r
+ UINT8 ClassIdentifier[10]; // PXEClient:\r
+ UINT8 Lit2[5]; // Arch:\r
+ UINT8 ArchitectureType[5]; // 00000 - 65536\r
+ UINT8 Lit3[1]; // :\r
+ UINT8 InterfaceName[4]; // e.g. UNDI\r
+ UINT8 Lit4[1]; // :\r
+ UINT8 UndiMajor[3]; // 000 - 255\r
+ UINT8 UndiMinor[3]; // 000 - 255\r
+} DHCPV4_CLASS_ID_DATA;\r
+\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ DHCPV4_CLASS_ID_DATA Data;\r
+} DHCPV4_OP_CLASS_ID;\r
+\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ EFI_IPv4_ADDRESS Ip;\r
+} DHCPV4_OP_REQUESTED_IP;\r
+\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ EFI_IPv4_ADDRESS Ip;\r
+} DHCPV4_OP_SERVER_IP;\r
+\r
+typedef struct {\r
+ DHCPV4_OP_HEADER Header;\r
+ EFI_IPv4_ADDRESS Ip;\r
+} DHCPV4_OP_SUBNET_MASK;\r
+\r
+typedef struct { // oppxedisctlstr {\r
+ DHCPV4_OP_HEADER Header;\r
+ UINT8 ControlBits;\r
+} PXE_OP_DISCOVERY_CONTROL;\r
+\r
+#define DISABLE_BCAST (1 << 0)\r
+#define DISABLE_MCAST (1 << 1)\r
+#define USE_ACCEPT_LIST (1 << 2)\r
+#define USE_BOOTFILE (1 << 3)\r
+\r
+#pragma pack()\r
+//\r
+// definitions of indices to populate option interest array\r
+//\r
+#define VEND_PXE_MTFTP_IP_IX 1 // multicast IP address of bootfile for MTFTP listen\r
+#define VEND_PXE_MTFTP_CPORT_IX 2 // UDP Port to monitor for MTFTP responses - Intel order\r
+#define VEND_PXE_MTFTP_SPORT_IX 3 // Server UDP Port for MTFTP open - Intel order\r
+#define VEND_PXE_MTFTP_TMOUT_IX 4 // Listen timeout - secs\r
+#define VEND_PXE_MTFTP_DELAY_IX 5 // Transmission timeout - secs\r
+#define VEND_PXE_DISCOVERY_CONTROL_IX 6 // bit field\r
+#define VEND_PXE_DISCOVERY_MCAST_ADDR_IX 7 // boot server discovery multicast address\r
+#define VEND_PXE_BOOT_SERVERS_IX 8 // list of boot servers of form tp(2) cnt(1) ips[cnt]\r
+#define VEND_PXE_BOOT_MENU_IX 9\r
+#define VEND_PXE_BOOT_PROMPT_IX 10\r
+#define VEND_PXE_MCAST_ADDRS_ALLOC_IX 0 // not used by PXE client\r
+#define VEND_PXE_CREDENTIAL_TYPES_IX 11\r
+#define VEND_13_IX 0 // not used by PXE client\r
+#define VEND_14_IX 0 // not used by PXE client\r
+#define VEND_15_IX 0 // not used by PXE client\r
+#define VEND_16_IX 0 // not used by PXE client\r
+#define VEND_17_IX 0 // not used by PXE client\r
+#define VEND_18_IX 0 // not used by PXE client\r
+#define VEND_19_IX 0 // not used by PXE client\r
+#define VEND_20_IX 0 // not used by PXE client\r
+#define VEND_21_IX 0 // not used by PXE client\r
+#define VEND_22_IX 0 // not used by PXE client\r
+#define VEND_23_IX 0 // not used by PXE client\r
+#define VEND_24_IX 0 // not used by PXE client\r
+#define VEND_25_IX 0 // not used by PXE client\r
+#define VEND_26_IX 0 // not used by PXE client\r
+#define VEND_27_IX 0 // not used by PXE client\r
+#define VEND_28_IX 0 // not used by PXE client\r
+#define VEND_29_IX 0 // not used by PXE client\r
+#define VEND_30_IX 0 // not used by PXE client\r
+#define VEND_31_IX 0 // not used by PXE client\r
+#define VEND_32_IX 0 // not used by PXE client\r
+#define VEND_33_IX 0 // not used by PXE client\r
+#define VEND_34_IX 0 // not used by PXE client\r
+#define VEND_35_IX 0 // not used by PXE client\r
+#define VEND_36_IX 0 // not used by PXE client\r
+#define VEND_37_IX 0 // not used by PXE client\r
+#define VEND_38_IX 0 // not used by PXE client\r
+#define VEND_39_IX 0 // not used by PXE client\r
+#define VEND_40_IX 0 // not used by PXE client\r
+#define VEND_41_IX 0 // not used by PXE client\r
+#define VEND_42_IX 0 // not used by PXE client\r
+#define VEND_43_IX 0 // not used by PXE client\r
+#define VEND_44_IX 0 // not used by PXE client\r
+#define VEND_45_IX 0 // not used by PXE client\r
+#define VEND_46_IX 0 // not used by PXE client\r
+#define VEND_47_IX 0 // not used by PXE client\r
+#define VEND_48_IX 0 // not used by PXE client\r
+#define VEND_49_IX 0 // not used by PXE client\r
+#define VEND_50_IX 0 // not used by PXE client\r
+#define VEND_51_IX 0 // not used by PXE client\r
+#define VEND_52_IX 0 // not used by PXE client\r
+#define VEND_53_IX 0 // not used by PXE client\r
+#define VEND_54_IX 0 // not used by PXE client\r
+#define VEND_55_IX 0 // not used by PXE client\r
+#define VEND_56_IX 0 // not used by PXE client\r
+#define VEND_57_IX 0 // not used by PXE client\r
+#define VEND_58_IX 0 // not used by PXE client\r
+#define VEND_59_IX 0 // not used by PXE client\r
+#define VEND_60_IX 0 // not used by PXE client\r
+#define VEND_61_IX 0 // not used by PXE client\r
+#define VEND_62_IX 0 // not used by PXE client\r
+#define VEND_63_IX 0 // not used by PXE client\r
+#define VEND_64_IX 0 // not used by PXE client\r
+#define VEND_65_IX 0 // not used by PXE client\r
+#define VEND_66_IX 0 // not used by PXE client\r
+#define VEND_67_IX 0 // not used by PXE client\r
+#define VEND_68_IX 0 // not used by PXE client\r
+#define VEND_69_IX 0 // not used by PXE client\r
+#define VEND_70_IX 0 // not used by PXE client\r
+#define VEND_PXE_BOOT_ITEM_IX 12\r
+\r
+#define MAX_OUR_PXE_OPT VEND_PXE_BOOT_ITEM // largest PXE option in which we are interested\r
+#define MAX_OUR_PXE_IX VEND_PXE_BOOT_ITEM_IX // largest PXE option index\r
+//\r
+// define various types by options that are sent\r
+//\r
+#define WfM11a_OPTS ((1<<VEND_PXE_MTFTP_IP_IX) | \\r
+ (1<<VEND_PXE_MTFTP_CPORT_IX) | \\r
+ (1<<VEND_PXE_MTFTP_SPORT_IX) | \\r
+ (1<<VEND_PXE_MTFTP_TMOUT_IX) | \\r
+ (1<<VEND_PXE_MTFTP_DELAY_IX))\r
+\r
+#define DISCOVER_OPTS ((1<<VEND_PXE_DISCOVERY_CONTROL_IX) | \\r
+ (1<<VEND_PXE_DISCOVERY_MCAST_ADDR_IX) | \\r
+ (1<<VEND_PXE_BOOT_SERVERS_IX) | \\r
+ (1<<VEND_PXE_BOOT_MENU_IX) | \\r
+ (1<<VEND_PXE_BOOT_PROMPT_IX) | \\r
+ (1<<VEND_PXE_BOOT_ITEM_IX))\r
+\r
+#define CREDENTIALS_OPT (1 << VEND_PXE_CREDENTIAL_TYPES_IX)\r
+\r
+//\r
+// definitions of indices to populate option interest array\r
+//\r
+#define OP_SUBNET_MASK_IX 1\r
+#define OP_TIME_OFFSET_IX 0 // not used by PXE client\r
+#define OP_ROUTER_LIST_IX 2\r
+#define OP_TIME_SERVERS_IX 0 // not used by PXE client\r
+#define OP_NAME_SERVERS_IX 0 // not used by PXE client\r
+#define OP_DNS_SERVERS_IX 0 // not used by PXE client\r
+#define OP_LOG_SERVERS_IX 0 // not used by PXE client\r
+#define OP_COOKIE_SERVERS_IX 0 // not used by PXE client\r
+#define OP_LPR_SREVERS_IX 0 // not used by PXE client\r
+#define OP_IMPRESS_SERVERS_IX 0 // not used by PXE client\r
+#define OP_RES_LOC_SERVERS_IX 0 // not used by PXE client\r
+#define OP_HOST_NAME_IX 0 // not used by PXE client\r
+#define OP_BOOT_FILE_SZ_IX 9\r
+#define OP_DUMP_FILE_IX 0 // not used by PXE client\r
+#define OP_DOMAIN_NAME_IX 0 // not used by PXE client\r
+#define OP_SWAP_SERVER_IX 0 // not used by PXE client\r
+#define OP_ROOT_PATH_IX 0 // not used by PXE client\r
+#define OP_EXTENSION_PATH_IX 0 // not used by PXE client\r
+#define OP_IP_FORWARDING_IX 0 // not used by PXE client\r
+#define OP_NON_LOCAL_SRC_RTE_IX 0 // not used by PXE client\r
+#define OP_POLICY_FILTER_IX 0 // not used by PXE client\r
+#define OP_MAX_DATAGRAM_SZ_IX 0 // not used by PXE client\r
+#define OP_DEFAULT_TTL_IX 0 // not used by PXE client\r
+#define OP_MTU_AGING_TIMEOUT_IX 0 // not used by PXE client\r
+#define OP_MTU_SIZES_IX 0 // not used by PXE client\r
+#define OP_MTU_TO_USE_IX 0 // not used by PXE client\r
+#define OP_ALL_SUBNETS_LOCAL_IX 0 // not used by PXE client\r
+#define OP_BROADCAST_ADD_IX 0 // not used by PXE client\r
+#define OP_PERFORM_MASK_DISCOVERY_IX 0 // not used by PXE client\r
+#define OP_RESPOND_TO_MASK_REQ_IX 0 // not used by PXE client\r
+#define OP_PERFORM_ROUTER_DISCOVERY_IX 0 // not used by PXE client\r
+#define OP_ROUTER_SOLICIT_ADDRESS_IX 0 // not used by PXE client\r
+#define OP_STATIC_ROUTER_LIST_IX 0 // not used by PXE client\r
+#define OP_USE_ARP_TRAILERS_IX 0 // not used by PXE client\r
+#define OP_ARP_CACHE_TIMEOUT_IX 0 // not used by PXE client\r
+#define OP_ETHERNET_ENCAPSULATION_IX 0 // not used by PXE client\r
+#define OP_TCP_DEFAULT_TTL_IX 0 // not used by PXE client\r
+#define OP_TCP_KEEP_ALIVE_INT_IX 0 // not used by PXE client\r
+#define OP_KEEP_ALIVE_GARBAGE_IX 0 // not used by PXE client\r
+#define OP_NIS_DOMAIN_NAME_IX 0 // not used by PXE client\r
+#define OP_NIS_SERVERS_IX 0 // not used by PXE client\r
+#define OP_NTP_SERVERS_IX 0 // not used by PXE client\r
+#define OP_VENDOR_SPECIFIC_IX 3\r
+#define OP_NBNS_SERVERS_IX 0 // not used by PXE client\r
+#define OP_NBDD_SERVERS_IX 0 // not used by PXE client\r
+#define OP_NETBIOS_NODE_TYPE_IX 0 // not used by PXE client\r
+#define OP_NETBIOS_SCOPE_IX 0 // not used by PXE client\r
+#define OP_XWINDOW_SYSTEM_FONT_SERVERS_IX 0 // not used by PXE client\r
+#define OP_XWINDOW_SYSTEM_DISPLAY_MANAGERS_IX 0 // not used by PXE client\r
+// DHCP option indices\r
+//\r
+#define OP_DHCP_REQ_IP_ADD_IX 0 // not used by PXE client\r
+#define OP_DHCP_LEASE_TIME_IX 0 // not used by PXE client\r
+#define OP_DHCP_OPTION_OVERLOAD_IX 4\r
+#define OP_DHCP_MESSAGE_TYPE_IX 5\r
+#define OP_DHCP_SERVER_IP_IX 6\r
+#define OP_DHCP_PARM_REQ_LIST_IX 0 // not used by PXE client\r
+#define OP_DHCP_ERROR_MESSAGE_IX 0 // not used by PXE client\r
+#define OP_DHCP_MAX_MESSAGE_SZ_IX 0 // not used by PXE client\r
+#define OP_DHCP_RENEWAL_TIME_IX 0 // not used by PXE client\r
+#define OP_DHCP_REBINDING_TIME_IX 0 // not used by PXE client\r
+#define OP_DHCP_CLASS_IDENTIFIER_IX 7\r
+#define OP_DHCP_CLIENT_IDENTIFIER_IX 0 // not used by PXE client\r
+#define OP_RESERVED62_IX 0 // not used by PXE client\r
+#define OP_RESERVED63_IX 0 // not used by PXE client\r
+#define OP_NISPLUS_DOMAIN_NAME_IX 0 // not used by PXE client\r
+#define OP_NISPLUS_SERVERS_IX 0 // not used by PXE client\r
+#define OP_DHCP_TFTP_SERVER_NAME_IX 0 // not used by PXE client\r
+#define OP_DHCP_BOOTFILE_IX 8\r
+\r
+#define MAX_OUR_OPT OP_DHCP_BOOTFILE // largest option in which we are interested\r
+#define MAX_OUR_IX OP_BOOT_FILE_SZ_IX\r
+\r
+typedef struct {\r
+ DHCPV4_OP_STRUCT *PktOptAdds[MAX_OUR_IX];\r
+ DHCPV4_OP_STRUCT *PxeOptAdds[MAX_OUR_PXE_IX];\r
+ UINT8 Status;\r
+} OPTION_POINTERS;\r
+\r
+typedef struct DhcpReceiveBufferStruct {\r
+ union {\r
+ UINT8 ReceiveBuffer[MAX_DHCP_MSG_SZ];\r
+ DHCPV4_STRUCT Dhcpv4;\r
+ } u;\r
+\r
+ OPTION_POINTERS OpAdds;\r
+} DHCP_RECEIVE_BUFFER;\r
+\r
+#define PXE_TYPE (1 << 0)\r
+#define WfM11a_TYPE (1 << 1)\r
+#define DISCOVER_TYPE (1 << 2)\r
+#define CREDENTIALS_TYPE (1 << 3)\r
+#define USE_THREE_BYTE (1 << 4)\r
+\r
+#endif // _DHCP_H\r
+\r
+/* EOF - dhcp.h */\r
-/** @file
-
-Copyright (c) 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:
- PxeArch.h
-
-Abstract:
- Defines PXE Arch type
-
-
-**/
-
-#ifndef _EFI_PXE_ARCH_H_
-#define _EFI_PXE_ARCH_H_
-
-//
-// warning #175: subscript out of range
-//
-#pragma warning (disable: 175)
-
-#define SYS_ARCH GetSysArch()
-
-UINT16
-GetSysArch (
- VOID
- );
-
-#endif
+/** @file\r
+\r
+Copyright (c) 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
+ PxeArch.h\r
+\r
+Abstract:\r
+ Defines PXE Arch type\r
+\r
+\r
+**/\r
+\r
+#ifndef _EFI_PXE_ARCH_H_\r
+#define _EFI_PXE_ARCH_H_\r
+\r
+//\r
+// warning #175: subscript out of range\r
+//\r
+#pragma warning (disable: 175)\r
+\r
+#define SYS_ARCH GetSysArch()\r
+\r
+UINT16\r
+GetSysArch (\r
+ VOID\r
+ );\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2004, 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:
- hton.h
-
-Abstract:
- Byte swapping macros.
-
-
-**/
-
-#ifndef _HTON_H_
-#define _HTON_H_
-
-//
-// Only Intel order functions are defined at this time.
-//
-#define HTONS(v) (UINT16) ((((v) << 8) & 0xff00) + (((v) >> 8) & 0x00ff))
-
-#define HTONL(v) \
- (UINT32) ((((v) << 24) & 0xff000000) + (((v) << 8) & 0x00ff0000) + (((v) >> 8) & 0x0000ff00) + (((v) >> 24) & 0x000000ff))
-
-#define HTONLL(v) swap64 (v)
-
-#define U8PTR(na) ((UINT8 *) &(na))
-
-#define NTOHS(ns) ((UINT16) (((*U8PTR (ns)) << 8) +*(U8PTR (ns) + 1)))
-
-#define NTOHL(ns) \
- ((UINT32) (((*U8PTR (ns)) << 24) + ((*(U8PTR (ns) + 1)) << 16) + ((*(U8PTR (ns) + 2)) << 8) +*(U8PTR (ns) + 3)))
-
-#endif /* _HTON_H_ */
-
-/* EOF - hton.h */
+/** @file\r
+\r
+Copyright (c) 2004, 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
+ hton.h\r
+\r
+Abstract:\r
+ Byte swapping macros.\r
+\r
+\r
+**/\r
+\r
+#ifndef _HTON_H_\r
+#define _HTON_H_\r
+\r
+//\r
+// Only Intel order functions are defined at this time.\r
+//\r
+#define HTONS(v) (UINT16) ((((v) << 8) & 0xff00) + (((v) >> 8) & 0x00ff))\r
+\r
+#define HTONL(v) \\r
+ (UINT32) ((((v) << 24) & 0xff000000) + (((v) << 8) & 0x00ff0000) + (((v) >> 8) & 0x0000ff00) + (((v) >> 24) & 0x000000ff))\r
+\r
+#define HTONLL(v) swap64 (v)\r
+\r
+#define U8PTR(na) ((UINT8 *) &(na))\r
+\r
+#define NTOHS(ns) ((UINT16) (((*U8PTR (ns)) << 8) +*(U8PTR (ns) + 1)))\r
+\r
+#define NTOHL(ns) \\r
+ ((UINT32) (((*U8PTR (ns)) << 24) + ((*(U8PTR (ns) + 1)) << 16) + ((*(U8PTR (ns) + 2)) << 8) +*(U8PTR (ns) + 3)))\r
+\r
+#endif /* _HTON_H_ */\r
+\r
+/* EOF - hton.h */\r
-/** @file
-
-Copyright (c) 2006, 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:
- PxeArch.h
-
-Abstract:
- Defines PXE Arch type
-
-
-**/
-
-#ifndef _EFI_PXE_ARCH_H_
-#define _EFI_PXE_ARCH_H_
-
-#define SYS_ARCH 0x6
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2006, 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
+ PxeArch.h\r
+\r
+Abstract:\r
+ Defines PXE Arch type\r
+\r
+\r
+**/\r
+\r
+#ifndef _EFI_PXE_ARCH_H_\r
+#define _EFI_PXE_ARCH_H_\r
+\r
+#define SYS_ARCH 0x6\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2004 - 2006, 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.
-
-
-**/
-
-#ifndef _IP_H_
-#define _IP_H_
-
-#include "hton.h"
-
-//
-// portability macros
-//
-#define UDP_FILTER_MASK (EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP | \
- EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT | \
- EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP | \
- EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT | \
- EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_FILTER \
- )
-
-#define PXE_BOOT_LAYER_MASK 0x7FFF
-#define PXE_BOOT_LAYER_INITIAL 0x0000
-#define PXE_BOOT_LAYER_CREDENTIAL_FLAG 0x8000
-#define MAX_BOOT_SERVERS 32
-
-//
-// macro to evaluate IP address as TRUE if it is a multicast IP address
-//
-#define IS_MULTICAST(ptr) ((*((UINT8 *) ptr) & 0xf0) == 0xe0)
-
-//
-// length macros
-//
-#define IP_ADDRESS_LENGTH(qp) (((qp)->UsingIpv6) ? sizeof (EFI_IPv6_ADDRESS) : sizeof (EFI_IPv4_ADDRESS))
-
-#define MAX_FRAME_DATA_SIZE 1488
-#define ALLOCATE_SIZE(X) (((X) + 7) & 0xfff8)
-#define MODE_ALLOCATE_SIZE ALLOCATE_SIZE (sizeof (EFI_PXE_BASE_CODE_MODE))
-#define BUFFER_ALLOCATE_SIZE (8192 + 512)
-#define ROUTER_ALLOCATE_SIZE ALLOCATE_SIZE ((sizeof (EFI_PXE_BASE_CODE_ROUTE_ENTRY) * PXE_ROUTER_TABLE_SIZE))
-#define ARP_ALLOCATE_SIZE ALLOCATE_SIZE ((sizeof (EFI_PXE_BASE_CODE_ARP_ENTRY) * PXE_ARP_CACHE_SIZE))
-#define FILTER_ALLOCATE_SIZE ALLOCATE_SIZE ((sizeof (EFI_IP_ADDRESS) * PXE_IP_FILTER_SIZE))
-#define PXE_ARP_CACHE_SIZE 8
-#define PXE_ROUTER_TABLE_SIZE 8
-#define PXE_IP_FILTER_SIZE 8
-#define ICMP_ALLOCATE_SIZE ALLOCATE_SIZE (sizeof (EFI_PXE_BASE_CODE_ICMP_ERROR))
-#define TFTP_ERR_ALLOCATE_SIZE ALLOCATE_SIZE (sizeof (EFI_PXE_BASE_CODE_TFTP_ERROR))
-
-//
-// DHCP discover/request packets are sent to this UDP port. ProxyDHCP
-// servers listen on this port for DHCP discover packets that have a
-// class identifier (option 60) with 'PXEClient' in the first 9 bytes.
-// Bootservers also listen on this port for PXE broadcast discover
-// requests from PXE clients.
-//
-#define DHCP_SERVER_PORT 67
-
-//
-// When DHCP, proxyDHCP and Bootservers respond to DHCP and PXE broadcast
-// discover requests by broadcasting the reply packet, the packet is
-// broadcast to this port.
-//
-#define DHCP_CLIENT_PORT 68
-
-//
-// TFTP servers listen for TFTP open requests on this port.
-//
-#define TFTP_OPEN_PORT 69
-
-//
-// proxyDHCP and Bootservers listen on this port for a PXE unicast and/or
-// multicast discover requests from PXE clients. A PXE discover request
-// looks like a DHCP discover or DHCP request packet.
-//
-#define PXE_DISCOVERY_PORT 4011
-
-//
-// This port is used by the PXE client/server protocol tests.
-//
-#define PXE_PORT_PXETEST_PORT 0x8080
-
-//
-// Definitions for Ethertype protocol numbers and interface types
-// Per RFC 1700,
-//
-#define PXE_PROTOCOL_ETHERNET_IP 0x0800
-#define PXE_PROTOCOL_ETHERNET_ARP 0x0806
-#define PXE_PROTOCOL_ETHERNET_RARP 0x8035
-
-#define PXE_IFTYPE_ETHERNET 0x01
-#define PXE_IFTYPE_TOKENRING 0x04
-#define PXE_IFTYPE_FIBRE_CHANNEL 0x12
-
-//
-// Definitions for internet protocol version 4 header
-// Per RFC 791, September 1981.
-//
-#define IPVER4 4
-
-#pragma pack(1) // make network structures packed byte alignment
-typedef union {
- UINT8 B[4];
- UINT32 L;
-} IPV4_ADDR;
-
-#define IPV4_HEADER_LENGTH(IpHeaderPtr) (((IpHeaderPtr)->VersionIhl & 0xf) << 2)
-
-#define SET_IPV4_VER_HDL(IpHeaderPtr, IpHeaderLen) { \
- (IpHeaderPtr)->VersionIhl = (UINT8) ((IPVER4 << 4) | ((IpHeaderLen) >> 2)); \
- }
-
-typedef struct {
- UINT8 VersionIhl;
- UINT8 TypeOfService;
- UINT16 TotalLength;
- UINT16 Id;
- UINT16 FragmentFields;
- UINT8 TimeToLive;
- UINT8 Protocol;
- UINT16 HeaderChecksum;
- IPV4_ADDR SrcAddr;
- IPV4_ADDR DestAddr;
- //
- // options are not implemented
- //
-} IPV4_HEADER;
-
-#define IP_FRAG_RSVD 0x8000 // reserved bit - must be zero
-#define IP_NO_FRAG 0x4000 // do not fragment bit
-#define IP_MORE_FRAG 0x2000 // not last fragment
-#define IP_FRAG_OFF_MSK 0x1fff // fragment offset in 8 byte chunks
-#define DEFAULT_RFC_TTL 64
-
-#define PROT_ICMP 1
-#define PROT_IGMP 2
-#define PROT_TCP 6
-#define PROT_UDP 17
-
-/*
- * Definitions for internet control message protocol version 4 message
- * structure. Per RFC 792, September 1981.
- */
-
-//
-// icmp header for all icmp messages
-//
-typedef struct {
- UINT8 Type; // message type
- UINT8 Code; // type specific - 0 for types we implement
- UINT16 Checksum; // ones complement of ones complement sum of 16 bit words of message
-} ICMPV4_HEADER;
-
-#define ICMP_DEST_UNREACHABLE 3
-#define ICMP_SOURCE_QUENCH 4
-#define ICMP_REDIRECT 5
-#define ICMP_ECHO 8
-#define ICMP_ECHO_REPLY 0
-#define ICMP_ROUTER_ADV 9
-#define ICMP_ROUTER_SOLICIT 10
-#define ICMP_TIME_EXCEEDED 11
-#define ICMP_PARAMETER_PROBLEM 12
-#define ICMP_TIMESTAMP 13
-#define ICMP_TIMESTAMP_REPLY 14
-#define ICMP_INFO_REQ 15
-#define ICMP_INFO_REQ_REPLY 16
-#define ICMP_SUBNET_MASK_REQ 17
-#define ICMP_SUBNET_MASK_REPLY 18
-//
-// other ICMP message types ignored in this implementation
-//
-// icmp general messages
-//
-typedef struct {
- ICMPV4_HEADER Header;
- //
- // generally unused except byte [0] for
- // parameter problem message
- //
- UINT8 GenerallyUnused[4];
- //
- // original message ip header of plus 64
- // bits of data
- //
- IPV4_HEADER IpHeader;
-} ICMPV4_GENERAL_MESSAGE;
-
-//
-// icmp req/rply message header
-//
-typedef struct {
- ICMPV4_HEADER Header;
- UINT16 Id;
- UINT16 SequenceNumber;
-} ICMPV4_REQUEST_REPLY_HEADER;
-
-//
-// icmp echo message
-//
-typedef struct {
- ICMPV4_REQUEST_REPLY_HEADER Header;
- UINT8 EchoData[1]; // variable length data to be echoed
-} ICMPV4_ECHO_MESSAGE;
-
-//
-// icmp timestamp message - times are milliseconds since midnight UT -
-// if non std, set high order bit
-//
-typedef struct {
- ICMPV4_REQUEST_REPLY_HEADER Header;
- UINT32 OriginalTime; // originating timestamp
- UINT32 ReceiveTime; // receiving timestamp
- UINT32 TransmitTime; // transmitting timestamp
-} ICMPV4_TIMESTAMP_MESSAGE;
-
-//
-// icmp info request structure - fill in source and dest net ip address on reply
-//
-typedef struct {
- ICMPV4_REQUEST_REPLY_HEADER Header;
-} ICMPV4_INFO_MESSAGE;
-
-//
-// Definitions for internet control message protocol version 4 message structure
-// Router discovery
-// Per RFC 1256, September 1991.
-//
-//
-// icmp router advertisement message
-//
-typedef struct {
- ICMPV4_HEADER Header;
- UINT8 NumberEntries; // number of address entries
- UINT8 EntrySize; // number of 32 bit words per address entry
- UINT16 Lifetime; // seconds to consider info valid
- UINT32 RouterIp;
- UINT32 Preferance;
-} ICMPV4_ROUTER_ADVERTISE_MESSAGE;
-
-//
-// icmp router solicitation message
-//
-typedef struct {
- ICMPV4_HEADER Header;
- UINT32 Reserved;
-} ICMPV4_ROUTER_SOLICIT_MESSAGE;
-
-#define MAX_SOLICITATION_DELAY 1 // 1 second
-#define SOLICITATION_INTERVAL 3 // 3 seconds
-#define MAX_SOLICITATIONS 3 // 3 transmissions
-#define V1ROUTER_PRESENT_TIMEOUT 400 // 400 second timeout until v2 reports can be sent
-#define UNSOLICITED_REPORT_INTERVAL 10 // 10 seconds between unsolicited reports
-#define BROADCAST_IPv4 0xffffffff
-
-//
-// Definitions for address resolution protocol message structure
-// Per RFC 826, November 1982
-//
-typedef struct {
- UINT16 HwType; // hardware type - e.g. ethernet (1)
- UINT16 ProtType; // protocol type - for ethernet, 0x800 for IP
- UINT8 HwAddLen; // byte length of a hardware address (e.g. 6 for ethernet)
- UINT8 ProtAddLen; // byte length of a protocol address (e.g. 4 for ipv4)
- UINT16 OpCode;
- //
- // source and dest hw and prot addresses follow - see example below
- //
-} ARP_HEADER;
-
-#define ETHERNET_ADD_SPC 1
-
-#define ETHER_TYPE_IP 0x800
-
-#define ARP_REQUEST 1
-#define ARP_REPLY 2
-
-//
-// generic ARP packet
-//
-typedef struct {
- ARP_HEADER ArpHeader;
- EFI_MAC_ADDRESS SrcHardwareAddr;
- EFI_IP_ADDRESS SrcProtocolAddr;
- EFI_MAC_ADDRESS DestHardwareAddr;
- EFI_IP_ADDRESS DestProtocolAddr;
-} ARP_PACKET;
-
-#define ENET_HWADDLEN 6
-#define IPV4_PROTADDLEN 4
-
-//
-// Definitions for user datagram protocol version 4 pseudo header & header
-// Per RFC 768, 28 August 1980
-//
-typedef struct {
- IPV4_ADDR SrcAddr; // source ip address
- IPV4_ADDR DestAddr; // dest ip address
- UINT8 Zero; // 0
- UINT8 Protocol; // protocol
- UINT16 TotalLength; // UDP length - sizeof udpv4hdr + data length
-} UDPV4_PSEUDO_HEADER;
-
-typedef struct {
- UINT16 SrcPort; // source port identifier
- UINT16 DestPort; // destination port identifier
- UINT16 TotalLength; // total length header plus data
- //
- // ones complement of ones complement sum of 16 bit
- // words of pseudo header, UDP header, and data
- // zero checksum is transmitted as -0 (ones comp)
- // zero transmitted means checksum not computed
- // data follows
- //
- UINT16 Checksum;
-} UDPV4_HEADER;
-
-typedef struct {
- UDPV4_PSEUDO_HEADER Udpv4PseudoHeader;
- UDPV4_HEADER Udpv4Header;
-} UDPV4_HEADERS;
-
-//
-// Definitions for transmission control protocol header
-// Per RFC 793, September, 1981
-//
-typedef struct {
- IPV4_ADDR SrcAddr; // source ip address
- IPV4_ADDR DestAddr; // dest ip address
- UINT8 Zero; // 0
- UINT8 Protocol; // protocol
- UINT16 TotalLength; // TCP length - TCP header length + data length
-} TCPV4_PSEUDO_HEADER;
-
-typedef struct {
- UINT16 SrcPort; // source port identifier
- UINT16 DestPort; // destination port identifier
- UINT32 SeqNumber; // Sequence number
- UINT32 AckNumber; // Acknowledgement Number
- //
- // Nibble of HLEN (length of header in 32-bit multiples)
- // 6bits of RESERVED
- // Nibble of Code Bits
- //
- UINT16 HlenResCode;
- UINT16 Window; // Software buffer size (sliding window size) in network-standard byte order
- //
- // ones complement of ones complement sum of 16 bit words of
- // pseudo header, TCP header, and data
- // zero checksum is transmitted as -0 (ones comp)
- // zero transmitted means checksum not computed
- //
- UINT16 Checksum;
- UINT16 UrgentPointer; // pointer to urgent data (allows sender to specify urgent data)
-} TCPV4_HEADER;
-
-typedef struct {
- TCPV4_PSEUDO_HEADER Tcpv4PseudoHeader;
- TCPV4_HEADER Tcpv4Header;
-} TCPV4_HEADERS;
-
-typedef struct {
- UINT8 Kind; // one of the following:
- UINT8 Length; // total option length including Kind and Lth
- UINT8 Data[1]; // length = Lth - 2
-} TCPV4_OPTION;
-
-#define TCP_OP_END 0 // only used to pad to end of TCP header
-#define TCP_NOP 1 // optional - may be used to pad between options to get alignment
-#define TCP_MAX_SEG 2 // maximum receive segment size - only send at initial connection request
-#define MAX_MEDIA_HDR_SIZE 64
-#define MIN_ENET_DATA_SIZE 64
-#define MAX_ENET_DATA_SIZE 1500 // temp def - make a network based var
-#define MAX_IPV4_PKT_SIZE 65535 // maximum IP packet size
-#define MAX_IPV4_DATA_SIZE (MAX_IPV4_PKT_SIZE - sizeof (IPV4_HEADER))
-#define MAX_IPV4_FRAME_DATA_SIZE (MAX_FRAME_DATA_SIZE - sizeof (IPV4_HEADER))
-#define REAS_IPV4_PKT_SIZE 576 // minimum IP packet size all IP host can handle
-#define REAS_IPV4_DATA_SIZE (REAS_IPV4_PKT_SIZE - sizeof (IPV4_HEADER))
-
-//
-//
-//
-typedef union {
- UINT8 Data[MAX_ENET_DATA_SIZE];
- ICMPV4_HEADER IcmpHeader;
- IGMPV2_MESSAGE IgmpMessage;
- struct {
- UDPV4_HEADER UdpHeader;
- UINT8 Data[1];
- } Udp;
- struct {
- TCPV4_HEADER TcpHeader;
- UINT8 Data[1];
- } Tcp;
-} PROTOCOL_UNION;
-
-//
-// out buffer structure
-//
-typedef struct {
- UINT8 MediaHeader[MAX_MEDIA_HDR_SIZE];
- IPV4_HEADER IpHeader;
- //
- // following union placement only valid if no option IP header
- //
- PROTOCOL_UNION u;
-} IPV4_BUFFER;
-
-typedef struct {
- IPV4_HEADER IpHeader;
- //
- // following union placement only valid if no option IP header
- //
- PROTOCOL_UNION u;
-} IPV4_STRUCT;
-
-#pragma pack() // reset to default
-
- ////////////////////////////////////////////////////////////
-//
-// BC IP Filter Routine
-//
-EFI_STATUS
-IpFilter (
- PXE_BASECODE_DEVICE *Private,
- IN EFI_PXE_BASE_CODE_IP_FILTER *Filter
- )
-;
-
-//
-// //////////////////////////////////////////////////////////////////////
-//
-// Udp Write Routine - called by base code - e.g. TFTP - already locked
-//
-EFI_STATUS
-UdpWrite (
- IN PXE_BASECODE_DEVICE *Private,
- IN UINT16 OpFlags,
- IN EFI_IP_ADDRESS *DestIpPtr,
- IN EFI_PXE_BASE_CODE_UDP_PORT *DestPortptr,
- IN EFI_IP_ADDRESS *GatewayIpPtr, OPTIONAL
- IN EFI_IP_ADDRESS *SrcIpPtr, OPTIONAL
- IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPortPtr, OPTIONAL
- IN UINTN *HeaderSizePtr, OPTIONAL
- IN VOID *HeaderPtr, OPTIONAL
- IN UINTN *BufferSizePtr,
- IN VOID *BufferPtr
- )
-;
-
-//
-// /////////////////////////////////////////////////////////////////////
-//
-// Udp Read Routine - called by base code - e.g. TFTP - already locked
-//
-EFI_STATUS
-UdpRead (
- IN PXE_BASECODE_DEVICE *Private,
- IN UINT16 OpFlags,
- IN OUT EFI_IP_ADDRESS *DestIpPtr, OPTIONAL
- IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPorPtrt, OPTIONAL
- IN OUT EFI_IP_ADDRESS *SrcIpPtr, OPTIONAL
- IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPortPtr, OPTIONAL
- IN UINTN *HeaderSizePtr, OPTIONAL
- IN VOID *HeaderPtr, OPTIONAL
- IN OUT UINTN *BufferSizePtr,
- IN VOID *BufferPtr,
- IN EFI_EVENT TimeoutEvent
- )
-;
-
-VOID
-IgmpLeaveGroup (
- PXE_BASECODE_DEVICE *Private,
- EFI_IP_ADDRESS *
- )
-;
-
-VOID
-IgmpJoinGroup (
- PXE_BASECODE_DEVICE *Private,
- EFI_IP_ADDRESS *
- )
-;
-
-//
-// convert number to zero filled ascii value of length lth
-//
-VOID
-CvtNum (
- UINTN Number,
- UINT8 *BufferPtr,
- INTN BufferLen
- )
-;
-
-//
-// convert number to ascii string at ptr
-//
-VOID
-UtoA10 (
- UINTN Number,
- UINT8 *BufferPtr
- )
-;
-
-//
-// convert ascii numeric string to UINTN
-//
-UINTN
-AtoU (
- UINT8 *BufferPtr
- )
-;
-
-UINT64
-AtoU64 (
- UINT8 *BufferPtr
- )
-;
-
-//
-// calculate the internet checksum (RFC 1071)
-// return 16 bit ones complement of ones complement sum of 16 bit words
-//
-UINT16
-IpChecksum (
- UINT16 *MessagePtr,
- UINTN ByteLength
- )
-;
-
-//
-// do checksum on non contiguous header and data
-//
-UINT16
-IpChecksum2 (
- UINT16 *Header,
- UINTN HeaderLength,
- UINT16 *Message,
- UINTN MessageLength
- )
-;
-
-//
-// update checksum when only a single word changes
-//
-UINT16
-UpdateChecksum (
- UINT16 OldChecksum,
- UINT16 OldWord,
- UINT16 NewWord
- )
-;
-
-VOID
-SeedRandom (
- IN PXE_BASECODE_DEVICE *Private,
- IN UINT16 InitialSeed
- )
-;
-
-UINT16
-Random (
- IN PXE_BASECODE_DEVICE *Private
- )
-;
-
-EFI_STATUS
-SendPacket (
- PXE_BASECODE_DEVICE *Private,
- VOID *HeaderPtr,
- VOID *PacketPtr,
- INTN PacketLength,
- VOID *HardwareAddress,
- UINT16 MediaProtocol,
- IN EFI_PXE_BASE_CODE_FUNCTION Function
- )
-;
-
-VOID
-HandleArpReceive (
- PXE_BASECODE_DEVICE *Private,
- ARP_PACKET *ArpPacketPtr,
- VOID *HeaderPtr
- )
-;
-
-VOID
-HandleIgmp (
- PXE_BASECODE_DEVICE *Private,
- IGMPV2_MESSAGE *IgmpMessageptr,
- UINTN IgmpMessageLen
- )
-;
-
-VOID
-IgmpCheckTimers (
- PXE_BASECODE_DEVICE *Private
- )
-; // poll when doing a receive
-// return hw add of IP and TRUE if available, otherwise FALSE
-//
-BOOLEAN
-GetHwAddr (
- IN PXE_BASECODE_DEVICE *Private,
- EFI_IP_ADDRESS *ProtocolAddressPtr,
- EFI_MAC_ADDRESS *HardwareAddressPtr
- )
-;
-
-EFI_STATUS
-DoArp (
- IN PXE_BASECODE_DEVICE *Private,
- IN EFI_IP_ADDRESS *ProtocolAddressPtr,
- OUT EFI_MAC_ADDRESS *HardwareAddressptr
- )
-;
-
-BOOLEAN
-OnSameSubnet (
- UINTN IpAddressLen,
- EFI_IP_ADDRESS *Ip1,
- EFI_IP_ADDRESS *Ip2,
- EFI_IP_ADDRESS *SubnetMask
- )
-;
-
-VOID
-IpAddRouter (
- PXE_BASECODE_DEVICE *Private,
- EFI_IP_ADDRESS *RouterIp
- )
-;
-
-#define Ip4AddRouter(Private, Ipv4Ptr) IpAddRouter (Private, (EFI_IP_ADDRESS *) Ipv4Ptr)
-
-//
-// routine to send ipv4 packet
-// ipv4 + upper protocol header for length TotHdrLth in xmtbuf, ipv4 header length IpHdrLth
-// routine fills in ipv4hdr Ver_Hdl, TotLth, and Checksum, moves in Data, and gets dest MAC address
-//
-EFI_STATUS
-Ipv4Xmt (
- PXE_BASECODE_DEVICE *Private,
- UINT32 GatewayIP,
- UINTN IpHeaderLen,
- UINTN TotalHeaderLen,
- VOID *Data,
- UINTN DataLen,
- EFI_PXE_BASE_CODE_FUNCTION Function
- )
-;
-
-//
-// send ipv4 packet with ipv4 option
-//
-EFI_STATUS
-Ipv4SendWOp (
- PXE_BASECODE_DEVICE *Private,
- UINT32 GatewayIP,
- UINT8 *MessagePtr,
- UINTN MessageLth,
- UINT8 Protocol,
- UINT8 *Option,
- UINTN OptionLen,
- UINT32 DestIp,
- EFI_PXE_BASE_CODE_FUNCTION Function
- )
-;
-
-//
-// send MsgLth message at MsgPtr - higher level protocol header already in xmtbuf, length HdrSize
-//
-EFI_STATUS
-Ip4Send (
- IN PXE_BASECODE_DEVICE *Private, // pointer to instance data
- IN UINTN MayFragment, //
- IN UINT8 Protocol, // protocol
- IN UINT32 SrcIp, // Source IP address
- IN UINT32 DestIp, // Destination IP address
- IN UINT32 GatewayIp, // used if not NULL and needed
- IN UINTN HeaderSize, // protocol header byte length
- IN UINT8 *MsgPtr, // pointer to data
- IN UINTN MsgLength
- )
-; // data byte length
-// receive up to MsgLth message into MsgPtr for protocol Prot
-// return message length, src/dest ips if select any, and pointer to protocol header
-//
-EFI_STATUS
-IpReceive (
- IN PXE_BASECODE_DEVICE *Private, // pointer to instance data
- UINT16 OpFlags, // Flags to determine if filtering on IP addresses
- EFI_IP_ADDRESS *SrcIpPtr, // if filtering, O if accept any
- EFI_IP_ADDRESS *DstIpPtr, // if filtering, O if accept any
- UINT8 Protocol, // protocol
- VOID *HeaderPtr, // address of where to put protocol header
- UINTN HeaderSize, // protocol header byte length
- UINT8 *MsgPtr, // pointer to data buffer
- UINTN *MsgLenPtr, // pointer to data buffer length/ O - returned data length
- IN EFI_EVENT TimeoutEvent
- )
-;
-
-#if 0
-VOID
-WaitForTxComplete (
- IN PXE_BASECODE_DEVICE *Private
- )
-;
-#endif
-//
-// routine to cycle waiting for a receive or timeout
-//
-EFI_STATUS
-WaitForReceive (
- IN PXE_BASECODE_DEVICE *Private,
- IN EFI_PXE_BASE_CODE_FUNCTION Function,
- IN EFI_EVENT TimeoutEvent,
- IN OUT UINTN *HeaderSizePtr,
- IN OUT UINTN *BufferSizePtr,
- IN OUT UINT16 *ProtocolPtr
- )
-;
-
-#endif /* _IP_H_ */
-
-/* EOF - ip.h */
+/** @file\r
+\r
+Copyright (c) 2004 - 2006, 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
+\r
+**/\r
+\r
+#ifndef _IP_H_\r
+#define _IP_H_\r
+\r
+#include "hton.h"\r
+\r
+//\r
+// portability macros\r
+//\r
+#define UDP_FILTER_MASK (EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP | \\r
+ EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT | \\r
+ EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP | \\r
+ EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT | \\r
+ EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_FILTER \\r
+ )\r
+\r
+#define PXE_BOOT_LAYER_MASK 0x7FFF\r
+#define PXE_BOOT_LAYER_INITIAL 0x0000\r
+#define PXE_BOOT_LAYER_CREDENTIAL_FLAG 0x8000\r
+#define MAX_BOOT_SERVERS 32\r
+\r
+//\r
+// macro to evaluate IP address as TRUE if it is a multicast IP address\r
+//\r
+#define IS_MULTICAST(ptr) ((*((UINT8 *) ptr) & 0xf0) == 0xe0)\r
+\r
+//\r
+// length macros\r
+//\r
+#define IP_ADDRESS_LENGTH(qp) (((qp)->UsingIpv6) ? sizeof (EFI_IPv6_ADDRESS) : sizeof (EFI_IPv4_ADDRESS))\r
+\r
+#define MAX_FRAME_DATA_SIZE 1488\r
+#define ALLOCATE_SIZE(X) (((X) + 7) & 0xfff8)\r
+#define MODE_ALLOCATE_SIZE ALLOCATE_SIZE (sizeof (EFI_PXE_BASE_CODE_MODE))\r
+#define BUFFER_ALLOCATE_SIZE (8192 + 512)\r
+#define ROUTER_ALLOCATE_SIZE ALLOCATE_SIZE ((sizeof (EFI_PXE_BASE_CODE_ROUTE_ENTRY) * PXE_ROUTER_TABLE_SIZE))\r
+#define ARP_ALLOCATE_SIZE ALLOCATE_SIZE ((sizeof (EFI_PXE_BASE_CODE_ARP_ENTRY) * PXE_ARP_CACHE_SIZE))\r
+#define FILTER_ALLOCATE_SIZE ALLOCATE_SIZE ((sizeof (EFI_IP_ADDRESS) * PXE_IP_FILTER_SIZE))\r
+#define PXE_ARP_CACHE_SIZE 8\r
+#define PXE_ROUTER_TABLE_SIZE 8\r
+#define PXE_IP_FILTER_SIZE 8\r
+#define ICMP_ALLOCATE_SIZE ALLOCATE_SIZE (sizeof (EFI_PXE_BASE_CODE_ICMP_ERROR))\r
+#define TFTP_ERR_ALLOCATE_SIZE ALLOCATE_SIZE (sizeof (EFI_PXE_BASE_CODE_TFTP_ERROR))\r
+\r
+//\r
+// DHCP discover/request packets are sent to this UDP port. ProxyDHCP\r
+// servers listen on this port for DHCP discover packets that have a\r
+// class identifier (option 60) with 'PXEClient' in the first 9 bytes.\r
+// Bootservers also listen on this port for PXE broadcast discover\r
+// requests from PXE clients.\r
+//\r
+#define DHCP_SERVER_PORT 67\r
+\r
+//\r
+// When DHCP, proxyDHCP and Bootservers respond to DHCP and PXE broadcast\r
+// discover requests by broadcasting the reply packet, the packet is\r
+// broadcast to this port.\r
+//\r
+#define DHCP_CLIENT_PORT 68\r
+\r
+//\r
+// TFTP servers listen for TFTP open requests on this port.\r
+//\r
+#define TFTP_OPEN_PORT 69\r
+\r
+//\r
+// proxyDHCP and Bootservers listen on this port for a PXE unicast and/or\r
+// multicast discover requests from PXE clients. A PXE discover request\r
+// looks like a DHCP discover or DHCP request packet.\r
+//\r
+#define PXE_DISCOVERY_PORT 4011\r
+\r
+//\r
+// This port is used by the PXE client/server protocol tests.\r
+//\r
+#define PXE_PORT_PXETEST_PORT 0x8080\r
+\r
+//\r
+// Definitions for Ethertype protocol numbers and interface types\r
+// Per RFC 1700,\r
+//\r
+#define PXE_PROTOCOL_ETHERNET_IP 0x0800\r
+#define PXE_PROTOCOL_ETHERNET_ARP 0x0806\r
+#define PXE_PROTOCOL_ETHERNET_RARP 0x8035\r
+\r
+#define PXE_IFTYPE_ETHERNET 0x01\r
+#define PXE_IFTYPE_TOKENRING 0x04\r
+#define PXE_IFTYPE_FIBRE_CHANNEL 0x12\r
+\r
+//\r
+// Definitions for internet protocol version 4 header\r
+// Per RFC 791, September 1981.\r
+//\r
+#define IPVER4 4\r
+\r
+#pragma pack(1) // make network structures packed byte alignment\r
+typedef union {\r
+ UINT8 B[4];\r
+ UINT32 L;\r
+} IPV4_ADDR;\r
+\r
+#define IPV4_HEADER_LENGTH(IpHeaderPtr) (((IpHeaderPtr)->VersionIhl & 0xf) << 2)\r
+\r
+#define SET_IPV4_VER_HDL(IpHeaderPtr, IpHeaderLen) { \\r
+ (IpHeaderPtr)->VersionIhl = (UINT8) ((IPVER4 << 4) | ((IpHeaderLen) >> 2)); \\r
+ }\r
+\r
+typedef struct {\r
+ UINT8 VersionIhl;\r
+ UINT8 TypeOfService;\r
+ UINT16 TotalLength;\r
+ UINT16 Id;\r
+ UINT16 FragmentFields;\r
+ UINT8 TimeToLive;\r
+ UINT8 Protocol;\r
+ UINT16 HeaderChecksum;\r
+ IPV4_ADDR SrcAddr;\r
+ IPV4_ADDR DestAddr;\r
+ //\r
+ // options are not implemented\r
+ //\r
+} IPV4_HEADER;\r
+\r
+#define IP_FRAG_RSVD 0x8000 // reserved bit - must be zero\r
+#define IP_NO_FRAG 0x4000 // do not fragment bit\r
+#define IP_MORE_FRAG 0x2000 // not last fragment\r
+#define IP_FRAG_OFF_MSK 0x1fff // fragment offset in 8 byte chunks\r
+#define DEFAULT_RFC_TTL 64\r
+\r
+#define PROT_ICMP 1\r
+#define PROT_IGMP 2\r
+#define PROT_TCP 6\r
+#define PROT_UDP 17\r
+\r
+/*\r
+ * Definitions for internet control message protocol version 4 message\r
+ * structure. Per RFC 792, September 1981.\r
+ */\r
+\r
+//\r
+// icmp header for all icmp messages\r
+//\r
+typedef struct {\r
+ UINT8 Type; // message type\r
+ UINT8 Code; // type specific - 0 for types we implement\r
+ UINT16 Checksum; // ones complement of ones complement sum of 16 bit words of message\r
+} ICMPV4_HEADER;\r
+\r
+#define ICMP_DEST_UNREACHABLE 3\r
+#define ICMP_SOURCE_QUENCH 4\r
+#define ICMP_REDIRECT 5\r
+#define ICMP_ECHO 8\r
+#define ICMP_ECHO_REPLY 0\r
+#define ICMP_ROUTER_ADV 9\r
+#define ICMP_ROUTER_SOLICIT 10\r
+#define ICMP_TIME_EXCEEDED 11\r
+#define ICMP_PARAMETER_PROBLEM 12\r
+#define ICMP_TIMESTAMP 13\r
+#define ICMP_TIMESTAMP_REPLY 14\r
+#define ICMP_INFO_REQ 15\r
+#define ICMP_INFO_REQ_REPLY 16\r
+#define ICMP_SUBNET_MASK_REQ 17\r
+#define ICMP_SUBNET_MASK_REPLY 18\r
+//\r
+// other ICMP message types ignored in this implementation\r
+//\r
+// icmp general messages\r
+//\r
+typedef struct {\r
+ ICMPV4_HEADER Header;\r
+ //\r
+ // generally unused except byte [0] for\r
+ // parameter problem message\r
+ //\r
+ UINT8 GenerallyUnused[4];\r
+ //\r
+ // original message ip header of plus 64\r
+ // bits of data\r
+ //\r
+ IPV4_HEADER IpHeader;\r
+} ICMPV4_GENERAL_MESSAGE;\r
+\r
+//\r
+// icmp req/rply message header\r
+//\r
+typedef struct {\r
+ ICMPV4_HEADER Header;\r
+ UINT16 Id;\r
+ UINT16 SequenceNumber;\r
+} ICMPV4_REQUEST_REPLY_HEADER;\r
+\r
+//\r
+// icmp echo message\r
+//\r
+typedef struct {\r
+ ICMPV4_REQUEST_REPLY_HEADER Header;\r
+ UINT8 EchoData[1]; // variable length data to be echoed\r
+} ICMPV4_ECHO_MESSAGE;\r
+\r
+//\r
+// icmp timestamp message - times are milliseconds since midnight UT -\r
+// if non std, set high order bit\r
+//\r
+typedef struct {\r
+ ICMPV4_REQUEST_REPLY_HEADER Header;\r
+ UINT32 OriginalTime; // originating timestamp\r
+ UINT32 ReceiveTime; // receiving timestamp\r
+ UINT32 TransmitTime; // transmitting timestamp\r
+} ICMPV4_TIMESTAMP_MESSAGE;\r
+\r
+//\r
+// icmp info request structure - fill in source and dest net ip address on reply\r
+//\r
+typedef struct {\r
+ ICMPV4_REQUEST_REPLY_HEADER Header;\r
+} ICMPV4_INFO_MESSAGE;\r
+\r
+//\r
+// Definitions for internet control message protocol version 4 message structure\r
+// Router discovery\r
+// Per RFC 1256, September 1991.\r
+//\r
+//\r
+// icmp router advertisement message\r
+//\r
+typedef struct {\r
+ ICMPV4_HEADER Header;\r
+ UINT8 NumberEntries; // number of address entries\r
+ UINT8 EntrySize; // number of 32 bit words per address entry\r
+ UINT16 Lifetime; // seconds to consider info valid\r
+ UINT32 RouterIp;\r
+ UINT32 Preferance;\r
+} ICMPV4_ROUTER_ADVERTISE_MESSAGE;\r
+\r
+//\r
+// icmp router solicitation message\r
+//\r
+typedef struct {\r
+ ICMPV4_HEADER Header;\r
+ UINT32 Reserved;\r
+} ICMPV4_ROUTER_SOLICIT_MESSAGE;\r
+\r
+#define MAX_SOLICITATION_DELAY 1 // 1 second\r
+#define SOLICITATION_INTERVAL 3 // 3 seconds\r
+#define MAX_SOLICITATIONS 3 // 3 transmissions\r
+#define V1ROUTER_PRESENT_TIMEOUT 400 // 400 second timeout until v2 reports can be sent\r
+#define UNSOLICITED_REPORT_INTERVAL 10 // 10 seconds between unsolicited reports\r
+#define BROADCAST_IPv4 0xffffffff\r
+\r
+//\r
+// Definitions for address resolution protocol message structure\r
+// Per RFC 826, November 1982\r
+//\r
+typedef struct {\r
+ UINT16 HwType; // hardware type - e.g. ethernet (1)\r
+ UINT16 ProtType; // protocol type - for ethernet, 0x800 for IP\r
+ UINT8 HwAddLen; // byte length of a hardware address (e.g. 6 for ethernet)\r
+ UINT8 ProtAddLen; // byte length of a protocol address (e.g. 4 for ipv4)\r
+ UINT16 OpCode;\r
+ //\r
+ // source and dest hw and prot addresses follow - see example below\r
+ //\r
+} ARP_HEADER;\r
+\r
+#define ETHERNET_ADD_SPC 1\r
+\r
+#define ETHER_TYPE_IP 0x800\r
+\r
+#define ARP_REQUEST 1\r
+#define ARP_REPLY 2\r
+\r
+//\r
+// generic ARP packet\r
+//\r
+typedef struct {\r
+ ARP_HEADER ArpHeader;\r
+ EFI_MAC_ADDRESS SrcHardwareAddr;\r
+ EFI_IP_ADDRESS SrcProtocolAddr;\r
+ EFI_MAC_ADDRESS DestHardwareAddr;\r
+ EFI_IP_ADDRESS DestProtocolAddr;\r
+} ARP_PACKET;\r
+\r
+#define ENET_HWADDLEN 6\r
+#define IPV4_PROTADDLEN 4\r
+\r
+//\r
+// Definitions for user datagram protocol version 4 pseudo header & header\r
+// Per RFC 768, 28 August 1980\r
+//\r
+typedef struct {\r
+ IPV4_ADDR SrcAddr; // source ip address\r
+ IPV4_ADDR DestAddr; // dest ip address\r
+ UINT8 Zero; // 0\r
+ UINT8 Protocol; // protocol\r
+ UINT16 TotalLength; // UDP length - sizeof udpv4hdr + data length\r
+} UDPV4_PSEUDO_HEADER;\r
+\r
+typedef struct {\r
+ UINT16 SrcPort; // source port identifier\r
+ UINT16 DestPort; // destination port identifier\r
+ UINT16 TotalLength; // total length header plus data\r
+ //\r
+ // ones complement of ones complement sum of 16 bit\r
+ // words of pseudo header, UDP header, and data\r
+ // zero checksum is transmitted as -0 (ones comp)\r
+ // zero transmitted means checksum not computed\r
+ // data follows\r
+ //\r
+ UINT16 Checksum;\r
+} UDPV4_HEADER;\r
+\r
+typedef struct {\r
+ UDPV4_PSEUDO_HEADER Udpv4PseudoHeader;\r
+ UDPV4_HEADER Udpv4Header;\r
+} UDPV4_HEADERS;\r
+\r
+//\r
+// Definitions for transmission control protocol header\r
+// Per RFC 793, September, 1981\r
+//\r
+typedef struct {\r
+ IPV4_ADDR SrcAddr; // source ip address\r
+ IPV4_ADDR DestAddr; // dest ip address\r
+ UINT8 Zero; // 0\r
+ UINT8 Protocol; // protocol\r
+ UINT16 TotalLength; // TCP length - TCP header length + data length\r
+} TCPV4_PSEUDO_HEADER;\r
+\r
+typedef struct {\r
+ UINT16 SrcPort; // source port identifier\r
+ UINT16 DestPort; // destination port identifier\r
+ UINT32 SeqNumber; // Sequence number\r
+ UINT32 AckNumber; // Acknowledgement Number\r
+ //\r
+ // Nibble of HLEN (length of header in 32-bit multiples)\r
+ // 6bits of RESERVED\r
+ // Nibble of Code Bits\r
+ //\r
+ UINT16 HlenResCode;\r
+ UINT16 Window; // Software buffer size (sliding window size) in network-standard byte order\r
+ //\r
+ // ones complement of ones complement sum of 16 bit words of\r
+ // pseudo header, TCP header, and data\r
+ // zero checksum is transmitted as -0 (ones comp)\r
+ // zero transmitted means checksum not computed\r
+ //\r
+ UINT16 Checksum;\r
+ UINT16 UrgentPointer; // pointer to urgent data (allows sender to specify urgent data)\r
+} TCPV4_HEADER;\r
+\r
+typedef struct {\r
+ TCPV4_PSEUDO_HEADER Tcpv4PseudoHeader;\r
+ TCPV4_HEADER Tcpv4Header;\r
+} TCPV4_HEADERS;\r
+\r
+typedef struct {\r
+ UINT8 Kind; // one of the following:\r
+ UINT8 Length; // total option length including Kind and Lth\r
+ UINT8 Data[1]; // length = Lth - 2\r
+} TCPV4_OPTION;\r
+\r
+#define TCP_OP_END 0 // only used to pad to end of TCP header\r
+#define TCP_NOP 1 // optional - may be used to pad between options to get alignment\r
+#define TCP_MAX_SEG 2 // maximum receive segment size - only send at initial connection request\r
+#define MAX_MEDIA_HDR_SIZE 64\r
+#define MIN_ENET_DATA_SIZE 64\r
+#define MAX_ENET_DATA_SIZE 1500 // temp def - make a network based var\r
+#define MAX_IPV4_PKT_SIZE 65535 // maximum IP packet size\r
+#define MAX_IPV4_DATA_SIZE (MAX_IPV4_PKT_SIZE - sizeof (IPV4_HEADER))\r
+#define MAX_IPV4_FRAME_DATA_SIZE (MAX_FRAME_DATA_SIZE - sizeof (IPV4_HEADER))\r
+#define REAS_IPV4_PKT_SIZE 576 // minimum IP packet size all IP host can handle\r
+#define REAS_IPV4_DATA_SIZE (REAS_IPV4_PKT_SIZE - sizeof (IPV4_HEADER))\r
+\r
+//\r
+//\r
+//\r
+typedef union {\r
+ UINT8 Data[MAX_ENET_DATA_SIZE];\r
+ ICMPV4_HEADER IcmpHeader;\r
+ IGMPV2_MESSAGE IgmpMessage;\r
+ struct {\r
+ UDPV4_HEADER UdpHeader;\r
+ UINT8 Data[1];\r
+ } Udp;\r
+ struct {\r
+ TCPV4_HEADER TcpHeader;\r
+ UINT8 Data[1];\r
+ } Tcp;\r
+} PROTOCOL_UNION;\r
+\r
+//\r
+// out buffer structure\r
+//\r
+typedef struct {\r
+ UINT8 MediaHeader[MAX_MEDIA_HDR_SIZE];\r
+ IPV4_HEADER IpHeader;\r
+ //\r
+ // following union placement only valid if no option IP header\r
+ //\r
+ PROTOCOL_UNION u;\r
+} IPV4_BUFFER;\r
+\r
+typedef struct {\r
+ IPV4_HEADER IpHeader;\r
+ //\r
+ // following union placement only valid if no option IP header\r
+ //\r
+ PROTOCOL_UNION u;\r
+} IPV4_STRUCT;\r
+\r
+#pragma pack() // reset to default\r
+\r
+ ////////////////////////////////////////////////////////////\r
+//\r
+// BC IP Filter Routine\r
+//\r
+EFI_STATUS\r
+IpFilter (\r
+ PXE_BASECODE_DEVICE *Private,\r
+ IN EFI_PXE_BASE_CODE_IP_FILTER *Filter\r
+ )\r
+;\r
+\r
+//\r
+// //////////////////////////////////////////////////////////////////////\r
+//\r
+// Udp Write Routine - called by base code - e.g. TFTP - already locked\r
+//\r
+EFI_STATUS\r
+UdpWrite (\r
+ IN PXE_BASECODE_DEVICE *Private,\r
+ IN UINT16 OpFlags,\r
+ IN EFI_IP_ADDRESS *DestIpPtr,\r
+ IN EFI_PXE_BASE_CODE_UDP_PORT *DestPortptr,\r
+ IN EFI_IP_ADDRESS *GatewayIpPtr, OPTIONAL\r
+ IN EFI_IP_ADDRESS *SrcIpPtr, OPTIONAL\r
+ IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPortPtr, OPTIONAL\r
+ IN UINTN *HeaderSizePtr, OPTIONAL\r
+ IN VOID *HeaderPtr, OPTIONAL\r
+ IN UINTN *BufferSizePtr,\r
+ IN VOID *BufferPtr\r
+ )\r
+;\r
+\r
+//\r
+// /////////////////////////////////////////////////////////////////////\r
+//\r
+// Udp Read Routine - called by base code - e.g. TFTP - already locked\r
+//\r
+EFI_STATUS\r
+UdpRead (\r
+ IN PXE_BASECODE_DEVICE *Private,\r
+ IN UINT16 OpFlags,\r
+ IN OUT EFI_IP_ADDRESS *DestIpPtr, OPTIONAL\r
+ IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPorPtrt, OPTIONAL\r
+ IN OUT EFI_IP_ADDRESS *SrcIpPtr, OPTIONAL\r
+ IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPortPtr, OPTIONAL\r
+ IN UINTN *HeaderSizePtr, OPTIONAL\r
+ IN VOID *HeaderPtr, OPTIONAL\r
+ IN OUT UINTN *BufferSizePtr,\r
+ IN VOID *BufferPtr,\r
+ IN EFI_EVENT TimeoutEvent\r
+ )\r
+;\r
+\r
+VOID\r
+IgmpLeaveGroup (\r
+ PXE_BASECODE_DEVICE *Private,\r
+ EFI_IP_ADDRESS *\r
+ )\r
+;\r
+\r
+VOID\r
+IgmpJoinGroup (\r
+ PXE_BASECODE_DEVICE *Private,\r
+ EFI_IP_ADDRESS *\r
+ )\r
+;\r
+\r
+//\r
+// convert number to zero filled ascii value of length lth\r
+//\r
+VOID\r
+CvtNum (\r
+ UINTN Number,\r
+ UINT8 *BufferPtr,\r
+ INTN BufferLen\r
+ )\r
+;\r
+\r
+//\r
+// convert number to ascii string at ptr\r
+//\r
+VOID\r
+UtoA10 (\r
+ UINTN Number,\r
+ UINT8 *BufferPtr\r
+ )\r
+;\r
+\r
+//\r
+// convert ascii numeric string to UINTN\r
+//\r
+UINTN\r
+AtoU (\r
+ UINT8 *BufferPtr\r
+ )\r
+;\r
+\r
+UINT64\r
+AtoU64 (\r
+ UINT8 *BufferPtr\r
+ )\r
+;\r
+\r
+//\r
+// calculate the internet checksum (RFC 1071)\r
+// return 16 bit ones complement of ones complement sum of 16 bit words\r
+//\r
+UINT16\r
+IpChecksum (\r
+ UINT16 *MessagePtr,\r
+ UINTN ByteLength\r
+ )\r
+;\r
+\r
+//\r
+// do checksum on non contiguous header and data\r
+//\r
+UINT16\r
+IpChecksum2 (\r
+ UINT16 *Header,\r
+ UINTN HeaderLength,\r
+ UINT16 *Message,\r
+ UINTN MessageLength\r
+ )\r
+;\r
+\r
+//\r
+// update checksum when only a single word changes\r
+//\r
+UINT16\r
+UpdateChecksum (\r
+ UINT16 OldChecksum,\r
+ UINT16 OldWord,\r
+ UINT16 NewWord\r
+ )\r
+;\r
+\r
+VOID\r
+SeedRandom (\r
+ IN PXE_BASECODE_DEVICE *Private,\r
+ IN UINT16 InitialSeed\r
+ )\r
+;\r
+\r
+UINT16\r
+Random (\r
+ IN PXE_BASECODE_DEVICE *Private\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+SendPacket (\r
+ PXE_BASECODE_DEVICE *Private,\r
+ VOID *HeaderPtr,\r
+ VOID *PacketPtr,\r
+ INTN PacketLength,\r
+ VOID *HardwareAddress,\r
+ UINT16 MediaProtocol,\r
+ IN EFI_PXE_BASE_CODE_FUNCTION Function\r
+ )\r
+;\r
+\r
+VOID\r
+HandleArpReceive (\r
+ PXE_BASECODE_DEVICE *Private,\r
+ ARP_PACKET *ArpPacketPtr,\r
+ VOID *HeaderPtr\r
+ )\r
+;\r
+\r
+VOID\r
+HandleIgmp (\r
+ PXE_BASECODE_DEVICE *Private,\r
+ IGMPV2_MESSAGE *IgmpMessageptr,\r
+ UINTN IgmpMessageLen\r
+ )\r
+;\r
+\r
+VOID\r
+IgmpCheckTimers (\r
+ PXE_BASECODE_DEVICE *Private\r
+ )\r
+; // poll when doing a receive\r
+// return hw add of IP and TRUE if available, otherwise FALSE\r
+//\r
+BOOLEAN\r
+GetHwAddr (\r
+ IN PXE_BASECODE_DEVICE *Private,\r
+ EFI_IP_ADDRESS *ProtocolAddressPtr,\r
+ EFI_MAC_ADDRESS *HardwareAddressPtr\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+DoArp (\r
+ IN PXE_BASECODE_DEVICE *Private,\r
+ IN EFI_IP_ADDRESS *ProtocolAddressPtr,\r
+ OUT EFI_MAC_ADDRESS *HardwareAddressptr\r
+ )\r
+;\r
+\r
+BOOLEAN\r
+OnSameSubnet (\r
+ UINTN IpAddressLen,\r
+ EFI_IP_ADDRESS *Ip1,\r
+ EFI_IP_ADDRESS *Ip2,\r
+ EFI_IP_ADDRESS *SubnetMask\r
+ )\r
+;\r
+\r
+VOID\r
+IpAddRouter (\r
+ PXE_BASECODE_DEVICE *Private,\r
+ EFI_IP_ADDRESS *RouterIp\r
+ )\r
+;\r
+\r
+#define Ip4AddRouter(Private, Ipv4Ptr) IpAddRouter (Private, (EFI_IP_ADDRESS *) Ipv4Ptr)\r
+\r
+//\r
+// routine to send ipv4 packet\r
+// ipv4 + upper protocol header for length TotHdrLth in xmtbuf, ipv4 header length IpHdrLth\r
+// routine fills in ipv4hdr Ver_Hdl, TotLth, and Checksum, moves in Data, and gets dest MAC address\r
+//\r
+EFI_STATUS\r
+Ipv4Xmt (\r
+ PXE_BASECODE_DEVICE *Private,\r
+ UINT32 GatewayIP,\r
+ UINTN IpHeaderLen,\r
+ UINTN TotalHeaderLen,\r
+ VOID *Data,\r
+ UINTN DataLen,\r
+ EFI_PXE_BASE_CODE_FUNCTION Function\r
+ )\r
+;\r
+\r
+//\r
+// send ipv4 packet with ipv4 option\r
+//\r
+EFI_STATUS\r
+Ipv4SendWOp (\r
+ PXE_BASECODE_DEVICE *Private,\r
+ UINT32 GatewayIP,\r
+ UINT8 *MessagePtr,\r
+ UINTN MessageLth,\r
+ UINT8 Protocol,\r
+ UINT8 *Option,\r
+ UINTN OptionLen,\r
+ UINT32 DestIp,\r
+ EFI_PXE_BASE_CODE_FUNCTION Function\r
+ )\r
+;\r
+\r
+//\r
+// send MsgLth message at MsgPtr - higher level protocol header already in xmtbuf, length HdrSize\r
+//\r
+EFI_STATUS\r
+Ip4Send (\r
+ IN PXE_BASECODE_DEVICE *Private, // pointer to instance data\r
+ IN UINTN MayFragment, //\r
+ IN UINT8 Protocol, // protocol\r
+ IN UINT32 SrcIp, // Source IP address\r
+ IN UINT32 DestIp, // Destination IP address\r
+ IN UINT32 GatewayIp, // used if not NULL and needed\r
+ IN UINTN HeaderSize, // protocol header byte length\r
+ IN UINT8 *MsgPtr, // pointer to data\r
+ IN UINTN MsgLength\r
+ )\r
+; // data byte length\r
+// receive up to MsgLth message into MsgPtr for protocol Prot\r
+// return message length, src/dest ips if select any, and pointer to protocol header\r
+//\r
+EFI_STATUS\r
+IpReceive (\r
+ IN PXE_BASECODE_DEVICE *Private, // pointer to instance data\r
+ UINT16 OpFlags, // Flags to determine if filtering on IP addresses\r
+ EFI_IP_ADDRESS *SrcIpPtr, // if filtering, O if accept any\r
+ EFI_IP_ADDRESS *DstIpPtr, // if filtering, O if accept any\r
+ UINT8 Protocol, // protocol\r
+ VOID *HeaderPtr, // address of where to put protocol header\r
+ UINTN HeaderSize, // protocol header byte length\r
+ UINT8 *MsgPtr, // pointer to data buffer\r
+ UINTN *MsgLenPtr, // pointer to data buffer length/ O - returned data length\r
+ IN EFI_EVENT TimeoutEvent\r
+ )\r
+;\r
+\r
+#if 0\r
+VOID\r
+WaitForTxComplete (\r
+ IN PXE_BASECODE_DEVICE *Private\r
+ )\r
+;\r
+#endif\r
+//\r
+// routine to cycle waiting for a receive or timeout\r
+//\r
+EFI_STATUS\r
+WaitForReceive (\r
+ IN PXE_BASECODE_DEVICE *Private,\r
+ IN EFI_PXE_BASE_CODE_FUNCTION Function,\r
+ IN EFI_EVENT TimeoutEvent,\r
+ IN OUT UINTN *HeaderSizePtr,\r
+ IN OUT UINTN *BufferSizePtr,\r
+ IN OUT UINT16 *ProtocolPtr\r
+ )\r
+;\r
+\r
+#endif /* _IP_H_ */\r
+\r
+/* EOF - ip.h */\r
-/** @file
-
-Copyright (c) 2006, 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:
- PxeArch.h
-
-Abstract:
- Defines PXE Arch type
-
-
-**/
-
-#ifndef _EFI_PXE_ARCH_H_
-#define _EFI_PXE_ARCH_H_
-
-#define SYS_ARCH 0x2
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2006, 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
+ PxeArch.h\r
+\r
+Abstract:\r
+ Defines PXE Arch type\r
+\r
+\r
+**/\r
+\r
+#ifndef _EFI_PXE_ARCH_H_\r
+#define _EFI_PXE_ARCH_H_\r
+\r
+#define SYS_ARCH 0x2\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2004, 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:
- tftp.h
-
-Abstract:
-
-
-**/
-
-#ifndef __TFTP_H__
-#define __TFTP_H__
-
-//
-// Definitions for trivial file transfer protocol functionality with IP v4
-// Per RFC 1350, July 1992 and RFC 2347, 8, and 9, May 1998
-//
-#pragma pack(1)
-//
-// max and min packet sizes
-// (all data packets in transmission except last)
-//
-#define MAX_TFTP_PKT_SIZE (BUFFER_ALLOCATE_SIZE - 512)
-#define MIN_TFTP_PKT_SIZE 512
-
-//
-// TFTPv4 OpCodes
-//
-#define TFTP_RRQ 1 // read request
-#define TFTP_WRQ 2 // write request
-#define TFTP_DATA 3 // data
-#define TFTP_ACK 4 // acknowledgement
-#define TFTP_ERROR 5 // error packet
-#define TFTP_OACK 6 // option acknowledge
-#define TFTP_DIR 7 // read directory request
-#define TFTP_DATA8 8
-#define TFTP_ACK8 9
-
-//
-// request packet (read or write)
-// Fields shown (except file name) are not to be referenced directly,
-// since their placement is variable within a request packet.
-// All are null terminated case insensitive ascii strings.
-//
-struct Tftpv4Req {
- UINT16 OpCode; // TFTP Op code
- UINT8 FileName[2]; // file name
- UINT8 Mode[2]; // "netascii" or "octet"
- struct { // optionally, one or more option requests
- UINT8 Option[2]; // option name
- UINT8 Value[2]; // value requested
- } OpReq[1];
-};
-
-//
-// modes
-//
-#define MODE_ASCII "netascii"
-#define MODE_BINARY "octet"
-
-//
-// option strings
-//
-#define OP_BLKSIZE "blksize" // block size option
-#define OP_TIMEOUT "timeout" // time to wait before retransmitting
-#define OP_TFRSIZE "tsize" // total transfer size option
-#define OP_OVERWRITE "overwrite" // overwrite file option
-#define OP_BIGBLKNUM "bigblk#" // big block number
-// See RFC 2347, 8, and 9 for more information on TFTP options
-// option acknowledge packet (optional)
-// options not acknowledged are rejected
-//
-struct Tftpv4Oack {
- UINT16 OpCode; // TFTP Op code
- struct { // optionally, one or more option acknowledgements
- UINT8 Option[2]; // option name (of those requested)
- UINT8 Value[2]; // value acknowledged
- } OpAck[1];
-};
-
-//
-// acknowledge packet
-//
-struct Tftpv4Ack {
- UINT16 OpCode; // TFTP Op code
- UINT16 BlockNum;
-};
-
-//
-// data packet
-//
-struct Tftpv4Data {
- struct Tftpv4Ack Header;
- UINT8 Data[512];
-};
-
-//
-// big block number ack packet
-//
-struct Tftpv4Ack8 {
- UINT16 OpCode;
- UINT64 BlockNum;
-};
-
-//
-// big block number data packet
-//
-struct Tftpv4Data8 {
- struct Tftpv4Ack8 Header;
- UINT8 Data[506];
-};
-
-//
-// error packet
-//
-struct Tftpv4Error {
- UINT16 OpCode; // TFTP Op code
- UINT16 ErrCode; // error code
- UINT8 ErrMsg[1]; // error message (nul terminated)
-};
-
-#pragma pack()
-//
-// error codes
-//
-#define TFTP_ERR_UNDEF 0 // Not defined, see error message (if any).
-#define TFTP_ERR_NOT_FOUND 1 // File not found.
-#define TFTP_ERR_ACCESS 2 // Access violation.
-#define TFTP_ERR_FULL 3 // Disk full or allocation exceeded.
-#define TFTP_ERR_ILLEGAL 4 // Illegal TFTP operation.
-#define TFTP_ERR_BAD_ID 5 // Unknown transfer ID.
-#define TFTP_ERR_EXISTS 6 // File already exists.
-#define TFTP_ERR_NO_USER 7 // No such user.
-#define TFTP_ERR_OPTION 8 // Option negotiation termination
-//
-// some defines
-//
-#define REQ_RESP_TIMEOUT 5 // Wait five seconds for request response.
-#define ACK_TIMEOUT 4 // Wait four seconds for ack response.
-#define NUM_ACK_RETRIES 3
-#define NUM_MTFTP_OPEN_RETRIES 3
-
-#endif /* __TFTP_H__ */
-
-/* EOF - tftp.h */
+/** @file\r
+\r
+Copyright (c) 2004, 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
+ tftp.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef __TFTP_H__\r
+#define __TFTP_H__\r
+\r
+//\r
+// Definitions for trivial file transfer protocol functionality with IP v4\r
+// Per RFC 1350, July 1992 and RFC 2347, 8, and 9, May 1998\r
+//\r
+#pragma pack(1)\r
+//\r
+// max and min packet sizes\r
+// (all data packets in transmission except last)\r
+//\r
+#define MAX_TFTP_PKT_SIZE (BUFFER_ALLOCATE_SIZE - 512)\r
+#define MIN_TFTP_PKT_SIZE 512\r
+\r
+//\r
+// TFTPv4 OpCodes\r
+//\r
+#define TFTP_RRQ 1 // read request\r
+#define TFTP_WRQ 2 // write request\r
+#define TFTP_DATA 3 // data\r
+#define TFTP_ACK 4 // acknowledgement\r
+#define TFTP_ERROR 5 // error packet\r
+#define TFTP_OACK 6 // option acknowledge\r
+#define TFTP_DIR 7 // read directory request\r
+#define TFTP_DATA8 8\r
+#define TFTP_ACK8 9\r
+\r
+//\r
+// request packet (read or write)\r
+// Fields shown (except file name) are not to be referenced directly,\r
+// since their placement is variable within a request packet.\r
+// All are null terminated case insensitive ascii strings.\r
+//\r
+struct Tftpv4Req {\r
+ UINT16 OpCode; // TFTP Op code\r
+ UINT8 FileName[2]; // file name\r
+ UINT8 Mode[2]; // "netascii" or "octet"\r
+ struct { // optionally, one or more option requests\r
+ UINT8 Option[2]; // option name\r
+ UINT8 Value[2]; // value requested\r
+ } OpReq[1];\r
+};\r
+\r
+//\r
+// modes\r
+//\r
+#define MODE_ASCII "netascii"\r
+#define MODE_BINARY "octet"\r
+\r
+//\r
+// option strings\r
+//\r
+#define OP_BLKSIZE "blksize" // block size option\r
+#define OP_TIMEOUT "timeout" // time to wait before retransmitting\r
+#define OP_TFRSIZE "tsize" // total transfer size option\r
+#define OP_OVERWRITE "overwrite" // overwrite file option\r
+#define OP_BIGBLKNUM "bigblk#" // big block number\r
+// See RFC 2347, 8, and 9 for more information on TFTP options\r
+// option acknowledge packet (optional)\r
+// options not acknowledged are rejected\r
+//\r
+struct Tftpv4Oack {\r
+ UINT16 OpCode; // TFTP Op code\r
+ struct { // optionally, one or more option acknowledgements\r
+ UINT8 Option[2]; // option name (of those requested)\r
+ UINT8 Value[2]; // value acknowledged\r
+ } OpAck[1];\r
+};\r
+\r
+//\r
+// acknowledge packet\r
+//\r
+struct Tftpv4Ack {\r
+ UINT16 OpCode; // TFTP Op code\r
+ UINT16 BlockNum;\r
+};\r
+\r
+//\r
+// data packet\r
+//\r
+struct Tftpv4Data {\r
+ struct Tftpv4Ack Header;\r
+ UINT8 Data[512];\r
+};\r
+\r
+//\r
+// big block number ack packet\r
+//\r
+struct Tftpv4Ack8 {\r
+ UINT16 OpCode;\r
+ UINT64 BlockNum;\r
+};\r
+\r
+//\r
+// big block number data packet\r
+//\r
+struct Tftpv4Data8 {\r
+ struct Tftpv4Ack8 Header;\r
+ UINT8 Data[506];\r
+};\r
+\r
+//\r
+// error packet\r
+//\r
+struct Tftpv4Error {\r
+ UINT16 OpCode; // TFTP Op code\r
+ UINT16 ErrCode; // error code\r
+ UINT8 ErrMsg[1]; // error message (nul terminated)\r
+};\r
+\r
+#pragma pack()\r
+//\r
+// error codes\r
+//\r
+#define TFTP_ERR_UNDEF 0 // Not defined, see error message (if any).\r
+#define TFTP_ERR_NOT_FOUND 1 // File not found.\r
+#define TFTP_ERR_ACCESS 2 // Access violation.\r
+#define TFTP_ERR_FULL 3 // Disk full or allocation exceeded.\r
+#define TFTP_ERR_ILLEGAL 4 // Illegal TFTP operation.\r
+#define TFTP_ERR_BAD_ID 5 // Unknown transfer ID.\r
+#define TFTP_ERR_EXISTS 6 // File already exists.\r
+#define TFTP_ERR_NO_USER 7 // No such user.\r
+#define TFTP_ERR_OPTION 8 // Option negotiation termination\r
+//\r
+// some defines\r
+//\r
+#define REQ_RESP_TIMEOUT 5 // Wait five seconds for request response.\r
+#define ACK_TIMEOUT 4 // Wait four seconds for ack response.\r
+#define NUM_ACK_RETRIES 3\r
+#define NUM_MTFTP_OPEN_RETRIES 3\r
+\r
+#endif /* __TFTP_H__ */\r
+\r
+/* EOF - tftp.h */\r
-/** @file
-
-Copyright (c) 2006, 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:
- PxeArch.h
-
-Abstract:
- Defines PXE Arch type
-
-
-**/
-
-#ifndef _EFI_PXE_ARCH_H_
-#define _EFI_PXE_ARCH_H_
-
-#define SYS_ARCH 0x7
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2006, 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
+ PxeArch.h\r
+\r
+Abstract:\r
+ Defines PXE Arch type\r
+\r
+\r
+**/\r
+\r
+#ifndef _EFI_PXE_ARCH_H_\r
+#define _EFI_PXE_ARCH_H_\r
+\r
+#define SYS_ARCH 0x7\r
+\r
+#endif\r
//\r
// EFI Component Name Functions\r
//\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
PxeDhcp4ComponentNameGetDriverName (\r
OUT CHAR16 **DriverName\r
);\r
\r
+\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
PxeDhcp4ComponentNameGetControllerName (\r
OUT CHAR16 **ControllerName\r
);\r
\r
+\r
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
\r
//\r
// EFI Component Name Protocol\r
//\r
-EFI_COMPONENT_NAME_PROTOCOL gPxeDhcp4ComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL gPxeDhcp4ComponentName = {\r
PxeDhcp4ComponentNameGetDriverName,\r
PxeDhcp4ComponentNameGetControllerName,\r
"eng"\r
-};\r
+ };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gPxeDhcp4ComponentName2 = {\r
+ (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) PxeDhcp4ComponentNameGetDriverName,\r
+ (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) PxeDhcp4ComponentNameGetControllerName,\r
+ "en"\r
+ };\r
+\r
\r
static EFI_UNICODE_STRING_TABLE mPxeDhcp4DriverNameTable[] = {\r
{\r
- "eng",\r
+ "eng;en",\r
L"PXE DHCPv4 Driver"\r
},\r
{\r
}\r
};\r
\r
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
PxeDhcp4ComponentNameGetDriverName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **DriverName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- Language - A pointer to a three character ISO 639-2 language identifier.\r
- This is the language of the driver name that that the caller\r
- is requesting, and it must match one of the languages specified\r
- in SupportedLanguages. The number of languages supported by a\r
- driver is up to the driver writer.\r
- DriverName - A pointer to the Unicode string to return. This Unicode string\r
- is the name of the driver specified by This in the language\r
- specified by Language.\r
-\r
- Returns:\r
- EFI_SUCCESS - The Unicode string for the Driver specified by This\r
- and the language specified by Language was returned\r
- in DriverName.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - DriverName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
- return LookupUnicodeString (\r
- Language,\r
- gPxeDhcp4ComponentName.SupportedLanguages,\r
- mPxeDhcp4DriverNameTable,\r
- DriverName\r
- );\r
+ return LookupUnicodeString2 (\r
+ Language,\r
+ This->SupportedLanguages,\r
+ mPxeDhcp4DriverNameTable,\r
+ DriverName,\r
+ (BOOLEAN)(This == &gPxeDhcp4ComponentName)\r
+ );\r
}\r
\r
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
PxeDhcp4ComponentNameGetControllerName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **ControllerName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the controller\r
- that is being managed by an EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- ControllerHandle - The handle of a controller that the driver specified by\r
- This is managing. This handle specifies the controller\r
- whose name is to be returned.\r
- ChildHandle - The handle of the child controller to retrieve the name\r
- of. This is an optional parameter that may be NULL. It\r
- will be NULL for device drivers. It will also be NULL\r
- for a bus drivers that wish to retrieve the name of the\r
- bus controller. It will not be NULL for a bus driver\r
- that wishes to retrieve the name of a child controller.\r
- Language - A pointer to a three character ISO 639-2 language\r
- identifier. This is the language of the controller name\r
- that that the caller is requesting, and it must match one\r
- of the languages specified in SupportedLanguages. The\r
- number of languages supported by a driver is up to the\r
- driver writer.\r
- ControllerName - A pointer to the Unicode string to return. This Unicode\r
- string is the name of the controller specified by\r
- ControllerHandle and ChildHandle in the language specified\r
- by Language from the point of view of the driver specified\r
- by This.\r
-\r
- Returns:\r
- EFI_SUCCESS - The Unicode string for the user readable name in the\r
- language specified by Language for the driver\r
- specified by This was returned in DriverName.\r
- EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - ControllerName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This is not currently managing\r
- the controller specified by ControllerHandle and\r
- ChildHandle.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
return EFI_UNSUPPORTED;\r
}\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- return EfiLibInstallAllDriverProtocols (\r
- ImageHandle,\r
- SystemTable,\r
- &gPxeDhcp4DriverBinding,\r
- NULL,\r
- &gPxeDhcp4ComponentName,\r
- NULL,\r
- NULL\r
- );\r
+ return EfiLibInstallDriverBindingComponentName2 (\r
+ ImageHandle,\r
+ SystemTable,\r
+ &gPxeDhcp4DriverBinding,\r
+ NULL,\r
+ &gPxeDhcp4ComponentName,\r
+ &gPxeDhcp4ComponentName2\r
+ );\r
}\r
\r
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
-/** @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:
- PxeDhcp4.h
-
-Abstract:
- Common header for PxeDhcp4 protocol driver
-
-
-**/
-#ifndef _PXEDHCP4_H
-#define _PXEDHCP4_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
+ PxeDhcp4.h\r
+\r
+Abstract:\r
+ Common header for PxeDhcp4 protocol driver\r
+\r
+\r
+**/\r
+#ifndef _PXEDHCP4_H\r
+#define _PXEDHCP4_H\r
+\r
\r
#include <PiDxe.h>\r
\r
#include <Protocol/PxeBaseCode.h>\r
-#include <Protocol/SimpleNetwork.h>
-#include <Protocol/PxeDhcp4.h>
+#include <Protocol/SimpleNetwork.h>\r
+#include <Protocol/PxeDhcp4.h>\r
#include <Protocol/PxeDhcp4Callback.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/UefiLib.h>
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
-//
-// PxeDhcp4 protocol instance data
-//
-typedef struct {
- //
- // Signature field used to locate beginning of containment record.
- //
- UINTN Signature;
-
-#define PXE_DHCP4_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('p', 'x', 'D', '4')
- //
- // Device handle the protocol is bound to.
- //
- EFI_HANDLE Handle;
-
- //
- // Public PxeDhcp4 protocol interface.
- //
- EFI_PXE_DHCP4_PROTOCOL PxeDhcp4;
-
- //
- // Consumed PxeBc, Snp and PxeDhcp4Callback protocol interfaces.
- //
- EFI_PXE_BASE_CODE_PROTOCOL *PxeBc;
- EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
- EFI_PXE_DHCP4_CALLBACK_PROTOCOL *callback;
-
- //
- // PxeDhcp4 called function for PxeDhcp4Callback.
- //
- EFI_PXE_DHCP4_FUNCTION function;
-
- //
- // Timeout event and flag for PxeDhcp4Callback.
- //
- EFI_EVENT TimeoutEvent;
- BOOLEAN TimeoutOccurred;
-
- //
- // Periodic event and flag for PxeDhcp4Callback.
- //
- EFI_EVENT PeriodicEvent;
- BOOLEAN PeriodicOccurred;
-
- //
- // DHCP server IP address.
- //
- UINT32 ServerIp;
-
- //
- // DHCP renewal and rebinding times, in seconds.
- //
- UINT32 RenewTime;
- UINT32 RebindTime;
- UINT32 LeaseTime;
-
- //
- // Number of offers received & allocated offer list.
- //
- UINTN offers;
- DHCP4_PACKET *offer_list;
-
- //
- //
- //
- BOOLEAN StopPxeBc;
-
-} PXE_DHCP4_PRIVATE_DATA;
-
-#define PXE_DHCP4_PRIVATE_DATA_FROM_THIS(a) CR (a, PXE_DHCP4_PRIVATE_DATA, PxeDhcp4, PXE_DHCP4_PRIVATE_DATA_SIGNATURE)
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
-//
-// Protocol function prototypes.
-//
-extern
-EFI_STATUS
-EFIAPI
-PxeDhcp4Run (
- IN EFI_PXE_DHCP4_PROTOCOL *This,
- IN OPTIONAL UINTN OpLen,
- IN OPTIONAL VOID *OpList
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-PxeDhcp4Setup (
- IN EFI_PXE_DHCP4_PROTOCOL *This,
- IN EFI_PXE_DHCP4_DATA *Data
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-PxeDhcp4Init (
- IN EFI_PXE_DHCP4_PROTOCOL *This,
- IN UINTN seconds_timeout,
- OUT UINTN *offer_list_entries,
- OUT DHCP4_PACKET **offer_list
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-PxeDhcp4Select (
- IN EFI_PXE_DHCP4_PROTOCOL *This,
- IN UINTN seconds_timeout,
- IN DHCP4_PACKET *offer_list
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-PxeDhcp4Renew (
- IN EFI_PXE_DHCP4_PROTOCOL *This,
- UINTN seconds_timeout
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-PxeDhcp4Rebind (
- IN EFI_PXE_DHCP4_PROTOCOL *This,
- UINTN seconds_timeout
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-PxeDhcp4Release (
- IN EFI_PXE_DHCP4_PROTOCOL *This
- )
-;
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
-//
-// Support function prototypes.
-//
-extern
-UINT16
-htons (
- UINTN n
- )
-;
-
-extern
-UINT32
-htonl (
- UINTN n
- )
-;
-
-extern
-VOID
-EFIAPI
-timeout_notify (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-;
-
-extern
-VOID
-EFIAPI
-periodic_notify (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-;
-
-extern
-EFI_STATUS
-find_opt (
- IN DHCP4_PACKET *Packet,
- IN UINT8 OpCode,
- IN UINTN Skip,
- OUT DHCP4_OP **OpPtr
- )
-;
-
-extern
-EFI_STATUS
-add_opt (
- IN DHCP4_PACKET *Packet,
- IN DHCP4_OP *OpPtr
- )
-;
-
-extern
-EFI_STATUS
-start_udp (
- IN PXE_DHCP4_PRIVATE_DATA *Private,
- IN OPTIONAL EFI_IP_ADDRESS *station_ip,
- IN OPTIONAL EFI_IP_ADDRESS *subnet_mask
- )
-;
-
-extern
-VOID
-stop_udp (
- IN PXE_DHCP4_PRIVATE_DATA *Private
- )
-;
-
-extern
-EFI_STATUS
-start_receive_events (
- IN PXE_DHCP4_PRIVATE_DATA *Private,
- IN UINTN seconds_timeout
- )
-;
-
-extern
-VOID
-stop_receive_events (
- IN PXE_DHCP4_PRIVATE_DATA *Private
- )
-;
-
-extern
-EFI_STATUS
-tx_udp (
- IN PXE_DHCP4_PRIVATE_DATA *Private,
- IN EFI_IP_ADDRESS *dest_ip,
- IN OPTIONAL EFI_IP_ADDRESS *gateway_ip,
- IN EFI_IP_ADDRESS *src_ip,
- IN VOID *buffer,
- IN UINTN BufferSize
- )
-;
-
-extern
-EFI_STATUS
-rx_udp (
- IN PXE_DHCP4_PRIVATE_DATA *Private,
- OUT VOID *buffer,
- OUT UINTN *BufferSize,
- IN OUT EFI_IP_ADDRESS *dest_ip,
- IN OUT EFI_IP_ADDRESS *src_ip,
- IN UINT16 op_flags
- )
-;
-
-extern
-EFI_STATUS
-tx_rx_udp (
- IN PXE_DHCP4_PRIVATE_DATA *Private,
- IN OUT EFI_IP_ADDRESS *ServerIp,
- IN OPTIONAL EFI_IP_ADDRESS *gateway_ip,
- IN OPTIONAL EFI_IP_ADDRESS *client_ip,
- IN OPTIONAL EFI_IP_ADDRESS *subnet_mask,
- IN DHCP4_PACKET *tx_pkt,
- OUT DHCP4_PACKET *rx_pkt,
- IN INTN
- (
- *rx_vfy)
- (
- IN PXE_DHCP4_PRIVATE_DATA *Private,
- IN DHCP4_PACKET *tx_pkt,
- IN DHCP4_PACKET *rx_pkt,
- IN UINTN rx_pkt_size
- ),
- IN UINTN seconds_timeout
- )
-;
-
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
-
-//
-// Global variable definitions.
-//
-extern EFI_COMPONENT_NAME_PROTOCOL gPxeDhcp4ComponentName;
-
-EFI_STATUS
-EFIAPI
-PxeDhcp4DriverEntryPoint (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-/*++
-
-Routine Description:
- Register Driver Binding protocol for this driver.
-
-Arguments:
- (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
-
-Returns:
- EFI_SUCCESS - Driver loaded.
- other - Driver not loaded.
-
---*/
-;
-
-#endif /* _PXEDHCP4_H */
-
-/* EOF - PxeDhcp4.h */
+#include <Library/UefiLib.h>\r
+\r
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
+\r
+//\r
+// PxeDhcp4 protocol instance data\r
+//\r
+typedef struct {\r
+ //\r
+ // Signature field used to locate beginning of containment record.\r
+ //\r
+ UINTN Signature;\r
+\r
+#define PXE_DHCP4_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('p', 'x', 'D', '4')\r
+ //\r
+ // Device handle the protocol is bound to.\r
+ //\r
+ EFI_HANDLE Handle;\r
+\r
+ //\r
+ // Public PxeDhcp4 protocol interface.\r
+ //\r
+ EFI_PXE_DHCP4_PROTOCOL PxeDhcp4;\r
+\r
+ //\r
+ // Consumed PxeBc, Snp and PxeDhcp4Callback protocol interfaces.\r
+ //\r
+ EFI_PXE_BASE_CODE_PROTOCOL *PxeBc;\r
+ EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
+ EFI_PXE_DHCP4_CALLBACK_PROTOCOL *callback;\r
+\r
+ //\r
+ // PxeDhcp4 called function for PxeDhcp4Callback.\r
+ //\r
+ EFI_PXE_DHCP4_FUNCTION function;\r
+\r
+ //\r
+ // Timeout event and flag for PxeDhcp4Callback.\r
+ //\r
+ EFI_EVENT TimeoutEvent;\r
+ BOOLEAN TimeoutOccurred;\r
+\r
+ //\r
+ // Periodic event and flag for PxeDhcp4Callback.\r
+ //\r
+ EFI_EVENT PeriodicEvent;\r
+ BOOLEAN PeriodicOccurred;\r
+\r
+ //\r
+ // DHCP server IP address.\r
+ //\r
+ UINT32 ServerIp;\r
+\r
+ //\r
+ // DHCP renewal and rebinding times, in seconds.\r
+ //\r
+ UINT32 RenewTime;\r
+ UINT32 RebindTime;\r
+ UINT32 LeaseTime;\r
+\r
+ //\r
+ // Number of offers received & allocated offer list.\r
+ //\r
+ UINTN offers;\r
+ DHCP4_PACKET *offer_list;\r
+\r
+ //\r
+ //\r
+ //\r
+ BOOLEAN StopPxeBc;\r
+\r
+} PXE_DHCP4_PRIVATE_DATA;\r
+\r
+#define PXE_DHCP4_PRIVATE_DATA_FROM_THIS(a) CR (a, PXE_DHCP4_PRIVATE_DATA, PxeDhcp4, PXE_DHCP4_PRIVATE_DATA_SIGNATURE)\r
+\r
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
+\r
+//\r
+// Protocol function prototypes.\r
+//\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+PxeDhcp4Run (\r
+ IN EFI_PXE_DHCP4_PROTOCOL *This,\r
+ IN OPTIONAL UINTN OpLen,\r
+ IN OPTIONAL VOID *OpList\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+PxeDhcp4Setup (\r
+ IN EFI_PXE_DHCP4_PROTOCOL *This,\r
+ IN EFI_PXE_DHCP4_DATA *Data\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+PxeDhcp4Init (\r
+ IN EFI_PXE_DHCP4_PROTOCOL *This,\r
+ IN UINTN seconds_timeout,\r
+ OUT UINTN *offer_list_entries,\r
+ OUT DHCP4_PACKET **offer_list\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+PxeDhcp4Select (\r
+ IN EFI_PXE_DHCP4_PROTOCOL *This,\r
+ IN UINTN seconds_timeout,\r
+ IN DHCP4_PACKET *offer_list\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+PxeDhcp4Renew (\r
+ IN EFI_PXE_DHCP4_PROTOCOL *This,\r
+ UINTN seconds_timeout\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+PxeDhcp4Rebind (\r
+ IN EFI_PXE_DHCP4_PROTOCOL *This,\r
+ UINTN seconds_timeout\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+PxeDhcp4Release (\r
+ IN EFI_PXE_DHCP4_PROTOCOL *This\r
+ )\r
+;\r
+\r
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
+\r
+//\r
+// Support function prototypes.\r
+//\r
+extern\r
+UINT16 \r
+htons (\r
+ UINTN n\r
+ )\r
+;\r
+\r
+extern\r
+UINT32 \r
+htonl (\r
+ UINTN n\r
+ )\r
+;\r
+\r
+extern\r
+VOID \r
+EFIAPI\r
+timeout_notify (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ )\r
+;\r
+\r
+extern\r
+VOID \r
+EFIAPI\r
+periodic_notify (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+find_opt (\r
+ IN DHCP4_PACKET *Packet,\r
+ IN UINT8 OpCode,\r
+ IN UINTN Skip,\r
+ OUT DHCP4_OP **OpPtr\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+add_opt (\r
+ IN DHCP4_PACKET *Packet,\r
+ IN DHCP4_OP *OpPtr\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+start_udp (\r
+ IN PXE_DHCP4_PRIVATE_DATA *Private,\r
+ IN OPTIONAL EFI_IP_ADDRESS *station_ip,\r
+ IN OPTIONAL EFI_IP_ADDRESS *subnet_mask\r
+ )\r
+;\r
+\r
+extern\r
+VOID \r
+stop_udp (\r
+ IN PXE_DHCP4_PRIVATE_DATA *Private\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+start_receive_events (\r
+ IN PXE_DHCP4_PRIVATE_DATA *Private,\r
+ IN UINTN seconds_timeout\r
+ )\r
+;\r
+\r
+extern\r
+VOID \r
+stop_receive_events (\r
+ IN PXE_DHCP4_PRIVATE_DATA *Private\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+tx_udp (\r
+ IN PXE_DHCP4_PRIVATE_DATA *Private,\r
+ IN EFI_IP_ADDRESS *dest_ip,\r
+ IN OPTIONAL EFI_IP_ADDRESS *gateway_ip,\r
+ IN EFI_IP_ADDRESS *src_ip,\r
+ IN VOID *buffer,\r
+ IN UINTN BufferSize\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+rx_udp (\r
+ IN PXE_DHCP4_PRIVATE_DATA *Private,\r
+ OUT VOID *buffer,\r
+ OUT UINTN *BufferSize,\r
+ IN OUT EFI_IP_ADDRESS *dest_ip,\r
+ IN OUT EFI_IP_ADDRESS *src_ip,\r
+ IN UINT16 op_flags\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+tx_rx_udp (\r
+ IN PXE_DHCP4_PRIVATE_DATA *Private,\r
+ IN OUT EFI_IP_ADDRESS *ServerIp,\r
+ IN OPTIONAL EFI_IP_ADDRESS *gateway_ip,\r
+ IN OPTIONAL EFI_IP_ADDRESS *client_ip,\r
+ IN OPTIONAL EFI_IP_ADDRESS *subnet_mask,\r
+ IN DHCP4_PACKET *tx_pkt,\r
+ OUT DHCP4_PACKET *rx_pkt,\r
+ IN INTN\r
+ (\r
+ *rx_vfy)\r
+ (\r
+ IN PXE_DHCP4_PRIVATE_DATA *Private,\r
+ IN DHCP4_PACKET *tx_pkt,\r
+ IN DHCP4_PACKET *rx_pkt,\r
+ IN UINTN rx_pkt_size\r
+ ),\r
+ IN UINTN seconds_timeout\r
+ )\r
+;\r
+\r
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
+\r
+//\r
+// Global variable definitions.\r
+//\r
+extern EFI_COMPONENT_NAME_PROTOCOL gPxeDhcp4ComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gPxeDhcp4ComponentName2;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+PxeDhcp4DriverEntryPoint (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+ Register Driver Binding protocol for this driver.\r
+\r
+Arguments:\r
+ (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)\r
+\r
+Returns:\r
+ EFI_SUCCESS - Driver loaded.\r
+ other - Driver not loaded.\r
+\r
+--*/\r
+;\r
+\r
+#endif /* _PXEDHCP4_H */\r
+\r
+/* EOF - PxeDhcp4.h */\r
//\r
// EFI Component Name Functions\r
//\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
SimpleNetworkComponentNameGetDriverName (\r
OUT CHAR16 **DriverName\r
);\r
\r
+\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
SimpleNetworkComponentNameGetControllerName (\r
OUT CHAR16 **ControllerName\r
);\r
\r
+\r
//\r
// EFI Component Name Protocol\r
//\r
-EFI_COMPONENT_NAME_PROTOCOL gSimpleNetworkComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL gSimpleNetworkComponentName = {\r
SimpleNetworkComponentNameGetDriverName,\r
SimpleNetworkComponentNameGetControllerName,\r
"eng"\r
-};\r
+ };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gSimpleNetworkComponentName2 = {\r
+ (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) SimpleNetworkComponentNameGetDriverName,\r
+ (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) SimpleNetworkComponentNameGetControllerName,\r
+ "en"\r
+ };\r
+\r
\r
static EFI_UNICODE_STRING_TABLE mSimpleNetworkDriverNameTable[] = {\r
{\r
- "eng",\r
+ "eng;en",\r
L"Simple Network Protocol Driver"\r
},\r
{\r
}\r
};\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
SimpleNetworkComponentNameGetDriverName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **DriverName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- Language - A pointer to a three character ISO 639-2 language identifier.\r
- This is the language of the driver name that that the caller\r
- is requesting, and it must match one of the languages specified\r
- in SupportedLanguages. The number of languages supported by a\r
- driver is up to the driver writer.\r
- DriverName - A pointer to the Unicode string to return. This Unicode string\r
- is the name of the driver specified by This in the language\r
- specified by Language.\r
-\r
- Returns:\r
- EFI_SUCCESS - The Unicode string for the Driver specified by This\r
- and the language specified by Language was returned\r
- in DriverName.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - DriverName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
- return LookupUnicodeString (\r
- Language,\r
- gSimpleNetworkComponentName.SupportedLanguages,\r
- mSimpleNetworkDriverNameTable,\r
- DriverName\r
- );\r
+ return LookupUnicodeString2 (\r
+ Language,\r
+ This->SupportedLanguages,\r
+ mSimpleNetworkDriverNameTable,\r
+ DriverName,\r
+ (BOOLEAN)(This == &gSimpleNetworkComponentName)\r
+ );\r
}\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
SimpleNetworkComponentNameGetControllerName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **ControllerName\r
)\r
-/*++\r
-\r
- Routine Description:\r
- Retrieves a Unicode string that is the user readable name of the controller\r
- that is being managed by an EFI Driver.\r
-\r
- Arguments:\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- ControllerHandle - The handle of a controller that the driver specified by\r
- This is managing. This handle specifies the controller\r
- whose name is to be returned.\r
- ChildHandle - The handle of the child controller to retrieve the name\r
- of. This is an optional parameter that may be NULL. It\r
- will be NULL for device drivers. It will also be NULL\r
- for a bus drivers that wish to retrieve the name of the\r
- bus controller. It will not be NULL for a bus driver\r
- that wishes to retrieve the name of a child controller.\r
- Language - A pointer to a three character ISO 639-2 language\r
- identifier. This is the language of the controller name\r
- that that the caller is requesting, and it must match one\r
- of the languages specified in SupportedLanguages. The\r
- number of languages supported by a driver is up to the\r
- driver writer.\r
- ControllerName - A pointer to the Unicode string to return. This Unicode\r
- string is the name of the controller specified by\r
- ControllerHandle and ChildHandle in the language specified\r
- by Language from the point of view of the driver specified\r
- by This.\r
-\r
- Returns:\r
- EFI_SUCCESS - The Unicode string for the user readable name in the\r
- language specified by Language for the driver\r
- specified by This was returned in DriverName.\r
- EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - ControllerName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This is not currently managing\r
- the controller specified by ControllerHandle and\r
- ChildHandle.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
return EFI_UNSUPPORTED;\r
}\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- return EfiLibInstallAllDriverProtocols (\r
- ImageHandle,\r
- SystemTable,\r
- &mSimpleNetworkDriverBinding,\r
- NULL,\r
- &gSimpleNetworkComponentName,\r
- NULL,\r
- NULL\r
- );\r
+ return EfiLibInstallDriverBindingComponentName2 (\r
+ ImageHandle,\r
+ SystemTable,\r
+ &mSimpleNetworkDriverBinding,\r
+ NULL,\r
+ &gSimpleNetworkComponentName,\r
+ &gSimpleNetworkComponentName2\r
+ );\r
}\r
-/** @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:
- snp.h
-
-Abstract:
-
-Revision history:
-
-
-**/
-#ifndef _SNP_H
-#define _SNP_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
+ snp.h\r
+\r
+Abstract:\r
+\r
+Revision history:\r
+\r
+\r
+**/\r
+#ifndef _SNP_H\r
+#define _SNP_H\r
+\r
+\r
#include <PiDxe.h>\r
\r
#include <Protocol/SimpleNetwork.h>\r
#include <Library/UefiDriverEntryPoint.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
#include <Library/BaseLib.h>\r
-#include <Library/UefiLib.h>
-#include <Library/MemoryAllocationLib.h>
-
-#include <IndustryStandard/Pci22.h>
-
-#define FOUR_GIGABYTES (UINT64) 0x100000000ULL
-
-
-#define SNP_DRIVER_SIGNATURE EFI_SIGNATURE_32 ('s', 'n', 'd', 's')
-#define MAX_MAP_LENGTH 100
-
-#define PCI_BAR_IO_MASK 0x00000003
-#define PCI_BAR_IO_MODE 0x00000001
-
-#define PCI_BAR_MEM_MASK 0x0000000F
-#define PCI_BAR_MEM_MODE 0x00000000
-#define PCI_BAR_MEM_64BIT 0x00000004
-
-typedef struct {
- UINT32 Signature;
- EFI_LOCK lock;
-
- EFI_SIMPLE_NETWORK_PROTOCOL snp;
- EFI_SIMPLE_NETWORK_MODE mode;
-
- EFI_HANDLE device_handle;
- EFI_DEVICE_PATH_PROTOCOL *device_path;
-
- //
- // Local instance data needed by SNP driver
- //
- // Pointer to S/W UNDI API entry point
- // This will be NULL for H/W UNDI
- //
- EFI_STATUS (*issue_undi32_command) (UINT64 cdb);
-
- BOOLEAN is_swundi;
-
- //
- // undi interface number, if one undi manages more nics
- //
- PXE_IFNUM if_num;
-
- //
- // Allocated tx/rx buffer that was passed to UNDI Initialize.
- //
- UINT32 tx_rx_bufsize;
- VOID *tx_rx_buffer;
- //
- // mappable buffers for receive and fill header for undi3.0
- // these will be used if the user buffers are above 4GB limit (instead of
- // mapping the user buffers)
- //
- UINT8 *receive_buf;
- VOID *ReceiveBufUnmap;
- UINT8 *fill_hdr_buf;
- VOID *FillHdrBufUnmap;
-
- EFI_PCI_IO_PROTOCOL *IoFncs;
- UINT8 IoBarIndex;
- UINT8 MemoryBarIndex;
- BOOLEAN IsOldUndi; // true for EFI1.0 UNDI (3.0) drivers
- //
- // Buffers for command descriptor block, command parameter block
- // and data block.
- //
- PXE_CDB cdb;
- VOID *cpb;
- VOID *CpbUnmap;
- VOID *db;
-
- //
- // UNDI structure, we need to remember the init info for a long time!
- //
- PXE_DB_GET_INIT_INFO init_info;
-
- VOID *SnpDriverUnmap;
- //
- // when ever we map an address, we must remember it's address and the un-map
- // cookie so that we can unmap later
- //
- struct s_map_list {
- EFI_PHYSICAL_ADDRESS virt;
- VOID *map_cookie;
- } map_list[MAX_MAP_LENGTH];
-}
-SNP_DRIVER;
-
-#define EFI_SIMPLE_NETWORK_DEV_FROM_THIS(a) CR (a, SNP_DRIVER, snp, SNP_DRIVER_SIGNATURE)
-
-//
-// Global Variables
-//
-extern EFI_COMPONENT_NAME_PROTOCOL gSimpleNetworkComponentName;
-
-//
-// Virtual to physical mapping for all UNDI 3.0s.
-//
-extern struct s_v2p {
- struct s_v2p *next;
- VOID *vaddr;
- UINTN bsize;
- EFI_PHYSICAL_ADDRESS paddr;
- VOID *unmap;
-}
-*_v2p;
-
-EFI_STATUS
-add_v2p (
- struct s_v2p **v2p,
- EFI_PCI_IO_PROTOCOL_OPERATION type,
- VOID *vaddr,
- UINTN bsize
- )
-;
-
-EFI_STATUS
-find_v2p (
- struct s_v2p **v2p,
- VOID *vaddr
- )
-;
-
-EFI_STATUS
-del_v2p (
- VOID *vaddr
- )
-;
-
-extern
-VOID
-snp_undi32_callback_block_30 (
- IN UINT32 Enable
- )
-;
-
-extern
-VOID
-snp_undi32_callback_delay_30 (
- IN UINT64 MicroSeconds
- )
-;
-
-extern
-VOID
-snp_undi32_callback_memio_30 (
- IN UINT8 ReadOrWrite,
- IN UINT8 NumBytes,
- IN UINT64 MemOrPortAddress,
- IN OUT UINT64 BufferPtr
- )
-;
-
-extern
-VOID
-snp_undi32_callback_v2p_30 (
- IN UINT64 CpuAddr,
- IN OUT UINT64 DeviceAddrPtr
- )
-;
-
-extern
-VOID
-snp_undi32_callback_block (
- IN UINT64 UniqueId,
- IN UINT32 Enable
- )
-;
-
-extern
-VOID
-snp_undi32_callback_delay (
- IN UINT64 UniqueId,
- IN UINT64 MicroSeconds
- )
-;
-
-extern
-VOID
-snp_undi32_callback_memio (
- IN UINT64 UniqueId,
- IN UINT8 ReadOrWrite,
- IN UINT8 NumBytes,
- IN UINT64 MemOrPortAddr,
- IN OUT UINT64 BufferPtr
- )
-;
-
-extern
-VOID
-snp_undi32_callback_map (
- IN UINT64 UniqueId,
- IN UINT64 CpuAddr,
- IN UINT32 NumBytes,
- IN UINT32 Direction,
- IN OUT UINT64 DeviceAddrPtr
- )
-;
-
-extern
-VOID
-snp_undi32_callback_unmap (
- IN UINT64 UniqueId,
- IN UINT64 CpuAddr,
- IN UINT32 NumBytes,
- IN UINT32 Direction,
- IN UINT64 DeviceAddr // not a pointer to device address
- )
-;
-
-extern
-VOID
-snp_undi32_callback_sync (
- IN UINT64 UniqueId,
- IN UINT64 CpuAddr,
- IN UINT32 NumBytes,
- IN UINT32 Direction,
- IN UINT64 DeviceAddr // not a pointer to device address
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-snp_undi32_start (
- IN EFI_SIMPLE_NETWORK_PROTOCOL *this
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-snp_undi32_stop (
- IN EFI_SIMPLE_NETWORK_PROTOCOL *this
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-snp_undi32_initialize (
- IN EFI_SIMPLE_NETWORK_PROTOCOL *this,
- IN UINTN extra_rx_buffer_size OPTIONAL,
- IN UINTN extra_tx_buffer_size OPTIONAL
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-snp_undi32_reset (
- IN EFI_SIMPLE_NETWORK_PROTOCOL *this,
- IN BOOLEAN ExtendedVerification
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-snp_undi32_shutdown (
- IN EFI_SIMPLE_NETWORK_PROTOCOL *this
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-snp_undi32_receive_filters (
- IN EFI_SIMPLE_NETWORK_PROTOCOL * this,
- IN UINT32 enable,
- IN UINT32 disable,
- IN BOOLEAN reset_mcast_filter,
- IN UINTN mcast_filter_count OPTIONAL,
- IN EFI_MAC_ADDRESS * mcast_filter OPTIONAL
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-snp_undi32_station_address (
- IN EFI_SIMPLE_NETWORK_PROTOCOL * this,
- IN BOOLEAN reset,
- IN EFI_MAC_ADDRESS *new OPTIONAL
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-snp_undi32_statistics (
- IN EFI_SIMPLE_NETWORK_PROTOCOL * this,
- IN BOOLEAN reset,
- IN OUT UINTN *statistics_size OPTIONAL,
- IN OUT EFI_NETWORK_STATISTICS * statistics_table OPTIONAL
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-snp_undi32_mcast_ip_to_mac (
- IN EFI_SIMPLE_NETWORK_PROTOCOL *this,
- IN BOOLEAN IPv6,
- IN EFI_IP_ADDRESS *IP,
- OUT EFI_MAC_ADDRESS *MAC
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-snp_undi32_nvdata (
- IN EFI_SIMPLE_NETWORK_PROTOCOL *this,
- IN BOOLEAN read_write,
- IN UINTN offset,
- IN UINTN buffer_size,
- IN OUT VOID *buffer
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-snp_undi32_get_status (
- IN EFI_SIMPLE_NETWORK_PROTOCOL * this,
- OUT UINT32 *interrupt_status OPTIONAL,
- OUT VOID **tx_buffer OPTIONAL
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-snp_undi32_transmit (
- IN EFI_SIMPLE_NETWORK_PROTOCOL * this,
- IN UINTN header_size,
- IN UINTN buffer_size,
- IN VOID *buffer,
- IN EFI_MAC_ADDRESS * src_addr OPTIONAL,
- IN EFI_MAC_ADDRESS * dest_addr OPTIONAL,
- IN UINT16 *protocol OPTIONAL
- )
-;
-
-extern
-EFI_STATUS
-EFIAPI
-snp_undi32_receive (
- IN EFI_SIMPLE_NETWORK_PROTOCOL * this,
- OUT UINTN *header_size OPTIONAL,
- IN OUT UINTN *buffer_size,
- OUT VOID *buffer,
- OUT EFI_MAC_ADDRESS * src_addr OPTIONAL,
- OUT EFI_MAC_ADDRESS * dest_addr OPTIONAL,
- OUT UINT16 *protocol OPTIONAL
- )
-;
-
-typedef
-EFI_STATUS
-(*issue_undi32_command) (
- UINT64 cdb
- );
-typedef
-VOID
-(*ptr) (
- VOID
- );
-
-
-/**
- Install all the driver protocol
-
- @param ImageHandle Driver image handle
- @param SystemTable System services table
-
- @retval EFI_SUCEESS Initialization routine has found UNDI hardware, loaded it's
- ROM, and installed a notify event for the Network
- Indentifier Interface Protocol successfully.
- @retval Other Return value from HandleProtocol for DeviceIoProtocol or
- LoadedImageProtocol
-
-**/
-EFI_STATUS
-EFIAPI
-InitializeSnpNiiDriver (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-;
-
-#define SNP_MEM_PAGES(x) (((x) - 1) / 4096 + 1)
-
-
-#endif /* _SNP_H */
+#include <Library/UefiLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+#include <IndustryStandard/Pci22.h>\r
+\r
+#define FOUR_GIGABYTES (UINT64) 0x100000000ULL\r
+\r
+\r
+#define SNP_DRIVER_SIGNATURE EFI_SIGNATURE_32 ('s', 'n', 'd', 's')\r
+#define MAX_MAP_LENGTH 100\r
+\r
+#define PCI_BAR_IO_MASK 0x00000003\r
+#define PCI_BAR_IO_MODE 0x00000001\r
+\r
+#define PCI_BAR_MEM_MASK 0x0000000F\r
+#define PCI_BAR_MEM_MODE 0x00000000\r
+#define PCI_BAR_MEM_64BIT 0x00000004\r
+\r
+typedef struct {\r
+ UINT32 Signature;\r
+ EFI_LOCK lock;\r
+\r
+ EFI_SIMPLE_NETWORK_PROTOCOL snp;\r
+ EFI_SIMPLE_NETWORK_MODE mode;\r
+\r
+ EFI_HANDLE device_handle;\r
+ EFI_DEVICE_PATH_PROTOCOL *device_path;\r
+\r
+ //\r
+ // Local instance data needed by SNP driver\r
+ //\r
+ // Pointer to S/W UNDI API entry point\r
+ // This will be NULL for H/W UNDI\r
+ //\r
+ EFI_STATUS (*issue_undi32_command) (UINT64 cdb);\r
+\r
+ BOOLEAN is_swundi;\r
+\r
+ //\r
+ // undi interface number, if one undi manages more nics\r
+ //\r
+ PXE_IFNUM if_num;\r
+\r
+ //\r
+ // Allocated tx/rx buffer that was passed to UNDI Initialize.\r
+ //\r
+ UINT32 tx_rx_bufsize;\r
+ VOID *tx_rx_buffer;\r
+ //\r
+ // mappable buffers for receive and fill header for undi3.0\r
+ // these will be used if the user buffers are above 4GB limit (instead of\r
+ // mapping the user buffers)\r
+ //\r
+ UINT8 *receive_buf;\r
+ VOID *ReceiveBufUnmap;\r
+ UINT8 *fill_hdr_buf;\r
+ VOID *FillHdrBufUnmap;\r
+\r
+ EFI_PCI_IO_PROTOCOL *IoFncs;\r
+ UINT8 IoBarIndex;\r
+ UINT8 MemoryBarIndex;\r
+ BOOLEAN IsOldUndi; // true for EFI1.0 UNDI (3.0) drivers\r
+ //\r
+ // Buffers for command descriptor block, command parameter block\r
+ // and data block.\r
+ //\r
+ PXE_CDB cdb;\r
+ VOID *cpb;\r
+ VOID *CpbUnmap;\r
+ VOID *db;\r
+\r
+ //\r
+ // UNDI structure, we need to remember the init info for a long time!\r
+ //\r
+ PXE_DB_GET_INIT_INFO init_info;\r
+\r
+ VOID *SnpDriverUnmap;\r
+ //\r
+ // when ever we map an address, we must remember it's address and the un-map\r
+ // cookie so that we can unmap later\r
+ //\r
+ struct s_map_list {\r
+ EFI_PHYSICAL_ADDRESS virt;\r
+ VOID *map_cookie;\r
+ } map_list[MAX_MAP_LENGTH];\r
+}\r
+SNP_DRIVER;\r
+\r
+#define EFI_SIMPLE_NETWORK_DEV_FROM_THIS(a) CR (a, SNP_DRIVER, snp, SNP_DRIVER_SIGNATURE)\r
+\r
+//\r
+// Global Variables\r
+//\r
+extern EFI_COMPONENT_NAME_PROTOCOL gSimpleNetworkComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gSimpleNetworkComponentName2;\r
+\r
+//\r
+// Virtual to physical mapping for all UNDI 3.0s.\r
+//\r
+extern struct s_v2p {\r
+ struct s_v2p *next;\r
+ VOID *vaddr;\r
+ UINTN bsize;\r
+ EFI_PHYSICAL_ADDRESS paddr;\r
+ VOID *unmap;\r
+}\r
+*_v2p;\r
+\r
+EFI_STATUS\r
+add_v2p (\r
+ struct s_v2p **v2p,\r
+ EFI_PCI_IO_PROTOCOL_OPERATION type,\r
+ VOID *vaddr,\r
+ UINTN bsize\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+find_v2p (\r
+ struct s_v2p **v2p,\r
+ VOID *vaddr\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+del_v2p (\r
+ VOID *vaddr\r
+ )\r
+;\r
+\r
+extern\r
+VOID \r
+snp_undi32_callback_block_30 (\r
+ IN UINT32 Enable\r
+ )\r
+;\r
+\r
+extern\r
+VOID \r
+snp_undi32_callback_delay_30 (\r
+ IN UINT64 MicroSeconds\r
+ )\r
+;\r
+\r
+extern\r
+VOID \r
+snp_undi32_callback_memio_30 (\r
+ IN UINT8 ReadOrWrite,\r
+ IN UINT8 NumBytes,\r
+ IN UINT64 MemOrPortAddress,\r
+ IN OUT UINT64 BufferPtr\r
+ )\r
+;\r
+\r
+extern\r
+VOID \r
+snp_undi32_callback_v2p_30 (\r
+ IN UINT64 CpuAddr,\r
+ IN OUT UINT64 DeviceAddrPtr\r
+ )\r
+;\r
+\r
+extern\r
+VOID \r
+snp_undi32_callback_block (\r
+ IN UINT64 UniqueId,\r
+ IN UINT32 Enable\r
+ )\r
+;\r
+\r
+extern\r
+VOID \r
+snp_undi32_callback_delay (\r
+ IN UINT64 UniqueId,\r
+ IN UINT64 MicroSeconds\r
+ )\r
+;\r
+\r
+extern\r
+VOID \r
+snp_undi32_callback_memio (\r
+ IN UINT64 UniqueId,\r
+ IN UINT8 ReadOrWrite,\r
+ IN UINT8 NumBytes,\r
+ IN UINT64 MemOrPortAddr,\r
+ IN OUT UINT64 BufferPtr\r
+ )\r
+;\r
+\r
+extern\r
+VOID \r
+snp_undi32_callback_map (\r
+ IN UINT64 UniqueId,\r
+ IN UINT64 CpuAddr,\r
+ IN UINT32 NumBytes,\r
+ IN UINT32 Direction,\r
+ IN OUT UINT64 DeviceAddrPtr\r
+ )\r
+;\r
+\r
+extern\r
+VOID \r
+snp_undi32_callback_unmap (\r
+ IN UINT64 UniqueId,\r
+ IN UINT64 CpuAddr,\r
+ IN UINT32 NumBytes,\r
+ IN UINT32 Direction,\r
+ IN UINT64 DeviceAddr // not a pointer to device address\r
+ )\r
+;\r
+\r
+extern\r
+VOID \r
+snp_undi32_callback_sync (\r
+ IN UINT64 UniqueId,\r
+ IN UINT64 CpuAddr,\r
+ IN UINT32 NumBytes,\r
+ IN UINT32 Direction,\r
+ IN UINT64 DeviceAddr // not a pointer to device address\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+snp_undi32_start (\r
+ IN EFI_SIMPLE_NETWORK_PROTOCOL *this\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+snp_undi32_stop (\r
+ IN EFI_SIMPLE_NETWORK_PROTOCOL *this\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+snp_undi32_initialize (\r
+ IN EFI_SIMPLE_NETWORK_PROTOCOL *this,\r
+ IN UINTN extra_rx_buffer_size OPTIONAL,\r
+ IN UINTN extra_tx_buffer_size OPTIONAL\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+snp_undi32_reset (\r
+ IN EFI_SIMPLE_NETWORK_PROTOCOL *this,\r
+ IN BOOLEAN ExtendedVerification\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+snp_undi32_shutdown (\r
+ IN EFI_SIMPLE_NETWORK_PROTOCOL *this\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+snp_undi32_receive_filters (\r
+ IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
+ IN UINT32 enable,\r
+ IN UINT32 disable,\r
+ IN BOOLEAN reset_mcast_filter,\r
+ IN UINTN mcast_filter_count OPTIONAL,\r
+ IN EFI_MAC_ADDRESS * mcast_filter OPTIONAL\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+snp_undi32_station_address (\r
+ IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
+ IN BOOLEAN reset,\r
+ IN EFI_MAC_ADDRESS *new OPTIONAL\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+snp_undi32_statistics (\r
+ IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
+ IN BOOLEAN reset,\r
+ IN OUT UINTN *statistics_size OPTIONAL,\r
+ IN OUT EFI_NETWORK_STATISTICS * statistics_table OPTIONAL\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+snp_undi32_mcast_ip_to_mac (\r
+ IN EFI_SIMPLE_NETWORK_PROTOCOL *this,\r
+ IN BOOLEAN IPv6,\r
+ IN EFI_IP_ADDRESS *IP,\r
+ OUT EFI_MAC_ADDRESS *MAC\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+snp_undi32_nvdata (\r
+ IN EFI_SIMPLE_NETWORK_PROTOCOL *this,\r
+ IN BOOLEAN read_write,\r
+ IN UINTN offset,\r
+ IN UINTN buffer_size,\r
+ IN OUT VOID *buffer\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+snp_undi32_get_status (\r
+ IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
+ OUT UINT32 *interrupt_status OPTIONAL,\r
+ OUT VOID **tx_buffer OPTIONAL\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+snp_undi32_transmit (\r
+ IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
+ IN UINTN header_size,\r
+ IN UINTN buffer_size,\r
+ IN VOID *buffer,\r
+ IN EFI_MAC_ADDRESS * src_addr OPTIONAL,\r
+ IN EFI_MAC_ADDRESS * dest_addr OPTIONAL,\r
+ IN UINT16 *protocol OPTIONAL\r
+ )\r
+;\r
+\r
+extern\r
+EFI_STATUS \r
+EFIAPI\r
+snp_undi32_receive (\r
+ IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
+ OUT UINTN *header_size OPTIONAL,\r
+ IN OUT UINTN *buffer_size,\r
+ OUT VOID *buffer,\r
+ OUT EFI_MAC_ADDRESS * src_addr OPTIONAL,\r
+ OUT EFI_MAC_ADDRESS * dest_addr OPTIONAL,\r
+ OUT UINT16 *protocol OPTIONAL\r
+ )\r
+;\r
+\r
+typedef\r
+EFI_STATUS\r
+(*issue_undi32_command) (\r
+ UINT64 cdb\r
+ );\r
+typedef\r
+VOID\r
+(*ptr) (\r
+ VOID\r
+ );\r
+\r
+\r
+/**\r
+ Install all the driver protocol\r
+\r
+ @param ImageHandle Driver image handle\r
+ @param SystemTable System services table\r
+\r
+ @retval EFI_SUCEESS Initialization routine has found UNDI hardware, loaded it's\r
+ ROM, and installed a notify event for the Network\r
+ Indentifier Interface Protocol successfully.\r
+ @retval Other Return value from HandleProtocol for DeviceIoProtocol or\r
+ LoadedImageProtocol\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+InitializeSnpNiiDriver (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ )\r
+;\r
+\r
+#define SNP_MEM_PAGES(x) (((x) - 1) / 4096 + 1)\r
+\r
+\r
+#endif /* _SNP_H */\r
//\r
// EFI Component Name Functions\r
//\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
TcpComponentNameGetDriverName (\r
OUT CHAR16 **DriverName\r
);\r
\r
+\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
TcpComponentNameGetControllerName (\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
+ 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
+\r
//\r
// EFI Component Name Protocol\r
//\r
-EFI_COMPONENT_NAME_PROTOCOL gTcp4ComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL gTcp4ComponentName = {\r
TcpComponentNameGetDriverName,\r
TcpComponentNameGetControllerName,\r
"eng"\r
-};\r
+ };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gTcp4ComponentName2 = {\r
+ (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) TcpComponentNameGetDriverName,\r
+ (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) TcpComponentNameGetControllerName,\r
+ "en"\r
+ };\r
+\r
\r
static EFI_UNICODE_STRING_TABLE mTcpDriverNameTable[] = {\r
{\r
- "eng",\r
+ "eng;en",\r
L"Tcp Network Service Driver"\r
},\r
{\r
}\r
};\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
TcpComponentNameGetDriverName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **DriverName\r
)\r
-/*++\r
+{\r
+ return LookupUnicodeString2 (\r
+ Language,\r
+ This->SupportedLanguages,\r
+ mTcpDriverNameTable,\r
+ DriverName,\r
+ (BOOLEAN)(This == &gTcp4ComponentName)\r
+ );\r
+}\r
\r
-Routine Description:\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
\r
- Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
\r
-Arguments:\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- Language - A pointer to a three character ISO 639-2 language identifier.\r
- This is the language of the driver name that that the caller\r
- is requesting, and it must match one of the languages\r
- specified in SupportedLanguages. The number of languages\r
- supported by a driver is up to the driver writer.\r
- DriverName - A pointer to the Unicode string to return. This Unicode\r
- string is the name of the driver specified by This in the\r
- language specified by Language.\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
\r
-Returns:\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
\r
- EFI_SUCCES - The Unicode string for the Driver specified by\r
- This and the language specified by Language was\r
- returned in DriverName.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - DriverName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
\r
---*/\r
-{\r
- return LookupUnicodeString (\r
- Language,\r
- gTcp4ComponentName.SupportedLanguages,\r
- mTcpDriverNameTable,\r
- DriverName\r
- );\r
-}\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
TcpComponentNameGetControllerName (\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
+ 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
-\r
-Routine Description:\r
-\r
- Retrieves a Unicode string that is the user readable name of the controller\r
- that is being managed by an EFI Driver.\r
-\r
-Arguments:\r
-\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- ControllerHandle - The handle of a controller that the driver specified by\r
- This is managing. This handle specifies the controller\r
- whose name is to be returned.\r
- ChildHandle - The handle of the child controller to retrieve the name\r
- of. This is an optional parameter that may be NULL.\r
- It will be NULL for device drivers. It will also be\r
- NULL for a bus drivers that wish to retrieve the name of\r
- the bus controller. It will not be NULL for a bus\r
- driver that wishes to retrieve the name of a child\r
- controller.\r
- Language - A pointer to a three character ISO 639-2 language\r
- identifier. This is the language of the controller\r
- name that that the caller is requesting, and it must\r
- match one of the languages specified in supported\r
- languages. The number of languages supported by a driver\r
- is up to the driver writer.\r
- ControllerName - A pointer to the Unicode string to return. This Unicode\r
- string is the name of the controller specified by\r
- ControllerHandle and ChildHandle in the language\r
- specified by Language from the point of view of the\r
- driver specified by This.\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - The Unicode string for the user readable name in\r
- the language specified by Language for the driver\r
- specified by This was returned in DriverName.\r
- EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid\r
- EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - ControllerName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This is not currently\r
- managing the controller specified by\r
- ControllerHandle and ChildHandle.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
return EFI_UNSUPPORTED;\r
}\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- SockImpl.h
-
-Abstract:
-
-
-**/
-
-#ifndef _SOCK_IMPL_H_
-#define _SOCK_IMPL_H_
-
-#include "Socket.h"
-
-#define SOCK_DEBUG_ERROR(PrintArg) NET_DEBUG_ERROR("Sock", PrintArg)
-#define SOCK_DEBUG_WARN(PrintArg) NET_DEBUG_WARNING("Sock", PrintArg)
-#define SOCK_DEBUG_TRACE(PrintArg) NET_DEBUG_TRACE("Sock", PrintArg)
-
-#define SOCK_TRIM_RCV_BUFF(Sock, Len) \
- (NetbufQueTrim ((Sock)->RcvBuffer.DataQueue, (Len)))
-
-#define SIGNAL_TOKEN(Token, TokenStatus) \
- do { \
- (Token)->Status = (TokenStatus); \
- gBS->SignalEvent ((Token)->Event); \
- } while (0)
-
-#define SOCK_HEADER_SPACE (60 + 60 + 72)
-
-//
-// Supporting function for both SockImpl and SockInterface
-//
-VOID
-SockFreeFoo (
- IN EFI_EVENT Event
- );
-
-EFI_STATUS
-SockProcessTcpSndData (
- IN SOCKET *Sock,
- IN VOID *TcpTxData
- );
-
-VOID
-SockSetTcpRxData (
- IN SOCKET *Sock,
- IN VOID *TcpRxData,
- IN UINT32 RcvdBytes,
- IN BOOLEAN IsOOB
- );
-
-UINT32
-SockProcessRcvToken (
- IN SOCKET *Sock,
- IN SOCK_IO_TOKEN *RcvToken
- );
-
-VOID
-SockConnFlush (
- IN SOCKET *Sock
- );
-
-SOCKET *
-SockCreate (
- IN SOCK_INIT_DATA *SockInitData
- );
-
-VOID
-SockDestroy (
- IN SOCKET *Sock
- );
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+ SockImpl.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _SOCK_IMPL_H_\r
+#define _SOCK_IMPL_H_\r
+\r
+#include "Socket.h"\r
+\r
+#define SOCK_DEBUG_ERROR(PrintArg) NET_DEBUG_ERROR("Sock", PrintArg)\r
+#define SOCK_DEBUG_WARN(PrintArg) NET_DEBUG_WARNING("Sock", PrintArg)\r
+#define SOCK_DEBUG_TRACE(PrintArg) NET_DEBUG_TRACE("Sock", PrintArg)\r
+\r
+#define SOCK_TRIM_RCV_BUFF(Sock, Len) \\r
+ (NetbufQueTrim ((Sock)->RcvBuffer.DataQueue, (Len)))\r
+\r
+#define SIGNAL_TOKEN(Token, TokenStatus) \\r
+ do { \\r
+ (Token)->Status = (TokenStatus); \\r
+ gBS->SignalEvent ((Token)->Event); \\r
+ } while (0)\r
+\r
+#define SOCK_HEADER_SPACE (60 + 60 + 72)\r
+\r
+//\r
+// Supporting function for both SockImpl and SockInterface\r
+//\r
+VOID\r
+SockFreeFoo (\r
+ IN EFI_EVENT Event\r
+ );\r
+\r
+EFI_STATUS\r
+SockProcessTcpSndData (\r
+ IN SOCKET *Sock,\r
+ IN VOID *TcpTxData\r
+ );\r
+\r
+VOID\r
+SockSetTcpRxData (\r
+ IN SOCKET *Sock,\r
+ IN VOID *TcpRxData,\r
+ IN UINT32 RcvdBytes,\r
+ IN BOOLEAN IsOOB\r
+ );\r
+\r
+UINT32\r
+SockProcessRcvToken (\r
+ IN SOCKET *Sock,\r
+ IN SOCK_IO_TOKEN *RcvToken\r
+ );\r
+\r
+VOID\r
+SockConnFlush (\r
+ IN SOCKET *Sock\r
+ );\r
+\r
+SOCKET *\r
+SockCreate (\r
+ IN SOCK_INIT_DATA *SockInitData\r
+ );\r
+\r
+VOID\r
+SockDestroy (\r
+ IN SOCKET *Sock\r
+ );\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Socket.h
-
-Abstract:
-
-
-**/
-
-#ifndef _SOCKET_H_
-#define _SOCKET_H_
-
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+ Socket.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _SOCKET_H_\r
+#define _SOCKET_H_\r
+\r
#include <PiDxe.h>\r
\r
#include <Protocol/IP4.h>\r
-#include <Protocol/Tcp4.h>
+#include <Protocol/Tcp4.h>\r
#include <Protocol/Udp4.h>\r
-
+\r
#include <Library/NetLib.h>\r
#include <Library/DebugLib.h>\r
#include <Library/UefiRuntimeServicesTableLib.h>\r
#include <Library/UefiDriverEntryPoint.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
#include <Library/BaseLib.h>\r
-#include <Library/UefiLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/BaseMemoryLib.h>
-
-#define SOCK_SND_BUF 0
-#define SOCK_RCV_BUF 1
-
-#define SOCK_BUFF_LOW_WATER 2 * 1024
-#define SOCK_RCV_BUFF_SIZE 8 * 1024
-#define SOCK_SND_BUFF_SIZE 8 * 1024
-#define SOCK_BACKLOG 5
-
-#define PROTO_RESERVED_LEN 20
-
-#define SO_NO_MORE_DATA 0x0001
-
-//
-//
-//
-// When a socket is created it enters into SO_UNCONFIGURED,
-// no actions can be taken on this socket, only after calling
-// SockConfigure. The state transition diagram of socket is
-// as following:
-//
-// SO_UNCONFIGURED --- SO_CONFIGURED --- SO_CONNECTING
-// ^ | |
-// | ---> SO_LISTENING |
-// | |
-// |------------------SO_DISCONNECTING<-- SO_CONNECTED
-//
-// A passive socket can only go into SO_LISTENING and
-// SO_UNCONFIGURED state. SO_XXXING state is a middle state
-// when a socket is undergoing a protocol procedure such
-// as requesting a TCP connection.
-//
-//
-//
-typedef enum {
- SO_CLOSED = 0,
- SO_LISTENING,
- SO_CONNECTING,
- SO_CONNECTED,
- SO_DISCONNECTING
-} SOCK_STATE;
-
-typedef enum {
- SO_UNCONFIGURED = 0,
- SO_CONFIGURED_ACTIVE,
- SO_CONFIGURED_PASSIVE,
- SO_NO_MAPPING
-} SOCK_CONFIGURE_STATE;
-
-#define SOCK_NO_MORE_DATA(Sock) ((Sock)->Flag |= SO_NO_MORE_DATA)
-
-#define SOCK_IS_UNCONFIGURED(Sock) ((Sock)->ConfigureState == SO_UNCONFIGURED)
-
-#define SOCK_IS_CONFIGURED(Sock) \
- (((Sock)->ConfigureState == SO_CONFIGURED_ACTIVE) || \
- ((Sock)->ConfigureState == SO_CONFIGURED_PASSIVE))
-
-#define SOCK_IS_CONFIGURED_ACTIVE(Sock) \
- ((Sock)->ConfigureState == SO_CONFIGURED_ACTIVE)
-
-#define SOCK_IS_CONNECTED_PASSIVE(Sock) \
- ((Sock)->ConfigureState == SO_CONFIGURED_PASSIVE)
-
-#define SOCK_IS_NO_MAPPING(Sock) \
- ((Sock)->ConfigureState == SO_NO_MAPPING)
-
-#define SOCK_IS_CLOSED(Sock) ((Sock)->State == SO_CLOSED)
-
-#define SOCK_IS_LISTENING(Sock) ((Sock)->State == SO_LISTENING)
-
-#define SOCK_IS_CONNECTING(Sock) ((Sock)->State == SO_CONNECTING)
-
-#define SOCK_IS_CONNECTED(Sock) ((Sock)->State == SO_CONNECTED)
-
-#define SOCK_IS_DISCONNECTING(Sock) ((Sock)->State == SO_DISCONNECTING)
-
-#define SOCK_IS_NO_MORE_DATA(Sock) (0 != ((Sock)->Flag & SO_NO_MORE_DATA))
-
-#define SOCK_SIGNATURE EFI_SIGNATURE_32 ('S', 'O', 'C', 'K')
-
-#define SOCK_FROM_THIS(a) CR ((a), SOCKET, NetProtocol, SOCK_SIGNATURE)
-
-#define SET_RCV_BUFFSIZE(Sock, Size) ((Sock)->RcvBuffer.HighWater = (Size))
-
-#define GET_RCV_BUFFSIZE(Sock) ((Sock)->RcvBuffer.HighWater)
-
-#define GET_RCV_DATASIZE(Sock) (((Sock)->RcvBuffer.DataQueue)->BufSize)
-
-#define SET_SND_BUFFSIZE(Sock, Size) ((Sock)->SndBuffer.HighWater = (Size))
-
-#define GET_SND_BUFFSIZE(Sock) ((Sock)->SndBuffer.HighWater)
-
-#define GET_SND_DATASIZE(Sock) (((Sock)->SndBuffer.DataQueue)->BufSize)
-
-#define SET_BACKLOG(Sock, Value) ((Sock)->BackLog = (Value))
-
-#define GET_BACKLOG(Sock) ((Sock)->BackLog)
-
-#define SOCK_ERROR(Sock, Error) ((Sock)->SockError = (Error))
-
-#define SND_BUF_HDR_LEN(Sock) \
- ((SockBufFirst (&((Sock)->SndBuffer)))->TotalSize)
-
-#define RCV_BUF_HDR_LEN(Sock) \
- ((SockBufFirst (&((Sock)->RcvBuffer)))->TotalSize)
-
-#define SOCK_FROM_TOKEN(Token) (((SOCK_TOKEN *) (Token))->Sock)
-
-#define PROTO_TOKEN_FORM_SOCK(SockToken, Type) \
- ((Type *) (((SOCK_TOKEN *) (SockToken))->Token))
-
-typedef struct _SOCKET SOCKET;
-
-typedef struct _SOCK_COMPLETION_TOKEN {
- EFI_EVENT Event;
- EFI_STATUS Status;
-} SOCK_COMPLETION_TOKEN;
-
-typedef struct _SOCK_IO_TOKEN {
- SOCK_COMPLETION_TOKEN Token;
- union {
- VOID *RxData;
- VOID *TxData;
- } Packet;
-} SOCK_IO_TOKEN;
-
-//
-// the request issued from socket layer to protocol layer
-//
-typedef enum {
- SOCK_ATTACH, // attach current socket to a new PCB
- SOCK_DETACH, // detach current socket from the PCB
- SOCK_CONFIGURE, // configure attached PCB
- SOCK_FLUSH, // flush attached PCB
- SOCK_SND, // need protocol to send something
- SOCK_SNDPUSH, // need protocol to send pushed data
- SOCK_SNDURG, // need protocol to send urgent data
- SOCK_CONSUMED, // application has retrieved data from socket
- SOCK_CONNECT, // need to connect to a peer
- SOCK_CLOSE, // need to close the protocol process
- SOCK_ABORT, // need to reset the protocol process
- SOCK_POLL, // need to poll to the protocol layer
- SOCK_ROUTE, // need to add a route information
- SOCK_MODE, // need to get the mode data of the protocol
- SOCK_GROUP // need to join a mcast group
-} SOCK_REQUEST;
-
-//
-// the socket type
-//
-typedef enum {
- SOCK_DGRAM, // this socket providing datagram service
- SOCK_STREAM // this socket providing stream service
-} SOCK_TYPE;
-
-//
-// the handler of protocol for request from socket
-//
-typedef
-EFI_STATUS
-(*SOCK_PROTO_HANDLER) (
- IN SOCKET * Socket, // the socket issuing the request to protocol
- IN SOCK_REQUEST Request, // the request issued by socket
- IN VOID *RequestData // the request related data
- );
-
-//
-// the buffer structure of rcvd data and send data used by socket
-//
-typedef struct _SOCK_BUFFER {
- UINT32 HighWater; // the buffersize upper limit of sock_buffer
- UINT32 LowWater; // the low warter mark of sock_buffer
- NET_BUF_QUEUE *DataQueue; // the queue to buffer data
-} SOCK_BUFFER;
-
-//
-// the initialize data for create a new socket
-//
-typedef struct _SOCK_INIT_DATA {
- SOCK_TYPE Type;
- SOCK_STATE State;
-
- SOCKET *Parent; // the parent of this socket
- UINT32 BackLog; // the connection limit for listening socket
- UINT32 SndBufferSize; // the high warter mark of send buffer
- UINT32 RcvBufferSize; // the high warter mark of receive buffer
- VOID *Protocol; // the pointer to protocol function template
- // wanted to install on socket
-
- SOCK_PROTO_HANDLER ProtoHandler;
-
- EFI_HANDLE DriverBinding; // the driver binding handle
-} SOCK_INIT_DATA;
-
-//
-// socket provided oprerations for low layer protocol
-//
-
-//
-// socket provided operations for user interface
-//
-VOID
-SockSetState (
- IN SOCKET *Sock,
- IN SOCK_STATE State
- );
-
-//
-// when the connection establishment process for a Sock
-// is finished low layer protocol calling this function
-// to notify socket layer
-//
-VOID
-SockConnEstablished (
- IN SOCKET *Sock
- );
-
-VOID
-SockConnClosed (
- IN SOCKET *Sock
- );
-
-//
-// called by low layer protocol to trim send buffer of
-// Sock, when Count data is sent out completely
-//
-VOID
-SockDataSent (
- IN SOCKET *Sock,
- IN UINT32 Count
- );
-
-//
-// called by low layer protocol to get Len of data from
-// socket to send and copy it in Dest
-//
-UINT32
-SockGetDataToSend (
- IN SOCKET *Sock,
- IN UINT32 Offset,
- IN UINT32 Len,
- IN UINT8 *Dest
- );
-
-//
-// called by low layer protocol to notify socket no more data can be
-// received
-//
-VOID
-SockNoMoreData (
- IN SOCKET *Sock
- );
-
-//
-// called by low layer protocol to append a NetBuffer
-// to rcv buffer of sock
-//
-VOID
-SockDataRcvd (
- IN SOCKET *Sock,
- IN NET_BUF *NetBuffer,
- IN UINT32 UrgLen
- );
-
-UINT32
-SockGetFreeSpace (
- IN SOCKET *Sock,
- IN UINT32 Which
- );
-
-SOCKET *
-SockClone (
- IN SOCKET *Sock
- );
-
-VOID
-SockRcvdErr (
- IN SOCKET *Sock,
- IN EFI_STATUS Error
- );
-
-//
-// the socket structure representing a network service access point
-//
-struct _SOCKET {
-
- //
- // socket description information
- //
- UINT32 Signature;
- EFI_HANDLE SockHandle; // the virtual handle of the socket
- EFI_HANDLE DriverBinding; // socket't driver binding protocol
- EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- SOCK_CONFIGURE_STATE ConfigureState;
- SOCK_TYPE Type;
- SOCK_STATE State;
- UINT16 Flag;
- NET_LOCK Lock; // the lock of socket
- SOCK_BUFFER SndBuffer; // send buffer of application's data
- SOCK_BUFFER RcvBuffer; // receive buffer of received data
- EFI_STATUS SockError; // the error returned by low layer protocol
- BOOLEAN IsDestroyed;
-
- //
- // fields used to manage the connection request
- //
- UINT32 BackLog; // the limit of connection to this socket
- UINT32 ConnCnt; // the current count of connections to it
- SOCKET *Parent; // listening parent that accept the connection
- NET_LIST_ENTRY ConnectionList; // the connections maintained by this socket
- //
- // the queue to buffer application's asynchronous token
- //
- NET_LIST_ENTRY ListenTokenList;
- NET_LIST_ENTRY RcvTokenList;
- NET_LIST_ENTRY SndTokenList;
- NET_LIST_ENTRY ProcessingSndTokenList;
-
- SOCK_COMPLETION_TOKEN *ConnectionToken; // app's token to signal if connected
- SOCK_COMPLETION_TOKEN *CloseToken; // app's token to signal if closed
-
- //
- // interface for low level protocol
- //
- SOCK_PROTO_HANDLER ProtoHandler; // the request handler of protocol
- UINT8 ProtoReserved[PROTO_RESERVED_LEN]; // Data fields reserved for protocol
- union {
- EFI_TCP4_PROTOCOL TcpProtocol;
- EFI_UDP4_PROTOCOL UdpProtocol;
- } NetProtocol;
-};
-
-//
-// the token structure buffered in socket layer
-//
-typedef struct _SOCK_TOKEN {
- NET_LIST_ENTRY TokenList; // the entry to add in the token list
- SOCK_COMPLETION_TOKEN *Token; // The application's token
- UINT32 RemainDataLen; // unprocessed data length
- SOCKET *Sock; // the poninter to the socket this token
- // belongs to
-} SOCK_TOKEN;
-
-//
-// reserved data to access the NET_BUF delivered by UDP driver
-//
-typedef struct _UDP_RSV_DATA {
- EFI_TIME TimeStamp;
- EFI_UDP4_SESSION_DATA Session;
-} UDP_RSV_DATA;
-
-//
-// reserved data to access the NET_BUF delivered by TCP driver
-//
-typedef struct _TCP_RSV_DATA {
- UINT32 UrgLen;
-} TCP_RSV_DATA;
-
-//
-// call it to creat a socket and attach it to a PCB
-//
-SOCKET *
-SockCreateChild (
- IN SOCK_INIT_DATA *SockInitData,
- IN VOID *ProtoData,
- IN UINT32 Len
- );
-
-//
-// call it to destroy a socket and its related PCB
-//
-EFI_STATUS
-SockDestroyChild (
- IN SOCKET *Sock
- );
-
-//
-// call it to configure a socket and its related PCB
-//
-EFI_STATUS
-SockConfigure (
- IN SOCKET *Sock,
- IN VOID *ConfigData
- );
-
-//
-// call it to connect a socket to the peer
-//
-EFI_STATUS
-SockConnect (
- IN SOCKET *Sock,
- IN VOID *Token
- );
-
-//
-// call it to issue an asynchronous listen token to the socket
-//
-EFI_STATUS
-SockAccept (
- IN SOCKET *Sock,
- IN VOID *Token
- );
-
-//
-// Call it to send data using this socket
-//
-EFI_STATUS
-SockSend (
- IN SOCKET *Sock,
- IN VOID *Token
- );
-
-//
-// Call it to receive data from this socket
-//
-EFI_STATUS
-SockRcv (
- IN SOCKET *Sock,
- IN VOID *Token
- );
-
-//
-// Call it to flush a socket
-//
-EFI_STATUS
-SockFlush (
- IN SOCKET *Sock
- );
-
-//
-// Call it to close a socket in the light of policy in Token
-//
-EFI_STATUS
-SockClose (
- IN SOCKET *Sock,
- IN VOID *Token,
- IN BOOLEAN OnAbort
- );
-
-//
-// Call it to get the mode data of low layer protocol
-//
-EFI_STATUS
-SockGetMode (
- IN SOCKET *Sock,
- IN VOID *Mode
- );
-
-//
-// call it to add this socket instance into a group
-//
-EFI_STATUS
-SockGroup (
- IN SOCKET *Sock,
- IN VOID *GroupInfo
- );
-
-//
-// call it to add a route entry for this socket instance
-//
-EFI_STATUS
-SockRoute (
- IN SOCKET *Sock,
- IN VOID *RouteInfo
- );
-
-//
-// Supporting function to operate on socket buffer
-//
-NET_BUF *
-SockBufFirst (
- IN SOCK_BUFFER *Sockbuf
- );
-
-NET_BUF *
-SockBufNext (
- IN SOCK_BUFFER *Sockbuf,
- IN NET_BUF *SockEntry
- );
-
-#endif
+#include <Library/UefiLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+\r
+#define SOCK_SND_BUF 0\r
+#define SOCK_RCV_BUF 1\r
+\r
+#define SOCK_BUFF_LOW_WATER 2 * 1024\r
+#define SOCK_RCV_BUFF_SIZE 8 * 1024\r
+#define SOCK_SND_BUFF_SIZE 8 * 1024\r
+#define SOCK_BACKLOG 5\r
+\r
+#define PROTO_RESERVED_LEN 20\r
+\r
+#define SO_NO_MORE_DATA 0x0001\r
+\r
+//\r
+//\r
+//\r
+// When a socket is created it enters into SO_UNCONFIGURED,\r
+// no actions can be taken on this socket, only after calling\r
+// SockConfigure. The state transition diagram of socket is\r
+// as following:\r
+//\r
+// SO_UNCONFIGURED --- SO_CONFIGURED --- SO_CONNECTING\r
+// ^ | |\r
+// | ---> SO_LISTENING |\r
+// | |\r
+// |------------------SO_DISCONNECTING<-- SO_CONNECTED\r
+//\r
+// A passive socket can only go into SO_LISTENING and\r
+// SO_UNCONFIGURED state. SO_XXXING state is a middle state\r
+// when a socket is undergoing a protocol procedure such\r
+// as requesting a TCP connection.\r
+//\r
+//\r
+//\r
+typedef enum {\r
+ SO_CLOSED = 0,\r
+ SO_LISTENING,\r
+ SO_CONNECTING,\r
+ SO_CONNECTED,\r
+ SO_DISCONNECTING\r
+} SOCK_STATE;\r
+\r
+typedef enum {\r
+ SO_UNCONFIGURED = 0,\r
+ SO_CONFIGURED_ACTIVE,\r
+ SO_CONFIGURED_PASSIVE,\r
+ SO_NO_MAPPING\r
+} SOCK_CONFIGURE_STATE;\r
+\r
+#define SOCK_NO_MORE_DATA(Sock) ((Sock)->Flag |= SO_NO_MORE_DATA)\r
+\r
+#define SOCK_IS_UNCONFIGURED(Sock) ((Sock)->ConfigureState == SO_UNCONFIGURED)\r
+\r
+#define SOCK_IS_CONFIGURED(Sock) \\r
+ (((Sock)->ConfigureState == SO_CONFIGURED_ACTIVE) || \\r
+ ((Sock)->ConfigureState == SO_CONFIGURED_PASSIVE))\r
+\r
+#define SOCK_IS_CONFIGURED_ACTIVE(Sock) \\r
+ ((Sock)->ConfigureState == SO_CONFIGURED_ACTIVE)\r
+\r
+#define SOCK_IS_CONNECTED_PASSIVE(Sock) \\r
+ ((Sock)->ConfigureState == SO_CONFIGURED_PASSIVE)\r
+\r
+#define SOCK_IS_NO_MAPPING(Sock) \\r
+ ((Sock)->ConfigureState == SO_NO_MAPPING)\r
+\r
+#define SOCK_IS_CLOSED(Sock) ((Sock)->State == SO_CLOSED)\r
+\r
+#define SOCK_IS_LISTENING(Sock) ((Sock)->State == SO_LISTENING)\r
+\r
+#define SOCK_IS_CONNECTING(Sock) ((Sock)->State == SO_CONNECTING)\r
+\r
+#define SOCK_IS_CONNECTED(Sock) ((Sock)->State == SO_CONNECTED)\r
+\r
+#define SOCK_IS_DISCONNECTING(Sock) ((Sock)->State == SO_DISCONNECTING)\r
+\r
+#define SOCK_IS_NO_MORE_DATA(Sock) (0 != ((Sock)->Flag & SO_NO_MORE_DATA))\r
+\r
+#define SOCK_SIGNATURE EFI_SIGNATURE_32 ('S', 'O', 'C', 'K')\r
+\r
+#define SOCK_FROM_THIS(a) CR ((a), SOCKET, NetProtocol, SOCK_SIGNATURE)\r
+\r
+#define SET_RCV_BUFFSIZE(Sock, Size) ((Sock)->RcvBuffer.HighWater = (Size))\r
+\r
+#define GET_RCV_BUFFSIZE(Sock) ((Sock)->RcvBuffer.HighWater)\r
+\r
+#define GET_RCV_DATASIZE(Sock) (((Sock)->RcvBuffer.DataQueue)->BufSize)\r
+\r
+#define SET_SND_BUFFSIZE(Sock, Size) ((Sock)->SndBuffer.HighWater = (Size))\r
+\r
+#define GET_SND_BUFFSIZE(Sock) ((Sock)->SndBuffer.HighWater)\r
+\r
+#define GET_SND_DATASIZE(Sock) (((Sock)->SndBuffer.DataQueue)->BufSize)\r
+\r
+#define SET_BACKLOG(Sock, Value) ((Sock)->BackLog = (Value))\r
+\r
+#define GET_BACKLOG(Sock) ((Sock)->BackLog)\r
+\r
+#define SOCK_ERROR(Sock, Error) ((Sock)->SockError = (Error))\r
+\r
+#define SND_BUF_HDR_LEN(Sock) \\r
+ ((SockBufFirst (&((Sock)->SndBuffer)))->TotalSize)\r
+\r
+#define RCV_BUF_HDR_LEN(Sock) \\r
+ ((SockBufFirst (&((Sock)->RcvBuffer)))->TotalSize)\r
+\r
+#define SOCK_FROM_TOKEN(Token) (((SOCK_TOKEN *) (Token))->Sock)\r
+\r
+#define PROTO_TOKEN_FORM_SOCK(SockToken, Type) \\r
+ ((Type *) (((SOCK_TOKEN *) (SockToken))->Token))\r
+\r
+typedef struct _SOCKET SOCKET;\r
+\r
+typedef struct _SOCK_COMPLETION_TOKEN {\r
+ EFI_EVENT Event;\r
+ EFI_STATUS Status;\r
+} SOCK_COMPLETION_TOKEN;\r
+\r
+typedef struct _SOCK_IO_TOKEN {\r
+ SOCK_COMPLETION_TOKEN Token;\r
+ union {\r
+ VOID *RxData;\r
+ VOID *TxData;\r
+ } Packet;\r
+} SOCK_IO_TOKEN;\r
+\r
+//\r
+// the request issued from socket layer to protocol layer\r
+//\r
+typedef enum {\r
+ SOCK_ATTACH, // attach current socket to a new PCB\r
+ SOCK_DETACH, // detach current socket from the PCB\r
+ SOCK_CONFIGURE, // configure attached PCB\r
+ SOCK_FLUSH, // flush attached PCB\r
+ SOCK_SND, // need protocol to send something\r
+ SOCK_SNDPUSH, // need protocol to send pushed data\r
+ SOCK_SNDURG, // need protocol to send urgent data\r
+ SOCK_CONSUMED, // application has retrieved data from socket\r
+ SOCK_CONNECT, // need to connect to a peer\r
+ SOCK_CLOSE, // need to close the protocol process\r
+ SOCK_ABORT, // need to reset the protocol process\r
+ SOCK_POLL, // need to poll to the protocol layer\r
+ SOCK_ROUTE, // need to add a route information\r
+ SOCK_MODE, // need to get the mode data of the protocol\r
+ SOCK_GROUP // need to join a mcast group\r
+} SOCK_REQUEST;\r
+\r
+//\r
+// the socket type\r
+//\r
+typedef enum {\r
+ SOCK_DGRAM, // this socket providing datagram service\r
+ SOCK_STREAM // this socket providing stream service\r
+} SOCK_TYPE;\r
+\r
+//\r
+// the handler of protocol for request from socket\r
+//\r
+typedef\r
+EFI_STATUS\r
+(*SOCK_PROTO_HANDLER) (\r
+ IN SOCKET * Socket, // the socket issuing the request to protocol\r
+ IN SOCK_REQUEST Request, // the request issued by socket\r
+ IN VOID *RequestData // the request related data\r
+ );\r
+\r
+//\r
+// the buffer structure of rcvd data and send data used by socket\r
+//\r
+typedef struct _SOCK_BUFFER {\r
+ UINT32 HighWater; // the buffersize upper limit of sock_buffer\r
+ UINT32 LowWater; // the low warter mark of sock_buffer\r
+ NET_BUF_QUEUE *DataQueue; // the queue to buffer data\r
+} SOCK_BUFFER;\r
+\r
+//\r
+// the initialize data for create a new socket\r
+//\r
+typedef struct _SOCK_INIT_DATA {\r
+ SOCK_TYPE Type;\r
+ SOCK_STATE State;\r
+\r
+ SOCKET *Parent; // the parent of this socket\r
+ UINT32 BackLog; // the connection limit for listening socket\r
+ UINT32 SndBufferSize; // the high warter mark of send buffer\r
+ UINT32 RcvBufferSize; // the high warter mark of receive buffer\r
+ VOID *Protocol; // the pointer to protocol function template\r
+ // wanted to install on socket\r
+\r
+ SOCK_PROTO_HANDLER ProtoHandler;\r
+\r
+ EFI_HANDLE DriverBinding; // the driver binding handle\r
+} SOCK_INIT_DATA;\r
+\r
+//\r
+// socket provided oprerations for low layer protocol\r
+//\r
+\r
+//\r
+// socket provided operations for user interface\r
+//\r
+VOID\r
+SockSetState (\r
+ IN SOCKET *Sock,\r
+ IN SOCK_STATE State\r
+ );\r
+\r
+//\r
+// when the connection establishment process for a Sock\r
+// is finished low layer protocol calling this function\r
+// to notify socket layer\r
+//\r
+VOID\r
+SockConnEstablished (\r
+ IN SOCKET *Sock\r
+ );\r
+\r
+VOID\r
+SockConnClosed (\r
+ IN SOCKET *Sock\r
+ );\r
+\r
+//\r
+// called by low layer protocol to trim send buffer of\r
+// Sock, when Count data is sent out completely\r
+//\r
+VOID\r
+SockDataSent (\r
+ IN SOCKET *Sock,\r
+ IN UINT32 Count\r
+ );\r
+\r
+//\r
+// called by low layer protocol to get Len of data from\r
+// socket to send and copy it in Dest\r
+//\r
+UINT32\r
+SockGetDataToSend (\r
+ IN SOCKET *Sock,\r
+ IN UINT32 Offset,\r
+ IN UINT32 Len,\r
+ IN UINT8 *Dest\r
+ );\r
+\r
+//\r
+// called by low layer protocol to notify socket no more data can be\r
+// received\r
+//\r
+VOID\r
+SockNoMoreData (\r
+ IN SOCKET *Sock\r
+ );\r
+\r
+//\r
+// called by low layer protocol to append a NetBuffer\r
+// to rcv buffer of sock\r
+//\r
+VOID\r
+SockDataRcvd (\r
+ IN SOCKET *Sock,\r
+ IN NET_BUF *NetBuffer,\r
+ IN UINT32 UrgLen\r
+ );\r
+\r
+UINT32\r
+SockGetFreeSpace (\r
+ IN SOCKET *Sock,\r
+ IN UINT32 Which\r
+ );\r
+\r
+SOCKET *\r
+SockClone (\r
+ IN SOCKET *Sock\r
+ );\r
+\r
+VOID\r
+SockRcvdErr (\r
+ IN SOCKET *Sock,\r
+ IN EFI_STATUS Error\r
+ );\r
+\r
+//\r
+// the socket structure representing a network service access point\r
+//\r
+struct _SOCKET {\r
+\r
+ //\r
+ // socket description information\r
+ //\r
+ UINT32 Signature;\r
+ EFI_HANDLE SockHandle; // the virtual handle of the socket\r
+ EFI_HANDLE DriverBinding; // socket't driver binding protocol\r
+ EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;\r
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
+ SOCK_CONFIGURE_STATE ConfigureState;\r
+ SOCK_TYPE Type;\r
+ SOCK_STATE State;\r
+ UINT16 Flag;\r
+ NET_LOCK Lock; // the lock of socket\r
+ SOCK_BUFFER SndBuffer; // send buffer of application's data\r
+ SOCK_BUFFER RcvBuffer; // receive buffer of received data\r
+ EFI_STATUS SockError; // the error returned by low layer protocol\r
+ BOOLEAN IsDestroyed;\r
+\r
+ //\r
+ // fields used to manage the connection request\r
+ //\r
+ UINT32 BackLog; // the limit of connection to this socket\r
+ UINT32 ConnCnt; // the current count of connections to it\r
+ SOCKET *Parent; // listening parent that accept the connection\r
+ NET_LIST_ENTRY ConnectionList; // the connections maintained by this socket\r
+ //\r
+ // the queue to buffer application's asynchronous token\r
+ //\r
+ NET_LIST_ENTRY ListenTokenList;\r
+ NET_LIST_ENTRY RcvTokenList;\r
+ NET_LIST_ENTRY SndTokenList;\r
+ NET_LIST_ENTRY ProcessingSndTokenList;\r
+\r
+ SOCK_COMPLETION_TOKEN *ConnectionToken; // app's token to signal if connected\r
+ SOCK_COMPLETION_TOKEN *CloseToken; // app's token to signal if closed\r
+\r
+ //\r
+ // interface for low level protocol\r
+ //\r
+ SOCK_PROTO_HANDLER ProtoHandler; // the request handler of protocol\r
+ UINT8 ProtoReserved[PROTO_RESERVED_LEN]; // Data fields reserved for protocol\r
+ union {\r
+ EFI_TCP4_PROTOCOL TcpProtocol;\r
+ EFI_UDP4_PROTOCOL UdpProtocol;\r
+ } NetProtocol;\r
+};\r
+\r
+//\r
+// the token structure buffered in socket layer\r
+//\r
+typedef struct _SOCK_TOKEN {\r
+ NET_LIST_ENTRY TokenList; // the entry to add in the token list\r
+ SOCK_COMPLETION_TOKEN *Token; // The application's token\r
+ UINT32 RemainDataLen; // unprocessed data length\r
+ SOCKET *Sock; // the poninter to the socket this token\r
+ // belongs to\r
+} SOCK_TOKEN;\r
+\r
+//\r
+// reserved data to access the NET_BUF delivered by UDP driver\r
+//\r
+typedef struct _UDP_RSV_DATA {\r
+ EFI_TIME TimeStamp;\r
+ EFI_UDP4_SESSION_DATA Session;\r
+} UDP_RSV_DATA;\r
+\r
+//\r
+// reserved data to access the NET_BUF delivered by TCP driver\r
+//\r
+typedef struct _TCP_RSV_DATA {\r
+ UINT32 UrgLen;\r
+} TCP_RSV_DATA;\r
+\r
+//\r
+// call it to creat a socket and attach it to a PCB\r
+//\r
+SOCKET *\r
+SockCreateChild (\r
+ IN SOCK_INIT_DATA *SockInitData,\r
+ IN VOID *ProtoData,\r
+ IN UINT32 Len\r
+ );\r
+\r
+//\r
+// call it to destroy a socket and its related PCB\r
+//\r
+EFI_STATUS\r
+SockDestroyChild (\r
+ IN SOCKET *Sock\r
+ );\r
+\r
+//\r
+// call it to configure a socket and its related PCB\r
+//\r
+EFI_STATUS\r
+SockConfigure (\r
+ IN SOCKET *Sock,\r
+ IN VOID *ConfigData\r
+ );\r
+\r
+//\r
+// call it to connect a socket to the peer\r
+//\r
+EFI_STATUS\r
+SockConnect (\r
+ IN SOCKET *Sock,\r
+ IN VOID *Token\r
+ );\r
+\r
+//\r
+// call it to issue an asynchronous listen token to the socket\r
+//\r
+EFI_STATUS\r
+SockAccept (\r
+ IN SOCKET *Sock,\r
+ IN VOID *Token\r
+ );\r
+\r
+//\r
+// Call it to send data using this socket\r
+//\r
+EFI_STATUS\r
+SockSend (\r
+ IN SOCKET *Sock,\r
+ IN VOID *Token\r
+ );\r
+\r
+//\r
+// Call it to receive data from this socket\r
+//\r
+EFI_STATUS\r
+SockRcv (\r
+ IN SOCKET *Sock,\r
+ IN VOID *Token\r
+ );\r
+\r
+//\r
+// Call it to flush a socket\r
+//\r
+EFI_STATUS\r
+SockFlush (\r
+ IN SOCKET *Sock\r
+ );\r
+\r
+//\r
+// Call it to close a socket in the light of policy in Token\r
+//\r
+EFI_STATUS\r
+SockClose (\r
+ IN SOCKET *Sock,\r
+ IN VOID *Token,\r
+ IN BOOLEAN OnAbort\r
+ );\r
+\r
+//\r
+// Call it to get the mode data of low layer protocol\r
+//\r
+EFI_STATUS\r
+SockGetMode (\r
+ IN SOCKET *Sock,\r
+ IN VOID *Mode\r
+ );\r
+\r
+//\r
+// call it to add this socket instance into a group\r
+//\r
+EFI_STATUS\r
+SockGroup (\r
+ IN SOCKET *Sock,\r
+ IN VOID *GroupInfo\r
+ );\r
+\r
+//\r
+// call it to add a route entry for this socket instance\r
+//\r
+EFI_STATUS\r
+SockRoute (\r
+ IN SOCKET *Sock,\r
+ IN VOID *RouteInfo\r
+ );\r
+\r
+//\r
+// Supporting function to operate on socket buffer\r
+//\r
+NET_BUF *\r
+SockBufFirst (\r
+ IN SOCK_BUFFER *Sockbuf\r
+ );\r
+\r
+NET_BUF *\r
+SockBufNext (\r
+ IN SOCK_BUFFER *Sockbuf,\r
+ IN NET_BUF *SockEntry\r
+ );\r
+\r
+#endif\r
\r
\r
UINT16 mTcp4RandomPort;\r
-extern EFI_COMPONENT_NAME_PROTOCOL gTcp4ComponentName;\r
+extern EFI_COMPONENT_NAME_PROTOCOL gTcp4ComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gTcp4ComponentName2;\r
\r
TCP4_HEARTBEAT_TIMER mTcp4Timer = {\r
NULL,\r
//\r
// Install the TCP4 Driver Binding Protocol\r
//\r
- Status = EfiLibInstallAllDriverProtocols (\r
+ Status = EfiLibInstallDriverBindingComponentName2 (\r
ImageHandle,\r
SystemTable,\r
&mTcp4DriverBinding,\r
ImageHandle,\r
&gTcp4ComponentName,\r
- NULL,\r
- NULL\r
+ &gTcp4ComponentName2\r
);\r
ASSERT_EFI_ERROR (Status);\r
//\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Tcp4Driver.h
-
-Abstract:
-
-
-**/
-
-#ifndef _TCP4_DRIVER_H_
-#define _TCP4_DRIVER_H_
-
-#include <Protocol/ServiceBinding.h>
-#include <Library/IpIoLib.h>
-
-#define TCP4_DRIVER_SIGNATURE EFI_SIGNATURE_32 ('T', 'C', 'P', '4')
-
-#define TCP4_PORT_KNOWN 1024
-#define TCP4_PORT_USER_RESERVED 65535
-
-typedef struct _TCP4_HEARTBEAT_TIMER {
- EFI_EVENT TimerEvent;
- INTN RefCnt;
-} TCP4_HEARTBEAT_TIMER;
-
-typedef struct _TCP4_SERVICE_DATA {
- UINT32 Signature;
- EFI_HANDLE ControllerHandle;
- IP_IO *IpIo; // IP Io consumed by TCP4
- EFI_SERVICE_BINDING_PROTOCOL Tcp4ServiceBinding;
- EFI_HANDLE DriverBindingHandle;
- CHAR16 *MacString;
-} TCP4_SERVICE_DATA;
-
-//
-// Prototype for TCP4 driver Rcv callback function registered to IP_IO
-//
-VOID
-Tcp4RxCallback (
- IN EFI_STATUS Status,
- IN ICMP_ERROR IcmpErr,
- IN EFI_NET_SESSION_DATA *NetSession,
- IN NET_BUF *Pkt,
- IN VOID *Context OPTIONAL
- );
-
-INTN
-TcpSendIpPacket (
- IN TCP_CB *Tcb,
- IN NET_BUF *Nbuf,
- IN UINT32 Src,
- IN UINT32 Dest
- );
-
-EFI_STATUS
-Tcp4Dispatcher (
- IN SOCKET *Sock,
- IN SOCK_REQUEST Request,
- IN VOID *Data OPTIONAL
- );
-
-typedef struct _TCP4_PROTO_DATA {
- TCP4_SERVICE_DATA *TcpService;
- TCP_CB *TcpPcb;
-} TCP4_PROTO_DATA;
-
-#define TCP4_FROM_THIS(a) \
- CR ( \
- (a), \
- TCP4_SERVICE_DATA, \
- Tcp4ServiceBinding, \
- TCP4_DRIVER_SIGNATURE \
- )
-
-//
-// Function prototype for the driver's entry point
-//
-EFI_STATUS
-EFIAPI
-Tcp4DriverEntryPoint (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- );
-
-//
-// Function prototypes for the Drivr Binding Protocol
-//
-EFI_STATUS
-EFIAPI
-Tcp4DriverBindingSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL * This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-Tcp4DriverBindingStart (
- IN EFI_DRIVER_BINDING_PROTOCOL * This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-Tcp4DriverBindingStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- );
-
-//
-// Function ptototypes for the ServiceBinding Prococol
-//
-EFI_STATUS
-EFIAPI
-Tcp4ServiceBindingCreateChild (
- IN EFI_SERVICE_BINDING_PROTOCOL *This,
- IN EFI_HANDLE *ChildHandle
- );
-
-EFI_STATUS
-EFIAPI
-Tcp4ServiceBindingDestroyChild (
- IN EFI_SERVICE_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ChildHandle
- );
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+ Tcp4Driver.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _TCP4_DRIVER_H_\r
+#define _TCP4_DRIVER_H_\r
+\r
+#include <Protocol/ServiceBinding.h>\r
+#include <Library/IpIoLib.h>\r
+\r
+#define TCP4_DRIVER_SIGNATURE EFI_SIGNATURE_32 ('T', 'C', 'P', '4')\r
+\r
+#define TCP4_PORT_KNOWN 1024\r
+#define TCP4_PORT_USER_RESERVED 65535\r
+\r
+typedef struct _TCP4_HEARTBEAT_TIMER {\r
+ EFI_EVENT TimerEvent;\r
+ INTN RefCnt;\r
+} TCP4_HEARTBEAT_TIMER;\r
+\r
+typedef struct _TCP4_SERVICE_DATA {\r
+ UINT32 Signature;\r
+ EFI_HANDLE ControllerHandle;\r
+ IP_IO *IpIo; // IP Io consumed by TCP4\r
+ EFI_SERVICE_BINDING_PROTOCOL Tcp4ServiceBinding;\r
+ EFI_HANDLE DriverBindingHandle;\r
+ CHAR16 *MacString;\r
+} TCP4_SERVICE_DATA;\r
+\r
+//\r
+// Prototype for TCP4 driver Rcv callback function registered to IP_IO\r
+//\r
+VOID\r
+Tcp4RxCallback (\r
+ IN EFI_STATUS Status,\r
+ IN ICMP_ERROR IcmpErr,\r
+ IN EFI_NET_SESSION_DATA *NetSession,\r
+ IN NET_BUF *Pkt,\r
+ IN VOID *Context OPTIONAL\r
+ );\r
+\r
+INTN\r
+TcpSendIpPacket (\r
+ IN TCP_CB *Tcb,\r
+ IN NET_BUF *Nbuf,\r
+ IN UINT32 Src,\r
+ IN UINT32 Dest\r
+ );\r
+\r
+EFI_STATUS\r
+Tcp4Dispatcher (\r
+ IN SOCKET *Sock,\r
+ IN SOCK_REQUEST Request,\r
+ IN VOID *Data OPTIONAL\r
+ );\r
+\r
+typedef struct _TCP4_PROTO_DATA {\r
+ TCP4_SERVICE_DATA *TcpService;\r
+ TCP_CB *TcpPcb;\r
+} TCP4_PROTO_DATA;\r
+\r
+#define TCP4_FROM_THIS(a) \\r
+ CR ( \\r
+ (a), \\r
+ TCP4_SERVICE_DATA, \\r
+ Tcp4ServiceBinding, \\r
+ TCP4_DRIVER_SIGNATURE \\r
+ )\r
+\r
+//\r
+// Function prototype for the driver's entry point\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4DriverEntryPoint (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ );\r
+\r
+//\r
+// Function prototypes for the Drivr Binding Protocol\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4DriverBindingSupported (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL * This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4DriverBindingStart (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL * This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4DriverBindingStop (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
+ );\r
+\r
+//\r
+// Function ptototypes for the ServiceBinding Prococol\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4ServiceBindingCreateChild (\r
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE *ChildHandle\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4ServiceBindingDestroyChild (\r
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ChildHandle\r
+ );\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Tcp4Func.h
-
-Abstract:
-
-
-**/
-
-#ifndef _TCP4_FUNC_H_
-#define _TCP4_FUNC_H_
-
-//
-// Declaration of all the functions in TCP
-// protocol. It is intended to keep tcp.h
-// clear.
-//
-
-//
-// Functions in tcp.c
-//
-BOOLEAN
-TcpFindTcbByPeer (
- IN EFI_IPv4_ADDRESS *Addr,
- IN TCP_PORTNO Port
- );
-
-TCP_CB *
-TcpLocateTcb (
- IN TCP_PORTNO LocalPort,
- IN UINT32 LocalIp,
- IN TCP_PORTNO RemotePort,
- IN UINT32 RemoteIp,
- IN BOOLEAN Syn
- );
-
-INTN
-TcpInsertTcb (
- IN TCP_CB *Tcb
- );
-
-TCP_CB *
-TcpCloneTcb (
- IN TCP_CB *Tcb
- );
-
-TCP_SEQNO
-TcpGetIss (
- VOID
- );
-
-VOID
-TcpInitTcbLocal (
- IN TCP_CB *Tcb
- );
-
-VOID
-TcpInitTcbPeer (
- IN TCP_CB *Tcb,
- IN TCP_SEG *Seg,
- IN TCP_OPTION *Opt
- );
-
-UINT16
-TcpGetRcvMss (
- IN SOCKET *Sock
- );
-
-VOID
-TcpSetState (
- IN TCP_CB *Tcb,
- IN UINT8 State
- );
-
-//
-// Functions in Tcp4Output.c
-//
-INTN
-TcpSendIpPacket (
- IN TCP_CB *Tcb,
- IN NET_BUF *Nbuf,
- IN UINT32 Src,
- IN UINT32 Dst
- );
-
-INTN
-TcpToSendData (
- IN TCP_CB *Tcb,
- IN INTN Force
- );
-
-VOID
-TcpToSendAck (
- IN TCP_CB *Tcb
- );
-
-VOID
-TcpSendAck (
- IN TCP_CB *Tcb
- );
-
-INTN
-TcpSendZeroProbe (
- IN TCP_CB *Tcb
- );
-
-INTN
-TcpDeliverData (
- IN TCP_CB *Tcb
- );
-
-INTN
-TcpSendReset (
- IN TCP_CB *Tcb,
- IN TCP_HEAD *Head,
- IN INT32 Len,
- IN UINT32 Local,
- IN UINT32 Remote
- );
-
-UINT32
-TcpRcvWinOld (
- IN TCP_CB *Tcb
- );
-
-UINT32
-TcpRcvWinNow (
- IN TCP_CB *Tcb
- );
-
-INTN
-TcpRetransmit (
- IN TCP_CB *Tcb,
- IN TCP_SEQNO Seq
- );
-
-UINT32
-TcpDataToSend (
- IN TCP_CB *Tcb,
- IN INTN Force
- );
-
-INTN
-TcpVerifySegment (
- IN NET_BUF *Nbuf
- );
-
-INTN
-TcpCheckSndQue (
- IN NET_LIST_ENTRY *Head
- );
-
-NET_BUF *
-TcpGetSegmentSndQue (
- IN TCP_CB *Tcb,
- IN TCP_SEQNO Seq,
- IN UINT32 Len
- );
-
-NET_BUF *
-TcpGetSegmentSock (
- IN TCP_CB *Tcb,
- IN TCP_SEQNO Seq,
- IN UINT32 Len
- );
-
-NET_BUF *
-TcpGetSegment (
- IN TCP_CB *Tcb,
- IN TCP_SEQNO Seq,
- IN UINT32 Len
- );
-
-TCP_SEQNO
-TcpGetMaxSndNxt (
- IN TCP_CB *Tcb
- );
-
-//
-// Functions from Tcp4Input.c
-//
-VOID
-TcpIcmpInput (
- IN NET_BUF *Nbuf,
- IN ICMP_ERROR IcmpErr,
- IN UINT32 Src,
- IN UINT32 Dst
- );
-
-INTN
-TcpInput (
- IN NET_BUF *Nbuf,
- IN UINT32 Src,
- IN UINT32 Dst
- );
-
-INTN
-TcpSeqAcceptable (
- IN TCP_CB *Tcb,
- IN TCP_SEG *Seg
- );
-
-VOID
-TcpFastRecover (
- IN TCP_CB *Tcb,
- IN TCP_SEG *Seg
- );
-
-VOID
-TcpFastLossRecover (
- IN TCP_CB *Tcb,
- IN TCP_SEG *Seg
- );
-
-VOID
-TcpComputeRtt (
- IN TCP_CB *Tcb,
- IN UINT32 Measure
- );
-
-INTN
-TcpTrimInWnd (
- IN TCP_CB *Tcb,
- IN NET_BUF *Buf
- );
-
-VOID
-TcpQueueData (
- IN TCP_CB *Tcb,
- IN NET_BUF *Nbuf
- );
-
-VOID
-TcpAdjustSndQue (
- IN TCP_CB *Tcb,
- IN TCP_SEQNO Ack
- );
-
-//
-// Functions from Tcp4Misc.c
-//
-UINT16
-TcpChecksum (
- IN NET_BUF *Buf,
- IN UINT16 HeadChecksum
- );
-
-TCP_SEG *
-TcpFormatNetbuf (
- IN TCP_CB *Tcb,
- IN NET_BUF *Nbuf
- );
-
-VOID
-TcpOnAppConnect (
- IN TCP_CB *Tcb
- );
-
-INTN
-TcpOnAppConsume (
- IN TCP_CB *Tcb
- );
-
-VOID
-TcpOnAppClose (
- IN TCP_CB *Tcb
- );
-
-INTN
-TcpOnAppSend (
- IN TCP_CB *Tcb
- );
-
-VOID
-TcpOnAppAbort (
- IN TCP_CB *Tcb
- );
-
-VOID
-TcpResetConnection (
- IN TCP_CB *Tcb
- );
-
-//
-// Functions in Tcp4Timer.c
-//
-VOID
-TcpClose (
- IN TCP_CB *Tcb
- );
-
-VOID
-EFIAPI
-TcpTicking (
- IN EFI_EVENT Event,
- IN VOID *Context
- );
-
-VOID
-TcpSetTimer (
- IN TCP_CB *Tcb,
- IN UINT16 Timer,
- IN UINT32 TimeOut
- );
-
-VOID
-TcpClearTimer (
- IN TCP_CB *Tcb,
- IN UINT16 Timer
- );
-
-VOID
-TcpClearAllTimer (
- IN TCP_CB *Tcb
- );
-
-VOID
-TcpSetProbeTimer (
- IN TCP_CB *Tcb
- );
-
-VOID
-TcpSetKeepaliveTimer (
- IN TCP_CB *Tcb
- );
-
-VOID
-TcpBackoffRto (
- IN TCP_CB *Tcb
- );
-
-EFI_STATUS
-TcpSetVariableData (
- IN TCP4_SERVICE_DATA *Tcp4Service
- );
-
-VOID
-TcpClearVariableData (
- IN TCP4_SERVICE_DATA *Tcp4Service
- );
-
-EFI_STATUS
-TcpInstallDevicePath (
- IN SOCKET *Sock
- );
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+ Tcp4Func.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _TCP4_FUNC_H_\r
+#define _TCP4_FUNC_H_\r
+\r
+//\r
+// Declaration of all the functions in TCP\r
+// protocol. It is intended to keep tcp.h\r
+// clear.\r
+//\r
+\r
+//\r
+// Functions in tcp.c\r
+//\r
+BOOLEAN\r
+TcpFindTcbByPeer (\r
+ IN EFI_IPv4_ADDRESS *Addr,\r
+ IN TCP_PORTNO Port\r
+ );\r
+\r
+TCP_CB *\r
+TcpLocateTcb (\r
+ IN TCP_PORTNO LocalPort,\r
+ IN UINT32 LocalIp,\r
+ IN TCP_PORTNO RemotePort,\r
+ IN UINT32 RemoteIp,\r
+ IN BOOLEAN Syn\r
+ );\r
+\r
+INTN\r
+TcpInsertTcb (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+TCP_CB *\r
+TcpCloneTcb (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+TCP_SEQNO\r
+TcpGetIss (\r
+ VOID\r
+ );\r
+\r
+VOID\r
+TcpInitTcbLocal (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+VOID\r
+TcpInitTcbPeer (\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEG *Seg,\r
+ IN TCP_OPTION *Opt\r
+ );\r
+\r
+UINT16\r
+TcpGetRcvMss (\r
+ IN SOCKET *Sock\r
+ );\r
+\r
+VOID\r
+TcpSetState (\r
+ IN TCP_CB *Tcb,\r
+ IN UINT8 State\r
+ );\r
+\r
+//\r
+// Functions in Tcp4Output.c\r
+//\r
+INTN\r
+TcpSendIpPacket (\r
+ IN TCP_CB *Tcb,\r
+ IN NET_BUF *Nbuf,\r
+ IN UINT32 Src,\r
+ IN UINT32 Dst\r
+ );\r
+\r
+INTN\r
+TcpToSendData (\r
+ IN TCP_CB *Tcb,\r
+ IN INTN Force\r
+ );\r
+\r
+VOID\r
+TcpToSendAck (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+VOID\r
+TcpSendAck (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+INTN\r
+TcpSendZeroProbe (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+INTN\r
+TcpDeliverData (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+INTN\r
+TcpSendReset (\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_HEAD *Head,\r
+ IN INT32 Len,\r
+ IN UINT32 Local,\r
+ IN UINT32 Remote\r
+ );\r
+\r
+UINT32\r
+TcpRcvWinOld (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+UINT32\r
+TcpRcvWinNow (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+INTN\r
+TcpRetransmit (\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEQNO Seq\r
+ );\r
+\r
+UINT32\r
+TcpDataToSend (\r
+ IN TCP_CB *Tcb,\r
+ IN INTN Force\r
+ );\r
+\r
+INTN\r
+TcpVerifySegment (\r
+ IN NET_BUF *Nbuf\r
+ );\r
+\r
+INTN\r
+TcpCheckSndQue (\r
+ IN NET_LIST_ENTRY *Head\r
+ );\r
+\r
+NET_BUF *\r
+TcpGetSegmentSndQue (\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEQNO Seq,\r
+ IN UINT32 Len\r
+ );\r
+\r
+NET_BUF *\r
+TcpGetSegmentSock (\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEQNO Seq,\r
+ IN UINT32 Len\r
+ );\r
+\r
+NET_BUF *\r
+TcpGetSegment (\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEQNO Seq,\r
+ IN UINT32 Len\r
+ );\r
+\r
+TCP_SEQNO\r
+TcpGetMaxSndNxt (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+//\r
+// Functions from Tcp4Input.c\r
+//\r
+VOID\r
+TcpIcmpInput (\r
+ IN NET_BUF *Nbuf,\r
+ IN ICMP_ERROR IcmpErr,\r
+ IN UINT32 Src,\r
+ IN UINT32 Dst\r
+ );\r
+\r
+INTN\r
+TcpInput (\r
+ IN NET_BUF *Nbuf,\r
+ IN UINT32 Src,\r
+ IN UINT32 Dst\r
+ );\r
+\r
+INTN\r
+TcpSeqAcceptable (\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEG *Seg\r
+ );\r
+\r
+VOID\r
+TcpFastRecover (\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEG *Seg\r
+ );\r
+\r
+VOID\r
+TcpFastLossRecover (\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEG *Seg\r
+ );\r
+\r
+VOID\r
+TcpComputeRtt (\r
+ IN TCP_CB *Tcb,\r
+ IN UINT32 Measure\r
+ );\r
+\r
+INTN\r
+TcpTrimInWnd (\r
+ IN TCP_CB *Tcb,\r
+ IN NET_BUF *Buf\r
+ );\r
+\r
+VOID\r
+TcpQueueData (\r
+ IN TCP_CB *Tcb,\r
+ IN NET_BUF *Nbuf\r
+ );\r
+\r
+VOID\r
+TcpAdjustSndQue (\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEQNO Ack\r
+ );\r
+\r
+//\r
+// Functions from Tcp4Misc.c\r
+//\r
+UINT16\r
+TcpChecksum (\r
+ IN NET_BUF *Buf,\r
+ IN UINT16 HeadChecksum\r
+ );\r
+\r
+TCP_SEG *\r
+TcpFormatNetbuf (\r
+ IN TCP_CB *Tcb,\r
+ IN NET_BUF *Nbuf\r
+ );\r
+\r
+VOID\r
+TcpOnAppConnect (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+INTN\r
+TcpOnAppConsume (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+VOID\r
+TcpOnAppClose (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+INTN\r
+TcpOnAppSend (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+VOID\r
+TcpOnAppAbort (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+VOID\r
+TcpResetConnection (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+//\r
+// Functions in Tcp4Timer.c\r
+//\r
+VOID\r
+TcpClose (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+VOID\r
+EFIAPI\r
+TcpTicking (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ );\r
+\r
+VOID\r
+TcpSetTimer (\r
+ IN TCP_CB *Tcb,\r
+ IN UINT16 Timer,\r
+ IN UINT32 TimeOut\r
+ );\r
+\r
+VOID\r
+TcpClearTimer (\r
+ IN TCP_CB *Tcb,\r
+ IN UINT16 Timer\r
+ );\r
+\r
+VOID\r
+TcpClearAllTimer (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+VOID\r
+TcpSetProbeTimer (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+VOID\r
+TcpSetKeepaliveTimer (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+VOID\r
+TcpBackoffRto (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+EFI_STATUS\r
+TcpSetVariableData (\r
+ IN TCP4_SERVICE_DATA *Tcp4Service\r
+ );\r
+\r
+VOID\r
+TcpClearVariableData (\r
+ IN TCP4_SERVICE_DATA *Tcp4Service\r
+ );\r
+\r
+EFI_STATUS\r
+TcpInstallDevicePath (\r
+ IN SOCKET *Sock\r
+ );\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Tcp4Main.h
-
-Abstract:
-
-
-**/
-
-#ifndef _TCP4_MAIN_H_
-#define _TCP4_MAIN_H_
-
-#include "Socket.h"
-
-#include "Tcp4Proto.h"
-#include "Tcp4Driver.h"
-
-
-extern UINT16 mTcp4RandomPort;
-
-//
-// Driver Produced Protocol Prototypes
-//
-
-#define TCP4_DEBUG_ERROR(PrintArg) NET_DEBUG_ERROR ("Tcp", PrintArg)
-#define TCP4_DEBUG_WARN(PrintArg) NET_DEBUG_WARNING ("Tcp", PrintArg)
-#define TCP4_DEBUG_TRACE(PrintArg) NET_DEBUG_TRACE ("Tcp", PrintArg)
-
-//
-// Function prototype for the Tcp4 socket request handler
-//
-EFI_STATUS
-Tcp4Dispatcher (
- IN SOCKET *Sock,
- IN SOCK_REQUEST Request,
- IN VOID *Data OPTIONAL
- );
-
-typedef struct _TCP4_MODE_DATA {
- EFI_TCP4_CONNECTION_STATE *Tcp4State;
- EFI_TCP4_CONFIG_DATA *Tcp4ConfigData;
- EFI_IP4_MODE_DATA *Ip4ModeData;
- EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData;
- EFI_SIMPLE_NETWORK_MODE *SnpModeData;
-} TCP4_MODE_DATA;
-
-typedef struct _TCP4_ROUTE_INFO {
- BOOLEAN DeleteRoute;
- EFI_IPv4_ADDRESS *SubnetAddress;
- EFI_IPv4_ADDRESS *SubnetMask;
- EFI_IPv4_ADDRESS *GatewayAddress;
-} TCP4_ROUTE_INFO;
-
-//
-// Get the mode data of a TCP instance
-//
-EFI_STATUS
-EFIAPI
-Tcp4GetModeData (
- IN CONST EFI_TCP4_PROTOCOL * This,
- OUT EFI_TCP4_CONNECTION_STATE * Tcp4State OPTIONAL,
- OUT EFI_TCP4_CONFIG_DATA * Tcp4ConfigData OPTIONAL,
- OUT EFI_IP4_MODE_DATA * Ip4ModeData OPTIONAL,
- OUT EFI_MANAGED_NETWORK_CONFIG_DATA * MnpConfigData OPTIONAL,
- OUT EFI_SIMPLE_NETWORK_MODE * SnpModeData OPTIONAL
- );
-
-//
-// Initialize or reset a TCP instance
-//
-EFI_STATUS
-EFIAPI
-Tcp4Configure (
- IN EFI_TCP4_PROTOCOL * This,
- IN EFI_TCP4_CONFIG_DATA * TcpConfigData OPTIONAL
- );
-
-//
-// Add a route entry to the route table
-//
-EFI_STATUS
-EFIAPI
-Tcp4Routes (
- IN EFI_TCP4_PROTOCOL *This,
- IN BOOLEAN DeleteRoute,
- IN EFI_IPv4_ADDRESS *SubnetAddress,
- IN EFI_IPv4_ADDRESS *SubnetMask,
- IN EFI_IPv4_ADDRESS *GatewayAddress
- );
-
-//
-// Issue an asynchronous connection establishment
-// request to the peer
-//
-EFI_STATUS
-EFIAPI
-Tcp4Connect (
- IN EFI_TCP4_PROTOCOL *This,
- IN EFI_TCP4_CONNECTION_TOKEN *ConnectionToken
- );
-
-//
-// Issue an asynchronous listent token to accept an
-// incoming connection reques
-//
-EFI_STATUS
-EFIAPI
-Tcp4Accept (
- IN EFI_TCP4_PROTOCOL *This,
- IN EFI_TCP4_LISTEN_TOKEN *ListenToken
- );
-
-//
-// Issue an asynchronous IO token to transmit some data
-// through this TCP instance
-//
-EFI_STATUS
-EFIAPI
-Tcp4Transmit (
- IN EFI_TCP4_PROTOCOL *This,
- IN EFI_TCP4_IO_TOKEN *Token
- );
-
-//
-// Issue an asynchronous IO token to receive some data
-// through this TCP instance
-//
-EFI_STATUS
-Tcp4Receive (
- IN EFI_TCP4_PROTOCOL *This,
- IN EFI_TCP4_IO_TOKEN *Token
- );
-
-//
-// Issue an asynchronous CloseToken to close a TCP
-// connection represented by instance
-//
-EFI_STATUS
-EFIAPI
-Tcp4Close (
- IN EFI_TCP4_PROTOCOL *This,
- IN EFI_TCP4_CLOSE_TOKEN *CloseToken
- );
-
-//
-// cancle an connect, listent or IO token
-//
-EFI_STATUS
-EFIAPI
-Tcp4Cancel (
- IN EFI_TCP4_PROTOCOL * This,
- IN EFI_TCP4_COMPLETION_TOKEN * Token OPTIONAL
- );
-
-//
-// poll data from NIC for receive
-//
-EFI_STATUS
-EFIAPI
-Tcp4Poll (
- IN EFI_TCP4_PROTOCOL *This
- );
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+ Tcp4Main.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _TCP4_MAIN_H_\r
+#define _TCP4_MAIN_H_\r
+\r
+#include "Socket.h"\r
+\r
+#include "Tcp4Proto.h"\r
+#include "Tcp4Driver.h"\r
+\r
+\r
+extern UINT16 mTcp4RandomPort;\r
+\r
+//\r
+// Driver Produced Protocol Prototypes\r
+//\r
+\r
+#define TCP4_DEBUG_ERROR(PrintArg) NET_DEBUG_ERROR ("Tcp", PrintArg)\r
+#define TCP4_DEBUG_WARN(PrintArg) NET_DEBUG_WARNING ("Tcp", PrintArg)\r
+#define TCP4_DEBUG_TRACE(PrintArg) NET_DEBUG_TRACE ("Tcp", PrintArg)\r
+\r
+//\r
+// Function prototype for the Tcp4 socket request handler\r
+//\r
+EFI_STATUS\r
+Tcp4Dispatcher (\r
+ IN SOCKET *Sock,\r
+ IN SOCK_REQUEST Request,\r
+ IN VOID *Data OPTIONAL\r
+ );\r
+\r
+typedef struct _TCP4_MODE_DATA {\r
+ EFI_TCP4_CONNECTION_STATE *Tcp4State;\r
+ EFI_TCP4_CONFIG_DATA *Tcp4ConfigData;\r
+ EFI_IP4_MODE_DATA *Ip4ModeData;\r
+ EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData;\r
+ EFI_SIMPLE_NETWORK_MODE *SnpModeData;\r
+} TCP4_MODE_DATA;\r
+\r
+typedef struct _TCP4_ROUTE_INFO {\r
+ BOOLEAN DeleteRoute;\r
+ EFI_IPv4_ADDRESS *SubnetAddress;\r
+ EFI_IPv4_ADDRESS *SubnetMask;\r
+ EFI_IPv4_ADDRESS *GatewayAddress;\r
+} TCP4_ROUTE_INFO;\r
+\r
+//\r
+// Get the mode data of a TCP instance\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4GetModeData (\r
+ IN CONST EFI_TCP4_PROTOCOL * This,\r
+ OUT EFI_TCP4_CONNECTION_STATE * Tcp4State OPTIONAL,\r
+ OUT EFI_TCP4_CONFIG_DATA * Tcp4ConfigData OPTIONAL,\r
+ OUT EFI_IP4_MODE_DATA * Ip4ModeData OPTIONAL,\r
+ OUT EFI_MANAGED_NETWORK_CONFIG_DATA * MnpConfigData OPTIONAL,\r
+ OUT EFI_SIMPLE_NETWORK_MODE * SnpModeData OPTIONAL\r
+ );\r
+\r
+//\r
+// Initialize or reset a TCP instance\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4Configure (\r
+ IN EFI_TCP4_PROTOCOL * This,\r
+ IN EFI_TCP4_CONFIG_DATA * TcpConfigData OPTIONAL\r
+ );\r
+\r
+//\r
+// Add a route entry to the route table\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4Routes (\r
+ IN EFI_TCP4_PROTOCOL *This,\r
+ IN BOOLEAN DeleteRoute,\r
+ IN EFI_IPv4_ADDRESS *SubnetAddress,\r
+ IN EFI_IPv4_ADDRESS *SubnetMask,\r
+ IN EFI_IPv4_ADDRESS *GatewayAddress\r
+ );\r
+\r
+//\r
+// Issue an asynchronous connection establishment\r
+// request to the peer\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4Connect (\r
+ IN EFI_TCP4_PROTOCOL *This,\r
+ IN EFI_TCP4_CONNECTION_TOKEN *ConnectionToken\r
+ );\r
+\r
+//\r
+// Issue an asynchronous listent token to accept an\r
+// incoming connection reques\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4Accept (\r
+ IN EFI_TCP4_PROTOCOL *This,\r
+ IN EFI_TCP4_LISTEN_TOKEN *ListenToken\r
+ );\r
+\r
+//\r
+// Issue an asynchronous IO token to transmit some data\r
+// through this TCP instance\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4Transmit (\r
+ IN EFI_TCP4_PROTOCOL *This,\r
+ IN EFI_TCP4_IO_TOKEN *Token\r
+ );\r
+\r
+//\r
+// Issue an asynchronous IO token to receive some data\r
+// through this TCP instance\r
+//\r
+EFI_STATUS\r
+Tcp4Receive (\r
+ IN EFI_TCP4_PROTOCOL *This,\r
+ IN EFI_TCP4_IO_TOKEN *Token\r
+ );\r
+\r
+//\r
+// Issue an asynchronous CloseToken to close a TCP\r
+// connection represented by instance\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4Close (\r
+ IN EFI_TCP4_PROTOCOL *This,\r
+ IN EFI_TCP4_CLOSE_TOKEN *CloseToken\r
+ );\r
+\r
+//\r
+// cancle an connect, listent or IO token\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4Cancel (\r
+ IN EFI_TCP4_PROTOCOL * This,\r
+ IN EFI_TCP4_COMPLETION_TOKEN * Token OPTIONAL\r
+ );\r
+\r
+//\r
+// poll data from NIC for receive\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+Tcp4Poll (\r
+ IN EFI_TCP4_PROTOCOL *This\r
+ );\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Tcp4Option.h
-
-Abstract:
-
-
-**/
-
-#ifndef _TCP4_OPTION_H_
-#define _TCP4_OPTION_H_
-
-//
-// The structure to store the parse option value.
-// ParseOption only parse the options, don't process them.
-//
-typedef struct s_TCP_OPTION {
- UINT8 Flag; // flag such as TCP_OPTION_RCVD_MSS
- UINT8 WndScale; // the WndScale received
- UINT16 Mss; // the Mss received
- UINT32 TSVal; // the TSVal field in a timestamp option
- UINT32 TSEcr; // the TSEcr field in a timestamp option
-} TCP_OPTION;
-
-enum {
-
- //
- // supported TCP option type and their length
- //
- TCP_OPTION_EOP = 0, // End Of oPtion
- TCP_OPTION_NOP = 1, // No-Option.
- TCP_OPTION_MSS = 2, // Maximum Segment Size
- TCP_OPTION_WS = 3, // Window scale
- TCP_OPTION_TS = 8, // Timestamp
- TCP_OPTION_MSS_LEN = 4, // length of MSS option
- TCP_OPTION_WS_LEN = 3, // length of window scale option
- TCP_OPTION_TS_LEN = 10, // length of timestamp option
- TCP_OPTION_WS_ALIGNED_LEN = 4, // length of window scale option, aligned
- TCP_OPTION_TS_ALIGNED_LEN = 12, // length of timestamp option, aligned
-
- //
- // recommend format of timestamp window scale
- // option for fast process.
- //
- TCP_OPTION_TS_FAST = ((TCP_OPTION_NOP << 24) |
- (TCP_OPTION_NOP << 16) |
- (TCP_OPTION_TS << 8) |
- TCP_OPTION_TS_LEN),
-
- TCP_OPTION_WS_FAST = ((TCP_OPTION_NOP << 24) |
- (TCP_OPTION_WS << 16) |
- (TCP_OPTION_WS_LEN << 8)),
-
- TCP_OPTION_MSS_FAST = ((TCP_OPTION_MSS << 24) |
- (TCP_OPTION_MSS_LEN << 16)),
-
- //
- // Other misc definations
- //
- TCP_OPTION_MAX_WS = 14, // Maxium window scale value
- TCP_OPTION_MAX_WIN = 0xffff, // max window size in TCP header
- TCP_OPTION_RCVD_MSS = 0x01,
- TCP_OPTION_RCVD_WS = 0x02,
- TCP_OPTION_RCVD_TS = 0x04
-};
-
-UINT8
-TcpComputeScale (
- IN TCP_CB *Tcb
- );
-
-UINT16
-TcpSynBuildOption (
- IN TCP_CB *Tcb,
- IN NET_BUF *Buf
- );
-
-UINT16
-TcpBuildOption (
- IN TCP_CB *Tcb,
- IN NET_BUF *Buf
- );
-
-INTN
-TcpParseOption (
- IN TCP_HEAD *Tcp,
- IN TCP_OPTION *Option
- );
-
-UINT32
-TcpPawsOK (
- IN TCP_CB *Tcb,
- IN UINT32 TSVal
- );
-
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+ Tcp4Option.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _TCP4_OPTION_H_\r
+#define _TCP4_OPTION_H_\r
+\r
+//\r
+// The structure to store the parse option value.\r
+// ParseOption only parse the options, don't process them.\r
+//\r
+typedef struct s_TCP_OPTION {\r
+ UINT8 Flag; // flag such as TCP_OPTION_RCVD_MSS\r
+ UINT8 WndScale; // the WndScale received\r
+ UINT16 Mss; // the Mss received\r
+ UINT32 TSVal; // the TSVal field in a timestamp option\r
+ UINT32 TSEcr; // the TSEcr field in a timestamp option\r
+} TCP_OPTION;\r
+\r
+enum {\r
+\r
+ //\r
+ // supported TCP option type and their length\r
+ //\r
+ TCP_OPTION_EOP = 0, // End Of oPtion\r
+ TCP_OPTION_NOP = 1, // No-Option.\r
+ TCP_OPTION_MSS = 2, // Maximum Segment Size\r
+ TCP_OPTION_WS = 3, // Window scale\r
+ TCP_OPTION_TS = 8, // Timestamp\r
+ TCP_OPTION_MSS_LEN = 4, // length of MSS option\r
+ TCP_OPTION_WS_LEN = 3, // length of window scale option\r
+ TCP_OPTION_TS_LEN = 10, // length of timestamp option\r
+ TCP_OPTION_WS_ALIGNED_LEN = 4, // length of window scale option, aligned\r
+ TCP_OPTION_TS_ALIGNED_LEN = 12, // length of timestamp option, aligned\r
+\r
+ //\r
+ // recommend format of timestamp window scale\r
+ // option for fast process.\r
+ //\r
+ TCP_OPTION_TS_FAST = ((TCP_OPTION_NOP << 24) |\r
+ (TCP_OPTION_NOP << 16) |\r
+ (TCP_OPTION_TS << 8) |\r
+ TCP_OPTION_TS_LEN),\r
+\r
+ TCP_OPTION_WS_FAST = ((TCP_OPTION_NOP << 24) |\r
+ (TCP_OPTION_WS << 16) |\r
+ (TCP_OPTION_WS_LEN << 8)),\r
+\r
+ TCP_OPTION_MSS_FAST = ((TCP_OPTION_MSS << 24) |\r
+ (TCP_OPTION_MSS_LEN << 16)),\r
+\r
+ //\r
+ // Other misc definations\r
+ //\r
+ TCP_OPTION_MAX_WS = 14, // Maxium window scale value\r
+ TCP_OPTION_MAX_WIN = 0xffff, // max window size in TCP header\r
+ TCP_OPTION_RCVD_MSS = 0x01,\r
+ TCP_OPTION_RCVD_WS = 0x02,\r
+ TCP_OPTION_RCVD_TS = 0x04\r
+};\r
+\r
+UINT8\r
+TcpComputeScale (\r
+ IN TCP_CB *Tcb\r
+ );\r
+\r
+UINT16\r
+TcpSynBuildOption (\r
+ IN TCP_CB *Tcb,\r
+ IN NET_BUF *Buf\r
+ );\r
+\r
+UINT16\r
+TcpBuildOption (\r
+ IN TCP_CB *Tcb,\r
+ IN NET_BUF *Buf\r
+ );\r
+\r
+INTN\r
+TcpParseOption (\r
+ IN TCP_HEAD *Tcp,\r
+ IN TCP_OPTION *Option\r
+ );\r
+\r
+UINT32\r
+TcpPawsOK (\r
+ IN TCP_CB *Tcb,\r
+ IN UINT32 TSVal\r
+ );\r
+\r
+#endif\r
-/** @file
-
-Copyright (c) 2005 - 2006, 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:
-
- Tcp4Proto.h
-
-Abstract:
-
-
-**/
-
-#ifndef _TCP4_PROTO_H_
-#define _TCP4_PROTO_H_
-
-typedef struct _TCP_CB TCP_CB;
-
-#include "Tcp4Driver.h"
-#include "Socket.h"
-#include "Tcp4Option.h"
-
-//
-// tcp states, Don't change their order, it is used as
-// index to mTcpOutFlag and other macros
-//
-enum {
- TCP_CLOSED = 0,
- TCP_LISTEN,
- TCP_SYN_SENT,
- TCP_SYN_RCVD,
- TCP_ESTABLISHED,
- TCP_FIN_WAIT_1,
- TCP_FIN_WAIT_2,
- TCP_CLOSING,
- TCP_TIME_WAIT,
- TCP_CLOSE_WAIT,
- TCP_LAST_ACK
-};
-
-//
-// flags in the TCP header
-//
-enum {
-
- TCP_FLG_FIN = 0x01,
- TCP_FLG_SYN = 0x02,
- TCP_FLG_RST = 0x04,
- TCP_FLG_PSH = 0x08,
- TCP_FLG_ACK = 0x10,
- TCP_FLG_URG = 0x20,
- TCP_FLG_FLAG = 0x3F // mask for all the flags
-};
-
-enum {
-
- //
- // TCP error status
- //
- TCP_CONNECT_REFUSED = -1,
- TCP_CONNECT_RESET = -2,
- TCP_CONNECT_CLOSED = -3,
-
- //
- // Current congestion status as suggested by RFC3782.
- //
- TCP_CONGEST_RECOVER = 1, // during the NewReno fast recovery
- TCP_CONGEST_LOSS = 2, // retxmit because of retxmit time out
- TCP_CONGEST_OPEN = 3, // TCP is opening its congestion window
-
- //
- // TCP control flags
- //
- TCP_CTRL_NO_NAGLE = 0x0001, // disable Nagle algorithm
- TCP_CTRL_NO_KEEPALIVE = 0x0002, // disable keepalive timer
- TCP_CTRL_NO_WS = 0x0004, // disable window scale option
- TCP_CTRL_RCVD_WS = 0x0008, // rcvd a wnd scale option in syn
- TCP_CTRL_NO_TS = 0x0010, // disable Timestamp option
- TCP_CTRL_RCVD_TS = 0x0020, // rcvd a Timestamp option in syn
- TCP_CTRL_SND_TS = 0x0040, // Send Timestamp option to remote
- TCP_CTRL_SND_URG = 0x0080, // in urgent send mode
- TCP_CTRL_RCVD_URG = 0x0100, // in urgent receive mode
- TCP_CTRL_SND_PSH = 0x0200, // in PUSH send mode
- TCP_CTRL_FIN_SENT = 0x0400, // FIN is sent
- TCP_CTRL_FIN_ACKED = 0x0800, // FIN is ACKed.
- TCP_CTRL_TIMER_ON = 0x1000, // At least one of the timer is on
- TCP_CTRL_RTT_ON = 0x2000, // The RTT measurement is on
- TCP_CTRL_ACK_NOW = 0x4000, // Send the ACK now, don't delay
-
- //
- // Timer related values
- //
- TCP_TIMER_CONNECT = 0, // Connection establishment timer
- TCP_TIMER_REXMIT = 1, // retransmit timer
- TCP_TIMER_PROBE = 2, // Window probe timer
- TCP_TIMER_KEEPALIVE = 3, // Keepalive timer
- TCP_TIMER_FINWAIT2 = 4, // FIN_WAIT_2 timer
- TCP_TIMER_2MSL = 5, // TIME_WAIT tiemr
- TCP_TIMER_NUMBER = 6, // the total number of TCP timer.
- TCP_TICK = 200, // every TCP tick is 200ms
- TCP_TICK_HZ = 5, // the frequence of TCP tick
- TCP_RTT_SHIFT = 3, // SRTT & RTTVAR scaled by 8
- TCP_RTO_MIN = TCP_TICK_HZ, // the minium value of RTO
- TCP_RTO_MAX = TCP_TICK_HZ *60, // the maxium value of RTO
- TCP_FOLD_RTT = 4, // timeout threshod to fold RTT
-
- //
- // default values for some timers
- //
- TCP_MAX_LOSS = 12, // default max times to retxmit
- TCP_KEEPALIVE_IDLE_MIN = TCP_TICK_HZ *60 *60 *2, // First keep alive
- TCP_KEEPALIVE_PERIOD = TCP_TICK_HZ *60,
- TCP_MAX_KEEPALIVE = 8,
- TCP_FIN_WAIT2_TIME = 2 *TCP_TICK_HZ, // * 60,
- TCP_TIME_WAIT_TIME = 2 *TCP_TICK_HZ,
- TCP_PAWS_24DAY = 24 *24 *60 *60 *TCP_TICK_HZ,
- TCP_CONNECT_TIME = 75 *TCP_TICK_HZ,
-
- //
- // The header space to be reserved before TCP data to accomodate :
- // 60byte IP head + 60byte TCP head + link layer head
- //
- TCP_MAX_HEAD = 192,
-
- //
- // value ranges for some control option
- //
- TCP_RCV_BUF_SIZE = 2 *1024 *1024,
- TCP_RCV_BUF_SIZE_MIN = 8 *1024,
- TCP_SND_BUF_SIZE = 2 *1024 *1024,
- TCP_SND_BUF_SIZE_MIN = 8 *1024,
- TCP_BACKLOG = 10,
- TCP_BACKLOG_MIN = 5,
- TCP_MAX_LOSS_MIN = 6,
- TCP_CONNECT_TIME_MIN = 60 *TCP_TICK_HZ,
- TCP_MAX_KEEPALIVE_MIN = 4,
- TCP_KEEPALIVE_IDLE_MAX = TCP_TICK_HZ *60 *60 *4,
- TCP_KEEPALIVE_PERIOD_MIN= TCP_TICK_HZ *30,
- TCP_FIN_WAIT2_TIME_MAX = 4 *TCP_TICK_HZ,
- TCP_TIME_WAIT_TIME_MAX = 60 *TCP_TICK_HZ
-};
-
-typedef struct _TCP_SEG {
- TCP_SEQNO Seq; // Starting sequence number
- TCP_SEQNO End; // The sequence of the last byte + 1,
- // include SYN/FIN. End-Seq = SEG.LEN
- TCP_SEQNO Ack; // ACK fild in the segment
- UINT8 Flag; // TCP header flags
- UINT16 Urg; // Valid if URG flag is set.
- UINT32 Wnd; // TCP window size field
-} TCP_SEG;
-
-typedef struct _TCP_PEER {
- UINT32 Ip; // Network byte order
- TCP_PORTNO Port; // Network byte order
-} TCP_PEER;
-
-//
-// tcp control block, it includes various states
-//
-struct _TCP_CB {
- NET_LIST_ENTRY List;
- TCP_CB *Parent;
-
- SOCKET *Sk;
- TCP_PEER LocalEnd;
- TCP_PEER RemoteEnd;
-
- NET_LIST_ENTRY SndQue; // retxmission queue
- NET_LIST_ENTRY RcvQue; // reassemble queue
- UINT32 CtrlFlag; // control flags, such as NO_NAGLE
- INT32 Error; // soft error status,TCP_CONNECT_RESET...
-
- //
- // RFC793 and RFC1122 defined variables
- //
- UINT8 State; // TCP state, such as SYN_SENT, LISTEN
- UINT8 DelayedAck; // number of delayed ACKs
- UINT16 HeadSum; // checksum of the fixed parts of pesudo
- // header: Src IP, Dst IP, 0, Protocol,
- // not include the TCP length.
-
- TCP_SEQNO Iss; // Initial Sending Sequence
- TCP_SEQNO SndUna; // first unacknowledged data
- TCP_SEQNO SndNxt; // next data sequence to send.
- TCP_SEQNO SndPsh; // Send PUSH point
- TCP_SEQNO SndUp; // Send urgent point
- UINT32 SndWnd; // Window advertised by the remote peer
- UINT32 SndWndMax; // max send window advertised by the peer
- TCP_SEQNO SndWl1; // Seq number used for last window update
- TCP_SEQNO SndWl2; // ack no of last window update
- UINT16 SndMss; // Max send segment size
- TCP_SEQNO RcvNxt; // Next sequence no to receive
- UINT32 RcvWnd; // Window advertised by the local peer
- TCP_SEQNO RcvWl2; // The RcvNxt (or ACK) of last window update.
- // It is necessary because of delayed ACK
-
- TCP_SEQNO RcvUp; // urgent point;
- TCP_SEQNO Irs; // Initial Receiving Sequence
- UINT16 RcvMss; // Max receive segment size
- UINT16 EnabledTimer; // which timer is currently enabled
- UINT32 Timer[TCP_TIMER_NUMBER]; // when the timer will expire
- INT32 NextExpire; // count down offset for the nearest timer
- UINT32 Idle; // How long the connection is in idle
- UINT32 ProbeTime; // the time out value for current window prober
-
- //
- // RFC1323 defined variables, about window scale,
- // timestamp and PAWS
- //
- UINT8 SndWndScale; // Wndscale received from the peer
- UINT8 RcvWndScale; // Wndscale used to scale local buffer
- UINT32 TsRecent; // TsRecent to echo to the remote peer
- UINT32 TsRecentAge; // When this TsRecent is updated
-
- // TCP_SEQNO LastAckSent;
- // It isn't necessary to add LastAckSent here,
- // since it is the same as RcvWl2
-
- //
- // RFC2988 defined variables. about RTT measurement
- //
- TCP_SEQNO RttSeq; // the seq of measured segment now
- UINT32 RttMeasure; // currently measured RTT in heart beats
- UINT32 SRtt; // Smoothed RTT, scaled by 8
- UINT32 RttVar; // RTT variance, scaled by 8
- UINT32 Rto; // Current RTO, not scaled
-
- //
- // RFC2581, and 3782 variables.
- // Congestion control + NewReno fast recovery.
- //
- UINT32 CWnd; // Sender's congestion window
- UINT32 Ssthresh; // Slow start threshold.
- TCP_SEQNO Recover; // recover point for NewReno
- UINT16 DupAck; // number of duplicate ACKs
- UINT8 CongestState; // the current congestion state(RFC3782)
- UINT8 LossTimes; // number of retxmit timeouts in a row
- TCP_SEQNO LossRecover; // recover point for retxmit
-
- //
- // configuration parameters, for EFI_TCP4_PROTOCOL specification
- //
- UINT32 KeepAliveIdle; // idle time before sending first probe
- UINT32 KeepAlivePeriod; // interval for subsequent keep alive probe
- UINT8 MaxKeepAlive; // Maxium keep alive probe times.
- UINT8 KeepAliveProbes; // the number of keep alive probe.
- UINT16 MaxRexmit; // The maxium number of retxmit before abort
- UINT32 FinWait2Timeout; // The FIN_WAIT_2 time out
- UINT32 TimeWaitTimeout; // The TIME_WAIT time out
- UINT32 ConnectTimeout;
-
- //
- // configuration for tcp provided by user
- //
- BOOLEAN UseDefaultAddr;
- UINT8 TOS;
- UINT8 TTL;
- EFI_IPv4_ADDRESS SubnetMask;
-
- //
- // pointer reference to Ip used to send pkt
- //
- IP_IO_IP_INFO *IpInfo;
-};
-
-extern NET_LIST_ENTRY mTcpRunQue;
-extern NET_LIST_ENTRY mTcpListenQue;
-extern TCP_SEQNO mTcpGlobalIss;
-extern UINT32 mTcpTick;
-
-//
-// TCP_CONNECTED: both ends have synchronized their ISN.
-//
-#define TCP_CONNECTED(state) ((state) > TCP_SYN_RCVD)
-
-#define TCP_FIN_RCVD(State) \
- (((State) == TCP_CLOSE_WAIT) || \
- ((State) == TCP_LAST_ACK) || \
- ((State) == TCP_CLOSING) || \
- ((State) == TCP_TIME_WAIT))
-
-#define TCP_LOCAL_CLOSED(State) \
- (((State) == TCP_FIN_WAIT_1) || \
- ((State) == TCP_FIN_WAIT_2) || \
- ((State) == TCP_CLOSING) || \
- ((State) == TCP_TIME_WAIT) || \
- ((State) == TCP_LAST_ACK))
-
-//
-// Get the TCP_SEG point from a net buffer's ProtoData
-//
-#define TCPSEG_NETBUF(NBuf) ((TCP_SEG *) ((NBuf)->ProtoData))
-
-//
-// macros to compare sequence no
-//
-#define TCP_SEQ_LT(SeqA, SeqB) ((INT32) ((SeqA) - (SeqB)) < 0)
-#define TCP_SEQ_LEQ(SeqA, SeqB) ((INT32) ((SeqA) - (SeqB)) <= 0)
-#define TCP_SEQ_GT(SeqA, SeqB) ((INT32) ((SeqB) - (SeqA)) < 0)
-#define TCP_SEQ_GEQ(SeqA, SeqB) ((INT32) ((SeqB) - (SeqA)) <= 0)
-
-//
-// TCP_SEQ_BETWEEN return whether b <= m <= e
-//
-#define TCP_SEQ_BETWEEN(b, m, e) ((e) - (b) >= (m) - (b))
-
-//
-// TCP_SUB_SEQ returns Seq1 - Seq2. Make sure Seq1 >= Seq2
-//
-#define TCP_SUB_SEQ(Seq1, Seq2) ((UINT32) ((Seq1) - (Seq2)))
-
-#define TCP_FLG_ON(Value, Flag) ((BOOLEAN) (((Value) & (Flag)) != 0))
-#define TCP_SET_FLG(Value, Flag) ((Value) |= (Flag))
-#define TCP_CLEAR_FLG(Value, Flag) ((Value) &= ~(Flag))
-
-//
-// test whether two peers are equal
-//
-#define TCP_PEER_EQUAL(Pa, Pb) \
- (((Pa)->Ip == (Pb)->Ip) && ((Pa)->Port == (Pb)->Port))
-
-//
-// test whether Pa matches Pb, or Pa is more specific
-// than pb. Zero means wildcard.
-//
-#define TCP_PEER_MATCH(Pa, Pb) \
- ((((Pb)->Ip == 0) || ((Pb)->Ip == (Pa)->Ip)) && \
- (((Pb)->Port == 0) || ((Pb)->Port == (Pa)->Port)))
-
-#define TCP_TIMER_ON(Flag, Timer) ((Flag) & (1 << (Timer)))
-#define TCP_SET_TIMER(Flag, Timer) ((Flag) = (UINT16) ((Flag) | (1 << (Timer))))
-#define TCP_CLEAR_TIMER(Flag, Timer) ((Flag) = (UINT16) ((Flag) & (~(1 << (Timer)))))
-
-#define TCP_TIME_LT(Ta, Tb) ((INT32) ((Ta) - (Tb)) < 0)
-#define TCP_TIME_LEQ(Ta, Tb) ((INT32) ((Ta) - (Tb)) <= 0)
-#define TCP_SUB_TIME(Ta, Tb) ((UINT32) ((Ta) - (Tb)))
-
-#define TCP_MAX_WIN 0xFFFFU
-
-typedef
-VOID
-(*TCP_TIMER_HANDLER) (
- IN TCP_CB * Tcb
- );
-
-#include "Tcp4Func.h"
-#endif
+/** @file\r
+\r
+Copyright (c) 2005 - 2006, 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
+\r
+ Tcp4Proto.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _TCP4_PROTO_H_\r
+#define _TCP4_PROTO_H_\r
+\r
+typedef struct _TCP_CB TCP_CB;\r
+\r
+#include "Tcp4Driver.h"\r
+#include "Socket.h"\r
+#include "Tcp4Option.h"\r
+\r
+//\r
+// tcp states, Don't change their order, it is used as\r
+// index to mTcpOutFlag and other macros\r
+//\r
+enum {\r
+ TCP_CLOSED = 0,\r
+ TCP_LISTEN,\r
+ TCP_SYN_SENT,\r
+ TCP_SYN_RCVD,\r
+ TCP_ESTABLISHED,\r
+ TCP_FIN_WAIT_1,\r
+ TCP_FIN_WAIT_2,\r
+ TCP_CLOSING,\r
+ TCP_TIME_WAIT,\r
+ TCP_CLOSE_WAIT,\r
+ TCP_LAST_ACK\r
+};\r
+\r
+//\r
+// flags in the TCP header\r
+//\r
+enum {\r
+\r
+ TCP_FLG_FIN = 0x01,\r
+ TCP_FLG_SYN = 0x02,\r
+ TCP_FLG_RST = 0x04,\r
+ TCP_FLG_PSH = 0x08,\r
+ TCP_FLG_ACK = 0x10,\r
+ TCP_FLG_URG = 0x20,\r
+ TCP_FLG_FLAG = 0x3F // mask for all the flags\r
+};\r
+\r
+enum {\r
+\r
+ //\r
+ // TCP error status\r
+ //\r
+ TCP_CONNECT_REFUSED = -1,\r
+ TCP_CONNECT_RESET = -2,\r
+ TCP_CONNECT_CLOSED = -3,\r
+\r
+ //\r
+ // Current congestion status as suggested by RFC3782.\r
+ //\r
+ TCP_CONGEST_RECOVER = 1, // during the NewReno fast recovery\r
+ TCP_CONGEST_LOSS = 2, // retxmit because of retxmit time out\r
+ TCP_CONGEST_OPEN = 3, // TCP is opening its congestion window\r
+\r
+ //\r
+ // TCP control flags\r
+ //\r
+ TCP_CTRL_NO_NAGLE = 0x0001, // disable Nagle algorithm\r
+ TCP_CTRL_NO_KEEPALIVE = 0x0002, // disable keepalive timer\r
+ TCP_CTRL_NO_WS = 0x0004, // disable window scale option\r
+ TCP_CTRL_RCVD_WS = 0x0008, // rcvd a wnd scale option in syn\r
+ TCP_CTRL_NO_TS = 0x0010, // disable Timestamp option\r
+ TCP_CTRL_RCVD_TS = 0x0020, // rcvd a Timestamp option in syn\r
+ TCP_CTRL_SND_TS = 0x0040, // Send Timestamp option to remote\r
+ TCP_CTRL_SND_URG = 0x0080, // in urgent send mode\r
+ TCP_CTRL_RCVD_URG = 0x0100, // in urgent receive mode\r
+ TCP_CTRL_SND_PSH = 0x0200, // in PUSH send mode\r
+ TCP_CTRL_FIN_SENT = 0x0400, // FIN is sent\r
+ TCP_CTRL_FIN_ACKED = 0x0800, // FIN is ACKed.\r
+ TCP_CTRL_TIMER_ON = 0x1000, // At least one of the timer is on\r
+ TCP_CTRL_RTT_ON = 0x2000, // The RTT measurement is on\r
+ TCP_CTRL_ACK_NOW = 0x4000, // Send the ACK now, don't delay\r
+\r
+ //\r
+ // Timer related values\r
+ //\r
+ TCP_TIMER_CONNECT = 0, // Connection establishment timer\r
+ TCP_TIMER_REXMIT = 1, // retransmit timer\r
+ TCP_TIMER_PROBE = 2, // Window probe timer\r
+ TCP_TIMER_KEEPALIVE = 3, // Keepalive timer\r
+ TCP_TIMER_FINWAIT2 = 4, // FIN_WAIT_2 timer\r
+ TCP_TIMER_2MSL = 5, // TIME_WAIT tiemr\r
+ TCP_TIMER_NUMBER = 6, // the total number of TCP timer.\r
+ TCP_TICK = 200, // every TCP tick is 200ms\r
+ TCP_TICK_HZ = 5, // the frequence of TCP tick\r
+ TCP_RTT_SHIFT = 3, // SRTT & RTTVAR scaled by 8\r
+ TCP_RTO_MIN = TCP_TICK_HZ, // the minium value of RTO\r
+ TCP_RTO_MAX = TCP_TICK_HZ *60, // the maxium value of RTO\r
+ TCP_FOLD_RTT = 4, // timeout threshod to fold RTT\r
+\r
+ //\r
+ // default values for some timers\r
+ //\r
+ TCP_MAX_LOSS = 12, // default max times to retxmit\r
+ TCP_KEEPALIVE_IDLE_MIN = TCP_TICK_HZ *60 *60 *2, // First keep alive\r
+ TCP_KEEPALIVE_PERIOD = TCP_TICK_HZ *60,\r
+ TCP_MAX_KEEPALIVE = 8,\r
+ TCP_FIN_WAIT2_TIME = 2 *TCP_TICK_HZ, // * 60,\r
+ TCP_TIME_WAIT_TIME = 2 *TCP_TICK_HZ,\r
+ TCP_PAWS_24DAY = 24 *24 *60 *60 *TCP_TICK_HZ,\r
+ TCP_CONNECT_TIME = 75 *TCP_TICK_HZ,\r
+\r
+ //\r
+ // The header space to be reserved before TCP data to accomodate :\r
+ // 60byte IP head + 60byte TCP head + link layer head\r
+ //\r
+ TCP_MAX_HEAD = 192,\r
+\r
+ //\r
+ // value ranges for some control option\r
+ //\r
+ TCP_RCV_BUF_SIZE = 2 *1024 *1024,\r
+ TCP_RCV_BUF_SIZE_MIN = 8 *1024,\r
+ TCP_SND_BUF_SIZE = 2 *1024 *1024,\r
+ TCP_SND_BUF_SIZE_MIN = 8 *1024,\r
+ TCP_BACKLOG = 10,\r
+ TCP_BACKLOG_MIN = 5,\r
+ TCP_MAX_LOSS_MIN = 6,\r
+ TCP_CONNECT_TIME_MIN = 60 *TCP_TICK_HZ,\r
+ TCP_MAX_KEEPALIVE_MIN = 4,\r
+ TCP_KEEPALIVE_IDLE_MAX = TCP_TICK_HZ *60 *60 *4,\r
+ TCP_KEEPALIVE_PERIOD_MIN= TCP_TICK_HZ *30,\r
+ TCP_FIN_WAIT2_TIME_MAX = 4 *TCP_TICK_HZ,\r
+ TCP_TIME_WAIT_TIME_MAX = 60 *TCP_TICK_HZ\r
+};\r
+\r
+typedef struct _TCP_SEG {\r
+ TCP_SEQNO Seq; // Starting sequence number\r
+ TCP_SEQNO End; // The sequence of the last byte + 1,\r
+ // include SYN/FIN. End-Seq = SEG.LEN\r
+ TCP_SEQNO Ack; // ACK fild in the segment\r
+ UINT8 Flag; // TCP header flags\r
+ UINT16 Urg; // Valid if URG flag is set.\r
+ UINT32 Wnd; // TCP window size field\r
+} TCP_SEG;\r
+\r
+typedef struct _TCP_PEER {\r
+ UINT32 Ip; // Network byte order\r
+ TCP_PORTNO Port; // Network byte order\r
+} TCP_PEER;\r
+\r
+//\r
+// tcp control block, it includes various states\r
+//\r
+struct _TCP_CB {\r
+ NET_LIST_ENTRY List;\r
+ TCP_CB *Parent;\r
+\r
+ SOCKET *Sk;\r
+ TCP_PEER LocalEnd;\r
+ TCP_PEER RemoteEnd;\r
+\r
+ NET_LIST_ENTRY SndQue; // retxmission queue\r
+ NET_LIST_ENTRY RcvQue; // reassemble queue\r
+ UINT32 CtrlFlag; // control flags, such as NO_NAGLE\r
+ INT32 Error; // soft error status,TCP_CONNECT_RESET...\r
+\r
+ //\r
+ // RFC793 and RFC1122 defined variables\r
+ //\r
+ UINT8 State; // TCP state, such as SYN_SENT, LISTEN\r
+ UINT8 DelayedAck; // number of delayed ACKs\r
+ UINT16 HeadSum; // checksum of the fixed parts of pesudo\r
+ // header: Src IP, Dst IP, 0, Protocol,\r
+ // not include the TCP length.\r
+\r
+ TCP_SEQNO Iss; // Initial Sending Sequence\r
+ TCP_SEQNO SndUna; // first unacknowledged data\r
+ TCP_SEQNO SndNxt; // next data sequence to send.\r
+ TCP_SEQNO SndPsh; // Send PUSH point\r
+ TCP_SEQNO SndUp; // Send urgent point\r
+ UINT32 SndWnd; // Window advertised by the remote peer\r
+ UINT32 SndWndMax; // max send window advertised by the peer\r
+ TCP_SEQNO SndWl1; // Seq number used for last window update\r
+ TCP_SEQNO SndWl2; // ack no of last window update\r
+ UINT16 SndMss; // Max send segment size\r
+ TCP_SEQNO RcvNxt; // Next sequence no to receive\r
+ UINT32 RcvWnd; // Window advertised by the local peer\r
+ TCP_SEQNO RcvWl2; // The RcvNxt (or ACK) of last window update.\r
+ // It is necessary because of delayed ACK\r
+\r
+ TCP_SEQNO RcvUp; // urgent point;\r
+ TCP_SEQNO Irs; // Initial Receiving Sequence\r
+ UINT16 RcvMss; // Max receive segment size\r
+ UINT16 EnabledTimer; // which timer is currently enabled\r
+ UINT32 Timer[TCP_TIMER_NUMBER]; // when the timer will expire\r
+ INT32 NextExpire; // count down offset for the nearest timer\r
+ UINT32 Idle; // How long the connection is in idle\r
+ UINT32 ProbeTime; // the time out value for current window prober\r
+\r
+ //\r
+ // RFC1323 defined variables, about window scale,\r
+ // timestamp and PAWS\r
+ //\r
+ UINT8 SndWndScale; // Wndscale received from the peer\r
+ UINT8 RcvWndScale; // Wndscale used to scale local buffer\r
+ UINT32 TsRecent; // TsRecent to echo to the remote peer\r
+ UINT32 TsRecentAge; // When this TsRecent is updated\r
+\r
+ // TCP_SEQNO LastAckSent;\r
+ // It isn't necessary to add LastAckSent here,\r
+ // since it is the same as RcvWl2\r
+\r
+ //\r
+ // RFC2988 defined variables. about RTT measurement\r
+ //\r
+ TCP_SEQNO RttSeq; // the seq of measured segment now\r
+ UINT32 RttMeasure; // currently measured RTT in heart beats\r
+ UINT32 SRtt; // Smoothed RTT, scaled by 8\r
+ UINT32 RttVar; // RTT variance, scaled by 8\r
+ UINT32 Rto; // Current RTO, not scaled\r
+\r
+ //\r
+ // RFC2581, and 3782 variables.\r
+ // Congestion control + NewReno fast recovery.\r
+ //\r
+ UINT32 CWnd; // Sender's congestion window\r
+ UINT32 Ssthresh; // Slow start threshold.\r
+ TCP_SEQNO Recover; // recover point for NewReno\r
+ UINT16 DupAck; // number of duplicate ACKs\r
+ UINT8 CongestState; // the current congestion state(RFC3782)\r
+ UINT8 LossTimes; // number of retxmit timeouts in a row\r
+ TCP_SEQNO LossRecover; // recover point for retxmit\r
+\r
+ //\r
+ // configuration parameters, for EFI_TCP4_PROTOCOL specification\r
+ //\r
+ UINT32 KeepAliveIdle; // idle time before sending first probe\r
+ UINT32 KeepAlivePeriod; // interval for subsequent keep alive probe\r
+ UINT8 MaxKeepAlive; // Maxium keep alive probe times.\r
+ UINT8 KeepAliveProbes; // the number of keep alive probe.\r
+ UINT16 MaxRexmit; // The maxium number of retxmit before abort\r
+ UINT32 FinWait2Timeout; // The FIN_WAIT_2 time out\r
+ UINT32 TimeWaitTimeout; // The TIME_WAIT time out\r
+ UINT32 ConnectTimeout;\r
+\r
+ //\r
+ // configuration for tcp provided by user\r
+ //\r
+ BOOLEAN UseDefaultAddr;\r
+ UINT8 TOS;\r
+ UINT8 TTL;\r
+ EFI_IPv4_ADDRESS SubnetMask;\r
+\r
+ //\r
+ // pointer reference to Ip used to send pkt\r
+ //\r
+ IP_IO_IP_INFO *IpInfo;\r
+};\r
+\r
+extern NET_LIST_ENTRY mTcpRunQue;\r
+extern NET_LIST_ENTRY mTcpListenQue;\r
+extern TCP_SEQNO mTcpGlobalIss;\r
+extern UINT32 mTcpTick;\r
+\r
+//\r
+// TCP_CONNECTED: both ends have synchronized their ISN.\r
+//\r
+#define TCP_CONNECTED(state) ((state) > TCP_SYN_RCVD)\r
+\r
+#define TCP_FIN_RCVD(State) \\r
+ (((State) == TCP_CLOSE_WAIT) || \\r
+ ((State) == TCP_LAST_ACK) || \\r
+ ((State) == TCP_CLOSING) || \\r
+ ((State) == TCP_TIME_WAIT))\r
+\r
+#define TCP_LOCAL_CLOSED(State) \\r
+ (((State) == TCP_FIN_WAIT_1) || \\r
+ ((State) == TCP_FIN_WAIT_2) || \\r
+ ((State) == TCP_CLOSING) || \\r
+ ((State) == TCP_TIME_WAIT) || \\r
+ ((State) == TCP_LAST_ACK))\r
+\r
+//\r
+// Get the TCP_SEG point from a net buffer's ProtoData\r
+//\r
+#define TCPSEG_NETBUF(NBuf) ((TCP_SEG *) ((NBuf)->ProtoData))\r
+\r
+//\r
+// macros to compare sequence no\r
+//\r
+#define TCP_SEQ_LT(SeqA, SeqB) ((INT32) ((SeqA) - (SeqB)) < 0)\r
+#define TCP_SEQ_LEQ(SeqA, SeqB) ((INT32) ((SeqA) - (SeqB)) <= 0)\r
+#define TCP_SEQ_GT(SeqA, SeqB) ((INT32) ((SeqB) - (SeqA)) < 0)\r
+#define TCP_SEQ_GEQ(SeqA, SeqB) ((INT32) ((SeqB) - (SeqA)) <= 0)\r
+\r
+//\r
+// TCP_SEQ_BETWEEN return whether b <= m <= e\r
+//\r
+#define TCP_SEQ_BETWEEN(b, m, e) ((e) - (b) >= (m) - (b))\r
+\r
+//\r
+// TCP_SUB_SEQ returns Seq1 - Seq2. Make sure Seq1 >= Seq2\r
+//\r
+#define TCP_SUB_SEQ(Seq1, Seq2) ((UINT32) ((Seq1) - (Seq2)))\r
+\r
+#define TCP_FLG_ON(Value, Flag) ((BOOLEAN) (((Value) & (Flag)) != 0))\r
+#define TCP_SET_FLG(Value, Flag) ((Value) |= (Flag))\r
+#define TCP_CLEAR_FLG(Value, Flag) ((Value) &= ~(Flag))\r
+\r
+//\r
+// test whether two peers are equal\r
+//\r
+#define TCP_PEER_EQUAL(Pa, Pb) \\r
+ (((Pa)->Ip == (Pb)->Ip) && ((Pa)->Port == (Pb)->Port))\r
+\r
+//\r
+// test whether Pa matches Pb, or Pa is more specific\r
+// than pb. Zero means wildcard.\r
+//\r
+#define TCP_PEER_MATCH(Pa, Pb) \\r
+ ((((Pb)->Ip == 0) || ((Pb)->Ip == (Pa)->Ip)) && \\r
+ (((Pb)->Port == 0) || ((Pb)->Port == (Pa)->Port)))\r
+\r
+#define TCP_TIMER_ON(Flag, Timer) ((Flag) & (1 << (Timer)))\r
+#define TCP_SET_TIMER(Flag, Timer) ((Flag) = (UINT16) ((Flag) | (1 << (Timer))))\r
+#define TCP_CLEAR_TIMER(Flag, Timer) ((Flag) = (UINT16) ((Flag) & (~(1 << (Timer)))))\r
+\r
+#define TCP_TIME_LT(Ta, Tb) ((INT32) ((Ta) - (Tb)) < 0)\r
+#define TCP_TIME_LEQ(Ta, Tb) ((INT32) ((Ta) - (Tb)) <= 0)\r
+#define TCP_SUB_TIME(Ta, Tb) ((UINT32) ((Ta) - (Tb)))\r
+\r
+#define TCP_MAX_WIN 0xFFFFU\r
+\r
+typedef\r
+VOID\r
+(*TCP_TIMER_HANDLER) (\r
+ IN TCP_CB * Tcb\r
+ );\r
+\r
+#include "Tcp4Func.h"\r
+#endif\r
//\r
// EFI Component Name Functions\r
//\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
UdpComponentNameGetDriverName (\r
OUT CHAR16 **DriverName\r
);\r
\r
+\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
+\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
+\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
UdpComponentNameGetControllerName (\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
+ 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
+\r
//\r
// EFI Component Name Protocol\r
//\r
-EFI_COMPONENT_NAME_PROTOCOL gUdp4ComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL gUdp4ComponentName = {\r
UdpComponentNameGetDriverName,\r
UdpComponentNameGetControllerName,\r
"eng"\r
-};\r
+ };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gUdp4ComponentName2 = {\r
+ (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) UdpComponentNameGetDriverName,\r
+ (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) UdpComponentNameGetControllerName,\r
+ "en"\r
+ };\r
+\r
\r
static EFI_UNICODE_STRING_TABLE mUdpDriverNameTable[] = {\r
{\r
- "eng",\r
+ "eng;en",\r
L"UDP Network Service Driver"\r
},\r
{\r
}\r
};\r
\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+ This function retrieves the user readable name of a driver in the form of a\r
+ Unicode string. If the driver specified by This has a user readable name in\r
+ the language specified by Language, then a pointer to the driver name is\r
+ returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+ by This does not support the language specified by Language,\r
+ then EFI_UNSUPPORTED is returned.\r
+\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified\r
+ in RFC 3066 or ISO 639-2 language code format.\r
+\r
+ @param DriverName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ driver specified by This in the language\r
+ specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the Driver specified by\r
+ This and the language specified by Language was\r
+ returned in DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
UdpComponentNameGetDriverName (\r
IN CHAR8 *Language,\r
OUT CHAR16 **DriverName\r
)\r
-/*++\r
+{\r
+ return LookupUnicodeString2 (\r
+ Language,\r
+ This->SupportedLanguages,\r
+ mUdpDriverNameTable,\r
+ DriverName,\r
+ (BOOLEAN)(This == &gUdp4ComponentName)\r
+ );\r
+}\r
\r
-Routine Description:\r
+/**\r
+ Retrieves a Unicode string that is the user readable name of the controller\r
+ that is being managed by a driver.\r
\r
- Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
+ This function retrieves the user readable name of the controller specified by\r
+ ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+ driver specified by This has a user readable name in the language specified by\r
+ Language, then a pointer to the controller name is returned in ControllerName,\r
+ and EFI_SUCCESS is returned. If the driver specified by This is not currently\r
+ managing the controller specified by ControllerHandle and ChildHandle,\r
+ then EFI_UNSUPPORTED is returned. If the driver specified by This does not\r
+ support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
\r
-Arguments:\r
+ @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+ EFI_COMPONENT_NAME_PROTOCOL instance.\r
\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- Language - A pointer to a three character ISO 639-2 language identifier.\r
- This is the language of the driver name that that the caller\r
- is requesting, and it must match one of the languages specified\r
- in SupportedLanguages. The number of languages supported by a\r
- driver is up to the driver writer.\r
- DriverName - A pointer to the Unicode string to return. This Unicode string\r
- is the name of the driver specified by This in the language\r
- specified by Language.\r
+ @param ControllerHandle[in] The handle of a controller that the driver\r
+ specified by This is managing. This handle\r
+ specifies the controller whose name is to be\r
+ returned.\r
\r
-Returns:\r
+ @param ChildHandle[in] The handle of the child controller to retrieve\r
+ the name of. This is an optional parameter that\r
+ may be NULL. It will be NULL for device\r
+ drivers. It will also be NULL for a bus drivers\r
+ that wish to retrieve the name of the bus\r
+ controller. It will not be NULL for a bus\r
+ driver that wishes to retrieve the name of a\r
+ child controller.\r
\r
- EFI_SUCCES - The Unicode string for the Driver specified by This\r
- and the language specified by Language was returned\r
- in DriverName.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - DriverName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
+ @param Language[in] A pointer to a Null-terminated ASCII string\r
+ array indicating the language. This is the\r
+ language of the driver name that the caller is\r
+ requesting, and it must match one of the\r
+ languages specified in SupportedLanguages. The\r
+ number of languages supported by a driver is up\r
+ to the driver writer. Language is specified in\r
+ RFC 3066 or ISO 639-2 language code format.\r
\r
---*/\r
-{\r
- return LookupUnicodeString (\r
- Language,\r
- gUdp4ComponentName.SupportedLanguages,\r
- mUdpDriverNameTable,\r
- DriverName\r
- );\r
-}\r
+ @param ControllerName[out] A pointer to the Unicode string to return.\r
+ This Unicode string is the name of the\r
+ controller specified by ControllerHandle and\r
+ ChildHandle in the language specified by\r
+ Language from the point of view of the driver\r
+ specified by This.\r
+\r
+ @retval EFI_SUCCESS The Unicode string for the user readable name in\r
+ the language specified by Language for the\r
+ driver specified by This was returned in\r
+ DriverName.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+ EFI_HANDLE.\r
+\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+ @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+ @retval EFI_UNSUPPORTED The driver specified by This is not currently\r
+ managing the controller specified by\r
+ ControllerHandle and ChildHandle.\r
\r
+ @retval EFI_UNSUPPORTED The driver specified by This does not support\r
+ the language specified by Language.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
UdpComponentNameGetControllerName (\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
+ 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
-\r
-Routine Description:\r
-\r
- Retrieves a Unicode string that is the user readable name of the controller\r
- that is being managed by an EFI Driver.\r
-\r
-Arguments:\r
-\r
- This - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
- ControllerHandle - The handle of a controller that the driver specified by\r
- This is managing. This handle specifies the controller\r
- whose name is to be returned.\r
- ChildHandle - The handle of the child controller to retrieve the name\r
- of. This is an optional parameter that may be NULL. It\r
- will be NULL for device drivers. It will also be NULL\r
- for a bus drivers that wish to retrieve the name of the\r
- bus controller. It will not be NULL for a bus driver\r
- that wishes to retrieve the name of a child controller.\r
- Language - A pointer to a three character ISO 639-2 language\r
- identifier. This is the language of the controller name\r
- that that the caller is requesting, and it must match one\r
- of the languages specified in SupportedLanguages. The\r
- number of languages supported by a driver is up to the\r
- driver writer.\r
- ControllerName - A pointer to the Unicode string to return. This Unicode\r
- string is the name of the controller specified by\r
- ControllerHandle and ChildHandle in the language specified\r
- by Language from the point of view of the driver specified\r
- by This.\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - The Unicode string for the user readable name in the\r
- language specified by Language for the driver\r
- specified by This was returned in DriverName.\r
- EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
- EFI_INVALID_PARAMETER - Language is NULL.\r
- EFI_INVALID_PARAMETER - ControllerName is NULL.\r
- EFI_UNSUPPORTED - The driver specified by This is not currently managing\r
- the controller specified by ControllerHandle and\r
- ChildHandle.\r
- EFI_UNSUPPORTED - The driver specified by This does not support the\r
- language specified by Language.\r
-\r
---*/\r
{\r
return EFI_UNSUPPORTED;\r
}\r
//\r
// Install the Udp4DriverBinding and Udp4ComponentName protocols.\r
//\r
- Status = EfiLibInstallAllDriverProtocols (\r
+ Status = EfiLibInstallDriverBindingComponentName2 (\r
ImageHandle,\r
SystemTable,\r
&gUdp4DriverBinding,\r
ImageHandle,\r
&gUdp4ComponentName,\r
- NULL,\r
- NULL\r
+ &gUdp4ComponentName2\r
);\r
if (!EFI_ERROR (Status)) {\r
//\r
-/** @file
-
-Copyright (c) 2006, 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:
-
- Udp4Driver.h
-
-Abstract:
-
-
-**/
-
-#ifndef _UDP4_DRIVER_H_
-#define _UDP4_DRIVER_H_
-
-#include <PiDxe.h>
-#include <Library/BaseLib.h>
-#include <Library/NetLib.h>
-#include <Protocol/DriverBinding.h>
-#include <Protocol/ServiceBinding.h>
-
-EFI_STATUS
-EFIAPI
-Udp4DriverBindingSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-Udp4DriverBindingStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-Udp4DriverBindingStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- );
-
-EFI_STATUS
-EFIAPI
-Udp4ServiceBindingCreateChild (
- IN EFI_SERVICE_BINDING_PROTOCOL *This,
- IN EFI_HANDLE *ChildHandle
- );
-
-EFI_STATUS
-EFIAPI
-Udp4ServiceBindingDestroyChild (
- IN EFI_SERVICE_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ChildHandle
- );
-
-#endif
-
+/** @file\r
+\r
+Copyright (c) 2006, 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
+\r
+ Udp4Driver.h\r
+\r
+Abstract:\r
+\r
+\r
+**/\r
+\r
+#ifndef _UDP4_DRIVER_H_\r
+#define _UDP4_DRIVER_H_\r
+\r
+#include <PiDxe.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/NetLib.h>\r
+#include <Protocol/DriverBinding.h>\r
+#include <Protocol/ServiceBinding.h>\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Udp4DriverBindingSupported (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Udp4DriverBindingStart (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Udp4DriverBindingStop (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Udp4ServiceBindingCreateChild (\r
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE *ChildHandle\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Udp4ServiceBindingDestroyChild (\r
+ IN EFI_SERVICE_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ChildHandle\r
+ );\r
+\r
+#endif\r
+\r
-/** @file
-
-Copyright (c) 2006 - 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:
-
- Udp4Impl.h
-
-Abstract:
-
- EFI UDPv4 protocol implementation
-
-
-**/
-
-#ifndef _UDP4_IMPL_H_
-#define _UDP4_IMPL_H_
-
+/** @file\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
+\r
+ Udp4Impl.h\r
+\r
+Abstract:\r
+\r
+ EFI UDPv4 protocol implementation\r
+\r
+\r
+**/\r
+\r
+#ifndef _UDP4_IMPL_H_\r
+#define _UDP4_IMPL_H_\r
+\r
#include <PiDxe.h>\r
\r
#include <Protocol/IP4.h>\r
#include <Protocol/Udp4.h>\r
-
+\r
#include <Library/IpIoLib.h>\r
#include <Library/DebugLib.h>\r
#include <Library/UefiRuntimeServicesTableLib.h>\r
#include <Library/UefiDriverEntryPoint.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
#include <Library/BaseLib.h>\r
-#include <Library/UefiLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/MemoryAllocationLib.h>
-
-#include "Udp4Driver.h"
-
-
-extern EFI_COMPONENT_NAME_PROTOCOL gUdp4ComponentName;
-extern EFI_SERVICE_BINDING_PROTOCOL mUdp4ServiceBinding;
-extern EFI_UDP4_PROTOCOL mUdp4Protocol;
-extern UINT16 mUdp4RandomPort;
-
-#define ICMP_ERROR_PACKET_LENGTH 8
-
-#define UDP4_TIMEOUT_INTERVAL (50 * TICKS_PER_MS) // 50 milliseconds
-
-#define UDP4_HEADER_SIZE sizeof (EFI_UDP4_HEADER)
-#define UDP4_MAX_DATA_SIZE 65507
-
-#define UDP4_PORT_KNOWN 1024
-
-#define UDP4_SERVICE_DATA_SIGNATURE EFI_SIGNATURE_32('U', 'd', 'p', '4')
-
-#define UDP4_SERVICE_DATA_FROM_THIS(a) \
- CR ( \
- (a), \
- UDP4_SERVICE_DATA, \
- ServiceBinding, \
- UDP4_SERVICE_DATA_SIGNATURE \
- )
-
-typedef struct _UDP4_SERVICE_DATA_ {
- UINT32 Signature;
- EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;
- EFI_HANDLE ImageHandle;
- EFI_HANDLE ControllerHandle;
- NET_LIST_ENTRY ChildrenList;
- UINTN ChildrenNumber;
- IP_IO *IpIo;
-
- EFI_EVENT TimeoutEvent;
-
- CHAR16 *MacString;
-} UDP4_SERVICE_DATA;
-
-#define UDP4_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32('U', 'd', 'p', 'I')
-
-#define UDP4_INSTANCE_DATA_FROM_THIS(a) \
- CR ( \
- (a), \
- UDP4_INSTANCE_DATA, \
- Udp4Proto, \
- UDP4_INSTANCE_DATA_SIGNATURE \
- )
-
-typedef struct _UDP4_INSTANCE_DATA_ {
- UINT32 Signature;
- NET_LIST_ENTRY Link;
-
- UDP4_SERVICE_DATA *Udp4Service;
- EFI_UDP4_PROTOCOL Udp4Proto;
- EFI_UDP4_CONFIG_DATA ConfigData;
- EFI_HANDLE ChildHandle;
- BOOLEAN Configured;
- BOOLEAN IsNoMapping;
-
- NET_MAP TxTokens;
- NET_MAP RxTokens;
-
- NET_MAP McastIps;
-
- NET_LIST_ENTRY RcvdDgramQue;
- NET_LIST_ENTRY DeliveredDgramQue;
-
- UINT16 HeadSum;
-
- EFI_STATUS IcmpError;
-
- IP_IO_IP_INFO *IpInfo;
-
- BOOLEAN Destroyed;
-} UDP4_INSTANCE_DATA;
-
-typedef struct _UDP4_RXDATA_WRAP_ {
- NET_LIST_ENTRY Link;
- NET_BUF *Packet;
- UINT32 TimeoutTick;
- EFI_UDP4_RECEIVE_DATA RxData;
-} UDP4_RXDATA_WRAP;
-
-EFI_STATUS
-EFIAPI
-Udp4GetModeData (
- IN EFI_UDP4_PROTOCOL *This,
- OUT EFI_UDP4_CONFIG_DATA *Udp4ConfigData OPTIONAL,
- OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL,
- OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
- OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-Udp4Configure (
- IN EFI_UDP4_PROTOCOL *This,
- IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-Udp4Groups (
- IN EFI_UDP4_PROTOCOL *This,
- IN BOOLEAN JoinFlag,
- IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-Udp4Routes (
- IN EFI_UDP4_PROTOCOL *This,
- IN BOOLEAN DeleteRoute,
- IN EFI_IPv4_ADDRESS *SubnetAddress,
- IN EFI_IPv4_ADDRESS *SubnetMask,
- IN EFI_IPv4_ADDRESS *GatewayAddress
- );
-
-EFI_STATUS
-EFIAPI
-Udp4Transmit (
- IN EFI_UDP4_PROTOCOL *This,
- IN EFI_UDP4_COMPLETION_TOKEN *Token
- );
-
-EFI_STATUS
-EFIAPI
-Udp4Receive (
- IN EFI_UDP4_PROTOCOL *This,
- IN EFI_UDP4_COMPLETION_TOKEN *Token
- );
-
-EFI_STATUS
-EFIAPI
-Udp4Cancel (
- IN EFI_UDP4_PROTOCOL *This,
- IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-Udp4Poll (
- IN EFI_UDP4_PROTOCOL *This
- );
-
-EFI_STATUS
-Udp4CreateService (
- IN UDP4_SERVICE_DATA *Udp4Service,
- IN EFI_HANDLE ImageHandle,
- IN EFI_HANDLE ControllerHandle
- );
-
-VOID
-Udp4CleanService (
- IN UDP4_SERVICE_DATA *Udp4Service
- );
-
-VOID
-Udp4InitInstance (
- IN UDP4_SERVICE_DATA *Udp4Service,
- IN UDP4_INSTANCE_DATA *Instance
- );
-
-VOID
-Udp4CleanInstance (
- IN UDP4_INSTANCE_DATA *Instance
- );
-
-EFI_STATUS
-Udp4Bind (
- IN NET_LIST_ENTRY *InstanceList,
- IN EFI_UDP4_CONFIG_DATA *ConfigData
- );
-
-BOOLEAN
-Udp4IsReconfigurable (
- IN EFI_UDP4_CONFIG_DATA *OldConfigData,
- IN EFI_UDP4_CONFIG_DATA *NewConfigData
- );
-
-VOID
-Udp4BuildIp4ConfigData (
- IN EFI_UDP4_CONFIG_DATA *Udp4ConfigData,
- IN EFI_IP4_CONFIG_DATA *Ip4ConfigData
- );
-
-EFI_STATUS
-Udp4ValidateTxToken (
- IN UDP4_INSTANCE_DATA *Instance,
- IN EFI_UDP4_COMPLETION_TOKEN *TxToken
- );
-
-EFI_STATUS
-Udp4TokenExist (
- IN NET_MAP *Map,
- IN NET_MAP_ITEM *Item,
- IN VOID *Context
- );
-
-UINT16
-Udp4Checksum (
- IN NET_BUF *Packet,
- IN UINT16 HeadSum
- );
-
-EFI_STATUS
-Udp4RemoveToken (
- IN NET_MAP *TokenMap,
- IN EFI_UDP4_COMPLETION_TOKEN *Token
- );
-
-EFI_STATUS
-Udp4LeaveGroup (
- IN NET_MAP *Map,
- IN NET_MAP_ITEM *Item,
- IN VOID *Arg OPTIONAL
- );
-
-VOID
-Udp4FlushRxData (
- IN NET_LIST_ENTRY *RcvdDgramQue
- );
-
-EFI_STATUS
-Udp4InstanceCancelToken (
- IN UDP4_INSTANCE_DATA *Instance,
- IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL
- );
-
-VOID
-Udp4InstanceDeliverDgram (
- IN UDP4_INSTANCE_DATA *Instance
- );
-
-VOID
-Udp4ReportIcmpError (
- IN UDP4_INSTANCE_DATA *Instance
- );
-
-VOID
-Udp4NetVectorExtFree (
- VOID *Context
- );
-
-EFI_STATUS
-Udp4SetVariableData (
- IN UDP4_SERVICE_DATA *Udp4Service
- );
-
-VOID
-Udp4ClearVariableData (
- IN UDP4_SERVICE_DATA *Udp4Service
- );
-
-#endif
-
+#include <Library/UefiLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+#include "Udp4Driver.h"\r
+\r
+\r
+extern EFI_COMPONENT_NAME_PROTOCOL gUdp4ComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gUdp4ComponentName2;\r
+extern EFI_SERVICE_BINDING_PROTOCOL mUdp4ServiceBinding;\r
+extern EFI_UDP4_PROTOCOL mUdp4Protocol;\r
+extern UINT16 mUdp4RandomPort;\r
+\r
+#define ICMP_ERROR_PACKET_LENGTH 8\r
+\r
+#define UDP4_TIMEOUT_INTERVAL (50 * TICKS_PER_MS) // 50 milliseconds\r
+\r
+#define UDP4_HEADER_SIZE sizeof (EFI_UDP4_HEADER)\r
+#define UDP4_MAX_DATA_SIZE 65507\r
+\r
+#define UDP4_PORT_KNOWN 1024\r
+\r
+#define UDP4_SERVICE_DATA_SIGNATURE EFI_SIGNATURE_32('U', 'd', 'p', '4')\r
+\r
+#define UDP4_SERVICE_DATA_FROM_THIS(a) \\r
+ CR ( \\r
+ (a), \\r
+ UDP4_SERVICE_DATA, \\r
+ ServiceBinding, \\r
+ UDP4_SERVICE_DATA_SIGNATURE \\r
+ )\r
+\r
+typedef struct _UDP4_SERVICE_DATA_ {\r
+ UINT32 Signature;\r
+ EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;\r
+ EFI_HANDLE ImageHandle;\r
+ EFI_HANDLE ControllerHandle;\r
+ NET_LIST_ENTRY ChildrenList;\r
+ UINTN ChildrenNumber;\r
+ IP_IO *IpIo;\r
+\r
+ EFI_EVENT TimeoutEvent;\r
+\r
+ CHAR16 *MacString;\r
+} UDP4_SERVICE_DATA;\r
+\r
+#define UDP4_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32('U', 'd', 'p', 'I')\r
+\r
+#define UDP4_INSTANCE_DATA_FROM_THIS(a) \\r
+ CR ( \\r
+ (a), \\r
+ UDP4_INSTANCE_DATA, \\r
+ Udp4Proto, \\r
+ UDP4_INSTANCE_DATA_SIGNATURE \\r
+ )\r
+\r
+typedef struct _UDP4_INSTANCE_DATA_ {\r
+ UINT32 Signature;\r
+ NET_LIST_ENTRY Link;\r
+\r
+ UDP4_SERVICE_DATA *Udp4Service;\r
+ EFI_UDP4_PROTOCOL Udp4Proto;\r
+ EFI_UDP4_CONFIG_DATA ConfigData;\r
+ EFI_HANDLE ChildHandle;\r
+ BOOLEAN Configured;\r
+ BOOLEAN IsNoMapping;\r
+\r
+ NET_MAP TxTokens;\r
+ NET_MAP RxTokens;\r
+\r
+ NET_MAP McastIps;\r
+\r
+ NET_LIST_ENTRY RcvdDgramQue;\r
+ NET_LIST_ENTRY DeliveredDgramQue;\r
+\r
+ UINT16 HeadSum;\r
+\r
+ EFI_STATUS IcmpError;\r
+\r
+ IP_IO_IP_INFO *IpInfo;\r
+\r
+ BOOLEAN Destroyed;\r
+} UDP4_INSTANCE_DATA;\r
+\r
+typedef struct _UDP4_RXDATA_WRAP_ {\r
+ NET_LIST_ENTRY Link;\r
+ NET_BUF *Packet;\r
+ UINT32 TimeoutTick;\r
+ EFI_UDP4_RECEIVE_DATA RxData;\r
+} UDP4_RXDATA_WRAP;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Udp4GetModeData (\r
+ IN EFI_UDP4_PROTOCOL *This,\r
+ OUT EFI_UDP4_CONFIG_DATA *Udp4ConfigData OPTIONAL,\r
+ OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL,\r
+ OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,\r
+ OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Udp4Configure (\r
+ IN EFI_UDP4_PROTOCOL *This,\r
+ IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Udp4Groups (\r
+ IN EFI_UDP4_PROTOCOL *This,\r
+ IN BOOLEAN JoinFlag,\r
+ IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Udp4Routes (\r
+ IN EFI_UDP4_PROTOCOL *This,\r
+ IN BOOLEAN DeleteRoute,\r
+ IN EFI_IPv4_ADDRESS *SubnetAddress,\r
+ IN EFI_IPv4_ADDRESS *SubnetMask,\r
+ IN EFI_IPv4_ADDRESS *GatewayAddress\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Udp4Transmit (\r
+ IN EFI_UDP4_PROTOCOL *This,\r
+ IN EFI_UDP4_COMPLETION_TOKEN *Token\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Udp4Receive (\r
+ IN EFI_UDP4_PROTOCOL *This,\r
+ IN EFI_UDP4_COMPLETION_TOKEN *Token\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Udp4Cancel (\r
+ IN EFI_UDP4_PROTOCOL *This,\r
+ IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL\r
+ );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+Udp4Poll (\r
+ IN EFI_UDP4_PROTOCOL *This\r
+ );\r
+\r
+EFI_STATUS\r
+Udp4CreateService (\r
+ IN UDP4_SERVICE_DATA *Udp4Service,\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_HANDLE ControllerHandle\r
+ );\r
+\r
+VOID\r
+Udp4CleanService (\r
+ IN UDP4_SERVICE_DATA *Udp4Service\r
+ );\r
+\r
+VOID\r
+Udp4InitInstance (\r
+ IN UDP4_SERVICE_DATA *Udp4Service,\r
+ IN UDP4_INSTANCE_DATA *Instance\r
+ );\r
+\r
+VOID\r
+Udp4CleanInstance (\r
+ IN UDP4_INSTANCE_DATA *Instance\r
+ );\r
+\r
+EFI_STATUS\r
+Udp4Bind (\r
+ IN NET_LIST_ENTRY *InstanceList,\r
+ IN EFI_UDP4_CONFIG_DATA *ConfigData\r
+ );\r
+\r
+BOOLEAN\r
+Udp4IsReconfigurable (\r
+ IN EFI_UDP4_CONFIG_DATA *OldConfigData,\r
+ IN EFI_UDP4_CONFIG_DATA *NewConfigData\r
+ );\r
+\r
+VOID\r
+Udp4BuildIp4ConfigData (\r
+ IN EFI_UDP4_CONFIG_DATA *Udp4ConfigData,\r
+ IN EFI_IP4_CONFIG_DATA *Ip4ConfigData\r
+ );\r
+\r
+EFI_STATUS\r
+Udp4ValidateTxToken (\r
+ IN UDP4_INSTANCE_DATA *Instance,\r
+ IN EFI_UDP4_COMPLETION_TOKEN *TxToken\r
+ );\r
+\r
+EFI_STATUS\r
+Udp4TokenExist (\r
+ IN NET_MAP *Map,\r
+ IN NET_MAP_ITEM *Item,\r
+ IN VOID *Context\r
+ );\r
+\r
+UINT16\r
+Udp4Checksum (\r
+ IN NET_BUF *Packet,\r
+ IN UINT16 HeadSum\r
+ );\r
+\r
+EFI_STATUS\r
+Udp4RemoveToken (\r
+ IN NET_MAP *TokenMap,\r
+ IN EFI_UDP4_COMPLETION_TOKEN *Token\r
+ );\r
+\r
+EFI_STATUS\r
+Udp4LeaveGroup (\r
+ IN NET_MAP *Map,\r
+ IN NET_MAP_ITEM *Item,\r
+ IN VOID *Arg OPTIONAL\r
+ );\r
+\r
+VOID\r
+Udp4FlushRxData (\r
+ IN NET_LIST_ENTRY *RcvdDgramQue\r
+ );\r
+\r
+EFI_STATUS\r
+Udp4InstanceCancelToken (\r
+ IN UDP4_INSTANCE_DATA *Instance,\r
+ IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL\r
+ );\r
+\r
+VOID\r
+Udp4InstanceDeliverDgram (\r
+ IN UDP4_INSTANCE_DATA *Instance\r
+ );\r
+\r
+VOID\r
+Udp4ReportIcmpError (\r
+ IN UDP4_INSTANCE_DATA *Instance\r
+ );\r
+\r
+VOID\r
+Udp4NetVectorExtFree (\r
+ VOID *Context\r
+ );\r
+\r
+EFI_STATUS\r
+Udp4SetVariableData (\r
+ IN UDP4_SERVICE_DATA *Udp4Service\r
+ );\r
+\r
+VOID\r
+Udp4ClearVariableData (\r
+ IN UDP4_SERVICE_DATA *Udp4Service\r
+ );\r
+\r
+#endif\r
+\r