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;
220 fd_ringbuffer_reloc(struct fd_ringbuffer *ring, const struct fd_reloc *reloc)
222 ring->funcs->emit_reloc(ring, reloc);
226 fd_ringbuffer_cmd_count(struct fd_ringbuffer *ring)
228 if (!ring->funcs->cmd_count)
230 return ring->funcs->cmd_count(ring);
234 fd_ringbuffer_emit_reloc_ring_full(struct fd_ringbuffer *ring,
238 return ring->funcs->emit_reloc_ring(ring, target, cmd_idx);
248 fd_ringbuffer_size(struct fd_ringbuffer *ring)
254 assert(!(ring->flags & FD_RINGBUFFER_GROWABLE));
255 return offset_bytes(ring->cur, ring->start);
259 fd_ringbuffer_empty(struct fd_ringbuffer *ring)
261 return (fd_ringbuffer_cmd_count(ring) == 1) &&
262 (offset_bytes(ring->cur, ring->start) == 0);
268 OUT_RING(struct fd_ringbuffer *ring, uint32_t data)
271 fprintf(stderr, "ring[%p]: OUT_RING %04x: %08x", ring,
272 (uint32_t)(ring->cur - ring->start), data);
274 fd_ringbuffer_emit(ring, data);
281 OUT_RELOC(struct fd_ringbuffer *ring, struct fd_bo *bo, uint32_t offset,
285 fprintf(stderr, "ring[%p]: OUT_RELOC %04x: %p+%u << %d", ring,
286 (uint32_t)(ring->cur - ring->start), bo, offset, shift);
307 fd_ringbuffer_reloc(ring, &reloc);
311 OUT_RB(struct fd_ringbuffer *ring, struct fd_ringbuffer *target)
313 fd_ringbuffer_emit_reloc_ring_full(ring, target, 0);
317 BEGIN_RING(struct fd_ringbuffer *ring, uint32_t ndwords)
319 if (unlikely(ring->cur + ndwords > ring->end))
320 fd_ringbuffer_grow(ring, ndwords);
324 OUT_PKT0(struct fd_ringbuffer *ring, uint16_t regindx, uint16_t cnt)
326 BEGIN_RING(ring, cnt + 1);
327 OUT_RING(ring, pm4_pkt0_hdr(regindx, cnt));
331 OUT_PKT2(struct fd_ringbuffer *ring)
333 BEGIN_RING(ring, 1);
334 OUT_RING(ring, CP_TYPE2_PKT);
338 OUT_PKT3(struct fd_ringbuffer *ring, uint8_t opcode, uint16_t cnt)
340 BEGIN_RING(ring, cnt + 1);
341 OUT_RING(ring, CP_TYPE3_PKT | ((cnt - 1) << 16) | ((opcode & 0xFF) << 8));
349 OUT_PKT4(struct fd_ringbuffer *ring, uint16_t regindx, uint16_t cnt)
351 BEGIN_RING(ring, cnt + 1);
352 OUT_RING(ring, pm4_pkt4_hdr(regindx, cnt));
356 OUT_PKT7(struct fd_ringbuffer *ring, uint8_t opcode, uint16_t cnt)
358 BEGIN_RING(ring, cnt + 1);
359 OUT_RING(ring, pm4_pkt7_hdr(opcode, cnt));
363 OUT_WFI(struct fd_ringbuffer *ring)
365 OUT_PKT3(ring, CP_WAIT_FOR_IDLE, 1);
366 OUT_RING(ring, 0x00000000);
370 OUT_WFI5(struct fd_ringbuffer *ring)
372 OUT_PKT7(ring, CP_WAIT_FOR_IDLE, 0);