__e1000_read_kmrn_reg(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ¦‹ __e1000_read_kmrn_reg β€” read a kumeran register πŸ’…

okay so bestie, welcome to the kernel API manual for __e1000_read_kmrn_reg, straight out of the Kernel API Manual ✨. This is the little helper that goes and peeks at a kumeran register for you, no cap. Let's get into it 🫢


✨ NAME ✨

__e1000_read_kmrn_reg β€” read kumeran register πŸ’–


🌸 SYNOPSIS 🌸

s32 __e1000_read_kmrn_reg (struct e1000_hw *hw , u32 offset , u16 *data , bool locked );

it's giving "four arguments, one job" and honestly? iconic πŸŽ€


πŸ’œ ARGUMENTS πŸ’œ

  • hw β€” pointer to the HW structure. your main character struct fr fr, this is the hardware you're talking to 🌈
  • offset β€” register offset to be read. literally which register you want, iykyk πŸ”₯
  • data β€” pointer to the read data. this is where the answer lands, so bestie it better be valid πŸ’€
  • locked β€” semaphore has already been acquired or not. basically: have you already grabbed the lock, or do you need me to grab it πŸ™ˆ

🧚 DESCRIPTION 🧚

okay so here's the vibe check on what this thing actually does πŸ‘‘

It acquires the semaphore, if necessary β€” if necessary being the whole reason locked exists, so you're not out here double-locking like a menace 😭. Then it reads the PHY register at offset using the kumeran interface πŸ¦‹.

The information it retrieved gets stored in data β€” that's the whole point of the pointer, bestie, so it has somewhere to put the goods πŸ’–.

And then: release any acquired semaphores before exiting. not me stressing this β€” it has to clean up after itself before it leaves, periodt ✨. No semaphore left behind, no cap.


⭐ SEE ALSO ⭐

the source lives here, in the kernel file ./drivers/net/ethernet/intel/e1000e/phy.c πŸ“

and then there's... the friend group. the whole entire friend group. okay so gather round, this is the full guest list, every single one of them, in order πŸ‘‘:

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), 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_phy_has_link_generic(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)

like I said. the whole friend group. every last one ate, no notes πŸ’…


and yeah β€” that source path is the same kernel file the page footer points at (./drivers/net/ethernet/intel/e1000e/phy.c), that's not a typo, they're the same place πŸŽ€

mwah πŸ’‹ that's the whole page bestie β€” brought to you by the Kernel API Manual (that's the source/version), dated October 2026, and signed off from ./drivers/net/ethernet/intel/e1000e/phy.c because that's where all the drama lives 🌸 go read your kumeran register, you've got this πŸ‘‘βœ¨

πŸ“¦ where this page comes from