summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Universal/Network/PxeBcDxe
diff options
context:
space:
mode:
authorvanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>2008-03-10 06:55:15 +0000
committervanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>2008-03-10 06:55:15 +0000
commit8d285ec0ce8b4c85f8e98b98ed95cbc801817fb9 (patch)
treeef6326434625042eb584f338eaa2947e0e1aea29 /MdeModulePkg/Universal/Network/PxeBcDxe
parent9e77c2c3b7da1927bb58400b054e2b065995c825 (diff)
downloadedk2-8d285ec0ce8b4c85f8e98b98ed95cbc801817fb9.zip
edk2-8d285ec0ce8b4c85f8e98b98ed95cbc801817fb9.tar.gz
edk2-8d285ec0ce8b4c85f8e98b98ed95cbc801817fb9.tar.bz2
1. Enabled SetIpFilter() in UefiPxeBcDxe module.
2. Ported Arp() in UefiPxeBcDxe module. 3. Sync tracker: enabled unload() for PxeBcDxe module. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4813 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Universal/Network/PxeBcDxe')
-rw-r--r--MdeModulePkg/Universal/Network/PxeBcDxe/Bc.c49
-rw-r--r--MdeModulePkg/Universal/Network/PxeBcDxe/Bc.h1
-rw-r--r--MdeModulePkg/Universal/Network/PxeBcDxe/PxeBcDxe.inf1
3 files changed, 50 insertions, 1 deletions
diff --git a/MdeModulePkg/Universal/Network/PxeBcDxe/Bc.c b/MdeModulePkg/Universal/Network/PxeBcDxe/Bc.c
index fbdeba5..cd0ef4a 100644
--- a/MdeModulePkg/Universal/Network/PxeBcDxe/Bc.c
+++ b/MdeModulePkg/Universal/Network/PxeBcDxe/Bc.c
@@ -2344,6 +2344,41 @@ PxeBcDriverStop (
return Status;
}
+EFI_STATUS
+EFIAPI
+PxeBcUnload (
+ IN EFI_HANDLE ImageHandle
+ )
+{
+ EFI_STATUS Status;
+ UINTN DeviceHandleCount;
+ EFI_HANDLE *DeviceHandleBuffer;
+ UINTN Index;
+
+ Status = gBS->LocateHandleBuffer (
+ AllHandles,
+ NULL,
+ NULL,
+ &DeviceHandleCount,
+ &DeviceHandleBuffer
+ );
+ if (!EFI_ERROR (Status)) {
+ for (Index = 0; Index < DeviceHandleCount; Index++) {
+ Status = gBS->DisconnectController (
+ DeviceHandleBuffer[Index],
+ mPxeBcDriverBinding.DriverBindingHandle,
+ NULL
+ );
+ }
+
+ if (DeviceHandleBuffer != NULL) {
+ gBS->FreePool (DeviceHandleBuffer);
+ }
+ }
+
+ return Status;
+}
+
/**
Initialize the base code drivers and install the driver binding
@@ -2360,7 +2395,8 @@ InitializeBCDriver (
IN EFI_SYSTEM_TABLE *SystemTable
)
{
- EFI_STATUS Status;
+ EFI_STATUS Status;
+ EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
//
// Initialize EFI library
@@ -2374,6 +2410,17 @@ InitializeBCDriver (
&gPxeBcComponentName2
);
+ Status = gBS->HandleProtocol (
+ ImageHandle,
+ &gEfiLoadedImageProtocolGuid,
+ (VOID **) &LoadedImage
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ } else {
+ LoadedImage->Unload = PxeBcUnload;
+ }
+
InitArpHeader ();
OptionsStrucInit ();
diff --git a/MdeModulePkg/Universal/Network/PxeBcDxe/Bc.h b/MdeModulePkg/Universal/Network/PxeBcDxe/Bc.h
index 8d09ee6..31162e4 100644
--- a/MdeModulePkg/Universal/Network/PxeBcDxe/Bc.h
+++ b/MdeModulePkg/Universal/Network/PxeBcDxe/Bc.h
@@ -32,6 +32,7 @@ Abstract:
#include <Protocol/LoadFile.h>
#include <Protocol/DevicePath.h>
#include <Protocol/Tcp.h>
+#include <Protocol/LoadedImage.h>
#include <Library/DebugLib.h>
#include <Library/BaseMemoryLib.h>
diff --git a/MdeModulePkg/Universal/Network/PxeBcDxe/PxeBcDxe.inf b/MdeModulePkg/Universal/Network/PxeBcDxe/PxeBcDxe.inf
index 1971731..9fac528 100644
--- a/MdeModulePkg/Universal/Network/PxeBcDxe/PxeBcDxe.inf
+++ b/MdeModulePkg/Universal/Network/PxeBcDxe/PxeBcDxe.inf
@@ -88,4 +88,5 @@
gEfiDevicePathProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiTcpProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiNetworkInterfaceIdentifierProtocolGuid_31 # PROTOCOL ALWAYS_CONSUMED
+ gEfiLoadedImageProtocolGuid # PROTOCOL ALWAYS_CONSUMED