intel: add support for xglPinSystemMemory()

The updated kmd supports intel_winsys_import_userptr() for pinning.
diff --git a/icd/intel/mem.c b/icd/intel/mem.c
index 91b0cef..7feddc3 100644
--- a/icd/intel/mem.c
+++ b/icd/intel/mem.c
@@ -62,6 +62,36 @@
     intel_base_destroy(&mem->base);
 }
 
+XGL_RESULT intel_mem_import_userptr(struct intel_dev *dev,
+                                    const void *userptr,
+                                    size_t size,
+                                    struct intel_mem **mem_ret)
+{
+    const size_t alignment = 4096;
+    struct intel_mem *mem;
+
+    if ((uintptr_t) userptr % alignment || size % alignment)
+        return XGL_ERROR_INVALID_ALIGNMENT;
+
+    mem = (struct intel_mem *) intel_base_create(&dev->base.handle,
+            sizeof(*mem), dev->base.dbg, XGL_DBG_OBJECT_GPU_MEMORY, NULL, 0);
+    if (!mem)
+        return XGL_ERROR_OUT_OF_MEMORY;
+
+    mem->bo = intel_winsys_import_userptr(dev->winsys,
+            "xgl-gpu-memory-userptr", (void *) userptr, size, 0);
+    if (!mem->bo) {
+        intel_mem_free(mem);
+        return XGL_ERROR_UNKNOWN;
+    }
+
+    mem->size = size;
+
+    *mem_ret = mem;
+
+    return XGL_SUCCESS;
+}
+
 XGL_RESULT intel_mem_set_priority(struct intel_mem *mem,
                                   XGL_MEMORY_PRIORITY priority)
 {
@@ -127,8 +157,10 @@
     size_t                                      memSize,
     XGL_GPU_MEMORY*                             pMem)
 {
-    /* add DRM_I915_GEM_USERPTR to wisys first */
-    return XGL_ERROR_UNAVAILABLE;
+    struct intel_dev *dev = intel_dev(device);
+
+    return intel_mem_import_userptr(dev, pSysMem, memSize,
+            (struct intel_mem **) pMem);
 }
 
 ICD_EXPORT XGL_RESULT XGLAPI xglOpenSharedMemory(