#!/bin/bash
#
# Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
#
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
# SPDX-License-Identifier: LicenseRef-NVIDIA-Proprietary
#
# Real: QoS trust capability detection via QPTS/QPDPM register probing
# PCP: QPTS register accessible (trust_state register exists)
# DSCP: both QPTS and QPDPM accessible (DSCP mapping infra present)
# BOTH: QCAM qos_feature_cap_mask[3] bit 0 (qpts_trust_both)
source "$(dirname "$0")/_lib.sh"
trace "$@"

OP="$1"; shift
TARGET="$1"; shift
BDF=$(bdf_from_target "$TARGET")

[[ "$OP" != "GET" ]] && { echo "Error: caps are read-only" >&2; exit 1; }

# Probe QPTS register (trust state)
QPTS_OK=0
QPTS_OUT=$(mlxreg -d "$BDF" --get --reg_name QPTS --indexes "local_port=0x1,lp_msb=0x0" 2>&1)
echo "$QPTS_OUT" | grep -qi "syndrome\|error\|failed" || QPTS_OK=1

# Probe QPDPM register (DSCP-to-priority mapping)
QPDPM_OK=0
QPDPM_OUT=$(mlxreg -d "$BDF" --get --reg_name QPDPM --indexes "local_port=0x1,lp_msb=0x0" 2>&1)
echo "$QPDPM_OUT" | grep -qi "syndrome\|error\|failed" || QPDPM_OK=1

# QCAM feature bit for trust_both
BOTH_OK=0
QCAM_OUT=$(mlxreg -d "$BDF" --get --reg_name QCAM --indexes "access_reg_group=0,feature_group=0" 2>&1)
if ! echo "$QCAM_OUT" | grep -qi "syndrome\|error\|failed"; then
    QCAM_FEAT=$(echo "$QCAM_OUT" | grep -E "qos_feature_cap_mask\[3\]" | awk '{print $NF}' | sed 's/0x//')
    [[ -n "$QCAM_FEAT" ]] && QCAM_DEC=$((16#${QCAM_FEAT})) || QCAM_DEC=0
    [[ $(( QCAM_DEC & 1 )) -ne 0 ]] && BOTH_OK=1
fi

for PARAM in "$@"; do
    case "$PARAM" in
        qpts_supported)
            [[ $QPTS_OK -eq 1 ]] && echo "pcp-trust-supported=true" || echo "pcp-trust-supported=false" ;;
        qpts_qpdpm_supported)
            [[ $QPTS_OK -eq 1 && $QPDPM_OK -eq 1 ]] && echo "dscp-trust-supported=true" || echo "dscp-trust-supported=false" ;;
        qpts_trust_both)
            [[ $BOTH_OK -eq 1 && $QPTS_OK -eq 1 && $QPDPM_OK -eq 1 ]] && echo "both-trust-supported=true" || echo "both-trust-supported=false" ;;
        *)
            echo "${PARAM}=false" ;;
    esac
done
