1 #ifndef OPENBIOS_FIRMWARE_ABI_H
2 #define OPENBIOS_FIRMWARE_ABI_H
4 /* OpenBIOS NVRAM partition */
5 struct OpenBIOS_nvpart_v1
{
8 uint16_t len
; // BE, length divided by 16
12 #define OPENBIOS_PART_SYSTEM 0x70
13 #define OPENBIOS_PART_FREE 0x7f
16 OpenBIOS_finish_partition(struct OpenBIOS_nvpart_v1
*header
, uint32_t size
)
21 // Length divided by 16
22 header
->len
= cpu_to_be16(size
>> 4);
25 tmpptr
= (uint8_t *)header
;
27 for (i
= 0; i
< 14; i
++) {
29 sum
= (sum
+ ((sum
& 0xff00) >> 8)) & 0xff;
31 header
->checksum
= sum
& 0xff;
34 static inline uint32_t
35 OpenBIOS_set_var(uint8_t *nvram
, uint32_t addr
, const char *str
)
39 len
= strlen(str
) + 1;
40 memcpy(&nvram
[addr
], str
, len
);
45 /* Sun IDPROM structure at the end of NVRAM */
46 /* from http://www.squirrel.com/squirrel/sun-nvram-hostid.faq.html */
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 */
57 Sun_init_header(struct Sun_nvram
*header
, const uint8_t *macaddr
, int machine_id
)
63 header
->machine_id
= machine_id
& 0xff;
64 memcpy(&header
->macaddr
, macaddr
, 6);
65 memcpy(&header
->hostid
, &macaddr
[3], 3);
67 /* Calculate checksum */
69 tmpptr
= (uint8_t *)header
;
70 for (i
= 0; i
< 15; i
++)
73 header
->checksum
= tmp
;
75 #endif /* OPENBIOS_FIRMWARE_ABI_H */