15#include <linux/module.h>
16#include <linux/init.h>
17#include <linux/version.h>
22#if defined(CONFIG_SMP) && !defined(__SMP__)
33#include <linux/kernel.h>
34#include <linux/compat.h>
35#include <linux/errno.h>
36#include <linux/types.h>
37#include <linux/major.h>
38#include <linux/vmalloc.h>
41#include <linux/devfs_fs_kernel.h>
44#include <linux/proc_fs.h>
45#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
46#define NGCDRV_PROC_FS_v1
48#include <linux/seq_file.h>
49#define NGCDRV_PROC_FS_v2
53#include <linux/sched.h>
54#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
55#include <linux/sched/signal.h>
57#include <linux/interrupt.h>
59#include <linux/poll.h>
60#include <linux/delay.h>
61#include <linux/ioport.h>
63#include <asm/uaccess.h>
64#include <asm/atomic.h>
76#define NGCDRV_GFP GFP_KERNEL|GFP_DMA32
78#define NGCDRV_GFP GFP_KERNEL
84#define NGCDRV_MINOR2INST(minor) (minor >> 4)
89#define NGCDRV_MINOR2SUBDEV(minor) (minor & 0x0f)
94#define NGCDRV_MINOR(instance,i) ((instance << 4) | (i))
111#define NGCDRV_PCI_VENDOR_ID 0x10ee
112#define NGCDRV_PCI_DEVICE_ID 0x5043
117#define NGCDRV_BTYPE_XILINX_PCI 0x1111
118#define NGCDRV_BTYPE_XILINX_PCIE 0x0007
129#define NGCDRV_WRAP_CNT 0xffffffff
130#define NGCDRV_INC(x) if(*x==NGCDRV_WRAP_CNT) {*x=0;} else {(*x)++;}
131#define NGCDRV_DEC(x) if(*x==0) {*x=NGCDRV_WRAP_CNT;} else {(*x)--;}
132#define NGCDRV_DIFF(x,a,b) if(b<a){*x=(NGCDRV_WRAP_CNT-a)+b;}else{*x=b-a;}
137#define NGCDRV_CFG_REG_SIZE 256
142#define NGCDRV_NUM_CHAN 4
147#define NGCDRV_REG_CTRL 0x1C
148#define NGCDRV_REG_CTRL_X1 0x2C
149#define NGCDRV_REG_CTRL_X2 0x3C
150#define NGCDRV_REG_CTRL_X3 0x4C
151#define NGCDRV_REG_STAT 0x14
152#define NGCDRV_REG_STAT_X1 0x24
153#define NGCDRV_REG_STAT_X2 0x34
154#define NGCDRV_REG_STAT_X3 0x44
155#define NGCDRV_REG_FIFO 0x10
156#define NGCDRV_REG_FIFO_X1 0x20
157#define NGCDRV_REG_FIFO_X2 0x30
158#define NGCDRV_REG_FIFO_X3 0x40
159#define NGCDRV_CTRL_CLRCOM 0x00000001
160#define NGCDRV_CTRL_CLRDMA 0x00000002
161#define NGCDRV_CTRL_TRANSFER 0x00000010
162#define NGCDRV_CTRL_RESET 0x00008000
167#define NGCDRV_DMA_REG_DESCR 0x90
168#define NGCDRV_DMA_REG_CMD 0xA8
169#define NGCDRV_DMA_REG_IRQ 0x68
170#define NGCDRV_DMA_REG_LCNT 0xA4
171#define NGCDRV_DMA_REG_CHAN 0xC4
176#define NGCDRV_DMA_DESCR_EOC 0x2
177#define NGCDRV_DMA_DESCR_INTR 0x4
183#define NGCDRV_DMA_CMD_START 0x0002
184#define NGCDRV_DMA_CMD_ABORT 0x0004
185#define NGCDRV_DMA_CMD_INTR_CLR 0x0008
186#define NGCDRV_DMA_CMD_LCNT_MODE 0x0100
187#define NGCDRV_DMA_CMD_LCNT_STOP 0x0200
188#define NGCDRV_DMA_CMD_LCNT_CLR 0x0400
193#define NGCDRV_DMA_IRQ (1<<21)
198#define NGCDRV_DMA_REG_FIFO NGCDRV_REG_CTRL
199#define NGCDRV_DMA_FIFO_CLR NGCDRV_CTRL_CLRDMA
205#define NGCDRV_DMA_MAX PAGE_SIZE
210#define NGCDRV_DMA_KERNEL 0
211#define NGCDRV_DMA_USER 1
216#define NGCDRV_USE_VAR(x) do {(void)(x);} while (0)
224#ifdef CONFIG_DEVFS_FS
225 devfs_handle_t devfs;
261 struct workqueue_struct *
wq;
373#define NGCDRV_IRQ_SHARED IRQF_SHARED
375#define NGCDRV_IRQ_SHARED SA_SHIRQ
#define NGCDRV_MAX_PARAM
Definition ngcdrv.h:92
#define NGCDRV_NUM_CHAN
Definition ngcdrv_pci.h:142
uint8_t ngcdrv_reg_t
Definition ngcdrv_pci.h:242
ngcdrv_minors
Definition ngcdrv_pci.h:99
@ COMX3_MINOR
Definition ngcdrv_pci.h:103
@ COM_MINOR
Definition ngcdrv_pci.h:100
@ DMA_MINOR
Definition ngcdrv_pci.h:104
@ COMX2_MINOR
Definition ngcdrv_pci.h:102
@ COMX1_MINOR
Definition ngcdrv_pci.h:101
#define NGCDRV_MAX_TCB
Definition ngcdrv_tcb.h:59
Definition ngcdrv_pci.h:288
ngcdrv_state_t state
Definition ngcdrv_pci.h:289
volatile ngcdrv_reg_t * regFifo
Definition ngcdrv_pci.h:296
uint32_t tmo
Definition ngcdrv_pci.h:290
volatile ngcdrv_reg_t * regStat
Definition ngcdrv_pci.h:295
uint32_t rstLink
Definition ngcdrv_pci.h:291
volatile ngcdrv_reg_t * regCtrl
Definition ngcdrv_pci.h:294
uint32_t routeThrough
Definition ngcdrv_pci.h:292
uint32_t * fifoBuf
Definition ngcdrv_pci.h:293
Definition ngcdrv_pci.h:232
uint32_t count
Definition ngcdrv_pci.h:235
uint32_t addr_high
Definition ngcdrv_pci.h:234
uint32_t descptr
Definition ngcdrv_pci.h:236
uint32_t addr
Definition ngcdrv_pci.h:233
Definition ngcdrv_pci.h:303
volatile uint32_t overflow
Definition ngcdrv_pci.h:308
ngcdrv_descr_t ** descriptors
Definition ngcdrv_pci.h:323
ngcdrv_state_t state
Definition ngcdrv_pci.h:304
spinlock_t lock
Definition ngcdrv_pci.h:307
int sustained
Definition ngcdrv_pci.h:311
uint32_t rn
Definition ngcdrv_pci.h:321
uint32_t lcnt_mode
Definition ngcdrv_pci.h:330
wait_queue_head_t wait_queue
Definition ngcdrv_pci.h:328
struct semaphore sem_buf
Definition ngcdrv_pci.h:327
int dma_inprogress
Definition ngcdrv_pci.h:310
void ** km_buffer
Definition ngcdrv_pci.h:313
unsigned long descr_addr
Definition ngcdrv_pci.h:325
void ** buffer
Definition ngcdrv_pci.h:318
struct semaphore sem_wake
Definition ngcdrv_pci.h:326
unsigned long km_rsize
Definition ngcdrv_pci.h:317
uint32_t sync_mode
Definition ngcdrv_pci.h:332
uint32_t km_buffer_size
Definition ngcdrv_pci.h:315
atomic_t sync_cnt
Definition ngcdrv_pci.h:331
ngcdrv_ipp_t ipp
Definition ngcdrv_pci.h:329
int valid
Definition ngcdrv_pci.h:312
uint32_t sg_len
Definition ngcdrv_pci.h:306
uint32_t km_buffer_num
Definition ngcdrv_pci.h:314
int aborted
Definition ngcdrv_pci.h:309
uint32_t buffer_size
Definition ngcdrv_pci.h:320
unsigned rsize
Definition ngcdrv_pci.h:322
uint32_t km_rn
Definition ngcdrv_pci.h:316
volatile uint32_t done_count
Definition ngcdrv_pci.h:305
uint32_t buffer_num
Definition ngcdrv_pci.h:319
uint32_t descr_num
Definition ngcdrv_pci.h:324
Definition ngcdrv_pci.h:257
int init
Definition ngcdrv_pci.h:263
volatile uint32_t scnt
Definition ngcdrv_pci.h:274
volatile uint32_t done_count
Definition ngcdrv_pci.h:270
volatile uint32_t dma_count
Definition ngcdrv_pci.h:271
int realloc
Definition ngcdrv_pci.h:281
void ** dma_buffer
Definition ngcdrv_pci.h:265
uint32_t dma_rn
Definition ngcdrv_pci.h:268
volatile uint32_t idx_out
Definition ngcdrv_pci.h:273
void * mem
Definition ngcdrv_pci.h:276
volatile uint32_t idx_in
Definition ngcdrv_pci.h:272
int32_t param[NGCDRV_MAX_PARAM]
Definition ngcdrv_pci.h:279
uint32_t dma_buffer_num
Definition ngcdrv_pci.h:266
uint32_t dma_buffer_size
Definition ngcdrv_pci.h:267
uint32_t mode
Definition ngcdrv_pci.h:258
unsigned long dma_rsize
Definition ngcdrv_pci.h:269
ngcdrv_tcb_t * task
Definition ngcdrv_pci.h:277
uint32_t snum
Definition ngcdrv_pci.h:275
int enabled
Definition ngcdrv_pci.h:264
uint32_t mode_req
Definition ngcdrv_pci.h:259
struct workqueue_struct * wq
Definition ngcdrv_pci.h:261
struct tasklet_struct tasklet
Definition ngcdrv_pci.h:260
ngcdrv_tcb_t * task_reg[NGCDRV_MAX_TCB]
Definition ngcdrv_pci.h:280
ngcdrv_work_t work
Definition ngcdrv_pci.h:262
int taskId
Definition ngcdrv_pci.h:278
Definition ngcdrv_pci.h:222
unsigned int pid
Definition ngcdrv_pci.h:223
Definition ngcdrv_pci.h:339
int irq
Definition ngcdrv_pci.h:347
int dma_width
Definition ngcdrv_pci.h:356
spinlock_t lock
Definition ngcdrv_pci.h:357
volatile unsigned int dma_report
Definition ngcdrv_pci.h:365
int btype
Definition ngcdrv_pci.h:355
ngcdrv_dma_t DMA
Definition ngcdrv_pci.h:346
volatile unsigned int dma_errors
Definition ngcdrv_pci.h:364
int irq_realtime
Definition ngcdrv_pci.h:348
int irq_same
Definition ngcdrv_pci.h:350
int version
Definition ngcdrv_pci.h:354
char name[32]
Definition ngcdrv_pci.h:342
int id
Definition ngcdrv_pci.h:341
volatile const char * err_status
Definition ngcdrv_pci.h:363
int irq_sharable
Definition ngcdrv_pci.h:349
unsigned long irq_count
Definition ngcdrv_pci.h:352
int latency
Definition ngcdrv_pci.h:353
ngcdrv_com_t COM[NGCDRV_NUM_CHAN]
Definition ngcdrv_pci.h:345
volatile ngcdrv_reg_t * reg_base
Definition ngcdrv_pci.h:343
struct pci_dev * pcidev
Definition ngcdrv_pci.h:340
caddr_t reg_page
Definition ngcdrv_pci.h:344
int irq_init
Definition ngcdrv_pci.h:351
Definition ngcdrv_tcb.h:47
Definition ngcdrv_pci.h:248
unsigned long data
Definition ngcdrv_pci.h:250
struct work_struct work
Definition ngcdrv_pci.h:249