iPXE
|
#include "../../mlx_lib/mlx_link_speed/mlx_link_speed.h"
#include "../../include/public/mlx_memory.h"
#include "../../include/public/mlx_bail.h"
Go to the source code of this file.
Functions | |
FILE_LICENCE (GPL2_OR_LATER) | |
mlx_status | mlx_set_link_speed (IN mlx_utils *utils, IN mlx_uint8 port_num, IN LINK_SPEED_TYPE type, IN LINK_SPEED speed) |
mlx_status | mlx_get_max_speed (IN mlx_utils *utils, IN mlx_uint8 port_num, IN LINK_SPEED_TYPE type, OUT mlx_uint64 *speed) |
FILE_LICENCE | ( | GPL2_OR_LATER | ) |
mlx_status mlx_set_link_speed | ( | IN mlx_utils * | utils, |
IN mlx_uint8 | port_num, | ||
IN LINK_SPEED_TYPE | type, | ||
IN LINK_SPEED | speed | ||
) |
Definition at line 27 of file mlx_link_speed.c.
References mlx_link_speed::eth_proto_admin, mlx_link_speed::eth_proto_capability, mlx_link_speed::ib_proto_admin, mlx_link_speed::ib_proto_capability, LINK_SPEED_100GB, LINK_SPEED_100GB_MASK, LINK_SPEED_10GB, LINK_SPEED_10GB_MASK, LINK_SPEED_1GB, LINK_SPEED_1GB_MASK, LINK_SPEED_40GB, LINK_SPEED_40GB_MASK, LINK_SPEED_DEFAULT, LINK_SPEED_ETH, LINK_SPEED_SDR, LINK_SPEED_SDR_MASK, mlx_link_speed::loacl_port, MLX_CHECK_STATUS, MLX_DEBUG_ERROR, MLX_FAILED, MLX_INVALID_PARAMETER, mlx_memory_set(), mlx_reg_access(), MLX_SUCCESS, NULL, port_num, mlx_link_speed::proto_mask, status, and type.
Referenced by golan_set_link_speed().
{ mlx_status status = MLX_SUCCESS; struct mlx_link_speed link_speed; mlx_uint32 reg_status; if (utils == NULL) { status = MLX_INVALID_PARAMETER; goto bad_param; } mlx_memory_set(utils, &link_speed, 0, sizeof(link_speed)); link_speed.loacl_port = port_num; link_speed.proto_mask = 1 << type; status = mlx_reg_access(utils, REG_ID_PTYS, REG_ACCESS_READ, &link_speed, sizeof(link_speed), ®_status); MLX_CHECK_STATUS(utils, status, reg_err, "mlx_reg_access failed "); if (reg_status != 0) { MLX_DEBUG_ERROR(utils,"mlx_reg_access failed with status = %d\n", reg_status); status = MLX_FAILED; goto reg_err; } switch (speed) { case LINK_SPEED_1GB: link_speed.eth_proto_admin = link_speed.eth_proto_capability & LINK_SPEED_1GB_MASK; break; case LINK_SPEED_10GB: link_speed.eth_proto_admin = link_speed.eth_proto_capability & LINK_SPEED_10GB_MASK; break; case LINK_SPEED_40GB: link_speed.eth_proto_admin = link_speed.eth_proto_capability & LINK_SPEED_40GB_MASK; break; case LINK_SPEED_100GB: link_speed.eth_proto_admin = link_speed.eth_proto_capability & LINK_SPEED_100GB_MASK; break; case LINK_SPEED_SDR: link_speed.ib_proto_admin = link_speed.ib_proto_capability & LINK_SPEED_SDR_MASK; break; case LINK_SPEED_DEFAULT: if (type == LINK_SPEED_ETH) { link_speed.eth_proto_admin = link_speed.eth_proto_capability; } else { link_speed.ib_proto_admin = link_speed.ib_proto_capability; } break; } status = mlx_reg_access(utils, REG_ID_PTYS, REG_ACCESS_WRITE, &link_speed, sizeof(link_speed), ®_status); MLX_CHECK_STATUS(utils, status, reg_err, "mlx_reg_access failed "); if (reg_status != 0) { MLX_DEBUG_ERROR(utils,"mlx_reg_access failed with status = %d\n", reg_status); status = MLX_FAILED; goto reg_err; } reg_err: bad_param: return status; }
mlx_status mlx_get_max_speed | ( | IN mlx_utils * | utils, |
IN mlx_uint8 | port_num, | ||
IN LINK_SPEED_TYPE | type, | ||
OUT mlx_uint64 * | speed | ||
) |
Definition at line 95 of file mlx_link_speed.c.
References mlx_link_speed::eth_proto_capability, GIGA_TO_BIT, mlx_link_speed::ib_link_width_capability, mlx_link_speed::ib_proto_capability, LINK_SPEED_100GB_MASK, LINK_SPEED_10GB_MASK, LINK_SPEED_1GB_MASK, LINK_SPEED_20GB_MASK, LINK_SPEED_25GB_MASK, LINK_SPEED_40GB_MASK, LINK_SPEED_50GB_MASK, LINK_SPEED_56GB_MASK, LINK_SPEED_DDR_MASK, LINK_SPEED_EDR20_MASK, LINK_SPEED_EDR_MASK, LINK_SPEED_ETH, LINK_SPEED_FDR_MASK, LINK_SPEED_QDR_MASK, LINK_SPEED_SDR_MASK, LINK_SPEED_WITDH_12_MASK, LINK_SPEED_WITDH_1_MASK, LINK_SPEED_WITDH_2_MASK, LINK_SPEED_WITDH_4_MASK, LINK_SPEED_WITDH_8_MASK, mlx_link_speed::loacl_port, MLX_CHECK_STATUS, MLX_DEBUG_ERROR, MLX_FAILED, MLX_INVALID_PARAMETER, mlx_memory_set(), mlx_reg_access(), MLX_SUCCESS, NULL, port_num, mlx_link_speed::proto_mask, status, and type.
{ mlx_status status = MLX_SUCCESS; struct mlx_link_speed link_speed; mlx_uint32 reg_status; mlx_uint64 speed_giga = 0; mlx_uint8 lanes_number = 1; *speed = 0; if (utils == NULL) { status = MLX_INVALID_PARAMETER; goto bad_param; } mlx_memory_set(utils, &link_speed, 0, sizeof(link_speed)); link_speed.loacl_port = port_num; link_speed.proto_mask = 1 << type; status = mlx_reg_access(utils, REG_ID_PTYS, REG_ACCESS_READ, &link_speed, sizeof(link_speed), ®_status); MLX_CHECK_STATUS(utils, status, reg_err, "mlx_reg_access failed "); if (reg_status != 0) { MLX_DEBUG_ERROR(utils,"mlx_reg_access failed with status = %d\n", reg_status); status = MLX_FAILED; goto reg_err; } if ( type == LINK_SPEED_ETH ) { if ( link_speed.eth_proto_capability & LINK_SPEED_100GB_MASK ) { speed_giga = 100; } else if ( link_speed.eth_proto_capability & LINK_SPEED_56GB_MASK ) { speed_giga = 56; } else if ( link_speed.eth_proto_capability & LINK_SPEED_50GB_MASK ) { speed_giga = 50; } else if ( link_speed.eth_proto_capability & LINK_SPEED_40GB_MASK ) { speed_giga = 40; } else if (link_speed.eth_proto_capability & LINK_SPEED_25GB_MASK) { speed_giga = 25; } else if ( link_speed.eth_proto_capability & LINK_SPEED_20GB_MASK ) { speed_giga = 20; } else if ( link_speed.eth_proto_capability & LINK_SPEED_10GB_MASK) { speed_giga = 10; } else if ( link_speed.eth_proto_capability & LINK_SPEED_1GB_MASK ) { speed_giga = 1; } } else { if ( link_speed.ib_proto_capability & LINK_SPEED_EDR_MASK ) { speed_giga = 25; } else if ( link_speed.ib_proto_capability & LINK_SPEED_EDR20_MASK ) { speed_giga = 20; } else if ( link_speed.ib_proto_capability & LINK_SPEED_FDR_MASK ) { speed_giga = 14; } else if ( link_speed.ib_proto_capability & LINK_SPEED_QDR_MASK ) { speed_giga = 10; } else if ( link_speed.ib_proto_capability & LINK_SPEED_DDR_MASK ) { speed_giga = 5; } else if ( link_speed.ib_proto_capability & LINK_SPEED_SDR_MASK ) { speed_giga = 2.5; } if ( link_speed.ib_link_width_capability & LINK_SPEED_WITDH_12_MASK ) { lanes_number = 12; } else if ( link_speed.ib_link_width_capability & LINK_SPEED_WITDH_8_MASK ) { lanes_number = 8; } else if (link_speed.ib_link_width_capability & LINK_SPEED_WITDH_4_MASK ) { lanes_number = 4; } else if (link_speed.ib_link_width_capability & LINK_SPEED_WITDH_2_MASK ) { lanes_number = 2; } else if (link_speed.ib_link_width_capability & LINK_SPEED_WITDH_1_MASK ) { lanes_number = 1; } speed_giga = speed_giga * lanes_number; } // Return data in bits *speed = speed_giga * GIGA_TO_BIT; reg_err: bad_param: return status; }