Lines Matching refs:mfa2_file
123 mlxfw_mfa2_tlv_multi_validate(const struct mlxfw_mfa2_file *mfa2_file, in mlxfw_mfa2_tlv_multi_validate() argument
130 mlxfw_mfa2_tlv_multi_foreach(mfa2_file, tlv, idx, multi) { in mlxfw_mfa2_tlv_multi_validate()
140 mlxfw_mfa2_file_dev_validate(const struct mlxfw_mfa2_file *mfa2_file, in mlxfw_mfa2_file_dev_validate() argument
154 multi = mlxfw_mfa2_tlv_multi_get(mfa2_file, dev_tlv); in mlxfw_mfa2_file_dev_validate()
160 if (!mlxfw_mfa2_tlv_multi_validate(mfa2_file, multi)) in mlxfw_mfa2_file_dev_validate()
164 tlv = mlxfw_mfa2_tlv_multi_child_find(mfa2_file, multi, in mlxfw_mfa2_file_dev_validate()
171 psid = mlxfw_mfa2_tlv_psid_get(mfa2_file, tlv); in mlxfw_mfa2_file_dev_validate()
181 err = mlxfw_mfa2_tlv_multi_child_count(mfa2_file, multi, in mlxfw_mfa2_file_dev_validate()
193 tlv = mlxfw_mfa2_tlv_multi_child_find(mfa2_file, multi, in mlxfw_mfa2_file_dev_validate()
199 cptr = mlxfw_mfa2_tlv_component_ptr_get(mfa2_file, tlv); in mlxfw_mfa2_file_dev_validate()
213 mlxfw_mfa2_file_comp_validate(const struct mlxfw_mfa2_file *mfa2_file, in mlxfw_mfa2_file_comp_validate() argument
223 multi = mlxfw_mfa2_tlv_multi_get(mfa2_file, comp_tlv); in mlxfw_mfa2_file_comp_validate()
229 if (!mlxfw_mfa2_tlv_multi_validate(mfa2_file, multi)) in mlxfw_mfa2_file_comp_validate()
233 tlv = mlxfw_mfa2_tlv_multi_child(mfa2_file, multi); in mlxfw_mfa2_file_comp_validate()
239 cdesc = mlxfw_mfa2_tlv_component_descriptor_get(mfa2_file, tlv); in mlxfw_mfa2_file_comp_validate()
253 static bool mlxfw_mfa2_file_validate(const struct mlxfw_mfa2_file *mfa2_file) in mlxfw_mfa2_file_validate() argument
261 mlxfw_mfa2_tlv_foreach(mfa2_file, tlv, idx, mfa2_file->first_dev, in mlxfw_mfa2_file_validate()
262 mfa2_file->dev_count) { in mlxfw_mfa2_file_validate()
269 if (!mlxfw_mfa2_file_dev_validate(mfa2_file, tlv, idx)) in mlxfw_mfa2_file_validate()
274 mlxfw_mfa2_tlv_foreach(mfa2_file, tlv, idx, mfa2_file->first_component, in mlxfw_mfa2_file_validate()
275 mfa2_file->component_count) { in mlxfw_mfa2_file_validate()
282 if (!mlxfw_mfa2_file_comp_validate(mfa2_file, tlv, idx)) in mlxfw_mfa2_file_validate()
294 struct mlxfw_mfa2_file *mfa2_file; in mlxfw_mfa2_file_init() local
298 mfa2_file = kcalloc(1, sizeof(*mfa2_file), GFP_KERNEL); in mlxfw_mfa2_file_init()
299 if (!mfa2_file) in mlxfw_mfa2_file_init()
302 mfa2_file->fw = fw; in mlxfw_mfa2_file_init()
304 first_tlv = mlxfw_mfa2_tlv_get(mfa2_file, first_tlv_ptr); in mlxfw_mfa2_file_init()
310 multi = mlxfw_mfa2_tlv_multi_get(mfa2_file, first_tlv); in mlxfw_mfa2_file_init()
316 multi_child = mlxfw_mfa2_tlv_multi_child(mfa2_file, multi); in mlxfw_mfa2_file_init()
320 pd = mlxfw_mfa2_tlv_package_descriptor_get(mfa2_file, multi_child); in mlxfw_mfa2_file_init()
326 mfa2_file->first_dev = mlxfw_mfa2_tlv_next(mfa2_file, first_tlv); in mlxfw_mfa2_file_init()
327 if (!mfa2_file->first_dev) { in mlxfw_mfa2_file_init()
332 mfa2_file->dev_count = be16_to_cpu(pd->num_devices); in mlxfw_mfa2_file_init()
333 mfa2_file->first_component = mlxfw_mfa2_tlv_advance(mfa2_file, in mlxfw_mfa2_file_init()
334 mfa2_file->first_dev, in mlxfw_mfa2_file_init()
335 mfa2_file->dev_count); in mlxfw_mfa2_file_init()
336 mfa2_file->component_count = be16_to_cpu(pd->num_components); in mlxfw_mfa2_file_init()
337 mfa2_file->cb = (const u8 *) fw->data + NLA_ALIGN(be32_to_cpu(pd->cb_offset)); in mlxfw_mfa2_file_init()
338 if (!mlxfw_mfa2_valid_ptr(mfa2_file, mfa2_file->cb)) { in mlxfw_mfa2_file_init()
342 mfa2_file->cb_archive_size = be32_to_cpu(pd->cb_archive_size); in mlxfw_mfa2_file_init()
343 cb_top_ptr = (const u8 *) mfa2_file->cb + mfa2_file->cb_archive_size - 1; in mlxfw_mfa2_file_init()
344 if (!mlxfw_mfa2_valid_ptr(mfa2_file, cb_top_ptr)) { in mlxfw_mfa2_file_init()
349 if (!mlxfw_mfa2_file_validate(mfa2_file)) in mlxfw_mfa2_file_init()
351 return mfa2_file; in mlxfw_mfa2_file_init()
353 kfree(mfa2_file); in mlxfw_mfa2_file_init()
358 mlxfw_mfa2_tlv_dev_get(const struct mlxfw_mfa2_file *mfa2_file, in mlxfw_mfa2_tlv_dev_get() argument
368 mlxfw_mfa2_tlv_foreach(mfa2_file, dev_tlv, idx, mfa2_file->first_dev, in mlxfw_mfa2_tlv_dev_get()
369 mfa2_file->dev_count) { in mlxfw_mfa2_tlv_dev_get()
373 dev_multi = mlxfw_mfa2_tlv_multi_get(mfa2_file, dev_tlv); in mlxfw_mfa2_tlv_dev_get()
378 tlv = mlxfw_mfa2_tlv_multi_child_find(mfa2_file, dev_multi, in mlxfw_mfa2_tlv_dev_get()
385 tlv_psid = mlxfw_mfa2_tlv_psid_get(mfa2_file, tlv); in mlxfw_mfa2_tlv_dev_get()
396 int mlxfw_mfa2_file_component_count(const struct mlxfw_mfa2_file *mfa2_file, in mlxfw_mfa2_file_component_count() argument
404 dev_multi = mlxfw_mfa2_tlv_dev_get(mfa2_file, psid, psid_size); in mlxfw_mfa2_file_component_count()
408 err = mlxfw_mfa2_tlv_multi_child_count(mfa2_file, dev_multi, in mlxfw_mfa2_file_component_count()
453 static int mlxfw_mfa2_file_cb_offset_xz(const struct mlxfw_mfa2_file *mfa2_file, in mlxfw_mfa2_file_cb_offset_xz() argument
466 dec_buf.in_size = mfa2_file->cb_archive_size; in mlxfw_mfa2_file_cb_offset_xz()
467 dec_buf.in = mfa2_file->cb; in mlxfw_mfa2_file_cb_offset_xz()
499 mlxfw_mfa2_file_component_tlv_get(const struct mlxfw_mfa2_file *mfa2_file, in mlxfw_mfa2_file_component_tlv_get() argument
506 if (comp_index > mfa2_file->component_count) in mlxfw_mfa2_file_component_tlv_get()
509 comp_tlv = mlxfw_mfa2_tlv_advance(mfa2_file, mfa2_file->first_component, in mlxfw_mfa2_file_component_tlv_get()
514 multi = mlxfw_mfa2_tlv_multi_get(mfa2_file, comp_tlv); in mlxfw_mfa2_file_component_tlv_get()
518 multi_child = mlxfw_mfa2_tlv_multi_child(mfa2_file, multi); in mlxfw_mfa2_file_component_tlv_get()
522 return mlxfw_mfa2_tlv_component_descriptor_get(mfa2_file, multi_child); in mlxfw_mfa2_file_component_tlv_get()
531 mlxfw_mfa2_file_component_find(const struct mlxfw_mfa2_file *mfa2_file, in mlxfw_mfa2_file_component_find() argument
540 dev_multi = mlxfw_mfa2_tlv_dev_get(mfa2_file, psid, psid_size); in mlxfw_mfa2_file_component_find()
544 cptr_tlv = mlxfw_mfa2_tlv_multi_child_find(mfa2_file, dev_multi, in mlxfw_mfa2_file_component_find()
550 cptr = mlxfw_mfa2_tlv_component_ptr_get(mfa2_file, cptr_tlv); in mlxfw_mfa2_file_component_find()
555 return mlxfw_mfa2_file_component_tlv_get(mfa2_file, comp_idx); in mlxfw_mfa2_file_component_find()
559 mlxfw_mfa2_file_component_get(const struct mlxfw_mfa2_file *mfa2_file, in mlxfw_mfa2_file_component_get() argument
570 comp = mlxfw_mfa2_file_component_find(mfa2_file, psid, psid_size, in mlxfw_mfa2_file_component_get()
585 err = mlxfw_mfa2_file_cb_offset_xz(mfa2_file, cb_offset, comp_buf_size, in mlxfw_mfa2_file_component_get()
614 void mlxfw_mfa2_file_fini(struct mlxfw_mfa2_file *mfa2_file) in mlxfw_mfa2_file_fini() argument
616 kfree(mfa2_file); in mlxfw_mfa2_file_fini()