[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Legacy Addresses




> From pci-sig-request@znyx.com Thu Jan 16 21:46:49 1997
 
> Hi all,
> 
> This topic may have been discussed earlier. I would appreciate any
> information though.
> 
> On making a PCI device respond to Legacy I/O addresses, are there any
> specific issues that one needs to take care of? Has there been any
> specification proposed for such devices (except for IDE devices that can
> work both on PCI native mode and Legacy)?

I'll give you a little perspective. Hopefully I'm not repeating what
you already know. 

When you declare your PCI function as being a 
certain class and sub-class, BIOS knows for some of them that there
are specific Legacy IO addresses associated with that. For example,
if you declare your device as a VGA compatible controller, you
get memory addresses A0000h-BFFFFh, and IO addresses 3B0h-3BBH, and
3C0h to 3DFh. For other classes, such as a Generic 8237 DMA
controller, the PCI specification doesn't specify which addresses
are reserved, but I've always assumed that it reserves the
standard addresses of that part. Am I wrong?

If you have a Legacy device that doesn't have a class designation
such as SoundBlaster compatible audio, then you have to go around
the PCI mechanism. You just have to decode the addresses you want
and hope that it doesn't create a conflict with another board that
wants to decode those same addresses. However, despite the fact that
PCI doesn't allow for these Legacy devices, Windows 95 does provide
mechanisms for resolving these conflicts. If you look at the 
PC97 Design Guide from Microsoft, it asks that Legacy devices provide
multiple (eight, I think) address choices for these Legacy devices.
This allows Windows 95 to do at the higher-level which should have happened
automatically by BIOS upon power up.

As far as I've seen, all IO addresses are broadcast on the first-level
PCI bus. Addresses that aren't decoded are sent on to the ISA bus.
As you hit upon, the real issue is getting the address across a bridge.
Bridges typically only pass those addresses that they know about.
They do positive address decoding.
In other words, if your Legacy address isn't defined as part of
the class type, than you are in trouble.

õ