Annotation of qemu/roms/openbios/libopenbios/linuxbios.h, revision 1.1.1.1

1.1       root        1: #ifndef LINUXBIOS_TABLES_H
                      2: #define LINUXBIOS_TABLES_H
                      3: 
                      4: /* The linuxbios table information is for conveying information
                      5:  * from the firmware to the loaded OS image.  Primarily this
                      6:  * is expected to be information that cannot be discovered by
                      7:  * other means, such as quering the hardware directly.
                      8:  *
                      9:  * All of the information should be Position Independent Data.
                     10:  * That is it should be safe to relocated any of the information
                     11:  * without it's meaning/correctnes changing.   For table that
                     12:  * can reasonably be used on multiple architectures the data
                     13:  * size should be fixed.  This should ease the transition between
                     14:  * 32 bit and 64 bit architectures etc.
                     15:  *
                     16:  * The completeness test for the information in this table is:
                     17:  * - Can all of the hardware be detected?
                     18:  * - Are the per motherboard constants available?
                     19:  * - Is there enough to allow a kernel to run that was written before
                     20:  *   a particular motherboard is constructed? (Assuming the kernel
                     21:  *   has drivers for all of the hardware but it does not have
                     22:  *   assumptions on how the hardware is connected together).
                     23:  *
                     24:  * With this test it should be straight forward to determine if a
                     25:  * table entry is required or not.  This should remove much of the
                     26:  * long term compatibility burden as table entries which are
                     27:  * irrelevant or have been replaced by better alternatives may be
                     28:  * dropped.  Of course it is polite and expidite to include extra
                     29:  * table entries and be backwards compatible, but it is not required.
                     30:  */
                     31: 
                     32: 
                     33: struct lb_header
                     34: {
                     35:        uint8_t  signature[4]; /* LBIO */
                     36:        uint32_t header_bytes;
                     37:        uint32_t header_checksum;
                     38:        uint32_t table_bytes;
                     39:        uint32_t table_checksum;
                     40:        uint32_t table_entries;
                     41: };
                     42: 
                     43: /* Every entry in the boot enviroment list will correspond to a boot
                     44:  * info record.  Encoding both type and size.  The type is obviously
                     45:  * so you can tell what it is.  The size allows you to skip that
                     46:  * boot enviroment record if you don't know what it easy.  This allows
                     47:  * forward compatibility with records not yet defined.
                     48:  */
                     49: struct lb_record {
                     50:        uint32_t tag;           /* tag ID */
                     51:        uint32_t size;          /* size of record (in bytes) */
                     52: };
                     53: 
                     54: #define LB_TAG_UNUSED  0x0000
                     55: 
                     56: #define LB_TAG_MEMORY  0x0001
                     57: 
                     58: struct lb_memory_range {
                     59:        uint64_t start;
                     60:        uint64_t size;
                     61:        uint32_t type;
                     62: #define LB_MEM_RAM       1     /* Memory anyone can use */
                     63: #define LB_MEM_RESERVED  2     /* Don't use this memory region */
                     64: #define LB_MEM_TABLE     16    /* Ram configuration tables are kept in */
                     65: 
                     66: };
                     67: 
                     68: struct lb_memory {
                     69:        uint32_t tag;
                     70:        uint32_t size;
                     71:        struct lb_memory_range map[0];
                     72: };
                     73: 
                     74: #define LB_TAG_HWRPB   0x0002
                     75: struct lb_hwrpb {
                     76:        uint32_t tag;
                     77:        uint32_t size;
                     78:        uint64_t hwrpb;
                     79: };
                     80: 
                     81: #define LB_TAG_MAINBOARD       0x0003
                     82: struct lb_mainboard {
                     83:        uint32_t tag;
                     84:        uint32_t size;
                     85:        uint8_t  vendor_idx;
                     86:        uint8_t  part_number_idx;
                     87:        uint8_t  strings[0];
                     88: };
                     89: 
                     90: #define LB_TAG_VERSION         0x0004
                     91: #define LB_TAG_EXTRA_VERSION   0x0005
                     92: #define LB_TAG_BUILD           0x0006
                     93: #define LB_TAG_COMPILE_TIME    0x0007
                     94: #define LB_TAG_COMPILE_BY      0x0008
                     95: #define LB_TAG_COMPILE_HOST    0x0009
                     96: #define LB_TAG_COMPILE_DOMAIN  0x000a
                     97: #define LB_TAG_COMPILER                0x000b
                     98: #define LB_TAG_LINKER          0x000c
                     99: #define LB_TAG_ASSEMBLER       0x000d
                    100: struct lb_string {
                    101:        uint32_t tag;
                    102:        uint32_t size;
                    103:        uint8_t  string[0];
                    104: };
                    105: 
                    106: /* The following structures are for the cmos definitions table */
                    107: #define LB_TAG_CMOS_OPTION_TABLE 200
                    108: /* cmos header record */
                    109: struct cmos_option_table {
                    110:        uint32_t tag;               /* CMOS definitions table type */
                    111:        uint32_t size;               /* size of the entire table */
                    112:        uint32_t header_length;      /* length of header */
                    113: };
                    114: 
                    115: /* cmos entry record
                    116:         This record is variable length.  The name field may be
                    117:         shorter than CMOS_MAX_NAME_LENGTH. The entry may start
                    118:         anywhere in the byte, but can not span bytes unless it
                    119:         starts at the beginning of the byte and the length is
                    120:         fills complete bytes.
                    121: */
                    122: #define LB_TAG_OPTION 201
                    123: struct cmos_entries {
                    124:        uint32_t tag;                /* entry type */
                    125:        uint32_t size;               /* length of this record */
                    126:        uint32_t bit;                /* starting bit from start of image */
                    127:        uint32_t length;             /* length of field in bits */
                    128:        uint32_t config;             /* e=enumeration, h=hex, r=reserved */
                    129:        uint32_t config_id;          /* a number linking to an enumeration record */
                    130: #define CMOS_MAX_NAME_LENGTH 32
                    131:        uint8_t name[CMOS_MAX_NAME_LENGTH]; /* name of entry in ascii,
                    132:                                               variable length int aligned */
                    133: };
                    134: 
                    135: 
                    136: /* cmos enumerations record
                    137:         This record is variable length.  The text field may be
                    138:         shorter than CMOS_MAX_TEXT_LENGTH.
                    139: */
                    140: #define LB_TAG_OPTION_ENUM 202
                    141: struct cmos_enums {
                    142:        uint32_t tag;                /* enumeration type */
                    143:        uint32_t size;               /* length of this record */
                    144:        uint32_t config_id;          /* a number identifying the config id */
                    145:        uint32_t value;              /* the value associated with the text */
                    146: #define CMOS_MAX_TEXT_LENGTH 32
                    147:        uint8_t text[CMOS_MAX_TEXT_LENGTH]; /* enum description in ascii,
                    148:                                                variable length int aligned */
                    149: };
                    150: 
                    151: /* cmos defaults record
                    152:         This record contains default settings for the cmos ram.
                    153: */
                    154: #define LB_TAG_OPTION_DEFAULTS 203
                    155: struct cmos_defaults {
                    156:        uint32_t tag;                /* default type */
                    157:        uint32_t size;               /* length of this record */
                    158:        uint32_t name_length;        /* length of the following name field */
                    159:        uint8_t name[CMOS_MAX_NAME_LENGTH]; /* name identifying the default */
                    160: #define CMOS_IMAGE_BUFFER_SIZE 128
                    161:        uint8_t default_set[CMOS_IMAGE_BUFFER_SIZE]; /* default settings */
                    162: };
                    163: 
                    164: #define LB_TAG_OPTION_CHECKSUM 204
                    165: struct cmos_checksum {
                    166:        uint32_t tag;
                    167:        uint32_t size;
                    168:        /* In practice everything is byte aligned, but things are measured
                    169:         * in bits to be consistent.
                    170:         */
                    171:        uint32_t range_start;   /* First bit that is checksummed (byte aligned) */
                    172:        uint32_t range_end;     /* Last bit that is checksummed (byte aligned) */
                    173:        uint32_t location;      /* First bit of the checksum (byte aligned) */
                    174:        uint32_t type;          /* Checksum algorithm that is used */
                    175: #define CHECKSUM_NONE  0
                    176: #define CHECKSUM_PCBIOS        1
                    177: };
                    178: 
                    179: 
                    180: 
                    181: #endif /* LINUXBIOS_TABLES_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.