HAYES ESP DRIVER VERSION 1.6 Features: - Uses the enhanced mode of the ESP card, allowing a wider range of interrupts and features than compatibilty mode - Uses DMA to transfer data to and from the ESP's FIFOs, reducing CPU load - Supports primary and secondary ports - Special version of setserial can be used to view/change the enhanced mode configuration. The setserial patch is distributed with the standalone driver distribution. See http://www.nyx.net/~arobinso for more information. To compile/install: Examine the first section of esp.h to verify that the definitions are acceptable. If they are not, change them. DMA_CHANNEL must be either 1 or 3. ESP_BH should be set to a value not in use by the system. If the system is not configured with RISCOM8 support, the default should be fine. Examine the Makefile, and make any appropriate changes. Type 'make' to compile the module. The module will be called 'esp.o'. Typing 'make install' will install the module in /lib/modules/misc. The module can be inserted and removed as usual (insmod, rmmod, etc.). The IRQs to use can be specified by using the irq= option. The format is: irq=[0x100],[0x140],[0x180],[0x200],[0x240],[0x280],[0x300],[0x380] The address in brackets is the base address of the card. The IRQ of nonexistant cards can be set to 0. If and IRQ of a card that does exist is set to 0, the driver will attempt to guess at the correct IRQ. For example, to set the IRQ of the card at address 0x300 to 12, the insmod command would be: insmod esp irq=0,0,0,0,0,0,12,0 The custom divisor can be set by using the divisor= option. The format is the same as for the irq= option. Each divisor value is a series of hex digits, with each digit representing the divisor to use for a corresponding port. The divisor value is constructed RIGHT TO LEFT. Specifying a nonzero divisor value will automatically set the spd_cust flag. To calculate the divisor to use for a certain baud rate, divide the port's base baud (generally 921600) by the desired rate. For example, to set the divisor of the primary port at 0x300 to 4 and the divisor of the secondary port at 0x308 to 8, the insmod command would be: insmod esp divisor=0,0,0,0,0,0,0x84,0 The dma= option can be used to set the DMA channel. The channel can be either 1 or 3. For example, to set the dma channel to 3, the insmod command would be: insmod esp dma=3 The rx_trigger= and tx_trigger= options can be used to set the FIFO trigger levels. They specifie when the ESP card should send an interrupt. Larger values will decrease the number of interrupts; however, a value too high may result in data loss. Valid values are 1 through 1023, with 768 being the default. For example, to set the receive trigger level to 512 bytes and the transmit trigger level to 700 bytes, the insmod command would be: insmod esp rx_trigger=512 tx_trigger=700 The flow_off= and flow_on= options can be used to set the hardware flow off/ flow on levels. The flow on level must be lower than the flow off level, and the flow off level should be higher than rx_trigger. Valid values are 1 through 1023, with 1016 being the default flow off level and 944 being the default flow on level. For example, to set the flow off level to 1000 bytes and the flow on level to 935 bytes, the insmod command would be: insmod esp flow_off=1000 flow_on=935 The rx_timeout= option can be used to set the receive timeout value. This value indicates how long after receiving the last character that the ESP card should wait before signalling an interrupt. Valid values are 0 though 255, with 128 being the default. A value too high will increase latency, and a value too low will cause unnecessary interrupts. For example, to set the receive timeout to 255, the insmod command would be: insmod esp rx_timeout=255 Multiple options can be listed on the insmod command line by separating each option with a space. For example: insmod esp dma=3 trigger=512 The esp module can be automatically loaded when needed. To cause this to happen, add the following lines to /etc/conf.modules (replacing the last line with options for your configuration): alias char-major-57 esp alias char-major-58 esp options esp irq=0,0,0,0,0,0,3,0 divisor=0,0,0,0,0,0,0x4,0 You may also need to run 'depmod -a'. Devices must be created manually. To create the devices, note the output from the module after it is inserted. The output will appear in the location where kernel messages usually appear (usually /var/adm/messages). Create two devices for each 'tty' mentioned, one with major of 57 and the other with major of 58. The minor number should be the same as the tty number reported. The commands would be (replace ? with the tty number): mknod /dev/ttyP? c 57 ? mknod /dev/cup? c 58 ? For example, if the following line appears: Oct 24 18:17:23 techno kernel: ttyP8 at 0x0140 (irq = 3) is an ESP primary port ...two devices should be created: mknod /dev/ttyP8 c 57 8 mknod /dev/cup8 c 58 8 You may need to set the permissions on the devices: chmod 666 /dev/ttyP* chmod 666 /dev/cup* The ESP module and the serial module should not conflict (they can be used at the same time). After the ESP module has been loaded the ports on the ESP card will no longer be accessable by the serial driver. If I/O errors are experienced when accessing the port, check for IRQ and DMA conflicts ('cat /proc/interrupts' and 'cat /proc/dma' for a list of IRQs and DMAs currently in use). Enjoy! Andrew J. Robinson