]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Update to support to produce Component Name and & Component Name 2 protocol based...
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Sun, 30 Sep 2007 03:08:02 +0000 (03:08 +0000)
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Sun, 30 Sep 2007 03:08:02 +0000 (03:08 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4006 6f19259b-4bc3-4df7-8a09-765794883524

68 files changed:
MdeModulePkg/Universal/Network/ArpDxe/ArpDebug.h
MdeModulePkg/Universal/Network/ArpDxe/ArpDriver.c
MdeModulePkg/Universal/Network/ArpDxe/ArpDriver.h
MdeModulePkg/Universal/Network/ArpDxe/ArpImpl.h
MdeModulePkg/Universal/Network/ArpDxe/ComponentName.c
MdeModulePkg/Universal/Network/Dhcp4Dxe/ComponentName.c
MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Driver.c
MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Driver.h
MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Impl.h
MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Io.h
MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Option.h
MdeModulePkg/Universal/Network/Ip4ConfigDxe/ComponentName.c
MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4Config.h
MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigDriver.c
MdeModulePkg/Universal/Network/Ip4ConfigDxe/NicIp4Variable.h
MdeModulePkg/Universal/Network/Ip4Dxe/ComponentName.c
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Common.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Icmp.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4If.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Igmp.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Input.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Option.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Output.h
MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Route.h
MdeModulePkg/Universal/Network/MnpDxe/ComponentName.c
MdeModulePkg/Universal/Network/MnpDxe/MnpDebug.h
MdeModulePkg/Universal/Network/MnpDxe/MnpDriver.c
MdeModulePkg/Universal/Network/MnpDxe/MnpDriver.h
MdeModulePkg/Universal/Network/MnpDxe/MnpImpl.h
MdeModulePkg/Universal/Network/Mtftp4Dxe/ComponentName.c
MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Driver.c
MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Driver.h
MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Impl.h
MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Option.h
MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Support.h
MdeModulePkg/Universal/Network/PxeBcDxe/Bc.c
MdeModulePkg/Universal/Network/PxeBcDxe/Bc.h
MdeModulePkg/Universal/Network/PxeBcDxe/ComponentName.c
MdeModulePkg/Universal/Network/PxeBcDxe/Dhcp.h
MdeModulePkg/Universal/Network/PxeBcDxe/Ebc/PxeArch.h
MdeModulePkg/Universal/Network/PxeBcDxe/Hton.h
MdeModulePkg/Universal/Network/PxeBcDxe/Ia32/PxeArch.h
MdeModulePkg/Universal/Network/PxeBcDxe/Ip.h
MdeModulePkg/Universal/Network/PxeBcDxe/Ipf/PxeArch.h
MdeModulePkg/Universal/Network/PxeBcDxe/Tftp.h
MdeModulePkg/Universal/Network/PxeBcDxe/X64/PxeArch.h
MdeModulePkg/Universal/Network/PxeDhcp4Dxe/ComponentName.c
MdeModulePkg/Universal/Network/PxeDhcp4Dxe/PxeDhcp4.c
MdeModulePkg/Universal/Network/PxeDhcp4Dxe/PxeDhcp4.h
MdeModulePkg/Universal/Network/SnpDxe/ComponentName.c
MdeModulePkg/Universal/Network/SnpDxe/snp.c
MdeModulePkg/Universal/Network/SnpDxe/snp.h
MdeModulePkg/Universal/Network/Tcp4Dxe/ComponentName.c
MdeModulePkg/Universal/Network/Tcp4Dxe/SockImpl.h
MdeModulePkg/Universal/Network/Tcp4Dxe/Socket.h
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Driver.c
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Driver.h
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Func.h
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Main.h
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Option.h
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Proto.h
MdeModulePkg/Universal/Network/Udp4Dxe/ComponentName.c
MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Driver.c
MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Driver.h
MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Impl.h

index 05f542d086abdc730d9e65e31dcae355f386cc11..fb69b073517e913937badb07f950547d467adc00 100644 (file)
@@ -1,30 +1,30 @@
-/** @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
index 924028531ae01bd998442b1687f7bfa675ac9b3e..58bc72219cee3214636d347d2c30b4a2d9054958 100644 (file)
@@ -749,14 +749,13 @@ Returns:
 \r
 --*/\r
 {\r
 \r
 --*/\r
 {\r
-  return EfiLibInstallAllDriverProtocols (\r
+  return EfiLibInstallDriverBindingComponentName2 (\r
            ImageHandle,\r
            SystemTable,\r
            &gArpDriverBinding,\r
            ImageHandle,\r
            &gArpComponentName,\r
            ImageHandle,\r
            SystemTable,\r
            &gArpDriverBinding,\r
            ImageHandle,\r
            &gArpComponentName,\r
-           NULL,\r
-           NULL\r
+           &gArpComponentName2\r
            );\r
 }\r
 \r
            );\r
 }\r
 \r
index 93526c777f6717eeefa1a8e5d8d0e424247a8546..457441a5c41b89e4c8318df4239e9bbaad79181f 100644 (file)
@@ -1,84 +1,85 @@
-/** @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
 \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 <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
index 607443a99e262659c4471102435cf7c183d4ac19..729cb5d68e189c6ad780618fcce1007092538708 100644 (file)
-/** @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
 \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 <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
index ad92f3cc31153929c95297f47885cffa7d5b417d..47d7bd70ae859f445139388cb35169e39319a741 100644 (file)
@@ -23,6 +23,45 @@ Abstract:
 //\r
 // EFI Component Name Functions\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
 EFI_STATUS\r
 EFIAPI\r
 ArpComponentNameGetDriverName (\r
@@ -31,16 +70,86 @@ ArpComponentNameGetDriverName (
   OUT CHAR16                       **DriverName\r
   );\r
 \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
 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
+\r
 //\r
 // EFI Component Name Protocol\r
 //\r
 //\r
 // EFI Component Name Protocol\r
 //\r
@@ -48,13 +157,62 @@ EFI_COMPONENT_NAME_PROTOCOL  gArpComponentName = {
   ArpComponentNameGetDriverName,\r
   ArpComponentNameGetControllerName,\r
   "eng"\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
 \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
   { 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
 EFI_STATUS\r
 EFIAPI\r
 ArpComponentNameGetDriverName (\r
@@ -62,94 +220,93 @@ ArpComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\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
 {\r
-  return LookupUnicodeString (\r
+  return LookupUnicodeString2 (\r
            Language,\r
            Language,\r
-           gArpComponentName.SupportedLanguages,\r
+           This->SupportedLanguages,\r
            mArpDriverNameTable,\r
            mArpDriverNameTable,\r
-           DriverName\r
+           DriverName,\r
+           (BOOLEAN)(This == &gArpComponentName)\r
            );\r
 }\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
 ArpComponentNameGetControllerName (\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
-  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
   return EFI_UNSUPPORTED;\r
 }\r
index 6808e771ac736d1cc7d7837d8e9887cbf529765b..8402ae5cfa9359a5143b36a851836d07939f5201 100644 (file)
@@ -24,6 +24,45 @@ Abstract:
 //\r
 // EFI Component Name Functions\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
 EFI_STATUS\r
 EFIAPI\r
 DhcpComponentNameGetDriverName (\r
@@ -32,6 +71,75 @@ DhcpComponentNameGetDriverName (
   OUT CHAR16                       **DriverName\r
   );\r
 \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
 EFI_STATUS\r
 EFIAPI\r
 DhcpComponentNameGetControllerName (\r
@@ -42,18 +150,29 @@ DhcpComponentNameGetControllerName (
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
+\r
 //\r
 // EFI Component Name Protocol\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
   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
 \r
 static EFI_UNICODE_STRING_TABLE mDhcpDriverNameTable[] = {\r
   {\r
-    "eng",\r
+    "eng;en",\r
     L"DHCP Protocol Driver"\r
   },\r
   {\r
     L"DHCP Protocol Driver"\r
   },\r
   {\r
@@ -62,6 +181,45 @@ static EFI_UNICODE_STRING_TABLE mDhcpDriverNameTable[] = {
   }\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
 EFI_STATUS\r
 EFIAPI\r
 DhcpComponentNameGetDriverName (\r
@@ -69,41 +227,84 @@ DhcpComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\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
 {\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
 \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
 EFI_STATUS\r
 EFIAPI\r
 DhcpComponentNameGetControllerName (\r
@@ -113,50 +314,6 @@ DhcpComponentNameGetControllerName (
   IN  CHAR8                                           *Language,\r
   OUT CHAR16                                          **ControllerName\r
   )\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
   return EFI_UNSUPPORTED;\r
 }\r
index d14697262cb18beab134b5574eec1406921d9d12..95497908833c8a236495f18f9090f9d857a8c34e 100644 (file)
@@ -61,14 +61,13 @@ Returns:
 \r
 --*/\r
 {\r
 \r
 --*/\r
 {\r
-  return EfiLibInstallAllDriverProtocols (\r
+  return EfiLibInstallDriverBindingComponentName2 (\r
            ImageHandle,\r
            SystemTable,\r
            &gDhcp4DriverBinding,\r
            ImageHandle,\r
            &gDhcp4ComponentName,\r
            ImageHandle,\r
            SystemTable,\r
            &gDhcp4DriverBinding,\r
            ImageHandle,\r
            &gDhcp4ComponentName,\r
-           NULL,\r
-           NULL\r
+           &gDhcp4ComponentName2\r
            );\r
 }\r
 \r
            );\r
 }\r
 \r
index 100bf56bb20b1e78190813056bbf11ac48fd5242..845a2847a3c4c586fb19e45b52a952d778e1db1b 100644 (file)
@@ -1,67 +1,68 @@
-/** @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
index d81d68fa1e20a6cf1278753306046c015acd3918..7a04109f4db82e0f82dd33ee75c7f73d721bd674 100644 (file)
@@ -1,34 +1,34 @@
-/** @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
 \r
 #include <PiDxe.h>\r
 \r
@@ -39,121 +39,121 @@ Abstract:
 #include <Library/UefiDriverEntryPoint.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/UefiLib.h>\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
index a05b66282e71675fc2db89722938b17f36694107..560c791d09eb3db127831ab2e158abb02418cf14 100644 (file)
-/** @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
index 4bc1920eb3883b318deaf9b96eb2e714ff51e32d..9db2e0a721167d4faae3a22735b1e57bb82e3279 100644 (file)
-/** @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
index 1be21a1791419fe6c07fd58a10c49b787107f163..1fbee2a097698c9d6565a277650ab6dc73a473c3 100644 (file)
@@ -24,6 +24,45 @@ Abstract:
 //\r
 // EFI Component Name Functions\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
 Ip4ConfigComponentNameGetDriverName (\r
 EFI_STATUS\r
 EFIAPI\r
 Ip4ConfigComponentNameGetDriverName (\r
@@ -32,6 +71,75 @@ Ip4ConfigComponentNameGetDriverName (
   OUT CHAR16                       **DriverName\r
   );\r
 \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
 EFI_STATUS\r
 EFIAPI\r
 Ip4ConfigComponentNameGetControllerName (\r
@@ -42,21 +150,71 @@ Ip4ConfigComponentNameGetControllerName (
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
+\r
 //\r
 // EFI Component Name Protocol\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
   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
 \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
   {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
 EFI_STATUS\r
 EFIAPI\r
 Ip4ConfigComponentNameGetDriverName (\r
@@ -64,94 +222,93 @@ Ip4ConfigComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\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
 {\r
-  return LookupUnicodeString (\r
+  return LookupUnicodeString2 (\r
            Language,\r
            Language,\r
-           gIp4ConfigComponentName.SupportedLanguages,\r
+           This->SupportedLanguages,\r
            mIp4ConfigDriverNameTable,\r
            mIp4ConfigDriverNameTable,\r
-           DriverName\r
+           DriverName,\r
+           (BOOLEAN)(This == &gIp4ConfigComponentName)\r
            );\r
 }\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
 Ip4ConfigComponentNameGetControllerName (\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
-\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
   return EFI_UNSUPPORTED;\r
 }\r
index 8c58c8078c643cab9dd791715e37f0528cbc85d7..55629447afe06d39abe3835c96edf72e0708146b 100644 (file)
@@ -1,28 +1,28 @@
-/** @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 <PiDxe.h>\r
 \r
 #include <Protocol/Dhcp4.h>\r
@@ -36,97 +36,98 @@ Abstract:
 #include <Library/UefiLib.h>\r
 #include <Library/NetLib.h>\r
 #include <Library/BaseMemoryLib.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
index c3845f4734a441517101b2de592257f2690b861a..fdd50b35354fa1a014e3c835af68bc3a59d80741 100644 (file)
@@ -85,14 +85,13 @@ Returns:
 \r
 --*/\r
 {\r
 \r
 --*/\r
 {\r
-  return EfiLibInstallAllDriverProtocols (\r
+  return EfiLibInstallDriverBindingComponentName2 (\r
            ImageHandle,\r
            SystemTable,\r
            &gIp4ConfigDriverBinding,\r
            ImageHandle,\r
            &gIp4ConfigComponentName,\r
            ImageHandle,\r
            SystemTable,\r
            &gIp4ConfigDriverBinding,\r
            ImageHandle,\r
            &gIp4ConfigComponentName,\r
-           NULL,\r
-           NULL\r
+           &gIp4ConfigComponentName2\r
            );\r
 }\r
 \r
            );\r
 }\r
 \r
index 74d1660c4d0e48bb90afb549935b6f78cadc248c..be8ccd7b5f118d1e686f61ecc298254d8c42e013 100644 (file)
@@ -1,75 +1,75 @@
-/** @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
index 728887587e2db6f4dc7570d8dd4c2d02a55a7885..01642c23839d426e5e589b5d09373d813c2f2562 100644 (file)
@@ -24,6 +24,45 @@ Abstract:
 //\r
 // EFI Component Name Functions\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
 Ip4ComponentNameGetDriverName (\r
 EFI_STATUS\r
 EFIAPI\r
 Ip4ComponentNameGetDriverName (\r
@@ -32,6 +71,75 @@ Ip4ComponentNameGetDriverName (
   OUT CHAR16                       **DriverName\r
   );\r
 \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
 EFI_STATUS\r
 EFIAPI\r
 Ip4ComponentNameGetControllerName (\r
@@ -42,18 +150,29 @@ Ip4ComponentNameGetControllerName (
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
+\r
 //\r
 // EFI Component Name Protocol\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
   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
 \r
 static EFI_UNICODE_STRING_TABLE mIp4DriverNameTable[] = {\r
   {\r
-    "eng",\r
+    "eng;en",\r
     L"IP4 Network Service Driver"\r
   },\r
   {\r
     L"IP4 Network Service Driver"\r
   },\r
   {\r
@@ -62,6 +181,45 @@ static EFI_UNICODE_STRING_TABLE mIp4DriverNameTable[] = {
   }\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
 EFI_STATUS\r
 EFIAPI\r
 Ip4ComponentNameGetDriverName (\r
@@ -69,44 +227,85 @@ Ip4ComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\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
 {\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
 }\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
 EFI_STATUS\r
 EFIAPI\r
 Ip4ComponentNameGetControllerName (\r
@@ -116,51 +315,6 @@ Ip4ComponentNameGetControllerName (
   IN  CHAR8                                           *Language,\r
   OUT CHAR16                                          **ControllerName\r
   )\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
 {\r
   return EFI_UNSUPPORTED;\r
 }\r
index 4c5a7b40794aa6d027ddf3ca899172ffa0c1fdef..35368b34617857b5075c2e01869e3d91a59812e1 100644 (file)
-/** @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
index f8d4b392767597cf8568bd122a4a663561838b66..0d308c05211c98867622e060eb6cbbd181031f47 100644 (file)
@@ -56,14 +56,13 @@ Returns:
 \r
 --*/\r
 {\r
 \r
 --*/\r
 {\r
-  return EfiLibInstallAllDriverProtocols (\r
+  return EfiLibInstallDriverBindingComponentName2 (\r
            ImageHandle,\r
            SystemTable,\r
            &gIp4DriverBinding,\r
            ImageHandle,\r
            &gIp4ComponentName,\r
            ImageHandle,\r
            SystemTable,\r
            &gIp4DriverBinding,\r
            ImageHandle,\r
            &gIp4ComponentName,\r
-           NULL,\r
-           NULL\r
+           &gIp4ComponentName2\r
            );\r
 }\r
 \r
            );\r
 }\r
 \r
index 5421c90c3b3ff6254b8d3ef03bb05ac611943b23..6ff56f0e94b4979d771ee0aa69c38a00a5799855 100644 (file)
@@ -1,84 +1,85 @@
-/** @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
index 366b02c176305951e1211aec0ac86a4f86554d00..7999b2e306463ddbbb80946c11c91e9d2feefa0b 100644 (file)
@@ -1,99 +1,99 @@
-/** @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
index 9db1d8ac79892b9e3421240e500e02f23bee07c5..22db034a0a509484dba7aedd5aff3065d865cb98 100644 (file)
-/** @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
index 9bda9f942bdff916f6965aa342afd40e5d3e3e46..0b61874632a0c15d22bf9d3dba76d6e360482e6b 100644 (file)
-/** @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
index 58bf045372ac09c8709cf7f948c42159178f2c61..35ada7feff294179b11ca5c2e93eadb5a9ee4761 100644 (file)
@@ -1,28 +1,28 @@
-/** @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 <PiDxe.h>\r
 \r
 #include <Protocol/IP4.h>\r
@@ -35,224 +35,224 @@ Abstract:
 #include <Library/UefiDriverEntryPoint.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/BaseLib.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
index 2acf769968089c749bed35079f1da25f5d36c1fd..af8ed1adf348f5d6e17fcc03df15b5f5d98a5178 100644 (file)
-/** @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
index 665b55b06a79d5eefc46559599e44e1780ec14fb..830962ee2479d117f9ed59916c9a6b911084b689 100644 (file)
@@ -1,52 +1,52 @@
-/** @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
index e165e1d715cc8821bc8d122f52e7d6711aea77a6..991f10cbc0f72fe240825775339b9c0af4b0f8dd 100644 (file)
@@ -1,54 +1,54 @@
-/** @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
index 3dce5d2f3abe7bd862492bc614bcbc586a9dc370..fdf40ca5bf92dbdef0ab70bcc944dfcacf915ddd 100644 (file)
-/** @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
index 209861c77560493cc051468db0ad3dcd1b04fed6..b2af53cea7a855d723e144683458172756c49af6 100644 (file)
@@ -24,6 +24,45 @@ Abstract:
 //\r
 // EFI Component Name Functions\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
 MnpComponentNameGetDriverName (\r
 EFI_STATUS\r
 EFIAPI\r
 MnpComponentNameGetDriverName (\r
@@ -32,6 +71,75 @@ MnpComponentNameGetDriverName (
   OUT CHAR16                       **DriverName\r
   );\r
 \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
 EFI_STATUS\r
 EFIAPI\r
 MnpComponentNameGetControllerName (\r
@@ -42,18 +150,29 @@ MnpComponentNameGetControllerName (
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
+\r
 //\r
 // EFI Component Name Protocol\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
   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
 \r
 STATIC EFI_UNICODE_STRING_TABLE mMnpDriverNameTable[] = {\r
   {\r
-    "eng",\r
+    "eng;en",\r
     L"MNP Network Service Driver"\r
   },\r
   {\r
     L"MNP Network Service Driver"\r
   },\r
   {\r
@@ -62,6 +181,45 @@ STATIC EFI_UNICODE_STRING_TABLE mMnpDriverNameTable[] = {
   }\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
 EFI_STATUS\r
 EFIAPI\r
 MnpComponentNameGetDriverName (\r
@@ -69,41 +227,84 @@ MnpComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\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
 {\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
 \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
 EFI_STATUS\r
 EFIAPI\r
 MnpComponentNameGetControllerName (\r
@@ -113,50 +314,6 @@ MnpComponentNameGetControllerName (
   IN  CHAR8                                           *Language,\r
   OUT CHAR16                                          **ControllerName\r
   )\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
   return EFI_UNSUPPORTED;\r
 }\r
index 72eb59b9b408775a015081bba335cb8a908214e1..063c05b74c95f0daed2f12b2dfc83356d96aeed6 100644 (file)
@@ -1,28 +1,28 @@
-/** @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
index 7303f6b40e1a4e8b041b130f494192dc8db287f0..814566ec56c647213fec7e7494d66b0d4f7b1f49 100644 (file)
@@ -547,13 +547,12 @@ Returns:
 \r
 --*/\r
 {\r
 \r
 --*/\r
 {\r
-  return EfiLibInstallAllDriverProtocols (\r
+  return EfiLibInstallDriverBindingComponentName2 (\r
            ImageHandle,\r
            SystemTable,\r
            &gMnpDriverBinding,\r
            ImageHandle,\r
            &gMnpComponentName,\r
            ImageHandle,\r
            SystemTable,\r
            &gMnpDriverBinding,\r
            ImageHandle,\r
            &gMnpComponentName,\r
-           NULL,\r
-           NULL\r
+           &gMnpComponentName2\r
            );\r
 }\r
            );\r
 }\r
index a387eb05d003dd496257518a88a9065f9469564c..732c56b299794dbc65eb3e088af2207fd84d82c8 100644 (file)
-/** @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 <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 <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/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
index cdb081d2b4396faf32e861b308a2f133208dd9a6..7f6669fba3ea614851c6101a08dd7c83034f357d 100644 (file)
-/** @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
index 258299418c0a3b8deee16d82a503fa7d5377d2f9..626995b687d1d6d8068e2dbd223970eab7c341b8 100644 (file)
@@ -23,6 +23,45 @@ Abstract:
 //\r
 // EFI Component Name Functions\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
 Mtftp4ComponentNameGetDriverName (\r
 EFI_STATUS\r
 EFIAPI\r
 Mtftp4ComponentNameGetDriverName (\r
@@ -31,6 +70,75 @@ Mtftp4ComponentNameGetDriverName (
   OUT CHAR16                       **DriverName\r
   );\r
 \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
 EFI_STATUS\r
 EFIAPI\r
 Mtftp4ComponentNameGetControllerName (\r
@@ -41,18 +149,29 @@ Mtftp4ComponentNameGetControllerName (
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
+\r
 //\r
 // EFI Component Name Protocol\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
   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
 \r
 static EFI_UNICODE_STRING_TABLE mMtftp4DriverNameTable[] = {\r
   {\r
-    "eng",\r
+    "eng;en",\r
     L"MTFTP4 Network Service"\r
   },\r
   {\r
     L"MTFTP4 Network Service"\r
   },\r
   {\r
@@ -61,6 +180,45 @@ static EFI_UNICODE_STRING_TABLE mMtftp4DriverNameTable[] = {
   }\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
 EFI_STATUS\r
 EFIAPI\r
 Mtftp4ComponentNameGetDriverName (\r
@@ -68,41 +226,84 @@ Mtftp4ComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\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
 {\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
 \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
 EFI_STATUS\r
 EFIAPI\r
 Mtftp4ComponentNameGetControllerName (\r
@@ -112,50 +313,6 @@ Mtftp4ComponentNameGetControllerName (
   IN  CHAR8                                           *Language,\r
   OUT CHAR16                                          **ControllerName\r
   )\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
   return EFI_UNSUPPORTED;\r
 }\r
index 835dfe0b8057ae8385f2b65a92ac867a73c93e34..ceabbfe41f8222036c13f689d13bbbd2e415c89d 100644 (file)
@@ -58,14 +58,13 @@ Returns:
 \r
 --*/\r
 {\r
 \r
 --*/\r
 {\r
-  return EfiLibInstallAllDriverProtocols (\r
+  return EfiLibInstallDriverBindingComponentName2 (\r
            ImageHandle,\r
            SystemTable,\r
            &gMtftp4DriverBinding,\r
            ImageHandle,\r
            &gMtftp4ComponentName,\r
            ImageHandle,\r
            SystemTable,\r
            &gMtftp4DriverBinding,\r
            ImageHandle,\r
            &gMtftp4ComponentName,\r
-           NULL,\r
-           NULL\r
+           &gMtftp4ComponentName2\r
            );\r
 }\r
 \r
            );\r
 }\r
 \r
index a9b7ac7121daf0cff2432e7fdb53a7555f9565f1..b6eba0cea6ed784b0dcd89950d68d3b581a8969b 100644 (file)
@@ -1,69 +1,70 @@
-/** @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
index 22ba7dd705de10eb79a762ffa2e834c600ca5c1b..c12b1dd0076fb8e88206078df3130f2dfc378e18 100644 (file)
@@ -1,33 +1,33 @@
-/** @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 <PiDxe.h>\r
 \r
 #include <Protocol/Udp4.h>\r
@@ -37,142 +37,142 @@ Abstract:
 #include <Library/UefiDriverEntryPoint.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/UefiLib.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
index 3bd7574eb25e1c0535616922eb8b9a32c672d80d..2595dc2795a42cb6175a821e6f6e790c108e8683 100644 (file)
@@ -1,73 +1,73 @@
-/** @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
index be186866c5867707e1c306d81394082f4acd51cf..5e5157be64206165db3a0efb30b07ff5372afe20 100644 (file)
@@ -1,96 +1,96 @@
-/** @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
index 0c0eeffcff6afc9d5685bbabe29837b40a45bf5d..d14dbd91528c80361652a2c8ff74dfc5120a88fd 100644 (file)
@@ -2381,15 +2381,14 @@ InitializeBCDriver (
   //\r
   // Initialize EFI library\r
   //\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
 \r
   InitArpHeader ();\r
   OptionsStrucInit ();\r
index e04acc36566551c483c36664fe199a9e7c0fedfc..715a9f15627f5f13810cd4cf674001e2f7235e01 100644 (file)
@@ -1,25 +1,25 @@
-/** @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 <PiDxe.h>\r
 \r
 #include <Guid/SmBios.h>\r
@@ -29,528 +29,529 @@ Abstract:
 #include <Protocol/NetworkInterfaceIdentifier.h>\r
 #include <Protocol/SimpleNetwork.h>\r
 #include <Protocol/LoadFile.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 <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/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
index 18dca38408255432b2e8ef41f7fbf195765a9210..7aea928fed313588dcda99f0d9330a8ddb56f789 100644 (file)
@@ -22,6 +22,45 @@ Abstract:
 //\r
 // EFI Component Name Functions\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
 PxeBcComponentNameGetDriverName (\r
 EFI_STATUS\r
 EFIAPI\r
 PxeBcComponentNameGetDriverName (\r
@@ -30,6 +69,75 @@ PxeBcComponentNameGetDriverName (
   OUT CHAR16                       **DriverName\r
   );\r
 \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
 EFI_STATUS\r
 EFIAPI\r
 PxeBcComponentNameGetControllerName (\r
@@ -40,18 +148,29 @@ PxeBcComponentNameGetControllerName (
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
+\r
 //\r
 // EFI Component Name Protocol\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
   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
 \r
 static EFI_UNICODE_STRING_TABLE mPxeBcDriverNameTable[] = {\r
   {\r
-    "eng",\r
+    "eng;en",\r
     L"PXE Base Code Driver"\r
   },\r
   {\r
     L"PXE Base Code Driver"\r
   },\r
   {\r
@@ -60,6 +179,45 @@ static EFI_UNICODE_STRING_TABLE mPxeBcDriverNameTable[] = {
   }\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
 EFI_STATUS\r
 EFIAPI\r
 PxeBcComponentNameGetDriverName (\r
@@ -67,41 +225,84 @@ PxeBcComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\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
 {\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
 \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
 EFI_STATUS\r
 EFIAPI\r
 PxeBcComponentNameGetControllerName (\r
@@ -111,50 +312,6 @@ PxeBcComponentNameGetControllerName (
   IN  CHAR8                                           *Language,\r
   OUT CHAR16                                          **ControllerName\r
   )\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
   return EFI_UNSUPPORTED;\r
 }\r
index 36f71f775a263fcd3c21660b433341eb8bc0c848..839a093d9fdc2bcdfd60fa05d6dc40b356d06879 100644 (file)
-/** @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
index 0db856b163b8c7581ca83a26189de6fea4f5c68d..89350674b16407d44ef0fc9128ef60f7e759d907 100644 (file)
@@ -1,36 +1,36 @@
-/** @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
index c4ace49e7875bd68fdaf7d5462e501449e2fa193..1da5624900e1d866c51b725a97720c0b139ab19b 100644 (file)
@@ -1,43 +1,43 @@
-/** @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
index cc878d8dd72475c04c97de44143bb8b8c85ece7b..d032f62a9147561342a3d7924863e3b0c2163556 100644 (file)
@@ -1,26 +1,26 @@
-/** @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
index a482eb9cd9c9ef169b87261687268553193ec0d0..84ffd75bd66832bc40f363aa0d25daea98ce773e 100644 (file)
-/** @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
index 6d06045df065dc3fa21d75719cf0d19a61e2428c..866f4862261a9dae1ac72fba9c2756dd5c56b8b8 100644 (file)
@@ -1,26 +1,26 @@
-/** @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
index f81d86c1630a826214eb25f825cbe15c8ea20a5b..018af5a40066d0e8d96a70ff75b9832692ceeed0 100644 (file)
-/** @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
index a8fa293a164fe9a9759d2ed31375af4f4e5e0a2f..33a7b2696f972b6b8dac4954587f015ad9b2e1d3 100644 (file)
@@ -1,26 +1,26 @@
-/** @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
index 7186a9f159aac61aed7e054b9f11b9ee34f53054..6eae594c4ddc2cd3dca6b6b7ed287f75a9f55986 100644 (file)
@@ -25,6 +25,45 @@ Abstract:
 //\r
 // EFI Component Name Functions\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
 PxeDhcp4ComponentNameGetDriverName (\r
 EFI_STATUS\r
 EFIAPI\r
 PxeDhcp4ComponentNameGetDriverName (\r
@@ -33,6 +72,75 @@ PxeDhcp4ComponentNameGetDriverName (
   OUT CHAR16                       **DriverName\r
   );\r
 \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
 EFI_STATUS\r
 EFIAPI\r
 PxeDhcp4ComponentNameGetControllerName (\r
@@ -43,20 +151,31 @@ PxeDhcp4ComponentNameGetControllerName (
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
+\r
 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
 \r
 //\r
 // EFI Component Name Protocol\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
   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
 \r
 static EFI_UNICODE_STRING_TABLE mPxeDhcp4DriverNameTable[] = {\r
   {\r
-    "eng",\r
+    "eng;en",\r
     L"PXE DHCPv4 Driver"\r
   },\r
   {\r
     L"PXE DHCPv4 Driver"\r
   },\r
   {\r
@@ -65,7 +184,45 @@ static EFI_UNICODE_STRING_TABLE mPxeDhcp4DriverNameTable[] = {
   }\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
 EFI_STATUS\r
 EFIAPI\r
 PxeDhcp4ComponentNameGetDriverName (\r
@@ -73,42 +230,84 @@ PxeDhcp4ComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\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
 {\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
-/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\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
 EFI_STATUS\r
 EFIAPI\r
 PxeDhcp4ComponentNameGetControllerName (\r
@@ -118,50 +317,6 @@ PxeDhcp4ComponentNameGetControllerName (
   IN  CHAR8                                           *Language,\r
   OUT CHAR16                                          **ControllerName\r
   )\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
   return EFI_UNSUPPORTED;\r
 }\r
index 7fcd7c2c17078bb818abdc3175ec6451cb36b900..05a073879480f05d42e0ad4a057f45e25c767dba 100644 (file)
@@ -94,15 +94,14 @@ PxeDhcp4DriverEntryPoint (
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\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
 }\r
 \r
 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\r
index 7e971d49c982d66343a647bdde18fec34d219002..81021c79b8c7176ad22bbf80ae32421dc3553f9d 100644 (file)
-/** @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
 \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 <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/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
index 6da17a3633083d65fbe2c393d27bfbdb2508efa1..a2dc8e75af4b78802194573bcaa0327a6523b3e1 100644 (file)
@@ -25,6 +25,45 @@ Abstract:
 //\r
 // EFI Component Name Functions\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
 SimpleNetworkComponentNameGetDriverName (\r
 EFI_STATUS\r
 EFIAPI\r
 SimpleNetworkComponentNameGetDriverName (\r
@@ -33,6 +72,75 @@ SimpleNetworkComponentNameGetDriverName (
   OUT CHAR16                       **DriverName\r
   );\r
 \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
 EFI_STATUS\r
 EFIAPI\r
 SimpleNetworkComponentNameGetControllerName (\r
@@ -43,18 +151,29 @@ SimpleNetworkComponentNameGetControllerName (
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
+\r
 //\r
 // EFI Component Name Protocol\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
   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
 \r
 static EFI_UNICODE_STRING_TABLE mSimpleNetworkDriverNameTable[] = {\r
   {\r
-    "eng",\r
+    "eng;en",\r
     L"Simple Network Protocol Driver"\r
   },\r
   {\r
     L"Simple Network Protocol Driver"\r
   },\r
   {\r
@@ -63,6 +182,45 @@ static EFI_UNICODE_STRING_TABLE mSimpleNetworkDriverNameTable[] = {
   }\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
 EFI_STATUS\r
 EFIAPI\r
 SimpleNetworkComponentNameGetDriverName (\r
@@ -70,41 +228,84 @@ SimpleNetworkComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\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
 {\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
 \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
 EFI_STATUS\r
 EFIAPI\r
 SimpleNetworkComponentNameGetControllerName (\r
@@ -114,50 +315,6 @@ SimpleNetworkComponentNameGetControllerName (
   IN  CHAR8                                           *Language,\r
   OUT CHAR16                                          **ControllerName\r
   )\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
   return EFI_UNSUPPORTED;\r
 }\r
index d5055e7642ca4fd0c2f86226c4ea0e1211cee91e..2f88c71ae8dd781d929e805e90872ac65e997b22 100644 (file)
@@ -1257,13 +1257,12 @@ InitializeSnpNiiDriver (
   IN EFI_SYSTEM_TABLE *SystemTable\r
   )\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
 }\r
index 08c4f4d8df9b98cd7cc01238b4eb3518c40d8d3a..01f428d2f113fa76253f092b602dd5a89dee8400 100644 (file)
@@ -1,27 +1,27 @@
-/** @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 <PiDxe.h>\r
 \r
 #include <Protocol/SimpleNetwork.h>\r
@@ -34,399 +34,400 @@ Revision history:
 #include <Library/UefiDriverEntryPoint.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/BaseLib.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
index 477af22e1e65a16288a32a0662cee088de8562b6..fae269fa16b24fcc9b999b52bf9ebbf7fc0937c4 100644 (file)
@@ -23,6 +23,45 @@ Abstract:
 //\r
 // EFI Component Name Functions\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
 TcpComponentNameGetDriverName (\r
 EFI_STATUS\r
 EFIAPI\r
 TcpComponentNameGetDriverName (\r
@@ -31,28 +70,108 @@ TcpComponentNameGetDriverName (
   OUT CHAR16                       **DriverName\r
   );\r
 \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
 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
+\r
 //\r
 // EFI Component Name Protocol\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
   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
 \r
 static EFI_UNICODE_STRING_TABLE mTcpDriverNameTable[] = {\r
   {\r
-    "eng",\r
+    "eng;en",\r
     L"Tcp Network Service Driver"\r
   },\r
   {\r
     L"Tcp Network Service Driver"\r
   },\r
   {\r
@@ -61,6 +180,45 @@ static EFI_UNICODE_STRING_TABLE mTcpDriverNameTable[] = {
   }\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
 EFI_STATUS\r
 EFIAPI\r
 TcpComponentNameGetDriverName (\r
@@ -68,102 +226,93 @@ TcpComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\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
 \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
 \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
 \r
-Arguments:\r
+  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+                                EFI_COMPONENT_NAME_PROTOCOL instance.\r
 \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
 \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
 \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
-{\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
 \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
 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
-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
 {\r
   return EFI_UNSUPPORTED;\r
 }\r
index 69a1ac622296f946035083781ec7bf5d1fe6cef3..13feea18fae4a6b89a09ede7b9dd5584a04d4716 100644 (file)
@@ -1,84 +1,84 @@
-/** @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
index 75efa045b1b5e6a1a0406d24e46804e4cf0e540c..34b098bcde5e798387ce41157b125dfdce0062f1 100644 (file)
-/** @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 <PiDxe.h>\r
 \r
 #include <Protocol/IP4.h>\r
-#include <Protocol/Tcp4.h>
+#include <Protocol/Tcp4.h>\r
 #include <Protocol/Udp4.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/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
index bbd5a30a7b456536e011e37005a6d31e4930836f..a8185b0b92d7197ffe3f0369a5390608d9c06738 100644 (file)
@@ -22,7 +22,8 @@ Abstract:
 \r
 \r
 UINT16                               mTcp4RandomPort;\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
 TCP4_HEARTBEAT_TIMER  mTcp4Timer = {\r
   NULL,\r
@@ -176,14 +177,13 @@ Returns:
   //\r
   // Install the TCP4 Driver Binding Protocol\r
   //\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
              ImageHandle,\r
              SystemTable,\r
              &mTcp4DriverBinding,\r
              ImageHandle,\r
              &gTcp4ComponentName,\r
-             NULL,\r
-             NULL\r
+             &gTcp4ComponentName2\r
              );\r
   ASSERT_EFI_ERROR (Status);\r
   //\r
              );\r
   ASSERT_EFI_ERROR (Status);\r
   //\r
index af3444ef5809afdfa3f421c3ad25ae02bc5ba709..28fe53dc5a5d7395630584be348319542036188c 100644 (file)
-/** @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
index be99f3bf470060c5af7323694f3e2345c05de510..5bfdf2612df3a5db5206060cad01e8429395b9d1 100644 (file)
-/** @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
index 3e6575be92e4b4b000981c5bc0600ba31a6cece1..3e0b9db498631a5ad4acf452fdc3c4c99e5cb546 100644 (file)
-/** @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
index cae0e885cffae72a5d6fcffd1a4dba9e6fd04a71..ad856c777a6e92e4b3ca2c1daf640475498be09d 100644 (file)
-/** @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
index a35a51b3cc344e4c2e14b356dcf4f054d4901067..cfefdf2ea361fe4b970e1d1a428d96a861b5a1e7 100644 (file)
-/** @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
index b934765207a4a557948fb2c7f12884e8ff36d4aa..7fb1ce9bd774b2aacc1c8c42ae5eeb1ed0249326 100644 (file)
@@ -24,6 +24,45 @@ Abstract:
 //\r
 // EFI Component Name Functions\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
 UdpComponentNameGetDriverName (\r
 EFI_STATUS\r
 EFIAPI\r
 UdpComponentNameGetDriverName (\r
@@ -32,28 +71,108 @@ UdpComponentNameGetDriverName (
   OUT CHAR16                       **DriverName\r
   );\r
 \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
 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
+\r
 //\r
 // EFI Component Name Protocol\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
   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
 \r
 static EFI_UNICODE_STRING_TABLE mUdpDriverNameTable[] = {\r
   {\r
-    "eng",\r
+    "eng;en",\r
     L"UDP Network Service Driver"\r
   },\r
   {\r
     L"UDP Network Service Driver"\r
   },\r
   {\r
@@ -62,6 +181,45 @@ static EFI_UNICODE_STRING_TABLE mUdpDriverNameTable[] = {
   }\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
 EFI_STATUS\r
 EFIAPI\r
 UdpComponentNameGetDriverName (\r
@@ -69,100 +227,93 @@ UdpComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\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
 \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
 \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
 \r
-Arguments:\r
+  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+                                EFI_COMPONENT_NAME_PROTOCOL instance.\r
 \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
 \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
 \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
-{\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
 \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
 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
-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
   return EFI_UNSUPPORTED;\r
 }\r
index dc6fd48ebff9c29905e44968ed3eb4d448b631d7..7e2bc451ae2e85082224408f142eb535fc43704a 100644 (file)
@@ -504,14 +504,13 @@ Returns:
   //\r
   // Install the Udp4DriverBinding and Udp4ComponentName protocols.\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
              ImageHandle,\r
              SystemTable,\r
              &gUdp4DriverBinding,\r
              ImageHandle,\r
              &gUdp4ComponentName,\r
-             NULL,\r
-             NULL\r
+             &gUdp4ComponentName2\r
              );\r
   if (!EFI_ERROR (Status)) {\r
     //\r
              );\r
   if (!EFI_ERROR (Status)) {\r
     //\r
index 59acb444526eb2053f3a62e9b685094fed96a5b7..2e0b7f33c85579a1464a76c7497873797a337bf6 100644 (file)
@@ -1,70 +1,70 @@
-/** @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
index 7825624090272ffd72c0efdc9a4773a7d767b6a5..bdc855b52ceae5bfcbb3f5162b39e563a221c685 100644 (file)
-/** @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
 #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/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