1c7f37bafSYoshinori Sato /* 2c7f37bafSYoshinori Sato * Renesas Compare-match timer Object 3c7f37bafSYoshinori Sato * 4c7f37bafSYoshinori Sato * Copyright (c) 2019 Yoshinori Sato 5c7f37bafSYoshinori Sato * 6c7f37bafSYoshinori Sato * SPDX-License-Identifier: GPL-2.0-or-later 7c7f37bafSYoshinori Sato */ 8c7f37bafSYoshinori Sato 9c7f37bafSYoshinori Sato #ifndef HW_TIMER_RENESAS_CMT_H 10c7f37bafSYoshinori Sato #define HW_TIMER_RENESAS_CMT_H 11c7f37bafSYoshinori Sato 12c7f37bafSYoshinori Sato #include "qemu/timer.h" 13c7f37bafSYoshinori Sato #include "hw/sysbus.h" 14db1015e9SEduardo Habkost #include "qom/object.h" 15c7f37bafSYoshinori Sato 16c7f37bafSYoshinori Sato #define TYPE_RENESAS_CMT "renesas-cmt" 17db1015e9SEduardo Habkost typedef struct RCMTState RCMTState; 18*8110fa1dSEduardo Habkost DECLARE_INSTANCE_CHECKER(RCMTState, RCMT, 19*8110fa1dSEduardo Habkost TYPE_RENESAS_CMT) 20c7f37bafSYoshinori Sato 21c7f37bafSYoshinori Sato enum { 22c7f37bafSYoshinori Sato CMT_CH = 2, 23c7f37bafSYoshinori Sato CMT_NR_IRQ = 1 * CMT_CH 24c7f37bafSYoshinori Sato }; 25c7f37bafSYoshinori Sato 26db1015e9SEduardo Habkost struct RCMTState { 27c7f37bafSYoshinori Sato /*< private >*/ 28c7f37bafSYoshinori Sato SysBusDevice parent_obj; 29c7f37bafSYoshinori Sato /*< public >*/ 30c7f37bafSYoshinori Sato 31c7f37bafSYoshinori Sato uint64_t input_freq; 32c7f37bafSYoshinori Sato MemoryRegion memory; 33c7f37bafSYoshinori Sato 34c7f37bafSYoshinori Sato uint16_t cmstr; 35c7f37bafSYoshinori Sato uint16_t cmcr[CMT_CH]; 36c7f37bafSYoshinori Sato uint16_t cmcnt[CMT_CH]; 37c7f37bafSYoshinori Sato uint16_t cmcor[CMT_CH]; 38c7f37bafSYoshinori Sato int64_t tick[CMT_CH]; 39c7f37bafSYoshinori Sato qemu_irq cmi[CMT_CH]; 40c7f37bafSYoshinori Sato QEMUTimer timer[CMT_CH]; 41db1015e9SEduardo Habkost }; 42c7f37bafSYoshinori Sato 43c7f37bafSYoshinori Sato #endif 44