Commit 682eaad9 authored by Yangbo Lu's avatar Yangbo Lu Committed by David S. Miller
Browse files

net: mscc: ocelot: convert to ocelot_port_txtstamp_request()



Convert to a common ocelot_port_txtstamp_request() for TX timestamp
request handling.

Signed-off-by: default avatarYangbo Lu <yangbo.lu@nxp.com>
Reviewed-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Acked-by: default avatarRichard Cochran <richardcochran@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d150946e
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -1399,18 +1399,17 @@ static void felix_txtstamp(struct dsa_switch *ds, int port,
			   struct sk_buff *skb)
{
	struct ocelot *ocelot = ds->priv;
	struct ocelot_port *ocelot_port = ocelot->ports[port];
	struct sk_buff *clone;
	struct sk_buff *clone = NULL;

	if (!ocelot->ptp)
		return;

	if (ocelot->ptp && ocelot_port->ptp_cmd == IFH_REW_OP_TWO_STEP_PTP) {
		clone = skb_clone_sk(skb);
		if (!clone)
	if (ocelot_port_txtstamp_request(ocelot, port, skb, &clone))
		return;

		ocelot_port_add_txtstamp_skb(ocelot, port, clone);
	if (clone)
		OCELOT_SKB_CB(skb)->clone = clone;
}
}

static int felix_change_mtu(struct dsa_switch *ds, int port, int new_mtu)
{
+21 −3
Original line number Diff line number Diff line
@@ -530,7 +530,7 @@ void ocelot_port_disable(struct ocelot *ocelot, int port)
}
EXPORT_SYMBOL(ocelot_port_disable);

void ocelot_port_add_txtstamp_skb(struct ocelot *ocelot, int port,
static void ocelot_port_add_txtstamp_skb(struct ocelot *ocelot, int port,
					 struct sk_buff *clone)
{
	struct ocelot_port *ocelot_port = ocelot->ports[port];
@@ -545,7 +545,25 @@ void ocelot_port_add_txtstamp_skb(struct ocelot *ocelot, int port,

	spin_unlock(&ocelot_port->ts_id_lock);
}
EXPORT_SYMBOL(ocelot_port_add_txtstamp_skb);

int ocelot_port_txtstamp_request(struct ocelot *ocelot, int port,
				 struct sk_buff *skb,
				 struct sk_buff **clone)
{
	struct ocelot_port *ocelot_port = ocelot->ports[port];
	u8 ptp_cmd = ocelot_port->ptp_cmd;

	if (ptp_cmd == IFH_REW_OP_TWO_STEP_PTP) {
		*clone = skb_clone_sk(skb);
		if (!(*clone))
			return -ENOMEM;

		ocelot_port_add_txtstamp_skb(ocelot, port, *clone);
	}

	return 0;
}
EXPORT_SYMBOL(ocelot_port_txtstamp_request);

static void ocelot_get_hwtimestamp(struct ocelot *ocelot,
				   struct timespec64 *ts)
+7 −11
Original line number Diff line number Diff line
@@ -507,19 +507,15 @@ static netdev_tx_t ocelot_port_xmit(struct sk_buff *skb, struct net_device *dev)

	/* Check if timestamping is needed */
	if (ocelot->ptp && (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
		rew_op = ocelot_port->ptp_cmd;

		if (ocelot_port->ptp_cmd == IFH_REW_OP_TWO_STEP_PTP) {
			struct sk_buff *clone;
		struct sk_buff *clone = NULL;

			clone = skb_clone_sk(skb);
			if (!clone) {
		if (ocelot_port_txtstamp_request(ocelot, port, skb, &clone)) {
			kfree_skb(skb);
			return NETDEV_TX_OK;
		}

			ocelot_port_add_txtstamp_skb(ocelot, port, clone);

		if (ocelot_port->ptp_cmd == IFH_REW_OP_TWO_STEP_PTP) {
			rew_op = ocelot_port->ptp_cmd;
			rew_op |= OCELOT_SKB_CB(clone)->ts_id << 3;
		}
	}
+3 −2
Original line number Diff line number Diff line
@@ -828,8 +828,9 @@ int ocelot_vlan_add(struct ocelot *ocelot, int port, u16 vid, bool pvid,
int ocelot_vlan_del(struct ocelot *ocelot, int port, u16 vid);
int ocelot_hwstamp_get(struct ocelot *ocelot, int port, struct ifreq *ifr);
int ocelot_hwstamp_set(struct ocelot *ocelot, int port, struct ifreq *ifr);
void ocelot_port_add_txtstamp_skb(struct ocelot *ocelot, int port,
				  struct sk_buff *clone);
int ocelot_port_txtstamp_request(struct ocelot *ocelot, int port,
				 struct sk_buff *skb,
				 struct sk_buff **clone);
void ocelot_get_txtstamp(struct ocelot *ocelot);
void ocelot_port_set_maxlen(struct ocelot *ocelot, int port, size_t sdu);
int ocelot_get_max_mtu(struct ocelot *ocelot, int port);