You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

efi_pci.h 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #ifndef _IPXE_EFI_PCI_H
  2. #define _IPXE_EFI_PCI_H
  3. /** @file
  4. *
  5. * EFI driver interface
  6. */
  7. FILE_LICENCE ( GPL2_OR_LATER );
  8. #include <ipxe/efi/efi.h>
  9. #include <ipxe/efi/Protocol/PciIo.h>
  10. #include <ipxe/efi/Protocol/DevicePath.h>
  11. /* PciRootBridgeIo.h uses LShiftU64(), which isn't defined anywhere else */
  12. static inline EFIAPI uint64_t LShiftU64 ( UINT64 value, UINTN shift ) {
  13. return ( value << shift );
  14. }
  15. struct efi_driver;
  16. struct device;
  17. /** An EFI PCI device */
  18. struct efi_pci_device {
  19. /** List of EFI PCI devices */
  20. struct list_head list;
  21. /** iPXE PCI device */
  22. struct pci_device pci;
  23. /** Underlying EFI device */
  24. EFI_HANDLE device;
  25. /** PCI I/O protocol */
  26. EFI_PCI_IO_PROTOCOL *pci_io;
  27. /** Device path */
  28. EFI_DEVICE_PATH_PROTOCOL *path;
  29. /** EFI driver */
  30. struct efi_driver *efidrv;
  31. };
  32. extern struct efi_pci_device * efipci_create ( struct efi_driver *efidrv,
  33. EFI_HANDLE device );
  34. extern EFI_STATUS efipci_enable ( struct efi_pci_device *efipci );
  35. extern struct efi_pci_device * efipci_find_efi ( EFI_HANDLE device );
  36. extern struct efi_pci_device * efipci_find ( struct device *dev );
  37. extern EFI_STATUS efipci_child_add ( struct efi_pci_device *efipci,
  38. EFI_HANDLE device );
  39. extern void efipci_child_del ( struct efi_pci_device *efipci,
  40. EFI_HANDLE device );
  41. extern void efipci_destroy ( struct efi_driver *efidrv,
  42. struct efi_pci_device *efipci );
  43. #endif /* _IPXE_EFI_PCI_H */