]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDriver.c
[Description]:
[mirror_edk2.git] / MdeModulePkg / Universal / Network / UefiPxeBcDxe / PxeBcDriver.c
index 9d26b135f5140baae1abe1fc522d0d2c1d0cc660..845b7c0fd67dfb652853967d699de10adbb9371b 100644 (file)
@@ -270,17 +270,20 @@ PxeBcDriverBindingStart (
              ControllerHandle,\r
              This->DriverBindingHandle,\r
              &gEfiUdp4ServiceBindingProtocolGuid,\r
-             &Private->Udp4Child\r
+             &Private->Udp4ReadChild\r
              );\r
 \r
   if (EFI_ERROR (Status)) {\r
     goto ON_ERROR;\r
   }\r
 \r
+  //\r
+  // The UDP instance for EfiPxeBcUdpRead\r
+  //\r
   Status = gBS->OpenProtocol (\r
-                  Private->Udp4Child,\r
+                  Private->Udp4ReadChild,\r
                   &gEfiUdp4ProtocolGuid,\r
-                  (VOID **) &Private->Udp4,\r
+                  (VOID **) &Private->Udp4Read,\r
                   This->DriverBindingHandle,\r
                   ControllerHandle,\r
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
@@ -290,18 +293,42 @@ PxeBcDriverBindingStart (
     goto ON_ERROR;\r
   }\r
 \r
+  //\r
+  // The UDP instance for EfiPxeBcUdpWrite\r
+  //\r
+  Status = NetLibCreateServiceChild (\r
+             ControllerHandle, \r
+             This->DriverBindingHandle,\r
+             &gEfiUdp4ServiceBindingProtocolGuid,\r
+             &Private->Udp4WriteChild\r
+             );\r
+  if (EFI_ERROR (Status)) {\r
+    goto ON_ERROR;\r
+  }\r
+\r
+  Status = gBS->OpenProtocol (\r
+                  Private->Udp4WriteChild,\r
+                  &gEfiUdp4ProtocolGuid,\r
+                  (VOID **) &Private->Udp4Write,\r
+                  This->DriverBindingHandle,\r
+                  ControllerHandle,\r
+                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
+                  );\r
+  if (EFI_ERROR (Status)) {\r
+    goto ON_ERROR;\r
+  }\r
   ZeroMem (&Private->Udp4CfgData, sizeof (EFI_UDP4_CONFIG_DATA));\r
   Private->Udp4CfgData.AcceptBroadcast    = FALSE;\r
   Private->Udp4CfgData.AcceptPromiscuous  = FALSE;\r
-  Private->Udp4CfgData.AcceptAnyPort      = FALSE;\r
+  Private->Udp4CfgData.AcceptAnyPort      = TRUE;\r
   Private->Udp4CfgData.AllowDuplicatePort = TRUE;\r
   Private->Udp4CfgData.TypeOfService      = DEFAULT_ToS;\r
   Private->Udp4CfgData.TimeToLive         = DEFAULT_TTL;\r
   Private->Udp4CfgData.DoNotFragment      = FALSE;\r
-  Private->Udp4CfgData.ReceiveTimeout     = 10000;  // 10 milliseconds\r
+  Private->Udp4CfgData.ReceiveTimeout     = 50000;  // 50 milliseconds\r
   Private->Udp4CfgData.UseDefaultAddress  = FALSE;\r
 \r
-  PxeBcInitSeedPacket (&Private->SeedPacket, Private->Udp4);\r
+  PxeBcInitSeedPacket (&Private->SeedPacket, Private->Udp4Read);\r
   Private->MacLen = Private->SeedPacket.Dhcp4.Header.HwAddrLen;\r
   CopyMem (&Private->Mac, &Private->SeedPacket.Dhcp4.Header.ClientHwAddr[0], Private->MacLen);\r
 \r
@@ -330,9 +357,24 @@ PxeBcDriverBindingStart (
 \r
 ON_ERROR:\r
 \r
-  if (Private->Udp4Child != NULL) {\r
+  if (Private->Udp4WriteChild != NULL) {\r
+    gBS->CloseProtocol (\r
+           Private->Udp4WriteChild,\r
+           &gEfiUdp4ProtocolGuid,\r
+           This->DriverBindingHandle,\r
+           ControllerHandle\r
+           );\r
+    NetLibDestroyServiceChild (\r
+      ControllerHandle,\r
+      This->DriverBindingHandle,\r
+      &gEfiUdp4ServiceBindingProtocolGuid,\r
+      Private->Udp4WriteChild\r
+      );\r
+  }\r
+\r
+  if (Private->Udp4ReadChild != NULL) {\r
     gBS->CloseProtocol (\r
-          Private->Udp4Child,\r
+          Private->Udp4ReadChild,\r
           &gEfiUdp4ProtocolGuid,\r
           This->DriverBindingHandle,\r
           ControllerHandle\r
@@ -341,7 +383,7 @@ ON_ERROR:
       ControllerHandle,\r
       This->DriverBindingHandle,\r
       &gEfiUdp4ServiceBindingProtocolGuid,\r
-      Private->Udp4Child\r
+      Private->Udp4ReadChild\r
       );\r
   }\r
 \r
@@ -491,7 +533,20 @@ PxeBcDriverBindingStop (
   if (!EFI_ERROR (Status)) {\r
 \r
     gBS->CloseProtocol (\r
-          Private->Udp4Child,\r
+           Private->Udp4WriteChild,\r
+           &gEfiUdp4ProtocolGuid,\r
+           This->DriverBindingHandle,\r
+           NicHandle\r
+           );\r
+    NetLibDestroyServiceChild (\r
+      ControllerHandle,\r
+      This->DriverBindingHandle,\r
+      &gEfiUdp4ServiceBindingProtocolGuid,\r
+      Private->Udp4WriteChild\r
+      );\r
+\r
+    gBS->CloseProtocol (\r
+          Private->Udp4ReadChild,\r
           &gEfiUdp4ProtocolGuid,\r
           This->DriverBindingHandle,\r
           NicHandle\r
@@ -500,7 +555,7 @@ PxeBcDriverBindingStop (
       NicHandle,\r
       This->DriverBindingHandle,\r
       &gEfiUdp4ServiceBindingProtocolGuid,\r
-      Private->Udp4Child\r
+      Private->Udp4ReadChild\r
       );\r
 \r
     gBS->CloseProtocol (\r