/* SPDX-License-Identifier: Apache-2.0 */ /* Copyright (C) 2018 IBM Corp. */ #ifndef MBOXD_MSG_H #define MBOXD_MSG_H #include struct mbox_context; struct transport_ops; /* Command Values */ #define MBOX_C_RESET_STATE 0x01 #define MBOX_C_GET_MBOX_INFO 0x02 #define MBOX_C_GET_FLASH_INFO 0x03 #define MBOX_C_READ_WINDOW 0x04 #define MBOX_C_CLOSE_WINDOW 0x05 #define MBOX_C_WRITE_WINDOW 0x06 #define MBOX_C_WRITE_DIRTY 0x07 #define MBOX_C_WRITE_FLUSH 0x08 #define MBOX_C_ACK 0x09 #define MBOX_C_WRITE_ERASE 0x0a #define NUM_MBOX_CMDS MBOX_C_WRITE_ERASE /* Response Values */ #define MBOX_R_SUCCESS 0x01 #define MBOX_R_PARAM_ERROR 0x02 #define MBOX_R_WRITE_ERROR 0x03 #define MBOX_R_SYSTEM_ERROR 0x04 #define MBOX_R_TIMEOUT 0x05 #define MBOX_R_BUSY 0x06 #define MBOX_R_WINDOW_ERROR 0x07 #define MBOX_R_SEQ_ERROR 0x08 /* MBOX Registers */ #define MBOX_HOST_PATH "/dev/aspeed-mbox" #define MBOX_HOST_TIMEOUT_SEC 1 #define MBOX_ARGS_BYTES 11 #define MBOX_REG_BYTES 16 #define MBOX_HOST_EVENT 14 #define MBOX_BMC_EVENT 15 struct mbox_msg { uint8_t command; uint8_t seq; uint8_t args[MBOX_ARGS_BYTES]; uint8_t response; }; union mbox_regs { uint8_t raw[MBOX_REG_BYTES]; struct mbox_msg msg; }; int transport_mbox_dispatch(struct mbox_context *context); int transport_mbox_init(struct mbox_context *context, const struct transport_ops **ops); void transport_mbox_free(struct mbox_context *context); #endif /* MBOXD_MSG_H */