// Copyright 2023 The IREE Authors
//
// Licensed under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

#ifndef EXPERIMENTAL_CUDA2_CUDA_BUFFER_H_
#define EXPERIMENTAL_CUDA2_CUDA_BUFFER_H_

#include "experimental/cuda2/cuda_headers.h"
#include "iree/base/api.h"
#include "iree/hal/api.h"

#ifdef __cplusplus
extern "C" {
#endif  // __cplusplus

typedef enum iree_hal_cuda2_buffer_type_e {
  // Device local buffer; allocated with cuMemAlloc/cuMemAllocManaged, freed
  // with cuMemFree.
  IREE_HAL_CUDA_BUFFER_TYPE_DEVICE = 0,
  // Host local buffer; allocated with cuMemHostAlloc, freed with cuMemFreeHost.
  IREE_HAL_CUDA_BUFFER_TYPE_HOST,
  // Host local buffer; registered with cuMemHostRegister, freed with
  // cuMemHostUnregister.
  IREE_HAL_CUDA_BUFFER_TYPE_HOST_REGISTERED,
  // Device local buffer, allocated with cuMemAllocFromPoolAsync, freed with
  // cuMemFree/cuMemFreeAsync.
  IREE_HAL_CUDA_BUFFER_TYPE_ASYNC,
  // Externally registered buffer whose providence is unknown.
  // Must be freed by the user.
  IREE_HAL_CUDA_BUFFER_TYPE_EXTERNAL,
} iree_hal_cuda2_buffer_type_t;

// Wraps a CUDA allocation in an iree_hal_buffer_t.
iree_status_t iree_hal_cuda2_buffer_wrap(
    iree_hal_allocator_t* allocator, iree_hal_memory_type_t memory_type,
    iree_hal_memory_access_t allowed_access,
    iree_hal_buffer_usage_t allowed_usage, iree_device_size_t allocation_size,
    iree_device_size_t byte_offset, iree_device_size_t byte_length,
    iree_hal_cuda2_buffer_type_t buffer_type, CUdeviceptr device_ptr,
    void* host_ptr, iree_hal_buffer_release_callback_t release_callback,
    iree_allocator_t host_allocator, iree_hal_buffer_t** out_buffer);

// Returns the underlying CUDA buffer type of the given |buffer|.
iree_hal_cuda2_buffer_type_t iree_hal_cuda2_buffer_type(
    const iree_hal_buffer_t* buffer);

// Returns the CUDA base device pointer for the given |buffer|.
//
// Note that this is the entire allocated_buffer and must be offset by the
// buffer byte_offset and byte_length when used.
CUdeviceptr iree_hal_cuda2_buffer_device_pointer(
    const iree_hal_buffer_t* buffer);

// Returns the CUDA host pointer for the given |buffer|, if available.
void* iree_hal_cuda2_buffer_host_pointer(const iree_hal_buffer_t* buffer);

// Drops the release callback so that when the buffer is destroyed no callback
// will be made. This is not thread safe but all callers are expected to be
// holding an allocation and the earliest the buffer could be destroyed is after
// this call returns and the caller has released its reference.
void iree_hal_cuda2_buffer_drop_release_callback(iree_hal_buffer_t* buffer);

#ifdef __cplusplus
}  // extern "C"
#endif  // __cplusplus

#endif  // EXPERIMENTAL_CUDA2_CUDA_BUFFER_H_
