1 /** @file
2   The internal header file that declared a data structure that is shared
3   between the MM IPL and the MM Core.
4 
5   Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
6   Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.<BR>
7   SPDX-License-Identifier: BSD-2-Clause-Patent
8 
9 **/
10 
11 #ifndef _STANDALONE_MM_CORE_PRIVATE_DATA_H_
12 #define _STANDALONE_MM_CORE_PRIVATE_DATA_H_
13 
14 #include <Guid/MmCoreData.h>
15 
16 //
17 // Page management
18 //
19 
20 typedef struct {
21   LIST_ENTRY  Link;
22   UINTN       NumberOfPages;
23 } FREE_PAGE_LIST;
24 
25 extern LIST_ENTRY  mMmMemoryMap;
26 
27 //
28 // Pool management
29 //
30 
31 //
32 // MIN_POOL_SHIFT must not be less than 5
33 //
34 #define MIN_POOL_SHIFT  6
35 #define MIN_POOL_SIZE   (1 << MIN_POOL_SHIFT)
36 
37 //
38 // MAX_POOL_SHIFT must not be less than EFI_PAGE_SHIFT - 1
39 //
40 #define MAX_POOL_SHIFT  (EFI_PAGE_SHIFT - 1)
41 #define MAX_POOL_SIZE   (1 << MAX_POOL_SHIFT)
42 
43 //
44 // MAX_POOL_INDEX are calculated by maximum and minimum pool sizes
45 //
46 #define MAX_POOL_INDEX  (MAX_POOL_SHIFT - MIN_POOL_SHIFT + 1)
47 
48 typedef struct {
49   UINTN        Size;
50   BOOLEAN      Available;
51 } POOL_HEADER;
52 
53 typedef struct {
54   POOL_HEADER  Header;
55   LIST_ENTRY   Link;
56 } FREE_POOL_HEADER;
57 
58 extern LIST_ENTRY  mMmPoolLists[MAX_POOL_INDEX];
59 
60 #endif
61