ethdev: change promiscuous callbacks to return status
[dpdk.git] / drivers / net / nfb / nfb_rxmode.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2019 Cesnet
3  * Copyright(c) 2019 Netcope Technologies, a.s. <info@netcope.com>
4  * All rights reserved.
5  */
6
7 #include "nfb_rxmode.h"
8 #include "nfb.h"
9
10 int
11 nfb_eth_promiscuous_enable(struct rte_eth_dev *dev)
12 {
13         struct pmd_internals *internals = (struct pmd_internals *)
14                 dev->data->dev_private;
15         uint16_t i;
16
17         internals->rx_filter_original = RXMAC_MAC_FILTER_PROMISCUOUS;
18
19         for (i = 0; i < internals->max_rxmac; ++i) {
20                 nc_rxmac_mac_filter_enable(internals->rxmac[i],
21                         RXMAC_MAC_FILTER_PROMISCUOUS);
22         }
23
24         return 0;
25 }
26
27 int
28 nfb_eth_promiscuous_disable(struct rte_eth_dev *dev)
29 {
30         struct pmd_internals *internals = (struct pmd_internals *)
31                 dev->data->dev_private;
32         uint16_t i;
33
34         internals->rx_filter_original = RXMAC_MAC_FILTER_TABLE;
35
36         /* if promisc is not enabled, do nothing */
37         if (!nfb_eth_promiscuous_get(dev))
38                 return 0;
39
40         for (i = 0; i < internals->max_rxmac; ++i) {
41                 nc_rxmac_mac_filter_enable(internals->rxmac[i],
42                         RXMAC_MAC_FILTER_TABLE);
43         }
44
45         return 0;
46 }
47
48 int
49 nfb_eth_promiscuous_get(struct rte_eth_dev *dev)
50 {
51         struct pmd_internals *internals = (struct pmd_internals *)
52                 dev->data->dev_private;
53
54         struct nc_rxmac_status status;
55         status.mac_filter = RXMAC_MAC_FILTER_PROMISCUOUS;
56
57         nc_rxmac_read_status(internals->rxmac[0], &status);
58
59         return (status.mac_filter == RXMAC_MAC_FILTER_PROMISCUOUS);
60 }
61
62 void
63 nfb_eth_allmulticast_enable(struct rte_eth_dev *dev)
64 {
65         struct pmd_internals *internals = (struct pmd_internals *)
66                 dev->data->dev_private;
67
68         uint16_t i;
69         for (i = 0; i < internals->max_rxmac; ++i) {
70                 nc_rxmac_mac_filter_enable(internals->rxmac[i],
71                         RXMAC_MAC_FILTER_TABLE_BCAST_MCAST);
72         }
73 }
74
75 void
76 nfb_eth_allmulticast_disable(struct rte_eth_dev *dev)
77 {
78         struct pmd_internals *internals = (struct pmd_internals *)
79                 dev->data->dev_private;
80
81         uint16_t i;
82
83         /* if multicast is not enabled do nothing */
84         if (!nfb_eth_allmulticast_get(dev))
85                 return;
86
87         for (i = 0; i < internals->max_rxmac; ++i) {
88                 nc_rxmac_mac_filter_enable(internals->rxmac[i],
89                         internals->rx_filter_original);
90         }
91 }
92
93 int
94 nfb_eth_allmulticast_get(struct rte_eth_dev *dev)
95 {
96         struct pmd_internals *internals = (struct pmd_internals *)
97                 dev->data->dev_private;
98
99         struct nc_rxmac_status status;
100         status.mac_filter = RXMAC_MAC_FILTER_PROMISCUOUS;
101         nc_rxmac_read_status(internals->rxmac[0], &status);
102
103         return (status.mac_filter == RXMAC_MAC_FILTER_TABLE_BCAST_MCAST);
104 }