[24/28] raw/cnxk_bphy: add support for interrupt init and cleanup

Message ID 20210531214142.30167-25-tduszynski@marvell.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series add support for baseband phy |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Tomasz Duszynski May 31, 2021, 9:41 p.m. UTC
  Add support for interrupt initialization and cleanup. Internally
interrupt initialization performs low level setup that allows
custom interrupt handler registration later on.

Interrupt initialization and cleanup are related hence they
are in the same patch.

Signed-off-by: Jakub Palider <jpalider@marvell.com>
Signed-off-by: Tomasz Duszynski <tduszynski@marvell.com>
---
 drivers/raw/cnxk_bphy/cnxk_bphy.c     | 13 ++++++++
 drivers/raw/cnxk_bphy/cnxk_bphy_irq.c | 47 +++++++++++++++++++++++++++
 drivers/raw/cnxk_bphy/cnxk_bphy_irq.h |  5 +++
 drivers/raw/cnxk_bphy/meson.build     |  1 +
 drivers/raw/cnxk_bphy/rte_pmd_bphy.h  |  7 ++++
 drivers/raw/cnxk_bphy/version.map     | 12 +++++++
 6 files changed, 85 insertions(+)
 create mode 100644 drivers/raw/cnxk_bphy/cnxk_bphy_irq.c
  

Patch

diff --git a/drivers/raw/cnxk_bphy/cnxk_bphy.c b/drivers/raw/cnxk_bphy/cnxk_bphy.c
index 51affed78..e3a065b30 100644
--- a/drivers/raw/cnxk_bphy/cnxk_bphy.c
+++ b/drivers/raw/cnxk_bphy/cnxk_bphy.c
@@ -13,6 +13,7 @@ 
 #include <roc_api.h>
 
 #include "cnxk_bphy_irq.h"
+#include "rte_pmd_bphy.h"
 
 static const struct rte_pci_id pci_bphy_map[] = {
 	{RTE_PCI_DEVICE(PCI_VENDOR_ID_CAVIUM, PCI_DEVID_CNXK_BPHY)},
@@ -21,6 +22,18 @@  static const struct rte_pci_id pci_bphy_map[] = {
 	},
 };
 
+int
+rte_pmd_bphy_intr_init(uint16_t dev_id)
+{
+	return cnxk_bphy_intr_init(dev_id);
+}
+
+void
+rte_pmd_bphy_intr_fini(uint16_t dev_id)
+{
+	return cnxk_bphy_intr_fini(dev_id);
+}
+
 static const struct rte_rawdev_ops bphy_rawdev_ops = {
 };
 
diff --git a/drivers/raw/cnxk_bphy/cnxk_bphy_irq.c b/drivers/raw/cnxk_bphy/cnxk_bphy_irq.c
new file mode 100644
index 000000000..5d47840d6
--- /dev/null
+++ b/drivers/raw/cnxk_bphy/cnxk_bphy_irq.c
@@ -0,0 +1,47 @@ 
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(C) 2021 Marvell International Ltd.
+ */
+#include <rte_bus_pci.h>
+#include <rte_pci.h>
+#include <rte_rawdev.h>
+#include <rte_rawdev_pmd.h>
+
+#include <roc_api.h>
+#include <roc_bphy_irq.h>
+
+#include "cnxk_bphy_irq.h"
+
+static struct bphy_device *
+cnxk_bphy_get_bphy_dev_by_dev_id(uint16_t dev_id)
+{
+	struct rte_rawdev *rawdev;
+
+	if (!rte_rawdev_pmd_is_valid_dev(dev_id))
+		return NULL;
+
+	rawdev = &rte_rawdevs[dev_id];
+
+	return (struct bphy_device *)rawdev->dev_private;
+}
+
+int
+cnxk_bphy_intr_init(uint16_t dev_id)
+{
+	struct bphy_device *bphy_dev = cnxk_bphy_get_bphy_dev_by_dev_id(dev_id);
+
+	bphy_dev->irq_chip = roc_bphy_intr_init();
+	if (bphy_dev->irq_chip == NULL)
+		return -ENOMEM;
+
+	return 0;
+}
+
+void
+cnxk_bphy_intr_fini(uint16_t dev_id)
+{
+	struct bphy_device *bphy_dev = cnxk_bphy_get_bphy_dev_by_dev_id(dev_id);
+	struct roc_bphy_irq_chip *irq_chip = bphy_dev->irq_chip;
+
+	roc_bphy_intr_fini(irq_chip);
+	bphy_dev->irq_chip = NULL;
+}
diff --git a/drivers/raw/cnxk_bphy/cnxk_bphy_irq.h b/drivers/raw/cnxk_bphy/cnxk_bphy_irq.h
index 77169b1b7..6e3d77768 100644
--- a/drivers/raw/cnxk_bphy/cnxk_bphy_irq.h
+++ b/drivers/raw/cnxk_bphy/cnxk_bphy_irq.h
@@ -20,4 +20,9 @@  struct bphy_device {
 	struct bphy_mem mem;
 };
 
+__rte_internal
+int cnxk_bphy_intr_init(uint16_t dev_id);
+__rte_internal
+void cnxk_bphy_intr_fini(uint16_t dev_id);
+
 #endif /* _CNXK_BPHY_IRQ_ */
diff --git a/drivers/raw/cnxk_bphy/meson.build b/drivers/raw/cnxk_bphy/meson.build
index 23d46f11d..1c3e6c1b7 100644
--- a/drivers/raw/cnxk_bphy/meson.build
+++ b/drivers/raw/cnxk_bphy/meson.build
@@ -6,6 +6,7 @@  deps += ['bus_pci', 'common_cnxk', 'rawdev']
 sources = files(
     'cnxk_bphy.c',
     'cnxk_bphy_cgx.c',
+    'cnxk_bphy_irq.c',
     'cnxk_bphy_cgx_test.c'
 )
 headers = files('rte_pmd_bphy.h')
diff --git a/drivers/raw/cnxk_bphy/rte_pmd_bphy.h b/drivers/raw/cnxk_bphy/rte_pmd_bphy.h
index 84176ff22..edc146685 100644
--- a/drivers/raw/cnxk_bphy/rte_pmd_bphy.h
+++ b/drivers/raw/cnxk_bphy/rte_pmd_bphy.h
@@ -5,6 +5,8 @@ 
 #ifndef _CNXK_BPHY_H_
 #define _CNXK_BPHY_H_
 
+#include "cnxk_bphy_irq.h"
+
 enum cnxk_bphy_cgx_msg_type {
 	CNXK_BPHY_CGX_MSG_TYPE_GET_LINKINFO,
 	CNXK_BPHY_CGX_MSG_TYPE_INTLBK_DISABLE,
@@ -101,4 +103,9 @@  struct cnxk_bphy_cgx_msg {
 	void *data;
 };
 
+__rte_experimental
+int rte_pmd_bphy_intr_init(uint16_t dev_id);
+__rte_experimental
+void rte_pmd_bphy_intr_fini(uint16_t dev_id);
+
 #endif /* _CNXK_BPHY_H_ */
diff --git a/drivers/raw/cnxk_bphy/version.map b/drivers/raw/cnxk_bphy/version.map
index 4a76d1d52..e087cd39b 100644
--- a/drivers/raw/cnxk_bphy/version.map
+++ b/drivers/raw/cnxk_bphy/version.map
@@ -1,3 +1,15 @@ 
 DPDK_21 {
 	local: *;
 };
+INTERNAL {
+	global:
+
+	cnxk_bphy_intr_init;
+	cnxk_bphy_intr_fini;
+};
+EXPERIMENTAL {
+	global:
+
+	rte_pmd_bphy_intr_fini;
+	rte_pmd_bphy_intr_init;
+};