int print_resource(struct devinfo_res *res, void *arg) { struct devinfo_dev *dev; struct devinfo_rman *rman; int hexmode; QListView *lbox; lbox = (QListView *)arg; QString s, tmp; rman = devinfo_handle_to_rman(res->dr_rman); hexmode = (rman->dm_size > 100) || (rman->dm_size == 0); tmp.sprintf(hexmode ? "0x%lx" : "%lu", res->dr_start); s += tmp; if (res->dr_size > 1) { tmp.sprintf(hexmode ? "-0x%lx" : "-%lu", res->dr_start + res->dr_size - 1); s += tmp; } dev = devinfo_handle_to_device(res->dr_device); if ((dev != NULL) && (dev->dd_name[0] != 0)) { tmp.sprintf(" (%s)", dev->dd_name); } else { tmp.sprintf(" ----"); } s += tmp; (void)new QListViewItem(lbox, lbox->lastItem(), s); return(0); }
int print_resource(struct devinfo_res *res, void *arg) { struct devinfo_dev *dev; struct devinfo_rman *rman; int hexmode; QTreeWidget* tree = (QTreeWidget*) arg; QString s, tmp; rman = devinfo_handle_to_rman(res->dr_rman); hexmode = (rman->dm_size > 100) || (rman->dm_size == 0); tmp.sprintf(hexmode ? "0x%lx" : "%lu", res->dr_start); s += tmp; if (res->dr_size > 1) { tmp.sprintf(hexmode ? "-0x%lx" : "-%lu", res->dr_start + res->dr_size - 1); s += tmp; } dev = devinfo_handle_to_device(res->dr_device); if ((dev != NULL) && (dev->dd_name[0] != 0)) { tmp.sprintf(" (%s)", dev->dd_name); } else { tmp.sprintf(" ----"); } s += tmp; QStringList list; list << s; new QTreeWidgetItem(tree, list); return 0; }
/* * Look for the exact location specified by the nomatch event. The * loc and pnpinfo run together to get the string we're looking for, * so we have to synthesize the same thing that subr_bus.c is * generating in devnomatch/devaddq to do the string comparison. */ static int find_exact_dev(struct devinfo_dev *dev, void *arg) { struct devinfo_dev *parent; char *loc; struct exact_info *info; info = arg; do { if (info->dev != NULL) break; if (!(dev->dd_flags & DF_ENABLED)) break; parent = devinfo_handle_to_device(dev->dd_parent); if (strcmp(info->bus, parent->dd_name) != 0) break; asprintf(&loc, "%s %s", parent->dd_pnpinfo, parent->dd_location); if (strcmp(loc, info->loc) == 0) info->dev = dev; free(loc); } while (0); return (devinfo_foreach_device_child(dev, find_exact_dev, arg)); }
static int find_unmatched(struct devinfo_dev *dev, void *arg) { struct devinfo_dev *parent; char *bus, *p; do { if (!all_flag && dev->dd_name[0] != '\0') break; if (!(dev->dd_flags & DF_ENABLED)) break; if (dev->dd_flags & DF_ATTACHED_ONCE) break; parent = devinfo_handle_to_device(dev->dd_parent); bus = strdup(parent->dd_name); p = bus + strlen(bus) - 1; while (p >= bus && isdigit(*p)) p--; *++p = '\0'; if (verbose_flag) printf("Searching %s %s bus at %s for pnpinfo %s\n", dev->dd_name, bus, dev->dd_location, dev->dd_pnpinfo); search_hints(bus, dev->dd_name, dev->dd_pnpinfo); free(bus); } while (0); return (devinfo_foreach_device_child(dev, find_unmatched, arg)); }
int main(int argc, char **argv) { int ch; while ((ch = getopt_long(argc, argv, "adh:p:uv", longopts, NULL)) != -1) { switch (ch) { case 'a': all_flag++; break; case 'd': dump_flag++; break; case 'h': linker_hints = optarg; break; case 'p': nomatch_str = optarg; break; case 'u': unbound_flag++; break; case 'v': verbose_flag++; break; default: usage(); } } argc -= optind; argv += optind; if (argc >= 1) usage(); read_linker_hints(); if (dump_flag) { search_hints(NULL, NULL, NULL); exit(0); } if (devinfo_init()) err(1, "devinfo_init"); if ((root = devinfo_handle_to_device(DEVINFO_ROOT_DEVICE)) == NULL) errx(1, "can't find root device"); if (nomatch_str != NULL) find_nomatch(nomatch_str); else devinfo_foreach_device_child(root, find_unmatched, (void *)0); devinfo_free(); }
static int acpi0_present(void) { struct devinfo_dev *root; int found; found = 0; devinfo_init(); root = devinfo_handle_to_device(DEVINFO_ROOT_DEVICE); if (root != NULL) found = devinfo_foreach_device_child(root, acpi0_check, NULL); devinfo_free(); return found; }
/* * Print resource information if this resource matches the * given device. * * If the given indent is 0, return an indicator that a matching * resource exists. */ int print_device_matching_resource(struct devinfo_res *res, void *arg) { struct indent_arg *ia = (struct indent_arg *)arg; struct devinfo_dev *dev = (struct devinfo_dev *)ia->arg; int i; if (devinfo_handle_to_device(res->dr_device) == dev) { /* in 'detect' mode, found a match */ if (ia->indent == 0) return(1); for (i = 0; i < ia->indent; i++) printf(" "); print_resource(res); printf("\n"); } return(0); }
return(devinfo_foreach_device_child(dev, print_device, (void *)((char *)arg + 2))); } /* * Print information about a resource under a resource manager. */ int print_rman_resource(struct devinfo_res *res, void *arg __unused) { struct devinfo_dev *dev; printf(" "); print_resource(res); dev = devinfo_handle_to_device(res->dr_device); if ((dev != NULL) && (dev->dd_name[0] != 0)) { printf(" (%s)", dev->dd_name); } else { printf(" ----"); } printf("\n"); return(0); } /* * Print information about a resource manager. */ int print_rman(struct devinfo_rman *rman, void *arg __unused) {