From: Sunil Kumar Kori <sk...@marvell.com>

In this commit, check is added for event device, Rx,
Tx, Crypto and Timer adapters tables for all supported
drivers.

Signed-off-by: Sunil Kumar Kori <sk...@marvell.com>
---
v7:
 - Rebased to 21.11 rc3
 - Fix Tx adapter capabilities for SW driver
v6:
 - Rebased to 21.11 rc2
 - Added feature matrices for all supported drivers
 - Added doc vs code check script
 
v5:
 - Rebased to 21.11
 - Added feature matrix for cnxk.
v4:
 - Rebased to 20.02
v3:
 - Removed .txt files to generate tables.
 - Use conf.py script to generate tables.
 - Add .ini file for all supported PMDs.
v2:
 - Review comments incorporated

 devtools/check-doc-vs-code.sh   |  35 ++++++++
 devtools/parse-event-support.sh | 149 ++++++++++++++++++++++++++++++++
 2 files changed, 184 insertions(+)
 create mode 100755 devtools/parse-event-support.sh

diff --git a/devtools/check-doc-vs-code.sh b/devtools/check-doc-vs-code.sh
index c58c239c87..608d6e0e2e 100755
--- a/devtools/check-doc-vs-code.sh
+++ b/devtools/check-doc-vs-code.sh
@@ -66,11 +66,35 @@ check_rte_flow() # <driver>
        fi
 }
 
+all_event_drivers()
+{
+       find $rootdir/drivers/event -mindepth 1 -maxdepth 1 -type d |
+       sed 's,.*/,,' |
+       sort
+}
+
+check_event_dev() # <driver>
+{
+       code=$rootdir/drivers/event/$1
+       doc=$rootdir/doc/guides/eventdevs/features/$1.ini
+       [ -d $code ] || return 0
+       [ -f $doc ] || return 0
+       report=$($selfdir/parse-event-support.sh $code $doc)
+       if [ -n "$report" ]; then
+               error "doc out of sync for $1"
+               echo "$report" | sed 's,^,\t,'
+       fi
+}
+
 if [ -z "$trusted_commit" ]; then
        # check all
        for driver in $(all_net_drivers); do
                check_rte_flow $driver
        done
+
+       for driver in $(all_event_drivers); do
+               check_event_dev $driver
+       done
        exit $result
 fi
 
@@ -81,4 +105,15 @@ if has_code_change 'RTE_FLOW_.*_TYPE_' ||
                check_rte_flow $driver
        done
 fi
+
+if has_code_change 'RTE_EVENT_DEV_CAP_*' ||
+               has_code_change 'RTE_EVENT_ETH_RX_ADAPTER_CAP_*' ||
+               has_code_change 'RTE_EVENT_ETH_TX_ADAPTER_CAP_*' ||
+               has_code_change 'RTE_EVENT_CRYPTO_ADAPTER_CAP_*' ||
+               has_code_change 'RTE_EVENT_TIMER_ADAPTER_CAP_*' ||
+               has_file_change 'doc/guides/eventdevs/features'; then
+       for driver in $(all_event_drivers); do
+               check_event_dev $driver
+       done
+fi
 exit $result
diff --git a/devtools/parse-event-support.sh b/devtools/parse-event-support.sh
new file mode 100755
index 0000000000..d756977eec
--- /dev/null
+++ b/devtools/parse-event-support.sh
@@ -0,0 +1,149 @@
+#! /bin/sh -e
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(C) 2021 Marvell.
+
+# Parse event dev support of a driver directory,
+# and optionally show difference with a doc file in .ini format.
+
+dir=$1 # drivers/event/foo
+ref=$2 # doc/guides/eventdevs/features/foo.ini
+
+if [ -z "$dir" ]; then
+       echo "directory argument is required" >&2
+       exit 1
+fi
+
+# sorting order
+export LC_COLLATE=C
+
+# generate INI section
+list() # <title> <pattern>
+{
+       echo "[$1]"
+       git grep -who "$2[[:alnum:]_]*" $dir | sort -u |
+       awk 'sub(/'$2'/, "") {printf "%-20s = Y\n", tolower($0)}'
+}
+
+event_dev_sched_support()
+{
+       title="Scheduling Features"
+       pattern=$(echo "RTE_EVENT_DEV_CAP_" | awk '{print toupper($0)}')
+       list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+}
+
+event_dev_rx_adptr_support()
+{
+       title="Eth Rx adapter Features"
+       pattern=$(echo "RTE_EVENT_ETH_RX_ADAPTER_CAP_" |
+               awk '{print toupper($0)}')
+       list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+}
+
+event_dev_tx_adptr_support()
+{
+       title="Eth Tx adapter Features"
+       pattern=$(echo "RTE_EVENT_ETH_TX_ADAPTER_CAP_" |
+               awk '{print toupper($0)}')
+       list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+}
+
+event_dev_crypto_adptr_support()
+{
+       title="Crypto adapter Features"
+       pattern=$(echo "RTE_EVENT_CRYPTO_ADAPTER_CAP_" |
+               awk '{print toupper($0)}')
+       list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+}
+
+event_dev_timer_adptr_support()
+{
+       title="Timer adapter Features"
+       pattern=$(echo "RTE_EVENT_TIMER_ADAPTER_CAP_" |
+               awk '{print toupper($0)}')
+       list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+}
+
+if [ -z "$ref" ]; then # generate full tables
+       event_dev_sched_support
+       echo
+       event_dev_rx_adptr_support
+       echo
+       event_dev_tx_adptr_support
+       echo
+       event_dev_crypto_adptr_support
+       echo
+       event_dev_timer_adptr_support
+       exit 0
+fi
+
+# compare with reference input
+event_dev_sched_compare()
+{
+       section="Scheduling Features]"
+       {
+               event_dev_sched_support
+               sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
+       } |
+       sed '/]/d' | # ignore section title
+       sed 's, *=.*,,' | # ignore value (better in doc than generated one)
+       sort | uniq -u | # show differences
+       sed "s,^,Scheduling Features ," # prefix with category name
+}
+
+event_dev_rx_adptr_compare()
+{
+       section="Eth Rx adapter Features]"
+       {
+               event_dev_rx_adptr_support
+               sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
+       } |
+       sed '/]/d' | # ignore section title
+       sed 's, *=.*,,' | # ignore value (better in doc than generated one)
+       sort | uniq -u | # show differences
+       sed "s,^,Eth Rx adapter Features ," # prefix with category name
+}
+
+event_dev_tx_adptr_compare()
+{
+       section="Eth Tx adapter Features]"
+       {
+               event_dev_tx_adptr_support
+               sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
+       } |
+       sed '/]/d' | # ignore section title
+       sed 's, *=.*,,' | # ignore value (better in doc than generated one)
+       sort | uniq -u | # show differences
+       sed "s,^,Eth Tx adapter Features ," # prefix with category name
+}
+
+event_dev_crypto_adptr_compare()
+{
+       section="Crypto adapter Features]"
+       {
+               event_dev_crypto_adptr_support
+               sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
+       } |
+       sed '/]/d' | # ignore section title
+       sed 's, *=.*,,' | # ignore value (better in doc than generated one)
+       sort | uniq -u | # show differences
+       sed "s,^,Crypto adapter Features ," # prefix with category name
+}
+
+event_dev_crypto_adptr_compare()
+{
+       section="Timer adapter Features]"
+       {
+               event_dev_timer_adptr_support
+               sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
+       } |
+       sed '/]/d' | # ignore section title
+       sed 's, *=.*,,' | # ignore value (better in doc than generated one)
+       sort | uniq -u | # show differences
+       sed "s,^,Timer adapter Features ," # prefix with category name
+}
+
+event_dev_sched_compare
+event_dev_rx_adptr_compare
+event_dev_tx_adptr_compare
+event_dev_crypto_adptr_compare
+event_dev_crypto_adptr_compare
-- 
2.25.1

Reply via email to