diff options
Diffstat (limited to 'tests/ugpu/ugpu_basic.c')
-rw-r--r-- | tests/ugpu/ugpu_basic.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/tests/ugpu/ugpu_basic.c b/tests/ugpu/ugpu_basic.c index 6d506b07..d2ea9c2d 100644 --- a/tests/ugpu/ugpu_basic.c +++ b/tests/ugpu/ugpu_basic.c @@ -1,3 +1,5 @@ +#include "ugpu.h" + #include "igt.h" #include "igt_core.h" @@ -6,6 +8,64 @@ static int ugpu_open(int i915) return igt_ioctl(i915, DRM_IOCTL_I915_UGPU, 0); } +static int __ugpu_get(int fd, struct ugpu_query *q) +{ + int err; + + err = 0; + if (igt_ioctl(fd, UGPU_IOCTL_GET, q)) { + err = -errno; + igt_assume(err); + } + + return err; +} + +static int __ugpu_set(int fd, struct ugpu_query *q) +{ + int err; + + err = 0; + if (igt_ioctl(fd, UGPU_IOCTL_SET, q)) { + err = -errno; + igt_assume(err); + } + + return err; +} + +static int __ugpu_set_command_ring(int fd, uint32_t sz) +{ + struct ugpu_query q = { + .property = 0, + .value = sz, + }; + + return __ugpu_set(fd, &q); +} + +static void ugpu_set_command_ring(int fd, uint32_t sz) +{ + igt_assert_eq(__ugpu_set_command_ring(fd, sz), 0); +} + +static void igt_ugpu_name(int i915) +{ + int fd = ugpu_open(i915); + char name[128]; + + struct ugpu_query q = { + .property = 0, + .value = to_user_pointer(name), + .length = sizeof(name), + }; + igt_assert_eq(__ugpu_get(fd, &q), 0); + + igt_info("ugpu queue '%s'\n", name); + + close(fd); +} + igt_main { int i915; @@ -15,4 +75,24 @@ igt_main { igt_subtest("openclose") close(ugpu_open(i915)); + + igt_subtest("name") + igt_ugpu_name(i915); + + igt_subtest("mmap") { + int fd = ugpu_open(i915); + void *ctl, *mem; + + ugpu_set_command_ring(fd, 4096); + + ctl = mmap(NULL, 4096, PROT_WRITE, MAP_PRIVATE, fd, 0); + igt_assert(ctl != MAP_FAILED); + munmap(ctl, 4096); + + mem = mmap(NULL, 4096, PROT_WRITE, MAP_PRIVATE, fd, 4096); + igt_assert(mem != MAP_FAILED); + munmap(mem, 4096); + + close(fd); + } } |