static void ks8695uart_disable_ms(struct uart_port *port) { if (ms_enabled(port)) { disable_irq(KS8695_IRQ_UART_MODEM_STATUS); ms_enable(port,0); } }
int msopen(dev_t dev, int flags, int mode, struct lwp *l) { struct ms_softc *sc; struct ms_port *ms; int unit, port; unit = MS_UNIT(dev); sc = (struct ms_softc *)getsoftc(ms_cd, unit); if (sc == NULL) return(EXDEV); port = MS_PORT(dev); ms = &sc->sc_ports[port]; if (ms->ms_events.ev_io) return(EBUSY); #if NWSMOUSE > 0 /* don't allow opening when sending events to wsmouse */ if (ms->ms_wsenabled) return EBUSY; #endif /* initialize potgo bits for mouse mode */ custom.potgo = custom.potgor | (0xf00 << (port * 4)); ms->ms_events.ev_io = l->l_proc; ev_init(&ms->ms_events); /* may cause sleep */ ms_enable(ms); return(0); }
static int ks8695uart_startup(struct uart_port *port) { int retval; set_irq_flags(KS8695_IRQ_UART_TX, IRQF_VALID | IRQF_NOAUTOEN); tx_enable(port, 0); rx_enable(port, 1); ms_enable(port, 1); /* * Allocate the IRQ */ retval = request_irq(KS8695_IRQ_UART_TX, ks8695uart_tx_chars, IRQF_DISABLED, "UART TX", port); if (retval) goto err_tx; retval = request_irq(KS8695_IRQ_UART_RX, ks8695uart_rx_chars, IRQF_DISABLED, "UART RX", port); if (retval) goto err_rx; retval = request_irq(KS8695_IRQ_UART_LINE_STATUS, ks8695uart_rx_chars, IRQF_DISABLED, "UART LineStatus", port); if (retval) goto err_ls; retval = request_irq(KS8695_IRQ_UART_MODEM_STATUS, ks8695uart_modem_status, IRQF_DISABLED, "UART ModemStatus", port); if (retval) goto err_ms; return 0; err_ms: free_irq(KS8695_IRQ_UART_LINE_STATUS, port); err_ls: free_irq(KS8695_IRQ_UART_RX, port); err_rx: free_irq(KS8695_IRQ_UART_TX, port); err_tx: return retval; }