After the previous revert fix libdrm to start at minor 1

and fixup the demos
main
Alan Hourihane 2008-02-07 22:21:50 +00:00
parent fe83c06861
commit f51dc37d75
4 changed files with 48 additions and 24 deletions

View File

@ -355,7 +355,7 @@ static int drmOpenMinor(int minor, int create, int type)
{
int fd;
char buf[64];
if (create)
return drmOpenDevice(makedev(DRM_MAJOR, minor), minor, type);
@ -421,8 +421,15 @@ static int drmOpenByBusid(const char *busid)
const char *buf;
drmSetVersion sv;
/*
* Open the first minor number that matches the driver name and isn't
* already in use. If it's in use it will have a busid assigned already.
*
* start at 1, as 0 is the control node, and we should use drmOpenControl
* for that.
*/
drmMsg("drmOpenByBusid: Searching for BusID %s\n", busid);
for (i = 0; i < DRM_MAX_MINOR; i++) {
for (i = 1; i < DRM_MAX_MINOR; i++) {
fd = drmOpenMinor(i, 1, DRM_NODE_RENDER);
drmMsg("drmOpenByBusid: drmOpenMinor returns %d\n", fd);
if (fd >= 0) {
@ -467,24 +474,14 @@ static int drmOpenByName(const char *name)
drmVersionPtr version;
char * id;
if (!drmAvailable()) {
if (!drm_server_info) {
return -1;
}
else {
/* try to load the kernel module now */
if (!drm_server_info->load_module(name)) {
drmMsg("[drm] failed to load kernel module \"%s\"\n", name);
return -1;
}
}
}
/*
* Open the first minor number that matches the driver name and isn't
* already in use. If it's in use it will have a busid assigned already.
*
* start at 1, as 0 is the control node, and we should use drmOpenControl
* for that.
*/
for (i = 0; i < DRM_MAX_MINOR; i++) {
for (i = 1; i < DRM_MAX_MINOR; i++) {
if ((fd = drmOpenMinor(i, 1, DRM_NODE_RENDER)) >= 0) {
if ((version = drmGetVersion(fd))) {
if (!strcmp(version->name, name)) {

View File

@ -351,7 +351,7 @@ int main(int argc, char **argv)
printf("Starting test\n");
fd = drmOpenControl(0);
fd = drmOpen("i915", NULL);
if (fd < 0) {
printf("Failed to open the card fb (%d)\n",fd);

View File

@ -1,11 +1,16 @@
#define CLEAN_FBDEV
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <string.h>
#ifdef CLEAN_FBDEV
#include <errno.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/fb.h>
#endif
#include "xf86drm.h"
#include "xf86drmMode.h"
@ -20,6 +25,11 @@ void testCursor(int fd, uint32_t crtc);
void prettyColors(int fd, unsigned int handle);
void prettyCursor(int fd, unsigned int handle, unsigned int color);
#ifdef CLEAN_FBDEV
struct fb_var_screeninfo var;
struct fb_fix_screeninfo fix;
#endif
/* structs for the demo_driver */
struct demo_driver;
@ -90,6 +100,19 @@ int main(int argc, char **argv)
struct demo_driver *driver;
int num;
int i;
#ifdef CLEAN_FBDEV
int fbdev_fd;
fbdev_fd = open("/dev/fb0", O_RDWR);
memset(&var, 0, sizeof(struct fb_var_screeninfo));
memset(&fix, 0, sizeof(struct fb_fix_screeninfo));
if (ioctl(fbdev_fd, FBIOGET_VSCREENINFO, &var))
printf("var %s\n", strerror(errno));
if (ioctl(fbdev_fd, FBIOGET_FSCREENINFO, &fix))
printf("fix %s\n", strerror(errno));
#endif
printf("starting demo\n");
@ -131,9 +154,13 @@ int main(int argc, char **argv)
testCursor(driver->fd, driver->screens[i].crtc->crtc_id);
}
sleep(2);
printf("ok\n");
return 0;
#ifdef CLEAN_FBDEV
if (ioctl(fbdev_fd, FBIOPUT_VSCREENINFO, &var))
printf("var %s\n", strerror(errno));
#endif
printf("ok\n");
return 0;
}
int demoCreateScreens(struct demo_driver *driver)
@ -260,7 +287,7 @@ struct demo_driver* demoCreateDriver(void)
memset(driver, 0, sizeof(struct demo_driver));
driver->fd = drmOpenControl(0);
driver->fd = drmOpen("i915", NULL);
if (driver->fd < 0) {
printf("Failed to open the card fb\n");

View File

@ -26,7 +26,7 @@ int main(int argc, char **argv)
char name[100];
int i,d;
int fd;
int drmfd = drmOpenControl(0);
int drmfd = drmOpen("i915", NULL);
/* try four devices */
for (d = 0; d < 4; d++) {