Blame view

Documentation/scsi/in2000.txt 8.23 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  
  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
5d3f083d8   Matt LaPlante   Fix typos in /Doc...
27
     returned from commands sent to LUNs greater than 0. This
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
     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