LCOV - code coverage report
Current view: top level - base_comm/resources/southbound_adpt - hcomm_adapter_hccp.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 95.2 % 21 20
Test Date: 2026-08-18 17:47:01 Functions: 70.8 % 24 17

            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 HCOMM_ADAPTER_HCCP_H
      12              : #define HCOMM_ADAPTER_HCCP_H
      13              : 
      14              : #include <vector>
      15              : #include <string>
      16              : 
      17              : #include "hccp.h"
      18              : #include "hccp_ctx.h"
      19              : 
      20              : #include "env_config.h"
      21              : #include "enum_factory.h"
      22              : #include "hccl_rank_graph.h"
      23              : // orion 暂时复用
      24              : #include "ip_address.h"
      25              : 
      26              : namespace hcomm {
      27              : 
      28              : // 暂时放在adapter
      29              : constexpr uint32_t URMA_EID_LEN = 16;
      30              : MAKE_ENUM(HrtNetworkMode, PEER, HDC);
      31              : 
      32              : using Eid = HccpEid; // 使用hccp定义的union表示eid
      33              : // 当前支持编译定义,后续考虑直接使用hccp数据结构
      34              : struct DevEidInfo {
      35              :     std::string name{};
      36              :     CommAddr commAddr{};
      37              :     uint32_t eidIndex{0};
      38              :     uint32_t type{0};
      39              :     uint32_t dieId{0};
      40              :     uint32_t chipId{0};
      41              :     uint32_t funcId{0};
      42              :     uint32_t devFeature{0};
      43              : };
      44              : 
      45              : HcclResult IpAddressToHccpEid(const Hccl::IpAddress& ipAddr, Eid& eid);
      46              : HcclResult IpAddressToReverseHcclEid(const Hccl::IpAddress& ipAddr, Hccl::Eid& eid);
      47              : 
      48              : HcclResult RaGetDevEidInfos(const RaInfo& raInfo, std::vector<DevEidInfo>& devEidInfos);
      49              : 
      50              : using RequestHandle = u64;
      51         1656 : MAKE_ENUM(
      52              :     RequestResult, COMPLETED, NOT_COMPLETED, SOCK_E_AGAIN, INVALID_PARA, GET_REQ_RESULT_FAILED, ASYNC_REQUEST_FAILED);
      53              : 
      54              : RequestResult HccpGetAsyncReqResult(RequestHandle& reqHandle);
      55              : 
      56              : using CtxHandle = void*;
      57              : using JettyHandle = void*;
      58              : using TargetJettyHandle = void*;
      59              : using JfcHandle = void*;
      60              : using TokenIdHandle = void*;
      61              : 
      62              : HcclResult HrtRaDumpJettyContext(JettyHandle jettyHandle, u32 jettyId);
      63              : 
      64          652 : MAKE_ENUM(HrtTransportMode, RM);
      65              : // STANDARD: URMA标准CreateJetty
      66              : // HOST_OFFLOAD: HOST侧展开下沉算子,需要指定sqeBbNum
      67              : // HOST_OPBASE: Host展开单算子,需要指定sqeBbNum,
      68              : // DEV_USED: 在Dev的APICPU展开算子,STARS不能使用UB DirectWQE的task,可以使用UB DbSend task,不需要指定sqeBbNum
      69              : // CACHE_LOCK_DWQE: 该模式下,      STARS仅能使用UB DirectWQE的task,不能使用UB DbSend task,,需要指定sqeBbNum
      70              : // CCU_CCUM_CACHE: 不需要指定sqeBbNum
      71              : // CCU_TA_CACHE: A6 CCU专用
      72         2446 : MAKE_ENUM(HrtJettyMode, STANDARD, HOST_OFFLOAD, HOST_OPBASE, DEV_USED, CACHE_LOCK_DWQE, CCU_CCUM_CACHE, CCU_TA_CACHE);
      73              : MAKE_ENUM(HrtUbJfcMode, NORMAL, STARS_POLL, CCU_POLL, USER_CTL);
      74              : using HrtRaUbCreateJettyParam = struct HrtRaUbJettyCreateParamDef {
      75              :     JfcHandle sjfcHandle{nullptr};
      76              :     JfcHandle rjfcHandle{nullptr};
      77              : 
      78              :     // CCU的DB需要注册,填写tokenValue
      79              :     u32 tokenValue{0};
      80              :     TokenIdHandle tokenIdHandle{0};
      81              : 
      82              :     HrtJettyMode jettyMode{HrtJettyMode::STANDARD};
      83              : 
      84              :     // 如果jettyId为0,则代表UB自行申请jetty,如果jettyId不为0,则代表使用预留jetty id
      85              :     // [1024, 1024 +127]为ccuJetty预留的id
      86              :     // [1024 + 192, 1024 + 192 + 4K - 1]为starsJetty预留的id
      87              :     u32 jettyId{0};
      88              : 
      89              :     // 指定内存,需要填写的参数,CCU类型 和 DEV_USED类型需要填写
      90              :     u64 sqBufVa{0};
      91              :     u32 sqBufSize{0};
      92              :     // 指定sqeBB资源起始id,当前预留
      93              :     u32 sqeBufIndex{0};
      94              : 
      95              :     // HOST_OFFLOAD / HOST_OPBASE / CACHE_LOCK_DWQE 类型的Jetty ,需要指定WQEBB的数目
      96              :     // STADARD 类型Jetty,该参数代表SQ深度
      97              :     u32 sqDepth{0};
      98              :     u32 rqDepth{64};
      99              :     HrtTransportMode transMode{HrtTransportMode::RM}; // 仅能使用RM模式的Jetty
     100              :     u8 errTimeout{16};
     101              :     /// 低 4bit 映射 UB Jetty 创建属性中的 priority(attr.ub.priority = qos & 0xF)
     102              :     u32 qos{EnvConfig::UB_QOS_DEFAULT};
     103              : 
     104           33 :     HrtRaUbJettyCreateParamDef() {}
     105              : 
     106          219 :     HrtRaUbJettyCreateParamDef(
     107              :         JfcHandle sjfcHandle, JfcHandle rjfcHandle, u32 tokenValue, TokenIdHandle tokenIdHandle, HrtJettyMode jettyMode,
     108              :         u32 jettyId, u64 sqBufVa, u32 sqBufSize, u32 sqeBufIndex, u32 sqDepth, u8 errTimeout = 16)
     109          219 :         : sjfcHandle(sjfcHandle),
     110          219 :           rjfcHandle(rjfcHandle),
     111          219 :           tokenValue(tokenValue),
     112          219 :           tokenIdHandle(tokenIdHandle),
     113          219 :           jettyMode(jettyMode),
     114          219 :           jettyId(jettyId),
     115          219 :           sqBufVa(sqBufVa),
     116          219 :           sqBufSize(sqBufSize),
     117          219 :           sqeBufIndex(sqeBufIndex),
     118          219 :           sqDepth(sqDepth),
     119          219 :           errTimeout(errTimeout)
     120          219 :     {}
     121              : };
     122              : 
     123              : constexpr u32 HRT_UB_QP_KEY_MAX_LEN = 64; // UB 最大的QpKey长度
     124              : 
     125              : using HrtRaUbJettyCreatedOutParam = struct HrtRaUbJettyCreatedOutParamDef {
     126              :     JettyHandle handle{0};
     127              :     u8 key[HRT_UB_QP_KEY_MAX_LEN]{0};
     128              :     u64 jettyVa{0};
     129              :     u32 uasid{0};
     130              :     u32 id{0};
     131              :     u32 keySize{0};
     132              :     u64 dbVa{0};
     133              :     u32 dbTokenId{0};
     134              : };
     135              : 
     136              : HcclResult
     137              : HccpUbCreateJetty(const CtxHandle ctxhandle, const HrtRaUbCreateJettyParam& in, HrtRaUbJettyCreatedOutParam& out);
     138              : 
     139              : HcclResult HccpUbCreateJettyAsync(
     140              :     const CtxHandle ctxhandle, const HrtRaUbCreateJettyParam& in, std::vector<char>& out, void*& jettyHandle,
     141              :     RequestHandle& reqHandle);
     142              : 
     143            0 : MAKE_ENUM(JettyStatus, RESET, READY, SUSPENDED, ERROR);
     144              : constexpr u32 MAX_JETTY_QUERY_NUM = 128;
     145              : HcclResult
     146              : RaBatchQueryJettyStatus(const std::vector<JettyHandle>& jettyHandles, std::vector<JettyStatus>& jettyAttrs, u32& num);
     147              : 
     148              : using HrtRaUbJettyImportedOutParam = struct HrtRaUbJettyImportedOutParamDef {
     149              :     TargetJettyHandle handle{0};
     150              :     u64 targetJettyVa{0};
     151              :     u32 tpn{0};
     152              : };
     153              : 
     154         8221 : MAKE_ENUM(TpProtocol, CTP, RTP, UBOE);
     155              : 
     156              : struct JettyImportCfg {
     157              :     u64 localTpHandle{0};
     158              :     u64 remoteTpHandle{0};
     159              :     u64 localTag{0}; // tag是hccp预留字段,暂不需要赋值
     160              :     u32 localPsn{0};
     161              :     u32 remotePsn{0};
     162              :     TpProtocol protocol{TpProtocol::INVALID};
     163              : };
     164              : 
     165              : HcclResult HccpUbTpImportJetty(
     166              :     const CtxHandle ctxHandle, u8* key, const u32 keyLen, const u32 tokenValue, const JettyImportCfg& jettyImportCfg,
     167              :     HrtRaUbJettyImportedOutParam& out);
     168              : 
     169              : using HccpUbJettyImportedInParam = struct HccpUbJettyImportedInParamDef {
     170              :     u8* key{nullptr};
     171              :     u32 keyLen{0};
     172              :     u32 tokenValue{0};
     173              :     JettyImportCfg jettyImportCfg{};
     174              : };
     175              : 
     176              : HcclResult HccpUbTpImportJettyAsync(
     177              :     const CtxHandle ctxHandle, const HccpUbJettyImportedInParam& in, std::vector<char>& out, void*& remQpHandle,
     178              :     RequestHandle& reqHandle);
     179              : 
     180              : HcclResult HccpRaTlvCcuCustomChannel(int32_t devLogicId, void* customIn, void* customOut);
     181              : 
     182              : HcclResult HccpRaTlvRequestForCustomChannel(void* tlvHandle, unsigned int msgType, void* customIn, void* customOut);
     183              : 
     184              : HcclResult HccpRaGetDevBaseAttr(void* ctxHandle, struct DevBaseAttr* attr);
     185              : 
     186              : /**
     187              :  * @brief 查询已初始化HCCP Context对应URMA Device是否支持CTP
     188              :  */
     189              : HcclResult HccpGetCtpEnable(void* ctxHandle, bool& ctpEnable);
     190              : 
     191              : constexpr u32 GET_UBOE_FLAG_ENABLE_OPCODE = 57;
     192              : constexpr u32 GET_UBOE_FLAG_ENABLE_VERSION = 2;
     193              : constexpr u32 UBOE_DEV_FLAG_RIGHT_SHIFT = 19;
     194              : 
     195              : HcclResult HccpGetUboeFlagEnable(const u32 devPhyId);
     196              : 
     197              : /**
     198              :  * @brief 使用已初始化的HCCP Context将Device上的UBoE EID查询为IPv4地址
     199              :  */
     200              : HcclResult HccpGetIpByEid(void* ctxHandle, const CommAddr& eidAddr, CommAddr& ipAddr);
     201              : 
     202            7 : inline bool HccpCheckUboeSupported(const u32 devFeature)
     203              : {
     204              :     // 设备特性位掩码, 右移取UBOE标志位, 值为1表示支持
     205            7 :     return (devFeature >> UBOE_DEV_FLAG_RIGHT_SHIFT) & 1;
     206              : }
     207              : } // namespace hcomm
     208              : #endif // HCOMM_ADAPTER_HCCP_H
        

Generated by: LCOV version 2.0-1