Revert last commit -- breaks i915.
This commit is contained in:
parent
3b59dc3936
commit
829081eaa7
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: drmP.h,v 1.21 2008/05/06 01:26:14 bjs Exp $ */
|
||||
/* $NetBSD: drmP.h,v 1.22 2008/05/06 01:45:47 bjs Exp $ */
|
||||
|
||||
/* drmP.h -- Private header for Direct Rendering Manager -*- linux-c -*-
|
||||
* Created: Mon Jan 4 10:05:05 1999 by faith@precisioninsight.com
|
||||
|
@ -1059,7 +1059,7 @@ void drm_vbl_send_signals(drm_device_t *dev);
|
|||
/* AGP/PCI Express/GART support (drm_agpsupport.c) */
|
||||
int drm_device_is_agp(drm_device_t *dev);
|
||||
int drm_device_is_pcie(drm_device_t *dev);
|
||||
drm_agp_head_t *drm_agp_init(drm_device_t *dev);
|
||||
drm_agp_head_t *drm_agp_init(void);
|
||||
int drm_agp_acquire(drm_device_t *dev);
|
||||
int drm_agp_release(drm_device_t *dev);
|
||||
int drm_agp_info(drm_device_t * dev, drm_agp_info_t *info);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: drm_irq.c,v 1.9 2008/05/06 01:26:14 bjs Exp $ */
|
||||
/* $NetBSD: drm_irq.c,v 1.10 2008/05/06 01:45:47 bjs Exp $ */
|
||||
|
||||
/* drm_irq.c -- IRQ IOCTL and function support
|
||||
* Created: Fri Oct 18 2003 by anholt@FreeBSD.org
|
||||
|
@ -31,7 +31,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: drm_irq.c,v 1.9 2008/05/06 01:26:14 bjs Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: drm_irq.c,v 1.10 2008/05/06 01:45:47 bjs Exp $");
|
||||
/*
|
||||
__FBSDID("$FreeBSD: src/sys/dev/drm/drm_irq.c,v 1.2 2005/11/28 23:13:52 anholt Exp $");
|
||||
*/
|
||||
|
@ -68,9 +68,9 @@ drm_irq_handler_wrap(DRM_IRQ_ARGS)
|
|||
irqreturn_t ret;
|
||||
drm_device_t *dev = (drm_device_t *)arg;
|
||||
|
||||
mutex_enter(&dev->irq_lock);
|
||||
DRM_SPINLOCK(&dev->irq_lock);
|
||||
ret = dev->driver.irq_handler(arg);
|
||||
mutex_exit(&dev->irq_lock);
|
||||
DRM_SPINUNLOCK(&dev->irq_lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -94,7 +94,7 @@ int drm_irq_install(drm_device_t *dev)
|
|||
|
||||
dev->context_flag = 0;
|
||||
|
||||
mutex_init(&dev->irq_lock, MUTEX_DEFAULT, IPL_VM);
|
||||
DRM_SPININIT(&dev->irq_lock, "DRM IRQ lock");
|
||||
|
||||
/* Before installing handler */
|
||||
|
||||
|
@ -107,7 +107,7 @@ int drm_irq_install(drm_device_t *dev)
|
|||
goto err;
|
||||
}
|
||||
istr = pci_intr_string(dev->pa.pa_pc, ih);
|
||||
dev->irqh = pci_intr_establish(dev->pa.pa_pc, ih, IPL_VM,
|
||||
dev->irqh = pci_intr_establish(dev->pa.pa_pc, ih, IPL_TTY,
|
||||
drm_irq_handler_wrap, dev);
|
||||
if (!dev->irqh) {
|
||||
retcode = ENOENT;
|
||||
|
@ -124,7 +124,7 @@ int drm_irq_install(drm_device_t *dev)
|
|||
err:
|
||||
DRM_LOCK();
|
||||
dev->irq_enabled = 0;
|
||||
mutex_destroy(&dev->irq_lock);
|
||||
DRM_SPINUNINIT(&dev->irq_lock);
|
||||
DRM_UNLOCK();
|
||||
return retcode;
|
||||
}
|
||||
|
@ -141,7 +141,7 @@ int drm_irq_uninstall(drm_device_t *dev)
|
|||
dev->driver.irq_uninstall(dev);
|
||||
|
||||
pci_intr_disestablish(dev->pa.pa_pc, dev->irqh);
|
||||
mutex_destroy(&dev->irq_lock);
|
||||
DRM_SPINUNINIT(&dev->irq_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -209,9 +209,9 @@ int drm_wait_vblank(DRM_IOCTL_ARGS)
|
|||
|
||||
vblwait.reply.sequence = atomic_read(&dev->vbl_received);
|
||||
|
||||
mutex_enter(&dev->irq_lock);
|
||||
DRM_SPINLOCK(&dev->irq_lock);
|
||||
TAILQ_INSERT_HEAD(&dev->vbl_sig_list, vbl_sig, link);
|
||||
mutex_exit(&dev->irq_lock);
|
||||
DRM_SPINUNLOCK(&dev->irq_lock);
|
||||
ret = 0;
|
||||
#endif
|
||||
ret = EINVAL;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: drm_memory.c,v 1.9 2008/05/06 01:26:14 bjs Exp $ */
|
||||
/* $NetBSD: drm_memory.c,v 1.10 2008/05/06 01:45:47 bjs Exp $ */
|
||||
|
||||
/* drm_memory.h -- Memory management wrappers for DRM -*- linux-c -*-
|
||||
* Created: Thu Feb 4 14:00:34 1999 by faith@valinux.com
|
||||
|
@ -34,7 +34,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: drm_memory.c,v 1.9 2008/05/06 01:26:14 bjs Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: drm_memory.c,v 1.10 2008/05/06 01:45:47 bjs Exp $");
|
||||
/*
|
||||
__FBSDID("$FreeBSD: src/sys/dev/drm/drm_memory.c,v 1.2 2005/11/28 23:13:52 anholt Exp $");
|
||||
*/
|
||||
|
@ -54,53 +54,42 @@ MALLOC_DEFINE(M_DRM, "drm", "DRM Data Structures");
|
|||
|
||||
void drm_mem_init(void)
|
||||
{
|
||||
/*
|
||||
malloc_type_attach(M_DRM);
|
||||
*/
|
||||
}
|
||||
|
||||
void drm_mem_uninit(void)
|
||||
{
|
||||
}
|
||||
|
||||
inline void *drm_mem_alloc(size_t size)
|
||||
void *drm_alloc(size_t size, int area)
|
||||
{
|
||||
return kmem_alloc(size, KM_NOSLEEP);
|
||||
return malloc(size, M_DRM, M_NOWAIT);
|
||||
}
|
||||
|
||||
inline void *drm_mem_zalloc(size_t size)
|
||||
void *drm_calloc(size_t nmemb, size_t size, int area)
|
||||
{
|
||||
return kmem_zalloc(size, KM_NOSLEEP);
|
||||
return malloc(size * nmemb, M_DRM, M_NOWAIT | M_ZERO);
|
||||
}
|
||||
|
||||
inline void *drm_mem_calloc(size_t nmemb, size_t size)
|
||||
{
|
||||
return kmem_zalloc(size * nmemb, KM_NOSLEEP);
|
||||
}
|
||||
|
||||
inline void *drm_mem_realloc(void *oldpt, size_t oldsize, size_t size)
|
||||
void *drm_realloc(void *oldpt, size_t oldsize, size_t size, int area)
|
||||
{
|
||||
void *pt;
|
||||
|
||||
pt = drm_mem_alloc(size);
|
||||
pt = malloc(size, M_DRM, M_NOWAIT);
|
||||
if (pt == NULL)
|
||||
return NULL;
|
||||
if (oldpt && oldsize) {
|
||||
memcpy(pt, oldpt, oldsize);
|
||||
drm_mem_free(oldpt, oldsize);
|
||||
free(oldpt, M_DRM);
|
||||
}
|
||||
return pt;
|
||||
}
|
||||
|
||||
inline void drm_mem_free(void *pt, size_t size)
|
||||
void drm_free(void *pt, size_t size, int area)
|
||||
{
|
||||
#if 0
|
||||
KASSERT(pt == NULL)
|
||||
#else
|
||||
if (pt == NULL) {
|
||||
DRM_DEBUG("drm_mem_free: told to free a null pointer!");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
kmem_free(pt, size);
|
||||
free(pt, M_DRM);
|
||||
}
|
||||
|
||||
void *drm_ioremap(drm_device_t *dev, drm_local_map_t *map)
|
||||
|
@ -238,60 +227,3 @@ drm_mtrr_del(int __unused handle, unsigned long offset, size_t size, int flags)
|
|||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
inline struct drm_dmamem *
|
||||
drm_dmamem_alloc(bus_dma_tag_t tag, size_t size, int wait)
|
||||
{
|
||||
struct drm_dmamem *dma;
|
||||
int kmflag;
|
||||
|
||||
kmflag = (wait & DRM_DMA_NOWAIT) != 0 ? KM_NOSLEEP : KM_SLEEP;
|
||||
|
||||
dma = kmem_zalloc(sizeof(*dma), kmflag);
|
||||
if (dma == NULL)
|
||||
return NULL;
|
||||
|
||||
dma->dm_size = size;
|
||||
dma->dm_tag = tag;
|
||||
|
||||
if (bus_dmamap_create(dma->dm_tag, size, size / PAGE_SIZE + 1, size, 0,
|
||||
wait|BUS_DMA_ALLOCNOW, &dma->dm_map) != 0)
|
||||
goto dmafree;
|
||||
|
||||
if (bus_dmamem_alloc(dma->dm_tag, size, PAGE_SIZE, 0, dma->dm_segs,
|
||||
1, &dma->dm_nsegs, wait) != 0)
|
||||
goto destroy;
|
||||
|
||||
if (bus_dmamem_map(dma->dm_tag, dma->dm_segs, dma->dm_nsegs, size,
|
||||
&dma->dm_kva, wait|BUS_DMA_COHERENT) != 0)
|
||||
goto free;
|
||||
|
||||
if (bus_dmamap_load(dma->dm_tag, dma->dm_map, dma->dm_kva, size,
|
||||
NULL, wait) != 0)
|
||||
goto unmap;
|
||||
|
||||
return dma;
|
||||
|
||||
unmap:
|
||||
bus_dmamem_unmap(dma->dm_tag, dma->dm_kva, size);
|
||||
free:
|
||||
bus_dmamem_free(dma->dm_tag, dma->dm_segs, dma->dm_nsegs);
|
||||
destroy:
|
||||
bus_dmamap_destroy(dma->dm_tag, dma->dm_map);
|
||||
dmafree:
|
||||
kmem_free(dma, sizeof(*dma));
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
inline void
|
||||
drm_dmamem_free(struct drm_dmamem *dma)
|
||||
{
|
||||
if (dma != NULL) {
|
||||
bus_dmamap_unload(dma->dm_tag, dma->dm_map);
|
||||
bus_dmamem_unmap(dma->dm_tag, dma->dm_kva, dma->dm_size);
|
||||
bus_dmamem_free(dma->dm_tag, dma->dm_segs, dma->dm_nsegs);
|
||||
bus_dmamap_destroy(dma->dm_tag, dma->dm_map);
|
||||
kmem_free(dma, sizeof(*dma));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: drm_pci.c,v 1.9 2008/05/06 01:26:14 bjs Exp $ */
|
||||
/* $NetBSD: drm_pci.c,v 1.10 2008/05/06 01:45:47 bjs Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2003 Eric Anholt.
|
||||
|
@ -24,7 +24,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: drm_pci.c,v 1.9 2008/05/06 01:26:14 bjs Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: drm_pci.c,v 1.10 2008/05/06 01:45:47 bjs Exp $");
|
||||
/*
|
||||
__FBSDID("$FreeBSD: src/sys/dev/drm/drm_pci.c,v 1.2 2005/11/28 23:13:52 anholt Exp $");
|
||||
*/
|
||||
|
@ -34,35 +34,72 @@ __FBSDID("$FreeBSD: src/sys/dev/drm/drm_pci.c,v 1.2 2005/11/28 23:13:52 anholt E
|
|||
drm_dma_handle_t *
|
||||
drm_pci_alloc(drm_device_t *dev, size_t size, size_t align, dma_addr_t maxaddr)
|
||||
{
|
||||
drm_dma_handle_t *hdl;
|
||||
struct drm_dmamem *dmam;
|
||||
drm_dma_handle_t *h;
|
||||
int error, nsegs;
|
||||
|
||||
hdl = drm_mem_zalloc(sizeof(drm_dma_handle_t));
|
||||
if (hdl == NULL)
|
||||
goto err;
|
||||
|
||||
dmam = drm_dmamem_alloc(dev->pa.pa_dmat, size, DRM_DMA_NOWAIT);
|
||||
if (dmam == NULL)
|
||||
goto free;
|
||||
/* Need power-of-two alignment, so fail the allocation if it isn't. */
|
||||
if ((align & (align - 1)) != 0) {
|
||||
DRM_ERROR("drm_pci_alloc with non-power-of-two alignment %d\n",
|
||||
(int)align);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
hdl->busaddr = DRM_NETBSD_DMA_ADDR(dmam);
|
||||
hdl->vaddr = DRM_NETBSD_DMA_VADDR(dmam);
|
||||
hdl->size = size;
|
||||
return hdl;
|
||||
h = malloc(sizeof(drm_dma_handle_t), M_DRM, M_ZERO | M_NOWAIT);
|
||||
|
||||
if (h == NULL)
|
||||
return NULL;
|
||||
if ((error = bus_dmamem_alloc(dev->pa.pa_dmat, size, align, 0,
|
||||
h->segs, 1, &nsegs, BUS_DMA_NOWAIT)) != 0) {
|
||||
printf("drm: Unable to allocate DMA, error %d\n", error);
|
||||
goto fail;
|
||||
}
|
||||
if ((error = bus_dmamem_map(dev->pa.pa_dmat, h->segs, nsegs, size,
|
||||
&h->addr, BUS_DMA_NOWAIT | BUS_DMA_COHERENT)) != 0) {
|
||||
printf("drm: Unable to map DMA, error %d\n", error);
|
||||
goto free;
|
||||
}
|
||||
if ((error = bus_dmamap_create(dev->pa.pa_dmat, size, 1, size, 0,
|
||||
BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW, &h->map)) != 0) {
|
||||
printf("drm: Unable to create DMA map, error %d\n", error);
|
||||
goto unmap;
|
||||
}
|
||||
if ((error = bus_dmamap_load(dev->pa.pa_dmat, h->map, h->addr, size,
|
||||
NULL, BUS_DMA_NOWAIT)) != 0) {
|
||||
printf("drm: Unable to load DMA map, error %d\n", error);
|
||||
goto destroy;
|
||||
}
|
||||
h->busaddr = DRM_PCI_DMAADDR(h);
|
||||
h->vaddr = h->addr;
|
||||
h->size = size;
|
||||
|
||||
return h;
|
||||
|
||||
destroy:
|
||||
bus_dmamap_destroy(dev->pa.pa_dmat, h->map);
|
||||
unmap:
|
||||
bus_dmamem_unmap(dev->pa.pa_dmat, h->addr, size);
|
||||
free:
|
||||
drm_mem_free(hdl, sizeof(*hdl));
|
||||
err:
|
||||
bus_dmamem_free(dev->pa.pa_dmat, h->segs, 1);
|
||||
fail:
|
||||
free(h, M_DRM);
|
||||
return NULL;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Free a DMA-accessible consistent memory block.
|
||||
*/
|
||||
|
||||
void
|
||||
drm_pci_free(drm_device_t *dev, drm_dma_handle_t *hdl)
|
||||
drm_pci_free(drm_device_t *dev, drm_dma_handle_t *h)
|
||||
{
|
||||
if (hdl != NULL) {
|
||||
if (hdl->dmam != NULL)
|
||||
drm_dmamem_free(hdl->dmam);
|
||||
drm_mem_free(hdl, sizeof(*hdl));
|
||||
}
|
||||
if (h == NULL)
|
||||
return;
|
||||
bus_dmamap_unload(dev->pa.pa_dmat, h->map);
|
||||
bus_dmamap_destroy(dev->pa.pa_dmat, h->map);
|
||||
bus_dmamem_unmap(dev->pa.pa_dmat, h->addr, h->size);
|
||||
bus_dmamem_free(dev->pa.pa_dmat, h->segs, 1);
|
||||
|
||||
free(h, M_DRM);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue