179f1a68aSClaudio Fontana /* 2*32cad1ffSPhilippe Mathieu-Daudé * i386 CPU internal definitions to be shared between cpu.c and cpu-system.c 379f1a68aSClaudio Fontana * 479f1a68aSClaudio Fontana * Copyright (c) 2003 Fabrice Bellard 579f1a68aSClaudio Fontana * 679f1a68aSClaudio Fontana * This library is free software; you can redistribute it and/or 779f1a68aSClaudio Fontana * modify it under the terms of the GNU Lesser General Public 879f1a68aSClaudio Fontana * License as published by the Free Software Foundation; either 979f1a68aSClaudio Fontana * version 2.1 of the License, or (at your option) any later version. 1079f1a68aSClaudio Fontana * 1179f1a68aSClaudio Fontana * This library is distributed in the hope that it will be useful, 1279f1a68aSClaudio Fontana * but WITHOUT ANY WARRANTY; without even the implied warranty of 1379f1a68aSClaudio Fontana * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1479f1a68aSClaudio Fontana * Lesser General Public License for more details. 1579f1a68aSClaudio Fontana * 1679f1a68aSClaudio Fontana * You should have received a copy of the GNU Lesser General Public 1779f1a68aSClaudio Fontana * License along with this library; if not, see <http://www.gnu.org/licenses/>. 1879f1a68aSClaudio Fontana */ 1979f1a68aSClaudio Fontana 2079f1a68aSClaudio Fontana #ifndef I386_CPU_INTERNAL_H 2179f1a68aSClaudio Fontana #define I386_CPU_INTERNAL_H 2279f1a68aSClaudio Fontana 2379f1a68aSClaudio Fontana typedef enum FeatureWordType { 2479f1a68aSClaudio Fontana CPUID_FEATURE_WORD, 2579f1a68aSClaudio Fontana MSR_FEATURE_WORD, 2679f1a68aSClaudio Fontana } FeatureWordType; 2779f1a68aSClaudio Fontana 2879f1a68aSClaudio Fontana typedef struct FeatureWordInfo { 2979f1a68aSClaudio Fontana FeatureWordType type; 3079f1a68aSClaudio Fontana /* feature flags names are taken from "Intel Processor Identification and 3179f1a68aSClaudio Fontana * the CPUID Instruction" and AMD's "CPUID Specification". 3279f1a68aSClaudio Fontana * In cases of disagreement between feature naming conventions, 3379f1a68aSClaudio Fontana * aliases may be added. 3479f1a68aSClaudio Fontana */ 3579f1a68aSClaudio Fontana const char *feat_names[64]; 3679f1a68aSClaudio Fontana union { 3779f1a68aSClaudio Fontana /* If type==CPUID_FEATURE_WORD */ 3879f1a68aSClaudio Fontana struct { 3979f1a68aSClaudio Fontana uint32_t eax; /* Input EAX for CPUID */ 4079f1a68aSClaudio Fontana bool needs_ecx; /* CPUID instruction uses ECX as input */ 4179f1a68aSClaudio Fontana uint32_t ecx; /* Input ECX value for CPUID */ 4279f1a68aSClaudio Fontana int reg; /* output register (R_* constant) */ 4379f1a68aSClaudio Fontana } cpuid; 4479f1a68aSClaudio Fontana /* If type==MSR_FEATURE_WORD */ 4579f1a68aSClaudio Fontana struct { 4679f1a68aSClaudio Fontana uint32_t index; 4779f1a68aSClaudio Fontana } msr; 4879f1a68aSClaudio Fontana }; 4979f1a68aSClaudio Fontana uint64_t tcg_features; /* Feature flags supported by TCG */ 5079f1a68aSClaudio Fontana uint64_t unmigratable_flags; /* Feature flags known to be unmigratable */ 5179f1a68aSClaudio Fontana uint64_t migratable_flags; /* Feature flags known to be migratable */ 5279f1a68aSClaudio Fontana /* Features that shouldn't be auto-enabled by "-cpu host" */ 5379f1a68aSClaudio Fontana uint64_t no_autoenable_flags; 5479f1a68aSClaudio Fontana } FeatureWordInfo; 5579f1a68aSClaudio Fontana 5679f1a68aSClaudio Fontana extern FeatureWordInfo feature_word_info[]; 5779f1a68aSClaudio Fontana 5879f1a68aSClaudio Fontana void x86_cpu_expand_features(X86CPU *cpu, Error **errp); 5979f1a68aSClaudio Fontana 6079f1a68aSClaudio Fontana #ifndef CONFIG_USER_ONLY 6179f1a68aSClaudio Fontana GuestPanicInformation *x86_cpu_get_crash_info(CPUState *cs); 6279f1a68aSClaudio Fontana void x86_cpu_get_crash_info_qom(Object *obj, Visitor *v, 6379f1a68aSClaudio Fontana const char *name, void *opaque, Error **errp); 6479f1a68aSClaudio Fontana 6579f1a68aSClaudio Fontana void x86_cpu_apic_create(X86CPU *cpu, Error **errp); 6679f1a68aSClaudio Fontana void x86_cpu_apic_realize(X86CPU *cpu, Error **errp); 6779f1a68aSClaudio Fontana void x86_cpu_machine_reset_cb(void *opaque); 6879f1a68aSClaudio Fontana #endif /* !CONFIG_USER_ONLY */ 6979f1a68aSClaudio Fontana 7079f1a68aSClaudio Fontana #endif /* I386_CPU_INTERNAL_H */ 71