summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/include')
-rw-r--r--src/include/ipxe/efi/efi.h1
-rw-r--r--src/include/ipxe/efi/efi_driver.h49
-rw-r--r--src/include/ipxe/efi/efi_pci.h40
3 files changed, 89 insertions, 1 deletions
diff --git a/src/include/ipxe/efi/efi.h b/src/include/ipxe/efi/efi.h
index 6dca13243..8a216b537 100644
--- a/src/include/ipxe/efi/efi.h
+++ b/src/include/ipxe/efi/efi.h
@@ -142,6 +142,5 @@ extern EFI_SYSTEM_TABLE *efi_systab;
extern const char * efi_strerror ( EFI_STATUS efirc );
extern EFI_STATUS efi_init ( EFI_HANDLE image_handle,
EFI_SYSTEM_TABLE *systab );
-extern int efi_snp_install ( void );
#endif /* _IPXE_EFI_H */
diff --git a/src/include/ipxe/efi/efi_driver.h b/src/include/ipxe/efi/efi_driver.h
new file mode 100644
index 000000000..063316472
--- /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 */
diff --git a/src/include/ipxe/efi/efi_pci.h b/src/include/ipxe/efi/efi_pci.h
new file mode 100644
index 000000000..e226a5693
--- /dev/null
+++ b/src/include/ipxe/efi/efi_pci.h
@@ -0,0 +1,40 @@
+#ifndef _IPXE_EFI_PCI_H
+#define _IPXE_EFI_PCI_H
+
+/** @file
+ *
+ * EFI driver interface
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER );
+
+#include <ipxe/efi/efi.h>
+#include <ipxe/efi/Protocol/PciIo.h>
+#include <ipxe/efi/Protocol/DevicePath.h>
+
+struct efi_driver;
+struct device;
+
+/** An EFI PCI device */
+struct efi_pci_device {
+ /** List of EFI PCI devices */
+ struct list_head list;
+ /** iPXE PCI device */
+ struct pci_device pci;
+ /** Underlying EFI device */
+ EFI_HANDLE device;
+ /** PCI I/O protocol */
+ EFI_PCI_IO_PROTOCOL *pci_io;
+ /** Device path */
+ EFI_DEVICE_PATH_PROTOCOL *path;
+};
+
+extern struct efi_pci_device * efipci_create ( struct efi_driver *efidrv,
+ EFI_HANDLE device );
+extern EFI_STATUS 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 );
+extern void efipci_destroy ( struct efi_driver *efidrv,
+ struct efi_pci_device *efipci );
+
+#endif /* _IPXE_EFI_PCI_H */