xref: /aosp_15_r20/external/mesa3d/src/gallium/winsys/i915/drm/i915_drm_winsys.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 #include <stdio.h>
2 #include <sys/ioctl.h>
3 
4 #include "drm-uapi/i915_drm.h"
5 
6 #include "frontend/drm_driver.h"
7 
8 #include "i915_drm_winsys.h"
9 #include "i915_drm_public.h"
10 #include "util/u_memory.h"
11 
12 #include "intel/common/intel_gem.h"
13 
14 /*
15  * Helper functions
16  */
17 
18 
19 static void
i915_drm_get_device_id(int fd,unsigned int * device_id)20 i915_drm_get_device_id(int fd, unsigned int *device_id)
21 {
22    ASSERTED bool ret = intel_gem_get_param(fd, I915_PARAM_CHIPSET_ID, (int *)device_id);
23    assert(ret);
24 }
25 
26 static int
i915_drm_aperture_size(struct i915_winsys * iws)27 i915_drm_aperture_size(struct i915_winsys *iws)
28 {
29    struct i915_drm_winsys *idws = i915_drm_winsys(iws);
30    size_t aper_size, mappable_size;
31 
32    drm_intel_get_aperture_sizes(idws->fd, &mappable_size, &aper_size);
33 
34    return aper_size >> 20;
35 }
36 
37 static void
i915_drm_winsys_destroy(struct i915_winsys * iws)38 i915_drm_winsys_destroy(struct i915_winsys *iws)
39 {
40    struct i915_drm_winsys *idws = i915_drm_winsys(iws);
41 
42    drm_intel_bufmgr_destroy(idws->gem_manager);
43 
44    FREE(idws);
45 }
46 
47 static int
i915_drm_winsys_get_fd(struct i915_winsys * iws)48 i915_drm_winsys_get_fd(struct i915_winsys *iws)
49 {
50    struct i915_drm_winsys *idws = i915_drm_winsys(iws);
51 
52    return idws->fd;
53 }
54 
55 struct i915_winsys *
i915_drm_winsys_create(int drmFD)56 i915_drm_winsys_create(int drmFD)
57 {
58    struct i915_drm_winsys *idws;
59    unsigned int deviceID = 0;
60 
61    idws = CALLOC_STRUCT(i915_drm_winsys);
62    if (!idws)
63       return NULL;
64 
65    i915_drm_get_device_id(drmFD, &deviceID);
66 
67    i915_drm_winsys_init_batchbuffer_functions(idws);
68    i915_drm_winsys_init_buffer_functions(idws);
69    i915_drm_winsys_init_fence_functions(idws);
70 
71    idws->fd = drmFD;
72    idws->base.pci_id = deviceID;
73    idws->max_batch_size = 1 * 4096;
74 
75    idws->base.aperture_size = i915_drm_aperture_size;
76    idws->base.destroy = i915_drm_winsys_destroy;
77    idws->base.get_fd = i915_drm_winsys_get_fd;
78 
79    idws->gem_manager = drm_intel_bufmgr_gem_init(idws->fd, idws->max_batch_size);
80    drm_intel_bufmgr_gem_enable_reuse(idws->gem_manager);
81    drm_intel_bufmgr_gem_enable_fenced_relocs(idws->gem_manager);
82 
83    idws->dump_cmd = debug_get_bool_option("I915_DUMP_CMD", false);
84    idws->dump_raw_file = debug_get_option("I915_DUMP_RAW_FILE", NULL);
85    idws->send_cmd = !debug_get_bool_option("I915_NO_HW", false);
86 
87    return &idws->base;
88 }
89