OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [Documentation/] [mca.txt] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
i386 Micro Channel Architecture Support
2
=======================================
3
 
4
MCA support is enabled using the CONFIG_MCA define.  A machine with a MCA
5
bus will have the kernel variable MCA_bus set, assuming the BIOS feature
6
bits are set properly (see arch/i386/boot/setup.S for information on
7
how this detection is done).
8
 
9
Adapter Detection
10
=================
11
 
12
The ideal MCA adapter detection is done through the use of the
13
Programmable Option Select registers.  Generic functions for doing
14
this have been added in include/linux/mca.h and arch/i386/kernel/mca.c.
15
Everything needed to detect adapters and read (and write) configuration
16
information is there.  A number of MCA-specific drivers already use
17
this.  The typical probe code looks like the following:
18
 
19
        #include 
20
 
21
        unsigned char pos2, pos3, pos4, pos5;
22
        struct net_device* dev;
23
        int slot;
24
 
25
        if( MCA_bus ) {
26
                slot = mca_find_adapter( ADAPTER_ID, 0 );
27
                if( slot == MCA_NOTFOUND ) {
28
                        return -ENODEV;
29
                }
30
                /* optional - see below */
31
                mca_set_adapter_name( slot, "adapter name & description" );
32
                mca_set_adapter_procfn( slot, dev_getinfo, dev );
33
 
34
                /* read the POS registers.  Most devices only use 2 and 3 */
35
                pos2 = mca_read_stored_pos( slot, 2 );
36
                pos3 = mca_read_stored_pos( slot, 3 );
37
                pos4 = mca_read_stored_pos( slot, 4 );
38
                pos5 = mca_read_stored_pos( slot, 5 );
39
        } else {
40
                return -ENODEV;
41
        }
42
 
43
        /* extract configuration from pos[2345] and set everything up */
44
 
45
Loadable modules should modify this to test that the specified IRQ and
46
IO ports (plus whatever other stuff) match.  See 3c523.c for example
47
code (actually, smc-mca.c has a slightly more complex example that can
48
handle a list of adapter ids).
49
 
50
Keep in mind that devices should never directly access the POS registers
51
(via inb(), outb(), etc).  While it's generally safe, there is a small
52
potential for blowing up hardware when it's done at the wrong time.
53
Furthermore, accessing a POS register disables a device temporarily.
54
This is usually okay during startup, but do _you_ want to rely on it?
55
During initial configuration, mca_init() reads all the POS registers
56
into memory.  mca_read_stored_pos() accesses that data.  mca_read_pos()
57
and mca_write_pos() are also available for (safer) direct POS access,
58
but their use is _highly_ discouraged.  mca_write_pos() is particularly
59
dangerous, as it is possible for adapters to be put in inconsistent
60
states (i.e. sharing IO address, etc) and may result in crashes, toasted
61
hardware, and blindness.
62
 
63
User level drivers (such as the AGX X server) can use /proc/mca/pos to
64
find adapters (see below).
65
 
66
Some MCA adapters can also be detected via the usual ISA-style device
67
probing (many SCSI adapters, for example).  This sort of thing is highly
68
discouraged.  Perfectly good information is available telling you what's
69
there, so there's no excuse for messing with random IO ports.  However,
70
we MCA people still appreciate any ISA-style driver that will work with
71
our hardware.  You take what you can get...
72
 
73
Level-Triggered Interrupts
74
==========================
75
 
76
Because MCA uses level-triggered interrupts, a few problems arise with
77
what might best be described as the ISA mindset and its effects on
78
drivers.  These sorts of problems are expected to become less common as
79
more people use shared IRQs on PCI machines.
80
 
81
In general, an interrupt must be acknowledged not only at the ICU (which
82
is done automagically by the kernel), but at the device level.  In
83
particular, IRQ 0 must be reset after a timer interrupt (now done in
84
arch/i386/kernel/time.c) or the first timer interrupt hangs the system.
85
There were also problems with the 1.3.x floppy drivers, but that seems
86
to have been fixed.
87
 
88
IRQs are also shareable, and most MCA-specific devices should be coded
89
with shared IRQs in mind.
90
 
91
/proc/mca
92
=========
93
 
94
/proc/mca is a directory containing various files for adapters and
95
other stuff.
96
 
97
        /proc/mca/pos           Straight listing of POS registers
98
        /proc/mca/slot[1-8]     Information on adapter in specific slot
99
        /proc/mca/video         Same for integrated video
100
        /proc/mca/scsi          Same for integrated SCSI
101
        /proc/mca/machine       Machine information
102
 
103
See Appendix A for a sample.
104
 
105
Device drivers can easily add their own information function for
106
specific slots (including integrated ones) via the
107
mca_set_adapter_procfn() call.  Drivers that support this are ESDI, IBM
108
SCSI, and 3c523.  If a device is also a module, make sure that the proc
109
function is removed in the module cleanup.  This will require storing
110
the slot information in a private structure somewhere.  See the 3c523
111
driver for details.
112
 
113
Your typical proc function will look something like this:
114
 
115
        static int
116
        dev_getinfo( char* buf, int slot, void* d ) {
117
                struct net_device* dev = (struct net_device*) d;
118
                int len = 0;
119
 
120
                len += sprintf( buf+len, "Device: %s\n", dev->name );
121
                len += sprintf( buf+len, "IRQ: %d\n", dev->irq );
122
                len += sprintf( buf+len, "IO Port: %#lx-%#lx\n", ... );
123
                ...
124
 
125
                return len;
126
        }
127
 
128
Some of the standard MCA information will already be printed, so don't
129
bother repeating it.  Don't try putting in more than 3K of information.
130
 
131
Enable this function with:
132
        mca_set_adapter_procfn( slot, dev_getinfo, dev );
133
 
134
Disable it with:
135
        mca_set_adapter_procfn( slot, NULL, NULL );
136
 
137
It is also recommended that, even if you don't write a proc function, to
138
set the name of the adapter (i.e. "PS/2 ESDI Controller") via
139
mca_set_adapter_name( int slot, char* name ).
140
 
141
MCA Device Drivers
142
==================
143
 
144
Currently, there are a number of MCA-specific device drivers.
145
 
146
1) PS/2 ESDI
147
        drivers/block/ps2esdi.c
148
        include/linux/ps2esdi.h
149
   Uses major number 36, and should use /dev files /dev/eda, /dev/edb.
150
   Supports two drives, but only one controller.  May use the
151
   command-line args "ed=cyl,head,sec" and "tp720".
152
 
153
2) PS/2 SCSI
154
        drivers/scsi/ibmmca.c
155
        drivers/scsi/ibmmca.h
156
   The driver for the IBM SCSI subsystem.  Includes both integrated
157
   controllers and adapter cards.  May require command-line arg
158
   "ibmmcascsi=io_port" to force detection of an adapter.  If you have a
159
   machine with a front-panel display (i.e. model 95), you can use
160
   "ibmmcascsi=display" to enable a drive activity indicator.
161
 
162
3) 3c523
163
        drivers/net/3c523.c
164
        drivers/net/3c523.h
165
   3Com 3c523 Etherlink/MC ethernet driver.
166
 
167
4) SMC Ultra/MCA and IBM Adapter/A
168
        drivers/net/smc-mca.c
169
        drivers/net/smc-mca.h
170
        Driver for the MCA version of the SMC Ultra and various other
171
        OEM'ed and work-alike cards (Elite, Adapter/A, etc).
172
 
173
5) NE/2
174
        driver/net/ne2.c
175
        driver/net/ne2.h
176
        The NE/2 is the MCA version of the NE2000.  This may not work
177
        with clones that have a different adapter id than the original
178
        NE/2.
179
 
180
6) Future Domain MCS-600/700, OEM'd IBM Fast SCSI Aapter/A and
181
   Reply Sound Blaster/SCSI (SCSI part)
182
        Better support for these cards than the driver for ISA.
183
   Supports multiple cards with IRQ sharing.
184
 
185
Also added boot time option of scsi-probe, which can do reordering of
186
SCSI host adapters. This will direct the kernel on the order which
187
SCSI adapter should be detected. Example:
188
  scsi-probe=ibmmca,fd_mcs,adaptec1542,buslogic
189
 
190
The serial drivers were modified to support the extended IO port range
191
of the typical MCA system (also #ifdef CONFIG_MCA).
192
 
193
The following devices work with existing drivers:
194
1) Token-ring
195
2) Future Domain SCSI (MCS-600, MCS-700, not MCS-350, OEM'ed IBM SCSI)
196
3) Adaptec 1640 SCSI (using the aha1542 driver)
197
4) Bustek/Buslogic SCSI (various)
198
5) Probably all Arcnet cards.
199
6) Some, possibly all, MCA IDE controllers.
200
7) 3Com 3c529 (MCA version of 3c509) (patched)
201
 
202
8) Intel EtherExpressMC  (patched version)
203
   You need to have CONFIG_MCA defined to have EtherExpressMC support.
204
9) Reply Sound Blaster/SCSI (SB part) (patched version)
205
 
206
Bugs & Other Weirdness
207
======================
208
 
209
NMIs tend to occur with MCA machines because of various hardware
210
weirdness, bus timeouts, and many other non-critical things.  Some basic
211
code to handle them (inspired by the NetBSD MCA code) has been added to
212
detect the guilty device, but it's pretty incomplete.  If NMIs are a
213
persistent problem (on some model 70 or 80s, they occur every couple
214
shell commands), the CONFIG_IGNORE_NMI flag will take care of that.
215
 
216
Various Pentium machines have had serious problems with the FPU test in
217
bugs.h.  Basically, the machine hangs after the HLT test.  This occurs,
218
as far as we know, on the Pentium-equipped 85s, 95s, and some PC Servers.
219
The PCI/MCA PC 750s are fine as far as I can tell.  The ``mca-pentium''
220
boot-prompt flag will disable the FPU bug check if this is a problem
221
with your machine.
222
 
223
The model 80 has a raft of problems that are just too weird and unique
224
to get into here.  Some people have no trouble while others have nothing
225
but problems.  I'd suspect some problems are related to the age of the
226
average 80 and accompanying hardware deterioration, although others
227
are definitely design problems with the hardware.  Among the problems
228
include SCSI controller problems, ESDI controller problems, and serious
229
screw-ups in the floppy controller.  Oh, and the parallel port is also
230
pretty flaky.  There were about 5 or 6 different model 80 motherboards
231
produced to fix various obscure problems.  As far as I know, it's pretty
232
much impossible to tell which bugs a particular model 80 has (other than
233
triggering them, that is).
234
 
235
Drivers are required for some MCA memory adapters.  If you're suddenly
236
short a few megs of RAM, this might be the reason.  The (I think) Enhanced
237
Memory Adapter commonly found on the model 70 is one.  There's a very
238
alpha driver floating around, but it's pretty ugly (disassembled from
239
the DOS driver, actually).  See the MCA Linux web page (URL below)
240
for more current memory info.
241
 
242
The Thinkpad 700 and 720 will work, but various components are either
243
non-functional, flaky, or we don't know anything about them.  The
244
graphics controller is supposed to be some WD, but we can't get things
245
working properly.  The PCMCIA slots don't seem to work.  Ditto for APM.
246
The serial ports work, but detection seems to be flaky.
247
 
248
Credits
249
=======
250
A whole pile of people have contributed to the MCA code.  I'd include
251
their names here, but I don't have a list handy.  Check the MCA Linux
252
home page (URL below) for a perpetually out-of-date list.
253
 
254
=====================================================================
255
MCA Linux Home Page: http://glycerine.itsmm.uni.edu/mca/
256
 
257
Christophe Beauregard
258
chrisb@truespectra.com
259
cpbeaure@calum.csclub.uwaterloo.ca
260
 
261
=====================================================================
262
Appendix A: Sample /proc/mca
263
 
264
This is from my model 8595.  Slot 1 contains the standard IBM SCSI
265
adapter, slot 3 is an Adaptec AHA-1640, slot 5 is a XGA-1 video adapter,
266
and slot 7 is the 3c523 Etherlink/MC.
267
 
268
/proc/mca/machine:
269
Model Id: 0xf8
270
Submodel Id: 0x14
271
BIOS Revision: 0x5
272
 
273
/proc/mca/pos:
274
Slot 1: ff 8e f1 fc a0 ff ff ff  IBM SCSI Adapter w/Cache
275
Slot 2: ff ff ff ff ff ff ff ff
276
Slot 3: 1f 0f 81 3b bf b6 ff ff
277
Slot 4: ff ff ff ff ff ff ff ff
278
Slot 5: db 8f 1d 5e fd c0 00 00
279
Slot 6: ff ff ff ff ff ff ff ff
280
Slot 7: 42 60 ff 08 ff ff ff ff  3Com 3c523 Etherlink/MC
281
Slot 8: ff ff ff ff ff ff ff ff
282
Video : ff ff ff ff ff ff ff ff
283
SCSI  : ff ff ff ff ff ff ff ff
284
 
285
/proc/mca/slot1:
286
Slot: 1
287
Adapter Name: IBM SCSI Adapter w/Cache
288
Id: 8eff
289
Enabled: Yes
290
POS: ff 8e f1 fc a0 ff ff ff
291
Subsystem PUN: 7
292
Detected at boot: Yes
293
 
294
/proc/mca/slot3:
295
Slot: 3
296
Adapter Name: Unknown
297
Id: 0f1f
298
Enabled: Yes
299
POS: 1f 0f 81 3b bf b6 ff ff
300
 
301
/proc/mca/slot5:
302
Slot: 5
303
Adapter Name: Unknown
304
Id: 8fdb
305
Enabled: Yes
306
POS: db 8f 1d 5e fd c0 00 00
307
 
308
/proc/mca/slot7:
309
Slot: 7
310
Adapter Name: 3Com 3c523 Etherlink/MC
311
Id: 6042
312
Enabled: Yes
313
POS: 42 60 ff 08 ff ff ff ff
314
Revision: 0xe
315
IRQ: 9
316
IO Address: 0x3300-0x3308
317
Memory: 0xd8000-0xdbfff
318
Transceiver: External
319
Device: eth0
320
Hardware Address: 02 60 8c 45 c4 2a

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.