Lines Matching refs:context

56 static int init_window_mem(struct mbox_context *context)  in init_window_mem()  argument
58 void *mem_location = context->mem; in init_window_mem()
68 for (i = 0; i < context->windows.num; i++) { in init_window_mem()
69 uint32_t size = context->windows.window[i].size; in init_window_mem()
72 context->windows.window[i].mem = mem_location; in init_window_mem()
74 if (mem_location > (context->mem + context->mem_size)) { in init_window_mem()
78 MSG_ERR("Mem size: 0x%.8x\n", context->mem_size); in init_window_mem()
91 int init_windows(struct mbox_context *context) in init_windows() argument
96 if (!context->windows.default_size) { in init_windows()
98 context->windows.default_size = 1 << 20; in init_windows()
100 MSG_INFO("Window size: 0x%.8x\n", context->windows.default_size); in init_windows()
101 if (!context->windows.num) { in init_windows()
103 context->windows.num = context->mem_size / in init_windows()
104 context->windows.default_size; in init_windows()
106 MSG_INFO("Number of windows: %d\n", context->windows.num); in init_windows()
108 context->windows.window = calloc(context->windows.num, in init_windows()
109 sizeof(*context->windows.window)); in init_windows()
110 if (!context->windows.window) { in init_windows()
115 for (i = 0; i < context->windows.num; i++) { in init_windows()
116 init_window_state(&context->windows.window[i], in init_windows()
117 context->windows.default_size); in init_windows()
120 return init_window_mem(context); in init_windows()
127 void free_windows(struct mbox_context *context) in free_windows() argument
132 if (context->windows.window) { in free_windows()
133 for (i = 0; i < context->windows.num; i++) { in free_windows()
134 free(context->windows.window[i].dirty_bmap); in free_windows()
136 free(context->windows.window); in free_windows()
157 int write_from_window_v1(struct mbox_context *context, in write_from_window_v1() argument
165 flash_offset = context->current->flash_offset + offset_bytes; in write_from_window_v1()
176 context->mtd_info.erasesize); in write_from_window_v1()
180 context->mtd_info.erasesize) - in write_from_window_v1()
187 if (low_mem.flash_offset < context->current->flash_offset) { in write_from_window_v1()
194 rc = copy_flash(context, low_mem.flash_offset, in write_from_window_v1()
201 (context->current->flash_offset + context->current->size)) { in write_from_window_v1()
209 rc = copy_flash(context, high_mem.flash_offset, in write_from_window_v1()
220 rc = erase_flash(context, low_mem.flash_offset, in write_from_window_v1()
231 rc = write_flash(context, low_mem.flash_offset, low_mem.mem, in write_from_window_v1()
237 rc = write_flash(context, flash_offset, in write_from_window_v1()
238 context->current->mem + offset_bytes, count_bytes); in write_from_window_v1()
248 rc = write_flash(context, high_mem.flash_offset, high_mem.mem, in write_from_window_v1()
255 rc = write_flash(context, high_mem.flash_offset, in write_from_window_v1()
256 context->current->mem + offset_bytes + in write_from_window_v1()
278 int write_from_window(struct mbox_context *context, uint32_t offset, in write_from_window() argument
282 uint32_t flash_offset, count_bytes = count << context->block_size_shift; in write_from_window()
283 uint32_t offset_bytes = offset << context->block_size_shift; in write_from_window()
287 flash_offset = context->current->flash_offset + offset_bytes; in write_from_window()
288 rc = erase_flash(context, flash_offset, count_bytes); in write_from_window()
300 if (log_2(context->mtd_info.erasesize) != in write_from_window()
301 context->block_size_shift) { in write_from_window()
302 return write_from_window_v1(context, offset_bytes, in write_from_window()
305 flash_offset = context->current->flash_offset + offset_bytes; in write_from_window()
308 rc = erase_flash(context, flash_offset, count_bytes); in write_from_window()
314 rc = write_flash(context, flash_offset, in write_from_window()
315 context->current->mem + offset_bytes, in write_from_window()
337 void alloc_window_dirty_bytemap(struct mbox_context *context) in alloc_window_dirty_bytemap() argument
342 for (i = 0; i < context->windows.num; i++) { in alloc_window_dirty_bytemap()
343 cur = &context->windows.window[i]; in alloc_window_dirty_bytemap()
348 context->block_size_shift), in alloc_window_dirty_bytemap()
363 int set_window_bytemap(struct mbox_context *context, struct window_context *cur, in set_window_bytemap() argument
366 if (offset + size > (cur->size >> context->block_size_shift)) { in set_window_bytemap()
369 offset << context->block_size_shift, in set_window_bytemap()
370 size << context->block_size_shift, in set_window_bytemap()
371 cur->size << context->block_size_shift); in set_window_bytemap()
391 void close_current_window(struct mbox_context *context, bool set_bmc_event, in close_current_window() argument
397 set_bmc_events(context, BMC_EVENT_WINDOW_RESET, SET_BMC_EVENT); in close_current_window()
401 context->current->age = 0; in close_current_window()
404 context->current = NULL; in close_current_window()
405 context->current_is_write = false; in close_current_window()
413 void reset_window(struct mbox_context *context, struct window_context *window) in reset_window() argument
416 window->size = context->windows.default_size; in reset_window()
418 set_window_bytemap(context, window, 0, in reset_window()
419 window->size >> context->block_size_shift, in reset_window()
430 void reset_all_windows(struct mbox_context *context, bool set_bmc_event) in reset_all_windows() argument
436 if (context->current) { in reset_all_windows()
437 close_current_window(context, set_bmc_event, FLAGS_NONE); in reset_all_windows()
439 for (i = 0; i < context->windows.num; i++) { in reset_all_windows()
440 reset_window(context, &context->windows.window[i]); in reset_all_windows()
443 context->windows.max_age = 0; in reset_all_windows()
452 struct window_context *find_oldest_window(struct mbox_context *context) in find_oldest_window() argument
455 uint32_t min_age = context->windows.max_age + 1; in find_oldest_window()
458 for (i = 0; i < context->windows.num; i++) { in find_oldest_window()
459 cur = &context->windows.window[i]; in find_oldest_window()
476 struct window_context *find_largest_window(struct mbox_context *context) in find_largest_window() argument
482 for (i = 0; i < context->windows.num; i++) { in find_largest_window()
483 cur = &context->windows.window[i]; in find_largest_window()
508 struct window_context *search_windows(struct mbox_context *context, in search_windows() argument
516 for (i = 0; i < context->windows.num; i++) { in search_windows()
517 cur = &context->windows.window[i]; in search_windows()
531 cur->age = ++(context->windows.max_age); in search_windows()
554 int create_map_window(struct mbox_context *context, in create_map_window() argument
565 cur = search_windows(context, FLASH_OFFSET_UNINIT, true); in create_map_window()
570 cur = find_oldest_window(context); in create_map_window()
571 reset_window(context, cur); in create_map_window()
595 if (offset > context->flash_size) { in create_map_window()
598 } else if ((offset + cur->size) > context->flash_size) { in create_map_window()
609 if (context->version == API_VERSION_1) { in create_map_window()
610 cur->size = align_down(context->flash_size - offset, in create_map_window()
611 1 << context->block_size_shift); in create_map_window()
617 cur->size = context->flash_size - offset; in create_map_window()
622 rc = copy_flash(context, offset, cur->mem, cur->size); in create_map_window()
625 reset_window(context, cur); in create_map_window()
634 cur->size = align_up(rc, (1ULL << context->block_size_shift)); in create_map_window()
646 if (context->version == API_VERSION_1) { in create_map_window()
654 tmp = search_windows(context, i, false); in create_map_window()
656 reset_window(context, tmp); in create_map_window()
663 set_window_bytemap(context, cur, 0, in create_map_window()
664 cur->size >> context->block_size_shift, in create_map_window()
669 cur->age = ++(context->windows.max_age); in create_map_window()