ca6e4d55781a3e4aa07cc5dfe1b9be17c287f186
[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         for (i = 0; i < internals->max_rxmac; ++i) {
18                 nc_rxmac_mac_filter_enable(internals->rxmac[i],
19                         RXMAC_MAC_FILTER_PROMISCUOUS);
20         }
21
22         return 0;
23 }
24
25 int
26 nfb_eth_promiscuous_disable(struct rte_eth_dev *dev)
27 {
28         struct pmd_internals *internals = (struct pmd_internals *)
29                 dev->data->dev_private;
30         uint16_t i;
31         enum nc_rxmac_mac_filter filter = RXMAC_MAC_FILTER_TABLE_BCAST;
32
33         if (dev->data->all_multicast)
34                 filter = RXMAC_MAC_FILTER_TABLE_BCAST_MCAST;
35
36         for (i = 0; i < internals->max_rxmac; ++i) {
37                 nc_rxmac_mac_filter_enable(internals->rxmac[i], filter);
38         }
39
40         return 0;
41 }
42
43 int
44 nfb_eth_promiscuous_get(struct rte_eth_dev *dev)
45 {
46         struct pmd_internals *internals = (struct pmd_internals *)
47                 dev->data->dev_private;
48
49         struct nc_rxmac_status status;
50         status.mac_filter = RXMAC_MAC_FILTER_PROMISCUOUS;
51
52         if (internals->max_rxmac > 0)
53                 nc_rxmac_read_status(internals->rxmac[0], &status);
54
55         return (status.mac_filter == RXMAC_MAC_FILTER_PROMISCUOUS);
56 }
57
58 int
59 nfb_eth_allmulticast_enable(struct rte_eth_dev *dev)
60 {
61         struct pmd_internals *internals = (struct pmd_internals *)
62                 dev->data->dev_private;
63
64         uint16_t i;
65         if (dev->data->promiscuous)
66                 return 0;
67         for (i = 0; i < internals->max_rxmac; ++i) {
68                 nc_rxmac_mac_filter_enable(internals->rxmac[i],
69                         RXMAC_MAC_FILTER_TABLE_BCAST_MCAST);
70         }
71
72         return 0;
73 }
74
75 int
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 (dev->data->promiscuous)
84                 return 0;
85
86         for (i = 0; i < internals->max_rxmac; ++i) {
87                 nc_rxmac_mac_filter_enable(internals->rxmac[i],
88                         RXMAC_MAC_FILTER_TABLE_BCAST);
89         }
90
91         return 0;
92 }
93
94 int
95 nfb_eth_allmulticast_get(struct rte_eth_dev *dev)
96 {
97         struct pmd_internals *internals = (struct pmd_internals *)
98                 dev->data->dev_private;
99
100         struct nc_rxmac_status status;
101         status.mac_filter = RXMAC_MAC_FILTER_PROMISCUOUS;
102
103         if (internals->max_rxmac > 0)
104                 nc_rxmac_read_status(internals->rxmac[0], &status);
105
106         return (status.mac_filter == RXMAC_MAC_FILTER_TABLE_BCAST_MCAST);
107 }