1*5c23704eSSong Gao /* SPDX-License-Identifier: GPL-2.0-or-later */
2*5c23704eSSong Gao /*
3*5c23704eSSong Gao  * Copyright (c) 2021 Loongson Technology Corporation Limited
4*5c23704eSSong Gao  *
5*5c23704eSSong Gao  * Helpers for IOCSR reads/writes
6*5c23704eSSong Gao  */
7*5c23704eSSong Gao 
8*5c23704eSSong Gao #include "qemu/osdep.h"
9*5c23704eSSong Gao #include "cpu.h"
10*5c23704eSSong Gao #include "qemu/host-utils.h"
11*5c23704eSSong Gao #include "exec/helper-proto.h"
12*5c23704eSSong Gao #include "exec/exec-all.h"
13*5c23704eSSong Gao #include "exec/cpu_ldst.h"
14*5c23704eSSong Gao 
15*5c23704eSSong Gao #define GET_MEMTXATTRS(cas) \
16*5c23704eSSong Gao         ((MemTxAttrs){.requester_id = env_cpu(cas)->cpu_index})
17*5c23704eSSong Gao 
18*5c23704eSSong Gao uint64_t helper_iocsrrd_b(CPULoongArchState *env, target_ulong r_addr)
19*5c23704eSSong Gao {
20*5c23704eSSong Gao     return address_space_ldub(&env->address_space_iocsr, r_addr,
21*5c23704eSSong Gao                               GET_MEMTXATTRS(env), NULL);
22*5c23704eSSong Gao }
23*5c23704eSSong Gao 
24*5c23704eSSong Gao uint64_t helper_iocsrrd_h(CPULoongArchState *env, target_ulong r_addr)
25*5c23704eSSong Gao {
26*5c23704eSSong Gao     return address_space_lduw(&env->address_space_iocsr, r_addr,
27*5c23704eSSong Gao                               GET_MEMTXATTRS(env), NULL);
28*5c23704eSSong Gao }
29*5c23704eSSong Gao 
30*5c23704eSSong Gao uint64_t helper_iocsrrd_w(CPULoongArchState *env, target_ulong r_addr)
31*5c23704eSSong Gao {
32*5c23704eSSong Gao     return address_space_ldl(&env->address_space_iocsr, r_addr,
33*5c23704eSSong Gao                              GET_MEMTXATTRS(env), NULL);
34*5c23704eSSong Gao }
35*5c23704eSSong Gao 
36*5c23704eSSong Gao uint64_t helper_iocsrrd_d(CPULoongArchState *env, target_ulong r_addr)
37*5c23704eSSong Gao {
38*5c23704eSSong Gao     return address_space_ldq(&env->address_space_iocsr, r_addr,
39*5c23704eSSong Gao                              GET_MEMTXATTRS(env), NULL);
40*5c23704eSSong Gao }
41*5c23704eSSong Gao 
42*5c23704eSSong Gao void helper_iocsrwr_b(CPULoongArchState *env, target_ulong w_addr,
43*5c23704eSSong Gao                       target_ulong val)
44*5c23704eSSong Gao {
45*5c23704eSSong Gao     address_space_stb(&env->address_space_iocsr, w_addr,
46*5c23704eSSong Gao                       val, GET_MEMTXATTRS(env), NULL);
47*5c23704eSSong Gao }
48*5c23704eSSong Gao 
49*5c23704eSSong Gao void helper_iocsrwr_h(CPULoongArchState *env, target_ulong w_addr,
50*5c23704eSSong Gao                       target_ulong val)
51*5c23704eSSong Gao {
52*5c23704eSSong Gao     address_space_stw(&env->address_space_iocsr, w_addr,
53*5c23704eSSong Gao                       val, GET_MEMTXATTRS(env), NULL);
54*5c23704eSSong Gao }
55*5c23704eSSong Gao 
56*5c23704eSSong Gao void helper_iocsrwr_w(CPULoongArchState *env, target_ulong w_addr,
57*5c23704eSSong Gao                       target_ulong val)
58*5c23704eSSong Gao {
59*5c23704eSSong Gao     address_space_stl(&env->address_space_iocsr, w_addr,
60*5c23704eSSong Gao                       val, GET_MEMTXATTRS(env), NULL);
61*5c23704eSSong Gao }
62*5c23704eSSong Gao 
63*5c23704eSSong Gao void helper_iocsrwr_d(CPULoongArchState *env, target_ulong w_addr,
64*5c23704eSSong Gao                       target_ulong val)
65*5c23704eSSong Gao {
66*5c23704eSSong Gao     address_space_stq(&env->address_space_iocsr, w_addr,
67*5c23704eSSong Gao                       val, GET_MEMTXATTRS(env), NULL);
68*5c23704eSSong Gao }
69