]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
sparc64: skip handshake for LDC channels in RAW mode
authorJag Raman <jag.raman@oracle.com>
Fri, 23 Jun 2017 18:58:31 +0000 (14:58 -0400)
committerDavid S. Miller <davem@davemloft.net>
Sun, 25 Jun 2017 20:43:12 +0000 (13:43 -0700)
LDC channels in RAW mode does not provide any session management. No
handshake protocol is defined for LDC channels in RAW mode. It's
therefore skipped.

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>
arch/sparc/kernel/ldc.c
arch/sparc/kernel/viohs.c

index 97a5743b04e23e3b6ecf4827a8c4dd5398dbe80c..840e0b21bfe31addc817bcbbf6a8cb70d6f9f72f 100644 (file)
@@ -1347,6 +1347,14 @@ int ldc_bind(struct ldc_channel *lp)
        lp->hs_state = LDC_HS_OPEN;
        ldc_set_state(lp, LDC_STATE_BOUND);
 
+       if (lp->cfg.mode == LDC_MODE_RAW) {
+               /*
+                * There is no handshake in RAW mode, so handshake
+                * is completed.
+                */
+               lp->hs_state = LDC_HS_COMPLETE;
+       }
+
        spin_unlock_irqrestore(&lp->lock, flags);
 
        return 0;
@@ -1460,11 +1468,13 @@ void ldc_set_state(struct ldc_channel *lp, u8 state)
 
        lp->state = state;
 }
+EXPORT_SYMBOL(ldc_set_state);
 
 int ldc_mode(struct ldc_channel *lp)
 {
        return lp->cfg.mode;
 }
+EXPORT_SYMBOL(ldc_mode);
 
 int ldc_rx_reset(struct ldc_channel *lp)
 {
index 68e952a7bcdbe7736592d7467c7b2d1aceddd75c..d4f13c037a40a3b63b1e39c771c279c730b9ea31 100644 (file)
@@ -776,7 +776,11 @@ void vio_port_up(struct vio_driver_state *vio)
        }
 
        if (!err) {
-               err = ldc_connect(vio->lp);
+               if (ldc_mode(vio->lp) == LDC_MODE_RAW)
+                       ldc_set_state(vio->lp, LDC_STATE_CONNECTED);
+               else
+                       err = ldc_connect(vio->lp);
+
                if (err)
                        printk(KERN_WARNING "%s: Port %lu connect failed, "
                               "err=%d\n",