e1000_check_downshift(9)
π e1000_check_downshift β the manual page, but make it cute
okay so bestie, this one lives in the kernel API manual (e1000_check_downshift(9)) and it's basically the "did the link downshift??" detective function. tiny function, big responsibility. let's get into it π΅οΈββοΈβ¨
β¨ NAME β¨
e1000_check_downshift β check if Downshift occurred π
like, literally that's the whole job. one question. one answer. iconic.
π¦ SYNOPSIS π¦
s32 e1000_check_downshift (struct e1000_hw *hw );
she takes a pointer, she gives you an s32. no cap. π«Ά
π ARGUMENTS π
hwβ a struct containing variables accessed by shared code. yes bestie, shared code, so be normal about it π
β RETURN β
E1000_ERR_XXXE1000_SUCCESS
those are the vibes you can get back. that's the list. π
πΈ DESCRIPTION πΈ
okay so here's the tea β β the behaviour actually depends on which phy you're dealing with, because of course it does.
For phy's older than IGP, this function reads the Downshift bit in the Phy Specific Status register.
For IGP phy's, it reads the Downgrade bit in the Link Health register.
β οΈ and here's the part that matters, bestie: in IGP this bit is latched high, so the driver must read it immediately after link is established. like, immediately immediately. not "after I finish my iced coffee" immediately. ππ₯
π SEE ALSO π
first up, the kernel file: ./drivers/net/ethernet/intel/e1000/e1000_hw.c
and now the whole friend group π«Ά β every single one of these:
e1000_set_phy_type(9)e1000_phy_init_script(9)e1000_set_mac_type(9)e1000_set_media_type(9)e1000_reset_hw(9)e1000_init_hw(9)e1000_adjust_serdes_amplitude(9)e1000_setup_link(9)e1000_setup_fiber_serdes_link(9)e1000_copper_link_rtl_setup(9)e1000_copper_link_preconfig(9)e1000_copper_link_igp_setup(9)e1000_copper_link_mgp_setup(9)e1000_copper_link_autoneg(9)e1000_copper_link_postconfig(9)e1000_setup_copper_link(9)e1000_phy_setup_autoneg(9)e1000_phy_force_speed_duplex(9)e1000_config_collision_dist(9)e1000_config_mac_to_phy(9)e1000_force_mac_fc(9)e1000_config_fc_after_link_up(9)e1000_check_for_serdes_link_generic(9)e1000_check_for_link(9)e1000_get_speed_and_duplex(9)e1000_wait_autoneg(9)e1000_raise_mdi_clk(9)e1000_lower_mdi_clk(9)e1000_shift_out_mdi_bits(9)e1000_shift_in_mdi_bits(9)e1000_read_phy_reg(9)e1000_write_phy_reg(9)e1000_phy_hw_reset(9)e1000_phy_reset(9)e1000_detect_gig_phy(9)e1000_phy_reset_dsp(9)e1000_phy_igp_get_info(9)e1000_phy_m88_get_info(9)e1000_phy_get_info(9)e1000_init_eeprom_params(9)e1000_raise_ee_clk(9)e1000_lower_ee_clk(9)e1000_shift_out_ee_bits(9)e1000_shift_in_ee_bits(9)e1000_acquire_eeprom(9)e1000_standby_eeprom(9)e1000_release_eeprom(9)e1000_spi_eeprom_ready(9)e1000_read_eeprom(9)e1000_validate_eeprom_checksum(9)e1000_update_eeprom_checksum(9)e1000_write_eeprom(9)e1000_write_eeprom_spi(9)e1000_write_eeprom_microwire(9)e1000_read_mac_addr(9)e1000_init_rx_addrs(9)e1000_hash_mc_addr(9)e1000_rar_set(9)e1000_write_vfta(9)e1000_clear_vfta(9)e1000_setup_led(9)e1000_cleanup_led(9)e1000_led_on(9)e1000_led_off(9)e1000_clear_hw_cntrs(9)e1000_reset_adaptive(9)e1000_update_adaptive(9)e1000_get_bus_info(9)e1000_write_reg_io(9)e1000_get_cable_length(9)e1000_check_polarity(9)e1000_config_dsp_after_link_change(9)e1000_set_phy_mode(9)e1000_set_d3_lplu_state(9)e1000_set_vco_speed(9)e1000_enable_mng_pass_thru(9)e1000_get_auto_rd_done(9)e1000_get_phy_cfg_done(9)
and that's the whole page, bestie π§π this cutie dropped from source/version ./drivers/net/ethernet/intel/e... back in October 2026, and the page itself is still named e1000_check_downshift(9) β go read it, slay, periodt. ππΈ
π¦ 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