| /* |
| * 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); |