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 */ 35 struct __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 */ 49 struct __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 */ 81 struct __packed pcan_usb_pro_btr { 82 u8 data_type; 83 u8 channel; 84 __le16 dummy; 85 __le32 CCBT; 86 }; 87 88 struct __packed pcan_usb_pro_busact { 89 u8 data_type; 90 u8 channel; 91 __le16 onoff; 92 }; 93 94 struct __packed pcan_usb_pro_silent { 95 u8 data_type; 96 u8 channel; 97 __le16 onoff; 98 }; 99 100 struct __packed pcan_usb_pro_filter { 101 u8 data_type; 102 u8 dummy; 103 __le16 filter_mode; 104 }; 105 106 struct __packed pcan_usb_pro_setts { 107 u8 data_type; 108 u8 dummy; 109 __le16 mode; 110 }; 111 112 struct __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 125 struct __packed pcan_usb_pro_setled { 126 u8 data_type; 127 u8 channel; 128 __le16 mode; 129 __le32 timeout; 130 }; 131 132 struct __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 148 struct __packed pcan_usb_pro_rxstatus { 149 u8 data_type; 150 u8 channel; 151 __le16 status; 152 __le32 ts32; 153 __le32 err_frm; 154 }; 155 156 struct __packed pcan_usb_pro_rxts { 157 u8 data_type; 158 u8 dummy[3]; 159 __le32 ts64[2]; 160 }; 161 162 struct __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 171 union 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 186 int pcan_usb_pro_probe(struct usb_interface *intf); 187 int pcan_usb_pro_send_req(struct peak_usb_device *dev, int req_id, 188 int req_value, void *req_addr, int req_size); 189 void pcan_usb_pro_restart_complete(struct urb *urb); 190 191 #endif 192