From 9f0bf3f4a3eabd7ab5af13b4ed793c36e7615b35 Mon Sep 17 00:00:00 2001 From: Sergio Gonzalez Monroy Date: Wed, 18 Mar 2015 12:01:31 +0000 Subject: [PATCH] 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 --- lib/librte_pmd_e1000/igb_pf.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) 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; -- 2.20.1