An array of startup_info* structures. This is the communications area between the IPL and the startup code. When the IPL code detects various system features (amount of memory installed, current time, information about the bus used on the system, etc.), it stores that information into the info array so that the startup code can fetch it later. This saves the startup code from performing the same detection logic again.

Note that the info is declared as an array of longs — this is purely to allocate the storage space. In reality, the info storage area contains a set of structures, each beginning with this header:

struct startup_info_hdr {
    unsigned short  type;
    unsigned short  size;

The type member is selected from the following list:

Ignore this field. If the corresponding size member is 0, it means that this is the end of the info list.
A startup_info_mem or startup_info_mem_extended structure is present.
A startup_info_disk structure is present.
A startup_info_time structure is present.
A startup_info_box structure is present.

Note that the struct startup_info_hdr header (containing the type and size members) is encapsulated within each of the above mentioned struct startup_info* structures as the first element.

Let's look at the individual structures.