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(
109 : uint32_t recordId, uint8_t recordType, uint16_t retCode, uint8_t tsId, uint32_t taskId, uint16_t streamId,
110 : uint32_t devId)
111 9 : : record_id(recordId),
112 9 : record_type(recordType),
113 9 : ret_code(retCode),
114 9 : ts_id(tsId),
115 9 : fault_task_id(taskId),
116 9 : fault_stream_id(streamId),
117 9 : dev_id(devId){};
118 : volatile uint32_t record_id;
119 : volatile uint8_t record_type;
120 : volatile uint16_t ret_code;
121 : volatile uint8_t ts_id;
122 : volatile uint32_t fault_task_id;
123 : volatile uint32_t fault_stream_id;
124 : volatile uint32_t dev_id;
125 : };
126 :
127 : struct ActiveStreamInfo {
128 8 : ActiveStreamInfo(uint16_t streamId, uint8_t tsId, uint64_t aicpuStamp, uint32_t deviceId, uint32_t handleId)
129 8 : : stream_id(streamId), ts_id(tsId), aicpu_stamp(aicpuStamp), device_id(deviceId), handle_id(handleId){};
130 : volatile uint16_t stream_id;
131 : volatile uint8_t ts_id;
132 : volatile uint64_t aicpu_stamp;
133 : volatile uint32_t device_id;
134 : volatile uint32_t handle_id;
135 : };
136 :
137 : #pragma pack(push, 1)
138 : struct ErrMsgRspInfo {
139 10 : ErrMsgRspInfo(
140 : uint32_t off, uint32_t errCode, uint32_t streamId, uint32_t taskId, uint32_t modelId, uint32_t tsId)
141 10 : : offset(off), err_code(errCode), stream_id(streamId), task_id(taskId), model_id(modelId), ts_id(tsId){};
142 : uint32_t offset;
143 : uint32_t err_code;
144 : uint32_t stream_id;
145 : uint32_t task_id;
146 : uint32_t model_id;
147 : uint32_t ts_id;
148 : };
149 : #pragma pack(pop)
150 :
151 : AicpuSqeAdapter(const TsAicpuSqe& sqe, const int16_t version);
152 :
153 : AicpuSqeAdapter(const TsAicpuMsgInfo& msgInfo, const int16_t version);
154 :
155 : AicpuSqeAdapter(const int16_t version);
156 :
157 : AicpuSqeAdapter(const AicpuSqeAdapter&) = delete;
158 :
159 : AicpuSqeAdapter(AicpuSqeAdapter&&) = delete;
160 :
161 : AicpuSqeAdapter& operator=(const AicpuSqeAdapter&) = delete;
162 :
163 : AicpuSqeAdapter& operator=(AicpuSqeAdapter&&) = delete;
164 :
165 200 : ~AicpuSqeAdapter() = default;
166 :
167 : uint8_t GetCmdType() const;
168 :
169 : void InitAdapterFuncMap();
170 :
171 : bool IsAdapterInvalidParameter() const;
172 :
173 : void GetAicpuDataDumpInfo(AicpuDataDumpInfo& info);
174 :
175 : int32_t AicpuDumpResponseToTs(const int32_t ret);
176 :
177 : bool IsOpMappingDumpTaskInfoVaild(const AicpuOpMappingDumpTaskInfo& info) const;
178 :
179 : void GetAicpuDumpTaskInfo(AicpuOpMappingDumpTaskInfo& opmappingInfo, AicpuDumpTaskInfo& dumpTaskInfo);
180 :
181 : void GetAicpuDumpFFTSPlusDataInfo(AicpuDumpFFTSPlusDataInfo& info);
182 :
183 : void GetAicpuModelOperateInfo(AicpuModelOperateInfo& info);
184 :
185 : int32_t AicpuModelOperateResponseToTs(const int32_t ret, const uint32_t subEvent);
186 :
187 : void GetAicpuTaskReportInfo(AicpuTaskReportInfo& info);
188 :
189 : int32_t ErrorMsgResponseToTs(ErrMsgRspInfo& rspInfo);
190 :
191 : void AicpuActiveStreamSetMsg(ActiveStreamInfo& info);
192 :
193 : int32_t GetAicpuNotifyResponse();
194 :
195 : int32_t AicpuMsgVersionResponseToTs(const int32_t ret);
196 :
197 : void GetAicpuDataDumpInfoLoad(AicpuDataDumpInfoLoad& info);
198 :
199 : int32_t AicpuDataDumpLoadResponseToTs(const int32_t ret);
200 :
201 : int32_t GetTaskActiveForWaitResponse();
202 :
203 : int32_t AicpuNoticeTsPidResponse(const uint32_t deviceId) const;
204 :
205 : int32_t AicpuRecordResponseToTs();
206 :
207 : void GetAicpuTimeOutConfigInfo(AicpuTimeOutConfigInfo& info);
208 :
209 : int32_t AicpuTimeOutConfigResponseToTs(const int32_t ret);
210 :
211 : void GetAicpuInfoLoad(AicpuInfoLoad& info);
212 :
213 : int32_t AicpuInfoLoadResponseToTs(const int32_t ret);
214 :
215 : void GetAicErrReportInfo(AicErrReportInfo& info);
216 :
217 : void GetAicpuMsgVersionInfo(AicpuMsgVersionInfo& info);
218 :
219 : int32_t AicpuRecordResponseToTs(AicpuRecordInfo& info);
220 :
221 : private:
222 : void GetAicErrReportInfoV0(AicErrReportInfo& info);
223 :
224 : void GetAicErrReportInfoV1(AicErrReportInfo& info);
225 :
226 : void GetAicpuModelOperateInfoV0(AicpuModelOperateInfo& info);
227 :
228 : void GetAicpuModelOperateInfoV1(AicpuModelOperateInfo& info);
229 :
230 : int32_t AicpuModelOperateResponseToTsV0(const int32_t ret, const uint32_t subEvent);
231 :
232 : int32_t AicpuModelOperateResponseToTsV1(const int32_t ret, const uint32_t subEvent);
233 :
234 : void GetAicpuDataDumpInfoV0(AicpuDataDumpInfo& info);
235 :
236 : void GetAicpuDataDumpInfoV1(AicpuDataDumpInfo& info);
237 :
238 : void GetAicpuDumpTaskInfoV0(AicpuOpMappingDumpTaskInfo& opmappingInfo, AicpuDumpTaskInfo& dumpTaskInfo);
239 :
240 : void GetAicpuDumpTaskInfoV1(AicpuOpMappingDumpTaskInfo& opmappingInfo, AicpuDumpTaskInfo& dumpTaskInfo);
241 :
242 : int32_t AicpuDumpResponseToTsV1(const int32_t ret);
243 :
244 : int32_t AicpuDumpResponseToTsV0(const int32_t ret);
245 :
246 : void GetAicpuDataDumpInfoLoadV0(AicpuDataDumpInfoLoad& info);
247 :
248 : void GetAicpuDataDumpInfoLoadV1(AicpuDataDumpInfoLoad& info);
249 :
250 : int32_t AicpuDataDumpLoadResponseToTsV1(const int32_t ret);
251 :
252 : int32_t AicpuDataDumpLoadResponseToTsV0(const int32_t ret);
253 :
254 : void GetAicpuTaskReportInfoV0(AicpuTaskReportInfo& info);
255 :
256 : void GetAicpuTaskReportInfoV1(AicpuTaskReportInfo& info);
257 :
258 : int32_t ErrorMsgResponseToTsV0(ErrMsgRspInfo& rspInfo);
259 :
260 : int32_t ErrorMsgResponseToTsV1(ErrMsgRspInfo& rspInfo);
261 :
262 : int32_t AicpuTimeOutConfigResponseToTsV0(const int32_t ret);
263 :
264 : int32_t AicpuTimeOutConfigResponseToTsV1(const int32_t ret);
265 :
266 : void GetAicpuInfoLoadV0(AicpuInfoLoad& info);
267 :
268 : void GetAicpuInfoLoadV1(AicpuInfoLoad& info);
269 :
270 : int32_t AicpuInfoLoadResponseToTsV0(const int32_t ret);
271 :
272 : int32_t AicpuInfoLoadResponseToTsV1(const int32_t ret);
273 :
274 : int32_t AicpuRecordResponseToTsV0(AicpuRecordInfo& info);
275 :
276 : int32_t AicpuRecordResponseToTsV1(AicpuRecordInfo& info);
277 :
278 : void AicpuActiveStreamSetMsgV0(ActiveStreamInfo& info);
279 :
280 : void AicpuActiveStreamSetMsgV1(ActiveStreamInfo& info);
281 :
282 : int32_t ResponseToTs(TsAicpuSqe& aicpuSqe, unsigned int handleId, unsigned int devId, unsigned int tsId) const;
283 :
284 : int32_t ResponseToTs(
285 : TsAicpuMsgInfo& aicpuMsgInfo, unsigned int handleId, unsigned int devId, unsigned int tsId) const;
286 :
287 : int32_t ResponseToTs(hwts_response_t& hwtsResp, uint32_t devId, EVENT_ID eventId, uint32_t subeventId) const;
288 :
289 : using getModelOperateInfoFunc = void (AicpuSqeAdapter::*)(AicpuModelOperateInfo&);
290 :
291 : using getRspFunc = int32_t (AicpuSqeAdapter::*)(const int32_t);
292 :
293 : using getModelOperateRspFunc = int32_t (AicpuSqeAdapter::*)(const int32_t, const uint32_t);
294 :
295 : std::map<uint16_t, getModelOperateInfoFunc> getModelOperateInfoFuncMap_;
296 :
297 : std::map<uint16_t, getModelOperateRspFunc> getModelOperateRspFuncMap_;
298 :
299 : using getDataDumpInfoFunc = void (AicpuSqeAdapter::*)(AicpuDataDumpInfo&);
300 :
301 : std::map<uint16_t, getDataDumpInfoFunc> getDataDumpInfoFuncMap_;
302 :
303 : std::map<uint16_t, getRspFunc> getDataDumpRspFuncMap_;
304 :
305 : using getDataDumpLoadInfoFunc = void (AicpuSqeAdapter::*)(AicpuDataDumpInfoLoad&);
306 :
307 : std::map<uint16_t, getDataDumpLoadInfoFunc> getDataDumpLoadInfoFuncMap_;
308 :
309 : std::map<uint16_t, getRspFunc> getDataDumpLoadRspFuncMap_;
310 :
311 : using getTaskReportInfoFunc = void (AicpuSqeAdapter::*)(AicpuTaskReportInfo&);
312 :
313 : using getErrorMsgRspFunc = int32_t (AicpuSqeAdapter::*)(ErrMsgRspInfo&);
314 :
315 : std::map<uint16_t, getTaskReportInfoFunc> getTaskReportInfoFuncMap_;
316 :
317 : std::map<uint16_t, getErrorMsgRspFunc> getErrorMsgRspFuncMap_;
318 :
319 : std::map<uint16_t, getRspFunc> getTimeOutConfigRspFuncMap_;
320 :
321 : using getLoadInfoFunc = void (AicpuSqeAdapter::*)(AicpuInfoLoad&);
322 :
323 : std::map<uint16_t, getLoadInfoFunc> getLoadInfoFuncMap_;
324 :
325 : std::map<uint16_t, getRspFunc> getInfoLoadRspFuncMap_;
326 :
327 : using getDumpTaskInfoFunc = void (AicpuSqeAdapter::*)(AicpuOpMappingDumpTaskInfo&, AicpuDumpTaskInfo&);
328 :
329 : std::map<uint16_t, getDumpTaskInfoFunc> getDumpTaskInfoFuncMap_;
330 :
331 : using getRecordRspFunc = int32_t (AicpuSqeAdapter::*)(AicpuRecordInfo&);
332 :
333 : std::map<uint16_t, getRecordRspFunc> getRecordRspFuncMap_;
334 :
335 : using activeStreamSetMsgFunc = void (AicpuSqeAdapter::*)(ActiveStreamInfo&);
336 :
337 : std::map<uint16_t, activeStreamSetMsgFunc> activeStreamSetMsgFuncMap_;
338 :
339 : using getAicErrReportInfoFunc = void (AicpuSqeAdapter::*)(AicErrReportInfo&);
340 :
341 : std::map<uint16_t, getAicErrReportInfoFunc> getAicErrReportInfoFuncMap_;
342 :
343 : uint32_t pid_ = 0U;
344 :
345 : uint8_t cmd_type_ = 0U;
346 :
347 : uint8_t vf_id_ = 0U;
348 :
349 : uint8_t tid_ = 0U;
350 :
351 : uint8_t ts_id_ = 0U;
352 :
353 : TsAicpuSqe sqe_ = {};
354 :
355 : TsAicpuMsgInfo msg_Info_ = {};
356 :
357 : uint16_t version_ = 0U;
358 :
359 : bool invalid_msg_info_ = false;
360 :
361 : bool invalid_sqe_ = false;
362 : };
363 :
364 : } // namespace AicpuSchedule
365 : #endif
|