root/drivers/infiniband/hw/bng_re/bng_re.h
/* SPDX-License-Identifier: GPL-2.0 */
// Copyright (c) 2025 Broadcom.

#ifndef __BNG_RE_H__
#define __BNG_RE_H__

#include "bng_res.h"

#define BNG_RE_ADEV_NAME                "bng_en"

#define BNG_RE_DESC     "Broadcom 800G RoCE Driver"

#define rdev_to_dev(rdev)       ((rdev) ? (&(rdev)->ibdev.dev) : NULL)

#define BNG_RE_MIN_MSIX         2
#define BNG_RE_MAX_MSIX         BNGE_MAX_ROCE_MSIX

#define BNG_RE_CREQ_NQ_IDX      0

#define BNGE_INVALID_STATS_CTX_ID       -1
/* NQ specific structures  */
struct bng_re_nq_db {
        struct bng_re_reg_desc  reg;
        struct bng_re_db_info   dbinfo;
};

struct bng_re_nq {
        struct pci_dev                  *pdev;
        struct bng_re_res               *res;
        char                            *name;
        struct bng_re_hwq               hwq;
        struct bng_re_nq_db             nq_db;
        u16                             ring_id;
        int                             msix_vec;
        cpumask_t                       mask;
        struct tasklet_struct           nq_tasklet;
        bool                            requested;
        int                             budget;
        u32                             load;

        struct workqueue_struct         *cqn_wq;
};

struct bng_re_nq_record {
        struct bnge_msix_info   msix_entries[BNG_RE_MAX_MSIX];
        struct bng_re_nq        nq[BNG_RE_MAX_MSIX];
        int                     num_msix;
        /* serialize NQ access */
        struct mutex            load_lock;
};

struct bng_re_en_dev_info {
        struct bng_re_dev *rdev;
        struct bnge_auxr_dev *auxr_dev;
};

struct bng_re_ring_attr {
        dma_addr_t      *dma_arr;
        int             pages;
        int             type;
        u32             depth;
        u32             lrid; /* Logical ring id */
        u8              mode;
};

struct bng_re_dev {
        struct ib_device                ibdev;
        unsigned long                   flags;
#define BNG_RE_FLAG_NETDEV_REGISTERED           0
#define BNG_RE_FLAG_RCFW_CHANNEL_EN             1
        struct net_device               *netdev;
        struct auxiliary_device         *adev;
        struct bnge_auxr_dev            *aux_dev;
        struct bng_re_chip_ctx          *chip_ctx;
        int                             fn_id;
        struct bng_re_res               bng_res;
        struct bng_re_rcfw              rcfw;
        struct bng_re_nq_record         *nqr;
        /* Device Resources */
        struct bng_re_dev_attr          *dev_attr;
        struct dentry                   *dbg_root;
        struct bng_re_stats             stats_ctx;
};

#endif