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 * Header file containing the public API for the System Controller (SC) 9*91f16700Schasinglulu * Resource Management (RM) function. This includes functions for 10*91f16700Schasinglulu * partitioning resources, pads, and memory regions. 11*91f16700Schasinglulu * 12*91f16700Schasinglulu * @addtogroup RM_SVC (SVC) Resource Management Service 13*91f16700Schasinglulu * 14*91f16700Schasinglulu * Module for the Resource Management (RM) service. 15*91f16700Schasinglulu * 16*91f16700Schasinglulu * @includedoc rm/details.dox 17*91f16700Schasinglulu * 18*91f16700Schasinglulu * @{ 19*91f16700Schasinglulu */ 20*91f16700Schasinglulu 21*91f16700Schasinglulu #ifndef SCI_RM_API_H 22*91f16700Schasinglulu #define SCI_RM_API_H 23*91f16700Schasinglulu 24*91f16700Schasinglulu /* Includes */ 25*91f16700Schasinglulu 26*91f16700Schasinglulu #include <sci/sci_types.h> 27*91f16700Schasinglulu 28*91f16700Schasinglulu /* Defines */ 29*91f16700Schasinglulu 30*91f16700Schasinglulu /*! 31*91f16700Schasinglulu * @name Defines for type widths 32*91f16700Schasinglulu */ 33*91f16700Schasinglulu /*@{*/ 34*91f16700Schasinglulu #define SC_RM_PARTITION_W 5 /* Width of sc_rm_pt_t */ 35*91f16700Schasinglulu #define SC_RM_MEMREG_W 6 /* Width of sc_rm_mr_t */ 36*91f16700Schasinglulu #define SC_RM_DID_W 4 /* Width of sc_rm_did_t */ 37*91f16700Schasinglulu #define SC_RM_SID_W 6 /* Width of sc_rm_sid_t */ 38*91f16700Schasinglulu #define SC_RM_SPA_W 2 /* Width of sc_rm_spa_t */ 39*91f16700Schasinglulu #define SC_RM_PERM_W 3 /* Width of sc_rm_perm_t */ 40*91f16700Schasinglulu /*@}*/ 41*91f16700Schasinglulu 42*91f16700Schasinglulu /*! 43*91f16700Schasinglulu * @name Defines for ALL parameters 44*91f16700Schasinglulu */ 45*91f16700Schasinglulu /*@{*/ 46*91f16700Schasinglulu #define SC_RM_PT_ALL ((sc_rm_pt_t) UINT8_MAX) /* All partitions */ 47*91f16700Schasinglulu #define SC_RM_MR_ALL ((sc_rm_mr_t) UINT8_MAX) /* All memory regions */ 48*91f16700Schasinglulu /*@}*/ 49*91f16700Schasinglulu 50*91f16700Schasinglulu /*! 51*91f16700Schasinglulu * @name Defines for sc_rm_spa_t 52*91f16700Schasinglulu */ 53*91f16700Schasinglulu /*@{*/ 54*91f16700Schasinglulu #define SC_RM_SPA_PASSTHRU 0U /* Pass through (attribute driven by master) */ 55*91f16700Schasinglulu #define SC_RM_SPA_PASSSID 1U /* Pass through and output on SID */ 56*91f16700Schasinglulu #define SC_RM_SPA_ASSERT 2U /* Assert (force to be secure/privileged) */ 57*91f16700Schasinglulu #define SC_RM_SPA_NEGATE 3U /* Negate (force to be non-secure/user) */ 58*91f16700Schasinglulu /*@}*/ 59*91f16700Schasinglulu 60*91f16700Schasinglulu /*! 61*91f16700Schasinglulu * @name Defines for sc_rm_perm_t 62*91f16700Schasinglulu */ 63*91f16700Schasinglulu /*@{*/ 64*91f16700Schasinglulu #define SC_RM_PERM_NONE 0U /* No access */ 65*91f16700Schasinglulu #define SC_RM_PERM_SEC_R 1U /* Secure RO */ 66*91f16700Schasinglulu #define SC_RM_PERM_SECPRIV_RW 2U /* Secure privilege R/W */ 67*91f16700Schasinglulu #define SC_RM_PERM_SEC_RW 3U /* Secure R/W */ 68*91f16700Schasinglulu #define SC_RM_PERM_NSPRIV_R 4U /* Secure R/W, non-secure privilege RO */ 69*91f16700Schasinglulu #define SC_RM_PERM_NS_R 5U /* Secure R/W, non-secure RO */ 70*91f16700Schasinglulu #define SC_RM_PERM_NSPRIV_RW 6U /* Secure R/W, non-secure privilege R/W */ 71*91f16700Schasinglulu #define SC_RM_PERM_FULL 7U /* Full access */ 72*91f16700Schasinglulu /*@}*/ 73*91f16700Schasinglulu 74*91f16700Schasinglulu /* Types */ 75*91f16700Schasinglulu 76*91f16700Schasinglulu /*! 77*91f16700Schasinglulu * This type is used to declare a resource partition. 78*91f16700Schasinglulu */ 79*91f16700Schasinglulu typedef uint8_t sc_rm_pt_t; 80*91f16700Schasinglulu 81*91f16700Schasinglulu /*! 82*91f16700Schasinglulu * This type is used to declare a memory region. 83*91f16700Schasinglulu */ 84*91f16700Schasinglulu typedef uint8_t sc_rm_mr_t; 85*91f16700Schasinglulu 86*91f16700Schasinglulu /*! 87*91f16700Schasinglulu * This type is used to declare a resource domain ID used by the 88*91f16700Schasinglulu * isolation HW. 89*91f16700Schasinglulu */ 90*91f16700Schasinglulu typedef uint8_t sc_rm_did_t; 91*91f16700Schasinglulu 92*91f16700Schasinglulu /*! 93*91f16700Schasinglulu * This type is used to declare an SMMU StreamID. 94*91f16700Schasinglulu */ 95*91f16700Schasinglulu typedef uint16_t sc_rm_sid_t; 96*91f16700Schasinglulu 97*91f16700Schasinglulu /*! 98*91f16700Schasinglulu * This type is a used to declare master transaction attributes. 99*91f16700Schasinglulu */ 100*91f16700Schasinglulu typedef uint8_t sc_rm_spa_t; 101*91f16700Schasinglulu 102*91f16700Schasinglulu /*! 103*91f16700Schasinglulu * This type is used to declare a resource/memory region access permission. 104*91f16700Schasinglulu * Refer to the XRDC2 Block Guide for more information. 105*91f16700Schasinglulu */ 106*91f16700Schasinglulu typedef uint8_t sc_rm_perm_t; 107*91f16700Schasinglulu 108*91f16700Schasinglulu /* Functions */ 109*91f16700Schasinglulu 110*91f16700Schasinglulu /*! 111*91f16700Schasinglulu * @name Partition Functions 112*91f16700Schasinglulu * @{ 113*91f16700Schasinglulu */ 114*91f16700Schasinglulu 115*91f16700Schasinglulu /*! 116*91f16700Schasinglulu * This function requests that the SC create a new resource partition. 117*91f16700Schasinglulu * 118*91f16700Schasinglulu * @param[in] ipc IPC handle 119*91f16700Schasinglulu * @param[out] pt return handle for partition; used for subsequent function 120*91f16700Schasinglulu * calls associated with this partition 121*91f16700Schasinglulu * @param[in] secure boolean indicating if this partition should be secure; only 122*91f16700Schasinglulu * valid if caller is secure 123*91f16700Schasinglulu * @param[in] isolated boolean indicating if this partition should be HW isolated 124*91f16700Schasinglulu * via XRDC; set SC_TRUE if new DID is desired 125*91f16700Schasinglulu * @param[in] restricted boolean indicating if this partition should be restricted; set 126*91f16700Schasinglulu * SC_TRUE if masters in this partition cannot create new partitions 127*91f16700Schasinglulu * @param[in] grant boolean indicating if this partition should always grant 128*91f16700Schasinglulu * access and control to the parent 129*91f16700Schasinglulu * @param[in] coherent boolean indicating if this partition is coherent; 130*91f16700Schasinglulu * set SC_TRUE if only this partition will contain both AP clusters 131*91f16700Schasinglulu * and they will be coherent via the CCI 132*91f16700Schasinglulu * 133*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 134*91f16700Schasinglulu * 135*91f16700Schasinglulu * Return errors: 136*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is restricted, 137*91f16700Schasinglulu * - SC_ERR_PARM if caller's partition is not secure but a new secure partition is requested, 138*91f16700Schasinglulu * - SC_ERR_LOCKED if caller's partition is locked, 139*91f16700Schasinglulu * - SC_ERR_UNAVAILABLE if partition table is full (no more allocation space) 140*91f16700Schasinglulu * 141*91f16700Schasinglulu * Marking as non-secure prevents subsequent functions from configuring masters in this 142*91f16700Schasinglulu * partition to assert the secure signal. If restricted then the new partition is limited 143*91f16700Schasinglulu * in what functions it can call, especially those associated with managing partitions. 144*91f16700Schasinglulu * 145*91f16700Schasinglulu * The grant option is usually used to isolate a bus master's traffic to specific 146*91f16700Schasinglulu * memory without isolating the peripheral interface of the master or the API 147*91f16700Schasinglulu * controls of that master. 148*91f16700Schasinglulu */ 149*91f16700Schasinglulu sc_err_t sc_rm_partition_alloc(sc_ipc_t ipc, sc_rm_pt_t *pt, sc_bool_t secure, 150*91f16700Schasinglulu sc_bool_t isolated, sc_bool_t restricted, 151*91f16700Schasinglulu sc_bool_t grant, sc_bool_t coherent); 152*91f16700Schasinglulu 153*91f16700Schasinglulu /*! 154*91f16700Schasinglulu * This function makes a partition confidential. 155*91f16700Schasinglulu * 156*91f16700Schasinglulu * @param[in] ipc IPC handle 157*91f16700Schasinglulu * @param[in] pt handle of partition that is granting 158*91f16700Schasinglulu * @param[in] retro retroactive 159*91f16700Schasinglulu * 160*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 161*91f16700Schasinglulu * 162*91f16700Schasinglulu * Return errors: 163*91f16700Schasinglulu * - SC_PARM if \a pt out of range, 164*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's not allowed to change \a pt 165*91f16700Schasinglulu * - SC_ERR_LOCKED if partition \a pt is locked 166*91f16700Schasinglulu * 167*91f16700Schasinglulu * Call to make a partition confidential. Confidential means only this 168*91f16700Schasinglulu * partition should be able to grant access permissions to this partition. 169*91f16700Schasinglulu * 170*91f16700Schasinglulu * If retroactive, then all resources owned by other partitions will have 171*91f16700Schasinglulu * access rights for this partition removed, even if locked. 172*91f16700Schasinglulu */ 173*91f16700Schasinglulu sc_err_t sc_rm_set_confidential(sc_ipc_t ipc, sc_rm_pt_t pt, sc_bool_t retro); 174*91f16700Schasinglulu 175*91f16700Schasinglulu /*! 176*91f16700Schasinglulu * This function frees a partition and assigns all resources to the caller. 177*91f16700Schasinglulu * 178*91f16700Schasinglulu * @param[in] ipc IPC handle 179*91f16700Schasinglulu * @param[in] pt handle of partition to free 180*91f16700Schasinglulu * 181*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 182*91f16700Schasinglulu * 183*91f16700Schasinglulu * Return errors: 184*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is restricted, 185*91f16700Schasinglulu * - SC_PARM if \a pt out of range or invalid, 186*91f16700Schasinglulu * - SC_ERR_NOACCESS if \a pt is the SC partition, 187*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the parent of \a pt, 188*91f16700Schasinglulu * - SC_ERR_LOCKED if \a pt or caller's partition is locked 189*91f16700Schasinglulu * 190*91f16700Schasinglulu * All resources, memory regions, and pads are assigned to the caller/parent. 191*91f16700Schasinglulu * The partition watchdog is disabled (even if locked). DID is freed. 192*91f16700Schasinglulu */ 193*91f16700Schasinglulu sc_err_t sc_rm_partition_free(sc_ipc_t ipc, sc_rm_pt_t pt); 194*91f16700Schasinglulu 195*91f16700Schasinglulu /*! 196*91f16700Schasinglulu * This function returns the DID of a partition. 197*91f16700Schasinglulu * 198*91f16700Schasinglulu * @param[in] ipc IPC handle 199*91f16700Schasinglulu * 200*91f16700Schasinglulu * @return Returns the domain ID (DID) of the caller's partition. 201*91f16700Schasinglulu * 202*91f16700Schasinglulu * The DID is a SoC-specific internal ID used by the HW resource 203*91f16700Schasinglulu * protection mechanism. It is only required by clients when using the 204*91f16700Schasinglulu * SEMA42 module as the DID is sometimes connected to the master ID. 205*91f16700Schasinglulu */ 206*91f16700Schasinglulu sc_rm_did_t sc_rm_get_did(sc_ipc_t ipc); 207*91f16700Schasinglulu 208*91f16700Schasinglulu /*! 209*91f16700Schasinglulu * This function forces a partition to use a specific static DID. 210*91f16700Schasinglulu * 211*91f16700Schasinglulu * @param[in] ipc IPC handle 212*91f16700Schasinglulu * @param[in] pt handle of partition to assign \a did 213*91f16700Schasinglulu * @param[in] did static DID to assign 214*91f16700Schasinglulu * 215*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 216*91f16700Schasinglulu * 217*91f16700Schasinglulu * Return errors: 218*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is restricted, 219*91f16700Schasinglulu * - SC_PARM if \a pt or \a did out of range, 220*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the parent of \a pt, 221*91f16700Schasinglulu * - SC_ERR_LOCKED if \a pt is locked 222*91f16700Schasinglulu * 223*91f16700Schasinglulu * Assumes no assigned resources or memory regions yet! The number of static 224*91f16700Schasinglulu * DID is fixed by the SC at boot. 225*91f16700Schasinglulu */ 226*91f16700Schasinglulu sc_err_t sc_rm_partition_static(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rm_did_t did); 227*91f16700Schasinglulu 228*91f16700Schasinglulu /*! 229*91f16700Schasinglulu * This function locks a partition. 230*91f16700Schasinglulu * 231*91f16700Schasinglulu * @param[in] ipc IPC handle 232*91f16700Schasinglulu * @param[in] pt handle of partition to lock 233*91f16700Schasinglulu * 234*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 235*91f16700Schasinglulu * 236*91f16700Schasinglulu * Return errors: 237*91f16700Schasinglulu * - SC_PARM if \a pt out of range, 238*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the parent of \a pt 239*91f16700Schasinglulu * 240*91f16700Schasinglulu * If a partition is locked it cannot be freed, have resources/pads assigned 241*91f16700Schasinglulu * to/from it, memory regions created/assigned, DID changed, or parent changed. 242*91f16700Schasinglulu */ 243*91f16700Schasinglulu sc_err_t sc_rm_partition_lock(sc_ipc_t ipc, sc_rm_pt_t pt); 244*91f16700Schasinglulu 245*91f16700Schasinglulu /*! 246*91f16700Schasinglulu * This function gets the partition handle of the caller. 247*91f16700Schasinglulu * 248*91f16700Schasinglulu * @param[in] ipc IPC handle 249*91f16700Schasinglulu * @param[out] pt return handle for caller's partition 250*91f16700Schasinglulu * 251*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 252*91f16700Schasinglulu */ 253*91f16700Schasinglulu sc_err_t sc_rm_get_partition(sc_ipc_t ipc, sc_rm_pt_t *pt); 254*91f16700Schasinglulu 255*91f16700Schasinglulu /*! 256*91f16700Schasinglulu * This function sets a new parent for a partition. 257*91f16700Schasinglulu * 258*91f16700Schasinglulu * @param[in] ipc IPC handle 259*91f16700Schasinglulu * @param[in] pt handle of partition for which parent is to be 260*91f16700Schasinglulu * changed 261*91f16700Schasinglulu * @param[in] pt_parent handle of partition to set as parent 262*91f16700Schasinglulu * 263*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 264*91f16700Schasinglulu * 265*91f16700Schasinglulu * Return errors: 266*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is restricted, 267*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 268*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the parent of \a pt, 269*91f16700Schasinglulu * - SC_ERR_LOCKED if either partition is locked 270*91f16700Schasinglulu */ 271*91f16700Schasinglulu sc_err_t sc_rm_set_parent(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rm_pt_t pt_parent); 272*91f16700Schasinglulu 273*91f16700Schasinglulu /*! 274*91f16700Schasinglulu * This function moves all movable resources/pads owned by a source partition 275*91f16700Schasinglulu * to a destination partition. It can be used to more quickly set up a new 276*91f16700Schasinglulu * partition if a majority of the caller's resources are to be moved to a 277*91f16700Schasinglulu * new partition. 278*91f16700Schasinglulu * 279*91f16700Schasinglulu * @param[in] ipc IPC handle 280*91f16700Schasinglulu * @param[in] pt_src handle of partition from which resources should 281*91f16700Schasinglulu * be moved from 282*91f16700Schasinglulu * @param[in] pt_dst handle of partition to which resources should be 283*91f16700Schasinglulu * moved to 284*91f16700Schasinglulu * @param[in] move_rsrc boolean to indicate if resources should be moved 285*91f16700Schasinglulu * @param[in] move_pads boolean to indicate if pads should be moved 286*91f16700Schasinglulu * 287*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 288*91f16700Schasinglulu * 289*91f16700Schasinglulu * By default, all resources are movable. This can be changed using the 290*91f16700Schasinglulu * sc_rm_set_resource_movable() function. Note all masters defaulted to SMMU 291*91f16700Schasinglulu * bypass. 292*91f16700Schasinglulu * 293*91f16700Schasinglulu * Return errors: 294*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is restricted, 295*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 296*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not \a pt_src or the 297*91f16700Schasinglulu * parent of \a pt_src, 298*91f16700Schasinglulu * - SC_ERR_LOCKED if either partition is locked 299*91f16700Schasinglulu */ 300*91f16700Schasinglulu sc_err_t sc_rm_move_all(sc_ipc_t ipc, sc_rm_pt_t pt_src, sc_rm_pt_t pt_dst, 301*91f16700Schasinglulu sc_bool_t move_rsrc, sc_bool_t move_pads); 302*91f16700Schasinglulu 303*91f16700Schasinglulu /* @} */ 304*91f16700Schasinglulu 305*91f16700Schasinglulu /*! 306*91f16700Schasinglulu * @name Resource Functions 307*91f16700Schasinglulu * @{ 308*91f16700Schasinglulu */ 309*91f16700Schasinglulu 310*91f16700Schasinglulu /*! 311*91f16700Schasinglulu * This function assigns ownership of a resource to a partition. 312*91f16700Schasinglulu * 313*91f16700Schasinglulu * @param[in] ipc IPC handle 314*91f16700Schasinglulu * @param[in] pt handle of partition to which resource should be 315*91f16700Schasinglulu * assigned 316*91f16700Schasinglulu * @param[in] resource resource to assign 317*91f16700Schasinglulu * 318*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 319*91f16700Schasinglulu * 320*91f16700Schasinglulu * This action resets the resource's master and peripheral attributes. 321*91f16700Schasinglulu * Privilege attribute will be PASSTHRU, security attribute will be 322*91f16700Schasinglulu * ASSERT if the partition si secure and NEGATE if it is not, and 323*91f16700Schasinglulu * masters will defaulted to SMMU bypass. Access permissions will reset 324*91f16700Schasinglulu * to SEC_RW for the owning partition only for secure partitions, FULL for 325*91f16700Schasinglulu * non-secure. DEfault is no access by other partitions. 326*91f16700Schasinglulu * 327*91f16700Schasinglulu * Return errors: 328*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is restricted, 329*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 330*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the resource owner or parent 331*91f16700Schasinglulu * of the owner, 332*91f16700Schasinglulu * - SC_ERR_LOCKED if the owning partition or \a pt is locked 333*91f16700Schasinglulu */ 334*91f16700Schasinglulu sc_err_t sc_rm_assign_resource(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rsrc_t resource); 335*91f16700Schasinglulu 336*91f16700Schasinglulu /*! 337*91f16700Schasinglulu * This function flags resources as movable or not. 338*91f16700Schasinglulu * 339*91f16700Schasinglulu * @param[in] ipc IPC handle 340*91f16700Schasinglulu * @param[in] resource_fst first resource for which flag should be set 341*91f16700Schasinglulu * @param[in] resource_lst last resource for which flag should be set 342*91f16700Schasinglulu * @param[in] movable movable flag (SC_TRUE is movable) 343*91f16700Schasinglulu * 344*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 345*91f16700Schasinglulu * 346*91f16700Schasinglulu * Return errors: 347*91f16700Schasinglulu * - SC_PARM if resources are out of range, 348*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not a parent of a resource owner, 349*91f16700Schasinglulu * - SC_ERR_LOCKED if the owning partition is locked 350*91f16700Schasinglulu * 351*91f16700Schasinglulu * This function is used to determine the set of resources that will be 352*91f16700Schasinglulu * moved using the sc_rm_move_all() function. All resources are movable 353*91f16700Schasinglulu * by default so this function is normally used to prevent a set of 354*91f16700Schasinglulu * resources from moving. 355*91f16700Schasinglulu */ 356*91f16700Schasinglulu sc_err_t sc_rm_set_resource_movable(sc_ipc_t ipc, sc_rsrc_t resource_fst, 357*91f16700Schasinglulu sc_rsrc_t resource_lst, sc_bool_t movable); 358*91f16700Schasinglulu 359*91f16700Schasinglulu /*! 360*91f16700Schasinglulu * This function flags all of a subsystem's resources as movable 361*91f16700Schasinglulu * or not. 362*91f16700Schasinglulu * 363*91f16700Schasinglulu * @param[in] ipc IPC handle 364*91f16700Schasinglulu * @param[in] resource resource to use to identify subsystem 365*91f16700Schasinglulu * @param[in] movable movable flag (SC_TRUE is movable) 366*91f16700Schasinglulu * 367*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 368*91f16700Schasinglulu * 369*91f16700Schasinglulu * Return errors: 370*91f16700Schasinglulu * - SC_ERR_PARM if a function argument is out of range 371*91f16700Schasinglulu * 372*91f16700Schasinglulu * Note \a resource is used to find the associated subsystem. Only 373*91f16700Schasinglulu * resources owned by the caller are set. 374*91f16700Schasinglulu */ 375*91f16700Schasinglulu sc_err_t sc_rm_set_subsys_rsrc_movable(sc_ipc_t ipc, sc_rsrc_t resource, 376*91f16700Schasinglulu sc_bool_t movable); 377*91f16700Schasinglulu 378*91f16700Schasinglulu /*! 379*91f16700Schasinglulu * This function sets attributes for a resource which is a bus master (i.e. 380*91f16700Schasinglulu * capable of DMA). 381*91f16700Schasinglulu * 382*91f16700Schasinglulu * @param[in] ipc IPC handle 383*91f16700Schasinglulu * @param[in] resource master resource for which attributes should apply 384*91f16700Schasinglulu * @param[in] sa security attribute 385*91f16700Schasinglulu * @param[in] pa privilege attribute 386*91f16700Schasinglulu * @param[in] smmu_bypass SMMU bypass mode 387*91f16700Schasinglulu * 388*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 389*91f16700Schasinglulu * 390*91f16700Schasinglulu * Return errors: 391*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is restricted, 392*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 393*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not a parent of the resource owner, 394*91f16700Schasinglulu * - SC_ERR_LOCKED if the owning partition is locked 395*91f16700Schasinglulu * 396*91f16700Schasinglulu * This function configures how the HW isolation will see bus transactions 397*91f16700Schasinglulu * from the specified master. Note the security attribute will only be 398*91f16700Schasinglulu * changed if the caller's partition is secure. 399*91f16700Schasinglulu */ 400*91f16700Schasinglulu sc_err_t sc_rm_set_master_attributes(sc_ipc_t ipc, sc_rsrc_t resource, 401*91f16700Schasinglulu sc_rm_spa_t sa, sc_rm_spa_t pa, 402*91f16700Schasinglulu sc_bool_t smmu_bypass); 403*91f16700Schasinglulu 404*91f16700Schasinglulu /*! 405*91f16700Schasinglulu * This function sets the StreamID for a resource which is a bus master (i.e. 406*91f16700Schasinglulu * capable of DMA). 407*91f16700Schasinglulu * 408*91f16700Schasinglulu * @param[in] ipc IPC handle 409*91f16700Schasinglulu * @param[in] resource master resource for which attributes should apply 410*91f16700Schasinglulu * @param[in] sid StreamID 411*91f16700Schasinglulu * 412*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 413*91f16700Schasinglulu * 414*91f16700Schasinglulu * Return errors: 415*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is restricted, 416*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 417*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the resource owner or parent 418*91f16700Schasinglulu * of the owner, 419*91f16700Schasinglulu * - SC_ERR_LOCKED if the owning partition is locked 420*91f16700Schasinglulu * 421*91f16700Schasinglulu * This function configures the SID attribute associated with all bus transactions 422*91f16700Schasinglulu * from this master. Note 0 is not a valid SID as it is reserved to indicate 423*91f16700Schasinglulu * bypass. 424*91f16700Schasinglulu */ 425*91f16700Schasinglulu sc_err_t sc_rm_set_master_sid(sc_ipc_t ipc, sc_rsrc_t resource, 426*91f16700Schasinglulu sc_rm_sid_t sid); 427*91f16700Schasinglulu 428*91f16700Schasinglulu /*! 429*91f16700Schasinglulu * This function sets access permissions for a peripheral resource. 430*91f16700Schasinglulu * 431*91f16700Schasinglulu * @param[in] ipc IPC handle 432*91f16700Schasinglulu * @param[in] resource peripheral resource for which permissions should apply 433*91f16700Schasinglulu * @param[in] pt handle of partition \a perm should by applied for 434*91f16700Schasinglulu * @param[in] perm permissions to apply to \a resource for \a pt 435*91f16700Schasinglulu * 436*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 437*91f16700Schasinglulu * 438*91f16700Schasinglulu * Return errors: 439*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 440*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the resource owner or parent 441*91f16700Schasinglulu * of the owner, 442*91f16700Schasinglulu * - SC_ERR_LOCKED if the owning partition is locked 443*91f16700Schasinglulu * - SC_ERR_LOCKED if the \a pt is confidential and the caller isn't \a pt 444*91f16700Schasinglulu * 445*91f16700Schasinglulu * This function configures how the HW isolation will restrict access to a 446*91f16700Schasinglulu * peripheral based on the attributes of a transaction from bus master. 447*91f16700Schasinglulu */ 448*91f16700Schasinglulu sc_err_t sc_rm_set_peripheral_permissions(sc_ipc_t ipc, sc_rsrc_t resource, 449*91f16700Schasinglulu sc_rm_pt_t pt, sc_rm_perm_t perm); 450*91f16700Schasinglulu 451*91f16700Schasinglulu /*! 452*91f16700Schasinglulu * This function gets ownership status of a resource. 453*91f16700Schasinglulu * 454*91f16700Schasinglulu * @param[in] ipc IPC handle 455*91f16700Schasinglulu * @param[in] resource resource to check 456*91f16700Schasinglulu * 457*91f16700Schasinglulu * @return Returns a boolean (SC_TRUE if caller's partition owns the resource). 458*91f16700Schasinglulu * 459*91f16700Schasinglulu * If \a resource is out of range then SC_FALSE is returned. 460*91f16700Schasinglulu */ 461*91f16700Schasinglulu sc_bool_t sc_rm_is_resource_owned(sc_ipc_t ipc, sc_rsrc_t resource); 462*91f16700Schasinglulu 463*91f16700Schasinglulu /*! 464*91f16700Schasinglulu * This function is used to test if a resource is a bus master. 465*91f16700Schasinglulu * 466*91f16700Schasinglulu * @param[in] ipc IPC handle 467*91f16700Schasinglulu * @param[in] resource resource to check 468*91f16700Schasinglulu * 469*91f16700Schasinglulu * @return Returns a boolean (SC_TRUE if the resource is a bus master). 470*91f16700Schasinglulu * 471*91f16700Schasinglulu * If \a resource is out of range then SC_FALSE is returned. 472*91f16700Schasinglulu */ 473*91f16700Schasinglulu sc_bool_t sc_rm_is_resource_master(sc_ipc_t ipc, sc_rsrc_t resource); 474*91f16700Schasinglulu 475*91f16700Schasinglulu /*! 476*91f16700Schasinglulu * This function is used to test if a resource is a peripheral. 477*91f16700Schasinglulu * 478*91f16700Schasinglulu * @param[in] ipc IPC handle 479*91f16700Schasinglulu * @param[in] resource resource to check 480*91f16700Schasinglulu * 481*91f16700Schasinglulu * @return Returns a boolean (SC_TRUE if the resource is a peripheral). 482*91f16700Schasinglulu * 483*91f16700Schasinglulu * If \a resource is out of range then SC_FALSE is returned. 484*91f16700Schasinglulu */ 485*91f16700Schasinglulu sc_bool_t sc_rm_is_resource_peripheral(sc_ipc_t ipc, sc_rsrc_t resource); 486*91f16700Schasinglulu 487*91f16700Schasinglulu /*! 488*91f16700Schasinglulu * This function is used to obtain info about a resource. 489*91f16700Schasinglulu * 490*91f16700Schasinglulu * @param[in] ipc IPC handle 491*91f16700Schasinglulu * @param[in] resource resource to inquire about 492*91f16700Schasinglulu * @param[out] sid pointer to return StreamID 493*91f16700Schasinglulu * 494*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 495*91f16700Schasinglulu * 496*91f16700Schasinglulu * Return errors: 497*91f16700Schasinglulu * - SC_PARM if \a resource is out of range 498*91f16700Schasinglulu */ 499*91f16700Schasinglulu sc_err_t sc_rm_get_resource_info(sc_ipc_t ipc, sc_rsrc_t resource, 500*91f16700Schasinglulu sc_rm_sid_t *sid); 501*91f16700Schasinglulu 502*91f16700Schasinglulu /* @} */ 503*91f16700Schasinglulu 504*91f16700Schasinglulu /*! 505*91f16700Schasinglulu * @name Memory Region Functions 506*91f16700Schasinglulu * @{ 507*91f16700Schasinglulu */ 508*91f16700Schasinglulu 509*91f16700Schasinglulu /*! 510*91f16700Schasinglulu * This function requests that the SC create a new memory region. 511*91f16700Schasinglulu * 512*91f16700Schasinglulu * @param[in] ipc IPC handle 513*91f16700Schasinglulu * @param[out] mr return handle for region; used for 514*91f16700Schasinglulu * subsequent function calls 515*91f16700Schasinglulu * associated with this region 516*91f16700Schasinglulu * @param[in] addr_start start address of region (physical) 517*91f16700Schasinglulu * @param[in] addr_end end address of region (physical) 518*91f16700Schasinglulu * 519*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 520*91f16700Schasinglulu * 521*91f16700Schasinglulu * Return errors: 522*91f16700Schasinglulu * - SC_ERR_PARM if the new memory region is misaligned, 523*91f16700Schasinglulu * - SC_ERR_LOCKED if caller's partition is locked, 524*91f16700Schasinglulu * - SC_ERR_PARM if the new memory region spans multiple existing regions, 525*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition does not own the memory containing 526*91f16700Schasinglulu * the new region, 527*91f16700Schasinglulu * - SC_ERR_UNAVAILABLE if memory region table is full (no more allocation 528*91f16700Schasinglulu * space) 529*91f16700Schasinglulu * 530*91f16700Schasinglulu * The area covered by the memory region must currently be owned by the caller. 531*91f16700Schasinglulu * By default, the new region will have access permission set to allow the 532*91f16700Schasinglulu * caller to access. 533*91f16700Schasinglulu */ 534*91f16700Schasinglulu sc_err_t sc_rm_memreg_alloc(sc_ipc_t ipc, sc_rm_mr_t *mr, 535*91f16700Schasinglulu sc_faddr_t addr_start, sc_faddr_t addr_end); 536*91f16700Schasinglulu 537*91f16700Schasinglulu /*! 538*91f16700Schasinglulu * This function requests that the SC split a memory region. 539*91f16700Schasinglulu * 540*91f16700Schasinglulu * @param[in] ipc IPC handle 541*91f16700Schasinglulu * @param[in] mr handle of memory region to split 542*91f16700Schasinglulu * @param[out] mr_ret return handle for new region; used for 543*91f16700Schasinglulu * subsequent function calls 544*91f16700Schasinglulu * associated with this region 545*91f16700Schasinglulu * @param[in] addr_start start address of region (physical) 546*91f16700Schasinglulu * @param[in] addr_end end address of region (physical) 547*91f16700Schasinglulu * 548*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 549*91f16700Schasinglulu * 550*91f16700Schasinglulu * Return errors: 551*91f16700Schasinglulu * - SC_ERR_PARM if the new memory region is not start/end part of mr, 552*91f16700Schasinglulu * - SC_ERR_LOCKED if caller's partition is locked, 553*91f16700Schasinglulu * - SC_ERR_PARM if the new memory region spans multiple existing regions, 554*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition does not own the memory containing 555*91f16700Schasinglulu * the new region, 556*91f16700Schasinglulu * - SC_ERR_UNAVAILABLE if memory region table is full (no more allocation 557*91f16700Schasinglulu * space) 558*91f16700Schasinglulu * 559*91f16700Schasinglulu * Note the new region must start or end on the split region. 560*91f16700Schasinglulu */ 561*91f16700Schasinglulu sc_err_t sc_rm_memreg_split(sc_ipc_t ipc, sc_rm_mr_t mr, 562*91f16700Schasinglulu sc_rm_mr_t *mr_ret, sc_faddr_t addr_start, 563*91f16700Schasinglulu sc_faddr_t addr_end); 564*91f16700Schasinglulu 565*91f16700Schasinglulu /*! 566*91f16700Schasinglulu * This function frees a memory region. 567*91f16700Schasinglulu * 568*91f16700Schasinglulu * @param[in] ipc IPC handle 569*91f16700Schasinglulu * @param[in] mr handle of memory region to free 570*91f16700Schasinglulu * 571*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 572*91f16700Schasinglulu * 573*91f16700Schasinglulu * Return errors: 574*91f16700Schasinglulu * - SC_PARM if \a mr out of range or invalid, 575*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not a parent of \a mr, 576*91f16700Schasinglulu * - SC_ERR_LOCKED if the owning partition of \a mr is locked 577*91f16700Schasinglulu */ 578*91f16700Schasinglulu sc_err_t sc_rm_memreg_free(sc_ipc_t ipc, sc_rm_mr_t mr); 579*91f16700Schasinglulu 580*91f16700Schasinglulu /*! 581*91f16700Schasinglulu * Internal SC function to find a memory region. 582*91f16700Schasinglulu * 583*91f16700Schasinglulu * @see sc_rm_find_memreg(). 584*91f16700Schasinglulu */ 585*91f16700Schasinglulu /*! 586*91f16700Schasinglulu * This function finds a memory region. 587*91f16700Schasinglulu * 588*91f16700Schasinglulu * @param[in] ipc IPC handle 589*91f16700Schasinglulu * @param[out] mr return handle for region; used for 590*91f16700Schasinglulu * subsequent function calls 591*91f16700Schasinglulu * associated with this region 592*91f16700Schasinglulu * @param[in] addr_start start address of region to search for 593*91f16700Schasinglulu * @param[in] addr_end end address of region to search for 594*91f16700Schasinglulu * 595*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 596*91f16700Schasinglulu * 597*91f16700Schasinglulu * Return errors: 598*91f16700Schasinglulu * - SC_ERR_NOTFOUND if region not found, 599*91f16700Schasinglulu * 600*91f16700Schasinglulu * Searches only for regions owned by the caller. Finds first 601*91f16700Schasinglulu * region containing the range specified. 602*91f16700Schasinglulu */ 603*91f16700Schasinglulu sc_err_t sc_rm_find_memreg(sc_ipc_t ipc, sc_rm_mr_t *mr, 604*91f16700Schasinglulu sc_faddr_t addr_start, sc_faddr_t addr_end); 605*91f16700Schasinglulu 606*91f16700Schasinglulu /*! 607*91f16700Schasinglulu * This function assigns ownership of a memory region. 608*91f16700Schasinglulu * 609*91f16700Schasinglulu * @param[in] ipc IPC handle 610*91f16700Schasinglulu * @param[in] pt handle of partition to which memory region 611*91f16700Schasinglulu * should be assigned 612*91f16700Schasinglulu * @param[in] mr handle of memory region to assign 613*91f16700Schasinglulu * 614*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 615*91f16700Schasinglulu * 616*91f16700Schasinglulu * Return errors: 617*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 618*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the \a mr owner or parent 619*91f16700Schasinglulu * of the owner, 620*91f16700Schasinglulu * - SC_ERR_LOCKED if the owning partition or \a pt is locked 621*91f16700Schasinglulu */ 622*91f16700Schasinglulu sc_err_t sc_rm_assign_memreg(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rm_mr_t mr); 623*91f16700Schasinglulu 624*91f16700Schasinglulu /*! 625*91f16700Schasinglulu * This function sets access permissions for a memory region. 626*91f16700Schasinglulu * 627*91f16700Schasinglulu * @param[in] ipc IPC handle 628*91f16700Schasinglulu * @param[in] mr handle of memory region for which permissions 629*91f16700Schasinglulu * should apply 630*91f16700Schasinglulu * @param[in] pt handle of partition \a perm should by 631*91f16700Schasinglulu * applied for 632*91f16700Schasinglulu * @param[in] perm permissions to apply to \a mr for \a pt 633*91f16700Schasinglulu * 634*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 635*91f16700Schasinglulu * 636*91f16700Schasinglulu * Return errors: 637*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 638*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the region owner or parent 639*91f16700Schasinglulu * of the owner, 640*91f16700Schasinglulu * - SC_ERR_LOCKED if the owning partition is locked 641*91f16700Schasinglulu * - SC_ERR_LOCKED if the \a pt is confidential and the caller isn't \a pt 642*91f16700Schasinglulu * 643*91f16700Schasinglulu * This function configures how the HW isolation will restrict access to a 644*91f16700Schasinglulu * memory region based on the attributes of a transaction from bus master. 645*91f16700Schasinglulu */ 646*91f16700Schasinglulu sc_err_t sc_rm_set_memreg_permissions(sc_ipc_t ipc, sc_rm_mr_t mr, 647*91f16700Schasinglulu sc_rm_pt_t pt, sc_rm_perm_t perm); 648*91f16700Schasinglulu 649*91f16700Schasinglulu /*! 650*91f16700Schasinglulu * This function gets ownership status of a memory region. 651*91f16700Schasinglulu * 652*91f16700Schasinglulu * @param[in] ipc IPC handle 653*91f16700Schasinglulu * @param[in] mr handle of memory region to check 654*91f16700Schasinglulu * 655*91f16700Schasinglulu * @return Returns a boolean (SC_TRUE if caller's partition owns the 656*91f16700Schasinglulu * memory region). 657*91f16700Schasinglulu * 658*91f16700Schasinglulu * If \a mr is out of range then SC_FALSE is returned. 659*91f16700Schasinglulu */ 660*91f16700Schasinglulu sc_bool_t sc_rm_is_memreg_owned(sc_ipc_t ipc, sc_rm_mr_t mr); 661*91f16700Schasinglulu 662*91f16700Schasinglulu /*! 663*91f16700Schasinglulu * This function is used to obtain info about a memory region. 664*91f16700Schasinglulu * 665*91f16700Schasinglulu * @param[in] ipc IPC handle 666*91f16700Schasinglulu * @param[in] mr handle of memory region to inquire about 667*91f16700Schasinglulu * @param[out] addr_start pointer to return start address 668*91f16700Schasinglulu * @param[out] addr_end pointer to return end address 669*91f16700Schasinglulu * 670*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 671*91f16700Schasinglulu * 672*91f16700Schasinglulu * Return errors: 673*91f16700Schasinglulu * - SC_PARM if \a mr is out of range 674*91f16700Schasinglulu */ 675*91f16700Schasinglulu sc_err_t sc_rm_get_memreg_info(sc_ipc_t ipc, sc_rm_mr_t mr, 676*91f16700Schasinglulu sc_faddr_t *addr_start, sc_faddr_t *addr_end); 677*91f16700Schasinglulu 678*91f16700Schasinglulu /* @} */ 679*91f16700Schasinglulu 680*91f16700Schasinglulu /*! 681*91f16700Schasinglulu * @name Pad Functions 682*91f16700Schasinglulu * @{ 683*91f16700Schasinglulu */ 684*91f16700Schasinglulu 685*91f16700Schasinglulu /*! 686*91f16700Schasinglulu * This function assigns ownership of a pad to a partition. 687*91f16700Schasinglulu * 688*91f16700Schasinglulu * @param[in] ipc IPC handle 689*91f16700Schasinglulu * @param[in] pt handle of partition to which pad should 690*91f16700Schasinglulu * be assigned 691*91f16700Schasinglulu * @param[in] pad pad to assign 692*91f16700Schasinglulu * 693*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 694*91f16700Schasinglulu * 695*91f16700Schasinglulu * Return errors: 696*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is restricted, 697*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 698*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner or parent 699*91f16700Schasinglulu * of the owner, 700*91f16700Schasinglulu * - SC_ERR_LOCKED if the owning partition or \a pt is locked 701*91f16700Schasinglulu */ 702*91f16700Schasinglulu sc_err_t sc_rm_assign_pad(sc_ipc_t ipc, sc_rm_pt_t pt, sc_pad_t pad); 703*91f16700Schasinglulu 704*91f16700Schasinglulu /*! 705*91f16700Schasinglulu * This function flags pads as movable or not. 706*91f16700Schasinglulu * 707*91f16700Schasinglulu * @param[in] ipc IPC handle 708*91f16700Schasinglulu * @param[in] pad_fst first pad for which flag should be set 709*91f16700Schasinglulu * @param[in] pad_lst last pad for which flag should be set 710*91f16700Schasinglulu * @param[in] movable movable flag (SC_TRUE is movable) 711*91f16700Schasinglulu * 712*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 713*91f16700Schasinglulu * 714*91f16700Schasinglulu * Return errors: 715*91f16700Schasinglulu * - SC_PARM if pads are out of range, 716*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not a parent of a pad owner, 717*91f16700Schasinglulu * - SC_ERR_LOCKED if the owning partition is locked 718*91f16700Schasinglulu * 719*91f16700Schasinglulu * This function is used to determine the set of pads that will be 720*91f16700Schasinglulu * moved using the sc_rm_move_all() function. All pads are movable 721*91f16700Schasinglulu * by default so this function is normally used to prevent a set of 722*91f16700Schasinglulu * pads from moving. 723*91f16700Schasinglulu */ 724*91f16700Schasinglulu sc_err_t sc_rm_set_pad_movable(sc_ipc_t ipc, sc_pad_t pad_fst, 725*91f16700Schasinglulu sc_pad_t pad_lst, sc_bool_t movable); 726*91f16700Schasinglulu 727*91f16700Schasinglulu /*! 728*91f16700Schasinglulu * This function gets ownership status of a pad. 729*91f16700Schasinglulu * 730*91f16700Schasinglulu * @param[in] ipc IPC handle 731*91f16700Schasinglulu * @param[in] pad pad to check 732*91f16700Schasinglulu * 733*91f16700Schasinglulu * @return Returns a boolean (SC_TRUE if caller's partition owns the pad). 734*91f16700Schasinglulu * 735*91f16700Schasinglulu * If \a pad is out of range then SC_FALSE is returned. 736*91f16700Schasinglulu */ 737*91f16700Schasinglulu sc_bool_t sc_rm_is_pad_owned(sc_ipc_t ipc, sc_pad_t pad); 738*91f16700Schasinglulu 739*91f16700Schasinglulu /* @} */ 740*91f16700Schasinglulu 741*91f16700Schasinglulu /*! 742*91f16700Schasinglulu * @name Debug Functions 743*91f16700Schasinglulu * @{ 744*91f16700Schasinglulu */ 745*91f16700Schasinglulu 746*91f16700Schasinglulu /*! 747*91f16700Schasinglulu * This function dumps the RM state for debug. 748*91f16700Schasinglulu * 749*91f16700Schasinglulu * @param[in] ipc IPC handle 750*91f16700Schasinglulu */ 751*91f16700Schasinglulu void sc_rm_dump(sc_ipc_t ipc); 752*91f16700Schasinglulu 753*91f16700Schasinglulu /* @} */ 754*91f16700Schasinglulu 755*91f16700Schasinglulu #endif /* SCI_RM_API_H */ 756*91f16700Schasinglulu 757*91f16700Schasinglulu /**@}*/ 758