diff options
Diffstat (limited to 'intel')
-rw-r--r-- | intel/Makefile.am | 3 | ||||
-rw-r--r-- | intel/intel_bufmgr.c | 50 | ||||
-rw-r--r-- | intel/intel_bufmgr.h | 2 |
3 files changed, 54 insertions, 1 deletions
diff --git a/intel/Makefile.am b/intel/Makefile.am index 1ae92f86..b6a90143 100644 --- a/intel/Makefile.am +++ b/intel/Makefile.am @@ -27,12 +27,13 @@ AM_CFLAGS = \ -I$(top_srcdir) \ -I$(top_srcdir)/intel \ $(PTHREADSTUBS_CFLAGS) \ + $(PCIACCESS_CFLAGS) \ -I$(top_srcdir)/include/drm libdrm_intel_la_LTLIBRARIES = libdrm_intel.la libdrm_intel_ladir = $(libdir) libdrm_intel_la_LDFLAGS = -version-number 1:0:0 -no-undefined -libdrm_intel_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ @CLOCK_LIB@ +libdrm_intel_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ @PCIACCESS_LIBS@ @CLOCK_LIB@ libdrm_intel_la_SOURCES = \ intel_bufmgr.c \ diff --git a/intel/intel_bufmgr.c b/intel/intel_bufmgr.c index 2df93a58..ab574273 100644 --- a/intel/intel_bufmgr.c +++ b/intel/intel_bufmgr.c @@ -36,8 +36,10 @@ #include <errno.h> #include <drm.h> #include <i915_drm.h> +#include <pciaccess.h> #include "intel_bufmgr.h" #include "intel_bufmgr_priv.h" +#include "xf86drm.h" /** @file intel_bufmgr.c * @@ -269,3 +271,51 @@ int drm_intel_get_pipe_from_crtc_id(drm_intel_bufmgr *bufmgr, int crtc_id) return bufmgr->get_pipe_from_crtc_id(bufmgr, crtc_id); return -1; } + +static size_t +drm_intel_probe_agp_aperture_size(int fd) +{ + struct pci_device *pci_dev; + size_t size = 0; + int ret; + + ret = pci_system_init(); + if (ret) + goto err; + + /* XXX handle multiple adaptors? */ + pci_dev = pci_device_find_by_slot(0, 0, 2, 0); + if (pci_dev == NULL) + goto err; + + ret = pci_device_probe(pci_dev); + if (ret) + goto err; + + size = pci_dev->regions[2].size; +err: + pci_system_cleanup (); + return size; +} + +int drm_intel_get_aperture_sizes(int fd, + size_t *mappable, + size_t *total) +{ + + struct drm_i915_gem_get_aperture aperture; + int ret; + + ret = drmIoctl(fd, DRM_IOCTL_I915_GEM_GET_APERTURE, &aperture); + if (ret) + return ret; + + *mappable = 0; + /* XXX add a query for the kernel value? */ + if (*mappable == 0) + *mappable = drm_intel_probe_agp_aperture_size(fd); + if (*mappable == 0) + *mappable = 64 * 1024 * 1024; /* minimum possible value */ + *total = aperture.aper_size; + return 0; +} diff --git a/intel/intel_bufmgr.h b/intel/intel_bufmgr.h index daa18b4c..889ef46c 100644 --- a/intel/intel_bufmgr.h +++ b/intel/intel_bufmgr.h @@ -151,6 +151,8 @@ void drm_intel_gem_bo_start_gtt_access(drm_intel_bo *bo, int write_enable); int drm_intel_get_pipe_from_crtc_id(drm_intel_bufmgr *bufmgr, int crtc_id); +int drm_intel_get_aperture_sizes(int fd, size_t *mappable, size_t *total); + /* drm_intel_bufmgr_fake.c */ drm_intel_bufmgr *drm_intel_bufmgr_fake_init(int fd, unsigned long low_offset, |