The current PxeBc Driver in MdeModulePkg and NetworkPkg has no conflict
detection when both installed in platform, this process is for conflict
driver detect.

Also we modified the version of the driver binding protocol of PxeBc Driver
in NetworkPkg for overriding the same driver in MdeModulePkg.

Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1278
Cc: Ye Ting <[email protected]>
Cc: Wu Jiaxin <[email protected]>
Cc: Fu Siyuan <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Songpeng Li <[email protected]>
---
 NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c    | 42 ++++++++++++++++++++++--
 NetworkPkg/UefiPxeBcDxe/PxeBcImpl.h      |  1 +
 NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf |  1 +
 3 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c 
b/NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c
index 0ab640beca..70b0948daa 100644
--- a/NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c
+++ b/NetworkPkg/UefiPxeBcDxe/PxeBcDriver.c
@@ -21,7 +21,7 @@ EFI_DRIVER_BINDING_PROTOCOL gPxeBcIp4DriverBinding = {
   PxeBcIp4DriverBindingSupported,
   PxeBcIp4DriverBindingStart,
   PxeBcIp4DriverBindingStop,
-  0xa,
+  0xb,
   NULL,
   NULL
 };
@@ -30,7 +30,7 @@ EFI_DRIVER_BINDING_PROTOCOL gPxeBcIp6DriverBinding = {
   PxeBcIp6DriverBindingSupported,
   PxeBcIp6DriverBindingStart,
   PxeBcIp6DriverBindingStop,
-  0xa,
+  0xb,
   NULL,
   NULL
 };
@@ -1319,6 +1319,20 @@ PxeBcSupported (
     MtftpServiceBindingGuid = &gEfiMtftp6ServiceBindingProtocolGuid;
   }
 
+  if (IpVersion == IP_VERSION_4) {
+    Status = gBS->OpenProtocol (
+                    ControllerHandle,
+                    &gEdkiiPxeBcTagProtocolGuid,
+                    NULL,
+                    This->DriverBindingHandle,
+                    ControllerHandle,
+                    EFI_OPEN_PROTOCOL_TEST_PROTOCOL
+                    );
+    if (!EFI_ERROR (Status)) {
+      return EFI_ALREADY_STARTED;
+    }
+  }
+
   //
   // Try to open the Mtftp and Dhcp protocol to test whether IP stack is ready.
   //
@@ -1492,6 +1506,23 @@ PxeBcStart (
     goto ON_ERROR;
   }
 
+  if (IpVersion == IP_VERSION_4) {
+    //
+    // Install Tag Guid For Conflict Detect
+    //
+    Status = gBS->InstallMultipleProtocolInterfaces(
+                    &ControllerHandle,
+                    &gEdkiiPxeBcTagProtocolGuid, NULL,
+                    NULL
+                    );
+    if (EFI_ERROR (Status)) {
+      //
+      // Failed to install Tag Guid
+      //
+      goto ON_ERROR;
+    }
+  }
+
   return EFI_SUCCESS;
 
 ON_ERROR:
@@ -1622,6 +1653,13 @@ PxeBcStop (
     return Status;
   }
 
+  if (IpVersion == IP_VERSION_4) {
+    gBS->UninstallMultipleProtocolInterfaces(
+           ControllerHandle,
+           &gEdkiiPxeBcTagProtocolGuid, NULL,
+           NULL
+           );
+  }
 
   if (Private->Ip4Nic != NULL && IpVersion == IP_VERSION_4) {
     PxeBcDestroyIp4Children (This, Private);
diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.h 
b/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.h
index 0bb5d51e93..453a3189db 100644
--- a/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.h
+++ b/NetworkPkg/UefiPxeBcDxe/PxeBcImpl.h
@@ -41,6 +41,7 @@
 #include <Protocol/ServiceBinding.h>
 #include <Protocol/DriverBinding.h>
 #include <Protocol/AdapterInformation.h>
+#include <Protocol/PxeBcTag.h>
 
 #include <Library/DebugLib.h>
 #include <Library/BaseMemoryLib.h>
diff --git a/NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf 
b/NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf
index 130a5456e2..8372cc8982 100644
--- a/NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf
+++ b/NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf
@@ -107,6 +107,7 @@
   gEfiPxeBaseCodeProtocolGuid                          ## BY_START
   gEfiLoadFileProtocolGuid                             ## BY_START
   gEfiAdapterInformationProtocolGuid                   ## SOMETIMES_CONSUMES
+  gEdkiiPxeBcTagProtocolGuid                           ## SOMETIMES_CONSUMES
 
 [Guids]
   gEfiAdapterInfoUndiIpv6SupportGuid                   ## SOMETIMES_CONSUMES 
## GUID
-- 
2.18.0.windows.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to