root/drivers/net/can/usb/peak_usb/pcan_usb_core.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * CAN driver for PEAK System USB adapters
   4  * Derived from the PCAN project file driver/src/pcan_usb_core.c
   5  *
   6  * Copyright (C) 2003-2010 PEAK System-Technik GmbH
   7  * Copyright (C) 2010-2012 Stephane Grosjean <s.grosjean@peak-system.com>
   8  *
   9  * Many thanks to Klaus Hitschler <klaus.hitschler@gmx.de>
  10  */
  11 #ifndef PCAN_USB_CORE_H
  12 #define PCAN_USB_CORE_H
  13 
  14 /* PEAK-System vendor id. */
  15 #define PCAN_USB_VENDOR_ID              0x0c72
  16 
  17 /* supported device ids. */
  18 #define PCAN_USB_PRODUCT_ID             0x000c
  19 #define PCAN_USBPRO_PRODUCT_ID          0x000d
  20 #define PCAN_USBPROFD_PRODUCT_ID        0x0011
  21 #define PCAN_USBFD_PRODUCT_ID           0x0012
  22 #define PCAN_USBCHIP_PRODUCT_ID         0x0013
  23 #define PCAN_USBX6_PRODUCT_ID           0x0014
  24 
  25 #define PCAN_USB_DRIVER_NAME            "peak_usb"
  26 
  27 /* number of urbs that are submitted for rx/tx per channel */
  28 #define PCAN_USB_MAX_RX_URBS            4
  29 #define PCAN_USB_MAX_TX_URBS            10
  30 
  31 /* usb adapters maximum channels per usb interface */
  32 #define PCAN_USB_MAX_CHANNEL            2
  33 
  34 /* maximum length of the usb commands sent to/received from  the devices */
  35 #define PCAN_USB_MAX_CMD_LEN            32
  36 
  37 struct peak_usb_device;
  38 
  39 /* PEAK-System USB adapter descriptor */
  40 struct peak_usb_adapter {
  41         char *name;
  42         u32 device_id;
  43         u32 ctrlmode_supported;
  44         struct can_clock clock;
  45         const struct can_bittiming_const * const bittiming_const;
  46         const struct can_bittiming_const * const data_bittiming_const;
  47         unsigned int ctrl_count;
  48 
  49         int (*intf_probe)(struct usb_interface *intf);
  50 
  51         int (*dev_init)(struct peak_usb_device *dev);
  52         void (*dev_exit)(struct peak_usb_device *dev);
  53         void (*dev_free)(struct peak_usb_device *dev);
  54         int (*dev_open)(struct peak_usb_device *dev);
  55         int (*dev_close)(struct peak_usb_device *dev);
  56         int (*dev_set_bittiming)(struct peak_usb_device *dev,
  57                                         struct can_bittiming *bt);
  58         int (*dev_set_data_bittiming)(struct peak_usb_device *dev,
  59                                       struct can_bittiming *bt);
  60         int (*dev_set_bus)(struct peak_usb_device *dev, u8 onoff);
  61         int (*dev_get_device_id)(struct peak_usb_device *dev, u32 *device_id);
  62         int (*dev_decode_buf)(struct peak_usb_device *dev, struct urb *urb);
  63         int (*dev_encode_msg)(struct peak_usb_device *dev, struct sk_buff *skb,
  64                                         u8 *obuf, size_t *size);
  65         int (*dev_start)(struct peak_usb_device *dev);
  66         int (*dev_stop)(struct peak_usb_device *dev);
  67         int (*dev_restart_async)(struct peak_usb_device *dev, struct urb *urb,
  68                                         u8 *buf);
  69         int (*do_get_berr_counter)(const struct net_device *netdev,
  70                                    struct can_berr_counter *bec);
  71         u8 ep_msg_in;
  72         u8 ep_msg_out[PCAN_USB_MAX_CHANNEL];
  73         u8 ts_used_bits;
  74         u32 ts_period;
  75         u8 us_per_ts_shift;
  76         u32 us_per_ts_scale;
  77 
  78         int rx_buffer_size;
  79         int tx_buffer_size;
  80         int sizeof_dev_private;
  81 };
  82 
  83 extern const struct peak_usb_adapter pcan_usb;
  84 extern const struct peak_usb_adapter pcan_usb_pro;
  85 extern const struct peak_usb_adapter pcan_usb_fd;
  86 extern const struct peak_usb_adapter pcan_usb_chip;
  87 extern const struct peak_usb_adapter pcan_usb_pro_fd;
  88 extern const struct peak_usb_adapter pcan_usb_x6;
  89 
  90 struct peak_time_ref {
  91         ktime_t tv_host_0, tv_host;
  92         u32 ts_dev_1, ts_dev_2;
  93         u64 ts_total;
  94         u32 tick_count;
  95         const struct peak_usb_adapter *adapter;
  96 };
  97 
  98 struct peak_tx_urb_context {
  99         struct peak_usb_device *dev;
 100         u32 echo_index;
 101         u8 data_len;
 102         struct urb *urb;
 103 };
 104 
 105 #define PCAN_USB_STATE_CONNECTED        0x00000001
 106 #define PCAN_USB_STATE_STARTED          0x00000002
 107 
 108 /* PEAK-System USB device */
 109 struct peak_usb_device {
 110         struct can_priv can;
 111         const struct peak_usb_adapter *adapter;
 112         unsigned int ctrl_idx;
 113         u32 state;
 114 
 115         struct sk_buff *echo_skb[PCAN_USB_MAX_TX_URBS];
 116 
 117         struct usb_device *udev;
 118         struct net_device *netdev;
 119 
 120         atomic_t active_tx_urbs;
 121         struct usb_anchor tx_submitted;
 122         struct peak_tx_urb_context tx_contexts[PCAN_USB_MAX_TX_URBS];
 123 
 124         u8 *cmd_buf;
 125         struct usb_anchor rx_submitted;
 126 
 127         u32 device_number;
 128         u8 device_rev;
 129 
 130         u8 ep_msg_in;
 131         u8 ep_msg_out;
 132 
 133         u16 bus_load;
 134 
 135         struct peak_usb_device *prev_siblings;
 136         struct peak_usb_device *next_siblings;
 137 };
 138 
 139 void pcan_dump_mem(char *prompt, void *p, int l);
 140 
 141 /* common timestamp management */
 142 void peak_usb_init_time_ref(struct peak_time_ref *time_ref,
 143                             const struct peak_usb_adapter *adapter);
 144 void peak_usb_update_ts_now(struct peak_time_ref *time_ref, u32 ts_now);
 145 void peak_usb_set_ts_now(struct peak_time_ref *time_ref, u32 ts_now);
 146 void peak_usb_get_ts_time(struct peak_time_ref *time_ref, u32 ts, ktime_t *tv);
 147 int peak_usb_netif_rx(struct sk_buff *skb,
 148                       struct peak_time_ref *time_ref, u32 ts_low);
 149 void peak_usb_async_complete(struct urb *urb);
 150 void peak_usb_restart_complete(struct peak_usb_device *dev);
 151 
 152 #endif

/* [<][>][^][v][top][bottom][index][help] */