static int s3c_serial_startup(struct uart_port *port) { struct s3c_uart_port *ourport = to_ourport(port); unsigned long flags; int ret; dbg("s3c_serial_startup: port=%p (%08lx,%p)\n", port->mapbase, port->membase); local_irq_save(flags); rx_enabled(port) = 1; tx_enabled(port) = 1; #ifdef UART_HAS_INTMSK uart_enable_irq(port, UART_TX_INT | UART_RX_INT); ret = request_irq(UART_IRQ(port), s3c_serial_interrupt, 0, s3c_serial_portname(port), ourport); if (ret != 0) { printk(KERN_ERR "cannot get irq %d\n", UART_IRQ(port)); return ret; } #else ret = request_irq(RX_IRQ(port), s3c_serial_rx_chars, 0, s3c_serial_portname(port), ourport); if (ret != 0) { printk(KERN_ERR "cannot get irq %d\n", RX_IRQ(port)); return ret; } ret = request_irq(TX_IRQ(port), s3c_serial_tx_chars, 0, s3c_serial_portname(port), ourport); if (ret) { printk(KERN_ERR "cannot get irq %d\n", TX_IRQ(port)); s3c_serial_shutdown(port); local_irq_restore(flags); return ret; } #endif ourport->rx_claimed = 1; ourport->tx_claimed = 1; dbg("s3c_serial_startup ok\n"); /* the port reset code should have done the correct * register setup for the port controls */ local_irq_restore(flags); return ret; }
static void s3c_serial_shutdown(struct uart_port *port) { struct s3c_uart_port *ourport = to_ourport(port); #ifdef UART_HAS_INTMSK if (ourport->tx_claimed || ourport->rx_claimed) { free_irq(UART_IRQ(port), ourport); ourport->tx_claimed = 0; ourport->rx_claimed = 0; tx_enabled(port) = 0; rx_enabled(port) = 0; } #else if (ourport->tx_claimed) { free_irq(TX_IRQ(port), ourport); tx_enabled(port) = 0; ourport->tx_claimed = 0; } if (ourport->rx_claimed) { free_irq(RX_IRQ(port), ourport); ourport->rx_claimed = 0; rx_enabled(port) = 0; } #endif }
static int imapx200_serial_startup(struct uart_port *port) { struct imapx200_uart_port *ourport = to_ourport(port); int ret; unsigned long flags; dbg("imapx200_serial_startup: port=%p (%08lx,%p)\n", port->mapbase, port->membase); // local_irq_save(flags); rx_enabled(port) = 1; // tx_enabled(port) = 1; uart_enable_irq(port, UART_RX_INT); uart_enable_irq(port, UART_ERR_INT); // uart_enable_irq(port, UART_THRE_INT); ret = request_irq(UART_IRQ(port), imapx200_serial_interrupt, IRQF_DISABLED, imapx200_serial_portname(port), ourport); if (ret != 0) { printk(KERN_ERR "cannot get irq %d\n", UART_IRQ(port)); goto err; } ourport->tx_claimed = 1; ourport->rx_claimed = 1; dbg("imapx200_serial_startup ok\n"); /* the port reset code should have done the correct * register setup for the port controls */ // local_irq_restore(flags); return ret; err: imapx200_serial_shutdown(port); return ret; }
static void imapx200_serial_shutdown(struct uart_port *port) { struct imapx200_uart_port *ourport = to_ourport(port); if (ourport->tx_claimed || ourport->rx_claimed) { free_irq(UART_IRQ(port), ourport); ourport->tx_claimed = 0; ourport->rx_claimed = 0; tx_enabled(port) = 0; rx_enabled(port) = 0; } }
void UART7IntHandler(){ UART_IRQ(&_uart[7]); }
void UART6IntHandler(){ UART_IRQ(&_uart[6]); }
void UART5IntHandler(){ UART_IRQ(&_uart[5]); }
void UART4IntHandler(){ UART_IRQ(&_uart[4]); }
void UART3IntHandler(){ UART_IRQ(&_uart[3]); }
void UART2IntHandler(){ UART_IRQ(&_uart[2]); }
void UART1IntHandler(){ UART_IRQ(&_uart[1]); }
void UART0IntHandler(){ UART_IRQ(&_uart[0]); }