Reviewed-by: Sam Protsenko <semen.protse...@linaro.org>
On Fri, May 17, 2019 at 5:46 PM Eugeniu Rosca <ero...@de.adit-jv.com> wrote: > > Perform the following updates: > - Relocate the commit id from the file to the description of U-Boot > commit. The AOSP commit is c784ce50e8c10eaf70e1f97e24e8324aef45faf5. > This is done to avoid stale references in the file itself. The > reasoning is in https://patchwork.ozlabs.org/patch/1098056/#2170209. > - Minimize the diff to AOSP, to decrease the effort of the next AOSP > backports. The background can be found in: > https://patchwork.ozlabs.org/patch/1080394/#2168454. > - Guard the static_assert() calls by #ifndef __UBOOT__ ... #endif, > to avoid compilation failures of files including the header. > > Signed-off-by: Eugeniu Rosca <ero...@de.adit-jv.com> > --- > v2: > - Newly pushed. No changes. > --- > include/android_bootloader_message.h | 126 +++++++++++++++------------ > 1 file changed, 68 insertions(+), 58 deletions(-) > > diff --git a/include/android_bootloader_message.h > b/include/android_bootloader_message.h > index b84789f02227..286d7ab0f31e 100644 > --- a/include/android_bootloader_message.h > +++ b/include/android_bootloader_message.h > @@ -2,7 +2,7 @@ > * This is from the Android Project, > * Repository: https://android.googlesource.com/platform/bootable/recovery > * File: bootloader_message/include/bootloader_message/bootloader_message.h > - * Commit: c784ce50e8c10eaf70e1f97e24e8324aef45faf5 > + * Commit: See U-Boot commit description > * > * Copyright (C) 2008 The Android Open Source Project > * > @@ -12,18 +12,24 @@ > #ifndef __ANDROID_BOOTLOADER_MESSAGE_H > #define __ANDROID_BOOTLOADER_MESSAGE_H > > +#ifndef __UBOOT__ > +#include <assert.h> > +#include <stddef.h> > +#include <stdint.h> > +#else > /* compiler.h defines the types that otherwise are included from stdint.h and > * stddef.h > */ > #include <compiler.h> > +#endif > > -/* Spaces used by misc partition are as below: > - * 0 - 2K For bootloader_message > - * 2K - 16K Used by Vendor's bootloader (the 2K - 4K range may be > optionally used > - * as bootloader_message_ab struct) > - * 16K - 64K Used by uncrypt and recovery to store wipe_package for A/B > devices > - * Note that these offsets are admitted by bootloader,recovery and uncrypt, > so they > - * are not configurable without changing all of them. */ > +// Spaces used by misc partition are as below: > +// 0 - 2K For bootloader_message > +// 2K - 16K Used by Vendor's bootloader (the 2K - 4K range may be > optionally used > +// as bootloader_message_ab struct) > +// 16K - 64K Used by uncrypt and recovery to store wipe_package for A/B > devices > +// Note that these offsets are admitted by bootloader,recovery and uncrypt, > so they > +// are not configurable without changing all of them. > static const size_t BOOTLOADER_MESSAGE_OFFSET_IN_MISC = 0; > static const size_t WIPE_PACKAGE_OFFSET_IN_MISC = 16 * 1024; > > @@ -61,17 +67,17 @@ struct bootloader_message { > char status[32]; > char recovery[768]; > > - /* The 'recovery' field used to be 1024 bytes. It has only ever > - * been used to store the recovery command line, so 768 bytes > - * should be plenty. We carve off the last 256 bytes to store the > - * stage string (for multistage packages) and possible future > - * expansion. */ > + // The 'recovery' field used to be 1024 bytes. It has only ever > + // been used to store the recovery command line, so 768 bytes > + // should be plenty. We carve off the last 256 bytes to store the > + // stage string (for multistage packages) and possible future > + // expansion. > char stage[32]; > > - /* The 'reserved' field used to be 224 bytes when it was initially > - * carved off from the 1024-byte recovery field. Bump it up to > - * 1184-byte so that the entire bootloader_message struct rounds up > - * to 2048-byte. */ > + // The 'reserved' field used to be 224 bytes when it was initially > + // carved off from the 1024-byte recovery field. Bump it up to > + // 1184-byte so that the entire bootloader_message struct rounds up > + // to 2048-byte. > char reserved[1184]; > }; > > @@ -79,10 +85,12 @@ struct bootloader_message { > * We must be cautious when changing the bootloader_message struct size, > * because A/B-specific fields may end up with different offsets. > */ > +#ifndef __UBOOT__ > #if (__STDC_VERSION__ >= 201112L) || defined(__cplusplus) > static_assert(sizeof(struct bootloader_message) == 2048, > "struct bootloader_message size changes, which may break A/B > devices"); > #endif > +#endif /* __UBOOT__ */ > > /** > * The A/B-specific bootloader message structure (4-KiB). > @@ -108,7 +116,7 @@ struct bootloader_message_ab { > char slot_suffix[32]; > char update_channel[128]; > > - /* Round up the entire struct to 4096-byte. */ > + // Round up the entire struct to 4096-byte. > char reserved[1888]; > }; > > @@ -116,26 +124,28 @@ struct bootloader_message_ab { > * Be cautious about the struct size change, in case we put anything post > * bootloader_message_ab struct (b/29159185). > */ > +#ifndef __UBOOT__ > #if (__STDC_VERSION__ >= 201112L) || defined(__cplusplus) > static_assert(sizeof(struct bootloader_message_ab) == 4096, > "struct bootloader_message_ab size changes"); > #endif > +#endif /* __UBOOT__ */ > > #define BOOT_CTRL_MAGIC 0x42414342 /* Bootloader Control AB */ > #define BOOT_CTRL_VERSION 1 > > struct slot_metadata { > - /* Slot priority with 15 meaning highest priority, 1 lowest > - * priority and 0 the slot is unbootable. */ > + // Slot priority with 15 meaning highest priority, 1 lowest > + // priority and 0 the slot is unbootable. > uint8_t priority : 4; > - /* Number of times left attempting to boot this slot. */ > + // Number of times left attempting to boot this slot. > uint8_t tries_remaining : 3; > - /* 1 if this slot has booted successfully, 0 otherwise. */ > + // 1 if this slot has booted successfully, 0 otherwise. > uint8_t successful_boot : 1; > - /* 1 if this slot is corrupted from a dm-verity corruption, 0 > - * otherwise. */ > + // 1 if this slot is corrupted from a dm-verity corruption, 0 > + // otherwise. > uint8_t verity_corrupted : 1; > - /* Reserved for further use. */ > + // Reserved for further use. > uint8_t reserved : 7; > } __attribute__((packed)); > > @@ -148,99 +158,99 @@ struct slot_metadata { > * mandatory. > */ > struct bootloader_control { > - /* NUL terminated active slot suffix. */ > + // NUL terminated active slot suffix. > char slot_suffix[4]; > - /* Bootloader Control AB magic number (see BOOT_CTRL_MAGIC). */ > + // Bootloader Control AB magic number (see BOOT_CTRL_MAGIC). > uint32_t magic; > - /* Version of struct being used (see BOOT_CTRL_VERSION). */ > + // Version of struct being used (see BOOT_CTRL_VERSION). > uint8_t version; > - /* Number of slots being managed. */ > + // Number of slots being managed. > uint8_t nb_slot : 3; > - /* Number of times left attempting to boot recovery. */ > + // Number of times left attempting to boot recovery. > uint8_t recovery_tries_remaining : 3; > - /* Ensure 4-bytes alignment for slot_info field. */ > + // Ensure 4-bytes alignment for slot_info field. > uint8_t reserved0[2]; > - /* Per-slot information. Up to 4 slots. */ > + // Per-slot information. Up to 4 slots. > struct slot_metadata slot_info[4]; > - /* Reserved for further use. */ > + // Reserved for further use. > uint8_t reserved1[8]; > - /* CRC32 of all 28 bytes preceding this field (little endian > - * format). */ > + // CRC32 of all 28 bytes preceding this field (little endian > + // format). > uint32_t crc32_le; > } __attribute__((packed)); > > +#ifndef __UBOOT__ > #if (__STDC_VERSION__ >= 201112L) || defined(__cplusplus) > static_assert(sizeof(struct bootloader_control) == > sizeof(((struct bootloader_message_ab *)0)->slot_suffix), > "struct bootloader_control has wrong size"); > #endif > +#endif /* __UBOOT__ */ > > #ifndef __UBOOT__ > - > #ifdef __cplusplus > > #include <string> > #include <vector> > > -/* Return the block device name for the bootloader message partition and > waits > - * for the device for up to 10 seconds. In case of error returns the empty > - * string. */ > +// Return the block device name for the bootloader message partition and > waits > +// for the device for up to 10 seconds. In case of error returns the empty > +// string. > std::string get_bootloader_message_blk_device(std::string* err); > > -/* Read bootloader message into boot. Error message will be set in err. */ > +// Read bootloader message into boot. Error message will be set in err. > bool read_bootloader_message(bootloader_message* boot, std::string* err); > > -/* Read bootloader message from the specified misc device into boot. */ > +// Read bootloader message from the specified misc device into boot. > bool read_bootloader_message_from(bootloader_message* boot, const > std::string& misc_blk_device, > std::string* err); > > -/* Write bootloader message to BCB. */ > +// Write bootloader message to BCB. > bool write_bootloader_message(const bootloader_message& boot, std::string* > err); > > -/* Write bootloader message to the specified BCB device. */ > +// Write bootloader message to the specified BCB device. > bool write_bootloader_message_to(const bootloader_message& boot, > const std::string& misc_blk_device, > std::string* err); > > -/* Write bootloader message (boots into recovery with the options) to BCB. > Will > - * set the command and recovery fields, and reset the rest. */ > +// Write bootloader message (boots into recovery with the options) to BCB. > Will > +// set the command and recovery fields, and reset the rest. > bool write_bootloader_message(const std::vector<std::string>& options, > std::string* err); > > -/* Write bootloader message (boots into recovery with the options) to the > specific BCB device. Will > - * set the command and recovery fields, and reset the rest. */ > +// Write bootloader message (boots into recovery with the options) to the > specific BCB device. Will > +// set the command and recovery fields, and reset the rest. > bool write_bootloader_message_to(const std::vector<std::string>& options, > const std::string& misc_blk_device, > std::string* err); > > -/* Update bootloader message (boots into recovery with the options) to BCB. > Will > - * only update the command and recovery fields. */ > +// Update bootloader message (boots into recovery with the options) to BCB. > Will > +// only update the command and recovery fields. > bool update_bootloader_message(const std::vector<std::string>& options, > std::string* err); > > -/* Update bootloader message (boots into recovery with the |options|) in > |boot|. Will only update > - * the command and recovery fields. */ > +// Update bootloader message (boots into recovery with the |options|) in > |boot|. Will only update > +// the command and recovery fields. > bool update_bootloader_message_in_struct(bootloader_message* boot, > const std::vector<std::string>& > options); > > -/* Clear BCB. */ > +// Clear BCB. > bool clear_bootloader_message(std::string* err); > > -/* Writes the reboot-bootloader reboot reason to the bootloader_message. */ > +// Writes the reboot-bootloader reboot reason to the bootloader_message. > bool write_reboot_bootloader(std::string* err); > > -/* Read the wipe package from BCB (from offset WIPE_PACKAGE_OFFSET_IN_MISC). > */ > +// Read the wipe package from BCB (from offset WIPE_PACKAGE_OFFSET_IN_MISC). > bool read_wipe_package(std::string* package_data, size_t size, std::string* > err); > > -/* Write the wipe package into BCB (to offset WIPE_PACKAGE_OFFSET_IN_MISC). > */ > +// Write the wipe package into BCB (to offset WIPE_PACKAGE_OFFSET_IN_MISC). > bool write_wipe_package(const std::string& package_data, std::string* err); > > #else > > #include <stdbool.h> > > -/* C Interface. */ > +// C Interface. > bool write_bootloader_message(const char* options); > bool write_reboot_bootloader(void); > > -#endif /* ifdef __cplusplus */ > - > +#endif // ifdef __cplusplus > #endif /* __UBOOT__ */ > > #endif /* __ANDROID_BOOTLOADER_MESSAGE_H */ > -- > 2.21.0 > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot