svn commit: r354513 - head/sys/dev/iwm
Mark Johnston
markj at FreeBSD.org
Thu Nov 7 23:38:37 UTC 2019
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;
More information about the svn-src-head
mailing list