[PATCH] igb: handle VF LPE mailbox message
From: Sergio Gonzalez Monroy <hidden>
Date: 2015-03-18 12:01:31
Subsystem:
library code, the rest · Maintainers:
Andrew Morton, Linus Torvalds
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 <redacted> --- 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 bc3816a..2d49379 100644
--- a/lib/librte_pmd_e1000/igb_pf.c
+++ b/lib/librte_pmd_e1000/igb_pf.c@@ -395,6 +395,31 @@ igb_vf_set_vlan(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf) } 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) { uint16_t mbx_size = E1000_VFMAILBOX_SIZE;
@@ -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;
--
1.9.3