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