/* Multiple levels of nesting are possible. However typically this is *limitedtonestedDSAlikelayer,aMUXlayer,andthenormal *user.Insteadoftryingtohandlethegeneralcase,justdefine *thesecases.
*/ enum mdio_mutex_lock_class {
MDIO_MUTEX_NORMAL,
MDIO_MUTEX_MUX,
MDIO_MUTEX_NESTED,
};
/* Bus address of the MDIO device (0-31) */ int addr; int flags; int reset_state; struct gpio_desc *reset_gpio; struct reset_control *reset_ctrl; unsignedint reset_assert_delay; unsignedint reset_deassert_delay;
};
struct net_device *dev; int (*mdio_read)(struct net_device *dev, int prtad, int devad,
u16 addr); int (*mdio_write)(struct net_device *dev, int prtad, int devad,
u16 addr, u16 val);
};
if (linkmode_test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
advertising))
result |= MDIO_AN_10GBT_CTRL_ADV2_5G; if (linkmode_test_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT,
advertising))
result |= MDIO_AN_10GBT_CTRL_ADV5G; if (linkmode_test_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
advertising))
result |= MDIO_AN_10GBT_CTRL_ADV10G;
if (linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT, advertising))
result |= MDIO_AN_T1_ADV_L_PAUSE_CAP; if (linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, advertising))
result |= MDIO_AN_T1_ADV_L_PAUSE_ASYM;
if (linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT1L_Full_BIT, advertising))
result |= MDIO_AN_T1_ADV_M_B10L; if (linkmode_test_bit(ETHTOOL_LINK_MODE_100baseT1_Full_BIT, advertising))
result |= MDIO_AN_T1_ADV_M_100BT1; if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT1_Full_BIT, advertising))
result |= MDIO_AN_T1_ADV_M_1000BT1;
return result;
}
/** *mii_eee_cap1_mod_linkmode_t() *@adv:targetthelinkmodeadvertisementsettings *@val:registervalue * *Afunctionthattranslatesvalueoffollowingregisterstothelinkmode: *IEEE802.3-201845.2.3.10"EEEcontrolandcapability1"register(3.20) *IEEE802.3-201845.2.7.13"EEEadvertisement1"register(7.60) *IEEE802.3-201845.2.7.14"EEElinkpartnerability1"register(7.61)
*/ staticinlinevoid mii_eee_cap1_mod_linkmode_t(unsignedlong *adv, u32 val)
{
linkmode_mod_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
adv, val & MDIO_EEE_100TX);
linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
adv, val & MDIO_EEE_1000T);
linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
adv, val & MDIO_EEE_10GT);
linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
adv, val & MDIO_EEE_1000KX);
linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT,
adv, val & MDIO_EEE_10GKX4);
linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseKR_Full_BIT,
adv, val & MDIO_EEE_10GKR);
}
if (linkmode_test_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, adv))
result |= MDIO_EEE_100TX; if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, adv))
result |= MDIO_EEE_1000T; if (linkmode_test_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, adv))
result |= MDIO_EEE_10GT; if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseKX_Full_BIT, adv))
result |= MDIO_EEE_1000KX; if (linkmode_test_bit(ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT, adv))
result |= MDIO_EEE_10GKX4; if (linkmode_test_bit(ETHTOOL_LINK_MODE_10000baseKR_Full_BIT, adv))
result |= MDIO_EEE_10GKR;
if (linkmode_test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, adv))
result |= MDIO_EEE_2_5GT; if (linkmode_test_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT, adv))
result |= MDIO_EEE_5GT;
if (linkmode_test_bit(ETHTOOL_LINK_MODE_10baseT1L_Full_BIT, adv))
result |= MDIO_AN_10BT1_AN_CTRL_ADV_EEE_T1L;
return result;
}
/** *mii_c73_mod_linkmode-convertaClause73advertisementtolinkmodes *@adv:linkmodeadvertisementsetting *@lpa:arrayofthreeu16scontainingtheadvertisement * *ConvertanIEEE802.3Clause73advertisementtoethtoollinkmodes.
*/ staticinlinevoid mii_c73_mod_linkmode(unsignedlong *adv, u16 *lpa)
{
linkmode_mod_bit(ETHTOOL_LINK_MODE_Pause_BIT,
adv, lpa[0] & MDIO_AN_C73_0_PAUSE);
linkmode_mod_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
adv, lpa[0] & MDIO_AN_C73_0_ASM_DIR);
linkmode_mod_bit(ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
adv, lpa[1] & MDIO_AN_C73_1_1000BASE_KX);
linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT,
adv, lpa[1] & MDIO_AN_C73_1_10GBASE_KX4);
linkmode_mod_bit(ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT,
adv, lpa[1] & MDIO_AN_C73_1_40GBASE_KR4);
linkmode_mod_bit(ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT,
adv, lpa[1] & MDIO_AN_C73_1_40GBASE_CR4); /* 100GBASE_CR10 and 100GBASE_KP4 not implemented */
linkmode_mod_bit(ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT,
adv, lpa[1] & MDIO_AN_C73_1_100GBASE_KR4);
linkmode_mod_bit(ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT,
adv, lpa[1] & MDIO_AN_C73_1_100GBASE_CR4); /* 25GBASE_R_S not implemented */ /* The 25GBASE_R bit can be used for 25Gbase KR or CR modes */
linkmode_mod_bit(ETHTOOL_LINK_MODE_25000baseKR_Full_BIT,
adv, lpa[1] & MDIO_AN_C73_1_25GBASE_R);
linkmode_mod_bit(ETHTOOL_LINK_MODE_25000baseCR_Full_BIT,
adv, lpa[1] & MDIO_AN_C73_1_25GBASE_R);
linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseKR_Full_BIT,
adv, lpa[1] & MDIO_AN_C73_1_10GBASE_KR);
linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseX_Full_BIT,
adv, lpa[2] & MDIO_AN_C73_2_2500BASE_KX); /* 5GBASE_KR not implemented */
}
int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum); int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val); int __mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask,
u16 set); int __mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum,
u16 mask, u16 set);
int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum); int mdiobus_read_nested(struct mii_bus *bus, int addr, u32 regnum); int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val); int mdiobus_write_nested(struct mii_bus *bus, int addr, u32 regnum, u16 val); int mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask,
u16 set); int mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum,
u16 mask, u16 set); int __mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum); int mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum); int mdiobus_c45_read_nested(struct mii_bus *bus, int addr, int devad,
u32 regnum); int __mdiobus_c45_write(struct mii_bus *bus, int addr, int devad, u32 regnum,
u16 val); int mdiobus_c45_write(struct mii_bus *bus, int addr, int devad, u32 regnum,
u16 val); int mdiobus_c45_write_nested(struct mii_bus *bus, int addr, int devad,
u32 regnum, u16 val); int mdiobus_c45_modify(struct mii_bus *bus, int addr, int devad, u32 regnum,
u16 mask, u16 set);
int mdiobus_c45_modify_changed(struct mii_bus *bus, int addr, int devad,
u32 regnum, u16 mask, u16 set);
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.21Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-09-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.