Lines Matching full:fw

21 static bool mdt_header_valid(const struct firmware *fw)  in mdt_header_valid()  argument
27 if (fw->size < sizeof(*ehdr)) in mdt_header_valid()
30 ehdr = (struct elf32_hdr *)fw->data; in mdt_header_valid()
39 if (phend > fw->size) in mdt_header_valid()
47 if (shend > fw->size) in mdt_header_valid()
105 * @fw: firmware object for the mdt file
109 ssize_t qcom_mdt_get_size(const struct firmware *fw) in qcom_mdt_get_size() argument
118 if (!mdt_header_valid(fw)) in qcom_mdt_get_size()
121 ehdr = (struct elf32_hdr *)fw->data; in qcom_mdt_get_size()
122 phdrs = (struct elf32_phdr *)(fw->data + ehdr->e_phoff); in qcom_mdt_get_size()
143 * @fw: firmware of mdt header or mbn
160 void *qcom_mdt_read_metadata(const struct firmware *fw, size_t *data_len, in qcom_mdt_read_metadata() argument
173 if (!mdt_header_valid(fw)) in qcom_mdt_read_metadata()
176 ehdr = (struct elf32_hdr *)fw->data; in qcom_mdt_read_metadata()
177 phdrs = (struct elf32_phdr *)(fw->data + ehdr->e_phoff); in qcom_mdt_read_metadata()
205 memcpy(data, fw->data, ehdr_size); in qcom_mdt_read_metadata()
207 if (ehdr_size + hash_size == fw->size) { in qcom_mdt_read_metadata()
210 memcpy(data + ehdr_size, fw->data + hash_offset, hash_size); in qcom_mdt_read_metadata()
211 } else if (phdrs[hash_segment].p_offset + hash_size <= fw->size) { in qcom_mdt_read_metadata()
214 memcpy(data + ehdr_size, fw->data + hash_offset, hash_size); in qcom_mdt_read_metadata()
233 * @fw: firmware object for the mdt file
241 int qcom_mdt_pas_init(struct device *dev, const struct firmware *fw, in qcom_mdt_pas_init() argument
256 if (!mdt_header_valid(fw)) in qcom_mdt_pas_init()
259 ehdr = (struct elf32_hdr *)fw->data; in qcom_mdt_pas_init()
260 phdrs = (struct elf32_phdr *)(fw->data + ehdr->e_phoff); in qcom_mdt_pas_init()
278 metadata = qcom_mdt_read_metadata(fw, &metadata_len, fw_name, dev); in qcom_mdt_pas_init()
307 static bool qcom_mdt_bins_are_split(const struct firmware *fw) in qcom_mdt_bins_are_split() argument
314 ehdr = (struct elf32_hdr *)fw->data; in qcom_mdt_bins_are_split()
315 phdrs = (struct elf32_phdr *)(fw->data + ehdr->e_phoff); in qcom_mdt_bins_are_split()
328 if (seg_start > fw->size || seg_end > fw->size) in qcom_mdt_bins_are_split()
335 static int __qcom_mdt_load(struct device *dev, const struct firmware *fw, in __qcom_mdt_load() argument
352 if (!fw || !mem_region || !mem_phys || !mem_size) in __qcom_mdt_load()
355 if (!mdt_header_valid(fw)) in __qcom_mdt_load()
358 is_split = qcom_mdt_bins_are_split(fw); in __qcom_mdt_load()
359 ehdr = (struct elf32_hdr *)fw->data; in __qcom_mdt_load()
360 phdrs = (struct elf32_phdr *)(fw->data + ehdr->e_phoff); in __qcom_mdt_load()
414 if (phdr->p_offset + phdr->p_filesz > fw->size) { in __qcom_mdt_load()
421 memcpy(ptr, fw->data + phdr->p_offset, phdr->p_filesz); in __qcom_mdt_load()
440 * qcom_mdt_load() - load the firmware which header is loaded as fw
442 * @fw: firmware object for the mdt file
452 int qcom_mdt_load(struct device *dev, const struct firmware *fw, in qcom_mdt_load() argument
459 ret = qcom_mdt_pas_init(dev, fw, firmware, pas_id, mem_phys, NULL); in qcom_mdt_load()
463 return __qcom_mdt_load(dev, fw, firmware, mem_region, mem_phys, in qcom_mdt_load()
469 * qcom_mdt_load_no_init() - load the firmware which header is loaded as fw
471 * @fw: firmware object for the mdt file
480 int qcom_mdt_load_no_init(struct device *dev, const struct firmware *fw, in qcom_mdt_load_no_init() argument
484 return __qcom_mdt_load(dev, fw, firmware, mem_region, mem_phys, in qcom_mdt_load_no_init()