mirror of
https://github.com/torvalds/linux
synced 2024-10-16 16:29:20 +00:00
mpt3sas: Move Gen3 HBA's device registration to a separate file
Created a mpt3sas_module.c file for mpt3sas driver where it can register SAS3 HBA devices with PCI, SML, IOCTL subsystems. Also removed the corresponding interfaces from mpt3sas_scsih.c file. 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>
This commit is contained in:
parent
8a7e4c24e0
commit
7497392a11
|
@ -5,4 +5,5 @@ mpt3sas-y += mpt3sas_base.o \
|
||||||
mpt3sas_scsih.o \
|
mpt3sas_scsih.o \
|
||||||
mpt3sas_transport.o \
|
mpt3sas_transport.o \
|
||||||
mpt3sas_ctl.o \
|
mpt3sas_ctl.o \
|
||||||
mpt3sas_trigger_diag.o
|
mpt3sas_trigger_diag.o \
|
||||||
|
mpt3sas_module.o
|
||||||
|
|
|
@ -1084,6 +1084,7 @@ int mpt3sas_port_enable(struct MPT3SAS_ADAPTER *ioc);
|
||||||
|
|
||||||
|
|
||||||
/* scsih shared API */
|
/* scsih shared API */
|
||||||
|
extern struct raid_template *mpt3sas_raid_template;
|
||||||
u8 mpt3sas_scsih_event_callback(struct MPT3SAS_ADAPTER *ioc, u8 msix_index,
|
u8 mpt3sas_scsih_event_callback(struct MPT3SAS_ADAPTER *ioc, u8 msix_index,
|
||||||
u32 reply);
|
u32 reply);
|
||||||
void mpt3sas_scsih_reset_handler(struct MPT3SAS_ADAPTER *ioc, int reset_phase);
|
void mpt3sas_scsih_reset_handler(struct MPT3SAS_ADAPTER *ioc, int reset_phase);
|
||||||
|
@ -1108,7 +1109,7 @@ void mpt3sas_port_enable_complete(struct MPT3SAS_ADAPTER *ioc);
|
||||||
|
|
||||||
void scsih_exit(void);
|
void scsih_exit(void);
|
||||||
int scsih_init(void);
|
int scsih_init(void);
|
||||||
int scsih_probe(struct pci_dev *pdev, const struct pci_device_id *id);
|
int scsih_probe(struct pci_dev *pdev, struct Scsi_Host *shost);
|
||||||
void scsih_remove(struct pci_dev *pdev);
|
void scsih_remove(struct pci_dev *pdev);
|
||||||
void scsih_shutdown(struct pci_dev *pdev);
|
void scsih_shutdown(struct pci_dev *pdev);
|
||||||
pci_ers_result_t scsih_pci_error_detected(struct pci_dev *pdev,
|
pci_ers_result_t scsih_pci_error_detected(struct pci_dev *pdev,
|
||||||
|
@ -1241,6 +1242,7 @@ int mpt3sas_send_diag_release(struct MPT3SAS_ADAPTER *ioc, u8 buffer_type,
|
||||||
u8 *issue_reset);
|
u8 *issue_reset);
|
||||||
|
|
||||||
/* transport shared API */
|
/* transport shared API */
|
||||||
|
extern struct scsi_transport_template *mpt3sas_transport_template;
|
||||||
u8 mpt3sas_transport_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
|
u8 mpt3sas_transport_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
|
||||||
u32 reply);
|
u32 reply);
|
||||||
struct _sas_port *mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc,
|
struct _sas_port *mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc,
|
||||||
|
|
|
@ -3218,22 +3218,6 @@ struct device_attribute *mpt3sas_dev_attrs[] = {
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct file_operations ctl_fops = {
|
|
||||||
.owner = THIS_MODULE,
|
|
||||||
.unlocked_ioctl = ctl_ioctl,
|
|
||||||
.poll = ctl_poll,
|
|
||||||
.fasync = ctl_fasync,
|
|
||||||
#ifdef CONFIG_COMPAT
|
|
||||||
.compat_ioctl = ctl_ioctl_compat,
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct miscdevice ctl_dev = {
|
|
||||||
.minor = MPT3SAS_MINOR,
|
|
||||||
.name = MPT3SAS_DEV_NAME,
|
|
||||||
.fops = &ctl_fops,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ctl_init - main entry point for ctl.
|
* ctl_init - main entry point for ctl.
|
||||||
*
|
*
|
||||||
|
@ -3242,10 +3226,6 @@ void
|
||||||
ctl_init(void)
|
ctl_init(void)
|
||||||
{
|
{
|
||||||
async_queue = NULL;
|
async_queue = NULL;
|
||||||
if (misc_register(&ctl_dev) < 0)
|
|
||||||
pr_err("%s can't register misc device [minor=%d]\n",
|
|
||||||
MPT3SAS_DRIVER_NAME, MPT3SAS_MINOR);
|
|
||||||
|
|
||||||
init_waitqueue_head(&ctl_poll_wait);
|
init_waitqueue_head(&ctl_poll_wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3279,5 +3259,4 @@ ctl_exit(void)
|
||||||
|
|
||||||
kfree(ioc->event_log);
|
kfree(ioc->event_log);
|
||||||
}
|
}
|
||||||
misc_deregister(&ctl_dev);
|
|
||||||
}
|
}
|
||||||
|
|
252
drivers/scsi/mpt3sas/mpt3sas_module.c
Normal file
252
drivers/scsi/mpt3sas/mpt3sas_module.c
Normal file
|
@ -0,0 +1,252 @@
|
||||||
|
/*
|
||||||
|
* Scsi Host Layer for MPT (Message Passing Technology) based controllers
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012-2014 LSI Corporation
|
||||||
|
* Copyright (C) 2013-2015 Avago Technologies
|
||||||
|
* (mailto: MPT-FusionLinux.pdl@avagotech.com)
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* NO WARRANTY
|
||||||
|
* THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
* CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
|
||||||
|
* LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
|
||||||
|
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
|
||||||
|
* solely responsible for determining the appropriateness of using and
|
||||||
|
* distributing the Program and assumes all risks associated with its
|
||||||
|
* exercise of rights under this Agreement, including but not limited to
|
||||||
|
* the risks and costs of program errors, damage to or loss of data,
|
||||||
|
* programs or equipment, and unavailability or interruption of operations.
|
||||||
|
|
||||||
|
* DISCLAIMER OF LIABILITY
|
||||||
|
* NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||||
|
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||||
|
* USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
|
||||||
|
* HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES
|
||||||
|
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/pci.h>
|
||||||
|
#include <linux/raid_class.h>
|
||||||
|
|
||||||
|
#include "mpt3sas_base.h"
|
||||||
|
#include "mpt3sas_ctl.h"
|
||||||
|
|
||||||
|
MODULE_AUTHOR(MPT3SAS_AUTHOR);
|
||||||
|
MODULE_DESCRIPTION(MPT3SAS_DESCRIPTION);
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
MODULE_VERSION(MPT3SAS_DRIVER_VERSION);
|
||||||
|
|
||||||
|
/* shost template */
|
||||||
|
static struct scsi_host_template mpt3sas_driver_template = {
|
||||||
|
.module = THIS_MODULE,
|
||||||
|
.name = "Fusion MPT SAS Host",
|
||||||
|
.proc_name = MPT3SAS_DRIVER_NAME,
|
||||||
|
.queuecommand = scsih_qcmd,
|
||||||
|
.target_alloc = scsih_target_alloc,
|
||||||
|
.slave_alloc = scsih_slave_alloc,
|
||||||
|
.slave_configure = scsih_slave_configure,
|
||||||
|
.target_destroy = scsih_target_destroy,
|
||||||
|
.slave_destroy = scsih_slave_destroy,
|
||||||
|
.scan_finished = scsih_scan_finished,
|
||||||
|
.scan_start = scsih_scan_start,
|
||||||
|
.change_queue_depth = scsih_change_queue_depth,
|
||||||
|
.eh_abort_handler = scsih_abort,
|
||||||
|
.eh_device_reset_handler = scsih_dev_reset,
|
||||||
|
.eh_target_reset_handler = scsih_target_reset,
|
||||||
|
.eh_host_reset_handler = scsih_host_reset,
|
||||||
|
.bios_param = scsih_bios_param,
|
||||||
|
.can_queue = 1,
|
||||||
|
.this_id = -1,
|
||||||
|
.sg_tablesize = MPT3SAS_SG_DEPTH,
|
||||||
|
.max_sectors = 32767,
|
||||||
|
.cmd_per_lun = 7,
|
||||||
|
.use_clustering = ENABLE_CLUSTERING,
|
||||||
|
.shost_attrs = mpt3sas_host_attrs,
|
||||||
|
.sdev_attrs = mpt3sas_dev_attrs,
|
||||||
|
.track_queue_depth = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* raid transport support */
|
||||||
|
static struct raid_function_template mpt3sas_raid_functions = {
|
||||||
|
.cookie = &mpt3sas_driver_template,
|
||||||
|
.is_raid = scsih_is_raid,
|
||||||
|
.get_resync = scsih_get_resync,
|
||||||
|
.get_state = scsih_get_state,
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The pci device ids are defined in mpi/mpi2_cnfg.h.
|
||||||
|
*/
|
||||||
|
static const struct pci_device_id mpt3sas_pci_table[] = {
|
||||||
|
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3004,
|
||||||
|
PCI_ANY_ID, PCI_ANY_ID },
|
||||||
|
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3008,
|
||||||
|
PCI_ANY_ID, PCI_ANY_ID },
|
||||||
|
/* Invader ~ 3108 */
|
||||||
|
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3108_1,
|
||||||
|
PCI_ANY_ID, PCI_ANY_ID },
|
||||||
|
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3108_2,
|
||||||
|
PCI_ANY_ID, PCI_ANY_ID },
|
||||||
|
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3108_5,
|
||||||
|
PCI_ANY_ID, PCI_ANY_ID },
|
||||||
|
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3108_6,
|
||||||
|
PCI_ANY_ID, PCI_ANY_ID },
|
||||||
|
{0} /* Terminating entry */
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(pci, mpt3sas_pci_table);
|
||||||
|
|
||||||
|
static const struct file_operations mpt3sas_ctl_fops = {
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
.unlocked_ioctl = ctl_ioctl,
|
||||||
|
.poll = ctl_poll,
|
||||||
|
.fasync = ctl_fasync,
|
||||||
|
#ifdef CONFIG_COMPAT
|
||||||
|
.compat_ioctl = ctl_ioctl_compat,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct miscdevice mpt3sas_ctl_dev = {
|
||||||
|
.minor = MPT3SAS_MINOR,
|
||||||
|
.name = MPT3SAS_DEV_NAME,
|
||||||
|
.fops = &mpt3sas_ctl_fops,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mpt3sas_ctl_init - main entry point for ctl.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
mpt3sas_ctl_init(void)
|
||||||
|
{
|
||||||
|
ctl_init();
|
||||||
|
if (misc_register(&mpt3sas_ctl_dev) < 0)
|
||||||
|
pr_err("%s can't register misc device [minor=%d]\n",
|
||||||
|
MPT3SAS_DRIVER_NAME, MPT3SAS_MINOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mpt3sas_ctl_exit - exit point for ctl
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
mpt3sas_ctl_exit(void)
|
||||||
|
{
|
||||||
|
ctl_exit();
|
||||||
|
misc_deregister(&mpt3sas_ctl_dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* _mpt3sas_probe - attach and add scsi host
|
||||||
|
* @pdev: PCI device struct
|
||||||
|
* @id: pci device id
|
||||||
|
*
|
||||||
|
* Returns 0 success, anything else error.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
_mpt3sas_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
|
{
|
||||||
|
struct Scsi_Host *shost;
|
||||||
|
int rv;
|
||||||
|
|
||||||
|
shost = scsi_host_alloc(&mpt3sas_driver_template,
|
||||||
|
sizeof(struct MPT3SAS_ADAPTER));
|
||||||
|
if (!shost)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
rv = scsih_probe(pdev, shost);
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct pci_error_handlers _mpt3sas_err_handler = {
|
||||||
|
.error_detected = scsih_pci_error_detected,
|
||||||
|
.mmio_enabled = scsih_pci_mmio_enabled,
|
||||||
|
.slot_reset = scsih_pci_slot_reset,
|
||||||
|
.resume = scsih_pci_resume,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct pci_driver mpt3sas_driver = {
|
||||||
|
.name = MPT3SAS_DRIVER_NAME,
|
||||||
|
.id_table = mpt3sas_pci_table,
|
||||||
|
.probe = _mpt3sas_probe,
|
||||||
|
.remove = scsih_remove,
|
||||||
|
.shutdown = scsih_shutdown,
|
||||||
|
.err_handler = &_mpt3sas_err_handler,
|
||||||
|
#ifdef CONFIG_PM
|
||||||
|
.suspend = scsih_suspend,
|
||||||
|
.resume = scsih_resume,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* _mpt3sas_init - main entry point for this driver.
|
||||||
|
*
|
||||||
|
* Returns 0 success, anything else error.
|
||||||
|
*/
|
||||||
|
static int __init
|
||||||
|
_mpt3sas_init(void)
|
||||||
|
{
|
||||||
|
int error;
|
||||||
|
|
||||||
|
pr_info("%s version %s loaded\n", MPT3SAS_DRIVER_NAME,
|
||||||
|
MPT3SAS_DRIVER_VERSION);
|
||||||
|
|
||||||
|
mpt3sas_transport_template =
|
||||||
|
sas_attach_transport(&mpt3sas_transport_functions);
|
||||||
|
if (!mpt3sas_transport_template)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
mpt3sas_raid_template = raid_class_attach(&mpt3sas_raid_functions);
|
||||||
|
if (!mpt3sas_raid_template) {
|
||||||
|
sas_release_transport(mpt3sas_transport_template);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
error = scsih_init();
|
||||||
|
if (error) {
|
||||||
|
scsih_exit();
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
mpt3sas_ctl_init();
|
||||||
|
|
||||||
|
error = pci_register_driver(&mpt3sas_driver);
|
||||||
|
if (error)
|
||||||
|
scsih_exit();
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* _mpt3sas_exit - exit point for this driver (when it is a module).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static void __exit
|
||||||
|
_mpt3sas_exit(void)
|
||||||
|
{
|
||||||
|
pr_info("mpt3sas version %s unloading\n",
|
||||||
|
MPT3SAS_DRIVER_VERSION);
|
||||||
|
|
||||||
|
pci_unregister_driver(&mpt3sas_driver);
|
||||||
|
|
||||||
|
mpt3sas_ctl_exit();
|
||||||
|
|
||||||
|
scsih_exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
module_init(_mpt3sas_init);
|
||||||
|
module_exit(_mpt3sas_exit);
|
|
@ -57,11 +57,6 @@
|
||||||
|
|
||||||
#include "mpt3sas_base.h"
|
#include "mpt3sas_base.h"
|
||||||
|
|
||||||
MODULE_AUTHOR(MPT3SAS_AUTHOR);
|
|
||||||
MODULE_DESCRIPTION(MPT3SAS_DESCRIPTION);
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
MODULE_VERSION(MPT3SAS_DRIVER_VERSION);
|
|
||||||
|
|
||||||
#define RAID_CHANNEL 1
|
#define RAID_CHANNEL 1
|
||||||
/* forward proto's */
|
/* forward proto's */
|
||||||
static void _scsih_expander_node_remove(struct MPT3SAS_ADAPTER *ioc,
|
static void _scsih_expander_node_remove(struct MPT3SAS_ADAPTER *ioc,
|
||||||
|
@ -141,8 +136,7 @@ MODULE_PARM_DESC(prot_mask, " host protection capabilities mask, def=7 ");
|
||||||
|
|
||||||
|
|
||||||
/* raid transport support */
|
/* raid transport support */
|
||||||
|
struct raid_template *mpt3sas_raid_template;
|
||||||
static struct raid_template *mpt3sas_raid_template;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -192,9 +186,6 @@ struct fw_event_work {
|
||||||
char event_data[0] __aligned(4);
|
char event_data[0] __aligned(4);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* raid transport support */
|
|
||||||
static struct raid_template *mpt3sas_raid_template;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct _scsi_io_transfer - scsi io transfer
|
* struct _scsi_io_transfer - scsi io transfer
|
||||||
* @handle: sas device handle (assigned by firmware)
|
* @handle: sas device handle (assigned by firmware)
|
||||||
|
@ -243,28 +234,6 @@ struct _scsi_io_transfer {
|
||||||
u32 transfer_length;
|
u32 transfer_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
* The pci device ids are defined in mpi/mpi2_cnfg.h.
|
|
||||||
*/
|
|
||||||
static const struct pci_device_id scsih_pci_table[] = {
|
|
||||||
/* Fury ~ 3004 and 3008 */
|
|
||||||
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3004,
|
|
||||||
PCI_ANY_ID, PCI_ANY_ID },
|
|
||||||
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3008,
|
|
||||||
PCI_ANY_ID, PCI_ANY_ID },
|
|
||||||
/* Invader ~ 3108 */
|
|
||||||
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3108_1,
|
|
||||||
PCI_ANY_ID, PCI_ANY_ID },
|
|
||||||
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3108_2,
|
|
||||||
PCI_ANY_ID, PCI_ANY_ID },
|
|
||||||
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3108_5,
|
|
||||||
PCI_ANY_ID, PCI_ANY_ID },
|
|
||||||
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3108_6,
|
|
||||||
PCI_ANY_ID, PCI_ANY_ID },
|
|
||||||
{0} /* Terminating entry */
|
|
||||||
};
|
|
||||||
MODULE_DEVICE_TABLE(pci, scsih_pci_table);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _scsih_set_debug_level - global setting of ioc->logging_level.
|
* _scsih_set_debug_level - global setting of ioc->logging_level.
|
||||||
*
|
*
|
||||||
|
@ -7486,36 +7455,6 @@ mpt3sas_scsih_event_callback(struct MPT3SAS_ADAPTER *ioc, u8 msix_index,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* shost template */
|
|
||||||
static struct scsi_host_template scsih_driver_template = {
|
|
||||||
.module = THIS_MODULE,
|
|
||||||
.name = "Fusion MPT SAS Host",
|
|
||||||
.proc_name = MPT3SAS_DRIVER_NAME,
|
|
||||||
.queuecommand = scsih_qcmd,
|
|
||||||
.target_alloc = scsih_target_alloc,
|
|
||||||
.slave_alloc = scsih_slave_alloc,
|
|
||||||
.slave_configure = scsih_slave_configure,
|
|
||||||
.target_destroy = scsih_target_destroy,
|
|
||||||
.slave_destroy = scsih_slave_destroy,
|
|
||||||
.scan_finished = scsih_scan_finished,
|
|
||||||
.scan_start = scsih_scan_start,
|
|
||||||
.change_queue_depth = scsih_change_queue_depth,
|
|
||||||
.eh_abort_handler = scsih_abort,
|
|
||||||
.eh_device_reset_handler = scsih_dev_reset,
|
|
||||||
.eh_target_reset_handler = scsih_target_reset,
|
|
||||||
.eh_host_reset_handler = scsih_host_reset,
|
|
||||||
.bios_param = scsih_bios_param,
|
|
||||||
.can_queue = 1,
|
|
||||||
.this_id = -1,
|
|
||||||
.sg_tablesize = MPT3SAS_SG_DEPTH,
|
|
||||||
.max_sectors = 32767,
|
|
||||||
.cmd_per_lun = 7,
|
|
||||||
.use_clustering = ENABLE_CLUSTERING,
|
|
||||||
.shost_attrs = mpt3sas_host_attrs,
|
|
||||||
.sdev_attrs = mpt3sas_dev_attrs,
|
|
||||||
.track_queue_depth = 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _scsih_expander_node_remove - removing expander device from list.
|
* _scsih_expander_node_remove - removing expander device from list.
|
||||||
* @ioc: per adapter object
|
* @ioc: per adapter object
|
||||||
|
@ -7993,17 +7932,11 @@ scsih_scan_finished(struct Scsi_Host *shost, unsigned long time)
|
||||||
* Returns 0 success, anything else error.
|
* Returns 0 success, anything else error.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
scsih_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
scsih_probe(struct pci_dev *pdev, struct Scsi_Host *shost)
|
||||||
{
|
{
|
||||||
struct MPT3SAS_ADAPTER *ioc;
|
struct MPT3SAS_ADAPTER *ioc;
|
||||||
struct Scsi_Host *shost;
|
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
shost = scsi_host_alloc(&scsih_driver_template,
|
|
||||||
sizeof(struct MPT3SAS_ADAPTER));
|
|
||||||
if (!shost)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
/* init local params */
|
/* init local params */
|
||||||
ioc = shost_priv(shost);
|
ioc = shost_priv(shost);
|
||||||
memset(ioc, 0, sizeof(struct MPT3SAS_ADAPTER));
|
memset(ioc, 0, sizeof(struct MPT3SAS_ADAPTER));
|
||||||
|
@ -8298,35 +8231,6 @@ scsih_pci_mmio_enabled(struct pci_dev *pdev)
|
||||||
return PCI_ERS_RESULT_NEED_RESET;
|
return PCI_ERS_RESULT_NEED_RESET;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* raid transport support */
|
|
||||||
static struct raid_function_template mpt3sas_raid_functions = {
|
|
||||||
.cookie = &scsih_driver_template,
|
|
||||||
.is_raid = scsih_is_raid,
|
|
||||||
.get_resync = scsih_get_resync,
|
|
||||||
.get_state = scsih_get_state,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct pci_error_handlers _scsih_err_handler = {
|
|
||||||
.error_detected = scsih_pci_error_detected,
|
|
||||||
.mmio_enabled = scsih_pci_mmio_enabled,
|
|
||||||
.slot_reset = scsih_pci_slot_reset,
|
|
||||||
.resume = scsih_pci_resume,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct pci_driver scsih_driver = {
|
|
||||||
.name = MPT3SAS_DRIVER_NAME,
|
|
||||||
.id_table = scsih_pci_table,
|
|
||||||
.probe = scsih_probe,
|
|
||||||
.remove = scsih_remove,
|
|
||||||
.shutdown = scsih_shutdown,
|
|
||||||
.err_handler = &_scsih_err_handler,
|
|
||||||
#ifdef CONFIG_PM
|
|
||||||
.suspend = scsih_suspend,
|
|
||||||
.resume = scsih_resume,
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* scsih_init - main entry point for this driver.
|
* scsih_init - main entry point for this driver.
|
||||||
*
|
*
|
||||||
|
@ -8335,25 +8239,8 @@ static struct pci_driver scsih_driver = {
|
||||||
int
|
int
|
||||||
scsih_init(void)
|
scsih_init(void)
|
||||||
{
|
{
|
||||||
int error;
|
|
||||||
|
|
||||||
mpt_ids = 0;
|
mpt_ids = 0;
|
||||||
|
|
||||||
pr_info("%s version %s loaded\n", MPT3SAS_DRIVER_NAME,
|
|
||||||
MPT3SAS_DRIVER_VERSION);
|
|
||||||
|
|
||||||
mpt3sas_transport_template =
|
|
||||||
sas_attach_transport(&mpt3sas_transport_functions);
|
|
||||||
if (!mpt3sas_transport_template)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
/* raid transport support */
|
|
||||||
mpt3sas_raid_template = raid_class_attach(&mpt3sas_raid_functions);
|
|
||||||
if (!mpt3sas_raid_template) {
|
|
||||||
sas_release_transport(mpt3sas_transport_template);
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
|
|
||||||
mpt3sas_base_initialize_callback_handler();
|
mpt3sas_base_initialize_callback_handler();
|
||||||
|
|
||||||
/* queuecommand callback hander */
|
/* queuecommand callback hander */
|
||||||
|
@ -8390,33 +8277,17 @@ scsih_init(void)
|
||||||
tm_sas_control_cb_idx = mpt3sas_base_register_callback_handler(
|
tm_sas_control_cb_idx = mpt3sas_base_register_callback_handler(
|
||||||
_scsih_sas_control_complete);
|
_scsih_sas_control_complete);
|
||||||
|
|
||||||
ctl_init();
|
return 0;
|
||||||
|
|
||||||
error = pci_register_driver(&scsih_driver);
|
|
||||||
if (error) {
|
|
||||||
/* raid transport support */
|
|
||||||
raid_class_release(mpt3sas_raid_template);
|
|
||||||
sas_release_transport(mpt3sas_transport_template);
|
|
||||||
}
|
|
||||||
|
|
||||||
return error;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _scsih_exit - exit point for this driver (when it is a module).
|
* scsih_exit - exit point for this driver (when it is a module).
|
||||||
*
|
*
|
||||||
* Returns 0 success, anything else error.
|
* Returns 0 success, anything else error.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
scsih_exit(void)
|
scsih_exit(void)
|
||||||
{
|
{
|
||||||
pr_info("mpt3sas version %s unloading\n",
|
|
||||||
MPT3SAS_DRIVER_VERSION);
|
|
||||||
|
|
||||||
ctl_exit();
|
|
||||||
|
|
||||||
pci_unregister_driver(&scsih_driver);
|
|
||||||
|
|
||||||
|
|
||||||
mpt3sas_base_release_callback_handler(scsi_io_cb_idx);
|
mpt3sas_base_release_callback_handler(scsi_io_cb_idx);
|
||||||
mpt3sas_base_release_callback_handler(tm_cb_idx);
|
mpt3sas_base_release_callback_handler(tm_cb_idx);
|
||||||
|
@ -8435,6 +8306,3 @@ scsih_exit(void)
|
||||||
raid_class_release(mpt3sas_raid_template);
|
raid_class_release(mpt3sas_raid_template);
|
||||||
sas_release_transport(mpt3sas_transport_template);
|
sas_release_transport(mpt3sas_transport_template);
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(scsih_init);
|
|
||||||
module_exit(scsih_exit);
|
|
||||||
|
|
Loading…
Reference in a new issue