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