Lines Matching refs:mfa2_file

95 mlxfw_mfa2_tlv_multi_validate(const struct mlxfw_mfa2_file *mfa2_file,
102 mlxfw_mfa2_tlv_multi_foreach(mfa2_file, tlv, idx, multi) {
112 mlxfw_mfa2_file_dev_validate(const struct mlxfw_mfa2_file *mfa2_file,
126 multi = mlxfw_mfa2_tlv_multi_get(mfa2_file, dev_tlv);
132 if (!mlxfw_mfa2_tlv_multi_validate(mfa2_file, multi))
136 tlv = mlxfw_mfa2_tlv_multi_child_find(mfa2_file, multi,
143 psid = mlxfw_mfa2_tlv_psid_get(mfa2_file, tlv);
153 err = mlxfw_mfa2_tlv_multi_child_count(mfa2_file, multi,
165 tlv = mlxfw_mfa2_tlv_multi_child_find(mfa2_file, multi,
171 cptr = mlxfw_mfa2_tlv_component_ptr_get(mfa2_file, tlv);
185 mlxfw_mfa2_file_comp_validate(const struct mlxfw_mfa2_file *mfa2_file,
195 multi = mlxfw_mfa2_tlv_multi_get(mfa2_file, comp_tlv);
201 if (!mlxfw_mfa2_tlv_multi_validate(mfa2_file, multi))
205 tlv = mlxfw_mfa2_tlv_multi_child(mfa2_file, multi);
211 cdesc = mlxfw_mfa2_tlv_component_descriptor_get(mfa2_file, tlv);
225 static bool mlxfw_mfa2_file_validate(const struct mlxfw_mfa2_file *mfa2_file)
233 mlxfw_mfa2_tlv_foreach(mfa2_file, tlv, idx, mfa2_file->first_dev,
234 mfa2_file->dev_count) {
241 if (!mlxfw_mfa2_file_dev_validate(mfa2_file, tlv, idx))
246 mlxfw_mfa2_tlv_foreach(mfa2_file, tlv, idx, mfa2_file->first_component,
247 mfa2_file->component_count) {
254 if (!mlxfw_mfa2_file_comp_validate(mfa2_file, tlv, idx))
266 struct mlxfw_mfa2_file *mfa2_file;
270 mfa2_file = kzalloc(sizeof(*mfa2_file), GFP_KERNEL);
271 if (!mfa2_file)
274 mfa2_file->fw = fw;
276 first_tlv = mlxfw_mfa2_tlv_get(mfa2_file, first_tlv_ptr);
282 multi = mlxfw_mfa2_tlv_multi_get(mfa2_file, first_tlv);
288 multi_child = mlxfw_mfa2_tlv_multi_child(mfa2_file, multi);
292 pd = mlxfw_mfa2_tlv_package_descriptor_get(mfa2_file, multi_child);
298 mfa2_file->first_dev = mlxfw_mfa2_tlv_next(mfa2_file, first_tlv);
299 if (!mfa2_file->first_dev) {
304 mfa2_file->dev_count = be16_to_cpu(pd->num_devices);
305 mfa2_file->first_component = mlxfw_mfa2_tlv_advance(mfa2_file,
306 mfa2_file->first_dev,
307 mfa2_file->dev_count);
308 mfa2_file->component_count = be16_to_cpu(pd->num_components);
309 mfa2_file->cb = fw->data + NLA_ALIGN(be32_to_cpu(pd->cb_offset));
310 if (!mlxfw_mfa2_valid_ptr(mfa2_file, mfa2_file->cb)) {
314 mfa2_file->cb_archive_size = be32_to_cpu(pd->cb_archive_size);
315 cb_top_ptr = mfa2_file->cb + mfa2_file->cb_archive_size - 1;
316 if (!mlxfw_mfa2_valid_ptr(mfa2_file, cb_top_ptr)) {
321 if (!mlxfw_mfa2_file_validate(mfa2_file))
323 return mfa2_file;
325 kfree(mfa2_file);
330 mlxfw_mfa2_tlv_dev_get(const struct mlxfw_mfa2_file *mfa2_file,
340 mlxfw_mfa2_tlv_foreach(mfa2_file, dev_tlv, idx, mfa2_file->first_dev,
341 mfa2_file->dev_count) {
345 dev_multi = mlxfw_mfa2_tlv_multi_get(mfa2_file, dev_tlv);
350 tlv = mlxfw_mfa2_tlv_multi_child_find(mfa2_file, dev_multi,
357 tlv_psid = mlxfw_mfa2_tlv_psid_get(mfa2_file, tlv);
368 int mlxfw_mfa2_file_component_count(const struct mlxfw_mfa2_file *mfa2_file,
376 dev_multi = mlxfw_mfa2_tlv_dev_get(mfa2_file, psid, psid_size);
380 err = mlxfw_mfa2_tlv_multi_child_count(mfa2_file, dev_multi,
425 static int mlxfw_mfa2_file_cb_offset_xz(const struct mlxfw_mfa2_file *mfa2_file,
438 dec_buf.in_size = mfa2_file->cb_archive_size;
439 dec_buf.in = mfa2_file->cb;
471 mlxfw_mfa2_file_component_tlv_get(const struct mlxfw_mfa2_file *mfa2_file,
478 if (comp_index > mfa2_file->component_count)
481 comp_tlv = mlxfw_mfa2_tlv_advance(mfa2_file, mfa2_file->first_component,
486 multi = mlxfw_mfa2_tlv_multi_get(mfa2_file, comp_tlv);
490 multi_child = mlxfw_mfa2_tlv_multi_child(mfa2_file, multi);
494 return mlxfw_mfa2_tlv_component_descriptor_get(mfa2_file, multi_child);
503 mlxfw_mfa2_file_component_find(const struct mlxfw_mfa2_file *mfa2_file,
512 dev_multi = mlxfw_mfa2_tlv_dev_get(mfa2_file, psid, psid_size);
516 cptr_tlv = mlxfw_mfa2_tlv_multi_child_find(mfa2_file, dev_multi,
522 cptr = mlxfw_mfa2_tlv_component_ptr_get(mfa2_file, cptr_tlv);
527 return mlxfw_mfa2_file_component_tlv_get(mfa2_file, comp_idx);
531 mlxfw_mfa2_file_component_get(const struct mlxfw_mfa2_file *mfa2_file,
542 comp = mlxfw_mfa2_file_component_find(mfa2_file, psid, psid_size,
557 err = mlxfw_mfa2_file_cb_offset_xz(mfa2_file, cb_offset, comp_buf_size,
586 void mlxfw_mfa2_file_fini(struct mlxfw_mfa2_file *mfa2_file)
588 kfree(mfa2_file);