LCOV - code coverage report
Current view: top level - base_comm/resources/ccu/ccu_device/ccu_comp/ccu_channel - ccu_jetty_ctx_mgr.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 18 18
Test Date: 2026-08-18 17:47:01 Functions: 66.7 % 3 2

            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_JETTY_CTX_MGR_H
      12              : #define CCU_JETTY_CTX_MGR_H
      13              : 
      14              : #include <vector>
      15              : 
      16              : #include "ccu_device_pub.h"
      17              : #include "ccu_pfe_mgr.h"
      18              : #include "ccu_wqebb_mgr.h"
      19              : 
      20              : namespace hcomm {
      21              : 
      22              : constexpr uint8_t DB_ADDR_TYPE = 1;
      23              : constexpr uint8_t TOKEN_VALUE_IS_VALIDE = 1;
      24              : 
      25              : constexpr uint32_t MASK_TK_ID_LOW = 0x000000FF;
      26              : constexpr uint32_t MASK_TK_ID_HIGH = 0x00000FFF;
      27              : 
      28              : constexpr uint32_t MASK_TK_VALUE_LOW = 0x0000000F;
      29              : constexpr uint32_t MASK_TK_VALUE_MID = 0x0000FFFF;
      30              : constexpr uint32_t MASK_TK_VALUE_HIGH = 0x00000FFF;
      31              : 
      32              : constexpr uint32_t MASK_WQEBB_IDX_LOW = 0x0000000F;
      33              : constexpr uint32_t MASK_WQEBB_IDX_HIGH = 0x000000FF;
      34              : 
      35              : constexpr uint16_t CCU_HARDWARE_DEFAULT_VALUE = 0x0;
      36              : 
      37              : #pragma pack(push, 1)
      38              : struct LocalJettyCtxData {
      39              :     uint16_t doorbellAddr[4] = {0}; // jetty doorbell addr
      40              :     /********8 Bytes**********/
      41              : 
      42              :     uint16_t pfeIdx : 4;            // jetty relegation use PFE num.
      43              :     uint16_t ioDieId : 1;           // 0: locall jetty use IODIE0, 1: locall jetty use IODIE1.
      44              :     uint16_t doorbellAddrType : 1;  // doorbell addr type: 0:PA, 1:VA.
      45              :     uint16_t tokenValueIsValid : 1; // doorbell addr relate token value valid type: invalid(0), valid(1).
      46              :     uint16_t cqeErrValue : 1;       // v1 not used
      47              :     uint16_t tokenIdLow : 8;
      48              :     /********10 Bytes**********/
      49              : 
      50              :     uint16_t tokenIdHigh : 12;
      51              :     uint16_t tokenValueLow : 4;
      52              :     /********12 Bytes**********/
      53              : 
      54              :     uint16_t tokenValueMiddle{0};
      55              :     /********14 Bytes**********/
      56              : 
      57              :     uint16_t tokenValueHigh : 12;
      58              :     // JFS/jetty SQE basic block  left shifts bit num, 1: SQBuffDepth = 2 ^ sqeBasicBlockLeftShifts, 4: SQ->16 WQEBB
      59              :     uint16_t sqeBasicBlockLeftShifts : 4;
      60              :     /********16 Bytes**********/
      61              : 
      62              :     uint16_t pi{0};    // ccu hardware maintain
      63              :     uint16_t ci{0};    // ccu hardware maintain
      64              :     uint16_t maxCi{0}; // ccu hardware maintain
      65              :     /********22 Bytes**********/
      66              : 
      67              :     uint16_t oooCqeCnt : 12; // ccu hardware maintain
      68              :     uint16_t startWqeBasicBlockIdxLow : 4;
      69              :     /********24 Bytes**********/
      70              : 
      71              :     uint16_t startWqeBasicBlockIdxHigh : 8;
      72              :     uint16_t doorbellSendState : 2; // ccu hardware maintain
      73              :     uint16_t rsvSixBits : 6;
      74              :     /********26 Bytes**********/
      75              : 
      76              :     uint16_t rsvs[3]{0};
      77              :     /********32 Bytes**********/
      78              : 
      79          203 :     LocalJettyCtxData()
      80          203 :         : pfeIdx(0),
      81          203 :           ioDieId{0},
      82          203 :           doorbellAddrType{0},
      83          203 :           tokenValueIsValid{0},
      84          203 :           cqeErrValue{0},
      85          203 :           tokenIdLow{0},
      86          203 :           tokenIdHigh{0},
      87          203 :           tokenValueLow(0),
      88          203 :           tokenValueHigh{0},
      89          203 :           sqeBasicBlockLeftShifts{0},
      90          203 :           oooCqeCnt{0},
      91          203 :           startWqeBasicBlockIdxLow{0},
      92          203 :           startWqeBasicBlockIdxHigh{0},
      93          203 :           doorbellSendState{0},
      94          203 :           rsvSixBits{0}
      95          203 :     {}
      96              : };
      97              : #pragma pack(pop)
      98              : 
      99              : LocalJettyCtxData
     100              : BuildJettyCtxData(const uint8_t dieId, const uint32_t pfeId, const JettyInfo& jettyInfo, const JettyCfg& jettyCfg);
     101              : 
     102              : HcclResult ConfigJettyCtxData(
     103              :     const int32_t devLogicId, const uint8_t dieId, const uint32_t devPhyId, const uint16_t startJettyCtxId,
     104              :     std::vector<LocalJettyCtxData>& jettyCtxData);
     105              : 
     106              : void DumpJettyCtxData(const LocalJettyCtxData& tmp);
     107              : 
     108              : class CcuJettyCtxMgr {
     109              : public:
     110              :     CcuJettyCtxMgr(const int32_t devLogicId, const uint8_t dieId, const uint32_t devPhyId);
     111              :     CcuJettyCtxMgr() = default;
     112          223 :     virtual ~CcuJettyCtxMgr() = default;
     113              :     virtual HcclResult Init() = 0;
     114              : 
     115              :     virtual HcclResult
     116              :     Alloc(const uint32_t feId, const uint32_t jettyNum, const uint32_t sqSize, std::vector<JettyInfo>& jettyInfos)
     117              :         = 0;
     118              :     virtual HcclResult
     119              :     Config(const uint32_t feId, const std::vector<JettyInfo>& jettyInfos, const std::vector<JettyCfg>& jettyCfgs)
     120              :         = 0;
     121              :     virtual HcclResult Release(const uint32_t feId, const std::vector<JettyInfo>& jettyInfos) = 0;
     122              : 
     123              : protected:
     124              :     int32_t devLogicId_{0};
     125              :     uint8_t dieId_{0};
     126              :     uint32_t devPhyId_{0};
     127              : 
     128              :     uint32_t jettySpecNum_{0};
     129              :     uint64_t ccuResBaseVa_{0};
     130              : 
     131              :     std::unique_ptr<CcuWqeBBMgr> wqeBBMgr_{nullptr};
     132              :     CcuPfeMgr pfeMgr_{};
     133              : 
     134              :     HcclResult TryAllocWqeBBResource(
     135              :         const uint32_t sqSize, const uint32_t jettyCtxStartId, const uint32_t taJettyStartId,
     136              :         const CcuJettyType jettyType, std::vector<JettyInfo>& jettyInfos);
     137              :     HcclResult ReleaseWqeBBResource(const std::vector<JettyInfo>& jettyInfos);
     138              :     HcclResult
     139              :     CheckIfJettyCfgsValid(const std::vector<JettyInfo>& jettyInfos, const std::vector<JettyCfg>& jettyCfgs) const;
     140              : };
     141              : 
     142              : }; // namespace hcomm
     143              : 
     144              : #endif // CCU_JETTY_CTX_MGR_H
        

Generated by: LCOV version 2.0-1