|  | 
 | UPDATE NEWS: version 1.33 - 26 Aug 98 | 
 |  | 
 |    Interrupt management in this driver has become, over | 
 |    time, increasingly odd and difficult to explain - this | 
 |    has been mostly due to my own mental inadequacies. In | 
 |    recent kernels, it has failed to function at all when | 
 |    compiled for SMP. I've fixed that problem, and after | 
 |    taking a fresh look at interrupts in general, greatly | 
 |    reduced the number of places where they're fiddled | 
 |    with. Done some heavy testing and it looks very good. | 
 |    The driver now makes use of the __initfunc() and | 
 |    __initdata macros to save about 4k of kernel memory. | 
 |    Once again, the same code works for both 2.0.xx and | 
 |    2.1.xx kernels. | 
 |  | 
 | UPDATE NEWS: version 1.32 - 28 Mar 98 | 
 |  | 
 |    Removed the check for legal IN2000 hardware versions: | 
 |    It appears that the driver works fine with serial | 
 |    EPROMs (the 8-pin chip that defines hardware rev) as | 
 |    old as 2.1, so we'll assume that all cards are OK. | 
 |  | 
 | UPDATE NEWS: version 1.31 - 6 Jul 97 | 
 |  | 
 |    Fixed a bug that caused incorrect SCSI status bytes to be | 
 |    returned from commands sent to LUNs greater than 0. This | 
 |    means that CDROM changers work now! Fixed a bug in the | 
 |    handling of command-line arguments when loaded as a module. | 
 |    Also put all the header data in in2000.h where it belongs. | 
 |    There are no longer any differences between this driver in | 
 |    the 2.1.xx source tree and the 2.0.xx tree, as of 2.0.31 | 
 |    and 2.1.45 (or is it .46?) - this makes things much easier | 
 |    for me... | 
 |  | 
 | UPDATE NEWS: version 1.30 - 14 Oct 96 | 
 |  | 
 |    Fixed a bug in the code that sets the transfer direction | 
 |    bit (DESTID_DPD in the WD_DESTINATION_ID register). There | 
 |    are quite a few SCSI commands that do a write-to-device; | 
 |    now we deal with all of them correctly. Thanks to Joerg | 
 |    Dorchain for catching this one. | 
 |  | 
 | UPDATE NEWS: version 1.29 - 24 Sep 96 | 
 |  | 
 |    The memory-mapped hardware on the card is now accessed via | 
 |    the 'readb()' and 'readl()' macros - required by the new | 
 |    memory management scheme in the 2.1.x kernel series. | 
 |    As suggested by Andries Brouwer, 'bios_param()' no longer | 
 |    forces an artificial 1023 track limit on drives. Also | 
 |    removed some kludge-code left over from struggles with | 
 |    older (buggy) compilers. | 
 |  | 
 | UPDATE NEWS: version 1.28 - 07 May 96 | 
 |  | 
 |    Tightened up the "interrupts enabled/disabled" discipline | 
 |    in 'in2000_queuecommand()' and maybe 1 or 2 other places. | 
 |    I _think_ it may have been a little too lax, causing an | 
 |    occasional crash during full moon. A fully functional | 
 |    /proc interface is now in place - if you want to play | 
 |    with it, start by doing 'cat /proc/scsi/in2000/0'. You | 
 |    can also use it to change a few run-time parameters on | 
 |    the fly, but it's mostly for debugging. The curious | 
 |    should take a good look at 'in2000_proc_info()' in the | 
 |    in2000.c file to get an understanding of what it's all | 
 |    about; I figure that people who are really into it will | 
 |    want to add features suited to their own needs... | 
 |    Also, sync is now DISABLED by default. | 
 |  | 
 | UPDATE NEWS: version 1.27 - 10 Apr 96 | 
 |  | 
 |    Fixed a well-hidden bug in the adaptive-disconnect code | 
 |    that would show up every now and then during extreme | 
 |    heavy loads involving 2 or more simultaneously active | 
 |    devices. Thanks to Joe Mack for keeping my nose to the | 
 |    grindstone on this one. | 
 |  | 
 | UPDATE NEWS: version 1.26 - 07 Mar 96 | 
 |  | 
 |    1.25 had a nasty bug that bit people with swap partitions | 
 |    and tape drives. Also, in my attempt to guess my way | 
 |    through Intel assembly language, I made an error in the | 
 |    inline code for IO writes. Made a few other changes and | 
 |    repairs - this version (fingers crossed) should work well. | 
 |  | 
 | UPDATE NEWS: version 1.25 - 05 Mar 96 | 
 |  | 
 |    Kernel 1.3.70 interrupt mods added; old kernels still OK. | 
 |    Big help from Bill Earnest and David Willmore on speed | 
 |    testing and optimizing: I think there's a real improvement | 
 |    in this area. | 
 |    New! User-friendly command-line interface for LILO and | 
 |    module loading - the old method is gone, so you'll need | 
 |    to read the comments for 'setup_strings' near the top | 
 |    of in2000.c. For people with CDROM's or other devices | 
 |    that have a tough time with sync negotiation, you can | 
 |    now selectively disable sync on individual devices - | 
 |    search for the 'nosync' keyword in the command-line | 
 |    comments. Some of you disable the BIOS on the card, which | 
 |    caused the auto-detect function to fail; there is now a | 
 |    command-line option to force detection of a ROM-less card. | 
 |  | 
 | UPDATE NEWS: version 1.24a - 24 Feb 96 | 
 |  | 
 |    There was a bug in the synchronous transfer code. Only | 
 |    a few people downloaded before I caught it - could have | 
 |    been worse. | 
 |  | 
 | UPDATE NEWS: version 1.24 - 23 Feb 96 | 
 |  | 
 |    Lots of good changes. Advice from Bill Earnest resulted | 
 |    in much better detection of cards, more efficient usage | 
 |    of the fifo, and (hopefully) faster data transfers. The | 
 |    jury is still out on speed - I hope it's improved some. | 
 |    One nifty new feature is a cool way of doing disconnect/ | 
 |    reselect. The driver defaults to what I'm calling | 
 |    'adaptive disconnect' - meaning that each command is | 
 |    evaluated individually as to whether or not it should be | 
 |    run with the option to disconnect/reselect (if the device | 
 |    chooses), or as a "SCSI-bus-hog". When several devices | 
 |    are operating simultaneously, disconnects are usually an | 
 |    advantage. In a single device system, or if only 1 device | 
 |    is being accessed, transfers usually go faster if disconnects | 
 |    are not allowed. | 
 |  | 
 |  | 
 |  | 
 | The default arguments (you get these when you don't give an 'in2000' | 
 | command-line argument, or you give a blank argument) will cause | 
 | the driver to do adaptive disconnect, synchronous transfers, and a | 
 | minimum of debug messages. If you want to fool with the options, | 
 | search for 'setup_strings' near the top of the in2000.c file and | 
 | check the 'hostdata->args' section in in2000.h - but be warned! Not | 
 | everything is working yet (some things will never work, probably). | 
 | I believe that disabling disconnects (DIS_NEVER) will allow you | 
 | to choose a LEVEL2 value higher than 'L2_BASIC', but I haven't | 
 | spent a lot of time testing this. You might try 'ENABLE_CLUSTERING' | 
 | to see what happens: my tests showed little difference either way. | 
 | There's also a define called 'DEFAULT_SX_PER'; this sets the data | 
 | transfer speed for the asynchronous mode. I've put it at 500 ns | 
 | despite the fact that the card could handle settings of 376 or | 
 | 252, because higher speeds may be a problem with poor quality | 
 | cables or improper termination; 500 ns is a compromise. You can | 
 | choose your own default through the command-line with the | 
 | 'period' keyword. | 
 |  | 
 |  | 
 | ------------------------------------------------ | 
 | ***********  DIP switch settings  ************** | 
 | ------------------------------------------------ | 
 |  | 
 |    sw1-1 sw1-2    BIOS address (hex) | 
 |    ----------------------------------------- | 
 |     off   off     C8000 - CBFF0 | 
 |     on    off     D8000 - DBFF0 | 
 |     off   on      D0000 - D3FF0 | 
 |     on    on      BIOS disabled | 
 |  | 
 |    sw1-3 sw1-4    IO port address (hex) | 
 |    ------------------------------------ | 
 |     off   off     220 - 22F | 
 |     on    off     200 - 20F | 
 |     off   on      110 - 11F | 
 |     on    on      100 - 10F | 
 |  | 
 |    sw1-5 sw1-6 sw1-7    Interrupt | 
 |    ------------------------------ | 
 |     off   off   off     15 | 
 |     off   on    off     14 | 
 |     off   off   on      11 | 
 |     off   on    on      10 | 
 |     on    -     -       disabled | 
 |  | 
 |    sw1-8 function depends on BIOS version. In earlier versions this | 
 |    controlled synchronous data transfer support for MSDOS: | 
 |       off = disabled | 
 |       on  = enabled | 
 |    In later ROMs (starting with 01.3 in April 1994) sw1-8 controls | 
 |    the "greater than 2 disk drive" feature that first appeared in | 
 |    MSDOS 5.0 (ignored by Linux): | 
 |       off = 2 drives maximum | 
 |       on  = 7 drives maximum | 
 |  | 
 |    sw1-9    Floppy controller | 
 |    -------------------------- | 
 |     off     disabled | 
 |     on      enabled | 
 |  | 
 | ------------------------------------------------ | 
 |  | 
 |    I should mention that Drew Eckhardt's 'Generic NCR5380' sources | 
 |    were my main inspiration, with lots of reference to the IN2000 | 
 |    driver currently distributed in the kernel source. I also owe | 
 |    much to a driver written by Hamish Macdonald for Linux-m68k(!). | 
 |    And to Eric Wright for being an ALPHA guinea pig. And to Bill | 
 |    Earnest for 2 tons of great input and information. And to David | 
 |    Willmore for extensive 'bonnie' testing. And to Joe Mack for | 
 |    continual testing and feedback. | 
 |  | 
 |  | 
 |             John Shifflett    jshiffle@netcom.com | 
 |  |