1 2UPDATE 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 17UPDATE 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 24UPDATE 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 36UPDATE 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 44UPDATE 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 54UPDATE 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 70UPDATE 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 78UPDATE 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 86UPDATE 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 103UPDATE 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 109UPDATE 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 128The default arguments (you get these when you don't give an 'in2000' 129command-line argument, or you give a blank argument) will cause 130the driver to do adaptive disconnect, synchronous transfers, and a 131minimum of debug messages. If you want to fool with the options, 132search for 'setup_strings' near the top of the in2000.c file and 133check the 'hostdata->args' section in in2000.h - but be warned! Not 134everything is working yet (some things will never work, probably). 135I believe that disabling disconnects (DIS_NEVER) will allow you 136to choose a LEVEL2 value higher than 'L2_BASIC', but I haven't 137spent a lot of time testing this. You might try 'ENABLE_CLUSTERING' 138to see what happens: my tests showed little difference either way. 139There's also a define called 'DEFAULT_SX_PER'; this sets the data 140transfer speed for the asynchronous mode. I've put it at 500 ns 141despite the fact that the card could handle settings of 376 or 142252, because higher speeds may be a problem with poor quality 143cables or improper termination; 500 ns is a compromise. You can 144choose 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 203