1HAYES ESP DRIVER VERSION 2.1 2 3A big thanks to the people at Hayes, especially Alan Adamson. Their support 4has enabled me to provide enhancements to the driver. 5 6Please report your experiences with this driver to me (arobinso@nyx.net). I 7am looking for both positive and negative feedback. 8 9*** IMPORTANT CHANGES FOR 2.1 *** 10Support for PIO mode. Five situations will cause PIO mode to be used: 111) A multiport card is detected. PIO mode will always be used. (8 port cards 12do not support DMA). 132) The DMA channel is set to an invalid value (anything other than 1 or 3). 143) The DMA buffer/channel could not be allocated. The port will revert to PIO 15mode until it is reopened. 164) Less than a specified number of bytes need to be transferred to/from the 17FIFOs. PIO mode will be used for that transfer only. 185) A port needs to do a DMA transfer and another port is already using the 19DMA channel. PIO mode will be used for that transfer only. 20 21Since the Hayes ESP seems to conflict with other cards (notably sound cards) 22when using DMA, DMA is turned off by default. To use DMA, it must be turned 23on explicitly, either with the "dma=" option described below or with 24setserial. A multiport card can be forced into DMA mode by using setserial; 25however, most multiport cards don't support DMA. 26 27The latest version of setserial allows the enhanced configuration of the ESP 28card to be viewed and modified. 29*** 30 31This package contains the files needed to compile a module to support the Hayes 32ESP card. The drivers are basically a modified version of the serial drivers. 33 34Features: 35 36- Uses the enhanced mode of the ESP card, allowing a wider range of 37 interrupts and features than compatibility mode 38- Uses DMA and 16 bit PIO mode to transfer data to and from the ESP's FIFOs, 39 reducing CPU load 40- Supports primary and secondary ports 41 42 43If the driver is compiled as a module, the IRQs to use can be specified by 44using the irq= option. The format is: 45 46irq=[0x100],[0x140],[0x180],[0x200],[0x240],[0x280],[0x300],[0x380] 47 48The address in brackets is the base address of the card. The IRQ of 49nonexistent cards can be set to 0. If an IRQ of a card that does exist is set 50to 0, the driver will attempt to guess at the correct IRQ. For example, to set 51the IRQ of the card at address 0x300 to 12, the insmod command would be: 52 53insmod esp irq=0,0,0,0,0,0,12,0 54 55The custom divisor can be set by using the divisor= option. The format is the 56same as for the irq= option. Each divisor value is a series of hex digits, 57with each digit representing the divisor to use for a corresponding port. The 58divisor value is constructed RIGHT TO LEFT. Specifying a nonzero divisor value 59will automatically set the spd_cust flag. To calculate the divisor to use for 60a certain baud rate, divide the port's base baud (generally 921600) by the 61desired rate. For example, to set the divisor of the primary port at 0x300 to 624 and the divisor of the secondary port at 0x308 to 8, the insmod command would 63be: 64 65insmod esp divisor=0,0,0,0,0,0,0x84,0 66 67The dma= option can be used to set the DMA channel. The channel can be either 681 or 3. Specifying any other value will force the driver to use PIO mode. 69For example, to set the DMA channel to 3, the insmod command would be: 70 71insmod esp dma=3 72 73The rx_trigger= and tx_trigger= options can be used to set the FIFO trigger 74levels. They specify when the ESP card should send an interrupt. Larger 75values will decrease the number of interrupts; however, a value too high may 76result in data loss. Valid values are 1 through 1023, with 768 being the 77default. For example, to set the receive trigger level to 512 bytes and the 78transmit trigger level to 700 bytes, the insmod command would be: 79 80insmod esp rx_trigger=512 tx_trigger=700 81 82The flow_off= and flow_on= options can be used to set the hardware flow off/ 83flow on levels. The flow on level must be lower than the flow off level, and 84the flow off level should be higher than rx_trigger. Valid values are 1 85through 1023, with 1016 being the default flow off level and 944 being the 86default flow on level. For example, to set the flow off level to 1000 bytes 87and the flow on level to 935 bytes, the insmod command would be: 88 89insmod esp flow_off=1000 flow_on=935 90 91The rx_timeout= option can be used to set the receive timeout value. This 92value indicates how long after receiving the last character that the ESP card 93should wait before signalling an interrupt. Valid values are 0 though 255, 94with 128 being the default. A value too high will increase latency, and a 95value too low will cause unnecessary interrupts. For example, to set the 96receive timeout to 255, the insmod command would be: 97 98insmod esp rx_timeout=255 99 100The pio_threshold= option sets the threshold (in number of characters) for 101using PIO mode instead of DMA mode. For example, if this value is 32, 102transfers of 32 bytes or less will always use PIO mode. 103 104insmod esp pio_threshold=32 105 106Multiple options can be listed on the insmod command line by separating each 107option with a space. For example: 108 109insmod esp dma=3 trigger=512 110 111The esp module can be automatically loaded when needed. To cause this to 112happen, add the following lines to /etc/modules.conf (replacing the last line 113with options for your configuration): 114 115alias char-major-57 esp 116alias char-major-58 esp 117options esp irq=0,0,0,0,0,0,3,0 divisor=0,0,0,0,0,0,0x4,0 118 119You may also need to run 'depmod -a'. 120 121Devices must be created manually. To create the devices, note the output from 122the module after it is inserted. The output will appear in the location where 123kernel messages usually appear (usually /var/adm/messages). Create two devices 124for each 'tty' mentioned, one with major of 57 and the other with major of 58. 125The minor number should be the same as the tty number reported. The commands 126would be (replace ? with the tty number): 127 128mknod /dev/ttyP? c 57 ? 129mknod /dev/cup? c 58 ? 130 131For example, if the following line appears: 132 133Oct 24 18:17:23 techno kernel: ttyP8 at 0x0140 (irq = 3) is an ESP primary port 134 135...two devices should be created: 136 137mknod /dev/ttyP8 c 57 8 138mknod /dev/cup8 c 58 8 139 140You may need to set the permissions on the devices: 141 142chmod 666 /dev/ttyP* 143chmod 666 /dev/cup* 144 145The ESP module and the serial module should not conflict (they can be used at 146the same time). After the ESP module has been loaded the ports on the ESP card 147will no longer be accessible by the serial driver. 148 149If I/O errors are experienced when accessing the port, check for IRQ and DMA 150conflicts ('cat /proc/interrupts' and 'cat /proc/dma' for a list of IRQs and 151DMAs currently in use). 152 153Enjoy! 154Andrew J. Robinson <arobinso@nyx.net> 155