#
# This file and its contents are supplied under the terms of the
# Common Development and Distribution License ("CDDL"), version 1.0.
# You may only use this file in accordance with the terms of version
# 1.0 of the CDDL.
#
# A full copy of the text of the CDDL should have accompanied this
# source.  A copy of the CDDL is also available via the Internet at
# http://www.illumos.org/license/CDDL.
#

#
# Copyright 2018, Joyent, Inc.
# Copyright 2023 The University of Queensland
# Copyright 2020 RackTop Systems, Inc.
#

#
# Driver.conf file for Mellanox Connect-X 4/5/6.
# See mlxcx(4D) for valid options.
#

#
# Sizing of event and completion queues.
#
# The number of entries on each queue will be (1 << *_size_shift) -- so
# a value of 10 would mean 1024 entries.
#
#eq_size_shift = 9;

# The default for devices with a maximum supported speed up to 10Gb/s
#cq_size_shift = 10;
#
# The default for devices with a maximum supported speed above 10Gb/s
#cq_size_shift = 12;

#
# Sizing of send and receive queues.
#
# Note that this determines the size of the RX and TX rings that mlxcx will
# advertise to MAC. It also determines how many packet buffers we will allocate
# when starting the interface.
#
# The defaults for devices with a maximum supported speed up to 10Gb/s
#sq_size_shift = 11;
#rq_size_shift = 10;
#
# The defaults for devices with a maximum supported speed above 10Gb/s
#sq_size_shift = 13;
#rq_size_shift = 12;

#
# Number and configuration of TX groups and rings.
#
#tx_ngroups = 1;
#tx_nrings_per_group = 64;

#
# Number and configuration of RX groups and rings.
#
#rx_ngroups_large = 2;
#rx_nrings_per_large_group = 16;
#rx_ngroups_small = 256;
#rx_nrings_per_small_group = 4;

#
# Number of flow table entries allocated to root flow tables.
#
# This places an upper ceiling on how many MAC addresses can be filtered into
# groups across the whole NIC. If you have a lot of VNICs you might want to
# raise this (and probably also rx_ngroups_small).
#
#ftbl_root_size_shift = 12;

#
# Number of flow table entries allocated to each L1 VLAN filtering table.
#
# This places a limit on the number of VLANs that one MAC address can be
# associated with before falling back to software classification. Two entries
# are always reserved for the non-VLAN catch-all and promisc entries.
#
# Note: illumos MAC today only supports giving a single VLAN per MAC address
# to hardware drivers anyway, so setting this higher is pointless until that
# changes.
#
#ftbl_vlan_size_shift = 4;

#
# Interrupt and completion moderation.
#
#cqemod_period_usec = 50;
#cqemod_count = <80% of cq_size>;
#intrmod_period_usec = 10;

#
# Minimum packet size before we use a ddi_dma_bind_addr() rather than bcopy()
# of the packet data. DMA binds are expensive and involve taking locks in the
# PCI nexus driver, so it's seldom worth doing them for small packets.
#
#tx_bind_threshold = 2048;

#
# Interval between periodic double-checks of queue status against hardware
# state. This is used to detect hardware stalls or errors, as well as guard
# against driver bugs.
#
# If set to too high a frequency, checks may impact NIC performance. Can be
# set to zero to disable periodic checking entirely.
#
#eq_check_interval_sec = 30;
#cq_check_interval_sec = 300;
#wq_check_interval_sec = 300;

#
# To provide some level of moderation and aid latencies, after
# "rx_limit_per_completion" packets are received in a single completion
# event, the interrupt handler will pass the chain up the receive stack.
#
#rx_limit_per_completion = 256;

#
# Minimum size of packet buffers allowed to be loaned to MAC when the ring
# has reached >=50% of its buffers already on loan. Packet buffers smaller than
# this will be copied. At >= 75% of buffers on loan, all packets will be
# copied instead of loaned.
#
# If your workload involves lots of very deep socket queues, you may find some
# performance gains in adjusting this.
#
#rx_p50_loan_min_size = 256;