PCI patch for 2.3.18

Martin Mares (mj@ucw.cz)
Sat, 11 Sep 1999 23:06:21 +0200


Hello, world!\n

I've returned to the civilization and did some more PCI stuff -- today
mostly cleanups and fixes for things broken by 2.3.17/18 changes.

Summary of changes:

o Include <asm/pci.h> from <linux/pci.h>, removed all other refs to <asm/pci.h>.
o PC: Removed pci_bios_find_class, it wasn't used anyway.
o Reverted change from 2.3.18. Resource assignment should really be
architecture specific since things like ISA mirror protection and
I/O port ranges vary from arch to arch.
o PC: Use unsigned long for everything connected with resource addresses.
o PC: When "pci=rom" is not given, disable all expansion ROMs to avoid
address decoder sharing problems.
o PC: Address space collision or I/O address out of range -> complain
and reset the region, it will be re-assigned later.
o PC: Introduced fixup of memory regions. Every time we spot a unassigned
or misassigned (colliding) memory region, we try to find assign a new
location ourselves. This makes the S3 fixup work again.
o PC: Call pci_read_bridge_bases() from pcibios_fixup_bus(), so that
the per-bridge resources broken by 2.3.17 work again.
o Don't link syscall.o and setup.o on the PC, they aren't used anyway.
o Removed the "BUG: Parent resource not found" message -- this really
can occur if some crappy PC BIOS assigns an out-of-range address
to a I/O region. Grrr.
o Slot name is available as pci_dev->slot_name (Linus, I hope the name
is no more confusing... :))
o Use slot_name for all error messages during PCI probing.
o pci_read_bridge_bases() is now passed only a bus pointer and it exits
cleanly if the bus has no upstream bridge.
o pci_dev->hdr_type is now a stripped-down header type (i.e., without
the multi-function flag in bit 7).
o setup.c: Handle expansion ROMs on bridges correctly.
o pci.h: Moved the ID list to <linux/pci_ids.h> which is included from pci.h.
This will allow us to generate the ID list automatically one day and makes
pci.h more readable.
o pci.h: Fake pci_find_subsys as well if no CONFIG_PCI.

Still on my TODO list:

o Use IRQ mapping info to find host bridges (I already have some code,
but it needs polishing)
o USB IRQ problems
o PCI DMA functions (see <asm-sparc64/pci.h> and arch/sparc64/kernel/pci_iommu.c
for an example implementation -- good work, Dave!)
o ioctl() for setting of kernel view of IRQ's and addresses.
o Update Documentation/pci.txt.
o Helper functions for PCI device init and resource allocation.
o Read all the PCI sources and search for bugs :-)
o create devlist.h and pci_ids.h from pci.ids
o interrupt resources?
o name -> slot_name in drivers etc.

The patch is available at ftp://atrey.karlin.mff.cuni.cz/pub/linux/pci/alpha/l-pci-2.3.18-1.gz .

Anybody with multiple buses (AGP should be sufficient), please test it and send
me your 'lspci -vvx' and /proc/io{mem,ports} -- I'd like to know whether the
pci_read_bridge_base() change works.

Have a nice fortnight

-- 
Martin `MJ' Mares   <mj@ucw.cz>   http://atrey.karlin.mff.cuni.cz/~mj/
Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth
"And don't forget to feed your computer virus..."

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/