Merge branch 'slab/for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/penber...
[cascardo/linux.git] / drivers / net / can / usb / peak_usb / pcan_usb_pro.h
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
30 /* Vendor Request value for XXX_FCT */
31 #define PCAN_USBPRO_FCT_DRVLD           5 /* tell device driver is loaded */
32 #define PCAN_USBPRO_FCT_DRVLD_REQ_LEN   16
33
34 /* PCAN_USBPRO_INFO_BL vendor request record type */
35 struct __packed pcan_usb_pro_blinfo {
36         u32 ctrl_type;
37         u8  version[4];
38         u8  day;
39         u8  month;
40         u8  year;
41         u8  dummy;
42         u32 serial_num_hi;
43         u32 serial_num_lo;
44         u32 hw_type;
45         u32 hw_rev;
46 };
47
48 /* PCAN_USBPRO_INFO_FW vendor request record type */
49 struct __packed pcan_usb_pro_fwinfo {
50         u32 ctrl_type;
51         u8  version[4];
52         u8  day;
53         u8  month;
54         u8  year;
55         u8  dummy;
56         u32 fw_type;
57 };
58
59 /*
60  * USB Command record types
61  */
62 #define PCAN_USBPRO_SETBTR      0x02
63 #define PCAN_USBPRO_SETBUSACT   0x04
64 #define PCAN_USBPRO_SETSILENT   0x05
65 #define PCAN_USBPRO_SETFILTR    0x0a
66 #define PCAN_USBPRO_SETTS       0x10
67 #define PCAN_USBPRO_GETDEVID    0x12
68 #define PCAN_USBPRO_SETLED      0x1C
69 #define PCAN_USBPRO_RXMSG8      0x80
70 #define PCAN_USBPRO_RXMSG4      0x81
71 #define PCAN_USBPRO_RXMSG0      0x82
72 #define PCAN_USBPRO_RXRTR       0x83
73 #define PCAN_USBPRO_RXSTATUS    0x84
74 #define PCAN_USBPRO_RXTS        0x85
75 #define PCAN_USBPRO_TXMSG8      0x41
76 #define PCAN_USBPRO_TXMSG4      0x42
77 #define PCAN_USBPRO_TXMSG0      0x43
78
79 /* record structures */
80 struct __packed pcan_usb_pro_btr {
81         u8  data_type;
82         u8  channel;
83         u16 dummy;
84         u32 CCBT;
85 };
86
87 struct __packed pcan_usb_pro_busact {
88         u8  data_type;
89         u8  channel;
90         u16 onoff;
91 };
92
93 struct __packed pcan_usb_pro_silent {
94         u8  data_type;
95         u8  channel;
96         u16 onoff;
97 };
98
99 struct __packed pcan_usb_pro_filter {
100         u8  data_type;
101         u8  dummy;
102         u16 filter_mode;
103 };
104
105 struct __packed pcan_usb_pro_setts {
106         u8  data_type;
107         u8  dummy;
108         u16 mode;
109 };
110
111 struct __packed pcan_usb_pro_devid {
112         u8  data_type;
113         u8  channel;
114         u16 dummy;
115         u32 serial_num;
116 };
117
118 struct __packed pcan_usb_pro_setled {
119         u8  data_type;
120         u8  channel;
121         u16 mode;
122         u32 timeout;
123 };
124
125 struct __packed pcan_usb_pro_rxmsg {
126         u8  data_type;
127         u8  client;
128         u8  flags;
129         u8  len;
130         u32 ts32;
131         u32 id;
132
133         u8  data[8];
134 };
135
136 #define PCAN_USBPRO_STATUS_ERROR        0x0001
137 #define PCAN_USBPRO_STATUS_BUS          0x0002
138 #define PCAN_USBPRO_STATUS_OVERRUN      0x0004
139 #define PCAN_USBPRO_STATUS_QOVERRUN     0x0008
140
141 struct __packed pcan_usb_pro_rxstatus {
142         u8  data_type;
143         u8  channel;
144         u16 status;
145         u32 ts32;
146         u32 err_frm;
147 };
148
149 struct __packed pcan_usb_pro_rxts {
150         u8  data_type;
151         u8  dummy[3];
152         u32 ts64[2];
153 };
154
155 struct __packed pcan_usb_pro_txmsg {
156         u8  data_type;
157         u8  client;
158         u8  flags;
159         u8  len;
160         u32 id;
161         u8  data[8];
162 };
163
164 union pcan_usb_pro_rec {
165         u8                              data_type;
166         struct pcan_usb_pro_btr         btr;
167         struct pcan_usb_pro_busact      bus_act;
168         struct pcan_usb_pro_silent      silent_mode;
169         struct pcan_usb_pro_filter      filter_mode;
170         struct pcan_usb_pro_setts       ts;
171         struct pcan_usb_pro_devid       dev_id;
172         struct pcan_usb_pro_setled      set_led;
173         struct pcan_usb_pro_rxmsg       rx_msg;
174         struct pcan_usb_pro_rxstatus    rx_status;
175         struct pcan_usb_pro_rxts        rx_ts;
176         struct pcan_usb_pro_txmsg       tx_msg;
177 };
178
179 #endif