IFLIBTXTX(9) FreeBSD Kernel Developer's Manual IFLIBTXTX(9)
NAME
iflibtxrx - Device Dependent Transmit and Receive Functions
SYNOPSIS
#include <ifdi_if.h>
Interface Manipulation Functions
int
isc_txd_encap(void *sc, if_pkt_info_t pi);
void
isc_txd_flush(void *sc, uint16_t qid, uint32_t _pidx_or_credits_);
int
isc_txd_credits_update(void *sc, uint16_t qid, bool clear);
int
isc_rxd_available(void *sc, uint16_t qsid, uint32_t cidx);
void
isc_rxd_refill(void *sc, uint16_t qsid, uint8_t flid, uint32_t pidx,
uint64_t *paddrs, caddr_t *vaddrs, uint16_t count);
void
isc_rxd_flush(void *sc, uint16_t qsid, uint8_t flid, uint32_t pidx);
int
isc_rxd_pkt_get(void *sc, if_rxd_info_t ri);
Global Variables
extern struct if_txrx
DATA STRUCTURES
The device dependent mechanisms for handling packet transmit and receive
are primarily defined by the functions named above. The if_pkt_info data
structure contains statistics and identifying info necessary for packet
transmission. While the data structure for packet receipt is the
if_rxd_info structure.
The if_pkt_info Structure
The fields of struct if_pkt_info are as follows:
ipi_len (uint32_t) Denotes the size of packet to be
sent on the transmit queue.
ipi_segs (bus_dma_segment_t *) A pointer to the
bus_dma_segment of the device independent
transfer queue defined in iflib.
ipi_qsidx Unique index value assigned sequentially to
each transmit queue. Used to reference the
currently transmitting queue.
ipi_nsegs (uint16_t) Number of descriptors to be read
into the device dependent transfer
descriptors.
ipi_ndescs (uint16_t) Number of descriptors in use.
Calculated by subtracting the old pidx value
from the new pidx value.
ipi_flags (uint16_t) Flags defined on a per packet
basis.
ipi_pidx (uint32_t) Value of first pidx sent to the
isc_encap function for encapsulation and
subsequent transmission.
ipi_new_pidx (uint32_t) Value set after the termination of
the isc_encap function. This value will
become the first pidx sent to the isc-encap
the next time that the function is called.
The Following Fields Are Used For Offload Handling
ipi_csum_flags (uint64_t) Flags describing the checksum
values, used on a per packet basis.
ipi_tso_segsz (uint16_t) Size of the TSO Segment Size.
ipi_mflags (uint16_t) Flags describing the operational
parameters of the mbuf.
ipi_vtag (uint16_t) Contains the VLAN information in
the Ethernet Frame.
ipi_etype (uint16_t) Type of ethernet header protocol as
contained by the struct ether_vlan_header.
ipi_ehrdlen (uint8_t) Length of the Ethernet Header.
ipi_ip_hlen (uint8_t) Length of the TCP Header
ipi_tcp_hlen (uint8_t) Length of the TCP Header.
ipi_tcp_hflags (uint8_t) Flags describing the operational
parameters of the TCP Header.
ipi_ipproto (uint8_t) Specifies the type of IP Protocol in
use. Example TCP, UDP, or SCTP.
The if_rxd_info Structure
The fields of struct if_rxd_info are as follows:
iri_qsidx (uint16_t) Unique index value assigned
sequentially to each receive queue. Used to
reference the currently receiving queue.
iri_vtag (uint16_t) Contains the VLAN information in
the Ethernet Frame.
iri_len (uint16_t) Denotes the size of a received
packet.
iri_next_offset (uint16_t) Denotes the offset value for the
next packet to be receive. A Null value
signifies the end of packet.
iri_cidx (uint32_t) Denotes the index value of the
packet currently being processed in the
consumer queue.
iri_flowid (uint32_t) Value of the RSS hash for the
packet.
iri_flags (uint)
Flags describing the operational parameters
of the mbuf contained in the
receive packet.
iri_csum_flags (uint32_t) Flags describing the checksum value
contained in the receive packet.
iri_csum_data (uint32_t) Checksum data contained in the
mbuf(9) packet header.
iri_m (struct mbuf *) A mbuf for drivers that manage
their own receive queues.
iri_ifp (struct ifnet *) A link back to the interface
structure. Utilized by drivers that have
multiple interface per softc.
iri_rsstype (uint8_t) The value of the RSS hash type.
iri_pad (uint8_t) The length of any padding contained
by the received data.
iri_qidx (uint8_t) Represents the type of queue event.
If value >= 0 then it is the freelist id
otherwise it is a completion queue event.
FUNCTIONS
All function calls are associated exclusively with either packet
transmission or receipt. The void *sc passed as the first argument to
all of the following functions represents the driver's softc.
Transmit Packet Functions
isc_txd_encap()
Transmit function that sends a packet on an interface. The
if_pkt_info data structure contains data information fields
describing the packet. This function returns 0 if successful,
otherwise an error value is returned.
isc_txd_flush()
Flush function is called immediately after the isc_txd_encap
function transmits a packet. It updates the hardware producer
index or increments the descriptors used to pidx_or_credits in the
queue designated by the qid number. This is often referred to as
poking the doorbell register.
isc_txd_credits_update()
Credit function advances the buffer ring and calculates the credits
(descriptors) processed. Until the I/O is complete it cleans the
range in case of multisegments and updates the count of processed
packets. The function returns the number of processed credits.
Receive Packet Functions
isc_rxd_available()
Function calculates the remaining number of descriptors from a
position given by idx. The function returns this value.
isc_rxd_refill()
Starting with the physical address paddrs, the function reads a
packet into the rx_ring until a value designated by count is
reached. vaddrs is typically not needed and is provided for
devices that place their own metadata in the packet header.
isc_rxd_flush()
Flush function updates the producer pointer on the free list flid
in queue set number qid to pidx to reflect the presence of new
buffers.
isc_rxd_pkt_get()
Process a single software descriptor. rxr->rx_base[i] contains a
descriptor that describes a received packet. Hardware specific
information about the buffer referred to by ri is returned in the
data structure if_rxd_info
SEE ALSO
iflibdd(9), iflibdi(9), mbuf(9)
AUTHORS
This manual page was written by Nicole Graziano
FreeBSD 13.1-RELEASE-p6 December 17, 2020 FreeBSD 13.1-RELEASE-p6
man2web Home...