16#ifndef AIE_RUNTIME_TXNENCODING_H
17#define AIE_RUNTIME_TXNENCODING_H
26#define AIE_DISPATCH_EXPORT __declspec(dllexport)
28#define AIE_DISPATCH_EXPORT
103 for (uint32_t i = hi; i > lo; --i)
117 for (
int i = 0; i < p.
head; ++i)
119 for (
int j = i; j < p.
head - 1; ++j)
158 uint8_t num_memtile_rows) {
170 size_t pos = txn.size();
171 txn.resize(pos + 6, 0);
177 txn[pos + 5] = 6 *
sizeof(uint32_t);
182 uint32_t val, uint32_t mask) {
183 size_t pos = txn.size();
184 txn.resize(pos + 7, 0);
191 txn[pos + 6] = 7 *
sizeof(uint32_t);
199 uint32_t val, uint32_t mask) {
200 size_t pos = txn.size();
201 txn.resize(pos + 7, 0);
208 txn[pos + 6] = 7 *
sizeof(uint32_t);
213 uint32_t row, uint32_t dir, uint32_t chan,
214 uint32_t ncol, uint32_t nrow) {
215 size_t pos = txn.size();
216 txn.resize(pos + 4, 0);
218 txn[pos + 1] = 4 *
sizeof(uint32_t);
219 txn[pos + 2] = (dir & 0xff) | ((row & 0xff) << 8) | ((col & 0xff) << 16);
221 ((nrow & 0xff) << 8) | ((ncol & 0xff) << 16) | ((chan & 0xff) << 24);
234 const uint32_t *data,
size_t count,
235 uint32_t col = 0, uint32_t row = 0) {
236 const unsigned headerSize = 4;
237 size_t pos = txn.size();
238 txn.resize(pos + headerSize + count, 0);
240 txn[pos + 1] = (col & 0xff) | ((row & 0xff) << 8);
242 txn[pos + 3] =
static_cast<uint32_t
>((headerSize + count) *
sizeof(uint32_t));
243 for (
size_t i = 0; i < count; ++i)
244 txn[pos + headerSize + i] = data[i];
263 int32_t arg_idx, uint64_t arg_plus) {
264 size_t pos = txn.size();
265 txn.resize(pos + 12, 0);
267 txn[pos + 1] = 12 *
sizeof(uint32_t);
272 txn[pos + 8] =
static_cast<uint32_t
>(arg_idx);
274 txn[pos + 10] =
static_cast<uint32_t
>(arg_plus & 0xFFFFFFFFull);
275 txn[pos + 11] =
static_cast<uint32_t
>(arg_plus >> 32);
282 int32_t arg_idx, uint64_t arg_plus,
283 bool fold_ddr_addr_offset) {
284 if (fold_ddr_addr_offset &&
292 uint32_t size, uint64_t addr) {
293 size_t pos = txn.size();
294 txn.resize(pos + 4, 0);
297 txn[pos + 2] =
static_cast<uint32_t
>(addr);
298 txn[pos + 3] =
static_cast<uint32_t
>(addr >> 32);
320inline void txn_init(std::vector<uint32_t> &txn) { txn.resize(4, 0); }
329 txn[0] = (
static_cast<uint32_t
>(info.numRows) << 24) |
330 (
static_cast<uint32_t
>(info.devGen) << 16) |
331 (
static_cast<uint32_t
>(info.minor) << 8) |
332 static_cast<uint32_t
>(info.major);
333 txn[1] = (
static_cast<uint32_t
>(info.numMemTileRows) << 8) |
334 static_cast<uint32_t
>(info.numCols);
336 txn[3] =
static_cast<uint32_t
>(txn.size() *
sizeof(uint32_t));
void txn_append_maskpoll32(std::vector< uint32_t > &txn, uint32_t addr, uint32_t val, uint32_t mask)
void txn_append_loadpdi(std::vector< uint32_t > &txn, uint32_t id, uint32_t size, uint64_t addr)
void txn_append_write32(std::vector< uint32_t > &txn, uint32_t addr, uint32_t val)
void txn_init(std::vector< uint32_t > &txn)
std::nullopt_t txn_refused(const char *why)
void txn_append_sync(std::vector< uint32_t > &txn, uint32_t col, uint32_t row, uint32_t dir, uint32_t chan, uint32_t ncol, uint32_t nrow)
void txn_append_preempt(std::vector< uint32_t > &txn, uint32_t level)
void bd_pool_push(BdPool &p, uint32_t id)
void txn_append_address_patch(std::vector< uint32_t > &txn, uint32_t addr, int32_t arg_idx, uint64_t arg_plus)
void txn_append_arg_patch(std::vector< uint32_t > &txn, uint32_t addr, int32_t arg_idx, uint64_t arg_plus, bool fold_ddr_addr_offset)
TxnDeviceInfo txn_device_info(uint8_t dev_gen, uint8_t num_rows, uint8_t num_cols, uint8_t num_memtile_rows)
constexpr uint32_t kNumFirmwareTranslatedArgs
@ TXN_OPC_CREATE_SCRATCHPAD
@ TXN_OPC_UPDATE_STATE_TABLE
@ TXN_OPC_CONFIG_SHIMDMA_DMABUF_BD
@ TXN_OPC_LOAD_PM_END_INTERNAL
@ TXN_OPC_CONFIG_SHIMDMA_BD
@ TXN_OPC_CUSTOM_OP_BEGIN
constexpr uint32_t kDDRAIEAddrOffset
void bd_pool_reserve(BdPool &p, uint32_t id)
void txn_append_maskwrite32(std::vector< uint32_t > &txn, uint32_t addr, uint32_t val, uint32_t mask)
bool bd_pool_pop(BdPool &p, uint32_t &out)
void txn_append_blockwrite(std::vector< uint32_t > &txn, uint32_t addr, const uint32_t *data, size_t count, uint32_t col=0, uint32_t row=0)
void txn_prepend_header(std::vector< uint32_t > &txn, uint32_t op_count, TxnDeviceInfo info={})
constexpr uint32_t kMaxBDsPerTile
BdPool bd_pool_init(uint32_t n)
BdPool bd_pool_init_range(uint32_t lo, uint32_t hi)
uint32_t free_ids[kMaxBDsPerTile]