All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bernard Iremonger <bernard.iremonger@intel.com>
To: dev@dpdk.org, rahul.r.shah@intel.com, wenzhuo.lu@intel.com,
	az5157@att.com
Cc: Bernard Iremonger <bernard.iremonger@intel.com>
Subject: [PATCH v7 2/2] net/ixgbe: add callback to user app on VF to PF mbox msg
Date: Fri,  7 Oct 2016 17:46:24 +0100	[thread overview]
Message-ID: <1475858784-5303-3-git-send-email-bernard.iremonger@intel.com> (raw)
In-Reply-To: <1475772490-10491-1-git-send-email-bernard.iremonger@intel.com>

call _rte_eth_dev_callback_process 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 | 20 +++++++++++++++++++
 2 files changed, 56 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
index 56393ff..2a177b8 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_pmd_ixgbe_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(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(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 2689668..8665cea 100644
--- a/drivers/net/ixgbe/rte_pmd_ixgbe.h
+++ b/drivers/net/ixgbe/rte_pmd_ixgbe.h
@@ -179,4 +179,24 @@ 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 */
+};
+
+/**
+ * Data sent to the user application when the callback is executed.
+ */
+struct rte_pmd_ixgbe_mb_event_param {
+	uint16_t vfid;     /**< Virtual Function number */
+	uint16_t msg_type; /**< message type */
+	uint16_t retval;   /**< return value */
+	void *userdata;    /**< pointer to user data */
+};
 #endif /* _PMD_IXGBE_H_ */
-- 
2.9.0

  parent reply	other threads:[~2016-10-07 16:46 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 ` [PATCH v3 2/2] net/ixgbe: add callback to user app on VF to PF mbox msg Bernard Iremonger
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       ` Bernard Iremonger [this message]
2016-10-07 22:44         ` [PATCH v7 2/2] net/ixgbe: add callback to user app on VF to PF mbox msg 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=1475858784-5303-3-git-send-email-bernard.iremonger@intel.com \
    --to=bernard.iremonger@intel.com \
    --cc=az5157@att.com \
    --cc=dev@dpdk.org \
    --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.