@@ -377,6 +377,67 @@ attribute-sets:
name: nochange
type: nest
nested-attributes: bitset
+ -
+ name: ulp-ddp-stat
+ attributes:
+ -
+ name: pad
+ value: 1
+ type: pad
+ -
+ name: rx-nvmeotcp-sk-add
+ type: u64
+ -
+ name: rx-nvmeotcp-sk-add-fail
+ type: u64
+ -
+ name: rx-nvmeotcp-sk-del
+ type: u64
+ -
+ name: rx-nvmeotcp-ddp-setup
+ type: u64
+ -
+ name: rx-nvmeotcp-ddp-setup-fail
+ type: u64
+ -
+ name: rx-nvmeotcp-ddp-teardown
+ type: u64
+ -
+ name: rx-nvmeotcp-ddp-drop
+ type: u64
+ -
+ name: rx-nvmeotcp-ddp-resync
+ type: u64
+ -
+ name: rx-nvmeotcp-ddp-packets
+ type: u64
+ -
+ name: rx-nvmeotcp-ddp-bytes
+ type: u64
+ -
+ name: ulp-ddp
+ attributes:
+ -
+ name: header
+ value: 1
+ type: nest
+ nested-attributes: header
+ -
+ name: hw
+ type: nest
+ nested-attributes: bitset
+ -
+ name: active
+ type: nest
+ nested-attributes: bitset
+ -
+ name: wanted
+ type: nest
+ nested-attributes: bitset
+ -
+ name: stats
+ type: nest
+ nested-attributes: ulp-ddp-stat
-
name: channels
attributes:
@@ -1692,3 +1753,44 @@ operations:
name: mm-ntf
doc: Notification for change in MAC Merge configuration.
notify: mm-get
+ -
+ name: ulp-ddp-get
+ doc: Get ULP DDP capabilities and stats.
+
+ attribute-set: ulp-ddp
+
+ do: &ulp-ddp-get-op
+ request:
+ value: 44
+ attributes:
+ - header
+ reply:
+ value: 44
+ attributes:
+ - header
+ - hw
+ - active
+ - stats
+ dump: *ulp-ddp-get-op
+ -
+ name: ulp-ddp-set
+ doc: Set ULP DDP capabilities.
+
+ attribute-set: ulp-ddp
+
+ do:
+ request:
+ value: 45
+ attributes:
+ - header
+ - wanted
+ reply:
+ value: 45
+ attributes:
+ - header
+ - hw
+ - active
+ -
+ name: ulp-ddp-ntf
+ doc: Notification for change in ULP DDP capabilities.
+ notify: ulp-ddp-get
@@ -225,6 +225,8 @@ Userspace to kernel:
``ETHTOOL_MSG_RSS_GET`` get RSS settings
``ETHTOOL_MSG_MM_GET`` get MAC merge layer state
``ETHTOOL_MSG_MM_SET`` set MAC merge layer parameters
+ ``ETHTOOL_MSG_ULP_DDP_GET`` get ULP DDP capabilities and stats
+ ``ETHTOOL_MSG_ULP_DDP_SET`` set ULP DDP capabilities
===================================== =================================
Kernel to userspace:
@@ -268,6 +270,9 @@ Kernel to userspace:
``ETHTOOL_MSG_PSE_GET_REPLY`` PSE parameters
``ETHTOOL_MSG_RSS_GET_REPLY`` RSS settings
``ETHTOOL_MSG_MM_GET_REPLY`` MAC merge layer status
+ ``ETHTOOL_MSG_ULP_DDP_GET_REPLY`` ULP DDP capabilities and stats
+ ``ETHTOOL_MSG_ULP_DDP_SET_REPLY`` optional reply to ULP_DDP_SET
+ ``ETHTOOL_MSG_ULP_DDP_NTF`` ULP DDP capabilities notification
======================================== =================================
``GET`` requests are sent by userspace applications to retrieve device
@@ -1994,6 +1999,93 @@ The attributes are propagated to the driver through the following structure:
.. kernel-doc:: include/linux/ethtool.h
:identifiers: ethtool_mm_cfg
+ULP_DDP_GET
+===========
+
+Get ULP DDP capabilities for the interface and optional driver-defined stats.
+
+Request contents:
+
+ ==================================== ====== ==========================
+ ``ETHTOOL_A_ULP_DDP_HEADER`` nested request header
+ ==================================== ====== ==========================
+
+Kernel response contents:
+
+ ==================================== ====== ==========================
+ ``ETHTOOL_A_ULP_DDP_HEADER`` nested reply header
+ ``ETHTOOL_A_ULP_DDP_HW`` bitset dev->ulp_ddp_caps.hw
+ ``ETHTOOL_A_ULP_DDP_ACTIVE`` bitset dev->ulp_ddp_caps.active
+ ``ETHTOOL_A_ULP_DDP_STATS`` nested ULP DDP statistics
+ ==================================== ====== ==========================
+
+
+* If ``ETHTOOL_FLAG_COMPACT_BITSETS`` was set in
+ ``ETHTOOL_A_HEADER_FLAG``, the bitsets of the reply are in compact
+ form. In that form, the names for the individual bits can be retrieved
+ via the ``ETH_SS_ULP_DDP_CAPS`` string set.
+* ``ETHTOOL_A_ULP_DDP_STATS`` contains statistics which
+ are only reported if ``ETHTOOL_FLAG_STATS`` was set in
+ ``ETHTOOL_A_HEADER_FLAGS``.
+
+ULP DDP statistics content:
+
+ ===================================================== === ===============
+ ``ETHTOOL_A_ULP_DDP_STATS_RX_NVMEOTCP_SK_ADD`` u64 sockets successfully prepared for offloading
+ ``ETHTOOL_A_ULP_DDP_STATS_RX_NVMEOTCP_SK_ADD_FAIL`` u64 sockets that failed to be prepared for offloading
+ ``ETHTOOL_A_ULP_DDP_STATS_RX_NVMEOTCP_SK_DEL`` u64 sockets where offloading has been removed
+ ``ETHTOOL_A_ULP_DDP_STATS_RX_NVMEOTCP_DDP_SETUP`` u64 PDUs successfully prepared for Direct Data Placement
+ ``ETHTOOL_A_ULP_DDP_STATS_RX_NVMEOTCP_DDP_SETUP_FAIL`` u64 PDUs that failed DDP preparation
+ ``ETHTOOL_A_ULP_DDP_STATS_RX_NVMEOTCP_DDP_TEARDOWN`` u64 PDUs done with DDP
+ ``ETHTOOL_A_ULP_DDP_STATS_RX_NVMEOTCP_DROP`` u64 PDUs dropped
+ ``ETHTOOL_A_ULP_DDP_STATS_RX_NVMEOTCP_RESYNC`` u64 resync
+ ``ETHTOOL_A_ULP_DDP_STATS_RX_NVMEOTCP_PACKETS`` u64 offloaded PDUs
+ ``ETHTOOL_A_ULP_DDP_STATS_RX_NVMEOTCP_BYTES`` u64 offloaded bytes
+ ===================================================== === ===============
+
+The names of each statistics are global. They can be retrieved via the
+``ETH_SS_ULP_DDP_STATS`` string set.
+
+ULP_DDP_SET
+===========
+
+Request to set ULP DDP capabilities for the interface.
+
+Request contents:
+
+ ==================================== ====== ==========================
+ ``ETHTOOL_A_ULP_DDP_HEADER`` nested request header
+ ``ETHTOOL_A_ULP_DDP_WANTED`` bitset requested capabilities
+ ==================================== ====== ==========================
+
+Kernel response contents:
+
+ ==================================== ====== ==========================
+ ``ETHTOOL_A_ULP_DDP_HEADER`` nested reply header
+ ``ETHTOOL_A_ULP_DDP_WANTED`` bitset diff wanted vs. results
+ ``ETHTOOL_A_ULP_DDP_ACTIVE`` bitset diff old vs. new active
+ ==================================== ====== ==========================
+
+Request contains only one bitset which can be either value/mask pair
+(request to change specific capabilities and leave the rest) or only a
+value (request to set the complete capabilities provided literally).
+
+Requests are subject to sanity checks by drivers so an optional kernel
+reply (can be suppressed by ``ETHTOOL_FLAG_OMIT_REPLY`` flag in
+request header) informs client about the actual
+results.
+
+* ``ETHTOOL_A_ULP_DDP_WANTED`` reports the difference between client
+ request and actual result: mask consists of bits which differ between
+ requested capability and result (dev->ulp_ddp_caps.active after the
+ operation), value consists of values of these bits in the request
+ (i.e. negated values from resulting capabilities).
+* ``ETHTOOL_A_ULP_DDP_ACTIVE`` reports the difference between old and
+ new dev->ulp_ddp_caps.active: mask consists of bits which have
+ changed, values are their values in new dev->ulp_ddp_caps.active
+ (after the operation).
+
+
Request translation
===================
@@ -172,6 +172,7 @@ statistics are supported in the following commands:
- `ETHTOOL_MSG_PAUSE_GET`
- `ETHTOOL_MSG_FEC_GET`
- `ETHTOOL_MSG_MM_GET`
+ - `ETHTOOL_MSG_ULP_DDP_GET`
debugfs
-------