Get rid of type-punned pointer errors.
[coreboot.git] / src / mainboard / amd / serengeti_cheetah_fam10 / acpi_tables.c
index d3a274eca65c524e4df050a3b90e18e9ca075b09..b5139a72925ac200bf383bdae067caab23b6ba2f 100644 (file)
@@ -46,14 +46,14 @@ static void dump_mem(u32 start, u32 end)
 }
 #endif
 
-extern u8 AmlCode[];
-extern u8 AmlCode_ssdt[];
+extern const acpi_header_t AmlCode;
+extern const acpi_header_t AmlCode_ssdt;
 
 #if CONFIG_ACPI_SSDTX_NUM >= 1
-extern u8 AmlCode_ssdt2[];
-extern u8 AmlCode_ssdt3[];
-extern u8 AmlCode_ssdt4[];
-extern u8 AmlCode_ssdt5[];
+extern const acpi_header_t AmlCode_ssdt2;
+extern const acpi_header_t AmlCode_ssdt3;
+extern const acpi_header_t AmlCode_ssdt4;
+extern const acpi_header_t AmlCode_ssdt5;
 #endif
 
 #define IO_APIC_ADDR   0xfec00000UL
@@ -202,7 +202,7 @@ unsigned long write_acpi_tables(unsigned long start)
        acpi_header_t *dsdt;
        acpi_header_t *ssdt;
        acpi_header_t *ssdtx;
-       u8 *p;
+       acpi_header_t const *p;
 
        int i;
 
@@ -264,8 +264,8 @@ unsigned long write_acpi_tables(unsigned long start)
        current   = ( current + 0x0f) & -0x10;
        printk(BIOS_DEBUG, "ACPI:    * SSDT at %lx\n", current);
        ssdt = (acpi_header_t *)current;
-       current += ((acpi_header_t *)AmlCode_ssdt)->length;
-       memcpy((void *)ssdt, (void *)AmlCode_ssdt, ((acpi_header_t *)AmlCode_ssdt)->length);
+       current += AmlCode_ssdt.length;
+       memcpy((void *)ssdt, &AmlCode_ssdt, AmlCode_ssdt.length);
        //Here you need to set value in pci1234, sblk and sbdn in get_bus_conf.c
        update_ssdt((void*)ssdt);
        /* recalculate checksum */
@@ -295,24 +295,24 @@ unsigned long write_acpi_tables(unsigned long start)
                ssdtx = (acpi_header_t *)current;
                switch(sysconf.hcid[i]) {
                case 1:
-                       p = AmlCode_ssdt2;
+                       p = &AmlCode_ssdt2;
                        break;
                case 2:
-                       p = AmlCode_ssdt3;
+                       p = &AmlCode_ssdt3;
                        break;
                case 3: //8131
-                        p = AmlCode_ssdt4;
-                        break;
-                default:
+                       p = &AmlCode_ssdt4;
+                       break;
+               default:
                        //HTX no io apic
-                        p = AmlCode_ssdt5;
+                       p = &AmlCode_ssdt5;
                }
-               current += ((acpi_header_t *)p)->length;
-               memcpy((void *)ssdtx, (void *)p, ((acpi_header_t *)p)->length);
+               current += p->length;
+               memcpy((void *)ssdtx, p, p->length);
                update_ssdtx((void *)ssdtx, i);
                ssdtx->checksum = 0;
-               ssdtx->checksum = acpi_checksum((unsigned char *)ssdtx,ssdtx->length);
-               acpi_add_table(rsdp,ssdtx);
+               ssdtx->checksum = acpi_checksum((u8 *)ssdtx, ssdtx->length);
+               acpi_add_table(rsdp, ssdtx);
        }
 #endif
 
@@ -320,10 +320,9 @@ unsigned long write_acpi_tables(unsigned long start)
        current   = ( current + 0x07) & -0x08;
        printk(BIOS_DEBUG, "ACPI:    * DSDT at %lx\n", current);
        dsdt = (acpi_header_t *)current; // it will used by fadt
-       current += ((acpi_header_t *)AmlCode)->length;
-       memcpy((void *)dsdt,(void *)AmlCode, \
-                       ((acpi_header_t *)AmlCode)->length);
-       printk(BIOS_DEBUG, "ACPI:    * DSDT @ %p Length %x\n",dsdt,dsdt->length);
+       current += AmlCode.length;
+       memcpy((void *)dsdt, &AmlCode, AmlCode.length);
+       printk(BIOS_DEBUG, "ACPI:    * DSDT @ %p Length %x\n", dsdt, dsdt->length);
 
        /* FACS */ // it needs 64 bit alignment
        current   = ( current + 0x07) & -0x08;