Hi Jan,

I have two more patches in my quilt stack:

  2007-02-18  Wolfgang Grandegger  <[EMAIL PROTECTED]>

  * ksrc/drivers/can/rtcan_raw.c, ksrc/drivers/can/rtcan_socket.h:  add
    prefix RTCAN_ to TIMESTAMP_SIZE, HAS_TIMESTAMP and HAS_NO_TIMESTAMP
    to avoid name clashes, e.g. TIMESTAMP_SIZE is used by the kernel
    starting with 2.6.20.

  * include/rtdm/rtcan.h: add "__attribute__ ((aligned(8)))" to the
    data[8] element of the struct can_frame.

  2007-02-18  Wolfgang Grandegger  <[EMAIL PROTECTED]>

  * include/rtdm/rtcan.h
    ksrc/drivers/can/Config.in,
    ksrc/drivers/can/Kconfig,
    ksrc/drivers/can/rtcan_dev.h,
    ksrc/drivers/can/rtcan_module.c,
    ksrc/drivers/can/rtcan_raw.c,
    ksrc/drivers/can/rtcan_raw.h,
    ksrc/drivers/can/rtcan_socket.c,
    ksrc/drivers/can/rtcan_socket.h,
    ksrc/drivers/can/rtcan_socket.h,
    ksrc/drivers/can/rtcan_virt.c,
    ksrc/drivers/can/sja1000/rtcan_sja1000.c,
    ksrc/drivers/can/mscan/rtcan_mscan.c,
    src/utils/can/rtcansend.c: The socket option CAN_RAW_TX_LOOPBACK
    has been renamed to CAN_RAW_LOOPBACK to be compatible with the
    Socket-CAN implementation. Furthermore, all lower and upper case
    strings "tx_loopback" have been replaced with "loopback" (to
    shorten names).

The first one also fixes the alignment issue discussed on the Socket-CAN mailing list.

Any comments or objections?

Wolfgang.
Index: quilt/xenomai/ksrc/drivers/can/rtcan_raw.c
===================================================================
--- quilt.orig/xenomai/ksrc/drivers/can/rtcan_raw.c
+++ quilt/xenomai/ksrc/drivers/can/rtcan_raw.c
@@ -86,10 +86,10 @@ static void rtcan_rcv_deliver(struct rtc
     cpy_size = skb->rb_frame_size;
     /* Check if socket wants to receive a timestamp */
     if (test_bit(RTCAN_GET_TIMESTAMP, &context->context_flags)) {
-	cpy_size += TIMESTAMP_SIZE;
-	frame->can_dlc |= HAS_TIMESTAMP;
+	cpy_size += RTCAN_TIMESTAMP_SIZE;
+	frame->can_dlc |= RTCAN_HAS_TIMESTAMP;
     } else
-	frame->can_dlc &= HAS_NO_TIMESTAMP;
+	frame->can_dlc &= RTCAN_HAS_NO_TIMESTAMP;
     
     /* Calculate free size in the ring buffer */
     size_free = sock->recv_head - sock->recv_tail;
@@ -140,7 +140,7 @@ void rtcan_rcv(struct rtcan_device *dev,
 
     /* Copy timestamp to skb */
     memcpy((void *)&skb->rb_frame + skb->rb_frame_size,
-	   &timestamp, TIMESTAMP_SIZE);
+	   &timestamp, RTCAN_TIMESTAMP_SIZE);
 
     if ((frame->can_id & CAN_ERR_FLAG)) {
 	dev->err_count++;
@@ -192,7 +192,7 @@ void rtcan_loopback(struct rtcan_device 
     struct rtcan_rb_frame *frame = &dev->tx_skb.rb_frame;
 
     memcpy((void *)&dev->tx_skb.rb_frame + dev->tx_skb.rb_frame_size,
-	   &timestamp, TIMESTAMP_SIZE);
+	   &timestamp, RTCAN_TIMESTAMP_SIZE);
 
     while (recv_listener != NULL) {
 	dev->rx_count++;
@@ -675,7 +675,7 @@ ssize_t rtcan_raw_recvmsg(struct rtdm_de
     can_dlc = recv_buf[recv_buf_index];
     recv_buf_index = (recv_buf_index + 1) & (RTCAN_RXBUF_SIZE - 1);
 
-    frame.can_dlc = can_dlc & HAS_NO_TIMESTAMP;
+    frame.can_dlc = can_dlc & RTCAN_HAS_NO_TIMESTAMP;
     payload_size = (frame.can_dlc > 8) ? 8 : frame.can_dlc;
 
 
@@ -688,9 +688,9 @@ ssize_t rtcan_raw_recvmsg(struct rtdm_de
 
 
     /* Is a timestamp available and is the caller actually interested? */
-    if (msg->msg_controllen && (can_dlc & HAS_TIMESTAMP)) {
+    if (msg->msg_controllen && (can_dlc & RTCAN_HAS_TIMESTAMP)) {
         /* Copy timestamp */
-        MEMCPY_FROM_RING_BUF(&timestamp, TIMESTAMP_SIZE);
+        MEMCPY_FROM_RING_BUF(&timestamp, RTCAN_TIMESTAMP_SIZE);
     }
 
 
@@ -744,12 +744,12 @@ ssize_t rtcan_raw_recvmsg(struct rtdm_de
 
         /* Copy timestamp if existent and wanted */
         if (msg->msg_controllen) {
-            if (can_dlc & HAS_TIMESTAMP) {
+            if (can_dlc & RTCAN_HAS_TIMESTAMP) {
                 if (rtdm_copy_to_user(user_info, msg->msg_control,
-                                      &timestamp, TIMESTAMP_SIZE))
+                                      &timestamp, RTCAN_TIMESTAMP_SIZE))
                     return -EFAULT;
 
-                msg->msg_controllen = TIMESTAMP_SIZE;
+                msg->msg_controllen = RTCAN_TIMESTAMP_SIZE;
             } else
                 msg->msg_controllen = 0;
         }
@@ -771,9 +771,9 @@ ssize_t rtcan_raw_recvmsg(struct rtdm_de
 
         /* Copy timestamp if existent and wanted */
         if (msg->msg_controllen) {
-            if (can_dlc & HAS_TIMESTAMP) {
-                memcpy(msg->msg_control, &timestamp, TIMESTAMP_SIZE);
-                msg->msg_controllen = TIMESTAMP_SIZE;
+            if (can_dlc & RTCAN_HAS_TIMESTAMP) {
+                memcpy(msg->msg_control, &timestamp, RTCAN_TIMESTAMP_SIZE);
+                msg->msg_controllen = RTCAN_TIMESTAMP_SIZE;
             } else
                 msg->msg_controllen = 0;
         }
Index: quilt/xenomai/ksrc/drivers/can/rtcan_socket.h
===================================================================
--- quilt.orig/xenomai/ksrc/drivers/can/rtcan_socket.h
+++ quilt/xenomai/ksrc/drivers/can/rtcan_socket.h
@@ -38,18 +38,17 @@
 
 
 /* This MUST BE 2^N */
-#define RTCAN_RXBUF_SIZE    CONFIG_XENO_DRIVERS_CAN_RXBUF_SIZE
+#define RTCAN_RXBUF_SIZE          CONFIG_XENO_DRIVERS_CAN_RXBUF_SIZE
 
 /* Size of timestamp */
-#define TIMESTAMP_SIZE      sizeof(nanosecs_abs_t)
-
+#define RTCAN_TIMESTAMP_SIZE      sizeof(nanosecs_abs_t)
 
 /* Bit in the can_dlc member of struct ring_buffer_frame used to indicate
  * whether a frame has got a timestamp or not */
-#define HAS_TIMESTAMP       0x80
+#define RTCAN_HAS_TIMESTAMP       0x80
 
-/* Mask for clearing bit HAS_TIMESTAMP */
-#define HAS_NO_TIMESTAMP    0x7F
+/* Mask for clearing bit RTCAN_HAS_TIMESTAMP */
+#define RTCAN_HAS_NO_TIMESTAMP    0x7F
 
 #define RTCAN_SOCK_UNBOUND        -1
 #define RTCAN_FLIST_NO_FILTER     (void *)-1
@@ -75,7 +74,7 @@ struct rtcan_rb_frame {
     unsigned char       can_ifindex;
 
     /* DLC (between 0 and 15) and mark if frame has got a timestamp. The
-     * existence of a timestamp is indicated by the HAS_TIMESTAMP 
+     * existence of a timestamp is indicated by the RTCAN_HAS_TIMESTAMP
      * bit. */
     unsigned char       can_dlc;
 
@@ -83,7 +82,7 @@ struct rtcan_rb_frame {
     uint8_t             data[8];
 
     /* High precision timestamp indicating when the frame was received.
-     * Exists when HAS_TIMESTAMP bit in can_dlc is set. */
+     * Exists when RTCAN_HAS_TIMESTAMP bit in can_dlc is set. */
     nanosecs_abs_t      timestamp;
 
 } __attribute__ ((packed));
@@ -91,7 +90,7 @@ struct rtcan_rb_frame {
 
 /* Size of struct rtcan_rb_frame without any data bytes and timestamp */
 #define EMPTY_RB_FRAME_SIZE \
-    sizeof(struct rtcan_rb_frame) - 8 - TIMESTAMP_SIZE
+    sizeof(struct rtcan_rb_frame) - 8 - RTCAN_TIMESTAMP_SIZE
 
 
 /*
Index: quilt/xenomai/ChangeLog
===================================================================
--- quilt.orig/xenomai/ChangeLog
+++ quilt/xenomai/ChangeLog
@@ -1,5 +1,15 @@
 2007-02-18  Wolfgang Grandegger  <[EMAIL PROTECTED]>
 
+	* ksrc/drivers/can/rtcan_raw.c, ksrc/drivers/can/rtcan_socket.h: add
+	prefix RTCAN_ to TIMESTAMP_SIZE, HAS_TIMESTAMP and HAS_NO_TIMESTAMP
+	to avoid name clashes, e.g. TIMESTAMP_SIZE is used by the kernel
+	starting with 2.6.20.
+
+	* include/rtdm/rtcan.h: add "__attribute__ ((aligned(8)))" to the
+	data[8] element of the struct can_frame.
+
+2007-02-18  Wolfgang Grandegger  <[EMAIL PROTECTED]>
+
 	* include/rtdm/rtcan.h
 	ksrc/drivers/can/Config.in,
 	ksrc/drivers/can/Kconfig,
Index: quilt/xenomai/include/rtdm/rtcan.h
===================================================================
--- quilt.orig/xenomai/include/rtdm/rtcan.h
+++ quilt/xenomai/include/rtdm/rtcan.h
@@ -503,7 +503,7 @@ typedef struct can_frame {
 
     /** CAN ID of the frame
      *
-     *  See @ref CAN_xxx_FLAG "CAN ID flags" for special bits. 
+     *  See @ref CAN_xxx_FLAG "CAN ID flags" for special bits.
      */
     can_id_t     can_id;
 
@@ -511,7 +511,7 @@ typedef struct can_frame {
     uint8_t      can_dlc;
 
     /** Payload data bytes */
-    uint8_t      data[8];
+    uint8_t      data[8] __attribute__ ((aligned(8)));
 } can_frame_t;
 
 
Index: quilt/xenomai/include/rtdm/rtcan.h
===================================================================
--- quilt.orig/xenomai/include/rtdm/rtcan.h
+++ quilt/xenomai/include/rtdm/rtcan.h
@@ -123,7 +123,7 @@
  * - Level @b SOL_CAN_RAW : CAN RAW protocol (see @ref CAN_PROTO_RAW)
  *   - Option @ref CAN_RAW_FILTER : CAN filter list
  *   - Option @ref CAN_RAW_ERR_FILTER : CAN error mask
- *   - Option @ref CAN_RAW_TX_LOOPBACK : CAN TX loopback to local sockets
+ *   - Option @ref CAN_RAW_LOOPBACK : CAN TX loopback to local sockets
  *   .
  * .
  * @n
@@ -612,7 +612,7 @@ typedef struct can_frame {
  * @n
  * @param [in] level @b SOL_CAN_RAW
  *
- * @param [in] optname @b CAN_RAW_TX_LOOPBACK
+ * @param [in] optname @b CAN_RAW_LOOPBACK
  *
  * @param [in] optval Pointer to integer value.
  *
@@ -626,7 +626,7 @@ typedef struct can_frame {
  * - -EINVAL (Invalid length "optlen")
  * - -EOPNOTSUPP (not supported, check RT-Socket-CAN kernel parameters).
  */
-#define CAN_RAW_TX_LOOPBACK  0x3
+#define CAN_RAW_LOOPBACK  0x3
 
 /** @} */
 
Index: quilt/xenomai/ksrc/drivers/can/Config.in
===================================================================
--- quilt.orig/xenomai/ksrc/drivers/can/Config.in
+++ quilt/xenomai/ksrc/drivers/can/Config.in
@@ -9,7 +9,7 @@ dep_tristate 'RT-Socket-CAN, CAN raw soc
 
 if [ "$CONFIG_XENO_DRIVERS_CAN" != "n" ]; then 
    bool 'Enable debug output' CONFIG_XENO_DRIVERS_CAN_DEBUG
-   bool 'Enable TX loopback to local sockets' CONFIG_XENO_DRIVERS_CAN_TX_LOOPBACK
+   bool 'Enable TX loopback to local sockets' CONFIG_XENO_DRIVERS_CAN_LOOPBACK
    int 'Size of receive ring buffers (must be 2^N)' CONFIG_XENO_DRIVERS_CAN_RXBUF_SIZE 1024
    int 'Maximum number of devices' CONFIG_XENO_DRIVERS_CAN_MAX_DEVICES 4
    int 'Maximum number of receive filters per device' CONFIG_XENO_DRIVERS_CAN_MAX_RECEIVERS 16
Index: quilt/xenomai/ksrc/drivers/can/Kconfig
===================================================================
--- quilt.orig/xenomai/ksrc/drivers/can/Kconfig
+++ quilt/xenomai/ksrc/drivers/can/Kconfig
@@ -18,7 +18,7 @@ config XENO_DRIVERS_CAN_DEBUG
 	getting started and analysing potential problems. For production
 	purposes, it should be switched off (for the sake of latency).
 
-config XENO_DRIVERS_CAN_TX_LOOPBACK
+config XENO_DRIVERS_CAN_LOOPBACK
 	depends on XENO_DRIVERS_CAN
 	bool "Enable TX loopback to local sockets"
 	default n
Index: quilt/xenomai/ksrc/drivers/can/mscan/rtcan_mscan.c
===================================================================
--- quilt.orig/xenomai/ksrc/drivers/can/mscan/rtcan_mscan.c
+++ quilt/xenomai/ksrc/drivers/can/mscan/rtcan_mscan.c
@@ -251,7 +251,7 @@ static int rtcan_mscan_interrupt(rtdm_ir
 	/* Wake up a sender */
 	rtdm_sem_up(&dev->tx_sem);
 
-	if (rtcan_tx_loopback_pending(dev)) {
+	if (rtcan_loopback_pending(dev)) {
 
 	    if (recv_lock_free) {
 		recv_lock_free = 0;
@@ -259,7 +259,7 @@ static int rtcan_mscan_interrupt(rtdm_ir
 		rtdm_lock_get(&rtcan_socket_lock);
 	    }
 
-	    rtcan_tx_loopback(dev);
+	    rtcan_loopback(dev);
 	}
     }
 
Index: quilt/xenomai/ksrc/drivers/can/rtcan_dev.h
===================================================================
--- quilt.orig/xenomai/ksrc/drivers/can/rtcan_dev.h
+++ quilt/xenomai/ksrc/drivers/can/rtcan_dev.h
@@ -142,10 +142,10 @@ struct rtcan_device {
 #ifdef CONFIG_PROC_FS
     struct proc_dir_entry *proc_root;
 #endif
-#ifdef CONFIG_XENO_DRIVERS_CAN_TX_LOOPBACK
+#ifdef CONFIG_XENO_DRIVERS_CAN_LOOPBACK
     struct rtcan_skb tx_skb;
     struct rtcan_socket *tx_socket;
-#endif /* CONFIG_XENO_DRIVERS_CAN_TX_LOOPBACK */
+#endif /* CONFIG_XENO_DRIVERS_CAN_LOOPBACK */
 };
 
 
Index: quilt/xenomai/ksrc/drivers/can/rtcan_module.c
===================================================================
--- quilt.orig/xenomai/ksrc/drivers/can/rtcan_module.c
+++ quilt/xenomai/ksrc/drivers/can/rtcan_module.c
@@ -200,7 +200,7 @@ static int rtcan_read_proc_sockets(char 
 			      context->fd, name, sock->flistlen,
 			      sock->err_mask, rx_timeout, tx_timeout,
 			      sock->rx_buf_full,
-			      rtcan_tx_loopback_enabled(sock)))
+			      rtcan_loopback_enabled(sock)))
 	    break;
     }
 
Index: quilt/xenomai/ksrc/drivers/can/rtcan_raw.c
===================================================================
--- quilt.orig/xenomai/ksrc/drivers/can/rtcan_raw.c
+++ quilt/xenomai/ksrc/drivers/can/rtcan_raw.c
@@ -163,7 +163,7 @@ void rtcan_rcv(struct rtcan_device *dev,
     }
 }
 
-#ifdef CONFIG_XENO_DRIVERS_CAN_TX_LOOPBACK
+#ifdef CONFIG_XENO_DRIVERS_CAN_LOOPBACK
 
 void rtcan_tx_push(struct rtcan_device *dev, struct rtcan_socket *sock,
 		   can_frame_t *frame)
@@ -184,7 +184,7 @@ void rtcan_tx_push(struct rtcan_device *
     dev->tx_socket = sock;
 }
 
-void rtcan_tx_loopback(struct rtcan_device *dev)
+void rtcan_loopback(struct rtcan_device *dev)
 {
     nanosecs_abs_t timestamp = rtdm_clock_read();
     /* Entry in reception list, begin with head */
@@ -206,9 +206,9 @@ void rtcan_tx_loopback(struct rtcan_devi
     dev->tx_socket = NULL;
 }
 
-EXPORT_SYMBOL_GPL(rtcan_tx_loopback);
+EXPORT_SYMBOL_GPL(rtcan_loopback);
 
-#endif /* CONFIG_XENO_DRIVERS_CAN_TX_LOOPBACK */
+#endif /* CONFIG_XENO_DRIVERS_CAN_LOOPBACK */
 
 
 int rtcan_raw_socket(struct rtdm_dev_context *context,
@@ -386,7 +386,7 @@ static int rtcan_raw_setsockopt(struct r
 
 	break;
 
-    case CAN_RAW_TX_LOOPBACK:
+    case CAN_RAW_LOOPBACK:
 
 	if (so->optlen != sizeof(int))
 	    return -EINVAL;
@@ -398,8 +398,8 @@ static int rtcan_raw_setsockopt(struct r
 	} else
 	    memcpy(&val, so->optval, so->optlen);
 
-#ifdef CONFIG_XENO_DRIVERS_CAN_TX_LOOPBACK
-	sock->tx_loopback = val;
+#ifdef CONFIG_XENO_DRIVERS_CAN_LOOPBACK
+	sock->loopback = val;
 #else
 	if (val)
 	    return -EOPNOTSUPP;
@@ -960,7 +960,7 @@ ssize_t rtcan_raw_sendmsg(struct rtdm_de
 
 
     /* Push message onto stack for loopback when TX done */
-    if (rtcan_tx_loopback_enabled(sock))
+    if (rtcan_loopback_enabled(sock))
 	rtcan_tx_push(dev, sock, frame);
 
     rtdm_lock_get_irqsave(&dev->device_lock, lock_ctx);
Index: quilt/xenomai/ksrc/drivers/can/rtcan_raw.h
===================================================================
--- quilt.orig/xenomai/ksrc/drivers/can/rtcan_raw.h
+++ quilt/xenomai/ksrc/drivers/can/rtcan_raw.h
@@ -32,14 +32,14 @@ void rtcan_raw_remove_filter(struct rtca
 
 void rtcan_rcv(struct rtcan_device *rtcandev, struct rtcan_skb *skb);
 
-void rtcan_tx_loopback(struct rtcan_device *rtcandev);
-#ifdef CONFIG_XENO_DRIVERS_CAN_TX_LOOPBACK
-#define rtcan_tx_loopback_enabled(sock) (sock->tx_loopback)
-#define rtcan_tx_loopback_pending(dev) (dev->tx_socket)
-#else /* !CONFIG_XENO_DRIVERS_CAN_TX_LOOPBACK */
-#define rtcan_tx_loopback_enabled(sock) (0)
-#define rtcan_tx_loopback_pending(dev) (0)
-#endif /* CONFIG_XENO_DRIVERS_CAN_TX_LOOPBACK */
+void rtcan_loopback(struct rtcan_device *rtcandev);
+#ifdef CONFIG_XENO_DRIVERS_CAN_LOOPBACK
+#define rtcan_loopback_enabled(sock) (sock->loopback)
+#define rtcan_loopback_pending(dev) (dev->tx_socket)
+#else /* !CONFIG_XENO_DRIVERS_CAN_LOOPBACK */
+#define rtcan_loopback_enabled(sock) (0)
+#define rtcan_loopback_pending(dev) (0)
+#endif /* CONFIG_XENO_DRIVERS_CAN_LOOPBACK */
 
 int __init rtcan_raw_proto_register(void);
 void __exit rtcan_raw_proto_unregister(void);
Index: quilt/xenomai/ksrc/drivers/can/rtcan_socket.c
===================================================================
--- quilt.orig/xenomai/ksrc/drivers/can/rtcan_socket.c
+++ quilt/xenomai/ksrc/drivers/can/rtcan_socket.c
@@ -48,8 +48,8 @@ void rtcan_socket_init(struct rtdm_dev_c
     sock->flist = NULL;
     sock->err_mask = 0;
     sock->rx_buf_full = 0;
-#ifdef CONFIG_XENO_DRIVERS_CAN_TX_LOOPBACK
-    sock->tx_loopback = 1;
+#ifdef CONFIG_XENO_DRIVERS_CAN_LOOPBACK
+    sock->loopback = 1;
 #endif
 
     sock->tx_timeout = RTDM_TIMEOUT_INFINITE;
Index: quilt/xenomai/ksrc/drivers/can/rtcan_socket.h
===================================================================
--- quilt.orig/xenomai/ksrc/drivers/can/rtcan_socket.h
+++ quilt/xenomai/ksrc/drivers/can/rtcan_socket.h
@@ -173,8 +173,8 @@ struct rtcan_socket {
 
     struct rtcan_filter_list *flist;
 
-#ifdef CONFIG_XENO_DRIVERS_CAN_TX_LOOPBACK
-    int tx_loopback;
+#ifdef CONFIG_XENO_DRIVERS_CAN_LOOPBACK
+    int loopback;
 #endif
 };
 
Index: quilt/xenomai/ksrc/drivers/can/rtcan_virt.c
===================================================================
--- quilt.orig/xenomai/ksrc/drivers/can/rtcan_virt.c
+++ quilt/xenomai/ksrc/drivers/can/rtcan_virt.c
@@ -78,8 +78,8 @@ static int rtcan_virt_start_xmit(struct 
 			if (tx_dev != rx_dev) {
 				rx_frame->can_ifindex = rx_dev->ifindex;
 				rtcan_rcv(rx_dev, &skb);
-			} else if (rtcan_tx_loopback_pending(tx_dev))
-				rtcan_tx_loopback(tx_dev);
+			} else if (rtcan_loopback_pending(tx_dev))
+				rtcan_loopback(tx_dev);
 		}
 	}
 	rtdm_lock_put(&rtcan_socket_lock);
Index: quilt/xenomai/ksrc/drivers/can/sja1000/rtcan_sja1000.c
===================================================================
--- quilt.orig/xenomai/ksrc/drivers/can/sja1000/rtcan_sja1000.c
+++ quilt/xenomai/ksrc/drivers/can/sja1000/rtcan_sja1000.c
@@ -312,7 +312,7 @@ static int rtcan_sja_interrupt(rtdm_irq_
             /* Wake up a sender */
             rtdm_sem_up(&dev->tx_sem);
 
-	    if (rtcan_tx_loopback_pending(dev)) {
+	    if (rtcan_loopback_pending(dev)) {
 
 		if (recv_lock_free) {
 		    recv_lock_free = 0;
@@ -320,7 +320,7 @@ static int rtcan_sja_interrupt(rtdm_irq_
 		    rtdm_lock_get(&rtcan_socket_lock);
 		}
 
-		rtcan_tx_loopback(dev);
+		rtcan_loopback(dev);
 	    }
 	}
 
Index: quilt/xenomai/src/utils/can/rtcansend.c
===================================================================
--- quilt.orig/xenomai/src/utils/can/rtcansend.c
+++ quilt/xenomai/src/utils/can/rtcansend.c
@@ -28,7 +28,7 @@ static void print_usage(char *prg)
 	    " -d, --delay=MS        delay in ms (default = 1ms)\n"
 	    " -s, --send            use send instead of sendto\n"
 	    " -t, --timeout=MS      timeout in ms\n"
-	    " -T, --tx-loopback=0|1 switch TX loopback off or on\n"
+	    " -L, --loopback=0|1    switch local loopback off or on\n"
 	    " -v, --verbose         be verbose\n"
 	    " -p, --print=MODULO    print every MODULO message\n"
 	    " -h, --help            this help\n",
@@ -40,7 +40,7 @@ RT_TASK rt_task_desc;
 
 static int s=-1, dlc=0, rtr=0, extended=0, verbose=0, loops=1;
 static SRTIME delay=1000000;
-static int count=0, print=1, use_send=0, tx_loopback=-1;
+static int count=0, print=1, use_send=0, loopback=-1;
 static nanosecs_rel_t timeout = 0;
 static struct can_frame frame;
 static struct sockaddr_can to_addr;
@@ -81,7 +81,7 @@ void rt_task(void)
         rt_task_sleep(rt_timer_ns2ticks(delay));
 	if (count)
 	    memcpy(&frame.data[0], &i, sizeof(i));
-	/* Note: sendto avoids the definiton of a receive filter list */ 
+	/* Note: sendto avoids the definiton of a receive filter list */
 	if (use_send)
 	    ret = rt_dev_send(s, (void *)&frame, sizeof(can_frame_t), 0);
 	else
@@ -136,7 +136,7 @@ int main(int argc, char **argv)
 	{ "delay", required_argument, 0, 'd'},
 	{ "send", no_argument, 0, 's'},
 	{ "timeout", required_argument, 0, 't'},
-	{ "tx-loopbcak", required_argument, 0, 'T'},
+	{ "loopback", required_argument, 0, 'L'},
 	{ 0, 0, 0, 0},
     };
 
@@ -147,7 +147,7 @@ int main(int argc, char **argv)
 
     frame.can_id = 1;
 
-    while ((opt = getopt_long(argc, argv, "hvi:l:red:t:cp:sT:",
+    while ((opt = getopt_long(argc, argv, "hvi:l:red:t:cp:sL:",
 			      long_options, NULL)) != -1) {
 	switch (opt) {
 	case 'h':
@@ -193,8 +193,8 @@ int main(int argc, char **argv)
 	    timeout = strtoul(optarg, NULL, 0) * 1000000LL;
 	    break;
 
-	case 'T':
-	    tx_loopback = strtoul(optarg, NULL, 0);
+	case 'L':
+	    loopback = strtoul(optarg, NULL, 0);
 	    break;
 
 	default:
@@ -223,15 +223,15 @@ int main(int argc, char **argv)
     }
     s = ret;
 
-    if (tx_loopback >= 0) {
-	ret = rt_dev_setsockopt(s, SOL_CAN_RAW, CAN_RAW_TX_LOOPBACK,
-				&tx_loopback, sizeof(tx_loopback));
+    if (loopback >= 0) {
+	ret = rt_dev_setsockopt(s, SOL_CAN_RAW, CAN_RAW_LOOPBACK,
+				&loopback, sizeof(loopback));
 	if (ret < 0) {
 	    fprintf(stderr, "rt_dev_setsockopt: %s\n", strerror(-ret));
 	    goto failure;
 	}
 	if (verbose)
-	    printf("Using tx_loopback=%d\n", tx_loopback);
+	    printf("Using loopback=%d\n", loopback);
     }
 
     strncpy(ifr.ifr_name, argv[optind], IFNAMSIZ);
Index: quilt/xenomai/ChangeLog
===================================================================
--- quilt.orig/xenomai/ChangeLog
+++ quilt/xenomai/ChangeLog
@@ -1,3 +1,22 @@
+2007-02-18  Wolfgang Grandegger  <[EMAIL PROTECTED]>
+
+	* include/rtdm/rtcan.h
+	ksrc/drivers/can/Config.in,
+	ksrc/drivers/can/Kconfig,
+	ksrc/drivers/can/rtcan_dev.h,
+	ksrc/drivers/can/rtcan_module.c,
+	ksrc/drivers/can/rtcan_raw.c,
+	ksrc/drivers/can/rtcan_raw.h,
+	ksrc/drivers/can/rtcan_socket.c,
+	ksrc/drivers/can/rtcan_socket.h,
+	ksrc/drivers/can/rtcan_virt.c,
+	ksrc/drivers/can/sja1000/rtcan_sja1000.c,
+	ksrc/drivers/can/mscan/rtcan_mscan.c,
+	src/utils/can/rtcansend.c: The socket option CAN_RAW_TX_LOOPBACK has
+	been renamed to CAN_RAW_LOOPBACK to be compatible with the Socket-CAN
+	implementation. Furthermore, all lower and upper case strings
+	"tx_loopback" have been replaced with "loopback" (to shorten names).
+
 2007-02-17  Wolfgang Grandegger  <[EMAIL PROTECTED]>
 
 	* ksrc/drivers/can/rtcan_raw.c, ksrc/drivers/can/rtcan_raw_filter.c,
_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to