The atomic SCM APIs are useful for commands that are guaranteed by the secure side to be uninterruptable, atomic and SMP safe. The calling convention use registers for passing parameters and return values between the secure and non-secure side. Support this interface with scm_call_atomic[1-2]() functions corresponding to the number of arguments passed. Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
32 lines
1.1 KiB
C
32 lines
1.1 KiB
C
/* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 and
|
|
* only version 2 as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
#ifndef __MACH_SCM_H
|
|
#define __MACH_SCM_H
|
|
|
|
#define SCM_SVC_BOOT 0x1
|
|
#define SCM_SVC_PIL 0x2
|
|
#define SCM_SVC_UTIL 0x3
|
|
#define SCM_SVC_TZ 0x4
|
|
#define SCM_SVC_TZSCHEDULER 0xFC
|
|
|
|
extern int scm_call(u32 svc_id, u32 cmd_id, const void *cmd_buf, size_t cmd_len,
|
|
void *resp_buf, size_t resp_len);
|
|
|
|
extern u32 scm_call_atomic1(u32 svc, u32 cmd, u32 arg1);
|
|
extern u32 scm_call_atomic2(u32 svc, u32 cmd, u32 arg1, u32 arg2);
|
|
|
|
#define SCM_VERSION(major, minor) (((major) << 16) | ((minor) & 0xFF))
|
|
|
|
extern u32 scm_get_version(void);
|
|
|
|
#endif
|