Android: move libdrm settings to top-level Android.common.mk
[mesa.git] / src / gallium / winsys / i915 / drm / i915_drm_winsys.c
index 179a84a704b6788440b4cae253ed3952709f6bb8..d4a2e013ae6e35abef4a76b0632e849f0839127e 100644 (file)
@@ -1,4 +1,7 @@
 #include <stdio.h>
+#include <sys/ioctl.h>
+
+#include "i915_drm.h"
 
 #include "state_tracker/drm_driver.h"
 
 
 
 static void
-i915_drm_get_device_id(unsigned int *device_id)
+i915_drm_get_device_id(int fd, unsigned int *device_id)
 {
-   char path[512];
-   FILE *file;
-   void *shutup_gcc;
-
-   /*
-    * FIXME: Fix this up to use a drm ioctl or whatever.
-    */
-
-   snprintf(path, sizeof(path), "/sys/class/drm/card0/device/device");
-   file = fopen(path, "r");
-   if (!file) {
-      return;
-   }
-
-   shutup_gcc = fgets(path, sizeof(path), file);
-   (void) shutup_gcc;
-   sscanf(path, "%x", device_id);
-   fclose(file);
+   int ret;
+   struct drm_i915_getparam gp;
+
+   gp.param = I915_PARAM_CHIPSET_ID;
+   gp.value = (int *)device_id;
+
+   ret = ioctl(fd, DRM_IOCTL_I915_GETPARAM, &gp, sizeof(gp));
+   assert(ret == 0);
+}
+
+static int
+i915_drm_aperture_size(struct i915_winsys *iws)
+{
+   struct i915_drm_winsys *idws = i915_drm_winsys(iws);
+   size_t aper_size, mappable_size;
+
+   drm_intel_get_aperture_sizes(idws->fd, &mappable_size, &aper_size);
+
+   return aper_size >> 20;
 }
 
 static void
@@ -40,7 +44,7 @@ i915_drm_winsys_destroy(struct i915_winsys *iws)
 {
    struct i915_drm_winsys *idws = i915_drm_winsys(iws);
 
-   drm_intel_bufmgr_destroy(idws->pools.gem);
+   drm_intel_bufmgr_destroy(idws->gem_manager);
 
    FREE(idws);
 }
@@ -55,7 +59,7 @@ i915_drm_winsys_create(int drmFD)
    if (!idws)
       return NULL;
 
-   i915_drm_get_device_id(&deviceID);
+   i915_drm_get_device_id(drmFD, &deviceID);
 
    i915_drm_winsys_init_batchbuffer_functions(idws);
    i915_drm_winsys_init_buffer_functions(idws);
@@ -63,14 +67,17 @@ i915_drm_winsys_create(int drmFD)
 
    idws->fd = drmFD;
    idws->base.pci_id = deviceID;
-   idws->max_batch_size = 16 * 4096;
+   idws->max_batch_size = 1 * 4096;
 
+   idws->base.aperture_size = i915_drm_aperture_size;
    idws->base.destroy = i915_drm_winsys_destroy;
 
-   idws->pools.gem = drm_intel_bufmgr_gem_init(idws->fd, idws->max_batch_size);
-   drm_intel_bufmgr_gem_enable_reuse(idws->pools.gem);
+   idws->gem_manager = drm_intel_bufmgr_gem_init(idws->fd, idws->max_batch_size);
+   drm_intel_bufmgr_gem_enable_reuse(idws->gem_manager);
+   drm_intel_bufmgr_gem_enable_fenced_relocs(idws->gem_manager);
 
    idws->dump_cmd = debug_get_bool_option("I915_DUMP_CMD", FALSE);
+   idws->dump_raw_file = debug_get_option("I915_DUMP_RAW_FILE", NULL);
    idws->send_cmd = !debug_get_bool_option("I915_NO_HW", FALSE);
 
    return &idws->base;