Module Name: xsrc Committed By: macallan Date: Wed Jun 18 16:49:46 UTC 2014
Modified Files: xsrc/external/mit/xorg-server/dist/hw/xfree86/os-support/bus: netbsdSbus.c Log Message: OFIOCNEXTPROP -> OFIOCGET now this can actually work To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 \ xsrc/external/mit/xorg-server/dist/hw/xfree86/os-support/bus/netbsdSbus.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/os-support/bus/netbsdSbus.c diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/os-support/bus/netbsdSbus.c:1.3 xsrc/external/mit/xorg-server/dist/hw/xfree86/os-support/bus/netbsdSbus.c:1.4 --- xsrc/external/mit/xorg-server/dist/hw/xfree86/os-support/bus/netbsdSbus.c:1.3 Wed Apr 13 05:14:00 2011 +++ xsrc/external/mit/xorg-server/dist/hw/xfree86/os-support/bus/netbsdSbus.c Wed Jun 18 16:49:46 2014 @@ -117,7 +117,7 @@ promGetProperty(const char *prop, int *l ofio.of_buf = of_buf; ofio.of_buflen = sizeof(of_buf); - if (ioctl(promFd, OFIOCNEXTPROP, &ofio) < 0) + if (ioctl(promFd, OFIOCGET, &ofio) < 0) return 0; of_buf[ofio.of_buflen] = '\0'; @@ -137,10 +137,9 @@ promGetBool(const char *prop) ofio.of_buf = of_buf; ofio.of_buflen = sizeof(of_buf); - if (ioctl(promFd, OFIOCNEXTPROP, &ofio) < 0) + if (ioctl(promFd, OFIOCGET, &ofio) < 0) return 0; - - if (!ofio.of_buflen) + if (ofio.of_buflen < 0) return 0; return 1; @@ -160,12 +159,15 @@ promSetNode(sbusPromNodePtr pnode) if (!pnode->node || pnode->node == -1) return -1; + if (pnode->cookie[0] & PROM_NODE_SIBLING) node = promGetSibling(pnode->cookie[1]); else node = promGetChild(pnode->cookie[1]); + if (pnode->node != node) return -1; + return 0; } @@ -197,14 +199,17 @@ sparcPromInit(void) promOpenCount++; return 0; } + promFd = open("/dev/openprom", O_RDONLY, 0); if (promFd == -1) return -1; + promRootNode = promGetSibling(0); if (!promRootNode) { sparcPromClose(); return -1; } + promIsP1275(); promOpenCount++; @@ -214,17 +219,19 @@ sparcPromInit(void) char * sparcPromGetProperty(sbusPromNodePtr pnode, const char *prop, int *lenp) { - if (promSetNode(pnode)) + if (promSetNode(pnode)) return NULL; - return promGetProperty(prop, lenp); + + return promGetProperty(prop, lenp); } int sparcPromGetBool(sbusPromNodePtr pnode, const char *prop) { - if (promSetNode(pnode)) + if (promSetNode(pnode)) return 0; - return promGetBool(prop); + + return promGetBool(prop); } static void @@ -242,14 +249,18 @@ promWalkAssignNodes(int node, int oldnod prop = promGetProperty("name", &len); if (!prop || len <= 0) break; + while ((*prop >= 'A' && *prop <= 'Z') || *prop == ',') prop++; + for (i = 0; sbusDeviceTable[i].devId; i++) if (!strcmp(prop, sbusDeviceTable[i].promName)) break; + devId = sbusDeviceTable[i].devId; - if (!devId) + if(!devId) break; + if (!sbus) { if (devId == SBUS_DEVICE_FFB) { /* @@ -261,13 +272,16 @@ promWalkAssignNodes(int node, int oldnod } else if (devId != SBUS_DEVICE_CG14) break; } + for (i = 0; i < 32; i++) { if (!devicePtrs[i] || devicePtrs[i]->devId != devId) continue; + if (devicePtrs[i]->node.node) { if ((devicePtrs[i]->node.cookie[0] & ~PROM_NODE_SIBLING) <= (flags & ~PROM_NODE_SIBLING)) continue; + for (j = i + 1, pNode = devicePtrs[i]->node; j < 32; j++) { if (!devicePtrs[j] || devicePtrs[j]->devId != devId) continue;