#include <stdint.h>
+#include "util/u_debug.h"
+
struct fd_bo;
struct fd_pipe;
struct fd_device;
enum fd_param_id {
FD_DEVICE_ID,
FD_GMEM_SIZE,
+ FD_GMEM_BASE,
FD_GPU_ID,
FD_CHIP_ID,
FD_MAX_FREQ,
FD_TIMESTAMP,
FD_NR_RINGS, /* # of rings == # of distinct priority levels */
+ FD_PP_PGTABLE, /* are per-process pagetables used for the pipe/ctx */
+ FD_CTX_FAULTS, /* # of per context faults */
+ FD_GLOBAL_FAULTS, /* # of global (all context) faults */
};
/* bo flags: */
FD_VERSION_MADVISE = 1, /* kernel supports madvise */
FD_VERSION_UNLIMITED_CMDS = 1, /* submits w/ >4 cmd buffers (growable ringbuffer) */
FD_VERSION_FENCE_FD = 2, /* submit command supports in/out fences */
+ FD_VERSION_GMEM_BASE = 3, /* supports querying GMEM base address */
FD_VERSION_SUBMIT_QUEUES = 3, /* submit queues and multiple priority levels */
FD_VERSION_BO_IOVA = 3, /* supports fd_bo_get/put_iova() */
+ FD_VERSION_SOFTPIN = 4, /* adds softpin, bo name, and dump flag */
+ FD_VERSION_ROBUSTNESS = 5, /* adds FD_NR_FAULTS and FD_PP_PGTABLE */
+ FD_VERSION_MEMORY_FD = 2, /* supports shared memory objects */
};
enum fd_version fd_device_version(struct fd_device *dev);
/* buffer-object functions:
*/
-struct fd_bo * fd_bo_new(struct fd_device *dev,
+struct fd_bo * _fd_bo_new(struct fd_device *dev,
uint32_t size, uint32_t flags);
+void _fd_bo_set_name(struct fd_bo *bo, const char *fmt, va_list ap);
+
+static inline void
+fd_bo_set_name(struct fd_bo *bo, const char *fmt, ...) _util_printf_format(2, 3);
+
+static inline void
+fd_bo_set_name(struct fd_bo *bo, const char *fmt, ...)
+{
+#ifndef NDEBUG
+ va_list ap;
+ va_start(ap, fmt);
+ _fd_bo_set_name(bo, fmt, ap);
+ va_end(ap);
+#endif
+}
+
+static inline struct fd_bo *
+fd_bo_new(struct fd_device *dev, uint32_t size, uint32_t flags,
+ const char *fmt, ...) _util_printf_format(4, 5);
+
+static inline struct fd_bo *
+fd_bo_new(struct fd_device *dev, uint32_t size, uint32_t flags,
+ const char *fmt, ...)
+{
+ struct fd_bo *bo = _fd_bo_new(dev, size, flags);
+#ifndef NDEBUG
+ if (fmt) {
+ va_list ap;
+ va_start(ap, fmt);
+ _fd_bo_set_name(bo, fmt, ap);
+ va_end(ap);
+ }
+#endif
+ return bo;
+}
+
struct fd_bo *fd_bo_from_handle(struct fd_device *dev,
uint32_t handle, uint32_t size);
struct fd_bo * fd_bo_from_name(struct fd_device *dev, uint32_t name);
struct fd_bo * fd_bo_from_dmabuf(struct fd_device *dev, int fd);
+void fd_bo_mark_for_dump(struct fd_bo *bo);
uint64_t fd_bo_get_iova(struct fd_bo *bo);
-void fd_bo_put_iova(struct fd_bo *bo);
struct fd_bo * fd_bo_ref(struct fd_bo *bo);
void fd_bo_del(struct fd_bo *bo);
int fd_bo_get_name(struct fd_bo *bo, uint32_t *name);