| // 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); |
| } |
| } |