35
35
36
36
#define EFI_MAX_FAKEMEM CONFIG_EFI_MAX_FAKE_MEM
37
37
38
- struct fake_mem {
39
- struct range range ;
40
- u64 attribute ;
41
- };
42
- static struct fake_mem fake_mems [EFI_MAX_FAKEMEM ];
38
+ static struct efi_mem_range fake_mems [EFI_MAX_FAKEMEM ];
43
39
static int nr_fake_mem ;
44
40
45
41
static int __init cmp_fake_mem (const void * x1 , const void * x2 )
46
42
{
47
- const struct fake_mem * m1 = x1 ;
48
- const struct fake_mem * m2 = x2 ;
43
+ const struct efi_mem_range * m1 = x1 ;
44
+ const struct efi_mem_range * m2 = x2 ;
49
45
50
46
if (m1 -> range .start < m2 -> range .start )
51
47
return -1 ;
@@ -54,133 +50,6 @@ static int __init cmp_fake_mem(const void *x1, const void *x2)
54
50
return 0 ;
55
51
}
56
52
57
- /**
58
- * efi_fake_memmap_split_count - Count number of additional EFI memmap entries
59
- * @md: EFI memory descriptor to split
60
- * @range: Address range (start, end) to split around
61
- *
62
- * Returns the number of additional EFI memmap entries required to
63
- * accomodate @range.
64
- */
65
- static int efi_fake_memmap_split_count (efi_memory_desc_t * md , struct range * range )
66
- {
67
- u64 m_start , m_end ;
68
- u64 start , end ;
69
- int count = 0 ;
70
-
71
- start = md -> phys_addr ;
72
- end = start + (md -> num_pages << EFI_PAGE_SHIFT ) - 1 ;
73
-
74
- /* modifying range */
75
- m_start = range -> start ;
76
- m_end = range -> end ;
77
-
78
- if (m_start <= start ) {
79
- /* split into 2 parts */
80
- if (start < m_end && m_end < end )
81
- count ++ ;
82
- }
83
-
84
- if (start < m_start && m_start < end ) {
85
- /* split into 3 parts */
86
- if (m_end < end )
87
- count += 2 ;
88
- /* split into 2 parts */
89
- if (end <= m_end )
90
- count ++ ;
91
- }
92
-
93
- return count ;
94
- }
95
-
96
- /**
97
- * efi_fake_memmap_insert - Insert a fake memory region in an EFI memmap
98
- * @old_memmap: The existing EFI memory map structure
99
- * @buf: Address of buffer to store new map
100
- * @mem: Fake memory map entry to insert
101
- *
102
- * It is suggested that you call efi_fake_memmap_split_count() first
103
- * to see how large @buf needs to be.
104
- */
105
- static void efi_fake_memmap_insert (struct efi_memory_map * old_memmap ,
106
- void * buf , struct fake_mem * mem )
107
- {
108
- u64 m_start , m_end , m_attr ;
109
- efi_memory_desc_t * md ;
110
- u64 start , end ;
111
- void * old , * new ;
112
-
113
- /* modifying range */
114
- m_start = mem -> range .start ;
115
- m_end = mem -> range .end ;
116
- m_attr = mem -> attribute ;
117
-
118
- for (old = old_memmap -> map , new = buf ;
119
- old < old_memmap -> map_end ;
120
- old += old_memmap -> desc_size , new += old_memmap -> desc_size ) {
121
-
122
- /* copy original EFI memory descriptor */
123
- memcpy (new , old , old_memmap -> desc_size );
124
- md = new ;
125
- start = md -> phys_addr ;
126
- end = md -> phys_addr + (md -> num_pages << EFI_PAGE_SHIFT ) - 1 ;
127
-
128
- if (m_start <= start && end <= m_end )
129
- md -> attribute |= m_attr ;
130
-
131
- if (m_start <= start &&
132
- (start < m_end && m_end < end )) {
133
- /* first part */
134
- md -> attribute |= m_attr ;
135
- md -> num_pages = (m_end - md -> phys_addr + 1 ) >>
136
- EFI_PAGE_SHIFT ;
137
- /* latter part */
138
- new += old_memmap -> desc_size ;
139
- memcpy (new , old , old_memmap -> desc_size );
140
- md = new ;
141
- md -> phys_addr = m_end + 1 ;
142
- md -> num_pages = (end - md -> phys_addr + 1 ) >>
143
- EFI_PAGE_SHIFT ;
144
- }
145
-
146
- if ((start < m_start && m_start < end ) && m_end < end ) {
147
- /* first part */
148
- md -> num_pages = (m_start - md -> phys_addr ) >>
149
- EFI_PAGE_SHIFT ;
150
- /* middle part */
151
- new += old_memmap -> desc_size ;
152
- memcpy (new , old , old_memmap -> desc_size );
153
- md = new ;
154
- md -> attribute |= m_attr ;
155
- md -> phys_addr = m_start ;
156
- md -> num_pages = (m_end - m_start + 1 ) >>
157
- EFI_PAGE_SHIFT ;
158
- /* last part */
159
- new += old_memmap -> desc_size ;
160
- memcpy (new , old , old_memmap -> desc_size );
161
- md = new ;
162
- md -> phys_addr = m_end + 1 ;
163
- md -> num_pages = (end - m_end ) >>
164
- EFI_PAGE_SHIFT ;
165
- }
166
-
167
- if ((start < m_start && m_start < end ) &&
168
- (end <= m_end )) {
169
- /* first part */
170
- md -> num_pages = (m_start - md -> phys_addr ) >>
171
- EFI_PAGE_SHIFT ;
172
- /* latter part */
173
- new += old_memmap -> desc_size ;
174
- memcpy (new , old , old_memmap -> desc_size );
175
- md = new ;
176
- md -> phys_addr = m_start ;
177
- md -> num_pages = (end - md -> phys_addr + 1 ) >>
178
- EFI_PAGE_SHIFT ;
179
- md -> attribute |= m_attr ;
180
- }
181
- }
182
- }
183
-
184
53
void __init efi_fake_memmap (void )
185
54
{
186
55
struct efi_memory_map_data data ;
@@ -198,7 +67,7 @@ void __init efi_fake_memmap(void)
198
67
for_each_efi_memory_desc (md ) {
199
68
struct range * r = & fake_mems [i ].range ;
200
69
201
- new_nr_map += efi_fake_memmap_split_count (md , r );
70
+ new_nr_map += efi_memmap_split_count (md , r );
202
71
}
203
72
}
204
73
@@ -217,7 +86,7 @@ void __init efi_fake_memmap(void)
217
86
}
218
87
219
88
for (i = 0 ; i < nr_fake_mem ; i ++ )
220
- efi_fake_memmap_insert (& efi .memmap , new_memmap , & fake_mems [i ]);
89
+ efi_memmap_insert (& efi .memmap , new_memmap , & fake_mems [i ]);
221
90
222
91
/* swap into new EFI memmap */
223
92
early_memunmap (new_memmap , efi .memmap .desc_size * new_nr_map );
@@ -265,7 +134,7 @@ static int __init setup_fake_mem(char *p)
265
134
p ++ ;
266
135
}
267
136
268
- sort (fake_mems , nr_fake_mem , sizeof (struct fake_mem ),
137
+ sort (fake_mems , nr_fake_mem , sizeof (struct efi_mem_range ),
269
138
cmp_fake_mem , NULL );
270
139
271
140
for (i = 0 ; i < nr_fake_mem ; i ++ )
0 commit comments