1/*
2 * Copyright 2014, General Dynamics C4 Systems
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 */
6
7#include <config.h>
8#include <util.h>
9#include <api/types.h>
10#include <arch/types.h>
11#include <arch/model/statedata.h>
12#include <arch/object/structures.h>
13
14/* ==== read/write kernel state not preserved across kernel entries ==== */
15
16/* Interrupt currently being handled */
17UP_STATE_DEFINE(interrupt_t, x86KScurInterrupt VISIBLE);
18
19UP_STATE_DEFINE(interrupt_t, x86KSPendingInterrupt);
20
21/* ==== proper read/write kernel state ==== */
22
23x86_arch_global_state_t x86KSGlobalState[CONFIG_MAX_NUM_NODES] ALIGN(L1_CACHE_LINE_SIZE) SKIM_BSS;
24
25/* The top level ASID table */
26asid_pool_t *x86KSASIDTable[BIT(asidHighBits)];
27
28/* Current user value of the fs/gs base */
29UP_STATE_DEFINE(word_t, x86KSCurrentFSBase);
30UP_STATE_DEFINE(word_t, x86KSCurrentGSBase);
31
32UP_STATE_DEFINE(word_t, x86KSGPExceptReturnTo);
33
34/* ==== read-only kernel state (only written during bootstrapping) ==== */
35
36/* Defines a translation of cpu ids from an index of our actual CPUs */
37SMP_STATE_DEFINE(cpu_id_mapping_t, cpu_mapping);
38
39/* CPU Cache Line Size */
40uint32_t x86KScacheLineSizeBits;
41
42/* A valid initial FPU state, copied to every new thread. */
43user_fpu_state_t x86KSnullFpuState ALIGN(MIN_FPU_ALIGNMENT);
44
45/* Number of IOMMUs (DMA Remapping Hardware Units) */
46uint32_t x86KSnumDrhu;
47
48#ifdef CONFIG_IOMMU
49/* Intel VT-d Root Entry Table */
50vtd_rte_t *x86KSvtdRootTable;
51uint32_t x86KSnumIOPTLevels;
52uint32_t x86KSnumIODomainIDBits;
53uint32_t x86KSFirstValidIODomain;
54#endif
55
56#ifdef CONFIG_VTX
57UP_STATE_DEFINE(vcpu_t *, x86KSCurrentVCPU);
58#endif
59
60#ifdef CONFIG_PRINTING
61uint16_t x86KSconsolePort;
62#endif
63#ifdef CONFIG_DEBUG_BUILD
64uint16_t x86KSdebugPort;
65#endif
66
67/* State data tracking what IRQ source is related to each
68 * CPU vector */
69x86_irq_state_t x86KSIRQState[maxIRQ + 1];
70
71word_t x86KSAllocatedIOPorts[NUM_IO_PORTS / CONFIG_WORD_SIZE];
72#ifdef CONFIG_KERNEL_MCS
73uint32_t x86KStscMhz;
74uint32_t x86KSapicRatio;
75#endif
76