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

Generated by: LCOV version 2.0-1