Lines Matching +full:half +full:- +full:duplex

1 // SPDX-License-Identifier: GPL-2.0-only
31 struct net_device *dev = reply_base->dev; in linkmodes_prepare_data()
34 data->lsettings = &data->ksettings.base; in linkmodes_prepare_data()
40 ret = __ethtool_get_link_ksettings(dev, &data->ksettings); in linkmodes_prepare_data()
46 data->peer_empty = in linkmodes_prepare_data()
47 bitmap_empty(data->ksettings.link_modes.lp_advertising, in linkmodes_prepare_data()
59 const struct ethtool_link_ksettings *ksettings = &data->ksettings; in linkmodes_reply_size()
60 const struct ethtool_link_settings *lsettings = &ksettings->base; in linkmodes_reply_size()
61 bool compact = req_base->flags & ETHTOOL_FLAG_COMPACT_BITSETS; in linkmodes_reply_size()
68 ret = ethnl_bitset_size(ksettings->link_modes.advertising, in linkmodes_reply_size()
69 ksettings->link_modes.supported, in linkmodes_reply_size()
75 if (!data->peer_empty) { in linkmodes_reply_size()
76 ret = ethnl_bitset_size(ksettings->link_modes.lp_advertising, in linkmodes_reply_size()
84 if (lsettings->master_slave_cfg != MASTER_SLAVE_CFG_UNSUPPORTED) in linkmodes_reply_size()
87 if (lsettings->master_slave_state != MASTER_SLAVE_STATE_UNSUPPORTED) in linkmodes_reply_size()
98 const struct ethtool_link_ksettings *ksettings = &data->ksettings; in linkmodes_fill_reply()
99 const struct ethtool_link_settings *lsettings = &ksettings->base; in linkmodes_fill_reply()
100 bool compact = req_base->flags & ETHTOOL_FLAG_COMPACT_BITSETS; in linkmodes_fill_reply()
103 if (nla_put_u8(skb, ETHTOOL_A_LINKMODES_AUTONEG, lsettings->autoneg)) in linkmodes_fill_reply()
104 return -EMSGSIZE; in linkmodes_fill_reply()
107 ksettings->link_modes.advertising, in linkmodes_fill_reply()
108 ksettings->link_modes.supported, in linkmodes_fill_reply()
112 return -EMSGSIZE; in linkmodes_fill_reply()
113 if (!data->peer_empty) { in linkmodes_fill_reply()
115 ksettings->link_modes.lp_advertising, in linkmodes_fill_reply()
119 return -EMSGSIZE; in linkmodes_fill_reply()
122 if (nla_put_u32(skb, ETHTOOL_A_LINKMODES_SPEED, lsettings->speed) || in linkmodes_fill_reply()
123 nla_put_u8(skb, ETHTOOL_A_LINKMODES_DUPLEX, lsettings->duplex)) in linkmodes_fill_reply()
124 return -EMSGSIZE; in linkmodes_fill_reply()
126 if (lsettings->master_slave_cfg != MASTER_SLAVE_CFG_UNSUPPORTED && in linkmodes_fill_reply()
128 lsettings->master_slave_cfg)) in linkmodes_fill_reply()
129 return -EMSGSIZE; in linkmodes_fill_reply()
131 if (lsettings->master_slave_state != MASTER_SLAVE_STATE_UNSUPPORTED && in linkmodes_fill_reply()
133 lsettings->master_slave_state)) in linkmodes_fill_reply()
134 return -EMSGSIZE; in linkmodes_fill_reply()
155 u8 duplex; member
161 .duplex = __DUPLEX_ ## _duplex \
168 .duplex = DUPLEX_UNKNOWN, \
172 __DEFINE_LINK_MODE_PARAMS(10, T, Half),
174 __DEFINE_LINK_MODE_PARAMS(100, T, Half),
176 __DEFINE_LINK_MODE_PARAMS(1000, T, Half),
194 .duplex = DUPLEX_FULL,
265 __DEFINE_LINK_MODE_PARAMS(100, FX, Half),
280 * and duplex values. Called when autonegotiation is on, speed or duplex is
288 unsigned long *advertising = ksettings->link_modes.advertising; in ethnl_auto_linkmodes()
289 unsigned long *supported = ksettings->link_modes.supported; in ethnl_auto_linkmodes()
301 if (info->speed == SPEED_UNKNOWN) in ethnl_auto_linkmodes()
304 (!req_speed || info->speed == ksettings->base.speed) && in ethnl_auto_linkmodes()
305 (!req_duplex || info->duplex == ksettings->base.duplex)) in ethnl_auto_linkmodes()
332 struct ethtool_link_settings *lsettings = &ksettings->base; in ethnl_update_linkmodes()
341 if (lsettings->master_slave_cfg == MASTER_SLAVE_CFG_UNSUPPORTED) { in ethnl_update_linkmodes()
342 NL_SET_ERR_MSG_ATTR(info->extack, master_slave_cfg, in ethnl_update_linkmodes()
344 return -EOPNOTSUPP; in ethnl_update_linkmodes()
348 NL_SET_ERR_MSG_ATTR(info->extack, master_slave_cfg, in ethnl_update_linkmodes()
350 return -EOPNOTSUPP; in ethnl_update_linkmodes()
358 ethnl_update_u8(&lsettings->autoneg, tb[ETHTOOL_A_LINKMODES_AUTONEG], in ethnl_update_linkmodes()
360 ret = ethnl_update_bitset(ksettings->link_modes.advertising, in ethnl_update_linkmodes()
363 info->extack, mod); in ethnl_update_linkmodes()
366 ethnl_update_u32(&lsettings->speed, tb[ETHTOOL_A_LINKMODES_SPEED], in ethnl_update_linkmodes()
368 ethnl_update_u8(&lsettings->duplex, tb[ETHTOOL_A_LINKMODES_DUPLEX], in ethnl_update_linkmodes()
370 ethnl_update_u8(&lsettings->master_slave_cfg, master_slave_cfg, mod); in ethnl_update_linkmodes()
372 if (!tb[ETHTOOL_A_LINKMODES_OURS] && lsettings->autoneg && in ethnl_update_linkmodes()
384 struct nlattr **tb = info->attrs; in ethnl_set_linkmodes()
391 genl_info_net(info), info->extack, in ethnl_set_linkmodes()
396 ret = -EOPNOTSUPP; in ethnl_set_linkmodes()
397 if (!dev->ethtool_ops->get_link_ksettings || in ethnl_set_linkmodes()
398 !dev->ethtool_ops->set_link_ksettings) in ethnl_set_linkmodes()
417 ret = dev->ethtool_ops->set_link_ksettings(dev, &ksettings); in ethnl_set_linkmodes()