Lines Matching refs:ab_data
114 static int spl_read_ab_metadata(struct blk_desc *dev_desc, AvbABData *ab_data, in spl_read_ab_metadata() argument
121 if (!dev_desc || !partition || !ab_data) in spl_read_ab_metadata()
135 memcpy(ab_data, temp, sizeof(AvbABData)); in spl_read_ab_metadata()
140 static int spl_write_ab_metadata(struct blk_desc *dev_desc, AvbABData *ab_data, in spl_write_ab_metadata() argument
147 if (!dev_desc || !partition || !ab_data) in spl_write_ab_metadata()
153 memcpy(temp, ab_data, sizeof(AvbABData)); in spl_write_ab_metadata()
165 static int spl_ab_data_write(struct blk_desc *dev_desc, AvbABData *ab_data, in spl_ab_data_write() argument
170 spl_ab_data_update_crc_and_byteswap(ab_data, &serialized); in spl_ab_data_write()
175 static int spl_ab_data_read(struct blk_desc *dev_desc, AvbABData *ab_data, in spl_ab_data_read() argument
185 if (!spl_ab_data_verify_and_byteswap(&serialized, ab_data)) { in spl_ab_data_read()
188 spl_ab_data_init(ab_data); in spl_ab_data_read()
189 spl_ab_data_write(dev_desc, ab_data, partition); in spl_ab_data_read()
201 static int spl_get_lastboot(AvbABData *ab_data) in spl_get_lastboot() argument
203 return ab_data->last_boot; in spl_get_lastboot()
210 AvbABData ab_data; in spl_get_current_slot() local
234 ret = spl_ab_data_read(dev_desc, &ab_data, partition); in spl_get_current_slot()
238 if (spl_slot_is_bootable(&ab_data.slots[0]) && in spl_get_current_slot()
239 spl_slot_is_bootable(&ab_data.slots[1])) { in spl_get_current_slot()
240 if (ab_data.slots[1].priority > ab_data.slots[0].priority) in spl_get_current_slot()
244 } else if (spl_slot_is_bootable(&ab_data.slots[0])) { in spl_get_current_slot()
246 } else if (spl_slot_is_bootable(&ab_data.slots[1])) { in spl_get_current_slot()
250 if (spl_get_lastboot(&ab_data) == 0) { in spl_get_current_slot()
253 } else if (spl_get_lastboot(&ab_data) == 1) { in spl_get_current_slot()
270 ab_data.slots[slot_index_to_boot].successful_boot, in spl_get_current_slot()
271 ab_data.slots[slot_index_to_boot].tries_remaining); in spl_get_current_slot()
302 AvbABData *ab_data, in spl_save_metadata_if_changed() argument
305 if (safe_memcmp(ab_data, ab_data_orig, sizeof(AvbABData))) in spl_save_metadata_if_changed()
306 return spl_ab_data_write(dev_desc, ab_data, "misc"); in spl_save_metadata_if_changed()
343 AvbABData ab_data, ab_data_orig; in spl_ab_decrease_tries() local
359 ret = spl_ab_data_read(dev_desc, &ab_data, "misc"); in spl_ab_decrease_tries()
363 memcpy(&ab_data_orig, &ab_data, sizeof(AvbABData)); in spl_ab_decrease_tries()
369 spl_slot_normalize(&ab_data.slots[0]); in spl_ab_decrease_tries()
370 spl_slot_normalize(&ab_data.slots[1]); in spl_ab_decrease_tries()
373 if (!ab_data.slots[slot_index].successful_boot && in spl_ab_decrease_tries()
374 ab_data.slots[slot_index].tries_remaining > 0) in spl_ab_decrease_tries()
375 ab_data.slots[slot_index].tries_remaining -= 1; in spl_ab_decrease_tries()
377 ret = spl_save_metadata_if_changed(dev_desc, &ab_data, &ab_data_orig); in spl_ab_decrease_tries()
389 AvbABData ab_data; in spl_ab_decrease_reset() local
392 ret = spl_ab_data_read(dev_desc, &ab_data, "misc"); in spl_ab_decrease_reset()
397 if (!spl_slot_is_bootable(&ab_data.slots[0]) && in spl_ab_decrease_reset()
398 !spl_slot_is_bootable(&ab_data.slots[1])) { in spl_ab_decrease_reset()