1. Add EFI_COMPONENT_NAME2_PROTOCOL.GetControllerName() support.

2. Fix the driver binding Stop() hang issue in the network stack.
3. Add Ip4 raw data support.
4. Add iSCSI Dhcp option 60 support.

Signed-off-by: Fu Siyuan <siyuan.fu@intel.com>
Reviewed-by: Ye Ting <ting.ye@intel.com>
Reviewed-by: Ouyang Qian <qian.ouyang@intel.com>

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13995 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
sfu5
2012-12-13 06:47:06 +00:00
parent 906e1cb7f7
commit 216f79703b
91 changed files with 3991 additions and 694 deletions

View File

@@ -1,7 +1,7 @@
/** @file
UEFI Component Name(2) protocol implementation for UDP6 driver.
Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@@ -174,6 +174,8 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mUdp6DriverNameTable[] =
}
};
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE *gUdp6ControllerNameTable = NULL;
/**
Retrieves a Unicode string that is the user-readable name of the driver.
@@ -230,6 +232,70 @@ Udp6ComponentNameGetDriverName (
);
}
/**
Update the component name for the Udp6 child handle.
@param Udp6[in] A pointer to the EFI_UDP6_PROTOCOL.
@retval EFI_SUCCESS Update the ControllerNameTable of this instance successfully.
@retval EFI_INVALID_PARAMETER The input parameter is invalid.
**/
EFI_STATUS
UpdateName (
IN EFI_UDP6_PROTOCOL *Udp6
)
{
EFI_STATUS Status;
CHAR16 HandleName[64];
EFI_UDP6_CONFIG_DATA Udp6ConfigData;
if (Udp6 == NULL) {
return EFI_INVALID_PARAMETER;
}
//
// Format the child name into the string buffer.
//
Status = Udp6->GetModeData (Udp6, &Udp6ConfigData, NULL, NULL, NULL);
if (!EFI_ERROR (Status)) {
UnicodeSPrint (HandleName, sizeof (HandleName),
L"UDPv6 (SrcPort=%d, DestPort=%d)",
Udp6ConfigData.StationPort,
Udp6ConfigData.RemotePort
);
} else if (Status == EFI_NOT_STARTED) {
UnicodeSPrint (HandleName, sizeof (HandleName), L"UDPv6 (Not started)");
} else {
UnicodeSPrint (HandleName, sizeof (HandleName), L"UDPv6 (%r)", Status);
}
if (gUdp6ControllerNameTable != NULL) {
FreeUnicodeStringTable (gUdp6ControllerNameTable);
gUdp6ControllerNameTable = NULL;
}
Status = AddUnicodeString2 (
"eng",
gUdp6ComponentName.SupportedLanguages,
&gUdp6ControllerNameTable,
HandleName,
TRUE
);
if (EFI_ERROR (Status)) {
return Status;
}
return AddUnicodeString2 (
"en",
gUdp6ComponentName2.SupportedLanguages,
&gUdp6ControllerNameTable,
HandleName,
FALSE
);
}
/**
Retrieves a Unicode string that is the user-readable name of the controller
that is being managed by a driver.
@@ -308,6 +374,56 @@ Udp6ComponentNameGetControllerName (
OUT CHAR16 **ControllerName
)
{
return EFI_UNSUPPORTED;
}
EFI_STATUS Status;
EFI_UDP6_PROTOCOL *Udp6;
//
// Only provide names for child handles.
//
if (ChildHandle == NULL) {
return EFI_UNSUPPORTED;
}
//
// Make sure this driver produced ChildHandle
//
Status = EfiTestChildHandle (
ControllerHandle,
ChildHandle,
&gEfiIp6ProtocolGuid
);
if (EFI_ERROR (Status)) {
return Status;
}
//
// Retrieve an instance of a produced protocol from ChildHandle
//
Status = gBS->OpenProtocol (
ChildHandle,
&gEfiUdp6ProtocolGuid,
(VOID **)&Udp6,
NULL,
NULL,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
);
if (EFI_ERROR (Status)) {
return Status;
}
//
// Update the component name for this child handle.
//
Status = UpdateName (Udp6);
if (EFI_ERROR (Status)) {
return Status;
}
return LookupUnicodeString2 (
Language,
This->SupportedLanguages,
gUdp6ControllerNameTable,
ControllerName,
(BOOLEAN)(This == &gUdp6ComponentName)
);
}