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