IPAC Driver Release Notes
Andrew Johnson
This document describes the changes which have been made to my vxWorks/EPICS
IndustryPack driver as it has evolved since first release. The earliest
version appears at the bottom, with more recent releases above it.
Version 2.15
Added:
- Support for the IP521 module was added to the ip520 driver, which handles
both the RS-422 and RS-485 2-wire half-duplex serial standards.
- IOC shell scripts were added to easily initialize IP-Octal and ip520
modules. Further information about scripts can be found in their respective
documentation and in the
xxx
module wiki.
Changed:
- Converted the code repository from Subversion at APS to git
at github.
- Adjusted various #include lines to follow the rules for building
shared libraries on Windows.
Version 2.14
Added:
- Support for Acromag's IP520 - eight asynchronous EIA/TIA-232E serial
communication ports on an Industry Pack module. The EPICS IP520 support
provides baudrates from 1,200 to 230,400 and reduced CPU overhead by way
of the IP520's 64-character transmit and receive FIFO's.
Version 2.13
Added:
- New routine int moduleProbe(void *cPrivate, epicsUInt16 slot);
added to the ipac_carrier_t table. This is optional for VME carriers
where the devLib routine devReadProbe() can be used to check for the presence of
a module in a specific carrier slot. If it safe to access the ID Prom of an
empty slot, the carrier routine may just return 1, it does not need to check
whether the slot is currently occupied.
Changed:
- The routine ipcCheckId() no longer calls the devLib routine
devReadProbe(), so it can now be used on non-VME systems. Carrier drivers that
used this routine to detect the presence of a module in a slot must be modified
to perform their own probe before calling ipcCheckId(). Both the
drvXy9660.c and drvHy8002.c carrier drivers were modified to do this, so can be
used as examples of the changes needed.
- In the Xy9660 driver the parameter string parser would not accept the 'R'
card reset request described in the documentation. This bug has existed in all
previous versions of the driver, but should now be fixed.
- The Xy9660 driver would not work with some VME CPUs because the calls to
devWriteProbe in the initialise routine requested word-size
write operations, but only single-byte operations succeed. The routine has been
changed to use byte-size write probes.
Version 2.12
Added:
- New iocsh command ipacAddNullCarrier, so iocsh users can reserve a
carrier number for a board that is not currently installed or in use.
- New routine int ipcCheckId(ipac_idProm_t *id); added for carrier
drivers that need to check for the existence of module ID proms at
initialization time.
- Added carrier driver for the Hytec VICB8002 and 8004 VME64x 4-slot carrier
boards. The 8004 module can configure the IP module clock frequency separately
for each slot; the carrier driver will normally set this automatically based on
information provide in the module's ID prom.
Changed:
- Fixed a problem with the drvXy9660 carrier driver controlling an AVME-9668
carrier, which would never detect and configure a module that supports the 32MHz
IP clock frequency.
Version 2.11
Changed:
- Added support for the AVME-9668 board to the drvXy9660 driver. This board
adds the ability to operate IP modules at 32MHz, using a register to select the
speed. The driver will automatically detect a 9668 board and those modules
which can operate at this clock frequency and will configure the board
appropriately.
- Since Xycom VME seem to have dropped their IP carrier product line while
Acromag are continuing to develop theirs, I have changed the error messages in
the drvXy9660 driver to use the Acromag names, and added a command synonym
ipacAddAvme96XX, although existing installations will continue to work
with the old names.
- Modified most carrier drivers to compile without warnings on 64-bit
systems. Not that I'm really expecting anyone to use them on a 64-bit
CPU, but who knows?
- Deleted the macros for uchar_t and ulong_t which are no
longer used internally and which shouldn't really be used. Neither should
ushort_t but I've left that defined in drvIpac.h since it has always
been used for several arguments to the carrier drivers and taking it out would
guarantee to break any out-of-tree carriers.
Version 2.10
Changed:
- Added epicsShareFunc decoration to all externally visible functions to
permit building DLLs on Windows systems.
- Added directory dependency information for parallel builds
Version 2.9
Added:
- Carrier driver for the Xycom XVME-9660 and XVME-9670 boards; this was
actually a complete rewrite of Andy Foster's driver since his didn't support
configuring the slot memory through the board registers, and I had to convert it
to use devLib and provide command registration any way.
- Support for VITA's Format-2 ID Proms, as used by Hytec. Note that the CRC
calculation for these 16-bit Proms has not been checked against any known
correct IP modules (Hytec set their CRC values to zero, which this version
assumes to mean don't check the CRC).
Changed:
- Converted Ipac and the VIPC and TVME200 carrier drivers to use EPICS OSI
calls instead of native vxWorks ones, and they will now be built on all IOC
architectures, not just for vxWorks. As a result this version can only be built
as an EPICS driver support layer, but I don't know anyone who is still using it
outside of EPICS (I haven't heard from UKIRT in years). The MVME162 and ATC40
carrier drivers are still built for vxWorks only, although they probably could
be converted too if someone needs them (very unlikely).
Version 2.8
Added:
- Added a new routine ipacLatestCarrier which returns the carrier number of
the most recently added carrier board. This can be used in the vxWorks startup
script to avoid any problems that might occur if a call to ipacAddCarrier
(actually to its new carrier-specific routines) returns with a failure. Such a
failure would result in any succeeding carrier board receiving the carrier
number expected by the failed one.
- Created a carrier driver for the Tews TVME-200, also sold by SBS as the
VIPC-626 and possibly by XYCOM VME as the TVME-200; this board can also be used
with the VIPC610 or VIPC616 drivers if the appropriate switch settings are
made. The drvIpac documentation describes the
additional capabilities that this driver provides which the older drivers do
not.
- A new irqCmd is available, ipac_slotReset for use where a carrier
board is capable of resetting an individual IP slot. This command is supported
by the new TVME-200 carrier driver.
Changed:
- The behaviour of ipacAddCarrier has been changed so that it always
increments its internal carrier number even when it returns with an error, and
in that circumstance the Null carrier driver will be used for all subsequent
operations on that carrier number.
Version 2.7
Changed:
- Modified the drvIpac/Makefile to build all carrier drivers on all
architectures so one set of registrar() entries can be used on all vxWorks
architectures, although some carrier drivers will only work on certain
CPUs.
Version 2.6
Changed:
- Converted the carrier drivers to register their own ipacAddXXX routines in
place of using ipacAddCarrier, so this can be done from the iocsh on EPICS Base
R3.14.3 and higher. Also added the necessary registrar routines to each
carrier driver, and generate a proper library file libIpac.a for build
purposes.
Version 2.5
Changed:
- This version is intended for builds using EPICS Base R3.14.x, and has been
tested against Base R3.14.2. There were a few minor changes to the code, but
these were just to get it to build properly. The only supported operating
system is still vxWorks - the EPICS OSI layer does not currently provide API
equivalents for vxMemProbe() or intConnect(). There is a reasonable chance of
porting drvIpac and some of the carrier drivers to run on RTEMS once the OSI
layer is sufficiently functional, but other operating systems are not likely to
be easy targets.
Version 2.4
Added:
- Documentation for the ipac_statActive and ipac_statUnused
irqCommands which were new in V2.2, but that I forgot to add to
drvIpac.html.
Version 2.3
Added:
- Recognition of high-speed (32 MHz) IP modules in ipmCheck; these have
an ID prom that starts 'IPAH' rather than the usual 'IPAC'. Carrier drivers
that can change a slot's clock speed in software must scan the ID proms for
their slots at 8MHz and then switch any that can run at 32 MHz.
NB: I don't actually know of any carriers that can do this; the IPIC
chip on the MVME162/172 has an IP Clock Register, but this only controls cycle
synchronization logic - the IP clock rate is set using jumpers on the CPU
board (and appears to affect all the IP slots together).
- Added warning message to VIPC610 and VIPC616 drivers whenever a Level 7
interrupt is enabled, as the connected ISR should not call any vxWorks
routines. Usually it is a mistake to use this, but unfortunately the boards
are delivered with slot D IRQ0 wired for this level. Also put an explanatory
note in the carrier board documentation.
- Added a driver for the VIPC616-01 option, which isn't subject the the
problems in the previous bullet point.
- Brought the index.html file for the ipac module home page into the software
distribution and reorganized the links so they work even when viewed from the
a local <ipac>/html install directory.
- New 'R' configuration parameter to the ipMv162 carrier driver which gives
all slots a hardware reset pulse on startup. If used, this must be the first
character of the string.
Changed:
- Removed CANbus-specific comments from the IPAC Release Notes.
Version 2.2
Added:
- Two new commands ipac_statActive and ipac_statUnused for
irqCommand which a module or carrier driver can use to enable and disable LEDs
showing the activity status of a particular slot. Only the VIPC664 carrier
driver (not provided with IPAC) supports these at present, other drivers will
return the usual S_IPAC_notImplemented response.
Changed:
- Copyright and license terms. IPAC (and drvTip810) is now licensed under
the GNU Lesser General Public License (LGPL), which enables it to be used in
commercial software, although any binary distribution containing it or a
derivative of it must make the source code available under the LGPL terms.
- Various other small modifications to fix compiler warnings and such under
EPICS Release 3.13.2.
Version 2.1
Added:
- Jeff Hill's driver for the GreenSpring ATC40 ISAbus carrier board,
including the changes to the main drvIpac software and the other carrier
drivers which are necessary to support little-endian architectures. These
were:
- Make all accesses to the IP module registers & ID-Prom use short
(16-bit) read/writes, so the endian problem disappears. Adjust various
internal routines to allow for this.
- Provide a new function pointer (optional, may be NULL) in the carrier table
which is called by ipmIntConnect. Module drivers should use ipmIntConnect
instead of vxWorks' intConnect routine to attach their interrupt routine. This
makes it possible to use identical module driver code on both VME and ISA bus,
although the module driver may have to be modified as discussed above to
resolve the endian issue.
- Some printf()s in ipacAddCarrier so failures can be seen without
having to look at the return value.
- SRCS.c entries to Makefile.Vx so gnumake depends works.
Bug fixed:
- Finally tested the MVME162 carrier driver myself - this also works on the
MVME172. Changed the checking of m= addresses to use unsigned
arithmetic.
Version 2.0
The software is now restructured as an EPICS R3.13.1 <supporttop>
application. CANbus (drvTip810) and other drivers can be built in separate
application directories inside this <supporttop>.
Added:
- Peregrine McGehee's GreenSpring Octal Serial Driver from CFHT.
Bug fixed:
- Gcc compilation warnings attended to.
Version 1.1c
Final release from the RGO. CVS repository transferred to APS.
No changes to drvIpac
Version 1.1b
Added:
Version 1.1a
Bugs fixed:
- VIPC616 carrier driver address parameter handling fixed, changes courtesy
of Christoper Estes.
Version 1.1
Added:
- IPAC Prom structure declared volatile to prevent gcc optimiser from
generating long word accesses to it. Only affected some carrier boards.
- Separate support for both the GreenSpring VIPC610 and VIPC610-01 carrier
boards, which have different interrupt levels for the different slot
interrupts. From now on the correct carrier table vipc610 or
vipc610_01 should be used.
- Support for the the GreenSpring VIPC616 carrier board, table name
vipc616.
- HTML Documentation distributed in the release.
Version 1.0
First full release.