X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/3c6d0376edd06bad63e861415974556259f593cd..d70622f27a4e224e2c94bdeef7728232d23fee2b:/lincan/include/usbcan.h diff --git a/lincan/include/usbcan.h b/lincan/include/usbcan.h index 0f1e39c..5ddbb12 100644 --- a/lincan/include/usbcan.h +++ b/lincan/include/usbcan.h @@ -66,7 +66,7 @@ int usbcan_irq_handler(int irq, struct canchip_t *chip); int usbcan_init(void); void usbcan_exit(void); -void usbcan_read_kthread(kthread_t *kthread); +int usbcan_read_kthread(void *data); int usbcan_chip_queue_status(struct canchip_t *chip); #ifdef CONFIG_OC_LINCAN_DETAILED_ERRORS @@ -115,37 +115,48 @@ int usbcan_chip_queue_status(struct canchip_t *chip); #endif /*CONFIG_OC_LINCAN_DETAILED_ERRORS*/ +struct usbcan_message { + struct urb *u; + u8 msg[16]; + spinlock_t acc; /* access lock */ + 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 + /* Structure to hold all of our device specific stuff */ struct usbcan_usb { struct usb_device *udev; /* the usb device for this device */ struct usb_interface *interface; /* the interface for this device */ - struct semaphore limit_sem; /* limiting the number of writes in progress */ - struct usb_anchor submitted; /* in case we need to retract our submissions */ unsigned char *bulk_in_buffer; /* the buffer to receive data */ - unsigned char *ctl_in_buffer; /* the buffer to receive data */ size_t bulk_in_size; /* the size of the receive buffer */ - size_t ctl_in_size; /* the size of the receive buffer */ - u8 ctl_in_endpointAddr; /* the address of the bulk in endpoint */ - u8 ctl_out_endpointAddr; /* the address of the bulk in endpoint */ u8 bulk_in_endpointAddr; /* the address of the bulk in endpoint */ u8 bulk_out_endpointAddr; /* the address of the bulk out endpoint */ - int errors; /* the last request tanked */ - int open_count; /* count the number of openers */ - spinlock_t err_lock; /* lock for errors */ struct mutex io_mutex; /* synchronize I/O with disconnect */ - struct urb *rcv; - u8 rcv_msg[16]; + struct urb *rx; + struct urb *tx; + u8 rx_msg[16]; u8 tx_msg[16]; - kthread_t rcvthread; /* usb receive kernel thread */ - struct candevice_t *candev; - long flags; + struct task_struct *comthread; /* usb communication kernel thread */ + + 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_DATA_READ (1) +#define USBCAN_TERMINATE (2) +#define USBCAN_ERROR (3) +#define USBCAN_TX_PENDING (4) +#define USBCAN_THREAD_RUNNING (5) #define USBCAN_VENDOR_BAUD_RATE_SET (1) #define USBCAN_VENDOR_BAUD_RATE_STATUS (2) @@ -156,5 +167,11 @@ struct usbcan_usb { #define USBCAN_VENDOR_EXT_MASK_SET (7) #define USBCAN_VENDOR_EXT_MASK_STATUS (8) +struct usbcan_devs { + struct usbcan_usb **devs; + int count; + struct candevice_t *candev; +}; + #endif /*USBCAN_H*/