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