Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
[deliverable/linux.git] / drivers / net / can / usb / peak_usb / pcan_usb_pro.h
CommitLineData
d8a19935
SG
1/*
2 * CAN driver for PEAK System PCAN-USB Pro adapter
3 * Derived from the PCAN project file driver/src/pcan_usbpro_fw.h
4 *
5 * Copyright (C) 2003-2011 PEAK System-Technik GmbH
6 * Copyright (C) 2011-2012 Stephane Grosjean <s.grosjean@peak-system.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published
10 * by the Free Software Foundation; version 2 of the License.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 */
17#ifndef PCAN_USB_PRO_H
18#define PCAN_USB_PRO_H
19
20/*
21 * USB Vendor request data types
22 */
23#define PCAN_USBPRO_REQ_INFO 0
24#define PCAN_USBPRO_REQ_FCT 2
25
26/* Vendor Request value for XXX_INFO */
27#define PCAN_USBPRO_INFO_BL 0
28#define PCAN_USBPRO_INFO_FW 1
29
1114be1e
SG
30/* PCAN-USB Pro (FD) Endpoints */
31#define PCAN_USBPRO_EP_CMDOUT 1
32#define PCAN_USBPRO_EP_CMDIN (PCAN_USBPRO_EP_CMDOUT | USB_DIR_IN)
33#define PCAN_USBPRO_EP_MSGOUT_0 2
34#define PCAN_USBPRO_EP_MSGIN (PCAN_USBPRO_EP_MSGOUT_0 | USB_DIR_IN)
35#define PCAN_USBPRO_EP_MSGOUT_1 3
36#define PCAN_USBPRO_EP_UNUSED (PCAN_USBPRO_EP_MSGOUT_1 | USB_DIR_IN)
37
d8a19935
SG
38/* Vendor Request value for XXX_FCT */
39#define PCAN_USBPRO_FCT_DRVLD 5 /* tell device driver is loaded */
f14e2243 40#define PCAN_USBPRO_FCT_DRVLD_REQ_LEN 16
d8a19935
SG
41
42/* PCAN_USBPRO_INFO_BL vendor request record type */
43struct __packed pcan_usb_pro_blinfo {
62bc24f6 44 __le32 ctrl_type;
d8a19935
SG
45 u8 version[4];
46 u8 day;
47 u8 month;
48 u8 year;
49 u8 dummy;
62bc24f6
SG
50 __le32 serial_num_hi;
51 __le32 serial_num_lo;
52 __le32 hw_type;
53 __le32 hw_rev;
d8a19935
SG
54};
55
56/* PCAN_USBPRO_INFO_FW vendor request record type */
57struct __packed pcan_usb_pro_fwinfo {
62bc24f6 58 __le32 ctrl_type;
d8a19935
SG
59 u8 version[4];
60 u8 day;
61 u8 month;
62 u8 year;
63 u8 dummy;
62bc24f6 64 __le32 fw_type;
d8a19935
SG
65};
66
67/*
68 * USB Command record types
69 */
70#define PCAN_USBPRO_SETBTR 0x02
71#define PCAN_USBPRO_SETBUSACT 0x04
72#define PCAN_USBPRO_SETSILENT 0x05
73#define PCAN_USBPRO_SETFILTR 0x0a
74#define PCAN_USBPRO_SETTS 0x10
75#define PCAN_USBPRO_GETDEVID 0x12
76#define PCAN_USBPRO_SETLED 0x1C
77#define PCAN_USBPRO_RXMSG8 0x80
78#define PCAN_USBPRO_RXMSG4 0x81
79#define PCAN_USBPRO_RXMSG0 0x82
80#define PCAN_USBPRO_RXRTR 0x83
81#define PCAN_USBPRO_RXSTATUS 0x84
82#define PCAN_USBPRO_RXTS 0x85
83#define PCAN_USBPRO_TXMSG8 0x41
84#define PCAN_USBPRO_TXMSG4 0x42
85#define PCAN_USBPRO_TXMSG0 0x43
86
87/* record structures */
88struct __packed pcan_usb_pro_btr {
89 u8 data_type;
90 u8 channel;
62bc24f6
SG
91 __le16 dummy;
92 __le32 CCBT;
d8a19935
SG
93};
94
95struct __packed pcan_usb_pro_busact {
96 u8 data_type;
97 u8 channel;
62bc24f6 98 __le16 onoff;
d8a19935
SG
99};
100
101struct __packed pcan_usb_pro_silent {
102 u8 data_type;
103 u8 channel;
62bc24f6 104 __le16 onoff;
d8a19935
SG
105};
106
107struct __packed pcan_usb_pro_filter {
108 u8 data_type;
109 u8 dummy;
62bc24f6 110 __le16 filter_mode;
d8a19935
SG
111};
112
113struct __packed pcan_usb_pro_setts {
114 u8 data_type;
115 u8 dummy;
62bc24f6 116 __le16 mode;
d8a19935
SG
117};
118
119struct __packed pcan_usb_pro_devid {
120 u8 data_type;
121 u8 channel;
62bc24f6
SG
122 __le16 dummy;
123 __le32 serial_num;
d8a19935
SG
124};
125
126struct __packed pcan_usb_pro_setled {
127 u8 data_type;
128 u8 channel;
62bc24f6
SG
129 __le16 mode;
130 __le32 timeout;
d8a19935
SG
131};
132
133struct __packed pcan_usb_pro_rxmsg {
134 u8 data_type;
135 u8 client;
136 u8 flags;
137 u8 len;
62bc24f6
SG
138 __le32 ts32;
139 __le32 id;
d8a19935
SG
140
141 u8 data[8];
142};
143
144#define PCAN_USBPRO_STATUS_ERROR 0x0001
145#define PCAN_USBPRO_STATUS_BUS 0x0002
146#define PCAN_USBPRO_STATUS_OVERRUN 0x0004
147#define PCAN_USBPRO_STATUS_QOVERRUN 0x0008
148
149struct __packed pcan_usb_pro_rxstatus {
150 u8 data_type;
151 u8 channel;
62bc24f6
SG
152 __le16 status;
153 __le32 ts32;
154 __le32 err_frm;
d8a19935
SG
155};
156
157struct __packed pcan_usb_pro_rxts {
158 u8 data_type;
159 u8 dummy[3];
62bc24f6 160 __le32 ts64[2];
d8a19935
SG
161};
162
163struct __packed pcan_usb_pro_txmsg {
164 u8 data_type;
165 u8 client;
166 u8 flags;
167 u8 len;
62bc24f6 168 __le32 id;
d8a19935
SG
169 u8 data[8];
170};
171
172union pcan_usb_pro_rec {
173 u8 data_type;
174 struct pcan_usb_pro_btr btr;
175 struct pcan_usb_pro_busact bus_act;
176 struct pcan_usb_pro_silent silent_mode;
177 struct pcan_usb_pro_filter filter_mode;
178 struct pcan_usb_pro_setts ts;
179 struct pcan_usb_pro_devid dev_id;
180 struct pcan_usb_pro_setled set_led;
181 struct pcan_usb_pro_rxmsg rx_msg;
182 struct pcan_usb_pro_rxstatus rx_status;
183 struct pcan_usb_pro_rxts rx_ts;
184 struct pcan_usb_pro_txmsg tx_msg;
185};
186
1114be1e
SG
187int pcan_usb_pro_probe(struct usb_interface *intf);
188int pcan_usb_pro_send_req(struct peak_usb_device *dev, int req_id,
189 int req_value, void *req_addr, int req_size);
190void pcan_usb_pro_restart_complete(struct urb *urb);
191
d8a19935 192#endif
This page took 0.216395 seconds and 5 git commands to generate.