Release Notes PN 93000239_M Digi Asynch Driver for Linux Version 1.4.5-1 Digi EPCA Driver Package epca-1.4.5-1.i386.rpm Linux Distributions Supported: RedHat 5.2, 6.0, 6.1, 6.2 TurboLinux Server 4.0 Debian 2.1 Linux Kernels supported: 2.0.x 2.2.x RPM Part Number 40001450_M 06/16/00 CONTENTS Section Description 1 Introduction 2 Supported Products 3 Enhancements 4 Bug Fixes 5 Known Limitations 6 History 1. INTRODUCTION This Digi software package includes device drivers for the Acceleport Xe, Acceleport Xr, Acceleport Xem, Acceleport EPC/X, and Acceleport C/X families of adapters. It is currently supported on the following hardware platforms: * Standard i386/i486, and Pentium PC and is currently supported on the following Linux distributions: * RedHat 5.2 * RedHat 6.x * Debian Linux 2.1 * TurboLinux Server 4.0 with kernel versions 2.0.x, and 2.2.x Please reference the following number(s) when searching the Digi International web site (www.digi.com) or ftp site (ftp.digi.com) for the latest software package: RPM Part Number: 40001450_ 2. SUPPORTED PRODUCTS ISA Bus ------- Acceleport Xe 2e, 4e, 8e (EIA232 & EIA422) Acceleport Xr 4r & 8r (EIA232 & EIA422) Acceleport Xem 4-64ports (EIA232 & EIA422) Acceleport C/X 8-128ports (EIA232) PCI Bus ------- Acceleport Xem 4-64ports (EIA232 & EIA422) Acceleport Xr 4r & 8r (EIA232) Acceleport C/X 8-128ports (EIA232) Acceleport EPC/X 8-224ports (EIA232) Acceleport Xr/422 4r/422, 8r/422 (EIA422) Acceleport 2r/920 2r/920 (EIA232) Acceleport 4r/920 4r/920 (EIA232) Acceleport 8r/920 8r/920 (EIA232) 3. ENHANCEMENTS - N/A 4. BUGFIXES epca ---- -- We were attempting to translate PCI remapped address into virtual addresses. (We shouldn't be doing that. remapped addresses already ARE virtual addresses.) Now, we only attempt to translate addresses for boards that are NOT PCI. (I.E. ISA boards.) -- We were incorrectly doubling up on some physical --> virtual memory-mapping translations, which caused OOPSes in several situations, that would only occur in certain circumstances. This has been fixed. -- Fixed a few CONFIG_MODVERSIONS anomalies in the driver. We were using it wrong in a few instances, and it was causing problems in newer redhat versions. -- Changed version number to 1.4.5-1 ditty ----- -- Removed version.h kernel version checks. If version.h doesnt exist, ditty can't compile. We shouldn't be relying upon kernel header files anyway, for a userspace program. If the users headerfiles incorrectly define B921600, tough. doinst.sh --------- -- Removed headerfile differential check, due to core differences between the way Redhat does version.h, and the way the mainstream kernel does it. all --- -- Changed all references of 'gcc', to 'cc'. This will take care of the "I have an alternate compiler that is not gcc" issue. 5. KNOWN LIMITATIONS -- "Speed Patch". Even in recent kernels, code in /usr/src/linux/kernel/sched.c (timer_bh() and do_timer()) currently limits input throughput to a theoretical maximum of 25600 bytes/second. The following patch (thanks to Rick Richardson and Ted T'so) bumps the theoretical ceiling to 51200 bytes/second: In sched.c, look at functions timer_bh() and do_timer(). The last statement in do_timer() is; if (tq_timer) mark_bh(TQUEUE_BH); Move these two lines to the very end of timer_bh(). Since for each poll, only TTY_FLIPBUF_SIZE (512) bytes can be read per channel, polling at the maximum rate of 100 times per second yields a maximum throughput of: 100 polls/second x 512 bytes/poll = 51200 bytes/second Without this patch, the flip buffer is scheduled on one clock tick, but not processed until the next so the throughput is actually limited to 51200/2 = 25600 bytes/second. 6. HISTORY Version 1.4.4 April 13, 2000 =============================== epca ---- -- Added DIGI_PRINTER digi extended flag handling support. Traditionally, this flag has been used to keep termios settings "sticky". However, "sticky" termios settings are a default setting in the linux device driver. (We never actually free termios structures, except when unloading the driver.) Thus, the only thing we needed to add, was that when the flag was set, the module usage count for this driver goes up by 1, as well as keeping modem output signals HIGH at all times (even when the last process closes the port.) Of course, they do have the ability to go low, if we're doing DTR/RTS based input flow control. -- Added native TCFLSH (TCIFLUSH/TCIOFLUSH/TCOFLUSH) support to the driver. Now, when a user executes a 'ditty flush' command on us, we don't just flush the TTY buffers out (as the n_tty_ioctl() code does) but now, in addition, we actually flush out the CARD's appropriate channel buffers, as well. (Thus, for example, when TCIFLUSH ioctl is called, we completely flush all tty line discipline buffers, as WELL as the receive buffer on the card itself. -- Added TCXONC ioctl call (ditty startin/startout/stopin/stopout) -- All the TCXONC options work now.. startout/stopout are handled by us... startin/stopin handled correctly via n_tty_ioctl() already. -- Added DIGI_GETDD ioctl. This IOCTL passes the number of boards installed back to userland, along with the version string of the driver. -- Added DIGI_GETBD ioctl. Similar to DIGI_GETINFO, with several changes. This has been put in place for compatibility with 'DPA', a diagnostic utility written by Digi International. -- Added DIGI_KME ioctl. This ioctl's function is to grab a specified "chunk" of a Digiboard's memory, and pass it back to userspace. It can also WRITE to Digi's memory. It can also READ/WRITE from REMOTE CONCENTRATOR memory. This function adheres to Digi International's DIGI_KME ioctl from other drivers. -- Added the kme_wait waitqueue, to ensure that when we are in the middle of a remote concentrator WRITE call, that we have sole access to the queue. -- Changed the way we handle the digi_info structure. Several data types were added and/or changed, to handle the "DPA Way" of passing data back and forth to and from the driver. -- Added 'dpatype' flag to the digi_info structure. this allows us to pass the DPA type flags to dpa directly in its own format, rather than making DPA work "our way". -- Added 'dpastatus' flag to the digi_info structure. this allows us to pass the DPA type status flags to dpa directly in its own format, rather than making DPA work "our way". -- Remove support for several obsolete digiboards. These boards are as follows: Acceleport Xe/64k ISA, Acceleport C/X EISA, Acceleport Xem EISA, and Acceleport XeVe ISA. The last version of the driver to support these boards officially is version 1.4.3.2. -- Removed ISA/EISA board limit of 7 - Made the limit MAXBOARDS, currently set to 12. -- Changed some of John Lombardo's code, to allow it to work properly in > 2.0 kernels, as well as now being able to support the new PCI card types. (We now look at mod_numports[0] to know if any options were specified on the cmdline) -- Added a compatibility version of schedule_timeout() which is conditionally compiled in for 2.0.x kernels. -- Added type checking code. Now, if we're told that we have a digiboard, but it doesn't match a type we know, we IMMEDIATELY disable the board, AND zero out its memory address and I/O address from the driver so digiDload skips it. We also make it known to the user by exporting an error message in place of the card description, to /proc/epca. -- PCI boards are now specified in epcaconfig.h (or insmod cmdline) rather than getting autoprobed directly. Many changes to the driver were done to comply with this enhancement. -- Added pci_boards structure pointer. Now, when the driver does its PCI probe it can allocate memory dynamically to this pointer, rather than having the whole structure in RAM. Once its done with the memory it can free it all, thus only using the memory space of 1 pointer. -- Now, as a result of the PCI enhancement, a user can specify ALTPIN by default on a PCI digiboard, when previously they couldn't. -- If a PCI board is specified but not detected in the PCI probe at loadtime, the driver keeps the board in its detected list, however marks it disabled, with I/O and memory zeroed out so digiDload knows not to initialize it. (It also keeps port locations fixed, rather than renumbering.) -- Fixed problem where if user were to load our driver on a system that didn't have PCI support, we OOPS'ed at loadtime. this was caused by an improperly placed declaration. -- Added epca_removepci(), which conditionally gets compiled in when the user doesn't have PCI support enabled in their kernel. Its job is to STRIP PCI boards that have been specified, from the boards structure. (And leave only ISA boards.) -- Got rid of the totalports modular cmdline option, seeing as though now we already know EXACTLY how many ports we're going to support in total. -- Added the epca_paranoia() function, which we can now use to place repetitive sanity checking code, rather than implementing it elsewhere. -- in post_fep_init(), we were overwriting part of FEP/OS memory, when we were attempting to check if card memory was present. This has been fixed. We now have a command within epca_paranoia(), that can check that board memory is present, and that FEP/OS is running properly. -- Added error checking that detects when a board is configured for a certain number of ports, but FEP/OS reports a different number of ports detected. We now epca_mess() the user to tell them what happened. (And still only support the configured number of ports) -- Added DIGI_SPOLL ioctl, which allows the ability to dynamically change the driver's polling rate. By default, the driver polls the event queue every timer tick. However, this value can be slowed down all the way up to 1 second poll times. -- In previous, we were using an array of strings called board_desc, to supply us with textual descriptions of each board type. Now, we use a predefined array of structs, called 'btypes', that holds both the textual description of the board, as well as the DPA specific type for the board. -- Re-added EPC/X Jupiter (PLX) PCI support to the driver. EPC/X PCI is now officially supported by Digi International. -- If an app executed TIOCMBIC, but didn't reverse its behavior, the driver wouldn't ever allow the signals that had been shut off, to come high again - unless someone executed a TIOCMSET on the port. Fixed. -- Changed version number to 1.4.4 all --- -- Changed the location where we put our global configuration files to /etc/digiepca, rather than /etc/digi. Lots of other digi-specific applications put files in /etc/digi, therefore, we shouldn't be putting our critical files there. digiConf -------- -- Added more portcounts in Xem/CX configuration/setup -- Removed support for Xeve/Xe64k/Xem-EISA/CX-EISA boards, as these boards either A) don't apply anymore, or B) are obsoleted. -- Changed version to 0.6.5 ditty ----- -- Upgraded ditty to version identical to that in other digi linux drivers -- Added support for ditty printer/start*/stop*/flush* -- Added support for 'spoll', which allows tweaking of driver polling times. digiDload --------- -- Made changes to digiDload that relate to the structural changes required for DPA compatiblity -- Removed support for Xeve/Xe64k/Xem-EISA/CX-EISA boards, as these boards are either A) Don't apply anymore, or B) are obsoleted. -- we were looking at /dev/digi_ctl for our download device. This has been changed. We're looking at /dev/digiCtl now. -- Enabled the "device creation" routines, for the first 256 ports. In previous, this functionality was in digiDload, however it had been disabled for the first 256 ports, so as not to interfere with current operation. -- Readded EPC/X Jupiter (PLX) PCI support to digiDload. EPC/X PCI is now officially supported by Digi International. cxconf ------ -- Changed the way we handle lines that are not in use. Now, we actually recognize that there is a line, but it is not in use, in the C/X configuration string written to cxconf.dat. This is so that dpa knows how to read it correctly. -- added a get_int function, that allows us to have better error control, when a user enters something incorrectly. -- take number of boards as a commandline argument, rather than asking user for the information. -- Added default options on several of the questions asked. one of the most needed, is the default wiring code '14'. Now, all the user has to do, is hit enter on the question, and the default answer is selected. dpa --- -- Added DPA (Digi Port Authority) program -- Initial release (tagged v2.116 via CVS) utils/tprint ------------ -- Updated tprint to look for its config file in /etc/digiepca rather than /etc/digi -- Changed version level on tprint to v1.0.8 buildPCI -------- -- Since digiDload now creates ttyD's on the fly, the buildPCI utility is no longer needed, and has been removed from the code tree entirely. utils/epcaremove/epcaremove.sh ------------------------------ -- Added removal script to properly dispose of the old (pre-1.4.3) EPCA driver package. -- Initial release version - v1.1 doinst.sh --------- -- Added DPA compilation and copy to /usr/bin -- We now copy in dpa and ditty to /usr/bin/dpa-epca and /usr/bin/ditty-epca respectively. Now, someone can't come along and clobber us. -- Proper sanity checking to make sure there isn't already an older digi driver installed. -- Changed version to v1.2 predelete.sh ------------ -- Now, we properly remove /usr/bin/dpa-epca and /usr/bin/ditty-epca -- Changed version to v1.2 4. BUGFIXES epca ---- -- If an app executed TIOCMBIC, but didn't reverse its behavior, the driver wouldn't ever allow the signals that had been shut off, to come high again - unless someone executed a TIOCMSET on the port. Fixed. -- Fixed a problem where if the user was in a SOFTWARE OUTPUT flow control state at portclose, when the user REOPENED the port, the port would STILL be unable to transmit a character until a RESUMETX fepcmd was sent. -- Balanced out globalwinon()'s to memoff()'s so that we don't inadvertently execute an operation that requires the board's memory window to be turned on, on a board that has its memory turned off. Version 1.4.3.3 March 08, 2000 =============================== digiConf -------- -- We were using incorrect logic in determining which digiConf board type to use, when writing out the epcaconfig.h file. the problem originally manifested itself when a user tried to install a C/X EISA board. (The driver would think the board was PCI - because it was looking at EISACX type 9 as defined in epca.h - but it really needed to look at digiConf type 8, C/X EISA configuration array.) -- Fixed potential segfault bug while configuring PCI DigiBoards. epca ---- -- We weren't properly toggling DTR off and back on on a baudrate 0 request. thus, we weren't hanging up modems properly in several apps that still used the baudrate 0 interface. -- Added -I/usr/src/linux/include to the Makefile - this allows us to work in Debian-like systems, where the /usr/include/linux\asm\scsi directories have their own private version of kernel headerfiles. Version 1.4.3.2 February 22, 2000 ================================== -- We weren't tracking portcounts on ISA boards properly, thus when the user went to install their ISA digiboard with a certain port count, it gave them a DIFFERENT number of ports, than they asked for. Fixed. -- Changed version to 0.5 Version 1.4.3 February 2, 2000 =============================== epca ---- -- Added support for more than 256 ports. Currently Linux minor numbers are limited to 8 bits, hence drivers normally can support only 256 devices. To support more than 256 devices we need more major numbers. In order to avoid breaking existing programs which may refer to the major numbers previously allocated to Digi, we continue to use the standard major numbers (from ) for the first bank of 256 ports, then dynamically allocate subsequent ones to accomodate the number of ports requested. -- Added dynamic, runtime allocation of the port data structures. By default the driver allocates space for MAXPORTS (defined as 256 in epca.h) ports. You can redefine MAXPORTS (and recompile) to change this default. Alternatively, the compiled-in value of MAXPORTS can be overridden at driver load time by specifying an alternate value for the "totalports" variable via a commandline argument to LILO, insmod or modprobe. E.g: modprobe epca totalports=700 or modprobe epca totalports=32 reserves space for a maximum of 700 or 32 ports respectively. -- Device naming enhancements. In another attempt to keep from breaking existing programs, the device names look like they have in the past (e.g: /dev/ttyD0 ... /dev/ttyD255), but devices after the first 256 are given a different letter designator (e.g: /dev/ttyE0... /dev/ttyE255, /dev/ttyF0.../dev/ttyF255...) Since some letters may be unavailable on your system (e.g: /dev/ttyS0... are reserved for the built-in serial ports) the actual list of letters used is specified, in the order in which you want them applied, in the TTY_BANKNAMES string (defined in epca.h). The first bank is named using the first letter in TTY_BANKNAMES (typically 'D'), the second bank using the second letter (typically 'E'), etc. Thus you can specify the letters and the order in which they will be used. Since "callout" (e.g: "/dev/cud*") support is slated to be dropped from future kernels, we have expanded only the first bank of device arrays, and their names ignore the value of TTY_BANKNAMES. That is: only the first 256 ports have corresponding "cu" devices and their names are pre-defined as /dev/cud0, /dev/cud1 ... /dev/cud255. -- Added a new ioctl (DIGI_GETMAJOR) so programs such as digiDload can query the driver for the current list of active major numbers (statically or dynamically allocated). -- Added 'total concentrator inits' to /proc/epca displays. -- Added 2.3.X kernel support. -- Added Chad Schwartz' /proc/epca enhancements: A) State the version number in /proc/epca. B) State when the driver has been loaded as a module. C) Return a non-null /proc/epca file even if no cards have been initialized. -- Added Chad Schwartz' engineering-use DIGI_MODDEC ioctl(). -- Changed descriptions to long "Product Catalog" format, rather than "Shortform definition" format. I.E. Instead of 'PC/Xe', we now state "Acceleport Xe ISA". This should clear up any differences between the release notes, and this driver. -- Due to the lengthened descriptions, we needed to make room for said board descriptions in the /proc/epca file. Changed max description length from 10 characters, to 25 characters. -- Changed version to 1.4.3 digiDload --------- -- Added support for unlinking old and creating current device nodes on the fly, and for querying the driver for the major numbers in order to do so. In an attempt to keep from breaking any existing software, the first 256 devices are handled as per historical precedent: they are associated with the standard major device numbers (DIGI_MAJOR and DIGICU_MAJOR, defined in ), and so their device nodes can be managed by digiConfig. When configured to support more than 256 devices, the driver dynamically allocates new major device numbers as needed. Each major number supports another bank of 256 ports, so 2 major numbers are needed to support up to 512 ports, 3 for up to 768, etc... Since these new major numbers are allocated at driver load time, the nodes for those devices can only reliably be made after that time. By default, digiDload will query the driver for the list of major numbers currently in use, and -- for any devices after the first 256 -- it deletes any existing device nodes associated with those nodes, then mknods new nodes for any ports that the driver certifies as operational. Note: the device nodes are created with permissions of 666 (readable and writable by everyone) but masked against the caller's current umask. To really get 666 permissions the caller's umask should be 0 (or something that doesn't have bits in common with 0666). E.g: x=`umask` umask 0 digiDload v umask $x -- Added "-nomknod" command line option. This is only needed when the driver is configured to work with more than 256 ports. By default -- for these device -- digiDload removes and creates the device nodes each time it is run. But there may be some reasons to suppress this default behavior. Notably: if DEVFS is enabled, it handles creating and removing the device nodes in a much more elegant way, so digiDload's efforts would be misguided. Specifying the "-nomknod" argument causes digiDload to suppress this behavior -- digiDload will neither unlink old nor mknod new device nodes. -- Fixed a problem that prevented using distinct concentrator topologies with multiple CX adapters. -- Added code to count errors in the mess() code. -- We now track if there's been an error - and if there has, we scream loudly at the user, instead of just saying "digiDload complete." -- In addition to the error detection, when an error *HAS* been detected, when we exit, we exit with a negative value, to indicate to a calling shellscript that there has been a problem, and to fail appropriately. -- Changed version to 1.3.21 digiInstall/digiUpdate/digiConfig/digiModload ----------------------------------------------- -- This release signifies removal of several utilities, used in 1.4.2 (and earlier) versions of our driver package. We've completely revamped and rebuilt the EPCA installer package, so the driver now installs via the 'RPM' utility. Thus, these utilities are no longer needed. digiConf -------- -- Added "digiConf" program, which is the new installer program for the EPCA RPM package. Its primary job is to collect information about the user's digiBoards, before driver compilation occurs. -- Initial version - v0.4 buildPCI -------- -- buildPCI is a utility that creates new /dev/ devices, for digi products. We've had it for years, however we've never done proper release notes on it. doinst.sh/predelete.sh/rc.epca ------------------------------ -- Shellscripts to do installation/copy/compilation/insertion/removal of the driver. -- Since these are shellscripts, and this is the FIRST revision, I've given them all a version number of 1.0. utils/tprint (CWS) ------------------ -- Added new "utils" directory to allow for distributing additional utilities with the driver. Added Chad Schwartz' tprint 1.0.7 (transparent print) utility to support printers attached via local terminals. 4. BUG FIXES epca ---- -- Added proper error return support to init_module() and pc_init() so, for example: if a memory allocation request fails, everything gets cleaned up and unloaded. (Previously any initialization failures called panic().) -- Fixed a potential memory leak when unloading the driver module. -- Fixed a problem in epcaparam() with setting/resetting DTR/RTS modem signals. -- Fixed a problem with setting hardware flow control. -- Fixed a problem with pc_info device under 2.2/2.3 kernels. -- Unless otherwise set (e.g: via ditty), set RTS and DTR high by default (though the signals are only manifested electrically when the port is opened). -- Fixed a problem with "hesitations" when running "screen" under some conditions on some cards. -- Fixed the DSR and DCD LED display on C/X concentrators when ALTPIN is set. -- Fixed a problem where the digi_ctl device inappropriately shared memory space with /dev/ttyD0. If both happened to be open at the same time, unexpected problem behavior was very likely. -- When initializing adapters, if any of the memory allocations fail, disable the board (to prevent subsequent kernel panics). -- Fixed a problem where calling digiDload multiple times would leak memory. -- Fixed baudrate mapping problem where requests by "stty" for 230400 and 460800 were incorrectly mapped to 460800 and 921600. Requests made using "ditty fastbaud" are unaffected (they worked properly before and continue to do so now.) -- Fixed baudrate mapping problem with requests for 57600 and added 76800. -- Fixed problem where setting baudrate to 0 didn't reset DTR and RTS lines. This is a POSIX standard request for resetting the port. -- Fixed a problem with setting and clearing RTS/CTS handshaking. Previously, after once setting RTS/CTS handshaking, attempts to unset it (e.g: "ditty -crtscts") would seem to work (i.e: ditty would report -crtscts), but in fact RTS/CTS handshaking would still be active in the driver. -- Increased the maximum number of ports supported on PCI cards from 64 to 224. -- On port open, exit with error if the board containing this port has not been successfully initialized by digiDload. -- Fixed a problem with the TCSETSW and TCSETAW ioctl() calls that resulted in port hangups, notably visible under Pick D3 Linux. -- Fixed a problem with the module usage counter that could render the module unremovable. -- Added optional code (enabled only if IOCTL_DEBUG is defined) to send messages to /var/log/messages with every ioctl call. ditty ----- -- Fixed compile problem - old versions of libc used termbits.h to define standard tty termios structure. Newer versions use termios.h. We now detect this properly on compile. Fix could however fail, as the user COULD be using a very old version of libc, with a newer kernel revision. We only detect kernel revision, and assume that if the user is using a new kernel, they also must be using a newer version of libc. The check, however, should work in most cases. cxconf ------ -- While selecting wiring codes, when we get an invalid selection, we no longer exit with an error. (but rather, we just ask again.) -- Changed version to 1.0.3 6. HISTORY Version 1.4.1 April 1, 1999 ============================ BUG FIXES digiInstall =========== -- Some Linux distributions include older releases of the "sed" utility that caused the previous version of digiInstall (as included in the V1.4.0 release) to fail. This version fixes this problem. -- Also, the default is now (once again) to compile the driver into the kernel rather than as a module. To install the driver as a module the user must run one of the kernel configuration utilities (e.g: "make menuconfig"). -- Changed version to 1.8. epca.c ====== -- Changed version to 1.4.1. Version 1.4.0 March 16, 1999 ============================= ENHANCEMENTS epca.c: ======= -- Added 460K and 920K baud support in driver and ditty (see "Speed Patch" note below). -- Added support for: PCI 2r-920, PCI Xr-422, ISA C/X and PCI C/X. -- Added code to distinguish various members of the PCI/Xr family during digiDload notification. -- Fixed kernel module implementation. Now the driver can be managed via modutils (e.g: modprobe, rmmod, lsmod). -- Converted from old to new style (introduced in later 2.1 kernels) PCI recognition and configuration routines (the original code remains ifdef'd for older kernels). -- Patch from Dan Taylor to add "digiepca=Override" option for boottime overriding of epcaconfig.h values. -- Added new ioctls (DIGI_CXCON_INIT and DIGI_CXCON_NEXT) code to get C/X concentrator image (/etc/digi/cxcon.bin), if needed, from digiDload at runtime. -- Added a new ioctl: DIGI_DISABLE, to disable a given card, so digiDload can disable a card before trying to initialize it. (Without this, a second call to digiDload could make the driver think that a previously initialized C/X is calling for another download image.) -- Incorporated John Lombardo's patches to provide module load-time command line parameterization and /proc/epca support: a) The user can now give the parameters of the boards on the module load command line. The following parameters are supported: mod_type Module type 2=ISA PC/Xem, etc mod_altpin Altpin? mod_numports How many serial ports do we support? mod_port The base of the io ports window b) The driver now supports a /proc/epca file. This displays driver's concept of what boards it has installed. There is an ioctl() to give the same information, but for scripting, the /proc file system is easier to work with. -- Dropped support for the old 1.3.X kernels since the latest enhancements are not backwards compatible. -- Changed version to 1.4.0 digiDload ========= -- Added Xr family support (use xrbios.bin and xrfep.bin instead of the sx*.bin files). -- Add code to distinguish among the PCI/Xr family members. -- Added messages to display the adapter type and number of ports as they are initialized. This is especially useful in the event that some adapters succeed while others fail to initialize. -- Added support for PCI 2R-920, Xr-422, ISA C/X and PCI C/X. -- Changed version to 1.3.13 ditty ===== -- Added extended baud rate table including support for 460800 and 921600 rates. digiInstall/digiUpdate/digiConfig ================================= -- Simplify the patchfiles by using "cp" rather than "patch" wherever possible. -- If digiInstall detects a prior version of the driver it now immediately calls digiUpdate. -- digiConfig now provides for configuration of PCI devices. It is no longer necessary to call buildPCI separately if the driver has been installed with digiConfig. -- Dropped support for 1.2.X kernels. cxconf ====== -- Added this new program to query the user about C/X concentrator topology and write the magic configuration string to /etc/digi/cxconf.dat. install.doc/Linstall.html ========================= -- Updated installation texts (thanks to Ben Tucker and Chad Schwartz) Download files (/etc/digi/*.bin) ================================ -- Updated to latest. BUG FIXES epca.c ====== -- Fixed broken "fastbaud" communication between ditty and driver (ditty.c and epca.c). -- Fixed timer calls. -- Fixed a problem in pc_flush_buffer (old version moved "tout" instead of "tin"). -- Fixed bug in epcaparam() that caused lost characters by inappropriately calling the Baudrate 0 (line reset) code. -- Fixed bug in break processing that caused the break condition to persist. -- Fixed extended baud rate communication problem where baud rates were being remapped even if "fastbaud" was set. -- Removed references to DIGI_TIMER2 and DIGI_BH2. -- Fixed a problem with DCD handling where multiple CD line drops would crash 2.1.x kernels -- Fixed init_PCI() so it will recognize multiple PCI boards of the same type. -- Fixed a problem in pc_open() where the port was being reinitialized with every open. The problem with this is that data could be lost if one process had a port open for reading/writing and another process subsequently came along and opened the port, for example: to check its status. -- Fixed a problem in post_fep_init() that caused subsequent accesses to the board (e.g: after enabling polling) to crash the driver if no ports were found at boot time. This situation could arise, for example: on a PCI Xem if the PORTS module is disconnected. Now we just mark the board as DISABLED and continue. -- Added simple-minded card check code in post_fep_init(). Previously if an ISA card was specified (e.g: via digiConfig) but not installed, the driver would still try to initialize the card and typically generate errors with every call to fepcmd(). Now, if the simple card check fails, we mark the card the card as DISABLED and continue. -- Removed call to console_print(). -- It's possible for a process to abort without properly cleaning up after itself. When running the driver as a module, this may make it look like the driver is busy and prevent unloading. Setting the count to 0 on init allows digiDload (or similar) to clear this condition. -- Patch from Dan Taylor to fix schedule_timeout for 2.2 kernels. -- Removed fepcmd calls to PAUSERX/RESUMERX since they were redundant and under some circumstances the RESUMERX could cause the C/X concentrators to reboot. digiDload ========= -- Remove references to include since this file is no longer included in recent distributions. -- Added code (ifdef'd to PCIBUG) to circumvent a problem with some PCI chipsets. -- Fixed a bug that kept multiple ISA cards from initializing. -- Previous versions would quit on any error. In a multiple adapter setup a failure to initialize a prior board would also keep subsequent boards from being initialized. This version displays error messages as appropriate, but then continues trying to initialize any subsequent boards. -- Changed Makefile to link digiDload using the static option so it will run even on platforms with incompatible libraries. -- Fixed include file references that prevented compiling digiDload against newer Linux source trees. -- Removed -D__KERNEL__ from Makefile -- unnecessary and it caused compile failures with 2.1.x kernels. -- Added init() time call to memoff() to turn off card memory on non-PCI cards to avoid conflicts with shared memory addresses. -- Add call to DIGI_DISABLE before initializing cards. (Otherwise, subsequent calls to digiDload fail with C/X cards since download requests from the card are misinterpreted.) -- Add support for multiple C/X configurations via "cxconf" and "/etc/digi/cxconf.dat" -- Added report_numports() and call to it following DIGI_INIT calls to report "numports" for each card. This is necessary because these values cannot be read from PCI cards until then. -- Added code to grab /etc/cxcon.bin and pass it to the driver, if needed, via the new ioctls (DIGI_CXCON_INIT and DIGI_CXCON_NEXT). ditty ===== -- Fixed broken "fastbaud" communication between ditty and driver (ditty.c and epca.c) digiInstall/digiUpdate/digiConfig ================================= -- Patches from Chad Schwartz to: a. complain and exit if /usr/src/linux doesn't exist b. check for /usr/src/linux/.config c. remove redundant call to write "CONFIG_DIGIEPCA 1" d. complain and exit if /usr/bin/dialog doesn't exist -- If digiConfig detects one or more C/X cards, it queries the user for concentrator topology and calls cxconf to write /etc/digi/cxconf.dat. -- Removed obsolete references to DIGI_BH2 in digiUpdate. -- Removed patchfile references to autoconf.h, .config defconfig, kconfig.tk since these are created on the fly. Instead we now call sed to add a single extra line to /usr/src/linux/.config to indicate that EPCA should be loaded as a module by default. Version 1.3.2 February 2, 1998 =============================== ENHANCEMENTS -- Added support for the PC and PCI Xr920 cards including adding support for 460800 and 921600 baud rate settings. -- Updated on-board operating system files (*bios.bin, *fep.bin). NOTE ON HIGH BAUD RATE SETTINGS: Current Linux kernels (e.g: 2.0.33 and 2.1.79) limit the maximum theoretical input rate to 25600 bytes/second per port. See changes.doc for a patch to the kernel scheduler that raises this theoretical limit to 51200 bytes/second. Actual maximum driver throughput with this patch is currently around 41000 bytes/second. Output rates are independent of this limit. BUG FIXES -- Fixed broken "fastbaud" communication between ditty and driver (ditty.c and epca.c). -- Fixed timer calls -- Fixed a problem in pc_flush_buffer Version 1.3.0 October 17, 1997 =============================== ENHANCEMENTS: -- Added digiUpdate, a companion program to digiInstall which knows how to update an existing epca installation. digiInstall depends on a more or less pristine Linux source tree and applies patchfiles as necessary, but it aborts if it finds that a version of the epca driver has already been installed. digiUpdate simply freshens epca files as needed to update from a previous version (e.g: from V1.1.0 to V1.3.0). BUG FIXES -- Fixed two problems associated with sensing DCD (carrier detect) modem signal drops: a. On receiving a loss of carrier detect on a modem signal enabled line (-clocal), the V1.1.0 driver schedules a later call to itself to invoke tty_hangup() -- the routine that logs out the user and cleans up. This is an elegant way to handle this situation. However, it appears that there's a problem with the event scheduler code, so we now just call tty_hangup() directly on sensing this condition. b. The V1.1.0 driver is set up to handle events from the Digiboard one at a time. Specifically, it expects modem signal events to always occur separately from data events. However, it is possible for data and modem events to occur together -- logically OR'd up as one single compound event. With the V1.1.0 driver, when this occurs, the modem change event is ignored. The V1.3.0 driver handles both events. Version 1.1.0 February 17, 1997 ================================ ENHANCEMENTS: -- The behavior of cud and ttyD devices has been changed (again). Now both cud and ttyD and default to CLOCAL. This may be easily changed via. the stty command. -- digiConfig now checks major.h to determine the major numbers. This was done because of the recent switch in Digi major numbers seen in beta kernel 2.0.12. -- The driver can now be configured via. LILO boot command. See the user.doc for details. -- The driver now supports the older 64K PC/Xi and PC/Xe cards. -- The driver now can be instructed to ignore cards declared in epcaconfig.h and still boot cards that are not declared (Such as PCI). -- Improved the support of loadable modules. In particular made changes that allow the driver to better clean up after itself if it is removed. -- Nodes corresponding to Digi devices now start at 0 not 1. BUG FIXES -- A bug in epca.c involving hard flow control and CRTSCTS was fixed. -- Many bugs in ditty.c were fixed. -- A bug that prevented some gettys programs from operating with ~CLOCAL devices was corrected. -- A bug that caused the driver to 'forget' the status of CLOCAL. -- A bug that caused parity to be enabled when high baud rates are in use. -- A bug that sometimes caused memory overwrites on PC/Xe cards. -- A bug in epca.c was fixed that sometimes caused an erroneous error message warning that PCI has returned an invalid number of ports. -- A bug was fixed that prevented the new Saturn PCI cards (Xr, and Xem) from properly booting.