xref: /openbmc/hiomapd/windows.h (revision b5fd0a47)
1 /* SPDX-License-Identifier: Apache-2.0 */
2 /* Copyright (C) 2018 IBM Corp. */
3 
4 #ifndef WINDOWS_H
5 #define WINDOWS_H
6 
7 #include <stdbool.h>
8 
9 #define WINDOWS_NO_FLUSH	false
10 #define WINDOWS_WITH_FLUSH	true
11 
12 struct mbox_context;
13 
14 /* Window Dirty/Erase bytemap masks */
15 #define WINDOW_CLEAN			0x00
16 #define WINDOW_DIRTY			0x01
17 #define WINDOW_ERASED			0x02
18 
19 #define FLASH_OFFSET_UNINIT	0xFFFFFFFF
20 
21 struct window_context {
22 	void *mem;			/* Portion of Reserved Memory Region */
23 	uint32_t flash_offset;		/* Flash area the window maps (bytes) */
24 	uint32_t size;			/* Window Size (bytes) power-of-2 */
25 	uint8_t *dirty_bmap;		/* Bytemap of the dirty/erased state */
26 	uint32_t age;			/* Used for LRU eviction scheme */
27 };
28 
29 struct window_list {
30 	uint32_t num;
31 	uint32_t max_age;
32 	uint32_t default_size;
33 	struct window_context *window;
34 };
35 
36 /* Initialisation Functions */
37 int windows_init(struct mbox_context *context);
38 void windows_free(struct mbox_context *context);
39 /* Write From Window Functions */
40 int window_flush_v1(struct mbox_context *context,
41 			 uint32_t offset_bytes, uint32_t count_bytes);
42 int window_flush(struct mbox_context *context, uint32_t offset,
43 		      uint32_t count, uint8_t type);
44 /* Window Management Functions */
45 void windows_alloc_dirty_bytemap(struct mbox_context *context);
46 int window_set_bytemap(struct mbox_context *context, struct window_context *cur,
47 		       uint32_t offset, uint32_t size, uint8_t val);
48 void windows_close_current(struct mbox_context *context, uint8_t flags);
49 void window_reset(struct mbox_context *context, struct window_context *window);
50 bool windows_reset_all(struct mbox_context *context);
51 struct window_context *windows_find_oldest(struct mbox_context *context);
52 struct window_context *windows_find_largest(struct mbox_context *context);
53 struct window_context *windows_search(struct mbox_context *context,
54 				      uint32_t offset, bool exact);
55 int windows_create_map(struct mbox_context *context,
56 		      struct window_context **this_window,
57 		      uint32_t offset, bool exact);
58 
59 #endif /* WINDOWS_H */
60