mirror of
https://github.com/physwizz/a155-U-u1.git
synced 2024-11-19 13:27:49 +00:00
131 lines
4.3 KiB
C
131 lines
4.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (C) 2021 MediaTek Inc.
|
|
*/
|
|
|
|
#ifndef _MKP_API_H_
|
|
#define _MKP_API_H_
|
|
|
|
#include <linux/rbtree.h>
|
|
#include <linux/types.h> // for phys_addr_t
|
|
#include <linux/random.h>
|
|
|
|
#include <linux/memblock.h>
|
|
#include <linux/err.h>
|
|
#include <linux/sizes.h>
|
|
|
|
#include <linux/sched.h>
|
|
#include <linux/module.h>
|
|
#include <linux/printk.h>
|
|
#include <uapi/linux/sched/types.h>
|
|
#include <linux/futex.h>
|
|
#include <linux/plist.h>
|
|
#include <linux/percpu-defs.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/platform_device.h>
|
|
#include <linux/arm-smccc.h>
|
|
#include <linux/vmalloc.h>
|
|
#include <linux/cma.h>
|
|
#include <linux/of_reserved_mem.h>
|
|
#include <linux/timer.h>
|
|
|
|
#include <asm/memory.h> // for MODULE_VADDR
|
|
#include <linux/types.h> // for phys_addr_t
|
|
|
|
#include <linux/of_fdt.h>
|
|
#include <linux/of_reserved_mem.h>
|
|
#include <linux/of_irq.h>
|
|
#include <linux/dma-mapping.h>
|
|
#include <linux/dma-direct.h>
|
|
#include <linux/sched.h> // for task_struct
|
|
#include <linux/cred.h>
|
|
|
|
#include "policy.h"
|
|
#include "mkp_hvc.h"
|
|
|
|
extern bool __init prepare_grant_ticket(void);
|
|
|
|
static __always_inline int do_secure_ops(uint32_t policy, uint32_t handle,
|
|
int (*set_memory_hvc)(uint32_t policy, uint32_t handle))
|
|
{
|
|
unsigned long flags;
|
|
int ret = -1;
|
|
|
|
if (!grant_ticket)
|
|
goto exit;
|
|
|
|
local_irq_save(flags);
|
|
*grant_ticket = subscribe;
|
|
ret = set_memory_hvc(policy, handle);
|
|
local_irq_restore(flags);
|
|
|
|
exit:
|
|
return ret;
|
|
}
|
|
|
|
static __always_inline int mkp_set_mapping_ro(uint32_t policy, uint32_t handle)
|
|
{
|
|
if (policy >= MKP_POLICY_NR || policy_ctrl[policy] == 0)
|
|
return -1;
|
|
|
|
return do_secure_ops(policy, handle, mkp_set_mapping_ro_hvc_call);
|
|
}
|
|
|
|
static __always_inline int mkp_set_mapping_rw(uint32_t policy, uint32_t handle)
|
|
{
|
|
if (policy >= MKP_POLICY_NR || policy_ctrl[policy] == 0)
|
|
return -1;
|
|
|
|
return do_secure_ops(policy, handle, mkp_set_mapping_rw_hvc_call);
|
|
}
|
|
|
|
static __always_inline int mkp_set_mapping_nx(uint32_t policy, uint32_t handle)
|
|
{
|
|
if (policy >= MKP_POLICY_NR || policy_ctrl[policy] == 0)
|
|
return -1;
|
|
|
|
return do_secure_ops(policy, handle, mkp_set_mapping_nx_hvc_call);
|
|
}
|
|
|
|
static __always_inline int mkp_set_mapping_x(uint32_t policy, uint32_t handle)
|
|
{
|
|
if (policy >= MKP_POLICY_NR || policy_ctrl[policy] == 0)
|
|
return -1;
|
|
|
|
return do_secure_ops(policy, handle, mkp_set_mapping_x_hvc_call);
|
|
}
|
|
|
|
static __always_inline int mkp_clear_mapping(uint32_t policy, uint32_t handle)
|
|
{
|
|
if (policy >= MKP_POLICY_NR || policy_ctrl[policy] == 0)
|
|
return -1;
|
|
|
|
return do_secure_ops(policy, handle, mkp_clear_mapping_hvc_call);
|
|
}
|
|
|
|
void __init mkp_set_policy(u32);
|
|
int __init mkp_set_ext_policy(uint32_t policy);
|
|
int mkp_lookup_mapping_entry(uint32_t policy, uint32_t handle,
|
|
unsigned long *entry_size, unsigned long *permission);
|
|
int mkp_request_new_policy(unsigned long policy_char);
|
|
int mkp_change_policy_action(uint32_t policy, unsigned long policy_char_action);
|
|
int mkp_request_new_specified_policy(unsigned long policy_char, uint32_t specified_policy);
|
|
uint32_t mkp_create_ro_sharebuf(uint32_t policy, unsigned long size, struct page **pages);
|
|
uint32_t mkp_create_wo_sharebuf(uint32_t policy, unsigned long size, struct page **pages);
|
|
uint32_t mkp_create_handle(uint32_t policy, unsigned long ipa, unsigned long size);
|
|
int mkp_destroy_handle(uint32_t policy, uint32_t handle);
|
|
|
|
int mkp_configure_sharebuf(uint32_t policy, uint32_t handle, uint32_t type, unsigned long nr_entries, unsigned long size);
|
|
int mkp_update_sharebuf_1_argu(uint32_t policy, uint32_t handle, unsigned long index, unsigned long a1);
|
|
int mkp_update_sharebuf_2_argu(uint32_t policy, uint32_t handle, unsigned long index, unsigned long a1, unsigned long a2);
|
|
int mkp_update_sharebuf_3_argu(uint32_t policy, uint32_t handle, unsigned long index,
|
|
unsigned long a1, unsigned long a2, unsigned long a3);
|
|
int mkp_update_sharebuf_4_argu(uint32_t policy, uint32_t handle, unsigned long index,
|
|
unsigned long a1, unsigned long a2, unsigned long a3, unsigned long a4);
|
|
int mkp_update_sharebuf_5_argu(uint32_t policy, uint32_t handle, unsigned long index,
|
|
unsigned long a1, unsigned long a2, unsigned long a3, unsigned long a4, unsigned long a5);
|
|
int mkp_update_sharebuf(uint32_t policy, uint32_t handle, unsigned long index/*tag*/, unsigned long ipa);
|
|
int mkp_change_policy_action(uint32_t policy, unsigned long policy_char_action);
|
|
|
|
#endif /* _MKP_API_H */
|