| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Copyright (c) 2019 MediaTek Inc. |
| */ |
| |
| #ifndef _SLBC_IPI_H_ |
| #define _SLBC_IPI_H_ |
| |
| enum { |
| IPI_SLBC_ENABLE, |
| IPI_SLBC_SYNC_FROM_AP, |
| IPI_SLBC_SYNC_TO_AP, |
| IPI_SLBC_CACHE_REQUEST_FROM_AP, |
| IPI_SLBC_CACHE_REQUEST_TO_AP, |
| IPI_SLBC_CACHE_RELEASE_FROM_AP, |
| IPI_SLBC_CACHE_RELEASE_TO_AP, |
| IPI_SLBC_BUFFER_REQUEST_FROM_AP, |
| IPI_SLBC_BUFFER_REQUEST_TO_AP, |
| IPI_SLBC_BUFFER_RELEASE_FROM_AP, |
| IPI_SLBC_BUFFER_RELEASE_TO_AP, |
| IPI_SLBC_ACP_REQUEST_FROM_AP, |
| IPI_SLBC_ACP_REQUEST_TO_AP, |
| IPI_SLBC_ACP_RELEASE_FROM_AP, |
| IPI_SLBC_ACP_RELEASE_TO_AP, |
| IPI_SLBC_SUSPEND_RESUME_NOTIFY, |
| IPI_SLBC_BUFFER_POWER_ON, |
| IPI_SLBC_BUFFER_POWER_OFF, |
| IPI_SLBC_FORCE, |
| IPI_SLBC_MIC_NUM, |
| IPI_SLBC_INNER, |
| IPI_SLBC_OUTER, |
| IPI_SLBC_MEM_BARRIER, |
| IPI_SLB_DISABLE, |
| IPI_SLC_DISABLE, |
| IPI_SLBC_BUFFER_STATUS, |
| NR_IPI_SLBC, |
| }; |
| |
| struct slbc_ipi_data { |
| unsigned int cmd; |
| unsigned int arg; |
| }; |
| |
| struct slbc_ipi_ops { |
| int (*slbc_request_acp)(void *ptr); |
| int (*slbc_release_acp)(void *ptr); |
| void (*slbc_mem_barrier)(void); |
| }; |
| |
| extern int slbc_scmi_set(void *buffer, int slot); |
| extern int slbc_scmi_get(void *buffer, int slot, void *ptr); |
| |
| #define SLBC_IPI(x, y) ((x) & 0xffff | ((y) & 0xffff) << 16) |
| #define SLBC_IPI_CMD_GET(x) ((x) & 0xffff) |
| #define SLBC_IPI_UID_GET(x) ((x) >> 16 & 0xffff) |
| |
| #if IS_ENABLED(CONFIG_MTK_SLBC_IPI) |
| extern int slbc_suspend_resume_notify(int suspend); |
| extern int slbc_scmi_init(void); |
| extern int slbc_sspm_slb_disable(int disable); |
| extern int slbc_sspm_slc_disable(int disable); |
| extern int slbc_sspm_enable(int enable); |
| extern int slbc_get_scmi_enable(void); |
| extern void slbc_set_scmi_enable(int enable); |
| extern int slbc_force_scmi_cmd(unsigned int force); |
| extern int slbc_mic_num_cmd(unsigned int num); |
| extern int slbc_inner_cmd(unsigned int inner); |
| extern int slbc_outer_cmd(unsigned int outer); |
| extern int _slbc_request_cache_scmi(void *ptr); |
| extern int _slbc_release_cache_scmi(void *ptr); |
| extern int _slbc_buffer_status_scmi(void *ptr); |
| extern int _slbc_request_buffer_scmi(void *ptr); |
| extern int _slbc_release_buffer_scmi(void *ptr); |
| extern void slbc_register_ipi_ops(struct slbc_ipi_ops *ops); |
| extern void slbc_unregister_ipi_ops(struct slbc_ipi_ops *ops); |
| #else |
| __weak int slbc_suspend_resume_notify(int) {} |
| __weak int slbc_scmi_init(void) { return 0; } |
| __weak int slbc_sspm_slb_disable(int disable) {} |
| __weak int slbc_sspm_slc_disable(int disable) {} |
| __weak int slbc_sspm_enable(int enable) {} |
| __weak int slbc_get_scmi_enable(void) { return 0; } |
| __weak void slbc_set_scmi_enable(int enable) {} |
| __weak int slbc_force_scmi_cmd(unsigned int force) {} |
| __weak int slbc_mic_num_cmd(unsigned int num) {} |
| __weak int slbc_inner_cmd(unsigned int inner) {} |
| __weak int slbc_outer_cmd(unsigned int outer) {} |
| __weak int _slbc_request_cache_scmi(void *ptr) {} |
| __weak int _slbc_release_cache_scmi(void *ptr) {} |
| __weak int _slbc_buffer_status_scmi(void *ptr) {} |
| __weak int _slbc_request_buffer_scmi(void *ptr) {} |
| __weak int _slbc_release_buffer_scmi(void *ptr) {} |
| __weak void slbc_register_ipi_ops(struct slbc_ipi_ops *ops) {} |
| __weak void slbc_unregister_ipi_ops(struct slbc_ipi_ops *ops) {} |
| #endif /* CONFIG_MTK_SLBC_IPI */ |
| |
| #endif /* _SLBC_IPI_H_ */ |
| |