]> Git Repo - linux.git/blob - drivers/net/ethernet/microchip/lan966x/lan966x_goto.c
Linux 6.14-rc3
[linux.git] / drivers / net / ethernet / microchip / lan966x / lan966x_goto.c
1 // SPDX-License-Identifier: GPL-2.0+
2
3 #include "lan966x_main.h"
4 #include "vcap_api_client.h"
5
6 int lan966x_goto_port_add(struct lan966x_port *port,
7                           int from_cid, int to_cid,
8                           unsigned long goto_id,
9                           struct netlink_ext_ack *extack)
10 {
11         struct lan966x *lan966x = port->lan966x;
12         int err;
13
14         err = vcap_enable_lookups(lan966x->vcap_ctrl, port->dev,
15                                   from_cid, to_cid, goto_id,
16                                   true);
17         if (err == -EFAULT) {
18                 NL_SET_ERR_MSG_MOD(extack, "Unsupported goto chain");
19                 return -EOPNOTSUPP;
20         }
21
22         if (err == -EADDRINUSE) {
23                 NL_SET_ERR_MSG_MOD(extack, "VCAP already enabled");
24                 return -EOPNOTSUPP;
25         }
26
27         if (err) {
28                 NL_SET_ERR_MSG_MOD(extack, "Could not enable VCAP lookups");
29                 return err;
30         }
31
32         return 0;
33 }
34
35 int lan966x_goto_port_del(struct lan966x_port *port,
36                           unsigned long goto_id,
37                           struct netlink_ext_ack *extack)
38 {
39         struct lan966x *lan966x = port->lan966x;
40         int err;
41
42         err = vcap_enable_lookups(lan966x->vcap_ctrl, port->dev, 0, 0,
43                                   goto_id, false);
44         if (err) {
45                 NL_SET_ERR_MSG_MOD(extack, "Could not disable VCAP lookups");
46                 return err;
47         }
48
49         return 0;
50 }
This page took 0.030171 seconds and 4 git commands to generate.