src/dpdk/drivers/bus/pci/bsd/pci.c
int
rte_pci_scan(void)
{
	int fd;
	unsigned dev_count = 0;
	struct pci_conf matches[16];
	struct pci_conf_io conf_io = {
			.pat_buf_len = 0,
			.num_patterns = 0,
			.patterns = NULL,
			.match_buf_len = sizeof(matches),
			.matches = &matches[0],
	};
	struct rte_pci_addr pci_addr;

	/* for debug purposes, PCI can be disabled */
	if (!rte_eal_has_pci())
		return 0;

	fd = open("/dev/pci", O_RDONLY);
	if (fd < 0) {
		RTE_LOG(ERR, EAL, "%s(): error opening /dev/pci\n", __func__);
		goto error;
	}

	do {
		unsigned i;
		if (ioctl(fd, PCIOCGETCONF, &conf_io) < 0) {
			RTE_LOG(ERR, EAL, "%s(): error with ioctl on /dev/pci: %s\n",
					__func__, strerror(errno));
			goto error;
		}

		for (i = 0; i < conf_io.num_matches; i++) {
			pci_addr.domain = matches[i].pc_sel.pc_domain;
			pci_addr.bus = matches[i].pc_sel.pc_bus;
			pci_addr.devid = matches[i].pc_sel.pc_dev;
			pci_addr.function = matches[i].pc_sel.pc_func;

			if (rte_pci_ignore_device(&pci_addr))
				continue;

			if (pci_scan_one(fd, &matches[i]) < 0)
				goto error;
		}

		dev_count += conf_io.num_matches;
	} while(conf_io.status == PCI_GETCONF_MORE_DEVS);

	close(fd);

	RTE_LOG(DEBUG, EAL, "PCI scan found %u devices\n", dev_count);
	return 0;

error:
	if (fd >= 0)
		close(fd);
	return -1;
}
/*
 * Scan the content of the PCI bus, and add the devices in the devices
 * list. Call pci_scan_one() for each pci entry found.
 */
Scan the content of the PCI bus, and add the devices in the devices
list. Call pci_scan_one() for each pci entry found.
Scan the content of the PCI bus and add the devices in the devices list . Call pci_scan_one () for each pci entry found .
int
rte_pci_scan(void)
{
	int fd;
	unsigned dev_count = 0;
	struct pci_conf matches[16];
	struct pci_conf_io conf_io = {
			.pat_buf_len = 0,
			.num_patterns = 0,
			.patterns = NULL,
			.match_buf_len = sizeof(matches),
			.matches = &matches[0],
	};
	struct rte_pci_addr pci_addr;
	if (!rte_eal_has_pci())
		return 0;
	fd = open("/dev/pci", O_RDONLY);
	if (fd < 0) {
		RTE_LOG(ERR, EAL, "%s(): error opening /dev/pci\n", __func__);
		goto error;
	}
	do {
		unsigned i;
		if (ioctl(fd, PCIOCGETCONF, &conf_io) < 0) {
			RTE_LOG(ERR, EAL, "%s(): error with ioctl on /dev/pci: %s\n",
					__func__, strerror(errno));
			goto error;
		}
		for (i = 0; i < conf_io.num_matches; i++) {
			pci_addr.domain = matches[i].pc_sel.pc_domain;
			pci_addr.bus = matches[i].pc_sel.pc_bus;
			pci_addr.devid = matches[i].pc_sel.pc_dev;
			pci_addr.function = matches[i].pc_sel.pc_func;
			if (rte_pci_ignore_device(&pci_addr))
				continue;
			if (pci_scan_one(fd, &matches[i]) < 0)
				goto error;
		}
		dev_count += conf_io.num_matches;
	} while(conf_io.status == PCI_GETCONF_MORE_DEVS);
	close(fd);
	RTE_LOG(DEBUG, EAL, "PCI scan found %u devices\n", dev_count);
	return 0;
error:
	if (fd >= 0)
		close(fd);
	return -1;
}
int rte_pci_scan ( void ) { int fd ; unsigned dev_count = 0 ; struct pci_conf matches [ 16 ] ; struct pci_conf_io conf_io = { . pat_buf_len = 0 , . num_patterns = 0 , . patterns = NULL , . match_buf_len = sizeof ( matches ) , . matches = & matches [ 0 ] , } ; struct rte_pci_addr pci_addr ; if ( ! rte_eal_has_pci ( ) ) return 0 ; fd = open ( " " , O_RDONLY ) ; if ( fd < 0 ) { RTE_LOG ( ERR , EAL , " \n " , __func__ ) ; goto error ; } do { unsigned i ; if ( ioctl ( fd , PCIOCGETCONF , & conf_io ) < 0 ) { RTE_LOG ( ERR , EAL , " \n " , __func__ , strerror ( errno ) ) ; goto error ; } for ( i = 0 ; i < conf_io . num_matches ; i ++ ) { pci_addr . domain = matches [ i ] . pc_sel . pc_domain ; pci_addr . bus = matches [ i ] . pc_sel . pc_bus ; pci_addr . devid = matches [ i ] . pc_sel . pc_dev ; pci_addr . function = matches [ i ] . pc_sel . pc_func ; if ( rte_pci_ignore_device ( & pci_addr ) ) continue ; if ( pci_scan_one ( fd , & matches [ i ] ) < 0 ) goto error ; } dev_count += conf_io . num_matches ; } while ( conf_io . status == PCI_GETCONF_MORE_DEVS ) ; close ( fd ) ; RTE_LOG ( DEBUG , EAL , " \n " , dev_count ) ; return 0 ; error : if ( fd >= 0 ) close ( fd ) ; return -1 ; }
Scan the content of the PCI bus, and add the devices in the devices
 list.
Scan the content of the PCI bus and add the devices in the devices list .
/* for debug purposes, PCI can be disabled */