diff --git a/commands/Kconfig b/commands/Kconfig index eed6fbdd3..c98dbc5da 100644 --- a/commands/Kconfig +++ b/commands/Kconfig @@ -207,6 +207,14 @@ config CMD_REGULATOR the regulator command lists the currently registered regulators and their current state. +config CMD_LSPCI + bool + depends on PCI + prompt "lspci command" + default y + help + The lspci command allows to list all PCI devices. + config CMD_VERSION tristate default y diff --git a/commands/Makefile b/commands/Makefile index a84d3339e..d42aca5c0 100644 --- a/commands/Makefile +++ b/commands/Makefile @@ -99,3 +99,4 @@ obj-$(CONFIG_CMD_READF) += readf.o obj-$(CONFIG_CMD_MENUTREE) += menutree.o obj-$(CONFIG_CMD_2048) += 2048.o obj-$(CONFIG_CMD_REGULATOR) += regulator.o +obj-$(CONFIG_CMD_LSPCI) += lspci.o diff --git a/commands/lspci.c b/commands/lspci.c new file mode 100644 index 000000000..c00b57f89 --- /dev/null +++ b/commands/lspci.c @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2011-2014 Antony Pavlov + * + * This file is part of barebox. + * See file CREDITS for list of people who contributed to this project. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include +#include +#include +#include + +static int do_lspci(int argc, char *argv[]) +{ + struct pci_bus *root_bus; + struct pci_dev *dev; + + if (list_empty(&pci_root_buses)) { + printf("No PCI bus detected\n"); + return 1; + } + + list_for_each_entry(root_bus, &pci_root_buses, node) { + list_for_each_entry(dev, &root_bus->devices, bus_list) { + printf("%02x: %04x: %04x:%04x (rev %02x)\n", + dev->devfn, + (dev->class >> 8) & 0xffff, + dev->vendor, + dev->device, + dev->revision); + } + } + + return 0; +} + +BAREBOX_CMD_START(lspci) + .cmd = do_lspci, + BAREBOX_CMD_DESC("Show PCI info") + BAREBOX_CMD_GROUP(CMD_GRP_INFO) + BAREBOX_CMD_COMPLETE(empty_complete) +BAREBOX_CMD_END