diff options
-rw-r--r-- | src/arch/armv7/include/arch/early_variables.h | 59 | ||||
-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.c | 2 | ||||
-rw-r--r-- | src/cpu/x86/lapic/apic_timer.c | 2 | ||||
-rw-r--r-- | src/drivers/oxford/oxpcie/oxpcie_early.c | 2 | ||||
-rw-r--r-- | src/drivers/pc80/tpm.c | 2 | ||||
-rw-r--r-- | src/lib/cbmem.c | 2 | ||||
-rw-r--r-- | src/lib/cbmem_console.c | 2 | ||||
-rw-r--r-- | src/lib/dynamic_cbmem.c | 2 | ||||
-rw-r--r-- | src/lib/timestamp.c | 2 | ||||
-rw-r--r-- | src/lib/usbdebug.c | 2 | ||||
-rw-r--r-- | src/northbridge/amd/amdfam10/raminit_amdmct.c | 2 | ||||
-rw-r--r-- | src/northbridge/amd/amdk8/raminit.c | 2 | ||||
-rw-r--r-- | src/northbridge/amd/amdk8/raminit_f.c | 2 | ||||
-rw-r--r-- | src/vendorcode/google/chromeos/vbnv.c | 2 |
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 */ |