1 |
199 |
simons |
|
2 |
|
|
UPDATE NEWS: version 1.33 - 26 Aug 98
|
3 |
|
|
|
4 |
|
|
Interrupt management in this driver has become, over
|
5 |
|
|
time, increasingly odd and difficult to explain - this
|
6 |
|
|
has been mostly due to my own mental inadequacies. In
|
7 |
|
|
recent kernels, it has failed to function at all when
|
8 |
|
|
compiled for SMP. I've fixed that problem, and after
|
9 |
|
|
taking a fresh look at interrupts in general, greatly
|
10 |
|
|
reduced the number of places where they're fiddled
|
11 |
|
|
with. Done some heavy testing and it looks very good.
|
12 |
|
|
The driver now makes use of the __initfunc() and
|
13 |
|
|
__initdata macros to save about 4k of kernel memory.
|
14 |
|
|
Once again, the same code works for both 2.0.xx and
|
15 |
|
|
2.1.xx kernels.
|
16 |
|
|
|
17 |
|
|
UPDATE NEWS: version 1.32 - 28 Mar 98
|
18 |
|
|
|
19 |
|
|
Removed the check for legal IN2000 hardware versions:
|
20 |
|
|
It appears that the driver works fine with serial
|
21 |
|
|
EPROMs (the 8-pin chip that defines hardware rev) as
|
22 |
|
|
old as 2.1, so we'll assume that all cards are OK.
|
23 |
|
|
|
24 |
|
|
UPDATE NEWS: version 1.31 - 6 Jul 97
|
25 |
|
|
|
26 |
|
|
Fixed a bug that caused incorrect SCSI status bytes to be
|
27 |
|
|
returned from commands sent to LUN's greater than 0. This
|
28 |
|
|
means that CDROM changers work now! Fixed a bug in the
|
29 |
|
|
handling of command-line arguments when loaded as a module.
|
30 |
|
|
Also put all the header data in in2000.h where it belongs.
|
31 |
|
|
There are no longer any differences between this driver in
|
32 |
|
|
the 2.1.xx source tree and the 2.0.xx tree, as of 2.0.31
|
33 |
|
|
and 2.1.45 (or is it .46?) - this makes things much easier
|
34 |
|
|
for me...
|
35 |
|
|
|
36 |
|
|
UPDATE NEWS: version 1.30 - 14 Oct 96
|
37 |
|
|
|
38 |
|
|
Fixed a bug in the code that sets the transfer direction
|
39 |
|
|
bit (DESTID_DPD in the WD_DESTINATION_ID register). There
|
40 |
|
|
are quite a few SCSI commands that do a write-to-device;
|
41 |
|
|
now we deal with all of them correctly. Thanks to Joerg
|
42 |
|
|
Dorchain for catching this one.
|
43 |
|
|
|
44 |
|
|
UPDATE NEWS: version 1.29 - 24 Sep 96
|
45 |
|
|
|
46 |
|
|
The memory-mapped hardware on the card is now accessed via
|
47 |
|
|
the 'readb()' and 'readl()' macros - required by the new
|
48 |
|
|
memory management scheme in the 2.1.x kernel series.
|
49 |
|
|
As suggested by Andries Brouwer, 'bios_param()' no longer
|
50 |
|
|
forces an artificial 1023 track limit on drives. Also
|
51 |
|
|
removed some kludge-code left over from struggles with
|
52 |
|
|
older (buggy) compilers.
|
53 |
|
|
|
54 |
|
|
UPDATE NEWS: version 1.28 - 07 May 96
|
55 |
|
|
|
56 |
|
|
Tightened up the "interrupts enabled/disabled" discipline
|
57 |
|
|
in 'in2000_queuecommand()' and maybe 1 or 2 other places.
|
58 |
|
|
I _think_ it may have been a little too lax, causing an
|
59 |
|
|
occasional crash during full moon. A fully functional
|
60 |
|
|
/proc interface is now in place - if you want to play
|
61 |
|
|
with it, start by doing 'cat /proc/scsi/in2000/0'. You
|
62 |
|
|
can also use it to change a few run-time parameters on
|
63 |
|
|
the fly, but it's mostly for debugging. The curious
|
64 |
|
|
should take a good look at 'in2000_proc_info()' in the
|
65 |
|
|
in2000.c file to get an understanding of what it's all
|
66 |
|
|
about; I figure that people who are really into it will
|
67 |
|
|
want to add features suited to their own needs...
|
68 |
|
|
Also, sync is now DISABLED by default.
|
69 |
|
|
|
70 |
|
|
UPDATE NEWS: version 1.27 - 10 Apr 96
|
71 |
|
|
|
72 |
|
|
Fixed a well-hidden bug in the adaptive-disconnect code
|
73 |
|
|
that would show up every now and then during extreme
|
74 |
|
|
heavy loads involving 2 or more simultaneously active
|
75 |
|
|
devices. Thanks to Joe Mack for keeping my nose to the
|
76 |
|
|
grindstone on this one.
|
77 |
|
|
|
78 |
|
|
UPDATE NEWS: version 1.26 - 07 Mar 96
|
79 |
|
|
|
80 |
|
|
1.25 had a nasty bug that bit people with swap partitions
|
81 |
|
|
and tape drives. Also, in my attempt to guess my way
|
82 |
|
|
through Intel assembly language, I made an error in the
|
83 |
|
|
inline code for IO writes. Made a few other changes and
|
84 |
|
|
repairs - this version (fingers crossed) should work well.
|
85 |
|
|
|
86 |
|
|
UPDATE NEWS: version 1.25 - 05 Mar 96
|
87 |
|
|
|
88 |
|
|
Kernel 1.3.70 interrupt mods added; old kernels still OK.
|
89 |
|
|
Big help from Bill Earnest and David Willmore on speed
|
90 |
|
|
testing and optimizing: I think there's a real improvement
|
91 |
|
|
in this area.
|
92 |
|
|
New! User-friendly command-line interface for LILO and
|
93 |
|
|
module loading - the old method is gone, so you'll need
|
94 |
|
|
to read the comments for 'setup_strings' near the top
|
95 |
|
|
of in2000.c. For people with CDROM's or other devices
|
96 |
|
|
that have a tough time with sync negotiation, you can
|
97 |
|
|
now selectively disable sync on individual devices -
|
98 |
|
|
search for the 'nosync' keyword in the command-line
|
99 |
|
|
comments. Some of you disable the BIOS on the card, which
|
100 |
|
|
caused the auto-detect function to fail; there is now a
|
101 |
|
|
command-line option to force detection of a ROM-less card.
|
102 |
|
|
|
103 |
|
|
UPDATE NEWS: version 1.24a - 24 Feb 96
|
104 |
|
|
|
105 |
|
|
There was a bug in the synchronous transfer code. Only
|
106 |
|
|
a few people downloaded before I caught it - could have
|
107 |
|
|
been worse.
|
108 |
|
|
|
109 |
|
|
UPDATE NEWS: version 1.24 - 23 Feb 96
|
110 |
|
|
|
111 |
|
|
Lots of good changes. Advice from Bill Earnest resulted
|
112 |
|
|
in much better detection of cards, more efficient usage
|
113 |
|
|
of the fifo, and (hopefully) faster data transfers. The
|
114 |
|
|
jury is still out on speed - I hope it's improved some.
|
115 |
|
|
One nifty new feature is a cool way of doing disconnect/
|
116 |
|
|
reselect. The driver defaults to what I'm calling
|
117 |
|
|
'adaptive disconnect' - meaning that each command is
|
118 |
|
|
evaluated individually as to whether or not it should be
|
119 |
|
|
run with the option to disconnect/reselect (if the device
|
120 |
|
|
chooses), or as a "SCSI-bus-hog". When several devices
|
121 |
|
|
are operating simultaneously, disconnects are usually an
|
122 |
|
|
advantage. In a single device system, or if only 1 device
|
123 |
|
|
is being accessed, transfers usually go faster if disconnects
|
124 |
|
|
are not allowed.
|
125 |
|
|
|
126 |
|
|
|
127 |
|
|
|
128 |
|
|
The default arguments (you get these when you don't give an 'in2000'
|
129 |
|
|
command-line argument, or you give a blank argument) will cause
|
130 |
|
|
the driver to do adaptive disconnect, synchronous transfers, and a
|
131 |
|
|
minimum of debug messages. If you want to fool with the options,
|
132 |
|
|
search for 'setup_strings' near the top of the in2000.c file and
|
133 |
|
|
check the 'hostdata->args' section in in2000.h - but be warned! Not
|
134 |
|
|
everything is working yet (some things will never work, probably).
|
135 |
|
|
I believe that disabling disconnects (DIS_NEVER) will allow you
|
136 |
|
|
to choose a LEVEL2 value higher than 'L2_BASIC', but I haven't
|
137 |
|
|
spent a lot of time testing this. You might try 'ENABLE_CLUSTERING'
|
138 |
|
|
to see what happens: my tests showed little difference either way.
|
139 |
|
|
There's also a define called 'DEFAULT_SX_PER'; this sets the data
|
140 |
|
|
transfer speed for the asynchronous mode. I've put it at 500 ns
|
141 |
|
|
despite the fact that the card could handle settings of 376 or
|
142 |
|
|
252, because higher speeds may be a problem with poor quality
|
143 |
|
|
cables or improper termination; 500 ns is a compromise. You can
|
144 |
|
|
choose your own default through the command-line with the
|
145 |
|
|
'period' keyword.
|
146 |
|
|
|
147 |
|
|
|
148 |
|
|
------------------------------------------------
|
149 |
|
|
*********** DIP switch settings **************
|
150 |
|
|
------------------------------------------------
|
151 |
|
|
|
152 |
|
|
sw1-1 sw1-2 BIOS address (hex)
|
153 |
|
|
-----------------------------------------
|
154 |
|
|
off off C8000 - CBFF0
|
155 |
|
|
on off D8000 - DBFF0
|
156 |
|
|
off on D0000 - D3FF0
|
157 |
|
|
on on BIOS disabled
|
158 |
|
|
|
159 |
|
|
sw1-3 sw1-4 IO port address (hex)
|
160 |
|
|
------------------------------------
|
161 |
|
|
off off 220 - 22F
|
162 |
|
|
on off 200 - 20F
|
163 |
|
|
off on 110 - 11F
|
164 |
|
|
on on 100 - 10F
|
165 |
|
|
|
166 |
|
|
sw1-5 sw1-6 sw1-7 Interrupt
|
167 |
|
|
------------------------------
|
168 |
|
|
off off off 15
|
169 |
|
|
off on off 14
|
170 |
|
|
off off on 11
|
171 |
|
|
off on on 10
|
172 |
|
|
on - - disabled
|
173 |
|
|
|
174 |
|
|
sw1-8 function depends on BIOS version. In earlier versions this
|
175 |
|
|
controlled synchronous data transfer support for MSDOS:
|
176 |
|
|
off = disabled
|
177 |
|
|
on = enabled
|
178 |
|
|
In later ROMs (starting with 01.3 in April 1994) sw1-8 controls
|
179 |
|
|
the "greater than 2 disk drive" feature that first appeared in
|
180 |
|
|
MSDOS 5.0 (ignored by Linux):
|
181 |
|
|
off = 2 drives maximum
|
182 |
|
|
on = 7 drives maximum
|
183 |
|
|
|
184 |
|
|
sw1-9 Floppy controller
|
185 |
|
|
--------------------------
|
186 |
|
|
off disabled
|
187 |
|
|
on enabled
|
188 |
|
|
|
189 |
|
|
------------------------------------------------
|
190 |
|
|
|
191 |
|
|
I should mention that Drew Eckhardt's 'Generic NCR5380' sources
|
192 |
|
|
were my main inspiration, with lots of reference to the IN2000
|
193 |
|
|
driver currently distributed in the kernel source. I also owe
|
194 |
|
|
much to a driver written by Hamish Macdonald for Linux-m68k(!).
|
195 |
|
|
And to Eric Wright for being an ALPHA guinea pig. And to Bill
|
196 |
|
|
Earnest for 2 tons of great input and information. And to David
|
197 |
|
|
Willmore for extensive 'bonnie' testing. And to Joe Mack for
|
198 |
|
|
continual testing and feedback.
|
199 |
|
|
|
200 |
|
|
|
201 |
|
|
John Shifflett jshiffle@netcom.com
|
202 |
|
|
|