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

Generated by: LCOV version 2.0-1