Annotation of qemu/hw/firmware_abi.h, revision 1.1.1.3

1.1       root        1: #ifndef FIRMWARE_ABI_H
                      2: #define FIRMWARE_ABI_H
                      3: 
                      4: /* OpenBIOS NVRAM partition */
                      5: struct OpenBIOS_nvpart_v1 {
                      6:     uint8_t signature;
                      7:     uint8_t checksum;
                      8:     uint16_t len; // BE, length divided by 16
                      9:     char name[12];
                     10: };
                     11: 
                     12: #define OPENBIOS_PART_SYSTEM 0x70
                     13: #define OPENBIOS_PART_FREE 0x7f
                     14: 
                     15: static inline void
                     16: OpenBIOS_finish_partition(struct OpenBIOS_nvpart_v1 *header, uint32_t size)
                     17: {
                     18:     unsigned int i, sum;
                     19:     uint8_t *tmpptr;
                     20: 
                     21:     // Length divided by 16
                     22:     header->len = cpu_to_be16(size >> 4);
                     23: 
                     24:     // Checksum
                     25:     tmpptr = (uint8_t *)header;
                     26:     sum = *tmpptr;
                     27:     for (i = 0; i < 14; i++) {
                     28:         sum += tmpptr[2 + i];
                     29:         sum = (sum + ((sum & 0xff00) >> 8)) & 0xff;
                     30:     }
                     31:     header->checksum = sum & 0xff;
                     32: }
                     33: 
                     34: static inline uint32_t
1.1.1.2   root       35: OpenBIOS_set_var(uint8_t *nvram, uint32_t addr, const char *str)
1.1       root       36: {
                     37:     uint32_t len;
                     38: 
                     39:     len = strlen(str) + 1;
                     40:     memcpy(&nvram[addr], str, len);
                     41: 
                     42:     return addr + len;
                     43: }
                     44: 
                     45: /* Sun IDPROM structure at the end of NVRAM */
1.1.1.3 ! root       46: /* from http://www.squirrel.com/squirrel/sun-nvram-hostid.faq.html */
1.1       root       47: struct Sun_nvram {
1.1.1.3 ! root       48:     uint8_t type;       /* always 01 */
        !            49:     uint8_t machine_id; /* first byte of host id (machine type) */
        !            50:     uint8_t macaddr[6]; /* 6 byte ethernet address (first 3 bytes 08, 00, 20) */
        !            51:     uint8_t date[4];    /* date of manufacture */
        !            52:     uint8_t hostid[3];  /* remaining 3 bytes of host id (serial number) */
        !            53:     uint8_t checksum;   /* bitwise xor of previous bytes */
1.1       root       54: };
                     55: 
                     56: static inline void
                     57: Sun_init_header(struct Sun_nvram *header, const uint8_t *macaddr, int machine_id)
                     58: {
                     59:     uint8_t tmp, *tmpptr;
                     60:     unsigned int i;
                     61: 
                     62:     header->type = 1;
                     63:     header->machine_id = machine_id & 0xff;
                     64:     memcpy(&header->macaddr, macaddr, 6);
                     65:     /* Calculate checksum */
                     66:     tmp = 0;
                     67:     tmpptr = (uint8_t *)header;
                     68:     for (i = 0; i < 15; i++)
                     69:         tmp ^= tmpptr[i];
                     70: 
                     71:     header->checksum = tmp;
                     72: }
                     73: #endif /* FIRMWARE_ABI_H */

unix.superglobalmegacorp.com