int mlx5_query_port_link_width_oper(struct mlx5_core_dev *dev, u8 *link_width_oper, u8 local_port) { u32 out[MLX5_ST_SZ_DW(ptys_reg)]; int err; err = mlx5_query_port_ptys(dev, out, sizeof(out), MLX5_PTYS_IB, local_port); if (err) return err; *link_width_oper = MLX5_GET(ptys_reg, out, ib_link_width_oper); return 0; }
int mlx5_query_port_eth_proto_oper(struct mlx5_core_dev *dev, u32 *proto_oper, u8 local_port) { u32 out[MLX5_ST_SZ_DW(ptys_reg)]; int err; err = mlx5_query_port_ptys(dev, out, sizeof(out), MLX5_PTYS_EN, local_port); if (err) return err; *proto_oper = MLX5_GET(ptys_reg, out, eth_proto_oper); return 0; }
int mlx5_query_port_proto_admin(struct mlx5_core_dev *dev, u32 *proto_admin, int proto_mask) { u32 out[MLX5_ST_SZ_DW(ptys_reg)]; int err; err = mlx5_query_port_ptys(dev, out, sizeof(out), proto_mask, 1); if (err) return err; if (proto_mask == MLX5_PTYS_EN) *proto_admin = MLX5_GET(ptys_reg, out, eth_proto_admin); else *proto_admin = MLX5_GET(ptys_reg, out, ib_proto_admin); return 0; }
void mlx5_query_port_autoneg(struct mlx5_core_dev *dev, int proto_mask, u8 *an_status, u8 *an_disable_cap, u8 *an_disable_admin) { u32 out[MLX5_ST_SZ_DW(ptys_reg)]; *an_status = 0; *an_disable_cap = 0; *an_disable_admin = 0; if (mlx5_query_port_ptys(dev, out, sizeof(out), proto_mask, 1)) return; *an_status = MLX5_GET(ptys_reg, out, an_status); *an_disable_cap = MLX5_GET(ptys_reg, out, an_disable_cap); *an_disable_admin = MLX5_GET(ptys_reg, out, an_disable_admin); }
int mlx5_query_port_proto_oper(struct mlx5_core_dev *dev, u8 *proto_oper, int proto_mask, u8 local_port) { u32 out[MLX5_ST_SZ_DW(ptys_reg)]; int err; err = mlx5_query_port_ptys(dev, out, sizeof(out), proto_mask, local_port); if (err) return err; if (proto_mask == MLX5_PTYS_EN) *proto_oper = MLX5_GET(ptys_reg, out, eth_proto_oper); else *proto_oper = MLX5_GET(ptys_reg, out, ib_proto_oper); return 0; }
static int mlx5e_test_link_speed(struct mlx5e_priv *priv) { u32 out[MLX5_ST_SZ_DW(ptys_reg)]; u32 eth_proto_oper; int i; if (!netif_carrier_ok(priv->netdev)) return 1; if (mlx5_query_port_ptys(priv->mdev, out, sizeof(out), MLX5_PTYS_EN, 1)) return 1; eth_proto_oper = MLX5_GET(ptys_reg, out, eth_proto_oper); for (i = 0; i < MLX5E_LINK_MODES_NUMBER; i++) { if (eth_proto_oper & MLX5E_PROT_MASK(i)) return 0; } return 1; }
static int mlx5e_test_link_speed(struct mlx5_core_dev *mdev) { u32 out[MLX5_ST_SZ_DW(ptys_reg)]; u32 eth_proto_oper; int err; int i; err = mlx5_query_port_ptys(mdev, out, sizeof(out), MLX5_PTYS_EN); if (err) return 1; eth_proto_oper = MLX5_GET(ptys_reg, out, eth_proto_oper); for (i = 0; i < MLX5_LINK_MODES_NUMBER; ++i) { if (eth_proto_oper & MLX5_PROT_MASK(i)) return 0; } return 1; }