Index: src/arch/i386/boot/linuxbios_table.c =================================================================== --- src/arch/i386/boot/linuxbios_table.c (revision 2117) +++ src/arch/i386/boot/linuxbios_table.c (working copy) @@ -98,6 +98,24 @@ return mainboard; } +struct cmos_checksum *lb_cmos_checksum(struct lb_header *header) +{ + struct lb_record *rec; + struct cmos_checksum *cmos_checksum; + rec = lb_new_record(header); + cmos_checksum = (struct cmos_checksum *)rec; + cmos_checksum->tag = LB_TAG_OPTION_CHECKSUM; + + cmos_checksum->size = (sizeof(*cmos_option)); + + cmos_checksum->range_start = LB_CKS_RANGE_START * 8; + cmos_checksum->range_end = ( LB_CKS_RANGE_END * 8 ) + 7; + cmos_checksum->location = LB_CKS_LOC * 8; + cmos_checksum->type = CHECKSUM_PCBIOS; + + return cmos_checksum; +} + void lb_strings(struct lb_header *header) { static const struct { @@ -346,6 +364,8 @@ rec_dest = lb_new_record(head); rec_src = (struct lb_record *)(void *)&option_table; memcpy(rec_dest, rec_src, rec_src->size); + /* Create cmos checksum entry in linuxbios table */ + lb_cmos_checksum(head); } /* Record where RAM is located */ mem = build_lb_mem(head);