Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | |
| 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 |
Matt LaPlante | 5d3f083 | 2006-11-30 05:21:10 +0100 | [diff] [blame] | 27 | returned from commands sent to LUNs greater than 0. This |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |