syntax = "proto3";

package openmp.libomptarget.remote;
option cc_enable_arenas = true;

service RemoteOffload {
  rpc Shutdown(Null) returns (I32) {}

  rpc RegisterLib(TargetBinaryDescription) returns (I32) {}
  rpc UnregisterLib(Pointer) returns (I32) {}

  rpc IsValidBinary(TargetDeviceImagePtr) returns (I32) {}
  rpc GetNumberOfDevices(Null) returns (I32) {}

  rpc InitDevice(I32) returns (I32) {}
  rpc InitRequires(I64) returns (I32) {}

  rpc LoadBinary(Binary) returns (TargetTable) {}
  rpc Synchronize(SynchronizeDevice) returns (I32) {}

  rpc DataAlloc(AllocData) returns (Pointer) {}
  rpc DataDelete(DeleteData) returns (I32) {}

  rpc DataSubmitAsync(stream SubmitDataAsync) returns (I32) {}
  rpc DataRetrieveAsync(RetrieveDataAsync) returns (stream Data) {}

  rpc IsDataExchangeable(DevicePair) returns (I32) {}
  rpc DataExchangeAsync(ExchangeDataAsync) returns (I32) {}

  rpc RunTargetRegionAsync(TargetRegionAsync) returns (I32) {}
  rpc RunTargetTeamRegionAsync(TargetTeamRegionAsync) returns (I32) {}
}

message Null {}

message Pointer { uint64 number = 1; }

message I32 { int32 number = 1; }

message I64 { int64 number = 1; }

message DevicePair {
  int32 src_dev_id = 1;
  int32 dst_dev_id = 2;
}

message Binary {
  uint64 image_ptr = 1;
  int32 device_id = 2;
}

message TargetOffloadEntry {
  bytes data = 1;
  string name = 2;
  int32 flags = 3;
  int32 reserved = 4;
}

message DeviceOffloadEntry {
  string name = 1;
  uint64 addr = 2;
  int32 flags = 3;
  int32 reserved = 4;
  int32 size = 5;
}

message TargetTable {
  repeated DeviceOffloadEntry entries = 1;
  repeated uint64 entry_ptrs = 2;
}

message TargetDeviceImagePtr {
  uint64 image_ptr = 1;
  repeated uint64 entry_ptrs = 2;
}

message TargetDeviceImage {
  bytes binary = 1;
  repeated TargetOffloadEntry entries = 2;
}

message ImagePtrs {
  uint64 img_ptr = 1;
  repeated uint64 entry_ptrs = 2;
}

message TargetBinaryDescription {
  repeated ImagePtrs image_ptrs = 1;
  repeated TargetOffloadEntry entries = 2;
  repeated TargetDeviceImage images = 3;
  repeated uint64 entry_ptrs = 4;
  uint64 bin_ptr = 5;
}

message SynchronizeDevice {
  uint64 queue_ptr = 1;
  int32 device_id = 2;
}

message AllocData {
  uint64 size = 1;
  uint64 hst_ptr = 2;
  int32 device_id = 3;
}

message SubmitDataAsync {
  bytes data = 1;
  uint64 hst_ptr = 2;
  uint64 tgt_ptr = 3;
  uint64 queue_ptr = 4;
  uint64 start = 5;
  uint64 size = 6;
  int32 device_id = 7;
}

message RetrieveDataAsync {
  uint64 hst_ptr = 1;
  uint64 tgt_ptr = 2;
  uint64 size = 3;
  uint64 queue_ptr = 4;
  int32 device_id = 5;
}

message Data {
  bytes data = 1;
  uint64 start = 2;
  uint64 size = 3;
  int32 ret = 4;
}

message ExchangeDataAsync {
  uint64 src_dev_id = 1;
  uint64 src_ptr = 2;
  uint64 dst_dev_id = 3;
  uint64 dst_ptr = 4;
  uint64 queue_ptr = 5;
  uint64 size = 6;
}

message DeleteData {
  uint64 tgt_ptr = 1;
  int32 device_id = 2;
}

message TargetRegionAsync {
  repeated uint64 tgt_args = 1;
  repeated int64 tgt_offsets = 2;
  uint64 tgt_entry_ptr = 3;
  uint64 queue_ptr = 4;
  int32 device_id = 5;
  int32 arg_num = 6;
}

message TargetTeamRegionAsync {
  repeated uint64 tgt_args = 1;
  repeated int64 tgt_offsets = 2;
  uint64 tgt_entry_ptr = 3;
  uint64 loop_tripcount = 4;
  uint64 queue_ptr = 5;
  int32 device_id = 6;
  int32 arg_num = 7;
  int32 team_num = 8;
  int32 thread_limit = 9;
}
