PCI Driver: support for multiple devices of same type
I am new to device driver writing and am looking for information on how a PCI driver supports multiple devices of the same type. I've read a couple O'Reilly books (Linux Device Drivers and The Linux Kernel) and pci.txt and have done some code inspection.
From my research, it seems that support for multiple instances of devices on the same board is pretty much ingrained in the PCI generic layer; however, there are a few items I am unclear about.
The specific driver I'm looking at is ixgbe (Intel 10 Gigabit PCI Express Linux driver).
1.) Interrupt handling is configurable in this driver. For "legacy mode," IRQF_SHARED is passed to request_irq(). But for MSI/MSI-X modes, IRQF_SHARED is NOT passed in. Why is this? Is it because MSI writes to PCI memory and kernel can thus implicitly differentiate and avoid race conditions?
2.) For 2 identical devices, will the kernel be able to differentiate without any "help" (i.e. by tweaking device ID numbers)?
3.) How big is the danger of 2 identical devices being allocated the same memory range?
Thanks so much for any advice!
PCI/PCIE driver - Enumeration?
How it is implimented in Linux? How does PCI/PCIE configuration and enumeration does happen in linux. Do we need to write the enumeration function and hook in to some call back function?
Can some one point me the code in linux? I am using Linux 2.6 kernel.