summaryrefslogtreecommitdiffstats
path: root/mboxd.h
blob: 96235d7b78fce5fe87f1d8d6067fae22482b99ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/* SPDX-License-Identifier: Apache-2.0 */
/* Copyright (C) 2018 IBM Corp. */

#ifndef MBOX_H
#define MBOX_H

#include <assert.h>
#include <mtd/mtd-abi.h>
#include <systemd/sd-bus.h>
#include <poll.h>
#include <stdbool.h>

#include "backend.h"
#include "protocol.h"
#include "transport.h"
#include "vpnor/backend.h"
#include "windows.h"

enum api_version {
	API_VERSION_INVAL	= 0,
	API_VERSION_1		= 1,
	API_VERSION_2		= 2
};

#define API_MIN_VERSION			API_VERSION_1
#define API_MAX_VERSION			API_VERSION_2

#define THIS_NAME			"Mailbox Daemon"

/* Argument Flags */
#define FLAGS_NONE			0x00
#define FLAGS_SHORT_LIFETIME		0x01

/* BMC Event Notification */
#define BMC_EVENT_PROTOCOL_RESET	0x01
#define BMC_EVENT_WINDOW_RESET		0x02
#define BMC_EVENT_ACK_MASK		(BMC_EVENT_PROTOCOL_RESET | \
					BMC_EVENT_WINDOW_RESET)
#define BMC_EVENT_FLASH_CTRL_LOST	0x40
#define BMC_EVENT_DAEMON_READY		0x80
#define BMC_EVENT_V1_MASK		BMC_EVENT_PROTOCOL_RESET
#define BMC_EVENT_V2_MASK		(BMC_EVENT_PROTOCOL_RESET | \
					BMC_EVENT_WINDOW_RESET | \
					BMC_EVENT_FLASH_CTRL_LOST | \
					BMC_EVENT_DAEMON_READY)

/* Put polled file descriptors first */
#define DBUS_FD			0
#define MBOX_FD			1
#define SIG_FD			2
#define POLL_FDS		3 /* Number of FDs we poll on */
#define LPC_CTRL_FD		3
#define TOTAL_FDS		4

#define MAPS_FLASH		(1 << 0)
#define MAPS_MEM		(1 << 1)
#define STATE_SUSPENDED		(1 << 7)

enum mbox_state {
	/* Still Initing */
	UNINITIALISED = 0,
	/* Active and LPC Maps Flash */
	ACTIVE_MAPS_FLASH = MAPS_FLASH,
	/* Suspended and LPC Maps Flash */
	SUSPEND_MAPS_FLASH = STATE_SUSPENDED | MAPS_FLASH,
	/* Active and LPC Maps Memory */
	ACTIVE_MAPS_MEM = MAPS_MEM,
	/* Suspended and LPC Maps Memory */
	SUSPEND_MAPS_MEM = STATE_SUSPENDED | MAPS_MEM
};

struct mbox_context {
	enum api_version version;
	const struct protocol_ops *protocol;
	const struct transport_ops *transport;
	struct backend backend;

	/* Commandline parameters */
	const char *source;

/* System State */
	enum mbox_state state;
	struct pollfd fds[TOTAL_FDS];
	sd_bus *bus;
	bool terminate;
	uint8_t bmc_events;
	uint8_t prev_seq;

/* Window State */
	/* The window list struct containing all current "windows" */
	struct window_list windows;
	/* The window the host is currently pointed at */
	struct window_context *current;
	/* Is the current window a write one */
	bool current_is_write;

/* Memory & Flash State */
	/* Reserved Memory Region */
	void *mem;
	/* Reserved Mem Size (bytes) */
	uint32_t mem_size;
	/* LPC Bus Base Address (bytes) */
	uint32_t lpc_base;
};

#endif /* MBOX_H */
OpenPOWER on IntegriCloud