Fix up conflicts for DRI2 (untested)

main
Alan Hourihane 2008-02-19 15:17:24 +00:00
parent f24ed2ad6c
commit 8caf6e9571
3 changed files with 21 additions and 36 deletions

View File

@ -94,7 +94,7 @@ static void i915_fence_flush(struct drm_device *dev,
static void i915_fence_poll(struct drm_device *dev, uint32_t fence_class, static void i915_fence_poll(struct drm_device *dev, uint32_t fence_class,
uint32_t waiting_types) uint32_t waiting_types)
{ {
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; struct drm_i915_private *dev_priv = (struct drm_i915_private *) dev->dev_private;
struct drm_fence_manager *fm = &dev->fm; struct drm_fence_manager *fm = &dev->fm;
struct drm_fence_class_manager *fc = &fm->fence_class[0]; struct drm_fence_class_manager *fc = &fm->fence_class[0];
uint32_t sequence; uint32_t sequence;
@ -147,7 +147,7 @@ static int i915_fence_emit_sequence(struct drm_device *dev, uint32_t class,
uint32_t flags, uint32_t *sequence, uint32_t flags, uint32_t *sequence,
uint32_t *native_type) uint32_t *native_type)
{ {
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; struct drm_i915_private *dev_priv = (struct drm_i915_private *) dev->dev_private;
if (unlikely(!dev_priv)) if (unlikely(!dev_priv))
return -EINVAL; return -EINVAL;
@ -179,7 +179,7 @@ static int i915_fence_wait(struct drm_fence_object *fence,
int lazy, int interruptible, uint32_t mask) int lazy, int interruptible, uint32_t mask)
{ {
struct drm_device *dev = fence->dev; struct drm_device *dev = fence->dev;
drm_i915_private_t *dev_priv = (struct drm_i915_private *) dev->dev_private; struct drm_i915_private *dev_priv = (struct drm_i915_private *) dev->dev_private;
struct drm_fence_manager *fm = &dev->fm; struct drm_fence_manager *fm = &dev->fm;
struct drm_fence_class_manager *fc = &fm->fence_class[0]; struct drm_fence_class_manager *fc = &fm->fence_class[0];
int ret; int ret;

View File

@ -101,7 +101,7 @@ setup_dri2_sarea(struct drm_device * dev,
struct drm_file *file_priv, struct drm_file *file_priv,
drm_i915_init_t * init) drm_i915_init_t * init)
{ {
drm_i915_private_t *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
int ret; int ret;
unsigned int *p, *end, *next; unsigned int *p, *end, *next;
@ -129,8 +129,8 @@ setup_dri2_sarea(struct drm_device * dev,
while (p < end && DRI2_SAREA_BLOCK_TYPE(*p) != DRI2_SAREA_BLOCK_END) { while (p < end && DRI2_SAREA_BLOCK_TYPE(*p) != DRI2_SAREA_BLOCK_END) {
switch (DRI2_SAREA_BLOCK_TYPE(*p)) { switch (DRI2_SAREA_BLOCK_TYPE(*p)) {
case DRI2_SAREA_BLOCK_LOCK: case DRI2_SAREA_BLOCK_LOCK:
dev->lock.hw_lock = (void *) (p + 1); dev->primary->master->lock.hw_lock = (void *) (p + 1);
dev->sigdata.lock = dev->lock.hw_lock; dev->sigdata.lock = dev->primary->master->lock.hw_lock;
break; break;
} }
next = DRI2_SAREA_BLOCK_NEXT(p); next = DRI2_SAREA_BLOCK_NEXT(p);
@ -152,6 +152,7 @@ static int i915_initialize(struct drm_device * dev,
{ {
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv; struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
dev_priv->mmio_map = drm_core_findmap(dev, init->mmio_offset); dev_priv->mmio_map = drm_core_findmap(dev, init->mmio_offset);
if (!dev_priv->mmio_map) { if (!dev_priv->mmio_map) {
i915_dma_cleanup(dev); i915_dma_cleanup(dev);
@ -228,14 +229,13 @@ static int i915_initialize(struct drm_device * dev,
#endif #endif
if (init->func == I915_INIT_DMA2) { if (init->func == I915_INIT_DMA2) {
ret = setup_dri2_sarea(dev, file_priv, init); int ret = setup_dri2_sarea(dev, file_priv, init);
if (ret) { if (ret) {
i915_dma_cleanup(dev); i915_dma_cleanup(dev);
DRM_ERROR("could not set up dri2 sarea\n"); DRM_ERROR("could not set up dri2 sarea\n");
return ret; return ret;
} }
} }
return 0; return 0;
} }
@ -1390,34 +1390,6 @@ static int i915_set_status_page(struct drm_device *dev, void *data,
return 0; return 0;
} }
#if 0 /* FIXME DRI2 */
void i915_driver_lastclose(struct drm_device * dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;
if (drm_getsarea(dev) && dev_priv->sarea_priv)
i915_do_cleanup_pageflip(dev);
if (dev_priv->agp_heap)
i915_mem_takedown(&(dev_priv->agp_heap));
if (dev_priv->sarea_kmap.virtual) {
drm_bo_kunmap(&dev_priv->sarea_kmap);
dev_priv->sarea_kmap.virtual = NULL;
dev->lock.hw_lock = NULL;
dev->sigdata.lock = NULL;
}
if (dev_priv->sarea_bo) {
mutex_lock(&dev->struct_mutex);
drm_bo_usage_deref_locked(&dev_priv->sarea_bo);
mutex_unlock(&dev->struct_mutex);
dev_priv->sarea_bo = NULL;
}
i915_dma_cleanup(dev);
}
#endif
struct drm_ioctl_desc i915_ioctls[] = { struct drm_ioctl_desc i915_ioctls[] = {
DRM_IOCTL_DEF(DRM_I915_INIT, i915_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), DRM_IOCTL_DEF(DRM_I915_INIT, i915_dma_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
DRM_IOCTL_DEF(DRM_I915_FLUSH, i915_flush_ioctl, DRM_AUTH), DRM_IOCTL_DEF(DRM_I915_FLUSH, i915_flush_ioctl, DRM_AUTH),

View File

@ -269,6 +269,19 @@ int i915_driver_unload(struct drm_device *dev)
drm_core_ioremapfree(&dev_priv->ring.map, dev); drm_core_ioremapfree(&dev_priv->ring.map, dev);
} }
#endif #endif
if (dev_priv->sarea_kmap.virtual) {
drm_bo_kunmap(&dev_priv->sarea_kmap);
dev_priv->sarea_kmap.virtual = NULL;
dev->primary->master->lock.hw_lock = NULL;
dev->sigdata.lock = NULL;
}
if (dev_priv->sarea_bo) {
mutex_lock(&dev->struct_mutex);
drm_bo_usage_deref_locked(&dev_priv->sarea_bo);
mutex_unlock(&dev->struct_mutex);
dev_priv->sarea_bo = NULL;
}
if (dev_priv->status_page_dmah) { if (dev_priv->status_page_dmah) {
drm_pci_free(dev, dev_priv->status_page_dmah); drm_pci_free(dev, dev_priv->status_page_dmah);