> 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

Reply via email to