mirror of https://github.com/ipxe/ipxe.git
[efi] Delegate to child device's EFI_COMPONENT_NAME2_PROTOCOL, if present
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>pull/8/head
parent
d6b0b76a05
commit
1a79f6f37a
|
@ -90,12 +90,29 @@ efi_driver_get_driver_name ( EFI_COMPONENT_NAME2_PROTOCOL *wtf,
|
||||||
*/
|
*/
|
||||||
static EFI_STATUS EFIAPI
|
static EFI_STATUS EFIAPI
|
||||||
efi_driver_get_controller_name ( EFI_COMPONENT_NAME2_PROTOCOL *wtf __unused,
|
efi_driver_get_controller_name ( EFI_COMPONENT_NAME2_PROTOCOL *wtf __unused,
|
||||||
EFI_HANDLE device __unused,
|
EFI_HANDLE device, EFI_HANDLE child,
|
||||||
EFI_HANDLE child __unused,
|
CHAR8 *language, CHAR16 **controller_name ) {
|
||||||
CHAR8 *language __unused,
|
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
||||||
CHAR16 **controller_name __unused ) {
|
union {
|
||||||
|
EFI_COMPONENT_NAME2_PROTOCOL *name2;
|
||||||
|
void *interface;
|
||||||
|
} name2;
|
||||||
|
EFI_STATUS efirc;
|
||||||
|
|
||||||
/* Just let EFI use the default Device Path Name */
|
/* 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 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Otherwise, let EFI use the default Device Path Name */
|
||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue