/* SPDX-License-Identifier: GPL-2.0-or-later */ /******************************************************************************* * * CTU CAN FD IP Core * * Copyright (C) 2015-2018 Ondrej Ille FEE CTU * Copyright (C) 2018-2021 Ondrej Ille self-funded * Copyright (C) 2018-2019 Martin Jerabek FEE CTU * Copyright (C) 2018-2021 Pavel Pisa FEE CTU/self-funded * * Project advisors: * Jiri Novak * Pavel Pisa * * Department of Measurement (http://meas.fel.cvut.cz/) * Faculty of Electrical Engineering (http://www.fel.cvut.cz) * Czech Technical University (http://www.cvut.cz/) ******************************************************************************/ #ifndef __CTUCANFD__ #define __CTUCANFD__ #include #include #include enum ctu_can_fd_can_registers; struct ctucan_priv { struct can_priv can; /* must be first member! */ void __iomem *mem_base; u32 (*read_reg)(struct ctucan_priv *priv, enum ctu_can_fd_can_registers reg); void (*write_reg)(struct ctucan_priv *priv, enum ctu_can_fd_can_registers reg, u32 val); unsigned int txb_head; unsigned int txb_tail; u32 txb_prio; unsigned int ntxbufs; spinlock_t tx_lock; /* spinlock to serialize allocation and processing of TX buffers */ struct napi_struct napi; struct device *dev; struct clk *can_clk; int irq_flags; unsigned long drv_flags; u32 rxfrm_first_word; struct list_head peers_on_pdev; }; /** * ctucan_probe_common - Device type independent registration call * * This function does all the memory allocation and registration for the CAN * device. * * @dev: Handle to the generic device structure * @addr: Base address of CTU CAN FD core address * @irq: Interrupt number * @ntxbufs: Number of implemented Tx buffers * @can_clk_rate: Clock rate, if 0 then clock are taken from device node * @pm_enable_call: Whether pm_runtime_enable should be called * @set_drvdata_fnc: Function to set network driver data for physical device * * Return: 0 on success and failure value on error */ int ctucan_probe_common(struct device *dev, void __iomem *addr, int irq, unsigned int ntxbufs, unsigned long can_clk_rate, int pm_enable_call, void (*set_drvdata_fnc)(struct device *dev, struct net_device *ndev)); int ctucan_suspend(struct device *dev) __maybe_unused; int ctucan_resume(struct device *dev) __maybe_unused; #endif /*__CTUCANFD__*/