Before main() is invoked in the startup program, the library adds some initial entries to serve as a basis for later items.
HWI_TAG_INFO() is a macro defined in the <startup.h> header and expands out to the three name, size, align parameters for hwi_alloc_tag() and hwi_alloc_item() based on some clever macro names.
void hwi_default() { hwi_tag *tag; hwi_tag *tag; hwi_alloc_item(HWI_TAG_INFO(group), HWI_ITEM_ROOT_AS, HWI_NULL_OFF); tag = hwi_alloc_item(HWI_TAG_INFO(group), HWI_ITEM_ROOT_HW, HWI_NULL_OFF); hwi_alloc_item(HWI_TAG_INFO(bus), HWI_ITEM_BUS_UNKNOWN, hwi_tag2off(tag)); loc = hwi_find_item(HWI_NULL_OFF, HWI_ITEM_ROOT_AS, NULL); tag = hwi_alloc_item(HWI_TAG_INFO(addrspace), HWI_ITEM_AS_MEMORY, loc); tag->addrspace.base = 0; tag->addrspace.len = (uint64_t)1 << 32; #ifndef __X86__ loc = hwi_tag2off(tag); #endif tag = hwi_alloc_item(HWI_TAG_INFO(addrspace), HWI_ITEM_AS_IO, loc); tag->addrspace.base = 0; #ifdef __X86__ tag->addrspace.len = (uint64_t)1 << 16; #else tag->addrspace.len = (uint64_t)1 << 32; #endif }