blob: a11f5a212f6f65334be6bbdb126472430ea1a607 [file] [log] [blame] [edit]
/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
/*
* Copyright (c) 2018-2025 Advanced Micro Devices, Inc. All rights reserved.
*/
#ifndef IONIC_DV_H
#define IONIC_DV_H
#include <stdbool.h>
#include <infiniband/verbs.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* ionic_dv_ctx_get_udma_count - Get number of udma pipelines.
*/
uint8_t ionic_dv_ctx_get_udma_count(struct ibv_context *ibctx);
/**
* ionic_dv_ctx_get_udma_mask - Get mask of udma pipeline ids.
*/
uint8_t ionic_dv_ctx_get_udma_mask(struct ibv_context *ibctx);
/**
* ionic_dv_pd_get_udma_mask - Get mask of udma pipeline ids of pd or parent domain.
*/
uint8_t ionic_dv_pd_get_udma_mask(struct ibv_pd *ibpd);
/**
* ionic_dv_pd_set_udma_mask - Restrict pipeline ids of pd or parent domain.
*
* Queues associated with this pd will be restricted to one of the pipelines enabled by
* the mask at the time of queue creation.
*
* Recommended usage is to create a pd, then parent domains of that pd for each different
* udma mask. Set the desired udma mask on each parent domain. Then, create queues
* associated with the parent domain with the desired udma mask.
*
* Alternative usage is to create a pd, and set the desired udma mask prior to creating
* each queue. Changing the udma mask of the pd has no effect on previously created
* queues.
*/
int ionic_dv_pd_set_udma_mask(struct ibv_pd *ibpd, uint8_t udma_mask);
/**
* ionic_dv_pd_set_sqcmb - Specify send queue preference for controller memory bar.
*
* Send queues associated with this pd will use the controller memory bar according to
* this preference at the time of queue creation.
*
* @enable - Allow the use of the controller memory bar.
* @expdb - Allow the use of express doorbell optimizations.
* @require - Require preferences to be met, no fallback.
*/
int ionic_dv_pd_set_sqcmb(struct ibv_pd *ibpd, bool enable, bool expdb, bool require);
/**
* ionic_dv_pd_set_rqcmb - Specify receive queue preference for controller memory bar.
*
* Receive queues associated with this pd will use the controller memory bar according to
* this preference at the time of queue creation.
*
* @enable - Allow the use of the controller memory bar.
* @expdb - Allow the use of express doorbell optimizations.
* @require - Require preferences to be met, no fallback.
*/
int ionic_dv_pd_set_rqcmb(struct ibv_pd *ibpd, bool enable, bool expdb, bool require);
#ifdef __cplusplus
}
#endif
#endif /* IONIC_DV_H */