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