static void ingenic_rng_attach(device_t parent, device_t self, void *aux) { struct ingenic_rng_softc * const sc = device_private(self); const struct apbus_attach_args * const aa = aux; bus_addr_t addr = aa->aa_addr; int error; sc->sc_dev = self; sc->sc_bst = aa->aa_bst; if (addr == 0) addr = JZ_RNG; error = bus_space_map(aa->aa_bst, addr, 4, 0, &sc->sc_bsh); if (error) { aprint_error_dev(self, "can't map registers for %s: %d\n", aa->aa_name, error); return; } mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_VM); aprint_naive(": Ingenic random number generator\n"); aprint_normal(": Ingenic random number generator\n"); rndsource_setcb(&sc->sc_rndsource, ingenic_rng_get, sc); rnd_attach_source(&sc->sc_rndsource, device_xname(self), RND_TYPE_RNG, RND_FLAG_COLLECT_VALUE|RND_FLAG_HASCB); ingenic_rng_get(RND_POOLBITS / NBBY, sc); }
static void ingenic_rng_get_intr(void *priv) { struct ingenic_rng_softc * const sc = priv; ingenic_rng_get(sc); }