xref: /openbmc/hiomapd/mboxd.h (revision ef0c8360065eba7f353f4ac866a1f6f86bf18cf4)
126558dbbSAndrew Jeffery /* SPDX-License-Identifier: Apache-2.0 */
226558dbbSAndrew Jeffery /* Copyright (C) 2018 IBM Corp. */
326558dbbSAndrew Jeffery 
426558dbbSAndrew Jeffery #ifndef MBOX_H
526558dbbSAndrew Jeffery #define MBOX_H
626558dbbSAndrew Jeffery 
7f1e547c7SEvan Lojewski #include <assert.h>
8*ef0c8360SStewart Smith #include <linux/blktrace_api.h>
926558dbbSAndrew Jeffery #include <mtd/mtd-abi.h>
1026558dbbSAndrew Jeffery #include <systemd/sd-bus.h>
1126558dbbSAndrew Jeffery #include <poll.h>
1226558dbbSAndrew Jeffery #include <stdbool.h>
1326558dbbSAndrew Jeffery 
14f1e547c7SEvan Lojewski #include "backend.h"
1526558dbbSAndrew Jeffery #include "protocol.h"
1626558dbbSAndrew Jeffery #include "transport.h"
17f4bc335bSAndrew Jeffery #include "vpnor/backend.h"
1826558dbbSAndrew Jeffery #include "windows.h"
1926558dbbSAndrew Jeffery 
2026558dbbSAndrew Jeffery enum api_version {
2126558dbbSAndrew Jeffery 	API_VERSION_INVAL	= 0,
2226558dbbSAndrew Jeffery 	API_VERSION_1		= 1,
2326558dbbSAndrew Jeffery 	API_VERSION_2		= 2
2426558dbbSAndrew Jeffery };
2526558dbbSAndrew Jeffery 
2626558dbbSAndrew Jeffery #define API_MIN_VERSION			API_VERSION_1
2726558dbbSAndrew Jeffery #define API_MAX_VERSION			API_VERSION_2
2826558dbbSAndrew Jeffery 
2926558dbbSAndrew Jeffery #define THIS_NAME			"Mailbox Daemon"
3026558dbbSAndrew Jeffery 
3126558dbbSAndrew Jeffery /* Argument Flags */
3226558dbbSAndrew Jeffery #define FLAGS_NONE			0x00
3326558dbbSAndrew Jeffery #define FLAGS_SHORT_LIFETIME		0x01
3426558dbbSAndrew Jeffery 
3526558dbbSAndrew Jeffery /* BMC Event Notification */
36fab672bdSAndrew Jeffery #define BMC_EVENT_PROTOCOL_RESET	0x01
3726558dbbSAndrew Jeffery #define BMC_EVENT_WINDOW_RESET		0x02
38fab672bdSAndrew Jeffery #define BMC_EVENT_ACK_MASK		(BMC_EVENT_PROTOCOL_RESET | \
3926558dbbSAndrew Jeffery 					BMC_EVENT_WINDOW_RESET)
4026558dbbSAndrew Jeffery #define BMC_EVENT_FLASH_CTRL_LOST	0x40
4126558dbbSAndrew Jeffery #define BMC_EVENT_DAEMON_READY		0x80
42fab672bdSAndrew Jeffery #define BMC_EVENT_V1_MASK		BMC_EVENT_PROTOCOL_RESET
43fab672bdSAndrew Jeffery #define BMC_EVENT_V2_MASK		(BMC_EVENT_PROTOCOL_RESET | \
4426558dbbSAndrew Jeffery 					BMC_EVENT_WINDOW_RESET | \
4526558dbbSAndrew Jeffery 					BMC_EVENT_FLASH_CTRL_LOST | \
4626558dbbSAndrew Jeffery 					BMC_EVENT_DAEMON_READY)
4726558dbbSAndrew Jeffery 
4826558dbbSAndrew Jeffery /* Put polled file descriptors first */
4926558dbbSAndrew Jeffery #define DBUS_FD			0
5026558dbbSAndrew Jeffery #define MBOX_FD			1
5126558dbbSAndrew Jeffery #define SIG_FD			2
5226558dbbSAndrew Jeffery #define POLL_FDS		3 /* Number of FDs we poll on */
5326558dbbSAndrew Jeffery #define LPC_CTRL_FD		3
54f1e547c7SEvan Lojewski #define TOTAL_FDS		4
5526558dbbSAndrew Jeffery 
5626558dbbSAndrew Jeffery #define MAPS_FLASH		(1 << 0)
5726558dbbSAndrew Jeffery #define MAPS_MEM		(1 << 1)
5826558dbbSAndrew Jeffery #define STATE_SUSPENDED		(1 << 7)
5926558dbbSAndrew Jeffery 
6026558dbbSAndrew Jeffery enum mbox_state {
6126558dbbSAndrew Jeffery 	/* Still Initing */
6226558dbbSAndrew Jeffery 	UNINITIALISED = 0,
6326558dbbSAndrew Jeffery 	/* Active and LPC Maps Flash */
6426558dbbSAndrew Jeffery 	ACTIVE_MAPS_FLASH = MAPS_FLASH,
6526558dbbSAndrew Jeffery 	/* Suspended and LPC Maps Flash */
6626558dbbSAndrew Jeffery 	SUSPEND_MAPS_FLASH = STATE_SUSPENDED | MAPS_FLASH,
6726558dbbSAndrew Jeffery 	/* Active and LPC Maps Memory */
6826558dbbSAndrew Jeffery 	ACTIVE_MAPS_MEM = MAPS_MEM,
6926558dbbSAndrew Jeffery 	/* Suspended and LPC Maps Memory */
7026558dbbSAndrew Jeffery 	SUSPEND_MAPS_MEM = STATE_SUSPENDED | MAPS_MEM
7126558dbbSAndrew Jeffery };
7226558dbbSAndrew Jeffery 
7326558dbbSAndrew Jeffery struct mbox_context {
7426558dbbSAndrew Jeffery 	enum api_version version;
7526558dbbSAndrew Jeffery 	const struct protocol_ops *protocol;
7626558dbbSAndrew Jeffery 	const struct transport_ops *transport;
77f1e547c7SEvan Lojewski 	struct backend backend;
78f1e547c7SEvan Lojewski 
79f1e547c7SEvan Lojewski 	/* Commandline parameters */
805320f6e0SAndrew Jeffery 	const char *source;
8126558dbbSAndrew Jeffery 
8226558dbbSAndrew Jeffery /* System State */
8326558dbbSAndrew Jeffery 	enum mbox_state state;
8426558dbbSAndrew Jeffery 	struct pollfd fds[TOTAL_FDS];
8526558dbbSAndrew Jeffery 	sd_bus *bus;
8626558dbbSAndrew Jeffery 	bool terminate;
8726558dbbSAndrew Jeffery 	uint8_t bmc_events;
8826558dbbSAndrew Jeffery 	uint8_t prev_seq;
8926558dbbSAndrew Jeffery 
9026558dbbSAndrew Jeffery /* Window State */
9126558dbbSAndrew Jeffery 	/* The window list struct containing all current "windows" */
9226558dbbSAndrew Jeffery 	struct window_list windows;
9326558dbbSAndrew Jeffery 	/* The window the host is currently pointed at */
9426558dbbSAndrew Jeffery 	struct window_context *current;
9526558dbbSAndrew Jeffery 	/* Is the current window a write one */
9626558dbbSAndrew Jeffery 	bool current_is_write;
9726558dbbSAndrew Jeffery 
9826558dbbSAndrew Jeffery /* Memory & Flash State */
9926558dbbSAndrew Jeffery 	/* Reserved Memory Region */
10026558dbbSAndrew Jeffery 	void *mem;
10126558dbbSAndrew Jeffery 	/* Reserved Mem Size (bytes) */
10226558dbbSAndrew Jeffery 	uint32_t mem_size;
10326558dbbSAndrew Jeffery 	/* LPC Bus Base Address (bytes) */
10426558dbbSAndrew Jeffery 	uint32_t lpc_base;
105*ef0c8360SStewart Smith 
106*ef0c8360SStewart Smith 	/* Tracing */
107*ef0c8360SStewart Smith 	int blktracefd;
108*ef0c8360SStewart Smith 	struct blk_io_trace trace;
109*ef0c8360SStewart Smith 	int64_t blktrace_start;
11026558dbbSAndrew Jeffery };
11126558dbbSAndrew Jeffery 
11226558dbbSAndrew Jeffery #endif /* MBOX_H */
113