mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2025-12-24 17:10:13 +01:00
Updates for NetBSD, fixing mga support at least.
Submitted by: Erik Reid
This commit is contained in:
parent
2f01ef6402
commit
8a25e70c65
8 changed files with 88 additions and 100 deletions
|
|
@ -125,13 +125,8 @@
|
|||
#define DRIVER_NUM_CARDS 1
|
||||
#endif
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
static int DRM(init)(device_t nbdev);
|
||||
static void DRM(cleanup)(device_t nbdev);
|
||||
#elif defined(__NetBSD__)
|
||||
static int DRM(init)(drm_device_t *);
|
||||
static void DRM(cleanup)(drm_device_t *);
|
||||
#endif
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#define DRIVER_SOFTC(unit) \
|
||||
|
|
@ -337,13 +332,7 @@ static int DRM(lkmhandle)(struct lkm_table *lkmtp, int cmd)
|
|||
case LKM_E_LOAD:
|
||||
if (lkmexists(lkmtp))
|
||||
return EEXIST;
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ > 106080000)
|
||||
error = devsw_attach(args->lkm_devname,
|
||||
args->lkm_bdev, &args->lkm_bdevmaj,
|
||||
args->lkm_cdev, &args->lkm_cdevmaj);
|
||||
if(error != 0)
|
||||
return error;
|
||||
#endif
|
||||
|
||||
if(DRM(modprobe)())
|
||||
return 0;
|
||||
|
||||
|
|
@ -352,10 +341,6 @@ static int DRM(lkmhandle)(struct lkm_table *lkmtp, int cmd)
|
|||
case LKM_E_UNLOAD:
|
||||
if (DRM(refcnt) > 0)
|
||||
return (EBUSY);
|
||||
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ > 106080000)
|
||||
devsw_detach(args->lkm_bdev, args->lkm_cdev);
|
||||
#endif
|
||||
break;
|
||||
case LKM_E_STAT:
|
||||
break;
|
||||
|
|
@ -364,6 +349,7 @@ static int DRM(lkmhandle)(struct lkm_table *lkmtp, int cmd)
|
|||
error = EIO;
|
||||
break;
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
|
@ -372,6 +358,7 @@ int DRM(modprobe)() {
|
|||
int error = 0;
|
||||
if((error = pci_find_device(&pa, DRM(probe))) != 0)
|
||||
DRM(attach)(&pa, 0);
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
|
@ -381,16 +368,21 @@ int DRM(probe)(struct pci_attach_args *pa)
|
|||
|
||||
desc = DRM(find_description)(PCI_VENDOR(pa->pa_id), PCI_PRODUCT(pa->pa_id));
|
||||
if (desc != NULL) {
|
||||
return 10;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void DRM(attach)(struct pci_attach_args *pa, dev_t kdev)
|
||||
{
|
||||
{
|
||||
int i;
|
||||
DRM_DEVICE;
|
||||
drm_device_t *dev;
|
||||
|
||||
config_makeroom(kdev, &DRM(cd));
|
||||
DRM(cd).cd_devs[(kdev)] = DRM(alloc)(sizeof(drm_device_t),
|
||||
DRM_MEM_DRIVER);
|
||||
dev = DRIVER_SOFTC(kdev);
|
||||
|
||||
memset(dev, 0, sizeof(drm_device_t));
|
||||
memcpy(&dev->pa, pa, sizeof(dev->pa));
|
||||
|
|
@ -728,15 +720,13 @@ static int DRM(takedown)( drm_device_t *dev )
|
|||
* linux/init/main.c (this is not currently supported).
|
||||
* bsd: drm_init is called via the attach function per device.
|
||||
*/
|
||||
#ifdef __FreeBSD__
|
||||
static int DRM(init)( device_t nbdev )
|
||||
#elif defined(__NetBSD__)
|
||||
static int DRM(init)( drm_device_t *dev )
|
||||
#endif
|
||||
{
|
||||
int unit;
|
||||
#ifdef __FreeBSD__
|
||||
drm_device_t *dev;
|
||||
#elif defined(__NetBSD__)
|
||||
drm_device_t *dev = nbdev;
|
||||
#endif
|
||||
#if __HAVE_CTX_BITMAP
|
||||
int retcode;
|
||||
|
|
@ -832,21 +822,16 @@ static int DRM(init)( drm_device_t *dev )
|
|||
* bsd: drm_cleanup is called per device at module unload time.
|
||||
* FIXME: NetBSD
|
||||
*/
|
||||
#ifdef __FreeBSD__
|
||||
static void DRM(cleanup)(device_t nbdev)
|
||||
#elif defined(__NetBSD__)
|
||||
static void DRM(cleanup)(drm_device_t *dev)
|
||||
#endif
|
||||
{
|
||||
#ifdef __FreeBSD__
|
||||
drm_device_t *dev;
|
||||
#endif
|
||||
#if __REALLY_HAVE_MTRR
|
||||
#ifdef __NetBSD__
|
||||
#if __REALLY_HAVE_MTRR
|
||||
struct mtrr mtrrmap;
|
||||
int one = 1;
|
||||
#endif /* __NetBSD__ */
|
||||
#endif /* __REALLY_HAVE_MTRR */
|
||||
dev = nbdev;
|
||||
#endif /* __NetBSD__ */
|
||||
|
||||
DRM_DEBUG( "\n" );
|
||||
|
||||
|
|
|
|||
|
|
@ -182,8 +182,8 @@ int DRM(write_string)(drm_device_t *dev, const char *s)
|
|||
selwakeup(&dev->buf_sel);
|
||||
}
|
||||
|
||||
DRM_DEBUG("dev->buf_sigio=%p\n", dev->buf_sigio);
|
||||
#ifdef __FreeBSD__
|
||||
DRM_DEBUG("dev->buf_sigio=%p\n", dev->buf_sigio);
|
||||
if (dev->buf_sigio) {
|
||||
DRM_DEBUG("dev->buf_sigio->sio_pgid=%d\n", dev->buf_sigio->sio_pgid);
|
||||
#if __FreeBSD_version >= 500000
|
||||
|
|
|
|||
|
|
@ -31,9 +31,9 @@
|
|||
|
||||
#include "drmP.h"
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#if defined(__FreeBSD__) || defined(__NetBSD__)
|
||||
#define malloctype DRM(M_DRM)
|
||||
/* The macros confliced in the MALLOC_DEFINE */
|
||||
/* The macros conflicted in the MALLOC_DEFINE */
|
||||
|
||||
MALLOC_DEFINE(malloctype, "drm", "DRM Data Structures");
|
||||
|
||||
|
|
@ -81,6 +81,10 @@ void DRM(mem_init)(void)
|
|||
{
|
||||
drm_mem_stats_t *mem;
|
||||
|
||||
#ifdef __NetBSD__
|
||||
malloc_type_attach(DRM(M_DRM));
|
||||
#endif
|
||||
|
||||
DRM_SPININIT(DRM(mem_lock), "drm memory");
|
||||
|
||||
for (mem = DRM(mem_stats); mem->name; ++mem) {
|
||||
|
|
@ -164,11 +168,7 @@ void *DRM(alloc)(size_t size, int area)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
if (!(pt = malloc(size, DRM(M_DRM), M_NOWAIT))) {
|
||||
#elif defined(__NetBSD__)
|
||||
if (!(pt = malloc(size, M_DEVBUF, M_NOWAIT))) {
|
||||
#endif
|
||||
DRM_SPINLOCK(&DRM(mem_lock));
|
||||
++DRM(mem_stats)[area].fail_count;
|
||||
DRM_SPINUNLOCK(&DRM(mem_lock));
|
||||
|
|
@ -218,13 +218,10 @@ void DRM(free)(void *pt, size_t size, int area)
|
|||
int alloc_count;
|
||||
int free_count;
|
||||
|
||||
if (!pt) DRM_MEM_ERROR(area, "Attempt to free NULL pointer\n");
|
||||
if (!pt)
|
||||
DRM_MEM_ERROR(area, "Attempt to free NULL pointer\n");
|
||||
else
|
||||
#ifdef __FreeBSD__
|
||||
free(pt, DRM(M_DRM));
|
||||
#elif defined(__NetBSD__)
|
||||
free(pt, M_DEVBUF);
|
||||
#endif
|
||||
free(pt, DRM(M_DRM));
|
||||
DRM_SPINLOCK(&DRM(mem_lock));
|
||||
DRM(mem_stats)[area].bytes_freed += size;
|
||||
free_count = ++DRM(mem_stats)[area].free_count;
|
||||
|
|
|
|||
|
|
@ -42,9 +42,7 @@
|
|||
#include <sys/agpio.h>
|
||||
#endif
|
||||
|
||||
typedef drm_device_t *device_t;
|
||||
|
||||
extern struct cfdriver DRM(cd);
|
||||
#include <opt_drm.h>
|
||||
|
||||
#if DRM_DEBUG
|
||||
#undef DRM_DEBUG_CODE
|
||||
|
|
@ -52,6 +50,14 @@ extern struct cfdriver DRM(cd);
|
|||
#endif
|
||||
#undef DRM_DEBUG
|
||||
|
||||
#if DRM_LINUX
|
||||
#undef DRM_LINUX /* FIXME: Linux compat has not been ported yet */
|
||||
#endif
|
||||
|
||||
typedef drm_device_t *device_t;
|
||||
|
||||
extern struct cfdriver DRM(cd);
|
||||
|
||||
#define DRM_TIME_SLICE (hz/20) /* Time slice for GLXContexts */
|
||||
|
||||
#define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
|
||||
|
|
@ -75,9 +81,15 @@ extern struct cfdriver DRM(cd);
|
|||
#define DRM_TASKQUEUE_ARGS void *dev, int pending
|
||||
#define DRM_IRQ_ARGS void *arg
|
||||
#define DRM_DEVICE drm_device_t *dev = device_lookup(&DRM(cd), minor(kdev))
|
||||
/* XXX Not sure if this is the 'right' version.. */
|
||||
#if __NetBSD_Version__ >= 106140000
|
||||
MALLOC_DECLARE(DRM(M_DRM));
|
||||
#else
|
||||
/* XXX Make sure this works */
|
||||
extern const int DRM(M_DRM) = M_DEVBUF;
|
||||
#endif /* __NetBSD_Version__ */
|
||||
#define DRM_MALLOC(size) malloc( size, DRM(M_DRM), M_NOWAIT )
|
||||
/* XXX Get netbsd to add a M_DRM malloc type. */
|
||||
#define DRM_FREE(pt) free( pt, M_AGP )
|
||||
#define DRM_FREE(pt) free( pt, DRM(M_DRM) )
|
||||
#define DRM_VTOPHYS(addr) vtophys(addr)
|
||||
|
||||
#define DRM_READ8(map, offset) bus_space_read_1( (map)->iot, (map)->ioh, (offset) )
|
||||
|
|
@ -265,7 +277,7 @@ do { \
|
|||
#define DRM_DEBUG(fmt, arg...) \
|
||||
do { \
|
||||
if (DRM(flags) & DRM_FLAG_DEBUG) \
|
||||
printf("[" DRM_NAME ":%s] " fmt , __FUNCTION__,## arg); \
|
||||
printf("[" DRM_NAME ":%s] " fmt , __FUNCTION__ ,## arg); \
|
||||
} while (0)
|
||||
#else
|
||||
#define DRM_DEBUG(fmt, arg...) do { } while (0)
|
||||
|
|
|
|||
|
|
@ -125,13 +125,8 @@
|
|||
#define DRIVER_NUM_CARDS 1
|
||||
#endif
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
static int DRM(init)(device_t nbdev);
|
||||
static void DRM(cleanup)(device_t nbdev);
|
||||
#elif defined(__NetBSD__)
|
||||
static int DRM(init)(drm_device_t *);
|
||||
static void DRM(cleanup)(drm_device_t *);
|
||||
#endif
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#define DRIVER_SOFTC(unit) \
|
||||
|
|
@ -337,13 +332,7 @@ static int DRM(lkmhandle)(struct lkm_table *lkmtp, int cmd)
|
|||
case LKM_E_LOAD:
|
||||
if (lkmexists(lkmtp))
|
||||
return EEXIST;
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ > 106080000)
|
||||
error = devsw_attach(args->lkm_devname,
|
||||
args->lkm_bdev, &args->lkm_bdevmaj,
|
||||
args->lkm_cdev, &args->lkm_cdevmaj);
|
||||
if(error != 0)
|
||||
return error;
|
||||
#endif
|
||||
|
||||
if(DRM(modprobe)())
|
||||
return 0;
|
||||
|
||||
|
|
@ -352,10 +341,6 @@ static int DRM(lkmhandle)(struct lkm_table *lkmtp, int cmd)
|
|||
case LKM_E_UNLOAD:
|
||||
if (DRM(refcnt) > 0)
|
||||
return (EBUSY);
|
||||
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ > 106080000)
|
||||
devsw_detach(args->lkm_bdev, args->lkm_cdev);
|
||||
#endif
|
||||
break;
|
||||
case LKM_E_STAT:
|
||||
break;
|
||||
|
|
@ -364,6 +349,7 @@ static int DRM(lkmhandle)(struct lkm_table *lkmtp, int cmd)
|
|||
error = EIO;
|
||||
break;
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
|
@ -372,6 +358,7 @@ int DRM(modprobe)() {
|
|||
int error = 0;
|
||||
if((error = pci_find_device(&pa, DRM(probe))) != 0)
|
||||
DRM(attach)(&pa, 0);
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
|
@ -381,16 +368,21 @@ int DRM(probe)(struct pci_attach_args *pa)
|
|||
|
||||
desc = DRM(find_description)(PCI_VENDOR(pa->pa_id), PCI_PRODUCT(pa->pa_id));
|
||||
if (desc != NULL) {
|
||||
return 10;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void DRM(attach)(struct pci_attach_args *pa, dev_t kdev)
|
||||
{
|
||||
{
|
||||
int i;
|
||||
DRM_DEVICE;
|
||||
drm_device_t *dev;
|
||||
|
||||
config_makeroom(kdev, &DRM(cd));
|
||||
DRM(cd).cd_devs[(kdev)] = DRM(alloc)(sizeof(drm_device_t),
|
||||
DRM_MEM_DRIVER);
|
||||
dev = DRIVER_SOFTC(kdev);
|
||||
|
||||
memset(dev, 0, sizeof(drm_device_t));
|
||||
memcpy(&dev->pa, pa, sizeof(dev->pa));
|
||||
|
|
@ -728,15 +720,13 @@ static int DRM(takedown)( drm_device_t *dev )
|
|||
* linux/init/main.c (this is not currently supported).
|
||||
* bsd: drm_init is called via the attach function per device.
|
||||
*/
|
||||
#ifdef __FreeBSD__
|
||||
static int DRM(init)( device_t nbdev )
|
||||
#elif defined(__NetBSD__)
|
||||
static int DRM(init)( drm_device_t *dev )
|
||||
#endif
|
||||
{
|
||||
int unit;
|
||||
#ifdef __FreeBSD__
|
||||
drm_device_t *dev;
|
||||
#elif defined(__NetBSD__)
|
||||
drm_device_t *dev = nbdev;
|
||||
#endif
|
||||
#if __HAVE_CTX_BITMAP
|
||||
int retcode;
|
||||
|
|
@ -832,21 +822,16 @@ static int DRM(init)( drm_device_t *dev )
|
|||
* bsd: drm_cleanup is called per device at module unload time.
|
||||
* FIXME: NetBSD
|
||||
*/
|
||||
#ifdef __FreeBSD__
|
||||
static void DRM(cleanup)(device_t nbdev)
|
||||
#elif defined(__NetBSD__)
|
||||
static void DRM(cleanup)(drm_device_t *dev)
|
||||
#endif
|
||||
{
|
||||
#ifdef __FreeBSD__
|
||||
drm_device_t *dev;
|
||||
#endif
|
||||
#if __REALLY_HAVE_MTRR
|
||||
#ifdef __NetBSD__
|
||||
#if __REALLY_HAVE_MTRR
|
||||
struct mtrr mtrrmap;
|
||||
int one = 1;
|
||||
#endif /* __NetBSD__ */
|
||||
#endif /* __REALLY_HAVE_MTRR */
|
||||
dev = nbdev;
|
||||
#endif /* __NetBSD__ */
|
||||
|
||||
DRM_DEBUG( "\n" );
|
||||
|
||||
|
|
|
|||
|
|
@ -182,8 +182,8 @@ int DRM(write_string)(drm_device_t *dev, const char *s)
|
|||
selwakeup(&dev->buf_sel);
|
||||
}
|
||||
|
||||
DRM_DEBUG("dev->buf_sigio=%p\n", dev->buf_sigio);
|
||||
#ifdef __FreeBSD__
|
||||
DRM_DEBUG("dev->buf_sigio=%p\n", dev->buf_sigio);
|
||||
if (dev->buf_sigio) {
|
||||
DRM_DEBUG("dev->buf_sigio->sio_pgid=%d\n", dev->buf_sigio->sio_pgid);
|
||||
#if __FreeBSD_version >= 500000
|
||||
|
|
|
|||
|
|
@ -31,9 +31,9 @@
|
|||
|
||||
#include "drmP.h"
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#if defined(__FreeBSD__) || defined(__NetBSD__)
|
||||
#define malloctype DRM(M_DRM)
|
||||
/* The macros confliced in the MALLOC_DEFINE */
|
||||
/* The macros conflicted in the MALLOC_DEFINE */
|
||||
|
||||
MALLOC_DEFINE(malloctype, "drm", "DRM Data Structures");
|
||||
|
||||
|
|
@ -81,6 +81,10 @@ void DRM(mem_init)(void)
|
|||
{
|
||||
drm_mem_stats_t *mem;
|
||||
|
||||
#ifdef __NetBSD__
|
||||
malloc_type_attach(DRM(M_DRM));
|
||||
#endif
|
||||
|
||||
DRM_SPININIT(DRM(mem_lock), "drm memory");
|
||||
|
||||
for (mem = DRM(mem_stats); mem->name; ++mem) {
|
||||
|
|
@ -164,11 +168,7 @@ void *DRM(alloc)(size_t size, int area)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
if (!(pt = malloc(size, DRM(M_DRM), M_NOWAIT))) {
|
||||
#elif defined(__NetBSD__)
|
||||
if (!(pt = malloc(size, M_DEVBUF, M_NOWAIT))) {
|
||||
#endif
|
||||
DRM_SPINLOCK(&DRM(mem_lock));
|
||||
++DRM(mem_stats)[area].fail_count;
|
||||
DRM_SPINUNLOCK(&DRM(mem_lock));
|
||||
|
|
@ -218,13 +218,10 @@ void DRM(free)(void *pt, size_t size, int area)
|
|||
int alloc_count;
|
||||
int free_count;
|
||||
|
||||
if (!pt) DRM_MEM_ERROR(area, "Attempt to free NULL pointer\n");
|
||||
if (!pt)
|
||||
DRM_MEM_ERROR(area, "Attempt to free NULL pointer\n");
|
||||
else
|
||||
#ifdef __FreeBSD__
|
||||
free(pt, DRM(M_DRM));
|
||||
#elif defined(__NetBSD__)
|
||||
free(pt, M_DEVBUF);
|
||||
#endif
|
||||
free(pt, DRM(M_DRM));
|
||||
DRM_SPINLOCK(&DRM(mem_lock));
|
||||
DRM(mem_stats)[area].bytes_freed += size;
|
||||
free_count = ++DRM(mem_stats)[area].free_count;
|
||||
|
|
|
|||
|
|
@ -42,9 +42,7 @@
|
|||
#include <sys/agpio.h>
|
||||
#endif
|
||||
|
||||
typedef drm_device_t *device_t;
|
||||
|
||||
extern struct cfdriver DRM(cd);
|
||||
#include <opt_drm.h>
|
||||
|
||||
#if DRM_DEBUG
|
||||
#undef DRM_DEBUG_CODE
|
||||
|
|
@ -52,6 +50,14 @@ extern struct cfdriver DRM(cd);
|
|||
#endif
|
||||
#undef DRM_DEBUG
|
||||
|
||||
#if DRM_LINUX
|
||||
#undef DRM_LINUX /* FIXME: Linux compat has not been ported yet */
|
||||
#endif
|
||||
|
||||
typedef drm_device_t *device_t;
|
||||
|
||||
extern struct cfdriver DRM(cd);
|
||||
|
||||
#define DRM_TIME_SLICE (hz/20) /* Time slice for GLXContexts */
|
||||
|
||||
#define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
|
||||
|
|
@ -75,9 +81,15 @@ extern struct cfdriver DRM(cd);
|
|||
#define DRM_TASKQUEUE_ARGS void *dev, int pending
|
||||
#define DRM_IRQ_ARGS void *arg
|
||||
#define DRM_DEVICE drm_device_t *dev = device_lookup(&DRM(cd), minor(kdev))
|
||||
/* XXX Not sure if this is the 'right' version.. */
|
||||
#if __NetBSD_Version__ >= 106140000
|
||||
MALLOC_DECLARE(DRM(M_DRM));
|
||||
#else
|
||||
/* XXX Make sure this works */
|
||||
extern const int DRM(M_DRM) = M_DEVBUF;
|
||||
#endif /* __NetBSD_Version__ */
|
||||
#define DRM_MALLOC(size) malloc( size, DRM(M_DRM), M_NOWAIT )
|
||||
/* XXX Get netbsd to add a M_DRM malloc type. */
|
||||
#define DRM_FREE(pt) free( pt, M_AGP )
|
||||
#define DRM_FREE(pt) free( pt, DRM(M_DRM) )
|
||||
#define DRM_VTOPHYS(addr) vtophys(addr)
|
||||
|
||||
#define DRM_READ8(map, offset) bus_space_read_1( (map)->iot, (map)->ioh, (offset) )
|
||||
|
|
@ -265,7 +277,7 @@ do { \
|
|||
#define DRM_DEBUG(fmt, arg...) \
|
||||
do { \
|
||||
if (DRM(flags) & DRM_FLAG_DEBUG) \
|
||||
printf("[" DRM_NAME ":%s] " fmt , __FUNCTION__,## arg); \
|
||||
printf("[" DRM_NAME ":%s] " fmt , __FUNCTION__ ,## arg); \
|
||||
} while (0)
|
||||
#else
|
||||
#define DRM_DEBUG(fmt, arg...) do { } while (0)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue