/** @file\r
*\r
-* Copyright (c) 2011-2012, ARM Limited. All rights reserved.\r
+* Copyright (c) 2011-2014, ARM Limited. All rights reserved.\r
*\r
* This program and the accompanying materials\r
* are licensed and made available under the terms and conditions of the BSD License\r
\r
#define ALIGN32_BELOW(addr) ALIGN_POINTER(addr - 32,32)\r
\r
+#define IS_ADDRESS_IN_REGION(RegionStart, RegionSize, Address) \\r
+ (((UINTN)(RegionStart) <= (UINTN)(Address)) && ((UINTN)(Address) <= ((UINTN)(RegionStart) + (UINTN)(RegionSize))))\r
+\r
STATIC\r
EFI_STATUS\r
PreparePlatformHardware (\r
LinuxImageSize -= 64;\r
}\r
\r
- //TODO: Check there is no overlapping between kernel and Atag\r
+ // Check there is no overlapping between kernel and its parameters\r
+ // We can only assert because it is too late to fallback to UEFI (ExitBootServices has been called).\r
+ ASSERT (!IS_ADDRESS_IN_REGION(LinuxKernel, LinuxImageSize, KernelParamsAddress) &&\r
+ !IS_ADDRESS_IN_REGION(LinuxKernel, LinuxImageSize, KernelParamsAddress + KernelParamsSize));\r
\r
//\r
// Switch off interrupts, caches, mmu, etc\r