NFP_NET_MAX_TX_RINGS : NFP_NET_MAX_RX_RINGS)
 #define NFP_NET_MAX_IRQS       (NFP_NET_NON_Q_VECTORS + NFP_NET_MAX_R_VECS)
 
-#define NFP_NET_MIN_TX_DESCS   256     /* Min. # of Tx descs per ring */
-#define NFP_NET_MIN_RX_DESCS   256     /* Min. # of Rx descs per ring */
-#define NFP_NET_MAX_TX_DESCS   (256 * 1024) /* Max. # of Tx descs per ring */
-#define NFP_NET_MAX_RX_DESCS   (256 * 1024) /* Max. # of Rx descs per ring */
-
 #define NFP_NET_TX_DESCS_DEFAULT 4096  /* Default # of Tx descs per ring */
 #define NFP_NET_RX_DESCS_DEFAULT 4096  /* Default # of Rx descs per ring */
 
 
 #include <linux/sfp.h>
 
 #include "nfpcore/nfp.h"
+#include "nfpcore/nfp_dev.h"
 #include "nfpcore/nfp_nsp.h"
 #include "nfp_app.h"
 #include "nfp_main.h"
                                  struct netlink_ext_ack *extack)
 {
        struct nfp_net *nn = netdev_priv(netdev);
+       u32 qc_max = nn->dev_info->max_qc_size;
 
-       ring->rx_max_pending = NFP_NET_MAX_RX_DESCS;
-       ring->tx_max_pending = NFP_NET_MAX_TX_DESCS;
+       ring->rx_max_pending = qc_max;
+       ring->tx_max_pending = qc_max;
        ring->rx_pending = nn->dp.rxd_cnt;
        ring->tx_pending = nn->dp.txd_cnt;
 }
                                 struct netlink_ext_ack *extack)
 {
        struct nfp_net *nn = netdev_priv(netdev);
-       u32 rxd_cnt, txd_cnt;
+       u32 qc_min, qc_max, rxd_cnt, txd_cnt;
 
        /* We don't have separate queues/rings for small/large frames. */
        if (ring->rx_mini_pending || ring->rx_jumbo_pending)
                return -EINVAL;
 
+       qc_min = nn->dev_info->min_qc_size;
+       qc_max = nn->dev_info->max_qc_size;
        /* Round up to supported values */
        rxd_cnt = roundup_pow_of_two(ring->rx_pending);
        txd_cnt = roundup_pow_of_two(ring->tx_pending);
 
-       if (rxd_cnt < NFP_NET_MIN_RX_DESCS || rxd_cnt > NFP_NET_MAX_RX_DESCS ||
-           txd_cnt < NFP_NET_MIN_TX_DESCS || txd_cnt > NFP_NET_MAX_TX_DESCS)
+       if (rxd_cnt < qc_min || rxd_cnt > qc_max ||
+           txd_cnt < qc_min || txd_cnt > qc_max)
                return -EINVAL;
 
        if (nn->dp.rxd_cnt == rxd_cnt && nn->dp.txd_cnt == txd_cnt)
 
 
 #include <linux/dma-mapping.h>
 #include <linux/kernel.h>
+#include <linux/sizes.h>
 
 #include "nfp_dev.h"
 
                .dma_mask               = DMA_BIT_MASK(40),
                .qc_idx_mask            = GENMASK(7, 0),
                .qc_addr_offset         = 0x80000,
+               .min_qc_size            = 256,
+               .max_qc_size            = SZ_256K,
 
                .chip_names             = "NFP4000/NFP5000/NFP6000",
                .pcie_cfg_expbar_offset = 0x0400,
                .dma_mask               = DMA_BIT_MASK(40),
                .qc_idx_mask            = GENMASK(7, 0),
                .qc_addr_offset         = 0,
+               .min_qc_size            = 256,
+               .max_qc_size            = SZ_256K,
        },
 };