/** * @brief Update the offline frame information in host_sp_communication. * Refer to "sh_css_sp.h" for more details. */ void sh_css_update_host2sp_offline_frame( unsigned frame_num, struct ia_css_frame *frame, struct ia_css_metadata *metadata) { unsigned int HIVE_ADDR_host_sp_com; unsigned int o; (void)HIVE_ADDR_host_sp_com; /* Suppres warnings in CRUN */ assert(frame_num < NUM_CONTINUOUS_FRAMES); /* Write new frame data into SP DMEM */ HIVE_ADDR_host_sp_com = sh_css_sp_fw.info.sp.host_sp_com; o = offsetof(struct host_sp_communication, host2sp_offline_frames) / sizeof(int); o += frame_num; store_sp_array_uint(host_sp_com, o, frame ? frame->data : 0); /* Write metadata buffer into SP DMEM */ o = offsetof(struct host_sp_communication, host2sp_offline_metadata) / sizeof(int); o += frame_num; store_sp_array_uint(host_sp_com, o, metadata ? metadata->address : 0); }
static void init_host2sp_command(void) { unsigned int HIVE_ADDR_host_sp_com = sh_css_sp_fw.info.sp.host_sp_com; unsigned int o = offsetof(struct host_sp_communication, host2sp_command) / sizeof(int); (void)HIVE_ADDR_host_sp_com; /* Suppres warnings in CRUN */ store_sp_array_uint(host_sp_com, o, host2sp_cmd_ready); }
void sh_css_write_host2sp_command(enum host2sp_commands host2sp_command) { unsigned int HIVE_ADDR_host_sp_com = sh_css_sp_fw.info.sp.host_sp_com; unsigned int o = offsetof(struct host_sp_communication, host2sp_command) / sizeof(int); (void)HIVE_ADDR_host_sp_com; /* Suppres warnings in CRUN */ /* Previous command must be handled by SP (by design) */ assert(load_sp_array_uint(host_sp_com, o) == host2sp_cmd_ready); store_sp_array_uint(host_sp_com, o, host2sp_command); }
void sh_css_update_host2sp_cont_num_mipi_frames(unsigned num_frames) { unsigned int HIVE_ADDR_host_sp_com; unsigned int o; (void)HIVE_ADDR_host_sp_com; /* Suppres warnings in CRUN */ /* Write new frame data into SP DMEM */ HIVE_ADDR_host_sp_com = sh_css_sp_fw.info.sp.host_sp_com; o = offsetof(struct host_sp_communication, host2sp_cont_num_mipi_frames) / sizeof(int); store_sp_array_uint(host_sp_com, o, num_frames); }
/* * Frame data is no longer part of the sp_stage structure but part of a * seperate structure. The aim is to make the sp_data struct static * (it defines a pipeline) and that the dynamic (per frame) data is stored * separetly. * * This function must be called first every where were you start constructing * a new pipeline by defining one or more stages with use of variable * sh_css_sp_stage. Even the special cases like accelerator and copy_frame * These have a pipeline of just 1 stage. */ void sh_css_init_host2sp_frame_data(void) { /* Clean table */ unsigned int HIVE_ADDR_host_sp_com = sh_css_sp_fw.info.sp.host_sp_com; (void)HIVE_ADDR_host_sp_com; /* Suppres warnings in CRUN */ /* * rvanimme: don't clean it to save static frame info line ref_in * ref_out, and tnr_frames. Once this static data is in a * seperate data struct, this may be enable (but still, there is * no need for it) */ #if 0 unsigned i; for (i = 0; i < SH_CSS_MAX_PIPELINES*SH_CSS_NUM_FRAME_IDS; i++) store_sp_array_uint(host_sp_com, i+o, 0); #endif }
/** * @brief Update the offline frame information in host_sp_communication. * Refer to "sh_css_sp.h" for more details. */ void sh_css_update_host2sp_mipi_frame( unsigned frame_num, struct ia_css_frame *frame) { unsigned int HIVE_ADDR_host_sp_com; unsigned int o; (void)HIVE_ADDR_host_sp_com; /* Suppres warnings in CRUN */ assert(frame_num < NUM_MIPI_FRAMES); /* Write new frame data into SP DMEM */ HIVE_ADDR_host_sp_com = sh_css_sp_fw.info.sp.host_sp_com; o = offsetof(struct host_sp_communication, host2sp_mipi_frames) / sizeof(int); o += frame_num; store_sp_array_uint(host_sp_com, o, frame ? frame->data : 0); }
void sh_css_update_host2sp_cont_num_raw_frames(unsigned num_frames, bool set_avail) { const struct ia_css_fw_info *fw; unsigned int HIVE_ADDR_host_sp_com; unsigned int extra_num_frames, avail_num_frames; unsigned int o, o_extra; (void)HIVE_ADDR_host_sp_com; /* Suppres warnings in CRUN */ /* Write new frame data into SP DMEM */ fw = &sh_css_sp_fw; HIVE_ADDR_host_sp_com = fw->info.sp.host_sp_com; if (set_avail) { o = offsetof(struct host_sp_communication, host2sp_cont_avail_num_raw_frames) / sizeof(int); avail_num_frames = load_sp_array_uint(host_sp_com, o); extra_num_frames = num_frames - avail_num_frames; o_extra = offsetof(struct host_sp_communication, host2sp_cont_extra_num_raw_frames) / sizeof(int); store_sp_array_uint(host_sp_com, o_extra, extra_num_frames); } else
/** * @brief Update the offline frame information in host_sp_communication. * Refer to "sh_css_sp.h" for more details. */ void sh_css_update_host2sp_offline_frame( unsigned frame_num, struct sh_css_frame *frame) { const struct sh_css_fw_info *fw; unsigned int HIVE_ADDR_host_sp_com; unsigned int o; (void)HIVE_ADDR_host_sp_com; /* Suppres warnings in CRUN */ assert(frame_num < NUM_CONTINUOUS_FRAMES); /* Write new frame data into SP DMEM */ fw = &sh_css_sp_fw; HIVE_ADDR_host_sp_com = fw->info.sp.host_sp_com; o = offsetof(struct host_sp_communication, host2sp_offline_frames) / sizeof(int); o += frame_num; store_sp_array_uint(host_sp_com, o, frame ? frame->data : 0); }