162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/* Copyright (C) 2023 Intel Corporation */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef _ICE_ETHTOOL_H_
562306a36Sopenharmony_ci#define _ICE_ETHTOOL_H_
662306a36Sopenharmony_ci
762306a36Sopenharmony_cistruct ice_phy_type_to_ethtool {
862306a36Sopenharmony_ci	u64 aq_link_speed;
962306a36Sopenharmony_ci	u8 link_mode;
1062306a36Sopenharmony_ci};
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci/* Macro to make PHY type to Ethtool link mode table entry.
1362306a36Sopenharmony_ci * The index is the PHY type.
1462306a36Sopenharmony_ci */
1562306a36Sopenharmony_ci#define ICE_PHY_TYPE(LINK_SPEED, ETHTOOL_LINK_MODE) {\
1662306a36Sopenharmony_ci	.aq_link_speed = ICE_AQ_LINK_SPEED_##LINK_SPEED, \
1762306a36Sopenharmony_ci	.link_mode = ETHTOOL_LINK_MODE_##ETHTOOL_LINK_MODE##_BIT, \
1862306a36Sopenharmony_ci}
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci/* Lookup table mapping PHY type low to link speed and Ethtool link modes.
2162306a36Sopenharmony_ci * Array index corresponds to HW PHY type bit, see
2262306a36Sopenharmony_ci * ice_adminq_cmd.h:ICE_PHY_TYPE_LOW_*.
2362306a36Sopenharmony_ci */
2462306a36Sopenharmony_cistatic const struct ice_phy_type_to_ethtool
2562306a36Sopenharmony_ciphy_type_low_lkup[] = {
2662306a36Sopenharmony_ci	[0] = ICE_PHY_TYPE(100MB, 100baseT_Full),
2762306a36Sopenharmony_ci	[1] = ICE_PHY_TYPE(100MB, 100baseT_Full),
2862306a36Sopenharmony_ci	[2] = ICE_PHY_TYPE(1000MB, 1000baseT_Full),
2962306a36Sopenharmony_ci	[3] = ICE_PHY_TYPE(1000MB, 1000baseX_Full),
3062306a36Sopenharmony_ci	[4] = ICE_PHY_TYPE(1000MB, 1000baseX_Full),
3162306a36Sopenharmony_ci	[5] = ICE_PHY_TYPE(1000MB, 1000baseKX_Full),
3262306a36Sopenharmony_ci	[6] = ICE_PHY_TYPE(1000MB, 1000baseT_Full),
3362306a36Sopenharmony_ci	[7] = ICE_PHY_TYPE(2500MB, 2500baseT_Full),
3462306a36Sopenharmony_ci	[8] = ICE_PHY_TYPE(2500MB, 2500baseX_Full),
3562306a36Sopenharmony_ci	[9] = ICE_PHY_TYPE(2500MB, 2500baseX_Full),
3662306a36Sopenharmony_ci	[10] = ICE_PHY_TYPE(5GB, 5000baseT_Full),
3762306a36Sopenharmony_ci	[11] = ICE_PHY_TYPE(5GB, 5000baseT_Full),
3862306a36Sopenharmony_ci	[12] = ICE_PHY_TYPE(10GB, 10000baseT_Full),
3962306a36Sopenharmony_ci	[13] = ICE_PHY_TYPE(10GB, 10000baseCR_Full),
4062306a36Sopenharmony_ci	[14] = ICE_PHY_TYPE(10GB, 10000baseSR_Full),
4162306a36Sopenharmony_ci	[15] = ICE_PHY_TYPE(10GB, 10000baseLR_Full),
4262306a36Sopenharmony_ci	[16] = ICE_PHY_TYPE(10GB, 10000baseKR_Full),
4362306a36Sopenharmony_ci	[17] = ICE_PHY_TYPE(10GB, 10000baseCR_Full),
4462306a36Sopenharmony_ci	[18] = ICE_PHY_TYPE(10GB, 10000baseKR_Full),
4562306a36Sopenharmony_ci	[19] = ICE_PHY_TYPE(25GB, 25000baseCR_Full),
4662306a36Sopenharmony_ci	[20] = ICE_PHY_TYPE(25GB, 25000baseCR_Full),
4762306a36Sopenharmony_ci	[21] = ICE_PHY_TYPE(25GB, 25000baseCR_Full),
4862306a36Sopenharmony_ci	[22] = ICE_PHY_TYPE(25GB, 25000baseCR_Full),
4962306a36Sopenharmony_ci	[23] = ICE_PHY_TYPE(25GB, 25000baseSR_Full),
5062306a36Sopenharmony_ci	[24] = ICE_PHY_TYPE(25GB, 25000baseSR_Full),
5162306a36Sopenharmony_ci	[25] = ICE_PHY_TYPE(25GB, 25000baseKR_Full),
5262306a36Sopenharmony_ci	[26] = ICE_PHY_TYPE(25GB, 25000baseKR_Full),
5362306a36Sopenharmony_ci	[27] = ICE_PHY_TYPE(25GB, 25000baseKR_Full),
5462306a36Sopenharmony_ci	[28] = ICE_PHY_TYPE(25GB, 25000baseSR_Full),
5562306a36Sopenharmony_ci	[29] = ICE_PHY_TYPE(25GB, 25000baseCR_Full),
5662306a36Sopenharmony_ci	[30] = ICE_PHY_TYPE(40GB, 40000baseCR4_Full),
5762306a36Sopenharmony_ci	[31] = ICE_PHY_TYPE(40GB, 40000baseSR4_Full),
5862306a36Sopenharmony_ci	[32] = ICE_PHY_TYPE(40GB, 40000baseLR4_Full),
5962306a36Sopenharmony_ci	[33] = ICE_PHY_TYPE(40GB, 40000baseKR4_Full),
6062306a36Sopenharmony_ci	[34] = ICE_PHY_TYPE(40GB, 40000baseSR4_Full),
6162306a36Sopenharmony_ci	[35] = ICE_PHY_TYPE(40GB, 40000baseCR4_Full),
6262306a36Sopenharmony_ci	[36] = ICE_PHY_TYPE(50GB, 50000baseCR2_Full),
6362306a36Sopenharmony_ci	[37] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full),
6462306a36Sopenharmony_ci	[38] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full),
6562306a36Sopenharmony_ci	[39] = ICE_PHY_TYPE(50GB, 50000baseKR2_Full),
6662306a36Sopenharmony_ci	[40] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full),
6762306a36Sopenharmony_ci	[41] = ICE_PHY_TYPE(50GB, 50000baseCR2_Full),
6862306a36Sopenharmony_ci	[42] = ICE_PHY_TYPE(50GB, 50000baseSR2_Full),
6962306a36Sopenharmony_ci	[43] = ICE_PHY_TYPE(50GB, 50000baseCR2_Full),
7062306a36Sopenharmony_ci	[44] = ICE_PHY_TYPE(50GB, 50000baseCR_Full),
7162306a36Sopenharmony_ci	[45] = ICE_PHY_TYPE(50GB, 50000baseSR_Full),
7262306a36Sopenharmony_ci	[46] = ICE_PHY_TYPE(50GB, 50000baseLR_ER_FR_Full),
7362306a36Sopenharmony_ci	[47] = ICE_PHY_TYPE(50GB, 50000baseLR_ER_FR_Full),
7462306a36Sopenharmony_ci	[48] = ICE_PHY_TYPE(50GB, 50000baseKR_Full),
7562306a36Sopenharmony_ci	[49] = ICE_PHY_TYPE(50GB, 50000baseSR_Full),
7662306a36Sopenharmony_ci	[50] = ICE_PHY_TYPE(50GB, 50000baseCR_Full),
7762306a36Sopenharmony_ci	[51] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full),
7862306a36Sopenharmony_ci	[52] = ICE_PHY_TYPE(100GB, 100000baseSR4_Full),
7962306a36Sopenharmony_ci	[53] = ICE_PHY_TYPE(100GB, 100000baseLR4_ER4_Full),
8062306a36Sopenharmony_ci	[54] = ICE_PHY_TYPE(100GB, 100000baseKR4_Full),
8162306a36Sopenharmony_ci	[55] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full),
8262306a36Sopenharmony_ci	[56] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full),
8362306a36Sopenharmony_ci	[57] = ICE_PHY_TYPE(100GB, 100000baseSR4_Full),
8462306a36Sopenharmony_ci	[58] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full),
8562306a36Sopenharmony_ci	[59] = ICE_PHY_TYPE(100GB, 100000baseCR4_Full),
8662306a36Sopenharmony_ci	[60] = ICE_PHY_TYPE(100GB, 100000baseKR4_Full),
8762306a36Sopenharmony_ci	[61] = ICE_PHY_TYPE(100GB, 100000baseCR2_Full),
8862306a36Sopenharmony_ci	[62] = ICE_PHY_TYPE(100GB, 100000baseSR2_Full),
8962306a36Sopenharmony_ci	[63] = ICE_PHY_TYPE(100GB, 100000baseLR4_ER4_Full),
9062306a36Sopenharmony_ci};
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci/* Lookup table mapping PHY type high to link speed and Ethtool link modes.
9362306a36Sopenharmony_ci * Array index corresponds to HW PHY type bit, see
9462306a36Sopenharmony_ci * ice_adminq_cmd.h:ICE_PHY_TYPE_HIGH_*
9562306a36Sopenharmony_ci */
9662306a36Sopenharmony_cistatic const struct ice_phy_type_to_ethtool
9762306a36Sopenharmony_ciphy_type_high_lkup[] = {
9862306a36Sopenharmony_ci	[0] = ICE_PHY_TYPE(100GB, 100000baseKR2_Full),
9962306a36Sopenharmony_ci	[1] = ICE_PHY_TYPE(100GB, 100000baseSR2_Full),
10062306a36Sopenharmony_ci	[2] = ICE_PHY_TYPE(100GB, 100000baseCR2_Full),
10162306a36Sopenharmony_ci	[3] = ICE_PHY_TYPE(100GB, 100000baseSR2_Full),
10262306a36Sopenharmony_ci	[4] = ICE_PHY_TYPE(100GB, 100000baseCR2_Full),
10362306a36Sopenharmony_ci};
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ci#endif /* !_ICE_ETHTOOL_H_ */
106