igb_phy_forc...d_duplex_m88(9)
π NAME π
igb_phy_force_speed_duplex_m88 β the function that forces speed/duplex for the m88 PHY, and yes bestie it's as iconic as it sounds β¨
okay so real quick before we dive in β this is from the Kernel API Manual section, page igb_phy_forc...d_duplex_m88(9) (the title got cut off, we love a dramatic ellipsis π
). Let's get into it.
π¦ SYNOPSIS π¦
s32 igb_phy_force_speed_duplex_m88 (struct e1000_hw *hw );
πΈ ARGUMENTS πΈ
hwβ pointer to the HW structure. that's it. that's the whole arg list. one (1) pointer, and it's giving main character energy π
β¨ DESCRIPTION β¨
okay so here's the tea π β this function calls the PHY setup function to, you guessed it, force speed and duplex. no vibes-based negotiation here, we're forcing it, periodt.
then it clears the auto-crossover so MDI gets forced manually. manual mode only, no cap. π
after that it resets the PHY to commit the changes β like hitting save, but for hardware πΎβ¨
and here's the part where you gotta pay attention: if time expires while waiting for link up, we reset the DSP. yes, really. time runs out, DSP gets reset, that's the deal. π
after the reset, TX_CLK and CRS on TX must be set β like, mandatory, not optional, don't skip this step bestie π«Ά
then: return successful upon successful completion, else return the corresponding error code. that's the whole return situation. slay.
π SEE ALSO π
first up, the actual kernel file this cutie lives in β literally go read it:
./drivers/net/ethernet/intel/igb/e1000_phy.c
and now the friend group π (all of these are (9) pages btw, iykyk):
igb_check_reset_block(9)igb_get_phy_id(9)igb_phy_reset_dsp(9)igb_read_phy_reg_mdic(9)igb_write_phy_reg_mdic(9)igb_read_phy_reg_i2c(9)igb_write_phy_reg_i2c(9)igb_read_sfp_data_byte(9)igb_read_phy_reg_igp(9)igb_write_phy_reg_igp(9)igb_copper_link_setup_82580(9)igb_copper_link_setup_m88(9)igb_copper_link_setup_m88_gen2(9)igb_copper_link_setup_igp(9)igb_copper_link_autoneg(9)igb_phy_setup_autoneg(9)igb_setup_copper_link(9)igb_phy_force_speed_duplex_igp(9)igb_phy_force_speed_duplex_setup(9)igb_set_d3_lplu_state(9)igb_check_downshift(9)igb_check_polarity_m88(9)igb_check_polarity_igp(9)igb_wait_autoneg(9)igb_phy_has_link(9)igb_get_cable_length_m88(9)igb_get_cable_length_igp_2(9)igb_get_phy_info_m88(9)igb_get_phy_info_igp(9)igb_phy_sw_reset(9)igb_phy_hw_reset(9)igb_phy_init_script_igp3(9)igb_initialize_M88E1512_phy(9)igb_initialize_M88E1543_phy(9)igb_power_up_phy_copper(9)igb_power_down_phy_copper(9)igb_check_polarity_82580(9)igb_phy_force_speed_duplex_82580(9)igb_get_phy_info_82580(9)igb_get_cable_length_82580(9)igb_set_master_slave_mode(9)
like, that's the whole extended universe π go click around, it's fine, i'll wait.
and that's the page!! π sourced straight from ./drivers/net/ethernet/intel/igb, dated October 2026 β so mark your calendars, bestie, this manual page is from the future πβ¨ mwah, love u, go force some duplex π«Άπ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms