#include <config.h>
#include <api/debug.h>
#include <types.h>
#include <plat/machine.h>
#include <model/statedata.h>
#include <model/smp.h>
#include <object/structures.h>
#include <object/tcb.h>
#include <benchmark/benchmark_track.h>
SMP_STATE_DEFINE(smpStatedata_t, ksSMP[CONFIG_MAX_NUM_NODES] ALIGN(L1_CACHE_LINE_SIZE));
word_t ksNumCPUs;
UP_STATE_DEFINE(tcb_queue_t, ksReadyQueues[NUM_READY_QUEUES]);
UP_STATE_DEFINE(word_t, ksReadyQueuesL1Bitmap[CONFIG_NUM_DOMAINS]);
UP_STATE_DEFINE(word_t, ksReadyQueuesL2Bitmap[CONFIG_NUM_DOMAINS][(CONFIG_NUM_PRIORITIES / wordBits) + 1]);
compile_assert(ksReadyQueuesL1BitmapBigEnough, (CONFIG_NUM_PRIORITIES / wordBits) <= wordBits)
UP_STATE_DEFINE(tcb_t *, ksCurThread);
UP_STATE_DEFINE(tcb_t *, ksIdleThread);
UP_STATE_DEFINE(tcb_t *, ksSchedulerAction);
#ifdef CONFIG_HAVE_FPU
UP_STATE_DEFINE(user_fpu_state_t *, ksActiveFPUState);
UP_STATE_DEFINE(word_t, ksFPURestoresSinceSwitch);
#endif
word_t ksWorkUnitsCompleted;
irq_state_t intStateIRQTable[maxIRQ + 1];
cte_t *intStateIRQNode;
dom_t ksCurDomain;
word_t ksDomainTime;
word_t ksDomScheduleIdx;
word_t tlbLockCount = 0;
#if (defined DEBUG || defined CONFIG_BENCHMARK_TRACK_KERNEL_ENTRIES)
kernel_entry_t ksKernelEntry;
#endif
#ifdef CONFIG_BENCHMARK_USE_KERNEL_LOG_BUFFER
paddr_t ksUserLogBuffer;
#endif