Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mpt3sas: Define 'hba_mpi_version_belonged' IOC variable

1. Use 'hba_mpi_version_belonged' IOC varable to uniquely identify each
individual generation driver functionality at runtime.

2. Declare global variable 'driver_name' and use this variable while
reserving PCI regions and while allocating the IRQs.

Signed-off-by: Sreekanth Reddy <Sreekanth.Reddy@avagotech.com>
Acked-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

authored by

Sreekanth Reddy and committed by
Martin K. Petersen
d357e84d 09ec55ed

+62 -8
+1
drivers/scsi/mpt2sas/mpt2sas_module.c
··· 196 196 if (!shost) 197 197 return -ENODEV; 198 198 199 + sprintf(driver_name, "%s", MPT2SAS_DRIVER_NAME); 199 200 rv = scsih_probe(pdev, shost); 200 201 return rv; 201 202 }
+4 -4
drivers/scsi/mpt3sas/mpt3sas_base.c
··· 1643 1643 atomic_set(&reply_q->busy, 0); 1644 1644 if (ioc->msix_enable) 1645 1645 snprintf(reply_q->name, MPT_NAME_LENGTH, "%s%d-msix%d", 1646 - MPT3SAS_DRIVER_NAME, ioc->id, index); 1646 + driver_name, ioc->id, index); 1647 1647 else 1648 1648 snprintf(reply_q->name, MPT_NAME_LENGTH, "%s%d", 1649 - MPT3SAS_DRIVER_NAME, ioc->id); 1649 + driver_name, ioc->id); 1650 1650 r = request_irq(vector, _base_interrupt, IRQF_SHARED, reply_q->name, 1651 1651 reply_q); 1652 1652 if (r) { ··· 1872 1872 1873 1873 1874 1874 if (pci_request_selected_regions(pdev, ioc->bars, 1875 - MPT3SAS_DRIVER_NAME)) { 1875 + driver_name)) { 1876 1876 pr_warn(MPT3SAS_FMT "pci_request_selected_regions: failed\n", 1877 1877 ioc->name); 1878 1878 ioc->bars = 0; ··· 4021 4021 mpi_request.WhoInit = MPI2_WHOINIT_HOST_DRIVER; 4022 4022 mpi_request.VF_ID = 0; /* TODO */ 4023 4023 mpi_request.VP_ID = 0; 4024 - mpi_request.MsgVersion = cpu_to_le16(MPI25_VERSION); 4024 + mpi_request.MsgVersion = cpu_to_le16(ioc->hba_mpi_version_belonged); 4025 4025 mpi_request.HeaderVersion = cpu_to_le16(MPI2_HEADER_VERSION); 4026 4026 4027 4027 if (_base_is_controller_msix_enabled(ioc))
+3
drivers/scsi/mpt3sas/mpt3sas_base.h
··· 870 870 MPT_BUILD_SG build_sg; 871 871 MPT_BUILD_ZERO_LEN_SGE build_zero_len_sge; 872 872 u16 sge_size_ieee; 873 + u16 hba_mpi_version_belonged; 873 874 874 875 /* function ptr for MPI sg elements only */ 875 876 MPT_BUILD_SG build_sg_mpi; ··· 1024 1023 1025 1024 /* base shared API */ 1026 1025 extern struct list_head mpt3sas_ioc_list; 1026 + extern char driver_name[MPT_NAME_LENGTH]; 1027 + 1027 1028 void mpt3sas_base_start_watchdog(struct MPT3SAS_ADAPTER *ioc); 1028 1029 void mpt3sas_base_stop_watchdog(struct MPT3SAS_ADAPTER *ioc); 1029 1030
+15 -3
drivers/scsi/mpt3sas/mpt3sas_ctl.c
··· 1023 1023 __func__)); 1024 1024 1025 1025 memset(&karg, 0 , sizeof(karg)); 1026 - karg.adapter_type = MPT3_IOCTL_INTERFACE_SAS3; 1027 1026 if (ioc->pfacts) 1028 1027 karg.port_number = ioc->pfacts[0].PortNumber; 1029 1028 karg.hw_rev = ioc->pdev->revision; ··· 1034 1035 karg.pci_information.u.bits.function = PCI_FUNC(ioc->pdev->devfn); 1035 1036 karg.pci_information.segment_id = pci_domain_nr(ioc->pdev->bus); 1036 1037 karg.firmware_version = ioc->facts.FWVersion.Word; 1037 - strcpy(karg.driver_version, MPT3SAS_DRIVER_NAME); 1038 + strcpy(karg.driver_version, driver_name); 1038 1039 strcat(karg.driver_version, "-"); 1039 - strcat(karg.driver_version, MPT3SAS_DRIVER_VERSION); 1040 + switch (ioc->hba_mpi_version_belonged) { 1041 + case MPI2_VERSION: 1042 + karg.adapter_type = MPT2_IOCTL_INTERFACE_SAS2; 1043 + strcat(karg.driver_version, MPT2SAS_DRIVER_VERSION); 1044 + break; 1045 + case MPI25_VERSION: 1046 + karg.adapter_type = MPT3_IOCTL_INTERFACE_SAS3; 1047 + strcat(karg.driver_version, MPT3SAS_DRIVER_VERSION); 1048 + break; 1049 + } 1050 + if (ioc->hba_mpi_version_belonged == MPI2_VERSION) 1051 + strcat(karg.driver_version, MPT2SAS_DRIVER_VERSION); 1052 + else 1053 + strcat(karg.driver_version, MPT3SAS_DRIVER_VERSION); 1040 1054 karg.bios_version = le32_to_cpu(ioc->bios_pg3.BiosVersion); 1041 1055 1042 1056 if (copy_to_user(arg, &karg, sizeof(karg))) {
+1
drivers/scsi/mpt3sas/mpt3sas_module.c
··· 168 168 if (!shost) 169 169 return -ENODEV; 170 170 171 + sprintf(driver_name, "%s", MPT3SAS_DRIVER_NAME); 171 172 rv = scsih_probe(pdev, shost); 172 173 return rv; 173 174 }
+38 -1
drivers/scsi/mpt3sas/mpt3sas_scsih.c
··· 73 73 74 74 /* global parameters */ 75 75 LIST_HEAD(mpt3sas_ioc_list); 76 + char driver_name[MPT_NAME_LENGTH]; 76 77 77 78 /* local parameters */ 78 79 static u8 scsi_io_cb_idx = -1; ··· 7925 7924 return 1; 7926 7925 } 7927 7926 7927 + void 7928 + _scsih_determine_hba_mpi_version(struct MPT3SAS_ADAPTER *ioc) { 7929 + 7930 + switch (ioc->pdev->device) { 7931 + case MPI2_MFGPAGE_DEVID_SAS2004: 7932 + case MPI2_MFGPAGE_DEVID_SAS2008: 7933 + case MPI2_MFGPAGE_DEVID_SAS2108_1: 7934 + case MPI2_MFGPAGE_DEVID_SAS2108_2: 7935 + case MPI2_MFGPAGE_DEVID_SAS2108_3: 7936 + case MPI2_MFGPAGE_DEVID_SAS2116_1: 7937 + case MPI2_MFGPAGE_DEVID_SAS2116_2: 7938 + case MPI2_MFGPAGE_DEVID_SAS2208_1: 7939 + case MPI2_MFGPAGE_DEVID_SAS2208_2: 7940 + case MPI2_MFGPAGE_DEVID_SAS2208_3: 7941 + case MPI2_MFGPAGE_DEVID_SAS2208_4: 7942 + case MPI2_MFGPAGE_DEVID_SAS2208_5: 7943 + case MPI2_MFGPAGE_DEVID_SAS2208_6: 7944 + case MPI2_MFGPAGE_DEVID_SAS2308_1: 7945 + case MPI2_MFGPAGE_DEVID_SAS2308_2: 7946 + case MPI2_MFGPAGE_DEVID_SAS2308_3: 7947 + ioc->hba_mpi_version_belonged = MPI2_VERSION; 7948 + break; 7949 + case MPI25_MFGPAGE_DEVID_SAS3004: 7950 + case MPI25_MFGPAGE_DEVID_SAS3008: 7951 + case MPI25_MFGPAGE_DEVID_SAS3108_1: 7952 + case MPI25_MFGPAGE_DEVID_SAS3108_2: 7953 + case MPI25_MFGPAGE_DEVID_SAS3108_5: 7954 + case MPI25_MFGPAGE_DEVID_SAS3108_6: 7955 + ioc->hba_mpi_version_belonged = MPI25_VERSION; 7956 + break; 7957 + } 7958 + } 7959 + 7928 7960 /** 7929 7961 * scsih_probe - attach and add scsi host 7930 7962 * @pdev: PCI device struct ··· 7978 7944 list_add_tail(&ioc->list, &mpt3sas_ioc_list); 7979 7945 ioc->shost = shost; 7980 7946 ioc->id = mpt_ids++; 7981 - sprintf(ioc->name, "%s%d", MPT3SAS_DRIVER_NAME, ioc->id); 7947 + 7982 7948 ioc->pdev = pdev; 7983 7949 ioc->scsi_io_cb_idx = scsi_io_cb_idx; 7984 7950 ioc->tm_cb_idx = tm_cb_idx; ··· 8012 7978 INIT_LIST_HEAD(&ioc->delayed_tr_list); 8013 7979 INIT_LIST_HEAD(&ioc->delayed_tr_volume_list); 8014 7980 INIT_LIST_HEAD(&ioc->reply_queue_list); 7981 + 7982 + _scsih_determine_hba_mpi_version(ioc); 7983 + sprintf(ioc->name, "%s_cm%d", driver_name, ioc->id); 8015 7984 8016 7985 /* init shost parameters */ 8017 7986 shost->max_cmd_len = 32;