mirror of
https://github.com/opnsense/src.git
synced 2026-04-28 17:49:22 -04:00
The early ethernet MACs (I think AR71xx and AR913x) require that both TX and RX require 4-byte alignment for all packets. The later MACs have started relaxing the requirements. For now, the 1-byte TX and 1-byte RX alignment requirements are only for the QCA955x SoCs. I'll add in the relaxed requirements as I review the datasheets and do testing. * Add a hardware flags field and 1-byte / 4-byte TX/RX alignment. * .. defaulting to 4-byte TX and 4-byte RX alignment. * Only enforce the TX alignment fixup if the hardware requires a 4-byte TX alignment. This avoids a call to m_defrag(). * Add counters for various situations for further debugging. * Set the 1-byte and 4-byte busdma alignment requirement when the tag is created. This improves the straight bridging performance from 130mbit/sec to 180mbit/sec, purely by removing the need for TX path bounce buffers. The main performance issue is the RX alignment requirement and any RX bounce buffering that's occuring. (In a local test, removing the RX fixup path and just aligning buffers raises the performance to above 400mbit/sec. In theory it's a no-op for SoCs before the QCA955x. Tested: * QCA9558 SoC in AP135 board, using software bridging between arge0/arge1. |
||
|---|---|---|
| .. | ||
| apb.c | ||
| apbvar.h | ||
| ar71xx_bus_space_reversed.c | ||
| ar71xx_bus_space_reversed.h | ||
| ar71xx_chip.c | ||
| ar71xx_chip.h | ||
| ar71xx_cpudef.h | ||
| ar71xx_ehci.c | ||
| ar71xx_fixup.c | ||
| ar71xx_fixup.h | ||
| ar71xx_gpio.c | ||
| ar71xx_gpiovar.h | ||
| ar71xx_macaddr.c | ||
| ar71xx_macaddr.h | ||
| ar71xx_machdep.c | ||
| ar71xx_ohci.c | ||
| ar71xx_pci.c | ||
| ar71xx_pci_bus_space.c | ||
| ar71xx_pci_bus_space.h | ||
| ar71xx_setup.c | ||
| ar71xx_setup.h | ||
| ar71xx_spi.c | ||
| ar71xx_wdog.c | ||
| ar71xxreg.h | ||
| ar91xx_chip.c | ||
| ar91xx_chip.h | ||
| ar91xxreg.h | ||
| ar724x_chip.c | ||
| ar724x_chip.h | ||
| ar724x_pci.c | ||
| ar724xreg.h | ||
| ar933x_chip.c | ||
| ar933x_chip.h | ||
| ar933x_uart.h | ||
| ar933xreg.h | ||
| ar934x_chip.c | ||
| ar934x_chip.h | ||
| ar934x_nfcreg.h | ||
| ar934xreg.h | ||
| files.ar71xx | ||
| if_arge.c | ||
| if_argevar.h | ||
| pcf2123_rtc.c | ||
| pcf2123reg.h | ||
| qca955x_chip.c | ||
| qca955x_chip.h | ||
| qca955x_pci.c | ||
| qca955xreg.h | ||
| std.ar71xx | ||
| uart_bus_ar71xx.c | ||
| uart_bus_ar933x.c | ||
| uart_cpu_ar71xx.c | ||
| uart_cpu_ar933x.c | ||
| uart_dev_ar933x.c | ||
| uart_dev_ar933x.h | ||