//===--- Level Zero Target RTL Implementation -----------------------------===//
//
// Part of the LLVM Project, 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
//
//===----------------------------------------------------------------------===//
//
// External and other auxilary definitions.
//
//===----------------------------------------------------------------------===//

#ifndef OPENMP_LIBOMPTARGET_PLUGINS_NEXTGEN_LEVEL_ZERO_L0DEFS_H
#define OPENMP_LIBOMPTARGET_PLUGINS_NEXTGEN_LEVEL_ZERO_L0DEFS_H

#include "OffloadError.h"

enum class AllocOptionTy : int32_t {
  ALLOC_OPT_NONE = 0,
  ALLOC_OPT_REDUCTION_SCRATCH = 1,
  ALLOC_OPT_REDUCTION_COUNTER = 2,
  ALLOC_OPT_HOST_MEM = 3,
  ALLOC_OPT_SLM = 4,
};

namespace llvm::omp::target::plugin {

/// Default alignmnet for allocation.
constexpr size_t L0DefaultAlignment = 0;
/// Default staging buffer size for host to device copy (16KB).
constexpr size_t L0StagingBufferSize = (1 << 14);
/// Default staging buffer count.
constexpr size_t L0StagingBufferCount = 64;
/// USM allocation threshold where preallocation does not pay off (128MB).
constexpr size_t L0UsmPreAllocThreshold = (128 << 20);
/// Host USM allocation threshold where preallocation does not pay off (8MB).
constexpr size_t L0HostUsmPreAllocThreshold = (8 << 20);
/// Maximum wait time.
constexpr uint64_t L0DefaultTimeout = std::numeric_limits<uint64_t>::max();
/// Generic L0 handle type.
using ZeHandleTy = void *;

using error::ErrorCode;
} // namespace llvm::omp::target::plugin

#endif // OPENMP_LIBOMPTARGET_PLUGINS_NEXTGEN_LEVEL_ZERO_L0DEFS_H
