AFHBA404
AFHBA404 connects ACQ2106 to PCI-Express
|
Go to the documentation of this file.
8 #ifndef AFHBA_STREAM_DRV_H_
9 #define AFHBA_STREAM_DRV_H_
16 #define NBUFFERS_FIFO NBUFFERS
18 #define NBUFFERS_MASK 127
20 #define BUFFER_LEN 0x100000
24 #define N_DRV_STATES 3
26 #define AFDMAC_PAGE 0x400
27 #define AFDMAC_LL_PAGE 64
29 #define AFDMAC_DESC_ADDR_MASK 0xfffffc00
31 #define AFDMAC_DESC_WRITE 0x00000200
32 #define AFDMAC_DESC_EOT 0x00000100
34 #define AFDMAC_DESC_LEN_MASK 0x000000f0
35 #define AFDMAC_DESC_LEN_SHL 4
37 #define AFDMAC_DESC_ID_MASK 0x0000000f
38 #define AFDMAC_DESC_ID 0x0000000f
40 #define AFDMAC_DESCR(pa, pages, id) \
41 (((pa)&AFDMAC_DESC_ADDR_MASK)| \
42 ((((pages)-1) << AFDMAC_DESC_LEN_SHL)&AFDMAC_DESC_LEN_MASK)| \
47 #ifdef MSI_BLOCK_WORKS
58 #if defined(PGM_DEBUG_REGS_ACCESS)
59 #define DEV_DBG dev_info
61 #define DEV_DBG dev_dbg
71 struct list_head
list;
72 struct proc_dir_entry *
proc;
76 #define bp_empties bp[BS_EMPTY]
77 #define bp_filling bp[BS_FILLING]
78 #define bp_full bp[BS_FULL]
124 #define WORK_REQUEST 0
160 #define AO_BURST_DEV(sdev) ((struct AO_BURST_DEV*)sdev->user)
162 #define MIRROR(adev, ix) (adev->stream_dev->dma_regs[ix])
169 #define PCI_REG_WRITE(adev, regoff, value) \
170 _afs_write_pcireg(adev, regoff, value)
172 #define PCI_REG_READ(adev, regoff) \
173 _afs_read_pcireg(adev, regoff)
178 #define DMA_CTRL_WR(adev, value) \
179 _afs_write_dmareg(adev, DMA_CTRL, MIRROR(adev, DMA_CTRL) = value)
182 #define DMA_CTRL_RD(adev) \
183 (MIRROR(adev, DMA_CTRL) = _afs_read_dmareg(adev, DMA_CTRL))
185 #define DMA_CTRL_CLR(adev, bits) do { \
186 u32 ctrl = DMA_CTRL_RD(adev); \
187 _afs_write_dmareg(adev, DMA_CTRL, MIRROR(adev, DMA_CTRL) &= ~(bits)); \
188 ctrl = DMA_CTRL_RD(adev); \
189 if ((ctrl&bits) != 0){ \
190 dev_err(pdev(adev), \
191 "DMA_CTRL_CLR sfp:%c wanted to clear:%08x but got %08x", \
192 adev->sfp+'A', bits, ctrl); \
196 #define DMA_CTRL_SET(adev, bits) do { \
197 u32 ctrl = DMA_CTRL_RD(adev); \
198 _afs_write_dmareg(adev, DMA_CTRL, MIRROR(adev, DMA_CTRL) |= (bits)); \
199 ctrl = DMA_CTRL_RD(adev); \
200 if ((ctrl&bits) == 0){ \
201 dev_err(pdev(adev), \
202 "DMA_CTRL_SET sfp:%c wanted to set:%08x but got %08x", \
203 adev->sfp+'A', bits, ctrl); \
208 #define DMA_TEST_WR(adev, value) \
209 _afs_write_dmareg(adev, DMA_TEST, MIRROR(adev, DMA_TEST) = (value))
211 #define DMA_TEST_RD(adev) \
212 (MIRROR(adev, DMA_TEST) = _afs_read_dmareg(adev, DMA_TEST))
219 #define afs_dma_reset(adev, dma_sel) do { \
220 DEV_DBG(pdev(adev), "afs_dma_reset, called from %s %d", __FILE__, __LINE__); \
221 __afs_dma_reset(adev, dma_sel); \
226 #define afs_start_dma(adev, dma_sel) do { \
227 DEV_DBG(pdev(adev), "afs_start_dma, called from %s %d", __FILE__, __LINE__); \
228 __afs_start_dma(adev, dma_sel); \
233 #define afs_stop_dma(adev, dma_sel) do { \
234 DEV_DBG(pdev(adev), "afs_stop_dma, called from %s %d", __FILE__, __LINE__); \
235 __afs_stop_dma(adev, dma_sel); \
238 #define DMA_DATA_FIFSTA_RD(adev) _afs_read_dmareg(adev, DMA_DATA_FIFSTA)
239 #define DMA_DESC_FIFSTA_RD(adev) _afs_read_dmareg(adev, DMA_DESC_FIFSTA)
240 #define DMA_PUSH_DESC_STA_RD(adev) _afs_read_dmareg(adev, DMA_PUSH_DESC_STA)
241 #define DMA_PULL_DESC_STA_RD(adev) _afs_read_dmareg(adev, DMA_PULL_DESC_STA)
244 #define EMPTY1 0xee11ee11
245 #define EMPTY2 0x22ee22ee
247 #define RTDMAC_DATA_FIFO_CNT 0x1000
248 #define RTDMAC_DESC_FIFO_CNT 0x1000
250 #define HB_ENTRY(plist) list_entry(plist, struct HostBuffer, list)
261 return adev->
sfp - SFP_A +
'A';
void __afs_stop_dma(struct AFHBA_DEV *adev, u32 dma_sel)
void _afs_write_pcireg(struct AFHBA_DEV *adev, int regoff, u32 value)
struct XLLC_DEF pull_llc_def
wait_queue_head_t w_waitq
struct AFHBA_STREAM_DEV::BOTTLING_PLANT bp[N_DRV_STATES]
unsigned buffers_discarded
unsigned rx_buffers_previous
u32 dma_regs[DMA_REGS_COUNT]
struct XLLC_DEF push_llc_def
struct task_struct * mon_task
void(* onStopPull)(struct AFHBA_DEV *adev)
unsigned * desc_fifo_histo
void(* init_descriptors)(struct AFHBA_STREAM_DEV *sdev)
int(* on_push_dma_timeout)(struct AFHBA_DEV *adev)
struct proc_dir_entry * proc_dir_root
enum AFHBA_STREAM_DEV::ZI_REPORT zi_report
int afs_comms_init(struct AFHBA_DEV *adev)
int afs_init_procfs(struct AFHBA_DEV *adev)
bool aurora_fail_detected
int afs_comms_ready(struct AFHBA_DEV *adev)
unsigned buffers_received
unsigned catchup_histo[NBUFFERS]
u32 _afs_read_pcireg(struct AFHBA_DEV *adev, int regoff)
wait_queue_head_t return_waitq
void _afs_write_comreg(struct AFHBA_DEV *adev, int regoff, u32 value)
struct AFHBA_STREAM_DEV::JOB job
void(* onStopPush)(struct AFHBA_DEV *adev)
wait_queue_head_t w_waitq
struct proc_dir_entry * proc
struct AFHBA_STREAM_DEV::WORK work
struct task_struct * w_task
u32 _afs_read_dmareg(struct AFHBA_DEV *adev, int regoff)
void __afs_dma_reset(struct AFHBA_DEV *adev, u32 dma_sel)
unsigned * data_fifo_histo
void __afs_start_dma(struct AFHBA_DEV *adev, u32 dma_sel)
int afs_reset_buffers(struct AFHBA_DEV *adev)
int(* on_pull_dma_timeout)(struct AFHBA_DEV *adev)
void _afs_write_dmareg(struct AFHBA_DEV *adev, int regoff, u32 value)
struct task_struct * w_task