LCOV - code coverage report
Current view: top level - base_comm/common - hccp_tlv_hdc_mgr.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 87.8 % 49 43
Test Date: 2026-08-18 17:47:01 Functions: 100.0 % 8 8

            Line data    Source code
       1              : /**
       2              :  * Copyright (c) 2025 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              : #include "hccp_tlv_hdc_mgr.h"
      12              : 
      13              : #include "hccl_common.h"
      14              : 
      15              : #include "hccp_tlv.h"
      16              : 
      17              : namespace hcomm {
      18              : 
      19           70 : HccpTlvHdcMgr& HccpTlvHdcMgr::GetInstance(const uint32_t devicePhyId)
      20              : {
      21           70 :     static HccpTlvHdcMgr hccpTlvHdcMgr[MAX_MODULE_DEVICE_NUM + 1];
      22              : 
      23           70 :     uint32_t devPhyId = devicePhyId;
      24           70 :     if (devPhyId >= MAX_MODULE_DEVICE_NUM) {
      25            0 :         HCCL_WARNING(
      26              :             "[HccpTlvHdcMgr][%s] use the backup device, devPhyId[%u] should be "
      27              :             "less than %u.",
      28              :             __func__, devPhyId, MAX_MODULE_DEVICE_NUM);
      29            0 :         devPhyId = MAX_MODULE_DEVICE_NUM; // 使用备份设备
      30              :     }
      31              : 
      32           70 :     hccpTlvHdcMgr[devPhyId].devPhyId_ = devPhyId;
      33           70 :     return hccpTlvHdcMgr[devPhyId];
      34              : }
      35              : 
      36           25 : inline TlvInitInfo GetCfgInfo(const uint32_t devPhyId)
      37              : {
      38           25 :     constexpr u32 tlvVersion = 1;
      39           25 :     struct TlvInitInfo tlvInfo {};
      40           25 :     tlvInfo.phyId = devPhyId;
      41           25 :     tlvInfo.nicPosition = NetworkMode::NETWORK_OFFLINE;
      42           25 :     tlvInfo.version = tlvVersion;
      43              : 
      44           25 :     return tlvInfo;
      45              : }
      46              : 
      47           25 : static HcclResult HccpTlvInit(const uint32_t devPhyId, TlvHandle& tlvHandle)
      48              : {
      49           25 :     TlvInitInfo cfgInfo = GetCfgInfo(devPhyId);
      50           25 :     unsigned int bufferSize{0}; // 当前未使用
      51              : 
      52           25 :     int32_t ret = RaTlvInit(&cfgInfo, &bufferSize, &tlvHandle);
      53           25 :     if (ret != 0 || tlvHandle == nullptr) {
      54            0 :         HCCL_ERROR(
      55              :             "[Init][RaTlv]errNo[0x%016llx] ra tlv init fail. params: mode[%u]. return: ret[%d]",
      56              :             static_cast<unsigned long long>(HCCL_ERROR_CODE(HcclResult::HCCL_E_NETWORK)), cfgInfo.nicPosition, ret);
      57            0 :         return HcclResult::HCCL_E_NETWORK;
      58              :     }
      59              : 
      60           25 :     HCCL_INFO("[%s] success, device id[%u] tlv handle[%p]", __func__, cfgInfo.phyId, tlvHandle);
      61           25 :     return HcclResult::HCCL_SUCCESS;
      62              : }
      63              : 
      64           69 : HcclResult HccpTlvHdcMgr::Init()
      65              : {
      66           69 :     std::unique_lock<std::mutex> lock(innerMutex_);
      67           69 :     if (initFlag_) {
      68           44 :         return HcclResult::HCCL_SUCCESS;
      69              :     }
      70              : 
      71           25 :     CHK_RET(HccpTlvInit(devPhyId_, tlvHandle_));
      72           25 :     initFlag_ = true;
      73           25 :     return HcclResult::HCCL_SUCCESS;
      74           69 : }
      75              : 
      76           69 : TlvHandle HccpTlvHdcMgr::GetHandle() { return tlvHandle_; }
      77              : 
      78           25 : static HcclResult HccpTlvDeinit(const TlvHandle tlvHandle)
      79              : {
      80           25 :     int32_t ret = RaTlvDeinit(tlvHandle);
      81           25 :     if (ret != 0) {
      82            0 :         HCCL_ERROR(
      83              :             "[DeInit][RaTlv]errNo[0x%016llx] ra tlv deinit fail. return: ret[%d]",
      84              :             static_cast<unsigned long long>(HCCL_ERROR_CODE(HcclResult::HCCL_E_NETWORK)), ret);
      85            0 :         return HcclResult::HCCL_E_NETWORK;
      86              :     }
      87              : 
      88           25 :     return HcclResult::HCCL_SUCCESS;
      89              : }
      90              : 
      91          132 : HcclResult HccpTlvHdcMgr::Deinit()
      92              : {
      93          132 :     std::unique_lock<std::mutex> lock(innerMutex_);
      94          132 :     if (!initFlag_) {
      95          107 :         return HcclResult::HCCL_SUCCESS;
      96              :     }
      97              : 
      98           25 :     CHK_RET(HccpTlvDeinit(tlvHandle_));
      99           25 :     tlvHandle_ = nullptr;
     100           25 :     initFlag_ = false;
     101           25 :     return HcclResult::HCCL_SUCCESS;
     102          132 : }
     103              : 
     104          132 : HccpTlvHdcMgr::~HccpTlvHdcMgr() { (void)Deinit(); }
     105              : 
     106              : } // namespace hcomm
        

Generated by: LCOV version 2.0-1