#include <errno.h>
#include <sys/stat.h>
#include "drm.h"
+#include "i915_drm.h"
#define OBJECT_SIZE 16384
int do_read(int fd, int handle, void *buf, int offset, int size)
{
- struct drm_gem_pread read;
+ struct drm_i915_gem_pread read;
/* Ensure that we don't have any convenient data in buf in case
* we fail.
read.size = size;
read.offset = offset;
- return ioctl(fd, DRM_IOCTL_GEM_PREAD, &read);
+ return ioctl(fd, DRM_IOCTL_I915_GEM_PREAD, &read);
}
int do_write(int fd, int handle, void *buf, int offset, int size)
{
- struct drm_gem_pwrite write;
+ struct drm_i915_gem_pwrite write;
memset(&write, 0, sizeof(write));
write.handle = handle;
write.size = size;
write.offset = offset;
- return ioctl(fd, DRM_IOCTL_GEM_PWRITE, &write);
+ return ioctl(fd, DRM_IOCTL_I915_GEM_PWRITE, &write);
}
int main(int argc, char **argv)
{
int fd;
- struct drm_gem_create create;
+ struct drm_i915_gem_create create;
uint8_t expected[OBJECT_SIZE];
uint8_t buf[OBJECT_SIZE];
int ret;
int handle;
- fd = drm_open_any();
+ fd = drm_open_matching("8086:*", 0);
+ if (fd < 0) {
+ fprintf(stderr, "failed to open intel drm device, skipping\n");
+ return 0;
+ }
memset(&create, 0, sizeof(create));
create.size = OBJECT_SIZE;
- ret = ioctl(fd, DRM_IOCTL_GEM_CREATE, &create);
+ ret = ioctl(fd, DRM_IOCTL_I915_GEM_CREATE, &create);
assert(ret == 0);
handle = create.handle;
printf("Testing read beyond end of buffer.\n");
ret = do_read(fd, handle, buf, OBJECT_SIZE / 2, OBJECT_SIZE);
+ printf("%d %d\n", ret, errno);
assert(ret == -1 && errno == EINVAL);
printf("Testing full write of buffer\n");
assert(ret == 0);
assert(memcmp(buf, expected + 512, 1024) == 0);
+ printf("Testing read of bad buffer handle\n");
+ ret = do_read(fd, 1234, buf, 0, 1024);
+ assert(ret == -1 && errno == ENOENT);
+
+ printf("Testing write of bad buffer handle\n");
+ ret = do_write(fd, 1234, buf, 0, 1024);
+ assert(ret == -1 && errno == ENOENT);
+
close(fd);
return 0;