From 9d77603d8b95aee4f2408e437c55af15ee05b608 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sat, 4 Jun 2011 12:47:19 +0100 Subject: intel: Add interface to query aperture sizes. Signed-off-by: Chris Wilson --- configure.ac | 4 ++++ intel/Makefile.am | 3 ++- intel/intel_bufmgr.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ intel/intel_bufmgr.h | 2 ++ 4 files changed, 58 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index d9c826d8..e776ef57 100644 --- a/configure.ac +++ b/configure.ac @@ -51,6 +51,10 @@ PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs) AC_SUBST(PTHREADSTUBS_CFLAGS) AC_SUBST(PTHREADSTUBS_LIBS) +PKG_CHECK_MODULES(PCIACCESS, [pciaccess >= 0.10]) +AC_SUBST(PCIACCESS_CFLAGS) +AC_SUBST(PCIACCESS_LIBS) + pkgconfigdir=${libdir}/pkgconfig AC_SUBST(pkgconfigdir) AC_ARG_ENABLE([udev], 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 #include #include +#include #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, -- cgit v1.2.3