STRUCT KSZ_COUNTER_INFO(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– NAME πŸ’–

okay so bestie, welcome to the Kernel API Manual ✨ β€” this page is all about struct ksz_counter_info, which is literally the OS dependent counter information data structure πŸ’…. that's it, that's the whole vibe. it's the lil struct that keeps track of counter-reading business in an OS-dependent way, and we're gonna walk through every single member together, no cap 🫢


🌸 SYNOPSIS 🌸

struct ksz_counter_info {
    wait_queue_head_t counter;
    unsigned long time;
    int read;
 };

she's small, she's iconic, she has exactly three members πŸ‘‘ ngl sometimes the tiny structs are the ones with the most main character energy πŸ¦‹


πŸŽ€ Members πŸŽ€

  • counter β€” the wait queue that gets woken up after the counters are read 😴➑️✨ like, it's literally in the name, bestie. wakeup happens post-read, that's the whole point.
  • time β€” the next time in jiffies to read the counter ⏰ (yes, jiffies, the kernel's fave unit of time, iykyk). it's when the next counter read is scheduled to go down.
  • read β€” an indication of whether the counters were read in full or not πŸ‘€πŸ” so like, did we get the whole thing or nah? this field is the receipts.

πŸ¦‹ SEE ALSO πŸ¦‹

okay so this is the part where ksz884x.c shows out πŸ’€ the kernel file is ./drivers/net/ethernet/micrel/ksz884x.c, and the whole friend group is linked below β€” every single one, fr fr, no skipping πŸ™ˆ

the structs: struct ksz_hw_desc(9), struct ksz_sw_desc(9), struct ksz_dma_buf(9), struct ksz_desc(9), struct ksz_desc_info(9), struct ksz_mac_table(9), struct ksz_vlan_table(9), struct ksz_port_mib(9), struct ksz_port_cfg(9), struct ksz_switch(9), struct ksz_port_info(9), struct ksz_hw(9), struct ksz_port(9), struct ksz_timer_info(9), struct ksz_shared_mem(9), struct dev_info(9), struct dev_priv(9) ✨

the hardware + register crew: hw_turn_on_intr(9), hw_block_intr(9), sw_r_table(9), sw_w_table_64(9), sw_w_sta_mac_table(9), sw_r_vlan_table(9), port_r_mib_cnt(9), port_r_mib_pkt(9), port_r_cnt(9), port_init_cnt(9), port_cfg(9), port_r8(9), port_r16(9), port_w16(9), sw_chk(9), sw_cfg(9), sw_cfg_broad_storm(9), sw_get_broad_storm(9), sw_dis_broad_storm(9), sw_ena_broad_storm(9), sw_init_broad_storm(9), hw_cfg_broad_storm(9), sw_dis_prio_rate(9), sw_init_prio_rate(9), sw_dis_diffserv(9), sw_dis_802_1p(9), sw_cfg_replace_null_vid(9), sw_cfg_replace_vid(9), sw_cfg_port_based(9), sw_dis_multi_queue(9), sw_init_prio(9), port_get_def_vid(9), sw_init_vlan(9), sw_cfg_port_base_vlan(9), sw_set_addr(9), sw_set_global_ctrl(9), port_set_stp_state(9), sw_clr_sta_mac_table(9), sw_init_stp(9), sw_block_addr(9), hw_r_phy(9), hw_w_phy(9), eeprom_read(9), eeprom_write(9), port_get_link_speed(9), port_set_link_speed(9), port_force_link_speed(9) πŸ”₯

the wol squad: hw_chk_wol_pme_status(9), hw_clr_wol_pme_status(9), hw_cfg_wol_pme(9), hw_cfg_wol(9), hw_set_wol_frame(9), hw_add_wol_arp(9), hw_add_wol_bcast(9), hw_add_wol_mcast(9), hw_add_wol_ucast(9), hw_enable_wol(9) 🌈

the init + tx/rx besties: hw_init(9), hw_reset(9), hw_setup(9), hw_setup_intr(9), hw_set_desc_base(9), hw_start_rx(9), hw_stop_rx(9), hw_start_tx(9), hw_stop_tx(9), hw_disable(9), hw_enable(9), hw_alloc_pkt(9), hw_send_pkt(9), hw_set_addr(9), hw_read_addr(9), hw_clr_multicast(9), hw_set_grp_addr(9), hw_set_multicast(9), hw_set_promiscuous(9), sw_enable(9), sw_setup(9) πŸ’œ

the timer + memory girlies: ksz_start_timer(9), ksz_stop_timer(9), ksz_alloc_soft_desc(9), ksz_alloc_desc(9), free_dma_buf(9), ksz_init_rx_buffers(9), ksz_alloc_mem(9), ksz_free_desc(9), ksz_free_buffers(9), ksz_free_mem(9) πŸŽ€

the netdev collective (they ate, honestly): send_packet(9), transmit_cleanup(9), tx_done(9), netdev_tx(9), netdev_tx_timeout(9), netdev_intr(9), netdev_close(9), netdev_open(9), netdev_query_statistics(9), netdev_set_mac_address(9), netdev_set_rx_mode(9), netdev_ioctl(9), mdio_read(9), mdio_write(9), netdev_get_link_ksettings(9), netdev_set_link_ksettings(9), netdev_nway_reset(9), netdev_get_link(9), netdev_get_drvinfo(9), netdev_get_regs_len(9), netdev_get_regs(9), netdev_get_wol(9), netdev_set_wol(9), netdev_get_msglevel(9), netdev_set_msglevel(9), netdev_get_eeprom_len(9), netdev_get_eeprom(9), netdev_set_eeprom(9), netdev_get_pauseparam(9), netdev_set_pauseparam(9), netdev_get_ringparam(9), netdev_get_strings(9), netdev_get_sset_count(9), netdev_get_ethtool_stats(9), netdev_set_features(9), dev_monitor(9), netdev_init(9) ⭐

like I said β€” every. single. one. 🫢


πŸ’€ reminder bestie: this is a man page, not a tutorial β€” the struct is the star, and the SEE ALSO list is the extended universe. go read them if you're curious, but don't come for me if you get lost in the ksz lore 😭

and that's the whole page, babe ✨ sourced straight from ./drivers/net/ethernet/micrel, dated October 2026 β€” go off, read your counters, and slay πŸ’…πŸ‘‘πŸ’–

πŸ“¦ where this page comes from