File Index
Files and directories
Sign in
FILE

kvaser_pciefd_devlink.c

File preview with syntax highlighting.

linux-6.19.14/drivers/net/can/kvaser_pciefd/kvaser_pciefd_devlink.c C
 1// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
 2/* kvaser_pciefd devlink functions
 3 *
 4 * Copyright (C) 2025 KVASER AB, Sweden. All rights reserved.
 5 */
 6#include "kvaser_pciefd.h"
 7
 8#include <linux/netdevice.h>
 9#include <net/devlink.h>
10
11static int kvaser_pciefd_devlink_info_get(struct devlink *devlink,
12					  struct devlink_info_req *req,
13					  struct netlink_ext_ack *extack)
14{
15	struct kvaser_pciefd *pcie = devlink_priv(devlink);
16	char buf[] = "xxx.xxx.xxxxx";
17	int ret;
18
19	if (pcie->fw_version.major) {
20		snprintf(buf, sizeof(buf), "%u.%u.%u",
21			 pcie->fw_version.major,
22			 pcie->fw_version.minor,
23			 pcie->fw_version.build);
24		ret = devlink_info_version_running_put(req,
25						       DEVLINK_INFO_VERSION_GENERIC_FW,
26						       buf);
27		if (ret)
28			return ret;
29	}
30
31	return 0;
32}
33
34const struct devlink_ops kvaser_pciefd_devlink_ops = {
35	.info_get = kvaser_pciefd_devlink_info_get,
36};
37
38int kvaser_pciefd_devlink_port_register(struct kvaser_pciefd_can *can)
39{
40	int ret;
41	struct devlink_port_attrs attrs = {
42		.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL,
43		.phys.port_number = can->can.dev->dev_port,
44	};
45	devlink_port_attrs_set(&can->devlink_port, &attrs);
46
47	ret = devlink_port_register(priv_to_devlink(can->kv_pcie),
48				    &can->devlink_port, can->can.dev->dev_port);
49	if (ret)
50		return ret;
51
52	SET_NETDEV_DEVLINK_PORT(can->can.dev, &can->devlink_port);
53
54	return 0;
55}
56
57void kvaser_pciefd_devlink_port_unregister(struct kvaser_pciefd_can *can)
58{
59	devlink_port_unregister(&can->devlink_port);
60}
~/ Read-only file preview.