]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - lincan/include/usbcan.h
changed usb vendor and product id.
[lincan.git] / lincan / include / usbcan.h
index 5ddbb12c8d86f24451b32c1914eb8efb42c6c1d5..36c3753cbbe470e61713b84f9e931dc275161038 100644 (file)
@@ -15,6 +15,7 @@
 #include <asm/uaccess.h>
 #include <linux/usb.h>
 #include <linux/mutex.h>
+#include <linux/wait.h>
 
 #include "../include/kthread.h"
 
@@ -27,8 +28,8 @@
 /* arbitrarily chosen */
 
 /* Define these values to match your devices */
-#define USBCAN_VENDOR_ID       0xDEAD
-#define USBCAN_PRODUCT_ID      0x1001
+#define USBCAN_VENDOR_ID       0x1669
+#define USBCAN_PRODUCT_ID      0x1011
 
 #define RESET_ADDR 0x0
 
@@ -66,7 +67,7 @@ int usbcan_irq_handler(int irq, struct canchip_t *chip);
 int usbcan_init(void);
 void usbcan_exit(void);
 
-int usbcan_read_kthread(void *data);
+int usbcan_kthread(void *data);
 int usbcan_chip_queue_status(struct canchip_t *chip);
 
 #ifdef CONFIG_OC_LINCAN_DETAILED_ERRORS
@@ -115,22 +116,30 @@ int usbcan_chip_queue_status(struct canchip_t *chip);
 
 #endif /*CONFIG_OC_LINCAN_DETAILED_ERRORS*/
 
+struct usbcan_usb;
+
+#define USBCAN_TOT_RX_URBS 8
+#define USBCAN_TOT_TX_URBS 8
+
+#define USBCAN_TRANSFER_SIZE 16
+
 struct usbcan_message {
        struct urb      *u;
-       u8      msg[16];
+       struct usbcan_usb *dev;
+       u8      msg[USBCAN_TRANSFER_SIZE];
        spinlock_t              acc;            /* access lock */
+       struct canque_edge_t *qedge;
+       struct canque_slot_t *slot;
        volatile long   flags;
 };
 
-#define USBCAN_MESSAGE_FREE (1)
-#define USBCAN_MESSAGE_READY_TO_SEND (2)
-#define USBCAN_MESSAGE_SENDING                 (3)
-#define USBCAN_MESSAGE_TERMINATE               (4)
-#define USBCAN_MESSAGE_ERROR                           (5)
-#define USBCAN_MESSAGE_DATA_READ               (6)
-
-#define USBCAN_TOT_RX_URBS 8
-#define USBCAN_TOT_TX_URBS 8
+#define USBCAN_MESSAGE_FREE                                    (1)
+#define USBCAN_MESSAGE_URB_PENDING             (2)
+#define USBCAN_MESSAGE_TERMINATE                       (3)
+#define USBCAN_MESSAGE_ERROR                                   (4)
+#define USBCAN_MESSAGE_DATA_OK                         (5)
+#define USBCAN_MESSAGE_TYPE_RX                         (6)
+#define USBCAN_MESSAGE_TYPE_TX                         (7)
 
 /* Structure to hold all of our device specific stuff */
 struct usbcan_usb {
@@ -141,22 +150,24 @@ struct usbcan_usb {
        u8                      bulk_in_endpointAddr;   /* the address of the bulk in endpoint */
        u8                      bulk_out_endpointAddr;  /* the address of the bulk out endpoint */
        struct mutex            io_mutex;               /* synchronize I/O with disconnect */
-       struct urb              *rx;
-       struct urb              *tx;
-       u8      rx_msg[16];
-       u8      tx_msg[16];
+       struct usbcan_message   rx[USBCAN_TOT_RX_URBS];
+       struct usbcan_message   tx[USBCAN_TOT_TX_URBS];
 
        struct task_struct *comthread;                      /* usb communication kernel thread  */
+       wait_queue_head_t queue;
 
        struct canchip_t *chip;
        volatile long flags;
 };
 
-#define USBCAN_DATA_READ                       (1)
-#define USBCAN_TERMINATE                       (2)
-#define USBCAN_ERROR                                   (3)
-#define USBCAN_TX_PENDING                      (4)
-#define USBCAN_THREAD_RUNNING  (5)
+#define USBCAN_DATA_OK                         (1)
+#define USBCAN_DATA_RX                         (2)
+#define USBCAN_DATA_TX                         (3)
+#define USBCAN_TERMINATE                       (4)
+#define USBCAN_ERROR                                   (5)
+#define USBCAN_TX_PENDING                      (6)
+#define USBCAN_THREAD_RUNNING  (7)
+#define USBCAN_FREE_TX_URB             (8)
 
 #define USBCAN_VENDOR_BAUD_RATE_SET    (1)
 #define USBCAN_VENDOR_BAUD_RATE_STATUS (2)