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>
This commit is contained in:
Jag Raman 2017-08-15 17:03:03 -04:00 committed by David S. Miller
parent f8c553354e
commit 103b9b0bc9
1 changed files with 34 additions and 0 deletions

View File

@ -437,8 +437,42 @@ static void vcc_tx_timer(unsigned long index)
vcc_put(port, false); vcc_put(port, false);
} }
/**
* vcc_event() - LDC event processing engine
* @arg: VCC private data
* @event: LDC event
*
* Handles LDC events for VCC
*/
static void vcc_event(void *arg, int event) static void vcc_event(void *arg, int event)
{ {
struct vio_driver_state *vio;
struct vcc_port *port;
unsigned long flags;
int rv;
port = arg;
vio = &port->vio;
spin_lock_irqsave(&port->lock, flags);
switch (event) {
case LDC_EVENT_RESET:
case LDC_EVENT_UP:
vio_link_state_change(vio, event);
break;
case LDC_EVENT_DATA_READY:
rv = vcc_ldc_read(port);
if (rv == -ECONNRESET)
vio_conn_reset(vio);
break;
default:
pr_err("VCC: unexpected LDC event(%d)\n", event);
}
spin_unlock_irqrestore(&port->lock, flags);
} }
static struct ldc_channel_config vcc_ldc_cfg = { static struct ldc_channel_config vcc_ldc_cfg = {