Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F147903241
D6021.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D6021.diff
View Options
Index: head/sys/dev/acpica/acpi_pcib.c
===================================================================
--- head/sys/dev/acpica/acpi_pcib.c
+++ head/sys/dev/acpica/acpi_pcib.c
@@ -126,11 +126,10 @@
ACPI_ADR_PCI_SLOT(entry->Address), entry->Pin);
}
-int
-acpi_pcib_attach(device_t dev, ACPI_BUFFER *prt, int busno)
+void
+acpi_pcib_fetch_prt(device_t dev, ACPI_BUFFER *prt)
{
ACPI_STATUS status;
- int error;
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
@@ -148,20 +147,9 @@
acpi_name(acpi_get_handle(dev)), AcpiFormatException(status));
/*
- * Attach the PCI bus proper.
- */
- if (device_add_child(dev, "pci", -1) == NULL) {
- device_printf(device_get_parent(dev), "couldn't attach pci bus\n");
- return_VALUE(ENXIO);
- }
-
- /*
- * Now go scan the bus.
+ * Ensure all the link devices are attached.
*/
prt_walk_table(prt, prt_attach_devices, dev);
-
- error = bus_generic_attach(dev);
- return_VALUE(error);
}
static void
Index: head/sys/dev/acpica/acpi_pcib_acpi.c
===================================================================
--- head/sys/dev/acpica/acpi_pcib_acpi.c
+++ head/sys/dev/acpica/acpi_pcib_acpi.c
@@ -502,7 +502,13 @@
if (sc->ap_segment == 0 && sc->ap_bus == 0)
bus0_seen = 1;
- return (acpi_pcib_attach(dev, &sc->ap_prt, sc->ap_bus));
+ acpi_pcib_fetch_prt(dev, &sc->ap_prt);
+
+ if (device_add_child(dev, "pci", -1) == NULL) {
+ device_printf(device_get_parent(dev), "couldn't attach pci bus\n");
+ return (ENXIO);
+ }
+ return (bus_generic_attach(dev));
}
/*
Index: head/sys/dev/acpica/acpi_pcib_pci.c
===================================================================
--- head/sys/dev/acpica/acpi_pcib_pci.c
+++ head/sys/dev/acpica/acpi_pcib_pci.c
@@ -120,7 +120,9 @@
pcib_attach_common(dev);
sc = device_get_softc(dev);
sc->ap_handle = acpi_get_handle(dev);
- return (acpi_pcib_attach(dev, &sc->ap_prt, sc->ap_pcibsc.bus.sec));
+ acpi_pcib_fetch_prt(dev, &sc->ap_prt);
+
+ return (pcib_attach_child(dev));
}
static int
Index: head/sys/dev/acpica/acpi_pcibvar.h
===================================================================
--- head/sys/dev/acpica/acpi_pcibvar.h
+++ head/sys/dev/acpica/acpi_pcibvar.h
@@ -35,7 +35,7 @@
void acpi_pci_link_add_reference(device_t dev, int index, device_t pcib,
int slot, int pin);
int acpi_pci_link_route_interrupt(device_t dev, int index);
-int acpi_pcib_attach(device_t bus, ACPI_BUFFER *prt, int busno);
+void acpi_pcib_fetch_prt(device_t bus, ACPI_BUFFER *prt);
int acpi_pcib_route_interrupt(device_t pcib, device_t dev, int pin,
ACPI_BUFFER *prtbuf);
int acpi_pcib_power_for_sleep(device_t pcib, device_t dev,
Index: head/sys/dev/pci/pci_pci.c
===================================================================
--- head/sys/dev/pci/pci_pci.c
+++ head/sys/dev/pci/pci_pci.c
@@ -1075,21 +1075,26 @@
}
int
+pcib_attach_child(device_t dev)
+{
+ struct pcib_softc *sc;
+
+ sc = device_get_softc(dev);
+ if (sc->bus.sec == 0) {
+ /* no secondary bus; we should have fixed this */
+ return(0);
+ }
+
+ sc->child = device_add_child(dev, "pci", -1);
+ return (bus_generic_attach(dev));
+}
+
+int
pcib_attach(device_t dev)
{
- struct pcib_softc *sc;
- device_t child;
pcib_attach_common(dev);
- sc = device_get_softc(dev);
- if (sc->bus.sec != 0) {
- child = device_add_child(dev, "pci", -1);
- if (child != NULL)
- return(bus_generic_attach(dev));
- }
-
- /* no secondary bus; we should have fixed this */
- return(0);
+ return (pcib_attach_child(dev));
}
int
Index: head/sys/dev/pci/pcib_private.h
===================================================================
--- head/sys/dev/pci/pcib_private.h
+++ head/sys/dev/pci/pcib_private.h
@@ -101,6 +101,7 @@
struct pcib_softc
{
device_t dev;
+ device_t child;
uint32_t flags; /* flags */
#define PCIB_SUBTRACTIVE 0x1
#define PCIB_DISABLE_MSI 0x2
@@ -144,6 +145,7 @@
int min_count);
#endif
int pcib_attach(device_t dev);
+int pcib_attach_child(device_t dev);
void pcib_attach_common(device_t dev);
void pcib_bridge_init(device_t dev);
#ifdef NEW_PCIB
Index: head/sys/powerpc/ofw/ofw_pcib_pci.c
===================================================================
--- head/sys/powerpc/ofw/ofw_pcib_pci.c
+++ head/sys/powerpc/ofw/ofw_pcib_pci.c
@@ -114,10 +114,7 @@
sizeof(cell_t));
pcib_attach_common(dev);
-
- device_add_child(dev, "pci", -1);
-
- return (bus_generic_attach(dev));
+ return (pcib_attach_child(dev));
}
static phandle_t
Index: head/sys/sparc64/pci/ofw_pcib.c
===================================================================
--- head/sys/sparc64/pci/ofw_pcib.c
+++ head/sys/sparc64/pci/ofw_pcib.c
@@ -149,8 +149,7 @@
ofw_pcib_gen_setup(dev);
pcib_attach_common(dev);
- device_add_child(dev, "pci", -1);
- return (bus_generic_attach(dev));
+ return (pcib_attach_child(dev));
}
static void
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Mar 15, 1:28 PM (12 h, 8 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29717847
Default Alt Text
D6021.diff (4 KB)
Attached To
Mode
D6021: Add a pcib_attach_child() method to manage adding the child "pci" device.
Attached
Detach File
Event Timeline
Log In to Comment