1185377Ssam/*
2185377Ssam * Copyright 2014, General Dynamics C4 Systems
3185377Ssam *
4185377Ssam * SPDX-License-Identifier: GPL-2.0-only
5185377Ssam */
6185377Ssam
7185377Ssam#include <config.h>
8185377Ssam#include <util.h>
9185377Ssam#include <api/types.h>
10185377Ssam#include <arch/types.h>
11185377Ssam#include <arch/model/statedata.h>
12185377Ssam#include <arch/object/structures.h>
13185377Ssam
14185377Ssam/* ==== read/write kernel state not preserved across kernel entries ==== */
15185377Ssam
16185377Ssam/* Interrupt currently being handled */
17204644SrpauloUP_STATE_DEFINE(interrupt_t, x86KScurInterrupt VISIBLE);
18185377Ssam
19185377SsamUP_STATE_DEFINE(interrupt_t, x86KSPendingInterrupt);
20185377Ssam
21185377Ssam/* ==== proper read/write kernel state ==== */
22185377Ssam
23185377Ssamx86_arch_global_state_t x86KSGlobalState[CONFIG_MAX_NUM_NODES] ALIGN(L1_CACHE_LINE_SIZE) SKIM_BSS;
24185377Ssam
25185377Ssam/* The top level ASID table */
26185377Ssamasid_pool_t *x86KSASIDTable[BIT(asidHighBits)];
27185377Ssam
28185377Ssam/* Current user value of the fs/gs base */
29185377SsamUP_STATE_DEFINE(word_t, x86KSCurrentFSBase);
30185377SsamUP_STATE_DEFINE(word_t, x86KSCurrentGSBase);
31185377Ssam
32185377SsamUP_STATE_DEFINE(word_t, x86KSGPExceptReturnTo);
33185377Ssam
34185377Ssam/* ==== read-only kernel state (only written during bootstrapping) ==== */
35185377Ssam
36185377Ssam/* Defines a translation of cpu ids from an index of our actual CPUs */
37185377SsamSMP_STATE_DEFINE(cpu_id_mapping_t, cpu_mapping);
38185377Ssam
39185377Ssam/* CPU Cache Line Size */
40185377Ssamuint32_t x86KScacheLineSizeBits;
41185377Ssam
42185377Ssam/* A valid initial FPU state, copied to every new thread. */
43185377Ssamuser_fpu_state_t x86KSnullFpuState ALIGN(MIN_FPU_ALIGNMENT);
44185377Ssam
45185377Ssam/* Number of IOMMUs (DMA Remapping Hardware Units) */
46185377Ssamuint32_t x86KSnumDrhu;
47185377Ssam
48185377Ssam#ifdef CONFIG_IOMMU
49185377Ssam/* Intel VT-d Root Entry Table */
50185377Ssamvtd_rte_t *x86KSvtdRootTable;
51185377Ssamuint32_t x86KSnumIOPTLevels;
52185377Ssamuint32_t x86KSnumIODomainIDBits;
53185377Ssamuint32_t x86KSFirstValidIODomain;
54185377Ssam#endif
55185377Ssam
56185377Ssam#ifdef CONFIG_VTX
57185377SsamUP_STATE_DEFINE(vcpu_t *, x86KSCurrentVCPU);
58185377Ssam#endif
59185377Ssam
60185377Ssam#ifdef CONFIG_PRINTING
61185377Ssamuint16_t x86KSconsolePort;
62185377Ssam#endif
63185377Ssam#ifdef CONFIG_DEBUG_BUILD
64185377Ssamuint16_t x86KSdebugPort;
65185377Ssam#endif
66185377Ssam
67185377Ssam/* State data tracking what IRQ source is related to each
68185377Ssam * CPU vector */
69185377Ssamx86_irq_state_t x86KSIRQState[maxIRQ + 1];
70185377Ssam
71185377Ssamword_t x86KSAllocatedIOPorts[NUM_IO_PORTS / CONFIG_WORD_SIZE];
72185377Ssam#ifdef CONFIG_KERNEL_MCS
73185377Ssamuint32_t x86KStscMhz;
74185377Ssamuint32_t x86KSapicRatio;
75185377Ssam#endif
76185377Ssam