zephyr/drivers/ipm/ipm_cavs_idc.h

44 lines
1.2 KiB
C

/*
* Copyright (c) 2020 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_DRIVERS_IPM_IPM_CAVS_IDC_H_
#define ZEPHYR_DRIVERS_IPM_IPM_CAVS_IDC_H_
#define IPM_CAVS_IDC_ID_MASK \
(CAVS_IDC_TYPE(CAVS_IDC_TYPE_MASK) | \
CAVS_IDC_HEADER(CAVS_IDC_HEADER_MASK))
/* IDC message type. */
#define CAVS_IDC_TYPE_SHIFT 24U
#define CAVS_IDC_TYPE_MASK 0x7FU
#define CAVS_IDC_TYPE(x) \
(((x) & CAVS_IDC_TYPE_MASK) << CAVS_IDC_TYPE_SHIFT)
/* IDC message header. */
#define CAVS_IDC_HEADER_MASK 0xFFFFFFU
#define CAVS_IDC_HEADER(x) ((x) & CAVS_IDC_HEADER_MASK)
/* IDC message extension. */
#define CAVS_IDC_EXTENSION_MASK 0x3FFFFFFFU
#define CAVS_IDC_EXTENSION(x) ((x) & CAVS_IDC_EXTENSION_MASK)
/* Scheduler IPI message (type 0x7F, header 'IPI' in ascii) */
#define IPM_CAVS_IDC_MSG_SCHED_IPI_DATA 0
#define IPM_CAVS_IDC_MSG_SCHED_IPI_ID \
(CAVS_IDC_TYPE(0x7FU) | CAVS_IDC_HEADER(0x495049U))
static inline uint32_t idc_read(uint32_t reg, uint32_t core_id)
{
return *((volatile uint32_t*)(IPC_DSP_BASE(core_id) + reg));
}
static inline void idc_write(uint32_t reg, uint32_t core_id, uint32_t val)
{
*((volatile uint32_t*)(IPC_DSP_BASE(core_id) + reg)) = val;
}
#endif /* ZEPHYR_DRIVERS_IPM_IPM_CAVS_IDC_H_ */