Lines Matching refs:ring
128 void (*grow)(struct fd_ringbuffer *ring, uint32_t size);
129 void (*emit_reloc)(struct fd_ringbuffer *ring, const struct fd_reloc *reloc);
130 uint32_t (*emit_reloc_ring)(struct fd_ringbuffer *ring,
132 uint32_t (*cmd_count)(struct fd_ringbuffer *ring);
133 bool (*check_size)(struct fd_ringbuffer *ring);
134 void (*destroy)(struct fd_ringbuffer *ring);
158 fd_ringbuffer_del(struct fd_ringbuffer *ring)
160 if (!p_atomic_dec_zero(&ring->refcnt))
163 ring->funcs->destroy(ring);
167 fd_ringbuffer_ref(struct fd_ringbuffer *ring)
169 p_atomic_inc(&ring->refcnt);
170 return ring;
174 fd_ringbuffer_grow(struct fd_ringbuffer *ring, uint32_t ndwords)
176 assert(ring->funcs->grow); /* unsupported on kgsl */
179 ring->size = MIN2(ring->size << 1, 0x0fffff);
181 ring->funcs->grow(ring, ring->size);
185 fd_ringbuffer_check_size(struct fd_ringbuffer *ring)
187 return ring->funcs->check_size(ring);
191 fd_ringbuffer_emit(struct fd_ringbuffer *ring, uint32_t data)
193 (*ring->cur++) = data;
221 fd_ringbuffer_reloc(struct fd_ringbuffer *ring, const struct fd_reloc *reloc)
223 ring->funcs->emit_reloc(ring, reloc);
227 fd_ringbuffer_cmd_count(struct fd_ringbuffer *ring)
229 if (!ring->funcs->cmd_count)
231 return ring->funcs->cmd_count(ring);
235 fd_ringbuffer_emit_reloc_ring_full(struct fd_ringbuffer *ring,
239 return ring->funcs->emit_reloc_ring(ring, target, cmd_idx);
249 fd_ringbuffer_size(struct fd_ringbuffer *ring)
255 debug_assert(!(ring->flags & FD_RINGBUFFER_GROWABLE));
256 return offset_bytes(ring->cur, ring->start);
260 fd_ringbuffer_empty(struct fd_ringbuffer *ring)
262 return (fd_ringbuffer_cmd_count(ring) == 1) &&
263 (offset_bytes(ring->cur, ring->start) == 0);
269 OUT_RING(struct fd_ringbuffer *ring, uint32_t data)
272 fprintf(stderr, "ring[%p]: OUT_RING %04x: %08x", ring,
273 (uint32_t)(ring->cur - ring->start), data);
275 fd_ringbuffer_emit(ring, data);
283 OUT_RELOC(struct fd_ringbuffer *ring, struct fd_bo *bo, uint32_t offset,
287 fprintf(stderr, "ring[%p]: OUT_RELOC %04x: %p+%u << %d", ring,
288 (uint32_t)(ring->cur - ring->start), bo, offset, shift);
301 fd_ringbuffer_reloc(ring, &(struct fd_reloc){
314 OUT_RB(struct fd_ringbuffer *ring, struct fd_ringbuffer *target)
316 fd_ringbuffer_emit_reloc_ring_full(ring, target, 0);
320 BEGIN_RING(struct fd_ringbuffer *ring, uint32_t ndwords)
322 if (unlikely(ring->cur + ndwords > ring->end))
323 fd_ringbuffer_grow(ring, ndwords);
327 OUT_PKT0(struct fd_ringbuffer *ring, uint16_t regindx, uint16_t cnt)
329 BEGIN_RING(ring, cnt + 1);
330 OUT_RING(ring, pm4_pkt0_hdr(regindx, cnt));
334 OUT_PKT2(struct fd_ringbuffer *ring)
336 BEGIN_RING(ring, 1);
337 OUT_RING(ring, CP_TYPE2_PKT);
341 OUT_PKT3(struct fd_ringbuffer *ring, uint8_t opcode, uint16_t cnt)
343 BEGIN_RING(ring, cnt + 1);
344 OUT_RING(ring, CP_TYPE3_PKT | ((cnt - 1) << 16) | ((opcode & 0xFF) << 8));
352 OUT_PKT4(struct fd_ringbuffer *ring, uint16_t regindx, uint16_t cnt)
354 BEGIN_RING(ring, cnt + 1);
355 OUT_RING(ring, pm4_pkt4_hdr(regindx, cnt));
359 OUT_PKT7(struct fd_ringbuffer *ring, uint8_t opcode, uint16_t cnt)
361 BEGIN_RING(ring, cnt + 1);
362 OUT_RING(ring, pm4_pkt7_hdr(opcode, cnt));
366 OUT_WFI(struct fd_ringbuffer *ring)
368 OUT_PKT3(ring, CP_WAIT_FOR_IDLE, 1);
369 OUT_RING(ring, 0x00000000);
373 OUT_WFI5(struct fd_ringbuffer *ring)
375 OUT_PKT7(ring, CP_WAIT_FOR_IDLE, 0);