xref: /llvm-project/offload/include/OpenMP/InteropAPI.h (revision 330d8983d25d08580fc1642fea48b2473f47a9da)
1*330d8983SJohannes Doerfert //===-- OpenMP/InteropAPI.h - OpenMP interoperability types and API - C++ -===//
2*330d8983SJohannes Doerfert //
3*330d8983SJohannes Doerfert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*330d8983SJohannes Doerfert // See https://llvm.org/LICENSE.txt for license information.
5*330d8983SJohannes Doerfert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*330d8983SJohannes Doerfert //
7*330d8983SJohannes Doerfert //===----------------------------------------------------------------------===//
8*330d8983SJohannes Doerfert //
9*330d8983SJohannes Doerfert //===----------------------------------------------------------------------===//
10*330d8983SJohannes Doerfert 
11*330d8983SJohannes Doerfert #ifndef OMPTARGET_OPENMP_INTEROP_API_H
12*330d8983SJohannes Doerfert #define OMPTARGET_OPENMP_INTEROP_API_H
13*330d8983SJohannes Doerfert 
14*330d8983SJohannes Doerfert #include "omp.h"
15*330d8983SJohannes Doerfert 
16*330d8983SJohannes Doerfert #include "omptarget.h"
17*330d8983SJohannes Doerfert 
18*330d8983SJohannes Doerfert extern "C" {
19*330d8983SJohannes Doerfert 
20*330d8983SJohannes Doerfert typedef enum kmp_interop_type_t {
21*330d8983SJohannes Doerfert   kmp_interop_type_unknown = -1,
22*330d8983SJohannes Doerfert   kmp_interop_type_platform,
23*330d8983SJohannes Doerfert   kmp_interop_type_device,
24*330d8983SJohannes Doerfert   kmp_interop_type_tasksync,
25*330d8983SJohannes Doerfert } kmp_interop_type_t;
26*330d8983SJohannes Doerfert 
27*330d8983SJohannes Doerfert /// The interop value type, aka. the interop object.
28*330d8983SJohannes Doerfert typedef struct omp_interop_val_t {
29*330d8983SJohannes Doerfert   /// Device and interop-type are determined at construction time and fix.
omp_interop_val_tomp_interop_val_t30*330d8983SJohannes Doerfert   omp_interop_val_t(intptr_t device_id, kmp_interop_type_t interop_type)
31*330d8983SJohannes Doerfert       : interop_type(interop_type), device_id(device_id) {}
32*330d8983SJohannes Doerfert   const char *err_str = nullptr;
33*330d8983SJohannes Doerfert   __tgt_async_info *async_info = nullptr;
34*330d8983SJohannes Doerfert   __tgt_device_info device_info;
35*330d8983SJohannes Doerfert   const kmp_interop_type_t interop_type;
36*330d8983SJohannes Doerfert   const intptr_t device_id;
37*330d8983SJohannes Doerfert   const omp_foreign_runtime_ids_t vendor_id = cuda;
38*330d8983SJohannes Doerfert   const intptr_t backend_type_id = omp_interop_backend_type_cuda_1;
39*330d8983SJohannes Doerfert } omp_interop_val_t;
40*330d8983SJohannes Doerfert 
41*330d8983SJohannes Doerfert } // extern "C"
42*330d8983SJohannes Doerfert 
43*330d8983SJohannes Doerfert #endif // OMPTARGET_OPENMP_INTEROP_API_H
44