static int uart_octeon_probe(device_t dev) { struct uart_softc *sc; int unit; unit = device_get_unit(dev); sc = device_get_softc(dev); sc->sc_class = &uart_oct16550_class; /* * We inherit the settings from the systme console. Note, the bst * bad bus_space_map are bogus here, but obio doesn't yet support * them, it seems. */ sc->sc_sysdev = SLIST_FIRST(&uart_sysdevs); bcopy(&sc->sc_sysdev->bas, &sc->sc_bas, sizeof(sc->sc_bas)); sc->sc_bas.bst = uart_bus_space_mem; /* * XXX * RBR isn't really a great base address. */ if (bus_space_map(sc->sc_bas.bst, CVMX_MIO_UARTX_RBR(0), uart_getrange(sc->sc_class), 0, &sc->sc_bas.bsh) != 0) return (ENXIO); return (uart_bus_probe(dev, sc->sc_bas.regshft, 0, 0, unit)); }
static int uart_i81342_probe(device_t dev) { struct uart_softc *sc; int err; sc = device_get_softc(dev); sc->sc_class = &uart_ns8250_class; if (device_get_unit(dev) == 0) { sc->sc_sysdev = SLIST_FIRST(&uart_sysdevs); bcopy(&sc->sc_sysdev->bas, &sc->sc_bas, sizeof(sc->sc_bas)); } sc->sc_rres = bus_alloc_resource(dev, SYS_RES_IOPORT, &sc->sc_rrid, 0, ~0, uart_getrange(sc->sc_class), RF_ACTIVE); sc->sc_bas.bsh = rman_get_bushandle(sc->sc_rres); sc->sc_bas.bst = rman_get_bustag(sc->sc_rres); bus_space_write_4(sc->sc_bas.bst, sc->sc_bas.bsh, REG_IER << 2, 0x40 | 0x10); bus_release_resource(dev, sc->sc_rtype, sc->sc_rrid, sc->sc_rres); err = uart_bus_probe(dev, 2, 33334000, 0, device_get_unit(dev)); sc->sc_rxfifosz = sc->sc_txfifosz = 1; return (err); }