diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2015-08-20 14:54:10 +1000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2015-08-28 12:40:19 +1000 |
commit | 56f67dc19623b6cd4db57ee07d6f0cad32bcd5af (patch) | |
tree | 55f4b766376d59272fab0df9b1682a21a5e3f1f0 /drivers/gpu/drm/nouveau/nvkm/subdev/timer | |
parent | 2ebfa1bc6ff1a7cded8b662f507d34574ffcc2c6 (diff) |
drm/nouveau/tmr: type-safe PTIMER-based delay/wait macros
These require an explicit struct nvkm_device pointer, unlike the previous
macros which take a void *, and work for (almost) anything derived from
nvkm_object by using some heuristics.
These macros are more general than the previous ones, and can be used to
handle PTIMER-based busy-waits (will be used in later devinit fixes) as
well as more complicated wait conditions.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/subdev/timer')
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c | 57 |
1 files changed, 0 insertions, 57 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c index c59b2353683b..4c34e2bd0487 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c @@ -23,63 +23,6 @@ */ #include <subdev/timer.h> -bool -nvkm_timer_wait_eq(void *obj, u64 nsec, u32 addr, u32 mask, u32 data) -{ - struct nvkm_timer *ptimer = nvkm_timer(obj); - struct nvkm_device *device = ptimer->subdev.device; - u64 time0; - - time0 = ptimer->read(ptimer); - do { - if (nv_iclass(obj, NV_SUBDEV_CLASS)) { - if ((nvkm_rd32(device, addr) & mask) == data) - return true; - } else { - if ((nv_ro32(obj, addr) & mask) == data) - return true; - } - } while (ptimer->read(ptimer) - time0 < nsec); - - return false; -} - -bool -nvkm_timer_wait_ne(void *obj, u64 nsec, u32 addr, u32 mask, u32 data) -{ - struct nvkm_timer *ptimer = nvkm_timer(obj); - struct nvkm_device *device = ptimer->subdev.device; - u64 time0; - - time0 = ptimer->read(ptimer); - do { - if (nv_iclass(obj, NV_SUBDEV_CLASS)) { - if ((nvkm_rd32(device, addr) & mask) != data) - return true; - } else { - if ((nv_ro32(obj, addr) & mask) != data) - return true; - } - } while (ptimer->read(ptimer) - time0 < nsec); - - return false; -} - -bool -nvkm_timer_wait_cb(void *obj, u64 nsec, bool (*func)(void *), void *data) -{ - struct nvkm_timer *ptimer = nvkm_timer(obj); - u64 time0; - - time0 = ptimer->read(ptimer); - do { - if (func(data) == true) - return true; - } while (ptimer->read(ptimer) - time0 < nsec); - - return false; -} - void nvkm_timer_alarm(void *obj, u32 nsec, struct nvkm_alarm *alarm) { |