Lines Matching refs:bin

3 // aw88395_lib.c  -- ACF bin parsing and check library file for aw88395
25 static int aw_parse_bin_header(struct aw_device *aw_dev, struct aw_bin *bin);
27 static int aw_check_sum(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num)
34 p_check_sum = &(bin->info.data[(bin->header_info[bin_num].valid_data_addr -
35 bin->header_info[bin_num].header_len)]);
36 len = bin->header_info[bin_num].bin_data_len + bin->header_info[bin_num].header_len;
53 static int aw_check_data_version(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num)
55 if (bin->header_info[bin_num].bin_data_ver < DATA_VERSION_V1 ||
56 bin->header_info[bin_num].bin_data_ver > DATA_VERSION_MAX) {
57 dev_err(aw_dev->dev, "aw_bin_parse Unrecognized this bin data version\n");
64 static int aw_check_register_num(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num)
66 struct bin_header_info temp_info = bin->header_info[bin_num];
70 p_check_sum = &(bin->info.data[(temp_info.valid_data_addr)]);
73 check_register_num = (bin->header_info[bin_num].bin_data_len - CHECK_REGISTER_NUM_OFFSET) /
74 (bin->header_info[bin_num].reg_byte_len +
75 bin->header_info[bin_num].data_byte_len);
84 bin->header_info[bin_num].reg_num = parse_register_num;
85 bin->header_info[bin_num].valid_data_len = temp_info.bin_data_len - VALID_DATA_LEN;
86 bin->header_info[bin_num].valid_data_addr = temp_info.valid_data_addr + VALID_DATA_ADDR;
91 static int aw_check_dsp_reg_num(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num)
93 struct bin_header_info temp_info = bin->header_info[bin_num];
97 p_check_sum = &(bin->info.data[(temp_info.valid_data_addr)]);
100 bin->header_info[bin_num].reg_data_byte_len =
102 check_dsp_reg_num = (bin->header_info[bin_num].bin_data_len - CHECK_DSP_REG_NUM) /
103 bin->header_info[bin_num].reg_data_byte_len;
113 bin->header_info[bin_num].download_addr = le32_to_cpup((void *)p_check_sum);
114 bin->header_info[bin_num].reg_num = parse_dsp_reg_num;
115 bin->header_info[bin_num].valid_data_len = temp_info.bin_data_len - DSP_VALID_DATA_LEN;
116 bin->header_info[bin_num].valid_data_addr = temp_info.valid_data_addr +
122 static int aw_check_soc_app_num(struct aw_device *aw_dev, struct aw_bin *bin, int bin_num)
124 struct bin_header_info temp_info = bin->header_info[bin_num];
128 p_check_sum = &(bin->info.data[(temp_info.valid_data_addr)]);
130 bin->header_info[bin_num].app_version = le32_to_cpup((void *)p_check_sum);
132 check_soc_app_num = bin->header_info[bin_num].bin_data_len - CHECK_SOC_APP_NUM;
141 bin->header_info[bin_num].reg_num = parse_soc_app_num;
142 bin->header_info[bin_num].download_addr = le32_to_cpup((void *)(p_check_sum +
144 bin->header_info[bin_num].valid_data_len = temp_info.bin_data_len - APP_VALID_DATA_LEN;
145 bin->header_info[bin_num].valid_data_addr = temp_info.valid_data_addr +
151 static void aw_get_single_bin_header(struct aw_bin *bin)
153 memcpy((void *)&bin->header_info[bin->all_bin_parse_num], bin->p_addr, DATA_LEN);
155 bin->header_info[bin->all_bin_parse_num].header_len = HEADER_LEN;
156 bin->all_bin_parse_num += 1;
160 int bin_serial_num, struct aw_bin *bin)
166 if (bin->info.len < sizeof(struct bin_header_info)) {
168 (int)sizeof(struct bin_header_info), bin->info.len);
172 aw_bin_header_info = bin->header_info[bin->all_bin_parse_num - 1];
174 bin_start_addr = le32_to_cpup((void *)(bin->p_addr + START_ADDR_OFFSET));
175 bin->p_addr += (HEADER_LEN + bin_start_addr);
176 bin->header_info[bin->all_bin_parse_num].valid_data_addr =
181 bin->p_addr += (HDADER_LEN + valid_data_len);
182 bin->header_info[bin->all_bin_parse_num].valid_data_addr =
187 return aw_parse_bin_header(aw_dev, bin);
190 static int aw_get_multi_bin_header(struct aw_device *aw_dev, struct aw_bin *bin)
195 bin_num = le32_to_cpup((void *)(bin->p_addr + VALID_DATA_ADDR_OFFSET));
196 if (bin->multi_bin_parse_num == 1)
197 bin->header_info[bin->all_bin_parse_num].valid_data_addr =
200 aw_get_single_bin_header(bin);
203 dev_dbg(aw_dev->dev, "aw_bin_parse enter multi bin for is %d\n", i);
204 ret = aw_parse_one_of_multi_bins(aw_dev, bin_num, i, bin);
212 static int aw_parse_bin_header(struct aw_device *aw_dev, struct aw_bin *bin)
216 if (bin->info.len < sizeof(struct bin_header_info)) {
218 (int)sizeof(struct bin_header_info), bin->info.len);
222 bin_data_type = le32_to_cpup((void *)(bin->p_addr + BIN_DATA_TYPE_OFFSET));
228 bin->single_bin_parse_num += 1;
229 dev_dbg(aw_dev->dev, "%s bin->single_bin_parse_num is %d\n", __func__,
230 bin->single_bin_parse_num);
231 if (!bin->multi_bin_parse_num)
232 bin->header_info[bin->all_bin_parse_num].valid_data_addr =
234 aw_get_single_bin_header(bin);
237 bin->multi_bin_parse_num += 1;
238 dev_dbg(aw_dev->dev, "%s bin->multi_bin_parse_num is %d\n", __func__,
239 bin->multi_bin_parse_num);
240 return aw_get_multi_bin_header(aw_dev, bin);
247 static int aw_check_bin_header_version(struct aw_device *aw_dev, struct aw_bin *bin)
251 header_version = le32_to_cpup((void *)(bin->p_addr + HEADER_VERSION_OFFSET));
256 return aw_parse_bin_header(aw_dev, bin);
258 dev_err(aw_dev->dev, "aw_bin_parse Unrecognized this bin header version\n");
263 static int aw_parsing_bin_file(struct aw_device *aw_dev, struct aw_bin *bin)
268 if (!bin) {
269 dev_err(aw_dev->dev, "aw_bin_parse bin is NULL\n");
272 bin->p_addr = bin->info.data;
273 bin->all_bin_parse_num = 0;
274 bin->multi_bin_parse_num = 0;
275 bin->single_bin_parse_num = 0;
277 ret = aw_check_bin_header_version(aw_dev, bin);
279 dev_err(aw_dev->dev, "aw_bin_parse check bin header version error\n");
283 for (i = 0; i < bin->all_bin_parse_num; i++) {
284 ret = aw_check_sum(aw_dev, bin, i);
289 ret = aw_check_data_version(aw_dev, bin, i);
294 if (bin->header_info[i].bin_data_ver == DATA_VERSION_V1) {
295 switch (bin->header_info[i].bin_data_type) {
297 ret = aw_check_register_num(aw_dev, bin, i);
300 ret = aw_check_dsp_reg_num(aw_dev, bin, i);
303 ret = aw_check_soc_app_num(aw_dev, bin, i);
306 bin->header_info[i].valid_data_len =
307 bin->header_info[i].bin_data_len;
378 dev_err(aw_dev->dev, "parse bin failed");
448 dev_err(aw_dev->dev, "parse bin failed");
454 dev_err(aw_dev->dev, "bin num or type error");
460 dev_err(aw_dev->dev, "bin data len get error!");
901 dev_err(aw_dev->dev, "parse multi bin failed");
913 dev_err(aw_dev->dev, "parse reg bin with hdr failed");