AXP(4)

πŸ“¦ version 15.1, in freebsd 14.5, freebsd 15.1, nixpkgs unstable

πŸ’– AXP(4) πŸ’–

okay so bestie, let me tell you about axp from the Kernel Interfaces Manual β€” she's the Advanced Micro Devices 10G Ethernet driver and she is literally iconic ✨


πŸŽ€ NAME πŸŽ€

axp β€” the Advanced Micro Devices 10G Ethernet driver, no cap πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

so if you wanna compile this driver right into your kernel (main character energy), you drop these lines into your kernel configuration file:

device iflib
device axp

OR β€” and this is the lowkey easier way β€” you can load the driver as a module at boot time by putting this line in loader.conf(5):

if_axp_load="YES"

slay, that's it 🫢


✨ DESCRIPTION ✨

okay so the axp driver enables the PCI-E based 10G Ethernet controller that's inbuilt in the AMD EPYC processors. she's built different fr fr πŸ’œ

here's everything she supports, and yes, you're gonna be obsessed:

  • 1G/10G SFP+ Link 🌈
  • Jumbo frames (9000 Bytes) β€” big packets, big vibes πŸŽ€
  • Transmit and Receive checksum offload πŸ”₯
  • TCP segmentation offload (TSO) πŸ‘‘
  • VLAN tag insertion/extraction πŸ’–
  • VLAN checksum offload πŸ’…
  • VLAN TSO ✨
  • Receive side steering (RSS) πŸ¦‹
  • IPV4 and IPV6 capable ⭐
  • MSI-X interrupts πŸ’œ
  • Split header 🌸

and the bestie part? all the above mentioned features are enabled by default β€” they just work, no extra effort required, periodt πŸ™ˆ

for hardware related questions, please refer the documentation supplied along with AMD EPYC processors πŸ’€ (don't come for me, I just work here)

🌺 SYSCTL VARIABLES 🌺

the following variables are available as sysctl(8) variables β€” these are your little windows into how she's doing, iykyk:

  • dev.ax.X.mac_stats β€” dumps the transmit and receive statistics counter values for the controller. this includes statistics specific to each transmit and receive queue. she's giving transparency πŸ’…
  • dev.ax.X.channels_info β€” dumps the permissible and default configured transmit and receive channel information. iconic πŸ’–
  • dev.ax.X.ringparam_info β€” dumps the permissible and default configured descriptor information for the transmit and receive queue. the way she just tells you things πŸ¦‹
  • dev.ax.X.link_ksettings_info β€” dumps the current link setting like link mode, speed, duplex settings. she's an open book fr fr ✨
  • dev.ax.X.pauseparam_info β€” dumps the current flow-control settings. lowkey obsessed with how organized she is 🌸
  • dev.ax.X.coalesce_info β€” dumps the current interrupt coalescing settings. πŸ’œ
  • dev.ax.X.link_info β€” dumps the current state of the Link. let you know what's up πŸ’…
  • dev.ax.X.drv_info β€” dumps the driver and controller firmware version information. the receipts, bestie πŸŽ€
  • dev.ax.X.YYYY_register
  • dev.ax.X.YYYY_register_values β€” sysctl to dump a specific register from a specific block of the controller. YYYY specifies the block. the following blocks are supported:
    • xpcs
    • xgmac
    • xprop
    • xi2c

set the offset of the register to the first variable, and then read the value of the register by reading the second variable. big brain energy, I know 🧚

  • dev.ax.X.axgbe_debug_level β€” configure the log-level for the driver. default is 0. supports 0-3. turn up the volume on those logs bestie πŸ”₯
  • dev.ax.X.link_workaround β€” this variable enables the workaround for an intermittent link issue. when link does not come up for long time, this variable can be set to 1 to reset the phy and bring up the link. she's a lil dramatic sometimes but we fix her πŸ’€

πŸ¦„ LOADER TUNABLES πŸ¦„

the following variable is available as loader.conf(5) tunable:

  • dev.ax.X.sph_enable β€” this variable controls split header feature for the interface. default is 1, meaning the split header support is enabled. she's on by default, as she should be πŸ‘‘
wait bestie, important: this variable must be set before loading the driver, either via loader.conf(5) or through kenv(1). this cannot be modified when driver is loaded. no take-backsies πŸ’…

setting this variable in loader.conf(5) needs the system to be restarted to take effect. when using kenv(1), use the wrapper variable dev.ax.sph_enable, which will configure(enable/disable) split header support for all axp interfaces. one ring to rule them all fr fr πŸ’–

to use netmap with this device, split header support must be disabled (set this variable to 0). no exceptions, bestie 😭

🌈 SEE ALSO 🌈

the squad, the ensemble cast, the supporting characters:

arp(4), iflib(4), netmap(4), vlan(4), ifconfig(8) ✨


πŸ“– HISTORY πŸ“–

the axp device driver first appeared in FreeBSD 13.0. she's not new to this, she's true to this πŸ’…

okay so there's lore here β€” another version of the driver is already present in FreeBSD. this driver was named as "axgbe" earlier, which is renamed as "axa" now. this driver is for the ACPI based Ethernet controllers in the previous/older version of the hardware. this driver is authored by ⟨andrew@FreeBSD.org⟩. the family tree is giving complicated but we respect the lineage 🌸


πŸ‘‘ AUTHORS πŸ‘‘

the axp device driver was written by Advanced Micro Devices Inc. β€” AMD said "we'll do it ourselves" and honestly? they ate πŸ”₯

for any issues and support requirements, email the details to ⟨rajesh1.kumar@amd.com⟩. shoot your shot bestie, they wanna help πŸ’œ


Debian | February 19, 2021 β€” that's the version and date of this iconic little manual page, mwah πŸ’‹
πŸ“¦ where this page comes from