OK, patch as attachment. Also includes patch for Makefile: one line was doubled
and define for 331 was wrong.

Regards,
        Thomas
Signed-off-by: thomas.koerper <[email protected]>
---
Index: kernel/2.6/Makefile
===================================================================
--- kernel/2.6/Makefile	(revision 1107)
+++ kernel/2.6/Makefile	(working copy)
@@ -14,7 +14,6 @@
 export CONFIG_CAN_SJA1000=m
 export CONFIG_CAN_SJA1000_PLATFORM=m
 #export CONFIG_CAN_SJA1000_OF_PLATFORM=m
-export CONFIG_CAN_ESD_PCI=m
 export CONFIG_CAN_IXXAT_PCI=m
 export CONFIG_CAN_PEAK_PCI=m
 export CONFIG_CAN_KVASER_PCI=m
@@ -23,7 +22,7 @@
 export CONFIG_CAN_EMS_PCMCIA=m
 export CONFIG_CAN_EMS_104M=m
 export CONFIG_CAN_ESD_PCI=m
-export CONFIG_CAN_ESD_331=m
+export CONFIG_CAN_ESD_PCI331=m
 export CONFIG_CAN_PIPCAN=m
 export CONFIG_CAN_SOFTING=m
 export CONFIG_CAN_SOFTING_CS=m
Index: kernel/2.6/drivers/net/can/esd_pci331.c
===================================================================
--- kernel/2.6/drivers/net/can/esd_pci331.c	(revision 1107)
+++ kernel/2.6/drivers/net/can/esd_pci331.c	(working copy)
@@ -318,32 +318,6 @@
 	return err;
 }
 
-static int esd331_send(struct esd331_pci *board, u8 pci331net, unsigned long id,
-			int eff, int rtr, u16 dlc, u8 *data)
-{
-	struct esd331_can_msg msg;
-	int i;
-
-	memset(&msg, 0, sizeof(msg));
-
-	if (eff) {
-		msg.cmmd = ESD331_I20_EX_BCAN;
-		msg.id = cpu_to_be16((id >> 16) & 0x1fff);
-		msg.x2 = cpu_to_be16(id);
-	} else {
-		msg.cmmd = ESD331_I20_BCAN;
-		msg.id = cpu_to_be16(id);
-	}
-	msg.net = pci331net;
-	msg.len = cpu_to_be16(rtr ? dlc | ESD331_RTR_FLAG : dlc);
-
-	i = (dlc < 8) ? dlc : 8;
-	while (i--)
-		msg.data[i] = data[i];
-
-	return esd331_write(&msg, board);
-}
-
 static int esd331_write_allid(u8 net, struct esd331_pci *board)
 {
 	struct esd331_can_msg mesg;
@@ -583,6 +557,7 @@
 		case ESD331_I20_TXDONE:
 		case ESD331_I20_EX_TXDONE:
 			stats->tx_packets++;
+			stats->tx_bytes += msg.x1;
 			can_get_echo_skb(dev, 0);
 			netif_wake_queue(dev);
 			break;
@@ -693,36 +668,44 @@
 	struct net_device_stats *stats = &dev->stats;
 #endif
 	struct can_frame *cf = (struct can_frame *)skb->data;
-	int err;
+	struct esd331_can_msg msg;
+	int i;
 
-	can_put_echo_skb(skb, dev, 0);
-
 	if ((cf->can_id & CAN_EFF_FLAG) && (priv->board->eff_supp == 0)) {
-		stats->tx_errors++;
 		stats->tx_dropped++;
-		can_free_echo_skb(dev, 0);
-		err = -EOPNOTSUPP;
-		goto out;
+		kfree_skb(skb);
+		return NETDEV_TX_OK;
 	}
 
-	err = esd331_send(priv->board, priv->boards_net,
-				cf->can_id & CAN_EFF_MASK,
-				cf->can_id & CAN_EFF_FLAG,
-				cf->can_id & CAN_RTR_FLAG,
-				cf->can_dlc, cf->data);
-	if (err) {
-		stats->tx_fifo_errors++;
-		stats->tx_errors++;
-		stats->tx_dropped++;
+	memset(&msg, 0, sizeof(msg));
+	if (cf->can_id & CAN_EFF_FLAG) {
+		msg.cmmd = ESD331_I20_EX_BCAN;
+		msg.id = cpu_to_be16((cf->can_id & CAN_EFF_MASK) >> 16);
+		msg.x2 = cpu_to_be16(cf->can_id & CAN_EFF_MASK);
+	} else {
+		msg.cmmd = ESD331_I20_BCAN;
+		msg.id = cpu_to_be16(cf->can_id & CAN_EFF_MASK);
+	}
+	msg.x1 = cpu_to_be16(cf->can_dlc);
+	msg.net = priv->boards_net;
+	msg.len = cpu_to_be16((cf->can_id & CAN_RTR_FLAG) ?
+				cf->can_dlc | ESD331_RTR_FLAG : cf->can_dlc);
+
+	for (i = 0; i < cf->can_dlc; i++)
+		msg.data[i] = cf->data[i];
+
+	can_put_echo_skb(skb, dev, 0);
+	if (unlikely(esd331_write(&msg, priv->board))) {
 		can_free_echo_skb(dev, 0);
-		goto out;
+		dev_err(ND2D(dev), "Couldn't write frame to card's FIFO!\n");
+		stats->tx_dropped++;
+		return NETDEV_TX_OK;
 	}
 
 	netif_stop_queue(dev);
-	stats->tx_bytes += cf->can_dlc;
 	dev->trans_start = jiffies;
-out:
-	return err;
+
+	return NETDEV_TX_OK;
 }
 
 static int esd331_set_bittiming(struct net_device *dev)
_______________________________________________
Socketcan-core mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/socketcan-core

Reply via email to