Page MenuHomeFreeBSD

D34294.id102820.diff
No OneTemporary

D34294.id102820.diff

Index: sys/dev/uart/uart_core.c
===================================================================
--- sys/dev/uart/uart_core.c
+++ sys/dev/uart/uart_core.c
@@ -47,6 +47,8 @@
#include <machine/resource.h>
#include <machine/stdarg.h>
+#include <dev/pci/pcivar.h>
+
#include <dev/uart/uart.h>
#include <dev/uart/uart_bus.h>
#include <dev/uart/uart_cpu.h>
@@ -557,8 +559,13 @@
sc->sc_bas.busy_detect = !!(quirks & UART_F_BUSY_DETECT);
SLIST_FOREACH(sysdev, &uart_sysdevs, next) {
- if (chan == sysdev->bas.chan &&
- uart_cpu_eqres(&sc->sc_bas, &sysdev->bas)) {
+ if (chan != sysdev->bas.chan)
+ continue;
+ if (uart_cpu_eqres(&sc->sc_bas, &sysdev->bas) ||
+ (sysdev->pci_info.valid &&
+ strcmp(devclass_get_name(device_get_devclass(device_get_parent(dev))), "pci") == 0 &&
+ sysdev->pci_info.bus == pci_get_bus(dev) &&
+ sysdev->pci_info.slot == pci_get_slot(dev))) {
/* XXX check if ops matches class. */
sc->sc_sysdev = sysdev;
sysdev->bas.rclk = sc->sc_bas.rclk;
Index: sys/dev/uart/uart_cpu.h
===================================================================
--- sys/dev/uart/uart_cpu.h
+++ sys/dev/uart/uart_cpu.h
@@ -52,6 +52,15 @@
extern bus_space_tag_t uart_bus_space_io;
extern bus_space_tag_t uart_bus_space_mem;
+/*
+ * PCI bus address used for matching devices.
+ */
+struct uart_pci_info {
+ uint8_t bus;
+ uint8_t slot;
+ uint8_t valid;
+};
+
/*
* Console and debug port device info.
*/
@@ -72,6 +81,7 @@
void *cookie; /* Type dependent use. */
struct mtx *hwmtx;
struct uart_softc *sc; /* valid only from start of attach */
+ struct uart_pci_info pci_info;
};
int uart_cpu_eqres(struct uart_bas *, struct uart_bas *);
Index: sys/dev/uart/uart_cpu_acpi.c
===================================================================
--- sys/dev/uart/uart_cpu_acpi.c
+++ sys/dev/uart/uart_cpu_acpi.c
@@ -182,6 +182,11 @@
(int)spcr->BaudRate);
goto out;
}
+ if (spcr->PciVendorId != 0xffff || spcr->PciDeviceId != 0xffff) {
+ di->pci_info.bus = spcr->PciBus;
+ di->pci_info.slot = spcr->PciDevice;
+ di->pci_info.valid = 1;
+ }
/* Apply device tweaks. */
if ((cd->cd_quirks & UART_F_IGNORE_SPCR_REGSHFT) ==

File Metadata

Mime Type
text/plain
Expires
Wed, Apr 1, 7:24 PM (1 h, 8 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30686499
Default Alt Text
D34294.id102820.diff (2 KB)

Event Timeline