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 static 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)
365 ret = s3fwrn5_fw_request_firmware(fw_info);
367 dev_err(&fw_info->ndev->nfc_dev->dev,
374 ret = s3fwrn5_fw_get_bootinfo(fw_info, &bootinfo);
376 dev_err(&fw_info->ndev->nfc_dev->dev,
383 ret = s3fwrn5_fw_get_base_addr(&bootinfo, &fw_info->base_addr);
385 dev_err(&fw_info->ndev->nfc_dev->dev,
390 fw_info->sector_size = bootinfo.sector_size;
392 fw_info->sig_size = s3fwrn5_fw_is_custom(&bootinfo) ?
393 fw_info->fw.custom_sig_size : fw_info->fw.sig_size;
394 fw_info->sig = s3fwrn5_fw_is_custom(&bootinfo) ?
395 fw_info->fw.custom_sig : fw_info->fw.sig;
400 s3fwrn5_fw_release_firmware(fw_info);
404 bool s3fwrn5_fw_check_version(const struct s3fwrn5_fw_info *fw_info, u32 version)
406 struct s3fwrn5_fw_version *new = (void *) &fw_info->fw.version;
419 int s3fwrn5_fw_download(struct s3fwrn5_fw_info *fw_info)
421 struct s3fwrn5_fw_image *fw = &fw_info->fw;
427 image_size = fw_info->sector_size * fw->image_sectors;
434 dev_err(&fw_info->ndev->nfc_dev->dev,
443 dev_err(&fw_info->ndev->nfc_dev->dev,
450 dev_info(&fw_info->ndev->nfc_dev->dev,
451 "Firmware update: %s\n", fw_info->fw_name);
453 ret = s3fwrn5_fw_enter_update_mode(fw_info, hash_data,
454 SHA1_DIGEST_SIZE, fw_info->sig, fw_info->sig_size);
456 dev_err(&fw_info->ndev->nfc_dev->dev,
461 for (off = 0; off < image_size; off += fw_info->sector_size) {
462 ret = s3fwrn5_fw_update_sector(fw_info,
463 fw_info->base_addr + off, fw->image + off);
465 dev_err(&fw_info->ndev->nfc_dev->dev,
471 ret = s3fwrn5_fw_complete_update_mode(fw_info);
473 dev_err(&fw_info->ndev->nfc_dev->dev,
478 dev_info(&fw_info->ndev->nfc_dev->dev,
485 void s3fwrn5_fw_init(struct s3fwrn5_fw_info *fw_info, const char *fw_name)
487 fw_info->parity = 0x00;
488 fw_info->rsp = NULL;
489 fw_info->fw.fw = NULL;
490 strcpy(fw_info->fw_name, fw_name);
491 init_completion(&fw_info->completion);
494 void s3fwrn5_fw_cleanup(struct s3fwrn5_fw_info *fw_info)
496 s3fwrn5_fw_release_firmware(fw_info);
502 struct s3fwrn5_fw_info *fw_info = &info->fw_info;
504 if (WARN_ON(fw_info->rsp)) {
509 fw_info->rsp = skb;
511 complete(&fw_info->completion);