LCOV - code coverage report
Current view: top level - coll_communicator_mgr/team/hcomm - hcomm_team.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 94.3 % 70 66
Test Date: 2026-08-29 17:38:31 Functions: 100.0 % 4 4

            Line data    Source code
       1              : /**
       2              :  * Copyright (c) 2026 Huawei Technologies Co., Ltd.
       3              :  * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
       4              :  * CANN Open Software License Agreement Version 2.0 (the "License").
       5              :  * Please refer to the License for details. You may not use this file except in compliance with the License.
       6              :  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
       7              :  * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
       8              :  * See LICENSE in the root of the software repository for the full text of the License.
       9              :  */
      10              : 
      11              : #ifndef HCOMM_TEAM_H
      12              : #define HCOMM_TEAM_H
      13              : #include <stdint.h>
      14              : #include <stddef.h>
      15              : #include <stdbool.h>
      16              : #include "hcomm_res_defs.h"
      17              : #include "hcomm_team_defs.h"
      18              : #include "hcomm_result_defs.h"
      19              : 
      20              : #ifdef __cplusplus
      21              : extern "C" {
      22              : #endif // __cplusplus
      23              : 
      24              : typedef enum {
      25              :     HCOMM_TEAM_WINDOW_FLAG_INVALID = -1,
      26              :     HCOMM_TEAM_WINDOW_FLAG_SYMMETRIC = 0, // 当前仅支持配置为0
      27              : } HcommTeamWindowFlag;
      28              : 
      29              : typedef struct {
      30              :     CommAbiHeader header;
      31              :     uint32_t memberNum;
      32              :     uint32_t selfMemberId;
      33              :     const uint32_t*
      34              :         worldMemberIds; /*worldMemberIds在创建worldteam的时候是nullptr,创建subteam的时候是subteam的成员在worldteam中的memberId数组,长度是memberNum*/
      35              :     uint32_t netLayer;  /* 用户希望使用的网络层,0表示默认选择 */
      36              :     CommProtocol protocol; /* 用户希望使用的通信协议,-1表示保留协议类型, 1个team仅支持一个协议 */
      37              :     HcommTeamSyncMemRequirement requirement;
      38              :     uint32_t reserved[6];
      39              : } HcommTeamCreateDesc;
      40              : 
      41              : typedef struct {
      42              :     CommAbiHeader header;
      43              :     uint32_t* channelNumPerMember; /* 长度为memberNum,表示每个成员的channel数量 */
      44              :     ChannelHandle** channelsByMemberId;
      45              :     uint32_t memberNum;
      46              :     uint32_t reserved[8];
      47              : } HcommTeamBindChannelsDesc;
      48              : 
      49              : typedef struct {
      50              :     CommAbiHeader header;
      51              :     CommMem* mems; // 下标是成员id,长度是memberNum,如果是selfMemberId,则是本地内存,否则是远端内存
      52              :     uint32_t memberNum;
      53              :     uint32_t reserved[5];
      54              : } HcommTeamWindowDesc;
      55              : 
      56              : typedef struct {
      57              :     CommAbiHeader header;
      58              :     CommMem* remoteMems;
      59              :     uint32_t remoteMemNum;
      60              :     uint32_t reserved[5];
      61              : } HcommTeamBindSyncMemDesc;
      62              : 
      63              : static const uint32_t HCOMM_TEAM_CREATE_DESC_MAGIC_WORD = 0x0f0f0f10U;
      64              : static const uint32_t HCOMM_TEAM_CREATE_DESC_VERSION = 1U;
      65              : 
      66              : static const uint32_t HCOMM_TEAM_BIND_CHANNELS_DESC_MAGIC_WORD = 0x0f0f0f11U;
      67              : static const uint32_t HCOMM_TEAM_BIND_CHANNELS_DESC_VERSION = 1U;
      68              : 
      69              : static const uint32_t HCOMM_TEAM_WINDOW_DESC_MAGIC_WORD = 0x0f0f0f12U;
      70              : static const uint32_t HCOMM_TEAM_WINDOW_DESC_VERSION = 1U;
      71              : 
      72              : static const uint32_t HCOMM_TEAM_BIND_SYNCMEM_DESC_MAGIC_WORD = 0x0f0f0f13U;
      73              : static const uint32_t HCOMM_TEAM_BIND_SYNCMEM_DESC_VERSION = 1U;
      74              : 
      75           40 : static inline HcommResult HcommTeamCreateDescInit(HcommTeamCreateDesc* desc)
      76              : {
      77           40 :     const HcommResult hcommEPointer = HCOMM_E_PTR;
      78              : 
      79           40 :     if (desc == nullptr) {
      80            0 :         return hcommEPointer;
      81              :     }
      82              : 
      83           40 :     (void)memset_s(desc, sizeof(HcommTeamCreateDesc), 0xFF, sizeof(HcommTeamCreateDesc));
      84           40 :     desc->header.version = HCOMM_TEAM_CREATE_DESC_VERSION;
      85           40 :     desc->header.magicWord = HCOMM_TEAM_CREATE_DESC_MAGIC_WORD;
      86           40 :     desc->header.size = sizeof(HcommTeamCreateDesc);
      87           40 :     desc->header.reserved = 0;
      88           40 :     desc->memberNum = 0;
      89           40 :     desc->selfMemberId = 0;
      90           40 :     desc->worldMemberIds = nullptr;
      91           40 :     desc->netLayer = 0;
      92           40 :     desc->protocol = COMM_PROTOCOL_RESERVED;
      93           40 :     desc->requirement.signalCount = 0;
      94           40 :     desc->requirement.counterCount = 0;
      95           40 :     desc->requirement.barrierCount = 0;
      96           40 :     const uint32_t reqReservedCount = sizeof(desc->requirement.reserved) / sizeof(desc->requirement.reserved[0]);
      97          240 :     for (uint32_t i = 0; i < reqReservedCount; ++i) {
      98          200 :         desc->requirement.reserved[i] = 0;
      99              :     }
     100           40 :     const uint32_t reservedCount = sizeof(desc->reserved) / sizeof(desc->reserved[0]);
     101          280 :     for (uint32_t i = 0; i < reservedCount; ++i) {
     102          240 :         desc->reserved[i] = 0;
     103              :     }
     104              : 
     105           40 :     return 0;
     106              : }
     107              : 
     108            8 : static inline HcommResult HcommTeamBindChannelsDescInit(HcommTeamBindChannelsDesc* desc)
     109              : {
     110            8 :     const HcommResult hcommEPointer = HCOMM_E_PTR;
     111              : 
     112            8 :     if (desc == nullptr) {
     113            0 :         return hcommEPointer;
     114              :     }
     115              : 
     116            8 :     (void)memset_s(desc, sizeof(HcommTeamBindChannelsDesc), 0xFF, sizeof(HcommTeamBindChannelsDesc));
     117            8 :     desc->header.version = HCOMM_TEAM_BIND_CHANNELS_DESC_VERSION;
     118            8 :     desc->header.magicWord = HCOMM_TEAM_BIND_CHANNELS_DESC_MAGIC_WORD;
     119            8 :     desc->header.size = sizeof(HcommTeamBindChannelsDesc);
     120            8 :     desc->header.reserved = 0;
     121            8 :     desc->memberNum = 0;
     122            8 :     desc->channelNumPerMember = nullptr;
     123            8 :     desc->channelsByMemberId = nullptr;
     124            8 :     const uint32_t reservedCount = sizeof(desc->reserved) / sizeof(desc->reserved[0]);
     125           72 :     for (uint32_t i = 0; i < reservedCount; ++i) {
     126           64 :         desc->reserved[i] = 0;
     127              :     }
     128              : 
     129            8 :     return 0;
     130              : }
     131              : 
     132            6 : static inline HcommResult HcommTeamWindowDescInit(HcommTeamWindowDesc* desc)
     133              : {
     134            6 :     const HcommResult hcommEPointer = HCOMM_E_PTR;
     135              : 
     136            6 :     if (desc == nullptr) {
     137            0 :         return hcommEPointer;
     138              :     }
     139              : 
     140            6 :     (void)memset_s(desc, sizeof(HcommTeamWindowDesc), 0xFF, sizeof(HcommTeamWindowDesc));
     141            6 :     desc->header.version = HCOMM_TEAM_WINDOW_DESC_VERSION;
     142            6 :     desc->header.magicWord = HCOMM_TEAM_WINDOW_DESC_MAGIC_WORD;
     143            6 :     desc->header.size = sizeof(HcommTeamWindowDesc);
     144            6 :     desc->header.reserved = 0;
     145            6 :     desc->mems = nullptr;
     146            6 :     desc->memberNum = 0;
     147            6 :     const uint32_t reservedCount = sizeof(desc->reserved) / sizeof(desc->reserved[0]);
     148           36 :     for (uint32_t i = 0; i < reservedCount; ++i) {
     149           30 :         desc->reserved[i] = 0;
     150              :     }
     151              : 
     152            6 :     return 0;
     153              : }
     154              : 
     155            5 : static inline HcommResult HcommTeamBindSyncMemDescInit(HcommTeamBindSyncMemDesc* desc)
     156              : {
     157            5 :     const HcommResult hcommEPointer = HCOMM_E_PTR;
     158              : 
     159            5 :     if (desc == nullptr) {
     160            0 :         return hcommEPointer;
     161              :     }
     162              : 
     163            5 :     (void)memset_s(desc, sizeof(HcommTeamBindSyncMemDesc), 0xFF, sizeof(HcommTeamBindSyncMemDesc));
     164            5 :     desc->header.version = HCOMM_TEAM_BIND_SYNCMEM_DESC_VERSION;
     165            5 :     desc->header.magicWord = HCOMM_TEAM_BIND_SYNCMEM_DESC_MAGIC_WORD;
     166            5 :     desc->header.size = sizeof(HcommTeamBindSyncMemDesc);
     167            5 :     desc->header.reserved = 0;
     168            5 :     desc->remoteMems = nullptr;
     169            5 :     desc->remoteMemNum = 0;
     170            5 :     const uint32_t reservedCount = sizeof(desc->reserved) / sizeof(desc->reserved[0]);
     171           30 :     for (uint32_t i = 0; i < reservedCount; ++i) {
     172           25 :         desc->reserved[i] = 0;
     173              :     }
     174              : 
     175            5 :     return 0;
     176              : }
     177              : 
     178              : /* ===== team 生命周期 ===== */
     179              : HcommResult HcommTeamCreate(
     180              :     HcommTeamHandle worldTeam, const HcommTeamCreateDesc* desc, HcommTeamHandle* team, uint64_t* syncMemSize);
     181              : HcommResult HcommTeamDestroy(HcommTeamHandle team);
     182              : 
     183              : /* ===== team 窗口操作 ===== */
     184              : HcommResult HcommTeamWindowRegister(
     185              :     HcommTeamHandle worldTeam, const HcommTeamWindowDesc* desc, HcommWindowHandle* handle, HcommTeamWindowFlag flag);
     186              : HcommResult HcommTeamWindowDeregister(HcommTeamHandle worldTeam, HcommWindowHandle handle);
     187              : 
     188              : /* ===== team 资源绑定 ===== */
     189              : HcommResult HcommTeamBindChannels(HcommTeamHandle team, const HcommTeamBindChannelsDesc* desc);
     190              : HcommResult HcommTeamBindRemoteSyncMem(HcommTeamHandle team, const HcommTeamBindSyncMemDesc* remoteDesc);
     191              : HcommResult
     192              : HcommTeamWindowBindRemoteMems(HcommTeamHandle team, HcommWindowHandle handle, const HcommTeamWindowDesc* remoteDesc);
     193              : 
     194              : #ifdef __cplusplus
     195              : }
     196              : #endif // __cplusplus
     197              : #endif // HCOMM_TEAM_H
        

Generated by: LCOV version 2.0-1