Index: /trunk/openbios-devel/drivers/pci.c
===================================================================
--- /trunk/openbios-devel/drivers/pci.c (revision 449)
+++ /trunk/openbios-devel/drivers/pci.c (revision 481)
@@ -37,5 +37,6 @@
/* DECLARE data structures for the nodes. */
-DECLARE_UNNAMED_NODE( ob_pci_node, INSTALL_OPEN, 2*sizeof(int) );
+DECLARE_UNNAMED_NODE( ob_pci_bus_node, INSTALL_OPEN, 2*sizeof(int) );
+DECLARE_UNNAMED_NODE( ob_pci_simple_node, INSTALL_OPEN, 2*sizeof(int) );
const pci_arch_t *arch;
@@ -157,5 +158,5 @@
}
-NODE_METHODS(ob_pci_node) = {
+NODE_METHODS(ob_pci_bus_node) = {
{ NULL, ob_pci_initialize },
{ "open", ob_pci_open },
@@ -163,4 +164,10 @@
{ "decode-unit", ob_pci_decode_unit },
{ "encode-unit", ob_pci_encode_unit },
+};
+
+NODE_METHODS(ob_pci_simple_node) = {
+ { NULL, ob_pci_initialize },
+ { "open", ob_pci_open },
+ { "close", ob_pci_close },
};
@@ -738,5 +745,10 @@
config.dev = addr & 0x00FFFFFF;
- REGISTER_NAMED_NODE(ob_pci_node, config.path);
+ if (class == PCI_BASE_CLASS_BRIDGE &&
+ (subclass == PCI_SUBCLASS_BRIDGE_HOST ||
+ subclass == PCI_SUBCLASS_BRIDGE_PCI))
+ REGISTER_NAMED_NODE(ob_pci_bus_node, config.path);
+ else
+ REGISTER_NAMED_NODE(ob_pci_simple_node, config.path);
activate_device(config.path);