Skip to content

Commit

Permalink
[efi] Delegate to child device's EFI_COMPONENT_NAME2_PROTOCOL, if pre…
Browse files Browse the repository at this point in the history
…sent

EFI's device naming model requires drivers to provide names for child
devices.  Allow the driver's GetControllerName() method to delegate to
an instance of EFI_COMPONENT_NAME2_PROTOCOL installed on the child
device itself (if present); this allows the SNP device to expose its
own device name via the PCI driver's GetControllerName() method.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Nov 21, 2012
1 parent d6b0b76 commit 1a79f6f
Showing 1 changed file with 22 additions and 5 deletions.
27 changes: 22 additions & 5 deletions src/interface/efi/efi_driver.c
Expand Up @@ -90,12 +90,29 @@ efi_driver_get_driver_name ( EFI_COMPONENT_NAME2_PROTOCOL *wtf,
*/
static EFI_STATUS EFIAPI
efi_driver_get_controller_name ( EFI_COMPONENT_NAME2_PROTOCOL *wtf __unused,
EFI_HANDLE device __unused,
EFI_HANDLE child __unused,
CHAR8 *language __unused,
CHAR16 **controller_name __unused ) {
EFI_HANDLE device, EFI_HANDLE child,
CHAR8 *language, CHAR16 **controller_name ) {
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
union {
EFI_COMPONENT_NAME2_PROTOCOL *name2;
void *interface;
} name2;
EFI_STATUS efirc;

/* Delegate to the EFI_COMPONENT_NAME2_PROTOCOL instance
* installed on child handle, if present.
*/
if ( ( child != NULL ) &&
( ( efirc = bs->OpenProtocol (
child, &efi_component_name2_protocol_guid,
&name2.interface, NULL, NULL,
EFI_OPEN_PROTOCOL_GET_PROTOCOL ) ) == 0 ) ) {
return name2.name2->GetControllerName ( name2.name2, device,
child, language,
controller_name );
}

/* Just let EFI use the default Device Path Name */
/* Otherwise, let EFI use the default Device Path Name */
return EFI_UNSUPPORTED;
}

Expand Down

0 comments on commit 1a79f6f

Please sign in to comment.