Lines Matching refs:chan

41 READ_GET(struct nouveau_channel *chan, uint64_t *prev_get, int *timeout)
45 val = nvif_rd32(chan->userd, chan->user_get);
46 if (chan->user_get_hi)
47 val |= (uint64_t)nvif_rd32(chan->userd, chan->user_get_hi) << 32;
64 if (val < chan->push.addr ||
65 val > chan->push.addr + (chan->dma.max << 2))
68 return (val - chan->push.addr) >> 2;
72 nv50_dma_push(struct nouveau_channel *chan, u64 offset, u32 length,
75 struct nvif_user *user = &chan->drm->client.device.user;
76 struct nouveau_bo *pb = chan->push.buffer;
77 int ip = (chan->dma.ib_put * 2) + chan->dma.ib_base;
79 BUG_ON(chan->dma.ib_free < 1);
86 chan->dma.ib_put = (chan->dma.ib_put + 1) & chan->dma.ib_max;
92 nvif_wr32(chan->userd, 0x8c, chan->dma.ib_put);
94 user->func->doorbell(user, chan->token);
95 chan->dma.ib_free--;
99 nv50_dma_push_wait(struct nouveau_channel *chan, int count)
103 while (chan->dma.ib_free < count) {
104 uint32_t get = nvif_rd32(chan->userd, 0x88);
116 chan->dma.ib_free = get - chan->dma.ib_put;
117 if (chan->dma.ib_free <= 0)
118 chan->dma.ib_free += chan->dma.ib_max;
125 nv50_dma_wait(struct nouveau_channel *chan, int slots, int count)
130 ret = nv50_dma_push_wait(chan, slots + 1);
134 while (chan->dma.free < count) {
135 int get = READ_GET(chan, &prev_get, &cnt);
143 if (get <= chan->dma.cur) {
144 chan->dma.free = chan->dma.max - chan->dma.cur;
145 if (chan->dma.free >= count)
148 FIRE_RING(chan);
150 get = READ_GET(chan, &prev_get, &cnt);
157 chan->dma.cur = 0;
158 chan->dma.put = 0;
161 chan->dma.free = get - chan->dma.cur - 1;
168 nouveau_dma_wait(struct nouveau_channel *chan, int slots, int size)
173 if (chan->dma.ib_max)
174 return nv50_dma_wait(chan, slots, size);
176 while (chan->dma.free < size) {
177 get = READ_GET(chan, &prev_get, &cnt);
193 if (get <= chan->dma.cur) {
207 chan->dma.free = chan->dma.max - chan->dma.cur;
208 if (chan->dma.free >= size)
215 OUT_RING(chan, chan->push.addr | 0x20000000);
223 get = READ_GET(chan, &prev_get, &cnt);
234 chan->dma.cur =
235 chan->dma.put = NOUVEAU_DMA_SKIPS;
244 chan->dma.free = get - chan->dma.cur - 1;