| /* Copyright (c) 2016 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| /* IPC module for ISH */ |
| |
| #ifndef __CROS_EC_IPC_H |
| #define __CROS_ECIPC_H |
| |
| #define IPC_FAILURE -1 |
| #define IPC_TIMEOUT -1 |
| #define UNSET_PIMR 0 |
| #define SET_PIMR 1 |
| #define SET_BUSY 1 |
| |
| #define IPC_PROTOCOL_MNG 3 /* Management protocol */ |
| #define IPC_PROTOCOL_ECP 4 /* EC protocol */ |
| #define MNG_TIME_UPDATE 5 |
| |
| #define EVENT_FLAG_BIT_READ_IPC (1<<0) |
| #define EVENT_FLAG_BIT_WRITE_IPC (1<<2) |
| |
| #define IPC_PIMR_HOST2ISH_OFFS (0) |
| #define IPC_PIMR_HOST2ISH_OFFS (0) |
| #define IPC_PIMR_ISH2HOST_CLR_OFFS (11) |
| #define IPC_INT_ISH2HOST_CLR_OFFS (0) |
| #define IPC_PISR_HOST2ISH_OFFS IPC_PIMR_HOST2ISH_OFFS |
| #define IPC_MSG_MAX_SIZE 0x80 |
| #define IPC_DRBL_BUSY_OFFS (31) |
| #define IPC_HEADER_PROTOCOL_OFFSET 10 |
| #define IPC_HEADER_PROTOCOL_MASK (0x0F) |
| #define IPC_HEADER_MNG_CMD_MASK (0x0F) |
| #define IPC_HEADER_LENGTH_MASK (0x03FF) |
| #define IPC_HEADER_MNG_CMD_OFFSET 16 |
| #define IPC_HEADER_LENGTH_OFFSET 0 |
| #define IPC_OOB_MSG_OFFS (30) |
| |
| #define IPC_PIMR_HOST2ISH_BIT (1 << IPC_PIMR_HOST2ISH_OFFS) |
| #define IPC_PIMR_ISH2HOST_CLR_MASK_BIT (1 << IPC_PIMR_ISH2HOST_CLR_OFFS) |
| #define IPC_PIMR_HOST2ISH_BIT (1 << IPC_PIMR_HOST2ISH_OFFS) |
| #define IPC_INT_ISH2HOST_CLR_BIT (1 << IPC_INT_ISH2HOST_CLR_OFFS) |
| #define IPC_PISR_HOST2ISH_BIT (1 << IPC_PISR_HOST2ISH_OFFS) |
| #define IPC_OOB_MSG_BIT (1 << IPC_OOB_MSG_OFFS) |
| #define IPC_DRBL_BUSY_BIT (1 << IPC_DRBL_BUSY_OFFS) |
| |
| #define IPC_IS_BUSY(drbl_reg) \ |
| ((drbl_reg & IPC_DRBL_BUSY_BIT) == ((uint32_t) IPC_DRBL_BUSY_BIT)) |
| |
| #define IPC_HEADER_GET_PROTOCOL(drbl_reg) \ |
| ((drbl_reg >> IPC_HEADER_PROTOCOL_OFFSET) & IPC_HEADER_PROTOCOL_MASK) |
| |
| #define IPC_HEADER_GET_MNG_CMD(drbl_reg) \ |
| ((drbl_reg >> IPC_HEADER_MNG_CMD_OFFSET) & IPC_HEADER_MNG_CMD_MASK) |
| |
| #define IPC_HEADER_GET_LENGTH(drbl_reg) \ |
| ((drbl_reg >> IPC_HEADER_LENGTH_OFFSET) & IPC_HEADER_LENGTH_MASK) |
| |
| #define IPC_BUILD_HEADER(length, protocol, busy) \ |
| ((busy << IPC_DRBL_BUSY_OFFS) \ |
| | (protocol << IPC_HEADER_PROTOCOL_OFFSET) \ |
| | (length << IPC_HEADER_LENGTH_OFFSET)) |
| |
| #define IPC_BUILD_MNG_MSG(cmd, length) \ |
| ((1 << IPC_DRBL_BUSY_OFFS)\ |
| | (IPC_PROTOCOL_MNG << IPC_HEADER_PROTOCOL_OFFSET) \ |
| | (cmd << IPC_HEADER_MNG_CMD_OFFSET)\ |
| | (length << IPC_HEADER_LENGTH_OFFSET)) |
| |
| struct ipc_if_ctx { |
| uint32_t in_msg_reg; |
| uint32_t out_msg_reg; |
| uint32_t in_drbl_reg; |
| uint32_t out_drbl_reg; |
| uint32_t clr_bit; |
| uint8_t irq_in; |
| uint8_t irq_clr; |
| }; |
| |
| struct ipc_oob_msg { |
| uint32_t address; |
| uint32_t length; |
| }; |
| |
| enum pimr_signal_type { |
| PIMR_SIGNAL_IN = 0, |
| PIMR_SIGNAL_OUT = 1, |
| PIMR_SIGNAL_CLR = 2, |
| }; |
| |
| enum { |
| IPC_PEER_HOST_ID = 0, |
| IPC_PEERS_COUNT, |
| }; |
| |
| #endif /* __CROS_ECIPC_H */ |