/* 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
struct urb *u;
struct usbcan_usb *dev;
u8 msg[USBCAN_TRANSFER_SIZE];
- spinlock_t acc; /* access lock */
struct canque_edge_t *qedge;
struct canque_slot_t *slot;
+ struct list_head list_node;
volatile long flags;
};
-#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)
+#define USBCAN_MESSAGE_TERMINATE (1)
+#define USBCAN_MESSAGE_ERROR (2)
+#define USBCAN_MESSAGE_DATA_OK (3)
/* Structure to hold all of our device specific stuff */
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 usbcan_message rx[USBCAN_TOT_RX_URBS];
- struct usbcan_message tx[USBCAN_TOT_TX_URBS];
- struct task_struct *comthread; /* usb communication kernel thread */
+ struct list_head rx_pend_list; /* URBs waiting for data receive */
+ struct list_head rx_ready_list; /* URBs with valid received data */
+ struct list_head tx_idle_list; /* URBs prepared to hold Tx messages */
+ struct list_head tx_pend_list; /* URBs holding Tx messages in progress */
+ struct list_head tx_ready_list; /* URBs with yet confirmed Tx messages */
+
+ spinlock_t list_lock; /* list lock */
+
+ struct task_struct *comthread; /* usb communication kernel thread */
wait_queue_head_t queue;
struct canchip_t *chip;
struct usbcan_usb **devs;
int count;
struct candevice_t *candev;
+ struct usb_device *udev;
};