1 /* SPDX-License-Identifier: GPL-2.0+ */
4 #include <linux/types.h>
7 #include "dma_common_defs.h"
10 /* System Register Map (BAR 1, Start Addr 0)
13 * 1048576 (0x100000) bytes = 131072 (0x20000) registers = 256 pages (4K)
16 * 3210987654321098765432109876543210987654321098765432109876543210
17 * 0 <--------------------------- MAGIC ---------------------------->
18 * 1 <----------- Card ID ---------><----------- Revision ---------->
19 * 2 <--------- Date Stamp --------><--------- Time Stamp ---------->
20 * 3 <-------- Core Tbl Len -------><-------- Core Tbl Offset ------>
21 * 4 <---------------------------- SSID ---------------------------->
23 * 6 <------------------------- FPGA DDNA -------------------------->
24 * 7 <------------------------ CPLD Config ------------------------->
25 * 8 <----------------------- IRQ Mask Flags ----------------------->
26 * 9 <---------------------- IRQ Active Flags ---------------------->
30 #define REG_MAGIC_NUMBER (0 * REG_WIDTH)
31 #define REG_CARD_ID_AND_BUILD (1 * REG_WIDTH)
32 #define REG_DATE_AND_TIME_STAMPS (2 * REG_WIDTH)
33 #define REG_CORE_TABLE_OFFSET (3 * REG_WIDTH)
34 #define REG_FPGA_SSID (4 * REG_WIDTH)
35 #define REG_FPGA_HW_ID (5 * REG_WIDTH)
36 #define REG_FPGA_DDNA (6 * REG_WIDTH)
37 #define REG_CPLD_CONFIG (7 * REG_WIDTH)
38 #define REG_INTERRUPT_MASK (8 * REG_WIDTH)
39 #define REG_INTERRUPT_ACTIVE (9 * REG_WIDTH)
40 #define REG_PCIE_ERROR_COUNT (10 * REG_WIDTH)
42 #define KP2000_MAGIC_VALUE 0x196C61482231894DULL
44 #define PCI_VENDOR_ID_DAKTRONICS 0x1c33
45 #define PCI_DEVICE_ID_DAKTRONICS 0x6021
50 struct kp2000_device {
54 unsigned int card_num;
57 void __iomem *sysinfo_regs_base;
58 void __iomem *regs_bar_base;
59 struct resource regs_base_resource;
60 void __iomem *dma_bar_base;
61 void __iomem *dma_common_regs;
62 struct resource dma_base_resource;
69 u32 core_table_offset;
70 u32 core_table_length;
79 struct list_head uio_devices_list;
82 extern struct class *kpc_uio_class;
83 extern struct attribute *kpc_uio_class_attrs[];
85 int kp2000_probe_cores(struct kp2000_device *pcard);
86 void kp2000_remove_cores(struct kp2000_device *pcard);
88 // Define this quick little macro because the expression is used frequently
89 #define PCARD_TO_DEV(pcard) (&(pcard->pdev->dev))
91 #endif /* KP2000_PCIE_H */