Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Nov 2019 23:38:36 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r354513 - head/sys/dev/iwm
Message-ID:  <201911072338.xA7NcaTS074414@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Thu Nov  7 23:38:36 2019
New Revision: 354513
URL: https://svnweb.freebsd.org/changeset/base/354513

Log:
  iwm: Set flag for pad bytes in offload_assist.
  
  Though we don't otherwise use firmware's offload capabilities, we need
  to set this flag when the MAC header's size isn't a multiple of four.
  
  MFC after:	2 weeks
  Sponsored by:	The FreeBSD Foundation

Modified:
  head/sys/dev/iwm/if_iwm.c
  head/sys/dev/iwm/if_iwmreg.h

Modified: head/sys/dev/iwm/if_iwm.c
==============================================================================
--- head/sys/dev/iwm/if_iwm.c	Thu Nov  7 23:38:17 2019	(r354512)
+++ head/sys/dev/iwm/if_iwm.c	Thu Nov  7 23:38:36 2019	(r354513)
@@ -3882,11 +3882,12 @@ iwm_tx(struct iwm_softc *sc, struct mbuf *m, struct ie
 	if (hdrlen & 3) {
 		/* First segment length must be a multiple of 4. */
 		flags |= IWM_TX_CMD_FLG_MH_PAD;
+		tx->offload_assist |= htole16(1 << IWM_TX_CMD_OFFLD_PAD);
 		pad = 4 - (hdrlen & 3);
-	} else
+	} else {
+		tx->offload_assist = 0;
 		pad = 0;
-
-	tx->next_frame_len = 0;
+	}
 
 	tx->len = htole16(totlen);
 	tx->tid_tspec = tid;

Modified: head/sys/dev/iwm/if_iwmreg.h
==============================================================================
--- head/sys/dev/iwm/if_iwmreg.h	Thu Nov  7 23:38:17 2019	(r354512)
+++ head/sys/dev/iwm/if_iwmreg.h	Thu Nov  7 23:38:36 2019	(r354513)
@@ -4477,13 +4477,41 @@ enum iwm_tx_pm_timeouts {
 #define IWM_BAR_DFAULT_RETRY_LIMIT		60
 #define IWM_LOW_RETRY_LIMIT			7
 
+/**
+ * enum iwm_tx_offload_assist_flags_pos -  set %iwm_tx_cmd offload_assist values
+ * @IWM_TX_CMD_OFFLD_IP_HDR: offset to start of IP header (in words)
+ *	from mac header end. For normal case it is 4 words for SNAP.
+ *	note: tx_cmd, mac header and pad are not counted in the offset.
+ *	This is used to help the offload in case there is tunneling such as
+ *	IPv6 in IPv4, in such case the ip header offset should point to the
+ *	inner ip header and IPv4 checksum of the external header should be
+ *	calculated by driver.
+ * @IWM_TX_CMD_OFFLD_L4_EN: enable TCP/UDP checksum
+ * @IWM_TX_CMD_OFFLD_L3_EN: enable IP header checksum
+ * @IWM_TX_CMD_OFFLD_MH_SIZE: size of the mac header in words. Includes the IV
+ *	field. Doesn't include the pad.
+ * @IWM_TX_CMD_OFFLD_PAD: mark 2-byte pad was inserted after the mac header for
+ *	alignment
+ * @IWM_TX_CMD_OFFLD_AMSDU: mark TX command is A-MSDU
+ */
+enum iwm_tx_offload_assist_flags_pos {
+	IWM_TX_CMD_OFFLD_IP_HDR =	0,
+	IWM_TX_CMD_OFFLD_L4_EN =	6,
+	IWM_TX_CMD_OFFLD_L3_EN =	7,
+	IWM_TX_CMD_OFFLD_MH_SIZE =	8,
+	IWM_TX_CMD_OFFLD_PAD =		13,
+	IWM_TX_CMD_OFFLD_AMSDU =	14,
+};
+
+#define IWM_TX_CMD_OFFLD_MH_MASK	0x1f
+#define IWM_TX_CMD_OFFLD_IP_HDR_MASK	0x3f
+
 /* TODO: complete documentation for try_cnt and btkill_cnt */
 /**
  * struct iwm_tx_cmd - TX command struct to FW
  * ( IWM_TX_CMD = 0x1c )
  * @len: in bytes of the payload, see below for details
- * @next_frame_len: same as len, but for next frame (0 if not applicable)
- *	Used for fragmentation and bursting, but not in 11n aggregation.
+ * @offload_assist: TX offload configuration
  * @tx_flags: combination of IWM_TX_CMD_FLG_*
  * @rate_n_flags: rate for *all* Tx attempts, if IWM_TX_CMD_FLG_STA_RATE_MSK is
  *	cleared. Combination of IWM_RATE_MCS_*
@@ -4519,7 +4547,7 @@ enum iwm_tx_pm_timeouts {
  */
 struct iwm_tx_cmd {
 	uint16_t len;
-	uint16_t next_frame_len;
+	uint16_t offload_assist;
 	uint32_t tx_flags;
 	struct {
 		uint8_t try_cnt;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201911072338.xA7NcaTS074414>