diff options
author | Jag Raman <jag.raman@oracle.com> | 2017-08-15 17:03:03 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-08-16 00:33:52 -0400 |
commit | 103b9b0bc9e068d5e9432ee1da526d8feabc0216 (patch) | |
tree | 7b6689612db05b3896df766d5a048fcd0a75dcad /drivers/tty/vcc.c | |
parent | f8c553354e71fbb982ff63f2f574c1658aea50a9 (diff) |
sparc64: vcc: Enable LDC event processing engine
Enable event processing engine to handle LDC events
Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
Reviewed-by: Liam Merwick <liam.merwick@oracle.com>
Reviewed-by: Shannon Nelson <shannon.nelson@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/tty/vcc.c')
-rw-r--r-- | drivers/tty/vcc.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/drivers/tty/vcc.c b/drivers/tty/vcc.c index 27566d5f7df0..91f663d207b6 100644 --- a/drivers/tty/vcc.c +++ b/drivers/tty/vcc.c | |||
@@ -437,8 +437,42 @@ done: | |||
437 | vcc_put(port, false); | 437 | vcc_put(port, false); |
438 | } | 438 | } |
439 | 439 | ||
440 | /** | ||
441 | * vcc_event() - LDC event processing engine | ||
442 | * @arg: VCC private data | ||
443 | * @event: LDC event | ||
444 | * | ||
445 | * Handles LDC events for VCC | ||
446 | */ | ||
440 | static void vcc_event(void *arg, int event) | 447 | static void vcc_event(void *arg, int event) |
441 | { | 448 | { |
449 | struct vio_driver_state *vio; | ||
450 | struct vcc_port *port; | ||
451 | unsigned long flags; | ||
452 | int rv; | ||
453 | |||
454 | port = arg; | ||
455 | vio = &port->vio; | ||
456 | |||
457 | spin_lock_irqsave(&port->lock, flags); | ||
458 | |||
459 | switch (event) { | ||
460 | case LDC_EVENT_RESET: | ||
461 | case LDC_EVENT_UP: | ||
462 | vio_link_state_change(vio, event); | ||
463 | break; | ||
464 | |||
465 | case LDC_EVENT_DATA_READY: | ||
466 | rv = vcc_ldc_read(port); | ||
467 | if (rv == -ECONNRESET) | ||
468 | vio_conn_reset(vio); | ||
469 | break; | ||
470 | |||
471 | default: | ||
472 | pr_err("VCC: unexpected LDC event(%d)\n", event); | ||
473 | } | ||
474 | |||
475 | spin_unlock_irqrestore(&port->lock, flags); | ||
442 | } | 476 | } |
443 | 477 | ||
444 | static struct ldc_channel_config vcc_ldc_cfg = { | 478 | static struct ldc_channel_config vcc_ldc_cfg = { |