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 % 6 6
Test Date: 2026-07-28 12:11:00 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           67 :     LocalJettyCtxData() : pfeIdx(0), ioDieId{0}, doorbellAddrType{0}, tokenValueIsValid{0},
      80           67 :         cqeErrValue{0}, tokenIdLow{0}, tokenIdHigh{0}, tokenValueLow(0), tokenValueHigh{0},
      81           67 :         sqeBasicBlockLeftShifts{0}, oooCqeCnt{0}, startWqeBasicBlockIdxLow{0}, startWqeBasicBlockIdxHigh{0},
      82           67 :         doorbellSendState{0}, rsvSixBits{0}
      83              :     {
      84           67 :     }
      85              : };
      86              : #pragma pack(pop)
      87              : 
      88              : LocalJettyCtxData BuildJettyCtxData(const uint8_t dieId, const uint32_t pfeId,
      89              :     const JettyInfo& jettyInfo, const JettyCfg& jettyCfg);
      90              : 
      91              : HcclResult ConfigJettyCtxData(const int32_t devLogicId, const uint8_t dieId, const uint32_t devPhyId,
      92              :     const uint16_t startJettyCtxId, std::vector<LocalJettyCtxData>& jettyCtxData);
      93              : 
      94              : void DumpJettyCtxData(const LocalJettyCtxData &tmp);
      95              : 
      96              : class CcuJettyCtxMgr {
      97              : public:
      98              :     CcuJettyCtxMgr(const int32_t devLogicId, const uint8_t dieId, const uint32_t devPhyId);
      99              :     CcuJettyCtxMgr() = default;
     100           87 :     virtual ~CcuJettyCtxMgr() = default;
     101              :     virtual HcclResult Init() = 0;
     102              : 
     103              :     virtual HcclResult Alloc(const uint32_t feId, const uint32_t jettyNum, const uint32_t sqSize,
     104              :         std::vector<JettyInfo>& jettyInfos) = 0;
     105              :     virtual HcclResult Config(const uint32_t feId, const std::vector<JettyInfo> &jettyInfos,
     106              :         const std::vector<JettyCfg>& jettyCfgs) = 0;
     107              :     virtual HcclResult Release(const uint32_t feId, const std::vector<JettyInfo> &jettyInfos) = 0;
     108              : 
     109              : protected:
     110              :     int32_t  devLogicId_{0};
     111              :     uint8_t  dieId_{0};
     112              :     uint32_t devPhyId_{0};
     113              : 
     114              :     uint32_t jettySpecNum_{0};
     115              :     uint64_t ccuResBaseVa_{0};
     116              : 
     117              :     std::unique_ptr<CcuWqeBBMgr> wqeBBMgr_{nullptr};
     118              :     CcuPfeMgr   pfeMgr_{};
     119              : 
     120              :     HcclResult TryAllocWqeBBResource(const uint32_t sqSize, const uint32_t jettyCtxStartId,
     121              :         const uint32_t taJettyStartId, const CcuJettyType jettyType,
     122              :         std::vector<JettyInfo> &jettyInfos);
     123              :     HcclResult ReleaseWqeBBResource(const std::vector<JettyInfo> &jettyInfos);
     124              :     HcclResult CheckIfJettyCfgsValid(const std::vector<JettyInfo> &jettyInfos,
     125              :     const std::vector<JettyCfg>& jettyCfgs) const;
     126              : };
     127              : 
     128              : }; // namespace hcomm
     129              : 
     130              : #endif // CCU_JETTY_CTX_MGR_H
        

Generated by: LCOV version 2.0-1