.\" $FreeBSD: releng/12.2/share/man/man9/iflibtxrx.9 358810 2020-03-09 15:28:52Z emaste $ .Dd April 16, 2019 .Dt IFLIBTXTX 9 .Os .Sh NAME .Nm iflibtxrx .Nd Device Dependent Transmit and Receive Functions .Sh SYNOPSIS .In "ifdi_if.h" .Ss "Interface Manipulation Functions" .Ft int .Fo isc_txd_encap .Fa "void *sc" .Fa "if_pkt_into_t pi" .Fc .Ft void .Fo isc_txd_flush .Fa "void *sc" .Fa "uint16_t qid" .Fa "uint32_t _pidx_or_credits_" .Fc .Ft int .Fo isc_txd_credits_update .Fa "void *sc" .Fa "uint16_t qid" .Fa "bool clear" .Fc .Ft int .Fo isc_rxd_available .Fa "void *sc" .Fa "uint16_t qsid" .Fa "uint32_t cidx" .Fc .Ft void .Fo isc_rxd_refill .Fa "void *sc" .Fa "uint16_t qsid" .Fa "uint8_t flid" .Fa "uint32_t pidx" .Fa "uint64_t *paddrs" .Fa "caddr_t *vaddrs" .Fa "uint16_t count" .Fc .Ft void .Fo isc_rxd_flush .Fa "void *sc" .Fa "uint16_t qsid" .Fa "uint8_t flid" .Fa "uint32_t pidx" .Fc .Ft int .Fo isc_rxd_pkt_get .Fa "void *sc" .Fa "if_rxd_info_t ri" .Fc .Ss "Global Variables" .Vt extern struct if_txrx .Sh 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. .Pp .Ss The if_pkt_info Structure The fields of .Vt "struct if_pkt_info" are as follows: .Bl -tag -width ".Va if_capabilities" -offset indent .It Va ipi_len .Pq Vt "uint32_t" Denotes the size of packet to be sent on the transmit queue. .It Va ipi_segs .Pq Vt "bus_dma_segment_t *" A pointer to the bus_dma_segment of the device independent transfer queue defined in iflib. .It Va ipi_qsidx Unique index value assigned sequentially to each transmit queue. Used to reference the currently transmitting queue. .It Va ipi_nsegs .Pq Vt "uint16_t" Number of descriptors to be read into the device dependent transfer descriptors. .It Va ipi_ndescs .Pq Vt "uint16_t" Number of descriptors in use. Calculated by subtracting the old pidx value from the new pidx value. .It Va ipi_flags .Pq Vt "uint16_t" Flags defined on a per packet basis. .It Va ipi_pidx .Pq Vt "uint32_t" Value of first pidx sent to the isc_encap function for encapsulation and subsequent transmission. .It Va ipi_new_pidx .Pq Vt "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. .It Va \fBThe Following Fields Are Used For Offload Handling\fP .It Va ipi_csum_flags .Pq Vt "uint64_t" Flags describing the checksum values, used on a per packet basis. .It Va ipi_tso_segsz .Pq Vt "uint16_t" Size of the TSO Segment Size. .It Va ipi_mflags .Pq Vt "uint16_t" Flags describing the operational parameters of the mbuf. .It Va ipi_vtag .Pq Vt "uint16_t" Contains the VLAN information in the Ethernet Frame. .It Va ipi_etype .Pq Vt "uint16_t" Type of ethernet header protocol as contained by the struct ether_vlan_header. .It Va ipi_ehrdlen .Pq Vt "uint8_t" Length of the Ethernet Header. .It Va ipi_ip_hlen .Pq Vt "uint8_t" Length of the TCP Header .It Va ipi_tcp_hlen .Pq Vt "uint8_t" Length of the TCP Header. .It Va ipi_tcp_hflags .Pq Vt "uint8_t" Flags describing the operational parameters of the TCP Header. .It Va ipi_ipproto .Pq Vt "uint8_t" Specifies the type of IP Protocol in use. Example TCP, UDP, or SCTP. .El .Ss The if_rxd_info Structure The fields of .Vt "struct if_rxd_info" are as follows: .Bl -tag -width ".Va if_capabilities" -offset indent .It Va iri_qsidx .Pq Vt "uint16_t" Unique index value assigned sequentially to each receive queue. Used to reference the currently receiving queue. .It Va iri_vtag .Pq Vt "uint16_t" Contains the VLAN information in the Ethernet Frame. .It Va iri_len .Pq Vt "uint16_t" Denotes the size of a received packet. .It Va iri_next_offset .Pq Vt "uint16_t" Denotes the offset value for the next packet to be receive. A Null value signifies the end of packet. .It Va iri_cidx .Pq Vt "uint32_t" Denotes the index value of the packet currently being processed in the consumer queue. .It Va iri_flowid .Pq Vt "uint32_t" Value of the RSS hash for the packet. .It Va iri_flags .Pq Vt "uint" Flags describing the operational parameters of the mbuf contained in the receive packet. .It Va iri_csum_flags .Pq Vt "uint32_t" Flags describing the checksum value contained in the receive packet. .It Va iri_csum_data .Pq Vt "uint32_t" Checksum data contained in the .Xr mbuf 9 packet header. .It Va iri_m .Pq Vt "struct mbuf *" A mbuf for drivers that manage their own receive queues. .It Va iri_ifp .Pq Vt "struct ifnet *" A link back to the interface structure. Utilized by drivers that have multiple interface per softc. .It Va iri_rsstype .Pq Vt "uint8_t" The value of the RSS hash type. .It Va iri_pad .Pq Vt "uint8_t" The length of any padding contained by the received data. .It Va iri_qidx .Pq Vt "uint8_t" Represents the type of queue event. If value >= 0 then it is the freelist id otherwise it is a completion queue event. .El .Sh 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. .Ss Transmit Packet Functions .Bl -ohang -offset indent .It Fn 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. .It Fn 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. .It Fn 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. .El .Ss Receive Packet Functions .Bl -ohang -offset indent .It Fn isc_rxd_available Function calculates the remaining number of descriptors from a position given by idx. The function returns this value. .It Fn 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. .It Fn 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. .It Fn 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 .El .Sh SEE ALSO .Xr iflibdd 9 , .Xr iflibdi 9 , .Xr mbuf 9 .Sh AUTHORS This manual page was written by .An Nicole Graziano