devLib2  2.12
PCI driver/hardware development tool

Purpose

The exploreApp support is intended as a tool to explore new PCI devices. This may be useful when preparing to write a dedicated driver and/or during development of PCI/PCIe device firmware. exploreApp allows a PCI register to be read and/or written an EPICS record. For example:

record(longout, "pcitestout") {
field(DTYP, "Explore Write32 LSB")
field(OUT , "@8:0.0 bar=0 offset=0xc")
}

The record pcitestout will be connected to the PCI device 8:0.0 (bus 8, device 0, function 0) with the first BAR. A single write of 4 bytes is made when the record is processed.

The following can be added to some xyzApp/src/Makefile to include exploreApp.

PROD_IOC += myioc
DBD += myioc.dbd
myioc_DBD += exploreSupport.dbd
myioc_LIBS += explorepci epicspci

Options

INP/OUT link strings may contain the following components

For record types: longout, bo, mbbo, mbboDirect, ao allowed DTYP are:

For record types: longin, longout, bi, bo, mbbi, mbbo, mbbiDirect, mbboDirect, ai, ao

The ao record type also accepts

The ai record type also accepts

The waveform record type accepts both integer Read and Write DTYP. The step= link option may be applied to change how the address counter is incremented. The default step size is the read size (eg. 4 for Read32). A step size of 0 will read the base address NELM times.

PCI Interrupt

Limited support of PCI interrupts is available on Linux only. A longin record with DTYP="Explore IRQ Count" and SCAN="I/O Intr" will be processed each time an interrupt occurs.

This requires that a UIO kernel module be installed.

FRIB Specific

The DTYP="Explore FRIB Flash" support implements a FRIB specific protocol for accessing a SPI flash chip over PCI. The frib-flash.db file demonstrates use.