diff options
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/ipxe/efi/efi_driver.h | 61 | ||||
| -rw-r--r-- | src/include/ipxe/efi/efi_pci.h | 10 |
2 files changed, 38 insertions, 33 deletions
diff --git a/src/include/ipxe/efi/efi_driver.h b/src/include/ipxe/efi/efi_driver.h index afa574d08..600d304f0 100644 --- a/src/include/ipxe/efi/efi_driver.h +++ b/src/include/ipxe/efi/efi_driver.h @@ -8,43 +8,52 @@ FILE_LICENCE ( GPL2_OR_LATER ); +#include <ipxe/tables.h> #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[32]; - /** EFI driver binding protocol */ - EFI_DRIVER_BINDING_PROTOCOL driver; - /** EFI component name protocol */ - EFI_COMPONENT_NAME2_PROTOCOL wtf; + /** + * Check if driver supports device + * + * @v device Device + * @ret rc Return status code + */ + int ( * supported ) ( EFI_HANDLE device ); + /** + * Attach driver to device + * + * @v device Device + * @ret rc Return status code + */ + int ( * start ) ( EFI_HANDLE device ); + /** + * Detach driver from device + * + * @v device Device + */ + void ( * stop ) ( EFI_HANDLE device ); }; -/** 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, \ - } } +/** EFI driver table */ +#define EFI_DRIVERS __table ( struct efi_driver, "efi_drivers" ) + +/** Declare an EFI driver */ +#define __efi_driver( order ) __table_entry ( EFI_DRIVERS, order ) + +#define EFI_DRIVER_EARLY 01 /**< Early drivers */ +#define EFI_DRIVER_NORMAL 02 /**< Normal drivers */ +#define EFI_DRIVER_LATE 03 /**< Late drivers */ extern EFI_DEVICE_PATH_PROTOCOL * efi_devpath_end ( EFI_DEVICE_PATH_PROTOCOL *path ); - -extern int efi_driver_install ( struct efi_driver *efidrv ); -extern void efi_driver_uninstall ( struct efi_driver *efidrv ); +extern int efi_driver_install ( void ); +extern void efi_driver_uninstall ( void ); +extern int efi_driver_connect_all ( void ); +extern void efi_driver_disconnect_all ( void ); +extern void efi_driver_reconnect_all ( void ); #endif /* _IPXE_EFI_DRIVER_H */ diff --git a/src/include/ipxe/efi/efi_pci.h b/src/include/ipxe/efi/efi_pci.h index e6b319709..c5ff366ca 100644 --- a/src/include/ipxe/efi/efi_pci.h +++ b/src/include/ipxe/efi/efi_pci.h @@ -17,7 +17,6 @@ static inline EFIAPI uint64_t LShiftU64 ( UINT64 value, UINTN shift ) { return ( value << shift ); } -struct efi_driver; struct device; /** An EFI PCI device */ @@ -32,12 +31,10 @@ struct efi_pci_device { EFI_PCI_IO_PROTOCOL *pci_io; /** Device path */ EFI_DEVICE_PATH_PROTOCOL *path; - /** EFI driver */ - struct efi_driver *efidrv; }; -extern struct efi_pci_device * efipci_create ( struct efi_driver *efidrv, - EFI_HANDLE device ); +extern int efipci_create ( EFI_HANDLE device, UINT32 attributes, + struct efi_pci_device **efipci ); extern int efipci_enable ( struct efi_pci_device *efipci ); extern struct efi_pci_device * efipci_find_efi ( EFI_HANDLE device ); extern struct efi_pci_device * efipci_find ( struct device *dev ); @@ -45,7 +42,6 @@ extern int efipci_child_add ( struct efi_pci_device *efipci, EFI_HANDLE device ); extern void efipci_child_del ( struct efi_pci_device *efipci, EFI_HANDLE device ); -extern void efipci_destroy ( struct efi_driver *efidrv, - struct efi_pci_device *efipci ); +extern void efipci_destroy ( struct efi_pci_device *efipci ); #endif /* _IPXE_EFI_PCI_H */ |
