e1000e_phy_has_link_generic(9)
π e1000e_phy_has_link_generic(9) β the link-checking bestie π
Okay so first things first: this page is e1000e_phy_has_link_generic(9), and it lives in the Kernel API Manual, and honestly? It's giving "quiet but essential." No cap, bestie β this little function is out here polling your PHY so you know whether the cable is actually doing its thing or just lying to you. β¨
πΈ NAME πΈ
e1000e_phy_has_link_generic β literally just polls the PHY for link. That's it. That's the whole vibe. π
π¦ SYNOPSIS π¦
s32 e1000e_phy_has_link_generic (struct e1000_hw *hw , u32 iterations ,
u32 usec_interval , bool *success );
Look at that signature. Immaculate. Four parameters, one return of type s32, and a whole lot of patience. π
π ARGUMENTS π
hwβ pointer to the HW structure. Your hardware's whole personality lives in here, so be nice to it. π«Άiterationsβ the number of times to poll for link. Think of it as your "how many times am I willing to ask before I accept the answer" budget. π₯usec_intervalβ the delay between polling attempts, in microseconds. Yes, microseconds. We are nothing if not precise. βsuccessβ pointer to whether polling was successful or not. You hand it abool *and it comes back telling you how it went. Iconic, honestly. π
π DESCRIPTION π
So here's the tea: e1000e_phy_has_link_generic polls the PHY status register for link, 'iterations' number of times. That's the entire plot and it ate. π
Like β it just keeps checking the PHY status register, up to iterations times, waiting usec_interval microseconds between each attempt, and then it tells you whether it found link via that success pointer. Patient, methodical, main character energy for a helper function. πβ¨
No drama, no surprises, just a loop doing exactly what it says on the tin. We love a function with clear boundaries. π§
π SEE ALSO π
The kernel file it lives in, bestie:
./drivers/net/ethernet/intel/e1000e/phy.c
And then there's the entire friend group β the whole PHY register access extended universe. Prepare yourself, this list is long and every single one of them matters:
e1000e_check_reset_block_generic(9),e1000e_get_phy_id(9),e1000e_phy_reset_dsp(9)e1000e_read_phy_reg_mdic(9),e1000e_write_phy_reg_mdic(9),e1000e_read_phy_reg_m88(9),e1000e_write_phy_reg_m88(9)e1000_set_page_igp(9),__e1000e_read_phy_reg_igp(9),e1000e_read_phy_reg_igp(9),e1000e_read_phy_reg_igp_locked(9),__e1000e_write_phy_reg_igp(9),e1000e_write_phy_reg_igp(9),e1000e_write_phy_reg_igp_locked(9)__e1000_read_kmrn_reg(9),e1000e_read_kmrn_reg(9),e1000e_read_kmrn_reg_locked(9),__e1000_write_kmrn_reg(9),e1000e_write_kmrn_reg(9),e1000e_write_kmrn_reg_locked(9)e1000_set_master_slave_mode(9),e1000_copper_link_setup_82577(9),e1000e_copper_link_setup_m88(9),e1000e_copper_link_setup_igp(9)e1000_phy_setup_autoneg(9),e1000_copper_link_autoneg(9),e1000e_setup_copper_link(9)e1000e_phy_force_speed_duplex_igp(9),e1000e_phy_force_speed_duplex_m88(9),e1000_phy_force_speed_duplex_ife(9),e1000e_phy_force_speed_duplex_setup(9)e1000e_set_d3_lplu_state(9),e1000e_check_downshift(9)e1000_check_polarity_m88(9),e1000_check_polarity_igp(9),e1000_check_polarity_ife(9)e1000_wait_autoneg(9),e1000e_get_cable_length_m88(9),e1000e_get_cable_length_igp_2(9)e1000e_get_phy_info_m88(9),e1000e_get_phy_info_igp(9),e1000_get_phy_info_ife(9)e1000e_phy_sw_reset(9),e1000e_phy_hw_reset_generic(9),e1000e_get_cfg_done_generic(9),e1000e_phy_init_script_igp3(9)e1000e_get_phy_type_from_id(9),e1000e_determine_phy_address(9),e1000_get_phy_addr_for_bm_page(9)e1000e_write_phy_reg_bm(9),e1000e_read_phy_reg_bm(9),e1000e_read_phy_reg_bm2(9),e1000e_write_phy_reg_bm2(9)e1000_enable_phy_wakeup_reg_access_bm(9),e1000_disable_phy_wakeup_reg_access_bm(9),e1000_access_phy_wakeup_reg_bm(9)e1000_power_up_phy_copper(9),e1000_power_down_phy_copper(9)__e1000_read_phy_reg_hv(9),e1000_read_phy_reg_hv(9),e1000_read_phy_reg_hv_locked(9),e1000_read_phy_reg_page_hv(9)__e1000_write_phy_reg_hv(9),e1000_write_phy_reg_hv(9),e1000_write_phy_reg_hv_locked(9),e1000_write_phy_reg_page_hv(9)e1000_get_phy_addr_for_hv_page(9),e1000_access_phy_debug_regs_hv(9),e1000_link_stall_workaround_hv(9)e1000_check_polarity_82577(9),e1000_phy_force_speed_duplex_82577(9),e1000_get_phy_info_82577(9),e1000_get_cable_length_82577(9)
Yeah. That's the whole squad. Go say hi. π¦π
Friendly reminder: the(9)in all those names means they're kernel API manual pages, so hit up your usualman 9setup, iykyk. π
And that's the page!! Sign-off time: this little beauty comes from ./drivers/net/ethernet/intel/e... and it's dated October 2026, and the manual name is e1000e_phy_has_link_generic(9) in case you forgot already. Go poll that PHY, bestie β you've got iterations tries and I believe in every single one of them. ππΈβ¨
π¦ 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