__e1000_read_phy_reg_hv(9)
π __e1000_read_phy_reg_hv β the kernel API manual, bestie edition π
Okay so first things first, the title on this one is __e1000_read_phy_reg_hv(9) and it lives in the Kernel API Manual, which is literally the group chat where all the kernel functions hang out. And yes, there are two leading underscores β that's not a typo, that's main character energy. π
β¨ NAME β¨
__e1000_read_phy_reg_hv β read an HV PHY register π¦
Like, that's it. That's the whole job. It reads a PHY register, and it's the HV flavour specifically. No cap.
πΈ SYNOPSIS πΈ
s32 __e1000_read_phy_reg_hv (struct e1000_hw *hw , u32 offset , u16
*data , bool locked , bool page_set );
Returns an s32 (yes, a signed 32-bit int, she's got range), takes a pointer to the HW structure, an offset, a pointer to where the data goes, and two bools that control whether the semaphore is already held and whether the page is already set up. Five arguments, all of them important, none of them optional. Slay. π
π ARGUMENTS π
hwβ pointer to the HW structure. Like, the whole hardware vibe lives in here. π«Άoffsetβ the register offset you wanna read. Exactly which register, pls be specific. π₯dataβ pointer to the read data. This is where the answer gets dropped off. It's an out-param and she's the star of the show. βlockedβ says whether the semaphore has already been acquired or not. Basically: "did somebody already grab the lock, or do I need to?" πpage_setβBM_WUC_PAGEis already set and access is enabled. So like, the page situation is handled, don't worry about it. π
π§ DESCRIPTION π§
So here's the tea, bestie. π This function acquires the semaphore if necessary β that "if necessary" is huge, it's literally the whole reason the locked argument exists β and then reads the PHY register at offset and stores the retrieved info in data.
And then it releases any semaphore it acquired before exiting. Every time. No leaking locks, no messy exits, she's responsible like that. Your fave could never. β¨
Lowkey important: if it grabbed a semaphore, it gives it back before it leaves. That's the contract. Don't be the function that forgets, okay? π
π SEE ALSO π
And now, the moment you've all been waiting for: the entire extended friend group. She knows everyone, fr fr. π
First up, the source file this whole situation lives in:
Kernel file ./drivers/net/ethernet/intel/e1000e/phy.c
Then, the whole (9) crew, alphabetically-ish, all seventy-three of them:
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_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_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)
See what I mean? Iconic. Networking function royalty, the whole lot of them. π
π sign-off π
This little masterpiece comes to you from the source file ./drivers/net/ethernet/intel/e... (it got cut off in the footer, don't come for her, she was running out of room π) and it's dated October 2026. The page itself is __e1000_read_phy_reg_hv(9), in case you forgot already, which, fair. π
Anyway bestie, go read those HV PHY registers. Responsibly. With the semaphore. πβ¨π
π¦ 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