Exemple #1
0
void
vndattach(int num)
{
	char *mem;
	int i;

	if (num <= 0)
		return;
	mem = mallocarray(num, sizeof(struct vnd_softc), M_DEVBUF,
	    M_NOWAIT | M_ZERO);
	if (mem == NULL) {
		printf("WARNING: no memory for vnode disks\n");
		return;
	}
	vnd_softc = (struct vnd_softc *)mem;
	for (i = 0; i < num; i++) {
		struct vnd_softc *sc = &vnd_softc[i];

		sc->sc_dev.dv_unit = i;
		snprintf(sc->sc_dev.dv_xname, sizeof(sc->sc_dev.dv_xname),
		    "vnd%d", i);
		disk_construct(&sc->sc_dk);
		device_ref(&sc->sc_dev);
	}
	numvnd = num;
}
struct vldcp_softc *
vldcp_lookup(dev_t dev)
{
	struct vldcp_softc *sc = NULL;

	if (minor(dev) < nitems(vldc_svc))
		sc = vldc_svc[minor(dev)].vs_sc;

	if (sc)
		device_ref(&sc->sc_dv);

	return (sc);
}
Exemple #3
0
void
rdattach(int num)
{
	static struct cfdata cf; /* Fake cf. */
	struct rd_softc *sc;
	int i;

	/* There's only one rd_root_image, so only attach one rd. */
	num = 1;

	/* XXX: Fake up more? */
	cf.cf_attach = &rd_ca;
	cf.cf_driver = &rd_cd;

	rd_cd.cd_ndevs = num;
	rd_cd.cd_devs = malloc(num * sizeof(void *), M_DEVBUF, M_NOWAIT);
	if (rd_cd.cd_devs == NULL)
		panic("rdattach: out of memory");

	for (i = 0; i < num; ++i) {
		/* Allocate the softc and initialize it. */
		sc = malloc(sizeof(*sc), M_DEVBUF, M_NOWAIT|M_ZERO);
		if (sc == NULL)
			panic("rdattach: out of memory");
		sc->sc_dev.dv_class = DV_DISK;
		sc->sc_dev.dv_cfdata = &cf;
		sc->sc_dev.dv_flags = DVF_ACTIVE;
		sc->sc_dev.dv_unit = i;
	        if (snprintf(sc->sc_dev.dv_xname, sizeof(sc->sc_dev.dv_xname),
		    "rd%d", i) >= sizeof(sc->sc_dev.dv_xname))
			panic("rdattach: device name too long");
		sc->sc_dev.dv_ref = 1;

		/* Attach it to the device tree. */
		rd_cd.cd_devs[i] = sc;
		TAILQ_INSERT_TAIL(&alldevs, &sc->sc_dev, dv_list);
		device_ref(&sc->sc_dev);

		/* Finish initializing. */
		rd_attach(NULL, &sc->sc_dev, NULL);
	}
}