• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2017 The Android Open Source Project
3   *
4   * Permission is hereby granted, free of charge, to any person
5   * obtaining a copy of this software and associated documentation
6   * files (the "Software"), to deal in the Software without
7   * restriction, including without limitation the rights to use, copy,
8   * modify, merge, publish, distribute, sublicense, and/or sell copies
9   * of the Software, and to permit persons to whom the Software is
10   * furnished to do so, subject to the following conditions:
11   *
12   * The above copyright notice and this permission notice shall be
13   * included in all copies or substantial portions of the Software.
14   *
15   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19   * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20   * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21   * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22   * SOFTWARE.
23   */
24  
25  #ifndef UEFI_AVB_BOOT_H_
26  #define UEFI_AVB_BOOT_H_
27  
28  #include <efi.h>
29  #include <libavb/libavb.h>
30  
31  /* Return codes used in uefi_avb_boot_kernel().
32   *
33   * Use uefi_avb_boot_kernel_result_to_string to get a textual
34   * representation usable for error/debug output.
35   */
36  typedef enum {
37    UEFI_AVB_BOOT_KERNEL_RESULT_OK,
38    UEFI_AVB_BOOT_KERNEL_RESULT_ERROR_OOM,
39    UEFI_AVB_BOOT_KERNEL_RESULT_ERROR_IO,
40    UEFI_AVB_BOOT_KERNEL_RESULT_ERROR_PARTITION_INVALID_FORMAT,
41    UEFI_AVB_BOOT_KERNEL_RESULT_ERROR_KERNEL_INVALID_FORMAT,
42    UEFI_AVB_BOOT_KERNEL_RESULT_ERROR_START_KERNEL
43  } UEFIAvbBootKernelResult;
44  
45  /* Jumps to the Linux kernel embedded in the Android boot image which
46   * has been loaded in |slot_data|. This also supports setting up the
47   * initramfs from the boot image. The command-line to be passed to the
48   * kernel will be the concatenation of
49   *
50   *  1. the cmdline in the Android boot image; and
51   *  2. the cmdline in |slot_data|; and
52   *  3. |cmdline_extra| if not NULL
53   *
54   * in that order with spaces inserted as necessary.
55   *
56   * This function only returns if an error occurs.
57   */
58  UEFIAvbBootKernelResult uefi_avb_boot_kernel(EFI_HANDLE efi_image_handle,
59                                               AvbSlotVerifyData* slot_data,
60                                               const char* cmdline_extra);
61  
62  /* Get a textual representation of |result|. */
63  const char* uefi_avb_boot_kernel_result_to_string(
64      UEFIAvbBootKernelResult result);
65  
66  #endif /* UEFI_AVB_BOOT_H_ */
67