STRUCT MXL862XX_XPCS_PCS_CFG(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct mxl862xx_xpcs_pcs_cfg(9) πŸŽ€

okay so this is a page from the Kernel API Manual, and bestie, it's literally the PCS config struct for the mxl862xx driver. it's giving "small struct, big responsibilities" and honestly? iconic.


🌸 NAME 🌸

struct mxl862xx_xpcs_pcs_cfg β€” PCS configuration parameters πŸ¦‹

like, the whole vibe of this struct is "here's everything you need to set up your PCS." no cap.


✨ SYNOPSIS ✨

struct mxl862xx_xpcs_pcs_cfg {
    __le16 mode;
    union mxl862xx_xpcs_an_word advertising;
    __le16 result;
 };

three fields. that's it. that's the whole struct. and yet she's carrying the entire bringup on her back πŸ’€


πŸ‘‘ Members πŸ‘‘

πŸŽ€ mode

packed interface and negotiation parameters all squished into one field β€” see MXL862XX_XPCS_CFG_* for the deets. here's what's packed in there, lowkey a whole personality:

  • port_id is the XPCS port index (0-3)
  • interface is the PCS interface mode (MXL862XX_XPCS_IF_*)
  • neg_mode is the negotiation mode (MXL862XX_XPCS_NEG_*)
  • permit_pause allows pause to MAC
  • usx_lane_mode is the USXGMII lane mode (MXL862XX_XPCS_USX_*)
  • role is the protocol role (MXL862XX_XPCS_ROLE_*)
  • usx_subport is the sub-port (0-3) within the XPCS β€” and despite the name it also identifies the QSGMII sub-port 🫢 it's used by the firmware to set MAC pause per sub-port, and it's ignored for the XPCS-wide bringup, which is idempotent across slots ✨

πŸ¦‹ advertising

the AN code word the local end transmits. the active union member gets selected by the interface field (and, for the asymmetric protocols, by role). periodt.

⚠️ it's ignored when the local end does not transmit an AN word (role=MAC for SGMII/QSGMII/USXGMII, 10GBASE-R, 5GBASE-R) or when neg_mode is not INBAND_AN_ON. also β€” pass all-zero to keep the firmware default advertisement πŸ’œ

🌈 result

firmware result, bestie. read it carefully:

  • >0 means the host must follow with an AN restart πŸ”₯
  • 0 means no host follow-up is needed 😌
  • <0 is an errno 😭

🧚 SEE ALSO 🧚

kernel file ./drivers/net/dsa/mxl862xx/mxl862xx-api.h β€” and okay she has a LOT of friends, so buckle up:

  • struct mdio_relay_data(9)
  • struct mxl862xx_register_mod(9)
  • enum mxl862xx_mac_table_filter(9)
  • struct mxl862xx_mac_table_add(9)
  • struct mxl862xx_mac_table_remove(9)
  • struct mxl862xx_mac_table_read(9)
  • struct mxl862xx_mac_table_query(9)
  • enum mxl862xx_mac_clear_type(9)
  • struct mxl862xx_mac_table_clear(9)
  • enum mxl862xx_age_timer(9)
  • struct mxl862xx_bridge_alloc(9)
  • enum mxl862xx_bridge_config_mask(9)
  • enum mxl862xx_bridge_port_egress_meter(9)
  • struct mxl862xx_qos_meter_cfg(9)
  • enum mxl862xx_bridge_forward_mode(9)
  • struct mxl862xx_bridge_config(9)
  • struct mxl862xx_bridge_port_alloc(9)
  • enum mxl862xx_bridge_port_config_mask(9)
  • enum mxl862xx_color_marking_mode(9)
  • enum mxl862xx_color_remarking_mode(9)
  • enum mxl862xx_pmapper_mapping_mode(9)
  • struct mxl862xx_pmapper(9)
  • struct mxl862xx_bridge_port_config(9)
  • struct mxl862xx_cfg(9)
  • enum mxl862xx_extended_vlan_filter_type(9)
  • enum mxl862xx_extended_vlan_filter_tpid(9)
  • enum mxl862xx_extended_vlan_filter_dei(9)
  • enum mxl862xx_extended_vlan_treatment_remove_tag(9)
  • enum mxl862xx_extended_vlan_treatment_priority(9)
  • enum mxl862xx_extended_vlan_treatment_vid(9)
  • enum mxl862xx_extended_vlan_treatment_tpid(9)
  • enum mxl862xx_extended_vlan_treatment_dei(9)
  • enum mxl862xx_extended_vlan_4_tpid_mode(9)
  • enum mxl862xx_extended_vlan_filter_ethertype(9)
  • struct mxl862xx_extendedvlan_filter_vlan(9)
  • struct mxl862xx_extendedvlan_filter(9)
  • struct mxl862xx_extendedvlan_treatment_vlan(9)
  • struct mxl862xx_extendedvlan_treatment(9)
  • struct mxl862xx_extendedvlan_alloc(9)
  • struct mxl862xx_extendedvlan_config(9)
  • enum mxl862xx_vlan_filter_tci_mask(9)
  • struct mxl862xx_vlanfilter_alloc(9)
  • struct mxl862xx_vlanfilter_config(9)
  • enum mxl862xx_ss_sp_tag_mask(9)
  • enum mxl862xx_ss_sp_tag_rx(9)
  • enum mxl862xx_ss_sp_tag_tx(9)
  • enum mxl862xx_ss_sp_tag_rx_pen(9)
  • struct mxl862xx_ss_sp_tag(9)
  • enum mxl862xx_logical_port_mode(9)
  • struct mxl862xx_ctp_port_assignment(9)
  • enum mxl862xx_stp_port_state(9)
  • struct mxl862xx_stp_port_cfg(9)
  • struct mxl862xx_sys_fw_image_version(9)
  • enum mxl862xx_port_type(9)
  • enum mxl862xx_rmon_port_type(9)
  • struct mxl862xx_rmon_port_cnt(9)
  • union mxl862xx_xpcs_an_word(9)
  • enum mxl862xx_xpcs_loopback_mode(9)
  • struct mxl862xx_xpcs_pcs_state(9)
  • struct mxl862xx_xpcs_pcs_disable(9)
  • struct mxl862xx_xpcs_an_restart(9)
  • struct mxl862xx_xpcs_pcs_link_up(9)

like I said. a LOT of friends πŸ’–


that's the whole page, bestie β€” go forth and configure your PCS 🌟

sign-off szn: this lil beauty lives at ./drivers/net/dsa/mxl862xx in the source, dated October 2026, and it's filed under struct mxl86...xpcs_pcs_cfg(9) because the header literally couldn't fit the whole name πŸ’€ anyway mwah, ily, bye πŸ«ΆπŸ’…βœ¨

πŸ“¦ where this page comes from