summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdward O'Callaghan <quasisec@chromium.org>2019-11-27 16:44:19 +1100
committerEdward O'Callaghan <quasisec@chromium.org>2019-11-28 14:00:52 +0000
commite28d75ed7204d7fac2c0fac13978098530b0574e (patch)
tree324401adc58b52b390684e05be4c96f79f51c236
parent1d80d645875cde4aa1ea17bd1d166619bed09682 (diff)
downloadflashrom-e28d75ed7204d7fac2c0fac13978098530b0574e.tar.gz
flashrom-e28d75ed7204d7fac2c0fac13978098530b0574e.tar.bz2
flashrom-e28d75ed7204d7fac2c0fac13978098530b0574e.zip
pcidev.c: Factor out pcidev_validate() into pure fn
This makes writing unit-tests easier. Change-Id: Ia2718f1f40851d3122741cd0e50b0c2b647b727a Signed-off-by: Edward O'Callaghan <quasisec@chromium.org> Reviewed-on: https://review.coreboot.org/c/flashrom/+/37264 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
-rw-r--r--pcidev.c53
1 files changed, 29 insertions, 24 deletions
diff --git a/pcidev.c b/pcidev.c
index 54c1fd34c..401284094 100644
--- a/pcidev.c
+++ b/pcidev.c
@@ -148,6 +148,33 @@ uintptr_t pcidev_readbar(struct pci_dev *dev, int bar)
return (uintptr_t)addr;
}
+static uintptr_t pcidev_validate(struct pci_dev *dev, int bar, const struct dev_entry *devs)
+{
+ unsigned i;
+
+ /* Check against list of supported devices. */
+ for (i = 0; devs[i].device_name != NULL; i++) {
+ if (dev->device_id != devs[i].device_id)
+ continue;
+
+ msg_pinfo("Found \"%s %s\" (%04x:%04x, BDF %02x:%02x.%x).\n",
+ devs[i].vendor_name, devs[i].device_name,
+ dev->vendor_id, dev->device_id, dev->bus, dev->dev,
+ dev->func);
+
+ if (devs[i].status == NT)
+ msg_pinfo("===\nThis PCI device is UNTESTED. Please report the 'flashrom -p "
+ "xxxx' output\n"
+ "to flashrom@flashrom.org if it works for you. Please add the name "
+ "of your\n"
+ "PCI device to the subject. Thank you for your help!\n===\n");
+
+
+ return pcidev_readbar(dev, bar);
+ }
+ return 0;
+}
+
static int pcidev_shutdown(void *data)
{
if (pacc == NULL) {
@@ -183,12 +210,10 @@ int pci_init_common(void)
struct pci_dev *pcidev_init(const struct dev_entry *devs, int bar)
{
struct pci_dev *dev;
- struct pci_dev *found_dev = NULL;
struct pci_filter filter;
char *pcidev_bdf;
char *msg = NULL;
int found = 0;
- int i;
uintptr_t addr = 0;
if (pci_init_common() != 0)
@@ -207,30 +232,10 @@ struct pci_dev *pcidev_init(const struct dev_entry *devs, int bar)
for (dev = pacc->devices; dev; dev = dev->next) {
if (pci_filter_match(&filter, dev)) {
- /* Check against list of supported devices. */
- for (i = 0; devs[i].device_name != NULL; i++)
- if ((dev->vendor_id == devs[i].vendor_id) &&
- (dev->device_id == devs[i].device_id))
- break;
- /* Not supported, try the next one. */
- if (devs[i].device_name == NULL)
- continue;
-
- msg_pdbg("Found \"%s %s\" (%04x:%04x, BDF %02x:%02x.%x).\n", devs[i].vendor_name,
- devs[i].device_name, dev->vendor_id, dev->device_id, dev->bus, dev->dev,
- dev->func);
- if (devs[i].status == NT)
- msg_pinfo("===\nThis PCI device is UNTESTED. Please report the 'flashrom -p "
- "xxxx' output\n"
- "to flashrom@flashrom.org if it works for you. Please add the name "
- "of your\n"
- "PCI device to the subject. Thank you for your help!\n===\n");
-
/* FIXME: We should count all matching devices, not
* just those with a valid BAR.
*/
- if ((addr = pcidev_readbar(dev, bar)) != 0) {
- found_dev = dev;
+ if ((addr = pcidev_validate(dev, bar, devs)) != 0) {
found++;
}
}
@@ -246,7 +251,7 @@ struct pci_dev *pcidev_init(const struct dev_entry *devs, int bar)
return NULL;
}
- return found_dev;
+ return dev;
}
enum pci_write_type {