linux: Use pci_device_get_parent_bridge instead of open-coding it
Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com> Tested-by: Jeremy Huddleston <jeremyhu@apple.com> Signed-off-by: Adam Jackson <ajax@redhat.com> Reviewed-by: Jamey Sharp <jamey@minilop.net>
This commit is contained in:
		
							parent
							
								
									858fbbb40d
								
							
						
					
					
						commit
						dd72b3c1f1
					
				| 
						 | 
					@ -160,45 +160,6 @@ linuxPciOpenFile(struct pci_device *dev, Bool write)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* This probably shouldn't be Linux-specific */
 | 
					 | 
				
			||||||
static struct pci_device *
 | 
					 | 
				
			||||||
get_parent_bridge(struct pci_device *dev)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    struct pci_id_match bridge_match = {
 | 
					 | 
				
			||||||
	PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY,
 | 
					 | 
				
			||||||
	(PCI_CLASS_BRIDGE << 16) | (PCI_SUBCLASS_BRIDGE_PCI << 8),
 | 
					 | 
				
			||||||
	0
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    struct pci_device *bridge;
 | 
					 | 
				
			||||||
    struct pci_device_iterator *iter;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (dev == NULL) {
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    iter = pci_id_match_iterator_create(& bridge_match);
 | 
					 | 
				
			||||||
    if (iter == NULL) {
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    while ((bridge = pci_device_next(iter)) != NULL) {
 | 
					 | 
				
			||||||
	if (bridge->domain == dev->domain) {
 | 
					 | 
				
			||||||
	    const struct pci_bridge_info *info = 
 | 
					 | 
				
			||||||
		pci_device_get_bridge_info(bridge);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	    if (info != NULL) {
 | 
					 | 
				
			||||||
		if (info->secondary_bus == dev->bus) {
 | 
					 | 
				
			||||||
		    break;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	    }
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    pci_iterator_destroy(iter);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return bridge;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static pointer
 | 
					static pointer
 | 
				
			||||||
linuxMapPci(int ScreenNum, int Flags, struct pci_device *dev,
 | 
					linuxMapPci(int ScreenNum, int Flags, struct pci_device *dev,
 | 
				
			||||||
	    ADDRESS Base, unsigned long Size, int mmap_ioctl)
 | 
						    ADDRESS Base, unsigned long Size, int mmap_ioctl)
 | 
				
			||||||
| 
						 | 
					@ -283,7 +244,7 @@ linuxOpenLegacy(struct pci_device *dev, char *name)
 | 
				
			||||||
	    return fd;
 | 
						    return fd;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dev = get_parent_bridge(dev);
 | 
						dev = pci_device_get_parent_bridge(dev);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return fd;
 | 
					    return fd;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue