mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	can: kvaser_pciefd: Split driver into C-file and header-file.
Split driver into C-file and header-file, to simplify future patches. Move common definitions and declarations to a header file. Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr> Signed-off-by: Jimmy Assarsson <extja@kvaser.com> Link: https://patch.msgid.link/20250725123230.8-7-extja@kvaser.com Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
		
							parent
							
								
									d54b16b40d
								
							
						
					
					
						commit
						20bc87ae51
					
				
					 4 changed files with 96 additions and 71 deletions
				
			
		| 
						 | 
				
			
			@ -25,7 +25,7 @@ obj-$(CONFIG_CAN_FLEXCAN)	+= flexcan/
 | 
			
		|||
obj-$(CONFIG_CAN_GRCAN)		+= grcan.o
 | 
			
		||||
obj-$(CONFIG_CAN_IFI_CANFD)	+= ifi_canfd/
 | 
			
		||||
obj-$(CONFIG_CAN_JANZ_ICAN3)	+= janz-ican3.o
 | 
			
		||||
obj-$(CONFIG_CAN_KVASER_PCIEFD)	+= kvaser_pciefd.o
 | 
			
		||||
obj-$(CONFIG_CAN_KVASER_PCIEFD)	+= kvaser_pciefd/
 | 
			
		||||
obj-$(CONFIG_CAN_MSCAN)		+= mscan/
 | 
			
		||||
obj-$(CONFIG_CAN_M_CAN)		+= m_can/
 | 
			
		||||
obj-$(CONFIG_CAN_PEAK_PCIEFD)	+= peak_canfd/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								drivers/net/can/kvaser_pciefd/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								drivers/net/can/kvaser_pciefd/Makefile
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
# SPDX-License-Identifier: GPL-2.0
 | 
			
		||||
obj-$(CONFIG_CAN_KVASER_PCIEFD) += kvaser_pciefd.o
 | 
			
		||||
kvaser_pciefd-y = kvaser_pciefd_core.o
 | 
			
		||||
							
								
								
									
										90
									
								
								drivers/net/can/kvaser_pciefd/kvaser_pciefd.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								drivers/net/can/kvaser_pciefd/kvaser_pciefd.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,90 @@
 | 
			
		|||
/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
 | 
			
		||||
/* kvaser_pciefd common definitions and declarations
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2025 KVASER AB, Sweden. All rights reserved.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _KVASER_PCIEFD_H
 | 
			
		||||
#define _KVASER_PCIEFD_H
 | 
			
		||||
 | 
			
		||||
#include <linux/can/dev.h>
 | 
			
		||||
#include <linux/completion.h>
 | 
			
		||||
#include <linux/pci.h>
 | 
			
		||||
#include <linux/spinlock.h>
 | 
			
		||||
#include <linux/timer.h>
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
 | 
			
		||||
#define KVASER_PCIEFD_MAX_CAN_CHANNELS 8UL
 | 
			
		||||
#define KVASER_PCIEFD_DMA_COUNT 2U
 | 
			
		||||
#define KVASER_PCIEFD_DMA_SIZE (4U * 1024U)
 | 
			
		||||
#define KVASER_PCIEFD_CAN_TX_MAX_COUNT 17U
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd;
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd_address_offset {
 | 
			
		||||
	u32 serdes;
 | 
			
		||||
	u32 pci_ien;
 | 
			
		||||
	u32 pci_irq;
 | 
			
		||||
	u32 sysid;
 | 
			
		||||
	u32 loopback;
 | 
			
		||||
	u32 kcan_srb_fifo;
 | 
			
		||||
	u32 kcan_srb;
 | 
			
		||||
	u32 kcan_ch0;
 | 
			
		||||
	u32 kcan_ch1;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd_irq_mask {
 | 
			
		||||
	u32 kcan_rx0;
 | 
			
		||||
	u32 kcan_tx[KVASER_PCIEFD_MAX_CAN_CHANNELS];
 | 
			
		||||
	u32 all;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd_dev_ops {
 | 
			
		||||
	void (*kvaser_pciefd_write_dma_map)(struct kvaser_pciefd *pcie,
 | 
			
		||||
					    dma_addr_t addr, int index);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd_driver_data {
 | 
			
		||||
	const struct kvaser_pciefd_address_offset *address_offset;
 | 
			
		||||
	const struct kvaser_pciefd_irq_mask *irq_mask;
 | 
			
		||||
	const struct kvaser_pciefd_dev_ops *ops;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd_fw_version {
 | 
			
		||||
	u8 major;
 | 
			
		||||
	u8 minor;
 | 
			
		||||
	u16 build;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd_can {
 | 
			
		||||
	struct can_priv can;
 | 
			
		||||
	struct kvaser_pciefd *kv_pcie;
 | 
			
		||||
	void __iomem *reg_base;
 | 
			
		||||
	struct can_berr_counter bec;
 | 
			
		||||
	u32 ioc;
 | 
			
		||||
	u8 cmd_seq;
 | 
			
		||||
	u8 tx_max_count;
 | 
			
		||||
	u8 tx_idx;
 | 
			
		||||
	u8 ack_idx;
 | 
			
		||||
	int err_rep_cnt;
 | 
			
		||||
	unsigned int completed_tx_pkts;
 | 
			
		||||
	unsigned int completed_tx_bytes;
 | 
			
		||||
	spinlock_t lock; /* Locks sensitive registers (e.g. MODE) */
 | 
			
		||||
	struct timer_list bec_poll_timer;
 | 
			
		||||
	struct completion start_comp, flush_comp;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd {
 | 
			
		||||
	struct pci_dev *pci;
 | 
			
		||||
	void __iomem *reg_base;
 | 
			
		||||
	struct kvaser_pciefd_can *can[KVASER_PCIEFD_MAX_CAN_CHANNELS];
 | 
			
		||||
	const struct kvaser_pciefd_driver_data *driver_data;
 | 
			
		||||
	void *dma_data[KVASER_PCIEFD_DMA_COUNT];
 | 
			
		||||
	u8 nr_channels;
 | 
			
		||||
	u32 bus_freq;
 | 
			
		||||
	u32 freq;
 | 
			
		||||
	u32 freq_to_ticks_div;
 | 
			
		||||
	struct kvaser_pciefd_fw_version fw_version;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* _KVASER_PCIEFD_H */
 | 
			
		||||
| 
						 | 
				
			
			@ -5,6 +5,8 @@
 | 
			
		|||
 *  - PEAK linux canfd driver
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "kvaser_pciefd.h"
 | 
			
		||||
 | 
			
		||||
#include <linux/bitfield.h>
 | 
			
		||||
#include <linux/can/dev.h>
 | 
			
		||||
#include <linux/device.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -27,10 +29,6 @@ MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices");
 | 
			
		|||
#define KVASER_PCIEFD_WAIT_TIMEOUT msecs_to_jiffies(1000)
 | 
			
		||||
#define KVASER_PCIEFD_BEC_POLL_FREQ (jiffies + msecs_to_jiffies(200))
 | 
			
		||||
#define KVASER_PCIEFD_MAX_ERR_REP 256U
 | 
			
		||||
#define KVASER_PCIEFD_CAN_TX_MAX_COUNT 17U
 | 
			
		||||
#define KVASER_PCIEFD_MAX_CAN_CHANNELS 8UL
 | 
			
		||||
#define KVASER_PCIEFD_DMA_COUNT 2U
 | 
			
		||||
#define KVASER_PCIEFD_DMA_SIZE (4U * 1024U)
 | 
			
		||||
 | 
			
		||||
#define KVASER_PCIEFD_VENDOR 0x1a07
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -296,41 +294,6 @@ static void kvaser_pciefd_write_dma_map_sf2(struct kvaser_pciefd *pcie,
 | 
			
		|||
static void kvaser_pciefd_write_dma_map_xilinx(struct kvaser_pciefd *pcie,
 | 
			
		||||
					       dma_addr_t addr, int index);
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd_address_offset {
 | 
			
		||||
	u32 serdes;
 | 
			
		||||
	u32 pci_ien;
 | 
			
		||||
	u32 pci_irq;
 | 
			
		||||
	u32 sysid;
 | 
			
		||||
	u32 loopback;
 | 
			
		||||
	u32 kcan_srb_fifo;
 | 
			
		||||
	u32 kcan_srb;
 | 
			
		||||
	u32 kcan_ch0;
 | 
			
		||||
	u32 kcan_ch1;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd_dev_ops {
 | 
			
		||||
	void (*kvaser_pciefd_write_dma_map)(struct kvaser_pciefd *pcie,
 | 
			
		||||
					    dma_addr_t addr, int index);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd_irq_mask {
 | 
			
		||||
	u32 kcan_rx0;
 | 
			
		||||
	u32 kcan_tx[KVASER_PCIEFD_MAX_CAN_CHANNELS];
 | 
			
		||||
	u32 all;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd_driver_data {
 | 
			
		||||
	const struct kvaser_pciefd_address_offset *address_offset;
 | 
			
		||||
	const struct kvaser_pciefd_irq_mask *irq_mask;
 | 
			
		||||
	const struct kvaser_pciefd_dev_ops *ops;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd_fw_version {
 | 
			
		||||
	u8 major;
 | 
			
		||||
	u8 minor;
 | 
			
		||||
	u16 build;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const struct kvaser_pciefd_address_offset kvaser_pciefd_altera_address_offset = {
 | 
			
		||||
	.serdes = 0x1000,
 | 
			
		||||
	.pci_ien = 0x50,
 | 
			
		||||
| 
						 | 
				
			
			@ -415,37 +378,6 @@ static const struct kvaser_pciefd_driver_data kvaser_pciefd_xilinx_driver_data =
 | 
			
		|||
	.ops = &kvaser_pciefd_xilinx_dev_ops,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd_can {
 | 
			
		||||
	struct can_priv can;
 | 
			
		||||
	struct kvaser_pciefd *kv_pcie;
 | 
			
		||||
	void __iomem *reg_base;
 | 
			
		||||
	struct can_berr_counter bec;
 | 
			
		||||
	u32 ioc;
 | 
			
		||||
	u8 cmd_seq;
 | 
			
		||||
	u8 tx_max_count;
 | 
			
		||||
	u8 tx_idx;
 | 
			
		||||
	u8 ack_idx;
 | 
			
		||||
	int err_rep_cnt;
 | 
			
		||||
	unsigned int completed_tx_pkts;
 | 
			
		||||
	unsigned int completed_tx_bytes;
 | 
			
		||||
	spinlock_t lock; /* Locks sensitive registers (e.g. MODE) */
 | 
			
		||||
	struct timer_list bec_poll_timer;
 | 
			
		||||
	struct completion start_comp, flush_comp;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd {
 | 
			
		||||
	struct pci_dev *pci;
 | 
			
		||||
	void __iomem *reg_base;
 | 
			
		||||
	struct kvaser_pciefd_can *can[KVASER_PCIEFD_MAX_CAN_CHANNELS];
 | 
			
		||||
	const struct kvaser_pciefd_driver_data *driver_data;
 | 
			
		||||
	void *dma_data[KVASER_PCIEFD_DMA_COUNT];
 | 
			
		||||
	u8 nr_channels;
 | 
			
		||||
	u32 bus_freq;
 | 
			
		||||
	u32 freq;
 | 
			
		||||
	u32 freq_to_ticks_div;
 | 
			
		||||
	struct kvaser_pciefd_fw_version fw_version;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct kvaser_pciefd_rx_packet {
 | 
			
		||||
	u32 header[2];
 | 
			
		||||
	u64 timestamp;
 | 
			
		||||
		Loading…
	
		Reference in a new issue