/**
 * Copyright (c) 2025 Huawei Technologies Co., Ltd.
 * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
 * CANN Open Software License Agreement Version 2.0 (the "License").
 * Please refer to the License for details. You may not use this file except in compliance with the License.
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
 * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
 * See LICENSE in the root of the software repository for the full text of the License.
 */

syntax = "proto3";
package deployer;
import "ge_ir.proto";

message VarAddrMgrInfo {
  ge.proto.TensorDescriptor desc = 1;
  uint64 address = 2;
  uint64 offset = 3;
  uint64 memory_type = 4;
}

message VarDevAddrMgr {
  ge.proto.TensorDescriptor desc = 1;
  uint64 address = 2;
  uint64 dev_addr = 3;
}

message SingleTransNodeInfo {
  string node_type = 1;
  ge.proto.TensorDescriptor input = 2;
  ge.proto.TensorDescriptor output = 3;
}

message TransNodeMultiInfo {
  repeated SingleTransNodeInfo node_info = 1;
}

message BroadcastInfo {
  string var_name = 1;
  string broadcast_name = 2;
  int32 idx =3;
  int64 input_offset = 4;
  uint64 input_size = 5;
  int64 output_offset = 6;
  uint64 output_size = 7;
}

message BroadcastMultiInfo {
  map<string, BroadcastInfo> broadcast_info = 1;
}

message VarDescInfo {
  map<string, ge.proto.TensorDescriptor> cur_var_tensor_desc_map = 1;
  map<string, TransNodeMultiInfo> var_to_trans_road = 2;
  repeated string changed_var_names = 3;
  map<string, ge.proto.TensorDescriptor> staged_var_tensor_desc_map = 4;
}

message VarMatchInfo {
  VarDescInfo desc_info_before_compile = 1;
  VarDescInfo desc_info_after_compile = 2;
}

message VarResourceInfo {
  map<uint64, uint32> var_offset_map = 1;
  map<string, VarAddrMgrInfo> var_addr_mgr_map = 2;
  map<string, ge.proto.TensorDescriptor> cur_var_tensor_desc_map = 3;
  map<string, TransNodeMultiInfo> var_to_trans_road = 4;
  map<string, uint32> var_names_to_changed_graph_id = 5;
  map<string, uint32> var_names_to_allocated_graph_id = 6;
  map<uint32, BroadcastMultiInfo> var_broad_cast_info = 7;
  map<uint64, VarDevAddrMgr> var_dev_addr_mgr_map = 8;
}

message MemResourceInfo {
  uint64 total_size = 1;
  uint64 var_mem_size = 2;
}

message VarManagerInfo {
  uint32 version = 1;
  uint64 session_id = 2;
  uint32 device_id = 3;
  uint64 job_id = 4;
  uint64 graph_mem_max_size = 5;
  uint64 var_mem_max_size = 6;
  uint64 var_mem_logic_base = 7;
  uint64 use_max_mem_size = 8;
  VarResourceInfo var_resource = 9;
  map<uint32, MemResourceInfo> mem_resource_map = 10;
  bool var_mem_auto_malloc = 11;
}

message MultiVarManagerInfo {
  repeated VarManagerInfo var_manager_info = 1;
}

message SharedContentDescription {
  uint64 session_id = 1;
  string node_name = 2;
  uint64 head_offset = 3;
  uint64 total_length = 4;
  uint64 current_offset = 5;
  uint32 mem_type = 6;
  ge.proto.TensorDescriptor tensor_desc = 7;
  bytes om_content = 8;
}