MCPcopy Create free account
hub / github.com/F-Stack/f-stack / efx_rx_qcreate_internal

Function efx_rx_qcreate_internal

dpdk/drivers/common/sfc_efx/base/efx_rx.c:876–981  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

874}
875
876static __checkReturn efx_rc_t
877efx_rx_qcreate_internal(
878 __in efx_nic_t *enp,
879 __in unsigned int index,
880 __in unsigned int label,
881 __in efx_rxq_type_t type,
882 __in_opt const efx_rxq_type_data_t *type_data,
883 __in efsys_mem_t *esmp,
884 __in size_t ndescs,
885 __in uint32_t id,
886 __in unsigned int flags,
887 __in efx_evq_t *eep,
888 __deref_out efx_rxq_t **erpp)
889{
890 const efx_rx_ops_t *erxop = enp->en_erxop;
891 efx_rxq_t *erp;
892 const efx_nic_cfg_t *encp = efx_nic_cfg_get(enp);
893 efx_rc_t rc;
894
895 EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
896 EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_RX);
897
898 EFSYS_ASSERT3U(enp->en_rx_qcount + 1, <, encp->enc_rxq_limit);
899
900 EFSYS_ASSERT(ISP2(encp->enc_rxq_max_ndescs));
901 EFSYS_ASSERT(ISP2(encp->enc_rxq_min_ndescs));
902
903 if (index >= encp->enc_rxq_limit) {
904 rc = EINVAL;
905 goto fail1;
906 }
907
908 if (!ISP2(ndescs) ||
909 ndescs < encp->enc_rxq_min_ndescs ||
910 ndescs > encp->enc_rxq_max_ndescs) {
911 rc = EINVAL;
912 goto fail2;
913 }
914
915 /* Allocate an RXQ object */
916 EFSYS_KMEM_ALLOC(enp->en_esip, sizeof (efx_rxq_t), erp);
917
918 if (erp == NULL) {
919 rc = ENOMEM;
920 goto fail3;
921 }
922
923 erp->er_magic = EFX_RXQ_MAGIC;
924 erp->er_enp = enp;
925 erp->er_index = index;
926 erp->er_mask = ndescs - 1;
927 erp->er_esmp = esmp;
928
929 if ((rc = erxop->erxo_qcreate(enp, index, label, type, type_data, esmp,
930 ndescs, id, flags, eep, erp)) != 0)
931 goto fail4;
932
933 /* Sanity check queue creation result */

Callers 3

efx_rx_qcreateFunction · 0.85

Calls 1

efx_nic_cfg_getFunction · 0.85

Tested by

no test coverage detected