static void cn_drvinit(void *unused) { phandle_t options; char output[32]; struct tty *tp; if (ofw_consdev.cn_pri != CN_DEAD && ofw_consdev.cn_name[0] != '\0') { if ((options = OF_finddevice("/options")) == -1 || OF_getprop(options, "output-device", output, sizeof(output)) == -1) return; /* * XXX: This is a hack and it may result in two /dev/ttya * XXX: devices on platforms where the sab driver works. */ tp = tty_alloc(&ofw_ttydevsw, NULL); tty_makedev(tp, NULL, "%s", output); tty_makealias(tp, "ofwcons"); } }
static int hvcn_dev_attach(device_t dev) { struct tty *tp; int error, rid; /* belongs in attach - but attach is getting called multiple times * for reasons I have not delved into */ if (hvcn_consdev.cn_pri == CN_DEAD || hvcn_consdev.cn_name[0] == '\0') return (ENXIO); tp = tty_alloc(&hvcn_class, NULL); tty_makedev(tp, NULL, "v%r", 1); tty_makealias(tp, "hvcn"); rid = 0; if ((hvcn_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE)) == NULL) { device_printf(dev, "couldn't map interrupt\n"); error = ENXIO; goto fail; } error = bus_setup_intr(dev, hvcn_irq, INTR_TYPE_TTY, NULL, hvcn_intr, hvcn_tp, hvcn_intrhand); if (error) device_printf(dev, "couldn't set up irq\n"); fail: return (error); }