#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/types.h>
#include <linux/configfs.h>
#include <scsi/scsi.h>
#include <scsi/scsi_tcq.h>
#include <scsi/scsi_host.h>
#include <scsi/scsi_device.h>
#include <scsi/scsi_cmnd.h>
#include <target/target_core_base.h>
#include <target/target_core_fabric.h>
#include "tcm_remote.h"
static inline struct tcm_remote_tpg *remote_tpg(struct se_portal_group *se_tpg)
{ … }
static char *tcm_remote_get_endpoint_wwn(struct se_portal_group *se_tpg)
{ … }
static u16 tcm_remote_get_tag(struct se_portal_group *se_tpg)
{ … }
static int tcm_remote_dummy_cmd_fn(struct se_cmd *se_cmd)
{ … }
static void tcm_remote_dummy_cmd_void_fn(struct se_cmd *se_cmd)
{ … }
static char *tcm_remote_dump_proto_id(struct tcm_remote_hba *remote_hba)
{ … }
static int tcm_remote_port_link(
struct se_portal_group *se_tpg,
struct se_lun *lun)
{ … }
static void tcm_remote_port_unlink(
struct se_portal_group *se_tpg,
struct se_lun *lun)
{ … }
static struct se_portal_group *tcm_remote_make_tpg(
struct se_wwn *wwn,
const char *name)
{ … }
static void tcm_remote_drop_tpg(struct se_portal_group *se_tpg)
{ … }
static struct se_wwn *tcm_remote_make_wwn(
struct target_fabric_configfs *tf,
struct config_group *group,
const char *name)
{ … }
static void tcm_remote_drop_wwn(struct se_wwn *wwn)
{ … }
static ssize_t tcm_remote_wwn_version_show(struct config_item *item, char *page)
{ … }
CONFIGFS_ATTR_RO(…);
static struct configfs_attribute *tcm_remote_wwn_attrs[] = …;
static const struct target_core_fabric_ops remote_ops = …;
static int __init tcm_remote_fabric_init(void)
{ … }
static void __exit tcm_remote_fabric_exit(void)
{ … }
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
module_init(…) …;
module_exit(tcm_remote_fabric_exit);