MSI-X Plumbing
BCM5718 Programmer’s Guide
Broadcom
®
January 29, 2016 • 5718-PG108-R
Page 254
Send Coalescing Ticks Register (Offset: 0x3c0c)
The value in this register can be used to control how often the status block is updated (and how often interrupts
are generated) according to the completion of transmit events. The value in this register controls how many
ticks, in units of 1 µs each, get loaded in an internal transmit tick timer register. The timer is reset to the value
of this register and starts counting down after every status block update (regardless of the reason for the status
block update). The timer is reset only after status block updates, and is not reset after a transmit event
completes. When the timer reaches 0, it is considered to be in the expired state. When the counter is in the
expired state, a status block update occurs if a transmit event has occurred since the last status block update.
In this case, a transmit event is defined by an update to one of the device's Send BD Consumer Indices. A Send
Consumer Index increments whenever the data associated with a particular packet has been successfully
moved (via DMA) across the bus, rather than when the packet is actually transmitted over the Ethernet wire.
This register must be initialized by host software. A value of 0 in this register disables the transmit tick coalescing
logic. In this case, status block updates occur for transmit events only if the Send Max Coalesced BD value is
reached, or if the BD_FLAG_COAL_NOW bit is set in a send BD. Status block updates for other reasons (e.g.,
receive events) also include any updates to the send indices. By setting the value in this register to a high
number, a software device driver can reduce the number of status block updates and interrupts that occur due
to transmit completions. This generally increases performance in hosts that do not require their send buffers to
be freed quickly. For host environments that do require their send buffers to be recovered quickly, it is
recommended that this register be set to 0.
Receive Max Coalesced Bd Count Register (Offset: 0x3c10)
This register contains the maximum number of receive return ring BDs that must filled in by the device before
the device updates the status block due to a receive event. Whenever the device completes the reception of a
packet, it fills in a receive return ring BD, and then increments an internal receive coalesce BD counter. When
this internal counter reaches the value in this register, a status block update occurs. This counter is reset (i.e.,
zeroed) whenever a status block update occurs regardless of the reason for the status block update. This
register must be initialized by host software. A value of 0 in this register disables the receive max BD coalescing
logic. In this case, status block updates occur for receive packets only via the Receive Coalescing Ticks
mechanism. Status block updates for other reasons (e.g., transmit events) also include any updates to the
receive indices. For simplicity, if a host wanted to get a status block update for every received packet, the host
driver should just set this register to a value of 1. On the other hand, by setting the value in this register to a high
number, a software device driver can reduce the number of status block updates and interrupts that occur due
to receiving packets. This can increase performance in hosts that are under a high degree of stress and whose
RISCs are saturated due to handling a large number of interrupts from the network controller. However, in lower
traffic environments, there is no guarantee that consecutive packets will be received in a timely manner.
Therefore, for those environments, it is recommended that the Receive Coalescing Ticks register are used to
make sure that status block updates due to receiving packets are not delayed for an infinite amount of time.
Send Max Coalesced BD Count Register (Offset: 0x3c14)
This register contains the maximum number of send BDs that must be processed by the device before the
device updates the status block due to the transmission of packets. Whenever the device completes the DMA
of transmit packet buffer, it increments an internal send coalesce BD counter. When this internal counter reaches
the value in this register, a status block update occurs. This counter is reset (i.e., zeroed) whenever a status
block update occurs, regardless of the reason for the status block update. This register must be initialized by
host software. A value of 0 in this register disables the send max BD coalescing logic. In this case, status block