From: Sergio Gonzalez Monroy Date: Wed, 18 Mar 2015 12:01:31 +0000 (+0000) Subject: igb: handle VF LPE mailbox message X-Git-Tag: spdx-start~9253 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=9f0bf3f4a3eabd7ab5af13b4ed793c36e7615b35;p=dpdk.git igb: handle VF LPE mailbox message This patch adds the handle function for the LPE mailbox message (VF to PF) to set maximum packet size, which can be used to enable jumbo frame support. Signed-off-by: Sergio Gonzalez Monroy Acked-by: Konstantin Ananyev --- diff --git a/lib/librte_pmd_e1000/igb_pf.c b/lib/librte_pmd_e1000/igb_pf.c index bc3816a759..2d49379c9e 100644 --- a/lib/librte_pmd_e1000/igb_pf.c +++ b/lib/librte_pmd_e1000/igb_pf.c @@ -394,6 +394,31 @@ igb_vf_set_vlan(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf) return 0; } +static int +igb_vf_set_rlpml(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf) +{ + struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); + uint16_t rlpml = msgbuf[1] & E1000_VMOLR_RLPML_MASK; + uint32_t max_frame = rlpml + ETHER_HDR_LEN + ETHER_CRC_LEN; + uint32_t vmolr; + + if ((max_frame < ETHER_MIN_LEN) || (max_frame > ETHER_MAX_JUMBO_FRAME_LEN)) + return -1; + + vmolr = E1000_READ_REG(hw, E1000_VMOLR(vf)); + + vmolr &= ~E1000_VMOLR_RLPML_MASK; + vmolr |= rlpml; + + /* Enable Long Packet support */ + vmolr |= E1000_VMOLR_LPE; + + E1000_WRITE_REG(hw, E1000_VMOLR(vf), vmolr); + E1000_WRITE_FLUSH(hw); + + return 0; +} + static int igb_rcv_msg_from_vf(struct rte_eth_dev *dev, uint16_t vf) { @@ -428,6 +453,9 @@ igb_rcv_msg_from_vf(struct rte_eth_dev *dev, uint16_t vf) case E1000_VF_SET_MULTICAST: retval = igb_vf_set_multicast(dev, vf, msgbuf); break; + case E1000_VF_SET_LPE: + retval = igb_vf_set_rlpml(dev, vf, msgbuf); + break; case E1000_VF_SET_VLAN: retval = igb_vf_set_vlan(dev, vf, msgbuf); break;