| /* 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 */ |