diff options
-rw-r--r-- | MdeModulePkg/Core/Dxe/DxeMain.inf | 1 | ||||
-rw-r--r-- | MdeModulePkg/Core/Dxe/Image.h | 2 | ||||
-rw-r--r-- | MdeModulePkg/Core/Dxe/Image/Image.c | 34 | ||||
-rw-r--r-- | MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Impl.c | 19 | ||||
-rw-r--r-- | MdeModulePkg/Universal/Network/PxeBcDxe/PxeBcDxe.inf | 4 | ||||
-rw-r--r-- | MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf | 6 |
6 files changed, 49 insertions, 17 deletions
diff --git a/MdeModulePkg/Core/Dxe/DxeMain.inf b/MdeModulePkg/Core/Dxe/DxeMain.inf index 8f8a22f92c..595c3d2554 100644 --- a/MdeModulePkg/Core/Dxe/DxeMain.inf +++ b/MdeModulePkg/Core/Dxe/DxeMain.inf @@ -134,6 +134,7 @@ gEfiLoadedImageProtocolGuid # PROTOCOL ALWAYS_PRODUCED
gEfiEbcProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
gEfiTcgPlatformProtocolGuid
+ gEfiLoadedImageDevicePathProtocolGuid # PROTOCOL ALWAYS_PRODUCED
[FixedPcd.common]
gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValueDxeCoreEntry | 0x3041000 # EFI_SOFTWARE_DXE_CORE | EFI_SW_DXE_CORE_PC_ENTRY_POINT
diff --git a/MdeModulePkg/Core/Dxe/Image.h b/MdeModulePkg/Core/Dxe/Image.h index 8ad1f9b72e..eeeb3ab717 100644 --- a/MdeModulePkg/Core/Dxe/Image.h +++ b/MdeModulePkg/Core/Dxe/Image.h @@ -55,7 +55,7 @@ typedef struct { EFI_RUNTIME_IMAGE_ENTRY *RuntimeData; // Runtime image list
- EFI_DEVICE_PATH_PROTOCOL *DeviceHandleDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath; // Pointer to Loaded Image Device Path Protocl
PE_COFF_LOADER_IMAGE_CONTEXT ImageContext; // PeCoffLoader ImageContext
diff --git a/MdeModulePkg/Core/Dxe/Image/Image.c b/MdeModulePkg/Core/Dxe/Image/Image.c index 56c5fe5ea2..125134dea7 100644 --- a/MdeModulePkg/Core/Dxe/Image/Image.c +++ b/MdeModulePkg/Core/Dxe/Image/Image.c @@ -74,7 +74,7 @@ LOADED_IMAGE_PRIVATE_DATA mCorePrivateImage = { 0, // Machine
NULL, // Ebc
NULL, // RuntimeData
- NULL, // DeviceHandleDevicePath
+ NULL // LoadedImageDevicePath
};
@@ -714,7 +714,6 @@ Returns: if (!EFI_ERROR (Status)) {
FilePathSize = CoreDevicePathSize (HandleFilePath) - sizeof(EFI_DEVICE_PATH_PROTOCOL);
FilePath = (EFI_DEVICE_PATH_PROTOCOL *) ( ((UINT8 *)FilePath) + FilePathSize );
- Image->DeviceHandleDevicePath = CoreDuplicateDevicePath (HandleFilePath);
}
//
@@ -782,6 +781,26 @@ Returns: goto Done;
}
+ //
+ // If DevicePath parameter to the LoadImage() is not NULL, then make a copy of DevicePath,
+ // otherwise Loaded Image Device Path Protocol is installed with a NULL interface pointer.
+ //
+ if (OriginalFilePath != NULL) {
+ Image->LoadedImageDevicePath = CoreDuplicateDevicePath (OriginalFilePath);
+ }
+
+ //
+ // Install Loaded Image Device Path Protocol onto the image handle of a PE/COFE image
+ //
+ Status = CoreInstallProtocolInterface (
+ &Image->Handle,
+ &gEfiLoadedImageDevicePathProtocolGuid,
+ EFI_NATIVE_INTERFACE,
+ Image->LoadedImageDevicePath
+ );
+ if (EFI_ERROR (Status)) {
+ goto Done;
+ }
//
// Success. Return the image handle
@@ -1210,9 +1229,16 @@ Returns: Status = CoreUninstallProtocolInterface (
Image->Handle,
+ &gEfiLoadedImageDevicePathProtocolGuid,
+ Image->LoadedImageDevicePath
+ );
+
+ Status = CoreUninstallProtocolInterface (
+ Image->Handle,
&gEfiLoadedImageProtocolGuid,
&Image->Info
);
+
}
if (Image->RuntimeData != NULL) {
@@ -1239,8 +1265,8 @@ Returns: CoreFreePool (Image->Info.FilePath);
}
- if (Image->DeviceHandleDevicePath != NULL) {
- CoreFreePool (Image->DeviceHandleDevicePath);
+ if (Image->LoadedImageDevicePath != NULL) {
+ CoreFreePool (Image->LoadedImageDevicePath);
}
if (Image->FixupData != NULL) {
diff --git a/MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Impl.c b/MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Impl.c index 09de4cdaab..514e33e925 100644 --- a/MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Impl.c +++ b/MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Impl.c @@ -984,13 +984,18 @@ SIGNAL_USER: /**
- Transmit and receive a packet through this DHCP service.
- This is unsupported.
-
- @param This The DHCP protocol instance
- @param Token The transmit and receive instance
-
- @retval EFI_UNSUPPORTED It always returns unsupported.
+ Transmits a DHCP formatted packet and optionally waits for responses.
+
+ @param This Pointer to the EFI_DHCP4_PROTOCOL instance.
+ @param Token Pointer to the EFI_DHCP4_TRANSMIT_RECEIVE_TOKEN structure.
+
+ @retval EFI_SUCCESS The packet was successfully queued for transmission.
+ @retval EFI_INVALID_PARAMETER Some parameter is NULL.
+ @retval EFI_NOT_READY The previous call to this function has not finished yet. Try to call
+ this function after collection process completes.
+ @retval EFI_NO_MAPPING The default station address is not available yet.
+ @retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated.
+ @retval Others Some other unexpected error occurred.
**/
STATIC
diff --git a/MdeModulePkg/Universal/Network/PxeBcDxe/PxeBcDxe.inf b/MdeModulePkg/Universal/Network/PxeBcDxe/PxeBcDxe.inf index 99c5363d63..1971731e08 100644 --- a/MdeModulePkg/Universal/Network/PxeBcDxe/PxeBcDxe.inf +++ b/MdeModulePkg/Universal/Network/PxeBcDxe/PxeBcDxe.inf @@ -81,8 +81,8 @@ [Protocols]
gEfiBisProtocolGuid # PROTOCOL ALWAYS_CONSUMED
- gEfiPxeBaseCodeCallbackProtocolGuid # PROTOCOL ALWAYS_CONSUMED
- gEfiPxeBaseCodeProtocolGuid # PROTOCOL ALWAYS_CONSUMED
+ gEfiPxeBaseCodeCallbackProtocolGuid # PROTOCOL ALWAYS_PRODUCED
+ gEfiPxeBaseCodeProtocolGuid # PROTOCOL ALWAYS_PRODUCED
gEfiLoadFileProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiSimpleNetworkProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiDevicePathProtocolGuid # PROTOCOL ALWAYS_CONSUMED
diff --git a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf index bc1bafba60..fd4ab6be68 100644 --- a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf +++ b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf @@ -83,9 +83,9 @@ gEfiMtftp4ProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiUdp4ServiceBindingProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiDhcp4ServiceBindingProtocolGuid # PROTOCOL ALWAYS_CONSUMED
- gEfiPxeBaseCodeCallbackProtocolGuid # PROTOCOL ALWAYS_CONSUMED
- gEfiPxeBaseCodeProtocolGuid # PROTOCOL ALWAYS_CONSUMED
- gEfiLoadFileProtocolGuid # PROTOCOL ALWAYS_CONSUMED
+ gEfiPxeBaseCodeCallbackProtocolGuid # PROTOCOL ALWAYS_PRODUCED
+ gEfiPxeBaseCodeProtocolGuid # PROTOCOL ALWAYS_PRODUCED
+ gEfiLoadFileProtocolGuid # PROTOCOL ALWAYS_PRODUCED
gEfiDhcp4ProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiUdp4ProtocolGuid # PROTOCOL ALWAYS_CONSUMED
gEfiNetworkInterfaceIdentifierProtocolGuid_31 # PROTOCOL ALWAYS_CONSUMED
|