2 UPDATE NEWS: version 1.33 - 26 Aug 98
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
17 UPDATE NEWS: version 1.32 - 28 Mar 98
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.
24 UPDATE NEWS: version 1.31 - 6 Jul 97
26 Fixed a bug that caused incorrect SCSI status bytes to be
27 returned from commands sent to LUNs 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
36 UPDATE NEWS: version 1.30 - 14 Oct 96
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.
44 UPDATE NEWS: version 1.29 - 24 Sep 96
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.
54 UPDATE NEWS: version 1.28 - 07 May 96
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.
70 UPDATE NEWS: version 1.27 - 10 Apr 96
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.
78 UPDATE NEWS: version 1.26 - 07 Mar 96
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.
86 UPDATE NEWS: version 1.25 - 05 Mar 96
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
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.
103 UPDATE NEWS: version 1.24a - 24 Feb 96
105 There was a bug in the synchronous transfer code. Only
106 a few people downloaded before I caught it - could have
109 UPDATE NEWS: version 1.24 - 23 Feb 96
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
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
148 ------------------------------------------------
149 *********** DIP switch settings **************
150 ------------------------------------------------
152 sw1-1 sw1-2 BIOS address (hex)
153 -----------------------------------------
154 off off C8000 - CBFF0
159 sw1-3 sw1-4 IO port address (hex)
160 ------------------------------------
166 sw1-5 sw1-6 sw1-7 Interrupt
167 ------------------------------
174 sw1-8 function depends on BIOS version. In earlier versions this
175 controlled synchronous data transfer support for MSDOS:
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
184 sw1-9 Floppy controller
185 --------------------------
189 ------------------------------------------------
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.
201 John Shifflett jshiffle@netcom.com