OpenCloudOS-Kernel/drivers/thirdparty/bnxt/tfc_v3/tfc_priv.c

85 lines
1.4 KiB
C

// SPDX-License-Identifier: BSD-3-Clause
/* Copyright(c) 2023 Broadcom
* All rights reserved.
*/
#include <linux/types.h>
#include "bnxt_compat.h"
#include "bnxt.h"
#include "tfc.h"
#include "tfc_priv.h"
int
tfc_get_fid(struct tfc *tfcp, u16 *fw_fid)
{
struct bnxt *bp = tfcp->bp;
if (!fw_fid) {
netdev_dbg(bp->dev, "%s: Invalid fw_fid pointer\n", __func__);
return -EINVAL;
}
*fw_fid = bp->vf.fw_fid;
return 0;
}
int
tfc_get_pfid(struct tfc *tfcp, u16 *pfid)
{
struct bnxt *bp = tfcp->bp;
if (!pfid) {
netdev_dbg(bp->dev, "%s: Invalid pfid pointer\n", __func__);
return -EINVAL;
}
if (BNXT_VF(bp))
*pfid = bp->vf.fw_fid;
else
*pfid = bp->pf.fw_fid;
return 0;
}
int
tfc_bp_is_pf(struct tfc *tfcp, bool *is_pf)
{
struct bnxt *bp = tfcp->bp;
if (!is_pf) {
netdev_dbg(bp->dev, "%s: invalid is_pf pointer\n", __func__);
return -EINVAL;
}
if (BNXT_PF(bp)) {
*is_pf = true;
return 0;
}
*is_pf = false;
return 0;
}
int tfc_bp_vf_max(struct tfc *tfcp, u16 *max_vf)
{
struct bnxt *bp = tfcp->bp;
if (!max_vf) {
netdev_dbg(bp->dev, "%s: invalid max_vf pointer\n", __func__);
return -EINVAL;
}
if (!BNXT_PF(bp)) {
netdev_dbg(bp->dev, "%s: not a PF\n", __func__);
return -EINVAL;
}
/* If not sriov, no vfs enabled */
if (bp->pf.max_vfs)
*max_vf = bp->pf.first_vf_id + bp->pf.max_vfs;
else
*max_vf = bp->pf.fw_fid;
return 0;
}