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