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