static int mlxsw_sx_port_module_check(struct mlxsw_sx_port *mlxsw_sx_port, bool *p_usable) { struct mlxsw_sx *mlxsw_sx = mlxsw_sx_port->mlxsw_sx; char pmlp_pl[MLXSW_REG_PMLP_LEN]; int err; mlxsw_reg_pmlp_pack(pmlp_pl, mlxsw_sx_port->local_port); err = mlxsw_reg_query(mlxsw_sx->core, MLXSW_REG(pmlp), pmlp_pl); if (err) return err; *p_usable = mlxsw_reg_pmlp_width_get(pmlp_pl) ? true : false; return 0; }
static void mlxsw_sx_port_get_stats(struct net_device *dev, struct ethtool_stats *stats, u64 *data) { struct mlxsw_sx_port *mlxsw_sx_port = netdev_priv(dev); struct mlxsw_sx *mlxsw_sx = mlxsw_sx_port->mlxsw_sx; char ppcnt_pl[MLXSW_REG_PPCNT_LEN]; int i; int err; mlxsw_reg_ppcnt_pack(ppcnt_pl, mlxsw_sx_port->local_port); err = mlxsw_reg_query(mlxsw_sx->core, MLXSW_REG(ppcnt), ppcnt_pl); for (i = 0; i < MLXSW_SX_PORT_HW_STATS_LEN; i++) data[i] = !err ? mlxsw_sx_port_hw_stats[i].getter(ppcnt_pl) : 0; }
static int mlxsw_sib_port_module_info_get(struct mlxsw_sib *mlxsw_sib, u8 local_port, u8 *p_module, u8 *p_width) { char pmlp_pl[MLXSW_REG_PMLP_LEN]; int err; mlxsw_reg_pmlp_pack(pmlp_pl, local_port); err = mlxsw_reg_query(mlxsw_sib->core, MLXSW_REG(pmlp), pmlp_pl); if (err) return err; *p_module = mlxsw_reg_pmlp_module_get(pmlp_pl, 0); *p_width = mlxsw_reg_pmlp_width_get(pmlp_pl); return 0; }
static int mlxsw_sx_port_oper_status_get(struct mlxsw_sx_port *mlxsw_sx_port, bool *p_is_up) { struct mlxsw_sx *mlxsw_sx = mlxsw_sx_port->mlxsw_sx; char paos_pl[MLXSW_REG_PAOS_LEN]; u8 oper_status; int err; mlxsw_reg_paos_pack(paos_pl, mlxsw_sx_port->local_port, 0); err = mlxsw_reg_query(mlxsw_sx->core, MLXSW_REG(paos), paos_pl); if (err) return err; oper_status = mlxsw_reg_paos_oper_status_get(paos_pl); *p_is_up = oper_status == MLXSW_PORT_ADMIN_STATUS_UP ? true : false; return 0; }
static int mlxsw_sib_port_mtu_set(struct mlxsw_sib_port *mlxsw_sib_port, u16 mtu) { struct mlxsw_sib *mlxsw_sib = mlxsw_sib_port->mlxsw_sib; char pmtu_pl[MLXSW_REG_PMTU_LEN]; int max_mtu; int err; mlxsw_reg_pmtu_pack(pmtu_pl, mlxsw_sib_port->local_port, 0); err = mlxsw_reg_query(mlxsw_sib->core, MLXSW_REG(pmtu), pmtu_pl); if (err) return err; max_mtu = mlxsw_reg_pmtu_max_mtu_get(pmtu_pl); if (mtu > max_mtu) return -EINVAL; mlxsw_reg_pmtu_pack(pmtu_pl, mlxsw_sib_port->local_port, mtu); return mlxsw_reg_write(mlxsw_sib->core, MLXSW_REG(pmtu), pmtu_pl); }