ethdev: change allmulticast 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 int
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         return 0;
75 }
76
77 int
78 nfb_eth_allmulticast_disable(struct rte_eth_dev *dev)
79 {
80         struct pmd_internals *internals = (struct pmd_internals *)
81                 dev->data->dev_private;
82
83         uint16_t i;
84
85         /* if multicast is not enabled do nothing */
86         if (!nfb_eth_allmulticast_get(dev))
87                 return 0;
88
89         for (i = 0; i < internals->max_rxmac; ++i) {
90                 nc_rxmac_mac_filter_enable(internals->rxmac[i],
91                         internals->rx_filter_original);
92         }
93
94         return 0;
95 }
96
97 int
98 nfb_eth_allmulticast_get(struct rte_eth_dev *dev)
99 {
100         struct pmd_internals *internals = (struct pmd_internals *)
101                 dev->data->dev_private;
102
103         struct nc_rxmac_status status;
104         status.mac_filter = RXMAC_MAC_FILTER_PROMISCUOUS;
105         nc_rxmac_read_status(internals->rxmac[0], &status);
106
107         return (status.mac_filter == RXMAC_MAC_FILTER_TABLE_BCAST_MCAST);
108 }