/** @file\r
Initialization functions for EFI UNDI32 driver.\r
\r
-Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
-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
+Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
//\r
// UNDI32DeviceList is an array of pointers\r
//\r
- for (Index = 0; Index < pxe_31->IFcnt; Index++) {\r
+ for (Index = 0; Index < (pxe_31->IFcnt | pxe_31->IFcntExt << 8); Index++) {\r
UNDI32DeviceList[Index]->NIIProtocol_31.Id = (UINT64) (UINTN) Pxe31Pointer;\r
EfiConvertPointer (\r
EFI_OPTIONAL_PTR,\r
**/\r
VOID\r
EFIAPI\r
-UndiNotifyExitBs (\r
+UndiNotifyReadyToBoot (\r
EFI_EVENT Event,\r
VOID *Context\r
)\r
// the IfNum index for the current interface will be the total number\r
// of interfaces initialized so far\r
//\r
- UNDI32Device->NIIProtocol_31.IfNum = pxe_31->IFcnt;\r
+ UNDI32Device->NIIProtocol_31.IfNum = pxe_31->IFcnt | pxe_31->IFcntExt << 8;\r
\r
PxeUpdate (&UNDI32Device->NicInfo, pxe_31);\r
\r
UNDI32Device->NIIProtocol_31.MinorVer = PXE_ROMID_MINORVER_31;\r
UNDI32Device->NIIProtocol_31.ImageSize = 0;\r
UNDI32Device->NIIProtocol_31.ImageAddr = 0;\r
- UNDI32Device->NIIProtocol_31.Ipv6Supported = FALSE;\r
+ UNDI32Device->NIIProtocol_31.Ipv6Supported = TRUE;\r
\r
UNDI32Device->NIIProtocol_31.StringId[0] = 'U';\r
UNDI32Device->NIIProtocol_31.StringId[1] = 'N';\r
\r
UNDI32Device->DeviceHandle = NULL;\r
\r
+ UNDI32Device->Aip.GetInformation = UndiAipGetInfo;\r
+ UNDI32Device->Aip.SetInformation = UndiAipSetInfo;\r
+ UNDI32Device->Aip.GetSupportedTypes = UndiAipGetSupportedTypes;\r
+\r
//\r
// install both the 3.0 and 3.1 NII protocols.\r
//\r
&UNDI32Device->NIIProtocol_31,\r
&gEfiDevicePathProtocolGuid,\r
UNDI32Device->Undi32DevPath,\r
+ &gEfiAdapterInformationProtocolGuid,\r
+ &UNDI32Device->Aip,\r
NULL\r
);\r
\r
goto UndiErrorDeleteDevicePath;\r
}\r
\r
- Len = (pxe_31->IFcnt * sizeof (UndiDataPointer->NII_entry)) + sizeof (UndiDataPointer);\r
+ Len = ((pxe_31->IFcnt|pxe_31->IFcntExt << 8)* sizeof (UndiDataPointer->NII_entry)) + sizeof (UndiDataPointer);\r
Status = gBS->AllocatePool (EfiRuntimeServicesData, Len, (VOID **) &UndiDataPointer);\r
\r
if (EFI_ERROR (Status)) {\r
&UNDI32Device->NIIProtocol_31,\r
&gEfiDevicePathProtocolGuid,\r
UNDI32Device->Undi32DevPath,\r
+ &gEfiAdapterInformationProtocolGuid,\r
+ &UNDI32Device->Aip,\r
NULL\r
);\r
\r
\r
UNDI32Device = UNDI_DEV_FROM_THIS (NIIProtocol);\r
\r
- Status = gBS->UninstallMultipleProtocolInterfaces (\r
- ChildHandleBuffer[Index],\r
- &gEfiDevicePathProtocolGuid,\r
- UNDI32Device->Undi32DevPath,\r
- &gEfiNetworkInterfaceIdentifierProtocolGuid_31,\r
- &UNDI32Device->NIIProtocol_31,\r
- NULL\r
+ Status = gBS->CloseProtocol (\r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ ChildHandleBuffer[Index]\r
);\r
if (!EFI_ERROR (Status)) {\r
- //\r
- // Restore original PCI attributes\r
- //\r
- Status = UNDI32Device->NicInfo.Io_Function->Attributes (\r
- UNDI32Device->NicInfo.Io_Function,\r
- EfiPciIoAttributeOperationSet,\r
- UNDI32Device->NicInfo.OriginalPciAttributes,\r
- NULL\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- Status = gBS->CloseProtocol (\r
- Controller,\r
- &gEfiPciIoProtocolGuid,\r
- This->DriverBindingHandle,\r
- ChildHandleBuffer[Index]\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ ChildHandleBuffer[Index],\r
+ &gEfiDevicePathProtocolGuid,\r
+ UNDI32Device->Undi32DevPath,\r
+ &gEfiNetworkInterfaceIdentifierProtocolGuid_31,\r
+ &UNDI32Device->NIIProtocol_31,\r
+ NULL\r
);\r
-\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- gBS->FreePool (UNDI32Device->Undi32DevPath);\r
- gBS->FreePool (UNDI32Device);\r
-\r
+ if (!EFI_ERROR (Status)) {\r
+ //\r
+ // Restore original PCI attributes\r
+ //\r
+ Status = UNDI32Device->NicInfo.Io_Function->Attributes (\r
+ UNDI32Device->NicInfo.Io_Function,\r
+ EfiPciIoAttributeOperationSet,\r
+ UNDI32Device->NicInfo.OriginalPciAttributes,\r
+ NULL\r
+ );\r
+\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ gBS->FreePool (UNDI32Device->Undi32DevPath);\r
+ gBS->FreePool (UNDI32Device);\r
+\r
+ }\r
}\r
}\r
\r
\r
UndiData = (UNDI_CONFIG_TABLE *)UndiDataPointer;\r
\r
- UndiData->NumberOfInterfaces = pxe_31->IFcnt;\r
+ UndiData->NumberOfInterfaces = (pxe_31->IFcnt | pxe_31->IFcntExt << 8);\r
UndiData->nextlink = NULL;\r
\r
- for (Index = 0; Index < pxe_31->IFcnt; Index++) {\r
+ for (Index = 0; Index < (pxe_31->IFcnt | pxe_31->IFcntExt << 8); Index++) {\r
UndiData->NII_entry[Index].NII_InterfacePointer = &UNDI32DeviceList[Index]->NIIProtocol_31;\r
UndiData->NII_entry[Index].DevicePathPointer = UNDI32DeviceList[Index]->Undi32DevPath;\r
}\r
EFI_EVENT Event;\r
EFI_STATUS Status;\r
\r
- Status = EfiLibInstallDriverBinding (\r
+ Status = EfiLibInstallDriverBindingComponentName2 (\r
ImageHandle,\r
SystemTable,\r
&gUndiDriverBinding,\r
- ImageHandle\r
+ ImageHandle,\r
+ &gUndiComponentName,\r
+ &gUndiComponentName2\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
Status = gBS->CreateEventEx (\r
EVT_NOTIFY_SIGNAL,\r
TPL_NOTIFY,\r
- UndiNotifyExitBs,\r
+ UndiNotifyReadyToBoot,\r
NULL,\r
- &gEfiEventExitBootServicesGuid,\r
+ &gEfiEventReadyToBootGuid,\r
&Event\r
);\r
ASSERT_EFI_ERROR (Status);\r