1d2fd9612SCédric Le Goater /* 2d2fd9612SCédric Le Goater * QEMU PowerPC PowerNV CPU Core model 3d2fd9612SCédric Le Goater * 4d2fd9612SCédric Le Goater * Copyright (c) 2016, IBM Corporation. 5d2fd9612SCédric Le Goater * 6d2fd9612SCédric Le Goater * This library is free software; you can redistribute it and/or 7d2fd9612SCédric Le Goater * modify it under the terms of the GNU Lesser General Public License 8d2fd9612SCédric Le Goater * as published by the Free Software Foundation; either version 2 of 9d2fd9612SCédric Le Goater * the License, or (at your option) any later version. 10d2fd9612SCédric Le Goater * 11d2fd9612SCédric Le Goater * This library is distributed in the hope that it will be useful, but 12d2fd9612SCédric Le Goater * WITHOUT ANY WARRANTY; without even the implied warranty of 13d2fd9612SCédric Le Goater * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14d2fd9612SCédric Le Goater * Lesser General Public License for more details. 15d2fd9612SCédric Le Goater * 16d2fd9612SCédric Le Goater * You should have received a copy of the GNU Lesser General Public 17d2fd9612SCédric Le Goater * License along with this library; if not, see <http://www.gnu.org/licenses/>. 18d2fd9612SCédric Le Goater */ 19d2fd9612SCédric Le Goater #ifndef _PPC_PNV_CORE_H 20d2fd9612SCédric Le Goater #define _PPC_PNV_CORE_H 21d2fd9612SCédric Le Goater 22d2fd9612SCédric Le Goater #include "hw/cpu/core.h" 23d2fd9612SCédric Le Goater 24d2fd9612SCédric Le Goater #define TYPE_PNV_CORE "powernv-cpu-core" 25d2fd9612SCédric Le Goater #define PNV_CORE(obj) \ 26d2fd9612SCédric Le Goater OBJECT_CHECK(PnvCore, (obj), TYPE_PNV_CORE) 27d2fd9612SCédric Le Goater #define PNV_CORE_CLASS(klass) \ 28d2fd9612SCédric Le Goater OBJECT_CLASS_CHECK(PnvCoreClass, (klass), TYPE_PNV_CORE) 29d2fd9612SCédric Le Goater #define PNV_CORE_GET_CLASS(obj) \ 30d2fd9612SCédric Le Goater OBJECT_GET_CLASS(PnvCoreClass, (obj), TYPE_PNV_CORE) 31d2fd9612SCédric Le Goater 32d2fd9612SCédric Le Goater typedef struct PnvCore { 33d2fd9612SCédric Le Goater /*< private >*/ 34d2fd9612SCédric Le Goater CPUCore parent_obj; 35d2fd9612SCédric Le Goater 36d2fd9612SCédric Le Goater /*< public >*/ 37d2fd9612SCédric Le Goater void *threads; 38d2fd9612SCédric Le Goater uint32_t pir; 3924ece072SCédric Le Goater 4024ece072SCédric Le Goater MemoryRegion xscom_regs; 41d2fd9612SCédric Le Goater } PnvCore; 42d2fd9612SCédric Le Goater 43d2fd9612SCédric Le Goater typedef struct PnvCoreClass { 44d2fd9612SCédric Le Goater DeviceClass parent_class; 45d2fd9612SCédric Le Goater ObjectClass *cpu_oc; 46d2fd9612SCédric Le Goater } PnvCoreClass; 47d2fd9612SCédric Le Goater 48*7fd544d8SIgor Mammedov #define PNV_CORE_TYPE_SUFFIX "-" TYPE_PNV_CORE 49*7fd544d8SIgor Mammedov #define PNV_CORE_TYPE_NAME(cpu_model) cpu_model PNV_CORE_TYPE_SUFFIX 50d2fd9612SCédric Le Goater extern char *pnv_core_typename(const char *model); 51d2fd9612SCédric Le Goater 52d2fd9612SCédric Le Goater #endif /* _PPC_PNV_CORE_H */ 53