| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Copyright (c) 2019 MediaTek Inc. |
| */ |
| |
| #ifndef __CMDQ_SEC_MAILBOX_H__ |
| #define __CMDQ_SEC_MAILBOX_H__ |
| |
| #define CMDQ_INVALID_THREAD (-1) |
| #define CMDQ_SEC_IRQ_THREAD (15) |
| |
| /* Thread that are high-priority (display threads) */ |
| #define CMDQ_MAX_SECURE_THREAD_COUNT (5) |
| #define CMDQ_MIN_SECURE_THREAD_ID (8) |
| |
| #define CMDQ_THREAD_SEC_PRIMARY_DISP (CMDQ_MIN_SECURE_THREAD_ID) |
| #define CMDQ_THREAD_SEC_SUB_DISP (CMDQ_MIN_SECURE_THREAD_ID + 1) |
| #define CMDQ_THREAD_SEC_MDP (CMDQ_MIN_SECURE_THREAD_ID + 2) |
| #define CMDQ_THREAD_SEC_ISP (CMDQ_MIN_SECURE_THREAD_ID + 3) |
| |
| /* max value of CMDQ_THR_EXEC_CMD_CNT (value starts from 0) */ |
| #ifdef CMDQ_USE_LARGE_MAX_COOKIE |
| #define CMDQ_MAX_COOKIE_VALUE (0xFFFFFFFF) |
| #else |
| #define CMDQ_MAX_COOKIE_VALUE (0xFFFF) |
| #endif |
| |
| /* error code for CMDQ */ |
| #define CMDQ_ERR_NULL_SEC_CTX_HANDLE (6000) |
| #define CMDQ_ERR_SEC_CTX_SETUP (6001) |
| #define CMDQ_ERR_SEC_CTX_TEARDOWN (6002) |
| |
| #ifdef CMDQ_SECURE_MTEE_SUPPORT |
| #include "cmdq_sec_mtee.h" |
| #endif |
| |
| /* |
| * inter-world communication state |
| */ |
| enum CMDQ_IWC_STATE_ENUM { |
| IWC_INIT = 0, |
| IWC_CONTEXT_INITED = 1, |
| IWC_WSM_ALLOCATED = 2, |
| IWC_SES_OPENED = 3, |
| IWC_SES_MSG_PACKAGED = 4, |
| IWC_SES_TRANSACTED = 5, |
| IWC_SES_ON_TRANSACTED = 6, |
| IWC_END_OF_ENUM = 7, |
| }; |
| |
| s32 cmdq_sec_mbox_chan_id(void *chan); |
| void cmdq_sec_dump_secure_thread_cookie(struct mbox_chan *chan); |
| void cmdq_sec_dump_thread_all(void *mbox_cmdq); |
| void cmdq_sec_dump_notify_loop(void *chan); |
| void cmdq_sec_dump_operation(void *chan); |
| void cmdq_sec_dump_response(void *chan, struct cmdq_pkt *pkt, |
| u64 **inst, const char **dispatch); |
| |
| #ifdef CMDQ_SECURE_MTEE_SUPPORT |
| void cmdq_sec_mtee_setup_context(struct cmdq_sec_mtee_context *tee); |
| s32 cmdq_sec_mtee_allocate_shared_memory(struct cmdq_sec_mtee_context *tee, |
| const dma_addr_t MVABase, const u32 size); |
| s32 cmdq_sec_mtee_allocate_wsm(struct cmdq_sec_mtee_context *tee, |
| void **wsm_buffer, u32 size, void **wsm_buf_ex, u32 size_ex, |
| void **wsm_buf_ex2, u32 size_ex2); |
| s32 cmdq_sec_mtee_free_wsm( |
| struct cmdq_sec_mtee_context *tee, void **wsm_buffer); |
| s32 cmdq_sec_mtee_open_session( |
| struct cmdq_sec_mtee_context *tee, void *wsm_buffer); |
| s32 cmdq_sec_mtee_close_session(struct cmdq_sec_mtee_context *tee); |
| s32 cmdq_sec_mtee_execute_session(struct cmdq_sec_mtee_context *tee, |
| u32 cmd, s32 timeout_ms, bool share_mem_ex, bool share_mem_ex2); |
| #endif |
| |
| #if IS_ENABLED(CONFIG_MMPROFILE) |
| void cmdq_sec_mmp_wait(struct mbox_chan *chan, void *pkt); |
| void cmdq_sec_mmp_wait_done(struct mbox_chan *chan, void *pkt); |
| #endif |
| |
| #endif |