Lines Matching defs:fw_info

24 static int s3fwrn5_fw_send_msg(struct s3fwrn5_fw_info *fw_info,
28 container_of(fw_info, struct s3fwrn5_info, fw_info);
31 reinit_completion(&fw_info->completion);
38 &fw_info->completion, msecs_to_jiffies(1000));
44 if (!fw_info->rsp)
47 *rsp = fw_info->rsp;
48 fw_info->rsp = NULL;
53 static int s3fwrn5_fw_prep_msg(struct s3fwrn5_fw_info *fw_info,
59 hdr.type = type | fw_info->parity;
60 fw_info->parity ^= 0x80;
77 static int s3fwrn5_fw_get_bootinfo(struct s3fwrn5_fw_info *fw_info,
86 ret = s3fwrn5_fw_prep_msg(fw_info, &msg, S3FWRN5_FW_MSG_CMD,
91 ret = s3fwrn5_fw_send_msg(fw_info, msg, &rsp);
109 static int s3fwrn5_fw_enter_update_mode(struct s3fwrn5_fw_info *fw_info,
123 ret = s3fwrn5_fw_prep_msg(fw_info, &msg, S3FWRN5_FW_MSG_CMD,
128 ret = s3fwrn5_fw_send_msg(fw_info, msg, &rsp);
143 ret = s3fwrn5_fw_prep_msg(fw_info, &msg, S3FWRN5_FW_MSG_DATA, 0,
148 ret = s3fwrn5_fw_send_msg(fw_info, msg, &rsp);
163 ret = s3fwrn5_fw_prep_msg(fw_info, &msg, S3FWRN5_FW_MSG_DATA, 0,
168 ret = s3fwrn5_fw_send_msg(fw_info, msg, &rsp);
182 static int s3fwrn5_fw_update_sector(struct s3fwrn5_fw_info *fw_info,
194 ret = s3fwrn5_fw_prep_msg(fw_info, &msg, S3FWRN5_FW_MSG_CMD,
199 ret = s3fwrn5_fw_send_msg(fw_info, msg, &rsp);
215 ret = s3fwrn5_fw_prep_msg(fw_info, &msg,
220 ret = s3fwrn5_fw_send_msg(fw_info, msg, &rsp);
241 static int s3fwrn5_fw_complete_update_mode(struct s3fwrn5_fw_info *fw_info)
249 ret = s3fwrn5_fw_prep_msg(fw_info, &msg, S3FWRN5_FW_MSG_CMD,
254 ret = s3fwrn5_fw_send_msg(fw_info, msg, &rsp);
283 int s3fwrn5_fw_request_firmware(struct s3fwrn5_fw_info *fw_info)
285 struct s3fwrn5_fw_image *fw = &fw_info->fw;
291 ret = request_firmware(&fw->fw, fw_info->fw_name,
292 &fw_info->ndev->nfc_dev->dev);
321 static void s3fwrn5_fw_release_firmware(struct s3fwrn5_fw_info *fw_info)
323 release_firmware(fw_info->fw.fw);
358 int s3fwrn5_fw_setup(struct s3fwrn5_fw_info *fw_info)
360 struct device *dev = &fw_info->ndev->nfc_dev->dev;
366 ret = s3fwrn5_fw_get_bootinfo(fw_info, &bootinfo);
374 ret = s3fwrn5_fw_get_base_addr(&bootinfo, &fw_info->base_addr);
380 fw_info->sector_size = bootinfo.sector_size;
382 fw_info->sig_size = s3fwrn5_fw_is_custom(&bootinfo) ?
383 fw_info->fw.custom_sig_size : fw_info->fw.sig_size;
384 fw_info->sig = s3fwrn5_fw_is_custom(&bootinfo) ?
385 fw_info->fw.custom_sig : fw_info->fw.sig;
390 s3fwrn5_fw_release_firmware(fw_info);
394 bool s3fwrn5_fw_check_version(const struct s3fwrn5_fw_info *fw_info, u32 version)
396 struct s3fwrn5_fw_version *new = (void *) &fw_info->fw.version;
409 int s3fwrn5_fw_download(struct s3fwrn5_fw_info *fw_info)
411 struct device *dev = &fw_info->ndev->nfc_dev->dev;
412 struct s3fwrn5_fw_image *fw = &fw_info->fw;
418 image_size = fw_info->sector_size * fw->image_sectors;
438 dev_info(dev, "Firmware update: %s\n", fw_info->fw_name);
440 ret = s3fwrn5_fw_enter_update_mode(fw_info, hash_data,
441 SHA1_DIGEST_SIZE, fw_info->sig, fw_info->sig_size);
447 for (off = 0; off < image_size; off += fw_info->sector_size) {
448 ret = s3fwrn5_fw_update_sector(fw_info,
449 fw_info->base_addr + off, fw->image + off);
456 ret = s3fwrn5_fw_complete_update_mode(fw_info);
467 void s3fwrn5_fw_init(struct s3fwrn5_fw_info *fw_info, const char *fw_name)
469 fw_info->parity = 0x00;
470 fw_info->rsp = NULL;
471 fw_info->fw.fw = NULL;
472 strcpy(fw_info->fw_name, fw_name);
473 init_completion(&fw_info->completion);
476 void s3fwrn5_fw_cleanup(struct s3fwrn5_fw_info *fw_info)
478 s3fwrn5_fw_release_firmware(fw_info);
484 struct s3fwrn5_fw_info *fw_info = &info->fw_info;
486 if (WARN_ON(fw_info->rsp)) {
491 fw_info->rsp = skb;
493 complete(&fw_info->completion);