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 05f542d..fb69b07 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 9240285..58bc722 100644 (file)
@@ -749,14 +749,13 @@ Returns:
 \r
 --*/\r
 {\r
-  return EfiLibInstallAllDriverProtocols (\r
+  return EfiLibInstallDriverBindingComponentName2 (\r
            ImageHandle,\r
            SystemTable,\r
            &gArpDriverBinding,\r
            ImageHandle,\r
            &gArpComponentName,\r
-           NULL,\r
-           NULL\r
+           &gArpComponentName2\r
            );\r
 }\r
 \r
index 93526c7..457441a 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
-#include <Protocol/ManagedNetwork.h>
+#include <Protocol/ManagedNetwork.h>\r
 #include <Protocol/ServiceBinding.h>\r
 \r
 #include <Library/DebugLib.h>\r
 #include <Library/UefiDriverEntryPoint.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
-#include <Library/UefiLib.h>
-
-#include "ArpDebug.h"
-
-//
-// Global variables
-//
-extern EFI_DRIVER_BINDING_PROTOCOL   gArpDriverBinding;
-extern EFI_COMPONENT_NAME_PROTOCOL   gArpComponentName;
-
-EFI_STATUS
-EFIAPI
-ArpDriverBindingSupported (
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN EFI_HANDLE                   ControllerHandle,
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath OPTIONAL
-  );
-
-EFI_STATUS
-EFIAPI
-ArpDriverBindingStart (
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN EFI_HANDLE                   ControllerHandle,
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath OPTIONAL
-  );
-
-EFI_STATUS
-EFIAPI
-ArpDriverBindingStop (
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN EFI_HANDLE                   ControllerHandle,
-  IN UINTN                        NumberOfChildren,
-  IN EFI_HANDLE                   *ChildHandleBuffer
-  );
-
-EFI_STATUS
-EFIAPI
-ArpServiceBindingCreateChild (
-  IN EFI_SERVICE_BINDING_PROTOCOL  *This,
-  IN EFI_HANDLE                    *ChildHandle
-  );
-
-EFI_STATUS
-EFIAPI
-ArpServiceBindingDestroyChild (
-  IN EFI_SERVICE_BINDING_PROTOCOL  *This,
-  IN EFI_HANDLE                    ChildHandle
-  );
-
-#endif
-
+#include <Library/UefiLib.h>\r
+\r
+#include "ArpDebug.h"\r
+\r
+//\r
+// Global variables\r
+//\r
+extern EFI_DRIVER_BINDING_PROTOCOL    gArpDriverBinding;\r
+extern EFI_COMPONENT_NAME_PROTOCOL    gArpComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL   gArpComponentName2;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpDriverBindingSupported (\r
+  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN EFI_HANDLE                   ControllerHandle,\r
+  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath OPTIONAL\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpDriverBindingStart (\r
+  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN EFI_HANDLE                   ControllerHandle,\r
+  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath OPTIONAL\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpDriverBindingStop (\r
+  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN EFI_HANDLE                   ControllerHandle,\r
+  IN UINTN                        NumberOfChildren,\r
+  IN EFI_HANDLE                   *ChildHandleBuffer\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpServiceBindingCreateChild (\r
+  IN EFI_SERVICE_BINDING_PROTOCOL  *This,\r
+  IN EFI_HANDLE                    *ChildHandle\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpServiceBindingDestroyChild (\r
+  IN EFI_SERVICE_BINDING_PROTOCOL  *This,\r
+  IN EFI_HANDLE                    ChildHandle\r
+  );\r
+\r
+#endif\r
+\r
index 607443a..729cb5d 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
-#include <Protocol/ManagedNetwork.h>
+#include <Protocol/ManagedNetwork.h>\r
 #include <Protocol/ServiceBinding.h>\r
 \r
 #include <Library/DebugLib.h>\r
 #include <Library/UefiDriverEntryPoint.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
-#include <Library/UefiLib.h>
-#include <Library/NetLib.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/MemoryAllocationLib.h>
-
-#include "ArpDebug.h"
-
-#define ARP_ETHER_PROTO_TYPE         0x0806
-#define IPv4_ETHER_PROTO_TYPE        0x0800
-#define IPv6_ETHER_PROTO_TYPE        0x86DD
-
-#define ARP_OPCODE_REQUEST           0x0001
-#define ARP_OPCODE_REPLY             0x0002
-
-#define ARP_DEFAULT_TIMEOUT_VALUE    (400 * TICKS_PER_SECOND)
-#define ARP_DEFAULT_RETRY_COUNT      2
-#define ARP_DEFAULT_RETRY_INTERVAL   (5   * TICKS_PER_MS)
-#define ARP_PERIODIC_TIMER_INTERVAL  (500 * TICKS_PER_MS)
-
-#pragma pack(1)
-typedef struct _ARP_HEAD {
-  UINT16  HwType;
-  UINT16  ProtoType;
-  UINT8   HwAddrLen;
-  UINT8   ProtoAddrLen;
-  UINT16  OpCode;
-} ARP_HEAD;
-#pragma pack()
-
-typedef struct _ARP_ADDRESS {
-  UINT8  *SenderHwAddr;
-  UINT8  *SenderProtoAddr;
-  UINT8  *TargetHwAddr;
-  UINT8  *TargetProtoAddr;
-} ARP_ADDRESS;
-
-#define MATCH_SW_ADDRESS  0x1
-#define MATCH_HW_ADDRESS  0x2
-
-typedef enum {
-  ByNone         = 0,
-  ByProtoAddress = MATCH_SW_ADDRESS,
-  ByHwAddress    = MATCH_HW_ADDRESS,
-  ByBoth         = MATCH_SW_ADDRESS | MATCH_HW_ADDRESS
-} FIND_OPTYPE;
-
-#define ARP_INSTANCE_DATA_SIGNATURE  EFI_SIGNATURE_32('A', 'R', 'P', 'I')
-
-#define ARP_INSTANCE_DATA_FROM_THIS(a) \
-  CR ( \
-  (a), \
-  ARP_INSTANCE_DATA, \
-  ArpProto, \
-  ARP_INSTANCE_DATA_SIGNATURE \
-  )
-
-typedef struct _ARP_SERVICE_DATA  ARP_SERVICE_DATA;
-
-typedef struct _ARP_INSTANCE_DATA {
-  UINT32               Signature;
-  ARP_SERVICE_DATA     *ArpService;
-  EFI_HANDLE           Handle;
-  EFI_ARP_PROTOCOL     ArpProto;
-  NET_LIST_ENTRY       List;
-  EFI_ARP_CONFIG_DATA  ConfigData;
-  BOOLEAN              Configured;
-  BOOLEAN              Destroyed;
-} ARP_INSTANCE_DATA;
-
-#define ARP_SERVICE_DATA_SIGNATURE  EFI_SIGNATURE_32('A', 'R', 'P', 'S')
-
-#define ARP_SERVICE_DATA_FROM_THIS(a) \
-  CR ( \
-  (a), \
-  ARP_SERVICE_DATA, \
-  ServiceBinding, \
-  ARP_SERVICE_DATA_SIGNATURE \
-  )
-
-struct _ARP_SERVICE_DATA {
-  UINT32                           Signature;
-  EFI_SERVICE_BINDING_PROTOCOL     ServiceBinding;
-
-  EFI_HANDLE                       MnpChildHandle;
-  EFI_HANDLE                       ImageHandle;
-  EFI_HANDLE                       ControllerHandle;
-
-  EFI_MANAGED_NETWORK_PROTOCOL          *Mnp;
-  EFI_MANAGED_NETWORK_CONFIG_DATA       MnpConfigData;
-  EFI_MANAGED_NETWORK_COMPLETION_TOKEN  RxToken;
-
-  EFI_SIMPLE_NETWORK_MODE          SnpMode;
-
-  NET_LOCK                         Lock;
-
-  UINTN                            ChildrenNumber;
-  NET_LIST_ENTRY                   ChildrenList;
-
-  NET_LIST_ENTRY                   PendingRequestTable;
-  NET_LIST_ENTRY                   DeniedCacheTable;
-  NET_LIST_ENTRY                   ResolvedCacheTable;
-
-  EFI_EVENT                        PeriodicTimer;
-};
-
-typedef struct _USER_REQUEST_CONTEXT {
-  NET_LIST_ENTRY     List;
-  ARP_INSTANCE_DATA  *Instance;
-  EFI_EVENT          UserRequestEvent;
-  VOID               *UserHwAddrBuffer;
-} USER_REQUEST_CONTEXT;
-
-#define ARP_MAX_PROTOCOL_ADDRESS_LEN  sizeof(EFI_IP_ADDRESS)
-#define ARP_MAX_HARDWARE_ADDRESS_LEN  sizeof(EFI_MAC_ADDRESS)
-
-typedef struct _NET_ARP_ADDRESS {
-  UINT16  Type;
-  UINT8   Length;
-  UINT8   *AddressPtr;
-  union {
-    UINT8  ProtoAddress[ARP_MAX_PROTOCOL_ADDRESS_LEN];
-    UINT8  HwAddress[ARP_MAX_HARDWARE_ADDRESS_LEN];
-  } Buffer;
-} NET_ARP_ADDRESS;
-
-typedef enum {
-  Hardware,
-  Protocol
-} ARP_ADDRESS_TYPE;
-
-typedef struct _ARP_CACHE_ENTRY {
-  NET_LIST_ENTRY  List;
-
-  UINT32          RetryCount;
-  UINT32          DefaultDecayTime;
-  UINT32          DecayTime;
-  UINT32          NextRetryTime;
-
-  NET_ARP_ADDRESS  Addresses[2];
-
-  NET_LIST_ENTRY  UserRequestList;
-} ARP_CACHE_ENTRY;
-
-EFI_STATUS
-EFIAPI
-ArpConfigure (
-  IN EFI_ARP_PROTOCOL     *This,
-  IN EFI_ARP_CONFIG_DATA  *ConfigData OPTIONAL
-  );
-
-EFI_STATUS
-EFIAPI
-ArpAdd (
-  IN EFI_ARP_PROTOCOL  *This,
-  IN BOOLEAN           DenyFlag,
-  IN VOID              *TargetSwAddress OPTIONAL,
-  IN VOID              *TargetHwAddress OPTIONAL,
-  IN UINT32            TimeoutValue,
-  IN BOOLEAN           Overwrite
-  );
-
-EFI_STATUS
-EFIAPI
-ArpFind (
-  IN EFI_ARP_PROTOCOL    *This,
-  IN BOOLEAN             BySwAddress,
-  IN VOID                *AddressBuffer OPTIONAL,
-  OUT UINT32             *EntryLength   OPTIONAL,
-  OUT UINT32             *EntryCount    OPTIONAL,
-  OUT EFI_ARP_FIND_DATA  **Entries      OPTIONAL,
-  IN BOOLEAN             Refresh
-  );
-
-EFI_STATUS
-EFIAPI
-ArpDelete (
-  IN EFI_ARP_PROTOCOL  *This,
-  IN BOOLEAN           BySwAddress,
-  IN VOID              *AddressBuffer OPTIONAL
-  );
-
-EFI_STATUS
-EFIAPI
-ArpFlush (
-  IN EFI_ARP_PROTOCOL  *This
-  );
-
-EFI_STATUS
-EFIAPI
-ArpRequest (
-  IN EFI_ARP_PROTOCOL  *This,
-  IN VOID              *TargetSwAddress OPTIONAL,
-  IN EFI_EVENT         ResolvedEvent    OPTIONAL,
-  OUT VOID             *TargetHwAddress
-  );
-
-EFI_STATUS
-EFIAPI
-ArpCancel (
-  IN EFI_ARP_PROTOCOL  *This,
-  IN VOID              *TargetSwAddress OPTIONAL,
-  IN EFI_EVENT         ResolvedEvent    OPTIONAL
-  );
-
-EFI_STATUS
-ArpConfigureInstance (
-  IN ARP_INSTANCE_DATA    *Instance,
-  IN EFI_ARP_CONFIG_DATA  *ConfigData OPTIONAL
-  );
-
-ARP_CACHE_ENTRY *
-ArpFindDeniedCacheEntry (
-  IN ARP_SERVICE_DATA  *ArpService,
-  IN NET_ARP_ADDRESS   *ProtocolAddress OPTIONAL,
-  IN NET_ARP_ADDRESS   *HardwareAddress OPTIONAL
-  );
-
-ARP_CACHE_ENTRY *
-ArpFindNextCacheEntryInTable (
-  IN NET_LIST_ENTRY    *CacheTable,
-  IN NET_LIST_ENTRY    *StartEntry,
-  IN FIND_OPTYPE       FindOpType,
-  IN NET_ARP_ADDRESS   *ProtocolAddress OPTIONAL,
-  IN NET_ARP_ADDRESS   *HardwareAddress OPTIONAL
-  );
-
-ARP_CACHE_ENTRY *
-ArpAllocCacheEntry (
-  IN ARP_INSTANCE_DATA  *Instance
-  );
-
-VOID
-ArpFillAddressInCacheEntry (
-  IN ARP_CACHE_ENTRY  *CacheEntry,
-  IN NET_ARP_ADDRESS  *HwAddr OPTIONAL,
-  IN NET_ARP_ADDRESS  *SwAddr OPTIONAL
-  );
-
-UINTN
-ArpAddressResolved (
-  IN ARP_CACHE_ENTRY    *CacheEntry,
-  IN ARP_INSTANCE_DATA  *Instance OPTIONAL,
-  IN EFI_EVENT          UserEvent OPTIONAL
-  );
-
-UINTN
-ArpDeleteCacheEntry (
-  IN ARP_INSTANCE_DATA  *Instance,
-  IN BOOLEAN            BySwAddress,
-  IN UINT8              *AddressBuffer OPTIONAL,
-  IN BOOLEAN            Force
-  );
-
-VOID
-ArpSendFrame (
-  IN ARP_INSTANCE_DATA  *Instance,
-  IN ARP_CACHE_ENTRY    *CacheEntry,
-  IN UINT16             ArpOpCode
-  );
-
-VOID
-ArpInitInstance (
-  IN ARP_SERVICE_DATA   *ArpService,
-  IN ARP_INSTANCE_DATA  *Instance
-  );
-
-VOID
-EFIAPI
-ArpOnFrameRcvd (
-  IN EFI_EVENT  Event,
-  IN VOID       *Context
-  );
-
-VOID
-EFIAPI
-ArpOnFrameSent (
-  IN EFI_EVENT  Event,
-  IN VOID       *Context
-  );
-
-VOID
-EFIAPI
-ArpTimerHandler (
-  IN EFI_EVENT  Event,
-  IN VOID       *Context
-  );
-
-UINTN
-ArpCancelRequest (
-  IN ARP_INSTANCE_DATA  *Instance,
-  IN VOID               *TargetSwAddress OPTIONAL,
-  IN EFI_EVENT          UserEvent        OPTIONAL
-  );
-
-EFI_STATUS
-ArpFindCacheEntry (
-  IN ARP_INSTANCE_DATA   *Instance,
-  IN BOOLEAN             BySwAddress,
-  IN VOID                *AddressBuffer OPTIONAL,
-  OUT UINT32             *EntryLength   OPTIONAL,
-  OUT UINT32             *EntryCount    OPTIONAL,
-  OUT EFI_ARP_FIND_DATA  **Entries      OPTIONAL,
-  IN BOOLEAN             Refresh
-  );
-
-#endif
-
+#include <Library/UefiLib.h>\r
+#include <Library/NetLib.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+#include "ArpDebug.h"\r
+\r
+#define ARP_ETHER_PROTO_TYPE         0x0806\r
+#define IPv4_ETHER_PROTO_TYPE        0x0800\r
+#define IPv6_ETHER_PROTO_TYPE        0x86DD\r
+\r
+#define ARP_OPCODE_REQUEST           0x0001\r
+#define ARP_OPCODE_REPLY             0x0002\r
+\r
+#define ARP_DEFAULT_TIMEOUT_VALUE    (400 * TICKS_PER_SECOND)\r
+#define ARP_DEFAULT_RETRY_COUNT      2\r
+#define ARP_DEFAULT_RETRY_INTERVAL   (5   * TICKS_PER_MS)\r
+#define ARP_PERIODIC_TIMER_INTERVAL  (500 * TICKS_PER_MS)\r
+\r
+#pragma pack(1)\r
+typedef struct _ARP_HEAD {\r
+  UINT16  HwType;\r
+  UINT16  ProtoType;\r
+  UINT8   HwAddrLen;\r
+  UINT8   ProtoAddrLen;\r
+  UINT16  OpCode;\r
+} ARP_HEAD;\r
+#pragma pack()\r
+\r
+typedef struct _ARP_ADDRESS {\r
+  UINT8  *SenderHwAddr;\r
+  UINT8  *SenderProtoAddr;\r
+  UINT8  *TargetHwAddr;\r
+  UINT8  *TargetProtoAddr;\r
+} ARP_ADDRESS;\r
+\r
+#define MATCH_SW_ADDRESS  0x1\r
+#define MATCH_HW_ADDRESS  0x2\r
+\r
+typedef enum {\r
+  ByNone         = 0,\r
+  ByProtoAddress = MATCH_SW_ADDRESS,\r
+  ByHwAddress    = MATCH_HW_ADDRESS,\r
+  ByBoth         = MATCH_SW_ADDRESS | MATCH_HW_ADDRESS\r
+} FIND_OPTYPE;\r
+\r
+#define ARP_INSTANCE_DATA_SIGNATURE  EFI_SIGNATURE_32('A', 'R', 'P', 'I')\r
+\r
+#define ARP_INSTANCE_DATA_FROM_THIS(a) \\r
+  CR ( \\r
+  (a), \\r
+  ARP_INSTANCE_DATA, \\r
+  ArpProto, \\r
+  ARP_INSTANCE_DATA_SIGNATURE \\r
+  )\r
+\r
+typedef struct _ARP_SERVICE_DATA  ARP_SERVICE_DATA;\r
+\r
+typedef struct _ARP_INSTANCE_DATA {\r
+  UINT32               Signature;\r
+  ARP_SERVICE_DATA     *ArpService;\r
+  EFI_HANDLE           Handle;\r
+  EFI_ARP_PROTOCOL     ArpProto;\r
+  NET_LIST_ENTRY       List;\r
+  EFI_ARP_CONFIG_DATA  ConfigData;\r
+  BOOLEAN              Configured;\r
+  BOOLEAN              Destroyed;\r
+} ARP_INSTANCE_DATA;\r
+\r
+#define ARP_SERVICE_DATA_SIGNATURE  EFI_SIGNATURE_32('A', 'R', 'P', 'S')\r
+\r
+#define ARP_SERVICE_DATA_FROM_THIS(a) \\r
+  CR ( \\r
+  (a), \\r
+  ARP_SERVICE_DATA, \\r
+  ServiceBinding, \\r
+  ARP_SERVICE_DATA_SIGNATURE \\r
+  )\r
+\r
+struct _ARP_SERVICE_DATA {\r
+  UINT32                           Signature;\r
+  EFI_SERVICE_BINDING_PROTOCOL     ServiceBinding;\r
+\r
+  EFI_HANDLE                       MnpChildHandle;\r
+  EFI_HANDLE                       ImageHandle;\r
+  EFI_HANDLE                       ControllerHandle;\r
+\r
+  EFI_MANAGED_NETWORK_PROTOCOL          *Mnp;\r
+  EFI_MANAGED_NETWORK_CONFIG_DATA       MnpConfigData;\r
+  EFI_MANAGED_NETWORK_COMPLETION_TOKEN  RxToken;\r
+\r
+  EFI_SIMPLE_NETWORK_MODE          SnpMode;\r
+\r
+  NET_LOCK                         Lock;\r
+\r
+  UINTN                            ChildrenNumber;\r
+  NET_LIST_ENTRY                   ChildrenList;\r
+\r
+  NET_LIST_ENTRY                   PendingRequestTable;\r
+  NET_LIST_ENTRY                   DeniedCacheTable;\r
+  NET_LIST_ENTRY                   ResolvedCacheTable;\r
+\r
+  EFI_EVENT                        PeriodicTimer;\r
+};\r
+\r
+typedef struct _USER_REQUEST_CONTEXT {\r
+  NET_LIST_ENTRY     List;\r
+  ARP_INSTANCE_DATA  *Instance;\r
+  EFI_EVENT          UserRequestEvent;\r
+  VOID               *UserHwAddrBuffer;\r
+} USER_REQUEST_CONTEXT;\r
+\r
+#define ARP_MAX_PROTOCOL_ADDRESS_LEN  sizeof(EFI_IP_ADDRESS)\r
+#define ARP_MAX_HARDWARE_ADDRESS_LEN  sizeof(EFI_MAC_ADDRESS)\r
+\r
+typedef struct _NET_ARP_ADDRESS {\r
+  UINT16  Type;\r
+  UINT8   Length;\r
+  UINT8   *AddressPtr;\r
+  union {\r
+    UINT8  ProtoAddress[ARP_MAX_PROTOCOL_ADDRESS_LEN];\r
+    UINT8  HwAddress[ARP_MAX_HARDWARE_ADDRESS_LEN];\r
+  } Buffer;\r
+} NET_ARP_ADDRESS;\r
+\r
+typedef enum {\r
+  Hardware,\r
+  Protocol\r
+} ARP_ADDRESS_TYPE;\r
+\r
+typedef struct _ARP_CACHE_ENTRY {\r
+  NET_LIST_ENTRY  List;\r
+\r
+  UINT32          RetryCount;\r
+  UINT32          DefaultDecayTime;\r
+  UINT32          DecayTime;\r
+  UINT32          NextRetryTime;\r
+\r
+  NET_ARP_ADDRESS  Addresses[2];\r
+\r
+  NET_LIST_ENTRY  UserRequestList;\r
+} ARP_CACHE_ENTRY;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpConfigure (\r
+  IN EFI_ARP_PROTOCOL     *This,\r
+  IN EFI_ARP_CONFIG_DATA  *ConfigData OPTIONAL\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpAdd (\r
+  IN EFI_ARP_PROTOCOL  *This,\r
+  IN BOOLEAN           DenyFlag,\r
+  IN VOID              *TargetSwAddress OPTIONAL,\r
+  IN VOID              *TargetHwAddress OPTIONAL,\r
+  IN UINT32            TimeoutValue,\r
+  IN BOOLEAN           Overwrite\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpFind (\r
+  IN EFI_ARP_PROTOCOL    *This,\r
+  IN BOOLEAN             BySwAddress,\r
+  IN VOID                *AddressBuffer OPTIONAL,\r
+  OUT UINT32             *EntryLength   OPTIONAL,\r
+  OUT UINT32             *EntryCount    OPTIONAL,\r
+  OUT EFI_ARP_FIND_DATA  **Entries      OPTIONAL,\r
+  IN BOOLEAN             Refresh\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpDelete (\r
+  IN EFI_ARP_PROTOCOL  *This,\r
+  IN BOOLEAN           BySwAddress,\r
+  IN VOID              *AddressBuffer OPTIONAL\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpFlush (\r
+  IN EFI_ARP_PROTOCOL  *This\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpRequest (\r
+  IN EFI_ARP_PROTOCOL  *This,\r
+  IN VOID              *TargetSwAddress OPTIONAL,\r
+  IN EFI_EVENT         ResolvedEvent    OPTIONAL,\r
+  OUT VOID             *TargetHwAddress\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ArpCancel (\r
+  IN EFI_ARP_PROTOCOL  *This,\r
+  IN VOID              *TargetSwAddress OPTIONAL,\r
+  IN EFI_EVENT         ResolvedEvent    OPTIONAL\r
+  );\r
+\r
+EFI_STATUS\r
+ArpConfigureInstance (\r
+  IN ARP_INSTANCE_DATA    *Instance,\r
+  IN EFI_ARP_CONFIG_DATA  *ConfigData OPTIONAL\r
+  );\r
+\r
+ARP_CACHE_ENTRY *\r
+ArpFindDeniedCacheEntry (\r
+  IN ARP_SERVICE_DATA  *ArpService,\r
+  IN NET_ARP_ADDRESS   *ProtocolAddress OPTIONAL,\r
+  IN NET_ARP_ADDRESS   *HardwareAddress OPTIONAL\r
+  );\r
+\r
+ARP_CACHE_ENTRY *\r
+ArpFindNextCacheEntryInTable (\r
+  IN NET_LIST_ENTRY    *CacheTable,\r
+  IN NET_LIST_ENTRY    *StartEntry,\r
+  IN FIND_OPTYPE       FindOpType,\r
+  IN NET_ARP_ADDRESS   *ProtocolAddress OPTIONAL,\r
+  IN NET_ARP_ADDRESS   *HardwareAddress OPTIONAL\r
+  );\r
+\r
+ARP_CACHE_ENTRY *\r
+ArpAllocCacheEntry (\r
+  IN ARP_INSTANCE_DATA  *Instance\r
+  );\r
+\r
+VOID\r
+ArpFillAddressInCacheEntry (\r
+  IN ARP_CACHE_ENTRY  *CacheEntry,\r
+  IN NET_ARP_ADDRESS  *HwAddr OPTIONAL,\r
+  IN NET_ARP_ADDRESS  *SwAddr OPTIONAL\r
+  );\r
+\r
+UINTN\r
+ArpAddressResolved (\r
+  IN ARP_CACHE_ENTRY    *CacheEntry,\r
+  IN ARP_INSTANCE_DATA  *Instance OPTIONAL,\r
+  IN EFI_EVENT          UserEvent OPTIONAL\r
+  );\r
+\r
+UINTN\r
+ArpDeleteCacheEntry (\r
+  IN ARP_INSTANCE_DATA  *Instance,\r
+  IN BOOLEAN            BySwAddress,\r
+  IN UINT8              *AddressBuffer OPTIONAL,\r
+  IN BOOLEAN            Force\r
+  );\r
+\r
+VOID\r
+ArpSendFrame (\r
+  IN ARP_INSTANCE_DATA  *Instance,\r
+  IN ARP_CACHE_ENTRY    *CacheEntry,\r
+  IN UINT16             ArpOpCode\r
+  );\r
+\r
+VOID\r
+ArpInitInstance (\r
+  IN ARP_SERVICE_DATA   *ArpService,\r
+  IN ARP_INSTANCE_DATA  *Instance\r
+  );\r
+\r
+VOID\r
+EFIAPI\r
+ArpOnFrameRcvd (\r
+  IN EFI_EVENT  Event,\r
+  IN VOID       *Context\r
+  );\r
+\r
+VOID\r
+EFIAPI\r
+ArpOnFrameSent (\r
+  IN EFI_EVENT  Event,\r
+  IN VOID       *Context\r
+  );\r
+\r
+VOID\r
+EFIAPI\r
+ArpTimerHandler (\r
+  IN EFI_EVENT  Event,\r
+  IN VOID       *Context\r
+  );\r
+\r
+UINTN\r
+ArpCancelRequest (\r
+  IN ARP_INSTANCE_DATA  *Instance,\r
+  IN VOID               *TargetSwAddress OPTIONAL,\r
+  IN EFI_EVENT          UserEvent        OPTIONAL\r
+  );\r
+\r
+EFI_STATUS\r
+ArpFindCacheEntry (\r
+  IN ARP_INSTANCE_DATA   *Instance,\r
+  IN BOOLEAN             BySwAddress,\r
+  IN VOID                *AddressBuffer OPTIONAL,\r
+  OUT UINT32             *EntryLength   OPTIONAL,\r
+  OUT UINT32             *EntryCount    OPTIONAL,\r
+  OUT EFI_ARP_FIND_DATA  **Entries      OPTIONAL,\r
+  IN BOOLEAN             Refresh\r
+  );\r
+\r
+#endif\r
+\r
index ad92f3c..47d7bd7 100644 (file)
@@ -23,6 +23,45 @@ Abstract:
 //\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
@@ -31,16 +70,86 @@ ArpComponentNameGetDriverName (
   OUT CHAR16                       **DriverName\r
   );\r
 \r
+\r
+/**\r
+  Retrieves a Unicode string that is the user readable name of the controller\r
+  that is being managed by a driver.\r
+\r
+  This function retrieves the user readable name of the controller specified by\r
+  ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+  driver specified by This has a user readable name in the language specified by\r
+  Language, then a pointer to the controller name is returned in ControllerName,\r
+  and EFI_SUCCESS is returned.  If the driver specified by This is not currently\r
+  managing the controller specified by ControllerHandle and ChildHandle,\r
+  then EFI_UNSUPPORTED is returned.  If the driver specified by This does not\r
+  support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+                                EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+  @param  ControllerHandle[in]  The handle of a controller that the driver\r
+                                specified by This is managing.  This handle\r
+                                specifies the controller whose name is to be\r
+                                returned.\r
+\r
+  @param  ChildHandle[in]       The handle of the child controller to retrieve\r
+                                the name of.  This is an optional parameter that\r
+                                may be NULL.  It will be NULL for device\r
+                                drivers.  It will also be NULL for a bus drivers\r
+                                that wish to retrieve the name of the bus\r
+                                controller.  It will not be NULL for a bus\r
+                                driver that wishes to retrieve the name of a\r
+                                child controller.\r
+\r
+  @param  Language[in]          A pointer to a Null-terminated ASCII string\r
+                                array indicating the language.  This is the\r
+                                language of the driver name that the caller is\r
+                                requesting, and it must match one of the\r
+                                languages specified in SupportedLanguages. The\r
+                                number of languages supported by a driver is up\r
+                                to the driver writer. Language is specified in\r
+                                RFC 3066 or ISO 639-2 language code format.\r
+\r
+  @param  ControllerName[out]   A pointer to the Unicode string to return.\r
+                                This Unicode string is the name of the\r
+                                controller specified by ControllerHandle and\r
+                                ChildHandle in the language specified by\r
+                                Language from the point of view of the driver\r
+                                specified by This.\r
+\r
+  @retval EFI_SUCCESS           The Unicode string for the user readable name in\r
+                                the language specified by Language for the\r
+                                driver specified by This was returned in\r
+                                DriverName.\r
+\r
+  @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+                                EFI_HANDLE.\r
+\r
+  @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+  @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+  @retval EFI_UNSUPPORTED       The driver specified by This is not currently\r
+                                managing the controller specified by\r
+                                ControllerHandle and ChildHandle.\r
+\r
+  @retval EFI_UNSUPPORTED       The driver specified by This does not support\r
+                                the language specified by Language.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 ArpComponentNameGetControllerName (\r
-  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,\r
-  IN  EFI_HANDLE                   ControllerHandle,\r
-  IN  EFI_HANDLE                   ChildHandle        OPTIONAL,\r
-  IN  CHAR8                        *Language,\r
-  OUT CHAR16                       **ControllerName\r
+  IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,\r
+  IN  EFI_HANDLE                                      ControllerHandle,\r
+  IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,\r
+  IN  CHAR8                                           *Language,\r
+  OUT CHAR16                                          **ControllerName\r
   );\r
 \r
+\r
 //\r
 // EFI Component Name Protocol\r
 //\r
@@ -48,13 +157,62 @@ EFI_COMPONENT_NAME_PROTOCOL  gArpComponentName = {
   ArpComponentNameGetDriverName,\r
   ArpComponentNameGetControllerName,\r
   "eng"\r
-};\r
+  };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gArpComponentName2 = {\r
+  (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) ArpComponentNameGetDriverName,\r
+  (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) ArpComponentNameGetControllerName,\r
+  "en"\r
+  };\r
+\r
 \r
 STATIC EFI_UNICODE_STRING_TABLE mArpDriverNameTable[] = {\r
-  { "eng", L"ARP Network Service Driver" },\r
+  { "eng;en", L"ARP Network Service Driver" },\r
   { NULL, NULL }\r
 };\r
 \r
+/**\r
+  Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+  This function retrieves the user readable name of a driver in the form of a\r
+  Unicode string. If the driver specified by This has a user readable name in\r
+  the language specified by Language, then a pointer to the driver name is\r
+  returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+  by This does not support the language specified by Language,\r
+  then EFI_UNSUPPORTED is returned.\r
+\r
+  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+                                EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+  @param  Language[in]          A pointer to a Null-terminated ASCII string\r
+                                array indicating the language. This is the\r
+                                language of the driver name that the caller is\r
+                                requesting, and it must match one of the\r
+                                languages specified in SupportedLanguages. The\r
+                                number of languages supported by a driver is up\r
+                                to the driver writer. Language is specified\r
+                                in RFC 3066 or ISO 639-2 language code format.\r
+\r
+  @param  DriverName[out]       A pointer to the Unicode string to return.\r
+                                This Unicode string is the name of the\r
+                                driver specified by This in the language\r
+                                specified by Language.\r
+\r
+  @retval EFI_SUCCESS           The Unicode string for the Driver specified by\r
+                                This and the language specified by Language was\r
+                                returned in DriverName.\r
+\r
+  @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+  @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+  @retval EFI_UNSUPPORTED       The driver specified by This does not support\r
+                                the language specified by Language.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 ArpComponentNameGetDriverName (\r
@@ -62,94 +220,93 @@ ArpComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\r
-/*++\r
-\r
-  Routine Description:\r
-    Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
-\r
-  Arguments:\r
-    This       - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
-    Language   - A pointer to a three character ISO 639-2 language identifier.\r
-                 This is the language of the driver name that that the caller\r
-                 is requesting, and it must match one of the languages specified\r
-                 in SupportedLanguages.  The number of languages supported by a\r
-                 driver is up to the driver writer.\r
-    DriverName - A pointer to the Unicode string to return.  This Unicode string\r
-                 is the name of the driver specified by This in the language\r
-                 specified by Language.\r
-\r
-  Returns:\r
-    EFI_SUCCES            - The Unicode string for the Driver specified by This\r
-                            and the language specified by Language was returned\r
-                            in DriverName.\r
-    EFI_INVALID_PARAMETER - Language is NULL.\r
-    EFI_INVALID_PARAMETER - DriverName is NULL.\r
-    EFI_UNSUPPORTED       - The driver specified by This does not support the\r
-                            language specified by Language.\r
-\r
---*/\r
 {\r
-  return LookupUnicodeString (\r
+  return LookupUnicodeString2 (\r
            Language,\r
-           gArpComponentName.SupportedLanguages,\r
+           This->SupportedLanguages,\r
            mArpDriverNameTable,\r
-           DriverName\r
+           DriverName,\r
+           (BOOLEAN)(This == &gArpComponentName)\r
            );\r
 }\r
 \r
+/**\r
+  Retrieves a Unicode string that is the user readable name of the controller\r
+  that is being managed by a driver.\r
+\r
+  This function retrieves the user readable name of the controller specified by\r
+  ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+  driver specified by This has a user readable name in the language specified by\r
+  Language, then a pointer to the controller name is returned in ControllerName,\r
+  and EFI_SUCCESS is returned.  If the driver specified by This is not currently\r
+  managing the controller specified by ControllerHandle and ChildHandle,\r
+  then EFI_UNSUPPORTED is returned.  If the driver specified by This does not\r
+  support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+                                EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+  @param  ControllerHandle[in]  The handle of a controller that the driver\r
+                                specified by This is managing.  This handle\r
+                                specifies the controller whose name is to be\r
+                                returned.\r
+\r
+  @param  ChildHandle[in]       The handle of the child controller to retrieve\r
+                                the name of.  This is an optional parameter that\r
+                                may be NULL.  It will be NULL for device\r
+                                drivers.  It will also be NULL for a bus drivers\r
+                                that wish to retrieve the name of the bus\r
+                                controller.  It will not be NULL for a bus\r
+                                driver that wishes to retrieve the name of a\r
+                                child controller.\r
+\r
+  @param  Language[in]          A pointer to a Null-terminated ASCII string\r
+                                array indicating the language.  This is the\r
+                                language of the driver name that the caller is\r
+                                requesting, and it must match one of the\r
+                                languages specified in SupportedLanguages. The\r
+                                number of languages supported by a driver is up\r
+                                to the driver writer. Language is specified in\r
+                                RFC 3066 or ISO 639-2 language code format.\r
+\r
+  @param  ControllerName[out]   A pointer to the Unicode string to return.\r
+                                This Unicode string is the name of the\r
+                                controller specified by ControllerHandle and\r
+                                ChildHandle in the language specified by\r
+                                Language from the point of view of the driver\r
+                                specified by This.\r
+\r
+  @retval EFI_SUCCESS           The Unicode string for the user readable name in\r
+                                the language specified by Language for the\r
+                                driver specified by This was returned in\r
+                                DriverName.\r
+\r
+  @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+                                EFI_HANDLE.\r
+\r
+  @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+  @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+  @retval EFI_UNSUPPORTED       The driver specified by This is not currently\r
+                                managing the controller specified by\r
+                                ControllerHandle and ChildHandle.\r
+\r
+  @retval EFI_UNSUPPORTED       The driver specified by This does not support\r
+                                the language specified by Language.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 ArpComponentNameGetControllerName (\r
-  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,\r
-  IN  EFI_HANDLE                   ControllerHandle,\r
-  IN  EFI_HANDLE                   ChildHandle        OPTIONAL,\r
-  IN  CHAR8                        *Language,\r
-  OUT CHAR16                       **ControllerName\r
+  IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,\r
+  IN  EFI_HANDLE                                      ControllerHandle,\r
+  IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,\r
+  IN  CHAR8                                           *Language,\r
+  OUT CHAR16                                          **ControllerName\r
   )\r
-/*++\r
-\r
-  Routine Description:\r
-    Retrieves a Unicode string that is the user readable name of the controller\r
-    that is being managed by an EFI Driver.\r
-\r
-  Arguments:\r
-    This             - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
-    ControllerHandle - The handle of a controller that the driver specified by\r
-                       This is managing.  This handle specifies the controller\r
-                       whose name is to be returned.\r
-    ChildHandle      - The handle of the child controller to retrieve the name\r
-                       of.  This is an optional parameter that may be NULL.  It\r
-                       will be NULL for device drivers.  It will also be NULL\r
-                       for a bus drivers that wish to retrieve the name of the\r
-                       bus controller.  It will not be NULL for a bus driver\r
-                       that wishes to retrieve the name of a child controller.\r
-    Language         - A pointer to a three character ISO 639-2 language\r
-                       identifier.  This is the language of the controller name\r
-                       that that the caller is requesting, and it must match one\r
-                       of the languages specified in SupportedLanguages.  The\r
-                       number of languages supported by a driver is up to the\r
-                       driver writer.\r
-    ControllerName   - A pointer to the Unicode string to return.  This Unicode\r
-                       string is the name of the controller specified by\r
-                       ControllerHandle and ChildHandle in the language specified\r
-                       by Language from the point of view of the driver specified\r
-                       by This.\r
-\r
-  Returns:\r
-    EFI_SUCCESS           - The Unicode string for the user readable name in the\r
-                            language specified by Language for the driver\r
-                            specified by This was returned in DriverName.\r
-    EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.\r
-    EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
-    EFI_INVALID_PARAMETER - Language is NULL.\r
-    EFI_INVALID_PARAMETER - ControllerName is NULL.\r
-    EFI_UNSUPPORTED       - The driver specified by This is not currently managing\r
-                            the controller specified by ControllerHandle and\r
-                            ChildHandle.\r
-    EFI_UNSUPPORTED       - The driver specified by This does not support the\r
-                            language specified by Language.\r
-\r
---*/\r
 {\r
   return EFI_UNSUPPORTED;\r
 }\r
index 6808e77..8402ae5 100644 (file)
@@ -24,6 +24,45 @@ Abstract:
 //\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
@@ -32,6 +71,75 @@ DhcpComponentNameGetDriverName (
   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
@@ -42,18 +150,29 @@ DhcpComponentNameGetControllerName (
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
+\r
 //\r
 // EFI Component Name Protocol\r
 //\r
-EFI_COMPONENT_NAME_PROTOCOL     gDhcp4ComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL  gDhcp4ComponentName = {\r
   DhcpComponentNameGetDriverName,\r
   DhcpComponentNameGetControllerName,\r
   "eng"\r
-};\r
+  };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gDhcp4ComponentName2 = {\r
+  (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) DhcpComponentNameGetDriverName,\r
+  (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) DhcpComponentNameGetControllerName,\r
+  "en"\r
+  };\r
+\r
 \r
 static EFI_UNICODE_STRING_TABLE mDhcpDriverNameTable[] = {\r
   {\r
-    "eng",\r
+    "eng;en",\r
     L"DHCP Protocol Driver"\r
   },\r
   {\r
@@ -62,6 +181,45 @@ static EFI_UNICODE_STRING_TABLE mDhcpDriverNameTable[] = {
   }\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
@@ -69,41 +227,84 @@ DhcpComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\r
-/*++\r
-\r
-  Routine Description:\r
-    Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
-\r
-  Arguments:\r
-    This       - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
-    Language   - A pointer to a three character ISO 639-2 language identifier.\r
-                 This is the language of the driver name that that the caller\r
-                 is requesting, and it must match one of the languages specified\r
-                 in SupportedLanguages.  The number of languages supported by a\r
-                 driver is up to the driver writer.\r
-    DriverName - A pointer to the Unicode string to return.  This Unicode string\r
-                 is the name of the driver specified by This in the language\r
-                 specified by Language.\r
-\r
-  Returns:\r
-    EFI_SUCCES            - The Unicode string for the Driver specified by This\r
-                            and the language specified by Language was returned\r
-                            in DriverName.\r
-    EFI_INVALID_PARAMETER - Language is NULL.\r
-    EFI_INVALID_PARAMETER - DriverName is NULL.\r
-    EFI_UNSUPPORTED       - The driver specified by This does not support the\r
-                            language specified by Language.\r
-\r
---*/\r
 {\r
-  return LookupUnicodeString (\r
-          Language,\r
-          gDhcp4ComponentName.SupportedLanguages,\r
-          mDhcpDriverNameTable,\r
-          DriverName\r
-          );\r
+  return LookupUnicodeString2 (\r
+           Language,\r
+           This->SupportedLanguages,\r
+           mDhcpDriverNameTable,\r
+           DriverName,\r
+           (BOOLEAN)(This == &gDhcp4ComponentName)\r
+           );\r
 }\r
 \r
+/**\r
+  Retrieves a Unicode string that is the user readable name of the controller\r
+  that is being managed by a driver.\r
+\r
+  This function retrieves the user readable name of the controller specified by\r
+  ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+  driver specified by This has a user readable name in the language specified by\r
+  Language, then a pointer to the controller name is returned in ControllerName,\r
+  and EFI_SUCCESS is returned.  If the driver specified by This is not currently\r
+  managing the controller specified by ControllerHandle and ChildHandle,\r
+  then EFI_UNSUPPORTED is returned.  If the driver specified by This does not\r
+  support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+                                EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+  @param  ControllerHandle[in]  The handle of a controller that the driver\r
+                                specified by This is managing.  This handle\r
+                                specifies the controller whose name is to be\r
+                                returned.\r
+\r
+  @param  ChildHandle[in]       The handle of the child controller to retrieve\r
+                                the name of.  This is an optional parameter that\r
+                                may be NULL.  It will be NULL for device\r
+                                drivers.  It will also be NULL for a bus drivers\r
+                                that wish to retrieve the name of the bus\r
+                                controller.  It will not be NULL for a bus\r
+                                driver that wishes to retrieve the name of a\r
+                                child controller.\r
+\r
+  @param  Language[in]          A pointer to a Null-terminated ASCII string\r
+                                array indicating the language.  This is the\r
+                                language of the driver name that the caller is\r
+                                requesting, and it must match one of the\r
+                                languages specified in SupportedLanguages. The\r
+                                number of languages supported by a driver is up\r
+                                to the driver writer. Language is specified in\r
+                                RFC 3066 or ISO 639-2 language code format.\r
+\r
+  @param  ControllerName[out]   A pointer to the Unicode string to return.\r
+                                This Unicode string is the name of the\r
+                                controller specified by ControllerHandle and\r
+                                ChildHandle in the language specified by\r
+                                Language from the point of view of the driver\r
+                                specified by This.\r
+\r
+  @retval EFI_SUCCESS           The Unicode string for the user readable name in\r
+                                the language specified by Language for the\r
+                                driver specified by This was returned in\r
+                                DriverName.\r
+\r
+  @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+                                EFI_HANDLE.\r
+\r
+  @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+  @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+  @retval EFI_UNSUPPORTED       The driver specified by This is not currently\r
+                                managing the controller specified by\r
+                                ControllerHandle and ChildHandle.\r
+\r
+  @retval EFI_UNSUPPORTED       The driver specified by This does not support\r
+                                the language specified by Language.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DhcpComponentNameGetControllerName (\r
@@ -113,50 +314,6 @@ DhcpComponentNameGetControllerName (
   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
index d146972..9549790 100644 (file)
@@ -61,14 +61,13 @@ Returns:
 \r
 --*/\r
 {\r
-  return EfiLibInstallAllDriverProtocols (\r
+  return EfiLibInstallDriverBindingComponentName2 (\r
            ImageHandle,\r
            SystemTable,\r
            &gDhcp4DriverBinding,\r
            ImageHandle,\r
            &gDhcp4ComponentName,\r
-           NULL,\r
-           NULL\r
+           &gDhcp4ComponentName2\r
            );\r
 }\r
 \r
index 100bf56..845a284 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 d81d68f..7a04109 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
@@ -39,121 +39,121 @@ Abstract:
 #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 a05b662..560c791 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 4bc1920..9db2e0a 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 1be21a1..1fbee2a 100644 (file)
@@ -24,6 +24,45 @@ Abstract:
 //\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
@@ -32,6 +71,75 @@ Ip4ConfigComponentNameGetDriverName (
   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
@@ -42,21 +150,71 @@ Ip4ConfigComponentNameGetControllerName (
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
+\r
 //\r
 // EFI Component Name Protocol\r
 //\r
-EFI_COMPONENT_NAME_PROTOCOL     gIp4ConfigComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL  gIp4ConfigComponentName = {\r
   Ip4ConfigComponentNameGetDriverName,\r
   Ip4ConfigComponentNameGetControllerName,\r
   "eng"\r
-};\r
+  };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gIp4ConfigComponentName2 = {\r
+  (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) Ip4ConfigComponentNameGetDriverName,\r
+  (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) Ip4ConfigComponentNameGetControllerName,\r
+  "en"\r
+  };\r
+\r
 \r
 STATIC\r
 EFI_UNICODE_STRING_TABLE mIp4ConfigDriverNameTable[] = {\r
-  {"eng", L"IP4 CONFIG Network Service Driver"},\r
+  {"eng;en", L"IP4 CONFIG Network Service Driver"},\r
   {NULL, NULL}\r
 };\r
 \r
+/**\r
+  Retrieves a Unicode string that is the user readable name of the driver.\r
+\r
+  This function retrieves the user readable name of a driver in the form of a\r
+  Unicode string. If the driver specified by This has a user readable name in\r
+  the language specified by Language, then a pointer to the driver name is\r
+  returned in DriverName, and EFI_SUCCESS is returned. If the driver specified\r
+  by This does not support the language specified by Language,\r
+  then EFI_UNSUPPORTED is returned.\r
+\r
+  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+                                EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+  @param  Language[in]          A pointer to a Null-terminated ASCII string\r
+                                array indicating the language. This is the\r
+                                language of the driver name that the caller is\r
+                                requesting, and it must match one of the\r
+                                languages specified in SupportedLanguages. The\r
+                                number of languages supported by a driver is up\r
+                                to the driver writer. Language is specified\r
+                                in RFC 3066 or ISO 639-2 language code format.\r
+\r
+  @param  DriverName[out]       A pointer to the Unicode string to return.\r
+                                This Unicode string is the name of the\r
+                                driver specified by This in the language\r
+                                specified by Language.\r
+\r
+  @retval EFI_SUCCESS           The Unicode string for the Driver specified by\r
+                                This and the language specified by Language was\r
+                                returned in DriverName.\r
+\r
+  @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+  @retval EFI_INVALID_PARAMETER DriverName is NULL.\r
+\r
+  @retval EFI_UNSUPPORTED       The driver specified by This does not support\r
+                                the language specified by Language.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 Ip4ConfigComponentNameGetDriverName (\r
@@ -64,94 +222,93 @@ Ip4ConfigComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\r
-/*++\r
-\r
-  Routine Description:\r
-    Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
-\r
-  Arguments:\r
-    This       - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
-    Language   - A pointer to a three character ISO 639-2 language identifier.\r
-                 This is the language of the driver name that that the caller\r
-                 is requesting, and it must match one of the languages specified\r
-                 in SupportedLanguages.  The number of languages supported by a\r
-                 driver is up to the driver writer.\r
-    DriverName - A pointer to the Unicode string to return.  This Unicode string\r
-                 is the name of the driver specified by This in the language\r
-                 specified by Language.\r
-\r
-  Returns:\r
-    EFI_SUCCES            - The Unicode string for the Driver specified by This\r
-                            and the language specified by Language was returned\r
-                            in DriverName.\r
-    EFI_INVALID_PARAMETER - Language is NULL.\r
-    EFI_INVALID_PARAMETER - DriverName is NULL.\r
-    EFI_UNSUPPORTED       - The driver specified by This does not support the\r
-                            language specified by Language.\r
-\r
---*/\r
 {\r
-  return LookupUnicodeString (\r
+  return LookupUnicodeString2 (\r
            Language,\r
-           gIp4ConfigComponentName.SupportedLanguages,\r
+           This->SupportedLanguages,\r
            mIp4ConfigDriverNameTable,\r
-           DriverName\r
+           DriverName,\r
+           (BOOLEAN)(This == &gIp4ConfigComponentName)\r
            );\r
 }\r
 \r
+/**\r
+  Retrieves a Unicode string that is the user readable name of the controller\r
+  that is being managed by a driver.\r
+\r
+  This function retrieves the user readable name of the controller specified by\r
+  ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+  driver specified by This has a user readable name in the language specified by\r
+  Language, then a pointer to the controller name is returned in ControllerName,\r
+  and EFI_SUCCESS is returned.  If the driver specified by This is not currently\r
+  managing the controller specified by ControllerHandle and ChildHandle,\r
+  then EFI_UNSUPPORTED is returned.  If the driver specified by This does not\r
+  support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+                                EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+  @param  ControllerHandle[in]  The handle of a controller that the driver\r
+                                specified by This is managing.  This handle\r
+                                specifies the controller whose name is to be\r
+                                returned.\r
+\r
+  @param  ChildHandle[in]       The handle of the child controller to retrieve\r
+                                the name of.  This is an optional parameter that\r
+                                may be NULL.  It will be NULL for device\r
+                                drivers.  It will also be NULL for a bus drivers\r
+                                that wish to retrieve the name of the bus\r
+                                controller.  It will not be NULL for a bus\r
+                                driver that wishes to retrieve the name of a\r
+                                child controller.\r
+\r
+  @param  Language[in]          A pointer to a Null-terminated ASCII string\r
+                                array indicating the language.  This is the\r
+                                language of the driver name that the caller is\r
+                                requesting, and it must match one of the\r
+                                languages specified in SupportedLanguages. The\r
+                                number of languages supported by a driver is up\r
+                                to the driver writer. Language is specified in\r
+                                RFC 3066 or ISO 639-2 language code format.\r
+\r
+  @param  ControllerName[out]   A pointer to the Unicode string to return.\r
+                                This Unicode string is the name of the\r
+                                controller specified by ControllerHandle and\r
+                                ChildHandle in the language specified by\r
+                                Language from the point of view of the driver\r
+                                specified by This.\r
+\r
+  @retval EFI_SUCCESS           The Unicode string for the user readable name in\r
+                                the language specified by Language for the\r
+                                driver specified by This was returned in\r
+                                DriverName.\r
+\r
+  @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+                                EFI_HANDLE.\r
+\r
+  @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+  @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+  @retval EFI_UNSUPPORTED       The driver specified by This is not currently\r
+                                managing the controller specified by\r
+                                ControllerHandle and ChildHandle.\r
+\r
+  @retval EFI_UNSUPPORTED       The driver specified by This does not support\r
+                                the language specified by Language.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 Ip4ConfigComponentNameGetControllerName (\r
-  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,\r
-  IN  EFI_HANDLE                   ControllerHandle,\r
-  IN  EFI_HANDLE                   ChildHandle        OPTIONAL,\r
-  IN  CHAR8                        *Language,\r
-  OUT CHAR16                       **ControllerName\r
+  IN  EFI_COMPONENT_NAME_PROTOCOL                     *This,\r
+  IN  EFI_HANDLE                                      ControllerHandle,\r
+  IN  EFI_HANDLE                                      ChildHandle        OPTIONAL,\r
+  IN  CHAR8                                           *Language,\r
+  OUT CHAR16                                          **ControllerName\r
   )\r
-/*++\r
-\r
-  Routine Description:\r
-    Retrieves a Unicode string that is the user readable name of the controller\r
-    that is being managed by an EFI Driver.\r
-\r
-  Arguments:\r
-    This             - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
-    ControllerHandle - The handle of a controller that the driver specified by\r
-                       This is managing.  This handle specifies the controller\r
-                       whose name is to be returned.\r
-    ChildHandle      - The handle of the child controller to retrieve the name\r
-                       of.  This is an optional parameter that may be NULL.  It\r
-                       will be NULL for device drivers.  It will also be NULL\r
-                       for a bus drivers that wish to retrieve the name of the\r
-                       bus controller.  It will not be NULL for a bus driver\r
-                       that wishes to retrieve the name of a child controller.\r
-    Language         - A pointer to a three character ISO 639-2 language\r
-                       identifier.  This is the language of the controller name\r
-                       that that the caller is requesting, and it must match one\r
-                       of the languages specified in SupportedLanguages.  The\r
-                       number of languages supported by a driver is up to the\r
-                       driver writer.\r
-    ControllerName   - A pointer to the Unicode string to return.  This Unicode\r
-                       string is the name of the controller specified by\r
-                       ControllerHandle and ChildHandle in the language specified\r
-                       by Language from the point of view of the driver specified\r
-                       by This.\r
-\r
-  Returns:\r
-    EFI_SUCCESS           - The Unicode string for the user readable name in the\r
-                            language specified by Language for the driver\r
-                            specified by This was returned in DriverName.\r
-    EFI_INVALID_PARAMETER - ControllerHandle is not a valid EFI_HANDLE.\r
-    EFI_INVALID_PARAMETER - ChildHandle is not NULL and it is not a valid EFI_HANDLE.\r
-    EFI_INVALID_PARAMETER - Language is NULL.\r
-    EFI_INVALID_PARAMETER - ControllerName is NULL.\r
-    EFI_UNSUPPORTED       - The driver specified by This is not currently managing\r
-                            the controller specified by ControllerHandle and\r
-                            ChildHandle.\r
-    EFI_UNSUPPORTED       - The driver specified by This does not support the\r
-                            language specified by Language.\r
-\r
---*/\r
 {\r
   return EFI_UNSUPPORTED;\r
 }\r
index 8c58c80..5562944 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
@@ -36,97 +36,98 @@ Abstract:
 #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 c3845f4..fdd50b3 100644 (file)
@@ -85,14 +85,13 @@ Returns:
 \r
 --*/\r
 {\r
-  return EfiLibInstallAllDriverProtocols (\r
+  return EfiLibInstallDriverBindingComponentName2 (\r
            ImageHandle,\r
            SystemTable,\r
            &gIp4ConfigDriverBinding,\r
            ImageHandle,\r
            &gIp4ConfigComponentName,\r
-           NULL,\r
-           NULL\r
+           &gIp4ConfigComponentName2\r
            );\r
 }\r
 \r
index 74d1660..be8ccd7 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 7288875..01642c2 100644 (file)
@@ -24,6 +24,45 @@ Abstract:
 //\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
@@ -32,6 +71,75 @@ Ip4ComponentNameGetDriverName (
   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
@@ -42,18 +150,29 @@ Ip4ComponentNameGetControllerName (
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
+\r
 //\r
 // EFI Component Name Protocol\r
 //\r
-EFI_COMPONENT_NAME_PROTOCOL     gIp4ComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL  gIp4ComponentName = {\r
   Ip4ComponentNameGetDriverName,\r
   Ip4ComponentNameGetControllerName,\r
   "eng"\r
-};\r
+  };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gIp4ComponentName2 = {\r
+  (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) Ip4ComponentNameGetDriverName,\r
+  (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) Ip4ComponentNameGetControllerName,\r
+  "en"\r
+  };\r
+\r
 \r
 static EFI_UNICODE_STRING_TABLE mIp4DriverNameTable[] = {\r
   {\r
-    "eng",\r
+    "eng;en",\r
     L"IP4 Network Service Driver"\r
   },\r
   {\r
@@ -62,6 +181,45 @@ static EFI_UNICODE_STRING_TABLE mIp4DriverNameTable[] = {
   }\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
@@ -69,44 +227,85 @@ Ip4ComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\r
-/*++\r
-\r
-  Routine Description:\r
-    Retrieves a Unicode string that is the user readable\r
-    name of the EFI Driver.\r
-\r
-  Arguments:\r
-    This       - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
-    Language   - A pointer to a three character ISO 639-2 language\r
-                 identifier. This is the language of the driver name\r
-                 that that the caller is requesting, and it must match\r
-                 one of the languages specified in SupportedLanguages.\r
-                 The number of languages supported by a driver is up to\r
-                 the driver writer.\r
-    DriverName - A pointer to the Unicode string to return.  This Unicode\r
-                 string is the name of the driver specified by This in the\r
-                 language specified by Language.\r
-\r
-  Returns:\r
-    EFI_SUCCES            - The Unicode string for the Driver specified by This\r
-                            and the language specified by Language was returned\r
-                            in DriverName.\r
-    EFI_INVALID_PARAMETER - Language is NULL.\r
-    EFI_INVALID_PARAMETER - DriverName is NULL.\r
-    EFI_UNSUPPORTED       - The driver specified by This does not support the\r
-                            language specified by Language.\r
-\r
---*/\r
 {\r
-  return LookupUnicodeString (\r
-          Language,\r
-          gIp4ComponentName.SupportedLanguages,\r
-          mIp4DriverNameTable,\r
-          DriverName\r
-          );\r
+  return LookupUnicodeString2 (\r
+           Language,\r
+           This->SupportedLanguages,\r
+           mIp4DriverNameTable,\r
+           DriverName,\r
+           (BOOLEAN)(This == &gIp4ComponentName)\r
+           );\r
 \r
 }\r
 \r
+/**\r
+  Retrieves a Unicode string that is the user readable name of the controller\r
+  that is being managed by a driver.\r
+\r
+  This function retrieves the user readable name of the controller specified by\r
+  ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+  driver specified by This has a user readable name in the language specified by\r
+  Language, then a pointer to the controller name is returned in ControllerName,\r
+  and EFI_SUCCESS is returned.  If the driver specified by This is not currently\r
+  managing the controller specified by ControllerHandle and ChildHandle,\r
+  then EFI_UNSUPPORTED is returned.  If the driver specified by This does not\r
+  support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+                                EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+  @param  ControllerHandle[in]  The handle of a controller that the driver\r
+                                specified by This is managing.  This handle\r
+                                specifies the controller whose name is to be\r
+                                returned.\r
+\r
+  @param  ChildHandle[in]       The handle of the child controller to retrieve\r
+                                the name of.  This is an optional parameter that\r
+                                may be NULL.  It will be NULL for device\r
+                                drivers.  It will also be NULL for a bus drivers\r
+                                that wish to retrieve the name of the bus\r
+                                controller.  It will not be NULL for a bus\r
+                                driver that wishes to retrieve the name of a\r
+                                child controller.\r
+\r
+  @param  Language[in]          A pointer to a Null-terminated ASCII string\r
+                                array indicating the language.  This is the\r
+                                language of the driver name that the caller is\r
+                                requesting, and it must match one of the\r
+                                languages specified in SupportedLanguages. The\r
+                                number of languages supported by a driver is up\r
+                                to the driver writer. Language is specified in\r
+                                RFC 3066 or ISO 639-2 language code format.\r
+\r
+  @param  ControllerName[out]   A pointer to the Unicode string to return.\r
+                                This Unicode string is the name of the\r
+                                controller specified by ControllerHandle and\r
+                                ChildHandle in the language specified by\r
+                                Language from the point of view of the driver\r
+                                specified by This.\r
+\r
+  @retval EFI_SUCCESS           The Unicode string for the user readable name in\r
+                                the language specified by Language for the\r
+                                driver specified by This was returned in\r
+                                DriverName.\r
+\r
+  @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+\r
+  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
+                                EFI_HANDLE.\r
+\r
+  @retval EFI_INVALID_PARAMETER Language is NULL.\r
+\r
+  @retval EFI_INVALID_PARAMETER ControllerName is NULL.\r
+\r
+  @retval EFI_UNSUPPORTED       The driver specified by This is not currently\r
+                                managing the controller specified by\r
+                                ControllerHandle and ChildHandle.\r
+\r
+  @retval EFI_UNSUPPORTED       The driver specified by This does not support\r
+                                the language specified by Language.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 Ip4ComponentNameGetControllerName (\r
@@ -116,51 +315,6 @@ Ip4ComponentNameGetControllerName (
   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
index 4c5a7b4..35368b3 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 f8d4b39..0d308c0 100644 (file)
@@ -56,14 +56,13 @@ Returns:
 \r
 --*/\r
 {\r
-  return EfiLibInstallAllDriverProtocols (\r
+  return EfiLibInstallDriverBindingComponentName2 (\r
            ImageHandle,\r
            SystemTable,\r
            &gIp4DriverBinding,\r
            ImageHandle,\r
            &gIp4ComponentName,\r
-           NULL,\r
-           NULL\r
+           &gIp4ComponentName2\r
            );\r
 }\r
 \r
index 5421c90..6ff56f0 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 366b02c..7999b2e 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 9db1d8a..22db034 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 9bda9f9..0b61874 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 58bf045..35ada7f 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
@@ -35,224 +35,224 @@ Abstract:
 #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 2acf769..af8ed1a 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 665b55b..830962e 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 e165e1d..991f10c 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 3dce5d2..fdf40ca 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 209861c..b2af53c 100644 (file)
@@ -24,6 +24,45 @@ Abstract:
 //\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
@@ -32,6 +71,75 @@ MnpComponentNameGetDriverName (
   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
@@ -42,18 +150,29 @@ MnpComponentNameGetControllerName (
   OUT CHAR16                                          **ControllerName\r
   );\r
 \r
+\r
 //\r
 // EFI Component Name Protocol\r
 //\r
-EFI_COMPONENT_NAME_PROTOCOL     gMnpComponentName = {\r
+EFI_COMPONENT_NAME_PROTOCOL  gMnpComponentName = {\r
   MnpComponentNameGetDriverName,\r
   MnpComponentNameGetControllerName,\r
   "eng"\r
-};\r
+  };\r
+\r
+//\r
+// EFI Component Name 2 Protocol\r
+//\r
+EFI_COMPONENT_NAME2_PROTOCOL gMnpComponentName2 = {\r
+  (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) MnpComponentNameGetDriverName,\r
+  (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) MnpComponentNameGetControllerName,\r
+  "en"\r
+  };\r
+\r
 \r
 STATIC EFI_UNICODE_STRING_TABLE mMnpDriverNameTable[] = {\r
   {\r
-    "eng",\r
+    "eng;en",\r
     L"MNP Network Service Driver"\r
   },\r
   {\r
@@ -62,6 +181,45 @@ STATIC EFI_UNICODE_STRING_TABLE mMnpDriverNameTable[] = {
   }\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
@@ -69,41 +227,84 @@ MnpComponentNameGetDriverName (
   IN  CHAR8                        *Language,\r
   OUT CHAR16                       **DriverName\r
   )\r
-/*++\r
-\r
-  Routine Description:\r
-    Retrieves a Unicode string that is the user readable name of the EFI Driver.\r
-\r
-  Arguments:\r
-    This       - A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance.\r
-    Language   - A pointer to a three character ISO 639-2 language identifier.\r
-                 This is the language of the driver name that that the caller\r
-                 is requesting, and it must match one of the languages specified\r
-                 in SupportedLanguages.  The number of languages supported by a\r
-                 driver is up to the driver writer.\r
-    DriverName - A pointer to the Unicode string to return.  This Unicode string\r
-                 is the name of the driver specified by This in the language\r
-                 specified by Language.\r
-\r
-  Returns:\r
-    EFI_SUCCES            - The Unicode string for the Driver specified by This\r
-                            and the language specified by Language was returned\r
-                            in DriverName.\r
-    EFI_INVALID_PARAMETER - Language is NULL.\r
-    EFI_INVALID_PARAMETER - DriverName is NULL.\r
-    EFI_UNSUPPORTED       - The driver specified by This does not support the\r
-                            language specified by Language.\r
-\r
---*/\r
 {\r
-  return LookupUnicodeString (\r
-          Language,\r
-          gMnpComponentName.SupportedLanguages,\r
-          mMnpDriverNameTable,\r
-          DriverName\r
-          );\r
+  return LookupUnicodeString2 (\r
+           Language,\r
+           This->SupportedLanguages,\r
+           mMnpDriverNameTable,\r
+           DriverName,\r
+           (BOOLEAN)(This == &gMnpComponentName)\r
+           );\r
 }\r
 \r
+/**\r
+  Retrieves a Unicode string that is the user readable name of the controller\r
+  that is being managed by a driver.\r
+\r
+  This function retrieves the user readable name of the controller specified by\r
+  ControllerHandle and ChildHandle in the form of a Unicode string. If the\r
+  driver specified by This has a user readable name in the language specified by\r
+  Language, then a pointer to the controller name is returned in ControllerName,\r
+  and EFI_SUCCESS is returned.  If the driver specified by This is not currently\r
+  managing the controller specified by ControllerHandle and ChildHandle,\r
+  then EFI_UNSUPPORTED is returned.  If the driver specified by This does not\r
+  support the language specified by Language, then EFI_UNSUPPORTED is returned.\r
+\r
+  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or\r
+                                EFI_COMPONENT_NAME_PROTOCOL instance.\r
+\r
+  @param  ControllerHandle[in]  The handle of a controller that the driver\r
+                                specified by This is managing.  This handle\r
+                                specifies the controller whose name is to be\r
+                                returned.\r
+\r
+  @param  ChildHandle[in]       The handle of the child controller to retrieve\r
+                                the name of.  This is an optional parameter that\r
+                                may be NULL.  It will be NULL for device\r
+                                drivers.  It will also be NULL for a bus drivers\r
+                                that wish to retrieve the name of the bus\r
+                                controller.  It will not be NULL for a bus\r
+                                driver that wishes to retrieve the name of a\r
+                                child controller.\r
+\r
+  @param  Language[in]          A pointer to a Null-terminated ASCII string\r
+                                array indicating the language.  This is the\r
+                                language of the driver name that the caller is\r
+                                requesting, and it must match one of the\r
+                                languages specified in SupportedLanguages. The\r
+                                number of languages supported by a driver is up\r
+                                to the driver writer. Language is specified in\r
+                                RFC 3066 or ISO 639-2 language code format.\r
+\r
+  @param  ControllerName[out]   A pointer to the Unicode string to return.\r
+                                This Unicode string is the name of the