1*5bf6f1acSAlistair Francis /* 2*5bf6f1acSAlistair Francis * SiFive PWM 3*5bf6f1acSAlistair Francis * 4*5bf6f1acSAlistair Francis * Copyright (c) 2020 Western Digital 5*5bf6f1acSAlistair Francis * 6*5bf6f1acSAlistair Francis * Author: Alistair Francis <alistair.francis@wdc.com> 7*5bf6f1acSAlistair Francis * 8*5bf6f1acSAlistair Francis * Permission is hereby granted, free of charge, to any person obtaining a copy 9*5bf6f1acSAlistair Francis * of this software and associated documentation files (the "Software"), to deal 10*5bf6f1acSAlistair Francis * in the Software without restriction, including without limitation the rights 11*5bf6f1acSAlistair Francis * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12*5bf6f1acSAlistair Francis * copies of the Software, and to permit persons to whom the Software is 13*5bf6f1acSAlistair Francis * furnished to do so, subject to the following conditions: 14*5bf6f1acSAlistair Francis * 15*5bf6f1acSAlistair Francis * The above copyright notice and this permission notice shall be included in 16*5bf6f1acSAlistair Francis * all copies or substantial portions of the Software. 17*5bf6f1acSAlistair Francis * 18*5bf6f1acSAlistair Francis * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19*5bf6f1acSAlistair Francis * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20*5bf6f1acSAlistair Francis * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21*5bf6f1acSAlistair Francis * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22*5bf6f1acSAlistair Francis * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23*5bf6f1acSAlistair Francis * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24*5bf6f1acSAlistair Francis * THE SOFTWARE. 25*5bf6f1acSAlistair Francis */ 26*5bf6f1acSAlistair Francis 27*5bf6f1acSAlistair Francis #ifndef HW_SIFIVE_PWM_H 28*5bf6f1acSAlistair Francis #define HW_SIFIVE_PWM_H 29*5bf6f1acSAlistair Francis 30*5bf6f1acSAlistair Francis #include "hw/sysbus.h" 31*5bf6f1acSAlistair Francis #include "qemu/timer.h" 32*5bf6f1acSAlistair Francis #include "qom/object.h" 33*5bf6f1acSAlistair Francis 34*5bf6f1acSAlistair Francis #define TYPE_SIFIVE_PWM "sifive-pwm" 35*5bf6f1acSAlistair Francis 36*5bf6f1acSAlistair Francis #define SIFIVE_PWM(obj) \ 37*5bf6f1acSAlistair Francis OBJECT_CHECK(SiFivePwmState, (obj), TYPE_SIFIVE_PWM) 38*5bf6f1acSAlistair Francis 39*5bf6f1acSAlistair Francis #define SIFIVE_PWM_CHANS 4 40*5bf6f1acSAlistair Francis #define SIFIVE_PWM_IRQS SIFIVE_PWM_CHANS 41*5bf6f1acSAlistair Francis 42*5bf6f1acSAlistair Francis typedef struct SiFivePwmState { 43*5bf6f1acSAlistair Francis /* <private> */ 44*5bf6f1acSAlistair Francis SysBusDevice parent_obj; 45*5bf6f1acSAlistair Francis 46*5bf6f1acSAlistair Francis /* <public> */ 47*5bf6f1acSAlistair Francis MemoryRegion mmio; 48*5bf6f1acSAlistair Francis QEMUTimer timer[SIFIVE_PWM_CHANS]; 49*5bf6f1acSAlistair Francis /* 50*5bf6f1acSAlistair Francis * if en bit(s) set, is the number of ticks when pwmcount was 0 51*5bf6f1acSAlistair Francis * if en bit(s) not set, is the number of ticks in pwmcount 52*5bf6f1acSAlistair Francis */ 53*5bf6f1acSAlistair Francis uint64_t tick_offset; 54*5bf6f1acSAlistair Francis uint64_t freq_hz; 55*5bf6f1acSAlistair Francis 56*5bf6f1acSAlistair Francis uint32_t pwmcfg; 57*5bf6f1acSAlistair Francis uint32_t pwmcmp[SIFIVE_PWM_CHANS]; 58*5bf6f1acSAlistair Francis 59*5bf6f1acSAlistair Francis qemu_irq irqs[SIFIVE_PWM_IRQS]; 60*5bf6f1acSAlistair Francis } SiFivePwmState; 61*5bf6f1acSAlistair Francis 62*5bf6f1acSAlistair Francis #endif /* HW_SIFIVE_PWM_H */ 63