Bool vivante_dri2_ScreenInit(ScreenPtr pScreen) { struct vivante *vivante = vivante_get_screen_priv(pScreen); struct vivante_dri2_info *dri; DRI2InfoRec info; int dri2_major = 0; int dri2_minor = 0; const char *driverNames[1]; if (xf86LoaderCheckSymbol("DRI2Version")) DRI2Version(&dri2_major, &dri2_minor); if (dri2_major < 1 || (dri2_major == 1 && dri2_minor < 1)) { xf86DrvMsg(vivante->scrnIndex, X_WARNING, "DRI2 requires DRI2 module version 1.1.0 or later\n"); return FALSE; } if (!vivante_dri2_register_private()) return FALSE; if (dri2_server_generation != serverGeneration) { dri2_server_generation = serverGeneration; wait_client_restype = CreateNewResourceType(vivante_dri2_client_gone, "Frame Event Client"); wait_drawable_restype = CreateNewResourceType(vivante_dri2_drawable_gone, "Frame Event Drawable"); if (!wait_client_restype || !wait_drawable_restype) { xf86DrvMsg(vivante->scrnIndex, X_WARNING, "Can not register DRI2 frame event resources\n"); return FALSE; } } dri = xnfcalloc(1, sizeof *dri); dri->devname = drmGetDeviceNameFromFd(vivante->drm_fd); vivante->dri2 = dri; memset(&info, 0, sizeof(info)); info.version = 4; info.fd = vivante->drm_fd; info.driverName = "galdri"; info.deviceName = dri->devname; info.CreateBuffer = vivante_dri2_CreateBuffer; info.DestroyBuffer = vivante_dri2_DestroyBuffer; info.CopyRegion = vivante_dri2_CopyRegion; info.ScheduleSwap = vivante_dri2_ScheduleSwap; info.GetMSC = vivante_dri2_GetMSC; info.ScheduleWaitMSC = vivante_dri2_ScheduleWaitMSC; info.numDrivers = 1; info.driverNames = driverNames; driverNames[0] = info.driverName; return DRI2ScreenInit(pScreen, &info); }
/** * Checks drmGetDeviceNameFromFd * * This tests that we can get the actual version out, and that setting invalid * major/minor numbers fails appropriately. It does not check the actual * behavior differenses resulting from an increased DI version. */ int main(int argc, char **argv) { int fd; const char *name = "/dev/dri/card0"; char *v; fd = open("/dev/dri/card0", O_RDWR); if (fd == -1) return 0; v = drmGetDeviceNameFromFd(fd); close(fd); assert(strcmp(name, v) == 0); drmFree(v); return 0; }
int main(int argc, char **argv) { int fd, newlyopened; drmVersionPtr retval; char *busid; //drmDevicePtr dev; //* fd = drmOpen(NULL, "pci:0000:01:00.0"); assert(fd >= 0); retval = drmGetVersion(fd); printf("name=%s\n", retval->name); drmFreeVersion(retval); busid = drmGetBusid(fd); printf("busid=%s\n", busid); drmFreeBusid(busid); /* assert(!drmGetDevice(fd, &dev)); printf("pci:%04x:%02x:%02x.%d\n", dev->businfo.pci->domain, dev->businfo.pci->bus, dev->businfo.pci->dev, dev->businfo.pci->func); */ drmClose(fd); //*/ fd = drmOpenOnceWithType("pci:0000:01:00.0", &newlyopened, DRM_NODE_PRIMARY); //fd = open("/dev/dri/card0", O_RDWR); assert(fd >= 0); retval = drmGetVersion(fd); printf("name=%s\n", retval->name); drmFreeVersion(retval); busid = drmGetBusid(fd); printf("busid=%s\n", busid); drmFreeBusid(busid); /* assert(!drmGetDevice(fd, &dev)); printf("pci:%04x:%02x:%02x.%d\n", dev->businfo.pci->domain, dev->businfo.pci->bus, dev->businfo.pci->dev, dev->businfo.pci->func); */ drmClose(fd); /* drmDevicePtr devs[16]; int num = drmGetDevices(devs, 16); assert(num >= 0); int i; for (i = 0; i < num; i++) { printf("pci:%04x:%02x:%02x.%d\n", devs[i]->businfo.pci->domain, devs[i]->businfo.pci->bus, devs[i]->businfo.pci->dev, devs[i]->businfo.pci->func); } */ /* struct dirent *dent; struct stat sbuf; DIR *sysdir; sysdir = opendir("/dev/dri"); assert(sysdir); while ((dent = readdir(sysdir))) { char node[1024]; snprintf(node, 1024, "/dev/dri/%s", dent->d_name); if (stat(node, &sbuf)) continue; printf("path=%s, dev=%x rdev=%x maj=%d min=%d\n", node, sbuf.st_dev, sbuf.st_rdev, major(sbuf.st_rdev), minor(sbuf.st_rdev)); } */ fd = open("/dev/dri/card0", O_RDWR); assert(fd >= 0); char *path = drmGetDeviceNameFromFd(fd); assert(path != NULL); printf("get path = %s\n", path); return 0; }