Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a5b37888 authored by Raghu Vatsavayi's avatar Raghu Vatsavayi Committed by David S. Miller
Browse files

liquidio: Consider PTP for packet size calculations



This patch is to refactor packet size calculations to support PTP enabled
for 66xx and 68xx cards and also other cards that do not support PTP.

Signed-off-by: default avatarDerek Chickles <derek.chickles@caviumnetworks.com>
Signed-off-by: default avatarSatanand Burla <satananda.burla@caviumnetworks.com>
Signed-off-by: default avatarFelix Manlunas <felix.manlunas@caviumnetworks.com>
Signed-off-by: default avatarRaghu Vatsavayi <raghu.vatsavayi@caviumnetworks.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cabeb13b
Loading
Loading
Loading
Loading
+21 −13
Original line number Diff line number Diff line
@@ -84,6 +84,8 @@ static int conf_type;
module_param(conf_type, int, 0);
MODULE_PARM_DESC(conf_type, "select octeon configuration 0 default 1 ovs");

static int ptp_enable = 1;

/* Bit mask values for lio->ifstate */
#define   LIO_IFSTATE_DROQ_OPS             0x01
#define   LIO_IFSTATE_REGISTERED           0x02
@@ -1851,6 +1853,7 @@ liquidio_push_packet(u32 octeon_id,
	if (netdev) {
		int packet_was_received;
		struct lio *lio = GET_LIO(netdev);
		struct octeon_device *oct = lio->oct_dev;

		/* Do not proceed if the interface is not in RUNNING state. */
		if (!ifstate_check(lio, LIO_IFSTATE_RUNNING)) {
@@ -1889,22 +1892,27 @@ liquidio_push_packet(u32 octeon_id,
			put_page(pg_info->page);
		}

		if (((oct->chip_id == OCTEON_CN66XX) ||
		     (oct->chip_id == OCTEON_CN68XX)) &&
		    ptp_enable) {
			if (rh->r_dh.has_hwtstamp) {
			/* timestamp is included from the hardware at the
			 * beginning of the packet.
				/* timestamp is included from the hardware at
				 * the beginning of the packet.
				 */
			if (ifstate_check(lio,
					  LIO_IFSTATE_RX_TIMESTAMP_ENABLED)) {
				if (ifstate_check
				    (lio, LIO_IFSTATE_RX_TIMESTAMP_ENABLED)) {
					/* Nanoseconds are in the first 64-bits
					 * of the packet.
					 */
					memcpy(&ns, (skb->data), sizeof(ns));
					shhwtstamps = skb_hwtstamps(skb);
					shhwtstamps->hwtstamp =
					ns_to_ktime(ns + lio->ptp_adjust);
						ns_to_ktime(ns +
							    lio->ptp_adjust);
				}
				skb_pull(skb, sizeof(ns));
			}
		}

		skb->protocol = eth_type_trans(skb, skb->dev);

+4 −2
Original line number Diff line number Diff line
@@ -174,9 +174,11 @@ static inline void add_sg_size(struct octeon_sg_entry *sg_entry,
/*------------------------- End Scatter/Gather ---------------------------*/

#define   OCTNET_FRM_PTP_HEADER_SIZE  8
#define   OCTNET_FRM_HEADER_SIZE     30 /* PTP timestamp + VLAN + Ethernet */

#define   OCTNET_MIN_FRM_SIZE        (64  + OCTNET_FRM_PTP_HEADER_SIZE)
#define   OCTNET_FRM_HEADER_SIZE     22 /* VLAN + Ethernet */

#define   OCTNET_MIN_FRM_SIZE        64

#define   OCTNET_MAX_FRM_SIZE        (16000 + OCTNET_FRM_HEADER_SIZE)

#define   OCTNET_DEFAULT_FRM_SIZE    (1500 + OCTNET_FRM_HEADER_SIZE)