Updated: April 19, 2023 |
Find the next item in the hwinfo structure
#include <hw/sysinfo.h> unsigned hwi_next_item( unsigned off );
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The hwi_next_item() function finds the next item in the hwinfo structure of the system page.
The offset of the next item, or HWI_NULL_OFF if there isn't another item.
This program produces a summary of the information that the pidin syspage=hwinfo command displays:
#include <stdio.h> #include <stdlib.h> #include <hw/sysinfo.h> #include <sys/syspage.h> int main ( void ) { unsigned item_offset = 0, tag_offset = 0; struct hwi_item *curr_item, *curr_tag; int first_tag; printf ("Item Offset Owner Tags\n"); printf ("---- ------ ----- ----\n"); while (item_offset != HWI_NULL_OFF) { /* Print the type, name, and offset of the current item */ curr_item = hwi_off2tag (item_offset); printf ("%-6s %-11s %3d", &SYSPAGE_ENTRY(strings)->data[curr_item->prefix.name], &SYSPAGE_ENTRY(strings)->data[curr_item->itemname], item_offset); /* Print the offset of the owner (if any) */ if (curr_item->owner == HWI_NULL_OFF) { printf (" "); } else { printf (" %3d", curr_item->owner); } /* List the tags in this item */ first_tag = 1; tag_offset = hwi_next_tag (item_offset, 1); while (tag_offset != HWI_NULL_OFF) { printf ("%s", first_tag ? " " : ", "); first_tag = 0; curr_tag = hwi_off2tag (tag_offset); printf ("%s", &SYSPAGE_ENTRY(strings)->data[curr_tag->prefix.name]); /* Get the offset of the next tag in the current item */ tag_offset = hwi_next_tag (tag_offset, 1); } printf ("\n"); /* Get the offset of the next item */ item_offset = hwi_next_item (item_offset); } return (EXIT_SUCCESS); }
The output from this program looks something like this:
Item Offset Owner Tags ---- ------ ----- ---- Group hw 0 Bus unknown 12 0 Group rtc 24 12 Device mc146818 36 24 pad, location Bus pci 80 0 Device bios 92 80 Bus isa 108 0 Group disk 120 108 diskgeometry Group misc 148 108 Device pckbd 160 148 irq, location Group serial 208 108 Device 8250 220 208 irq, pad, location, irq, location Group parallel 304 108 Device centronics 316 304 pad, location Group misc 360 12 Device in-use 372 360 pad, location, location, location, location, irq, irq
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | Yes |
Signal handler | Yes |
Thread | Yes |