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

Re: PCI register questions..



On Wed, Feb 05, 2003 at 01:26:50PM +0100, Jules Bj?rn Colding wrote:
> So my "device" is the bridge - not the cr16. 

From the information you gave me I'd say so.

> I guess that I must use the pci_resource_*() functions to access the IO
> ports of the cr16 then. I know from the data sheet for the cpu (an STPC
> Atlas) that I can access the IO ports (there are two) on the cr16 at
> specific addresses (0x328 and 0x32e). But it seems that the bridge are
> wrong about these adresses. Using the pcidump sample module from "Linux
> Device Drivers, 2. edition" I get this output (irrelevant information
> removed):
> 
>  	Compulsory registers:
> Vendor id: 104a
> Device id: 0210
> I/O space enabled: y
> Memory enabled: y
> Master enabled: y

[...]

> Base Address 0: 00000000
> Base Address 0 Is I/O: n
> Base Address 0 is 64-bits: n
> Base Address 0 is below-1M: n
> Base Address 0 is prefetchable: n
> Base Address 1: 00000000
> Base Address 1 Is I/O: n
> Base Address 1 is 64-bits: n
> Base Address 1 is below-1M: n
> Base Address 1 is prefetchable: n

Pity it doesn't say how large the regions are. Use lspci -vvvxx for
more information about that. There are also no IO regions specified
over here, might be that your tool doesn't show them. Again, use lspci
-vvvxx to figure out.

> This output put the both ports at 0x0. So it seems that I should use the
> port IO function (inb(), outb() and friends) to access the cr16 at its
> known IO addresses after having completed pci_register_driver() for the
> bridge.

No, it says that the BASE address for the memory region is at 0x0, it
doesn't tell anything about the IO regions.

> > Yes. The CR16MCS9 is bolted to the PCI/ISA bridge. In order to fiddle
> > with it, you need to talk to the bridge. The bridge has a PCI ID, so
> > you can get the a struct pci_dev. (I suppose your PCI/ISA bridge is
> > something like the PLX 9080).
> 
> My vendor/device id combo says 104a/0210 which seems to imply that it
> comes from SGS Thompson and that the device itself is so rare that it
> hasn't been included in pci_ids.h.

Just define it in your module:

#ifndef PCI_DEVICE_ID_MYCARD
#define PCI_DEVICE_ID_MYCARD 0x0210
#endif

If you know what kind of card you have, send the PCI ID to the Linux
PCI maintainers (see http://pciids.sf.net/ ).


Erik

-- 
J.A.K. (Erik) Mouw
Email: J.A.K.Mouw@its.tudelft.nl  mouw@nl.linux.org

PGP signature