mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 18:13:41 +02:00
bnxt_en: Implement ethtool .set_tunable() for ETHTOOL_PFC_PREVENTION_TOUT
Support the setting of the tunable if it is supported by firmware. The supported range is 0 to the maximum msec value reported by firmware. PFC_STORM_PREVENTION_AUTO is also supported and 0 means it is disabled. Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Link: https://patch.msgid.link/20250917040839.1924698-11-michael.chan@broadcom.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
6684b91d04
commit
fa18932afb
|
|
@ -4416,12 +4416,25 @@ static int bnxt_hwrm_pfcwd_qcfg(struct bnxt *bp, u16 *val)
|
|||
return rc;
|
||||
}
|
||||
|
||||
static int bnxt_hwrm_pfcwd_cfg(struct bnxt *bp, u16 val)
|
||||
{
|
||||
struct hwrm_queue_pfcwd_timeout_cfg_input *req;
|
||||
int rc;
|
||||
|
||||
rc = hwrm_req_init(bp, req, HWRM_QUEUE_PFCWD_TIMEOUT_CFG);
|
||||
if (rc)
|
||||
return rc;
|
||||
req->pfcwd_timeout_value = cpu_to_le16(val);
|
||||
rc = hwrm_req_send(bp, req);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int bnxt_set_tunable(struct net_device *dev,
|
||||
const struct ethtool_tunable *tuna,
|
||||
const void *data)
|
||||
{
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
u32 rx_copybreak;
|
||||
u32 rx_copybreak, val;
|
||||
|
||||
switch (tuna->id) {
|
||||
case ETHTOOL_RX_COPYBREAK:
|
||||
|
|
@ -4434,6 +4447,15 @@ static int bnxt_set_tunable(struct net_device *dev,
|
|||
bp->rx_copybreak = rx_copybreak;
|
||||
}
|
||||
return 0;
|
||||
case ETHTOOL_PFC_PREVENTION_TOUT:
|
||||
if (BNXT_VF(bp) || !bp->max_pfcwd_tmo_ms)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
val = *(u16 *)data;
|
||||
if (val > bp->max_pfcwd_tmo_ms &&
|
||||
val != PFC_STORM_PREVENTION_AUTO)
|
||||
return -EINVAL;
|
||||
return bnxt_hwrm_pfcwd_cfg(bp, val);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6771,6 +6771,27 @@ struct hwrm_queue_pfcwd_timeout_qcaps_output {
|
|||
u8 valid;
|
||||
};
|
||||
|
||||
/* hwrm_queue_pfcwd_timeout_cfg_input (size:192b/24B) */
|
||||
struct hwrm_queue_pfcwd_timeout_cfg_input {
|
||||
__le16 req_type;
|
||||
__le16 cmpl_ring;
|
||||
__le16 seq_id;
|
||||
__le16 target_id;
|
||||
__le64 resp_addr;
|
||||
__le16 pfcwd_timeout_value;
|
||||
u8 unused_0[6];
|
||||
};
|
||||
|
||||
/* hwrm_queue_pfcwd_timeout_cfg_output (size:128b/16B) */
|
||||
struct hwrm_queue_pfcwd_timeout_cfg_output {
|
||||
__le16 error_code;
|
||||
__le16 req_type;
|
||||
__le16 seq_id;
|
||||
__le16 resp_len;
|
||||
u8 unused_0[7];
|
||||
u8 valid;
|
||||
};
|
||||
|
||||
/* hwrm_queue_pfcwd_timeout_qcfg_input (size:128b/16B) */
|
||||
struct hwrm_queue_pfcwd_timeout_qcfg_input {
|
||||
__le16 req_type;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user