Merge branch 'slab/urgent' into slab/next
[pandora-kernel.git] / tools / power / cpupower / utils / helpers / pci.c
1 #if defined(__i386__) || defined(__x86_64__)
2
3 #include <helpers/helpers.h>
4
5 /*
6  * pci_acc_init
7  *
8  * PCI access helper function depending on libpci
9  *
10  * **pacc : if a valid pci_dev is returned
11  *         *pacc must be passed to pci_acc_cleanup to free it
12  *
13  * vendor_id : the pci vendor id matching the pci device to access
14  * dev_ids :   device ids matching the pci device to access
15  *
16  * Returns :
17  * struct pci_dev which can be used with pci_{read,write}_* functions
18  *                to access the PCI config space of matching pci devices
19  */
20 struct pci_dev *pci_acc_init(struct pci_access **pacc, int vendor_id,
21                                     int *dev_ids)
22 {
23         struct pci_filter filter_nb_link = { -1, -1, -1, -1, vendor_id, 0};
24         struct pci_dev *device;
25         unsigned int i;
26
27         *pacc = pci_alloc();
28         if (*pacc == NULL)
29                 return NULL;
30
31         pci_init(*pacc);
32         pci_scan_bus(*pacc);
33
34         for (i = 0; dev_ids[i] != 0; i++) {
35                 filter_nb_link.device = dev_ids[i];
36                 for (device = (*pacc)->devices; device; device = device->next) {
37                         if (pci_filter_match(&filter_nb_link, device))
38                                 return device;
39                 }
40         }
41         pci_cleanup(*pacc);
42         return NULL;
43 }
44 #endif /* defined(__i386__) || defined(__x86_64__) */