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