xref: /openbmc/linux/drivers/net/can/peak_canfd/peak_canfd_user.h (revision c95baf12f5077419db01313ab61c2aac007d40cd)
18e8e69d6SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2*3cc9358fSMarc Kleine-Budde /* CAN driver for PEAK System micro-CAN based adapters
38ac8321eSStephane Grosjean  *
48ac8321eSStephane Grosjean  * Copyright (C) 2003-2011 PEAK System-Technik GmbH
58ac8321eSStephane Grosjean  * Copyright (C) 2011-2013 Stephane Grosjean <s.grosjean@peak-system.com>
68ac8321eSStephane Grosjean  */
78ac8321eSStephane Grosjean #ifndef PEAK_CANFD_USER_H
88ac8321eSStephane Grosjean #define PEAK_CANFD_USER_H
98ac8321eSStephane Grosjean 
108ac8321eSStephane Grosjean #include <linux/can/dev/peak_canfd.h>
118ac8321eSStephane Grosjean 
128ac8321eSStephane Grosjean #define PCANFD_ECHO_SKB_DEF		-1
138ac8321eSStephane Grosjean 
148ac8321eSStephane Grosjean /* data structure private to each uCAN interface */
158ac8321eSStephane Grosjean struct peak_canfd_priv {
168ac8321eSStephane Grosjean 	struct can_priv can;		/* socket-can private data */
178ac8321eSStephane Grosjean 	struct net_device *ndev;	/* network device */
188ac8321eSStephane Grosjean 	int index;			/* channel index */
198ac8321eSStephane Grosjean 
208ac8321eSStephane Grosjean 	struct can_berr_counter bec;	/* rx/tx err counters */
218ac8321eSStephane Grosjean 
228ac8321eSStephane Grosjean 	int echo_idx;			/* echo skb free slot index */
238ac8321eSStephane Grosjean 	spinlock_t echo_lock;
248ac8321eSStephane Grosjean 
258ac8321eSStephane Grosjean 	int cmd_len;
268ac8321eSStephane Grosjean 	void *cmd_buffer;
278ac8321eSStephane Grosjean 	int cmd_maxlen;
288ac8321eSStephane Grosjean 
298ac8321eSStephane Grosjean 	int (*pre_cmd)(struct peak_canfd_priv *priv);
308ac8321eSStephane Grosjean 	int (*write_cmd)(struct peak_canfd_priv *priv);
318ac8321eSStephane Grosjean 	int (*post_cmd)(struct peak_canfd_priv *priv);
328ac8321eSStephane Grosjean 
338ac8321eSStephane Grosjean 	int (*enable_tx_path)(struct peak_canfd_priv *priv);
348ac8321eSStephane Grosjean 	void *(*alloc_tx_msg)(struct peak_canfd_priv *priv, u16 msg_size,
358ac8321eSStephane Grosjean 			      int *room_left);
368ac8321eSStephane Grosjean 	int (*write_tx_msg)(struct peak_canfd_priv *priv,
378ac8321eSStephane Grosjean 			    struct pucan_tx_msg *msg);
388ac8321eSStephane Grosjean };
398ac8321eSStephane Grosjean 
408ac8321eSStephane Grosjean struct net_device *alloc_peak_canfd_dev(int sizeof_priv, int index,
418ac8321eSStephane Grosjean 					int echo_skb_max);
428ac8321eSStephane Grosjean int peak_canfd_handle_msg(struct peak_canfd_priv *priv,
438ac8321eSStephane Grosjean 			  struct pucan_rx_msg *msg);
448ac8321eSStephane Grosjean int peak_canfd_handle_msgs_list(struct peak_canfd_priv *priv,
458ac8321eSStephane Grosjean 				struct pucan_rx_msg *rx_msg, int rx_count);
468ac8321eSStephane Grosjean #endif
47