1457a6e5fSAndrew Jeffery /* SPDX-License-Identifier: Apache-2.0 */ 2457a6e5fSAndrew Jeffery /* Copyright (C) 2018 IBM Corp. */ 3457a6e5fSAndrew Jeffery 4457a6e5fSAndrew Jeffery #ifndef MBOXD_MSG_H 5457a6e5fSAndrew Jeffery #define MBOXD_MSG_H 6457a6e5fSAndrew Jeffery 726558dbbSAndrew Jeffery #include <stdint.h> 826558dbbSAndrew Jeffery 926558dbbSAndrew Jeffery struct mbox_context; 10*fe0c9e86SAndrew Jeffery struct transport_ops; 1126558dbbSAndrew Jeffery 1226558dbbSAndrew Jeffery /* Command Values */ 1326558dbbSAndrew Jeffery #define MBOX_C_RESET_STATE 0x01 1426558dbbSAndrew Jeffery #define MBOX_C_GET_MBOX_INFO 0x02 1526558dbbSAndrew Jeffery #define MBOX_C_GET_FLASH_INFO 0x03 1626558dbbSAndrew Jeffery #define MBOX_C_READ_WINDOW 0x04 1726558dbbSAndrew Jeffery #define MBOX_C_CLOSE_WINDOW 0x05 1826558dbbSAndrew Jeffery #define MBOX_C_WRITE_WINDOW 0x06 1926558dbbSAndrew Jeffery #define MBOX_C_WRITE_DIRTY 0x07 2026558dbbSAndrew Jeffery #define MBOX_C_WRITE_FLUSH 0x08 2126558dbbSAndrew Jeffery #define MBOX_C_ACK 0x09 2226558dbbSAndrew Jeffery #define MBOX_C_WRITE_ERASE 0x0a 2326558dbbSAndrew Jeffery #define NUM_MBOX_CMDS MBOX_C_WRITE_ERASE 2426558dbbSAndrew Jeffery 2526558dbbSAndrew Jeffery /* Response Values */ 2626558dbbSAndrew Jeffery #define MBOX_R_SUCCESS 0x01 2726558dbbSAndrew Jeffery #define MBOX_R_PARAM_ERROR 0x02 2826558dbbSAndrew Jeffery #define MBOX_R_WRITE_ERROR 0x03 2926558dbbSAndrew Jeffery #define MBOX_R_SYSTEM_ERROR 0x04 3026558dbbSAndrew Jeffery #define MBOX_R_TIMEOUT 0x05 3126558dbbSAndrew Jeffery #define MBOX_R_BUSY 0x06 3226558dbbSAndrew Jeffery #define MBOX_R_WINDOW_ERROR 0x07 3326558dbbSAndrew Jeffery #define MBOX_R_SEQ_ERROR 0x08 3426558dbbSAndrew Jeffery 3526558dbbSAndrew Jeffery /* MBOX Registers */ 3626558dbbSAndrew Jeffery #define MBOX_HOST_PATH "/dev/aspeed-mbox" 3726558dbbSAndrew Jeffery #define MBOX_HOST_TIMEOUT_SEC 1 3826558dbbSAndrew Jeffery #define MBOX_ARGS_BYTES 11 3926558dbbSAndrew Jeffery #define MBOX_REG_BYTES 16 4026558dbbSAndrew Jeffery #define MBOX_HOST_EVENT 14 4126558dbbSAndrew Jeffery #define MBOX_BMC_EVENT 15 4226558dbbSAndrew Jeffery 4326558dbbSAndrew Jeffery struct mbox_msg { 4426558dbbSAndrew Jeffery uint8_t command; 4526558dbbSAndrew Jeffery uint8_t seq; 4626558dbbSAndrew Jeffery uint8_t args[MBOX_ARGS_BYTES]; 4726558dbbSAndrew Jeffery uint8_t response; 4826558dbbSAndrew Jeffery }; 4926558dbbSAndrew Jeffery 5026558dbbSAndrew Jeffery union mbox_regs { 5126558dbbSAndrew Jeffery uint8_t raw[MBOX_REG_BYTES]; 5226558dbbSAndrew Jeffery struct mbox_msg msg; 5326558dbbSAndrew Jeffery }; 54457a6e5fSAndrew Jeffery 55d86141b6SAndrew Jeffery int transport_mbox_dispatch(struct mbox_context *context); 56*fe0c9e86SAndrew Jeffery int transport_mbox_init(struct mbox_context *context, 57*fe0c9e86SAndrew Jeffery const struct transport_ops **ops); 5855260cefSAndrew Jeffery void transport_mbox_free(struct mbox_context *context); 59457a6e5fSAndrew Jeffery 60457a6e5fSAndrew Jeffery #endif /* MBOXD_MSG_H */ 61