aboutsummaryrefslogtreecommitdiff
path: root/shared-core/amd.h
diff options
context:
space:
mode:
Diffstat (limited to 'shared-core/amd.h')
-rw-r--r--shared-core/amd.h57
1 files changed, 37 insertions, 20 deletions
diff --git a/shared-core/amd.h b/shared-core/amd.h
index 31cf3eff..f8096053 100644
--- a/shared-core/amd.h
+++ b/shared-core/amd.h
@@ -31,38 +31,55 @@
* around during command validation (ie check that user have the right to
* execute the given command).
*/
-struct amd_cbuffer_arg
+struct amd_cmd_bo
{
- struct list_head list;
- struct drm_buffer_object *buffer;
- int32_t dw_id;
+ struct list_head list;
+ uint64_t *offsets;
+ uint32_t *cdw_id;
+ struct drm_buffer_object *bo;
+ unsigned int handle;
+ uint64_t mask;
+ uint64_t flags;
+ uint32_t type;
};
-struct amd_cbuffer
+struct amd_cmd
{
- uint32_t *cbuffer;
- uint32_t cbuffer_dw_count;
- struct amd_cbuffer_arg arg_unused;
- struct amd_cbuffer_arg arg_used;
- struct amd_cbuffer_arg *args;
- void *driver;
+ uint32_t *cdw;
+ uint32_t cdw_count;
+ struct drm_bo_kmap_obj cdw_kmap;
+ size_t cdw_size;
+ struct amd_cmd_bo *cdw_bo;
+ struct amd_cmd_bo bo_unused;
+ struct amd_cmd_bo bo_used;
+ struct amd_cmd_bo *bo;
+ uint32_t bo_count;
+ void *driver;
};
-struct amd_cbuffer_checker
+struct amd_cmd_module
{
uint32_t numof_p0_checkers;
uint32_t numof_p3_checkers;
- int (*check)(struct drm_device *dev, struct amd_cbuffer *cbuffer);
- int (**check_p0)(struct drm_device *dev, struct amd_cbuffer *cbuffer,
- int dw_id, int reg);
- int (**check_p3)(struct drm_device *dev, struct amd_cbuffer *cbuffer,
- int dw_id, int op, int count);
+ int (*check)(struct drm_device *dev, struct amd_cmd *cmd);
+ int (**check_p0)(struct drm_device *dev, struct amd_cmd *cmd,
+ int cdw_id, int reg);
+ int (**check_p3)(struct drm_device *dev, struct amd_cmd *cmd,
+ int cdw_id, int op, int count);
};
-struct amd_cbuffer_arg *
-amd_cbuffer_arg_from_dw_id(struct amd_cbuffer_arg *head, uint32_t dw_id);
-int amd_cbuffer_check(struct drm_device *dev, struct amd_cbuffer *cbuffer);
+int amd_cmd_check(struct drm_device *dev, struct amd_cmd *cmd);
+int amd_ioctl_cmd(struct drm_device *dev, void *data, struct drm_file *file);
+static inline struct amd_cmd_bo *amd_cmd_get_bo(struct amd_cmd *cmd, int i)
+{
+ if (i < cmd->bo_count && cmd->bo[i].type == DRM_AMD_CMD_BO_TYPE_DATA) {
+ list_del(&cmd->bo[i].list);
+ list_add_tail(&cmd->bo[i].list, &cmd->bo_used.list);
+ return &cmd->bo[i];
+ }
+ return NULL;
+}
/* struct amd_fb amd is for storing amd framebuffer informations
*/