39#include <linux/module.h>
40#include <linux/init.h>
41#include <linux/version.h>
46#if defined(CONFIG_SMP) && !defined(__SMP__)
57#include <linux/kernel.h>
58#include <linux/compat.h>
59#include <linux/errno.h>
60#include <linux/types.h>
61#include <linux/major.h>
64#include <linux/devfs_fs_kernel.h>
67#include <linux/proc_fs.h>
68#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
69#define NGCDRV_PROC_FS_v1
71#include <linux/seq_file.h>
72#define NGCDRV_PROC_FS_v2
76#include <linux/sched.h>
77#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
78#include <linux/sched/signal.h>
80#include <linux/interrupt.h>
82#include <linux/poll.h>
83#include <linux/delay.h>
84#include <linux/ioport.h>
86#include <asm/uaccess.h>
87#include <asm/atomic.h>
99#define NGCDRV_GFP GFP_KERNEL|GFP_DMA32
101#define NGCDRV_GFP GFP_KERNEL
107#define NGCDRV_MINOR2INST(minor) (minor >> 4)
112#define NGCDRV_MINOR2SUBDEV(minor) (minor & 0x0f)
117#define NGCDRV_MINOR(instance,i) ((instance << 4) | (i))
134#define NGCDRV_PCI_VENDOR_ID 0x10ee
135#define NGCDRV_PCI_DEVICE_ID 0x5043
140#define NGCDRV_BTYPE_XILINX_PCI 0x1111
141#define NGCDRV_BTYPE_XILINX_PCIE 0x0007
152#define NGCDRV_WRAP_CNT 0xffffffff
153#define NGCDRV_INC(x) if(*x==NGCDRV_WRAP_CNT) {*x=0;} else {(*x)++;}
154#define NGCDRV_DEC(x) if(*x==0) {*x=NGCDRV_WRAP_CNT;} else {(*x)--;}
155#define NGCDRV_DIFF(x,a,b) if(b<a){*x=(NGCDRV_WRAP_CNT-a)+b;}else{*x=b-a;}
160#define NGCDRV_CFG_REG_SIZE 256
165#define NGCDRV_NUM_CHAN 4
170#define NGCDRV_REG_CTRL 0x1C
171#define NGCDRV_REG_CTRL_X1 0x2C
172#define NGCDRV_REG_CTRL_X2 0x3C
173#define NGCDRV_REG_CTRL_X3 0x4C
174#define NGCDRV_REG_STAT 0x14
175#define NGCDRV_REG_STAT_X1 0x24
176#define NGCDRV_REG_STAT_X2 0x34
177#define NGCDRV_REG_STAT_X3 0x44
178#define NGCDRV_REG_FIFO 0x10
179#define NGCDRV_REG_FIFO_X1 0x20
180#define NGCDRV_REG_FIFO_X2 0x30
181#define NGCDRV_REG_FIFO_X3 0x40
182#define NGCDRV_CTRL_CLRCOM 0x00000001
183#define NGCDRV_CTRL_CLRDMA 0x00000002
184#define NGCDRV_CTRL_TRANSFER 0x00000010
185#define NGCDRV_CTRL_RESET 0x00008000
190#define NGCDRV_DMA_REG_DESCR 0x90
191#define NGCDRV_DMA_REG_CMD 0xA8
192#define NGCDRV_DMA_REG_IRQ 0x68
193#define NGCDRV_DMA_REG_LCNT 0xA4
194#define NGCDRV_DMA_REG_CHAN 0xC4
199#define NGCDRV_DMA_DESCR_EOC 0x2
200#define NGCDRV_DMA_DESCR_INTR 0x4
206#define NGCDRV_DMA_CMD_START 0x0002
207#define NGCDRV_DMA_CMD_ABORT 0x0004
208#define NGCDRV_DMA_CMD_INTR_CLR 0x0008
209#define NGCDRV_DMA_CMD_LCNT_MODE 0x0100
210#define NGCDRV_DMA_CMD_LCNT_STOP 0x0200
211#define NGCDRV_DMA_CMD_LCNT_CLR 0x0400
216#define NGCDRV_DMA_IRQ (1<<21)
221#define NGCDRV_DMA_REG_FIFO NGCDRV_REG_CTRL
222#define NGCDRV_DMA_FIFO_CLR NGCDRV_CTRL_CLRDMA
228#define NGCDRV_DMA_MAX PAGE_SIZE
233#define NGCDRV_DMA_KERNEL 0
234#define NGCDRV_DMA_USER 1
239#define NGCDRV_USE_VAR(x) do {(void)(x);} while (0)
247#ifdef CONFIG_DEVFS_FS
248 devfs_handle_t devfs;
284 struct workqueue_struct *
wq;
396#define NGCDRV_IRQ_SHARED IRQF_SHARED
398#define NGCDRV_IRQ_SHARED SA_SHIRQ
#define NGCDRV_MAX_PARAM
Definition ngcdrv.h:91
#define NGCDRV_NUM_CHAN
Definition ngcdrv_pci.h:165
uint8_t ngcdrv_reg_t
Definition ngcdrv_pci.h:265
ngcdrv_minors
Definition ngcdrv_pci.h:122
@ COMX3_MINOR
Definition ngcdrv_pci.h:126
@ COM_MINOR
Definition ngcdrv_pci.h:123
@ DMA_MINOR
Definition ngcdrv_pci.h:127
@ COMX2_MINOR
Definition ngcdrv_pci.h:125
@ COMX1_MINOR
Definition ngcdrv_pci.h:124
#define NGCDRV_MAX_TCB
Definition ngcdrv_tcb.h:68
Definition ngcdrv_pci.h:311
ngcdrv_state_t state
Definition ngcdrv_pci.h:312
volatile ngcdrv_reg_t * regFifo
Definition ngcdrv_pci.h:319
uint32_t tmo
Definition ngcdrv_pci.h:313
volatile ngcdrv_reg_t * regStat
Definition ngcdrv_pci.h:318
uint32_t rstLink
Definition ngcdrv_pci.h:314
volatile ngcdrv_reg_t * regCtrl
Definition ngcdrv_pci.h:317
uint32_t routeThrough
Definition ngcdrv_pci.h:315
uint32_t * fifoBuf
Definition ngcdrv_pci.h:316
Definition ngcdrv_pci.h:255
uint32_t count
Definition ngcdrv_pci.h:258
uint32_t addr_high
Definition ngcdrv_pci.h:257
uint32_t descptr
Definition ngcdrv_pci.h:259
uint32_t addr
Definition ngcdrv_pci.h:256
Definition ngcdrv_pci.h:326
volatile uint32_t overflow
Definition ngcdrv_pci.h:331
ngcdrv_descr_t ** descriptors
Definition ngcdrv_pci.h:346
ngcdrv_state_t state
Definition ngcdrv_pci.h:327
spinlock_t lock
Definition ngcdrv_pci.h:330
int sustained
Definition ngcdrv_pci.h:334
uint32_t rn
Definition ngcdrv_pci.h:344
uint32_t lcnt_mode
Definition ngcdrv_pci.h:353
wait_queue_head_t wait_queue
Definition ngcdrv_pci.h:351
struct semaphore sem_buf
Definition ngcdrv_pci.h:350
int dma_inprogress
Definition ngcdrv_pci.h:333
void ** km_buffer
Definition ngcdrv_pci.h:336
unsigned long descr_addr
Definition ngcdrv_pci.h:348
void ** buffer
Definition ngcdrv_pci.h:341
struct semaphore sem_wake
Definition ngcdrv_pci.h:349
unsigned long km_rsize
Definition ngcdrv_pci.h:340
uint32_t sync_mode
Definition ngcdrv_pci.h:355
uint32_t km_buffer_size
Definition ngcdrv_pci.h:338
atomic_t sync_cnt
Definition ngcdrv_pci.h:354
ngcdrv_ipp_t ipp
Definition ngcdrv_pci.h:352
int valid
Definition ngcdrv_pci.h:335
uint32_t sg_len
Definition ngcdrv_pci.h:329
uint32_t km_buffer_num
Definition ngcdrv_pci.h:337
int aborted
Definition ngcdrv_pci.h:332
uint32_t buffer_size
Definition ngcdrv_pci.h:343
unsigned rsize
Definition ngcdrv_pci.h:345
uint32_t km_rn
Definition ngcdrv_pci.h:339
volatile uint32_t done_count
Definition ngcdrv_pci.h:328
uint32_t buffer_num
Definition ngcdrv_pci.h:342
uint32_t descr_num
Definition ngcdrv_pci.h:347
Definition ngcdrv_pci.h:280
int init
Definition ngcdrv_pci.h:286
volatile uint32_t scnt
Definition ngcdrv_pci.h:297
volatile uint32_t done_count
Definition ngcdrv_pci.h:293
volatile uint32_t dma_count
Definition ngcdrv_pci.h:294
int realloc
Definition ngcdrv_pci.h:304
void ** dma_buffer
Definition ngcdrv_pci.h:288
uint32_t dma_rn
Definition ngcdrv_pci.h:291
volatile uint32_t idx_out
Definition ngcdrv_pci.h:296
void * mem
Definition ngcdrv_pci.h:299
volatile uint32_t idx_in
Definition ngcdrv_pci.h:295
int32_t param[NGCDRV_MAX_PARAM]
Definition ngcdrv_pci.h:302
uint32_t dma_buffer_num
Definition ngcdrv_pci.h:289
uint32_t dma_buffer_size
Definition ngcdrv_pci.h:290
uint32_t mode
Definition ngcdrv_pci.h:281
unsigned long dma_rsize
Definition ngcdrv_pci.h:292
ngcdrv_tcb_t * task
Definition ngcdrv_pci.h:300
uint32_t snum
Definition ngcdrv_pci.h:298
int enabled
Definition ngcdrv_pci.h:287
uint32_t mode_req
Definition ngcdrv_pci.h:282
struct workqueue_struct * wq
Definition ngcdrv_pci.h:284
struct tasklet_struct tasklet
Definition ngcdrv_pci.h:283
ngcdrv_tcb_t * task_reg[NGCDRV_MAX_TCB]
Definition ngcdrv_pci.h:303
ngcdrv_work_t work
Definition ngcdrv_pci.h:285
int taskId
Definition ngcdrv_pci.h:301
Definition ngcdrv_pci.h:245
unsigned int pid
Definition ngcdrv_pci.h:246
Definition ngcdrv_pci.h:362
int irq
Definition ngcdrv_pci.h:370
int dma_width
Definition ngcdrv_pci.h:379
spinlock_t lock
Definition ngcdrv_pci.h:380
volatile unsigned int dma_report
Definition ngcdrv_pci.h:388
int btype
Definition ngcdrv_pci.h:378
ngcdrv_dma_t DMA
Definition ngcdrv_pci.h:369
volatile unsigned int dma_errors
Definition ngcdrv_pci.h:387
int irq_realtime
Definition ngcdrv_pci.h:371
int irq_same
Definition ngcdrv_pci.h:373
int version
Definition ngcdrv_pci.h:377
char name[32]
Definition ngcdrv_pci.h:365
int id
Definition ngcdrv_pci.h:364
volatile const char * err_status
Definition ngcdrv_pci.h:386
int irq_sharable
Definition ngcdrv_pci.h:372
unsigned long irq_count
Definition ngcdrv_pci.h:375
int latency
Definition ngcdrv_pci.h:376
ngcdrv_com_t COM[NGCDRV_NUM_CHAN]
Definition ngcdrv_pci.h:368
volatile ngcdrv_reg_t * reg_base
Definition ngcdrv_pci.h:366
struct pci_dev * pcidev
Definition ngcdrv_pci.h:363
caddr_t reg_page
Definition ngcdrv_pci.h:367
int irq_init
Definition ngcdrv_pci.h:374
Definition ngcdrv_tcb.h:56
Definition ngcdrv_pci.h:271
unsigned long data
Definition ngcdrv_pci.h:273
struct work_struct work
Definition ngcdrv_pci.h:272