6#include <xaiefal/common/xaiefal-common.hpp>
7#include <xaiefal/common/xaiefal-log.hpp>
8#include <xaiefal/rsc/xaiefal-rscmgr-backend-base.hpp>
11#include <xaiengine/xlnx-ai-engine.h>
20 XAieRscMgrLinux() =
delete;
21 XAieRscMgrLinux(XAieDevHandle *DevHd):
22 XAieRscMgrBackend(DevHd) {
23 if (DevHd->dev()->Backend->Type != XAIE_IO_BACKEND_LINUX)
24 throw std::invalid_argument(
"aie rscmgr: Driver not compiled with Linux Backend");
25 PartitionFd = DevHd->dev()->Backend->Ops.GetPartFd((
void *)DevHd->dev()->IOInst);
36 AieRC request(XAieUserRsc& RscReq) {
37 struct aie_rsc_req_rsp Req;
38 struct aie_rsc RscRet;
43 Req.req.loc.col = RscReq.Loc.Col;
44 Req.req.loc.row = RscReq.Loc.Row;
45 Req.req.mod =
static_cast<uint32_t
>(RscReq.Mod);
46 Req.req.type =
static_cast<uint32_t
>(RscReq.RscType);
47 Req.rscs = (__u64)(uintptr_t)&RscRet;
49 Ret = ioctl(PartitionFd, AIE_RSC_REQ_IOCTL, &Req);
53 RscReq.RscId = RscRet.id;
65 AieRC requestAllocated(XAieUserRsc& RscReq) {
68 struct aie_rsc Rsc = {
70 .row =
static_cast<uint8_t
>(RscReq.Loc.Row),
71 .col =
static_cast<uint8_t
>(RscReq.Loc.Col),
73 .mod =
static_cast<uint32_t
>(RscReq.Mod),
74 .type =
static_cast<uint32_t
>(RscReq.RscType),
77 Ret = ioctl(PartitionFd, AIE_RSC_REQ_SPECIFIC_IOCTL, &Rsc);
92 AieRC requestContiguous(std::vector<XAieUserRsc>& RscReq) {
93 struct aie_rsc_req_rsp Req;
94 struct aie_rsc RscRet[RscReq.size()];
97 Req.req.num_rscs =
static_cast<uint32_t
>(RscReq.size());
98 Req.req.loc.col = RscReq[0].Loc.Col;
99 Req.req.loc.row = RscReq[0].Loc.Row;
100 Req.req.mod =
static_cast<uint32_t
>(RscReq[0].Mod);
101 Req.req.type =
static_cast<uint32_t
>(RscReq[0].RscType);
102 Req.req.flag = XAIE_RSC_MGR_CONTIG_FLAG;
103 Req.rscs = (__u64)(uintptr_t)&RscRet;
105 Ret = ioctl(PartitionFd, AIE_RSC_REQ_IOCTL, &Req);
109 for (
unsigned int i = 0; i < RscReq.size(); i++)
110 RscReq[i].RscId = RscRet[i].
id;
123 AieRC requestBc(std::vector<XAieUserRsc>& RscReq,
bool isBcAll) {
124 struct aie_rsc RscRet[RscReq.size()];
125 struct aie_rsc_bc_req Req;
128 Req.num_rscs =
static_cast<uint32_t
>(RscReq.size());
130 Req.id = RscReq[0].RscId;
133 Req.flag = XAIE_BROADCAST_ALL;
135 for (
unsigned int i = 0; i < RscReq.size(); i++) {
136 RscRet[i].loc.col =
static_cast<uint8_t
>(RscReq[i].Loc.Col);
137 RscRet[i].loc.row =
static_cast<uint8_t
>(RscReq[i].Loc.Row);
138 RscRet[i].mod =
static_cast<uint32_t
>(RscReq[i].Mod);
141 Req.rscs = (__u64)(uintptr_t)&RscRet;
144 Req.id = XAIE_BROADCAST_ID_ANY;
147 Ret = ioctl(PartitionFd, AIE_RSC_GET_COMMON_BROADCAST_IOCTL, &Req);
151 RscReq.resize(Req.num_rscs);
152 for (
unsigned int i = 0; i < RscReq.size(); i++) {
153 RscReq[i].Loc.Col = RscRet[i].loc.col;
154 RscReq[i].Loc.Row = RscRet[i].loc.row;
155 RscReq[i].Mod =
static_cast<XAie_ModuleType
>(RscRet[i].mod);
156 RscReq[i].RscId = RscRet[i].id;
170 AieRC release(XAieUserRsc& RscRel) {
171 struct aie_rsc Rsc = {
173 .row =
static_cast<uint8_t
>(RscRel.Loc.Row),
174 .col =
static_cast<uint8_t
>(RscRel.Loc.Col),
176 .mod =
static_cast<uint32_t
>(RscRel.Mod),
177 .type =
static_cast<uint32_t
>(RscRel.RscType),
181 ioctl(PartitionFd, AIE_RSC_RELEASE_IOCTL, &Rsc);
193 AieRC free(XAieUserRsc& RscFree) {
194 struct aie_rsc Rsc = {
196 .row =
static_cast<uint8_t
>(RscFree.Loc.Row),
197 .col =
static_cast<uint8_t
>(RscFree.Loc.Col),
199 .mod =
static_cast<uint32_t
>(RscFree.Mod),
200 .type =
static_cast<uint32_t
>(RscFree.RscType),
204 ioctl(PartitionFd, AIE_RSC_FREE_IOCTL, &Rsc);
214 AieRC getRscStats(std::vector<XAieUserRscStat> &vStats,
215 XAieRscBitmapType BType) {
216 struct aie_rsc_user_stat RStats[vStats.size()];
217 struct aie_rsc_user_stat_array RStatArray;
220 RStatArray.num_stats = vStats.size();
221 RStatArray.stats = (__u64)(uintptr_t)&RStats;
222 if (BType == XAIE_STATIC_RSC)
223 RStatArray.stats_type = AIE_RSC_STAT_TYPE_STATIC;
224 else if (BType == XAIE_AVAIL_RSC)
225 RStatArray.stats_type = AIE_RSC_STAT_TYPE_AVAIL;
227 for (uint32_t i = 0; i < vStats.size(); i++) {
228 RStats[i].loc.col = vStats[i].Loc.Col;
229 RStats[i].loc.row = vStats[i].Loc.Row;
230 RStats[i].mod =
static_cast<uint8_t
>(vStats[i].Mod);
231 RStats[i].type =
static_cast<uint8_t
>(vStats[i].RscType);
234 Ret = ioctl(PartitionFd, AIE_RSC_GET_STAT_IOCTL, &RStatArray);
238 for (uint32_t i = 0; i < vStats.size(); i++)
239 vStats[i].NumRscs = RStats[i].num_rscs;
Resource Manager Backend Base class.
Definition xaiefal-rscmgr-backend-base.hpp:23
Definition xaiefal-base.hpp:23
@ XAIE_BROADCAST
Definition xaiefal-rsc-group.hpp:33
#define XAIE_RSC_ID_ANY
Definition xaiefal-common.hpp:7