Lines Matching refs:ab_data

111 static int spl_read_ab_metadata(struct blk_desc *dev_desc, AvbABData *ab_data,  in spl_read_ab_metadata()  argument
118 if (!dev_desc || !partition || !ab_data) in spl_read_ab_metadata()
132 memcpy(ab_data, temp, sizeof(AvbABData)); in spl_read_ab_metadata()
137 static int spl_write_ab_metadata(struct blk_desc *dev_desc, AvbABData *ab_data, in spl_write_ab_metadata() argument
144 if (!dev_desc || !partition || !ab_data) in spl_write_ab_metadata()
150 memcpy(temp, ab_data, sizeof(AvbABData)); in spl_write_ab_metadata()
162 static int spl_ab_data_write(struct blk_desc *dev_desc, AvbABData *ab_data, in spl_ab_data_write() argument
167 spl_ab_data_update_crc_and_byteswap(ab_data, &serialized); in spl_ab_data_write()
172 static int spl_ab_data_read(struct blk_desc *dev_desc, AvbABData *ab_data, in spl_ab_data_read() argument
182 if (!spl_ab_data_verify_and_byteswap(&serialized, ab_data)) { in spl_ab_data_read()
185 spl_ab_data_init(ab_data); in spl_ab_data_read()
186 spl_ab_data_write(dev_desc, ab_data, partition); in spl_ab_data_read()
198 static int spl_get_lastboot(AvbABData *ab_data) in spl_get_lastboot() argument
200 return ab_data->last_boot; in spl_get_lastboot()
207 AvbABData ab_data; in spl_get_current_slot() local
210 ret = spl_ab_data_read(dev_desc, &ab_data, partition); in spl_get_current_slot()
214 if (spl_slot_is_bootable(&ab_data.slots[0]) && in spl_get_current_slot()
215 spl_slot_is_bootable(&ab_data.slots[1])) { in spl_get_current_slot()
216 if (ab_data.slots[1].priority > ab_data.slots[0].priority) in spl_get_current_slot()
220 } else if (spl_slot_is_bootable(&ab_data.slots[0])) { in spl_get_current_slot()
222 } else if (spl_slot_is_bootable(&ab_data.slots[1])) { in spl_get_current_slot()
226 if (spl_get_lastboot(&ab_data) == 0) { in spl_get_current_slot()
229 } else if (spl_get_lastboot(&ab_data) == 1) { in spl_get_current_slot()
246 ab_data.slots[slot_index_to_boot].successful_boot, in spl_get_current_slot()
247 ab_data.slots[slot_index_to_boot].tries_remaining); in spl_get_current_slot()
278 AvbABData *ab_data, in spl_save_metadata_if_changed() argument
281 if (safe_memcmp(ab_data, ab_data_orig, sizeof(AvbABData))) in spl_save_metadata_if_changed()
282 return spl_ab_data_write(dev_desc, ab_data, "misc"); in spl_save_metadata_if_changed()
290 AvbABData ab_data, ab_data_orig; in spl_ab_decrease_tries() local
306 ret = spl_ab_data_read(dev_desc, &ab_data, "misc"); in spl_ab_decrease_tries()
310 memcpy(&ab_data_orig, &ab_data, sizeof(AvbABData)); in spl_ab_decrease_tries()
313 if (!ab_data.slots[slot_index].successful_boot && in spl_ab_decrease_tries()
314 ab_data.slots[slot_index].tries_remaining > 0) in spl_ab_decrease_tries()
315 ab_data.slots[slot_index].tries_remaining -= 1; in spl_ab_decrease_tries()
317 ret = spl_save_metadata_if_changed(dev_desc, &ab_data, &ab_data_orig); in spl_ab_decrease_tries()
329 AvbABData ab_data; in spl_ab_decrease_reset() local
332 ret = spl_ab_data_read(dev_desc, &ab_data, "misc"); in spl_ab_decrease_reset()
337 if (!spl_slot_is_bootable(&ab_data.slots[0]) && in spl_ab_decrease_reset()
338 !spl_slot_is_bootable(&ab_data.slots[1])) { in spl_ab_decrease_reset()