aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSreekanth Reddy <sreekanth.reddy@avagotech.com>2015-11-11 07:00:22 -0500
committerMartin K. Petersen <martin.petersen@oracle.com>2015-11-11 18:29:34 -0500
commitd357e84d65dfcdb502fdb1aaab2873a82a828db5 (patch)
treebcf077e32608fcd3a10394ea8824e661a496234d
parent09ec55ed74ebb8a61859609011d28ab0bcb15e08 (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.c1
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_base.c8
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_base.h3
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_ctl.c18
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_module.c1
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_scsih.c39
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 */
1025extern struct list_head mpt3sas_ioc_list; 1026extern struct list_head mpt3sas_ioc_list;
1027extern char driver_name[MPT_NAME_LENGTH];
1028
1026void mpt3sas_base_start_watchdog(struct MPT3SAS_ADAPTER *ioc); 1029void mpt3sas_base_start_watchdog(struct MPT3SAS_ADAPTER *ioc);
1027void mpt3sas_base_stop_watchdog(struct MPT3SAS_ADAPTER *ioc); 1030void 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 */
75LIST_HEAD(mpt3sas_ioc_list); 75LIST_HEAD(mpt3sas_ioc_list);
76char driver_name[MPT_NAME_LENGTH];
76 77
77/* local parameters */ 78/* local parameters */
78static u8 scsi_io_cb_idx = -1; 79static 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
7928void
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;