Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / include / ipxe / efi / efi_driver.h
1 #ifndef _IPXE_EFI_DRIVER_H
2 #define _IPXE_EFI_DRIVER_H
3
4 /** @file
5  *
6  * EFI driver interface
7  */
8
9 FILE_LICENCE ( GPL2_OR_LATER );
10
11 #include <ipxe/device.h>
12 #include <ipxe/tables.h>
13 #include <ipxe/efi/efi.h>
14 #include <ipxe/efi/Protocol/DevicePath.h>
15
16 /** An EFI device */
17 struct efi_device {
18         /** Generic device */
19         struct device dev;
20         /** EFI device handle */
21         EFI_HANDLE device;
22         /** Driver for this device */
23         struct efi_driver *driver;
24         /** Driver-private data */
25         void *priv;
26 };
27
28 /** An EFI driver */
29 struct efi_driver {
30         /** Name */
31         const char *name;
32         /**
33          * Check if driver supports device
34          *
35          * @v device            EFI device handle
36          * @ret rc              Return status code
37          */
38         int ( * supported ) ( EFI_HANDLE device );
39         /**
40          * Attach driver to device
41          *
42          * @v efidev            EFI device
43          * @ret rc              Return status code
44          */
45         int ( * start ) ( struct efi_device *efidev );
46         /**
47          * Detach driver from device
48          *
49          * @v efidev            EFI device
50          */
51         void ( * stop ) ( struct efi_device *efidev );
52 };
53
54 /** EFI driver table */
55 #define EFI_DRIVERS __table ( struct efi_driver, "efi_drivers" )
56
57 /** Declare an EFI driver */
58 #define __efi_driver( order ) __table_entry ( EFI_DRIVERS, order )
59
60 #define EFI_DRIVER_EARLY        01      /**< Early drivers */
61 #define EFI_DRIVER_NORMAL       02      /**< Normal drivers */
62 #define EFI_DRIVER_LATE         03      /**< Late drivers */
63
64 /**
65  * Set EFI driver-private data
66  *
67  * @v efidev            EFI device
68  * @v priv              Private data
69  */
70 static inline void efidev_set_drvdata ( struct efi_device *efidev,
71                                         void *priv ) {
72         efidev->priv = priv;
73 }
74
75 /**
76  * Get EFI driver-private data
77  *
78  * @v efidev            EFI device
79  * @ret priv            Private data
80  */
81 static inline void * efidev_get_drvdata ( struct efi_device *efidev ) {
82         return efidev->priv;
83 }
84
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 );
91
92 #endif /* _IPXE_EFI_DRIVER_H */