> From: Adam Jackson <a...@redhat.com> > Date: Sun, 23 Jan 2011 23:18:07 -0500 > > It's broken for devices with BARs above 4G, and the sysfs method should > work everywhere anyway. As a pleasant side effect, this fixes some > warnings: > > fbdevhw.c: In function 'fbdev_open_pci': > fbdevhw.c:333:4: warning: cast from pointer to integer of different size > fbdevhw.c:334:4: warning: cast from pointer to integer of different size > fbdevhw.c:336:4: warning: cast from pointer to integer of different size > fbdevhw.c:337:4: warning: cast from pointer to integer of different size > > Signed-off-by: Adam Jackson <a...@redhat.com>
That code should really be #ifdef __linux__ to make it obvious that it is OS-specific code. Anyway, if the Linux community is happy with it, I am as well ;). Reviewed-by: Mark Kettenis <kette...@openbsd.org> > --- > hw/xfree86/fbdevhw/fbdevhw.c | 56 +---------------------------------------- > 1 files changed, 2 insertions(+), 54 deletions(-) > > diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c > index a5b59e7..17fba36 100644 > --- a/hw/xfree86/fbdevhw/fbdevhw.c > +++ b/hw/xfree86/fbdevhw/fbdevhw.c > @@ -264,14 +264,7 @@ fbdev_open_pci(struct pci_device * pPci, char **namep) > { > struct fb_fix_screeninfo fix; > char filename[256]; > - int fd,i,j; > - > - > - /* There are two ways to that we can determine which fb device is > - * associated with this PCI device. The more modern way is to look in > - * the sysfs directory for the PCI device for a file named > - * "graphics/fb*" > - */ > + int fd, i; > > for (i = 0; i < 8; i++) { > sprintf(filename, > @@ -304,55 +297,10 @@ fbdev_open_pci(struct pci_device * pPci, char **namep) > } > } > > - > - /* The other way is to examine the resources associated with each fb > - * device and see if there is a match with the PCI device. This > technique > - * has some problems on certain mixed 64-bit / 32-bit architectures. > - * There is a flaw in the fb_fix_screeninfo structure in that it only > - * returns the low 32-bits of the address of the resources associated > with > - * a device. However, on a mixed architecture the base addresses of PCI > - * devices, even for 32-bit applications, may be higher than 0x0f0000000. > - */ > - > - for (i = 0; i < 8; i++) { > - sprintf(filename,"/dev/fb%d",i); > - if (-1 == (fd = open(filename,O_RDWR,0))) { > - xf86DrvMsg(-1, X_WARNING, > - "open %s: %s\n", filename, strerror(errno)); > - continue; > - } > - if (-1 == ioctl(fd,FBIOGET_FSCREENINFO,(void*)&fix)) { > - close(fd); > - continue; > - } > - for (j = 0; j < 6; j++) { > - const pciaddr_t res_start = pPci->regions[j].base_addr; > - const pciaddr_t res_end = res_start + pPci->regions[j].size; > - > - if ((0 != fix.smem_len && > - (pciaddr_t) fix.smem_start >= res_start && > - (pciaddr_t) fix.smem_start < res_end) || > - (0 != fix.mmio_len && > - (pciaddr_t) fix.mmio_start >= res_start && > - (pciaddr_t) fix.mmio_start < res_end)) > - break; > - } > - if (j == 6) { > - close(fd); > - continue; > - } > - if (namep) { > - *namep = xnfalloc(16); > - strncpy(*namep,fix.id,16); > - } > - return fd; > - } > - > if (namep) > *namep = NULL; > > - xf86DrvMsg(-1, X_ERROR, > - "Unable to find a valid framebuffer device\n"); > + xf86DrvMsg(-1, X_ERROR, "Unable to find a valid framebuffer device\n"); > return -1; > } > _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel