Provided by: freebsd-manpages_12.2-1_all bug

NAME

       iflibtxrx — Device Dependent Transmit and Receive Functions

SYNOPSIS

       #include <ifdi_if.h>

   Interface Manipulation Functions
       int
       isc_txd_encap(void *sc, if_pkt_into_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

Debian                                           April 16, 2019                                     IFLIBTXTX(9)