OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [Documentation/] [hayes-esp.txt] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.