LCOV - code coverage report
Current view: top level - base_comm/resources/ccu/ccu_device/ccu_comp - ccu_comp.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 1 1
Test Date: 2026-07-28 12:11:00 Functions: 100.0 % 1 1

            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              : #ifndef CCU_COMP_H
      12              : #define CCU_COMP_H
      13              : 
      14              : #include <array>
      15              : #include <stack>
      16              : #include <mutex>
      17              : #include <memory>
      18              : #include <vector>
      19              : #include <cstdint>
      20              : #include <utility>
      21              : #include <unordered_map>
      22              : 
      23              : #include "hccl_types.h"
      24              : 
      25              : #include "tp_mgr.h"
      26              : #include "ccu_dev_mgr_imp.h"
      27              : #include "ccu_res_allocator.h"
      28              : #include "ccu_res_specs.h"
      29              : #include "ccu_channel_ctx_mgr.h"
      30              : 
      31              : // 暂时引入orion仓
      32              : #include "local_ub_rma_buffer.h"
      33              : 
      34              : namespace hcomm {
      35              : 
      36              : class CcuComponent {
      37              : public:
      38              :     static CcuComponent &GetInstance(const int32_t deviceLogicId);
      39              :     HcclResult Init();
      40              :     HcclResult Deinit();
      41              : 
      42              :     HcclResult GetCcuResourceSpaceBufInfo(const uint8_t dieId, uint64_t &addr, uint64_t &size) const;
      43              :     HcclResult GetCcuResourceSpaceTokenInfo(const uint8_t dieId, uint64_t &tokenId,
      44              :         uint64_t &tokenValue) const;
      45              : 
      46              :     HcclResult AllocChannels(const uint8_t dieId, const ChannelPara &channelPara,
      47              :         std::vector<ChannelInfo> &channelInfos);
      48              :     HcclResult ConfigChannel(const uint8_t dieId, const ChannelCfg &cfg);
      49              :     HcclResult ReleaseChannel(const uint8_t dieId, const uint32_t channelId);
      50              :     
      51              :     HcclResult GetLoopChannelId(const uint8_t srcDieId, const uint8_t dstDieId,
      52              :         uint32_t &channelId) const;
      53              : 
      54              :     HcclResult AllocRes(const uint8_t dieId, const ResType resType, const uint32_t num,
      55              :         const bool consecutive, std::vector<ResInfo> &resInfos);
      56              :     HcclResult ReleaseRes(const uint8_t dieId, const ResType resType, const uint32_t startId,
      57              :         const uint32_t num);
      58              :     
      59              :     HcclResult AllocIns(const uint8_t dieId, const uint32_t num, ResInfo &insInfo);
      60              :     HcclResult ReleaseIns(const uint8_t dieId, const ResInfo &insInfo);
      61              :     HcclResult AllocCke(const uint8_t dieId, const uint32_t num, std::vector<ResInfo> &ckeInfos);
      62              :     HcclResult ReleaseCke(const uint8_t dieId, const std::vector<ResInfo> &ckeInfos);
      63              :     HcclResult AllocXn(const uint8_t dieId, const uint32_t num, std::vector<ResInfo> &xnInfos);
      64              :     HcclResult ReleaseXn(const uint8_t dieId, const std::vector<ResInfo> &xnInfos);
      65              :     
      66              :     // 0.5rtt专用接口
      67              :     HcclResult AllocWishCntXn(const uint8_t dieId,
      68              :         const std::string &resGroupTag, uint32_t &wishCntXn);
      69              :     HcclResult ReleaseWishCntXn(const uint8_t dieId,
      70              :         const std::string &resGroupTag, uint32_t wishCntXn);
      71              :     HcclResult GetCntXnBlock(const uint8_t dieId,
      72              :         const std::string &resGroupTag,
      73              :         std::pair<uint32_t, uint32_t> &cntXnPair);
      74              :     HcclResult GetTotalCntXn(const uint8_t dieId,
      75              :         const std::string &resGroupTag, uint32_t &totalCntXn);
      76              : 
      77              :     const std::array<bool, CCU_MAX_IODIE_NUM> &GetDieEnableFlags() const;
      78              : 
      79              :     HcclResult CleanTaskKillState() const;
      80              :     HcclResult CleanDieCkes(const uint8_t dieId) const;
      81              :     HcclResult CcuCleanTaskKillState(const int32_t deviceLogicId);
      82              :     HcclResult SetTaskKillDone();
      83              :     HcclResult SetTaskKill();
      84              : 
      85              : private:
      86          207 :     explicit CcuComponent() = default;
      87              :     ~CcuComponent();
      88              :     CcuComponent(const CcuComponent &that) = delete;
      89              :     CcuComponent &operator=(const CcuComponent &that) = delete;
      90              : 
      91              :     HcclResult CheckDiesEnable();
      92              :     HcclResult ChooseLoopEids(const std::array<bool, CCU_MAX_IODIE_NUM> &dieDrvEnableFlags);
      93              :     HcclResult GetLoopFeIpByDieId(const uint8_t dieId, uint32_t &feId, CommAddr &commAddr);
      94              :     HcclResult CreateCcuRmaBuffer();
      95              :     HcclResult CreateResourceManagers();
      96              :     HcclResult CreateLoopChannels();
      97              :     HcclResult CreateLoopChannel(const uint8_t dieId, uint32_t &channelId);
      98              :     HcclResult CreateAndImportLoopJettys(const uint8_t dieId, const CommAddr &commAddr,
      99              :         const std::vector<JettyInfo> &jettyInfos);
     100              :     HcclResult GetLoopTpInfo(const uint8_t dieId, const CommAddr &commAddr, TpInfo &tpInfo);
     101              :     HcclResult GetLoopTpAttr(const uint8_t dieId, const CommAddr &commAddr, TpAttrInfo &tpAttrInfo);
     102              :     uint32_t GetNewPsn();
     103              :     HcclResult ConfigLoopChannel(const uint8_t dieId, const CommAddr &commAddr,
     104              :         const ChannelInfo &channelInfo);
     105              :     HcclResult ConfigMsIdToken();
     106              : 
     107              :     HcclResult ReleaseJettyRes();
     108              :     HcclResult UnimportAllJettys();
     109              :     HcclResult ReleaseAllTpInfos();
     110              :     HcclResult DestroyAllJettys();
     111              : 
     112              :     HcclResult SetProcess(CcuOpcodeType opCode) const;
     113              :     HcclResult CcuSetTaskKillDone(const int32_t deviceLogicId);
     114              : 
     115              :     // 0.5rtt专用接口
     116              :     HcclResult ConfirmCntXns(const uint8_t dieId, const std::string &resGroupTag, const ResInfo &cntXnInfos);
     117              :     HcclResult GetAvailableTotalCntXnIndex(uint32_t& index) const;
     118              :     HcclResult SetTotalCntXnProcess(uint8_t dieId, uint32_t index, uint32_t fromId, uint32_t toId, uint32_t totalId) const;
     119              : 
     120              :     HcclResult SetSplitUnit(uint8_t dieId, uint32_t splitPktUnit) const;
     121              :     HcclResult SetTotalCntXn(uint8_t dieId, uint32_t fromId, uint32_t toId, uint32_t totalId, uint32_t index);
     122              :     HcclResult ResetTotalCntXn(uint8_t dieId, uint32_t index);
     123              : 
     124              : private:
     125              :     std::mutex innerMutex_;
     126              :     std::mutex taskKillMutex_;
     127              :     static constexpr uint32_t INVALID_DEV_ID = 0xFFFFFFFF;
     128              :     bool initFlag_{false};
     129              :     int32_t devLogicId_{static_cast<int32_t>(INVALID_DEV_ID)};
     130              :     uint32_t devPhyId_{INVALID_DEV_ID};
     131              :     CcuVersion ccuVersion_{CcuVersion::CCU_INVALID};
     132              :     
     133              :     // 根据资源规格的记录可用的die,要求drv可用,且环回eid存在
     134              :     std::array<bool, CCU_MAX_IODIE_NUM> dieEnableFlags_{};
     135              : 
     136              :     // 记录环回设备信息,dieId, (feId, commAddr)
     137              :     std::unordered_map<uint8_t, std::pair<uint32_t, CommAddr>> loopFeCommAddrMap_{};
     138              :     // 记录CCU资源空间Buffer,避免重复内存注册
     139              :     std::unordered_map<uint8_t, std::unique_ptr<Hccl::LocalUbRmaBuffer>> ccuRmaBufferMap_{};
     140              :     // 资源管理器
     141              :     std::array<std::unique_ptr<CcuChannelCtxMgr>, CCU_MAX_IODIE_NUM> channelCtxMgrs_{};
     142              :     std::array<std::unique_ptr<CcuResAllocator>, CCU_MAX_IODIE_NUM> resAllocators_{};
     143              :     // 环回channel编号
     144              :     static constexpr uint16_t INVAILD_LOOP_CHANNEL_ID = 0xFFFF;
     145              :     std::array<uint32_t, CCU_MAX_IODIE_NUM> loopChannelIds_{INVAILD_LOOP_CHANNEL_ID, INVAILD_LOOP_CHANNEL_ID};
     146              :     // 环回jetty资源信息
     147              :     // std::array<HcclNetDev, CCU_MAX_IODIE_NUM> netDevs_{}; 当前netdevs不支持jfc
     148              :     std::unordered_map<uint8_t, std::vector<HrtRaUbJettyCreatedOutParam>> createdOutParamMap_{};
     149              :     using ImportOutParamPair = std::pair<CtxHandle, HrtRaUbJettyImportedOutParam>;
     150              :     std::unordered_map<uint8_t, std::vector<ImportOutParamPair>> importedOutParamMap_{};
     151              :     std::unordered_map<uint8_t, TpInfo> tpInfoMap_{};
     152              :     std::unordered_map<uint8_t, TpAttrInfo> tpAttrInfoMap_{};
     153              :     enum class CcuTaskKillStatus : uint8_t { INIT = 0, TASK_KILL = 1, KILL_DONE = 2, CLEAN_TIF = 3, INVALID = 4};
     154              :     CcuTaskKillStatus status{CcuTaskKillStatus::INVALID};
     155              : 
     156              :     struct CntXnBlock {
     157              :         ResInfo resInfo{};                 // cntXn resInfo
     158              :         std::stack<uint32_t>   wishCntXns; // wishCntXn Id
     159              :         uint32_t totalCntXn{0};            // totalCntXn Id
     160              :         uint32_t blockIdx{0};              // wishCntXn和totalCntXn绑定时的idx
     161              :     };
     162              :     std::mutex cntXnBlockMutex_;
     163              :     std::unordered_map<uint8_t, std::unordered_map<std::string, struct CntXnBlock>> cntXnBlocks_;  // {dieId, {resGroupTag, CntXnBlock}}
     164              :     // 已使用的0.5RTT配置寄存器的index
     165              :     std::array<bool, CCU_V2_RESOURCE_TOTAL_CNT_XNS_NUM> usedTotalCntXnFlags_{};
     166              : };
     167              : 
     168              : } // namespace hcomm
     169              : #endif // CCU_COMP_H
        

Generated by: LCOV version 2.0-1