diff options
author | Jonathan Gray <jsg@cvs.openbsd.org> | 2015-12-27 08:58:22 +0000 |
---|---|---|
committer | Jonathan Gray <jsg@cvs.openbsd.org> | 2015-12-27 08:58:22 +0000 |
commit | 5db7cad38be896315e2b897f68d1751d340a2483 (patch) | |
tree | caab7de8344c4ce0d7d769184a89ea35d80dce1c /lib | |
parent | 5550a33ac941747a471b1029b7f6ae4a7569c8c3 (diff) |
Import libdrm 2.4.65
Diffstat (limited to 'lib')
33 files changed, 239 insertions, 99 deletions
diff --git a/lib/libdrm/amdgpu/Makefile.am b/lib/libdrm/amdgpu/Makefile.am index ed97803f0..cf7bc1ba8 100644 --- a/lib/libdrm/amdgpu/Makefile.am +++ b/lib/libdrm/amdgpu/Makefile.am @@ -22,8 +22,10 @@ # Authors: # Jérôme Glisse <glisse@freedesktop.org> +include Makefile.sources + AM_CFLAGS = \ - $(WARN_CFLAGS) -Wno-switch-enum \ + $(WARN_CFLAGS) \ -I$(top_srcdir) \ $(PTHREADSTUBS_CFLAGS) \ -I$(top_srcdir)/include/drm @@ -33,22 +35,10 @@ libdrm_amdgpu_ladir = $(libdir) libdrm_amdgpu_la_LDFLAGS = -version-number 1:0:0 -no-undefined libdrm_amdgpu_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ -libdrm_amdgpu_la_SOURCES = \ - amdgpu.h \ - amdgpu_bo.c \ - amdgpu_cs.c \ - amdgpu_device.c \ - amdgpu_gpu_info.c \ - amdgpu_internal.h \ - amdgpu_vamgr.c \ - util_hash.c \ - util_hash.h \ - util_hash_table.c \ - util_hash_table.h +libdrm_amdgpu_la_SOURCES = $(LIBDRM_AMDGPU_FILES) libdrm_amdgpuincludedir = ${includedir}/libdrm -libdrm_amdgpuinclude_HEADERS = \ - amdgpu.h +libdrm_amdgpuinclude_HEADERS = $(LIBDRM_AMDGPU_H_FILES) pkgconfigdir = @pkgconfigdir@ pkgconfig_DATA = libdrm_amdgpu.pc diff --git a/lib/libdrm/amdgpu/Makefile.sources b/lib/libdrm/amdgpu/Makefile.sources new file mode 100644 index 000000000..0c0b9a93a --- /dev/null +++ b/lib/libdrm/amdgpu/Makefile.sources @@ -0,0 +1,14 @@ +LIBDRM_AMDGPU_FILES := \ + amdgpu_bo.c \ + amdgpu_cs.c \ + amdgpu_device.c \ + amdgpu_gpu_info.c \ + amdgpu_internal.h \ + amdgpu_vamgr.c \ + util_hash.c \ + util_hash.h \ + util_hash_table.c \ + util_hash_table.h + +LIBDRM_AMDGPU_H_FILES := \ + amdgpu.h diff --git a/lib/libdrm/amdgpu/amdgpu_cs.c b/lib/libdrm/amdgpu/amdgpu_cs.c index ea3532640..4da982144 100644 --- a/lib/libdrm/amdgpu/amdgpu_cs.c +++ b/lib/libdrm/amdgpu/amdgpu_cs.c @@ -32,6 +32,9 @@ #include <pthread.h> #include <sched.h> #include <sys/ioctl.h> +#ifdef HAVE_ALLOCA_H +# include <alloca.h> +#endif #include "xf86drm.h" #include "amdgpu_drm.h" @@ -63,10 +66,6 @@ int amdgpu_cs_ctx_create(amdgpu_device_handle dev, gpu_context->dev = dev; - r = pthread_mutex_init(&gpu_context->sequence_mutex, NULL); - if (r) - goto error; - /* Create the context */ memset(&args, 0, sizeof(args)); args.in.op = AMDGPU_CTX_OP_ALLOC_CTX; @@ -80,7 +79,6 @@ int amdgpu_cs_ctx_create(amdgpu_device_handle dev, return 0; error: - pthread_mutex_destroy(&gpu_context->sequence_mutex); free(gpu_context); return r; } @@ -101,8 +99,6 @@ int amdgpu_cs_ctx_free(amdgpu_context_handle context) if (NULL == context) return -EINVAL; - pthread_mutex_destroy(&context->sequence_mutex); - /* now deal with kernel side */ memset(&args, 0, sizeof(args)); args.in.op = AMDGPU_CTX_OP_FREE_CTX; @@ -200,8 +196,6 @@ static int amdgpu_cs_submit_one(amdgpu_context_handle context, chunk_data[i].ib_data.flags = ib->flags; } - pthread_mutex_lock(&context->sequence_mutex); - if (user_fence) { i = cs.in.num_chunks++; @@ -254,7 +248,6 @@ static int amdgpu_cs_submit_one(amdgpu_context_handle context, ibs_request->seq_no = cs.out.handle; error_unlock: - pthread_mutex_unlock(&context->sequence_mutex); free(dependencies); return r; } diff --git a/lib/libdrm/amdgpu/amdgpu_device.c b/lib/libdrm/amdgpu/amdgpu_device.c index 75b12e259..e5a923e67 100644 --- a/lib/libdrm/amdgpu/amdgpu_device.c +++ b/lib/libdrm/amdgpu/amdgpu_device.c @@ -132,6 +132,8 @@ static void amdgpu_device_free_internal(amdgpu_device_handle dev) { amdgpu_vamgr_deinit(dev->vamgr); free(dev->vamgr); + amdgpu_vamgr_deinit(dev->vamgr_32); + free(dev->vamgr_32); util_hash_table_destroy(dev->bo_flink_names); util_hash_table_destroy(dev->bo_handles); pthread_mutex_destroy(&dev->bo_table_mutex); diff --git a/lib/libdrm/amdgpu/amdgpu_internal.h b/lib/libdrm/amdgpu/amdgpu_internal.h index 5d866030e..7dd5c1c72 100644 --- a/lib/libdrm/amdgpu/amdgpu_internal.h +++ b/lib/libdrm/amdgpu/amdgpu_internal.h @@ -111,9 +111,6 @@ struct amdgpu_bo_list { struct amdgpu_context { struct amdgpu_device *dev; - /** Mutex for accessing fences and to maintain command submissions - in good sequence. */ - pthread_mutex_t sequence_mutex; /* context id*/ uint32_t id; }; diff --git a/lib/libdrm/freedreno/freedreno-symbol-check b/lib/libdrm/freedreno/freedreno-symbol-check index e593df4d7..f517b6e71 100755 --- a/lib/libdrm/freedreno/freedreno-symbol-check +++ b/lib/libdrm/freedreno/freedreno-symbol-check @@ -25,6 +25,7 @@ fd_bo_new fd_bo_ref fd_bo_size fd_device_del +fd_device_fd fd_device_new fd_device_new_dup fd_device_ref diff --git a/lib/libdrm/freedreno/freedreno_bo.c b/lib/libdrm/freedreno/freedreno_bo.c index eec218c6b..1cb67595b 100644 --- a/lib/libdrm/freedreno/freedreno_bo.c +++ b/lib/libdrm/freedreno/freedreno_bo.c @@ -52,6 +52,9 @@ static struct fd_bo * lookup_bo(void *tbl, uint32_t key) if (!drmHashLookup(tbl, key, (void **)&bo)) { /* found, incr refcnt and return: */ bo = fd_bo_ref(bo); + + /* don't break the bucket if this bo was found in one */ + list_delinit(&bo->list); } return bo; } @@ -223,20 +226,30 @@ out_unlock: struct fd_bo * fd_bo_from_dmabuf(struct fd_device *dev, int fd) { - struct drm_prime_handle req = { - .fd = fd, - }; int ret, size; + uint32_t handle; + struct fd_bo *bo; - ret = drmIoctl(dev->fd, DRM_IOCTL_PRIME_FD_TO_HANDLE, &req); + pthread_mutex_lock(&table_lock); + ret = drmPrimeFDToHandle(dev->fd, fd, &handle); if (ret) { return NULL; } - /* hmm, would be nice if we had a way to figure out the size.. */ - size = 0; + bo = lookup_bo(dev->handle_table, handle); + if (bo) + goto out_unlock; + + /* lseek() to get bo size */ + size = lseek(fd, 0, SEEK_END); + lseek(fd, 0, SEEK_CUR); - return fd_bo_from_handle(dev, req.handle, size); + bo = bo_from_handle(dev, size, handle); + +out_unlock: + pthread_mutex_unlock(&table_lock); + + return bo; } struct fd_bo * fd_bo_from_name(struct fd_device *dev, uint32_t name) @@ -373,18 +386,15 @@ uint32_t fd_bo_handle(struct fd_bo *bo) int fd_bo_dmabuf(struct fd_bo *bo) { if (bo->fd < 0) { - struct drm_prime_handle req = { - .handle = bo->handle, - .flags = DRM_CLOEXEC, - }; - int ret; + int ret, prime_fd; - ret = drmIoctl(bo->dev->fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &req); + ret = drmPrimeHandleToFD(bo->dev->fd, bo->handle, DRM_CLOEXEC, + &prime_fd); if (ret) { return ret; } - bo->fd = req.fd; + bo->fd = prime_fd; } return dup(bo->fd); } diff --git a/lib/libdrm/freedreno/freedreno_device.c b/lib/libdrm/freedreno/freedreno_device.c index 3bc4cb21a..ddb954551 100644 --- a/lib/libdrm/freedreno/freedreno_device.c +++ b/lib/libdrm/freedreno/freedreno_device.c @@ -160,3 +160,8 @@ void fd_device_del(struct fd_device *dev) fd_device_del_impl(dev); pthread_mutex_unlock(&table_lock); } + +int fd_device_fd(struct fd_device *dev) +{ + return dev->fd; +} diff --git a/lib/libdrm/freedreno/freedreno_drmif.h b/lib/libdrm/freedreno/freedreno_drmif.h index 81a14b433..5547e9439 100644 --- a/lib/libdrm/freedreno/freedreno_drmif.h +++ b/lib/libdrm/freedreno/freedreno_drmif.h @@ -76,6 +76,7 @@ struct fd_device * fd_device_new(int fd); struct fd_device * fd_device_new_dup(int fd); struct fd_device * fd_device_ref(struct fd_device *dev); void fd_device_del(struct fd_device *dev); +int fd_device_fd(struct fd_device *dev); /* pipe functions: diff --git a/lib/libdrm/freedreno/freedreno_priv.h b/lib/libdrm/freedreno/freedreno_priv.h index 1dddcc39e..4e442e420 100644 --- a/lib/libdrm/freedreno/freedreno_priv.h +++ b/lib/libdrm/freedreno/freedreno_priv.h @@ -83,7 +83,7 @@ struct fd_device { */ void *handle_table, *name_table; - struct fd_device_funcs *funcs; + const struct fd_device_funcs *funcs; struct fd_bo_bucket cache_bucket[14 * 4]; int num_buckets; @@ -107,7 +107,7 @@ struct fd_pipe_funcs { struct fd_pipe { struct fd_device *dev; enum fd_pipe_id id; - struct fd_pipe_funcs *funcs; + const struct fd_pipe_funcs *funcs; }; struct fd_ringmarker { @@ -141,7 +141,7 @@ struct fd_bo { int fd; /* dmabuf handle */ void *map; atomic_t refcnt; - struct fd_bo_funcs *funcs; + const struct fd_bo_funcs *funcs; int bo_reuse; struct list_head list; /* bucket-list entry */ diff --git a/lib/libdrm/freedreno/freedreno_ringbuffer.h b/lib/libdrm/freedreno/freedreno_ringbuffer.h index a5e1d032e..578cdb243 100644 --- a/lib/libdrm/freedreno/freedreno_ringbuffer.h +++ b/lib/libdrm/freedreno/freedreno_ringbuffer.h @@ -44,7 +44,7 @@ struct fd_ringbuffer { int size; uint32_t *cur, *end, *start, *last_start; struct fd_pipe *pipe; - struct fd_ringbuffer_funcs *funcs; + const struct fd_ringbuffer_funcs *funcs; uint32_t last_timestamp; struct fd_ringbuffer *parent; }; diff --git a/lib/libdrm/freedreno/kgsl/kgsl_bo.c b/lib/libdrm/freedreno/kgsl/kgsl_bo.c index 3407c769c..b8ac10261 100644 --- a/lib/libdrm/freedreno/kgsl/kgsl_bo.c +++ b/lib/libdrm/freedreno/kgsl/kgsl_bo.c @@ -123,7 +123,7 @@ static void kgsl_bo_destroy(struct fd_bo *bo) } -static struct fd_bo_funcs funcs = { +static const struct fd_bo_funcs funcs = { .offset = kgsl_bo_offset, .cpu_prep = kgsl_bo_cpu_prep, .cpu_fini = kgsl_bo_cpu_fini, diff --git a/lib/libdrm/freedreno/kgsl/kgsl_device.c b/lib/libdrm/freedreno/kgsl/kgsl_device.c index 8352d605f..175e83781 100644 --- a/lib/libdrm/freedreno/kgsl/kgsl_device.c +++ b/lib/libdrm/freedreno/kgsl/kgsl_device.c @@ -42,7 +42,7 @@ static void kgsl_device_destroy(struct fd_device *dev) free(kgsl_dev); } -static struct fd_device_funcs funcs = { +static const struct fd_device_funcs funcs = { .bo_new_handle = kgsl_bo_new_handle, .bo_from_handle = kgsl_bo_from_handle, .pipe_new = kgsl_pipe_new, diff --git a/lib/libdrm/freedreno/kgsl/kgsl_pipe.c b/lib/libdrm/freedreno/kgsl/kgsl_pipe.c index e2fd65c01..58b3b4d50 100644 --- a/lib/libdrm/freedreno/kgsl/kgsl_pipe.c +++ b/lib/libdrm/freedreno/kgsl/kgsl_pipe.c @@ -108,7 +108,7 @@ static void kgsl_pipe_destroy(struct fd_pipe *pipe) free(kgsl_pipe); } -static struct fd_pipe_funcs funcs = { +static const struct fd_pipe_funcs funcs = { .ringbuffer_new = kgsl_ringbuffer_new, .get_param = kgsl_pipe_get_param, .wait = kgsl_pipe_wait, diff --git a/lib/libdrm/freedreno/kgsl/kgsl_ringbuffer.c b/lib/libdrm/freedreno/kgsl/kgsl_ringbuffer.c index f0133078c..6f68f2f30 100644 --- a/lib/libdrm/freedreno/kgsl/kgsl_ringbuffer.c +++ b/lib/libdrm/freedreno/kgsl/kgsl_ringbuffer.c @@ -191,7 +191,7 @@ static void kgsl_ringbuffer_destroy(struct fd_ringbuffer *ring) free(kgsl_ring); } -static struct fd_ringbuffer_funcs funcs = { +static const struct fd_ringbuffer_funcs funcs = { .hostptr = kgsl_ringbuffer_hostptr, .flush = kgsl_ringbuffer_flush, .emit_reloc = kgsl_ringbuffer_emit_reloc, diff --git a/lib/libdrm/freedreno/msm/msm_bo.c b/lib/libdrm/freedreno/msm/msm_bo.c index fd944131e..ee668aba9 100644 --- a/lib/libdrm/freedreno/msm/msm_bo.c +++ b/lib/libdrm/freedreno/msm/msm_bo.c @@ -96,7 +96,7 @@ static void msm_bo_destroy(struct fd_bo *bo) } -static struct fd_bo_funcs funcs = { +static const struct fd_bo_funcs funcs = { .offset = msm_bo_offset, .cpu_prep = msm_bo_cpu_prep, .cpu_fini = msm_bo_cpu_fini, diff --git a/lib/libdrm/freedreno/msm/msm_device.c b/lib/libdrm/freedreno/msm/msm_device.c index 81077e1a5..25c097c25 100644 --- a/lib/libdrm/freedreno/msm/msm_device.c +++ b/lib/libdrm/freedreno/msm/msm_device.c @@ -42,7 +42,7 @@ static void msm_device_destroy(struct fd_device *dev) free(msm_dev); } -static struct fd_device_funcs funcs = { +static const struct fd_device_funcs funcs = { .bo_new_handle = msm_bo_new_handle, .bo_from_handle = msm_bo_from_handle, .pipe_new = msm_pipe_new, diff --git a/lib/libdrm/freedreno/msm/msm_pipe.c b/lib/libdrm/freedreno/msm/msm_pipe.c index e1edffea6..aa0866b4a 100644 --- a/lib/libdrm/freedreno/msm/msm_pipe.c +++ b/lib/libdrm/freedreno/msm/msm_pipe.c @@ -80,7 +80,7 @@ static void msm_pipe_destroy(struct fd_pipe *pipe) free(msm_pipe); } -static struct fd_pipe_funcs funcs = { +static const struct fd_pipe_funcs funcs = { .ringbuffer_new = msm_ringbuffer_new, .get_param = msm_pipe_get_param, .wait = msm_pipe_wait, diff --git a/lib/libdrm/freedreno/msm/msm_ringbuffer.c b/lib/libdrm/freedreno/msm/msm_ringbuffer.c index 5ddea5740..ee6af0ba0 100644 --- a/lib/libdrm/freedreno/msm/msm_ringbuffer.c +++ b/lib/libdrm/freedreno/msm/msm_ringbuffer.c @@ -356,7 +356,7 @@ static void msm_ringbuffer_destroy(struct fd_ringbuffer *ring) free(msm_ring); } -static struct fd_ringbuffer_funcs funcs = { +static const struct fd_ringbuffer_funcs funcs = { .hostptr = msm_ringbuffer_hostptr, .flush = msm_ringbuffer_flush, .reset = msm_ringbuffer_reset, diff --git a/lib/libdrm/include/drm/drm_fourcc.h b/lib/libdrm/include/drm/drm_fourcc.h index 85facb0a1..63a80ca5b 100644 --- a/lib/libdrm/include/drm/drm_fourcc.h +++ b/lib/libdrm/include/drm/drm_fourcc.h @@ -127,4 +127,97 @@ #define DRM_FORMAT_YUV444 fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */ #define DRM_FORMAT_YVU444 fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */ + +/* + * Format Modifiers: + * + * Format modifiers describe, typically, a re-ordering or modification + * of the data in a plane of an FB. This can be used to express tiled/ + * swizzled formats, or compression, or a combination of the two. + * + * The upper 8 bits of the format modifier are a vendor-id as assigned + * below. The lower 56 bits are assigned as vendor sees fit. + */ + +/* Vendor Ids: */ +#define DRM_FORMAT_MOD_NONE 0 +#define DRM_FORMAT_MOD_VENDOR_INTEL 0x01 +#define DRM_FORMAT_MOD_VENDOR_AMD 0x02 +#define DRM_FORMAT_MOD_VENDOR_NV 0x03 +#define DRM_FORMAT_MOD_VENDOR_SAMSUNG 0x04 +#define DRM_FORMAT_MOD_VENDOR_QCOM 0x05 +/* add more to the end as needed */ + +#define fourcc_mod_code(vendor, val) \ + ((((u64)DRM_FORMAT_MOD_VENDOR_## vendor) << 56) | (val & 0x00ffffffffffffffULL)) + +/* + * Format Modifier tokens: + * + * When adding a new token please document the layout with a code comment, + * similar to the fourcc codes above. drm_fourcc.h is considered the + * authoritative source for all of these. + */ + +/* Intel framebuffer modifiers */ + +/* + * Intel X-tiling layout + * + * This is a tiled layout using 4Kb tiles (except on gen2 where the tiles 2Kb) + * in row-major layout. Within the tile bytes are laid out row-major, with + * a platform-dependent stride. On top of that the memory can apply + * platform-depending swizzling of some higher address bits into bit6. + * + * This format is highly platforms specific and not useful for cross-driver + * sharing. It exists since on a given platform it does uniquely identify the + * layout in a simple way for i915-specific userspace. + */ +#define I915_FORMAT_MOD_X_TILED fourcc_mod_code(INTEL, 1) + +/* + * Intel Y-tiling layout + * + * This is a tiled layout using 4Kb tiles (except on gen2 where the tiles 2Kb) + * in row-major layout. Within the tile bytes are laid out in OWORD (16 bytes) + * chunks column-major, with a platform-dependent height. On top of that the + * memory can apply platform-depending swizzling of some higher address bits + * into bit6. + * + * This format is highly platforms specific and not useful for cross-driver + * sharing. It exists since on a given platform it does uniquely identify the + * layout in a simple way for i915-specific userspace. + */ +#define I915_FORMAT_MOD_Y_TILED fourcc_mod_code(INTEL, 2) + +/* + * Intel Yf-tiling layout + * + * This is a tiled layout using 4Kb tiles in row-major layout. + * Within the tile pixels are laid out in 16 256 byte units / sub-tiles which + * are arranged in four groups (two wide, two high) with column-major layout. + * Each group therefore consits out of four 256 byte units, which are also laid + * out as 2x2 column-major. + * 256 byte units are made out of four 64 byte blocks of pixels, producing + * either a square block or a 2:1 unit. + * 64 byte blocks of pixels contain four pixel rows of 16 bytes, where the width + * in pixel depends on the pixel depth. + */ +#define I915_FORMAT_MOD_Yf_TILED fourcc_mod_code(INTEL, 3) + +/* + * Tiled, NV12MT, grouped in 64 (pixels) x 32 (lines) -sized macroblocks + * + * Macroblocks are laid in a Z-shape, and each pixel data is following the + * standard NV12 style. + * As for NV12, an image is the result of two frame buffers: one for Y, + * one for the interleaved Cb/Cr components (1/2 the height of the Y buffer). + * Alignment requirements are (for each buffer): + * - multiple of 128 pixels for the width + * - multiple of 32 pixels for the height + * + * For more information: see http://linuxtv.org/downloads/v4l-dvb-apis/re32.html + */ +#define DRM_FORMAT_MOD_SAMSUNG_64_32_TILE fourcc_mod_code(SAMSUNG, 1) + #endif /* DRM_FOURCC_H */ diff --git a/lib/libdrm/include/drm/drm_mode.h b/lib/libdrm/include/drm/drm_mode.h index 69c1ac3cf..115f36e45 100644 --- a/lib/libdrm/include/drm/drm_mode.h +++ b/lib/libdrm/include/drm/drm_mode.h @@ -322,7 +322,8 @@ struct drm_mode_fb_cmd { __u32 handle; }; -#define DRM_MODE_FB_INTERLACED (1<<0) /* for interlaced framebuffers */ +#define DRM_MODE_FB_INTERLACED (1<<0) /* for interlaced framebuffers */ +#define DRM_MODE_FB_MODIFIERS (1<<1) /* enables ->modifer[] */ struct drm_mode_fb_cmd2 { __u32 fb_id; @@ -343,10 +344,18 @@ struct drm_mode_fb_cmd2 { * So it would consist of Y as offset[0] and UV as * offset[1]. Note that offset[0] will generally * be 0. + * + * To accommodate tiled, compressed, etc formats, a per-plane + * modifier can be specified. The default value of zero + * indicates "native" format as specified by the fourcc. + * Vendor specific modifier token. This allows, for example, + * different tiling/swizzling pattern on different planes. + * See discussion above of DRM_FORMAT_MOD_xxx. */ __u32 handles[4]; __u32 pitches[4]; /* pitch for each plane */ __u32 offsets[4]; /* offset of each plane */ + __u64 modifier[4]; /* ie, tiling, compressed (per plane) */ }; #define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01 diff --git a/lib/libdrm/nouveau/abi16.c b/lib/libdrm/nouveau/abi16.c index 4ca0bfbaf..59bc43605 100644 --- a/lib/libdrm/nouveau/abi16.c +++ b/lib/libdrm/nouveau/abi16.c @@ -38,7 +38,10 @@ abi16_chan_nv04(struct nouveau_object *obj) { struct nouveau_device *dev = (struct nouveau_device *)obj->parent; struct nv04_fifo *nv04 = obj->data; - struct drm_nouveau_channel_alloc req = {nv04->vram, nv04->gart}; + struct drm_nouveau_channel_alloc req = { + .fb_ctxdma_handle = nv04->vram, + .tt_ctxdma_handle = nv04->gart + }; int ret; ret = drmCommandWriteRead(dev->fd, DRM_NOUVEAU_CHANNEL_ALLOC, @@ -105,7 +108,9 @@ drm_private int abi16_engobj(struct nouveau_object *obj) { struct drm_nouveau_grobj_alloc req = { - obj->parent->handle, obj->handle, obj->oclass + .channel = obj->parent->handle, + .handle = obj->handle, + .class = obj->oclass, }; struct nouveau_device *dev; int ret; @@ -125,7 +130,9 @@ abi16_ntfy(struct nouveau_object *obj) { struct nv04_notify *ntfy = obj->data; struct drm_nouveau_notifierobj_alloc req = { - obj->parent->handle, ntfy->object->handle, ntfy->length + .channel = obj->parent->handle, + .handle = ntfy->object->handle, + .size = ntfy->length, }; struct nouveau_device *dev; int ret; diff --git a/lib/libdrm/nouveau/nouveau.c b/lib/libdrm/nouveau/nouveau.c index 7393474da..97fd77b93 100644 --- a/lib/libdrm/nouveau/nouveau.c +++ b/lib/libdrm/nouveau/nouveau.c @@ -177,7 +177,7 @@ nouveau_device_del(struct nouveau_device **pdev) int nouveau_getparam(struct nouveau_device *dev, uint64_t param, uint64_t *value) { - struct drm_nouveau_getparam r = { param, 0 }; + struct drm_nouveau_getparam r = { .param = param }; int fd = dev->fd, ret = drmCommandWriteRead(fd, DRM_NOUVEAU_GETPARAM, &r, sizeof(r)); *value = r.value; @@ -187,7 +187,7 @@ nouveau_getparam(struct nouveau_device *dev, uint64_t param, uint64_t *value) int nouveau_setparam(struct nouveau_device *dev, uint64_t param, uint64_t value) { - struct drm_nouveau_setparam r = { param, value }; + struct drm_nouveau_setparam r = { .param = param, .value = value }; return drmCommandWrite(dev->fd, DRM_NOUVEAU_SETPARAM, &r, sizeof(r)); } @@ -348,7 +348,7 @@ nouveau_bo_del(struct nouveau_bo *bo) { struct nouveau_device_priv *nvdev = nouveau_device(bo->device); struct nouveau_bo_priv *nvbo = nouveau_bo(bo); - struct drm_gem_close req = { bo->handle }; + struct drm_gem_close req = { .handle = bo->handle }; if (nvbo->head.next) { pthread_mutex_lock(&nvdev->lock); diff --git a/lib/libdrm/omap/omap_drm.c b/lib/libdrm/omap/omap_drm.c index 4a0248d5e..08ba64eb6 100644 --- a/lib/libdrm/omap/omap_drm.c +++ b/lib/libdrm/omap/omap_drm.c @@ -186,6 +186,7 @@ static struct omap_bo * bo_from_handle(struct omap_device *dev, } bo->dev = omap_device_ref(dev); bo->handle = handle; + bo->fd = -1; atomic_set(&bo->refcnt, 1); /* add ourselves to the handle table: */ drmHashInsert(dev->handle_table, handle, bo); diff --git a/lib/libdrm/tests/Makefile.am b/lib/libdrm/tests/Makefile.am index 9a2d9328a..a511d28ac 100644 --- a/lib/libdrm/tests/Makefile.am +++ b/lib/libdrm/tests/Makefile.am @@ -33,6 +33,8 @@ check_PROGRAMS = \ dristat \ drmstat +dristat_LDADD = -lm + if HAVE_NOUVEAU SUBDIRS += nouveau endif diff --git a/lib/libdrm/tests/amdgpu/amdgpu_test.c b/lib/libdrm/tests/amdgpu/amdgpu_test.c index 656899051..71f357c66 100644 --- a/lib/libdrm/tests/amdgpu/amdgpu_test.c +++ b/lib/libdrm/tests/amdgpu/amdgpu_test.c @@ -58,14 +58,30 @@ int drm_amdgpu[MAX_CARDS_SUPPORTED]; /** The table of all known test suites to run */ static CU_SuiteInfo suites[] = { - { "Basic Tests", suite_basic_tests_init, - suite_basic_tests_clean, basic_tests }, - { "BO Tests", suite_bo_tests_init, - suite_bo_tests_clean, bo_tests }, - { "CS Tests", suite_cs_tests_init, - suite_cs_tests_clean, cs_tests }, - { "VCE Tests", suite_vce_tests_init, - suite_vce_tests_clean, vce_tests }, + { + .pName = "Basic Tests", + .pInitFunc = suite_basic_tests_init, + .pCleanupFunc = suite_basic_tests_clean, + .pTests = basic_tests, + }, + { + .pName = "BO Tests", + .pInitFunc = suite_bo_tests_init, + .pCleanupFunc = suite_bo_tests_clean, + .pTests = bo_tests, + }, + { + .pName = "CS Tests", + .pInitFunc = suite_cs_tests_init, + .pCleanupFunc = suite_cs_tests_clean, + .pTests = cs_tests, + }, + { + .pName = "VCE Tests", + .pInitFunc = suite_vce_tests_init, + .pCleanupFunc = suite_vce_tests_clean, + .pTests = vce_tests, + }, CU_SUITE_INFO_NULL, }; diff --git a/lib/libdrm/tests/amdgpu/basic_tests.c b/lib/libdrm/tests/amdgpu/basic_tests.c index 787403938..e489e6e83 100644 --- a/lib/libdrm/tests/amdgpu/basic_tests.c +++ b/lib/libdrm/tests/amdgpu/basic_tests.c @@ -28,6 +28,9 @@ #include <stdio.h> #include <stdlib.h> #include <unistd.h> +#ifdef HAVE_ALLOCA_H +# include <alloca.h> +#endif #include "CUnit/Basic.h" diff --git a/lib/libdrm/tests/amdgpu/cs_tests.c b/lib/libdrm/tests/amdgpu/cs_tests.c index 416f36b95..dfbf5af9c 100644 --- a/lib/libdrm/tests/amdgpu/cs_tests.c +++ b/lib/libdrm/tests/amdgpu/cs_tests.c @@ -266,7 +266,7 @@ static void amdgpu_cs_uvd_decode(void) r = amdgpu_bo_cpu_map(buf_handle, (void **)&ptr); CU_ASSERT_EQUAL(r, 0); - memcpy(ptr, uvd_decode_msg, sizeof(uvd_create_msg)); + memcpy(ptr, uvd_decode_msg, sizeof(uvd_decode_msg)); if (family_id >= AMDGPU_FAMILY_VI) ptr[0x10] = 7; @@ -362,7 +362,7 @@ static void amdgpu_cs_uvd_destroy(void) r = amdgpu_bo_cpu_map(buf_handle, &msg); CU_ASSERT_EQUAL(r, 0); - memcpy(msg, uvd_destroy_msg, sizeof(uvd_create_msg)); + memcpy(msg, uvd_destroy_msg, sizeof(uvd_destroy_msg)); if (family_id >= AMDGPU_FAMILY_VI) ((uint8_t*)msg)[0x10] = 7; diff --git a/lib/libdrm/tests/amdgpu/uvd_messages.h b/lib/libdrm/tests/amdgpu/uvd_messages.h index 44bcacc5b..00235cbb9 100644 --- a/lib/libdrm/tests/amdgpu/uvd_messages.h +++ b/lib/libdrm/tests/amdgpu/uvd_messages.h @@ -24,7 +24,7 @@ #ifndef _UVD_MESSAGES_H_ #define _UVD_MESSAGES_H_ -static uint8_t uvd_create_msg[] = { +static const uint8_t uvd_create_msg[] = { 0xe4,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x44,0x40,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x03,0x00,0x00, 0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xf9,0xf2,0x00,0x00,0x00,0x00,0x00, @@ -250,7 +250,7 @@ static uint8_t uvd_create_msg[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; -static uint8_t uvd_bitstream[] ={ +static const uint8_t uvd_bitstream[] ={ 0x00,0x00,0x01,0x25,0xb8,0x20,0x20,0x21,0x44,0xc5,0x00,0x01,0x57,0x9b,0xef,0xbe, 0xfb,0xef,0xbe,0xfb,0xef,0xbe,0xfb,0xef,0xbe,0xfb,0xef,0xbe,0xfb,0xef,0xbe,0xfb, 0xef,0xbe,0xfb,0xef,0xbe,0xfb,0xef,0xbe,0xfb,0xef,0xbe,0xfb,0xef,0xbe,0xfb,0xef, @@ -341,7 +341,7 @@ static uint8_t uvd_bitstream[] ={ 0xeb,0xae,0xba,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; -static uint8_t uvd_decode_msg[] = { +static const uint8_t uvd_decode_msg[] = { 0xe4,0x0d,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x44,0x40,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0xe0,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0xf9,0xf2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, @@ -567,7 +567,7 @@ static uint8_t uvd_decode_msg[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; -static uint8_t uvd_destroy_msg[] = { +static const uint8_t uvd_destroy_msg[] = { 0xe4,0x0d,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x44,0x40,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, @@ -793,7 +793,7 @@ static uint8_t uvd_destroy_msg[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; -static uint8_t uvd_it_scaling_table[] = { +static const uint8_t uvd_it_scaling_table[] = { 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, diff --git a/lib/libdrm/tests/amdgpu/vce_ib.h b/lib/libdrm/tests/amdgpu/vce_ib.h index c5afed0cb..bd0bf9435 100644 --- a/lib/libdrm/tests/amdgpu/vce_ib.h +++ b/lib/libdrm/tests/amdgpu/vce_ib.h @@ -24,7 +24,7 @@ #ifndef _vce_ib_h_ #define _vce_ib_h_ -static uint32_t vce_session[3] = { +static const uint32_t vce_session[] = { 0x0000000c, 0x00000001, 0x400c0001, @@ -41,7 +41,7 @@ static uint32_t vce_taskinfo[8] = { 0x00000000, }; -static uint32_t vce_create[12] = { +static const uint32_t vce_create[] = { 0x00000030, 0x01000001, 0x00000000, @@ -56,7 +56,7 @@ static uint32_t vce_create[12] = { 0x00000000, }; -static uint32_t vce_rate_ctrl[28] = { +static const uint32_t vce_rate_ctrl[] = { 0x00000070, 0x04000005, 0x00000000, @@ -87,13 +87,13 @@ static uint32_t vce_rate_ctrl[28] = { 0x00000000, }; -static uint32_t vce_config_ext[3] = { +static const uint32_t vce_config_ext[] = { 0x0000000c, 0x04000001, 0x00000003, }; -static uint32_t vce_motion_est[26] = { +static const uint32_t vce_motion_est[] = { 0x00000068, 0x04000007, 0x00000001, @@ -122,7 +122,7 @@ static uint32_t vce_motion_est[26] = { 0x00000000, }; -static uint32_t vce_rdo[19] = { +static const uint32_t vce_rdo[] = { 0x0000004c, 0x04000008, 0x00000000, @@ -144,7 +144,7 @@ static uint32_t vce_rdo[19] = { 0x00000000, }; -static uint32_t vce_pic_ctrl[29] = { +static const uint32_t vce_pic_ctrl[] = { 0x00000074, 0x04000002, 0x00000000, @@ -176,7 +176,7 @@ static uint32_t vce_pic_ctrl[29] = { 0x00000000, }; -static uint32_t vce_feedback[5] = { +static const uint32_t vce_feedback[] = { 0x00000014, 0x05000005, 0x00000000, @@ -184,14 +184,14 @@ static uint32_t vce_feedback[5] = { 0x00000001, }; -static uint32_t vce_context_buffer[4] = { +static const uint32_t vce_context_buffer[] = { 0x00000010, 0x05000001, 0x00000000, 0xffffffff, }; -static uint32_t vce_bs_buffer[5] = { +static const uint32_t vce_bs_buffer[] = { 0x00000014, 0x05000004, 0x00000000, @@ -199,7 +199,7 @@ static uint32_t vce_bs_buffer[5] = { 0x00154000, }; -static uint32_t vce_aux_buffer[18] = { +static const uint32_t vce_aux_buffer[] = { 0x00000048, 0x05000002, 0x0000f000, @@ -311,7 +311,7 @@ static uint32_t vce_encode[88] = { 0x00000000, }; -static uint32_t vce_destroy[2] = { +static const uint32_t vce_destroy[] = { 0x00000008, 0x02000001, }; diff --git a/lib/libdrm/tests/modetest/cursor.c b/lib/libdrm/tests/modetest/cursor.c index 62a50efb3..d8a19bd22 100644 --- a/lib/libdrm/tests/modetest/cursor.c +++ b/lib/libdrm/tests/modetest/cursor.c @@ -70,7 +70,7 @@ static int cursor_running; */ struct cursor_step { - void (*run)(struct cursor *cursor, struct cursor_step *step); + void (*run)(struct cursor *cursor, const struct cursor_step *step); uint32_t msec; uint32_t repeat; int arg; @@ -78,7 +78,7 @@ struct cursor_step { static uint32_t indx, count; -static void set_cursor(struct cursor *cursor, struct cursor_step *step) +static void set_cursor(struct cursor *cursor, const struct cursor_step *step) { int enabled = (step->arg ^ count) & 0x1; uint32_t handle = 0; @@ -91,7 +91,7 @@ static void set_cursor(struct cursor *cursor, struct cursor_step *step) drmModeSetCursor(cursor->fd, cursor->crtc_id, handle, cursor->w, cursor->h); } -static void move_cursor(struct cursor *cursor, struct cursor_step *step) +static void move_cursor(struct cursor *cursor, const struct cursor_step *step) { int x = cursor->x; int y = cursor->y; @@ -126,7 +126,7 @@ static void move_cursor(struct cursor *cursor, struct cursor_step *step) drmModeMoveCursor(cursor->fd, cursor->crtc_id, x, y); } -static struct cursor_step steps[] = { +static const struct cursor_step steps[] = { { set_cursor, 10, 0, 1 }, /* enable */ { move_cursor, 1, 100, 1 }, { move_cursor, 1, 10, 10 }, @@ -145,7 +145,7 @@ static struct cursor_step steps[] = { static void *cursor_thread_func(void *data) { while (cursor_running) { - struct cursor_step *step = &steps[indx % ARRAY_SIZE(steps)]; + const struct cursor_step *step = &steps[indx % ARRAY_SIZE(steps)]; int i; for (i = 0; i < ncursors; i++) { diff --git a/lib/libdrm/tests/modetest/modetest.c b/lib/libdrm/tests/modetest/modetest.c index 64bee1d69..3b01918d1 100644 --- a/lib/libdrm/tests/modetest/modetest.c +++ b/lib/libdrm/tests/modetest/modetest.c @@ -589,7 +589,6 @@ static struct resources *get_resources(struct device *dev) #define get_resource(_res, __res, type, Type) \ do { \ - int i; \ for (i = 0; i < (int)(_res)->__res->count_##type##s; ++i) { \ (_res)->type##s[i].type = \ drmModeGet##Type(dev->fd, (_res)->__res->type##s[i]); \ @@ -616,7 +615,6 @@ static struct resources *get_resources(struct device *dev) #define get_properties(_res, __res, type, Type) \ do { \ - int i; \ for (i = 0; i < (int)(_res)->__res->count_##type##s; ++i) { \ struct type *obj = &res->type##s[i]; \ unsigned int j; \ @@ -1281,7 +1279,7 @@ static void test_page_flip(struct device *dev, struct pipe_arg *pipes, unsigned evctx.version = DRM_EVENT_CONTEXT_VERSION; evctx.vblank_handler = NULL; evctx.page_flip_handler = page_flip_handler; - + while (1) { #if 0 struct pollfd pfd[2]; @@ -1301,7 +1299,6 @@ static void test_page_flip(struct device *dev, struct pipe_arg *pipes, unsigned #else struct timeval timeout = { .tv_sec = 3, .tv_usec = 0 }; fd_set fds; - int ret; FD_ZERO(&fds); FD_SET(0, &fds); @@ -1627,7 +1624,7 @@ int main(int argc, char **argv) if (parse_connector(&pipe_args[count], optarg) < 0) usage(argv[0]); - count++; + count++; break; case 'C': test_cursor = 1; diff --git a/lib/libdrm/tests/vbltest/vbltest.c b/lib/libdrm/tests/vbltest/vbltest.c index 4200adbe6..e27f45c1b 100644 --- a/lib/libdrm/tests/vbltest/vbltest.c +++ b/lib/libdrm/tests/vbltest/vbltest.c @@ -177,7 +177,6 @@ int main(int argc, char **argv) while (1) { struct timeval timeout = { .tv_sec = 3, .tv_usec = 0 }; fd_set fds; - int ret; FD_ZERO(&fds); FD_SET(0, &fds); |