/* End items for tcm_qla2xxx_tpg_attrib_cit */
 
-static ssize_t tcm_qla2xxx_tpg_enable_show(struct config_item *item,
-               char *page)
-{
-       struct se_portal_group *se_tpg = to_tpg(item);
-       struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg,
-                       struct tcm_qla2xxx_tpg, se_tpg);
-
-       return snprintf(page, PAGE_SIZE, "%d\n",
-                       atomic_read(&tpg->lport_tpg_enabled));
-}
-
-static ssize_t tcm_qla2xxx_tpg_enable_store(struct config_item *item,
-               const char *page, size_t count)
+static int tcm_qla2xxx_enable_tpg(struct se_portal_group *se_tpg,
+                                 bool enable)
 {
-       struct se_portal_group *se_tpg = to_tpg(item);
        struct se_wwn *se_wwn = se_tpg->se_tpg_wwn;
        struct tcm_qla2xxx_lport *lport = container_of(se_wwn,
                        struct tcm_qla2xxx_lport, lport_wwn);
        struct scsi_qla_host *vha = lport->qla_vha;
        struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg,
                        struct tcm_qla2xxx_tpg, se_tpg);
-       unsigned long op;
-       int rc;
 
-       rc = kstrtoul(page, 0, &op);
-       if (rc < 0) {
-               pr_err("kstrtoul() returned %d\n", rc);
-               return -EINVAL;
-       }
-       if ((op != 1) && (op != 0)) {
-               pr_err("Illegal value for tpg_enable: %lu\n", op);
-               return -EINVAL;
-       }
-       if (op) {
+       if (enable) {
                if (atomic_read(&tpg->lport_tpg_enabled))
                        return -EEXIST;
 
                qlt_enable_vha(vha);
        } else {
                if (!atomic_read(&tpg->lport_tpg_enabled))
-                       return count;
+                       return 0;
 
                atomic_set(&tpg->lport_tpg_enabled, 0);
                qlt_stop_phase1(vha->vha_tgt.qla_tgt);
                qlt_stop_phase2(vha->vha_tgt.qla_tgt);
        }
 
-       return count;
+       return 0;
 }
 
 static ssize_t tcm_qla2xxx_tpg_dynamic_sessions_show(struct config_item *item,
        return sprintf(page, "%d\n", tpg->tpg_attrib.fabric_prot_type);
 }
 
-CONFIGFS_ATTR(tcm_qla2xxx_tpg_, enable);
 CONFIGFS_ATTR_RO(tcm_qla2xxx_tpg_, dynamic_sessions);
 CONFIGFS_ATTR(tcm_qla2xxx_tpg_, fabric_prot_type);
 
 static struct configfs_attribute *tcm_qla2xxx_tpg_attrs[] = {
-       &tcm_qla2xxx_tpg_attr_enable,
        &tcm_qla2xxx_tpg_attr_dynamic_sessions,
        &tcm_qla2xxx_tpg_attr_fabric_prot_type,
        NULL,
        kfree(tpg);
 }
 
-static ssize_t tcm_qla2xxx_npiv_tpg_enable_show(struct config_item *item,
-               char *page)
-{
-       return tcm_qla2xxx_tpg_enable_show(item, page);
-}
-
-static ssize_t tcm_qla2xxx_npiv_tpg_enable_store(struct config_item *item,
-               const char *page, size_t count)
+static int tcm_qla2xxx_npiv_enable_tpg(struct se_portal_group *se_tpg,
+                                   bool enable)
 {
-       struct se_portal_group *se_tpg = to_tpg(item);
        struct se_wwn *se_wwn = se_tpg->se_tpg_wwn;
        struct tcm_qla2xxx_lport *lport = container_of(se_wwn,
                        struct tcm_qla2xxx_lport, lport_wwn);
        struct scsi_qla_host *vha = lport->qla_vha;
        struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg,
                        struct tcm_qla2xxx_tpg, se_tpg);
-       unsigned long op;
-       int rc;
 
-       rc = kstrtoul(page, 0, &op);
-       if (rc < 0) {
-               pr_err("kstrtoul() returned %d\n", rc);
-               return -EINVAL;
-       }
-       if ((op != 1) && (op != 0)) {
-               pr_err("Illegal value for tpg_enable: %lu\n", op);
-               return -EINVAL;
-       }
-       if (op) {
+       if (enable) {
                if (atomic_read(&tpg->lport_tpg_enabled))
                        return -EEXIST;
 
                qlt_enable_vha(vha);
        } else {
                if (!atomic_read(&tpg->lport_tpg_enabled))
-                       return count;
+                       return 0;
 
                atomic_set(&tpg->lport_tpg_enabled, 0);
                qlt_stop_phase1(vha->vha_tgt.qla_tgt);
                qlt_stop_phase2(vha->vha_tgt.qla_tgt);
        }
 
-       return count;
+       return 0;
 }
 
-CONFIGFS_ATTR(tcm_qla2xxx_npiv_tpg_, enable);
-
-static struct configfs_attribute *tcm_qla2xxx_npiv_tpg_attrs[] = {
-        &tcm_qla2xxx_npiv_tpg_attr_enable,
-        NULL,
-};
-
 static struct se_portal_group *tcm_qla2xxx_npiv_make_tpg(struct se_wwn *wwn,
                                                         const char *name)
 {
        .fabric_make_wwn                = tcm_qla2xxx_make_lport,
        .fabric_drop_wwn                = tcm_qla2xxx_drop_lport,
        .fabric_make_tpg                = tcm_qla2xxx_make_tpg,
+       .fabric_enable_tpg              = tcm_qla2xxx_enable_tpg,
        .fabric_drop_tpg                = tcm_qla2xxx_drop_tpg,
        .fabric_init_nodeacl            = tcm_qla2xxx_init_nodeacl,
 
        .fabric_make_wwn                = tcm_qla2xxx_npiv_make_lport,
        .fabric_drop_wwn                = tcm_qla2xxx_npiv_drop_lport,
        .fabric_make_tpg                = tcm_qla2xxx_npiv_make_tpg,
+       .fabric_enable_tpg              = tcm_qla2xxx_npiv_enable_tpg,
        .fabric_drop_tpg                = tcm_qla2xxx_drop_tpg,
        .fabric_init_nodeacl            = tcm_qla2xxx_init_nodeacl,
 
        .tfc_wwn_attrs                  = tcm_qla2xxx_wwn_attrs,
-       .tfc_tpg_base_attrs             = tcm_qla2xxx_npiv_tpg_attrs,
 };
 
 static int tcm_qla2xxx_register_configfs(void)