Lines Matching refs:fw_info

35 static int s3fwrn5_fw_send_msg(struct s3fwrn5_fw_info *fw_info,  in s3fwrn5_fw_send_msg()  argument
39 container_of(fw_info, struct s3fwrn5_info, fw_info); in s3fwrn5_fw_send_msg()
42 reinit_completion(&fw_info->completion); in s3fwrn5_fw_send_msg()
49 &fw_info->completion, msecs_to_jiffies(1000)); in s3fwrn5_fw_send_msg()
55 if (!fw_info->rsp) in s3fwrn5_fw_send_msg()
58 *rsp = fw_info->rsp; in s3fwrn5_fw_send_msg()
59 fw_info->rsp = NULL; in s3fwrn5_fw_send_msg()
64 static int s3fwrn5_fw_prep_msg(struct s3fwrn5_fw_info *fw_info, in s3fwrn5_fw_prep_msg() argument
70 hdr.type = type | fw_info->parity; in s3fwrn5_fw_prep_msg()
71 fw_info->parity ^= 0x80; in s3fwrn5_fw_prep_msg()
88 static int s3fwrn5_fw_get_bootinfo(struct s3fwrn5_fw_info *fw_info, in s3fwrn5_fw_get_bootinfo() argument
97 ret = s3fwrn5_fw_prep_msg(fw_info, &msg, S3FWRN5_FW_MSG_CMD, in s3fwrn5_fw_get_bootinfo()
102 ret = s3fwrn5_fw_send_msg(fw_info, msg, &rsp); in s3fwrn5_fw_get_bootinfo()
120 static int s3fwrn5_fw_enter_update_mode(struct s3fwrn5_fw_info *fw_info, in s3fwrn5_fw_enter_update_mode() argument
134 ret = s3fwrn5_fw_prep_msg(fw_info, &msg, S3FWRN5_FW_MSG_CMD, in s3fwrn5_fw_enter_update_mode()
139 ret = s3fwrn5_fw_send_msg(fw_info, msg, &rsp); in s3fwrn5_fw_enter_update_mode()
154 ret = s3fwrn5_fw_prep_msg(fw_info, &msg, S3FWRN5_FW_MSG_DATA, 0, in s3fwrn5_fw_enter_update_mode()
159 ret = s3fwrn5_fw_send_msg(fw_info, msg, &rsp); in s3fwrn5_fw_enter_update_mode()
174 ret = s3fwrn5_fw_prep_msg(fw_info, &msg, S3FWRN5_FW_MSG_DATA, 0, in s3fwrn5_fw_enter_update_mode()
179 ret = s3fwrn5_fw_send_msg(fw_info, msg, &rsp); in s3fwrn5_fw_enter_update_mode()
193 static int s3fwrn5_fw_update_sector(struct s3fwrn5_fw_info *fw_info, in s3fwrn5_fw_update_sector() argument
205 ret = s3fwrn5_fw_prep_msg(fw_info, &msg, S3FWRN5_FW_MSG_CMD, in s3fwrn5_fw_update_sector()
210 ret = s3fwrn5_fw_send_msg(fw_info, msg, &rsp); in s3fwrn5_fw_update_sector()
226 ret = s3fwrn5_fw_prep_msg(fw_info, &msg, in s3fwrn5_fw_update_sector()
231 ret = s3fwrn5_fw_send_msg(fw_info, msg, &rsp); in s3fwrn5_fw_update_sector()
252 static int s3fwrn5_fw_complete_update_mode(struct s3fwrn5_fw_info *fw_info) in s3fwrn5_fw_complete_update_mode() argument
260 ret = s3fwrn5_fw_prep_msg(fw_info, &msg, S3FWRN5_FW_MSG_CMD, in s3fwrn5_fw_complete_update_mode()
265 ret = s3fwrn5_fw_send_msg(fw_info, msg, &rsp); in s3fwrn5_fw_complete_update_mode()
294 static int s3fwrn5_fw_request_firmware(struct s3fwrn5_fw_info *fw_info) in s3fwrn5_fw_request_firmware() argument
296 struct s3fwrn5_fw_image *fw = &fw_info->fw; in s3fwrn5_fw_request_firmware()
302 ret = request_firmware(&fw->fw, fw_info->fw_name, in s3fwrn5_fw_request_firmware()
303 &fw_info->ndev->nfc_dev->dev); in s3fwrn5_fw_request_firmware()
330 static void s3fwrn5_fw_release_firmware(struct s3fwrn5_fw_info *fw_info) in s3fwrn5_fw_release_firmware() argument
332 release_firmware(fw_info->fw.fw); in s3fwrn5_fw_release_firmware()
367 int s3fwrn5_fw_setup(struct s3fwrn5_fw_info *fw_info) in s3fwrn5_fw_setup() argument
374 ret = s3fwrn5_fw_request_firmware(fw_info); in s3fwrn5_fw_setup()
376 dev_err(&fw_info->ndev->nfc_dev->dev, in s3fwrn5_fw_setup()
383 ret = s3fwrn5_fw_get_bootinfo(fw_info, &bootinfo); in s3fwrn5_fw_setup()
385 dev_err(&fw_info->ndev->nfc_dev->dev, in s3fwrn5_fw_setup()
392 ret = s3fwrn5_fw_get_base_addr(&bootinfo, &fw_info->base_addr); in s3fwrn5_fw_setup()
394 dev_err(&fw_info->ndev->nfc_dev->dev, in s3fwrn5_fw_setup()
399 fw_info->sector_size = bootinfo.sector_size; in s3fwrn5_fw_setup()
401 fw_info->sig_size = s3fwrn5_fw_is_custom(&bootinfo) ? in s3fwrn5_fw_setup()
402 fw_info->fw.custom_sig_size : fw_info->fw.sig_size; in s3fwrn5_fw_setup()
403 fw_info->sig = s3fwrn5_fw_is_custom(&bootinfo) ? in s3fwrn5_fw_setup()
404 fw_info->fw.custom_sig : fw_info->fw.sig; in s3fwrn5_fw_setup()
409 s3fwrn5_fw_release_firmware(fw_info); in s3fwrn5_fw_setup()
413 bool s3fwrn5_fw_check_version(struct s3fwrn5_fw_info *fw_info, u32 version) in s3fwrn5_fw_check_version() argument
415 struct s3fwrn5_fw_version *new = (void *) &fw_info->fw.version; in s3fwrn5_fw_check_version()
428 int s3fwrn5_fw_download(struct s3fwrn5_fw_info *fw_info) in s3fwrn5_fw_download() argument
430 struct s3fwrn5_fw_image *fw = &fw_info->fw; in s3fwrn5_fw_download()
437 image_size = fw_info->sector_size * fw->image_sectors; in s3fwrn5_fw_download()
450 dev_info(&fw_info->ndev->nfc_dev->dev, in s3fwrn5_fw_download()
451 "Firmware update: %s\n", fw_info->fw_name); in s3fwrn5_fw_download()
453 ret = s3fwrn5_fw_enter_update_mode(fw_info, hash_data, in s3fwrn5_fw_download()
454 SHA1_DIGEST_SIZE, fw_info->sig, fw_info->sig_size); in s3fwrn5_fw_download()
456 dev_err(&fw_info->ndev->nfc_dev->dev, in s3fwrn5_fw_download()
461 for (off = 0; off < image_size; off += fw_info->sector_size) { in s3fwrn5_fw_download()
462 ret = s3fwrn5_fw_update_sector(fw_info, in s3fwrn5_fw_download()
463 fw_info->base_addr + off, fw->image + off); in s3fwrn5_fw_download()
465 dev_err(&fw_info->ndev->nfc_dev->dev, in s3fwrn5_fw_download()
471 ret = s3fwrn5_fw_complete_update_mode(fw_info); in s3fwrn5_fw_download()
473 dev_err(&fw_info->ndev->nfc_dev->dev, in s3fwrn5_fw_download()
478 dev_info(&fw_info->ndev->nfc_dev->dev, in s3fwrn5_fw_download()
485 void s3fwrn5_fw_init(struct s3fwrn5_fw_info *fw_info, const char *fw_name) in s3fwrn5_fw_init() argument
487 fw_info->parity = 0x00; in s3fwrn5_fw_init()
488 fw_info->rsp = NULL; in s3fwrn5_fw_init()
489 fw_info->fw.fw = NULL; in s3fwrn5_fw_init()
490 strcpy(fw_info->fw_name, fw_name); in s3fwrn5_fw_init()
491 init_completion(&fw_info->completion); in s3fwrn5_fw_init()
494 void s3fwrn5_fw_cleanup(struct s3fwrn5_fw_info *fw_info) in s3fwrn5_fw_cleanup() argument
496 s3fwrn5_fw_release_firmware(fw_info); in s3fwrn5_fw_cleanup()
502 struct s3fwrn5_fw_info *fw_info = &info->fw_info; in s3fwrn5_fw_recv_frame() local
504 BUG_ON(fw_info->rsp); in s3fwrn5_fw_recv_frame()
506 fw_info->rsp = skb; in s3fwrn5_fw_recv_frame()
508 complete(&fw_info->completion); in s3fwrn5_fw_recv_frame()