1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 #ifndef KP2000_PCIE_H 3 #define KP2000_PCIE_H 4 #include <linux/types.h> 5 #include <linux/pci.h> 6 #include "../kpc.h" 7 #include "dma_common_defs.h" 8 9 10 /* System Register Map (BAR 1, Start Addr 0) 11 * 12 * BAR Size: 13 * 1048576 (0x100000) bytes = 131072 (0x20000) registers = 256 pages (4K) 14 * 15 * 6 5 4 3 2 1 0 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 ----------------------------> 22 * 5 < HWID > 23 * 6 <------------------------- FPGA DDNA --------------------------> 24 * 7 <------------------------ CPLD Config -------------------------> 25 * 8 <----------------------- IRQ Mask Flags -----------------------> 26 * 9 <---------------------- IRQ Active Flags ----------------------> 27 */ 28 29 #define REG_WIDTH 8 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) 41 42 #define KP2000_MAGIC_VALUE 0x196C61482231894DULL 43 44 #define PCI_VENDOR_ID_DAKTRONICS 0x1c33 45 #define PCI_DEVICE_ID_DAKTRONICS 0x6021 46 47 #define DMA_BAR 0 48 #define REG_BAR 1 49 50 struct kp2000_device { 51 struct pci_dev *pdev; 52 char name[16]; 53 54 unsigned int card_num; 55 struct mutex sem; 56 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; 63 64 // "System Registers" 65 u32 card_id; 66 u32 build_version; 67 u32 build_datestamp; 68 u32 build_timestamp; 69 u32 core_table_offset; 70 u32 core_table_length; 71 u8 core_table_rev; 72 u8 hardware_revision; 73 u64 ssid; 74 u64 ddna; 75 76 // IRQ stuff 77 unsigned int irq; 78 79 struct list_head uio_devices_list; 80 }; 81 82 extern struct class *kpc_uio_class; 83 extern struct attribute *kpc_uio_class_attrs[]; 84 85 int kp2000_probe_cores(struct kp2000_device *pcard); 86 void kp2000_remove_cores(struct kp2000_device *pcard); 87 88 // Define this quick little macro because the expression is used frequently 89 #define PCARD_TO_DEV(pcard) (&(pcard->pdev->dev)) 90 91 #endif /* KP2000_PCIE_H */ 92