xref: /openbmc/hiomapd/transport_mbox.h (revision fe0c9e86)
1 /* SPDX-License-Identifier: Apache-2.0 */
2 /* Copyright (C) 2018 IBM Corp. */
3 
4 #ifndef MBOXD_MSG_H
5 #define MBOXD_MSG_H
6 
7 #include <stdint.h>
8 
9 struct mbox_context;
10 struct transport_ops;
11 
12 /* Command Values */
13 #define MBOX_C_RESET_STATE		0x01
14 #define MBOX_C_GET_MBOX_INFO		0x02
15 #define MBOX_C_GET_FLASH_INFO		0x03
16 #define MBOX_C_READ_WINDOW		0x04
17 #define MBOX_C_CLOSE_WINDOW		0x05
18 #define MBOX_C_WRITE_WINDOW		0x06
19 #define MBOX_C_WRITE_DIRTY		0x07
20 #define MBOX_C_WRITE_FLUSH		0x08
21 #define MBOX_C_ACK			0x09
22 #define MBOX_C_WRITE_ERASE		0x0a
23 #define NUM_MBOX_CMDS			MBOX_C_WRITE_ERASE
24 
25 /* Response Values */
26 #define MBOX_R_SUCCESS			0x01
27 #define MBOX_R_PARAM_ERROR		0x02
28 #define MBOX_R_WRITE_ERROR		0x03
29 #define MBOX_R_SYSTEM_ERROR		0x04
30 #define MBOX_R_TIMEOUT			0x05
31 #define MBOX_R_BUSY			0x06
32 #define MBOX_R_WINDOW_ERROR		0x07
33 #define MBOX_R_SEQ_ERROR		0x08
34 
35 /* MBOX Registers */
36 #define MBOX_HOST_PATH			"/dev/aspeed-mbox"
37 #define MBOX_HOST_TIMEOUT_SEC		1
38 #define MBOX_ARGS_BYTES			11
39 #define MBOX_REG_BYTES			16
40 #define MBOX_HOST_EVENT			14
41 #define MBOX_BMC_EVENT			15
42 
43 struct mbox_msg {
44 	uint8_t command;
45 	uint8_t seq;
46 	uint8_t args[MBOX_ARGS_BYTES];
47 	uint8_t response;
48 };
49 
50 union mbox_regs {
51 	uint8_t raw[MBOX_REG_BYTES];
52 	struct mbox_msg msg;
53 };
54 
55 int transport_mbox_dispatch(struct mbox_context *context);
56 int transport_mbox_init(struct mbox_context *context,
57 			const struct transport_ops **ops);
58 void transport_mbox_free(struct mbox_context *context);
59 
60 #endif /* MBOXD_MSG_H */
61