e1000e_force_mac_fc(9)
π e1000e_force_mac_fc(9) β Kernel API Manual π
okay so bestie, welcome to the <cyan>e1000e_force_mac_fc(9)</cyan> page, straight out of the Kernel API Manual β¨ this one's a little function with big main-character energy, and honestly? she's giving "i set two bits and the whole link behaves". let's get into it π
β¨ NAME β¨
e1000e_force_mac_fc β literally forces the MAC's flow control settings. that's the whole job. no cap π
πΈ SYNOPSIS πΈ
s32 e1000e_force_mac_fc (struct e1000_hw *hw );
π¦ ARGUMENTS π¦
hwβ pointer to the HW structure. yeah, the classic. hand her the hardware struct and she'll do her thing π«Ά
π₯ DESCRIPTION π₯
so what's she actually doing? forcing the MAC's flow control settings, obviously πββοΈ she sets the TFCE and RFCE bits in the device control register so they reflect the adapter settings β like, the bits have to match the adapter, that's the vibe check.
now here's the part where you gotta pay attention, bestie π TFCE and RFCE need to be explicitly set by software when a copper PHY is used. why? because autonegotiation is managed by the PHY rather than the MAC β the MAC isn't handling it, so nobody's setting those bits for you. it's giving "do it yourself or it doesn't happen" π
and that's not the only case! software must also configure these bits when link is forced on a fiber connection. so: copper PHY β you set 'em. forced link on fiber β you set 'em too. write that down π
π SEE ALSO π
okay the extended fam is LONG and honestly iconic for it π first up, the kernel file:
- Kernel file
./drivers/net/ethernet/intel/e1000e/mac.c
and now the whole group chat π:
e1000e_get_bus_info_pcie(9)e1000_set_lan_id_multi_port_pcie(9)e1000_set_lan_id_single_port(9)e1000_clear_vfta_generic(9)e1000_write_vfta_generic(9)e1000e_init_rx_addrs(9)e1000_check_alt_mac_addr_generic(9)e1000e_rar_set_generic(9)e1000_hash_mc_addr(9)e1000e_update_mc_addr_list_generic(9)e1000e_clear_hw_cntrs_base(9)e1000e_check_for_copper_link(9)e1000e_check_for_fiber_link(9)e1000e_check_for_serdes_link(9)e1000_set_default_fc_generic(9)e1000e_setup_link_generic(9)e1000_commit_fc_settings_generic(9)e1000_poll_fiber_serdes_link_generic(9)e1000e_setup_fiber_serdes_link(9)e1000e_config_collision_dist_generic(9)e1000e_set_fc_watermarks(9)e1000e_config_fc_after_link_up(9)e1000e_get_speed_and_duplex_copper(9)e1000e_get_speed_and_duplex_fiber_serdes(9)e1000e_get_hw_semaphore(9)e1000e_put_hw_semaphore(9)e1000e_get_auto_rd_done(9)e1000e_valid_led_default(9)e1000e_id_led_init_generic(9)e1000e_setup_led_generic(9)e1000e_cleanup_led_generic(9)e1000e_blink_led_generic(9)e1000e_led_on_generic(9)e1000e_led_off_generic(9)e1000e_set_pcie_no_snoop(9)e1000e_disable_pcie_master(9)e1000e_reset_adaptive(9)e1000e_update_adaptive(9)
like i said. huge fam. we love them all π
lowkey a reminder: thoseTFCEandRFCEbits don't set themselves on copper PHY setups or forced fiber links β software has to do it. don't leave her hanging π
β¨ and that's the page, bestie β¨ this cutie came from ./drivers/net/ethernet/intel/e... and the date stamp is October 2026 β that's the source and the version, mentioned here at the very end instead of copied as a boring footer line, because we're doing cute sign-offs now ππ
mwah, go set those bits π
π¦ 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