15fd2087aSAndreas Färber /* 25fd2087aSAndreas Färber * QEMU x86 CPU 35fd2087aSAndreas Färber * 45fd2087aSAndreas Färber * Copyright (c) 2012 SUSE LINUX Products GmbH 55fd2087aSAndreas Färber * 65fd2087aSAndreas Färber * This library is free software; you can redistribute it and/or 75fd2087aSAndreas Färber * modify it under the terms of the GNU Lesser General Public 85fd2087aSAndreas Färber * License as published by the Free Software Foundation; either 95fd2087aSAndreas Färber * version 2.1 of the License, or (at your option) any later version. 105fd2087aSAndreas Färber * 115fd2087aSAndreas Färber * This library is distributed in the hope that it will be useful, 125fd2087aSAndreas Färber * but WITHOUT ANY WARRANTY; without even the implied warranty of 135fd2087aSAndreas Färber * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 145fd2087aSAndreas Färber * Lesser General Public License for more details. 155fd2087aSAndreas Färber * 165fd2087aSAndreas Färber * You should have received a copy of the GNU Lesser General Public 175fd2087aSAndreas Färber * License along with this library; if not, see 185fd2087aSAndreas Färber * <http://www.gnu.org/licenses/lgpl-2.1.html> 195fd2087aSAndreas Färber */ 205fd2087aSAndreas Färber #ifndef QEMU_I386_CPU_QOM_H 215fd2087aSAndreas Färber #define QEMU_I386_CPU_QOM_H 225fd2087aSAndreas Färber 232e5b09fdSMarkus Armbruster #include "hw/core/cpu.h" 24f809c605SPaolo Bonzini #include "qemu/notify.h" 25*db1015e9SEduardo Habkost #include "qom/object.h" 265fd2087aSAndreas Färber 275fd2087aSAndreas Färber #ifdef TARGET_X86_64 285fd2087aSAndreas Färber #define TYPE_X86_CPU "x86_64-cpu" 295fd2087aSAndreas Färber #else 305fd2087aSAndreas Färber #define TYPE_X86_CPU "i386-cpu" 315fd2087aSAndreas Färber #endif 325fd2087aSAndreas Färber 33*db1015e9SEduardo Habkost typedef struct X86CPU X86CPU; 34*db1015e9SEduardo Habkost typedef struct X86CPUClass X86CPUClass; 355fd2087aSAndreas Färber #define X86_CPU_CLASS(klass) \ 365fd2087aSAndreas Färber OBJECT_CLASS_CHECK(X86CPUClass, (klass), TYPE_X86_CPU) 375fd2087aSAndreas Färber #define X86_CPU(obj) \ 385fd2087aSAndreas Färber OBJECT_CHECK(X86CPU, (obj), TYPE_X86_CPU) 395fd2087aSAndreas Färber #define X86_CPU_GET_CLASS(obj) \ 405fd2087aSAndreas Färber OBJECT_GET_CLASS(X86CPUClass, (obj), TYPE_X86_CPU) 415fd2087aSAndreas Färber 42dcafd1efSEduardo Habkost typedef struct X86CPUModel X86CPUModel; 43d940ee9bSEduardo Habkost 44d940ee9bSEduardo Habkost /** 455fd2087aSAndreas Färber * X86CPUClass: 46d940ee9bSEduardo Habkost * @cpu_def: CPU model definition 47d6dcc558SSergio Andres Gomez Del Real * @host_cpuid_required: Whether CPU model requires cpuid from host. 48f48c8837SEduardo Habkost * @ordering: Ordering on the "-cpu help" CPU model list. 49bd72159dSEduardo Habkost * @migration_safe: See CpuDefinitionInfo::migration_safe 505adbed30SEduardo Habkost * @static_model: See CpuDefinitionInfo::static 512b6f294cSAndreas Färber * @parent_realize: The parent class' realize handler. 525fd2087aSAndreas Färber * @parent_reset: The parent class' reset handler. 535fd2087aSAndreas Färber * 545fd2087aSAndreas Färber * An x86 CPU model or family. 555fd2087aSAndreas Färber */ 56*db1015e9SEduardo Habkost struct X86CPUClass { 575fd2087aSAndreas Färber /*< private >*/ 585fd2087aSAndreas Färber CPUClass parent_class; 595fd2087aSAndreas Färber /*< public >*/ 605fd2087aSAndreas Färber 610bacd8b3SEduardo Habkost /* CPU definition, automatically loaded by instance_init if not NULL. 620bacd8b3SEduardo Habkost * Should be eventually replaced by subclass-specific property defaults. 630bacd8b3SEduardo Habkost */ 64dcafd1efSEduardo Habkost X86CPUModel *model; 65d940ee9bSEduardo Habkost 66d6dcc558SSergio Andres Gomez Del Real bool host_cpuid_required; 67f48c8837SEduardo Habkost int ordering; 68bd72159dSEduardo Habkost bool migration_safe; 695adbed30SEduardo Habkost bool static_model; 70d940ee9bSEduardo Habkost 71ee465a3eSEduardo Habkost /* Optional description of CPU model. 72ee465a3eSEduardo Habkost * If unavailable, cpu_def->model_id is used */ 73ee465a3eSEduardo Habkost const char *model_description; 74ee465a3eSEduardo Habkost 752b6f294cSAndreas Färber DeviceRealize parent_realize; 767bbc124eSLaurent Vivier DeviceUnrealize parent_unrealize; 77781c67caSPeter Maydell DeviceReset parent_reset; 78*db1015e9SEduardo Habkost }; 795fd2087aSAndreas Färber 80374e0cd4SRichard Henderson 815fd2087aSAndreas Färber #endif 82