10722d05aSBenjamin Herrenschmidt /* 20722d05aSBenjamin Herrenschmidt * QEMU PowerPC PowerNV Emulation of a few OCC related registers 30722d05aSBenjamin Herrenschmidt * 40722d05aSBenjamin Herrenschmidt * Copyright (c) 2015-2017, IBM Corporation. 50722d05aSBenjamin Herrenschmidt * 60722d05aSBenjamin Herrenschmidt * This library is free software; you can redistribute it and/or 70722d05aSBenjamin Herrenschmidt * modify it under the terms of the GNU Lesser General Public 80722d05aSBenjamin Herrenschmidt * License as published by the Free Software Foundation; either 90722d05aSBenjamin Herrenschmidt * version 2 of the License, or (at your option) any later version. 100722d05aSBenjamin Herrenschmidt * 110722d05aSBenjamin Herrenschmidt * This library is distributed in the hope that it will be useful, 120722d05aSBenjamin Herrenschmidt * but WITHOUT ANY WARRANTY; without even the implied warranty of 130722d05aSBenjamin Herrenschmidt * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 140722d05aSBenjamin Herrenschmidt * Lesser General Public License for more details. 150722d05aSBenjamin Herrenschmidt * 160722d05aSBenjamin Herrenschmidt * You should have received a copy of the GNU Lesser General Public 170722d05aSBenjamin Herrenschmidt * License along with this library; if not, see <http://www.gnu.org/licenses/>. 180722d05aSBenjamin Herrenschmidt */ 190722d05aSBenjamin Herrenschmidt #ifndef _PPC_PNV_OCC_H 200722d05aSBenjamin Herrenschmidt #define _PPC_PNV_OCC_H 210722d05aSBenjamin Herrenschmidt 22eaf87a39SDavid Gibson #include "hw/ppc/pnv_psi.h" 23eaf87a39SDavid Gibson 240722d05aSBenjamin Herrenschmidt #define TYPE_PNV_OCC "pnv-occ" 250722d05aSBenjamin Herrenschmidt #define PNV_OCC(obj) OBJECT_CHECK(PnvOCC, (obj), TYPE_PNV_OCC) 26*3233838cSCédric Le Goater #define TYPE_PNV8_OCC TYPE_PNV_OCC "-POWER8" 27*3233838cSCédric Le Goater #define PNV8_OCC(obj) OBJECT_CHECK(PnvOCC, (obj), TYPE_PNV8_OCC) 280722d05aSBenjamin Herrenschmidt 290722d05aSBenjamin Herrenschmidt typedef struct PnvOCC { 300722d05aSBenjamin Herrenschmidt DeviceState xd; 310722d05aSBenjamin Herrenschmidt 320722d05aSBenjamin Herrenschmidt /* OCC Misc interrupt */ 330722d05aSBenjamin Herrenschmidt uint64_t occmisc; 340722d05aSBenjamin Herrenschmidt 350722d05aSBenjamin Herrenschmidt PnvPsi *psi; 360722d05aSBenjamin Herrenschmidt 370722d05aSBenjamin Herrenschmidt MemoryRegion xscom_regs; 380722d05aSBenjamin Herrenschmidt } PnvOCC; 390722d05aSBenjamin Herrenschmidt 40*3233838cSCédric Le Goater #define PNV_OCC_CLASS(klass) \ 41*3233838cSCédric Le Goater OBJECT_CLASS_CHECK(PnvOCCClass, (klass), TYPE_PNV_OCC) 42*3233838cSCédric Le Goater #define PNV_OCC_GET_CLASS(obj) \ 43*3233838cSCédric Le Goater OBJECT_GET_CLASS(PnvOCCClass, (obj), TYPE_PNV_OCC) 44*3233838cSCédric Le Goater 45*3233838cSCédric Le Goater typedef struct PnvOCCClass { 46*3233838cSCédric Le Goater DeviceClass parent_class; 47*3233838cSCédric Le Goater 48*3233838cSCédric Le Goater int xscom_size; 49*3233838cSCédric Le Goater const MemoryRegionOps *xscom_ops; 50*3233838cSCédric Le Goater int psi_irq; 51*3233838cSCédric Le Goater } PnvOCCClass; 52*3233838cSCédric Le Goater 530722d05aSBenjamin Herrenschmidt #endif /* _PPC_PNV_OCC_H */ 54