xref: /openbmc/qemu/include/hw/char/riscv_htif.h (revision 70eb9f9cd1c0b519b31df8ab08ee2198b0e16176)
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