drm/i915: Add a CMD_PARSER_VERSION getparam
authorBrad Volkin <bradley.d.volkin@intel.com>
Tue, 18 Feb 2014 18:15:56 +0000 (10:15 -0800)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 1 Apr 2014 20:58:15 +0000 (22:58 +0200)
So userspace can query the kernel for command parser support.

v2: Add i915_cmd_parser_get_version(), history log, and kerneldoc

OTC-Tracker: AXIA-4631
Change-Id: I58af650db9f6753c2dcac9c54ab432fd31db302f
Signed-off-by: Brad Volkin <bradley.d.volkin@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_cmd_parser.c
drivers/gpu/drm/i915/i915_dma.c
drivers/gpu/drm/i915/i915_drv.h
include/uapi/drm/i915_drm.h

index a8f00dbc0dde81a1c206bc28620b0a75a3245f54..bae7c2f336929c3bd37f3ab5b909fc0db3f2e6c9 100644 (file)
@@ -896,3 +896,22 @@ int i915_parse_cmds(struct intel_ring_buffer *ring,
 
        return ret;
 }
+
+/**
+ * i915_cmd_parser_get_version() - get the cmd parser version number
+ *
+ * The cmd parser maintains a simple increasing integer version number suitable
+ * for passing to userspace clients to determine what operations are permitted.
+ *
+ * Return: the current version number of the cmd parser
+ */
+int i915_cmd_parser_get_version(void)
+{
+       /*
+        * Command parser version history
+        *
+        * 1. Initial version. Checks batches and reports violations, but leaves
+        *    hardware parsing enabled (so does not allow new use cases).
+        */
+       return 1;
+}
index 96177eec0a0eb9a879493a54c79b3613f0bb9b34..0b38f88c35f07ebcc13ef426f7513d96adb6a822 100644 (file)
@@ -1017,6 +1017,9 @@ static int i915_getparam(struct drm_device *dev, void *data,
        case I915_PARAM_HAS_EXEC_HANDLE_LUT:
                value = 1;
                break;
+       case I915_PARAM_CMD_PARSER_VERSION:
+               value = i915_cmd_parser_get_version();
+               break;
        default:
                DRM_DEBUG("Unknown parameter %d\n", param->param);
                return -EINVAL;
index 8e1576cf6d6386820c62ba441885e1072802d7c2..0801e157a7ffa92e21bb81012700a8850be9f7e0 100644 (file)
@@ -2385,6 +2385,7 @@ void i915_get_extra_instdone(struct drm_device *dev, uint32_t *instdone);
 const char *i915_cache_level_str(int type);
 
 /* i915_cmd_parser.c */
+int i915_cmd_parser_get_version(void);
 void i915_cmd_parser_init_ring(struct intel_ring_buffer *ring);
 bool i915_needs_cmd_parser(struct intel_ring_buffer *ring);
 int i915_parse_cmds(struct intel_ring_buffer *ring,
index 126bfaa8bb6be45caf723889c077673da8c992f4..8a3e4ef00c3db418b832a709ca3a3a9eb6c1668b 100644 (file)
@@ -337,6 +337,7 @@ typedef struct drm_i915_irq_wait {
 #define I915_PARAM_HAS_EXEC_NO_RELOC    25
 #define I915_PARAM_HAS_EXEC_HANDLE_LUT   26
 #define I915_PARAM_HAS_WT               27
+#define I915_PARAM_CMD_PARSER_VERSION   28
 
 typedef struct drm_i915_getparam {
        int param;