Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153194007
D12896.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D12896.diff
View Options
Index: sys/dev/bnxt/if_bnxt.c
===================================================================
--- sys/dev/bnxt/if_bnxt.c
+++ sys/dev/bnxt/if_bnxt.c
@@ -1198,8 +1198,11 @@
{
struct bnxt_softc *softc = iflib_get_softc(ctx);
struct bnxt_link_info *link_info = &softc->link_info;
- uint8_t phy_type = get_phy_type(softc);
+ struct ifmedia_entry *next;
+ uint64_t target_baudrate = bnxt_get_baudrate(link_info);
+ int active_media = IFM_UNKNOWN;
+
bnxt_update_link(softc, true);
ifmr->ifm_status = IFM_AVALID;
@@ -1215,171 +1218,17 @@
else
ifmr->ifm_active |= IFM_HDX;
- switch (link_info->link_speed) {
- case HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_100MB:
- ifmr->ifm_active |= IFM_100_T;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_1GB:
- switch (phy_type) {
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKX:
- ifmr->ifm_active |= IFM_1000_KX;
+ /*
+ * Go through the list of supported media which got prepared
+ * as part of bnxt_add_media_types() using api ifmedia_add().
+ */
+ LIST_FOREACH(next, &(iflib_get_media(ctx)->ifm_list), ifm_list) {
+ if (ifmedia_baudrate(next->ifm_media) == target_baudrate) {
+ active_media = next->ifm_media;
break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASET:
- ifmr->ifm_active |= IFM_1000_T;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_SGMIIEXTPHY:
- ifmr->ifm_active |= IFM_1000_SGMII;
- break;
- default:
- /*
- * Workaround:
- * Don't return IFM_UNKNOWN until
- * Stratus return proper media_type
- */
- ifmr->ifm_active |= IFM_1000_KX;
- break;
}
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_2_5GB:
- switch (phy_type) {
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKX:
- ifmr->ifm_active |= IFM_2500_KX;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASET:
- ifmr->ifm_active |= IFM_2500_T;
- break;
- default:
- ifmr->ifm_active |= IFM_UNKNOWN;
- break;
- }
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_10GB:
- switch (phy_type) {
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASECR:
- ifmr->ifm_active |= IFM_10G_CR1;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR4:
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR2:
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR:
- ifmr->ifm_active |= IFM_10G_KR;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASELR:
- ifmr->ifm_active |= IFM_10G_LR;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASESR:
- ifmr->ifm_active |= IFM_10G_SR;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKX:
- ifmr->ifm_active |= IFM_10G_KX4;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASET:
- ifmr->ifm_active |= IFM_10G_T;
- break;
- default:
- /*
- * Workaround:
- * Don't return IFM_UNKNOWN until
- * Stratus return proper media_type
- */
- ifmr->ifm_active |= IFM_10G_CR1;
- break;
- }
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_20GB:
- ifmr->ifm_active |= IFM_20G_KR2;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_25GB:
- switch (phy_type) {
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASECR:
- ifmr->ifm_active |= IFM_25G_CR;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR4:
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR2:
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR:
- ifmr->ifm_active |= IFM_25G_KR;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASESR:
- ifmr->ifm_active |= IFM_25G_SR;
- break;
- default:
- /*
- * Workaround:
- * Don't return IFM_UNKNOWN until
- * Stratus return proper media_type
- */
- ifmr->ifm_active |= IFM_25G_CR;
- break;
- }
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_40GB:
- switch (phy_type) {
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASECR:
- ifmr->ifm_active |= IFM_40G_CR4;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR4:
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR2:
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR:
- ifmr->ifm_active |= IFM_40G_KR4;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASELR:
- ifmr->ifm_active |= IFM_40G_LR4;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASESR:
- ifmr->ifm_active |= IFM_40G_SR4;
- break;
- default:
- ifmr->ifm_active |= IFM_UNKNOWN;
- break;
- }
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_50GB:
- switch (phy_type) {
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASECR:
- ifmr->ifm_active |= IFM_50G_CR2;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR4:
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR2:
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR:
- ifmr->ifm_active |= IFM_50G_KR2;
- break;
- default:
- /*
- * Workaround:
- * Don't return IFM_UNKNOWN until
- * Stratus return proper media_type
- */
- ifmr->ifm_active |= IFM_50G_CR2;
- break;
- }
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_100GB:
- switch (phy_type) {
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASECR:
- ifmr->ifm_active |= IFM_100G_CR4;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR4:
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR2:
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR:
- ifmr->ifm_active |= IFM_100G_KR4;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASELR:
- ifmr->ifm_active |= IFM_100G_LR4;
- break;
- case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASESR:
- ifmr->ifm_active |= IFM_100G_SR4;
- break;
- default:
- /*
- * Workaround:
- * Don't return IFM_UNKNOWN until
- * Stratus return proper media_type
- */
- ifmr->ifm_active |= IFM_100G_CR4;
- break;
- }
- default:
- return;
}
+ ifmr->ifm_active |= active_media;
if (link_info->flow_ctrl.rx)
ifmr->ifm_active |= IFM_ETH_RXPAUSE;
@@ -2184,6 +2033,8 @@
case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_1G_BASET:
case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASET:
case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASETE:
+ BNXT_IFMEDIA_ADD(supported, SPEEDS_10GB, IFM_10G_T);
+ BNXT_IFMEDIA_ADD(supported, SPEEDS_2_5GB, IFM_2500_T);
BNXT_IFMEDIA_ADD(supported, SPEEDS_1GB, IFM_1000_T);
BNXT_IFMEDIA_ADD(supported, SPEEDS_100MB, IFM_100_T);
BNXT_IFMEDIA_ADD(supported, SPEEDS_10MB, IFM_10_T);
@@ -2191,6 +2042,7 @@
case HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKX:
BNXT_IFMEDIA_ADD(supported, SPEEDS_10GB, IFM_10G_KR);
+ BNXT_IFMEDIA_ADD(supported, SPEEDS_2_5GB, IFM_2500_KX);
BNXT_IFMEDIA_ADD(supported, SPEEDS_1GB, IFM_1000_KX);
break;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Apr 20, 5:44 PM (12 h, 5 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31854546
Default Alt Text
D12896.diff (6 KB)
Attached To
Mode
D12896: bnxt: Add support for new phy_types and speeds - Part #2
Attached
Detach File
Event Timeline
Log In to Comment