#include <inttypes.h>
#include "xc_dom_ia64_util.h"
#include <xen/acpi.h>
+#include <acpi/actables.h>
-uint8_t
-generate_acpi_checksum(void *tbl, unsigned long len)
+/* stolen from xen/drivers/acpi/tables/tbutils.c */
+
+/*******************************************************************************
+ *
+ * FUNCTION: acpi_tb_checksum
+ *
+ * PARAMETERS: Buffer - Pointer to memory region to be checked
+ * Length - Length of this memory region
+ *
+ * RETURN: Checksum (u8)
+ *
+ * DESCRIPTION: Calculates circular checksum of memory region.
+ *
+ ******************************************************************************/
+
+u8 acpi_tb_checksum(u8 * buffer, acpi_native_uint length)
{
- uint8_t *ptr, sum = 0;
+ u8 sum = 0;
+ u8 *end = buffer + length;
- for ( ptr = tbl; len > 0 ; len--, ptr++ )
- sum += *ptr;
+ while (buffer < end) {
+ sum = (u8) (sum + *(buffer++));
+ }
- return 0 - sum;
+ return sum;
}
#endif /* __XEN__ */
#include <xen/acpi.h>
+#include <acpi/actables.h>
#include <asm/dom_fw.h>
#include <asm/dom_fw_domu.h>
xsdt->table_offset_entry[0] = ACPI_TABLE_MPA(fadt);
tables->madt_ptr = ACPI_TABLE_MPA(madt);
- xsdt->header.checksum = generate_acpi_checksum(xsdt,
- xsdt->header.length);
+ xsdt->header.checksum = -acpi_tb_checksum((u8*)xsdt,
+ xsdt->header.length);
/* setup FADT */
memcpy(fadt->header.signature, ACPI_SIG_FADT,
fadt->xpm_timer_block.bit_width = 8;
fadt->xpm_timer_block.address = ACPI_TABLE_MPA(pm_timer_block);
- fadt->header.checksum = generate_acpi_checksum(fadt,
- fadt->header.length);
+ fadt->header.checksum = -acpi_tb_checksum((u8*)fadt,
+ fadt->header.length);
/* setup RSDP */
memcpy(rsdp->signature, ACPI_SIG_RSDP, strlen(ACPI_SIG_RSDP));
rsdp->length = sizeof(struct acpi_table_rsdp);
rsdp->xsdt_physical_address = ACPI_TABLE_MPA(xsdt);
- rsdp->checksum = generate_acpi_checksum(rsdp,
- ACPI_RSDP_CHECKSUM_LENGTH);
- rsdp->extended_checksum = generate_acpi_checksum(rsdp, rsdp->length);
+ rsdp->checksum = -acpi_tb_checksum((u8*)rsdp,
+ ACPI_RSDP_CHECKSUM_LENGTH);
+ rsdp->extended_checksum = -acpi_tb_checksum((u8*)rsdp, rsdp->length);
/* setup DSDT with trivial namespace. */
memcpy(dsdt->signature, ACPI_SIG_DSDT, strlen(ACPI_SIG_DSDT));
tables->aml[1] = 0x40 + ((aml_len - 1) & 0x0f);
tables->aml[2] = (aml_len - 1) >> 4;
dsdt->length = sizeof(struct acpi_table_header) + aml_len;
- dsdt->checksum = generate_acpi_checksum(dsdt, dsdt->length);
+ dsdt->checksum = -acpi_tb_checksum((u8*)dsdt, dsdt->length);
/* setup MADT */
memcpy(madt->header.signature, ACPI_SIG_MADT,
}
madt->header.length = sizeof(struct acpi_table_madt) +
nbr_cpus * sizeof(struct acpi_table_lsapic);
- madt->header.checksum = generate_acpi_checksum(madt,
- madt->header.length);
+ madt->header.checksum = -acpi_tb_checksum((u8*)madt,
+ madt->header.length);
return;
}
*/
#include <xen/config.h>
-#include <xen/acpi.h>
#include <xen/errno.h>
#include <xen/sched.h>
#include <xen/list.h>
+#include <xen/acpi.h>
+#include <acpi/actables.h>
#include <asm/dom_fw.h>
#include <asm/dom_fw_common.h>
acpi_madt = (struct acpi_table_madt *)table;
acpi_madt->header.checksum = 0;
- acpi_madt->header.checksum = generate_acpi_checksum(acpi_madt, size);
+ acpi_madt->header.checksum = -acpi_tb_checksum((u8*)acpi_madt,
+ table->length);
return 0;
}
memcpy(header->oem_table_id, "Xen ", 8);
memcpy(header->signature, "OEMx", 4);
header->checksum = 0;
- header->checksum = generate_acpi_checksum(header, header->length);
+ header->checksum = -acpi_tb_checksum((u8*)header, header->length);
+
+ printk("Successfully Disabling %s\n", header->signature);
return 0;
}
/* base is physical address of acpi table */
static void __init touch_acpi_table(void)
{
- int result;
lsapic_nbr = 0;
/*
acpi_table_parse(ACPI_SIG_SRAT, acpi_backup_table);
acpi_table_parse(ACPI_SIG_SLIT, acpi_backup_table);
- result = acpi_table_disable(ACPI_SIG_SRAT);
- if ( result == 0 )
- printk("Success Disabling SRAT\n");
- else if ( result != -ENOENT )
- printk("ERROR: Failed Disabling SRAT\n");
-
- result = acpi_table_disable(ACPI_SIG_SLIT);
- if ( result == 0 )
- printk("Success Disabling SLIT\n");
- else if ( result != -ENOENT )
- printk("ERROR: Failed Disabling SLIT\n");
-
+ acpi_table_disable(ACPI_SIG_SRAT);
+ acpi_table_disable(ACPI_SIG_SLIT);
return;
}
#define BUG() __bug(__FILE__, __LINE__)
#define WARN() __warn(__FILE__, __LINE__)
+#define dump_execution_state() printk("FIXME: implement ia64 dump_execution_state()\n");
+
#endif /* __IA64_BUG_H__ */
};
} ia64_pkr_t;
-#define dump_execution_state() printk("FIXME: implement ia64 dump_execution_state()\n");
-
#endif // _ASM_IA64_XENPROCESSOR_H
void acpi_table_print (struct acpi_table_header *header, unsigned long phys_addr);
void acpi_table_print_madt_entry (struct acpi_subtable_header *madt);
void acpi_table_print_srat_entry (struct acpi_subtable_header *srat);
-uint8_t generate_acpi_checksum(void *tbl, unsigned long len);
/* the following four functions are architecture-dependent */
void acpi_numa_slit_init (struct acpi_table_slit *slit);