From ba39e316c957ed69301693606e17e6891985607a Mon Sep 17 00:00:00 2001 From: vanjeff Date: Tue, 26 Feb 2008 08:38:29 +0000 Subject: [PATCH] 1. Add EFI LOADED IMAGE DEVICE PATH Protocol in LoadImage() service, per UEFI 2.1b. 2. Update comments for DHCP.transmitreceive(). 2. Update UefiPxeBcDxe.inf and PxeBcDxe.inf to assign correct protocol usages. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4758 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Core/Dxe/DxeMain.inf | 1 + MdeModulePkg/Core/Dxe/Image.h | 2 +- MdeModulePkg/Core/Dxe/Image/Image.c | 34 ++++++++++++++++--- .../Universal/Network/Dhcp4Dxe/Dhcp4Impl.c | 15 +++++--- .../Universal/Network/PxeBcDxe/PxeBcDxe.inf | 4 +-- .../Network/UefiPxeBcDxe/UefiPxeBcDxe.inf | 6 ++-- 6 files changed, 47 insertions(+), 15 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 @@ -1208,11 +1227,18 @@ Returns: CoreRemoveDebugImageInfoEntry (Image->Handle); + 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. + Transmits a DHCP formatted packet and optionally waits for responses. - @param This The DHCP protocol instance - @param Token The transmit and receive instance + @param This Pointer to the EFI_DHCP4_PROTOCOL instance. + @param Token Pointer to the EFI_DHCP4_TRANSMIT_RECEIVE_TOKEN structure. - @retval EFI_UNSUPPORTED It always returns unsupported. + @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