Lines Matching full:abc
24 struct android_bootloader_control *abc) in android_boot_control_compute_crc() argument
26 return crc32(0, (void *)abc, offsetof(typeof(*abc), crc32_le)); in android_boot_control_compute_crc()
34 void android_boot_control_default(struct android_bootloader_control *abc) in android_boot_control_default() argument
44 memcpy(abc->slot_suffix, "a\0\0\0", 4); in android_boot_control_default()
45 abc->magic = ANDROID_BOOT_CTRL_MAGIC; in android_boot_control_default()
46 abc->version = ANDROID_BOOT_CTRL_VERSION; in android_boot_control_default()
47 abc->nb_slot = ARRAY_SIZE(abc->slot_info); in android_boot_control_default()
48 memset(abc->reserved0, 0, sizeof(abc->reserved0)); in android_boot_control_default()
49 for (i = 0; i < abc->nb_slot; ++i) { in android_boot_control_default()
50 abc->slot_info[i] = metadata; in android_boot_control_default()
52 memset(abc->reserved1, 0, sizeof(abc->reserved1)); in android_boot_control_default()
53 abc->crc32_le = android_boot_control_compute_crc(abc); in android_boot_control_default()
99 debug("ANDROID: Loaded ABC, %lu blocks.\n", abc_blocks); in android_boot_control_create_from_disk()
158 struct android_bootloader_control *abc; in android_ab_select() local
164 abc = android_boot_control_create_from_disk(dev_desc, part_info); in android_ab_select()
165 if (!abc) { in android_ab_select()
174 crc32_le = android_boot_control_compute_crc(abc); in android_ab_select()
175 if (abc->crc32_le != crc32_le) { in android_ab_select()
178 crc32_le, abc->crc32_le); in android_ab_select()
179 android_boot_control_default(abc); in android_ab_select()
183 if (abc->magic != ANDROID_BOOT_CTRL_MAGIC) { in android_ab_select()
184 printf("ANDROID: Unknown A/B metadata: %.8x\n", abc->magic); in android_ab_select()
185 free(abc); in android_ab_select()
189 if (abc->version > ANDROID_BOOT_CTRL_VERSION) { in android_ab_select()
191 abc->version); in android_ab_select()
192 free(abc); in android_ab_select()
196 /* At this point a valid boot control metadata is stored in abc, in android_ab_select()
208 if (abc->nb_slot > ARRAY_SIZE(abc->slot_info)) { in android_ab_select()
209 abc->nb_slot = ARRAY_SIZE(abc->slot_info); in android_ab_select()
214 for (i = 0; i < abc->nb_slot; ++i) { in android_ab_select()
215 if (abc->slot_info[i].verity_corrupted || in android_ab_select()
216 !abc->slot_info[i].tries_remaining) { in android_ab_select()
220 abc->slot_info[i].tries_remaining, in android_ab_select()
221 abc->slot_info[i].verity_corrupted); in android_ab_select()
227 abc->slot_info[i].priority, in android_ab_select()
228 abc->slot_info[i].tries_remaining, in android_ab_select()
229 abc->slot_info[i].verity_corrupted, in android_ab_select()
230 abc->slot_info[i].successful_boot); in android_ab_select()
233 android_ab_compare_slots(&abc->slot_info[i], in android_ab_select()
234 &abc->slot_info[slot]) < 0) { in android_ab_select()
239 if (slot >= 0 && !abc->slot_info[slot].successful_boot) { in android_ab_select()
242 abc->slot_info[slot].tries_remaining); in android_ab_select()
243 abc->slot_info[slot].tries_remaining--; in android_ab_select()
254 if (memcmp(abc->slot_suffix, slot_suffix, in android_ab_select()
256 memcpy(abc->slot_suffix, slot_suffix, in android_ab_select()
263 abc->crc32_le = android_boot_control_compute_crc(abc); in android_ab_select()
264 android_boot_control_store(abc, dev_desc, part_info); in android_ab_select()
266 free(abc); in android_ab_select()