991c2d7ab09e9165b29b9f8fb3d7c787ad816ecc
[dpdk.git] / drivers / raw / cnxk_bphy / cnxk_bphy_irq.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4 #include <rte_bus_pci.h>
5 #include <rte_pci.h>
6 #include <rte_rawdev.h>
7 #include <rte_rawdev_pmd.h>
8
9 #include <roc_api.h>
10 #include <roc_bphy_irq.h>
11
12 #include "cnxk_bphy_irq.h"
13
14 static struct bphy_device *
15 cnxk_bphy_get_bphy_dev_by_dev_id(uint16_t dev_id)
16 {
17         struct rte_rawdev *rawdev;
18
19         if (!rte_rawdev_pmd_is_valid_dev(dev_id))
20                 return NULL;
21
22         rawdev = &rte_rawdevs[dev_id];
23
24         return (struct bphy_device *)rawdev->dev_private;
25 }
26
27 uint64_t
28 cnxk_bphy_irq_max_get(uint16_t dev_id)
29 {
30         struct roc_bphy_irq_chip *irq_chip;
31         struct bphy_device *bphy_dev;
32
33         bphy_dev = cnxk_bphy_get_bphy_dev_by_dev_id(dev_id);
34         irq_chip = bphy_dev->irq_chip;
35
36         return irq_chip->max_irq;
37 }
38
39 int
40 cnxk_bphy_intr_init(uint16_t dev_id)
41 {
42         struct bphy_device *bphy_dev = cnxk_bphy_get_bphy_dev_by_dev_id(dev_id);
43
44         bphy_dev->irq_chip = roc_bphy_intr_init();
45         if (bphy_dev->irq_chip == NULL)
46                 return -ENOMEM;
47
48         return 0;
49 }
50
51 void
52 cnxk_bphy_intr_fini(uint16_t dev_id)
53 {
54         struct bphy_device *bphy_dev = cnxk_bphy_get_bphy_dev_by_dev_id(dev_id);
55         struct roc_bphy_irq_chip *irq_chip = bphy_dev->irq_chip;
56
57         roc_bphy_intr_fini(irq_chip);
58         bphy_dev->irq_chip = NULL;
59 }