/** * lbs_anycast_set - Set function for sysfs attribute anycast_mask * @dev: the &struct device * @attr: device attributes * @buf: buffer that contains new attribute value * @count: size of buffer */ static ssize_t lbs_anycast_set(struct device *dev, struct device_attribute *attr, const char * buf, size_t count) { struct lbs_private *priv = to_net_dev(dev)->ml_priv; struct cmd_ds_mesh_access mesh_access; uint32_t datum; int ret; memset(&mesh_access, 0, sizeof(mesh_access)); sscanf(buf, "%x", &datum); mesh_access.data[0] = cpu_to_le32(datum); ret = lbs_mesh_access(priv, CMD_ACT_MESH_SET_ANYCAST, &mesh_access); if (ret) return ret; return strlen(buf); }
/** * lbs_prb_rsp_limit_get - Get function for sysfs attribute prb_rsp_limit * @dev: the &struct device * @attr: device attributes * @buf: buffer where data will be returned */ static ssize_t lbs_prb_rsp_limit_get(struct device *dev, struct device_attribute *attr, char *buf) { struct lbs_private *priv = to_net_dev(dev)->ml_priv; struct cmd_ds_mesh_access mesh_access; int ret; u32 retry_limit; memset(&mesh_access, 0, sizeof(mesh_access)); mesh_access.data[0] = cpu_to_le32(CMD_ACT_GET); ret = lbs_mesh_access(priv, CMD_ACT_MESH_SET_GET_PRB_RSP_LIMIT, &mesh_access); if (ret) return ret; retry_limit = le32_to_cpu(mesh_access.data[1]); return snprintf(buf, 10, "%d\n", retry_limit); }
void lbs_mesh_ethtool_get_stats(struct net_device *dev, struct ethtool_stats *stats, uint64_t *data) { struct lbs_private *priv = dev->ml_priv; struct cmd_ds_mesh_access mesh_access; int ret; lbs_deb_enter(LBS_DEB_ETHTOOL); /* Get Mesh Statistics */ ret = lbs_mesh_access(priv, CMD_ACT_MESH_GET_STATS, &mesh_access); if (ret) { memset(data, 0, MESH_STATS_NUM*(sizeof(uint64_t))); return; } priv->mstats.fwd_drop_rbt = le32_to_cpu(mesh_access.data[0]); priv->mstats.fwd_drop_ttl = le32_to_cpu(mesh_access.data[1]); priv->mstats.fwd_drop_noroute = le32_to_cpu(mesh_access.data[2]); priv->mstats.fwd_drop_nobuf = le32_to_cpu(mesh_access.data[3]); priv->mstats.fwd_unicast_cnt = le32_to_cpu(mesh_access.data[4]); priv->mstats.fwd_bcast_cnt = le32_to_cpu(mesh_access.data[5]); priv->mstats.drop_blind = le32_to_cpu(mesh_access.data[6]); priv->mstats.tx_failed_cnt = le32_to_cpu(mesh_access.data[7]); data[0] = priv->mstats.fwd_drop_rbt; data[1] = priv->mstats.fwd_drop_ttl; data[2] = priv->mstats.fwd_drop_noroute; data[3] = priv->mstats.fwd_drop_nobuf; data[4] = priv->mstats.fwd_unicast_cnt; data[5] = priv->mstats.fwd_bcast_cnt; data[6] = priv->mstats.drop_blind; data[7] = priv->mstats.tx_failed_cnt; lbs_deb_enter(LBS_DEB_ETHTOOL); }