installing HII config access protocol on child handle instead of installing on NIC physical handle, to avoid conflict with the HII config access protocol installed on NIC physical handle.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9665 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
vanjeff 2010-01-04 05:55:47 +00:00
parent 8fdcc4123b
commit d80ea7394c
9 changed files with 390 additions and 860 deletions

View File

@ -147,16 +147,16 @@ EfiNicIp4ConfigGetInfo (
NIC's configure parameter is removed from the variable.
@param Instance The IP4 CONFIG instance.
@param NicConfig The new NIC IP4 configure parameter
@param NicConfig The new NIC IP4 configure parameter.
@param Reconfig Inform the IP4 driver to restart the auto
configuration
configuration.
@retval EFI_SUCCESS The configure parameter for this NIC was
set successfully.
@retval EFI_INVALID_PARAMETER This is NULL or the configure parameter is
invalid.
@retval EFI_ALREADY_STARTED There is a pending auto configuration.
@retval EFI_NOT_FOUND No auto configure parameter is found
@retval EFI_NOT_FOUND No auto configure parameter is found.
**/
EFI_STATUS

View File

@ -23,6 +23,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include <Protocol/HiiConfigAccess.h>
#include <Protocol/HiiDatabase.h>
#include <Protocol/HiiConfigRouting.h>
#include <Protocol/ServiceBinding.h>
#include <Guid/MdeModuleHii.h>
@ -38,6 +39,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include <Library/HiiLib.h>
#include <Library/PrintLib.h>
#include <Library/DpcLib.h>
#include <Library/UefiHiiServicesLib.h>
#include "NicIp4Variable.h"
@ -76,53 +78,26 @@ typedef struct {
} IP4_CONFIG_DHCP4_OPTION;
#pragma pack()
typedef struct {
UINTN DeviceNum;
typedef struct _IP4CONFIG_CALLBACK_INFO {
BOOLEAN Enabled;
EFI_IPv4_ADDRESS LocalIp;
EFI_IPv4_ADDRESS SubnetMask;
EFI_IPv4_ADDRESS Gateway;
} IP4_CONFIG_SESSION_DATA;
typedef struct _IP4_CONFIG_FORM_ENTRY {
LIST_ENTRY Link;
IP4_CONFIG_INSTANCE *Ip4ConfigInstance;
EFI_HANDLE Controller;
CHAR16 *MacString;
EFI_STRING_ID PortTitleToken;
EFI_STRING_ID PortTitleHelpToken;
IP4_CONFIG_SESSION_DATA SessionConfigData;
} IP4CONFIG_FORM_ENTRY;
#define IP4CONFIG_FORM_CALLBACK_INFO_SIGNATURE SIGNATURE_32 ('I', 'P', '4', 'C')
typedef struct _IP4_FORM_CALLBACK_INFO_INSTANCE {
UINTN Signature;
EFI_HANDLE DriverHandle;
EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;
EFI_HII_DATABASE_PROTOCOL *HiiDatabase;
EFI_HII_CONFIG_ROUTING_PROTOCOL *ConfigRouting;
EFI_HII_HANDLE RegisteredHandle;
IP4CONFIG_FORM_ENTRY *Current;
} IP4_FORM_CALLBACK_INFO;
#define IP4CONFIG_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK(Callback) \
CR ( \
Callback, \
IP4_FORM_CALLBACK_INFO, \
ConfigAccess, \
IP4CONFIG_FORM_CALLBACK_INFO_SIGNATURE \
)
} IP4_SETTING_INFO;
struct _IP4_CONFIG_INSTANCE {
UINT32 Signature;
EFI_HANDLE Controller;
EFI_HANDLE Image;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
EFI_IP4_CONFIG_PROTOCOL Ip4ConfigProtocol;
IP4_FORM_CALLBACK_INFO Ip4FormCallbackInfo;
EFI_HII_CONFIG_ACCESS_PROTOCOL HiiConfigAccessProtocol;
EFI_HANDLE ChildHandle;
EFI_DEVICE_PATH_PROTOCOL *HiiVendorDevicePath;
EFI_HII_HANDLE RegisteredHandle;
IP4_SETTING_INFO Ip4ConfigCallbackInfo;
//
// NicConfig's state, such as IP4_CONFIG_STATE_IDLE
@ -161,8 +136,8 @@ struct _IP4_CONFIG_INSTANCE {
#define IP4_CONFIG_INSTANCE_FROM_IP4CONFIG(this) \
CR (this, IP4_CONFIG_INSTANCE, Ip4ConfigProtocol, IP4_CONFIG_INSTANCE_SIGNATURE)
#define IP4_CONFIG_INSTANCE_FROM_IP4FORM_CALLBACK_INFO(this) \
CR (this, IP4_CONFIG_INSTANCE, Ip4FormCallbackInfo, IP4_CONFIG_INSTANCE_SIGNATURE)
#define IP4_CONFIG_INSTANCE_FROM_CONFIG_ACCESS(this) \
CR (this, IP4_CONFIG_INSTANCE, HiiConfigAccessProtocol, IP4_CONFIG_INSTANCE_SIGNATURE)
/**
@ -176,16 +151,16 @@ struct _IP4_CONFIG_INSTANCE {
NIC's configure parameter is removed from the variable.
@param Instance The IP4 CONFIG instance.
@param NicConfig The new NIC IP4 configure parameter
@param NicConfig The new NIC IP4 configure parameter.
@param Reconfig Inform the IP4 driver to restart the auto
configuration
configuration.
@retval EFI_SUCCESS The configure parameter for this NIC was
set successfully.
@retval EFI_INVALID_PARAMETER This is NULL or the configure parameter is
invalid.
@retval EFI_ALREADY_STARTED There is a pending auto configuration.
@retval EFI_NOT_FOUND No auto configure parameter is found
@retval EFI_NOT_FOUND No auto configure parameter is found.
**/
EFI_STATUS

View File

@ -42,8 +42,6 @@ EfiIp4ConfigUnload (
{
UINT32 Index;
Ip4ConfigFormUnload ();
//
// Stop all the IP4_CONFIG instances
//
@ -81,8 +79,6 @@ Ip4ConfigDriverEntryPoint (
IN EFI_SYSTEM_TABLE *SystemTable
)
{
Ip4ConfigFormInit ();
return EfiLibInstallDriverBindingComponentName2 (
ImageHandle,
SystemTable,
@ -161,6 +157,16 @@ Ip4ConfigDriverBindingStart (
IP4_CONFIG_VARIABLE *NewVariable;
EFI_STATUS Status;
UINT32 Index;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
Status = gBS->HandleProtocol (
ControllerHandle,
&gEfiDevicePathProtocolGuid,
(VOID **) &ParentDevicePath
);
if (EFI_ERROR (Status)) {
return Status;
}
//
// Check for multiple start.
@ -222,6 +228,7 @@ Ip4ConfigDriverBindingStart (
Instance->Signature = IP4_CONFIG_INSTANCE_SIGNATURE;
Instance->Controller = ControllerHandle;
Instance->Image = This->DriverBindingHandle;
Instance->ParentDevicePath = ParentDevicePath;
CopyMem (&Instance->Ip4ConfigProtocol, &mIp4ConfigProtocolTemplate, sizeof (mIp4ConfigProtocolTemplate));
@ -272,12 +279,6 @@ Ip4ConfigDriverBindingStart (
}
Status = Ip4ConfigDeviceInit (Instance);
if (!EFI_ERROR (Status)) {
//
// Try to add a port configuration page for this controller.
//
Ip4ConfigUpdateForm (Instance, TRUE);
}
//
// Install the IP4_CONFIG and NIC_IP4CONFIG protocols

View File

@ -1,7 +1,6 @@
#/** @file
# Component name for module Ip4Config
#
# FIX ME!
# Copyright (c) 2006 - 2009, Intel Corporation
#
# All rights reserved. This program and the accompanying materials
@ -28,10 +27,6 @@
#
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
#
# DRIVER_BINDING = gIp4ConfigDriverBinding
# COMPONENT_NAME = gIp4ConfigComponentName
# COMPONENT_NAME2 = gIp4ConfigComponentName2
#
[Sources.common]
ComponentName.c
@ -68,9 +63,8 @@
gEfiIp4ConfigProtocolGuid # PROTOCOL ALWAYS_PRODUCED
gEfiManagedNetworkProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiDhcp4ProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiHiiDatabaseProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiHiiConfigAccessProtocolGuid # PROTOCOL ALWAYS_CONSUMED
[Guids]
gEfiIfrTianoGuid ## CONSUMES ## Guid
gEfiNicIp4ConfigVariableGuid ## CONSUMES ## Guid

View File

@ -16,7 +16,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#define EFI_NETWORK_DEVICE_CLASS 0x04
formset
guid = EFI_NIC_IP4_CONFIG_VARIABLE_GUID,
guid = EFI_NIC_IP4_CONFIG_NVDATA_GUID,
title = STRING_TOKEN(STR_IP4_CONFIG_FORM_TITLE),
help = STRING_TOKEN(STR_IP4_CONFIG_FORM_HELP),
class = EFI_NETWORK_DEVICE_CLASS,
@ -24,17 +24,9 @@ formset
varstore IP4_CONFIG_IFR_NVDATA,
name = EfiNicIp4ConfigVariable,
guid = EFI_NIC_IP4_CONFIG_VARIABLE_GUID;
guid = EFI_NIC_IP4_CONFIG_NVDATA_GUID;
form formid = FORMID_MAIN_FORM,
title = STRING_TOKEN(STR_IP4_MAIN_FORM_TITLE);
label DEVICE_ENTRY_LABEL;
label LABEL_END;
endform;
form formid = FORMID_DEVICE_FORM,
title = STRING_TOKEN(STR_IP4_DEVICE_FORM_TITLE);
checkbox varid = EfiNicIp4ConfigVariable.DhcpEnable,

File diff suppressed because it is too large Load Diff

View File

@ -24,31 +24,6 @@ extern UINT8 Ip4ConfigDxeStrings[];
#define NIC_ITEM_CONFIG_SIZE sizeof (NIC_IP4_CONFIG_INFO) + sizeof (EFI_IP4_ROUTE_TABLE) * MAX_IP4_CONFIG_IN_VARIABLE
///
/// HII specific Vendor Device Path definition.
///
typedef struct {
VENDOR_DEVICE_PATH VendorDevicePath;
EFI_DEVICE_PATH_PROTOCOL End;
} HII_VENDOR_DEVICE_PATH;
/**
Updates the network configuration form to add/delete an entry for the network
device specified by the Instance.
@param[in] Instance The IP4 Config instance.
@param[in] AddForm Whether to add or delete a form entry.
@retval EFI_SUCCESS The network configuration form is updated.
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
@retval Others Other errors as indicated.
**/
EFI_STATUS
Ip4ConfigUpdateForm (
IN IP4_CONFIG_INSTANCE *Instance,
IN BOOLEAN AddForm
);
/**
Install HII Config Access protocol for network device and allocate resource.
@ -76,29 +51,4 @@ Ip4ConfigDeviceUnload (
IN IP4_CONFIG_INSTANCE *Instance
);
/**
Initialize the network configuration form, this includes: delete all the network
device configuration entries, install the form callback protocol and
allocate the resources used.
@retval EFI_SUCCESS The network configuration form is unloaded.
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
**/
EFI_STATUS
Ip4ConfigFormInit (
VOID
);
/**
Unload the network configuration form, this includes: delete all the network
device configuration entries, uninstall the form callback protocol and
free the resources used.
@retval EFI_SUCCESS The network configuration form is unloaded.
**/
EFI_STATUS
Ip4ConfigFormUnload (
VOID
);
#endif

View File

@ -15,13 +15,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#ifndef _NIC_IP4_NV_DATA_H_
#define _NIC_IP4_NV_DATA_H_
//
// one copy from NicIp4ConfigNvData.h
//
#define EFI_NIC_IP4_CONFIG_VARIABLE_GUID \
#define EFI_NIC_IP4_CONFIG_NVDATA_GUID \
{ \
0xd8944553, 0xc4dd, 0x41f4, { 0x9b, 0x30, 0xe1, 0x39, 0x7c, 0xfb, 0x26, 0x7b } \
0x9d5b53f, 0xf4b0, 0x4f59, { 0xa0, 0xb1, 0x7b, 0x57, 0xd3, 0x5c, 0xe, 0x5 } \
}
#define FORMID_MAIN_FORM 1
@ -33,11 +29,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#define KEY_GATE_WAY 0x104
#define KEY_SAVE_CHANGES 0x105
#define DEVICE_ENTRY_LABEL 0x1234
#define LABEL_END 0xffff
#define KEY_DEVICE_ENTRY_BASE 0x1000
#define IP_MIN_SIZE 7
#define IP_MAX_SIZE 15
#define IP4_STR_MAX_SIZE 16
@ -57,3 +48,4 @@ typedef struct {
} IP4_CONFIG_IFR_NVDATA;
#endif