summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/arch/armv7/include/arch/early_variables.h59
-rw-r--r--src/arch/x86/include/arch/early_variables.h (renamed from src/include/cpu/x86/car.h)4
-rw-r--r--src/cpu/x86/car.c2
-rw-r--r--src/cpu/x86/lapic/apic_timer.c2
-rw-r--r--src/drivers/oxford/oxpcie/oxpcie_early.c2
-rw-r--r--src/drivers/pc80/tpm.c2
-rw-r--r--src/lib/cbmem.c2
-rw-r--r--src/lib/cbmem_console.c2
-rw-r--r--src/lib/dynamic_cbmem.c2
-rw-r--r--src/lib/timestamp.c2
-rw-r--r--src/lib/usbdebug.c2
-rw-r--r--src/northbridge/amd/amdfam10/raminit_amdmct.c2
-rw-r--r--src/northbridge/amd/amdk8/raminit.c2
-rw-r--r--src/northbridge/amd/amdk8/raminit_f.c2
-rw-r--r--src/vendorcode/google/chromeos/vbnv.c2
15 files changed, 74 insertions, 15 deletions
diff --git a/src/arch/armv7/include/arch/early_variables.h b/src/arch/armv7/include/arch/early_variables.h
new file mode 100644
index 0000000000..90ead9d44b
--- /dev/null
+++ b/src/arch/armv7/include/arch/early_variables.h
@@ -0,0 +1,59 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2011 The ChromiumOS Authors. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
+ */
+
+#ifndef ARCH_EARLY_VARIABLES_H
+#define ARCH_EARLY_VARIABLES_H
+
+#ifdef __PRE_RAM__
+#define CAR_GLOBAL __attribute__((section(".car.global_data,\"w\",%nobits@")))
+#define CAR_CBMEM __attribute__((section(".car.cbmem_console,\"w\",%nobits@")))
+#else
+#define CAR_GLOBAL
+#define CAR_CBMEM
+#endif
+
+#if defined(__PRE_RAM__)
+#define CAR_MIGRATE_ATTR __attribute__ ((used,section (".car.migrate")))
+
+/* Call migrate_fn_() when CAR globals are migrated. */
+#define CAR_MIGRATE(migrate_fn_) \
+ static void (* const migrate_fn_ ## _ptr)(void) CAR_MIGRATE_ATTR = \
+ migrate_fn_;
+
+/* Get the correct pointer for the CAR global variable. */
+void *car_get_var_ptr(void *var);
+
+/* Get and set a primitive type global variable. */
+#define car_get_var(var) \
+ *(typeof(var) *)car_get_var_ptr(&(var))
+#define car_set_var(var, val) \
+ do { car_get_var(var) = (val); } while(0)
+
+/* Migrate the CAR variables to memory. */
+void car_migrate_variables(void);
+
+#else
+#define CAR_MIGRATE(migrate_fn_)
+static inline void *car_get_var_ptr(void *var) { return var; }
+#define car_get_var(var) (var)
+#define car_set_var(var, val) do { (var) = (val); } while (0)
+static inline void car_migrate_variables(void) { }
+#endif
+
+#endif
diff --git a/src/include/cpu/x86/car.h b/src/arch/x86/include/arch/early_variables.h
index 5fc11f9cbc..ba7df97059 100644
--- a/src/include/cpu/x86/car.h
+++ b/src/arch/x86/include/arch/early_variables.h
@@ -17,8 +17,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
*/
-#ifndef CPU_X86_CAR_H
-#define CPU_X86_CAR_H
+#ifndef ARCH_EARLY_VARIABLES_H
+#define ARCH_EARLY_VARIABLES_H
#ifdef __PRE_RAM__
#define CAR_GLOBAL __attribute__((section(".car.global_data,\"w\",@nobits#")))
diff --git a/src/cpu/x86/car.c b/src/cpu/x86/car.c
index 87fa98b488..481153d685 100644
--- a/src/cpu/x86/car.c
+++ b/src/cpu/x86/car.c
@@ -21,7 +21,7 @@
#include <stddef.h>
#include <console/console.h>
#include <cbmem.h>
-#include <cpu/x86/car.h>
+#include <arch/early_variables.h>
typedef void (* const car_migration_func_t)(void);
diff --git a/src/cpu/x86/lapic/apic_timer.c b/src/cpu/x86/lapic/apic_timer.c
index e5ce62f3f5..868fb92716 100644
--- a/src/cpu/x86/lapic/apic_timer.c
+++ b/src/cpu/x86/lapic/apic_timer.c
@@ -24,7 +24,7 @@
#include <thread.h>
#include <arch/io.h>
#include <arch/cpu.h>
-#include <cpu/x86/car.h>
+#include <arch/early_variables.h>
#include <cpu/x86/msr.h>
#include <cpu/x86/lapic.h>
#include <cpu/intel/speedstep.h>
diff --git a/src/drivers/oxford/oxpcie/oxpcie_early.c b/src/drivers/oxford/oxpcie/oxpcie_early.c
index 2bca5c7056..d04e9d4df0 100644
--- a/src/drivers/oxford/oxpcie/oxpcie_early.c
+++ b/src/drivers/oxford/oxpcie/oxpcie_early.c
@@ -19,7 +19,7 @@
#include <stdint.h>
#include <arch/io.h>
-#include <cpu/x86/car.h>
+#include <arch/early_variables.h>
#include <delay.h>
#include <uart8250.h>
#include <device/pci_def.h>
diff --git a/src/drivers/pc80/tpm.c b/src/drivers/pc80/tpm.c
index 0ea0017b47..b8ed3f1635 100644
--- a/src/drivers/pc80/tpm.c
+++ b/src/drivers/pc80/tpm.c
@@ -34,7 +34,7 @@
#include <arch/byteorder.h>
#include <console/console.h>
#include <pc80/tpm.h>
-#include <cpu/x86/car.h>
+#include <arch/early_variables.h>
#define PREFIX "lpc_tpm: "
diff --git a/src/lib/cbmem.c b/src/lib/cbmem.c
index 8d69435694..8a39647dd1 100644
--- a/src/lib/cbmem.c
+++ b/src/lib/cbmem.c
@@ -23,7 +23,7 @@
#include <cbmem.h>
#include <boot/coreboot_tables.h>
#include <console/console.h>
-#include <cpu/x86/car.h>
+#include <arch/early_variables.h>
#if CONFIG_HAVE_ACPI_RESUME && !defined(__PRE_RAM__)
#include <arch/acpi.h>
#endif
diff --git a/src/lib/cbmem_console.c b/src/lib/cbmem_console.c
index 881865cec8..dd883008bf 100644
--- a/src/lib/cbmem_console.c
+++ b/src/lib/cbmem_console.c
@@ -19,7 +19,7 @@
#include <console/console.h>
#include <cbmem.h>
-#include <cpu/x86/car.h>
+#include <arch/early_variables.h>
#include <string.h>
/*
diff --git a/src/lib/dynamic_cbmem.c b/src/lib/dynamic_cbmem.c
index ba7760dcd1..e21f96e372 100644
--- a/src/lib/dynamic_cbmem.c
+++ b/src/lib/dynamic_cbmem.c
@@ -23,7 +23,7 @@
#include <cbmem.h>
#include <string.h>
#include <stdlib.h>
-#include <cpu/x86/car.h>
+#include <arch/early_variables.h>
#if CONFIG_HAVE_ACPI_RESUME && !defined(__PRE_RAM__)
#include <arch/acpi.h>
#endif
diff --git a/src/lib/timestamp.c b/src/lib/timestamp.c
index a9c354eb55..8942649099 100644
--- a/src/lib/timestamp.c
+++ b/src/lib/timestamp.c
@@ -22,7 +22,7 @@
#include <console/console.h>
#include <cbmem.h>
#include <timestamp.h>
-#include <cpu/x86/car.h>
+#include <arch/early_variables.h>
#include <cpu/x86/lapic.h>
#define MAX_TIMESTAMPS 30
diff --git a/src/lib/usbdebug.c b/src/lib/usbdebug.c
index 39cd138ba0..3faec10f63 100644
--- a/src/lib/usbdebug.c
+++ b/src/lib/usbdebug.c
@@ -24,7 +24,7 @@
#include <device/pci.h>
#include <device/pci_def.h>
#include <arch/byteorder.h>
-#include <cpu/x86/car.h>
+#include <arch/early_variables.h>
#include <string.h>
#include <cbmem.h>
diff --git a/src/northbridge/amd/amdfam10/raminit_amdmct.c b/src/northbridge/amd/amdfam10/raminit_amdmct.c
index 6994c394e8..e5c18a8f45 100644
--- a/src/northbridge/amd/amdfam10/raminit_amdmct.c
+++ b/src/northbridge/amd/amdfam10/raminit_amdmct.c
@@ -120,7 +120,7 @@ static void print_t(const char *strval)
#endif /* DDR2 */
-#include <cpu/x86/car.h>
+#include <arch/early_variables.h>
struct sys_info sysinfo_car CAR_GLOBAL;
int mctRead_SPD(u32 smaddr, u32 reg)
diff --git a/src/northbridge/amd/amdk8/raminit.c b/src/northbridge/amd/amdk8/raminit.c
index 33a3245644..4aaa1bb385 100644
--- a/src/northbridge/amd/amdk8/raminit.c
+++ b/src/northbridge/amd/amdk8/raminit.c
@@ -14,7 +14,7 @@
#include "option_table.h"
#endif
-#include <cpu/x86/car.h>
+#include <arch/early_variables.h>
struct sys_info sysinfo_car CAR_GLOBAL;
#if (CONFIG_RAMTOP & (CONFIG_RAMTOP -1)) != 0
diff --git a/src/northbridge/amd/amdk8/raminit_f.c b/src/northbridge/amd/amdk8/raminit_f.c
index c1882d7cef..64271b56f0 100644
--- a/src/northbridge/amd/amdk8/raminit_f.c
+++ b/src/northbridge/amd/amdk8/raminit_f.c
@@ -39,7 +39,7 @@
#endif
-#include <cpu/x86/car.h>
+#include <arch/early_variables.h>
struct sys_info sysinfo_car CAR_GLOBAL;
#if (CONFIG_RAMTOP & (CONFIG_RAMTOP -1)) != 0
diff --git a/src/vendorcode/google/chromeos/vbnv.c b/src/vendorcode/google/chromeos/vbnv.c
index d94203ad6d..58ccbdb72f 100644
--- a/src/vendorcode/google/chromeos/vbnv.c
+++ b/src/vendorcode/google/chromeos/vbnv.c
@@ -21,7 +21,7 @@
#include <string.h>
#include <console/console.h>
#include <pc80/mc146818rtc.h>
-#include <cpu/x86/car.h>
+#include <arch/early_variables.h>
#include "chromeos.h"
#define VBNV_BLOCK_SIZE 16 /* Size of NV storage block in bytes */