static int scc_macio_probe(device_t dev) { struct scc_softc *sc; const char *nm; sc = device_get_softc(dev); nm = ofw_bus_get_name(dev); if (!strcmp(nm, "escc")) { device_set_desc(dev, "Zilog Z8530 dual channel SCC"); sc->sc_class = &scc_z8530_class; return (scc_bfe_probe(dev, MACIO_REGSHFT, MACIO_RCLK, 0)); } return (ENXIO); }
static int scc_ebus_probe(device_t dev) { struct scc_softc *sc; const char *cmpt, *nm; sc = device_get_softc(dev); nm = ofw_bus_get_name(dev); cmpt = ofw_bus_get_compat(dev); if (cmpt == NULL) cmpt = ""; if (!strcmp(nm, "se") || !strcmp(nm, "FJSV,se") || !strcmp(cmpt, "sab82532")) { device_set_desc(dev, "Siemens SAB 82532 dual channel SCC"); sc->sc_class = &scc_sab82532_class; return (scc_bfe_probe(dev, EBUS_REGSHFT, EBUS_RCLK, 0)); } return (ENXIO); }
static int scc_quicc_probe(device_t dev) { device_t parent; struct scc_softc *sc; uintptr_t devtype, rclk; int error; parent = device_get_parent(dev); error = BUS_READ_IVAR(parent, dev, QUICC_IVAR_DEVTYPE, &devtype); if (error) return (error); if (devtype != QUICC_DEVTYPE_SCC) return (ENXIO); device_set_desc(dev, "QUICC quad channel SCC"); sc = device_get_softc(dev); sc->sc_class = &scc_quicc_class; if (BUS_READ_IVAR(parent, dev, QUICC_IVAR_BRGCLK, &rclk)) rclk = 0; return (scc_bfe_probe(dev, 0, rclk, 0)); }