pull in Eric's fixes from drm-kmod 0.9.3

This commit is contained in:
Alan Hourihane 2001-11-07 08:49:40 +00:00
parent b3e4882589
commit 2e4e8d8409
5 changed files with 23 additions and 13 deletions

View file

@ -85,10 +85,14 @@
return EINVAL; \
}
#define DRM_OS_DELAY( delay ) \
#define DRM_OS_DELAY( udelay ) \
do { \
static int never; \
tsleep(&never, PZERO|PCATCH, "drmdelay", delay ); \
struct timeval tv1, tv2; \
microtime(&tv1); \
do { \
microtime(&tv2); \
} \
while (((tv2.tv_sec-tv1.tv_sec)*1000000 + tv2.tv_usec - tv1.tv_usec) < udelay ); \
} while (0)
#define DRM_OS_RETURN(v) return v;

View file

@ -85,10 +85,14 @@
return EINVAL; \
}
#define DRM_OS_DELAY( delay ) \
#define DRM_OS_DELAY( udelay ) \
do { \
static int never; \
tsleep(&never, PZERO|PCATCH, "drmdelay", delay ); \
struct timeval tv1, tv2; \
microtime(&tv1); \
do { \
microtime(&tv2); \
} \
while (((tv2.tv_sec-tv1.tv_sec)*1000000 + tv2.tv_usec - tv1.tv_usec) < udelay ); \
} while (0)
#define DRM_OS_RETURN(v) return v;

View file

@ -686,7 +686,7 @@ static int drm_count_cards(void)
if(device == 0xffff) device = PCI_ANY_ID;
if(vendor == 0xffff) vendor = PCI_ANY_ID;
while ((pdev = pci_find_device(vendor, device, pdev))) {
num++;
num++; /* FIXME: What about two cards of the same device id? */
}
}
#else
@ -758,6 +758,7 @@ static int DRM(init)( device_t nbdev )
dev->name = DRIVER_NAME;
#endif /* __linux__ */
#ifdef __FreeBSD__
DRM(minor)[i]=unit;
DRM_OS_SPININIT(dev->count_lock, "drm device");
lockinit(&dev->dev_lock, PZERO, "drmlk", 0, 0);
dev->device = nbdev;

View file

@ -686,7 +686,7 @@ static int drm_count_cards(void)
if(device == 0xffff) device = PCI_ANY_ID;
if(vendor == 0xffff) vendor = PCI_ANY_ID;
while ((pdev = pci_find_device(vendor, device, pdev))) {
num++;
num++; /* FIXME: What about two cards of the same device id? */
}
}
#else
@ -758,6 +758,7 @@ static int DRM(init)( device_t nbdev )
dev->name = DRIVER_NAME;
#endif /* __linux__ */
#ifdef __FreeBSD__
DRM(minor)[i]=unit;
DRM_OS_SPININIT(dev->count_lock, "drm device");
lockinit(&dev->dev_lock, PZERO, "drmlk", 0, 0);
dev->device = nbdev;

View file

@ -97,7 +97,7 @@ int DRM(waitlist_put)(drm_waitlist_t *bl, drm_buf_t *buf)
spin_lock_irqsave(&bl->write_lock, flags);
#endif /* __linux__ */
#ifdef __FreeBSD__
simple_lock(&bl->write_lock);
DRM_OS_SPINLOCK(&bl->write_lock);
s = spldrm();
#endif /* __FreeBSD__ */
*bl->wp = buf;
@ -107,7 +107,7 @@ int DRM(waitlist_put)(drm_waitlist_t *bl, drm_buf_t *buf)
#endif /* __linux__ */
#ifdef __FreeBSD__
splx(s);
simple_unlock(&bl->write_lock);
DRM_OS_SPINUNLOCK(&bl->write_lock);
#endif /* __FreeBSD__ */
return 0;
@ -134,17 +134,17 @@ drm_buf_t *DRM(waitlist_get)(drm_waitlist_t *bl)
spin_unlock_irqrestore(&bl->read_lock, flags);
#endif /* __linux__ */
#ifdef __FreeBSD__
simple_lock(&bl->read_lock);
DRM_OS_SPINLOCK(&bl->read_lock);
s = spldrm();
buf = *bl->rp;
if (bl->rp == bl->wp) {
splx(s);
simple_unlock(&bl->read_lock);
DRM_OS_SPINUNLOCK(&bl->read_lock);
return NULL;
}
if (++bl->rp >= bl->end) bl->rp = bl->bufs;
splx(s);
simple_unlock(&bl->read_lock);
DRM_OS_SPINUNLOCK(&bl->read_lock);
#endif /* __FreeBSD__ */
return buf;