blob: 08793697d82d19189ba0ffa726606569fc8ed9d7 [file] [edit]
/* SPDX-License-Identifier: (GPL-2.0 OR Linux-OpenIB) */
/*
* Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
*
* DMA-buf heap allocator API
*
* Provides a simple interface for allocating memory from Linux DMA-buf heaps.
* currently only CoCo shared heap is supported. The allocated buffers are
* mmap'd into user-space and can be used with RDMA verbs.
*/
#ifndef INFINIBAND_DMABUF_HEAP_H
#define INFINIBAND_DMABUF_HEAP_H
#include <stddef.h>
struct ibv_dmabuf_heap;
/**
* ibv_dmabuf_heap_cc_shared_init - Open the CoCo shared DMA-buf heap
*/
struct ibv_dmabuf_heap *ibv_dmabuf_heap_cc_shared_init(void);
/**
* ibv_dmabuf_heap_destroy - Close the heap device and free the handle
* @heap: Heap handle from ibv_dmabuf_heap_cc_shared_init()
*/
void ibv_dmabuf_heap_destroy(struct ibv_dmabuf_heap *heap);
/**
* ibv_dmabuf_heap_alloc - Allocate a buffer from the DMA-buf heap
* @heap: Heap handle from ibv_dmabuf_heap_cc_shared_init()
* @size: Requested buffer size in bytes
* @dmabuf_fd: On success, set to the DMA-buf file descriptor
*
* Returns an mmap'd pointer on success, or NULL on failure with errno set.
* The caller must store both the returned pointer and *dmabuf_fd and pass
* them to ibv_dmabuf_heap_free() when done.
*/
void *ibv_dmabuf_heap_alloc(struct ibv_dmabuf_heap *heap, size_t size,
int *dmabuf_fd);
/**
* ibv_dmabuf_heap_free - Free a buffer allocated with ibv_dmabuf_heap_alloc
* @buf: Pointer returned by ibv_dmabuf_heap_alloc()
* @size: Same size passed to ibv_dmabuf_heap_alloc()
* @dmabuf_fd: DMA-buf fd returned by ibv_dmabuf_heap_alloc()
*
* Unmaps the buffer and closes the DMA-buf fd.
*/
void ibv_dmabuf_heap_free(void *buf, size_t size, int dmabuf_fd);
#endif /* INFINIBAND_DMABUF_HEAP_H */