1 #ifndef _IPXE_EFI_DRIVER_H
2 #define _IPXE_EFI_DRIVER_H
9 FILE_LICENCE ( GPL2_OR_LATER );
11 #include <ipxe/device.h>
12 #include <ipxe/tables.h>
13 #include <ipxe/efi/efi.h>
14 #include <ipxe/efi/Protocol/DevicePath.h>
20 /** EFI device handle */
22 /** Driver for this device */
23 struct efi_driver *driver;
24 /** Driver-private data */
33 * Check if driver supports device
35 * @v device EFI device handle
36 * @ret rc Return status code
38 int ( * supported ) ( EFI_HANDLE device );
40 * Attach driver to device
42 * @v efidev EFI device
43 * @ret rc Return status code
45 int ( * start ) ( struct efi_device *efidev );
47 * Detach driver from device
49 * @v efidev EFI device
51 void ( * stop ) ( struct efi_device *efidev );
54 /** EFI driver table */
55 #define EFI_DRIVERS __table ( struct efi_driver, "efi_drivers" )
57 /** Declare an EFI driver */
58 #define __efi_driver( order ) __table_entry ( EFI_DRIVERS, order )
60 #define EFI_DRIVER_EARLY 01 /**< Early drivers */
61 #define EFI_DRIVER_NORMAL 02 /**< Normal drivers */
62 #define EFI_DRIVER_LATE 03 /**< Late drivers */
65 * Set EFI driver-private data
67 * @v efidev EFI device
68 * @v priv Private data
70 static inline void efidev_set_drvdata ( struct efi_device *efidev,
76 * Get EFI driver-private data
78 * @v efidev EFI device
79 * @ret priv Private data
81 static inline void * efidev_get_drvdata ( struct efi_device *efidev ) {
85 extern struct efi_device * efidev_parent ( struct device *dev );
86 extern int efi_driver_install ( void );
87 extern void efi_driver_uninstall ( void );
88 extern int efi_driver_connect_all ( void );
89 extern void efi_driver_disconnect_all ( void );
90 extern void efi_driver_reconnect_all ( void );
92 #endif /* _IPXE_EFI_DRIVER_H */