disk_ret(__regs, DISK_RET_SUCCESS); \
} while (0)
-static u8
-checksum_seg(u16 seg, u16 offset, u32 len)
-{
- u32 i;
- u8 sum = 0;
- for (i=0; i<len; i++)
- sum += GET_FARVAR(seg, *(u8*)(offset+i));
- return sum;
-}
-
static void
basic_access(struct bregs *regs, u8 device, u16 command)
{
else
SET_EBDA(ata.dpte.revision, 0x10);
- u8 sum = checksum_seg(EBDA_SEG
- , offsetof(struct extended_bios_data_area_s, ata.dpte)
- , 15);
+ u8 *p = MAKE_FARPTR(EBDA_SEG
+ , offsetof(struct extended_bios_data_area_s, ata.dpte));
+ u8 sum = checksum(p, 15);
SET_EBDA(ata.dpte.checksum, ~sum);
if (size < 0x42) {
SET_INT13DPT(regs, device_path[2], 0);
SET_INT13DPT(regs, device_path[4], 0L);
- sum = checksum_seg(regs->ds, 30, 34);
+ sum = checksum(MAKE_FARPTR(regs->ds, 30), 34);
SET_INT13DPT(regs, checksum, ~sum);
}
*pp = q;
}
-static int mpf_checksum(const u8 *data, int len)
-{
- int sum, i;
- sum = 0;
- for(i = 0; i < len; i++)
- sum += data[i];
- return sum & 0xff;
-}
-
static unsigned long align(unsigned long addr, unsigned long v)
{
return (addr + v - 1) & ~(v - 1);
mp_config_table[4] = len;
mp_config_table[5] = len >> 8;
- mp_config_table[7] = -mpf_checksum(mp_config_table, q - mp_config_table);
+ mp_config_table[7] = -checksum(mp_config_table, q - mp_config_table);
mp_config_table_size = q - mp_config_table;
putb(&q, 0);
putb(&q, 0);
putb(&q, 0);
- float_pointer_struct[10] =
- -mpf_checksum(float_pointer_struct, q - float_pointer_struct);
+ float_pointer_struct[10] = -checksum(float_pointer_struct
+ , q - float_pointer_struct);
#ifdef BX_USE_EBDA_TABLES
ebda_cur_addr += (q - float_pointer_struct);
#else
return x;
}
-static int acpi_checksum(const u8 *data, int len)
-{
- int sum, i;
- sum = 0;
- for(i = 0; i < len; i++)
- sum += data[i];
- return (-sum) & 0xff;
-}
-
static void acpi_build_table_header(struct acpi_table_header *h,
char *sig, int len, u8 rev)
{
memcpy(h->asl_compiler_id, "BXPC", 4);
#endif
h->asl_compiler_revision = cpu_to_le32(1);
- h->checksum = acpi_checksum((void *)h, len);
+ h->checksum = -checksum((void *)h, len);
}
int acpi_build_processor_ssdt(u8 *ssdt)
memcpy(rsdp->oem_id, "BOCHS ", 6);
#endif
rsdp->rsdt_physical_address = cpu_to_le32(rsdt_addr);
- rsdp->checksum = acpi_checksum((void *)rsdp, 20);
+ rsdp->checksum = -checksum((void *)rsdp, 20);
/* RSDT */
memset(rsdt, 0, sizeof(*rsdt));
u32 structure_table_address,
u16 number_of_structures)
{
- u8 sum;
- int i;
struct smbios_entry_point *ep = (struct smbios_entry_point *)start;
memcpy(ep->anchor_string, "_SM_", 4);
ep->checksum = 0;
ep->intermediate_checksum = 0;
- sum = 0;
- for (i = 0; i < 0x10; i++)
- sum += ((s8 *)start)[i];
- ep->checksum = -sum;
+ ep->checksum = -checksum(start, 0x10);
- sum = 0;
- for (i = 0x10; i < ep->length; i++)
- sum += ((s8 *)start)[i];
- ep->intermediate_checksum = -sum;
- }
+ ep->intermediate_checksum = -checksum(start + 0x10, ep->length - 0x10);
+}
/* Type 0 -- BIOS Information */
#define RELEASE_DATE_STR "01/01/2007"