[PATCH] DDX/PCI: Check harder for primary PCI device
walter harms
wharms at bfs.de
Wed Aug 14 09:56:06 PDT 2013
Am 14.08.2013 18:17, schrieb Egbert Eich:
> Primary PCI devices are identified by checking for an 'PCIINFOCLASSES'
> device which is VGA and has access to the memory bars enabled.
> If there should be more than one device for which this is true
> redo the check and also check if IO resoures are also enabled,
> if this still doesn't turn up a unique result also check for
> the presence of a BIOS rom.
>
> Signed-off-by: Egbert Eich <eich at freedesktop.org>
> ---
> hw/xfree86/common/xf86pciBus.c | 47 +++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 44 insertions(+), 3 deletions(-)
>
> diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
> index 258988a..2303f90 100644
> --- a/hw/xfree86/common/xf86pciBus.c
> +++ b/hw/xfree86/common/xf86pciBus.c
> @@ -134,9 +134,50 @@ xf86PciProbe(void)
> primaryBus.id.pci = info;
> }
> else {
> - xf86Msg(X_NOTICE,
> - "More than one possible primary device found\n");
> - primaryBus.type ^= (BusType) (-1);
> + /*
> + * Ok, we found more than one possible primary device
> + * with this heuristic. Now also check if IO is enabled.
> + */
> + int j;
> +
> + primaryBus.type = BUS_NONE;
> + for (j = 0; j < num; j++) {
> + info = xf86PciVideoInfo[j];
> + pci_device_cfg_read_u16(info, & command, 4);
> +
> + if ((command & PCI_CMD_MEM_ENABLE)
> + && (command & PCI_CMD_IO_ENABLE)
> + && (IS_VGA(info->device_class))) {
> + if (primaryBus.type == BUS_NONE) {
> + primaryBus.type = BUS_PCI;
> + primaryBus.id.pci = info;
> + } else {
> + primaryBus.type = BUS_NONE;
> + for (j = 0; j < num; j++) {
> + info = xf86PciVideoInfo[j];
> + pci_device_cfg_read_u16(info, &command, 4);
> +
> + if ((command & PCI_CMD_MEM_ENABLE)
> + && (command & PCI_CMD_IO_ENABLE)
> + && (IS_VGA(info->device_class))
> + && info->rom_size) {
> + if (primaryBus.type == BUS_NONE) {
> + primaryBus.type = BUS_PCI;
> + primaryBus.id.pci = info;
> + } else {
> + xf86Msg(X_NOTICE,
> + "More than one possible "
> + "primary device found\n");
> + primaryBus.type ^= (BusType)(-1);
> + break;
> + }
> + }
> + }
> + break;
> + }
> + }
> + }
> + break;
> }
> }
> }
Is it possible to but that into a function and save a few indentlevel this way ?
re,
wh
More information about the xorg-devel
mailing list