Commit f7f97cbc authored by Jedrzej Jagielski's avatar Jedrzej Jagielski Committed by Jakub Kicinski
Browse files

ixgbe: handle IXGBE_VF_GET_PF_LINK_STATE mailbox operation



Update supported API version and provide handler for
IXGBE_VF_GET_PF_LINK_STATE cmd.
Simply put stored values of link speed and link_up from adapter context.

Reviewed-by: default avatarPrzemek Kitszel <przemyslaw.kitszel@intel.com>
Reviewed-by: default avatarAleksandr Loktionov <aleksandr.loktionov@intel.com>
Signed-off-by: default avatarJedrzej Jagielski <jedrzej.jagielski@intel.com>
Link: https://lore.kernel.org/stable/20250828095227.1857066-3-jedrzej.jagielski%40intel.com


Tested-by: default avatarRafal Romanowski <rafal.romanowski@intel.com>
Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Link: https://patch.msgid.link/20251009-jk-iwl-net-2025-10-01-v3-3-ef32a425b92a@intel.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 53f0eb62
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -50,6 +50,8 @@ enum ixgbe_pfvf_api_rev {
	ixgbe_mbox_api_12,	/* API version 1.2, linux/freebsd VF driver */
	ixgbe_mbox_api_13,	/* API version 1.3, linux/freebsd VF driver */
	ixgbe_mbox_api_14,	/* API version 1.4, linux/freebsd VF driver */
	ixgbe_mbox_api_15,	/* API version 1.5, linux/freebsd VF driver */
	ixgbe_mbox_api_16,	/* API version 1.6, linux/freebsd VF driver */
	/* This value should always be last */
	ixgbe_mbox_api_unknown,	/* indicates that API version is not known */
};
@@ -86,6 +88,9 @@ enum ixgbe_pfvf_api_rev {

#define IXGBE_VF_GET_LINK_STATE 0x10 /* get vf link state */

/* mailbox API, version 1.6 VF requests */
#define IXGBE_VF_GET_PF_LINK_STATE	0x11 /* request PF to send link info */

/* length of permanent address message returned from PF */
#define IXGBE_VF_PERMADDR_MSG_LEN 4
/* word in permanent address message with the current multicast type */
+42 −0
Original line number Diff line number Diff line
@@ -510,6 +510,7 @@ static int ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 max_frame, u32 vf
		case ixgbe_mbox_api_12:
		case ixgbe_mbox_api_13:
		case ixgbe_mbox_api_14:
		case ixgbe_mbox_api_16:
			/* Version 1.1 supports jumbo frames on VFs if PF has
			 * jumbo frames enabled which means legacy VFs are
			 * disabled
@@ -1046,6 +1047,7 @@ static int ixgbe_negotiate_vf_api(struct ixgbe_adapter *adapter,
	case ixgbe_mbox_api_12:
	case ixgbe_mbox_api_13:
	case ixgbe_mbox_api_14:
	case ixgbe_mbox_api_16:
		adapter->vfinfo[vf].vf_api = api;
		return 0;
	default:
@@ -1072,6 +1074,7 @@ static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
	case ixgbe_mbox_api_12:
	case ixgbe_mbox_api_13:
	case ixgbe_mbox_api_14:
	case ixgbe_mbox_api_16:
		break;
	default:
		return -1;
@@ -1112,6 +1115,7 @@ static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)

	/* verify the PF is supporting the correct API */
	switch (adapter->vfinfo[vf].vf_api) {
	case ixgbe_mbox_api_16:
	case ixgbe_mbox_api_14:
	case ixgbe_mbox_api_13:
	case ixgbe_mbox_api_12:
@@ -1145,6 +1149,7 @@ static int ixgbe_get_vf_rss_key(struct ixgbe_adapter *adapter,

	/* verify the PF is supporting the correct API */
	switch (adapter->vfinfo[vf].vf_api) {
	case ixgbe_mbox_api_16:
	case ixgbe_mbox_api_14:
	case ixgbe_mbox_api_13:
	case ixgbe_mbox_api_12:
@@ -1174,6 +1179,7 @@ static int ixgbe_update_vf_xcast_mode(struct ixgbe_adapter *adapter,
		fallthrough;
	case ixgbe_mbox_api_13:
	case ixgbe_mbox_api_14:
	case ixgbe_mbox_api_16:
		break;
	default:
		return -EOPNOTSUPP;
@@ -1244,6 +1250,7 @@ static int ixgbe_get_vf_link_state(struct ixgbe_adapter *adapter,
	case ixgbe_mbox_api_12:
	case ixgbe_mbox_api_13:
	case ixgbe_mbox_api_14:
	case ixgbe_mbox_api_16:
		break;
	default:
		return -EOPNOTSUPP;
@@ -1254,6 +1261,38 @@ static int ixgbe_get_vf_link_state(struct ixgbe_adapter *adapter,
	return 0;
}

/**
 * ixgbe_send_vf_link_status - send link status data to VF
 * @adapter: pointer to adapter struct
 * @msgbuf: pointer to message buffers
 * @vf: VF identifier
 *
 * Reply for IXGBE_VF_GET_PF_LINK_STATE mbox command sending link status data.
 *
 * Return: 0 on success or -EOPNOTSUPP when operation is not supported.
 */
static int ixgbe_send_vf_link_status(struct ixgbe_adapter *adapter,
				     u32 *msgbuf, u32 vf)
{
	struct ixgbe_hw *hw = &adapter->hw;

	switch (adapter->vfinfo[vf].vf_api) {
	case ixgbe_mbox_api_16:
		if (hw->mac.type != ixgbe_mac_e610)
			return -EOPNOTSUPP;
		break;
	default:
		return -EOPNOTSUPP;
	}
	/* Simply provide stored values as watchdog & link status events take
	 * care of its freshness.
	 */
	msgbuf[1] = adapter->link_speed;
	msgbuf[2] = adapter->link_up;

	return 0;
}

static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
{
	u32 mbx_size = IXGBE_VFMAILBOX_SIZE;
@@ -1328,6 +1367,9 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
	case IXGBE_VF_IPSEC_DEL:
		retval = ixgbe_ipsec_vf_del_sa(adapter, msgbuf, vf);
		break;
	case IXGBE_VF_GET_PF_LINK_STATE:
		retval = ixgbe_send_vf_link_status(adapter, msgbuf, vf);
		break;
	default:
		e_err(drv, "Unhandled Msg %8.8x\n", msgbuf[0]);
		retval = -EIO;