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