diff options
author | Michael Brown | 2011-02-17 01:27:51 +0100 |
---|---|---|
committer | Michael Brown | 2011-02-17 03:56:55 +0100 |
commit | d7736fbb7bbf2116e95742affcaf45c2a7ee5476 (patch) | |
tree | aad56a264b42dcba5e5e491e3eab8a04766a0647 /src/include/ipxe/efi/efi_driver.h | |
parent | [efi] Rename efi_pci.h to efi_pci_api.h (diff) | |
download | ipxe-d7736fbb7bbf2116e95742affcaf45c2a7ee5476.tar.gz ipxe-d7736fbb7bbf2116e95742affcaf45c2a7ee5476.tar.xz ipxe-d7736fbb7bbf2116e95742affcaf45c2a7ee5476.zip |
[efi] Allow EFI to control PCI bus enumeration
EFI performs its own PCI bus enumeration. Respect this, and start
controlling devices only when instructed to do so by EFI.
As a side benefit, we should now correctly create multiple SNP
instances for multi-port devices.
This should also fix the problem of failing to enumerate devices
because the PCI bridges have not yet been enabled at the time the iPXE
driver is loaded.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe/efi/efi_driver.h')
-rw-r--r-- | src/include/ipxe/efi/efi_driver.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/include/ipxe/efi/efi_driver.h b/src/include/ipxe/efi/efi_driver.h new file mode 100644 index 00000000..06331647 --- /dev/null +++ b/src/include/ipxe/efi/efi_driver.h @@ -0,0 +1,49 @@ +#ifndef _IPXE_EFI_DRIVER_H +#define _IPXE_EFI_DRIVER_H + +/** @file + * + * EFI driver interface + */ + +FILE_LICENCE ( GPL2_OR_LATER ); + +#include <ipxe/efi/efi.h> +#include <ipxe/efi/Protocol/DriverBinding.h> +#include <ipxe/efi/Protocol/ComponentName2.h> +#include <ipxe/efi/Protocol/DevicePath.h> + +/** An EFI driver */ +struct efi_driver { + /** Name */ + const char *name; + /** EFI name */ + CHAR16 *wname; + /** EFI driver binding protocol */ + EFI_DRIVER_BINDING_PROTOCOL driver; + /** EFI component name protocol */ + EFI_COMPONENT_NAME2_PROTOCOL wtf; +}; + +/** Initialise an EFI driver + * + * @v name Driver name + * @v supported Device supported method + * @v start Device start method + * @v stop Device stop method + */ +#define EFI_DRIVER_INIT( _name, _supported, _start, _stop ) { \ + .name = _name, \ + .driver = { \ + .Supported = _supported, \ + .Start = _start, \ + .Stop = _stop, \ + .Version = 0x10, \ + } } + +extern EFI_DEVICE_PATH_PROTOCOL * +efi_devpath_end ( EFI_DEVICE_PATH_PROTOCOL *path ); + +extern EFI_STATUS efi_driver_install ( struct efi_driver *efidrv ); + +#endif /* _IPXE_EFI_DRIVER_H */ |