On 27 January 2015 at 22:30, Bin Meng <bmeng...@gmail.com> wrote: > Hi Simon, > > On Wed, Jan 28, 2015 at 1:13 PM, Simon Glass <s...@chromium.org> wrote: >> There is an existing function prototype in the header file but it is not >> implemented. Implement something similar. >> >> Signed-off-by: Simon Glass <s...@chromium.org> >> --- >> > > Reviewed-by: Bin Meng <bmeng...@gmail.com> > > One typo below and I think you can fix it before applying. > >> Changes in v2: >> - Fix missing spaces (code style nit) >> - Add another comment in pci_find_class() >> >> drivers/pci/pci.c | 43 +++++++++++++++++++++++++++++++++++++++++++ >> include/pci.h | 3 +-- >> 2 files changed, 44 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c >> index 950a247..0210e41 100644 >> --- a/drivers/pci/pci.c >> +++ b/drivers/pci/pci.c >> @@ -15,6 +15,7 @@ >> #include <common.h> >> >> #include <command.h> >> +#include <errno.h> >> #include <asm/processor.h> >> #include <asm/io.h> >> #include <pci.h> >> @@ -236,6 +237,48 @@ pci_dev_t pci_find_devices(struct pci_device_id *ids, >> int index) >> return -1; >> } >> >> +pci_dev_t pci_find_class(uint find_class, int index) >> +{ >> + int bus; >> + int devnum; >> + pci_dev_t bdf; >> + uint32_t class; >> + >> + for (bus = 0; bus <= pci_last_busno(); bus++) { >> + for (devnum = 0; devnum < PCI_MAX_PCI_DEVICES - 1; devnum++) >> { >> + pci_read_config_dword(PCI_BDF(bus, devnum, 0), >> + PCI_CLASS_REVISION, &class); >> + if (class >> 16 == 0xffff) >> + continue; >> + >> + for (bdf = PCI_BDF(bus, devnum, 0); >> + bdf <= PCI_BDF(bus, devnum, >> + PCI_MAX_PCI_FUNCTIONS - 1); >> + bdf += PCI_BDF(0, 0, 1)) { >> + pci_read_config_dword(bdf, >> PCI_CLASS_REVISION, >> + &class); >> + class >>= 8; >> + >> + if (class != find_class) >> + continue; >> + /* >> + * Decrement the index. We want to return the >> + * correct device, so index is 0 for theh >> first > > theh -> the > >> + * matching device, 1 for the second, etc. >> + */ >> + if (index) { >> + index--; >> + continue; >> + } >> + /* Return index'th controller. */ >> + return bdf; >> + } >> + } >> + } >> + >> + return -ENODEV; >> +} >> + >> pci_dev_t pci_find_device(unsigned int vendor, unsigned int device, int >> index) >> { >> struct pci_device_id ids[2] = { {}, {0, 0} }; >> diff --git a/include/pci.h b/include/pci.h >> index 4fbb8f6..004a048 100644 >> --- a/include/pci.h >> +++ b/include/pci.h >> @@ -644,8 +644,7 @@ extern int pciauto_config_device(struct pci_controller >> *hose, pci_dev_t dev); >> >> extern pci_dev_t pci_find_device (unsigned int vendor, unsigned int device, >> int index); >> extern pci_dev_t pci_find_devices (struct pci_device_id *ids, int index); >> -extern pci_dev_t pci_find_class(int wanted_class, int wanted_sub_code, >> - int wanted_prog_if, int index); >> +pci_dev_t pci_find_class(unsigned int find_class, int index); >> >> extern int pci_hose_config_device(struct pci_controller *hose, >> pci_dev_t dev, >> -- > > Regards, > Bin
Fixed, applied to u-boot-x86. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot