xref: /qemu/include/hw/ppc/pnv_sbe.h (revision fc524567087c2537b5103cdfc1d41e4f442892b6)
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