diff options
Diffstat (limited to 'drivers/scsi/bfa/bfa_ioc.c')
-rw-r--r-- | drivers/scsi/bfa/bfa_ioc.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/drivers/scsi/bfa/bfa_ioc.c b/drivers/scsi/bfa/bfa_ioc.c index e038bc9769f6..ef3b3fefbe74 100644 --- a/drivers/scsi/bfa/bfa_ioc.c +++ b/drivers/scsi/bfa/bfa_ioc.c | |||
@@ -59,14 +59,12 @@ BFA_TRC_FILE(CNA, IOC); | |||
59 | ((__ioc)->ioc_hwif->ioc_firmware_lock(__ioc)) | 59 | ((__ioc)->ioc_hwif->ioc_firmware_lock(__ioc)) |
60 | #define bfa_ioc_firmware_unlock(__ioc) \ | 60 | #define bfa_ioc_firmware_unlock(__ioc) \ |
61 | ((__ioc)->ioc_hwif->ioc_firmware_unlock(__ioc)) | 61 | ((__ioc)->ioc_hwif->ioc_firmware_unlock(__ioc)) |
62 | #define bfa_ioc_fwimg_get_chunk(__ioc, __off) \ | ||
63 | ((__ioc)->ioc_hwif->ioc_fwimg_get_chunk(__ioc, __off)) | ||
64 | #define bfa_ioc_fwimg_get_size(__ioc) \ | ||
65 | ((__ioc)->ioc_hwif->ioc_fwimg_get_size(__ioc)) | ||
66 | #define bfa_ioc_reg_init(__ioc) ((__ioc)->ioc_hwif->ioc_reg_init(__ioc)) | 62 | #define bfa_ioc_reg_init(__ioc) ((__ioc)->ioc_hwif->ioc_reg_init(__ioc)) |
67 | #define bfa_ioc_map_port(__ioc) ((__ioc)->ioc_hwif->ioc_map_port(__ioc)) | 63 | #define bfa_ioc_map_port(__ioc) ((__ioc)->ioc_hwif->ioc_map_port(__ioc)) |
68 | #define bfa_ioc_notify_hbfail(__ioc) \ | 64 | #define bfa_ioc_notify_hbfail(__ioc) \ |
69 | ((__ioc)->ioc_hwif->ioc_notify_hbfail(__ioc)) | 65 | ((__ioc)->ioc_hwif->ioc_notify_hbfail(__ioc)) |
66 | #define bfa_ioc_is_optrom(__ioc) \ | ||
67 | (bfi_image_get_size(BFA_IOC_FWIMG_TYPE(__ioc)) < BFA_IOC_FWIMG_MINSZ) | ||
70 | 68 | ||
71 | bfa_boolean_t bfa_auto_recover = BFA_TRUE; | 69 | bfa_boolean_t bfa_auto_recover = BFA_TRUE; |
72 | 70 | ||
@@ -879,8 +877,8 @@ bfa_ioc_fwver_cmp(struct bfa_ioc_s *ioc, struct bfi_ioc_image_hdr_s *fwhdr) | |||
879 | struct bfi_ioc_image_hdr_s *drv_fwhdr; | 877 | struct bfi_ioc_image_hdr_s *drv_fwhdr; |
880 | int i; | 878 | int i; |
881 | 879 | ||
882 | drv_fwhdr = | 880 | drv_fwhdr = (struct bfi_ioc_image_hdr_s *) |
883 | (struct bfi_ioc_image_hdr_s *)bfa_ioc_fwimg_get_chunk(ioc, 0); | 881 | bfi_image_get_chunk(BFA_IOC_FWIMG_TYPE(ioc), 0); |
884 | 882 | ||
885 | for (i = 0; i < BFI_IOC_MD5SUM_SZ; i++) { | 883 | for (i = 0; i < BFI_IOC_MD5SUM_SZ; i++) { |
886 | if (fwhdr->md5sum[i] != drv_fwhdr->md5sum[i]) { | 884 | if (fwhdr->md5sum[i] != drv_fwhdr->md5sum[i]) { |
@@ -907,12 +905,13 @@ bfa_ioc_fwver_valid(struct bfa_ioc_s *ioc) | |||
907 | /** | 905 | /** |
908 | * If bios/efi boot (flash based) -- return true | 906 | * If bios/efi boot (flash based) -- return true |
909 | */ | 907 | */ |
910 | if (bfa_ioc_fwimg_get_size(ioc) < BFA_IOC_FWIMG_MINSZ) | 908 | if (bfa_ioc_is_optrom(ioc)) |
911 | return BFA_TRUE; | 909 | return BFA_TRUE; |
912 | 910 | ||
913 | bfa_ioc_fwver_get(ioc, &fwhdr); | 911 | bfa_ioc_fwver_get(ioc, &fwhdr); |
914 | drv_fwhdr = | 912 | drv_fwhdr = (struct bfi_ioc_image_hdr_s *) |
915 | (struct bfi_ioc_image_hdr_s *)bfa_ioc_fwimg_get_chunk(ioc, 0); | 913 | bfi_image_get_chunk(BFA_IOC_FWIMG_TYPE(ioc), 0); |
914 | |||
916 | 915 | ||
917 | if (fwhdr.signature != drv_fwhdr->signature) { | 916 | if (fwhdr.signature != drv_fwhdr->signature) { |
918 | bfa_trc(ioc, fwhdr.signature); | 917 | bfa_trc(ioc, fwhdr.signature); |
@@ -1125,21 +1124,22 @@ bfa_ioc_download_fw(struct bfa_ioc_s *ioc, u32 boot_type, | |||
1125 | /** | 1124 | /** |
1126 | * Flash based firmware boot | 1125 | * Flash based firmware boot |
1127 | */ | 1126 | */ |
1128 | bfa_trc(ioc, bfa_ioc_fwimg_get_size(ioc)); | 1127 | bfa_trc(ioc, bfi_image_get_size(BFA_IOC_FWIMG_TYPE(ioc))); |
1129 | if (bfa_ioc_fwimg_get_size(ioc) < BFA_IOC_FWIMG_MINSZ) | 1128 | if (bfa_ioc_is_optrom(ioc)) |
1130 | boot_type = BFI_BOOT_TYPE_FLASH; | 1129 | boot_type = BFI_BOOT_TYPE_FLASH; |
1131 | fwimg = bfa_ioc_fwimg_get_chunk(ioc, chunkno); | 1130 | fwimg = bfi_image_get_chunk(BFA_IOC_FWIMG_TYPE(ioc), chunkno); |
1131 | |||
1132 | 1132 | ||
1133 | pgnum = bfa_ioc_smem_pgnum(ioc, loff); | 1133 | pgnum = bfa_ioc_smem_pgnum(ioc, loff); |
1134 | pgoff = bfa_ioc_smem_pgoff(ioc, loff); | 1134 | pgoff = bfa_ioc_smem_pgoff(ioc, loff); |
1135 | 1135 | ||
1136 | bfa_reg_write(ioc->ioc_regs.host_page_num_fn, pgnum); | 1136 | bfa_reg_write(ioc->ioc_regs.host_page_num_fn, pgnum); |
1137 | 1137 | ||
1138 | for (i = 0; i < bfa_ioc_fwimg_get_size(ioc); i++) { | 1138 | for (i = 0; i < bfi_image_get_size(BFA_IOC_FWIMG_TYPE(ioc)); i++) { |
1139 | 1139 | ||
1140 | if (BFA_IOC_FLASH_CHUNK_NO(i) != chunkno) { | 1140 | if (BFA_IOC_FLASH_CHUNK_NO(i) != chunkno) { |
1141 | chunkno = BFA_IOC_FLASH_CHUNK_NO(i); | 1141 | chunkno = BFA_IOC_FLASH_CHUNK_NO(i); |
1142 | fwimg = bfa_ioc_fwimg_get_chunk(ioc, | 1142 | fwimg = bfi_image_get_chunk(BFA_IOC_FWIMG_TYPE(ioc), |
1143 | BFA_IOC_FLASH_CHUNK_ADDR(chunkno)); | 1143 | BFA_IOC_FLASH_CHUNK_ADDR(chunkno)); |
1144 | } | 1144 | } |
1145 | 1145 | ||
@@ -1188,6 +1188,7 @@ bfa_ioc_getattr_reply(struct bfa_ioc_s *ioc) | |||
1188 | struct bfi_ioc_attr_s *attr = ioc->attr; | 1188 | struct bfi_ioc_attr_s *attr = ioc->attr; |
1189 | 1189 | ||
1190 | attr->adapter_prop = bfa_os_ntohl(attr->adapter_prop); | 1190 | attr->adapter_prop = bfa_os_ntohl(attr->adapter_prop); |
1191 | attr->card_type = bfa_os_ntohl(attr->card_type); | ||
1191 | attr->maxfrsize = bfa_os_ntohs(attr->maxfrsize); | 1192 | attr->maxfrsize = bfa_os_ntohs(attr->maxfrsize); |
1192 | 1193 | ||
1193 | bfa_fsm_send_event(ioc, IOC_E_FWRSP_GETATTR); | 1194 | bfa_fsm_send_event(ioc, IOC_E_FWRSP_GETATTR); |
@@ -1416,7 +1417,7 @@ bfa_ioc_pci_init(struct bfa_ioc_s *ioc, struct bfa_pcidev_s *pcidev, | |||
1416 | { | 1417 | { |
1417 | ioc->ioc_mc = mc; | 1418 | ioc->ioc_mc = mc; |
1418 | ioc->pcidev = *pcidev; | 1419 | ioc->pcidev = *pcidev; |
1419 | ioc->ctdev = (ioc->pcidev.device_id == BFA_PCI_DEVICE_ID_CT); | 1420 | ioc->ctdev = bfa_asic_id_ct(ioc->pcidev.device_id); |
1420 | ioc->cna = ioc->ctdev && !ioc->fcmode; | 1421 | ioc->cna = ioc->ctdev && !ioc->fcmode; |
1421 | 1422 | ||
1422 | /** | 1423 | /** |
@@ -1916,7 +1917,7 @@ bfa_ioc_set_fcmode(struct bfa_ioc_s *ioc) | |||
1916 | bfa_boolean_t | 1917 | bfa_boolean_t |
1917 | bfa_ioc_get_fcmode(struct bfa_ioc_s *ioc) | 1918 | bfa_ioc_get_fcmode(struct bfa_ioc_s *ioc) |
1918 | { | 1919 | { |
1919 | return ioc->fcmode || (ioc->pcidev.device_id != BFA_PCI_DEVICE_ID_CT); | 1920 | return ioc->fcmode || !bfa_asic_id_ct(ioc->pcidev.device_id); |
1920 | } | 1921 | } |
1921 | 1922 | ||
1922 | /** | 1923 | /** |