IFLIBTXTX(9) 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_seg- ment of the device independent transfer queue de- fined 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 transmis- sion. 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 parame- ters of the mbuf. ipi_vtag (uint16_t) Contains the VLAN information in the Eth- ernet Frame. ipi_etype (uint16_t) Type of ethernet header protocol as con- tained 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 parame- ters 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 cur- rently receiving queue. iri_vtag (uint16_t) Contains the VLAN information in the Eth- ernet 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 con- tained 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 struc- ture. Utilized by drivers that have multiple inter- face 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 transmis- sion 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 describ- ing 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 incre- ments 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 posi- tion 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 de- scriptor that describes a received packet. Hardware specific infor- mation 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 14.3 December 17, 2020 IFLIBTXTX(9)
Want to link to this manual page? Use this URL:
<https://man.FreeBSD.org/cgi/man.cgi?query=iflibtxrx&sektion=9&manpath=FreeBSD+14.3-RELEASE>