On Wed, Oct 23, 2024 at 09:42:10PM +0800, Jijie Shao wrote:
With the ethtool of a specific version,Seems like this makes your debugfs patches redundant?
the following effects are achieved:
[root@localhost sjj]# ./ethtool -d enp131s0f1
[SPEC] VALID [0x0000]: 0x00000001
[SPEC] EVENT_REQ [0x0004]: 0x00000000
[SPEC] MAC_ID [0x0008]: 0x00000002
[SPEC] PHY_ADDR [0x000c]: 0x00000002
[SPEC] MAC_ADDR_L [0x0010]: 0x00000808
[SPEC] MAC_ADDR_H [0x0014]: 0x08080802
[SPEC] UC_MAX_NUM [0x0018]: 0x00000004
[SPEC] MAX_MTU [0x0028]: 0x00000fc2
[SPEC] MIN_MTU [0x002c]: 0x00000100
+static u32 hbg_get_reg_info(struct hbg_priv *priv,data is supposed to be just raw values, dumped from registers in the
+ const struct hbg_reg_type_info *type_info,
+ const struct hbg_reg_offset_name_map *reg_map,
+ struct hbg_reg_info *info)
+{
+ info->val = hbg_reg_read(priv, reg_map->reg_offset);
+ info->offset = reg_map->reg_offset - type_info->offset_base;
+ snprintf(info->name, sizeof(info->name),
+ "[%s] %s", type_info->name, reg_map->name);
+
+ return sizeof(*info);
+}
+
+static void hbg_ethtool_get_regs(struct net_device *netdev,
+ struct ethtool_regs *regs, void *data)
+{
+ struct hbg_priv *priv = netdev_priv(netdev);
+ const struct hbg_reg_type_info *info;
+ u32 i, j, offset = 0;
+
+ regs->version = 0;
+ for (i = 0; i < ARRAY_SIZE(hbg_type_infos); i++) {
+ info = &hbg_type_infos[i];
+ for (j = 0; j < info->reg_num; j++)
+ offset += hbg_get_reg_info(priv, info,
+ &info->reg_maps[j],
+ data + offset);
+ }
+}
device. You appear to be passing back ASCII text. It is supposed to be
ethtool which does the pretty print, not the kernel driver.
Andrew
#define HBG_REG_NAEM_MAX_LEN 32