Messages in this thread Patch in this message | | | Date | Mon, 27 Feb 2006 13:52:59 +0900 | From | Kenji Kaneshige <> | Subject | [PATCH 2/4] PCI legacy I/O port free driver (take 3) - Update Documentation/pci.txt |
| |
This patch adds the description about legacy I/O port free driver into Documentation/pci.txt.
Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Documentation/pci.txt | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+)
Index: linux-2.6.16-rc4/Documentation/pci.txt =================================================================== --- linux-2.6.16-rc4.orig/Documentation/pci.txt 2006-02-27 13:29:34.000000000 +0900 +++ linux-2.6.16-rc4/Documentation/pci.txt 2006-02-27 13:29:42.000000000 +0900 @@ -269,3 +269,31 @@ pci_find_device() Superseded by pci_get_device() pci_find_subsys() Superseded by pci_get_subsys() pci_find_slot() Superseded by pci_get_slot() + + +9. Legacy I/O port free driver +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +On the large servers, I/O port resources could not be assigned to all +PCI devices because it is limited (64KB on Intel Architecture[1]) and +it would be fragmented (I/O base register of PCI-to-PCI bridge will +usually be aligned to a 4KB boundary[2]). On such systems, +pci_enable_device() and pci_request_regions() for those devices will +fail because those functions try to enable all the regions. However, +it is a problem for some PCI devices which provide both I/O port and +MMIO interface because some of them can be handled without using I/O +port interface. The reason why such devices provide I/O port interface +is for compatibility to legacy OSs. So this kind of devices should +work even if enough I/O port resources are not assigned. The "PCI +Local Bus Specification Revision 3.0" also mentions about this topic +(Please see p.44, "IMPLEMENTATION NOTE"). + +This problem is solved by telling the kernel if your driver needs to +use I/O port to handle the device. If your driver doesn't need any I/O +port regions to handle the device, you can tell it to the kernel by +setting the no_ioport flag in struct pci_dev. If the no_ioport flag is +set, kernel will never touch I/O port regions for the corresponding +devices. Please note that you need to set the no_ioport flag before +calling pci_enable_device() and pci_request_regions(). + +[1] Some systems support 64KB I/O port space per PCI segment. +[2] Some PCI-to-PCI bridges support optional 1KB aligned I/O base. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |