10bf4d77eSNicholas Piggin /* 20bf4d77eSNicholas Piggin * QEMU PowerPC PowerNV Emulation of some SBE behaviour 30bf4d77eSNicholas Piggin * 40bf4d77eSNicholas Piggin * Copyright (c) 2022, IBM Corporation. 50bf4d77eSNicholas Piggin * 60bf4d77eSNicholas Piggin * This library is free software; you can redistribute it and/or 70bf4d77eSNicholas Piggin * modify it under the terms of the GNU Lesser General Public 80bf4d77eSNicholas Piggin * License as published by the Free Software Foundation; either 90bf4d77eSNicholas Piggin * version 2.1 of the License, or (at your option) any later version. 100bf4d77eSNicholas Piggin * 110bf4d77eSNicholas Piggin * This library is distributed in the hope that it will be useful, 120bf4d77eSNicholas Piggin * but WITHOUT ANY WARRANTY; without even the implied warranty of 130bf4d77eSNicholas Piggin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 140bf4d77eSNicholas Piggin * Lesser General Public License for more details. 150bf4d77eSNicholas Piggin * 160bf4d77eSNicholas Piggin * You should have received a copy of the GNU Lesser General Public 170bf4d77eSNicholas Piggin * License along with this library; if not, see <http://www.gnu.org/licenses/>. 180bf4d77eSNicholas Piggin */ 190bf4d77eSNicholas Piggin 200bf4d77eSNicholas Piggin #ifndef PPC_PNV_SBE_H 210bf4d77eSNicholas Piggin #define PPC_PNV_SBE_H 220bf4d77eSNicholas Piggin 23*8be545baSRichard Henderson #include "system/memory.h" 2414f11a20SMarkus Armbruster #include "hw/qdev-core.h" 250bf4d77eSNicholas Piggin 260bf4d77eSNicholas Piggin #define TYPE_PNV_SBE "pnv-sbe" 270bf4d77eSNicholas Piggin OBJECT_DECLARE_TYPE(PnvSBE, PnvSBEClass, PNV_SBE) 280bf4d77eSNicholas Piggin #define TYPE_PNV9_SBE TYPE_PNV_SBE "-POWER9" 290bf4d77eSNicholas Piggin DECLARE_INSTANCE_CHECKER(PnvSBE, PNV9_SBE, TYPE_PNV9_SBE) 300bf4d77eSNicholas Piggin #define TYPE_PNV10_SBE TYPE_PNV_SBE "-POWER10" 310bf4d77eSNicholas Piggin DECLARE_INSTANCE_CHECKER(PnvSBE, PNV10_SBE, TYPE_PNV10_SBE) 320bf4d77eSNicholas Piggin 330bf4d77eSNicholas Piggin struct PnvSBE { 340bf4d77eSNicholas Piggin DeviceState xd; 350bf4d77eSNicholas Piggin 360bf4d77eSNicholas Piggin uint64_t mbox[8]; 370bf4d77eSNicholas Piggin uint64_t sbe_doorbell; 380bf4d77eSNicholas Piggin uint64_t host_doorbell; 390bf4d77eSNicholas Piggin 400bf4d77eSNicholas Piggin qemu_irq psi_irq; 410bf4d77eSNicholas Piggin QEMUTimer *timer; 420bf4d77eSNicholas Piggin 430bf4d77eSNicholas Piggin MemoryRegion xscom_mbox_regs; 440bf4d77eSNicholas Piggin MemoryRegion xscom_ctrl_regs; 450bf4d77eSNicholas Piggin }; 460bf4d77eSNicholas Piggin 470bf4d77eSNicholas Piggin struct PnvSBEClass { 480bf4d77eSNicholas Piggin DeviceClass parent_class; 490bf4d77eSNicholas Piggin 500bf4d77eSNicholas Piggin int xscom_ctrl_size; 510bf4d77eSNicholas Piggin int xscom_mbox_size; 520bf4d77eSNicholas Piggin const MemoryRegionOps *xscom_ctrl_ops; 530bf4d77eSNicholas Piggin const MemoryRegionOps *xscom_mbox_ops; 540bf4d77eSNicholas Piggin }; 550bf4d77eSNicholas Piggin 560bf4d77eSNicholas Piggin #endif /* PPC_PNV_SBE_H */ 57