1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu /*! 8*91f16700Schasinglulu * File containing client-side RPC functions for the RM service. These 9*91f16700Schasinglulu * functions are ported to clients that communicate to the SC. 10*91f16700Schasinglulu * 11*91f16700Schasinglulu * @addtogroup RM_SVC 12*91f16700Schasinglulu * @{ 13*91f16700Schasinglulu */ 14*91f16700Schasinglulu 15*91f16700Schasinglulu /* Includes */ 16*91f16700Schasinglulu 17*91f16700Schasinglulu #include <stdlib.h> 18*91f16700Schasinglulu 19*91f16700Schasinglulu #include <sci/sci_types.h> 20*91f16700Schasinglulu #include <sci/svc/rm/sci_rm_api.h> 21*91f16700Schasinglulu #include <sci/sci_rpc.h> 22*91f16700Schasinglulu 23*91f16700Schasinglulu #include "sci_rm_rpc.h" 24*91f16700Schasinglulu 25*91f16700Schasinglulu /* Local Defines */ 26*91f16700Schasinglulu 27*91f16700Schasinglulu /* Local Types */ 28*91f16700Schasinglulu 29*91f16700Schasinglulu /* Local Functions */ 30*91f16700Schasinglulu 31*91f16700Schasinglulu sc_err_t sc_rm_partition_alloc(sc_ipc_t ipc, sc_rm_pt_t *pt, sc_bool_t secure, 32*91f16700Schasinglulu sc_bool_t isolated, sc_bool_t restricted, 33*91f16700Schasinglulu sc_bool_t grant, sc_bool_t coherent) 34*91f16700Schasinglulu { 35*91f16700Schasinglulu sc_rpc_msg_t msg; 36*91f16700Schasinglulu uint8_t result; 37*91f16700Schasinglulu 38*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 39*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 40*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_PARTITION_ALLOC; 41*91f16700Schasinglulu RPC_U8(&msg, 0U) = (uint8_t)secure; 42*91f16700Schasinglulu RPC_U8(&msg, 1U) = (uint8_t)isolated; 43*91f16700Schasinglulu RPC_U8(&msg, 2U) = (uint8_t)restricted; 44*91f16700Schasinglulu RPC_U8(&msg, 3U) = (uint8_t)grant; 45*91f16700Schasinglulu RPC_U8(&msg, 4U) = (uint8_t)coherent; 46*91f16700Schasinglulu RPC_SIZE(&msg) = 3U; 47*91f16700Schasinglulu 48*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 49*91f16700Schasinglulu 50*91f16700Schasinglulu result = RPC_R8(&msg); 51*91f16700Schasinglulu if (pt != NULL) { 52*91f16700Schasinglulu *pt = RPC_U8(&msg, 0U); 53*91f16700Schasinglulu } 54*91f16700Schasinglulu 55*91f16700Schasinglulu return (sc_err_t)result; 56*91f16700Schasinglulu } 57*91f16700Schasinglulu 58*91f16700Schasinglulu sc_err_t sc_rm_set_confidential(sc_ipc_t ipc, sc_rm_pt_t pt, sc_bool_t retro) 59*91f16700Schasinglulu { 60*91f16700Schasinglulu sc_rpc_msg_t msg; 61*91f16700Schasinglulu uint8_t result; 62*91f16700Schasinglulu 63*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 64*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 65*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_SET_CONFIDENTIAL; 66*91f16700Schasinglulu RPC_U8(&msg, 0U) = (uint8_t)pt; 67*91f16700Schasinglulu RPC_U8(&msg, 1U) = (uint8_t)retro; 68*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 69*91f16700Schasinglulu 70*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 71*91f16700Schasinglulu 72*91f16700Schasinglulu result = RPC_R8(&msg); 73*91f16700Schasinglulu return (sc_err_t)result; 74*91f16700Schasinglulu } 75*91f16700Schasinglulu 76*91f16700Schasinglulu sc_err_t sc_rm_partition_free(sc_ipc_t ipc, sc_rm_pt_t pt) 77*91f16700Schasinglulu { 78*91f16700Schasinglulu sc_rpc_msg_t msg; 79*91f16700Schasinglulu uint8_t result; 80*91f16700Schasinglulu 81*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 82*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 83*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_PARTITION_FREE; 84*91f16700Schasinglulu RPC_U8(&msg, 0U) = (uint8_t)pt; 85*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 86*91f16700Schasinglulu 87*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 88*91f16700Schasinglulu 89*91f16700Schasinglulu result = RPC_R8(&msg); 90*91f16700Schasinglulu return (sc_err_t)result; 91*91f16700Schasinglulu } 92*91f16700Schasinglulu 93*91f16700Schasinglulu sc_rm_did_t sc_rm_get_did(sc_ipc_t ipc) 94*91f16700Schasinglulu { 95*91f16700Schasinglulu sc_rpc_msg_t msg; 96*91f16700Schasinglulu uint8_t result; 97*91f16700Schasinglulu 98*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 99*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 100*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_GET_DID; 101*91f16700Schasinglulu RPC_SIZE(&msg) = 1U; 102*91f16700Schasinglulu 103*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 104*91f16700Schasinglulu 105*91f16700Schasinglulu result = RPC_R8(&msg); 106*91f16700Schasinglulu return (sc_rm_did_t) result; 107*91f16700Schasinglulu } 108*91f16700Schasinglulu 109*91f16700Schasinglulu sc_err_t sc_rm_partition_static(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rm_did_t did) 110*91f16700Schasinglulu { 111*91f16700Schasinglulu sc_rpc_msg_t msg; 112*91f16700Schasinglulu uint8_t result; 113*91f16700Schasinglulu 114*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 115*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 116*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_PARTITION_STATIC; 117*91f16700Schasinglulu RPC_U8(&msg, 0U) = (uint8_t)pt; 118*91f16700Schasinglulu RPC_U8(&msg, 1U) = (uint8_t)did; 119*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 120*91f16700Schasinglulu 121*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 122*91f16700Schasinglulu 123*91f16700Schasinglulu result = RPC_R8(&msg); 124*91f16700Schasinglulu return (sc_err_t)result; 125*91f16700Schasinglulu } 126*91f16700Schasinglulu 127*91f16700Schasinglulu sc_err_t sc_rm_partition_lock(sc_ipc_t ipc, sc_rm_pt_t pt) 128*91f16700Schasinglulu { 129*91f16700Schasinglulu sc_rpc_msg_t msg; 130*91f16700Schasinglulu uint8_t result; 131*91f16700Schasinglulu 132*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 133*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 134*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_PARTITION_LOCK; 135*91f16700Schasinglulu RPC_U8(&msg, 0U) = (uint8_t)pt; 136*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 137*91f16700Schasinglulu 138*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 139*91f16700Schasinglulu 140*91f16700Schasinglulu result = RPC_R8(&msg); 141*91f16700Schasinglulu return (sc_err_t)result; 142*91f16700Schasinglulu } 143*91f16700Schasinglulu 144*91f16700Schasinglulu sc_err_t sc_rm_get_partition(sc_ipc_t ipc, sc_rm_pt_t *pt) 145*91f16700Schasinglulu { 146*91f16700Schasinglulu sc_rpc_msg_t msg; 147*91f16700Schasinglulu uint8_t result; 148*91f16700Schasinglulu 149*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 150*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 151*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_GET_PARTITION; 152*91f16700Schasinglulu RPC_SIZE(&msg) = 1U; 153*91f16700Schasinglulu 154*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 155*91f16700Schasinglulu 156*91f16700Schasinglulu result = RPC_R8(&msg); 157*91f16700Schasinglulu if (pt != NULL) { 158*91f16700Schasinglulu *pt = RPC_U8(&msg, 0U); 159*91f16700Schasinglulu } 160*91f16700Schasinglulu 161*91f16700Schasinglulu return (sc_err_t)result; 162*91f16700Schasinglulu } 163*91f16700Schasinglulu 164*91f16700Schasinglulu sc_err_t sc_rm_set_parent(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rm_pt_t pt_parent) 165*91f16700Schasinglulu { 166*91f16700Schasinglulu sc_rpc_msg_t msg; 167*91f16700Schasinglulu uint8_t result; 168*91f16700Schasinglulu 169*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 170*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 171*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_SET_PARENT; 172*91f16700Schasinglulu RPC_U8(&msg, 0U) = (uint8_t)pt; 173*91f16700Schasinglulu RPC_U8(&msg, 1U) = (uint8_t)pt_parent; 174*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 175*91f16700Schasinglulu 176*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 177*91f16700Schasinglulu 178*91f16700Schasinglulu result = RPC_R8(&msg); 179*91f16700Schasinglulu return (sc_err_t)result; 180*91f16700Schasinglulu } 181*91f16700Schasinglulu 182*91f16700Schasinglulu sc_err_t sc_rm_move_all(sc_ipc_t ipc, sc_rm_pt_t pt_src, sc_rm_pt_t pt_dst, 183*91f16700Schasinglulu sc_bool_t move_rsrc, sc_bool_t move_pads) 184*91f16700Schasinglulu { 185*91f16700Schasinglulu sc_rpc_msg_t msg; 186*91f16700Schasinglulu uint8_t result; 187*91f16700Schasinglulu 188*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 189*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 190*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_MOVE_ALL; 191*91f16700Schasinglulu RPC_U8(&msg, 0U) = (uint8_t)pt_src; 192*91f16700Schasinglulu RPC_U8(&msg, 1U) = (uint8_t)pt_dst; 193*91f16700Schasinglulu RPC_U8(&msg, 2U) = (uint8_t)move_rsrc; 194*91f16700Schasinglulu RPC_U8(&msg, 3U) = (uint8_t)move_pads; 195*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 196*91f16700Schasinglulu 197*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 198*91f16700Schasinglulu 199*91f16700Schasinglulu result = RPC_R8(&msg); 200*91f16700Schasinglulu return (sc_err_t)result; 201*91f16700Schasinglulu } 202*91f16700Schasinglulu 203*91f16700Schasinglulu sc_err_t sc_rm_assign_resource(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rsrc_t resource) 204*91f16700Schasinglulu { 205*91f16700Schasinglulu sc_rpc_msg_t msg; 206*91f16700Schasinglulu uint8_t result; 207*91f16700Schasinglulu 208*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 209*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 210*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_ASSIGN_RESOURCE; 211*91f16700Schasinglulu RPC_U16(&msg, 0U) = (uint16_t)resource; 212*91f16700Schasinglulu RPC_U8(&msg, 2U) = (uint8_t)pt; 213*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 214*91f16700Schasinglulu 215*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 216*91f16700Schasinglulu 217*91f16700Schasinglulu result = RPC_R8(&msg); 218*91f16700Schasinglulu return (sc_err_t)result; 219*91f16700Schasinglulu } 220*91f16700Schasinglulu 221*91f16700Schasinglulu sc_err_t sc_rm_set_resource_movable(sc_ipc_t ipc, sc_rsrc_t resource_fst, 222*91f16700Schasinglulu sc_rsrc_t resource_lst, sc_bool_t movable) 223*91f16700Schasinglulu { 224*91f16700Schasinglulu sc_rpc_msg_t msg; 225*91f16700Schasinglulu uint8_t result; 226*91f16700Schasinglulu 227*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 228*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 229*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_SET_RESOURCE_MOVABLE; 230*91f16700Schasinglulu RPC_U16(&msg, 0U) = (uint16_t)resource_fst; 231*91f16700Schasinglulu RPC_U16(&msg, 2U) = (uint16_t)resource_lst; 232*91f16700Schasinglulu RPC_U8(&msg, 4U) = (uint8_t)movable; 233*91f16700Schasinglulu RPC_SIZE(&msg) = 3U; 234*91f16700Schasinglulu 235*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 236*91f16700Schasinglulu 237*91f16700Schasinglulu result = RPC_R8(&msg); 238*91f16700Schasinglulu return (sc_err_t)result; 239*91f16700Schasinglulu } 240*91f16700Schasinglulu 241*91f16700Schasinglulu sc_err_t sc_rm_set_subsys_rsrc_movable(sc_ipc_t ipc, sc_rsrc_t resource, 242*91f16700Schasinglulu sc_bool_t movable) 243*91f16700Schasinglulu { 244*91f16700Schasinglulu sc_rpc_msg_t msg; 245*91f16700Schasinglulu uint8_t result; 246*91f16700Schasinglulu 247*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 248*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 249*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_SET_SUBSYS_RSRC_MOVABLE; 250*91f16700Schasinglulu RPC_U16(&msg, 0U) = (uint16_t)resource; 251*91f16700Schasinglulu RPC_U8(&msg, 2U) = (uint8_t)movable; 252*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 253*91f16700Schasinglulu 254*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 255*91f16700Schasinglulu 256*91f16700Schasinglulu result = RPC_R8(&msg); 257*91f16700Schasinglulu return (sc_err_t)result; 258*91f16700Schasinglulu } 259*91f16700Schasinglulu 260*91f16700Schasinglulu sc_err_t sc_rm_set_master_attributes(sc_ipc_t ipc, sc_rsrc_t resource, 261*91f16700Schasinglulu sc_rm_spa_t sa, sc_rm_spa_t pa, 262*91f16700Schasinglulu sc_bool_t smmu_bypass) 263*91f16700Schasinglulu { 264*91f16700Schasinglulu sc_rpc_msg_t msg; 265*91f16700Schasinglulu uint8_t result; 266*91f16700Schasinglulu 267*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 268*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 269*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_SET_MASTER_ATTRIBUTES; 270*91f16700Schasinglulu RPC_U16(&msg, 0U) = (uint16_t)resource; 271*91f16700Schasinglulu RPC_U8(&msg, 2U) = (uint8_t)sa; 272*91f16700Schasinglulu RPC_U8(&msg, 3U) = (uint8_t)pa; 273*91f16700Schasinglulu RPC_U8(&msg, 4U) = (uint8_t)smmu_bypass; 274*91f16700Schasinglulu RPC_SIZE(&msg) = 3U; 275*91f16700Schasinglulu 276*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 277*91f16700Schasinglulu 278*91f16700Schasinglulu result = RPC_R8(&msg); 279*91f16700Schasinglulu return (sc_err_t)result; 280*91f16700Schasinglulu } 281*91f16700Schasinglulu 282*91f16700Schasinglulu sc_err_t sc_rm_set_master_sid(sc_ipc_t ipc, sc_rsrc_t resource, sc_rm_sid_t sid) 283*91f16700Schasinglulu { 284*91f16700Schasinglulu sc_rpc_msg_t msg; 285*91f16700Schasinglulu uint8_t result; 286*91f16700Schasinglulu 287*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 288*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 289*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_SET_MASTER_SID; 290*91f16700Schasinglulu RPC_U16(&msg, 0U) = (uint16_t)resource; 291*91f16700Schasinglulu RPC_U16(&msg, 2U) = (uint16_t)sid; 292*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 293*91f16700Schasinglulu 294*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 295*91f16700Schasinglulu 296*91f16700Schasinglulu result = RPC_R8(&msg); 297*91f16700Schasinglulu return (sc_err_t)result; 298*91f16700Schasinglulu } 299*91f16700Schasinglulu 300*91f16700Schasinglulu sc_err_t sc_rm_set_peripheral_permissions(sc_ipc_t ipc, sc_rsrc_t resource, 301*91f16700Schasinglulu sc_rm_pt_t pt, sc_rm_perm_t perm) 302*91f16700Schasinglulu { 303*91f16700Schasinglulu sc_rpc_msg_t msg; 304*91f16700Schasinglulu uint8_t result; 305*91f16700Schasinglulu 306*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 307*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 308*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_SET_PERIPHERAL_PERMISSIONS; 309*91f16700Schasinglulu RPC_U16(&msg, 0U) = (uint16_t)resource; 310*91f16700Schasinglulu RPC_U8(&msg, 2U) = (uint8_t)pt; 311*91f16700Schasinglulu RPC_U8(&msg, 3U) = (uint8_t)perm; 312*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 313*91f16700Schasinglulu 314*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 315*91f16700Schasinglulu 316*91f16700Schasinglulu result = RPC_R8(&msg); 317*91f16700Schasinglulu return (sc_err_t)result; 318*91f16700Schasinglulu } 319*91f16700Schasinglulu 320*91f16700Schasinglulu sc_bool_t sc_rm_is_resource_owned(sc_ipc_t ipc, sc_rsrc_t resource) 321*91f16700Schasinglulu { 322*91f16700Schasinglulu sc_rpc_msg_t msg; 323*91f16700Schasinglulu uint8_t result; 324*91f16700Schasinglulu 325*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 326*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 327*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_IS_RESOURCE_OWNED; 328*91f16700Schasinglulu RPC_U16(&msg, 0U) = (uint16_t)resource; 329*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 330*91f16700Schasinglulu 331*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 332*91f16700Schasinglulu 333*91f16700Schasinglulu result = RPC_R8(&msg); 334*91f16700Schasinglulu return (sc_bool_t)result; 335*91f16700Schasinglulu } 336*91f16700Schasinglulu 337*91f16700Schasinglulu sc_bool_t sc_rm_is_resource_master(sc_ipc_t ipc, sc_rsrc_t resource) 338*91f16700Schasinglulu { 339*91f16700Schasinglulu sc_rpc_msg_t msg; 340*91f16700Schasinglulu uint8_t result; 341*91f16700Schasinglulu 342*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 343*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 344*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_IS_RESOURCE_MASTER; 345*91f16700Schasinglulu RPC_U16(&msg, 0U) = (uint16_t)resource; 346*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 347*91f16700Schasinglulu 348*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 349*91f16700Schasinglulu 350*91f16700Schasinglulu result = RPC_R8(&msg); 351*91f16700Schasinglulu return (sc_bool_t)result; 352*91f16700Schasinglulu } 353*91f16700Schasinglulu 354*91f16700Schasinglulu sc_bool_t sc_rm_is_resource_peripheral(sc_ipc_t ipc, sc_rsrc_t resource) 355*91f16700Schasinglulu { 356*91f16700Schasinglulu sc_rpc_msg_t msg; 357*91f16700Schasinglulu uint8_t result; 358*91f16700Schasinglulu 359*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 360*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 361*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_IS_RESOURCE_PERIPHERAL; 362*91f16700Schasinglulu RPC_U16(&msg, 0U) = (uint16_t)resource; 363*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 364*91f16700Schasinglulu 365*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 366*91f16700Schasinglulu 367*91f16700Schasinglulu result = RPC_R8(&msg); 368*91f16700Schasinglulu return (sc_bool_t)result; 369*91f16700Schasinglulu } 370*91f16700Schasinglulu 371*91f16700Schasinglulu sc_err_t sc_rm_get_resource_info(sc_ipc_t ipc, sc_rsrc_t resource, 372*91f16700Schasinglulu sc_rm_sid_t *sid) 373*91f16700Schasinglulu { 374*91f16700Schasinglulu sc_rpc_msg_t msg; 375*91f16700Schasinglulu uint8_t result; 376*91f16700Schasinglulu 377*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 378*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 379*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_GET_RESOURCE_INFO; 380*91f16700Schasinglulu RPC_U16(&msg, 0U) = (uint16_t)resource; 381*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 382*91f16700Schasinglulu 383*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 384*91f16700Schasinglulu 385*91f16700Schasinglulu if (sid != NULL) { 386*91f16700Schasinglulu *sid = RPC_U16(&msg, 0U); 387*91f16700Schasinglulu } 388*91f16700Schasinglulu 389*91f16700Schasinglulu result = RPC_R8(&msg); 390*91f16700Schasinglulu return (sc_err_t)result; 391*91f16700Schasinglulu } 392*91f16700Schasinglulu 393*91f16700Schasinglulu sc_err_t sc_rm_memreg_alloc(sc_ipc_t ipc, sc_rm_mr_t *mr, 394*91f16700Schasinglulu sc_faddr_t addr_start, sc_faddr_t addr_end) 395*91f16700Schasinglulu { 396*91f16700Schasinglulu sc_rpc_msg_t msg; 397*91f16700Schasinglulu uint8_t result; 398*91f16700Schasinglulu 399*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 400*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 401*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_MEMREG_ALLOC; 402*91f16700Schasinglulu RPC_U32(&msg, 0U) = (uint32_t)(addr_start >> 32U); 403*91f16700Schasinglulu RPC_U32(&msg, 4U) = (uint32_t)addr_start; 404*91f16700Schasinglulu RPC_U32(&msg, 8U) = (uint32_t)(addr_end >> 32U); 405*91f16700Schasinglulu RPC_U32(&msg, 12U) = (uint32_t)addr_end; 406*91f16700Schasinglulu RPC_SIZE(&msg) = 5U; 407*91f16700Schasinglulu 408*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 409*91f16700Schasinglulu 410*91f16700Schasinglulu result = RPC_R8(&msg); 411*91f16700Schasinglulu if (mr != NULL) { 412*91f16700Schasinglulu *mr = RPC_U8(&msg, 0U); 413*91f16700Schasinglulu } 414*91f16700Schasinglulu 415*91f16700Schasinglulu return (sc_err_t)result; 416*91f16700Schasinglulu } 417*91f16700Schasinglulu 418*91f16700Schasinglulu sc_err_t sc_rm_memreg_split(sc_ipc_t ipc, sc_rm_mr_t mr, 419*91f16700Schasinglulu sc_rm_mr_t *mr_ret, sc_faddr_t addr_start, 420*91f16700Schasinglulu sc_faddr_t addr_end) 421*91f16700Schasinglulu { 422*91f16700Schasinglulu sc_rpc_msg_t msg; 423*91f16700Schasinglulu uint8_t result; 424*91f16700Schasinglulu 425*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 426*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 427*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_MEMREG_SPLIT; 428*91f16700Schasinglulu RPC_U32(&msg, 0U) = (uint32_t)(addr_start >> 32U); 429*91f16700Schasinglulu RPC_U32(&msg, 4U) = (uint32_t)addr_start; 430*91f16700Schasinglulu RPC_U32(&msg, 8U) = (uint32_t)(addr_end >> 32U); 431*91f16700Schasinglulu RPC_U32(&msg, 12U) = (uint32_t)addr_end; 432*91f16700Schasinglulu RPC_U8(&msg, 16U) = (uint8_t)mr; 433*91f16700Schasinglulu RPC_SIZE(&msg) = 6U; 434*91f16700Schasinglulu 435*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 436*91f16700Schasinglulu 437*91f16700Schasinglulu result = RPC_R8(&msg); 438*91f16700Schasinglulu if (mr_ret != NULL) { 439*91f16700Schasinglulu *mr_ret = RPC_U8(&msg, 0U); 440*91f16700Schasinglulu } 441*91f16700Schasinglulu 442*91f16700Schasinglulu return (sc_err_t)result; 443*91f16700Schasinglulu } 444*91f16700Schasinglulu 445*91f16700Schasinglulu sc_err_t sc_rm_memreg_free(sc_ipc_t ipc, sc_rm_mr_t mr) 446*91f16700Schasinglulu { 447*91f16700Schasinglulu sc_rpc_msg_t msg; 448*91f16700Schasinglulu uint8_t result; 449*91f16700Schasinglulu 450*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 451*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 452*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_MEMREG_FREE; 453*91f16700Schasinglulu RPC_U8(&msg, 0U) = (uint8_t)mr; 454*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 455*91f16700Schasinglulu 456*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 457*91f16700Schasinglulu 458*91f16700Schasinglulu result = RPC_R8(&msg); 459*91f16700Schasinglulu return (sc_err_t)result; 460*91f16700Schasinglulu } 461*91f16700Schasinglulu 462*91f16700Schasinglulu sc_err_t sc_rm_find_memreg(sc_ipc_t ipc, sc_rm_mr_t *mr, 463*91f16700Schasinglulu sc_faddr_t addr_start, sc_faddr_t addr_end) 464*91f16700Schasinglulu { 465*91f16700Schasinglulu sc_rpc_msg_t msg; 466*91f16700Schasinglulu uint8_t result; 467*91f16700Schasinglulu 468*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 469*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 470*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_FIND_MEMREG; 471*91f16700Schasinglulu RPC_U32(&msg, 0U) = (uint32_t)(addr_start >> 32U); 472*91f16700Schasinglulu RPC_U32(&msg, 4U) = (uint32_t)addr_start; 473*91f16700Schasinglulu RPC_U32(&msg, 8U) = (uint32_t)(addr_end >> 32U); 474*91f16700Schasinglulu RPC_U32(&msg, 12U) = (uint32_t)addr_end; 475*91f16700Schasinglulu RPC_SIZE(&msg) = 5U; 476*91f16700Schasinglulu 477*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 478*91f16700Schasinglulu 479*91f16700Schasinglulu result = RPC_R8(&msg); 480*91f16700Schasinglulu if (mr != NULL) { 481*91f16700Schasinglulu *mr = RPC_U8(&msg, 0U); 482*91f16700Schasinglulu } 483*91f16700Schasinglulu 484*91f16700Schasinglulu return (sc_err_t)result; 485*91f16700Schasinglulu } 486*91f16700Schasinglulu 487*91f16700Schasinglulu sc_err_t sc_rm_assign_memreg(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rm_mr_t mr) 488*91f16700Schasinglulu { 489*91f16700Schasinglulu sc_rpc_msg_t msg; 490*91f16700Schasinglulu uint8_t result; 491*91f16700Schasinglulu 492*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 493*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 494*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_ASSIGN_MEMREG; 495*91f16700Schasinglulu RPC_U8(&msg, 0U) = (uint8_t)pt; 496*91f16700Schasinglulu RPC_U8(&msg, 1U) = (uint8_t)mr; 497*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 498*91f16700Schasinglulu 499*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 500*91f16700Schasinglulu 501*91f16700Schasinglulu result = RPC_R8(&msg); 502*91f16700Schasinglulu return (sc_err_t)result; 503*91f16700Schasinglulu } 504*91f16700Schasinglulu 505*91f16700Schasinglulu sc_err_t sc_rm_set_memreg_permissions(sc_ipc_t ipc, sc_rm_mr_t mr, 506*91f16700Schasinglulu sc_rm_pt_t pt, sc_rm_perm_t perm) 507*91f16700Schasinglulu { 508*91f16700Schasinglulu sc_rpc_msg_t msg; 509*91f16700Schasinglulu uint8_t result; 510*91f16700Schasinglulu 511*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 512*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 513*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_SET_MEMREG_PERMISSIONS; 514*91f16700Schasinglulu RPC_U8(&msg, 0U) = (uint8_t)mr; 515*91f16700Schasinglulu RPC_U8(&msg, 1U) = (uint8_t)pt; 516*91f16700Schasinglulu RPC_U8(&msg, 2U) = (uint8_t)perm; 517*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 518*91f16700Schasinglulu 519*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 520*91f16700Schasinglulu 521*91f16700Schasinglulu result = RPC_R8(&msg); 522*91f16700Schasinglulu return (sc_err_t)result; 523*91f16700Schasinglulu } 524*91f16700Schasinglulu 525*91f16700Schasinglulu sc_bool_t sc_rm_is_memreg_owned(sc_ipc_t ipc, sc_rm_mr_t mr) 526*91f16700Schasinglulu { 527*91f16700Schasinglulu sc_rpc_msg_t msg; 528*91f16700Schasinglulu uint8_t result; 529*91f16700Schasinglulu 530*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 531*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 532*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_IS_MEMREG_OWNED; 533*91f16700Schasinglulu RPC_U8(&msg, 0U) = (uint8_t)mr; 534*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 535*91f16700Schasinglulu 536*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 537*91f16700Schasinglulu 538*91f16700Schasinglulu result = RPC_R8(&msg); 539*91f16700Schasinglulu return (sc_bool_t)result; 540*91f16700Schasinglulu } 541*91f16700Schasinglulu 542*91f16700Schasinglulu sc_err_t sc_rm_get_memreg_info(sc_ipc_t ipc, sc_rm_mr_t mr, 543*91f16700Schasinglulu sc_faddr_t *addr_start, sc_faddr_t *addr_end) 544*91f16700Schasinglulu { 545*91f16700Schasinglulu sc_rpc_msg_t msg; 546*91f16700Schasinglulu uint8_t result; 547*91f16700Schasinglulu 548*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 549*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 550*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_GET_MEMREG_INFO; 551*91f16700Schasinglulu RPC_U8(&msg, 0U) = (uint8_t)mr; 552*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 553*91f16700Schasinglulu 554*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 555*91f16700Schasinglulu 556*91f16700Schasinglulu if (addr_start != NULL) { 557*91f16700Schasinglulu *addr_start = 558*91f16700Schasinglulu ((uint64_t) RPC_U32(&msg, 0U) << 32U) | RPC_U32(&msg, 4U); 559*91f16700Schasinglulu } 560*91f16700Schasinglulu 561*91f16700Schasinglulu if (addr_end != NULL) { 562*91f16700Schasinglulu *addr_end = 563*91f16700Schasinglulu ((uint64_t) RPC_U32(&msg, 8U) << 32U) | RPC_U32(&msg, 12U); 564*91f16700Schasinglulu } 565*91f16700Schasinglulu 566*91f16700Schasinglulu result = RPC_R8(&msg); 567*91f16700Schasinglulu return (sc_err_t)result; 568*91f16700Schasinglulu } 569*91f16700Schasinglulu 570*91f16700Schasinglulu sc_err_t sc_rm_assign_pad(sc_ipc_t ipc, sc_rm_pt_t pt, sc_pad_t pad) 571*91f16700Schasinglulu { 572*91f16700Schasinglulu sc_rpc_msg_t msg; 573*91f16700Schasinglulu uint8_t result; 574*91f16700Schasinglulu 575*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 576*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 577*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_ASSIGN_PAD; 578*91f16700Schasinglulu RPC_U16(&msg, 0U) = (uint16_t)pad; 579*91f16700Schasinglulu RPC_U8(&msg, 2U) = (uint8_t)pt; 580*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 581*91f16700Schasinglulu 582*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 583*91f16700Schasinglulu 584*91f16700Schasinglulu result = RPC_R8(&msg); 585*91f16700Schasinglulu return (sc_err_t)result; 586*91f16700Schasinglulu } 587*91f16700Schasinglulu 588*91f16700Schasinglulu sc_err_t sc_rm_set_pad_movable(sc_ipc_t ipc, sc_pad_t pad_fst, 589*91f16700Schasinglulu sc_pad_t pad_lst, sc_bool_t movable) 590*91f16700Schasinglulu { 591*91f16700Schasinglulu sc_rpc_msg_t msg; 592*91f16700Schasinglulu uint8_t result; 593*91f16700Schasinglulu 594*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 595*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 596*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_SET_PAD_MOVABLE; 597*91f16700Schasinglulu RPC_U16(&msg, 0U) = (uint16_t)pad_fst; 598*91f16700Schasinglulu RPC_U16(&msg, 2U) = (uint16_t)pad_lst; 599*91f16700Schasinglulu RPC_U8(&msg, 4U) = (uint8_t)movable; 600*91f16700Schasinglulu RPC_SIZE(&msg) = 3U; 601*91f16700Schasinglulu 602*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 603*91f16700Schasinglulu 604*91f16700Schasinglulu result = RPC_R8(&msg); 605*91f16700Schasinglulu return (sc_err_t)result; 606*91f16700Schasinglulu } 607*91f16700Schasinglulu 608*91f16700Schasinglulu sc_bool_t sc_rm_is_pad_owned(sc_ipc_t ipc, sc_pad_t pad) 609*91f16700Schasinglulu { 610*91f16700Schasinglulu sc_rpc_msg_t msg; 611*91f16700Schasinglulu uint8_t result; 612*91f16700Schasinglulu 613*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 614*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 615*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_IS_PAD_OWNED; 616*91f16700Schasinglulu RPC_U8(&msg, 0U) = (uint8_t)pad; 617*91f16700Schasinglulu RPC_SIZE(&msg) = 2U; 618*91f16700Schasinglulu 619*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 620*91f16700Schasinglulu 621*91f16700Schasinglulu result = RPC_R8(&msg); 622*91f16700Schasinglulu return (sc_bool_t)result; 623*91f16700Schasinglulu } 624*91f16700Schasinglulu 625*91f16700Schasinglulu void sc_rm_dump(sc_ipc_t ipc) 626*91f16700Schasinglulu { 627*91f16700Schasinglulu sc_rpc_msg_t msg; 628*91f16700Schasinglulu 629*91f16700Schasinglulu RPC_VER(&msg) = SC_RPC_VERSION; 630*91f16700Schasinglulu RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_RM; 631*91f16700Schasinglulu RPC_FUNC(&msg) = (uint8_t)RM_FUNC_DUMP; 632*91f16700Schasinglulu RPC_SIZE(&msg) = 1U; 633*91f16700Schasinglulu 634*91f16700Schasinglulu sc_call_rpc(ipc, &msg, SC_FALSE); 635*91f16700Schasinglulu } 636*91f16700Schasinglulu 637*91f16700Schasinglulu /**@}*/ 638