Line data Source code
1 1 : /*
2 : * Copyright (c) 2023 Intel Corporation
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : /**
8 : * @file
9 : * @brief Memory Banks Driver APIs
10 : *
11 : * This contains generic APIs to be used by a system-wide memory management
12 : * driver to track page usage within memory banks.
13 : *
14 : * @note The caller of these functions needs to ensure proper locking
15 : * to protect the data when using these APIs.
16 : */
17 :
18 : #ifndef ZEPHYR_INCLUDE_DRIVERS_MM_DRV_BANK_H
19 : #define ZEPHYR_INCLUDE_DRIVERS_MM_DRV_BANK_H
20 :
21 : #include <zephyr/kernel.h>
22 : #include <zephyr/sys/mem_stats.h>
23 : #include <stdint.h>
24 :
25 : /**
26 : * @brief Memory Banks Driver APIs
27 : * @defgroup mm_drv_bank_apis Memory Banks Driver APIs
28 : *
29 : * This contains APIs for a system-wide memory management driver to
30 : * track page usage within memory banks.
31 : *
32 : * @note The caller of these functions needs to ensure proper locking
33 : * to protect the data when using these APIs.
34 : *
35 : * @ingroup memory_management
36 : * @{
37 : */
38 :
39 : /**
40 : * @brief Information about memory banks.
41 : */
42 1 : struct sys_mm_drv_bank {
43 : /** Number of unmapped pages. */
44 1 : uint32_t unmapped_pages;
45 :
46 : /** Number of mapped pages. */
47 1 : uint32_t mapped_pages;
48 :
49 : /** Maximum number of mapped pages since last counter reset. */
50 1 : uint32_t max_mapped_pages;
51 : };
52 :
53 : /**
54 : * @brief Initialize a memory bank's data structure
55 : *
56 : * The driver may wish to track various information about the memory banks
57 : * that it uses. This routine will initialize a generic structure containing
58 : * that information. Since at the power on all memory banks are switched on
59 : * it will start with all pages mapped. In next phase of driver initialization
60 : * unused pages will be unmapped.
61 : *
62 : * @param[in,out] bank Pointer to the memory bank structure used for tracking
63 : * @param[in] bank_pages Number of pages in the memory bank
64 : */
65 1 : void sys_mm_drv_bank_init(struct sys_mm_drv_bank *bank, uint32_t bank_pages);
66 :
67 : /**
68 : * @brief Track the mapping of a page in the specified memory bank
69 : *
70 : * This function is used to update the number of mapped pages within the
71 : * specified memory bank.
72 : *
73 : * @param[in,out] bank Pointer to the memory bank's data structure
74 : *
75 : * @return The number of pages mapped within the memory bank
76 : */
77 1 : uint32_t sys_mm_drv_bank_page_mapped(struct sys_mm_drv_bank *bank);
78 :
79 : /**
80 : * @brief Track the unmapping of a page in the specified memory bank
81 : *
82 : * This function is used to update the number of unmapped pages within the
83 : * specified memory bank.
84 : *
85 : * @param[in,out] bank Pointer to the memory bank's data structure
86 : *
87 : * @return The number of unmapped pages within the memory bank
88 : */
89 1 : uint32_t sys_mm_drv_bank_page_unmapped(struct sys_mm_drv_bank *bank);
90 :
91 : /**
92 : * @brief Reset the max number of pages mapped in the bank
93 : *
94 : * This routine is used to reset the maximum number of pages mapped in
95 : * the specified memory bank to the current number of pages mapped in
96 : * that memory bank.
97 : *
98 : * @param[in,out] bank Pointer to the memory bank's data structure
99 : */
100 1 : void sys_mm_drv_bank_stats_reset_max(struct sys_mm_drv_bank *bank);
101 :
102 : /**
103 : * @brief Retrieve the memory usage stats for the specified memory bank
104 : *
105 : * This routine extracts the system memory stats from the memory bank.
106 : *
107 : * @param[in] bank Pointer to the memory bank's data structure
108 : * @param[in,out] stats Pointer to memory into which to copy the system memory stats
109 : */
110 1 : void sys_mm_drv_bank_stats_get(struct sys_mm_drv_bank *bank,
111 : struct sys_memory_stats *stats);
112 :
113 : /**
114 : * @}
115 : */
116 :
117 : #endif /* ZEPHYR_INCLUDE_DRIVERS_MM_DRV_BANK_H */
|