summaryrefslogtreecommitdiffstats
path: root/src/plugins/dpdk/device/format.c
AgeCommit message (Expand)AuthorFilesLines
2022-03-23vppinfra: deprecate clib_mem_is_vecDamjan Marion1-2/+0
2022-03-23dpdk: fix rx/tx burst function nameTianyu Li1-2/+2
2022-01-18vnet: distinguish between max_frame_size and MTUDamjan Marion1-2/+2
2022-01-14dpdk: refactor device setupDamjan Marion1-154/+5
2022-01-14dpdk: fix burst function outputDamjan Marion1-3/+3
2022-01-12dpdk: improve loggingDamjan Marion1-10/+35
2022-01-12dpdk: update packet offload flagsDamjan Marion1-13/+40
2022-01-12dpdk: always display burst function nameDamjan Marion1-12/+10
2022-01-09dpdk: interface capabilities cleanupDamjan Marion1-2/+2
2022-01-09dpdk: port type code cleanupDamjan Marion1-70/+10
2022-01-09dpdk: new mbuf flags in format functionDamjan Marion1-26/+26
2022-01-08dpdk: new flags formatDamjan Marion1-3/+4
2022-01-05dpdk: move port config to single structDamjan Marion1-8/+10
2022-01-05dpdk: remove unused flagDamjan Marion1-98/+88
2022-01-05dpdk: remove "convenience" varsDamjan Marion1-1/+2
2021-09-07dpdk: lro supportMohammed Hawari1-0/+1
2021-08-20vlib: add format_vnet_buffer_no_chainBenoît Ganne1-6/+4
2021-07-16dpdk: improve tx offload formattingMohsin Kazmi1-16/+32
2021-05-27dpdk: bump to 21.05Fan Zhang1-12/+16
2020-12-11dpdk: bump to dpdk 20.11Fan Zhang1-3/+23
2020-09-08dpdk: fix extended stat stringsChristian Hopps1-2/+2
2020-07-16vppinfra: fix format_c_identifier vector overflowBenoît Ganne1-4/+2
2020-04-28flow: add RSS supportChenmin Sun1-24/+2
2020-04-27vlib: deprecate i2c and cjDave Barach1-1/+0
2020-03-27dpdk: enable DPDK iAVF PMDChenmin Sun1-0/+4
2020-03-12dpdk: tx/rx burst function description refactorChenmin Sun1-6/+31
2020-02-05dpdk: output switch informationHaggai Eran1-0/+21
2020-01-30misc: deprecate dpdk hqosDamjan Marion1-19/+0
2019-12-17dpdk: add devargs supportChenmin Sun1-0/+3
2019-11-14dpdk: Enable bnxt PMDAndy Gospodarek1-0/+4
2019-09-05dpdk: fix extended statsFilip Tehlar1-1/+1
2019-08-06dpdk: remove SFP eeprom dump from 'show hardware-interfaces' and 'show hardwa...Lijian.Zhang1-2/+5
2019-06-06dpdk: fix clear hw statsFilip Tehlar1-2/+2
2019-06-04dpdk: rework extended statsFilip Tehlar1-22/+19
2019-05-30dpdk: remove bonding codeDamjan Marion1-7/+0
2019-05-27dpdk: fix rss configuration error issueChenmin Sun1-7/+5
2019-03-14dpdk: Add E810 family supportChenminSun1-0/+4
2019-03-12dpdk: pass log-level configuration to EALStephen Hemminger1-24/+0
2019-01-13dpdk: show hardware may display the wrong information for rss activeSteven1-0/+1
2018-11-28dpdk: allow interface name to be specified from startup.confDamjan Marion1-0/+3
2018-11-08vnet: store hw interface speed in kbps instead of using flagsDamjan Marion1-2/+2
2018-11-06dpdk: format_dpdk_device_name cleanupDamjan Marion1-7/+7
2018-11-06dpdk: fix device name suffix confusion with failsafe/netvscStephen Hemminger1-2/+2
2018-11-06dpdk: fix pmd device type when using netvsc or failsafeStephen Hemminger1-1/+1
2018-11-02dpdk: restore special handling for failsafe driverStephen Hemminger1-1/+1
2018-10-20dpdk: add netvsc PMDStephen Hemminger1-0/+4
2018-10-20dpdk: use rx/tx_offload_names to formatStephen Hemminger1-38/+53
2018-10-15dpdk: only look at PCI information on PCI devicesStephen Hemminger1-3/+4
2018-09-26dpdk: fix QSFP+ module infoDamjan Marion1-1/+2
2018-09-25dpdk: show pluggable info in 'show hardware'Damjan Marion1-0/+28
>1, i; u32 gso_size = 0; vlib_buffer_t *b; u32 hdr_len = 0; bi0 = buffers[0]; b0 = vlib_get_buffer (vm, bi0); b = b0; space_left = vmxnet3_tx_ring_space_left (txq); while (b->flags & VLIB_BUFFER_NEXT_PRESENT) { u32 next_buffer = b->next_buffer; b = vlib_get_buffer (vm, next_buffer); space_needed++; } if (PREDICT_FALSE (space_left < space_needed)) { vmxnet3_txq_release (vm, vd, txq); space_left = vmxnet3_tx_ring_space_left (txq); if (PREDICT_FALSE (space_left < space_needed)) { vlib_buffer_free_one (vm, bi0); vlib_error_count (vm, node->node_index, VMXNET3_TX_ERROR_NO_FREE_SLOTS, 1); buffers++; n_left--; /* * Drop this packet. But we may have enough room for the next * packet */ continue; } } /* * Toggle the generation bit for SOP fragment to avoid device starts * reading incomplete packet */ generation = txq->tx_ring.gen ^ VMXNET3_TXF_GEN; first_idx = txq->tx_ring.produce; for (i = 0; i < space_needed; i++) { b0 = vlib_get_buffer (vm, bi0); VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b0); desc_idx = txq->tx_ring.produce; vmxnet3_tx_ring_advance_produce (txq); txq->tx_ring.bufs[desc_idx] = bi0; txd = &txq->tx_desc[desc_idx]; txd->address = vlib_buffer_get_current_pa (vm, b0); txd->flags[0] = generation | b0->current_length; txd->flags[1] = 0; if (PREDICT_FALSE (b0->flags & VNET_BUFFER_F_GSO)) { /* * We should not be getting GSO outbound traffic unless it is * lro is enable */ ASSERT (vd->gso_enable == 1); gso_size = vnet_buffer2 (b0)->gso_size; hdr_len = vnet_buffer (b0)->l4_hdr_offset + sizeof (ethernet_header_t); } generation = txq->tx_ring.gen; bi0 = b0->next_buffer; } if (PREDICT_FALSE (gso_size != 0)) { txd->flags[1] = hdr_len; txd->flags[1] |= VMXNET3_TXF_OM (VMXNET3_OM_TSO); txd->flags[0] |= VMXNET3_TXF_MSSCOF (gso_size); } txd->flags[1] |= VMXNET3_TXF_CQ | VMXNET3_TXF_EOP; asm volatile ("":::"memory"); /* * Now toggle back the generation bit for the first segment. * Device can start reading the packet */ txq->tx_desc[first_idx].flags[0] ^= VMXNET3_TXF_GEN; buffers++; n_left--; } if (PREDICT_TRUE (produce != txq->tx_ring.produce)) vmxnet3_reg_write_inline (vd, 0, txq->reg_txprod, txq->tx_ring.produce); clib_spinlock_unlock_if_init (&txq->lock); return (frame->n_vectors - n_left); } /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */