1*70eb9f9cSBin Meng /* 2*70eb9f9cSBin Meng * QEMU RISCV Host Target Interface (HTIF) Emulation 3*70eb9f9cSBin Meng * 4*70eb9f9cSBin Meng * Copyright (c) 2016-2017 Sagar Karandikar, sagark@eecs.berkeley.edu 5*70eb9f9cSBin Meng * Copyright (c) 2017-2018 SiFive, Inc. 6*70eb9f9cSBin Meng * 7*70eb9f9cSBin Meng * This program is free software; you can redistribute it and/or modify it 8*70eb9f9cSBin Meng * under the terms and conditions of the GNU General Public License, 9*70eb9f9cSBin Meng * version 2 or later, as published by the Free Software Foundation. 10*70eb9f9cSBin Meng * 11*70eb9f9cSBin Meng * This program is distributed in the hope it will be useful, but WITHOUT 12*70eb9f9cSBin Meng * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13*70eb9f9cSBin Meng * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 14*70eb9f9cSBin Meng * more details. 15*70eb9f9cSBin Meng * 16*70eb9f9cSBin Meng * You should have received a copy of the GNU General Public License along with 17*70eb9f9cSBin Meng * this program. If not, see <http://www.gnu.org/licenses/>. 18*70eb9f9cSBin Meng */ 19*70eb9f9cSBin Meng 20*70eb9f9cSBin Meng #ifndef HW_RISCV_HTIF_H 21*70eb9f9cSBin Meng #define HW_RISCV_HTIF_H 22*70eb9f9cSBin Meng 23*70eb9f9cSBin Meng #include "chardev/char.h" 24*70eb9f9cSBin Meng #include "chardev/char-fe.h" 25*70eb9f9cSBin Meng #include "exec/memory.h" 26*70eb9f9cSBin Meng #include "target/riscv/cpu.h" 27*70eb9f9cSBin Meng 28*70eb9f9cSBin Meng #define TYPE_HTIF_UART "riscv.htif.uart" 29*70eb9f9cSBin Meng 30*70eb9f9cSBin Meng typedef struct HTIFState { 31*70eb9f9cSBin Meng int allow_tohost; 32*70eb9f9cSBin Meng int fromhost_inprogress; 33*70eb9f9cSBin Meng 34*70eb9f9cSBin Meng hwaddr tohost_offset; 35*70eb9f9cSBin Meng hwaddr fromhost_offset; 36*70eb9f9cSBin Meng uint64_t tohost_size; 37*70eb9f9cSBin Meng uint64_t fromhost_size; 38*70eb9f9cSBin Meng MemoryRegion mmio; 39*70eb9f9cSBin Meng MemoryRegion *address_space; 40*70eb9f9cSBin Meng MemoryRegion *main_mem; 41*70eb9f9cSBin Meng void *main_mem_ram_ptr; 42*70eb9f9cSBin Meng 43*70eb9f9cSBin Meng CPURISCVState *env; 44*70eb9f9cSBin Meng CharBackend chr; 45*70eb9f9cSBin Meng uint64_t pending_read; 46*70eb9f9cSBin Meng } HTIFState; 47*70eb9f9cSBin Meng 48*70eb9f9cSBin Meng extern const VMStateDescription vmstate_htif; 49*70eb9f9cSBin Meng extern const MemoryRegionOps htif_io_ops; 50*70eb9f9cSBin Meng 51*70eb9f9cSBin Meng /* HTIF symbol callback */ 52*70eb9f9cSBin Meng void htif_symbol_callback(const char *st_name, int st_info, uint64_t st_value, 53*70eb9f9cSBin Meng uint64_t st_size); 54*70eb9f9cSBin Meng 55*70eb9f9cSBin Meng /* legacy pre qom */ 56*70eb9f9cSBin Meng HTIFState *htif_mm_init(MemoryRegion *address_space, MemoryRegion *main_mem, 57*70eb9f9cSBin Meng CPURISCVState *env, Chardev *chr); 58*70eb9f9cSBin Meng 59*70eb9f9cSBin Meng #endif 60