aboutsummaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/x86/include/arch/early_variables.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/arch/x86/include/arch/early_variables.h b/src/arch/x86/include/arch/early_variables.h
index d9f1cd76e6..7ccb340cf4 100644
--- a/src/arch/x86/include/arch/early_variables.h
+++ b/src/arch/x86/include/arch/early_variables.h
@@ -20,6 +20,8 @@
#ifndef ARCH_EARLY_VARIABLES_H
#define ARCH_EARLY_VARIABLES_H
+#include <stdlib.h>
+
#if defined(__PRE_RAM__) && IS_ENABLED(CONFIG_CACHE_AS_RAM)
asm(".section .car.global_data,\"w\",@nobits");
asm(".previous");
@@ -43,6 +45,20 @@ void *car_sync_var_ptr(void *var);
#define car_set_var(var, val) \
do { car_get_var(var) = (val); } while(0)
+extern char _car_data_start[];
+extern char _car_data_end[];
+
+static inline size_t car_data_size(void)
+{
+ size_t car_size = &_car_data_end[0] - &_car_data_start[0];
+ return ALIGN(car_size, 64);
+}
+
+static inline size_t car_object_offset(void *ptr)
+{
+ return (char *)ptr - &_car_data_start[0];
+}
+
#else
#define CAR_GLOBAL
static inline void *car_get_var_ptr(void *var) { return var; }