Author: arybchik
Date: Wed Dec 26 10:19:12 2018
New Revision: 342509
URL: https://svnweb.freebsd.org/changeset/base/342509

Log:
  MFC r341038
  
  sfxge(4): add method to make checksum option descriptors
  
  Submitted by:   Mark Spender <mspender at solarflare.com>
  Sponsored by:   Solarflare Communications, Inc.
  Differential Revision:  https://reviews.freebsd.org/D18160

Modified:
  stable/10/sys/dev/sfxge/common/ef10_impl.h
  stable/10/sys/dev/sfxge/common/ef10_tx.c
  stable/10/sys/dev/sfxge/common/efx.h
  stable/10/sys/dev/sfxge/common/efx_impl.h
  stable/10/sys/dev/sfxge/common/efx_tx.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/sfxge/common/ef10_impl.h
==============================================================================
--- stable/10/sys/dev/sfxge/common/ef10_impl.h  Wed Dec 26 10:17:44 2018        
(r342508)
+++ stable/10/sys/dev/sfxge/common/ef10_impl.h  Wed Dec 26 10:19:12 2018        
(r342509)
@@ -759,6 +759,11 @@ ef10_tx_qdesc_vlantci_create(
        __in    uint16_t vlan_tci,
        __out   efx_desc_t *edp);
 
+extern void
+ef10_tx_qdesc_checksum_create(
+       __in    efx_txq_t *etp,
+       __in    uint16_t flags,
+       __out   efx_desc_t *edp);
 
 #if EFSYS_OPT_QSTATS
 

Modified: stable/10/sys/dev/sfxge/common/ef10_tx.c
==============================================================================
--- stable/10/sys/dev/sfxge/common/ef10_tx.c    Wed Dec 26 10:17:44 2018        
(r342508)
+++ stable/10/sys/dev/sfxge/common/ef10_tx.c    Wed Dec 26 10:19:12 2018        
(r342509)
@@ -203,7 +203,7 @@ ef10_tx_qcreate(
 {
        efx_nic_cfg_t *encp = &enp->en_nic_cfg;
        uint16_t inner_csum;
-       efx_qword_t desc;
+       efx_desc_t desc;
        efx_rc_t rc;
 
        _NOTE(ARGUNUSED(id))
@@ -228,19 +228,9 @@ ef10_tx_qcreate(
         * a no-op TX option descriptor. See bug29981 for details.
         */
        *addedp = 1;
-       EFX_POPULATE_QWORD_6(desc,
-           ESF_DZ_TX_DESC_IS_OPT, 1,
-           ESF_DZ_TX_OPTION_TYPE, ESE_DZ_TX_OPTION_DESC_CRC_CSUM,
-           ESF_DZ_TX_OPTION_UDP_TCP_CSUM,
-           (flags & EFX_TXQ_CKSUM_TCPUDP) ? 1 : 0,
-           ESF_DZ_TX_OPTION_IP_CSUM,
-           (flags & EFX_TXQ_CKSUM_IPV4) ? 1 : 0,
-           ESF_DZ_TX_OPTION_INNER_UDP_TCP_CSUM,
-           (flags & EFX_TXQ_CKSUM_INNER_TCPUDP) ? 1 : 0,
-           ESF_DZ_TX_OPTION_INNER_IP_CSUM,
-           (flags & EFX_TXQ_CKSUM_INNER_IPV4) ? 1 : 0);
+       ef10_tx_qdesc_checksum_create(etp, flags, &desc);
 
-       EFSYS_MEM_WRITEQ(etp->et_esmp, 0, &desc);
+       EFSYS_MEM_WRITEQ(etp->et_esmp, 0, &desc.ed_eq);
        ef10_tx_qpush(etp, *addedp, 0);
 
        return (0);
@@ -700,6 +690,30 @@ ef10_tx_qdesc_vlantci_create(
                            ESE_DZ_TX_OPTION_DESC_VLAN,
                            ESF_DZ_TX_VLAN_OP, tci ? 1 : 0,
                            ESF_DZ_TX_VLAN_TAG1, tci);
+}
+
+       void
+ef10_tx_qdesc_checksum_create(
+       __in    efx_txq_t *etp,
+       __in    uint16_t flags,
+       __out   efx_desc_t *edp)
+{
+       _NOTE(ARGUNUSED(etp));
+
+       EFSYS_PROBE2(tx_desc_checksum_create, unsigned int, etp->et_index,
+                   uint32_t, flags);
+
+       EFX_POPULATE_QWORD_6(edp->ed_eq,
+           ESF_DZ_TX_DESC_IS_OPT, 1,
+           ESF_DZ_TX_OPTION_TYPE, ESE_DZ_TX_OPTION_DESC_CRC_CSUM,
+           ESF_DZ_TX_OPTION_UDP_TCP_CSUM,
+           (flags & EFX_TXQ_CKSUM_TCPUDP) ? 1 : 0,
+           ESF_DZ_TX_OPTION_IP_CSUM,
+           (flags & EFX_TXQ_CKSUM_IPV4) ? 1 : 0,
+           ESF_DZ_TX_OPTION_INNER_UDP_TCP_CSUM,
+           (flags & EFX_TXQ_CKSUM_INNER_TCPUDP) ? 1 : 0,
+           ESF_DZ_TX_OPTION_INNER_IP_CSUM,
+           (flags & EFX_TXQ_CKSUM_INNER_IPV4) ? 1 : 0);
 }
 
 

Modified: stable/10/sys/dev/sfxge/common/efx.h
==============================================================================
--- stable/10/sys/dev/sfxge/common/efx.h        Wed Dec 26 10:17:44 2018        
(r342508)
+++ stable/10/sys/dev/sfxge/common/efx.h        Wed Dec 26 10:19:12 2018        
(r342509)
@@ -2110,6 +2110,12 @@ efx_tx_qdesc_vlantci_create(
        __in    uint16_t tci,
        __out   efx_desc_t *edp);
 
+extern void
+efx_tx_qdesc_checksum_create(
+       __in    efx_txq_t *etp,
+       __in    uint16_t flags,
+       __out   efx_desc_t *edp);
+
 #if EFSYS_OPT_QSTATS
 
 #if EFSYS_OPT_NAMES

Modified: stable/10/sys/dev/sfxge/common/efx_impl.h
==============================================================================
--- stable/10/sys/dev/sfxge/common/efx_impl.h   Wed Dec 26 10:17:44 2018        
(r342508)
+++ stable/10/sys/dev/sfxge/common/efx_impl.h   Wed Dec 26 10:19:12 2018        
(r342509)
@@ -141,6 +141,8 @@ typedef struct efx_tx_ops_s {
                                                efx_desc_t *, int);
        void            (*etxo_qdesc_vlantci_create)(efx_txq_t *, uint16_t,
                                                efx_desc_t *);
+       void            (*etxo_qdesc_checksum_create)(efx_txq_t *, uint16_t,
+                                               efx_desc_t *);
 #if EFSYS_OPT_QSTATS
        void            (*etxo_qstats_update)(efx_txq_t *,
                                              efsys_stat_t *);

Modified: stable/10/sys/dev/sfxge/common/efx_tx.c
==============================================================================
--- stable/10/sys/dev/sfxge/common/efx_tx.c     Wed Dec 26 10:17:44 2018        
(r342508)
+++ stable/10/sys/dev/sfxge/common/efx_tx.c     Wed Dec 26 10:19:12 2018        
(r342509)
@@ -144,6 +144,7 @@ static const efx_tx_ops_t   __efx_tx_siena_ops = {
        NULL,                                   /* etxo_qdesc_tso_create */
        NULL,                                   /* etxo_qdesc_tso2_create */
        NULL,                                   /* etxo_qdesc_vlantci_create */
+       NULL,                                   /* etxo_qdesc_checksum_create */
 #if EFSYS_OPT_QSTATS
        siena_tx_qstats_update,                 /* etxo_qstats_update */
 #endif
@@ -170,6 +171,7 @@ static const efx_tx_ops_t   __efx_tx_hunt_ops = {
        ef10_tx_qdesc_tso_create,               /* etxo_qdesc_tso_create */
        ef10_tx_qdesc_tso2_create,              /* etxo_qdesc_tso2_create */
        ef10_tx_qdesc_vlantci_create,           /* etxo_qdesc_vlantci_create */
+       ef10_tx_qdesc_checksum_create,          /* etxo_qdesc_checksum_create */
 #if EFSYS_OPT_QSTATS
        ef10_tx_qstats_update,                  /* etxo_qstats_update */
 #endif
@@ -196,6 +198,7 @@ static const efx_tx_ops_t   __efx_tx_medford_ops = {
        NULL,                                   /* etxo_qdesc_tso_create */
        ef10_tx_qdesc_tso2_create,              /* etxo_qdesc_tso2_create */
        ef10_tx_qdesc_vlantci_create,           /* etxo_qdesc_vlantci_create */
+       ef10_tx_qdesc_checksum_create,          /* etxo_qdesc_checksum_create */
 #if EFSYS_OPT_QSTATS
        ef10_tx_qstats_update,                  /* etxo_qstats_update */
 #endif
@@ -643,6 +646,21 @@ efx_tx_qdesc_vlantci_create(
        EFSYS_ASSERT(etxop->etxo_qdesc_vlantci_create != NULL);
 
        etxop->etxo_qdesc_vlantci_create(etp, tci, edp);
+}
+
+       void
+efx_tx_qdesc_checksum_create(
+       __in    efx_txq_t *etp,
+       __in    uint16_t flags,
+       __out   efx_desc_t *edp)
+{
+       efx_nic_t *enp = etp->et_enp;
+       const efx_tx_ops_t *etxop = enp->en_etxop;
+
+       EFSYS_ASSERT3U(etp->et_magic, ==, EFX_TXQ_MAGIC);
+       EFSYS_ASSERT(etxop->etxo_qdesc_checksum_create != NULL);
+
+       etxop->etxo_qdesc_checksum_create(etp, flags, edp);
 }
 
 
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to