xref: /openbmc/hiomapd/transport_mbox.h (revision fe0c9e86ddc55f4fc43b0109b439453d2475c79b)
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