Linux Audio

Check our new training course

Loading...
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * CAN driver for PEAK System PCAN-USB Pro adapter
  4 * Derived from the PCAN project file driver/src/pcan_usbpro_fw.h
  5 *
  6 * Copyright (C) 2003-2011 PEAK System-Technik GmbH
  7 * Copyright (C) 2011-2012 Stephane Grosjean <s.grosjean@peak-system.com>
  8 */
  9#ifndef PCAN_USB_PRO_H
 10#define PCAN_USB_PRO_H
 11
 12/*
 13 * USB Vendor request data types
 14 */
 15#define PCAN_USBPRO_REQ_INFO		0
 16#define PCAN_USBPRO_REQ_FCT		2
 17
 18/* Vendor Request value for XXX_INFO */
 19#define PCAN_USBPRO_INFO_BL		0
 20#define PCAN_USBPRO_INFO_FW		1
 21
 22/* PCAN-USB Pro (FD) Endpoints */
 23#define PCAN_USBPRO_EP_CMDOUT		1
 24#define PCAN_USBPRO_EP_CMDIN		(PCAN_USBPRO_EP_CMDOUT | USB_DIR_IN)
 25#define PCAN_USBPRO_EP_MSGOUT_0		2
 26#define PCAN_USBPRO_EP_MSGIN		(PCAN_USBPRO_EP_MSGOUT_0 | USB_DIR_IN)
 27#define PCAN_USBPRO_EP_MSGOUT_1		3
 28#define PCAN_USBPRO_EP_UNUSED		(PCAN_USBPRO_EP_MSGOUT_1 | USB_DIR_IN)
 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 */
 35struct __packed pcan_usb_pro_blinfo {
 36	__le32 ctrl_type;
 37	u8 version[4];
 38	u8 day;
 39	u8 month;
 40	u8 year;
 41	u8 dummy;
 42	__le32 serial_num_hi;
 43	__le32 serial_num_lo;
 44	__le32 hw_type;
 45	__le32 hw_rev;
 46};
 47
 48/* PCAN_USBPRO_INFO_FW vendor request record type */
 49struct __packed pcan_usb_pro_fwinfo {
 50	__le32 ctrl_type;
 51	u8 version[4];
 52	u8 day;
 53	u8 month;
 54	u8 year;
 55	u8 dummy;
 56	__le32 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_SETDEVID	0x06
 66#define PCAN_USBPRO_SETFILTR	0x0a
 67#define PCAN_USBPRO_SETTS	0x10
 68#define PCAN_USBPRO_GETDEVID	0x12
 69#define PCAN_USBPRO_SETLED	0x1C
 70#define PCAN_USBPRO_RXMSG8	0x80
 71#define PCAN_USBPRO_RXMSG4	0x81
 72#define PCAN_USBPRO_RXMSG0	0x82
 73#define PCAN_USBPRO_RXRTR	0x83
 74#define PCAN_USBPRO_RXSTATUS	0x84
 75#define PCAN_USBPRO_RXTS	0x85
 76#define PCAN_USBPRO_TXMSG8	0x41
 77#define PCAN_USBPRO_TXMSG4	0x42
 78#define PCAN_USBPRO_TXMSG0	0x43
 79
 80/* record structures */
 81struct __packed pcan_usb_pro_btr {
 82	u8 data_type;
 83	u8 channel;
 84	__le16 dummy;
 85	__le32 CCBT;
 86};
 87
 88struct __packed pcan_usb_pro_busact {
 89	u8 data_type;
 90	u8 channel;
 91	__le16 onoff;
 92};
 93
 94struct __packed pcan_usb_pro_silent {
 95	u8 data_type;
 96	u8 channel;
 97	__le16 onoff;
 98};
 99
100struct __packed pcan_usb_pro_filter {
101	u8 data_type;
102	u8 dummy;
103	__le16 filter_mode;
104};
105
106struct __packed pcan_usb_pro_setts {
107	u8 data_type;
108	u8 dummy;
109	__le16 mode;
110};
111
112struct __packed pcan_usb_pro_devid {
113	u8 data_type;
114	u8 channel;
115	__le16 dummy;
116	__le32 dev_num;
117};
118
119#define PCAN_USBPRO_LED_DEVICE		0x00
120#define PCAN_USBPRO_LED_BLINK_FAST	0x01
121#define PCAN_USBPRO_LED_BLINK_SLOW	0x02
122#define PCAN_USBPRO_LED_ON		0x03
123#define PCAN_USBPRO_LED_OFF		0x04
124
125struct __packed pcan_usb_pro_setled {
126	u8 data_type;
127	u8 channel;
128	__le16 mode;
129	__le32 timeout;
130};
131
132struct __packed pcan_usb_pro_rxmsg {
133	u8 data_type;
134	u8 client;
135	u8 flags;
136	u8 len;
137	__le32 ts32;
138	__le32 id;
139
140	u8 data[8];
141};
142
143#define PCAN_USBPRO_STATUS_ERROR	0x0001
144#define PCAN_USBPRO_STATUS_BUS		0x0002
145#define PCAN_USBPRO_STATUS_OVERRUN	0x0004
146#define PCAN_USBPRO_STATUS_QOVERRUN	0x0008
147
148struct __packed pcan_usb_pro_rxstatus {
149	u8 data_type;
150	u8 channel;
151	__le16 status;
152	__le32 ts32;
153	__le32 err_frm;
154};
155
156struct __packed pcan_usb_pro_rxts {
157	u8 data_type;
158	u8 dummy[3];
159	__le32 ts64[2];
160};
161
162struct __packed pcan_usb_pro_txmsg {
163	u8 data_type;
164	u8 client;
165	u8 flags;
166	u8 len;
167	__le32 id;
168	u8 data[8];
169};
170
171union pcan_usb_pro_rec {
172	u8				data_type;
173	struct pcan_usb_pro_btr		btr;
174	struct pcan_usb_pro_busact	bus_act;
175	struct pcan_usb_pro_silent	silent_mode;
176	struct pcan_usb_pro_filter	filter_mode;
177	struct pcan_usb_pro_setts	ts;
178	struct pcan_usb_pro_devid	dev_id;
179	struct pcan_usb_pro_setled	set_led;
180	struct pcan_usb_pro_rxmsg	rx_msg;
181	struct pcan_usb_pro_rxstatus	rx_status;
182	struct pcan_usb_pro_rxts	rx_ts;
183	struct pcan_usb_pro_txmsg	tx_msg;
184};
185
186int pcan_usb_pro_probe(struct usb_interface *intf);
187int pcan_usb_pro_send_req(struct peak_usb_device *dev, int req_id,
188			  int req_value, void *req_addr, int req_size);
189void pcan_usb_pro_restart_complete(struct urb *urb);
190
191#endif