From: Bernard Iremonger <bernard.iremonger@intel.com>
To: dev@dpdk.org, rahul.r.shah@intel.com, wenzhuo.lu@intel.com,
az5157@att.com, jerin.jacob@caviumnetworks.com
Cc: Bernard Iremonger <bernard.iremonger@intel.com>
Subject: [PATCH v3 2/2] net/ixgbe: add callback to user app on VF to PF mbox msg
Date: Fri, 30 Sep 2016 16:45:08 +0100 [thread overview]
Message-ID: <1475250308-5498-3-git-send-email-bernard.iremonger@intel.com> (raw)
In-Reply-To: <1475250308-5498-1-git-send-email-bernard.iremonger@intel.com>
call _rte_eth_dev_callback_process_vf from ixgbe_rcv_msg_from_vf function.
The callback asks the user application if it is allowed to perform
the function.
If the cb_param.retval is RTE_PMD_IXGBE_MB_EVENT_PROCEED then continue,
if 0, do nothing and send ACK to VF
if > 1, do nothing and send NAK to VF.
Signed-off-by: Alex Zelezniak <az5157@att.com>
Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
---
drivers/net/ixgbe/ixgbe_pf.c | 42 +++++++++++++++++++++++++++++++++------
drivers/net/ixgbe/rte_pmd_ixgbe.h | 11 ++++++++++
2 files changed, 47 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
index 56393ff..3c5bf38 100644
--- a/drivers/net/ixgbe/ixgbe_pf.c
+++ b/drivers/net/ixgbe/ixgbe_pf.c
@@ -1,7 +1,7 @@
/*-
* BSD LICENSE
*
- * Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
+ * Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -51,6 +51,7 @@
#include "base/ixgbe_common.h"
#include "ixgbe_ethdev.h"
+#include "rte_pmd_ixgbe.h"
#define IXGBE_MAX_VFTA (128)
#define IXGBE_VF_MSG_SIZE_DEFAULT 1
@@ -660,6 +661,7 @@ ixgbe_rcv_msg_from_vf(struct rte_eth_dev *dev, uint16_t vf)
struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
struct ixgbe_vf_info *vfinfo =
*IXGBE_DEV_PRIVATE_TO_P_VFDATA(dev->data->dev_private);
+ struct rte_eth_mb_event_param cb_param;
retval = ixgbe_read_mbx(hw, msgbuf, mbx_size, vf);
if (retval) {
@@ -674,27 +676,54 @@ ixgbe_rcv_msg_from_vf(struct rte_eth_dev *dev, uint16_t vf)
/* flush the ack before we write any messages back */
IXGBE_WRITE_FLUSH(hw);
+ /**
+ * initialise structure to send to user application
+ * will return response from user in retval field
+ */
+ cb_param.retval = RTE_PMD_IXGBE_MB_EVENT_PROCEED;
+ cb_param.vfid = vf;
+ cb_param.msg_type = msgbuf[0] & 0xFFFF;
+ cb_param.userdata = (void *)msgbuf;
+
/* perform VF reset */
if (msgbuf[0] == IXGBE_VF_RESET) {
int ret = ixgbe_vf_reset(dev, vf, msgbuf);
vfinfo[vf].clear_to_send = true;
+
+ /* notify application about VF reset */
+ _rte_eth_dev_callback_process_vf(dev, RTE_ETH_EVENT_VF_MBOX, &cb_param);
return ret;
}
+ /**
+ * ask user application if we allowed to perform those functions
+ * if we get cb_param.retval == RTE_PMD_IXGBE_MB_EVENT_PROCEED then business
+ * as usual,
+ * if 0, do nothing and send ACK to VF
+ * if cb_param.retval > 1, do nothing and send NAK to VF
+ */
+ _rte_eth_dev_callback_process_vf(dev, RTE_ETH_EVENT_VF_MBOX, &cb_param);
+
+ retval = cb_param.retval;
+
/* check & process VF to PF mailbox message */
switch ((msgbuf[0] & 0xFFFF)) {
case IXGBE_VF_SET_MAC_ADDR:
- retval = ixgbe_vf_set_mac_addr(dev, vf, msgbuf);
+ if (retval == RTE_PMD_IXGBE_MB_EVENT_PROCEED)
+ retval = ixgbe_vf_set_mac_addr(dev, vf, msgbuf);
break;
case IXGBE_VF_SET_MULTICAST:
- retval = ixgbe_vf_set_multicast(dev, vf, msgbuf);
+ if (retval == RTE_PMD_IXGBE_MB_EVENT_PROCEED)
+ retval = ixgbe_vf_set_multicast(dev, vf, msgbuf);
break;
case IXGBE_VF_SET_LPE:
- retval = ixgbe_set_vf_lpe(dev, vf, msgbuf);
+ if (retval == RTE_PMD_IXGBE_MB_EVENT_PROCEED)
+ retval = ixgbe_set_vf_lpe(dev, vf, msgbuf);
break;
case IXGBE_VF_SET_VLAN:
- retval = ixgbe_vf_set_vlan(dev, vf, msgbuf);
+ if (retval == RTE_PMD_IXGBE_MB_EVENT_PROCEED)
+ retval = ixgbe_vf_set_vlan(dev, vf, msgbuf);
break;
case IXGBE_VF_API_NEGOTIATE:
retval = ixgbe_negotiate_vf_api(dev, vf, msgbuf);
@@ -704,7 +733,8 @@ ixgbe_rcv_msg_from_vf(struct rte_eth_dev *dev, uint16_t vf)
msg_size = IXGBE_VF_GET_QUEUE_MSG_SIZE;
break;
case IXGBE_VF_UPDATE_XCAST_MODE:
- retval = ixgbe_set_vf_mc_promisc(dev, vf, msgbuf);
+ if (retval == RTE_PMD_IXGBE_MB_EVENT_PROCEED)
+ retval = ixgbe_set_vf_mc_promisc(dev, vf, msgbuf);
break;
default:
PMD_DRV_LOG(DEBUG, "Unhandled Msg %8.8x", (unsigned)msgbuf[0]);
diff --git a/drivers/net/ixgbe/rte_pmd_ixgbe.h b/drivers/net/ixgbe/rte_pmd_ixgbe.h
index 33b5b2d..212cc5d 100644
--- a/drivers/net/ixgbe/rte_pmd_ixgbe.h
+++ b/drivers/net/ixgbe/rte_pmd_ixgbe.h
@@ -181,4 +181,15 @@ int rte_pmd_ixgbe_set_vf_split_drop_en(uint8_t port, uint16_t vf, uint8_t on);
*/
int
rte_pmd_ixgbe_set_vf_vlan_stripq(uint8_t port, uint16_t vf, uint8_t on);
+
+/**
+ * Response sent back to ixgbe driver from user app after callback
+ */
+enum rte_pmd_ixgbe_mb_event_rsp {
+ RTE_PMD_IXGBE_MB_EVENT_NOOP_ACK, /**< skip mbox request and ACK */
+ RTE_PMD_IXGBE_MB_EVENT_NOOP_NACK, /**< skip mbox request and NACK */
+ RTE_PMD_IXGBE_MB_EVENT_PROCEED, /**< proceed with mbox request */
+ RTE_PMD_IXGBE_MB_EVENT_MAX /**< max value of this enum */
+};
+
#endif /* _PMD_IXGBE_H_ */
--
2.9.0
next prev parent reply other threads:[~2016-09-30 15:45 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-30 15:45 [PATCH v3 0/2] add callbacks for VF management Bernard Iremonger
2016-09-30 15:45 ` [PATCH v3 1/2] librte_ether: add internal callback functions Bernard Iremonger
2016-10-02 9:12 ` Stephen Hemminger
2016-10-03 15:29 ` Iremonger, Bernard
2016-09-30 15:45 ` Bernard Iremonger [this message]
2016-10-04 14:52 ` [PATCH v4 0/2] add callbacks for VF management Bernard Iremonger
2016-10-06 11:26 ` [PATCH v5 00/13] modify callback " Bernard Iremonger
2016-10-06 16:48 ` [PATCH v6 0/2] " Bernard Iremonger
2016-10-07 16:46 ` [PATCH v7 " Bernard Iremonger
2016-10-07 22:52 ` Thomas Monjalon
2016-10-10 14:34 ` [PATCH v8 " Bernard Iremonger
2016-10-14 0:07 ` Thomas Monjalon
2016-10-10 14:34 ` [PATCH v8 1/2] librte_ether: modify internal callback function Bernard Iremonger
2016-10-10 14:34 ` [PATCH v8 2/2] net/ixgbe: add callback to user app on VF to PF mbox msg Bernard Iremonger
2016-10-12 15:03 ` [PATCH v8 0/2] add API's for VF management Bernard Iremonger
2016-10-12 17:54 ` [PATCH v9 " Bernard Iremonger
2016-10-13 13:47 ` Bruce Richardson
2016-10-12 17:54 ` [PATCH v9 1/2] net/ixgbe: " Bernard Iremonger
2016-10-12 17:54 ` [PATCH v9 2/2] app/test_pmd: add tests for new API's Bernard Iremonger
2016-10-12 15:03 ` [PATCH v8 1/2] net/ixgbe: add API's for VF management Bernard Iremonger
2016-10-12 15:03 ` [PATCH v8 2/2] app/test_pmd: add tests for new API's Bernard Iremonger
2016-10-12 15:11 ` Thomas Monjalon
2016-10-12 15:27 ` Iremonger, Bernard
2016-10-12 15:36 ` Thomas Monjalon
2016-10-12 15:48 ` Iremonger, Bernard
2016-10-12 16:06 ` Thomas Monjalon
2016-10-12 16:21 ` Iremonger, Bernard
2016-10-12 16:31 ` Thomas Monjalon
2016-10-12 16:50 ` Iremonger, Bernard
2016-10-12 17:20 ` Iremonger, Bernard
2016-10-07 16:46 ` [PATCH v7 1/2] librte_ether: modify internal callback function Bernard Iremonger
2016-10-07 16:46 ` [PATCH v7 2/2] net/ixgbe: add callback to user app on VF to PF mbox msg Bernard Iremonger
2016-10-07 22:44 ` Thomas Monjalon
2016-10-10 14:31 ` Iremonger, Bernard
2016-10-06 16:48 ` [PATCH v6 1/2] librte_ether: modify internal callback function Bernard Iremonger
2016-10-07 12:29 ` Thomas Monjalon
2016-10-07 16:57 ` Iremonger, Bernard
2016-10-06 16:48 ` [PATCH v6 2/2] net/ixgbe: add callback to user app on VF to PF mbox msg Bernard Iremonger
2016-10-07 12:14 ` Thomas Monjalon
2016-10-07 12:19 ` Iremonger, Bernard
2016-10-06 11:26 ` [PATCH v5 01/13] librte_ether: modify internal callback function Bernard Iremonger
2016-10-06 12:56 ` Thomas Monjalon
2016-10-06 14:33 ` Iremonger, Bernard
2016-10-06 14:56 ` Thomas Monjalon
2016-10-06 15:32 ` Iremonger, Bernard
2016-10-06 15:41 ` Thomas Monjalon
2016-10-06 15:45 ` Iremonger, Bernard
2016-10-06 11:26 ` [PATCH v5 02/13] net/ixgbe: add callback to user app on VF to PF mbox msg Bernard Iremonger
2016-10-06 11:26 ` [PATCH v5 03/13] app/test: add parameter to callback process function Bernard Iremonger
2016-10-06 11:26 ` [PATCH v5 04/13] net/bonding: " Bernard Iremonger
2016-10-06 11:26 ` [PATCH v5 05/13] net/e1000: " Bernard Iremonger
2016-10-06 11:26 ` [PATCH v5 06/13] net/i40e: update call " Bernard Iremonger
2016-10-06 11:26 ` [PATCH v5 07/13] net/mlx4: add parameter " Bernard Iremonger
2016-10-06 11:26 ` [PATCH v5 08/13] net/mlx5: " Bernard Iremonger
2016-10-06 11:26 ` [PATCH v5 09/13] net/nfp: " Bernard Iremonger
2016-10-06 11:26 ` [PATCH v5 10/13] net/thunderx: " Bernard Iremonger
2016-10-06 11:26 ` [PATCH v5 11/13] net/vhost: " Bernard Iremonger
2016-10-06 11:26 ` [PATCH v5 12/13] net/virtio: " Bernard Iremonger
2016-10-06 11:26 ` [PATCH v5 13/13] net/enic: " Bernard Iremonger
2016-10-04 14:52 ` [PATCH v4 1/2] librte_ether: add internal callback functions Bernard Iremonger
2016-10-05 16:10 ` Thomas Monjalon
2016-10-05 17:04 ` Iremonger, Bernard
2016-10-05 17:19 ` Thomas Monjalon
2016-10-04 14:52 ` [PATCH v4 2/2] net/ixgbe: add callback to user app on VF to PF mbox msg Bernard Iremonger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1475250308-5498-3-git-send-email-bernard.iremonger@intel.com \
--to=bernard.iremonger@intel.com \
--cc=az5157@att.com \
--cc=dev@dpdk.org \
--cc=jerin.jacob@caviumnetworks.com \
--cc=rahul.r.shah@intel.com \
--cc=wenzhuo.lu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.