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