/*===========================================================================* * pci_conf * *===========================================================================*/ static void pci_conf() { char envvar[16]; struct dpeth *dep; int i, pci_instance; static int first_time= 1; if (!first_time) return; first_time= 0; dep= &de_state; strcpy(envvar, "DPETH0"); envvar[5] += de_instance; if (!(dep->de_pci= env_prefix(envvar, "pci"))) return; /* no PCI config */ /* Count the number of dp instances before this one that are configured * for PCI, so that we can skip that many when enumerating PCI devices. */ pci_instance= 0; for (i= 0; i < de_instance; i++) { envvar[5]= i; if (env_prefix(envvar, "pci")) pci_instance++; } if (!rtl_probe(dep, pci_instance)) dep->de_pci= -1; }
/*===========================================================================* * pci_conf * *===========================================================================*/ static void pci_conf() { int i, h; char *envvar, *p; struct dpeth *dep; static char envfmt[] = "*:d.d.d"; long v; static int first_time= 1; if (!first_time) return; first_time= 0; for (i= 0, dep= de_table; i<DE_PORT_NR; i++, dep++) { envvar= dp_conf[i].dpc_envvar; if (!(dep->de_pci= env_prefix(envvar, "pci"))) continue; /* no PCI config */ v= 0; (void) env_parse(envvar, envfmt, 1, &v, 0, 255); dep->de_pcibus= v; v= 0; (void) env_parse(envvar, envfmt, 2, &v, 0, 255); dep->de_pcidev= v; v= 0; (void) env_parse(envvar, envfmt, 3, &v, 0, 255); dep->de_pcifunc= v; } for (h= TRUE; h >= FALSE; h--) { for (i= 0, dep= de_table; i<DE_PORT_NR; i++, dep++) { if (!dep->de_pci) continue; if (((dep->de_pcibus | dep->de_pcidev | dep->de_pcifunc) != 0) != h) { continue; } if (!rtl_probe(dep)) dep->de_pci= -1; } } }