blob: 1dcd71cc326a05233587fa92750a24df16266698 [file] [log] [blame]
/*
* scst_module.c
*
* Copyright (C) 2004 - 2018 Vladislav Bolkhovitin <vst@vlnb.net>
* Copyright (C) 2004 - 2005 Leonid Stoljar
* Copyright (C) 2007 - 2018 Western Digital Corporation
*
* Support for loading target modules. The usage is similar to scsi_module.c
*
* 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, version 2
* of the License.
*
* 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.
*/
#include <linux/module.h>
#include <linux/init.h>
#include <scst.h>
static int __init init_this_scst_driver(void)
{
int res;
TRACE_ENTRY();
res = scst_register_target_template(&driver_target_template);
TRACE_DBG("scst_register_target_template() returned %d", res);
if (res < 0)
goto out;
#ifdef SCST_REGISTER_INITIATOR_DRIVER
driver_template.module = THIS_MODULE;
scsi_register_module(MODULE_SCSI_HA, &driver_template);
TRACE_DBG("driver_template.present=%d",
driver_template.present);
if (driver_template.present == 0) {
res = -ENODEV;
MOD_DEC_USE_COUNT;
goto out;
}
#endif
out:
TRACE_EXIT_RES(res);
return res;
}
static void __exit exit_this_scst_driver(void)
{
TRACE_ENTRY();
#ifdef SCST_REGISTER_INITIATOR_DRIVER
scsi_unregister_module(MODULE_SCSI_HA, &driver_template);
#endif
scst_unregister_target_template(&driver_target_template);
TRACE_EXIT();
return;
}
module_init(init_this_scst_driver);
module_exit(exit_this_scst_driver);