aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/serial/sunzilog.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/serial/sunzilog.c')
-rw-r--r--drivers/serial/sunzilog.c31
1 files changed, 14 insertions, 17 deletions
diff --git a/drivers/serial/sunzilog.c b/drivers/serial/sunzilog.c
index 0da3ebfff82d..b11f6dea2704 100644
--- a/drivers/serial/sunzilog.c
+++ b/drivers/serial/sunzilog.c
@@ -277,14 +277,13 @@ static void sunzilog_change_mouse_baud(struct uart_sunzilog_port *up)
277} 277}
278 278
279static void sunzilog_kbdms_receive_chars(struct uart_sunzilog_port *up, 279static void sunzilog_kbdms_receive_chars(struct uart_sunzilog_port *up,
280 unsigned char ch, int is_break, 280 unsigned char ch, int is_break)
281 struct pt_regs *regs)
282{ 281{
283 if (ZS_IS_KEYB(up)) { 282 if (ZS_IS_KEYB(up)) {
284 /* Stop-A is handled by drivers/char/keyboard.c now. */ 283 /* Stop-A is handled by drivers/char/keyboard.c now. */
285#ifdef CONFIG_SERIO 284#ifdef CONFIG_SERIO
286 if (up->serio_open) 285 if (up->serio_open)
287 serio_interrupt(&up->serio, ch, 0, regs); 286 serio_interrupt(&up->serio, ch, 0);
288#endif 287#endif
289 } else if (ZS_IS_MOUSE(up)) { 288 } else if (ZS_IS_MOUSE(up)) {
290 int ret = suncore_mouse_baud_detection(ch, is_break); 289 int ret = suncore_mouse_baud_detection(ch, is_break);
@@ -299,7 +298,7 @@ static void sunzilog_kbdms_receive_chars(struct uart_sunzilog_port *up,
299 case 0: 298 case 0:
300#ifdef CONFIG_SERIO 299#ifdef CONFIG_SERIO
301 if (up->serio_open) 300 if (up->serio_open)
302 serio_interrupt(&up->serio, ch, 0, regs); 301 serio_interrupt(&up->serio, ch, 0);
303#endif 302#endif
304 break; 303 break;
305 }; 304 };
@@ -308,8 +307,7 @@ static void sunzilog_kbdms_receive_chars(struct uart_sunzilog_port *up,
308 307
309static struct tty_struct * 308static struct tty_struct *
310sunzilog_receive_chars(struct uart_sunzilog_port *up, 309sunzilog_receive_chars(struct uart_sunzilog_port *up,
311 struct zilog_channel __iomem *channel, 310 struct zilog_channel __iomem *channel)
312 struct pt_regs *regs)
313{ 311{
314 struct tty_struct *tty; 312 struct tty_struct *tty;
315 unsigned char ch, r1, flag; 313 unsigned char ch, r1, flag;
@@ -346,12 +344,12 @@ sunzilog_receive_chars(struct uart_sunzilog_port *up,
346 ch &= up->parity_mask; 344 ch &= up->parity_mask;
347 345
348 if (unlikely(ZS_IS_KEYB(up)) || unlikely(ZS_IS_MOUSE(up))) { 346 if (unlikely(ZS_IS_KEYB(up)) || unlikely(ZS_IS_MOUSE(up))) {
349 sunzilog_kbdms_receive_chars(up, ch, 0, regs); 347 sunzilog_kbdms_receive_chars(up, ch, 0);
350 continue; 348 continue;
351 } 349 }
352 350
353 if (tty == NULL) { 351 if (tty == NULL) {
354 uart_handle_sysrq_char(&up->port, ch, regs); 352 uart_handle_sysrq_char(&up->port, ch);
355 continue; 353 continue;
356 } 354 }
357 355
@@ -379,7 +377,7 @@ sunzilog_receive_chars(struct uart_sunzilog_port *up,
379 else if (r1 & CRC_ERR) 377 else if (r1 & CRC_ERR)
380 flag = TTY_FRAME; 378 flag = TTY_FRAME;
381 } 379 }
382 if (uart_handle_sysrq_char(&up->port, ch, regs)) 380 if (uart_handle_sysrq_char(&up->port, ch))
383 continue; 381 continue;
384 382
385 if (up->port.ignore_status_mask == 0xff || 383 if (up->port.ignore_status_mask == 0xff ||
@@ -394,8 +392,7 @@ sunzilog_receive_chars(struct uart_sunzilog_port *up,
394} 392}
395 393
396static void sunzilog_status_handle(struct uart_sunzilog_port *up, 394static void sunzilog_status_handle(struct uart_sunzilog_port *up,
397 struct zilog_channel __iomem *channel, 395 struct zilog_channel __iomem *channel)
398 struct pt_regs *regs)
399{ 396{
400 unsigned char status; 397 unsigned char status;
401 398
@@ -408,7 +405,7 @@ static void sunzilog_status_handle(struct uart_sunzilog_port *up,
408 405
409 if (status & BRK_ABRT) { 406 if (status & BRK_ABRT) {
410 if (ZS_IS_MOUSE(up)) 407 if (ZS_IS_MOUSE(up))
411 sunzilog_kbdms_receive_chars(up, 0, 1, regs); 408 sunzilog_kbdms_receive_chars(up, 0, 1);
412 if (ZS_IS_CONS(up)) { 409 if (ZS_IS_CONS(up)) {
413 /* Wait for BREAK to deassert to avoid potentially 410 /* Wait for BREAK to deassert to avoid potentially
414 * confusing the PROM. 411 * confusing the PROM.
@@ -517,7 +514,7 @@ ack_tx_int:
517 ZS_WSYNC(channel); 514 ZS_WSYNC(channel);
518} 515}
519 516
520static irqreturn_t sunzilog_interrupt(int irq, void *dev_id, struct pt_regs *regs) 517static irqreturn_t sunzilog_interrupt(int irq, void *dev_id)
521{ 518{
522 struct uart_sunzilog_port *up = dev_id; 519 struct uart_sunzilog_port *up = dev_id;
523 520
@@ -538,9 +535,9 @@ static irqreturn_t sunzilog_interrupt(int irq, void *dev_id, struct pt_regs *reg
538 ZS_WSYNC(channel); 535 ZS_WSYNC(channel);
539 536
540 if (r3 & CHARxIP) 537 if (r3 & CHARxIP)
541 tty = sunzilog_receive_chars(up, channel, regs); 538 tty = sunzilog_receive_chars(up, channel);
542 if (r3 & CHAEXT) 539 if (r3 & CHAEXT)
543 sunzilog_status_handle(up, channel, regs); 540 sunzilog_status_handle(up, channel);
544 if (r3 & CHATxIP) 541 if (r3 & CHATxIP)
545 sunzilog_transmit_chars(up, channel); 542 sunzilog_transmit_chars(up, channel);
546 } 543 }
@@ -561,9 +558,9 @@ static irqreturn_t sunzilog_interrupt(int irq, void *dev_id, struct pt_regs *reg
561 ZS_WSYNC(channel); 558 ZS_WSYNC(channel);
562 559
563 if (r3 & CHBRxIP) 560 if (r3 & CHBRxIP)
564 tty = sunzilog_receive_chars(up, channel, regs); 561 tty = sunzilog_receive_chars(up, channel);
565 if (r3 & CHBEXT) 562 if (r3 & CHBEXT)
566 sunzilog_status_handle(up, channel, regs); 563 sunzilog_status_handle(up, channel);
567 if (r3 & CHBTxIP) 564 if (r3 & CHBTxIP)
568 sunzilog_transmit_chars(up, channel); 565 sunzilog_transmit_chars(up, channel);
569 } 566 }