2 * Header file for the Linux CAN-bus driver.
3 * Written by Jan Kriz email:johen@post.cz
4 * This software is released under the GPL-License.
5 * Version lincan-0.3 17 Jul 2008
11 #include <linux/errno.h>
12 #include <linux/init.h>
13 #include <linux/slab.h>
14 #include <linux/kref.h>
15 #include <asm/uaccess.h>
16 #include <linux/usb.h>
17 #include <linux/mutex.h>
18 #include <linux/wait.h>
20 #include "../include/kthread.h"
22 /* our private defines. if this grows any larger, use your own .h file */
23 #define MAX_TRANSFER (PAGE_SIZE - 512)
24 /* MAX_TRANSFER is chosen so that the VM is not stressed by
25 allocations > PAGE_SIZE and the number of packets in a page
26 is an integer 512 is the largest possible packet on EHCI */
27 #define WRITES_IN_FLIGHT 8
28 /* arbitrarily chosen */
30 /* Define these values to match your devices */
31 #define USBCAN_VENDOR_ID 0x1669
32 #define USBCAN_PRODUCT_ID 0x1011
34 #define RESET_ADDR 0x0
37 * IO_RANGE is the io-memory range that gets reserved, please adjust according
38 * your hardware. Example: #define IO_RANGE 0x100 for i82527 chips or
39 * #define IO_RANGE 0x20 for sja1000 chips in basic CAN mode.
41 #define IO_RANGE 0x100
44 int usbcan_request_io(struct candevice_t *candev);
45 int usbcan_release_io(struct candevice_t *candev);
46 int usbcan_reset(struct candevice_t *candev);
47 int usbcan_init_hw_data(struct candevice_t *candev);
48 int usbcan_init_chip_data(struct candevice_t *candev, int chipnr);
49 int usbcan_init_obj_data(struct canchip_t *chip, int objnr);
50 void usbcan_write_register(unsigned data, unsigned long address);
51 unsigned usbcan_read_register(unsigned long address);
52 int usbcan_program_irq(struct candevice_t *candev);
53 int usbcan_register(struct hwspecops_t *hwspecops);
55 int usbcan_chip_config(struct canchip_t *chip);
56 int usbcan_extended_mask(struct canchip_t *chip, unsigned long code, unsigned long mask);
57 int usbcan_baud_rate(struct canchip_t *chip, int rate, int clock, int sjw,
58 int sampl_pt, int flags);
59 int usbcan_pre_read_config(struct canchip_t *chip, struct msgobj_t *obj);
60 int usbcan_pre_write_config(struct canchip_t *chip, struct msgobj_t *obj,
61 struct canmsg_t *msg);
62 int usbcan_send_msg(struct canchip_t *chip, struct msgobj_t *obj,
63 struct canmsg_t *msg);
64 int usbcan_fill_chipspecops(struct canchip_t *chip);
65 int usbcan_irq_handler(int irq, struct canchip_t *chip);
67 int usbcan_init(void);
68 void usbcan_exit(void);
70 int usbcan_kthread(void *data);
71 int usbcan_chip_queue_status(struct canchip_t *chip);
73 #ifdef CONFIG_OC_LINCAN_DETAILED_ERRORS
75 // static const char *sja1000_ecc_errc_str[]={
79 // "other type of error"
82 // static const char *sja1000_ecc_seg_str[]={
94 // "data length code",
100 // "active error flag",
102 // "tolerate dominant bits",
105 // "passive error flag",
106 // "error delimiter",
108 // "acknowledge slot",
110 // "acknowledge delimiter",
117 #endif /*CONFIG_OC_LINCAN_DETAILED_ERRORS*/
121 #define USBCAN_TOT_RX_URBS 8
122 #define USBCAN_TOT_TX_URBS 8
124 #define USBCAN_TRANSFER_SIZE 16
126 struct usbcan_message {
128 struct usbcan_usb *dev;
129 u8 msg[USBCAN_TRANSFER_SIZE];
130 struct canque_edge_t *qedge;
131 struct canque_slot_t *slot;
132 struct list_head list_node;
136 #define USBCAN_MESSAGE_FREE (1)
137 #define USBCAN_MESSAGE_URB_PENDING (2)
138 #define USBCAN_MESSAGE_TERMINATE (3)
139 #define USBCAN_MESSAGE_ERROR (4)
140 #define USBCAN_MESSAGE_DATA_OK (5)
141 #define USBCAN_MESSAGE_TYPE_RX (6)
142 #define USBCAN_MESSAGE_TYPE_TX (7)
144 /* Structure to hold all of our device specific stuff */
146 struct usb_device *udev; /* the usb device for this device */
147 struct usb_interface *interface; /* the interface for this device */
148 unsigned char *bulk_in_buffer; /* the buffer to receive data */
149 size_t bulk_in_size; /* the size of the receive buffer */
150 u8 bulk_in_endpointAddr; /* the address of the bulk in endpoint */
151 u8 bulk_out_endpointAddr; /* the address of the bulk out endpoint */
152 struct mutex io_mutex; /* synchronize I/O with disconnect */
154 struct list_head rx_pend_list; /* URBs waiting for data receive */
155 struct list_head rx_ready_list; /* URBs with valid received data */
156 struct list_head tx_idle_list; /* URBs prepared to hold Tx messages */
157 struct list_head tx_pend_list; /* URBs holding Tx messages in progress */
158 struct list_head tx_ready_list; /* URBs with yet confirmed Tx messages */
160 spinlock_t list_lock; /* list lock */
162 struct task_struct *comthread; /* usb communication kernel thread */
163 wait_queue_head_t queue;
165 struct canchip_t *chip;
169 #define USBCAN_DATA_OK (1)
170 #define USBCAN_DATA_RX (2)
171 #define USBCAN_DATA_TX (3)
172 #define USBCAN_TERMINATE (4)
173 #define USBCAN_ERROR (5)
174 #define USBCAN_TX_PENDING (6)
175 #define USBCAN_THREAD_RUNNING (7)
176 #define USBCAN_FREE_TX_URB (8)
178 #define USBCAN_VENDOR_BAUD_RATE_SET (1)
179 #define USBCAN_VENDOR_BAUD_RATE_STATUS (2)
180 #define USBCAN_VENDOR_SET_BTREGS (3)
181 #define USBCAN_VENDOR_CHECK_TX_STAT (4)
182 #define USBCAN_VENDOR_START_CHIP (5)
183 #define USBCAN_VENDOR_STOP_CHIP (6)
184 #define USBCAN_VENDOR_EXT_MASK_SET (7)
185 #define USBCAN_VENDOR_EXT_MASK_STATUS (8)
188 struct usbcan_usb **devs;
190 struct candevice_t *candev;