]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OptionRomPkg/UndiRuntimeDxe/Init.c
ArmPkg/CompilerIntrinsicsLib: Add uread, uwrite GCC assembly sources
[mirror_edk2.git] / OptionRomPkg / UndiRuntimeDxe / Init.c
index 10c26ad438b942d681e2dca4182ab63bdece61f7..2625a6cc5c8cfe01be6e40d354def8c96b7b36ff 100644 (file)
@@ -1,14 +1,8 @@
 /** @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
@@ -64,7 +58,7 @@ UndiNotifyVirtual (
     //\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
@@ -99,7 +93,7 @@ UndiNotifyVirtual (
 **/\r
 VOID\r
 EFIAPI\r
-UndiNotifyExitBs (\r
+UndiNotifyReadyToBoot (\r
   EFI_EVENT Event,\r
   VOID      *Context\r
   )\r
@@ -409,7 +403,7 @@ UndiDriverStart (
   // 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
@@ -435,7 +429,7 @@ UndiDriverStart (
   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
@@ -444,6 +438,10 @@ UndiDriverStart (
 \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
@@ -453,6 +451,8 @@ UndiDriverStart (
                   &UNDI32Device->NIIProtocol_31,\r
                   &gEfiDevicePathProtocolGuid,\r
                   UNDI32Device->Undi32DevPath,\r
+                  &gEfiAdapterInformationProtocolGuid,\r
+                  &UNDI32Device->Aip,\r
                   NULL\r
                   );\r
 \r
@@ -470,7 +470,7 @@ UndiDriverStart (
     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
@@ -497,6 +497,8 @@ UndiErrorAllocDataPointer:
                   &UNDI32Device->NIIProtocol_31,\r
                   &gEfiDevicePathProtocolGuid,\r
                   UNDI32Device->Undi32DevPath,\r
+                  &gEfiAdapterInformationProtocolGuid,\r
+                  &UNDI32Device->Aip,\r
                   NULL\r
                   );\r
 \r
@@ -616,38 +618,38 @@ UndiDriverStop (
 \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
@@ -949,10 +951,10 @@ InstallConfigTable (
 \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
@@ -1015,20 +1017,22 @@ InitializeUndi(
   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