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 : #include "hccp_dl.h"
12 : #include "net_adapt_u_api.h"
13 : #include "dl_net_function.h"
14 :
15 : void *gNetApiHandle = NULL;
16 : #ifndef CA_CONFIG_LLT
17 : struct RsNetOps gNetOps;
18 : #else
19 : struct RsNetOps gNetOps = {
20 : .rsNetAdaptInit = net_adapt_init,
21 : .rsNetAdaptUninit = net_adapt_uninit,
22 : .rsNetAllocJfcId = net_alloc_jfc_id,
23 : .rsNetFreeJfcId = net_free_jfc_id,
24 : .rsNetAllocJettyId = net_alloc_jetty_id,
25 : .rsNetFreeJettyId = net_free_jetty_id,
26 : .rsNetGetCqeBaseAddr = net_get_cqe_base_addr,
27 : .rsNetGetApiVersion = net_get_api_version,
28 : };
29 : #endif
30 :
31 1 : int RsNetAdaptApiInit(void)
32 : {
33 : #ifndef CA_CONFIG_LLT
34 : gNetOps.rsNetAdaptInit = (int (*)(void))HccpDlsym(gNetApiHandle, "net_adapt_init");
35 : DL_API_RET_IS_NULL_CHECK(gNetOps.rsNetAdaptInit, "net_adapt_init");
36 :
37 : gNetOps.rsNetAdaptUninit = (void (*)(void))HccpDlsym(gNetApiHandle, "net_adapt_uninit");
38 : DL_API_RET_IS_NULL_CHECK(gNetOps.rsNetAdaptUninit, "net_adapt_uninit");
39 :
40 : gNetOps.rsNetAllocJfcId = (int (*)(const char *udevName, unsigned int jfcMode,
41 : unsigned int *jfcId))HccpDlsym(gNetApiHandle, "net_alloc_jfc_id");
42 : DL_API_RET_IS_NULL_CHECK(gNetOps.rsNetAllocJfcId, "net_alloc_jfc_id");
43 :
44 : gNetOps.rsNetFreeJfcId = (int (*)(const char *udevName, unsigned int jfcMode,
45 : unsigned int jfcId))HccpDlsym(gNetApiHandle, "net_free_jfc_id");
46 : DL_API_RET_IS_NULL_CHECK(gNetOps.rsNetFreeJfcId, "net_free_jfc_id");
47 :
48 : gNetOps.rsNetAllocJettyId = (int (*)(const char *udevName, unsigned int jettyMode,
49 : unsigned int *jettyId))HccpDlsym(gNetApiHandle, "net_alloc_jetty_id");
50 : DL_API_RET_IS_NULL_CHECK(gNetOps.rsNetAllocJettyId, "net_alloc_jetty_id");
51 :
52 : gNetOps.rsNetFreeJettyId = (int (*)(const char *udevName, unsigned int jettyMode,
53 : unsigned int jettyId))HccpDlsym(gNetApiHandle, "net_free_jetty_id");
54 : DL_API_RET_IS_NULL_CHECK(gNetOps.rsNetFreeJettyId, "net_free_jetty_id");
55 :
56 : gNetOps.rsNetGetCqeBaseAddr = (unsigned long long (*)(unsigned int dieId))HccpDlsym(gNetApiHandle,
57 : "net_get_cqe_base_addr");
58 : DL_API_RET_IS_NULL_CHECK(gNetOps.rsNetGetCqeBaseAddr, "net_get_cqe_base_addr");
59 :
60 : gNetOps.rsNetGetApiVersion = (unsigned int (*)(void))HccpDlsym(gNetApiHandle, "net_get_api_version");
61 : #endif
62 1 : return 0;
63 : }
64 :
65 2 : int RsOpenNetSo(void)
66 : {
67 : #ifndef CA_CONFIG_LLT
68 : if (gNetApiHandle == NULL) {
69 : gNetApiHandle = HccpDlopen("libnet_adapt.so", RTLD_NOW);
70 : return ((gNetApiHandle != NULL) ? 0 : -EINVAL);
71 : }
72 : hccp_run_info("net_adapt_api HccpDlopen again!");
73 : #endif
74 2 : return 0;
75 : }
76 :
77 2 : void RsCloseNetSo(void)
78 : {
79 : #ifndef CA_CONFIG_LLT
80 : if (gNetApiHandle != NULL) {
81 : (void)HccpDlclose(gNetApiHandle);
82 : gNetApiHandle = NULL;
83 : }
84 : #endif
85 2 : return;
86 : }
87 :
88 2 : int RsNetApiInit(void)
89 : {
90 : int ret;
91 :
92 2 : ret = RsOpenNetSo();
93 2 : CHK_PRT_RETURN(ret != 0,
94 : hccp_err("rs_open_net_so[libnet_adapt.so] failed! ret=[%d],"
95 : "please check network adapter driver has been installed",
96 : ret),
97 : ret);
98 :
99 2 : ret = RsNetAdaptApiInit();
100 2 : if (ret != 0) {
101 1 : hccp_err("rs_net_adapt_api_init failed! ret=[%d]", ret);
102 1 : RsCloseNetSo();
103 1 : return ret;
104 : }
105 1 : return 0;
106 : }
107 :
108 1 : void RsNetApiDeinit(void)
109 : {
110 1 : RsCloseNetSo();
111 1 : return;
112 : }
113 :
114 0 : int RsNetAdaptInit(void)
115 : {
116 0 : if (gNetApiHandle == NULL || gNetOps.rsNetAdaptInit == NULL) {
117 : #ifndef CA_CONFIG_LLT
118 : hccp_err("g_net_api_handle is NULL or rs_net_adapt_init is NULL");
119 : return -EINVAL;
120 : #endif
121 : }
122 0 : return gNetOps.rsNetAdaptInit();
123 : }
124 :
125 0 : void RsNetAdaptUninit(void)
126 : {
127 0 : if (gNetApiHandle == NULL || gNetOps.rsNetAdaptUninit == NULL) {
128 : #ifndef CA_CONFIG_LLT
129 : hccp_err("g_net_api_handle is NULL or rs_net_adapt_uninit is NULL");
130 : return;
131 : #endif
132 : }
133 0 : gNetOps.rsNetAdaptUninit();
134 0 : }
135 :
136 1 : int RsNetAllocJfcId(const char *udevName, unsigned int jfcMode, unsigned int *jfcId)
137 : {
138 1 : if (gNetApiHandle == NULL || gNetOps.rsNetAllocJfcId == NULL) {
139 : #ifndef CA_CONFIG_LLT
140 : hccp_err("g_net_api_handle is NULL or rs_net_alloc_jfc_id is NULL");
141 : return -EINVAL;
142 : #endif
143 : }
144 1 : return gNetOps.rsNetAllocJfcId(udevName, jfcMode, jfcId);
145 : }
146 :
147 1 : int RsNetFreeJfcId(const char *udevName, unsigned int jfcMode, unsigned int jfcId)
148 : {
149 1 : if (gNetApiHandle == NULL || gNetOps.rsNetFreeJfcId == NULL) {
150 : #ifndef CA_CONFIG_LLT
151 : hccp_err("g_net_api_handle is NULL or rs_net_free_jfc_id is NULL");
152 : return -EINVAL;
153 : #endif
154 : }
155 1 : return gNetOps.rsNetFreeJfcId(udevName, jfcMode, jfcId);
156 : }
157 :
158 1 : int RsNetAllocJettyId(const char *udevName, unsigned int jettyMode, unsigned int *jettyId)
159 : {
160 1 : if (gNetApiHandle == NULL || gNetOps.rsNetAllocJettyId == NULL) {
161 : #ifndef CA_CONFIG_LLT
162 : hccp_err("g_net_api_handle is NULL or rs_net_alloc_jetty_id is NULL");
163 : return -EINVAL;
164 : #endif
165 : }
166 1 : return gNetOps.rsNetAllocJettyId(udevName, jettyMode, jettyId);
167 : }
168 :
169 1 : int RsNetFreeJettyId(const char *udevName, unsigned int jettyMode, unsigned int jettyId)
170 : {
171 1 : if (gNetApiHandle == NULL || gNetOps.rsNetFreeJettyId == NULL) {
172 : #ifndef CA_CONFIG_LLT
173 : hccp_err("g_net_api_handle is NULL or rs_net_free_jetty_id is NULL");
174 : return -EINVAL;
175 : #endif
176 : }
177 1 : return gNetOps.rsNetFreeJettyId(udevName, jettyMode, jettyId);
178 : }
179 :
180 1 : int RsNetGetCqeBaseAddr(unsigned int dieId, unsigned long long *cqeBaseAddr)
181 : {
182 1 : if (gNetApiHandle == NULL || gNetOps.rsNetGetCqeBaseAddr == NULL) {
183 : #ifndef CA_CONFIG_LLT
184 : hccp_err("g_net_api_handle is NULL or rs_net_get_cqe_base_addr is NULL");
185 : return -EINVAL;
186 : #endif
187 : }
188 1 : CHK_PRT_RETURN(cqeBaseAddr == NULL, hccp_err("cqe_base_addr is null, dieId:%u", dieId), -EINVAL);
189 1 : *cqeBaseAddr = gNetOps.rsNetGetCqeBaseAddr(dieId);
190 1 : return 0;
191 : }
192 :
193 5 : unsigned int RsNetGetApiVersion(void)
194 : {
195 5 : if (gNetApiHandle == NULL || gNetOps.rsNetGetApiVersion == NULL) {
196 5 : return 0;
197 : }
198 :
199 0 : return gNetOps.rsNetGetApiVersion();
200 : }
|