• Roland Dreier's avatar
    [PATCH] PCI: add pci_find_next_capability() · 24a4e377
    Roland Dreier authored
    Some devices have more than one capability of the same type.  For
    example, the PCI header for the PathScale InfiniPath looks like:
    
    	04:01.0 InfiniBand: Unknown device 1fc1:000d (rev 02)
    		Subsystem: Unknown device 1fc1:000d
    		Flags: bus master, fast devsel, latency 0, IRQ 193
    		Memory at fea00000 (64-bit, non-prefetchable) [size=2M]
    		Capabilities: [c0] HyperTransport: Slave or Primary Interface
    		Capabilities: [f8] HyperTransport: Interrupt Discovery and Configuration
    
    There are _two_ HyperTransport capabilities, and the PathScale driver
    wants to look at both of them.
    
    The current pci_find_capability() API doesn't work for this, since it
    only allows us to get to the first capability of a given type.  The
    patch below introduces a new pci_find_next_capability(), which can be
    used in a loop like
    
    	for (pos = pci_find_capability(pdev, <ID>);
    	     pos;
    	     pos = pci_find_next_capability(pdev, pos, <ID>)) {
    		/* ... */
    	}
    Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
    Signed-off-by: default avatarMatthew Wilcox <matthew@wil.cx>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    24a4e377
pci.c 24.2 KB