Lines Matching +full:max +full:- +full:cur
1 /* SPDX-License-Identifier: MIT
11 u32 put = push->bgn - (u32 *)chan->push.mem.object.map.ptr; in nvif_chan_gpfifo_push_kick()
14 if (chan->func->gpfifo.post) { in nvif_chan_gpfifo_push_kick()
15 if (push->end - push->cur < chan->func->gpfifo.post_size) in nvif_chan_gpfifo_push_kick()
16 push->end = push->cur + chan->func->gpfifo.post_size; in nvif_chan_gpfifo_push_kick()
21 cnt = push->cur - push->bgn; in nvif_chan_gpfifo_push_kick()
23 chan->func->gpfifo.push(chan, true, chan->push.addr + (put << 2), cnt << 2, false); in nvif_chan_gpfifo_push_kick()
24 chan->func->gpfifo.kick(chan); in nvif_chan_gpfifo_push_kick()
38 const u32 *map = chan->push.mem.object.map.ptr; in nvif_chan_gpfifo_post()
39 const u32 pbptr = (chan->push.cur - map) + chan->func->gpfifo.post_size; in nvif_chan_gpfifo_post()
40 const u32 gpptr = (chan->gpfifo.cur + 1) & chan->gpfifo.max; in nvif_chan_gpfifo_post()
42 if (!chan->func->gpfifo.post) in nvif_chan_gpfifo_post()
45 return chan->func->gpfifo.post(chan, gpptr, pbptr); in nvif_chan_gpfifo_post()
51 chan->func->gpfifo.push(chan, false, addr, size, no_prefetch); in nvif_chan_gpfifo_push()
57 struct nvif_push *push = &chan->push; in nvif_chan_gpfifo_wait()
64 if (chan->func->gpfifo.post) in nvif_chan_gpfifo_wait()
65 push_nr += chan->func->gpfifo.post_size; in nvif_chan_gpfifo_wait()
73 if (push->cur + push_nr > push->end) { in nvif_chan_gpfifo_wait()
80 while (chan->gpfifo.free < gpfifo_nr) { in nvif_chan_gpfifo_wait()
81 chan->gpfifo.free = chan->func->gpfifo.read_get(chan) - chan->gpfifo.cur - 1; in nvif_chan_gpfifo_wait()
82 if (chan->gpfifo.free < 0) in nvif_chan_gpfifo_wait()
83 chan->gpfifo.free += chan->gpfifo.max + 1; in nvif_chan_gpfifo_wait()
85 if (chan->gpfifo.free < gpfifo_nr) { in nvif_chan_gpfifo_wait()
86 if (!time--) in nvif_chan_gpfifo_wait()
87 return -ETIMEDOUT; in nvif_chan_gpfifo_wait()
99 chan->func = func; in nvif_chan_gpfifo_ctor()
101 chan->userd.map.ptr = userd; in nvif_chan_gpfifo_ctor()
103 chan->gpfifo.map.ptr = gpfifo; in nvif_chan_gpfifo_ctor()
104 chan->gpfifo.max = (gpfifo_size >> 3) - 1; in nvif_chan_gpfifo_ctor()
105 chan->gpfifo.free = chan->gpfifo.max; in nvif_chan_gpfifo_ctor()
107 chan->push.mem.object.map.ptr = push; in nvif_chan_gpfifo_ctor()
108 chan->push.wait = nvif_chan_gpfifo_push_wait; in nvif_chan_gpfifo_ctor()
109 chan->push.kick = nvif_chan_gpfifo_push_kick; in nvif_chan_gpfifo_ctor()
110 chan->push.addr = push_addr; in nvif_chan_gpfifo_ctor()
111 chan->push.hw.max = push_size >> 2; in nvif_chan_gpfifo_ctor()
112 chan->push.bgn = chan->push.cur = chan->push.end = push; in nvif_chan_gpfifo_ctor()
118 struct nvif_push *push = &chan->push; in nvif_chan_dma_wait()
119 u32 cur = push->cur - (u32 *)push->mem.object.map.ptr; in nvif_chan_dma_wait() local
122 nr += chan->func->gpfifo.post_size; in nvif_chan_dma_wait()
125 u32 get = chan->func->push.read_get(chan); in nvif_chan_dma_wait()
127 if (get <= cur) { in nvif_chan_dma_wait()
128 free = push->hw.max - cur; in nvif_chan_dma_wait()
135 get = chan->func->push.read_get(chan); in nvif_chan_dma_wait()
137 if (!time--) in nvif_chan_dma_wait()
138 return -ETIMEDOUT; in nvif_chan_dma_wait()
143 cur = 0; in nvif_chan_dma_wait()
146 free = get - cur - 1; in nvif_chan_dma_wait()
149 if (!time--) in nvif_chan_dma_wait()
150 return -ETIMEDOUT; in nvif_chan_dma_wait()
155 push->bgn = (u32 *)push->mem.object.map.ptr + cur; in nvif_chan_dma_wait()
156 push->cur = push->bgn; in nvif_chan_dma_wait()
157 push->end = push->bgn + free - chan->func->gpfifo.post_size; in nvif_chan_dma_wait()