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