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
)
41 * Trim out BIOS area (high 2MB) and E820 regions. We do not remove
42 * the low 1MB unconditionally, as this area is needed for some ISA
43 * cards requiring a memory range, e.g. the i82365 PCMCIA controller.
45 if (avail
->flags
& IORESOURCE_MEM
) {
46 resource_clip(avail
, BIOS_ROM_BASE
, BIOS_ROM_END
);
48 remove_e820_regions(avail
);