AFHBA404
AFHBA404 connects ACQ2106 to PCI-Express
|
Go to the documentation of this file.
24 #ifndef ACQ_FIBER_HBA_H_
25 #define ACQ_FIBER_HBA_H_
27 #include <linux/device.h>
28 #include <linux/delay.h>
29 #include <linux/interrupt.h>
31 #include <linux/ioctl.h>
32 #include <linux/kernel.h>
33 #include <linux/kthread.h>
34 #include <linux/list.h>
35 #include <linux/pci.h>
36 #include <linux/time.h>
37 #include <linux/init.h>
38 #include <linux/timex.h>
39 #include <linux/vmalloc.h>
41 #include <linux/moduleparam.h>
42 #include <linux/mutex.h>
44 #include <linux/uaccess.h>
45 #include <linux/version.h>
47 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
48 #include <uapi/linux/sched/types.h>
51 #ifdef CONFIG_KERNEL_ASSERTS
53 #define assert(p) KERNEL_ASSERT(#p, p)
55 #define assert(p) do { \
57 printk(KERN_CRIT "BUG at %s:%d assert(%s)\n", \
58 __FILE__, __LINE__, #p); \
77 #define MAP_COUNT_MAX 6
79 #define MAP_COUNT_4G1 2
80 #define MAP_COUNT_4G2 4
82 #define MAP_COUNT_4G4 6
101 struct list_head
list;
119 struct list_head
list;
153 #define SZM1(field) (sizeof(field)-1)
172 #define PSZ (sizeof (struct AFHBA_DEV_PATH))
173 #define PD(file) ((struct AFHBA_DEV_PATH *)(file)->private_data)
174 #define DEV(file) (PD(file)->dev)
176 #define pdev(adev) (&(adev)->pci_dev->dev)
178 #define LOC(adev) ((adev)->mappings[0].va)
179 #define REM(adev) ((adev)->remote)
183 #define REMOTE_BAR2 2
189 #define FPGA_REVISION_REG 0x0000
190 #define HOST_PCIE_CONTROL_REG 0x0004
191 #define HOST_PCIE_INTERRUPT_REG 0x0008
192 #define PCI_CONTROL_STATUS_REG 0x000C
193 #define PCIE_DEVICE_CONTROL_STATUS_REG 0x0010
194 #define PCIE_LINK_CONTROL_STATUS_REG 0x0014
195 #define PCIE_CONF_REG 0x0018
196 #define PCIE_BUFFER_CTRL_REG 0x001C
197 #define HOST_TEST_REG 0x0020
198 #define HOST_COUNTER_REG 0x0024
199 #define HOST_PCIE_DEBUG_REG 0x0028
201 #define HOST_PCIE_LATSTATS_1 0x0030
202 #define HOST_PCIE_LATSTATS_2 0x0034
204 #define HOST_SPI_FLASH_CONTROL_REG 0x0040
205 #define HOST_SPI_FLASH_DATA_REG 0x0044
206 #define HOST_MON_REG 0x0048
208 #define AURORA_STEP 0x0010
209 #define AURORA_CONTROL_REGA 0x0080
210 #define AURORA_STATUS_REGA 0x0084
211 #define SFP_I2C_DATA_REGA 0x0088
212 #define AURORA_STATUS2_REGA 0x008C
214 #define AURORA_CONTROL_REG(sfp) (AURORA_CONTROL_REGA + AURORA_STEP*(sfp))
215 #define AURORA_STATUS_REG(sfp) (AURORA_STATUS_REGA + AURORA_STEP*(sfp))
216 #define AURORA_STATUS2_REG(sfp) (AURORA_STATUS2_REGA + AURORA_STEP*(sfp))
217 #define SFP_I2C_DATA_REG(sfp) (SFP_I2C_DATA_REGA + AURORA_STEP*(sfp))
219 #define HOST_COMMS_FIFO_CONTROL_REG 0x00C0
220 #define HOST_COMMS_FIFO_STATUS_REG 0x00C4
221 #define ACQ400_COMMS_READ 0x0400
224 #define ASR(acr) ((acr)+4)
225 #define I2C(acr) ((acr)+8)
228 #define SFP_I2C_SCL1_R 0
229 #define SFP_I2C_SDA1_R 1
230 #define SFP_I2C_SCL1_W 8
231 #define SFP_I2C_SDA1_W 9
232 #define SFP_I2C_SCL2_R 0
233 #define SFP_I2C_SDA2_R 1
234 #define SFP_I2C_SCL2_W 8
235 #define SFP_I2C_SDA2_W 9
237 #define AFHBA_SPI_BUSY (1<<31)
238 #define AFHBA_SPI_CTL_START (1<<7)
239 #define AFHBA_SPI_CS (1<<0)
240 #define AFHBA_SPI_HOLD (1<<1)
241 #define AFHBA_SPI_WP (1<<2)
243 #define AFHBA_AURORA_CTRL_ENA (1<<31)
244 #define AFHBA_AURORA_CTRL_TXDIS (1<<16)
245 #define AFHBA_AURORA_CTRL_CLR (1<<7)
246 #define AFHBA_AURORA_CTRL_PWR_DWN (1<<4)
247 #define AFHBA_AURORA_CTRL_LOOPBACK (0x7)
249 #define AFHBA_AURORA_STAT_SFP_PRESENTn (1<<31)
250 #define AFHBA_AURORA_STAT_SFP_LOS (1<<30)
251 #define AFHBA_AURORA_STAT_SFP_TX_FAULT (1<<29)
252 #define AFHBA_AURORA_STAT_HARD_ERR (1<<6)
253 #define AFHBA_AURORA_STAT_SOFT_ERR (1<<5)
254 #define AFHBA_AURORA_STAT_FRAME_ERR (1<<4)
255 #define AFHBA_AURORA_STAT_CHANNEL_UP (1<<1)
256 #define AFHBA_AURORA_STAT_LANE_UP (1<<0)
258 #define AFHBA_AURORA_STAT_ERR \
259 (AFHBA_AURORA_STAT_SFP_LOS|AFHBA_AURORA_STAT_SFP_TX_FAULT|\
260 AFHBA_AURORA_STAT_HARD_ERR|AFHBA_AURORA_STAT_SOFT_ERR|\
261 AFHBA_AURORA_STAT_FRAME_ERR)
264 #define HOST_MON_TEMP_SHL 20
265 #define HOST_MON_USR_TEMP (1<<5)
266 #define HOST_MON_OVER_TEMP (1<<4)
267 #define HOST_MON_VOLT_ALARM 0x7
270 #define ZYNQ_BASE 0x0000
283 #define PCIE_BASE 0x1000
295 #define PCIE_CONF_AF_PORT_SHL 16
297 #define DMA_BASE 0x2000
320 inline static const char* sDMA_SEL(
enum DMA_SEL dma_sel)
326 default:
return "none";
330 #define DMA_PUSH_DESC_FIFO 0x2040
331 #define DMA_PULL_DESC_FIFO 0x2080
335 #define DMA_CTRL_PULL_SHL 16
336 #define DMA_CTRL_PUSH_SHL 0
338 #define DMA_CTRL_EN 0x0001
339 #define DMA_CTRL_FIFO_RST 0x0010
340 #define DMA_CTRL_LOW_LAT 0x0020
341 #define DMA_CTRL_RECYCLE 0x0040
342 #define DMA_CTRL_RAM 0x8000
344 #define DMA_DESCR_ADDR 0xfffffc00
345 #define DMA_DESCR_INTEN 0x00000100
346 #define DMA_DESCR_LEN 0x000000f0
347 #define DMA_DESCR_ID 0x0000000f
349 #define DMA_DATA_FIFO_EMPTY 0x0001
350 #define DMA_DATA_FIFO_FULL 0x0002
351 #define DMA_DATA_FIFO_UNDER 0x0004
352 #define DMA_DATA_FIFO_OVER 0x0008
353 #define DMA_DATA_FIFO_COUNT 0xfff0
354 #define DMA_DATA_FIFO_COUNT_SHL 4
356 #define DMA_DESCR_LEN_BYTES(descr) ((1<<((descr&DMA_DESCR_LEN)>>4))*1024)
358 #define DMA_PUSH_DESC_RAM 0x6000
359 #define DMA_PULL_DESC_RAM 0x7000
362 #define DMA_DIR_DESC_FIFO(dma_sel) \
363 ((dma_sel)==DMA_PUSH_SEL? DMA_PUSH_DESC_FIFO: DMA_PULL_DESC_FIFO)
365 #define DMA_DIR_DESC_LEN(dma_sel) \
366 ((dma_sel)==DMA_PUSH_SEL? DMA_PUSH_DESC_LEN: DMA_PULL_DESC_LEN)
368 #define DMA_DIR_DESC_RAM(dma_sel) \
369 ((dma_sel)==DMA_PUSH_SEL? DMA_PUSH_DESC_RAM: DMA_PULL_DESC_RAM)
393 #define COMMON_BASE 0xf000
398 #define COM_SOFT_TRIGGER_EN 0x0001
struct AFHBA_DEV * afhba_lookupDeviceFromClass(struct device *dev)
struct AFHBA_DEV * afhba_lookupDev(struct device *dev)
int afhba_registerDevice(struct AFHBA_DEV *tdev)
void afhba_remove_sysfs(struct AFHBA_DEV *adev)
int afhba_stream_drv_init(struct AFHBA_DEV *adev)
struct platform_device * hba_sfp_i2c[2]
u32 afhba_read_reg(struct AFHBA_DEV *adev, int regoff)
struct AFHBA_DEV * afhba_lookupDevice(int major)
int afhba_release(struct inode *inode, struct file *file)
struct AFHBA_DEV * afhba_lookupDevicePci(struct pci_dev *pci_dev)
#define DMA_CTRL_PULL_SHL
void afhba_deleteDevice(struct AFHBA_DEV *tdev)
void afhba_create_sysfs_class(struct AFHBA_DEV *adev)
#define DMA_CTRL_PUSH_SHL
enum HostBuffer::BSTATE bstate
struct AFHBA_STREAM_DEV * stream_dev
void afhba_create_sysfs(struct AFHBA_DEV *adev)
void afhba_remove_sysfs_class(struct AFHBA_DEV *adev)
struct list_head afhba_devices
struct device * class_dev
struct proc_dir_entry * proc_dir_root
int aurora_status_read_count
int afhba_stream_drv_del(struct AFHBA_DEV *adev)
struct list_head my_buffers
void afhba_write_reg(struct AFHBA_DEV *adev, int regoff, u32 value)
struct AFHBA_DEV::PciMapping mappings[MAP_COUNT_MAX]
#define AURORA_STATUS2_REG(sfp)
struct dentry * debug_dir
struct file_operations * stream_fops