1 #include <linux/ioport.h>
4 static void resource_clip(struct resource
*res
, resource_size_t start
,
7 resource_size_t low
= 0, high
= 0;
9 if (res
->end
< start
|| res
->start
> end
)
10 return; /* no conflict */
12 if (res
->start
< start
)
13 low
= start
- res
->start
;
16 high
= res
->end
- end
;
18 /* Keep the area above or below the conflict, whichever is larger */
25 static void remove_e820_regions(struct resource
*avail
)
28 struct e820entry
*entry
;
30 for (i
= 0; i
< e820
.nr_map
; i
++) {
33 resource_clip(avail
, entry
->addr
,
34 entry
->addr
+ entry
->size
- 1);
38 void arch_remove_reservations(struct resource
*avail
)
40 /* Trim out BIOS areas (low 1MB and high 2MB) and E820 regions */
41 if (avail
->flags
& IORESOURCE_MEM
) {
42 if (avail
->start
< BIOS_END
)
43 avail
->start
= BIOS_END
;
44 resource_clip(avail
, BIOS_ROM_BASE
, BIOS_ROM_END
);
46 remove_e820_regions(avail
);