Merge branch 'drm-next' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6

* 'drm-next' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
i915: Add GEM ioctl to get available aperture size.
drm/radeon: fixup further bus mastering confusion.
build fix: CONFIG_DRM_I915=y && CONFIG_ACPI=n

+61 -14
+2 -1
drivers/gpu/drm/i915/Makefile
··· 3 3 # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. 4 4 5 5 ccflags-y := -Iinclude/drm 6 - i915-y := i915_drv.o i915_dma.o i915_irq.o i915_mem.o i915_opregion.o \ 6 + i915-y := i915_drv.o i915_dma.o i915_irq.o i915_mem.o \ 7 7 i915_suspend.o \ 8 8 i915_gem.o \ 9 9 i915_gem_debug.o \ 10 10 i915_gem_proc.o \ 11 11 i915_gem_tiling.o 12 12 13 + i915-$(CONFIG_ACPI) += i915_opregion.o 13 14 i915-$(CONFIG_COMPAT) += i915_ioc32.o 14 15 15 16 obj-$(CONFIG_DRM_I915) += i915.o
+1
drivers/gpu/drm/i915/i915_dma.c
··· 960 960 DRM_IOCTL_DEF(DRM_I915_GEM_SW_FINISH, i915_gem_sw_finish_ioctl, 0), 961 961 DRM_IOCTL_DEF(DRM_I915_GEM_SET_TILING, i915_gem_set_tiling, 0), 962 962 DRM_IOCTL_DEF(DRM_I915_GEM_GET_TILING, i915_gem_get_tiling, 0), 963 + DRM_IOCTL_DEF(DRM_I915_GEM_GET_APERTURE, i915_gem_get_aperture_ioctl, 0), 963 964 }; 964 965 965 966 int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls);
+9
drivers/gpu/drm/i915/i915_drv.h
··· 502 502 struct drm_file *file_priv); 503 503 int i915_gem_get_tiling(struct drm_device *dev, void *data, 504 504 struct drm_file *file_priv); 505 + int i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data, 506 + struct drm_file *file_priv); 505 507 void i915_gem_load(struct drm_device *dev); 506 508 int i915_gem_proc_init(struct drm_minor *minor); 507 509 void i915_gem_proc_cleanup(struct drm_minor *minor); ··· 541 539 extern int i915_save_state(struct drm_device *dev); 542 540 extern int i915_restore_state(struct drm_device *dev); 543 541 542 + #ifdef CONFIG_ACPI 544 543 /* i915_opregion.c */ 545 544 extern int intel_opregion_init(struct drm_device *dev); 546 545 extern void intel_opregion_free(struct drm_device *dev); 547 546 extern void opregion_asle_intr(struct drm_device *dev); 548 547 extern void opregion_enable_asle(struct drm_device *dev); 548 + #else 549 + static inline int intel_opregion_init(struct drm_device *dev) { return 0; } 550 + static inline void intel_opregion_free(struct drm_device *dev) { return; } 551 + static inline void opregion_asle_intr(struct drm_device *dev) { return; } 552 + static inline void opregion_enable_asle(struct drm_device *dev) { return; } 553 + #endif 549 554 550 555 /** 551 556 * Lock test for when it's just for synchronization of ring access.
+22
drivers/gpu/drm/i915/i915_gem.c
··· 79 79 return 0; 80 80 } 81 81 82 + int 83 + i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data, 84 + struct drm_file *file_priv) 85 + { 86 + drm_i915_private_t *dev_priv = dev->dev_private; 87 + struct drm_i915_gem_get_aperture *args = data; 88 + struct drm_i915_gem_object *obj_priv; 89 + 90 + if (!(dev->driver->driver_features & DRIVER_GEM)) 91 + return -ENODEV; 92 + 93 + args->aper_size = dev->gtt_total; 94 + args->aper_available_size = args->aper_size; 95 + 96 + list_for_each_entry(obj_priv, &dev_priv->mm.active_list, list) { 97 + if (obj_priv->pin_count > 0) 98 + args->aper_available_size -= obj_priv->obj->size; 99 + } 100 + 101 + return 0; 102 + } 103 + 82 104 83 105 /** 84 106 * Creates a new mm object and returns a handle to it.
+8 -7
drivers/gpu/drm/radeon/radeon_cp.c
··· 653 653 RADEON_WRITE(RADEON_SCRATCH_UMSK, 0x7); 654 654 655 655 /* Turn on bus mastering */ 656 - if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS400) || 657 - ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) || 656 + if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) || 658 657 ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS740)) { 659 - /* rs400, rs690/rs740 */ 660 - tmp = RADEON_READ(RADEON_BUS_CNTL) & ~RS400_BUS_MASTER_DIS; 658 + /* rs600/rs690/rs740 */ 659 + tmp = RADEON_READ(RADEON_BUS_CNTL) & ~RS600_BUS_MASTER_DIS; 661 660 RADEON_WRITE(RADEON_BUS_CNTL, tmp); 662 - } else if (!(((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV380) || 663 - ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R423))) { 664 - /* r1xx, r2xx, r300, r(v)350, r420/r481, rs480 */ 661 + } else if (((dev_priv->flags & RADEON_FAMILY_MASK) <= CHIP_RV350) || 662 + ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R420) || 663 + ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS400) || 664 + ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS480)) { 665 + /* r1xx, r2xx, r300, r(v)350, r420/r481, rs400/rs480 */ 665 666 tmp = RADEON_READ(RADEON_BUS_CNTL) & ~RADEON_BUS_MASTER_DIS; 666 667 RADEON_WRITE(RADEON_BUS_CNTL, tmp); 667 668 } /* PCIE cards appears to not need this */
+6 -6
drivers/gpu/drm/radeon/radeon_drv.h
··· 447 447 * handling, not bus mastering itself. 448 448 */ 449 449 #define RADEON_BUS_CNTL 0x0030 450 - /* r1xx, r2xx, r300, r(v)350, r420/r481, rs480 */ 450 + /* r1xx, r2xx, r300, r(v)350, r420/r481, rs400/rs480 */ 451 451 # define RADEON_BUS_MASTER_DIS (1 << 6) 452 - /* rs400, rs690/rs740 */ 453 - # define RS400_BUS_MASTER_DIS (1 << 14) 454 - # define RS400_MSI_REARM (1 << 20) 455 - /* see RS480_MSI_REARM in AIC_CNTL for rs480 */ 452 + /* rs600/rs690/rs740 */ 453 + # define RS600_BUS_MASTER_DIS (1 << 14) 454 + # define RS600_MSI_REARM (1 << 20) 455 + /* see RS400_MSI_REARM in AIC_CNTL for rs480 */ 456 456 457 457 #define RADEON_BUS_CNTL1 0x0034 458 458 # define RADEON_PMI_BM_DIS (1 << 2) ··· 937 937 938 938 #define RADEON_AIC_CNTL 0x01d0 939 939 # define RADEON_PCIGART_TRANSLATE_EN (1 << 0) 940 - # define RS480_MSI_REARM (1 << 3) 940 + # define RS400_MSI_REARM (1 << 3) 941 941 #define RADEON_AIC_STAT 0x01d4 942 942 #define RADEON_AIC_PT_BASE 0x01d8 943 943 #define RADEON_AIC_LO_ADDR 0x01dc
+13
include/drm/i915_drm.h
··· 159 159 #define DRM_I915_GEM_SW_FINISH 0x20 160 160 #define DRM_I915_GEM_SET_TILING 0x21 161 161 #define DRM_I915_GEM_GET_TILING 0x22 162 + #define DRM_I915_GEM_GET_APERTURE 0x23 162 163 163 164 #define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t) 164 165 #define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) ··· 191 190 #define DRM_IOCTL_I915_GEM_SW_FINISH DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_SW_FINISH, struct drm_i915_gem_sw_finish) 192 191 #define DRM_IOCTL_I915_GEM_SET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_SET_TILING, struct drm_i915_gem_set_tiling) 193 192 #define DRM_IOCTL_I915_GEM_GET_TILING DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_TILING, struct drm_i915_gem_get_tiling) 193 + #define DRM_IOCTL_I915_GEM_GET_APERTURE DRM_IOR (DRM_COMMAND_BASE + DRM_I915_GEM_GET_APERTURE, struct drm_i915_gem_get_aperture) 194 194 195 195 /* Allow drivers to submit batchbuffers directly to hardware, relying 196 196 * on the security mechanisms provided by hardware. ··· 600 598 * mmap mapping. 601 599 */ 602 600 uint32_t swizzle_mode; 601 + }; 602 + 603 + struct drm_i915_gem_get_aperture { 604 + /** Total size of the aperture used by i915_gem_execbuffer, in bytes */ 605 + uint64_t aper_size; 606 + 607 + /** 608 + * Available space in the aperture used by i915_gem_execbuffer, in 609 + * bytes 610 + */ 611 + uint64_t aper_available_size; 603 612 }; 604 613 605 614 #endif /* _I915_DRM_H_ */