linux/drivers/net/can/usb/peak_usb/pcan_usb_pro.h
<<
>>
Prefs
   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_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 */
  80struct __packed pcan_usb_pro_btr {
  81        u8  data_type;
  82        u8  channel;
  83        __le16 dummy;
  84        __le32 CCBT;
  85};
  86
  87struct __packed pcan_usb_pro_busact {
  88        u8  data_type;
  89        u8  channel;
  90        __le16 onoff;
  91};
  92
  93struct __packed pcan_usb_pro_silent {
  94        u8  data_type;
  95        u8  channel;
  96        __le16 onoff;
  97};
  98
  99struct __packed pcan_usb_pro_filter {
 100        u8  data_type;
 101        u8  dummy;
 102        __le16 filter_mode;
 103};
 104
 105struct __packed pcan_usb_pro_setts {
 106        u8  data_type;
 107        u8  dummy;
 108        __le16 mode;
 109};
 110
 111struct __packed pcan_usb_pro_devid {
 112        u8  data_type;
 113        u8  channel;
 114        __le16 dummy;
 115        __le32 serial_num;
 116};
 117
 118struct __packed pcan_usb_pro_setled {
 119        u8  data_type;
 120        u8  channel;
 121        __le16 mode;
 122        __le32 timeout;
 123};
 124
 125struct __packed pcan_usb_pro_rxmsg {
 126        u8  data_type;
 127        u8  client;
 128        u8  flags;
 129        u8  len;
 130        __le32 ts32;
 131        __le32 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
 141struct __packed pcan_usb_pro_rxstatus {
 142        u8  data_type;
 143        u8  channel;
 144        __le16 status;
 145        __le32 ts32;
 146        __le32 err_frm;
 147};
 148
 149struct __packed pcan_usb_pro_rxts {
 150        u8  data_type;
 151        u8  dummy[3];
 152        __le32 ts64[2];
 153};
 154
 155struct __packed pcan_usb_pro_txmsg {
 156        u8  data_type;
 157        u8  client;
 158        u8  flags;
 159        u8  len;
 160        __le32 id;
 161        u8  data[8];
 162};
 163
 164union 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
 179int pcan_usb_pro_probe(struct usb_interface *intf);
 180int pcan_usb_pro_send_req(struct peak_usb_device *dev, int req_id,
 181                          int req_value, void *req_addr, int req_size);
 182void pcan_usb_pro_restart_complete(struct urb *urb);
 183
 184#endif
 185