@@ -504,6 +504,34 @@ static int brcmf_fw_request_nvram_done(const struct firmware *fw, void *ctx)
504
504
return - ENOENT ;
505
505
}
506
506
507
+ static int brcmf_fw_complete_request (const struct firmware * fw ,
508
+ struct brcmf_fw * fwctx )
509
+ {
510
+ struct brcmf_fw_item * cur = & fwctx -> req -> items [fwctx -> curpos ];
511
+ int ret = 0 ;
512
+
513
+ brcmf_dbg (TRACE , "firmware %s %sfound\n" , cur -> path , fw ? "" : "not " );
514
+
515
+ switch (cur -> type ) {
516
+ case BRCMF_FW_TYPE_NVRAM :
517
+ ret = brcmf_fw_request_nvram_done (fw , fwctx );
518
+ break ;
519
+ case BRCMF_FW_TYPE_BINARY :
520
+ if (fw )
521
+ cur -> binary = fw ;
522
+ else
523
+ ret = - ENOENT ;
524
+ break ;
525
+ default :
526
+ /* something fishy here so bail out early */
527
+ brcmf_err ("unknown fw type: %d\n" , cur -> type );
528
+ release_firmware (fw );
529
+ ret = - EINVAL ;
530
+ }
531
+
532
+ return (cur -> flags & BRCMF_FW_REQF_OPTIONAL ) ? 0 : ret ;
533
+ }
534
+
507
535
static int brcmf_fw_request_next_item (struct brcmf_fw * fwctx , bool async )
508
536
{
509
537
struct brcmf_fw_item * cur ;
@@ -525,15 +553,7 @@ static int brcmf_fw_request_next_item(struct brcmf_fw *fwctx, bool async)
525
553
if (ret < 0 ) {
526
554
brcmf_fw_request_done (NULL , fwctx );
527
555
} else if (!async && fw ) {
528
- brcmf_dbg (TRACE , "firmware %s %sfound\n" , cur -> path ,
529
- fw ? "" : "not " );
530
- if (cur -> type == BRCMF_FW_TYPE_BINARY )
531
- cur -> binary = fw ;
532
- else if (cur -> type == BRCMF_FW_TYPE_NVRAM )
533
- brcmf_fw_request_nvram_done (fw , fwctx );
534
- else
535
- release_firmware (fw );
536
-
556
+ brcmf_fw_complete_request (fw , fwctx );
537
557
return - EAGAIN ;
538
558
}
539
559
return 0 ;
@@ -547,28 +567,8 @@ static void brcmf_fw_request_done(const struct firmware *fw, void *ctx)
547
567
548
568
cur = & fwctx -> req -> items [fwctx -> curpos ];
549
569
550
- brcmf_dbg (TRACE , "enter: firmware %s %sfound\n" , cur -> path ,
551
- fw ? "" : "not " );
552
-
553
- if (!fw )
554
- ret = - ENOENT ;
555
-
556
- switch (cur -> type ) {
557
- case BRCMF_FW_TYPE_NVRAM :
558
- ret = brcmf_fw_request_nvram_done (fw , fwctx );
559
- break ;
560
- case BRCMF_FW_TYPE_BINARY :
561
- cur -> binary = fw ;
562
- break ;
563
- default :
564
- /* something fishy here so bail out early */
565
- brcmf_err ("unknown fw type: %d\n" , cur -> type );
566
- release_firmware (fw );
567
- ret = - EINVAL ;
568
- goto fail ;
569
- }
570
-
571
- if (ret < 0 && !(cur -> flags & BRCMF_FW_REQF_OPTIONAL ))
570
+ ret = brcmf_fw_complete_request (fw , fwctx );
571
+ if (ret < 0 )
572
572
goto fail ;
573
573
574
574
do {
0 commit comments