]> rtime.felk.cvut.cz Git - linux-lin.git/commitdiff
Merge branch 'master' of ssh://rtime.felk.cvut.cz/lisovros/pcan_lin
authorRostislav Lisovy <lisovy@gmail.com>
Fri, 25 Nov 2011 09:36:26 +0000 (10:36 +0100)
committerRostislav Lisovy <lisovy@gmail.com>
Fri, 25 Nov 2011 09:36:26 +0000 (10:36 +0100)
1  2 
sllin/sllin.c

diff --combined sllin/sllin.c
index 64eb10b62cf9b711ad641467055a79c1d2a24396,011743ec5992d2714c6f1577f0424802487b38bb..a0bb1e513b92c4a400f7c88732b61841531adfba
@@@ -123,6 -123,7 +123,6 @@@ struct sllin 
  #define SLF_TXEVENT           3               /* Tx wake event             */
  #define SLF_MSGEVENT          4               /* CAN message to sent       */
  
 -      unsigned char           leased;
        dev_t                   line;
        struct task_struct      *kwthread;
        wait_queue_head_t       kwt_wq;
@@@ -478,10 -479,22 +478,22 @@@ int sllin_setup_msg(struct sllin *sl, i
        sl->tx_lim = SLLIN_BUFF_DATA;
  
        if ((data != NULL) && len) {
+               int i;
+               unsigned csum  = 0;
                sl->tx_lim += len;
                memcpy(sl->tx_buff + SLLIN_BUFF_DATA, data, len);
+               /* compute data parity there */
+               for (i = SLLIN_BUFF_DATA; i < sl->tx_lim; i++) {
+                       csum += sl->tx_buff[i];
+                       if (csum > 255)
+                               csum -= 255;
+               }
+               sl->tx_buff[sl->tx_lim++] = csum;
        }
-       sl->rx_lim += len;
+       if (len != 0)
+               sl->rx_lim += len + 1;
  
        return 0;
  }
@@@ -639,7 -652,7 +651,7 @@@ static void sll_sync(void
                        break;
  
                sl = netdev_priv(dev);
 -              if (sl->tty || sl->leased)
 +              if (sl->tty)
                        continue;
                if (dev->flags & IFF_UP)
                        dev_close(dev);
@@@ -813,6 -826,8 +825,6 @@@ static void sllin_close(struct tty_stru
  
        tty->disc_data = NULL;
        sl->tty = NULL;
 -      if (!sl->leased)
 -              sl->line = 0;
  
        /* Flush network side */
        unregister_netdev(sl->dev);