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 : #ifndef AICPUSD_SQE_ADAPTER_H
11 : #define AICPUSD_SQE_ADAPTER_H
12 :
13 : #include "aicpusd_common.h"
14 : #include "aicpusd_drv_manager.h"
15 : #include "type_def.h"
16 : #include "ts_api.h"
17 :
18 : namespace AicpuSchedule {
19 : struct ErrLogRptInfo;
20 : class AicpuSqeAdapter {
21 : public:
22 : static constexpr uint16_t INVALID_VALUE16 = 0xFFFF;
23 : static constexpr uint32_t INVALID_VALUE32 = 0xFFFFFFFF;
24 : static constexpr uint8_t STARS_DATADUMP_LOAD_INFO = 8;
25 : static constexpr uint8_t VERSION_0 = 0;
26 : static constexpr uint8_t VERSION_1 = 1;
27 : static constexpr uint8_t MSG_EVENT_SUB_EVENTID_RECORD = 1;
28 :
29 : struct AicpuTaskReportInfo {
30 : volatile uint16_t model_id;
31 : volatile uint16_t result_code;
32 : volatile uint16_t stream_id;
33 : volatile uint32_t task_id;
34 : };
35 :
36 : struct AicpuModelOperateInfo {
37 : volatile uint64_t arg_ptr;
38 : volatile uint16_t stream_id;
39 : volatile uint16_t task_id;
40 : volatile uint16_t model_id;
41 : volatile uint8_t cmd_type;
42 : volatile uint8_t reserved[3];
43 : };
44 :
45 : struct AicpuDataDumpInfo {
46 : volatile bool is_debug;
47 : volatile uint32_t dump_task_id;
48 : volatile uint16_t dump_stream_id;
49 : volatile uint32_t debug_dump_task_id;
50 : volatile uint16_t debug_dump_stream_id;
51 : volatile bool is_model;
52 : volatile uint32_t file_name_task_id;
53 : volatile uint16_t file_name_stream_id;
54 : };
55 :
56 : struct AicpuDumpFFTSPlusDataInfo {
57 : TsToAicpuFFTSPlusDataDump i;
58 : };
59 :
60 : struct AicpuDataDumpInfoLoad {
61 : volatile uint64_t dumpinfoPtr;
62 : volatile uint32_t length;
63 : volatile uint16_t stream_id;
64 : volatile uint32_t task_id;
65 : };
66 :
67 : struct AicpuTimeOutConfigInfo {
68 : TsToAicpuTimeOutConfig i;
69 : };
70 :
71 : struct AicpuInfoLoad {
72 : volatile uint64_t aicpuInfoPtr;
73 : volatile uint32_t length;
74 : volatile uint16_t stream_id;
75 : volatile uint32_t task_id;
76 : };
77 :
78 : struct AicErrReportInfo {
79 : union {
80 : TsToAicpuAicErrReport aicError;
81 : TsToAicpuAicErrMsgReport aicErrorMsg;
82 : } u;
83 : };
84 :
85 : struct AicpuMsgVersionInfo {
86 : volatile uint16_t magic_num;
87 : volatile uint16_t version;
88 : };
89 :
90 : struct AicpuOpMappingDumpTaskInfo {
91 61 : AicpuOpMappingDumpTaskInfo(uint32_t protoTaskId, uint32_t protoStreamId, uint32_t taskId, uint32_t streamId)
92 61 : : proto_info_task_id(protoTaskId), proto_info_stream_id(protoStreamId), task_id(taskId), stream_id(streamId)
93 61 : {}
94 : volatile uint32_t proto_info_task_id;
95 : volatile uint32_t proto_info_stream_id;
96 : volatile uint32_t task_id;
97 : volatile uint32_t stream_id;
98 : };
99 :
100 : struct AicpuDumpTaskInfo {
101 : volatile uint32_t task_id;
102 : volatile uint32_t stream_id;
103 : volatile uint32_t context_id;
104 : volatile uint32_t thread_id;
105 : };
106 :
107 : struct AicpuRecordInfo {
108 9 : AicpuRecordInfo(uint32_t recordId, uint8_t recordType, uint16_t retCode, uint8_t tsId, uint32_t taskId,
109 : uint16_t streamId, uint32_t devId)
110 9 : : record_id(recordId), record_type(recordType), ret_code(retCode), ts_id(tsId), fault_task_id(taskId),
111 9 : fault_stream_id(streamId), dev_id(devId){};
112 : volatile uint32_t record_id;
113 : volatile uint8_t record_type;
114 : volatile uint16_t ret_code;
115 : volatile uint8_t ts_id;
116 : volatile uint32_t fault_task_id;
117 : volatile uint32_t fault_stream_id;
118 : volatile uint32_t dev_id;
119 : };
120 :
121 : struct ActiveStreamInfo {
122 8 : ActiveStreamInfo(uint16_t streamId, uint8_t tsId, uint64_t aicpuStamp, uint32_t deviceId, uint32_t handleId)
123 8 : : stream_id(streamId), ts_id(tsId), aicpu_stamp(aicpuStamp), device_id(deviceId), handle_id(handleId){};
124 : volatile uint16_t stream_id;
125 : volatile uint8_t ts_id;
126 : volatile uint64_t aicpu_stamp;
127 : volatile uint32_t device_id;
128 : volatile uint32_t handle_id;
129 : };
130 :
131 : #pragma pack(push, 1)
132 : struct ErrMsgRspInfo {
133 10 : ErrMsgRspInfo(
134 : uint32_t off, uint32_t errCode, uint32_t streamId, uint32_t taskId, uint32_t modelId, uint32_t tsId)
135 10 : : offset(off), err_code(errCode), stream_id(streamId), task_id(taskId), model_id(modelId), ts_id(tsId){};
136 : uint32_t offset;
137 : uint32_t err_code;
138 : uint32_t stream_id;
139 : uint32_t task_id;
140 : uint32_t model_id;
141 : uint32_t ts_id;
142 : };
143 : #pragma pack(pop)
144 :
145 : AicpuSqeAdapter(const TsAicpuSqe &sqe, const int16_t version);
146 :
147 : AicpuSqeAdapter(const TsAicpuMsgInfo &msgInfo, const int16_t version);
148 :
149 : AicpuSqeAdapter(const int16_t version);
150 :
151 : AicpuSqeAdapter(const AicpuSqeAdapter &) = delete;
152 :
153 : AicpuSqeAdapter(AicpuSqeAdapter &&) = delete;
154 :
155 : AicpuSqeAdapter &operator=(const AicpuSqeAdapter &) = delete;
156 :
157 : AicpuSqeAdapter &operator=(AicpuSqeAdapter &&) = delete;
158 :
159 200 : ~AicpuSqeAdapter() = default;
160 :
161 : uint8_t GetCmdType() const;
162 :
163 : void InitAdapterFuncMap();
164 :
165 : bool IsAdapterInvalidParameter() const;
166 :
167 : void GetAicpuDataDumpInfo(AicpuDataDumpInfo &info);
168 :
169 : int32_t AicpuDumpResponseToTs(const int32_t ret);
170 :
171 : bool IsOpMappingDumpTaskInfoVaild(const AicpuOpMappingDumpTaskInfo &info) const;
172 :
173 : void GetAicpuDumpTaskInfo(AicpuOpMappingDumpTaskInfo &opmappingInfo, AicpuDumpTaskInfo &dumpTaskInfo);
174 :
175 : void GetAicpuDumpFFTSPlusDataInfo(AicpuDumpFFTSPlusDataInfo &info);
176 :
177 : void GetAicpuModelOperateInfo(AicpuModelOperateInfo &info);
178 :
179 : int32_t AicpuModelOperateResponseToTs(const int32_t ret, const uint32_t subEvent);
180 :
181 : void GetAicpuTaskReportInfo(AicpuTaskReportInfo &info);
182 :
183 : int32_t ErrorMsgResponseToTs(ErrMsgRspInfo &rspInfo);
184 :
185 : void AicpuActiveStreamSetMsg(ActiveStreamInfo &info);
186 :
187 : int32_t GetAicpuNotifyResponse();
188 :
189 : int32_t AicpuMsgVersionResponseToTs(const int32_t ret);
190 :
191 : void GetAicpuDataDumpInfoLoad(AicpuDataDumpInfoLoad &info);
192 :
193 : int32_t AicpuDataDumpLoadResponseToTs(const int32_t ret);
194 :
195 : int32_t GetTaskActiveForWaitResponse();
196 :
197 : int32_t AicpuNoticeTsPidResponse(const uint32_t deviceId) const;
198 :
199 : int32_t AicpuRecordResponseToTs();
200 :
201 : void GetAicpuTimeOutConfigInfo(AicpuTimeOutConfigInfo &info);
202 :
203 : int32_t AicpuTimeOutConfigResponseToTs(const int32_t ret);
204 :
205 : void GetAicpuInfoLoad(AicpuInfoLoad &info);
206 :
207 : int32_t AicpuInfoLoadResponseToTs(const int32_t ret);
208 :
209 : void GetAicErrReportInfo(AicErrReportInfo &info);
210 :
211 : void GetAicpuMsgVersionInfo(AicpuMsgVersionInfo &info);
212 :
213 : int32_t AicpuRecordResponseToTs(AicpuRecordInfo &info);
214 :
215 : private:
216 : void GetAicErrReportInfoV0(AicErrReportInfo &info);
217 :
218 : void GetAicErrReportInfoV1(AicErrReportInfo &info);
219 :
220 : void GetAicpuModelOperateInfoV0(AicpuModelOperateInfo &info);
221 :
222 : void GetAicpuModelOperateInfoV1(AicpuModelOperateInfo &info);
223 :
224 : int32_t AicpuModelOperateResponseToTsV0(const int32_t ret, const uint32_t subEvent);
225 :
226 : int32_t AicpuModelOperateResponseToTsV1(const int32_t ret, const uint32_t subEvent);
227 :
228 : void GetAicpuDataDumpInfoV0(AicpuDataDumpInfo &info);
229 :
230 : void GetAicpuDataDumpInfoV1(AicpuDataDumpInfo &info);
231 :
232 : void GetAicpuDumpTaskInfoV0(AicpuOpMappingDumpTaskInfo &opmappingInfo, AicpuDumpTaskInfo &dumpTaskInfo);
233 :
234 : void GetAicpuDumpTaskInfoV1(AicpuOpMappingDumpTaskInfo &opmappingInfo, AicpuDumpTaskInfo &dumpTaskInfo);
235 :
236 : int32_t AicpuDumpResponseToTsV1(const int32_t ret);
237 :
238 : int32_t AicpuDumpResponseToTsV0(const int32_t ret);
239 :
240 : void GetAicpuDataDumpInfoLoadV0(AicpuDataDumpInfoLoad &info);
241 :
242 : void GetAicpuDataDumpInfoLoadV1(AicpuDataDumpInfoLoad &info);
243 :
244 : int32_t AicpuDataDumpLoadResponseToTsV1(const int32_t ret);
245 :
246 : int32_t AicpuDataDumpLoadResponseToTsV0(const int32_t ret);
247 :
248 : void GetAicpuTaskReportInfoV0(AicpuTaskReportInfo &info);
249 :
250 : void GetAicpuTaskReportInfoV1(AicpuTaskReportInfo &info);
251 :
252 : int32_t ErrorMsgResponseToTsV0(ErrMsgRspInfo &rspInfo);
253 :
254 : int32_t ErrorMsgResponseToTsV1(ErrMsgRspInfo &rspInfo);
255 :
256 : int32_t AicpuTimeOutConfigResponseToTsV0(const int32_t ret);
257 :
258 : int32_t AicpuTimeOutConfigResponseToTsV1(const int32_t ret);
259 :
260 : void GetAicpuInfoLoadV0(AicpuInfoLoad &info);
261 :
262 : void GetAicpuInfoLoadV1(AicpuInfoLoad &info);
263 :
264 : int32_t AicpuInfoLoadResponseToTsV0(const int32_t ret);
265 :
266 : int32_t AicpuInfoLoadResponseToTsV1(const int32_t ret);
267 :
268 : int32_t AicpuRecordResponseToTsV0(AicpuRecordInfo &info);
269 :
270 : int32_t AicpuRecordResponseToTsV1(AicpuRecordInfo &info);
271 :
272 : void AicpuActiveStreamSetMsgV0(ActiveStreamInfo &info);
273 :
274 : void AicpuActiveStreamSetMsgV1(ActiveStreamInfo &info);
275 :
276 : int32_t ResponseToTs(TsAicpuSqe &aicpuSqe, unsigned int handleId, unsigned int devId, unsigned int tsId) const;
277 :
278 : int32_t ResponseToTs(
279 : TsAicpuMsgInfo &aicpuMsgInfo, unsigned int handleId, unsigned int devId, unsigned int tsId) const;
280 :
281 : int32_t ResponseToTs(hwts_response_t &hwtsResp, uint32_t devId, EVENT_ID eventId, uint32_t subeventId) const;
282 :
283 : using getModelOperateInfoFunc = void (AicpuSqeAdapter::*)(AicpuModelOperateInfo &);
284 :
285 : using getRspFunc = int32_t (AicpuSqeAdapter::*)(const int32_t);
286 :
287 : using getModelOperateRspFunc = int32_t (AicpuSqeAdapter::*)(const int32_t, const uint32_t);
288 :
289 : std::map<uint16_t, getModelOperateInfoFunc> getModelOperateInfoFuncMap_;
290 :
291 : std::map<uint16_t, getModelOperateRspFunc> getModelOperateRspFuncMap_;
292 :
293 : using getDataDumpInfoFunc = void (AicpuSqeAdapter::*)(AicpuDataDumpInfo &);
294 :
295 : std::map<uint16_t, getDataDumpInfoFunc> getDataDumpInfoFuncMap_;
296 :
297 : std::map<uint16_t, getRspFunc> getDataDumpRspFuncMap_;
298 :
299 : using getDataDumpLoadInfoFunc = void (AicpuSqeAdapter::*)(AicpuDataDumpInfoLoad &);
300 :
301 : std::map<uint16_t, getDataDumpLoadInfoFunc> getDataDumpLoadInfoFuncMap_;
302 :
303 : std::map<uint16_t, getRspFunc> getDataDumpLoadRspFuncMap_;
304 :
305 : using getTaskReportInfoFunc = void (AicpuSqeAdapter::*)(AicpuTaskReportInfo &);
306 :
307 : using getErrorMsgRspFunc = int32_t (AicpuSqeAdapter::*)(ErrMsgRspInfo &);
308 :
309 : std::map<uint16_t, getTaskReportInfoFunc> getTaskReportInfoFuncMap_;
310 :
311 : std::map<uint16_t, getErrorMsgRspFunc> getErrorMsgRspFuncMap_;
312 :
313 : std::map<uint16_t, getRspFunc> getTimeOutConfigRspFuncMap_;
314 :
315 : using getLoadInfoFunc = void (AicpuSqeAdapter::*)(AicpuInfoLoad &);
316 :
317 : std::map<uint16_t, getLoadInfoFunc> getLoadInfoFuncMap_;
318 :
319 : std::map<uint16_t, getRspFunc> getInfoLoadRspFuncMap_;
320 :
321 : using getDumpTaskInfoFunc = void (AicpuSqeAdapter::*)(AicpuOpMappingDumpTaskInfo &, AicpuDumpTaskInfo &);
322 :
323 : std::map<uint16_t, getDumpTaskInfoFunc> getDumpTaskInfoFuncMap_;
324 :
325 : using getRecordRspFunc = int32_t (AicpuSqeAdapter::*)(AicpuRecordInfo &);
326 :
327 : std::map<uint16_t, getRecordRspFunc> getRecordRspFuncMap_;
328 :
329 : using activeStreamSetMsgFunc = void (AicpuSqeAdapter::*)(ActiveStreamInfo &);
330 :
331 : std::map<uint16_t, activeStreamSetMsgFunc> activeStreamSetMsgFuncMap_;
332 :
333 : using getAicErrReportInfoFunc = void (AicpuSqeAdapter::*)(AicErrReportInfo &);
334 :
335 : std::map<uint16_t, getAicErrReportInfoFunc> getAicErrReportInfoFuncMap_;
336 :
337 : uint32_t pid_ = 0U;
338 :
339 : uint8_t cmd_type_ = 0U;
340 :
341 : uint8_t vf_id_ = 0U;
342 :
343 : uint8_t tid_ = 0U;
344 :
345 : uint8_t ts_id_ = 0U;
346 :
347 : TsAicpuSqe sqe_ = { };
348 :
349 : TsAicpuMsgInfo msg_Info_ = { };
350 :
351 : uint16_t version_ = 0U;
352 :
353 : bool invalid_msg_info_ = false;
354 :
355 : bool invalid_sqe_ = false;
356 : };
357 :
358 : } // namespace AicpuSchedule
359 : #endif
|