turnip: provide both emit_ib and emit_call
tu_cs_emit_ib emits a CP_INDIRECT_BUFFER for a BO. tu_cs_emit_call emits a CP_INDIRECT_BUFFER for each entry of a target cs.
This commit is contained in:
parent
741a4325df
commit
5c63fc626f
|
@ -47,6 +47,16 @@ tu_cs_reserve_space(struct tu_device *dev,
|
|||
void
|
||||
tu_cs_reset(struct tu_device *dev, struct tu_cs *cs);
|
||||
|
||||
/**
|
||||
* Get the size needed for tu_cs_emit_call.
|
||||
*/
|
||||
static inline uint32_t
|
||||
tu_cs_get_call_size(const struct tu_cs *cs)
|
||||
{
|
||||
/* each CP_INDIRECT_BUFFER needs 4 dwords */
|
||||
return cs->entry_count * 4;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assert that we did not exceed the reserved space.
|
||||
*/
|
||||
|
@ -124,16 +134,29 @@ tu_cs_emit_write_reg(struct tu_cs *cs, uint16_t reg, uint32_t value)
|
|||
tu_cs_emit(cs, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Emit a CP_INDIRECT_BUFFER command packet.
|
||||
*/
|
||||
static inline void
|
||||
tu_cs_emit_ib(struct tu_cs *cs, const struct tu_cs *target)
|
||||
tu_cs_emit_ib(struct tu_cs *cs, const struct tu_cs_entry *entry)
|
||||
{
|
||||
for (uint32_t i = 0; i < target->entry_count; i++) {
|
||||
const struct tu_cs_entry *entry = target->entries + i;
|
||||
assert(entry->offset % sizeof(uint32_t) == 0);
|
||||
assert(entry->size % sizeof(uint32_t) == 0);
|
||||
|
||||
tu_cs_emit_pkt7(cs, CP_INDIRECT_BUFFER, 3);
|
||||
tu_cs_emit_qw(cs, entry->bo->iova + entry->offset);
|
||||
tu_cs_emit(cs, entry->size / sizeof(uint32_t));
|
||||
}
|
||||
tu_cs_emit_pkt7(cs, CP_INDIRECT_BUFFER, 3);
|
||||
tu_cs_emit_qw(cs, entry->bo->iova + entry->offset);
|
||||
tu_cs_emit(cs, entry->size / sizeof(uint32_t));
|
||||
}
|
||||
|
||||
/**
|
||||
* Emit a CP_INDIRECT_BUFFER command packet for each entry in the target
|
||||
* command stream.
|
||||
*/
|
||||
static inline void
|
||||
tu_cs_emit_call(struct tu_cs *cs, const struct tu_cs *target)
|
||||
{
|
||||
for (uint32_t i = 0; i < target->entry_count; i++)
|
||||
tu_cs_emit_ib(cs, target->entries + i);
|
||||
}
|
||||
|
||||
#endif /* TU_CS_H */
|
||||
|
|
Loading…
Reference in New Issue