119
119
static void mn10300_serial_config_port(struct uart_port *, int);
120
120
static int mn10300_serial_verify_port(struct uart_port *,
121
121
struct serial_struct *);
122
#ifdef CONFIG_CONSOLE_POLL
123
static void mn10300_serial_poll_put_char(struct uart_port *, unsigned char);
124
static int mn10300_serial_poll_get_char(struct uart_port *);
123
127
static const struct uart_ops mn10300_serial_ops = {
124
128
.tx_empty = mn10300_serial_tx_empty,
138
142
.request_port = mn10300_serial_request_port,
139
143
.config_port = mn10300_serial_config_port,
140
144
.verify_port = mn10300_serial_verify_port,
145
#ifdef CONFIG_CONSOLE_POLL
146
.poll_put_char = mn10300_serial_poll_put_char,
147
.poll_get_char = mn10300_serial_poll_get_char,
143
151
static irqreturn_t mn10300_serial_interrupt(int irq, void *dev_id);
384
392
arch_local_irq_restore(flags);
387
static void mn10300_serial_nop(unsigned int irq)
395
static void mn10300_serial_chip_mask_ack(struct irq_data *d)
397
mn10300_serial_mask_ack(d->irq);
400
static void mn10300_serial_nop(struct irq_data *d)
391
404
static struct irq_chip mn10300_serial_pic = {
392
405
.name = "mnserial",
393
.ack = mn10300_serial_mask_ack,
394
.mask = mn10300_serial_mask_ack,
395
.mask_ack = mn10300_serial_mask_ack,
396
.unmask = mn10300_serial_nop,
397
.end = mn10300_serial_nop,
406
.irq_ack = mn10300_serial_chip_mask_ack,
407
.irq_mask = mn10300_serial_chip_mask_ack,
408
.irq_mask_ack = mn10300_serial_chip_mask_ack,
409
.irq_unmask = mn10300_serial_nop,
921
933
NUM2GxICR_LEVEL(CONFIG_MN10300_SERIAL_IRQ_LEVEL));
922
934
set_intr_level(port->tx_irq,
923
935
NUM2GxICR_LEVEL(CONFIG_MN10300_SERIAL_IRQ_LEVEL));
924
set_irq_chip(port->tm_irq, &mn10300_serial_pic);
936
irq_set_chip(port->tm_irq, &mn10300_serial_pic);
926
938
if (request_irq(port->rx_irq, mn10300_serial_interrupt,
927
939
IRQF_DISABLED, port->rx_name, port) < 0)
1631
1643
console_initcall(mn10300_serial_console_init);
1646
#ifdef CONFIG_CONSOLE_POLL
1648
* Polled character reception for the kernel debugger
1650
static int mn10300_serial_poll_get_char(struct uart_port *_port)
1652
struct mn10300_serial_port *port =
1653
container_of(_port, struct mn10300_serial_port, uart);
1657
_enter("%s", port->name);
1660
/* pull chars out of the hat */
1662
if (ix == port->rx_inp)
1663
return NO_POLL_CHAR;
1665
ch = port->rx_buffer[ix++];
1666
st = port->rx_buffer[ix++];
1668
port->rx_outp = ix & (MNSC_BUFFER_SIZE - 1);
1670
} while (st & (SC01STR_FEF | SC01STR_PEF | SC01STR_OEF));
1677
* Polled character transmission for the kernel debugger
1679
static void mn10300_serial_poll_put_char(struct uart_port *_port,
1682
struct mn10300_serial_port *port =
1683
container_of(_port, struct mn10300_serial_port, uart);
1686
/* wait for the transmitter to finish anything it might be doing (and
1687
* this includes the virtual DMA handler, so it might take a while) */
1688
while (*port->_status & (SC01STR_TBF | SC01STR_TXF))
1691
/* disable the Tx ready interrupt */
1692
intr = *port->_intr;
1693
*port->_intr = intr & ~SC01ICR_TI;
1697
*(u8 *) port->_txb = 0x0d;
1698
while (*port->_status & SC01STR_TBF)
1702
*(u8 *) port->_txb = ch;
1703
while (*port->_status & SC01STR_TBF)
1706
/* restore the Tx interrupt flag */
1707
*port->_intr = intr;
1711
#endif /* CONFIG_CONSOLE_POLL */