blob: 6ca818c31990272129f8b3fa6ec65b3768eef768 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <zircon-estelle/bootimg.h>
#include <common.h>
uint32_t validate_bootimg(void *bootimg)
{
boot_img_hdr_v0 *hdr = (boot_img_hdr_v0 *)bootimg;
if (!strncmp((char *)(hdr->magic), BOOT_MAGIC, BOOT_MAGIC_SIZE)) {
return hdr->header_version;
}
return (uint32_t)(-1);
}
uint32_t get_kernel_size(void *bootimg, uint32_t hdr_version)
{
switch (hdr_version) {
case 0:
return ((boot_img_hdr_v0 *)bootimg)->kernel_size;
case 1:
return ((boot_img_hdr_v1 *)bootimg)->kernel_size;
case 2:
return ((boot_img_hdr_v2 *)bootimg)->kernel_size;
case 3:
return ((boot_img_hdr_v3 *)bootimg)->kernel_size;
case 4:
return ((boot_img_hdr_v4 *)bootimg)->kernel_size;
default:
return (uint32_t)(-1);
}
}
uint32_t get_kernel_offset(void *bootimg, uint32_t hdr_version)
{
switch (hdr_version) {
case 0:
return ((boot_img_hdr_v0 *)bootimg)->page_size;
case 1:
return ((boot_img_hdr_v1 *)bootimg)->page_size;
case 2:
return ((boot_img_hdr_v2 *)bootimg)->page_size;
case 3:
case 4:
// Versions 3 and 4 fix the page size at 4096, see:
// https://android.googlesource.com/platform/system/tools/mkbootimg/+/refs/heads/master/include/bootimg/bootimg.h#219
return 4096;
default:
return (uint32_t)(-1);
}
}