qemu/include/hw/ppc/pnv_core.h
<<
>>
Prefs
   1/*
   2 * QEMU PowerPC PowerNV CPU Core model
   3 *
   4 * Copyright (c) 2016, IBM Corporation.
   5 *
   6 * This library is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU Lesser General Public License
   8 * as published by the Free Software Foundation; either version 2 of
   9 * the License, or (at your option) any later version.
  10 *
  11 * This library is distributed in the hope that it will be useful, but
  12 * WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14 * Lesser General Public License for more details.
  15 *
  16 * You should have received a copy of the GNU Lesser General Public
  17 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  18 */
  19
  20#ifndef PPC_PNV_CORE_H
  21#define PPC_PNV_CORE_H
  22
  23#include "hw/cpu/core.h"
  24
  25#define TYPE_PNV_CORE "powernv-cpu-core"
  26#define PNV_CORE(obj) \
  27    OBJECT_CHECK(PnvCore, (obj), TYPE_PNV_CORE)
  28#define PNV_CORE_CLASS(klass) \
  29     OBJECT_CLASS_CHECK(PnvCoreClass, (klass), TYPE_PNV_CORE)
  30#define PNV_CORE_GET_CLASS(obj) \
  31     OBJECT_GET_CLASS(PnvCoreClass, (obj), TYPE_PNV_CORE)
  32
  33typedef struct PnvCore {
  34    /*< private >*/
  35    CPUCore parent_obj;
  36
  37    /*< public >*/
  38    PowerPCCPU **threads;
  39    uint32_t pir;
  40
  41    MemoryRegion xscom_regs;
  42} PnvCore;
  43
  44typedef struct PnvCoreClass {
  45    DeviceClass parent_class;
  46
  47    const MemoryRegionOps *xscom_ops;
  48} PnvCoreClass;
  49
  50#define PNV_CORE_TYPE_SUFFIX "-" TYPE_PNV_CORE
  51#define PNV_CORE_TYPE_NAME(cpu_model) cpu_model PNV_CORE_TYPE_SUFFIX
  52
  53typedef struct PnvCPUState {
  54    Object *intc;
  55} PnvCPUState;
  56
  57static inline PnvCPUState *pnv_cpu_state(PowerPCCPU *cpu)
  58{
  59    return (PnvCPUState *)cpu->machine_data;
  60}
  61
  62#define TYPE_PNV_QUAD "powernv-cpu-quad"
  63#define PNV_QUAD(obj) \
  64    OBJECT_CHECK(PnvQuad, (obj), TYPE_PNV_QUAD)
  65
  66typedef struct PnvQuad {
  67    DeviceState parent_obj;
  68
  69    uint32_t id;
  70    MemoryRegion xscom_regs;
  71} PnvQuad;
  72#endif /* PPC_PNV_CORE_H */
  73