Merge "Add dummy vndk library libmkbootimg to enable abi checks on boot_img_hdr." into pi-dev
diff --git a/fastboot/bootimg_utils.cpp b/fastboot/bootimg_utils.cpp
index 62a26b3..23443ec 100644
--- a/fastboot/bootimg_utils.cpp
+++ b/fastboot/bootimg_utils.cpp
@@ -34,26 +34,25 @@
#include <stdlib.h>
#include <string.h>
-void bootimg_set_cmdline(boot_img_hdr* h, const char* cmdline) {
+void bootimg_set_cmdline(boot_img_hdr_v1* h, const char* cmdline) {
if (strlen(cmdline) >= sizeof(h->cmdline)) die("command line too large: %zu", strlen(cmdline));
strcpy(reinterpret_cast<char*>(h->cmdline), cmdline);
}
-boot_img_hdr* mkbootimg(void* kernel, int64_t kernel_size, off_t kernel_offset,
- void* ramdisk, int64_t ramdisk_size, off_t ramdisk_offset,
- void* second, int64_t second_size, off_t second_offset,
- size_t page_size, size_t base, off_t tags_offset,
- int64_t* bootimg_size)
-{
+boot_img_hdr_v1* mkbootimg(void* kernel, int64_t kernel_size, off_t kernel_offset, void* ramdisk,
+ int64_t ramdisk_size, off_t ramdisk_offset, void* second,
+ int64_t second_size, off_t second_offset, size_t page_size, size_t base,
+ off_t tags_offset, uint32_t header_version, int64_t* bootimg_size) {
size_t page_mask = page_size - 1;
+ int64_t header_actual = sizeof(boot_img_hdr_v1) & (~page_mask);
int64_t kernel_actual = (kernel_size + page_mask) & (~page_mask);
int64_t ramdisk_actual = (ramdisk_size + page_mask) & (~page_mask);
int64_t second_actual = (second_size + page_mask) & (~page_mask);
- *bootimg_size = page_size + kernel_actual + ramdisk_actual + second_actual;
+ *bootimg_size = header_actual + kernel_actual + ramdisk_actual + second_actual;
- boot_img_hdr* hdr = reinterpret_cast<boot_img_hdr*>(calloc(*bootimg_size, 1));
+ boot_img_hdr_v1* hdr = reinterpret_cast<boot_img_hdr_v1*>(calloc(*bootimg_size, 1));
if (hdr == nullptr) {
return hdr;
}
@@ -71,9 +70,13 @@
hdr->page_size = page_size;
+ if (header_version) {
+ hdr->header_version = header_version;
+ hdr->header_size = sizeof(boot_img_hdr_v1);
+ }
+
memcpy(hdr->magic + page_size, kernel, kernel_size);
memcpy(hdr->magic + page_size + kernel_actual, ramdisk, ramdisk_size);
memcpy(hdr->magic + page_size + kernel_actual + ramdisk_actual, second, second_size);
-
return hdr;
}
diff --git a/fastboot/bootimg_utils.h b/fastboot/bootimg_utils.h
index fcc8662..d3993f5 100644
--- a/fastboot/bootimg_utils.h
+++ b/fastboot/bootimg_utils.h
@@ -33,11 +33,10 @@
#include <inttypes.h>
#include <sys/types.h>
-void bootimg_set_cmdline(boot_img_hdr* h, const char* cmdline);
-boot_img_hdr* mkbootimg(void* kernel, int64_t kernel_size, off_t kernel_offset,
- void* ramdisk, int64_t ramdisk_size, off_t ramdisk_offset,
- void* second, int64_t second_size, off_t second_offset,
- size_t page_size, size_t base, off_t tags_offset,
- int64_t* bootimg_size);
+void bootimg_set_cmdline(boot_img_hdr_v1* h, const char* cmdline);
+boot_img_hdr_v1* mkbootimg(void* kernel, int64_t kernel_size, off_t kernel_offset, void* ramdisk,
+ int64_t ramdisk_size, off_t ramdisk_offset, void* second,
+ int64_t second_size, off_t second_offset, size_t page_size, size_t base,
+ off_t tags_offset, uint32_t header_version, int64_t* bootimg_size);
#endif
diff --git a/fastboot/fastboot.cpp b/fastboot/fastboot.cpp
index 237f081..0ce3855 100644
--- a/fastboot/fastboot.cpp
+++ b/fastboot/fastboot.cpp
@@ -435,6 +435,9 @@
#endif
" --unbuffered Do not buffer input or output.\n"
" --version Display version.\n"
+ " --header-version Set boot image header version while\n"
+ " using flash:raw and boot commands to \n"
+ " to create a boot image.\n"
" -h, --help show this message.\n"
);
// clang-format off
@@ -443,17 +446,23 @@
static void* load_bootable_image(const std::string& kernel, const std::string& ramdisk,
const std::string& second_stage, int64_t* sz,
- const char* cmdline) {
+ const char* cmdline, uint32_t header_version) {
int64_t ksize;
void* kdata = load_file(kernel.c_str(), &ksize);
if (kdata == nullptr) die("cannot load '%s': %s", kernel.c_str(), strerror(errno));
// Is this actually a boot image?
- if (ksize < static_cast<int64_t>(sizeof(boot_img_hdr))) {
+ if (ksize < static_cast<int64_t>(sizeof(boot_img_hdr_v1))) {
die("cannot load '%s': too short", kernel.c_str());
}
if (!memcmp(kdata, BOOT_MAGIC, BOOT_MAGIC_SIZE)) {
- if (cmdline) bootimg_set_cmdline(reinterpret_cast<boot_img_hdr*>(kdata), cmdline);
+ if (cmdline) bootimg_set_cmdline(reinterpret_cast<boot_img_hdr_v1*>(kdata), cmdline);
+ uint32_t header_version_existing =
+ reinterpret_cast<boot_img_hdr_v1*>(kdata)->header_version;
+ if (header_version != header_version_existing) {
+ die("header version mismatch, expected: %" PRIu32 " found %" PRIu32 "",
+ header_version, header_version_existing);
+ }
if (!ramdisk.empty()) die("cannot boot a boot.img *and* ramdisk");
@@ -477,13 +486,13 @@
fprintf(stderr,"creating boot image...\n");
int64_t bsize = 0;
- void* bdata = mkbootimg(kdata, ksize, kernel_offset,
+ boot_img_hdr_v1* bdata = mkbootimg(kdata, ksize, kernel_offset,
rdata, rsize, ramdisk_offset,
sdata, ssize, second_offset,
- page_size, base_addr, tags_offset, &bsize);
+ page_size, base_addr, tags_offset, header_version, &bsize);
if (bdata == nullptr) die("failed to create boot.img");
- if (cmdline) bootimg_set_cmdline((boot_img_hdr*) bdata, cmdline);
+ if (cmdline) bootimg_set_cmdline(bdata, cmdline);
fprintf(stderr, "creating boot image - %" PRId64 " bytes\n", bsize);
*sz = bsize;
@@ -1500,6 +1509,7 @@
bool erase_first = true;
bool set_fbe_marker = false;
void *data;
+ uint32_t header_version = 0;
int64_t sz;
int longindex;
std::string slot_override;
@@ -1525,6 +1535,7 @@
{"skip-reboot", no_argument, 0, 0},
{"disable-verity", no_argument, 0, 0},
{"disable-verification", no_argument, 0, 0},
+ {"header-version", required_argument, 0, 0},
#if !defined(_WIN32)
{"wipe-and-use-fbe", no_argument, 0, 0},
#endif
@@ -1617,6 +1628,8 @@
wants_wipe = true;
set_fbe_marker = true;
#endif
+ } else if (strcmp("header-version", longopts[longindex].name) == 0) {
+ header_version = strtoul(optarg, nullptr, 0);
} else {
fprintf(stderr, "Internal error in options processing for %s\n",
longopts[longindex].name);
@@ -1749,7 +1762,7 @@
std::string second_stage;
if (!args.empty()) second_stage = next_arg(&args);
- data = load_bootable_image(kernel, ramdisk, second_stage, &sz, cmdline);
+ data = load_bootable_image(kernel, ramdisk, second_stage, &sz, cmdline, header_version);
fb_queue_download("boot.img", data, sz);
fb_queue_command("boot", "booting");
} else if (command == "flash") {
@@ -1778,7 +1791,7 @@
std::string second_stage;
if (!args.empty()) second_stage = next_arg(&args);
- data = load_bootable_image(kernel, ramdisk, second_stage, &sz, cmdline);
+ data = load_bootable_image(kernel, ramdisk, second_stage, &sz, cmdline, header_version);
auto flashraw = [&](const std::string& partition) {
fb_queue_flash(partition, data, sz);
};
diff --git a/libsystem/include/system/graphics-base-v1.0.h b/libsystem/include/system/graphics-base-v1.0.h
index 987a39d..44913cc 100644
--- a/libsystem/include/system/graphics-base-v1.0.h
+++ b/libsystem/include/system/graphics-base-v1.0.h
@@ -1,6 +1,6 @@
// This file is autogenerated by hidl-gen. Do not edit manually.
// Source: android.hardware.graphics.common@1.0
-// Root: android.hardware:hardware/interfaces
+// Location: hardware/interfaces/graphics/common/1.0/
#ifndef HIDL_GENERATED_ANDROID_HARDWARE_GRAPHICS_COMMON_V1_0_EXPORTED_CONSTANTS_H_
#define HIDL_GENERATED_ANDROID_HARDWARE_GRAPHICS_COMMON_V1_0_EXPORTED_CONSTANTS_H_
diff --git a/libsystem/include/system/graphics-base-v1.1.h b/libsystem/include/system/graphics-base-v1.1.h
index 12d01c1..f95b9ba 100644
--- a/libsystem/include/system/graphics-base-v1.1.h
+++ b/libsystem/include/system/graphics-base-v1.1.h
@@ -1,6 +1,6 @@
// This file is autogenerated by hidl-gen. Do not edit manually.
// Source: android.hardware.graphics.common@1.1
-// Root: android.hardware:hardware/interfaces
+// Location: hardware/interfaces/graphics/common/1.1/
#ifndef HIDL_GENERATED_ANDROID_HARDWARE_GRAPHICS_COMMON_V1_1_EXPORTED_CONSTANTS_H_
#define HIDL_GENERATED_ANDROID_HARDWARE_GRAPHICS_COMMON_V1_1_EXPORTED_CONSTANTS_H_
@@ -24,8 +24,23 @@
281411584, // ((STANDARD_BT2020 | TRANSFER_SMPTE_170M) | RANGE_LIMITED)
HAL_DATASPACE_BT2020_ITU_PQ =
298188800, // ((STANDARD_BT2020 | TRANSFER_ST2084) | RANGE_LIMITED)
+ HAL_DATASPACE_BT2020_ITU_HLG = 302383104, // ((STANDARD_BT2020 | TRANSFER_HLG) | RANGE_LIMITED)
+ HAL_DATASPACE_BT2020_HLG = 168165376, // ((STANDARD_BT2020 | TRANSFER_HLG) | RANGE_FULL)
} android_dataspace_v1_1_t;
+typedef enum {
+ HAL_COLOR_MODE_BT2020 = 10,
+ HAL_COLOR_MODE_BT2100_PQ = 11,
+ HAL_COLOR_MODE_BT2100_HLG = 12,
+} android_color_mode_v1_1_t;
+
+typedef enum {
+ HAL_RENDER_INTENT_COLORIMETRIC = 0,
+ HAL_RENDER_INTENT_ENHANCE = 1,
+ HAL_RENDER_INTENT_TONE_MAP_COLORIMETRIC = 2,
+ HAL_RENDER_INTENT_TONE_MAP_ENHANCE = 3,
+} android_render_intent_v1_1_t;
+
#ifdef __cplusplus
}
#endif
diff --git a/storaged/include/storaged_info.h b/storaged/include/storaged_info.h
index 88a53de..9c3d0e7 100644
--- a/storaged/include/storaged_info.h
+++ b/storaged/include/storaged_info.h
@@ -38,6 +38,7 @@
class storage_info_t {
protected:
FRIEND_TEST(storaged_test, storage_info_t);
+ FRIEND_TEST(storaged_test, storage_info_t_proto);
// emmc lifetime
uint16_t eol; // pre-eol (end of life) information
uint16_t lifetime_a; // device life time estimation (type A)
diff --git a/storaged/storaged_info.cpp b/storaged/storaged_info.cpp
index 055f375..5605f66 100644
--- a/storaged/storaged_info.cpp
+++ b/storaged/storaged_info.cpp
@@ -157,11 +157,14 @@
return;
}
- recent_perf.erase(recent_perf.begin() + nr_samples,
- recent_perf.end());
+ if (nr_samples < recent_perf.size()) {
+ recent_perf.erase(recent_perf.begin() + nr_samples, recent_perf.end());
+ }
- uint32_t daily_avg_bw = accumulate(recent_perf.begin(),
- recent_perf.begin() + nr_samples, 0) / nr_samples;
+ uint32_t daily_avg_bw = 0;
+ if (!recent_perf.empty()) {
+ daily_avg_bw = accumulate(recent_perf.begin(), recent_perf.end(), 0) / recent_perf.size();
+ }
day_start_tp = tp - chrono::seconds(duration_cast<chrono::seconds>(
tp.time_since_epoch()).count() % DAY_TO_SEC);
@@ -176,6 +179,7 @@
return;
}
+ DCHECK(nr_days > 0);
uint32_t week_avg_bw = accumulate(daily_perf.begin(),
daily_perf.begin() + nr_days, 0) / nr_days;
diff --git a/storaged/tests/storaged_test.cpp b/storaged/tests/storaged_test.cpp
index d1fa9ed..ec47b65 100644
--- a/storaged/tests/storaged_test.cpp
+++ b/storaged/tests/storaged_test.cpp
@@ -416,6 +416,31 @@
}
}
+TEST(storaged_test, storage_info_t_proto) {
+ storage_info_t si;
+ si.day_start_tp = {};
+
+ IOPerfHistory proto;
+ proto.set_nr_samples(10);
+ proto.set_day_start_sec(0);
+ si.load_perf_history_proto(proto);
+
+ // Skip ahead > 1 day, with no data points in the previous day.
+ time_point<system_clock> stp;
+ stp += hours(36);
+ si.update_perf_history(100, stp);
+
+ vector<int> history = si.get_perf_history();
+ EXPECT_EQ(history.size(), 63UL);
+ EXPECT_EQ(history[0], 1);
+ EXPECT_EQ(history[1], 7);
+ EXPECT_EQ(history[2], 52);
+ EXPECT_EQ(history[3], 100);
+ for (size_t i = 4; i < history.size(); i++) {
+ EXPECT_EQ(history[i], 0);
+ }
+}
+
TEST(storaged_test, uid_monitor) {
uid_monitor uidm;