diff options
author | Michael Brown <mcb30@ipxe.org> | 2011-03-15 16:55:04 +0000 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2011-03-15 16:59:19 +0000 |
commit | b9326c365520806978b6ab9b8532cbc983f36da1 (patch) | |
tree | e4babeb89e442fca60d6841c93fa9af79312368c /src/include/ipxe/efi | |
parent | 23daab14a66d407db4ea81811bddf9da95cc35e9 (diff) | |
download | ipxe-b9326c365520806978b6ab9b8532cbc983f36da1.zip ipxe-b9326c365520806978b6ab9b8532cbc983f36da1.tar.gz ipxe-b9326c365520806978b6ab9b8532cbc983f36da1.tar.bz2 |
[efi] Mark SNP devices as children of EFI PCI device
Re-open the EFI_PCI_IO_PROTOCOL specifying an Attributes value of
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER. This causes the SNP devices to
be marked as children of the EFI PCI device (as shown in the "devtree"
command).
On at least one IBM blade system, this is required in order to have
the relevant drivers automatically attach to the SNP controller at
device creation time.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe/efi')
-rw-r--r-- | src/include/ipxe/efi/efi_pci.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/include/ipxe/efi/efi_pci.h b/src/include/ipxe/efi/efi_pci.h index e226a56..24890eb 100644 --- a/src/include/ipxe/efi/efi_pci.h +++ b/src/include/ipxe/efi/efi_pci.h @@ -27,6 +27,8 @@ 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, @@ -34,6 +36,10 @@ extern struct efi_pci_device * efipci_create ( struct efi_driver *efidrv, 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 EFI_STATUS 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 ); |