Each piece of hardware is described by a sequence of tags. This conglomeration of tags is known as an item. Each item describes one piece of hardware. The first tag in each item always starts out with the following structure (note that the first thing in it is a hwi_prefix structure):
struct hwi_item { struct hwi_prefix prefix; uint16_t itemsize; uint16_t itemname; uint16_t owner; uint16_t kids; };
The itemsize field gives the distance, in 4-byte quantities, until the start of the next item tag.
The itemname gives an offset into the strings section of the system page for the name of the item being described. Note that this differs from the prefix.name field, which tells what type of the structure the hwi_item is buried in.
The owner field gives the offset, in bytes, from the start of the hwinfo section to the item that this item is owned by. This field allows groups of items to be organized in a tree structure, similar to a filesystem directory hierarchy. We'll see how this is used later. If the item is at the root of a tree of ownership, the owner field is set to HWI_NULL_OFF.
The kids field indicates how many other items call this one "daddy."