Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / net / can / usb / peak_usb / pcan_usb_pro.h
diff --git a/kernel/drivers/net/can/usb/peak_usb/pcan_usb_pro.h b/kernel/drivers/net/can/usb/peak_usb/pcan_usb_pro.h
new file mode 100644 (file)
index 0000000..a62f7ab
--- /dev/null
@@ -0,0 +1,192 @@
+/*
+ * 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>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ */
+#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_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 serial_num;
+};
+
+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