From nobody Mon Feb 9 03:47:42 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 31E3EEB64DD for ; Mon, 26 Jun 2023 00:52:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230010AbjFZAwC (ORCPT ); Sun, 25 Jun 2023 20:52:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47114 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229452AbjFZAwA (ORCPT ); Sun, 25 Jun 2023 20:52:00 -0400 Received: from out203-205-221-233.mail.qq.com (out203-205-221-233.mail.qq.com [203.205.221.233]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AD00F118; Sun, 25 Jun 2023 17:51:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1687740713; bh=QurnCIYfnWJ5J06EUP4BDmIdxSbMNKhzGbHkB8maF0Q=; h=From:To:Cc:Subject:Date; b=KINlprcW5gtYAlE4FOyeJcaqAz7PT9L0xCSzXtWhUrIrMcWaT4PLDkSYQByzutVRZ TOY1zf9t31cPYzxU5IlPIPviuP87AIeytiwPT9WAWualxt+UdG3BtFiWfQz7yBq1ht YkR6iIlu7HkwZAW1bcR8ZsOHJQyaW+XpXyU8QXx4= Received: from localhost.localdomain ([39.156.73.12]) by newxmesmtplogicsvrszc2-1.qq.com (NewEsmtp) with SMTP id CF334AAD; Mon, 26 Jun 2023 08:51:51 +0800 X-QQ-mid: xmsmtpt1687740711tbol738ca Message-ID: X-QQ-XMAILINFO: MtZ6QPwsmM9XTDFVhVCy8F1fNRXnpoIGhphdX5EUjLgxGO9oyldKULzVCjbpC5 rudlmnEPgNtSCUTzU1BliaHHuHak4pkjvQ4Dnu60L/mWxwm1Rqawk1lon1Glc0Vp8NDM/ySuLYLP wTFrWz/3v/hCZdrfsY8xk9kVNATXVVEUb27noyyGGK+XsOLXiebEMsJz359nh9mHK8/hbYX6u071 zQopzYIVMyNrYry0dPOgn59kNp7vX6PGhh9YD2W2ynCdoqScXQK1cwKXzygR7V9z/wqvgh1URLje dsSSSeHh0vTo3TrtezIVm6BhGax8olz6SBfVBz7tKAZ32syv39qtAUS3b22rJ8GI0TWunyzNQhC0 LSiQgD2SpPNOlBpSfsk9gTjoumPeCTrkxONPUMoHSTEqT5+VTX3gRbdcoGq+mCAer7QdqSg1rNcu oHaza17txF7XT3rV1pEJjD/B8QpWo4t8p+vPXGLUoXg/fi3bZQsg1NxGYlwiCmzpYjz8meuALtmh VlbsIF+2zL0XgiMM3LTJsxFsBmIpZWU+m7M/sltkd9sGADXRQkT6UOPBEwEfqti0W+N00tc8lUB3 032EyX/OgzduJs6OeSbk7895scjZwp06il4paRjkWrygJnTkOokwmlD+xoa/0DJ+3xSskUYeCyfE MltDax0pBMlTev3wvziP8jSoJe8yndgAWBiMYNSqwXseS0UaqbnBwHQU+kHjUNdPdjNuYZByg1wo Z2P7nvOgJSYPAh2nNTizc5PUeal7scVBtfAhI/sx3KEhR05YnRpBSD5sPCh1CCyZF+u8Nn7kFIFa uaTd/1tkiP1vpVrqJh/ukVsT1QTPBU0RAjNPqgJX6atBgLvx/tS1jzdOCKky/9Fi1h4R4toKe5Nh J8DdkZ/zwkLZjpGIITK9aKrqSQ8uwlVTXaZ4WZ+Wk6U/oN++N2R1o5bq5mEHqZgwDPsBygtFtWLC SCPcZajBSomYuw0LPbot0vhfszZT9EaljbQQL5Tw0= X-QQ-XMRINFO: MYU36NX4eR5XGZJiLzODCXZmzVheJhUEgw== From: Rong Tao To: martin.petersen@oracle.com, corbet@lwn.net Cc: rongtao@cestc.cn, linux-scsi@vger.kernel.org (open list:SCSI TARGET SUBSYSTEM), target-devel@vger.kernel.org (open list:SCSI TARGET SUBSYSTEM), linux-doc@vger.kernel.org (open list:DOCUMENTATION), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v3] docs: target: Remove useless tcm_mod_builder.py Date: Mon, 26 Jun 2023 08:51:47 +0800 X-OQ-MSGID: <20230626005148.40280-1-rtoax@foxmail.com> X-Mailer: git-send-email 2.39.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Rong Tao This script is not used and requires additional development to sync with the SCSI target code. Signed-off-by: Rong Tao Reviewed-by: Bart Van Assche --- v3: Remove the reference in Documentation/target/scripts.rst v2: Remove useless tcm_mod_builder.py https://lore.kernel.org/lkml/tencent_E3643D5F0AA8CCBEF28C6A233A18B808CD= 0A@qq.com/ v1: docs: target: Convert tcm_mod_builder.py print syntax to python3 https://lore.kernel.org/lkml/tencent_F3895D0EA868BCCE8C56221619BC093D66= 0A@qq.com/ --- Documentation/target/scripts.rst | 6 - Documentation/target/tcm_mod_builder.py | 656 ------------------------ 2 files changed, 662 deletions(-) delete mode 100755 Documentation/target/tcm_mod_builder.py diff --git a/Documentation/target/scripts.rst b/Documentation/target/script= s.rst index 172d42b522e4..aa7b9c62c1b3 100644 --- a/Documentation/target/scripts.rst +++ b/Documentation/target/scripts.rst @@ -1,9 +1,3 @@ -TCM mod builder script ----------------------- - -.. literalinclude:: tcm_mod_builder.py - :language: perl - Target export device script --------------------------- =20 diff --git a/Documentation/target/tcm_mod_builder.py b/Documentation/target= /tcm_mod_builder.py deleted file mode 100755 index 54492aa813b9..000000000000 --- a/Documentation/target/tcm_mod_builder.py +++ /dev/null @@ -1,656 +0,0 @@ -#!/usr/bin/env python -# The TCM v4 multi-protocol fabric module generation script for drivers/ta= rget/$NEW_MOD -# -# Copyright (c) 2010 Rising Tide Systems -# Copyright (c) 2010 Linux-iSCSI.org -# -# Author: nab@kernel.org -# -import os, sys -import subprocess as sub -import string -import re -import optparse - -tcm_dir =3D "" - -fabric_ops =3D [] -fabric_mod_dir =3D "" -fabric_mod_port =3D "" -fabric_mod_init_port =3D "" - -def tcm_mod_err(msg): - print msg - sys.exit(1) - -def tcm_mod_create_module_subdir(fabric_mod_dir_var): - - if os.path.isdir(fabric_mod_dir_var) =3D=3D True: - return 1 - - print "Creating fabric_mod_dir: " + fabric_mod_dir_var - ret =3D os.mkdir(fabric_mod_dir_var) - if ret: - tcm_mod_err("Unable to mkdir " + fabric_mod_dir_var) - - return - -def tcm_mod_build_FC_include(fabric_mod_dir_var, fabric_mod_name): - global fabric_mod_port - global fabric_mod_init_port - buf =3D "" - - f =3D fabric_mod_dir_var + "/" + fabric_mod_name + "_base.h" - print "Writing file: " + f - - p =3D open(f, 'w'); - if not p: - tcm_mod_err("Unable to open file: " + f) - - buf =3D "#define " + fabric_mod_name.upper() + "_VERSION \"v0.1\"\n" - buf +=3D "#define " + fabric_mod_name.upper() + "_NAMELEN 32\n" - buf +=3D "\n" - buf +=3D "struct " + fabric_mod_name + "_tpg {\n" - buf +=3D " /* FC lport target portal group tag for TCM */\n" - buf +=3D " u16 lport_tpgt;\n" - buf +=3D " /* Pointer back to " + fabric_mod_name + "_lport */\n" - buf +=3D " struct " + fabric_mod_name + "_lport *lport;\n" - buf +=3D " /* Returned by " + fabric_mod_name + "_make_tpg() */\n" - buf +=3D " struct se_portal_group se_tpg;\n" - buf +=3D "};\n" - buf +=3D "\n" - buf +=3D "struct " + fabric_mod_name + "_lport {\n" - buf +=3D " /* Binary World Wide unique Port Name for FC Target Lport */\n" - buf +=3D " u64 lport_wwpn;\n" - buf +=3D " /* ASCII formatted WWPN for FC Target Lport */\n" - buf +=3D " char lport_name[" + fabric_mod_name.upper() + "_NAMELEN];\n" - buf +=3D " /* Returned by " + fabric_mod_name + "_make_lport() */\n" - buf +=3D " struct se_wwn lport_wwn;\n" - buf +=3D "};\n" - - ret =3D p.write(buf) - if ret: - tcm_mod_err("Unable to write f: " + f) - - p.close() - - fabric_mod_port =3D "lport" - fabric_mod_init_port =3D "nport" - - return - -def tcm_mod_build_SAS_include(fabric_mod_dir_var, fabric_mod_name): - global fabric_mod_port - global fabric_mod_init_port - buf =3D "" - - f =3D fabric_mod_dir_var + "/" + fabric_mod_name + "_base.h" - print "Writing file: " + f - - p =3D open(f, 'w'); - if not p: - tcm_mod_err("Unable to open file: " + f) - - buf =3D "#define " + fabric_mod_name.upper() + "_VERSION \"v0.1\"\n" - buf +=3D "#define " + fabric_mod_name.upper() + "_NAMELEN 32\n" - buf +=3D "\n" - buf +=3D "struct " + fabric_mod_name + "_tpg {\n" - buf +=3D " /* SAS port target portal group tag for TCM */\n" - buf +=3D " u16 tport_tpgt;\n" - buf +=3D " /* Pointer back to " + fabric_mod_name + "_tport */\n" - buf +=3D " struct " + fabric_mod_name + "_tport *tport;\n" - buf +=3D " /* Returned by " + fabric_mod_name + "_make_tpg() */\n" - buf +=3D " struct se_portal_group se_tpg;\n" - buf +=3D "};\n\n" - buf +=3D "struct " + fabric_mod_name + "_tport {\n" - buf +=3D " /* Binary World Wide unique Port Name for SAS Target port */\n" - buf +=3D " u64 tport_wwpn;\n" - buf +=3D " /* ASCII formatted WWPN for SAS Target port */\n" - buf +=3D " char tport_name[" + fabric_mod_name.upper() + "_NAMELEN];\n" - buf +=3D " /* Returned by " + fabric_mod_name + "_make_tport() */\n" - buf +=3D " struct se_wwn tport_wwn;\n" - buf +=3D "};\n" - - ret =3D p.write(buf) - if ret: - tcm_mod_err("Unable to write f: " + f) - - p.close() - - fabric_mod_port =3D "tport" - fabric_mod_init_port =3D "iport" - - return - -def tcm_mod_build_iSCSI_include(fabric_mod_dir_var, fabric_mod_name): - global fabric_mod_port - global fabric_mod_init_port - buf =3D "" - - f =3D fabric_mod_dir_var + "/" + fabric_mod_name + "_base.h" - print "Writing file: " + f - - p =3D open(f, 'w'); - if not p: - tcm_mod_err("Unable to open file: " + f) - - buf =3D "#define " + fabric_mod_name.upper() + "_VERSION \"v0.1\"\n" - buf +=3D "#define " + fabric_mod_name.upper() + "_NAMELEN 32\n" - buf +=3D "\n" - buf +=3D "struct " + fabric_mod_name + "_tpg {\n" - buf +=3D " /* iSCSI target portal group tag for TCM */\n" - buf +=3D " u16 tport_tpgt;\n" - buf +=3D " /* Pointer back to " + fabric_mod_name + "_tport */\n" - buf +=3D " struct " + fabric_mod_name + "_tport *tport;\n" - buf +=3D " /* Returned by " + fabric_mod_name + "_make_tpg() */\n" - buf +=3D " struct se_portal_group se_tpg;\n" - buf +=3D "};\n\n" - buf +=3D "struct " + fabric_mod_name + "_tport {\n" - buf +=3D " /* ASCII formatted TargetName for IQN */\n" - buf +=3D " char tport_name[" + fabric_mod_name.upper() + "_NAMELEN];\n" - buf +=3D " /* Returned by " + fabric_mod_name + "_make_tport() */\n" - buf +=3D " struct se_wwn tport_wwn;\n" - buf +=3D "};\n" - - ret =3D p.write(buf) - if ret: - tcm_mod_err("Unable to write f: " + f) - - p.close() - - fabric_mod_port =3D "tport" - fabric_mod_init_port =3D "iport" - - return - -def tcm_mod_build_base_includes(proto_ident, fabric_mod_dir_val, fabric_mo= d_name): - - if proto_ident =3D=3D "FC": - tcm_mod_build_FC_include(fabric_mod_dir_val, fabric_mod_name) - elif proto_ident =3D=3D "SAS": - tcm_mod_build_SAS_include(fabric_mod_dir_val, fabric_mod_name) - elif proto_ident =3D=3D "iSCSI": - tcm_mod_build_iSCSI_include(fabric_mod_dir_val, fabric_mod_name) - else: - print "Unsupported proto_ident: " + proto_ident - sys.exit(1) - - return - -def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_nam= e): - buf =3D "" - - f =3D fabric_mod_dir_var + "/" + fabric_mod_name + "_configfs.c" - print "Writing file: " + f - - p =3D open(f, 'w'); - if not p: - tcm_mod_err("Unable to open file: " + f) - - buf =3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n\n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \"" + fabric_mod_name + "_base.h\"\n" - buf +=3D "#include \"" + fabric_mod_name + "_fabric.h\"\n\n" - - buf +=3D "static const struct target_core_fabric_ops " + fabric_mod_name = + "_ops;\n\n" - - buf +=3D "static struct se_portal_group *" + fabric_mod_name + "_make_tpg= (\n" - buf +=3D " struct se_wwn *wwn,\n" - buf +=3D " struct config_group *group,\n" - buf +=3D " const char *name)\n" - buf +=3D "{\n" - buf +=3D " struct " + fabric_mod_name + "_" + fabric_mod_port + "*" + fab= ric_mod_port + " =3D container_of(wwn,\n" - buf +=3D " struct " + fabric_mod_name + "_" + fabric_mod_port + ", " + = fabric_mod_port + "_wwn);\n\n" - buf +=3D " struct " + fabric_mod_name + "_tpg *tpg;\n" - buf +=3D " unsigned long tpgt;\n" - buf +=3D " int ret;\n\n" - buf +=3D " if (strstr(name, \"tpgt_\") !=3D name)\n" - buf +=3D " return ERR_PTR(-EINVAL);\n" - buf +=3D " if (kstrtoul(name + 5, 10, &tpgt) || tpgt > UINT_MAX)\n" - buf +=3D " return ERR_PTR(-EINVAL);\n\n" - buf +=3D " tpg =3D kzalloc(sizeof(struct " + fabric_mod_name + "_tpg), GF= P_KERNEL);\n" - buf +=3D " if (!tpg) {\n" - buf +=3D " printk(KERN_ERR \"Unable to allocate struct " + fabric_mod_na= me + "_tpg\");\n" - buf +=3D " return ERR_PTR(-ENOMEM);\n" - buf +=3D " }\n" - buf +=3D " tpg->" + fabric_mod_port + " =3D " + fabric_mod_port + ";\n" - buf +=3D " tpg->" + fabric_mod_port + "_tpgt =3D tpgt;\n\n" - - if proto_ident =3D=3D "FC": - buf +=3D " ret =3D core_tpg_register(wwn, &tpg->se_tpg, SCSI_PROTOCOL_FC= P);\n" - elif proto_ident =3D=3D "SAS": - buf +=3D " ret =3D core_tpg_register(wwn, &tpg->se_tpg, SCSI_PROTOCOL_SA= S);\n" - elif proto_ident =3D=3D "iSCSI": - buf +=3D " ret =3D core_tpg_register(wwn, &tpg->se_tpg, SCSI_PROTOCOL_IS= CSI);\n" - - buf +=3D " if (ret < 0) {\n" - buf +=3D " kfree(tpg);\n" - buf +=3D " return NULL;\n" - buf +=3D " }\n" - buf +=3D " return &tpg->se_tpg;\n" - buf +=3D "}\n\n" - buf +=3D "static void " + fabric_mod_name + "_drop_tpg(struct se_portal_g= roup *se_tpg)\n" - buf +=3D "{\n" - buf +=3D " struct " + fabric_mod_name + "_tpg *tpg =3D container_of(se_tp= g,\n" - buf +=3D " struct " + fabric_mod_name + "_tpg, se_tpg);\n\n" - buf +=3D " core_tpg_deregister(se_tpg);\n" - buf +=3D " kfree(tpg);\n" - buf +=3D "}\n\n" - - buf +=3D "static struct se_wwn *" + fabric_mod_name + "_make_" + fabric_m= od_port + "(\n" - buf +=3D " struct target_fabric_configfs *tf,\n" - buf +=3D " struct config_group *group,\n" - buf +=3D " const char *name)\n" - buf +=3D "{\n" - buf +=3D " struct " + fabric_mod_name + "_" + fabric_mod_port + " *" + fa= bric_mod_port + ";\n" - - if proto_ident =3D=3D "FC" or proto_ident =3D=3D "SAS": - buf +=3D " u64 wwpn =3D 0;\n\n" - - buf +=3D " /* if (" + fabric_mod_name + "_parse_wwn(name, &wwpn, 1) < 0)\= n" - buf +=3D " return ERR_PTR(-EINVAL); */\n\n" - buf +=3D " " + fabric_mod_port + " =3D kzalloc(sizeof(struct " + fabric_m= od_name + "_" + fabric_mod_port + "), GFP_KERNEL);\n" - buf +=3D " if (!" + fabric_mod_port + ") {\n" - buf +=3D " printk(KERN_ERR \"Unable to allocate struct " + fabric_mod_na= me + "_" + fabric_mod_port + "\");\n" - buf +=3D " return ERR_PTR(-ENOMEM);\n" - buf +=3D " }\n" - - if proto_ident =3D=3D "FC" or proto_ident =3D=3D "SAS": - buf +=3D " " + fabric_mod_port + "->" + fabric_mod_port + "_wwpn =3D wwp= n;\n" - - buf +=3D " /* " + fabric_mod_name + "_format_wwn(&" + fabric_mod_port + "= ->" + fabric_mod_port + "_name[0], " + fabric_mod_name.upper() + "_NAMELEN,= wwpn); */\n\n" - buf +=3D " return &" + fabric_mod_port + "->" + fabric_mod_port + "_wwn;\= n" - buf +=3D "}\n\n" - buf +=3D "static void " + fabric_mod_name + "_drop_" + fabric_mod_port + = "(struct se_wwn *wwn)\n" - buf +=3D "{\n" - buf +=3D " struct " + fabric_mod_name + "_" + fabric_mod_port + " *" + fa= bric_mod_port + " =3D container_of(wwn,\n" - buf +=3D " struct " + fabric_mod_name + "_" + fabric_mod_port + ", " += fabric_mod_port + "_wwn);\n" - buf +=3D " kfree(" + fabric_mod_port + ");\n" - buf +=3D "}\n\n" - - buf +=3D "static const struct target_core_fabric_ops " + fabric_mod_name = + "_ops =3D {\n" - buf +=3D " .module =3D THIS_MODULE,\n" - buf +=3D " .name =3D \"" + fabric_mod_name + "\",\n" - buf +=3D " .get_fabric_name =3D " + fabric_mod_name + "_get_fabric_name,= \n" - buf +=3D " .tpg_get_wwn =3D " + fabric_mod_name + "_get_fabric_wwn,\n" - buf +=3D " .tpg_get_tag =3D " + fabric_mod_name + "_get_tag,\n" - buf +=3D " .tpg_check_demo_mode =3D " + fabric_mod_name + "_check_false,= \n" - buf +=3D " .tpg_check_demo_mode_cache =3D " + fabric_mod_name + "_check_t= rue,\n" - buf +=3D " .tpg_check_demo_mode_write_protect =3D " + fabric_mod_name + "= _check_true,\n" - buf +=3D " .tpg_check_prod_mode_write_protect =3D " + fabric_mod_name + "= _check_false,\n" - buf +=3D " .tpg_get_inst_index =3D " + fabric_mod_name + "_tpg_get_inst_= index,\n" - buf +=3D " .release_cmd =3D " + fabric_mod_name + "_release_cmd,\n" - buf +=3D " .sess_get_index =3D " + fabric_mod_name + "_sess_get_index,\= n" - buf +=3D " .sess_get_initiator_sid =3D NULL,\n" - buf +=3D " .write_pending =3D " + fabric_mod_name + "_write_pending,\n" - buf +=3D " .set_default_node_attributes =3D " + fabric_mod_name + "_set_d= efault_node_attrs,\n" - buf +=3D " .get_cmd_state =3D " + fabric_mod_name + "_get_cmd_state,\n" - buf +=3D " .queue_data_in =3D " + fabric_mod_name + "_queue_data_in,\n" - buf +=3D " .queue_status =3D " + fabric_mod_name + "_queue_status,\n" - buf +=3D " .queue_tm_rsp =3D " + fabric_mod_name + "_queue_tm_rsp,\n" - buf +=3D " .aborted_task =3D " + fabric_mod_name + "_aborted_task,\n" - buf +=3D " /*\n" - buf +=3D " * Setup function pointers for generic logic in target_core_fa= bric_configfs.c\n" - buf +=3D " */\n" - buf +=3D " .fabric_make_wwn =3D " + fabric_mod_name + "_make_" + fabric_= mod_port + ",\n" - buf +=3D " .fabric_drop_wwn =3D " + fabric_mod_name + "_drop_" + fabric_= mod_port + ",\n" - buf +=3D " .fabric_make_tpg =3D " + fabric_mod_name + "_make_tpg,\n" - buf +=3D " .fabric_drop_tpg =3D " + fabric_mod_name + "_drop_tpg,\n" - buf +=3D "};\n\n" - - buf +=3D "static int __init " + fabric_mod_name + "_init(void)\n" - buf +=3D "{\n" - buf +=3D " return target_register_template(&" + fabric_mod_name + "_ops);= \n" - buf +=3D "};\n\n" - - buf +=3D "static void __exit " + fabric_mod_name + "_exit(void)\n" - buf +=3D "{\n" - buf +=3D " target_unregister_template(&" + fabric_mod_name + "_ops);\n" - buf +=3D "};\n\n" - - buf +=3D "MODULE_DESCRIPTION(\"" + fabric_mod_name.upper() + " series fab= ric driver\");\n" - buf +=3D "MODULE_LICENSE(\"GPL\");\n" - buf +=3D "module_init(" + fabric_mod_name + "_init);\n" - buf +=3D "module_exit(" + fabric_mod_name + "_exit);\n" - - ret =3D p.write(buf) - if ret: - tcm_mod_err("Unable to write f: " + f) - - p.close() - - return - -def tcm_mod_scan_fabric_ops(tcm_dir): - - fabric_ops_api =3D tcm_dir + "include/target/target_core_fabric.h" - - print "Using tcm_mod_scan_fabric_ops: " + fabric_ops_api - process_fo =3D 0; - - p =3D open(fabric_ops_api, 'r') - - line =3D p.readline() - while line: - if process_fo =3D=3D 0 and re.search('struct target_core_fabric_ops {', = line): - line =3D p.readline() - continue - - if process_fo =3D=3D 0: - process_fo =3D 1; - line =3D p.readline() - # Search for function pointer - if not re.search('\(\*', line): - continue - - fabric_ops.append(line.rstrip()) - continue - - line =3D p.readline() - # Search for function pointer - if not re.search('\(\*', line): - continue - - fabric_ops.append(line.rstrip()) - - p.close() - return - -def tcm_mod_dump_fabric_ops(proto_ident, fabric_mod_dir_var, fabric_mod_na= me): - buf =3D "" - bufi =3D "" - - f =3D fabric_mod_dir_var + "/" + fabric_mod_name + "_fabric.c" - print "Writing file: " + f - - p =3D open(f, 'w') - if not p: - tcm_mod_err("Unable to open file: " + f) - - fi =3D fabric_mod_dir_var + "/" + fabric_mod_name + "_fabric.h" - print "Writing file: " + fi - - pi =3D open(fi, 'w') - if not pi: - tcm_mod_err("Unable to open file: " + fi) - - buf =3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \n" - buf +=3D "#include \"" + fabric_mod_name + "_base.h\"\n" - buf +=3D "#include \"" + fabric_mod_name + "_fabric.h\"\n\n" - - buf +=3D "int " + fabric_mod_name + "_check_true(struct se_portal_group *= se_tpg)\n" - buf +=3D "{\n" - buf +=3D " return 1;\n" - buf +=3D "}\n\n" - bufi +=3D "int " + fabric_mod_name + "_check_true(struct se_portal_group = *);\n" - - buf +=3D "int " + fabric_mod_name + "_check_false(struct se_portal_group = *se_tpg)\n" - buf +=3D "{\n" - buf +=3D " return 0;\n" - buf +=3D "}\n\n" - bufi +=3D "int " + fabric_mod_name + "_check_false(struct se_portal_group= *);\n" - - total_fabric_ops =3D len(fabric_ops) - i =3D 0 - - while i < total_fabric_ops: - fo =3D fabric_ops[i] - i +=3D 1 -# print "fabric_ops: " + fo - - if re.search('get_fabric_name', fo): - buf +=3D "char *" + fabric_mod_name + "_get_fabric_name(void)\n" - buf +=3D "{\n" - buf +=3D " return \"" + fabric_mod_name + "\";\n" - buf +=3D "}\n\n" - bufi +=3D "char *" + fabric_mod_name + "_get_fabric_name(void);\n" - continue - - if re.search('get_wwn', fo): - buf +=3D "char *" + fabric_mod_name + "_get_fabric_wwn(struct se_portal= _group *se_tpg)\n" - buf +=3D "{\n" - buf +=3D " struct " + fabric_mod_name + "_tpg *tpg =3D container_of(se_= tpg,\n" - buf +=3D " struct " + fabric_mod_name + "_tpg, se_tpg);\n" - buf +=3D " struct " + fabric_mod_name + "_" + fabric_mod_port + " *" + = fabric_mod_port + " =3D tpg->" + fabric_mod_port + ";\n\n" - buf +=3D " return &" + fabric_mod_port + "->" + fabric_mod_port + "_nam= e[0];\n" - buf +=3D "}\n\n" - bufi +=3D "char *" + fabric_mod_name + "_get_fabric_wwn(struct se_porta= l_group *);\n" - - if re.search('get_tag', fo): - buf +=3D "u16 " + fabric_mod_name + "_get_tag(struct se_portal_group *s= e_tpg)\n" - buf +=3D "{\n" - buf +=3D " struct " + fabric_mod_name + "_tpg *tpg =3D container_of(se_= tpg,\n" - buf +=3D " struct " + fabric_mod_name + "_tpg, se_tpg);\n" - buf +=3D " return tpg->" + fabric_mod_port + "_tpgt;\n" - buf +=3D "}\n\n" - bufi +=3D "u16 " + fabric_mod_name + "_get_tag(struct se_portal_group *= );\n" - - if re.search('tpg_get_inst_index\)\(', fo): - buf +=3D "u32 " + fabric_mod_name + "_tpg_get_inst_index(struct se_port= al_group *se_tpg)\n" - buf +=3D "{\n" - buf +=3D " return 1;\n" - buf +=3D "}\n\n" - bufi +=3D "u32 " + fabric_mod_name + "_tpg_get_inst_index(struct se_por= tal_group *);\n" - - if re.search('\*release_cmd\)\(', fo): - buf +=3D "void " + fabric_mod_name + "_release_cmd(struct se_cmd *se_cm= d)\n" - buf +=3D "{\n" - buf +=3D " return;\n" - buf +=3D "}\n\n" - bufi +=3D "void " + fabric_mod_name + "_release_cmd(struct se_cmd *);\n" - - if re.search('sess_get_index\)\(', fo): - buf +=3D "u32 " + fabric_mod_name + "_sess_get_index(struct se_session = *se_sess)\n" - buf +=3D "{\n" - buf +=3D " return 0;\n" - buf +=3D "}\n\n" - bufi +=3D "u32 " + fabric_mod_name + "_sess_get_index(struct se_session= *);\n" - - if re.search('write_pending\)\(', fo): - buf +=3D "int " + fabric_mod_name + "_write_pending(struct se_cmd *se_c= md)\n" - buf +=3D "{\n" - buf +=3D " return 0;\n" - buf +=3D "}\n\n" - bufi +=3D "int " + fabric_mod_name + "_write_pending(struct se_cmd *);\= n" - - if re.search('set_default_node_attributes\)\(', fo): - buf +=3D "void " + fabric_mod_name + "_set_default_node_attrs(struct se= _node_acl *nacl)\n" - buf +=3D "{\n" - buf +=3D " return;\n" - buf +=3D "}\n\n" - bufi +=3D "void " + fabric_mod_name + "_set_default_node_attrs(struct s= e_node_acl *);\n" - - if re.search('get_cmd_state\)\(', fo): - buf +=3D "int " + fabric_mod_name + "_get_cmd_state(struct se_cmd *se_c= md)\n" - buf +=3D "{\n" - buf +=3D " return 0;\n" - buf +=3D "}\n\n" - bufi +=3D "int " + fabric_mod_name + "_get_cmd_state(struct se_cmd *);\= n" - - if re.search('queue_data_in\)\(', fo): - buf +=3D "int " + fabric_mod_name + "_queue_data_in(struct se_cmd *se_c= md)\n" - buf +=3D "{\n" - buf +=3D " return 0;\n" - buf +=3D "}\n\n" - bufi +=3D "int " + fabric_mod_name + "_queue_data_in(struct se_cmd *);\= n" - - if re.search('queue_status\)\(', fo): - buf +=3D "int " + fabric_mod_name + "_queue_status(struct se_cmd *se_cm= d)\n" - buf +=3D "{\n" - buf +=3D " return 0;\n" - buf +=3D "}\n\n" - bufi +=3D "int " + fabric_mod_name + "_queue_status(struct se_cmd *);\n" - - if re.search('queue_tm_rsp\)\(', fo): - buf +=3D "void " + fabric_mod_name + "_queue_tm_rsp(struct se_cmd *se_c= md)\n" - buf +=3D "{\n" - buf +=3D " return;\n" - buf +=3D "}\n\n" - bufi +=3D "void " + fabric_mod_name + "_queue_tm_rsp(struct se_cmd *);\= n" - - if re.search('aborted_task\)\(', fo): - buf +=3D "void " + fabric_mod_name + "_aborted_task(struct se_cmd *se_c= md)\n" - buf +=3D "{\n" - buf +=3D " return;\n" - buf +=3D "}\n\n" - bufi +=3D "void " + fabric_mod_name + "_aborted_task(struct se_cmd *);\= n" - - ret =3D p.write(buf) - if ret: - tcm_mod_err("Unable to write f: " + f) - - p.close() - - ret =3D pi.write(bufi) - if ret: - tcm_mod_err("Unable to write fi: " + fi) - - pi.close() - return - -def tcm_mod_build_kbuild(fabric_mod_dir_var, fabric_mod_name): - - buf =3D "" - f =3D fabric_mod_dir_var + "/Makefile" - print "Writing file: " + f - - p =3D open(f, 'w') - if not p: - tcm_mod_err("Unable to open file: " + f) - - buf +=3D fabric_mod_name + "-objs :=3D " + fabric_mod_name + "_fabric.o= \\\n" - buf +=3D " " + fabric_mod_name + "_configfs.o\n" - buf +=3D "obj-$(CONFIG_" + fabric_mod_name.upper() + ") +=3D " + fabric_= mod_name + ".o\n" - - ret =3D p.write(buf) - if ret: - tcm_mod_err("Unable to write f: " + f) - - p.close() - return - -def tcm_mod_build_kconfig(fabric_mod_dir_var, fabric_mod_name): - - buf =3D "" - f =3D fabric_mod_dir_var + "/Kconfig" - print "Writing file: " + f - - p =3D open(f, 'w') - if not p: - tcm_mod_err("Unable to open file: " + f) - - buf =3D "config " + fabric_mod_name.upper() + "\n" - buf +=3D " tristate \"" + fabric_mod_name.upper() + " fabric module\"\n" - buf +=3D " depends on TARGET_CORE && CONFIGFS_FS\n" - buf +=3D " default n\n" - buf +=3D " help\n" - buf +=3D " Say Y here to enable the " + fabric_mod_name.upper() + " fab= ric module\n" - - ret =3D p.write(buf) - if ret: - tcm_mod_err("Unable to write f: " + f) - - p.close() - return - -def tcm_mod_add_kbuild(tcm_dir, fabric_mod_name): - buf =3D "obj-$(CONFIG_" + fabric_mod_name.upper() + ") +=3D " + fabric_mo= d_name.lower() + "/\n" - kbuild =3D tcm_dir + "/drivers/target/Makefile" - - f =3D open(kbuild, 'a') - f.write(buf) - f.close() - return - -def tcm_mod_add_kconfig(tcm_dir, fabric_mod_name): - buf =3D "source \"drivers/target/" + fabric_mod_name.lower() + "/Kconfig\= "\n" - kconfig =3D tcm_dir + "/drivers/target/Kconfig" - - f =3D open(kconfig, 'a') - f.write(buf) - f.close() - return - -def main(modname, proto_ident): -# proto_ident =3D "FC" -# proto_ident =3D "SAS" -# proto_ident =3D "iSCSI" - - tcm_dir =3D os.getcwd(); - tcm_dir +=3D "/../../" - print "tcm_dir: " + tcm_dir - fabric_mod_name =3D modname - fabric_mod_dir =3D tcm_dir + "drivers/target/" + fabric_mod_name - print "Set fabric_mod_name: " + fabric_mod_name - print "Set fabric_mod_dir: " + fabric_mod_dir - print "Using proto_ident: " + proto_ident - - if proto_ident !=3D "FC" and proto_ident !=3D "SAS" and proto_ident !=3D = "iSCSI": - print "Unsupported proto_ident: " + proto_ident - sys.exit(1) - - ret =3D tcm_mod_create_module_subdir(fabric_mod_dir) - if ret: - print "tcm_mod_create_module_subdir() failed because module already exis= ts!" - sys.exit(1) - - tcm_mod_build_base_includes(proto_ident, fabric_mod_dir, fabric_mod_name) - tcm_mod_scan_fabric_ops(tcm_dir) - tcm_mod_dump_fabric_ops(proto_ident, fabric_mod_dir, fabric_mod_name) - tcm_mod_build_configfs(proto_ident, fabric_mod_dir, fabric_mod_name) - tcm_mod_build_kbuild(fabric_mod_dir, fabric_mod_name) - tcm_mod_build_kconfig(fabric_mod_dir, fabric_mod_name) - - input =3D raw_input("Would you like to add " + fabric_mod_name + " to dri= vers/target/Makefile..? [yes,no]: ") - if input =3D=3D "yes" or input =3D=3D "y": - tcm_mod_add_kbuild(tcm_dir, fabric_mod_name) - - input =3D raw_input("Would you like to add " + fabric_mod_name + " to dri= vers/target/Kconfig..? [yes,no]: ") - if input =3D=3D "yes" or input =3D=3D "y": - tcm_mod_add_kconfig(tcm_dir, fabric_mod_name) - - return - -parser =3D optparse.OptionParser() -parser.add_option('-m', '--modulename', help=3D'Module name', dest=3D'modn= ame', - action=3D'store', nargs=3D1, type=3D'string') -parser.add_option('-p', '--protoident', help=3D'Protocol Ident', dest=3D'p= rotoident', - action=3D'store', nargs=3D1, type=3D'string') - -(opts, args) =3D parser.parse_args() - -mandatories =3D ['modname', 'protoident'] -for m in mandatories: - if not opts.__dict__[m]: - print "mandatory option is missing\n" - parser.print_help() - exit(-1) - -if __name__ =3D=3D "__main__": - - main(str(opts.modname), opts.protoident) --=20 2.39.3