[efi] Ensure drivers are disconnected when ExitBootServices() is called
authorMichael Brown <mcb30@ipxe.org>
Mon, 13 Apr 2015 11:06:59 +0000 (12:06 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 13 Apr 2015 11:06:59 +0000 (12:06 +0100)
commit755d2b8f6be681a2e620534b237471b75f28ed8c
tree588c9462c8ba38b25a99350eb3494ba07ccc02d5
parentea3d5875cd8881273e02c3a0e70c7fe4317123f7
[efi] Ensure drivers are disconnected when ExitBootServices() is called

We hook the UEFI ExitBootServices() event and use it to trigger a call
to shutdown_boot().  This does not automatically cause drivers to be
disconnected from their devices, since device enumeration is now
handled by the UEFI core rather than by iPXE.  (Under the old and
dubiously compatible device model, iPXE used to perform its own device
enumeration and so the call to shutdown_boot() would indeed have
caused drivers to be disconnected.)

Fix by replicating parts of the dummy "EFI root device" from
efiprefix.c to efidrvprefix.c, so that the call to shutdown_boot()
will call efi_driver_disconnect_all().

Originally-fixed-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/x86/prefix/efidrvprefix.c