Large Segment Offload
BCM5718 Programmer’s Guide
Broadcom
®
January 29, 2016 • 5718-PG108-R
Page 110
Large Segment Offload
In computer networking, large segment offload (LSO) is a technique for increasing outbound throughput of high-
bandwidth network connections by reducing host CPU overhead. This is done by queuing up large TCP packets
letting the Ethernet controller split them into separate (smaller) TCP packets to be transmitted onto the network.
The technique is also called TCP segmentation offload (TSO) or, more generically, LSO.
When large blocks of data are to be sent over a computer network they must be first broken down to smaller
segments that can pass through all of the network elements such as routers and switches between the source
and destination computers. This process is referred to as segmentation.
For example, a large TCP packet of 64 KB (65,536 bytes) of data is usually segmented into 46 segments of 1448
bytes each before being sent over the network through the Ethernet controller chip. With some intelligence in
the controller, the host CPU can hand over a 64k byte TCP packet directly to the controller in a single transmit
request and the controller can break the large TCP packet down into smaller segments of 1448 bytes, add the
TCP, IP, and data link layer protocol headers to each segment, and send the resulting frames over the network.
This significantly reduces the work done by the host CPU.
Some Broadcom Ethernet controllers, such as the BCM5718, also support using jumbo sized frames (up to
9,216 bytes) as the individual frame size into which a large offloaded TCP packet is segmented into.
QuickStart
Follow the steps to enable LSO:
1.
Zero TCP checksum field in offloaded packet (leave IP checksum field alone)
2.
Set register 0x0C00[3]=1: Enable hardware LSO preDMA processing
3.
Set register 0x4800[27]=1: Enable hardware processing of LSO IPv4 packets
4.
Set register 0x4800[28]=1: Enable hardware processing of LSO IPv6 packets (if desired)
5.
Set Send BD Flags[8]=1: CPU pre-DMA
6.
Set Send BD Flags[9]=1: CPU post-DMA
7.
See LSO Limitations section below
Note:
The UDP checksum engine does not span IP fragmented frames.
Note:
The Ethernet controller does not validate the value of the Length field and may generate an
error on the PCI bus if the Length field has a value of 0. The host driver must ensure that the Length
field is nonzero before enqueueing the BD onto the Send Ring.
Note:
The BCM5718 family added to ability to use jumbo sized frames simultaneous with LSO.