diff options
author | Sreekanth Reddy <sreekanth.reddy@avagotech.com> | 2015-11-11 07:00:22 -0500 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2015-11-11 18:29:34 -0500 |
commit | d357e84d65dfcdb502fdb1aaab2873a82a828db5 (patch) | |
tree | bcf077e32608fcd3a10394ea8824e661a496234d | |
parent | 09ec55ed74ebb8a61859609011d28ab0bcb15e08 (diff) |
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>
-rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_module.c | 1 | ||||
-rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_base.c | 8 | ||||
-rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_base.h | 3 | ||||
-rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_ctl.c | 18 | ||||
-rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_module.c | 1 | ||||
-rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_scsih.c | 39 |
6 files changed, 62 insertions, 8 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_module.c b/drivers/scsi/mpt2sas/mpt2sas_module.c index 2b7069329612..d407ed04315d 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_module.c +++ b/drivers/scsi/mpt2sas/mpt2sas_module.c | |||
@@ -196,6 +196,7 @@ _mpt2sas_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
196 | if (!shost) | 196 | if (!shost) |
197 | return -ENODEV; | 197 | return -ENODEV; |
198 | 198 | ||
199 | sprintf(driver_name, "%s", MPT2SAS_DRIVER_NAME); | ||
199 | rv = scsih_probe(pdev, shost); | 200 | rv = scsih_probe(pdev, shost); |
200 | return rv; | 201 | return rv; |
201 | } | 202 | } |
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c index 302f02afd2a1..8a7f93ed2927 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.c +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c | |||
@@ -1643,10 +1643,10 @@ _base_request_irq(struct MPT3SAS_ADAPTER *ioc, u8 index, u32 vector) | |||
1643 | atomic_set(&reply_q->busy, 0); | 1643 | atomic_set(&reply_q->busy, 0); |
1644 | if (ioc->msix_enable) | 1644 | if (ioc->msix_enable) |
1645 | snprintf(reply_q->name, MPT_NAME_LENGTH, "%s%d-msix%d", | 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 | else | 1647 | else |
1648 | snprintf(reply_q->name, MPT_NAME_LENGTH, "%s%d", | 1648 | snprintf(reply_q->name, MPT_NAME_LENGTH, "%s%d", |
1649 | MPT3SAS_DRIVER_NAME, ioc->id); | 1649 | driver_name, ioc->id); |
1650 | r = request_irq(vector, _base_interrupt, IRQF_SHARED, reply_q->name, | 1650 | r = request_irq(vector, _base_interrupt, IRQF_SHARED, reply_q->name, |
1651 | reply_q); | 1651 | reply_q); |
1652 | if (r) { | 1652 | if (r) { |
@@ -1872,7 +1872,7 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc) | |||
1872 | 1872 | ||
1873 | 1873 | ||
1874 | if (pci_request_selected_regions(pdev, ioc->bars, | 1874 | if (pci_request_selected_regions(pdev, ioc->bars, |
1875 | MPT3SAS_DRIVER_NAME)) { | 1875 | driver_name)) { |
1876 | pr_warn(MPT3SAS_FMT "pci_request_selected_regions: failed\n", | 1876 | pr_warn(MPT3SAS_FMT "pci_request_selected_regions: failed\n", |
1877 | ioc->name); | 1877 | ioc->name); |
1878 | ioc->bars = 0; | 1878 | ioc->bars = 0; |
@@ -4021,7 +4021,7 @@ _base_send_ioc_init(struct MPT3SAS_ADAPTER *ioc, int sleep_flag) | |||
4021 | mpi_request.WhoInit = MPI2_WHOINIT_HOST_DRIVER; | 4021 | mpi_request.WhoInit = MPI2_WHOINIT_HOST_DRIVER; |
4022 | mpi_request.VF_ID = 0; /* TODO */ | 4022 | mpi_request.VF_ID = 0; /* TODO */ |
4023 | mpi_request.VP_ID = 0; | 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 | mpi_request.HeaderVersion = cpu_to_le16(MPI2_HEADER_VERSION); | 4025 | mpi_request.HeaderVersion = cpu_to_le16(MPI2_HEADER_VERSION); |
4026 | 4026 | ||
4027 | if (_base_is_controller_msix_enabled(ioc)) | 4027 | if (_base_is_controller_msix_enabled(ioc)) |
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h index 0f86729fcf25..4c9a1546d50c 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.h +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h | |||
@@ -870,6 +870,7 @@ struct MPT3SAS_ADAPTER { | |||
870 | MPT_BUILD_SG build_sg; | 870 | MPT_BUILD_SG build_sg; |
871 | MPT_BUILD_ZERO_LEN_SGE build_zero_len_sge; | 871 | MPT_BUILD_ZERO_LEN_SGE build_zero_len_sge; |
872 | u16 sge_size_ieee; | 872 | u16 sge_size_ieee; |
873 | u16 hba_mpi_version_belonged; | ||
873 | 874 | ||
874 | /* function ptr for MPI sg elements only */ | 875 | /* function ptr for MPI sg elements only */ |
875 | MPT_BUILD_SG build_sg_mpi; | 876 | MPT_BUILD_SG build_sg_mpi; |
@@ -1023,6 +1024,8 @@ typedef u8 (*MPT_CALLBACK)(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, | |||
1023 | 1024 | ||
1024 | /* base shared API */ | 1025 | /* base shared API */ |
1025 | extern struct list_head mpt3sas_ioc_list; | 1026 | extern struct list_head mpt3sas_ioc_list; |
1027 | extern char driver_name[MPT_NAME_LENGTH]; | ||
1028 | |||
1026 | void mpt3sas_base_start_watchdog(struct MPT3SAS_ADAPTER *ioc); | 1029 | void mpt3sas_base_start_watchdog(struct MPT3SAS_ADAPTER *ioc); |
1027 | void mpt3sas_base_stop_watchdog(struct MPT3SAS_ADAPTER *ioc); | 1030 | void mpt3sas_base_stop_watchdog(struct MPT3SAS_ADAPTER *ioc); |
1028 | 1031 | ||
diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c b/drivers/scsi/mpt3sas/mpt3sas_ctl.c index ffe79829de30..8b46cbf9463f 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c +++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c | |||
@@ -1023,7 +1023,6 @@ _ctl_getiocinfo(struct MPT3SAS_ADAPTER *ioc, void __user *arg) | |||
1023 | __func__)); | 1023 | __func__)); |
1024 | 1024 | ||
1025 | memset(&karg, 0 , sizeof(karg)); | 1025 | memset(&karg, 0 , sizeof(karg)); |
1026 | karg.adapter_type = MPT3_IOCTL_INTERFACE_SAS3; | ||
1027 | if (ioc->pfacts) | 1026 | if (ioc->pfacts) |
1028 | karg.port_number = ioc->pfacts[0].PortNumber; | 1027 | karg.port_number = ioc->pfacts[0].PortNumber; |
1029 | karg.hw_rev = ioc->pdev->revision; | 1028 | karg.hw_rev = ioc->pdev->revision; |
@@ -1035,9 +1034,22 @@ _ctl_getiocinfo(struct MPT3SAS_ADAPTER *ioc, void __user *arg) | |||
1035 | karg.pci_information.u.bits.function = PCI_FUNC(ioc->pdev->devfn); | 1034 | karg.pci_information.u.bits.function = PCI_FUNC(ioc->pdev->devfn); |
1036 | karg.pci_information.segment_id = pci_domain_nr(ioc->pdev->bus); | 1035 | karg.pci_information.segment_id = pci_domain_nr(ioc->pdev->bus); |
1037 | karg.firmware_version = ioc->facts.FWVersion.Word; | 1036 | karg.firmware_version = ioc->facts.FWVersion.Word; |
1038 | strcpy(karg.driver_version, MPT3SAS_DRIVER_NAME); | 1037 | strcpy(karg.driver_version, driver_name); |
1039 | strcat(karg.driver_version, "-"); | 1038 | strcat(karg.driver_version, "-"); |
1040 | strcat(karg.driver_version, MPT3SAS_DRIVER_VERSION); | 1039 | switch (ioc->hba_mpi_version_belonged) { |
1040 | case MPI2_VERSION: | ||
1041 | karg.adapter_type = MPT2_IOCTL_INTERFACE_SAS2; | ||
1042 | strcat(karg.driver_version, MPT2SAS_DRIVER_VERSION); | ||
1043 | break; | ||
1044 | case MPI25_VERSION: | ||
1045 | karg.adapter_type = MPT3_IOCTL_INTERFACE_SAS3; | ||
1046 | strcat(karg.driver_version, MPT3SAS_DRIVER_VERSION); | ||
1047 | break; | ||
1048 | } | ||
1049 | if (ioc->hba_mpi_version_belonged == MPI2_VERSION) | ||
1050 | strcat(karg.driver_version, MPT2SAS_DRIVER_VERSION); | ||
1051 | else | ||
1052 | strcat(karg.driver_version, MPT3SAS_DRIVER_VERSION); | ||
1041 | karg.bios_version = le32_to_cpu(ioc->bios_pg3.BiosVersion); | 1053 | karg.bios_version = le32_to_cpu(ioc->bios_pg3.BiosVersion); |
1042 | 1054 | ||
1043 | if (copy_to_user(arg, &karg, sizeof(karg))) { | 1055 | if (copy_to_user(arg, &karg, sizeof(karg))) { |
diff --git a/drivers/scsi/mpt3sas/mpt3sas_module.c b/drivers/scsi/mpt3sas/mpt3sas_module.c index e5f43ba04c4b..322dc8da3d7d 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_module.c +++ b/drivers/scsi/mpt3sas/mpt3sas_module.c | |||
@@ -168,6 +168,7 @@ _mpt3sas_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
168 | if (!shost) | 168 | if (!shost) |
169 | return -ENODEV; | 169 | return -ENODEV; |
170 | 170 | ||
171 | sprintf(driver_name, "%s", MPT3SAS_DRIVER_NAME); | ||
171 | rv = scsih_probe(pdev, shost); | 172 | rv = scsih_probe(pdev, shost); |
172 | return rv; | 173 | return rv; |
173 | } | 174 | } |
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c index 56726a0b37fb..233627d23d0f 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c | |||
@@ -73,6 +73,7 @@ static u8 _scsih_check_for_pending_tm(struct MPT3SAS_ADAPTER *ioc, u16 smid); | |||
73 | 73 | ||
74 | /* global parameters */ | 74 | /* global parameters */ |
75 | LIST_HEAD(mpt3sas_ioc_list); | 75 | LIST_HEAD(mpt3sas_ioc_list); |
76 | char driver_name[MPT_NAME_LENGTH]; | ||
76 | 77 | ||
77 | /* local parameters */ | 78 | /* local parameters */ |
78 | static u8 scsi_io_cb_idx = -1; | 79 | static u8 scsi_io_cb_idx = -1; |
@@ -7924,6 +7925,39 @@ scsih_scan_finished(struct Scsi_Host *shost, unsigned long time) | |||
7924 | return 1; | 7925 | return 1; |
7925 | } | 7926 | } |
7926 | 7927 | ||
7928 | void | ||
7929 | _scsih_determine_hba_mpi_version(struct MPT3SAS_ADAPTER *ioc) { | ||
7930 | |||
7931 | switch (ioc->pdev->device) { | ||
7932 | case MPI2_MFGPAGE_DEVID_SAS2004: | ||
7933 | case MPI2_MFGPAGE_DEVID_SAS2008: | ||
7934 | case MPI2_MFGPAGE_DEVID_SAS2108_1: | ||
7935 | case MPI2_MFGPAGE_DEVID_SAS2108_2: | ||
7936 | case MPI2_MFGPAGE_DEVID_SAS2108_3: | ||
7937 | case MPI2_MFGPAGE_DEVID_SAS2116_1: | ||
7938 | case MPI2_MFGPAGE_DEVID_SAS2116_2: | ||
7939 | case MPI2_MFGPAGE_DEVID_SAS2208_1: | ||
7940 | case MPI2_MFGPAGE_DEVID_SAS2208_2: | ||
7941 | case MPI2_MFGPAGE_DEVID_SAS2208_3: | ||
7942 | case MPI2_MFGPAGE_DEVID_SAS2208_4: | ||
7943 | case MPI2_MFGPAGE_DEVID_SAS2208_5: | ||
7944 | case MPI2_MFGPAGE_DEVID_SAS2208_6: | ||
7945 | case MPI2_MFGPAGE_DEVID_SAS2308_1: | ||
7946 | case MPI2_MFGPAGE_DEVID_SAS2308_2: | ||
7947 | case MPI2_MFGPAGE_DEVID_SAS2308_3: | ||
7948 | ioc->hba_mpi_version_belonged = MPI2_VERSION; | ||
7949 | break; | ||
7950 | case MPI25_MFGPAGE_DEVID_SAS3004: | ||
7951 | case MPI25_MFGPAGE_DEVID_SAS3008: | ||
7952 | case MPI25_MFGPAGE_DEVID_SAS3108_1: | ||
7953 | case MPI25_MFGPAGE_DEVID_SAS3108_2: | ||
7954 | case MPI25_MFGPAGE_DEVID_SAS3108_5: | ||
7955 | case MPI25_MFGPAGE_DEVID_SAS3108_6: | ||
7956 | ioc->hba_mpi_version_belonged = MPI25_VERSION; | ||
7957 | break; | ||
7958 | } | ||
7959 | } | ||
7960 | |||
7927 | /** | 7961 | /** |
7928 | * scsih_probe - attach and add scsi host | 7962 | * scsih_probe - attach and add scsi host |
7929 | * @pdev: PCI device struct | 7963 | * @pdev: PCI device struct |
@@ -7944,7 +7978,7 @@ scsih_probe(struct pci_dev *pdev, struct Scsi_Host *shost) | |||
7944 | list_add_tail(&ioc->list, &mpt3sas_ioc_list); | 7978 | list_add_tail(&ioc->list, &mpt3sas_ioc_list); |
7945 | ioc->shost = shost; | 7979 | ioc->shost = shost; |
7946 | ioc->id = mpt_ids++; | 7980 | ioc->id = mpt_ids++; |
7947 | sprintf(ioc->name, "%s%d", MPT3SAS_DRIVER_NAME, ioc->id); | 7981 | |
7948 | ioc->pdev = pdev; | 7982 | ioc->pdev = pdev; |
7949 | ioc->scsi_io_cb_idx = scsi_io_cb_idx; | 7983 | ioc->scsi_io_cb_idx = scsi_io_cb_idx; |
7950 | ioc->tm_cb_idx = tm_cb_idx; | 7984 | ioc->tm_cb_idx = tm_cb_idx; |
@@ -7979,6 +8013,9 @@ scsih_probe(struct pci_dev *pdev, struct Scsi_Host *shost) | |||
7979 | INIT_LIST_HEAD(&ioc->delayed_tr_volume_list); | 8013 | INIT_LIST_HEAD(&ioc->delayed_tr_volume_list); |
7980 | INIT_LIST_HEAD(&ioc->reply_queue_list); | 8014 | INIT_LIST_HEAD(&ioc->reply_queue_list); |
7981 | 8015 | ||
8016 | _scsih_determine_hba_mpi_version(ioc); | ||
8017 | sprintf(ioc->name, "%s_cm%d", driver_name, ioc->id); | ||
8018 | |||
7982 | /* init shost parameters */ | 8019 | /* init shost parameters */ |
7983 | shost->max_cmd_len = 32; | 8020 | shost->max_cmd_len = 32; |
7984 | shost->max_lun = max_lun; | 8021 | shost->max_lun = max_lun; |