FILE
kvaser_pciefd_devlink.c
File preview with syntax highlighting.
linux-6.19.14/drivers/net/can/kvaser_pciefd/kvaser_pciefd_devlink.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.