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

Function ixgbe_vf_set_multicast

dpdk/drivers/net/ixgbe/ixgbe_pf.c:481–530  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

479}
480
481static int
482ixgbe_vf_set_multicast(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
483{
484 struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
485 struct ixgbe_vf_info *vfinfo =
486 *(IXGBE_DEV_PRIVATE_TO_P_VFDATA(dev->data->dev_private));
487 int nb_entries = (msgbuf[0] & IXGBE_VT_MSGINFO_MASK) >>
488 IXGBE_VT_MSGINFO_SHIFT;
489 uint16_t *hash_list = (uint16_t *)&msgbuf[1];
490 uint32_t mta_idx;
491 uint32_t mta_shift;
492 const uint32_t IXGBE_MTA_INDEX_MASK = 0x7F;
493 const uint32_t IXGBE_MTA_BIT_SHIFT = 5;
494 const uint32_t IXGBE_MTA_BIT_MASK = (0x1 << IXGBE_MTA_BIT_SHIFT) - 1;
495 uint32_t reg_val;
496 int i;
497 u32 vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf));
498
499 /* Disable multicast promiscuous first */
500 ixgbe_disable_vf_mc_promisc(dev, vf);
501
502 /* only so many hash values supported */
503 nb_entries = RTE_MIN(nb_entries, IXGBE_MAX_VF_MC_ENTRIES);
504
505 /* store the mc entries */
506 vfinfo->num_vf_mc_hashes = (uint16_t)nb_entries;
507 for (i = 0; i < nb_entries; i++) {
508 vfinfo->vf_mc_hashes[i] = hash_list[i];
509 }
510
511 if (nb_entries == 0) {
512 vmolr &= ~IXGBE_VMOLR_ROMPE;
513 IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr);
514 return 0;
515 }
516
517 for (i = 0; i < vfinfo->num_vf_mc_hashes; i++) {
518 mta_idx = (vfinfo->vf_mc_hashes[i] >> IXGBE_MTA_BIT_SHIFT)
519 & IXGBE_MTA_INDEX_MASK;
520 mta_shift = vfinfo->vf_mc_hashes[i] & IXGBE_MTA_BIT_MASK;
521 reg_val = IXGBE_READ_REG(hw, IXGBE_MTA(mta_idx));
522 reg_val |= (1 << mta_shift);
523 IXGBE_WRITE_REG(hw, IXGBE_MTA(mta_idx), reg_val);
524 }
525
526 vmolr |= IXGBE_VMOLR_ROMPE;
527 IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr);
528
529 return 0;
530}
531
532static int
533ixgbe_vf_set_vlan(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)

Callers 1

ixgbe_rcv_msg_from_vfFunction · 0.85

Calls 1

Tested by

no test coverage detected