Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp450547pxb; Wed, 11 Nov 2020 07:42:10 -0800 (PST) X-Google-Smtp-Source: ABdhPJwum9YFCe8c6CmvOwif8m9HeMI1t/G+SF6tUwC4rMI659UHjdax7n9OVR9PK2I331h07MFh X-Received: by 2002:a17:906:1614:: with SMTP id m20mr25303146ejd.258.1605109330019; Wed, 11 Nov 2020 07:42:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605109330; cv=none; d=google.com; s=arc-20160816; b=jrY1uFa/XFJkxEgEARKaw/ZEhnMtw/2fRRr2YBsIjxSFr1hgLmXDWfyGtptWPpDTh+ My4hbjlLV2WztJIKyuH2fzHLWUZLURSAWPhhKio4I0UFgbU+8dPr2KQ2Sz/+PpVFXzNz oVo2jPQehwM/NZstkxRq4QXV3yx8hBlCpIKR6e9cZF5+OXQQkPF5d3p1yIE1SRmxn3U7 XaT+Pcg3ahJtM1zWmi2nXV9YlWx+ZNe8hDoRtg7j5bkJDizLlwgSeE8NP96P0FVT6Rse VaR2/DVYTXtLec8swtj6HLoXQscxHZwSBAWz9CKM7O0XaJfo3mG6f/zn1mO6SByYz/TM BXQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=lTz57oIbDoqLeHnWKHJxRenng3YXT0XKq15ddYdluKo=; b=QtJqWnqUwpVdaJvWCwd2eKu9huP/yUv8kAAY27qwMNi43qnZFdzeqt1cRzAXCSRqUB RhkaNJMH6jyDoWRhLNu8FiECGkY3XJCYFsb1ux5QWueQvcHHfPLH+6FckAF3yHkXarVu fajcHb8fONe7Ik6MUGllCERSBjMwnGjXFsG6m6L/edJFkkwQd/m/vM1hLv5qRTYlwqIr N07o3INOJoODmb9TdRXtzgRdpCT0xYS4BpEu8sFUGY2RBduEi2vgVOTGuPnwNAvJ6T8e TQa5CpxbfurgINBqOCdMuQMcFaMfCX29HOrvI5kuV+LgQiG+jgq2PgLDTo/hW+kB+aDx 4tDQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=nefWn8YA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g19si1792423edy.65.2020.11.11.07.41.46; Wed, 11 Nov 2020 07:42:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=nefWn8YA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727535AbgKKPhe (ORCPT + 99 others); Wed, 11 Nov 2020 10:37:34 -0500 Received: from fllv0015.ext.ti.com ([198.47.19.141]:59118 "EHLO fllv0015.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727514AbgKKPhb (ORCPT ); Wed, 11 Nov 2020 10:37:31 -0500 Received: from lelv0265.itg.ti.com ([10.180.67.224]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id 0ABFbHBj125098; Wed, 11 Nov 2020 09:37:17 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1605109037; bh=lTz57oIbDoqLeHnWKHJxRenng3YXT0XKq15ddYdluKo=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=nefWn8YAaopW5H0ic+8g/gAR58b7ChGcgwoPtMF1dArySenhQZODN5ZHB17Sv8Wto 69CLlu6EYuWceEar6nH7Eq/rnB3run6wgMc5I1oFYt2tWq8WY5pIwJdgnayn/wDVzf Ap3RfFHbFXAeHhpksknj5DPYGkllnYtZ0MKpIOPc= Received: from DFLE102.ent.ti.com (dfle102.ent.ti.com [10.64.6.23]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 0ABFbH9Q113556 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 11 Nov 2020 09:37:17 -0600 Received: from DFLE104.ent.ti.com (10.64.6.25) by DFLE102.ent.ti.com (10.64.6.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1979.3; Wed, 11 Nov 2020 09:37:17 -0600 Received: from lelv0326.itg.ti.com (10.180.67.84) by DFLE104.ent.ti.com (10.64.6.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1979.3 via Frontend Transport; Wed, 11 Nov 2020 09:37:17 -0600 Received: from a0393678-ssd.dal.design.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0326.itg.ti.com (8.15.2/8.15.2) with ESMTP id 0ABFa040042109; Wed, 11 Nov 2020 09:37:12 -0600 From: Kishon Vijay Abraham I To: Bjorn Helgaas , Jonathan Corbet , Kishon Vijay Abraham I , Lorenzo Pieralisi , Arnd Bergmann , Jon Mason , Dave Jiang , Allen Hubbe , Tom Joseph , Rob Herring CC: Greg Kroah-Hartman , , , , Subject: [PATCH v8 09/18] PCI: endpoint: Add pci_epf_ops for epf drivers to expose function specific attrs Date: Wed, 11 Nov 2020 21:05:50 +0530 Message-ID: <20201111153559.19050-10-kishon@ti.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201111153559.19050-1-kishon@ti.com> References: <20201111153559.19050-1-kishon@ti.com> MIME-Version: 1.0 Content-Type: text/plain X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In addition to the attributes that are generic across function drivers documented in Documentation/PCI/endpoint/pci-endpoint-cfs.rst, there could be function specific attributes that has to be exposed by the function driver to be configured by the user. Add ->add_cfs() in pci_epf_ops to be populated by the function driver if it has to expose any function specific attributes and pci_epf_type_add_cfs() to be invoked by pci-ep-cfs.c when sub-directory to main function directory is created. Signed-off-by: Kishon Vijay Abraham I --- drivers/pci/endpoint/pci-epf-core.c | 32 +++++++++++++++++++++++++++++ include/linux/pci-epf.h | 5 +++++ 2 files changed, 37 insertions(+) diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci-epf-core.c index 79329ec6373c..7646c8660d42 100644 --- a/drivers/pci/endpoint/pci-epf-core.c +++ b/drivers/pci/endpoint/pci-epf-core.c @@ -20,6 +20,38 @@ static DEFINE_MUTEX(pci_epf_mutex); static struct bus_type pci_epf_bus_type; static const struct device_type pci_epf_type; +/** + * pci_epf_type_add_cfs() - Help function drivers to expose function specific + * attributes in configfs + * @epf: the EPF device that has to be configured using configfs + * @group: the parent configfs group (corresponding to entries in + * pci_epf_device_id) + * + * Invoke to expose function specific attributes in configfs. If the function + * driver does not have anything to expose (attributes configured by user), + * return NULL. + */ +struct config_group *pci_epf_type_add_cfs(struct pci_epf *epf, + struct config_group *group) +{ + struct config_group *epf_type_group; + + if (!epf->driver) { + dev_err(&epf->dev, "epf device not bound to driver\n"); + return NULL; + } + + if (!epf->driver->ops->add_cfs) + return NULL; + + mutex_lock(&epf->lock); + epf_type_group = epf->driver->ops->add_cfs(epf, group); + mutex_unlock(&epf->lock); + + return epf_type_group; +} +EXPORT_SYMBOL_GPL(pci_epf_type_add_cfs); + /** * pci_epf_unbind() - Notify the function driver that the binding between the * EPF device and EPC device has been lost diff --git a/include/linux/pci-epf.h b/include/linux/pci-epf.h index 1dc66824f5a8..b241e7dd171f 100644 --- a/include/linux/pci-epf.h +++ b/include/linux/pci-epf.h @@ -62,10 +62,13 @@ struct pci_epf_header { * @bind: ops to perform when a EPC device has been bound to EPF device * @unbind: ops to perform when a binding has been lost between a EPC device * and EPF device + * @add_cfs: ops to initialize function specific configfs attributes */ struct pci_epf_ops { int (*bind)(struct pci_epf *epf); void (*unbind)(struct pci_epf *epf); + struct config_group *(*add_cfs)(struct pci_epf *epf, + struct config_group *group); }; /** @@ -188,4 +191,6 @@ void pci_epf_free_space(struct pci_epf *epf, void *addr, enum pci_barno bar, enum pci_epc_interface_type type); int pci_epf_bind(struct pci_epf *epf); void pci_epf_unbind(struct pci_epf *epf); +struct config_group *pci_epf_type_add_cfs(struct pci_epf *epf, + struct config_group *group); #endif /* __LINUX_PCI_EPF_H */ -- 2.17.1