mirror of
https://github.com/torvalds/linux.git
synced 2025-11-05 11:10:22 +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_GRCAN) += grcan.o
|
||||||
obj-$(CONFIG_CAN_IFI_CANFD) += ifi_canfd/
|
obj-$(CONFIG_CAN_IFI_CANFD) += ifi_canfd/
|
||||||
obj-$(CONFIG_CAN_JANZ_ICAN3) += janz-ican3.o
|
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_MSCAN) += mscan/
|
||||||
obj-$(CONFIG_CAN_M_CAN) += m_can/
|
obj-$(CONFIG_CAN_M_CAN) += m_can/
|
||||||
obj-$(CONFIG_CAN_PEAK_PCIEFD) += peak_canfd/
|
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
|
* - PEAK linux canfd driver
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "kvaser_pciefd.h"
|
||||||
|
|
||||||
#include <linux/bitfield.h>
|
#include <linux/bitfield.h>
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/device.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_WAIT_TIMEOUT msecs_to_jiffies(1000)
|
||||||
#define KVASER_PCIEFD_BEC_POLL_FREQ (jiffies + msecs_to_jiffies(200))
|
#define KVASER_PCIEFD_BEC_POLL_FREQ (jiffies + msecs_to_jiffies(200))
|
||||||
#define KVASER_PCIEFD_MAX_ERR_REP 256U
|
#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
|
#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,
|
static void kvaser_pciefd_write_dma_map_xilinx(struct kvaser_pciefd *pcie,
|
||||||
dma_addr_t addr, int index);
|
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 = {
|
static const struct kvaser_pciefd_address_offset kvaser_pciefd_altera_address_offset = {
|
||||||
.serdes = 0x1000,
|
.serdes = 0x1000,
|
||||||
.pci_ien = 0x50,
|
.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,
|
.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 {
|
struct kvaser_pciefd_rx_packet {
|
||||||
u32 header[2];
|
u32 header[2];
|
||||||
u64 timestamp;
|
u64 timestamp;
|
||||||
Loading…
Reference in a new issue