static void pci_enumerate(void) { struct pci_dev_info info = { .function = PCI_FUNCTION_ANY, .bar = PCI_BAR_ANY, }; pci_bus_scan_init(); while (pci_bus_scan(&info)) { pci_show(&info); info.class_type = 0; info.vendor_id = 0; info.device_id = 0; info.function = PCI_FUNCTION_ANY; info.bar = PCI_BAR_ANY; } }
static inline int eth_setup(struct device *dev) { struct eth_runtime *context = dev->driver_data; pci_bus_scan_init(); if (!pci_bus_scan(&context->pci_dev)) return 0; #ifdef CONFIG_PCI_ENUMERATION context->base_addr = context->pci_dev.addr; #endif pci_enable_regs(&context->pci_dev); pci_enable_bus_master(&context->pci_dev); pci_show(&context->pci_dev); return 1; }
static inline int i2c_dw_pci_setup(struct device *dev) { struct i2c_dw_dev_config * const dw = dev->driver_data; pci_bus_scan_init(); if (!pci_bus_scan(&dw->pci_dev)) { SYS_LOG_DBG("Could not find device"); return 0; } #ifdef CONFIG_PCI_ENUMERATION dw->base_address = dw->pci_dev.addr; #endif pci_enable_regs(&dw->pci_dev); pci_show(&dw->pci_dev); return 1; }
static inline int gpio_dw_setup(struct device *dev) { struct gpio_dw_config *config = dev->config->config_info; pci_bus_scan_init(); if (!pci_bus_scan(&config->pci_dev)) { return 0; } #ifdef CONFIG_PCI_ENUMERATION config->base_addr = config->pci_dev.addr; config->irq_num = config->pci_dev.irq; #endif pci_enable_regs(&config->pci_dev); pci_show(&config->pci_dev); return 1; }
static inline int i2c_dw_pci_setup(struct device *dev) { struct i2c_dw_rom_config *rom = dev->config->config_info; pci_bus_scan_init(); if (!pci_bus_scan(&rom->pci_dev)) { DBG("Could not find device\n"); return 0; } #ifdef CONFIG_PCI_ENUMERATION rom->base_address = rom->pci_dev.addr; rom->irq_num = rom->pci_dev.irq; #endif pci_enable_regs(&rom->pci_dev); pci_show(&rom->pci_dev); return 1; }
int pci_init (struct naut_info * naut) { struct pci_info * pci = NULL; pci = malloc(sizeof(struct pci_info)); if (!pci) { ERROR_PRINT("Could not allocate PCI struct\n"); return -1; } memset(pci, 0, sizeof(struct pci_info)); INIT_LIST_HEAD(&(pci->bus_list)); PCI_PRINT("Probing PCI bus...\n"); pci_bus_scan(pci); naut->sys.pci = pci; return 0; }
void pci_ftpci_init(void) { struct ftpci100_data *priv = NULL; struct pci_controller *hose = (struct pci_controller *)&local_hose; pci_dev_t bridge_num; struct pci_device_id bridge_ids[] = { {FTPCI100_BRIDGE_VENDORID, FTPCI100_BRIDGE_DEVICEID}, {0, 0} }; priv = malloc(sizeof(struct ftpci100_data)); if (!priv) { printf("%s(): failed to malloc priv\n", __func__); return; } memset(priv, 0, sizeof(struct ftpci100_data)); ftpci_preinit(priv); debug("Device bus dev func deviceID vendorID pin address" \ " size class\n"); pci_bus_scan(priv); /* * Setup the PCI Bridge Window to 1GB, * it will cause USB OHCI Host controller Unrecoverable Error * if it is not set. */ bridge_num = pci_find_devices(bridge_ids, 0); if (bridge_num == -1) { printf("PCI Bridge not found\n"); return; } pci_hose_write_config_dword(hose, bridge_num, PCI_MEM_BASE_SIZE1, FTPCI100_BASE_ADR_SIZE(1024)); }