summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/nouveau/include/nvif/timer.h
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2020-07-22 05:02:33 +0300
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2020-07-22 05:02:33 +0300
commit9b031c86506cef9acae45e61339fcf9deaabb793 (patch)
tree9095d638ba9384f86df8d61dcf1f129c082481e1 /drivers/gpu/drm/nouveau/include/nvif/timer.h
parent53aab92dec447f93489e07924e310d605a389dea (diff)
parent04d5ce620f794f1df69b5f1b9ad62910fea547f1 (diff)
downloadlinux-9b031c86506cef9acae45e61339fcf9deaabb793.tar.xz
Merge branch 'elan-i2c' into next
Bring in update to Elan touchpad driver to support newer touchpads with higher resolution.
Diffstat (limited to 'drivers/gpu/drm/nouveau/include/nvif/timer.h')
-rw-r--r--drivers/gpu/drm/nouveau/include/nvif/timer.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/include/nvif/timer.h b/drivers/gpu/drm/nouveau/include/nvif/timer.h
new file mode 100644
index 000000000000..57587a985c4b
--- /dev/null
+++ b/drivers/gpu/drm/nouveau/include/nvif/timer.h
@@ -0,0 +1,35 @@
+#ifndef __NVIF_TIMER_H__
+#define __NVIF_TIMER_H__
+#include <nvif/os.h>
+
+struct nvif_timer_wait {
+ struct nvif_device *device;
+ u64 limit;
+ u64 time0;
+ u64 time1;
+ int reads;
+};
+
+void nvif_timer_wait_init(struct nvif_device *, u64 nsec,
+ struct nvif_timer_wait *);
+s64 nvif_timer_wait_test(struct nvif_timer_wait *);
+
+/* Delay based on GPU time (ie. PTIMER).
+ *
+ * Will return -ETIMEDOUT unless the loop was terminated with 'break',
+ * where it will return the number of nanoseconds taken instead.
+ */
+#define nvif_nsec(d,n,cond...) ({ \
+ struct nvif_timer_wait _wait; \
+ s64 _taken = 0; \
+ \
+ nvif_timer_wait_init((d), (n), &_wait); \
+ do { \
+ cond \
+ } while ((_taken = nvif_timer_wait_test(&_wait)) >= 0); \
+ \
+ _taken; \
+})
+#define nvif_usec(d,u,cond...) nvif_nsec((d), (u) * 1000, ##cond)
+#define nvif_msec(d,m,cond...) nvif_usec((d), (m) * 1000, ##cond)
+#endif