static irqreturn_t uart_rxint(int irq, void *dev_id) // interrupt handler or interrupt service routine (ISR) // read this - http://www.makelinux.net/books/lkd2/?u=ch06lev1sec3 // static irqreturn_t intr_handler(int irq, void *dev_id, struct pt_regs *regs) { struct uart_port *port = (struct uart_port *) dev_id; struct tty_struct *tty = port->state->port.tty; // What is the use of this ? unsigned int status, data; /* ... */ do { /* ... */ /* Read data */ data = uart_getc(port); /* Normal, overrun, parity, frame error? */ status = uart_status(port); /* Dispatch to the tty layer */ tty_insert_flip_char(tty, data, status); /* ... */ } while (more_chars_to_be_read()); /* More chars */ /* ... */ tty_flip_buffer_push(tty); return IRQ_HANDLED; }
irqreturn_t usb_uart_rxint(int irq, void *dev_id) { unsigned int data, status; struct uart_port *port = (struct uart_port*)dev_id; struct tty_struct *tty = port->state->port.tty; do { data = usb_uart_getc(port); status = usb_uart_status(port); tty_insert_flip_char(tty, data, status); } while(more_chars_to_be_read()); return IRQ_HANDLED; }