Lines Matching full:bin

3 // aw88395_lib.c  -- ACF bin parsing and check library file for aw88395
24 static int aw_parse_bin_header(struct aw_device *aw_dev, struct aw_bin *bin);
26 static int aw_check_sum(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num) in aw_check_sum() argument
33 p_check_sum = &(bin->info.data[(bin->header_info[bin_num].valid_data_addr - in aw_check_sum()
34 bin->header_info[bin_num].header_len)]); in aw_check_sum()
35 len = bin->header_info[bin_num].bin_data_len + bin->header_info[bin_num].header_len; in aw_check_sum()
52 static int aw_check_data_version(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num) in aw_check_data_version() argument
54 if (bin->header_info[bin_num].bin_data_ver < DATA_VERSION_V1 || in aw_check_data_version()
55 bin->header_info[bin_num].bin_data_ver > DATA_VERSION_MAX) { in aw_check_data_version()
56 dev_err(aw_dev->dev, "aw_bin_parse Unrecognized this bin data version\n"); in aw_check_data_version()
63 static int aw_check_register_num(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num) in aw_check_register_num() argument
65 struct bin_header_info temp_info = bin->header_info[bin_num]; in aw_check_register_num()
69 p_check_sum = &(bin->info.data[(temp_info.valid_data_addr)]); in aw_check_register_num()
72 check_register_num = (bin->header_info[bin_num].bin_data_len - CHECK_REGISTER_NUM_OFFSET) / in aw_check_register_num()
73 (bin->header_info[bin_num].reg_byte_len + in aw_check_register_num()
74 bin->header_info[bin_num].data_byte_len); in aw_check_register_num()
83 bin->header_info[bin_num].reg_num = parse_register_num; in aw_check_register_num()
84 bin->header_info[bin_num].valid_data_len = temp_info.bin_data_len - VALID_DATA_LEN; in aw_check_register_num()
85 bin->header_info[bin_num].valid_data_addr = temp_info.valid_data_addr + VALID_DATA_ADDR; in aw_check_register_num()
90 static int aw_check_dsp_reg_num(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num) in aw_check_dsp_reg_num() argument
92 struct bin_header_info temp_info = bin->header_info[bin_num]; in aw_check_dsp_reg_num()
96 p_check_sum = &(bin->info.data[(temp_info.valid_data_addr)]); in aw_check_dsp_reg_num()
99 bin->header_info[bin_num].reg_data_byte_len = in aw_check_dsp_reg_num()
101 check_dsp_reg_num = (bin->header_info[bin_num].bin_data_len - CHECK_DSP_REG_NUM) / in aw_check_dsp_reg_num()
102 bin->header_info[bin_num].reg_data_byte_len; in aw_check_dsp_reg_num()
112 bin->header_info[bin_num].download_addr = le32_to_cpup((void *)p_check_sum); in aw_check_dsp_reg_num()
113 bin->header_info[bin_num].reg_num = parse_dsp_reg_num; in aw_check_dsp_reg_num()
114 bin->header_info[bin_num].valid_data_len = temp_info.bin_data_len - DSP_VALID_DATA_LEN; in aw_check_dsp_reg_num()
115 bin->header_info[bin_num].valid_data_addr = temp_info.valid_data_addr + in aw_check_dsp_reg_num()
121 static int aw_check_soc_app_num(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num) in aw_check_soc_app_num() argument
123 struct bin_header_info temp_info = bin->header_info[bin_num]; in aw_check_soc_app_num()
127 p_check_sum = &(bin->info.data[(temp_info.valid_data_addr)]); in aw_check_soc_app_num()
129 bin->header_info[bin_num].app_version = le32_to_cpup((void *)p_check_sum); in aw_check_soc_app_num()
131 check_soc_app_num = bin->header_info[bin_num].bin_data_len - CHECK_SOC_APP_NUM; in aw_check_soc_app_num()
140 bin->header_info[bin_num].reg_num = parse_soc_app_num; in aw_check_soc_app_num()
141 bin->header_info[bin_num].download_addr = le32_to_cpup((void *)(p_check_sum + in aw_check_soc_app_num()
143 bin->header_info[bin_num].valid_data_len = temp_info.bin_data_len - APP_VALID_DATA_LEN; in aw_check_soc_app_num()
144 bin->header_info[bin_num].valid_data_addr = temp_info.valid_data_addr + in aw_check_soc_app_num()
150 static void aw_get_single_bin_header(struct aw_bin *bin) in aw_get_single_bin_header() argument
152 memcpy((void *)&bin->header_info[bin->all_bin_parse_num], bin->p_addr, DATA_LEN); in aw_get_single_bin_header()
154 bin->header_info[bin->all_bin_parse_num].header_len = HEADER_LEN; in aw_get_single_bin_header()
155 bin->all_bin_parse_num += 1; in aw_get_single_bin_header()
159 int bin_serial_num, struct aw_bin *bin) in aw_parse_one_of_multi_bins() argument
165 if (bin->info.len < sizeof(struct bin_header_info)) { in aw_parse_one_of_multi_bins()
167 (int)sizeof(struct bin_header_info), bin->info.len); in aw_parse_one_of_multi_bins()
171 aw_bin_header_info = bin->header_info[bin->all_bin_parse_num - 1]; in aw_parse_one_of_multi_bins()
173 bin_start_addr = le32_to_cpup((void *)(bin->p_addr + START_ADDR_OFFSET)); in aw_parse_one_of_multi_bins()
174 bin->p_addr += (HEADER_LEN + bin_start_addr); in aw_parse_one_of_multi_bins()
175 bin->header_info[bin->all_bin_parse_num].valid_data_addr = in aw_parse_one_of_multi_bins()
180 bin->p_addr += (HDADER_LEN + valid_data_len); in aw_parse_one_of_multi_bins()
181 bin->header_info[bin->all_bin_parse_num].valid_data_addr = in aw_parse_one_of_multi_bins()
186 return aw_parse_bin_header(aw_dev, bin); in aw_parse_one_of_multi_bins()
189 static int aw_get_multi_bin_header(struct aw_device *aw_dev, struct aw_bin *bin) in aw_get_multi_bin_header() argument
194 bin_num = le32_to_cpup((void *)(bin->p_addr + VALID_DATA_ADDR_OFFSET)); in aw_get_multi_bin_header()
195 if (bin->multi_bin_parse_num == 1) in aw_get_multi_bin_header()
196 bin->header_info[bin->all_bin_parse_num].valid_data_addr = in aw_get_multi_bin_header()
199 aw_get_single_bin_header(bin); in aw_get_multi_bin_header()
202 dev_dbg(aw_dev->dev, "aw_bin_parse enter multi bin for is %d\n", i); in aw_get_multi_bin_header()
203 ret = aw_parse_one_of_multi_bins(aw_dev, bin_num, i, bin); in aw_get_multi_bin_header()
211 static int aw_parse_bin_header(struct aw_device *aw_dev, struct aw_bin *bin) in aw_parse_bin_header() argument
215 if (bin->info.len < sizeof(struct bin_header_info)) { in aw_parse_bin_header()
217 (int)sizeof(struct bin_header_info), bin->info.len); in aw_parse_bin_header()
221 bin_data_type = le32_to_cpup((void *)(bin->p_addr + BIN_DATA_TYPE_OFFSET)); in aw_parse_bin_header()
227 bin->single_bin_parse_num += 1; in aw_parse_bin_header()
228 dev_dbg(aw_dev->dev, "%s bin->single_bin_parse_num is %d\n", __func__, in aw_parse_bin_header()
229 bin->single_bin_parse_num); in aw_parse_bin_header()
230 if (!bin->multi_bin_parse_num) in aw_parse_bin_header()
231 bin->header_info[bin->all_bin_parse_num].valid_data_addr = in aw_parse_bin_header()
233 aw_get_single_bin_header(bin); in aw_parse_bin_header()
236 bin->multi_bin_parse_num += 1; in aw_parse_bin_header()
237 dev_dbg(aw_dev->dev, "%s bin->multi_bin_parse_num is %d\n", __func__, in aw_parse_bin_header()
238 bin->multi_bin_parse_num); in aw_parse_bin_header()
239 return aw_get_multi_bin_header(aw_dev, bin); in aw_parse_bin_header()
246 static int aw_check_bin_header_version(struct aw_device *aw_dev, struct aw_bin *bin) in aw_check_bin_header_version() argument
250 header_version = le32_to_cpup((void *)(bin->p_addr + HEADER_VERSION_OFFSET)); in aw_check_bin_header_version()
255 return aw_parse_bin_header(aw_dev, bin); in aw_check_bin_header_version()
257 dev_err(aw_dev->dev, "aw_bin_parse Unrecognized this bin header version\n"); in aw_check_bin_header_version()
262 static int aw_parsing_bin_file(struct aw_device *aw_dev, struct aw_bin *bin) in aw_parsing_bin_file() argument
267 if (!bin) { in aw_parsing_bin_file()
268 dev_err(aw_dev->dev, "aw_bin_parse bin is NULL\n"); in aw_parsing_bin_file()
271 bin->p_addr = bin->info.data; in aw_parsing_bin_file()
272 bin->all_bin_parse_num = 0; in aw_parsing_bin_file()
273 bin->multi_bin_parse_num = 0; in aw_parsing_bin_file()
274 bin->single_bin_parse_num = 0; in aw_parsing_bin_file()
276 ret = aw_check_bin_header_version(aw_dev, bin); in aw_parsing_bin_file()
278 dev_err(aw_dev->dev, "aw_bin_parse check bin header version error\n"); in aw_parsing_bin_file()
282 for (i = 0; i < bin->all_bin_parse_num; i++) { in aw_parsing_bin_file()
283 ret = aw_check_sum(aw_dev, bin, i); in aw_parsing_bin_file()
288 ret = aw_check_data_version(aw_dev, bin, i); in aw_parsing_bin_file()
293 if (bin->header_info[i].bin_data_ver == DATA_VERSION_V1) { in aw_parsing_bin_file()
294 switch (bin->header_info[i].bin_data_type) { in aw_parsing_bin_file()
296 ret = aw_check_register_num(aw_dev, bin, i); in aw_parsing_bin_file()
299 ret = aw_check_dsp_reg_num(aw_dev, bin, i); in aw_parsing_bin_file()
302 ret = aw_check_soc_app_num(aw_dev, bin, i); in aw_parsing_bin_file()
305 bin->header_info[i].valid_data_len = in aw_parsing_bin_file()
306 bin->header_info[i].bin_data_len; in aw_parsing_bin_file()
377 dev_err(aw_dev->dev, "parse bin failed"); in aw_dev_prof_parse_multi_bin()
447 dev_err(aw_dev->dev, "parse bin failed"); in aw_dev_parse_reg_bin_with_hdr()
453 dev_err(aw_dev->dev, "bin num or type error"); in aw_dev_parse_reg_bin_with_hdr()
865 dev_err(aw_dev->dev, "parse multi bin failed"); in aw_dev_parse_data_by_sec_type_v1()
877 dev_err(aw_dev->dev, "parse reg bin with hdr failed"); in aw_dev_parse_data_by_sec_type_v1()